kkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxddddddddddoooooooooooooooooooooooooooooolllllllllllllllllllllllccccccccccccccccccccccccccccc
OOOOkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxdddddddddddooooooooooooooooooooooooooooooooooooooooooooollllllllllllllllllllllllllllcc
OOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkxxxxxxxxxxddddddddddddddddoooooooooooooooooooooooooooooooooooooooooooooooooolllllllllllllll
00000OOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkxxxxxxxxxxxxddddddddddddddddddddddddddddddddoooooooodoooooooooooooooooooooooooooooooo
00000000000OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO0000000OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkxxxxxxxxxxxxxxddddddddddddddddddddddddddddddddddddddddddddddddooooooooooooooooo
K00000000000000OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO000000000000kxO00000000000kkO0000000000OOOOOOOOOOOOOOOkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxddddddddddddddddddddddddddddddddddddddddddddddoooooooo
KKKKKKK0000000000000000000OOOOO00OOOO000000OO000000000000000000000000Oc;dOO00xok000Oo;d00000000000000000OOOOOOOOOOOOkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddddddddddddddddddddddddddddddddd
KKKKKKKKKKKKK00000000000000000000000000000000000000000000000000000000k;.',;;:'.;::;,..;k00000000000000000000OOOOOOOOOOOkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddddddddddddddddddddddddd
XXXKKKKKKKKKKKKKKKK00000000000000000000000000000000KK000KKKKKKKKKKKKKO;.'.............;x0000000000000000000000000OOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddddddddddddddddddddd
XXXXXXXXXKKKKKKKKKKKKKKKKKK0000000000000KK000KKKKKKKKKKKKKKKKKKKKKKK0x;..,,,,,,,,,'...ckk0KKKKK00000000000000000000OOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxdddddddddddddddd
XXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKOx:.ckk000000Oxl'.cOkk0KKKKKKKKKKK000000000000000OOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxddddddd
XXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKXXKkk:.dKkOKKKKK0kOl.c0Kkk0KKKKKKKKKKKKK00000000000000OOOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
NNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKXXXXXXXXXXXXXXXXXXXXXXXX0kOc.dX0kOXKKKOOKo.:0KKkkKKKKKKKKKKKKKKK000000000000OOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxkkxxxxxxxxxxxxxxxxxx
NNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOO0c.dXKOk0XX0k0Ko.:0KKKkkKXKKKKKKKKKKKKKKKK00000000000OOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkxxxxxxxxxxxx
NNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKkKO;.l0KKOkKKOOK0l.;OKKKKkkKXXKKKKKKKKKKKKKKKK00000000000OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXOOXk,..,;:::c:;:;,..,kXKKKKkkKXXXKKKKKKKKKKKKKKKK000000000000000OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk
WWWNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXXXXXXXXXNKO0Xk,.......'.......,kXKKKXKOkKXXXXXXXXKKKKKKKKKKKKKK00000000000000000OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkkkkkkkkkkkkkk
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXXXXXXXXXXX0OKXk,...',,',,'.....,kXKKKXXKkkKXXXXXXXXXXKKKKKKKKKKKKKKK00000000000000000000000000000000OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOkkkk
XXXXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXXXXXXXXXXNKO0XXk,..oO00kkkxkkc..,kXXXXXXXKOkKXXXXXXXXXXXXKKKKKKKKKKKKKKKKKK0000000000000000000000000000000000000OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO
00000000KKKKXXXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXNN0OXXXk,.;OXXXOOKOkXO;.'xXXXXXXXXKOkKXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKK0000000000000000000000000000000000000000000OOOOOOOOOOOOOOOOOOOOO
OOOOOOOOOO0000KKKKKKXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXO0NXNk,.:0XX0OKXKkO0c.'xXXXXXXXXXXOxk0XXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKK0000000000000000000000000000000000000000000000000OOOOOOOOOO
00O00000000OO00000KKKKKXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0OXNXXk,.:0NKO0XKXKOx:..xXXXXXXXXXXXOxk0XXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKK000KKKKKKKK0000000000000000000000000000000000000000OO
KK00KKKKKKKKKKK0KKKKKKXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXO0NXXXx'.;OX00XXXXXKd,..xXXXXXXXXXXXXX0xOXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00000000000000000000000000000000000
KK00KK0000KKKKKKKKKKXXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0OXNXXKo'..cooxxxxxxdl;..lKXXXXXXXXXXXXX0xOXNXNNXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00KKKKKK0000000000000000000000000000
KKKKKKK000000000KKKKKKKXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNXO0NXXXKc...............'.cKNXXXXXXXXXXXXXKxkXNNNXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKK0KK00000000000000000000000KK00000000000000000000000000
KKKKKKKKKKKKKKKKKKKKKKKKKXXXXXXNNNXNNNNNNNNXXNNNNNNNNNNNNNNNNKOXNXXXKc...............''cKNXXXXXXXXXXXXXXKxkKNXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKK000000000000000000000OOOOOO0000OOOOOkkOO000OOkkkOOOOOOOO
NNXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXNXXNNXNXKKXXKKXNXXXNNNNNNNNNXO0XXXXNKl.....,;;;;;,.....lKXXXXXXXXXXXXXXXXKkd0NXXXXXXXXXXXXXXXKKKKKKKKKK000KKKKK0000000000000000000OOOOOkkOOOOOkkkkkkkkkkOOOkkxxxkkkOOOOO
NNNNNNNNNXNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0oloocdXNNNNNNNNNNNNN0OXXXXXXKl...,xKKKKKK0k;...:OXXXXXXXXXXXKXXXXXXxd0XXXXXXXXXXXXXXXXKKKKXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKK0000000000000000000000000000OOOOO000000
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN0dOKKxdKNNNNNNNNNNNNXOKXXXXXXKl...lKXKXKKKKKo...:kkKXXXXXXXXXXXXXXXXKOdkXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00000000000000
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNOok0Odo0NNNNNNNNNNNN00XXXXXXXKl...oXKKXKKKKXd'..:0kkXXXXXXXXXXXXXXXXKX0dkXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00000
NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNO:coo:l0XNNNNNNNNNNKOKXXXXXXXKl...oXXKXKKKKXx'..:0KkkKXXXXXXXXXXXXXXKXX0kxKXXXXXKKXXXXXXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK00
NXXXNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNNklONXxo0XNNNNNNNNNX00XXXXXXXXKc...oKKKKKKKKXx'..:0XKxkXXXXXXXXXXXXXXKXXKXxo0XXXXXXXXXXXXXXKKKXXKXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0000000
0OOO0KKKK0KXXXXXNNNNXXNNNNNNNNNNNNNNNNNkldOkolOXXNNNNNNNNK0KXXXXXXXKOc...lKKKKKKKKKo'..;0XXKkOKXXXXXKXXXXKXKXXKXKkdOXXXXXXXXXXXXXXKKXKKXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK0KKKKK00000000000
kkkkkkkkkkkOOOOO0000OOO00KKKKXXXXNNNNNNk::ll:cOXXNNNNNNNX0KXXXXXXXK00l...:O0000000Ol...:0KKKKkkKXXXXKXXXXKXKXXKXKK0oxKXXXXXXXXXXXXXXXXXXKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKKK000000000000000000000
kxxxxxxxxxddddxxxxkxxxxxxxxxxkkkkOO0XNNklkKKdlOXKXNNNNNX00XXXXXXXX00Ko'...',,,,,,,'....:0KKKK0kOKXXXKXXXXKXKXK0K00KOox0XXXXXXXXXXXXXXXXXXKXKKXK0KKKKKKKKKKKKKKKKKKKKKKKKKKKKK000000000000000000000000000
doollcccccccccccclodxxxxxxxxxxxxxxdxkO0dlkXKxlOXKXNNNNNK0XXXXXXXX00XKo'................;0XKKKK0kkKXXKXKK000OOOkOkkOkkdlx00000000OOOOOOO0000OOOOOkkOOkkkkkkkxdxkOOO0000KKKKKK000000000000000000000000OOOO
lllcccccccccccccccccloodddddddxxdddddxdl:coocckKKKXNNXK0KXXKXXXK00KK0o'................;OK00000Odx00O0OOOOOkOOkOkkOkkOd:dOOOkkkkxxxddddxkkxxxxddoddddooooooollllllloooodxxxxxkOOOOOkkkkkOkkkkOOOkkkkkkkk
cccclccccccccccccccccccccclllooddddddddl::clc:oxxkO00OkkO000KK0kO0000o,....;cccc:;'....,xOOOOOOOkdxOOOOOOkOkkkxkxxOxxOkdlokkkkkxxxddddddxxdddddooooooodddooolllllccllllcccccccclloooooooooollllllllllodd
cccccccccccccccccc:ccccccc:::::cclooooolcloolclooooddoodddxxkkxxxkxxxl,...:O0Okxxxo'...'odddxxxxddlodkkOOkOkkkxkxxOkxkxdxlcoxxkxddddddddddooooloollllloooollllllclloddoollcccccccccccccccccccccccccccclo
ccccccccccccccccccccccccccc:::::::ccclllcllllclolloooooooooooddddddddc,. .lxxdddddd:....lollllllccc::clxOkOkkkkOkkOkxOxxOkocoxkxxxxxdxxxxdddooodoooooooooollllooooooooloolllllllllllllllllclllccllllcccc
ccccccccccccccccccccccccccc:::::cccc::cclllllloolollloollllllooooooodc,. .lxddoooooc....collllcccccccc:loodxxkxxxxkxxOkxkkxdolxxxxxxddddddddoooooodxdoooooolllllllllcccccccccccccccc::::::::::::::::::::
cccccccc:ccc:::c:::::::::::::::::ccc:::cc:;;;:::cclllllcclllcclllclloc,..'coollllllc'. .cllccccccccc:cc;:::::c::::ccccclddoooc:loolllllllccccccccclllcccc:::::::::::::::::::;;;;;;;;;;;;;;::;;;;;;;;,,,,
cccc:::::::::::::::::::::::::::::::::;;:;;,,,;:::,,;:ccccccc:ccllc:cc:,. 'collllllll'. .:lccccclccc:::cc::::::;;;;::;;,,coloolccclllllccccccc:::::::::;;::::::;;;;;;;;;;;;;;;,,,,,,,,,,,,,;;,,,,,,,,,,,,
::::::::::::::::::::::::::::::::::;;;;;::;,;,;;;;;;;,;::;;:cllcccc::c:,. .cllooloool'. .colllllllllc:ccclc::::;::;::;:;,:llloollccllllcccccccc:::::::::cccc::::::::::::;;;;;;;;;;;;;;,,,,,,,,,,,,,,,,'''
;;;;;;:::;;;;;;;;:::;;;;;;;;;;;;;;;;,,;;:;,,;,,,,;;:cllc:,'';:cllc::c:,. .:clllloool'. .collllllloollooldl:cooloolllcllcllccccccl:;ccccc::ccccc::::::;;;;;;;;;;;;;;;,,,,,,,,,,,,,'''''''''''''''''''''''
,,,,;;;;;,,;;;;;;;;;;;;;;;::;;;;;,,,,,,;:;,;,,,,,,,;ldol:::::;'';:ccc;'...;c:;;:::::;. .;;clcllllllccllclccccccc::::::::::;;:;;::;;c::::;;;;;,,,,,,,,,,'''''''''''''....................................
,,,,,,,,,,,,,,,,,,,,,,,,,,;,,,,,,'''',,;;,,;,;,,,,;;;::c:cdkxdo:,'.;;,...;;,,,;,'',,...''':c::cc::;;;:;;;;;::::;;,;,,;;,;;;;;,,,;,,;:;;;,''''''''''''''''...............................................
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;,,,,;;:clooddooooodddddolc;,. .';;::;,'',;:;;,,,;:::ccc::;:::::;;;;:;,;;,,,,'''',,'''',,,,',,,,,'''''''''''....................................................
ccccccccccccccccccccccccccccccccccccccc::;;;,;;:cclllooooooooooooddol' .,,'';:::,,,,',,,,'..,:::;;;::::::;;:;:::;,;;,,,,''''''''..'...';:,''''''''''''''................................................
llolllllllllllcllllccccccllccllccccccccc::;;,,,;;::cccccllllllllllllo:...''''',,,;c:;;,,''',::,..';ccc:::;;;;;:c:,,;;;;,,,,,,,''''''...';:,.............................................................
oooolllllllllllllllccccclllcccccccccc::::::;;,,,,,;;::::cc:ccccccclll:.. .;:,''...',;:c:;,,''',;;,;:;,'',;:;::;cc,,;;;;;;,,,,,,,,,,,''''',;,''.............................................''...........
olllolllllllllllcccccccccccccccccc:cc:::::;;;,,,,,,,,;;:::::ccccccccl:.. .:;..;;,''...,,;:c;,,,'',,,;;;,;:;,,,;::::;;;;;;;,',,,,,,',,,',,'';:;,'''......................................................
lllllllccccccccllccccccccccccccccccccccccc::;;;;,,,;;;;;:::cccccccccc:..  ..':cc:;.......',;:::;;,.....,;,::'...',c:;;;;;,,,,,,,,,,,''''','';c:,'''.....................................................
lccccccccccclccccllllllccccccc::::::c:::::::;;;;:;;;,,,,,;;;;;;:::::c;..   ........ ..''''.'',;;:c:;,,,....,,..',..,:;;:::;;,,',,,,,,,''''''',::,'''''''................................................
ccccccccccccccc::cccccccccccccc:c:::::::c::ccccll:;;;,'',,,;;:::ccccc:..   .,::::,..   .,,,..'..,,;::c:,,'.....,;;;;:;..';;'';;,,,,,,,,''''',,,,;;,'''..................................................
lllllllccccccccccc:::cccc::::c::::::::::::;;,,,,,,''''',,,,,,;;::cccc:.. .;,.';;..,:.   ,c:;;'.....''',::;;;'.....',:c;,'',.':;;::;'''.',,,''''',;:,'''';oc.............................................
ccllccccccc:::::::::::::::::::::::::::;:::;;;;,,''''''''''',,,,,;;;::;.. .:l:.  .;cc'   'cc::;;,''..''''.,:;;,,;,'....,::lx;..  ....''',,'''','''';:;,;cod;  ......''......'............................
ccc::cc::::::::::::::c:::ccccc:::::::::::::::;;,,,,,,''''''''',,;:::c:.. .;c,....':c'   ':::::::;;,';,....'.';;::;;;,..,:lx:.. .'.........,,,;:;;,,;;';x0d.   .',,''''''',,,,,''''''''''''..............
llccc::ccccccccccccccccc:ccccccccccccc::::::::;;,,,,,,'''''''',,,;;;:;.. ....':c;..'.   'c::::::;;;:::,''.'....';:;::;;oolo,.  .;:;,'.....,;;:cc:c;,'.'x0x...  .;,,,,,,,,'''''''........................
lcc::::ccccccc::::::::::::cccccccc::::c::;;;::;;;;;,,,''''.'''',',,,;;..    .''','.     '::::::;:::;;;;;;,;;....'..';::dlcl.    ...,;;;,'.....',,::;,,:dkd'..  .,;,,,,'','.'''''........................
cc:::::::::::::::::::::::::::::cc::::::;;;;;;;;;;,,'''''''''''''.''',:,.   .''..''''.   .;:::;;:::::::;;;;::,.''....','oddl. ...   ....','..  .  .....,,;,..... ..''''''''..............................
c:::::cc:::::;;;:::::;;;;;;::;::;;;;;;;;;;,,,,,,,,''..'''',,,''...'';c;.  .;:;;:::c:.   .,c::::::::::::oxxl:;;cc'..'...lkkl. '::;'....'..      .....   .  ..,'....'''''''''.............................
::::::cc:;;;;;;;;:::::;;;,;;;;;;;,,,,;;;,,,,,,,,,,,''',,''''''''''''lo:.   ..........    .,;;;;;;;;;;;:oxkkxl:cc:,,'...oO0o.'::;;cl:,''.. ......;:cc,.    .,,...;cc::;;,''..............................
::c:::::c:;;;;;:::::;;::;;;;;;;;;;;;;;;,;,,,,,,,,,'',;;,'....'''''';od;.                 .';;;;:::::::cokOkdlc:,';,...'d00d',;:c::c:cl:;'..........,:::;,.......';;:lllllc;'............................
clc:::::::::;;;;;;;;;::;;;;;;;,,;;;;;,,',,,;:;,,''',,,,',,,'''.....,od;. .                 ....:cc:;,;,,:ldxdol;,;;'..'d00d,'.';;cc:cc:clc:,..........',::;,,'.....',;;:cllcclc:'.......................
:::::;,;;;:::;;;;;;;;;;;;,,;;;,,;;,;;,'',;;:;;,;;;,''''cdoc;,'.....'od;......................  ..       ...;:;;,,,,''',xK0d,;'....';lc:cc::l:,;,'..........,:::;,.......,,,;clooool:;,..................
;,,;;,,,,;;,,,;;;;,;,,,,,,;;;;;;;:cc:;,,;;;,,,,,,,,,,',,;,,;,,''................                       ...............,kNXo,:;....',,..,:::c;.:lc:;'..........';c::;,.......',;;:loooolc;,,....'........
;,,,;;;;,,,,,,,,,,,;;::::;;;;;;;:::;;;:;,,;,,,,,,;;,;;,'''.....  ...   .        ....     .............'''''''''''',''';OWXo';;;;,;..''...'::::lc:cl;;c;.............,;,..'.......',;:cllllllc;,'........
cc:;,,;;;;,,,,;;;;::;;::;,,,,,,,;;,,,;;,,;;,,,,,',,'''...',''......'...... .........'.  .....'''''''''''''''''',,,,,,';OWXl',..',c:'',,......;lcccc'.:oc:;'... .........,:::ccc;.....';;::cllllc:;,,''''
;;;;;,;::;,,,;;,,:ccc:,''','''',,,'';;'.,,;;'.,,'''...'',''...'......'........... ...........''''''''''''''''''''''''.;OWXl',... ..,:;:;........;::::c:;cll:,,.............,oOOo.    ....',;;:cllllool:;
;;::;,;;,,,,;;;;;;:c:;,''',,''''''',,,,,'''''',;,..''...'..',;,......''.. ....................'',,'''''''''.'''''''''':OWXl',... .. ..,c;'....''...'clc::c;;cl:;;....  .....lOOd...      .....',,;:cllll
:;;;;;,;:;,',,,;;,,,;,,,'''''',,',,,,,,'..''',''..''';,'''',;;'...............................''',,,,,'''',''''''''''.:ONKl',... .. .  ..:c;,,'.....''.':lc::c;:lc:;'...'do',xOo'..   .:;'.   ....',;;::
;,',,;,;;::;;:c:,,;;,,,''',;;,,,,,,''',,,,,'''..',;,,;,'''''..'''................. ...........''''''''''''''''.''''''':0NKl',...... .  . .,::c:'',...'....'coo:;;cccl:::cOx..dkl'.    .,;:::;'.   .....'
;;,,,,;;;:;,',cll:,,'''''',,,,'''''',,,''',;;,'.'''''''''..'',,'.................  .....................''''..'.....'.:0NKc',...... .  ....,;,:col.........;:;,:loc,,:llx0x.'d0o.     .....';cc:;'.  ..,
,,,,,,,''.',,,;cc,.'..,;'',;:,'..,;,'''..,;;,'.....,,,'...,;;;,..................    ..................''''...........:0NKl,;......... ..'..;;'':ll:'.....'',.. ,cddc:;;xKd.,k0o.          .....;ll:.  .

Run your own private language model (PLM) in < 1 min
Understands you and your data. Private & secure.

  • $5 free credit on signup, no credit card required
  • Costs $5/mo + inference
  • Your data is private and will NEVER be trained on

Why spin your own model?

If you try to run an open source model locally, you'll quickly realize that it's not pretty. Models run slowly and you have to pull tricks to get them to fit in memory. RAM is expensive. GPUs are expensive. Inference providers are devtools built for developers, not end users.

In order to spin your own ChatGPT, you need a few key pieces:
  • The ability to run the most capable open source models (up to ~500B) at reasonable cost
  • A memory layer over your notes, conversations, & documents
  • An action layer over all of your apps

But we can't trust this data with the current LLM monopoly. OpenAI, Google, Anthropic - they all train on your data. Your private thoughts become their product.

The pieces are there (models, inference, memory, action). We make putting all of it together easy.

We are an open source alternative. Open source models give you 90% of the capability with 30x the speed. No data leaves your control. No training on your private information. Ever. Right now we use Cerebras & Fireworks for inference - the fastest AI chips on the planet. We're working on bare metal GPU inference directly on hardware at the lowest prices possible.


Why trust us?

We made this app mostly for ourselves and family who just want a dead-simple "chat with my files" but don't trust the monopolies. We think open source models are cool and want to make it easier for people to get real utility out of them.

PLM will be fully open source. You can run it yourself, audit the code, and verify that your data stays private. We believe in transparency. Extracted chunks of information from your files may run through inference but are never trained on. We only choose inference providers with zero-data-retention policies meaning none of your data is persisted on inference servers.

View on GitHub (soon)