Files
tcell-widgets/wdgt_asciiarttext.go
2025-10-26 08:47:07 -05:00

431 lines
48 KiB
Go
Raw Blame History

/*
Copyright © Brian Buller <brian@bullercodeworks.com>
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in
all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
*/
package widgets
import (
"fmt"
"time"
"unicode"
"github.com/gdamore/tcell"
)
// ArtWidget displays it's text as ascii art.
type ArtWidget struct {
id string
style tcell.Style
x, y int
w, h int
buffer *Buffer
active bool
visible bool
focusable bool
font string
text string
keyMap *KeyMap
allFonts []ArtWidgetFont
currFont ArtWidgetFont
logger func(string, ...any)
}
var _ Widget = (*ArtWidget)(nil)
func NewArtWidget(id string, st tcell.Style) *ArtWidget {
ret := &ArtWidget{}
ret.Init(id, st)
return ret
}
func (w *ArtWidget) Init(id string, st tcell.Style) {
w.id = id
w.visible = true
w.style = st
w.keyMap = BlankKeyMap()
w.initFonts()
}
func (w *ArtWidget) Id() string { return w.id }
func (w *ArtWidget) HandleResize(ev *tcell.EventResize) { w.w, w.h = ev.Size() }
func (w *ArtWidget) GetKeyMap() *KeyMap { return w.keyMap }
func (w *ArtWidget) SetKeyMap(km *KeyMap) { w.keyMap = km }
func (w *ArtWidget) HandleKey(ev *tcell.EventKey) bool { return false }
func (w *ArtWidget) HandleTime(ev *tcell.EventTime) {}
func (w *ArtWidget) Draw(screen tcell.Screen) {
if !w.visible {
return
}
w.buffer.Draw(w.x, w.y, screen)
}
func (w *ArtWidget) Active() bool { return w.active }
func (w *ArtWidget) SetActive(a bool) { w.active = a }
func (w *ArtWidget) Visible() bool { return w.visible }
func (w *ArtWidget) SetVisible(v bool) { w.visible = v }
func (w *ArtWidget) Focusable() bool { return w.focusable }
func (w *ArtWidget) SetFocusable(t bool) { w.focusable = t }
func (w *ArtWidget) SetX(x int) { w.x = x }
func (w *ArtWidget) SetY(y int) { w.y = y }
func (w *ArtWidget) GetX() int { return w.x }
func (w *ArtWidget) GetY() int { return w.y }
func (w *ArtWidget) GetPos() Coord { return Coord{X: w.x, Y: w.y} }
func (w *ArtWidget) SetPos(pos Coord) { w.x, w.y = pos.X, pos.Y }
func (w *ArtWidget) SetSize(size Coord) { w.w, w.h = size.X, size.Y }
func (w *ArtWidget) SetW(wd int) { w.w = wd }
func (w *ArtWidget) SetH(h int) { w.h = h }
func (w *ArtWidget) GetW() int { return w.w }
func (w *ArtWidget) GetH() int { return w.h }
func (w *ArtWidget) WantW() int { return w.buffer.Width() }
func (w *ArtWidget) WantH() int { return w.buffer.Height() }
func (w *ArtWidget) MinW() int { return w.buffer.Width() }
func (w *ArtWidget) MinH() int { return w.buffer.Height() }
func (w *ArtWidget) SetText(txt string) {
w.text = txt
w.buildBuffer()
}
func (w *ArtWidget) GetText() string { return w.text }
func (w *ArtWidget) SetFont(fnt string) {
w.font = fnt
w.buildBuffer()
}
func (w *ArtWidget) GetFont() string { return w.font }
func (w *ArtWidget) buildBuffer() {
b := NewBuffer()
x, y := w.x, w.y
chX := x
for _, ch := range w.text {
if ch == '\n' {
x = w.x
y = b.Height() + 1
continue
}
rs := w.getRune(ch)
var maxX int
for rY, ln := range rs {
for rX, bt := range ln {
b.SetCell(chX+rX, y+rY, *NewCell(bt, w.style))
if chX+rX > maxX {
maxX = chX + rX
}
}
}
chX = maxX + 1
}
w.buffer = b
}
func (w *ArtWidget) getRune(r rune) [][]rune { return w.currFont.GetRune(r) }
func (w *ArtWidget) initFonts() {
f := NewArtWidgetFont("miniwi")
f.SetRune('a', [][]rune{{' ', ' '}, {'▀', '▌'}, {'█', '▌'}, {' ', ' '}})
f.SetRune('b', [][]rune{{'▌', ' '}, {'▛', '▌'}, {'▙', '▌'}, {' ', ' '}})
f.SetRune('c', [][]rune{{' ', ' '}, {'▛', '▘'}, {'▙', '▖'}, {' ', ' '}})
f.SetRune('d', [][]rune{{' ', '▌'}, {'▛', '▌'}, {'▙', '▌'}, {' ', ' '}})
f.SetRune('e', [][]rune{{' ', ' '}, {'█', '▌'}, {'▙', '▖'}, {' ', ' '}})
f.SetRune('f', [][]rune{{'▐', '▘'}, {'▜', '▘'}, {'▐', ' '}, {' ', ' '}})
f.SetRune('g', [][]rune{{' ', ' '}, {'▛', '▌'}, {'▙', '▌'}, {'▄', '▌'}})
f.SetRune('h', [][]rune{{'▌', ' '}, {'▛', '▌'}, {'▌', '▌'}, {' ', ' '}})
f.SetRune('i', [][]rune{{'▘'}, {'▌'}, {'▌'}, {' '}})
f.SetRune('j', [][]rune{{' ', '▘'}, {' ', '▌'}, {' ', '▌'}, {'▙', '▌'}})
f.SetRune('k', [][]rune{{'▌', ' '}, {'▙', '▘'}, {'▛', '▖'}, {' ', ' '}})
f.SetRune('l', [][]rune{{'▜', ' '}, {'▐', ' '}, {'▐', '▖'}, {' ', ' '}})
f.SetRune('m', [][]rune{{' ', ' ', ' '}, {'▛', '▛', '▌'}, {'▌', '▌', '▌'}, {' ', ' ', ' '}})
f.SetRune('n', [][]rune{{' ', ' '}, {'▛', '▌'}, {'▌', '▌'}, {' ', ' '}})
f.SetRune('o', [][]rune{{' ', ' '}, {'▛', '▌'}, {'▙', '▌'}, {' ', ' '}})
f.SetRune('p', [][]rune{{' ', ' '}, {'▛', '▌'}, {'▙', '▌'}, {'▌', ' '}})
f.SetRune('q', [][]rune{{' ', ' '}, {'▛', '▌'}, {'▙', '▌'}, {' ', '▌'}})
f.SetRune('r', [][]rune{{' ', ' '}, {'▛', '▘'}, {'▌', ' '}, {' ', ' '}})
f.SetRune('s', [][]rune{{' ', ' '}, {'▛', '▘'}, {'▄', '▌'}, {' ', ' '}})
f.SetRune('t', [][]rune{{'▗', ' '}, {'▜', '▘'}, {'▐', '▖'}, {' ', ' '}})
f.SetRune('u', [][]rune{{' ', ' '}, {'▌', '▌'}, {'▙', '▌'}, {' ', ' '}})
f.SetRune('v', [][]rune{{' ', ' '}, {'▌', '▌'}, {'▚', '▘'}, {' ', ' '}})
f.SetRune('w', [][]rune{{' ', ' ', ' '}, {'▌', '▌', '▌'}, {'▚', '▚', '▘'}, {' ', ' ', ' '}})
f.SetRune('x', [][]rune{{' ', ' '}, {'▚', '▘'}, {'▞', '▖'}, {' ', ' '}})
f.SetRune('y', [][]rune{{' ', ' '}, {'▌', '▌'}, {'▙', '▌'}, {'▄', '▌'}})
f.SetRune('z', [][]rune{{' ', ' '}, {'▀', '▌'}, {'▙', '▖'}, {' ', ' '}})
f.SetRune('A', [][]rune{{'▄', '▖'}, {'▌', '▌'}, {'▛', '▌'}, {' ', ' '}})
f.SetRune('B', [][]rune{{'▄', ' '}, {'▙', '▘'}, {'▙', '▘'}, {' ', ' '}})
f.SetRune('C', [][]rune{{'▄', '▖'}, {'▌', ' '}, {'▙', '▖'}, {' ', ' '}})
f.SetRune('D', [][]rune{{'▄', ' '}, {'▌', '▌'}, {'▙', '▘'}, {' ', ' '}})
f.SetRune('E', [][]rune{{'▄', '▖'}, {'▙', '▖'}, {'▙', '▖'}, {' ', ' '}})
f.SetRune('F', [][]rune{{'▄', '▖'}, {'▙', '▖'}, {'▌', ' '}, {' ', ' '}})
f.SetRune('G', [][]rune{{'▄', '▖'}, {'▌', ' '}, {'▙', '▌'}, {' ', ' '}})
f.SetRune('H', [][]rune{{'▖', '▖'}, {'▙', '▌'}, {'▌', '▌'}, {' ', ' '}})
f.SetRune('I', [][]rune{{'▄', '▖'}, {'▐', ' '}, {'▟', '▖'}, {' ', ' '}})
f.SetRune('J', [][]rune{{' ', '▖'}, {' ', '▌'}, {'▙', '▌'}, {' ', ' '}})
f.SetRune('K', [][]rune{{'▖', '▖'}, {'▙', '▘'}, {'▌', '▌'}, {' ', ' '}})
f.SetRune('L', [][]rune{{'▖', ' '}, {'▌', ' '}, {'▙', '▖'}, {' ', ' '}})
f.SetRune('M', [][]rune{{'▖', ' ', ' ', '▖'}, {'▛', '▖', '▞', '▌'}, {'▌', '▝', ' ', '▌'}, {' ', ' ', ' ', ' '}})
f.SetRune('N', [][]rune{{'▖', ' ', '▖'}, {'▛', '▖', '▌'}, {'▌', '▝', '▌'}, {' ', ' ', ' '}})
f.SetRune('O', [][]rune{{'▄', '▖'}, {'▌', '▌'}, {'▙', '▌'}, {' ', ' '}})
f.SetRune('P', [][]rune{{'▄', '▖'}, {'▙', '▌'}, {'▌', ' '}, {' ', ' '}})
f.SetRune('Q', [][]rune{{'▄', '▖'}, {'▌', '▌'}, {'█', '▌'}, {' ', '▘'}})
f.SetRune('R', [][]rune{{'▄', '▖'}, {'▙', '▘'}, {'▌', '▌'}, {' ', ' '}})
f.SetRune('S', [][]rune{{'▄', '▖'}, {'▚', ' '}, {'▄', '▌'}, {' ', ' '}})
f.SetRune('T', [][]rune{{'▄', '▖'}, {'▐', ' '}, {'▐', ' '}, {' ', ' '}})
f.SetRune('U', [][]rune{{'▖', '▖'}, {'▌', '▌'}, {'▙', '▌'}, {' ', ' '}})
f.SetRune('V', [][]rune{{'▖', '▖'}, {'▌', '▌'}, {'▚', '▘'}, {' ', ' '}})
f.SetRune('W', [][]rune{{'▖', ' ', ' ', '▖'}, {'▌', '▞', '▖', '▌'}, {'▛', ' ', '▝', '▌'}, {' ', ' ', ' ', ' '}})
f.SetRune('X', [][]rune{{'▖', '▖'}, {'▚', '▘'}, {'▌', '▌'}, {' ', ' '}})
f.SetRune('Y', [][]rune{{'▖', '▖'}, {'▌', '▌'}, {'▐', ' '}, {' ', ' '}})
f.SetRune('Z', [][]rune{{'▄', '▖'}, {'▗', '▘'}, {'▙', '▖'}, {' ', ' '}})
f.SetRune(' ', [][]rune{{' ', ' '}, {' ', ' '}, {' ', ' '}, {' ', ' '}})
w.allFonts = append(w.allFonts, *f)
w.currFont = *f
}
func (w *ArtWidget) SetLogger(l func(string, ...any)) { w.logger = l }
func (w *ArtWidget) Log(txt string, args ...any) {
if w.logger != nil {
txt = fmt.Sprintf("%s:%s", time.Now().Format(time.TimeOnly), txt)
w.logger(txt, args...)
}
}
type ArtWidgetFont struct {
name string
runes map[rune][][]rune
}
func NewArtWidgetFont(nm string) *ArtWidgetFont {
return &ArtWidgetFont{
name: nm,
runes: make(map[rune][][]rune),
}
}
func (f *ArtWidgetFont) HasLower() bool {
// Naively just check if the map has an 'a' element
_, ok := f.runes['a']
return ok
}
func (f *ArtWidgetFont) SetRune(r rune, bts [][]rune) { f.runes[r] = bts }
func (f *ArtWidgetFont) GetRune(r rune) [][]rune {
if bts, ok := f.runes[r]; ok {
return bts
}
if bts, ok := f.runes[unicode.ToUpper(r)]; ok {
return bts
}
if bts, ok := f.runes[unicode.ToLower(r)]; ok {
return bts
}
return [][]rune{}
}
func (f *ArtWidgetFont) RuneWidth(r rune) int {
bts := f.GetRune(r)
if len(bts) > 0 {
return len(bts[0])
}
return 0
}
func (f *ArtWidgetFont) RuneHeight(r rune) int {
return len(f.GetRune(r))
}
/*
# Big
## Uppercase
____ _____ _____ ______ ______ _____ _ _ _____ _ _ __ __ _ _ ____ _____ ____ _____ _____ _______ _ ___ ____ ____ ____ ________
/\ | _ \ / ____| __ \| ____| ____/ ____| | | |_ _| | | | | \/ | \ | |/ __ \| __ \ / __ \| __ \ / ____|__ __| | | \ \ / /\ \ / /\ \ / /\ \ / /___ /
/ \ | |_) | | | | | | |__ | |__ | | __| |__| | | | | | | | \ / | \| | | | | |__) | | | | |__) | (___ | | | | | |\ \ / / \ \ /\ / / \ V / \ \_/ / / /
/ /\ \ | _ <| | | | | | __| | __|| | |_ | __ | | | _ | | | | |\/| | . ` | | | | ___/| | | | _ / \___ \ | | | | | | \ \/ / \ \/ \/ / > < \ / / /
/ ____ \| |_) | |____| |__| | |____| | | |__| | | | |_| || |__| | |____| | | | |\ | |__| | | | |__| | | \ \ ____) | | | | |__| | \ / \ /\ / / . \ | | / /__
/_/ \_\____/ \_____|_____/|______|_| \_____|_| |_|_____\____/|______|_| |_|_| \_|\____/|_| \___\_\_| \_\_____/ |_| \____/ \/ \/ \/ /_/ \_\ |_| /_____|
## Lowercase
_ _ __ _ _ _ _ _ _
| | | | / _| | | (_|_) | | | | |
__ _| |__ ___ __| | ___| |_ __ _| |__ _ _| | _| |_ __ ___ _ __ ___ _ __ __ _ _ __ ___| |_ _ ___ ____ ____ ___ _ ____
/ _` | '_ \ / __/ _` |/ _ \ _/ _` | '_ \| | | |/ / | '_ ` _ \| '_ \ / _ \| '_ \ / _` | '__/ __| __| | | \ \ / /\ \ /\ / /\ \/ / | | |_ /
| (_| | |_) | (_| (_| | __/ || (_| | | | | | | <| | | | | | | | | | (_) | |_) | (_| | | \__ \ |_| |_| |\ V / \ V V / > <| |_| |/ /
\__,_|_.__/ \___\__,_|\___|_| \__, |_| |_|_| |_|\_\_|_| |_| |_|_| |_|\___/| .__/ \__, |_| |___/\__|\__,_| \_/ \_/\_/ /_/\_\\__, /___|
__/ | _/ | | | | | __/ |
|___/ |__/ |_| |_| |___/
# BlurVision
░▒▓██████▓▒░░▒▓███████▓▒░ ░▒▓██████▓▒░░▒▓███████▓▒░░▒▓████████▓▒░▒▓████████▓▒░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓██████████████▓▒░░▒▓███████▓▒░ ░▒▓██████▓▒░░▒▓███████▓▒░ ░▒▓██████▓▒░░▒▓███████▓▒░ ░▒▓███████▓▒░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓██▓▒░
░▒▓████████▓▒░▒▓███████▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓██████▓▒░ ░▒▓██████▓▒░░▒▓█▓▒▒▓███▓▒░▒▓████████▓▒░▒▓█▓▒░ ░▒▓█▓▒░▒▓███████▓▒░░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░ ░▒▓██████▓▒░ ░▒▓██▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓██▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▓<E29693>▓▒░ ░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓█▓▒░
░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░ ░▒▓██████▓▒░░▒▓███████▓▒░░▒▓████████▓▒░▒▓█▓▒░ ░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓████████▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓█▓▒░░▒▓█▓▒░░▒▓██████▓▒░░▒▓█▓▒░ ░▒▓██████▓▒░░▒▓█▓▒░░▒▓█▓▒░▒▓███████▓▒░ ░▒▓█▓▒░ ░▒▓██████▓▒░ ░▒▓██▓▒░ ░▒▓█████████████▓▒░░▒▓█▓▒░░▒▓█▓▒░ ░▒▓█▓▒░ ░▒▓████████▓▒░
░▒▓█▓▒░
░▒▓██▓▒░
# Bulbhead
__ ____ ___ ____ ____ ____ ___ _ _ ____ ____ _ _ __ __ __ _ _ _____ ____ _____ ____ ___ ____ __ __ _ _ _ _ _ _ _ _ ____
/__\ ( _ \ / __)( _ \( ___)( ___)/ __)( )_( )(_ _) (_ _)( )/ )( ) ( \/ )( \( )( _ )( _ \( _ )( _ \/ __)(_ _)( )( )( \/ )( \/\/ )( \/ )( \/ )(_ )
/(__)\ ) _ <( (__ )(_) ))__) )__)( (_-. ) _ ( _)(_ .-_)( ) ( )(__ ) ( ) ( )(_)( )___/ )(_)( ) /\__ \ )( )(__)( \ / ) ( ) ( \ / / /_
(__)(__)(____/ \___)(____/(____)(__) \___/(_) (_)(____)\____) (_)\_)(____)(_/\/\_)(_)\_)(_____)(__) (___/\\(_)\_)(___/ (__) (______) \/ (__/\__)(_/\_) (__) (____)
# Crawford2
____ ____ __ ___ ___ _____ ____ __ __ ____ ____ __ _ _ ___ ___ ____ ___ ____ ___ ____ _____ ______ __ __ __ __ __ __ __ __ __ __ _____
/ || \ / ]| \ / _]| | / || | || || || |/ ]| | | | || \ / \ | \ / \ | \ / ___/| || | || | || |__| || | || | || |
| o || o ) / / | \ / [_ | __|| __|| | | | | |__ || ' / | | | _ _ || _ || || o ) || D )( \_ | || | || | || | | || | || | ||__/ |
| || |/ / | D || _]| |_ | | || _ | | | __| || \ | |___ | \_/ || | || O || _/| Q || / \__ ||_| |_|| | || | || | | ||_ _|| ~ || __|
| _ || O / \_ | || [_ | _] | |_ || | | | |/ | || \| || | || | || || | | || \ / \ | | | | : || : || ` ' || ||___, || / |
| | || \ || || || | | || | | | |\ ` || . || || | || | || || | | || . \ \ | | | | | \ / \ / | | || || |
|__|__||_____|\____||_____||_____||__| |___,_||__|__||____|\____||__|\_||_____||___|___||__|__| \___/ |__| \__,_||__|\_| \___| |__| \__,_| \_/ \_/\_/ |__|__||____/ |_____|
# Doom
## Uppercase
___ ______ ___________ ___________ _____ _ _ _____ ___ _ __ _ ___ ___ _ _ ___________ ___________ _____ _____ _ _ _ _ _ ___ ____ ________
/ _ \ | ___ \/ __ \ _ \ ___| ___| __ \| | | |_ _| |_ | | / /| | | \/ || \ | | _ | ___ \ _ | ___ \/ ___|_ _| | | | | | || | | \ \ / /\ \ / /___ /
/ /_\ \| |_/ /| / \/ | | | |__ | |_ | | \/| |_| | | | | | |/ / | | | . . || \| | | | | |_/ / | | | |_/ /\ `--. | | | | | | | | || | | |\ V / \ V / / /
| _ || ___ \| | | | | | __|| _| | | __ | _ | | | | | \ | | | |\/| || . ` | | | | __/| | | | / `--. \ | | | | | | | | || |/\| |/ \ \ / / /
| | | || |_/ /| \__/\ |/ /| |___| | | |_\ \| | | |_| |_/\__/ / |\ \| |____| | | || |\ \ \_/ / | \ \/' / |\ \ /\__/ / | | | |_| \ \_/ /\ /\ / /^\ \ | | ./ /___
\_| |_/\____/ \____/___/ \____/\_| \____/\_| |_/\___/\____/\_| \_/\_____/\_| |_/\_| \_/\___/\_| \_/\_\_| \_|\____/ \_/ \___/ \___/ \/ \/\/ \/ \_/ \_____/
## Lowercase
_ _ __ _ _ _ _ _ _
| | | | / _| | | (_|_) | | | | |
__ _| |__ ___ __| | ___| |_ __ _| |__ _ _| | _| |_ __ ___ _ __ ___ _ __ __ _ _ __ ___| |_ _ ___ ____ ____ ___ _ ____
/ _` | '_ \ / __/ _` |/ _ \ _/ _` | '_ \| | | |/ / | '_ ` _ \| '_ \ / _ \| '_ \ / _` | '__/ __| __| | | \ \ / /\ \ /\ / /\ \/ / | | |_ /
| (_| | |_) | (_| (_| | __/ || (_| | | | | | | <| | | | | | | | | | (_) | |_) | (_| | | \__ \ |_| |_| |\ V / \ V V / > <| |_| |/ /
\__,_|_.__/ \___\__,_|\___|_| \__, |_| |_|_| |_|\_\_|_| |_| |_|_| |_|\___/| .__/ \__, |_| |___/\__|\__,_| \_/ \_/\_/ /_/\_\\__, /___|
__/ | _/ | | | | | __/ |
|___/ |__/ |_| |_| |___/
# Epic
## Uppercase
_______ ______ _______ ______ _______ _______ _______ __________________ _ _ _______ _ _______ _______ _______ _______ _______ _________ _______
( ___ )( ___ \ ( ____ \( __ \ ( ____ \( ____ \( ____ \|\ /|\__ __/\__ _/| \ /\( \ ( )( ( /|( ___ )( ____ )( ___ )( ____ )( ____ \\__ __/|\ /||\ /||\ /||\ /||\ /|/ ___ )
| ( ) || ( ) )| ( \/| ( \ )| ( \/| ( \/| ( \/| ) ( | ) ( ) ( | \ / /| ( | () () || \ ( || ( ) || ( )|| ( ) || ( )|| ( \/ ) ( | ) ( || ) ( || ) ( |( \ / )( \ / )\/ ) |
| (___) || (__/ / | | | | ) || (__ | (__ | | | (___) | | | | | | (_/ / | | | || || || \ | || | | || (____)|| | | || (____)|| (_____ | | | | | || | | || | _ | | \ (_) / \ (_) / / )
| ___ || __ ( | | | | | || __) | __) | | ____ | ___ | | | | | | _ ( | | | |(_)| || (\ \) || | | || _____)| | | || __)(_____ ) | | | | | |( ( ) )| |( )| | ) _ ( \ / / /
| ( ) || ( \ \ | | | | ) || ( | ( | | \_ )| ( ) | | | | | | ( \ \ | | | | | || | \ || | | || ( | | /\| || (\ ( ) | | | | | | | \ \_/ / | || || | / ( ) \ ) ( / /
| ) ( || )___) )| (____/\| (__/ )| (____/\| ) | (___) || ) ( |___) (___|\_) ) | / \ \| (____/\| ) ( || ) \ || (___) || ) | (_\ \ || ) \ \__/\____) | | | | (___) | \ / | () () |( / \ ) | | / (_/\
|/ \||/ \___/ (_______/(______/ (_______/|/ (_______)|/ \|\_______/(____/ |_/ \/(_______/|/ \||/ )_)(_______)|/ (____\/_)|/ \__/\_______) )_( (_______) \_/ (_______)|/ \| \_/ (_______/
# Graceful
__ ____ ___ ____ ____ ____ ___ _ _ __ __ __ _ __ _ _ __ _ __ ____ __ ____ ____ ____ _ _ _ _ _ _ _ _ _ _ ____
/ _\ ( _ \ / __)( \( __)( __)/ __)/ )( \( ) _( )( / )( ) ( \/ )( ( \ / \( _ \ / \ ( _ \/ ___)(_ _)/ )( \/ )( \/ )( \( \/ )( \/ )(__ )
/ \ ) _ (( (__ ) D ( ) _) ) _)( (_ \) __ ( )( / \) \ ) ( / (_/\/ \/ \/ /( O )) __/( O ) ) /\___ \ )( ) \/ (\ \/ /\ /\ / ) ( ) / / _/
\_/\_/(____/ \___)(____/(____)(__) \___/\_)(_/(__)\____/(__\_)\____/\_)(_/\_)__) \__/(__) \__\)(__\_)(____/ (__) \____/ \__/ (_/\_)(_/\_)(__/ (____)
# Graffiti
## Uppercase
_____ ___________________ ________ ______________________________ ___ ___ .___ ____.____ __.____ _____ _______ ________ __________________ __________ ________________________ _______ ______ ______ ________.___.__________
/ _ \\______ \_ ___ \\______ \ \_ _____/\_ _____/ _____/ / | \| | | | |/ _| | / \ \ \ \_____ \\______ \_____ \\______ \/ _____/\__ ___/ | \ \ / / \ / \ \/ /\__ | |\____ /
/ /_\ \| | _/ \ \/ | | \ | __)_ | __)/ \ ___/ ~ \ | | | < | | / \ / \ / | \ / | \| ___// / \ \| _/\_____ \ | | | | /\ Y /\ \/\/ /\ / / | | / /
/ | \ | \ \____| ` \| \ | \ \ \_\ \ Y / /\__| | | \| |___/ Y \/ | \/ | \ | / \_/. \ | \/ \ | | | | / \ / \ / / \ \____ | / /_
\____|__ /______ /\______ /_______ /_______ / \___ / \______ /\___|_ /|___\________|____|__ \_______ \____|__ /\____|__ /\_______ /____| \_____\ \_/____|_ /_______ / |____| |______/ \___/ \__/\ / /___/\ \ / ______|/_______ \
\/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \/ \__> \/ \/ \/ \_/ \/ \/
## Lowercase
___. .___ _____ .__ .__ __ __ .__ __
_____ \_ |__ ____ __| _/_____/ ____\____ | |__ |__| |__| | _| | _____ ____ ____ ______ _____________ _______/ |_ __ _____ ____ _ _____ ______.__.________
\__ \ | __ \_/ ___\ / __ |/ __ \ __\/ ___\| | \| | | | |/ / | / \ / \ / _ \\____ \ / ____/\_ __ \/ ___/\ __\ | \ \/ /\ \/ \/ /\ \/ < | |\___ /
/ __ \| \_\ \ \___/ /_/ \ ___/| | / /_/ > Y \ | | | <| |_| Y Y \ | ( <_> ) |_> >< <_| | | | \/\___ \ | | | | /\ / \ / > < \___ | / /
(____ /___ /\___ >____ |\___ >__| \___ /|___| /__/\__| |__|_ \____/__|_| /___| /\____/| __/ \__ | |__| /____ > |__| |____/ \_/ \/\_/ /__/\_ \/ ____|/_____ \
\/ \/ \/ \/ \/ /_____/ \/ \______| \/ \/ \/ |__| |__| \/ \/\/ \/
# miniwi
## Uppercase
▄▖▄ ▄▖▄ ▄▖▄▖▄▖▖▖▄▖ ▖▖▖▖ ▖ ▖▖ ▖▄▖▄▖▄▖▄▖▄▖▄▖▖▖▖▖▖ ▖▖▖▖▖▄▖
▌▌▙▘▌ ▌▌▙▖▙▖▌ ▙▌▐ ▌▙▘▌ ▛▖▞▌▛▖▌▌▌▙▌▌▌▙▘▚ ▐ ▌▌▌▌▌▞▖▌▚▘▌▌▗▘
▛▌▙▘▙▖▙▘▙▖▌ ▙▌▌▌▟▖▙▌▌▌▙▖▌▝ ▌▌▝▌▙▌▌ █▌▌▌▄▌▐ ▙▌▚▘▛ ▝▌▌▌▐ ▙▖
## Lowercase
▌ ▌ ▐▘ ▌ ▘ ▘▌ ▜ ▗
▀▌▛▌▛▘▛▌█▌▜▘▛▌▛▌▌ ▌▙▘▐ ▛▛▌▛▌▛▌▛▌▛▌▛▘▛▘▜▘▌▌▌▌▌▌▌▚▘▌▌▀▌
█▌▙▌▙▖▙▌▙▖▐ ▙▌▌▌▌ ▌▛▖▐▖▌▌▌▌▌▙▌▙▌▙▌▌ ▄▌▐▖▙▌▚▘▚▚▘▞▖▙▌▙▖
▄▌ ▙▌ ▌ ▌ ▄▌
# Shaded Blocky
░░ ░░░ ░░░░ ░░░ ░░░ ░░ ░░░ ░░░ ░░░░ ░░ ░░ ░░ ░░░░ ░░ ░░░░░░░░ ░░░░ ░░ ░░░ ░░░ ░░░ ░░░░ ░░░ ░░░░ ░░░ ░░ ░░░░ ░░ ░░░░ ░░ ░░░░ ░░ ░░░░ ░░ ░░░░ ░░ ░
▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒ ▒▒▒ ▒▒▒ ▒▒▒▒▒▒▒▒ ▒▒ ▒▒ ▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒▒▒▒ ▒▒▒▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒ ▒ ▒▒▒ ▒▒ ▒▒▒▒ ▒▒ ▒▒▒▒▒▒▒▒ ▒▒
▓ ▓▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓▓▓ ▓▓ ▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓ ▓▓▓▓▓ ▓▓▓▓▓▓▓▓▓▓▓ ▓▓ ▓▓▓▓▓ ▓▓▓▓▓▓▓▓ ▓▓ ▓ ▓ ▓▓ ▓▓▓▓ ▓▓ ▓▓▓ ▓▓ ▓ ▓▓ ▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓ ▓▓▓▓ ▓▓▓ ▓▓ ▓▓▓ ▓▓▓▓ ▓▓▓▓▓▓ ▓▓▓▓▓▓▓ ▓▓▓▓
█ ██ ████ ██ ████ ██ ████ ██ ████████ ████████ ████ ██ ████ █████ █████ ████ ██ ███ ███ ████████ █ █ ██ ██ ██ ████ ██ ████████ ███ ██ ███ █████████ █████ █████ ████ ████ ████ ██ ███ ██ ██████ ██████ ██████
█ ████ ██ ████ ███ ███ ██ █████████ ███ ████ ██ ███ ███ ████ ██ ██ ████ ██ ███ ███ ███ █████████ █ █ ████ ███ ██████ ██████ ██████ █████ ████ ██ ████ █████ █████ █
# Slant
## Uppercase
___ ____ __________ ____________________ ______ ____ __ __ __ ____ ______ ____ ____ ____ _____________ ___ ___ ___ ____ _______
/ | / __ )/ ____/ __ \/ ____/ ____/ ____/ / / / _/ / / //_// / / |/ / | / / __ \/ __ \/ __ \ / __ \/ ___/_ __/ / / / | / / | / / |/ /\ \/ /__ /
/ /| | / __ / / / / / / __/ / /_ / / __/ /_/ // /__ / / ,< / / / /|_/ / |/ / / / / /_/ / / / / / /_/ /\__ \ / / / / / /| | / /| | /| / /| / \ / / /
/ ___ |/ /_/ / /___/ /_/ / /___/ __/ / /_/ / __ // // /_/ / /| |/ /___/ / / / /| / /_/ / ____/ /_/ / / _, _/___/ // / / /_/ / | |/ / | |/ |/ // | / / / /__
/_/ |_/_____/\____/_____/_____/_/ \____/_/ /_/___/\____/_/ |_/_____/_/ /_/_/ |_/\____/_/ \___\_\/_/ |_|/____//_/ \____/ |___/ |__/|__//_/|_| /_/ /____/
## Lowercase
__ __ ____ __ _ _ __ __ __
____ _/ /_ _________/ /__ / __/___ _/ /_ (_) (_) /__/ /___ ___ ____ ____ ____ ____ ___________/ /___ ___ ___ ___ ____ ______
/ __ `/ __ \/ ___/ __ / _ \/ /_/ __ `/ __ \/ / / / //_/ / __ `__ \/ __ \/ __ \/ __ \/ __ `/ ___/ ___/ __/ / / / | / / | /| / / |/_/ / / /_ /
/ /_/ / /_/ / /__/ /_/ / __/ __/ /_/ / / / / / / / ,< / / / / / / / / / / /_/ / /_/ / /_/ / / (__ ) /_/ /_/ /| |/ /| |/ |/ /> </ /_/ / / /_
\__,_/_.___/\___/\__,_/\___/_/ \__, /_/ /_/_/_/ /_/|_/_/_/ /_/ /_/_/ /_/\____/ .___/\__, /_/ /____/\__/\__,_/ |___/ |__/|__/_/|_|\__, / /___/
/____/ /___/ /_/ /_/ /____/
# Tmplr
## Uppercase
┏┓┳┓┏┓┳┓┏┓┏┓┏┓┓┏┳┏┳┓┏┓┓ ┳┳┓┳┓┏┓┏┓┏┓┳┓┏┓┏┳┓┳┳┓┏┓ ┏┏┓┏┓┓┏┏┓
┣┫┣┫┃ ┃┃┣ ┣ ┃┓┣┫┃ ┃┃┫ ┃ ┃┃┃┃┃┃┃┃┃┃┃┣┫┗┓ ┃ ┃┃┃┃┃┃┃ ┃┃ ┗┫┏┛
┛┗┻┛┗┛┻┛┗┛┻ ┗┛┛┗┻┗┛┛┗┛┗┛┛ ┗┛┗┗┛┣┛┗┻┛┗┗┛ ┻ ┗┛┗┛┗┻┛┗┛┗┛┗┛┗┛
## Lowercase
┓ ┓ ┏ ┓ ••┓ ┓
┏┓┣┓┏┏┫┏┓╋┏┓┣┓┓┓┃┏┃┏┳┓┏┓┏┓┏┓┏┓┏┓┏╋┓┏┓┏┓┏┏┓┏┓┏┓
┗┻┗┛┗┗┻┗ ┛┗┫┛┗┗┃┛┗┗┛┗┗┛┗┗┛┣┛┗┫┛ ┛┗┗┻┗┛┗┻┛┛┗┗┫┗
┛ ┛ ┛ ┗ ┛
# Bloody
▄▄▄ ▄▄▄▄ ▄████▄ ▓█████▄ ▓█████ █████▒ ▄████ ██░ ██ ██▓ ▄▄▄██▀▀▀██ ▄█▀ ██▓ ███▄ ▄███▓ ███▄ █ ▒█████ ██▓███ █████ ██▀███ ██████ ▄▄▄█████▓ █ ██ ██▒ █▓ █ █░▒██ ██▒▓██ ██▓▒███████▒
▒████▄ ▓█████▄ ▒██▀ ▀█ ▒██▀ ██▌▓█ ▀ ▓██ ▒ ██▒ ▀█▒▓██░ ██▒▓██▒ ▒██ ██▄█▒ ▓██▒ ▓██▒▀█▀ ██▒ ██ ▀█ █ ▒██▒ ██▒▓██░ ██▒▒██▓ ██▒▓██ ▒ ██▒▒██ ▒ ▓ ██▒ ▓▒ ██ ▓██▒▓██░ █▒▓█░ █ ░█░▒▒ █ █ ▒░ ▒██ ██▒▒ ▒ ▒ ▄▀░
▒██ ▀█▄ ▒██▒ ▄██▒▓█ ▄ ░██ █▌▒███ ▒████ ░▒██░▄▄▄░▒██▀▀██░▒██▒ ░██ ▓███▄░ ▒██░ ▓██ ▓██░▓██ ▀█ ██▒▒██░ ██▒▓██░ ██▓▒▒██▒ ██░▓██ ░▄█ ▒░ ▓██▄ ▒ ▓██░ ▒░▓██ ▒██░ ▓██ █▒░▒█░ █ ░█ ░░ █ ░ ▒██ ██░░ ▒ ▄▀▒░
░██▄▄▄▄██ ▒██░█▀ ▒▓▓▄ ▄██▒░▓█▄ ▌▒▓█ ▄ ░▓█▒ ░░▓█ ██▓░▓█ ░██ ░██░▓██▄██▓ ▓██ █▄ ▒██░ ▒██ ▒██ ▓██▒ ▐▌██▒▒██ ██░▒██▄█▓▒ ▒░██ █▀ ░▒██▀▀█▄ ▒ ██▒░ ▓██▓ ░ ▓▓█ ░██░ ▒██ █░░░█░ █ ░█ ░ █ █ ▒ ░ ▐██▓░ ▄▀▒ ░
▓█ ▓██▒░▓█ ▀█▓▒ ▓███▀ ░░▒████▓ ░▒████▒░▒█░ ░▒▓███▀▒░▓█▒░██▓░██░ ▓███▒ ▒██▒ █▄░██████▒▒██▒ ░██▒▒██░ ▓██░░ ████▓▒░▒██▒ ░ ░░▒███▒█▄ ░██▓ ▒██▒▒██████▒▒ ▒██▒ ░ ▒▒█████▓ ▒▀█░ ░░██▒██▓ ▒██▒ ▒██▒ ░ ██▒▓░▒███████▒
▒▒ ▓▒█░░▒▓███▀▒░ ░▒ ▒ ░ ▒▒▓ ▒ ░░ ▒░ ░ ▒ ░ ░▒ ▒ ▒ ░░▒░▒░▓ ▒▓▒▒░ ▒ ▒▒ ▓▒░ ▒░▓ ░░ ▒░ ░ ░░ ▒░ ▒ ▒ ░ ▒░▒░▒░ ▒▓▒░ ░ ░░░ ▒▒░ ▒ ░ ▒▓ ░▒▓░▒ ▒▓▒ ▒ ░ ▒ ░░ ░▒▓▒ ▒ ▒ ░ ▐░ ░ ▓░▒ ▒ ▒▒ ░ ░▓ ░ ██▒▒▒ ░▒▒ ▓░▒░▒
▒ ▒▒ ░▒░▒ ░ ░ ▒ ░ ▒ ▒ ░ ░ ░ ░ ░ ░ ▒ ░▒░ ░ ▒ ░ ▒ ░▒░ ░ ░▒ ▒░░ ░ ▒ ░░ ░ ░░ ░░ ░ ▒░ ░ ▒ ▒░ ░▒ ░ ░ ▒░ ░ ░▒ ░ ▒░░ ░▒ ░ ░ ░ ░░▒░ ░ ░ ░ ░░ ▒ ░ ░ ░░ ░▒ ░ ▓██ ░▒░ ░░▒ ▒ ░ ▒
░ ▒ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░░ ░ ▒ ░ ░ ░ ░ ░ ░░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ▒ ░░ ░ ░ ░░ ░ ░ ░ ░ ░ ░░░ ░ ░ ░░ ░ ░ ░ ░ ▒ ▒ ░░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░
# Electronic
▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄ ▄ ▄▄ ▄▄ ▄▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄▄▄▄▄▄▄▄▄▄▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄ ▄▄▄▄▄▄▄▄▄▄▄
▐░░░░░░░░░░░▌▐░░░░░░░░░░▌ ▐░░░░░░░░░░░▌▐░░░░░░░░░░▌ ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌▐░▌ ▐░░▌ ▐░░▌▐░░▌ ▐░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░░░░░░░░░░░▌
▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀▀▀ ▐░▌ ▐░▌ ▀▀▀▀█░█▀▀▀▀ ▀▀▀▀▀█░█▀▀▀ ▐░▌ ▐░▌ ▐░▌ ▐░▌░▌ ▐░▐░▌▐░▌░▌ ▐░▌▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀▀▀ ▀▀▀▀█░█▀▀▀▀ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▀▀▀▀▀▀▀▀▀█░▌
▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌▐░▌▐░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌
▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄█░▌▐░▌ ▐░▌ ▐░▌▐░█▄▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄█░▌ ▐░▌ ▐░▌ ▐░▌░▌ ▐░▌ ▐░▌ ▐░▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌▐░█▄▄▄▄▄▄▄█░▌▐░▌ ▐░▌▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▄ ▐░▌ ▐░▐░▌ ▐░█▄▄▄▄▄▄▄█░▌ ▄▄▄▄▄▄▄▄▄█░▌
▐░░░░░░░░░░░▌▐░░░░░░░░░░▌ ▐░▌ ▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌▐░▌▐░░░░░░░░▌▐░░░░░░░░░░░▌ ▐░▌ ▐░▌ ▐░░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░░░░░░░░░░░▌▐░░░░░░░░░░░▌
▐░█▀▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌▐░▌ ▐░▌ ▐░▌▐░█▀▀▀▀▀▀▀▀▀ ▐░█▀▀▀▀▀▀▀▀▀ ▐░▌ ▀▀▀▀▀▀█░▌▐░█▀▀▀▀▀▀▀█░▌ ▐░▌ ▐░▌ ▐░▌░▌ ▐░▌ ▐░▌ ▀ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌▐░█▀▀▀▀▀▀▀▀▀ ▐░█▄▄▄▄▄▄▄█░▌▐░█▀▀▀▀█░█▀▀ ▀▀▀▀▀▀▀▀▀█░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌░▌ ▐░▌ ▐░▌░▌ ▀▀▀▀█░█▀▀▀▀ ▐░█▀▀▀▀▀▀▀▀▀
▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌▐░▌▐░▌ ▐░▌▐░▌ ▐░░░░░░░░░░░▌▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌▐░▌ ▐░▌▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░▌
▐░▌ ▐░▌▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄▄▄ ▐░█▄▄▄▄▄▄▄█░▌▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▐░█▄▄▄▄▄▄▄█░▌▐░▌ ▐░▌ ▄▄▄▄█░█▄▄▄▄ ▄▄▄▄▄█░▌ ▐░▌ ▐░▌ ▐░█▄▄▄▄▄▄▄▄▄ ▐░▌ ▐░▌▐░▌ ▐░▐░▌▐░█▄▄▄▄▄▄▄█░▌▐░▌ ▀▀▀▀▀▀█░█▀▀ ▐░▌ ▐░▌ ▄▄▄▄▄▄▄▄▄█░▌ ▐░▌ ▐░█▄▄▄▄▄▄▄█░▌ ▐░▐░▌ ▐░▌░▌ ▐░▐░▌ ▐░▌ ▐░▌ ▐░▌ ▐░█▄▄▄▄▄▄▄▄▄
▐░▌ ▐░▌▐░░░░░░░░░░▌ ▐░░░░░░░░░░░▌▐░░░░░░░░░░▌ ▐░░░░░░░░░░░▌▐░▌ ▐░░░░░░░░░░░▌▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░░░░░░░▌ ▐░▌ ▐░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌▐░▌ ▐░░▌▐░░░░░░░░░░░▌▐░▌ ▐░▌ ▐░▌ ▐░▌▐░░░░░░░░░░░▌ ▐░▌ ▐░░░░░░░░░░░▌ ▐░▌ ▐░░▌ ▐░░▌▐░▌ ▐░▌ ▐░▌ ▐░░░░░░░░░░░▌
▀ ▀ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀▀▀▀▀▀▀ ▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀ ▀ ▀▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀ ▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀ ▀ ▀▀ ▀▀ ▀ ▀ ▀ ▀▀▀▀▀▀▀▀▀▀▀
# Elite
▄▄▄· ▄▄▄▄· ▄▄· ·▄▄▄▄ ▄▄▄ .·▄▄▄ ▄▄ • ▄ .▄▪ ▐▄▄▄▄ •▄ ▄▄▌ • ▌ ▄ ·. ▐ ▄ ▄▄▄·.▄▄▄ ▄▄▄ .▄▄ · ▄▄▄▄▄▄• ▄▌ ▌ ▐·▄▄▌ ▐ ▄▌▐▄• ▄ ▄· ▄▌·▄▄▄▄•
▐█ ▀█ ▐█ ▀█▪▐█ ▌▪██▪ ██ ▀▄.▀·▐▄▄·▐█ ▀ ▪██▪▐███ ·███▌▄▌▪██• ·██ ▐███▪•█▌▐█▪ ▐█ ▄█▐▀•▀█ ▀▄ █·▐█ ▀. •██ █▪██▌▪█·█▌██· █▌▐█ █▌█▌▪▐█▪██▌▪▀·.█▌
▄█▀▀█ ▐█▀▀█▄██ ▄▄▐█· ▐█▌▐▀▀▪▄██▪ ▄█ ▀█▄██▀▐█▐█·▪▄ ██▐▀▀▄·██▪ ▐█ ▌▐▌▐█·▐█▐▐▌ ▄█▀▄ ██▀·█▌·.█▌▐▀▀▄ ▄▀▀▀█▄ ▐█.▪█▌▐█▌▐█▐█•██▪▐█▐▐▌ ·██· ▐█▌▐█▪▄█▀▀▀•
▐█ ▪▐▌██▄▪▐█▐███▌██. ██ ▐█▄▄▌██▌.▐█▄▪▐███▌▐▀▐█▌▐▌▐█▌▐█.█▌▐█▌▐▌██ ██▌▐█▌██▐█▌▐█▌.▐▌▐█▪·•▐█▪▄█·▐█•█▌▐█▄▪▐█ ▐█▌·▐█▄█▌ ███ ▐█▌██▐█▌▪▐█·█▌ ▐█▀·.█▌▪▄█▀
▀ ▀ ·▀▀▀▀ ·▀▀▀ ▀▀▀▀▀• ▀▀▀ ▀▀▀ ·▀▀▀▀ ▀▀▀ ·▀▀▀ ▀▀▀•·▀ ▀.▀▀▀ ▀▀ █▪▀▀▀▀▀ █▪ ▀█▄▀▪.▀ ·▀▀█. .▀ ▀ ▀▀▀▀ ▀▀▀ ▀▀▀ . ▀ ▀▀▀▀ ▀▪•▀▀ ▀▀ ▀ • ·▀▀▀ •
*/