Return Styles: Pseud0ch, Terminal, Valhalla, NES, Geocities, Blue Moon. Entire thread

Why browsers are bloated

Name: Anonymous 2014-07-27 0:20

https://github.com/WebKit/webkit/blob/master/Source/WebCore/platform/Scrollbar.cpp
https://github.com/WebKit/webkit/blob/master/Source/WebCore/platform/win/ScrollbarThemeWin.cpp
Let's reinvent the fucking scrollbar, which every goddamn platform with a UI already has, and make it behave subtly different from the native one!

Right-click a native scrollbar in some other app:
- Scroll Here
- Top
- Bottom
- Page Up
- Page Down
- Scroll Up
- Scroll Down

Right-click a scrollbar in Chrome:
- Back
- Forward
- Reload
- Save As...
...

Right-click a scrollbar in Firefox and Opera:
Absolutely fucking nothing happens!

What the fuck!? How did these terminally retarded idiots get involved in creating one of the most important pieces of software to the average user?

Name: Cudder !MhMRSATORI 2014-08-08 12:50

>>75,76
That's why we need a new browser, one that isn't controlled by some large organisation, one which is compatible enough to view most information-oriented sites, maybe even some app-sites like YouTube or Fecesbook. Then figure out how to market it so that it appeals to the masses, making it spread widely. Encourage forks and customisations (it should be public-domain), so we might have several dozen different versions all based around the same core, but with subtly different UIs, extra features, etc.

This will be what can start the revolution - when the "web developers" realise that almost everyone's browser is slightly different, and that everyone likes their version because of their differences and is unwilling to change, hopefully this will make them more focused on content instead of styling, reduce unnecessary use of features for the sake of using them, and lead to a more accessible Internet for all.

Chrome gained marketshare because it was faster, easier to use in some ways, and still displayed existing pages well. What will be the "killer feature(s)" of The Next Browser? Being smaller and faster, completely pubic-domain and open-source, and easy-to-use but also powerful UI is what I'm thinking of.

The issue of search engine replacement is a whole different can of worms, let's not open that one here. Create another thread for it if you want.

>>77,78
RDF: Retardedly Demented Format.

>>80
Quite the opposite, actually; this is more like a thinking exercise with some coding involved, than the other way around - as discussed above, it's more important that you think and plan the design before writing any code. Since I'm targeting Windows, you might be more interested in thinking about writing efficient UIs on Linux with a minimum of dependencies - Xlib/Xt/Xaw does look like a good path to take.

Name: Anonymous 2014-08-08 13:06

Ha, remember when firefox was the lean fast browser? You know, back at version 1.

Name: I know! Make a new standard! 2014-08-08 13:29

>>82
I was about to reply that to >>81. She is describing the Mosaic NetscapeFirefox pretty damn well. How many gecko browser are there?

Marketing is what made Chrome today the highest market share.

Name: Anonymous 2014-08-08 16:01

>>83
She

Shalom!

Name: Anonymous 2014-08-08 16:10

>>81
Shalom!

Name: Anonymous 2014-08-08 23:08

>>84
Shalom!

Name: Anonymous 2014-08-08 23:22

>>85
Shalom!

Name: Anonymous 2014-08-09 0:19

>>81
I don't see how a simpler implementation can succeed on its own merits today. People will not switch to a new browser unless it is bug-for-bug compatible with their previous one. Gecko only succeeded because people began to move away from ActiveX. WebKit only succeeded because because Mozilla did not subsequently introduce many (any?) extensions of their own that saw wide adoption. I'd wager that WebKit/KHTML was fairly simple as well in the early days...

Bloat is the price of victory. This observation is applicable to other software as well.

Name: Anonymous 2014-08-09 0:23

>>88
Software for quality users instead of for the inferior low intelligence masses. Or just create software for you by you.

Name: Anonymous 2014-08-09 8:58

What will be the "killer feature(s)" of The Next Browser? Being smaller and faster, completely pubic-domain and open-source, and easy-to-use but also powerful UI is what I'm thinking of.

The next browser? mate by the looks of it you can just start thinking about the next protocol. Not even the nuttiest nut is going to be able to go without a client that renders his bank apps and does Flash. If we're to get in there it has to be from the side.

We need something in between IRC (decentralized, data oriented, native UI, "instant") and the Web (application oriented). With a strong focus on privacy and security. We can build this platform on top of HTTP for all I care but HTML5 has gots to go.

Name: Anonymous 2014-08-09 9:38

>>90
The protocol doesn't need to be built on top of HTTP. Just about everything can be sent over HTTP, so the final result can be layered on top of whatever you like.

What do you mean with native UI? No matter how you sensibly define it, IRC and the Web either both have it or both don't.

Also, the Web is not application oriented. Actually, the fact that it was never meant for this EPIC WEB APP shit is pretty much the biggest source of problems right now. It's questionable whether applications like that are actually desireable, anyway. With proper authentication and communication, most vital ones could be reduced to simple requests.

Name: Anonymous 2014-08-09 9:53

>>90
decentralized
SHALOM!

Name: Anonymous 2014-08-09 17:52

,:::::,...;;;:::::::,,,,,,::::::,::::;;::;::::::::::::::,::;;;:::::::::;:::::::::::::::::::::;;;;::;;::::::;''':;;;;;;;;;;:::::,,::::::,,:,:::::,::::,:,:::``:;;;;;;;;::;;::;::;;::::::;;:::;;;;;::
,:::::,,..,..,,,:::,...,,:::;,,..,;:::::::::::::::::::,,:;''';::;;;;;;;::::::,:::::::;:::::::::;;;::;;;::::;;;;;;;;;;;:::::;:::::::::::::,::::::,::;::::::..,;;;::;::;:;;;:::::;,,,:,::;;::;;:::::;
,;:;:,:,,,....,.,.......,,:::,.``,::::::::,::,:::::::,:;''';::;;'''+'''';;:;:,:::::::::;:::;:::;;;;;;;;;::;;::;;;;;:::,:;:;;::::::,,:::::::::::::::;;;;:::.,;:::::,::;;;;:;::::::,,,,:;:::;+'';;;::
.:;;;::,,::,,,...``.,,.,:,,,,,.`.::::::,::::,,::,:,,,:;;;;;:,:,,::;;;;;;;:::;::;:;::::;;;;;';:;;;::,,,:;;;;;::;;:::::,,:;:;:,::::::::;::::::;:::::,:::,,::::;;,.,,,:;:::::;;;;;;::::,,::::,:;'''';:
`.;''';;;';;;;:,..`.:,,:::::,,,.,;;:::,::::;::::::,.,:::,:;;::::,.::::::::::::::::::;:;;'';;;::;;;,,,,:;;;;;::::::;;:,:;;;:::;::::::;;:;::::;::::,,,,:,,:;:::,.`,:::::,:::::::;::;;;:,,:;:,,,:;;;':
`,:'''';;'';;'';;,..:,,,,,::,::,::;::,,:::;;::;;';,.,:;::::::;;:,`.::,,::::;:,,:::::;;::::;;::::;,:::,,,:;;;;::;::;;:::;;:;:;'''';;'''::;:::;;;:::::::::::,:,.,::::;::,;:::::::::;;:;::;;;';::;;:::
,:,:;;;'''+';:;:.`,:;:::,,,,,,,,:;;:::::::;::;''';:::,,::::,:;;;:.,:::,,,::;::::;:::::::::::,,:::,:;;:,,,:;;::::::;;';::::;:::;;'';;;::;;;;;;:::;;::::::;,,;:::::::::::::;:::;;;::::;;::::::::;;:::
;':,::;;'''';;..`.:'';;;,,,:,,,,:,:;:::;;;::;''''':::,,::::,:;;;:,::;::,,,,::::::::::::::::,,::::;;;:;;,,::::::;:::;;::,,,::::::;;;;;;;:;;:;';;;;;;::::::,,::::::::::::,:;';;;;';:,,;::,,::::;;::::
'',.::,:;;;;:.``,:;;';::;,::;;:;,,,:::;';;;;'';';';:;;::;:,:;:::::::;;::::,,,::,::::::::;:,,:::::::::,,::::::::;:::;:::::,,,:::::;;:;;;;:;;;;;'';;::;;:,,::;:::,:;;;;;:,::;;;;;;;;:::::,,::;;;';;:;
:;,.::..,;;,,`.,:;:::::,:;:;;'';;:::::::;;;;;;;;;';:;:,::::;;;:::::;;;;;;::::,,:::::::.,:,.,;;:::::::,,:;:;;::::::,:,,:;:::::;:::;::;:;;:;;;;:::::::::,:,::;;:::;;;;';;;::,:::;;;:;:::;;';;;::;;;;:
:;,,::::,':,,,,::;:;::::::::;;:::;;:;;;:::::;;;;;;::;::::::::;;::::::::;;::::,,::::::,.,:,.:';,,::::::;;;;;:;;;;;:::,,:::;:::::::::;;;;;;;'';::;::::::::::::;::::;''+';;';;,..,,,,,::;;'';';:::;;;:
::,,,,:;,::::,::::::;;:::;;:;;:::::::'+';,,:;;;:;::::,,:;;::,:;;::::::::::::;;,,::::::::,.,;;:,,.,::::::;;;::;;;;:;;;::::;:;:;::;::;;;::;;;::::;;::;:::::::::::::;;'+'''';;;:,...,,,:;;;;;::;;::;;:
::,,.,,,.,::::::::,:,,,::::::'';,:,.,,:;:,,:::;::';::::::;;:::::,:;;::::::::;;;:::::::::,.::::;',.,;::;;;'';;;;:::';;;;::::;;;:;:::;;;::;;;:.:;;;::::::::::;:::::::;;';';;;:;::,....,,::::,::;::::,
:,....,,,,:::,,,:,,,,,::::::;;;,......,.........,,,,..,,,,:,::,::;';;:::::::::;:;;::,,::;;;::::;;,,::;'+';;;;:,;;:;;;;;;;::;;:::;;;;;;;;;;;..:;;:;:::;:;:::;::;;:::::,,:,:;::::::,,,,:;;::::::,,:::
,;.,:,,:::::::,,,,,,:::::::::;;:,,,,,,,,..........,,......,.,,,,..,..,,,,,:::::;;;:.,:::;;;:::::;;,,:;'';;;;:::;;;';;;::;:;::::;;;;;;;;;;:.`,::;::::;::;;::::;:;;::::,::,::;;;;:::::;;::,::,,:,.,,,
:;.:':,,;:,,::..,:::::::::;:::;::::::::;:,':,,;'''+'+++''''';;;;:::,,,:,:,::::;;;;;;;;;;::::::::;;:,:;;;:;;::;;;;:;::;:::;;;;;;;;;';:;;:,,.:;:::::::::::::::::::::::,,:::::::::::::::::::,,,,:::,:,
;:,:'':.;;;:,..,:;:::::,::::::,,;:;;;;;;;;;:::;''++''';''';:,:;;;:;;;;::::::::;::;:::::::::,::;:::::,:;;;;;;;;;::::::::;:;;;;;:;;;;;;:,,,.::;;:::::::,::,,:::::::::::::::;::,:,,:::::::,,:,,,:;;;;'
',.:;;;,,:;;,,,::::::,:,.,,;;:,:;;;;';;'';;::::;''+';;;;;':,.,,::::;:::::::::::::::;:::;:::,:::;;;;;:;;;;;;;;;:;:;;:::::::::;:;;::::::,::;:::;;:;::::;::;::::::::::::,,::::,,,,,:;:::,:::::::::::,:
:,,:;;::..,,:::::::::,::,,:;;;::,;;'';;';;:,:::;';;';'';;;:::::;:::::::,:::::::::::;;;::;;::::::;;'+;;'';'';';;';':;::;:::::;::::::;:,:;;:::::::::::::::::,::,::,,,,,.....````.............,.,..,,,
::::,::,,,,,,,::,::::,:::,,;;::::,,:;''';;:,,:;;;;,::;;;;::::::::::::::::::::::::::::;::::;;:::;;'''+++++'''+:';;;::::;;;;;;:::::::;:,:,:,,:::::::::;;;;;;;;;;';;;;;;;:,:,,...,::;;;;;;:;;;;;;;;;;;
':';,,::::;,,,:,,:::::,,,,::::,:':,,,::';,,,.,';;::;;::::::::;:::::::::;:;:;:::::::::;;;;;;;:::;''++'++++''''+'';::::;;';;;::;;:::,,.,,,,,::;;;;;::;;'''';''''';;'';;;;:;;;;,,:;+;;:,:;;;;;;;;:;:,,
+';::::::::;::,,,;:::,,,::::::::';;,,,,:,`,,.::::::::::;::::::::::::;;:::;;:;;:;:::;''++'++++++++#++#++'+#+#;+'';::,:;:'::,.,,,,..,,,::;;'''';;;:::::::;::::;;:::;:::;;;::::,,,,:,::,.,:;;:;::::,,.
';;;;;:,::,:;+;,,::,::;::;:::;;;;'+':::,``,,::::::::::;::;:::::::::::;;;;::;:;:;;;;+'+'+'+++++++#+++'+'+++'++''++':;;:;':,.,,,,::;::;::,,:;;';::::;;::::::::::::::::::::::;:,::::,,,:,::::,::::::,:
;;;;;:,,,,,:::'+;,,,:;;;:::::;';;;'.,:':,,,:;:::::;;::::;:;::::::::::;;;;;;:;;;;;;;:;'+'++++++'++++++++++++''+''+'';;,;'+'::::::;;;;:::..,::::;:;::::;;::::::::::::,::;;;;;::::::::.::::;::::;:,::;
;;:::::::,,,:,:;';:,,,:;;:::::::::,...,;;::;;;:::;;;:;::::;;:;,:::,,,,:::;:;;;''';;';''+++++++#'++++++'+'++++;+''+;;';;'+;;:;::::::;;::;,,;:::;;;;:;;;;::;;;;;;:::::::;:;';;;::::;::::;;:::::::::::
:::::,.,:,:::,,:::::::,:;:,:,,::::;:```.::;;;;::::;;:::::::;::;::::::,::;';;'''+;;';:'''+#++++++++'+++++'+'+'+'+''''';;'++';::::::::::::::;::::;;;:::::::;;::::::::::::;;:::;;';:::::::::::::;::,,:
;;::,.`.:::;;;;;::,,'';,,,.:::;;;;+',`.,::::::::::;;:::::::::::;:::::::,,:;'''+''';':;'+++'++++++++'++''+'+'''''''''';;+;;+';:::::;::::;;;;::,::;;;:::::;;::::,,:::;:::;;;;;;;:;::::;::::;:::::::,:
;';:,...:;;;':;;;:,,'::;:::::;:::,,:,:';:::::::::;;;;;;::::::;::::;::::::;''+'++;';;;;+'++#''#''+++'+++''++'''';;;;''';'':;';';::;,::::::;;;;:::::::;::;:;;;;;:::::;;;::::::;;;;:::::::,:;:;;;::;::
:;;;;:.`,:;;;;:::,,,::::::;;++:,;:.```::::::::::::;;;;;;;;;:;;;;;:::::::''''+''+'';;;;''';''''+'+''+'++'''''''';;';;'';';;'#'';::::;::::::;;;;::::::::::;''';;;;;::::::::;;::::;::::::::::::;:;;:;;
,,:::::.,::,;:::;';::::;;;'''++'+++;,:;:::::;;;;:;;;;;;';;;::;;;;::::';'''+'+++'++;;'''+'''''+''''''';'''';''+;'';;;;;;';;'+';';':,;::::::;;;;:::::::::,;'+'';'';:;;::::;;::;;;;;;;:::;::;;;::::;;;
,::::::::,,,::,,::'::::::::;;;;:;;'+'';;:;::::::::,::;;';;;;;;;;;:::;;''''''''+##'''';+'+'+'''+'';'''''';''''''''';;;;;;;;';'''';;;::::::::;::::::::;:,:::::;;:::::::,:::::,;:::;;:::,::,:;::::;;;:
:;,.,:;;,,:,,:;:,::;;:`,;:,:::;;;::::::;:;:::::::::::;;;;;;;;;:;;;;;;;'''+'''++##+'+''++''+'''''';;;'''''''';''';;;;;'';;;;'+'''''';:;;;;;;;;;;:::::;;:;;;;;;;:;;:;::::::::,::,:;;::::;;;;::;:;::::
:,,::;';:,,:,..,::;;'` ,';:,;;;::::::::;:;;:;::::::::::::::::;;;;;;;;;;''''++++:;#+'+''+''';'';;''';;';;'';'''''':';;;;;;;;';''''';';';:;:::::;;:::;;;;;;;;;;;;:::;:::::,::::;:::;:::;;;';::::;::::
,,,:;:.:;,,:.``.,;;;.` :'';:;::::::::::;:;;;:,.::::::::::::::::::;'''''+'+'+'@:':'#'''';'''';:';;;;;';''''';;'';';;'';;;;';;';'+''+''';;;;::;:;;;::;;;;;;:;:;:;::;;;;;,:::;;:::,::::::,,,,:::::::::
,.:;:,.:;,:, `,,`.,. `'++'';::;:::::::;;::::,,::::::;::::::;:::'''+'''''+;+++@#':++'++';'';;'''''';';;';;;;;;;;;;;'';'''''';'''''';'';;;;;;::::::;:::::;;;::::::;;;::;;::;;:::;::;:,.,:;:::,,:::::
.`:,:,,,:., `::,`` .;;'';:::;::::::;:;;::,.,,,::::;::::::;::;++'''+''''+++###@'#'''+''';'''''';;;;;';;;;;;'';';''+'''+'+;;'''';;;;;;;;;':::::,:::::,;:::::::;::::;'';::::::::;::.`:::;;::;::::::
`.,...` ..` .;,:.` `,,;;;::::;:;;:::;:;,,...:::::::::::;:::::;#'+''';'''++'###++'+''+'';;'';'';';';+;';'''+''+'''+++++'''''';;;''''';''';;:,,;::::::,:::,:;;;;;;::::;:::::,:::::,.;:::::::;::::,,
..,,,::`.` ``.:.,`` `:::;;;:::::;;;:;:;,..`.:::;:;:::::,,;;;:::#+'+'''';'''''##++'+;+''';'''+'''';+'+'''''+++++'+++++''+'';''''';'''''';';';:,:;;::;;:;::,::;;;:::;:;:;;:::::::::,,;::::;:::;::;;,,
++''++':.````;;.```,;;:;;;::::::;:;;::.`,:;;;:::::;;;:::;;;::.++'''''+'';';'''''++'+:':;';'''+''+'+''++'+'''++++'+++++'++++''+';''''';;;;;;'':;;::::,:::::::,,::::::::;::::::::::,::::::::::::;::;:
;::;::,,``...:.``.,';;;;;::::::;:::,,::;;::;;:;::::;';;::::::;'++;';';;;''''''+++;''''';''';+++++''++++++++'++++++'++++++++'+''+';;;;'''+''';;:::;;;:::::::::::,:..:;:':;::::;:::,:::::;,::::;::;::
` ``....,`::..`.,.:;;:';;:::,,,,,,::'';;::::;::::::::;:;:::::++''''';;:;+++''+'''#''';''''+''+'''+++++++++'+++++''''++++++'+'''+;;+''';''''''';;;;'';;;;;;;:;:;:::...:::::::,:::;;::::::,::,:::;:::
;:......,,;,.`::,..,::::,..,,,,::::;;;;:;::::::;:;;;;:;;::::''#++'+'''+++++'';''++''''+''+''''++'+'++++++';'++''';;'+++++++''+''+';';''''''';'';;::;;;;:::::,,:;.,,,,.,.,,:::;::::::::::::::::::;::
;;;'';:;:;:::,::;;,::,:::::;::::::::;;''';::;::;:;;;:::::;;;++++'';;'''''';;;'+++'''''''''+'''++'+++++++''+''''''''''++#++++'+'''';;;;';';;:''';;:::;;::';::.,,:,:;;;;;;:,.``,,:;:::,:;;:,:::,,,,,:
;'''+:,::',:';;;;;:;;;;:;;:::;;;;;;:::;;;;;:;:::::::::::;;;''++'''''''+'';'+''+++'+''';'++'+'+++'+++#+++'+++''++++++'#+###+++++++';;;;'''''';''';::::::,,..:,,,,::::::::::;:;:;:..,::'';;:;::`..```
;;;;:,,:;;:;::;;;:,.,;::;;:::'+';;;;;:::::;;::::::::;::::;'+++'''''+'';;;;;;'++'+''''''+;+'''+++++++++++++++'+##++'@''++###++'++'''';;';;'';':;'+';;:,,:,..,:;:::,::::::,:;:;;;:::::,:;:::.`....`.`
:.:,,,,:::,,:;'''';.::;:::;;;;+'''+++':::::;;;;;::;::::;;;'+++'''''''''';;''''''';'''''+'''+++'+++#+#+#+++#+++++'''+@@'#+++#++''+''';;;'';''';;;'';:,,:,,:::::::,::,,.,...```.,:.`...`.:`:.:,:';'''
,..,,.,,,..,:;;;:;;::::;;;;::;:.,:'+''';;:,,:::;;;:::;:;;;+'++'''''';;;;''''''+'''''+++''''+'++++++##+#+##'';'++';+'+++###+++'++++''';;;';;;;;;:;'';::::,::::,,....::;:,::,:;::;;';'';;':,::;;:..``
:::,:::;';,:::::,::::,::,::,:::;:;;::;,:::::;;:::::::::::''''';'';'''''+''''++'''''''''++'+'++++#+###+#@@#+'''++'';###+#+#+++''+'+''''';''';::.:;';,:,,.,:;;;;;:;;::::::::;::;:;;;:;;;;:::;;::::;;:
:;;;;;;;:;;::::;,::,,,:::,,,,,::,:::;:` .::::::::::,:::::+''';':'';';'''''+''''++'''''''''++'++++######+##@+''+#''@@@'++#++++'++''+'';:;:::::,::''+';;;:::;.....,,,::::;:::::::;:::::::,::::;:::::;
::::;;::;;;;::,::::,,:::,,,..,,,,::::`` ` .;::,:,::,:::::+''+'';'';;'''';''''';;+'';'''''+'''+'+######@###@#+''#++@+++'++++#+++++'''';;;;'++''+''';:,,::,':::::,,;::,:,.,:::;:;:::::,,:::;:,,::;;,;
,,;;;;;:;::::,,,::::::,,,,,,.,:,;::;:`` ` `,:,::::::::::''+';;;;;;;;;';;'''++'+';;''''''++'+'++++######++#@##+;'+++'+'++++++++++''''';;;'''';;;;''':::.;,,:,::;:;,,:;:;:::;:,:,;;,::;:,:::,,:::,::
:::;''++';:.:.,,:::,:;:::::::;;;::::::``````.::::::::;;::;+'''';;;;''';'+'';';;'';'+''++++++++'++++##+++++++#+###+++''''+++++++++++'''';';''''''';'';;,;;:::,,,:;:,,::,;+';.;;';;':;:;;:;:::::;::,:
::'';;;''+':,::;;::::::::::::::::::::'```,``.,::::::::;;:'''''';';'::;;;+'''''''+''''''''''++''+#+###++'+;+##+++++++';;;'#+++++++++'''';;'';';;;'+''',;:,::::;;::,,::;,;,,:::;;';;;;;,:::,:;::::;;;
;;:;::::::':,:;;:::::::::::::::::::::;;``,``.,.;:;;::;;;;;'''';'';;;+''';:'+'''';'''+++++++''+++'###+++'+#+#''+++'';;;:;;''+++++'+''''''';''';'';;;''+;:::::::;:;;:,:;';;::,,::::;:::::::::::,,:,,:
:::::;;;;:;;;:::::,,,:,,,,,,:::::::;;;':`,:.,,`:;;;';::'''''+;';;''''+;''+;'''''''''''''+++'#++'#++##+'''''++++++'';;;;;;'+++++++'''+''';;;;;;'''';;'+;,,:::::::::::;::'::::::::;,:;;:,;':::,,;';;:
;::;:::::::,,,,,,,,,,,::;:::::::::;;;;;+::#;`,,,:::;:;::''''''+;''';;;;;'++''';;;''';'+'++#:++++;++##+';;''''+++'''';;;;;'+++'++++'''';'';;;'''';;'''';,:;:;;:::::::::::;::;::::::;:::;+';:;'+'++''
::::,::::::,:,,:,,:,,::;;;;;;;::;;,::;;'+;;+,:`.;:::::;;''''';;''';;'';''''++++;,,;'+'''''+++#####+#++;;;;'''''+''';;';;'++++'+++''';''';,:''::+''+:''';:;:::;;:;:::;;';::::::::'::;,::,:::;;'+#+++
';;;::;::::,::,:::::,:;;::::;;::::;;:;;;'':+;'::;::::::;'''+;+';';++:'+++;::':;;;;;;:''+'+'++##+++++++;';;;;'''''''';;;;''''#''''+';';:::;'':,+',''+''';';:::::;;;::;:,::,:;;:;:;;;;;;;:;:;;;;;;:;;
;;:,:::,:,::::,::::::::::::::;:::::::::;:;:''::;;,,:;:;'''';:';;;,:''';;'#+:';;';';;';+'++'+++'++++++'';;';;'''''''';;;;'+'''+++''+';'';:;';'++:,+.+'+'::;:::::;;;;::';:,;:;+;:;;;;;';:::::;;;;:;::
::;'';,:::;:;:::::;:::::::,::;::::;::::.::::;';::::';:''+;;'+#,,;;;'+'++',;'''''';;;'''''++++++++++++'';;;;;'+';;;''';;';'+++++++''''';''',''';+';:'.+';;;::::'+'';:'+;:::;;;;;';:;;;;:;;;:::::;;::
:::;;;:;::::;;:,;;::,,,::::::::::::::::,::::::;:;;;'';','';+,;''+'''''::;+++;'';;'';'+'++''++++++++#+''';;;;';';;''''''''''++'#+'+'';''':'';:+';;';;;;:':;;::;:;;:;;;''::;';';''':;;;;:::;;;::::;;;
;;;::::;,;::::;:::,,,,,,:,,,,:,,,::::,::::,,,:,,,:;';,;''#.'';';''+'',#'''''';'+''++'''++;'+#++++++#''+''':;;':'':;''''''+'+'';+''+'''''+,:'+;+''';;';;.':::::,,,:;;;''+;';;;'#;;:;;;:;;;;;;:::;::;
;:::::::::::::,:;::,,,,,,,,,:,,::,::,,::,,::,::::,:.:';+.'''''';++',:''++''''++''''''++++;#++++++##++''''''';:';';;:,++'''+++++;+''+'''''+;:,#;'':;,';';,;;;:;;;;;:;:;::;;'';;;;;;+';;;;;;';:;:;;;;
::,:::::,.::;:.:,,,:,:,,,,,::::,,,,,:,::,::::,,,:,:;:;,''+''';'''+:'+''++++++'''''+;+'+++++#+#'##+++++'''+';;;;''';;:';+'+'+#+#+'++'+'++;;+:+:.#;;':'''+.'`;;;:;;::;;;;;:::;'';;:;;;:':':';;;;;;';;
:;:::,,,,,:;:,,:,:::,::,,::::::,,,,,::::,::::,:,,:,::,+'+'''++'':;'#'''''++''++'+':;'''+'++'+++#+++++++''':;;;;+;''.,;,''+#'+#++'+'''+'''+,'''+,'';''::'+:+.;;:::,;;:;;;;;;;;;:;;;;;;::;:,;;';;';;'
;:,.,,,:;;::::::,::::,:,,:::,:,,,::::::::,,:::,::;;.';;'''''++',++;'+''+''';+;+',;,'''+;+++'+++++####+'+;+',';;'';;;;.:;'++;++''++'+#;+''++:+:+'',+;;+;,';:;,;;::;;;;:;';;:;;;;;:::;:.'+''';;;;';;'
,.,,;:::::::,,::;:;::::::;:,,:,:,,,:,:,:::::;:;;;:,;;;'+'+'+'+:''+''''+++''#;++`+,+''',+++'++'+++#+#++++'+';:';;';;;;:;.'++++'#+'++;+';''++',#;+;'.'++;;.+;;:,;::;;:::;;::;;;;;:,,:;;;'''::;''';;;;
::::;:::,:;:::::::;:;';::::::::,,,::,::;:;:;:;;:,':;;'+''+++';++;''''+++;'+;#+.+:+++',++++'++'++##++#+#++;';;:;;+;;;:,'.+#;+;#+;++++'''+;';+':';+:',+;''+.;;:;,;:,;;::;,::::;';::'''++''';;;';';;;;
::;;::::::::::::::;;;::;;;;;;;:::;::;::;'';;'';,:;;;;''+'+++'+'++'+''++:''''#.':#''';++#'+;++'++##'#+##'+'::;:;;+;:::,':'+;#+'++'''+;'+:+:;;++,';+':;'''+':;;:;:;:::;;;';;::;;;;;;+;::;;;;;;'';::;;
:;:;;:,::;:::;;;;;'';;;::;:;::''::::;';'';;''';;;;+'''+++'+'+'+'+++'++,+'','.++;+'':;'#'+#'+'#++#+'#;+':'',::;::+;:::.::+#'+++#+;++;@;:+:',::+;,+,+';';;+'',:;;;:,,,::;;;;:;;;;';;:::;;;;:;:'';':;;
,:::;::;::::;;;;;'''+;:::;::,,::;;:::;';;;;':'';;;'''+++'++++++#+++++,'+',:,#+,'''+#'+;+++;#+#'+#''#;#++#+',:;:;+;;::.;;'++;+''+;++'+;+;;++;::++.+`'';;;:;;;::::;:;;;:::;:::;;;;;:;:;:::;;;;;;;;;;;
,,,::;:;;;:::;;;;';:;:::;;::;;;;;;;;;'''';;;;;';;;'''+++++++'++''+++.+#,:,'+''++''+;+++++#:++#;+#'#@;##::;;::;;;';:::.;;;++;+++''''';';;':'+;::'''':;''';;;:;,:;;:,;;::;;;;;;;;;;'';;:;:;;;';;;:;;;
::::,:,:.;;;;;;;;;';;;;:::;'';';'';;;'':;';;;;;';;'+++++'+'++++;''+.++..:+.'':+'+++;#,+++#+++#;'+;@++##;''',;;;;';;::.;,;';,'+;+''';;#;+;'''+'.:':';'''':+;;;;::;:;.;:;;;;;;;'##+';;::;;:;;;;;'':,:
::::::::::''';;;;;::'+;;::::;;;:;';;;';:;;;;;;;;'''+'++''+++++'+';,+':,;'.++#+;:++:;'@+##+#+##;'+'#+#++++';::;;;';::,.'::'+:;+'';'+#;;';'''';;+;'':;,''''.;;;;:,;:;',:;;;:;;;;:'';;;;;+;;;:;;;;,,::
::::::::::::::;';:::;::;;;;:;:::::';';;;;;;;;;;;;'+'++++++'++'''':+;@,''+;++'''####;,+'++###'#'+#++#@'++;'';::;;';;;,,+;;''';;+';++++;':+;;''':#:';'':'+'',;;;:;:',;'::;;;;;'+'';;;';;;:;::::;;,;';
;::::::::::::;::::;;;''''';;';;:;:;;;;:;;;;;';::;++'+;''+++''++++#'#`;++,#++;;;#+.#;@+#++#+#+'+##;++#:#+''+;::;;#++'''+'''+++;+#+###+:''':;'''+:;:';';''''',:;';;;:::.::::;';'';;;;:;;'':'';;;;;;;;
:::::::::,:::;';:::;;;''++'';:;';;;;;;;;::;;;;::'+';++++++'++#+#:++:,+++''+#.;+'@+;,+;+#+#;##++'++'#+;#++''+:;###++++++'++#;'+;'##+++;'+'++'+'';#:+.;+,:''':';;;;,';:;.:;:;;;;';+;;;;';;';;;';';:;;
:;:::::;:::::;;;'::;;;;;;''':;;';;;:;';;';;;:;'+'''++#++'''+'+#`'':`@++++'';';++:@#;#+##+#'@+++'+++++''+'@'+##+#+++++#++'++++++'+#++#''+;++;''';:'`';';''+';.;;;;',''''::;;;;;;''';;;;;;;:;;;;;:;:;
:::::;:;;:::;;;;'+:::;;;;;;;;;;''';';;#++'''';;';''''+'+++'+';:+#,''+'','+#:,+++.:##:#+#+#;##+'+++#+''+@#+++++####+#++#+++#'''+#'++++;#+'+:;'+:';;'';;',;+';':;';;;+++';';;;';;;;;;';;;;::;;;;;;;;:
::;::::::;::;;#'+'+'+'';;;;;'';;';;+++'+'+''''+++''+++++++''##'#.+`++;':+',+`++##''@:#+###+###'+;@##'++#++##@#''#;'';++++:'+''#+#++++''+'';:'''';:;::;':';';;;'';;':+';':''';';'';';;;;:;;;;;;;;;::
::;;;::;;;;::::';;:''''''''''''+';'''''''+++'++'+'';+++''+++#`+`+:+';++''#;+;++++@:@#'#####;##;+@'+'++'++++#''+'#'''';+'''''+'+++####'+++'';;;'';:++`';;,;';'':'''';:'''';;;;;;;;;::;::;,';;;;:;;;:
:;;;;:::;;;::,';+'''';'+++''';;;'+++'';''++++''+++'+''++++++;#.++,'++'+++.#,'+':,+.+#++###+;@#'@#++++'''++#+;'''#''';''';;;;;';''++++''++'+:#';;++;':;;',;';''''#++'+:'';';;;;;+;;;:;:;:::;;;;;:;;;
;;;:;;;:;;;;:;;;:+'''''''+'''+';++'''''+''+++''+++'+++++''+#:,++`.+''+;+#;+:+'+:++.:#++##+##'#+#++'+''++'++''+''#''';;';;;;;;:;:;++##''+++#;+++:'':;,;;';':';:''++++''++'''+'++#+;:;;;;:;;;;;';:;':
;;;;:;;;;;;:;;:;;#+'';'+''';;;;'++'''''#';'+++'+++''++'+#'+,+'+++;;+':+#;#++''+`++.,+++#####'+++#++''''''++'''+'#'''';';;;::::::;'+###;'#+#;+'#+;;;';:;;+:'';+;'''''+':+''';'''':;;;:;::;;;:;;:;:::
';;;;;;;;;:;:;';;++;##+'++';;;;;;''''''++:;++++'+'++'+++++#';++`+++';#'+.';#;#+ ++::##+###+#'#++++''''''''+'''''@'''';'';::,,:,:;''###'+++#''+;'';;+:,;;;:'';;';;'''''+'';;;;:;:;;;';;:;:;;;;:;:;,:
';;:;;::;;;;;;;:;''++'++'''+;;''';';'''++##++++''+'''+'+++,:++'+,++,#+'#++.'+;+.++';+++####@+#++'+';;'''+'+'+'++@'+'''':;:,:,,::;;+#+##;'#+#+;+'+++;:';;;'#';;;''''''';;+;;'';;;;;;';;;;:;:;:::;;':
+';;;;;;;+';;;;;';;+';'''''+'''''''';';+#+'';+'+++++'''+'@`+++.',#:+'+':+#:+'+#,+++;#+#+####+'++';;;;;''''++++++@'++''';:::,::,:;'++#+++++#+++''#'',:;,;'++'';;;'''''''+:+';;:::;;;:;;;;;:;:;;;;;';
+';;;;;;;''';;;;;:;'';;'+''+++''+';;'+'+++';'''''++++++'+`+++:++,,'+'++,'#+#''':+++:+@#+####+;''';;;';;'''++++++@'+++''::,,,,:;;;++###'#++#+#,;''''::':;:';';;;;''''';';'';;:::::;;'':;:;;;;'';;'''
'';;;;;'';:;;;'';;;;'':;''''++'';'''+#++#+'''''''+''+'++';+++:'#;'++++;+++#:'+;;++#:'#++##+++'';;;;;;;;'''+++++'@++++'':;:,,::;;'+++###++'+#+#;:++':;':+;:,+;;;;'''''';'':::::,:;;;;';;:;'''';'+;''
;''';;;''';;'';;;';;';;''';'+++';;'+#+#+++''+'+'+++'+++#:@'+,++''+''''+#+;'++'.'++#;;+#'##++''';;';;';;'''++++++@#+++;;:::,::,;'++#####+#'++#+'##'':;';';'`+''''''''';;;:':;:::::;''++'''++++''''''
;'';;'''';''''';;;;;;;';;;;';;;;;;';'+++'''+''''+'+'++#,.'+#;'+;+++'+',+';#'++,#++#;'@+###+#+'+;'';;;;';'''++#++'++++';:;:::;',:+#####++#+;++##''+':''';'';;'''''';'''';';,::,:;;''''++''''''++'+'+
'''';;';'''+'';''';;;;'';::;;;;:;;;;;''''''+'';''++'++;@'++.'';;#''';#.'+:+'++:#;+@+#;+'#@+#++'+'+;;';;;';''+++++'+'';;;:,,:;;'''+###+'##+;#++#'#';;+'';;'';'';''''''';'';:;'';;;'''+'+'''''+++++++
';:;'''';'''++''''''';;';'';;;;':';;;';''''+'+''+''++++:#++'+;':'+'+'':+',+++#'+.'+#@#:+##+##+'++';;';;;;';;;;'''';;;';;;,::;';;'####+'++;++++++'+';'';:'''':''''';';';''++;++';';'''''''''+''++'++
;;;;;''';''''''''''+'';'++'+';;;''''''';++'''#'++'+'+;',++,''+';'''''#''','+#@++#+##;#++######+'++;';''''';;;;;;;';;;;';;,;;;;':;:###++'#+#+:+++'++:'';;;;;::'''''''';;''+####+++';''''''''+++++'''
:,;;;;'''';;'+++'''++'';''+'''''''''';''++'+#'''+++''+#++++'+'''+'''''##',+'#+++#;##'##;####@##++''''';;'''';;;;'';;;';;;::':;'';+'+#+#+'#@++#'+'++:;;;:''::;;'''';;';;''++#+++#++''''+'''''++'''''
::;;;';;'++'''''''++#'++++++'';'''+'++''''+'+++''++''':+'''''++'';''';+'+,++++#+#+###@+#'######++:+'';;''''''''';;'''';;::;;:;;''+#+#++'#+#+#;'+;;+;'';::;;,;;;;';';;;'''''++'++++++';'+'''''''''''
:;;:;;;;''+'''+++++'++++''''+'''';':;'''+;+;'';;'';''',+'+++'''';+''':#+':'+++#+#####;##'######'+'+''';''''''''''';;;';::;;';;;;++#####;#+++#+++'+''';;;';;;:;:+:;:'''';;'''+'+''''''';'';'''''';''
;'+';;;';''+'++++''+'#+++''++++;''';+''+'++++''';+'''+;+';'''++'+;+'',''+:;#;+++####@@#+#+@####+'+++'';+''''';+;';;';;;::';;';++++++#++'#++#+@;+'++;';':;;:;;:;;';';;;;;'''';''''+'+;''';;;;''';;''
''+'+';;;;;''''+++'#++;#+'+++''+'+'''+++++++''''''''''+'''+'''++;+;+',#;+:++''#'#+##@+:+@+######'++'+'+'''+''';:;;:;;::;'';''++#####+##+++++++;++;'''''':::::;;';'';;'';''''''''';;'';;;''';;;;;'''
;;'''';;;;''+#+'+''++#+++++++''''++''''''+''+'++';''';'''''''+''''+''.+++'##;#@+++###@##+++###@+++'+#++''''';;;:;:::;;:'''''+####++#++++++++#++++;';';';';'':;;;;';'';';';'';'''''';''';'';;;;;;;;'
';+':'';;;;;':++'''''##++++#+';''''';'+''+++'+'''++:;;'+'+'++'''+'+;'.+'+;+++##'#+##+#+++##+#####+++++++++'''';;;::;:;;'''''+####+@++#++++#++''#;+'';;;;'':;';;'';:;'';''++'''''+'''';;;;';;;;;;+:'
';+''+;';'';'+'+''+'+#++'#+#++''+';'''''++++''+'::+';;''''+'''';;'++'.+'+##++##++'##+#++;'#+#####+#+#+++++'''';';;';:;''''++##+#@##+#+++#++++++++;;'';;';:;:;;::;'++'''+'+++'''';';;;;;';;;;';';'';
'#';++'';;''''+''++'+++++++#+++'+++';'''+++';','++';;''''';+;++''''++.+++@'##'#+'+###+@''##+#@########+++++++''+;;;+';''#'+######+#+#+++++'##'+'''''''';;'';:;;;';;;''+++#++#''''';;';;;';;,;;;''+'
,:';+++;';''''''''''#+'''+##+#+#++'';'''''''';'+';+';;;;':+'++';'++'+.+#+#;+#+@++++##++;#+@'@###@######+#++++++''+'+;:+'#+######+#@#+##++++'++';'''''';;';;';,;;:''''+#+++''''''';'';:;:;';:,;'';,;
,:;+'+''';'';+''+;+'#+''+###+++++#+;++;+';;';''';';::''';+''+'#'+''++:++#+;#++@++'+##+#;##''###########++#+''''+''##+'+++@+#@+++#+####@##++'++'''''''';;;''':';;';;'++###+''''';;:;;;;;;;'';'';'';:
:::;+''''''''+'''+''++'+###+++++++''';''++'+'';''''';;';;;;+'++''+++#:++++'+++#'#+;##+#;##@'@+#########++++'+'+'''###+#####@'+++#+#+#####+++++'''''''';';':;:;;::;;'+++++'+'';';;'';:;;;;''''+'';+;
:;::;''''+'':''''''###++##++++++++;;;;+'+++'''''''';''''';'''+;++'''+:++#++##+@:#+;#@+#;###'@###########+++'+'+++'###+#####+++++++++######+''+''''''''';:;:;;;;;';'''''''''''';''''';;;';'';;;';:;:
,:,:::;+++'''+'''++##++###++++''++;';+'++++'''#;';;;'';';''++:'''#;++,#++++'''#;'+'#@+++@###########@####+++''++++#@#+@##@@+++@##+++++###+#+++''''''''';:;;';;;';;:''''+'''''''''''+';;''''''';';''
,::::;::;''''''''++##+##+++++'''+;;''''++';;'';';'';;:'';'+';#;+;;++';++++#;'##;++#'@#+'@+#+########@++##++++'++'+##@+#@###''###++++++#@###+++;'';'';';'';;;';';'::';''''++'''+'+++;+'+'':,,''+++';
::,::::::;'+''';''++##+#+++++''++;';';''';+';'''';''+'';''+''+''+'+'';++++#''+@''#++##''+#+@##@##@#######+++'''#++####@###++@#@#++#+++###+++';'';+'';;;;;;':;';;:::':;'''++'+'#####;+++'+''';'''';;
;:;:'';;:;:;''+''+++#+##+++'++'';'''''''';;+:;'::'+';;;''+':+'''++''#''#'++++#'+:#+#++''##+##############+'+'''++#++#++#####@####+++++++#+'++''''''';;'+'':;;::;;::;;;'+'';;:;;:;+##+'';'+';'+:'';;
,;;;;;;;'';;'+##+'++###++'++++'';''''';''+;'';;+;;,';;;'''''''+''+++#;#++++'+#+';#+#++'#++##############+++'';;+'++++#+####@###+####++#######++++++';;;'';'::;:;::;;;;:::;;;;;;:;:,+''''';;;;:';'';
,:;;;;::;;;;';###+++##++++;::++';+''';;'':;:;'';;;';'';'''''+'+''++++'+##'#@++#+;+##+#'+##+++######@+@##+++'';#++++#+##++#@###++#+#'#+###+#++;;:;;;;;;;;;;;:;;;;;;:::::;:'::::;;;;;;;;;;';;;;';';;;
:'::::,,::;'';+##++++++''::;:::,:::;;:';;;;;;;;:;;;;;;';'+;++++''+++'++#++@#+##+'#+++#'#++@###@+###@#####+';''+'####+#++++#+:'@#+#+++##'';;';;:'+;:::;;;;';;;':::;::;:;::;:;;':;';+;:;:';';.;;';'';
;:'':,::+';:;;+#+#+#;'.,::;,:;:,::::::::::;;::';;;:;;;;';'++'''+'''+++++##++###+#++#++'+@####@+#@+##@#####'''#++##@#@#';;;;;;';+';;;:;:';;;;:::''''':;:;:;;;;:';::;::::::;.::';;:;;:,::'';;'';'+'':
'';;:;;';,;:;;:::,,::,:;;::,;:::::,::,::,:,,::::;;;;;+'';'+++''++++''+++#++#####+###@#'###+##@#++########@#++++####+';;;':;;;;:;;;;:;;;:;';;'+''''';+#;:;:;::,;;:;:;:;;'';;';:;;;;;:;'::::;.:;;;:::
;'''+'';:::::;,,;;;:;;;:;::::,,:::,::::;,,::,:',:,;+';:'':'''++''#+'++'#++++#+########++#:;###;';:;###',::,;';###';;:';;;:;;':;:::;;':';':';;+';'#+;;.;;;;;;::;::::::;:''..:,::,';,,:;::;:::;:;;;:'
,,::::::::;':::;:;;::;:;::'+'+:::::::::::;::,:,::;;,:;;';'''';++;:'+#++++#++++@@@':####'@,;:::#''#';:;:;;;;::;';;:,;:':'';;;':::';;;::;::;;;;;;;;;:::;:;:::;;:;;,,,:;,;:::;:;;;'';';::;;;::::;;:'''
::::,::;;':;;,,:::;;;;;;:;:;,::.:::;:::,;::,::;;;+;;:;;:;;;:::::::':,;;;'::#'',:`,:;@:,:.;,;;,,'#++;;;:;;'::;,.;;',,;:+'''+'+':,,;''+,;'':';:::,::,;;:::;';:::,,::::;::;:::;:,;+'++';;:,::';:;:;;:;
;'';;;::;:;;:::::::;:;::;:''::,::::;;::::;,.::,;;::::;;:;;;;;;::;:':::';;;'. ;;:':;':::::',;::;:;';;;;;;;;;;.,::,;'',.+;';'';','+#'';:;:;;.::.::;:,;:::,::'::,`,,:#':;;::::::;,,`.:::;::':::;;;::;'
';:;;;::;;;:::;::;:;;:;::::;:,,:::::::;::;:;,:;;;::'+::;;.,:::;;;;;::;.;:: #;;:;:;,;';''''+'#+'::;;'':;;:,;:''':+:;;'+;';+'''++;,,:,;';:::;;:;;;,:,::::;;;;':;:;;:::,::;::,:;;;;;:;:,:+:;;:;'';;,;;
;;+;;;':;:;';:;::;::;;;:,::;;:;;;::;::,';;:,;;';;;:;,;::;+;;';;++:::';::::',;;;,;;';:;:;;,:,,,,::,,:'';+ :;+;:;#+,,';;;';+;';;::,:::;:;;;;;;::::.;,:::::;::,:;;;:,:;:::..,::,:;:;':::;::''';:;#::+;
;::,:;;;:.,:';:;;;::;;;:;;;:;;:;;;;:;;':'+:;+,,;,:';;;'+;:;;,:;:,::::;;+;;+,;::;;'''+;;:;::;;';:;'';::'::;';';'''',';+';;+''';;::;;:::::;;;:;:;;,::;:,;:,::;:,',:;:;:;:::;::;::,:::::,;#';;:;;:++':
:;; ;:::;;'':,,,:.:+'::::,::;;;;;;:;:';',,:;;::::::;::``. :;;;::;'::;;';.+,;;;:;;:::,;:;;;:';;''+;:::;,+';;:;;';;'+;';''+@++'':'::;';;.';:::;'.::::;::::';:;::::',::'.:;::::::;;:';;''::;;;;:';:':;
' :;,;::.,;::;:;:,+:;;;::;:,:,,;::;;;:';+'::;;;;:;:;:,;'+#,:'';;;:`;;:;,.:':';:;::;;;;;::;;'+++';;''':;::;;:';+':;:@'##+'+#+;';;::;': :;,:;::,;::,:::;::;::::::'+';::;::::::;,;;;::;;:;:;+';;;:+#+'
;++''':; ;:;:;'';:;:;;;;;;:,,,;;;;:.`,;+';:::;';:;;'';:::,:;;;;:,;:::::';::;;;';::;',';::;;';:;:';;'';'';:;;;'+'+';''#';:;,,;';':;,:::'++;'';';;;:;::,::'::::,, :::::':;;,:::;,':;;::::,:,;####+;:;
::;:;;:;,:;:;::;+::;::,;';::'::'+';';::;;;;':::::''::;;;';,;,,;:;;:';,;;::,;::::::::;;:,::;,,:::;;;'++'++'''::;;;;';':.:,:;:':;:,:::,;;''+;:::;;:;:;',:;;:::;;;:;,:::;:;:'::::',;::;++;,,';,;:;;::;
:;;:;::;',;;;+;:,,,,,..:;;::+';;;:;:;:+;;:;;,;::,,:;,,;;;;;+,;'':;':;:;;:;::;:;,;:::;:';,,;;,::;::;:;;.;'';:':;;;;;;';'.;';#;::;,':::::;;;::;':;;;:';;':',:;:::;,::::.:;::;::,;:`,;:;:;:';;:,++;:::
;;;':::,';;,`.;'+':,`,',,',,.,;;+:;:+'::;;;;;,:;';:;:,,+';:.,::;;,,:;,:,,:::,';;:.:;:::;',,:':;::::;;:''+;:,.',:;+#''+;';,';:;::;:;::;;;,::;:,:,:;:;;;'+:':::,;;:,;:;;;;;;;:;;:;':;;.: ;;;';':;;;,;
,;:,':,:,:+'+;:,;,:;',:':;;;,+';;;;::;;;:':';'+;;:++;',.,;;';#.;:,.,:,::;:;;';;;;;:,;::::;:':;':;::;;':::`:::+::;:,'';;+;',+:#::;::@;:;;;;';:;',,:;:,;,;''::::;;::;::,;.:',::''::;;;:,`,:''';;;::''
:;;.;#,#',:::;:,;:;::::;::::;;:;';;:';;::;;;'':,,::;::,:;::::;.::,:::,;;;;;'',:;;;;:;:;:';;:;:'::::,'+:;+##+;;::,:';:;';;'+;::':::,..;.:::;;.:::';;;'::;;;;'',;:;:,'::;:::::;';::;,,::::;:+:;':;::;
::+`.,;::::;;;:::;:::,;:.:,,,:';;;;;::::+:,'',:,,.,;';:,';:;:;:::,::;;':::;::+:;:';;':;';;;'+;'';:,;;,::,;::',::#,;'';';':;'+,,;,'::::,:';:.,:,;;;,:':;':;;:;:';';;:::,;;:::,::;::,;;,'':':;;;;:;;;
,;;':;::;:::::::;';,;'';:;;::;::,':;,:;:.;,::::;:::;::,':::::;;':;:;::;',;;;:':';;,;':'';;;:;'##+'+'.::;:::::,`,;;;;#;;'+';,+';.,.,;;,,+,,',';;;';';;;';;;;:,,;';;;'::;;;;;:;::,;;:;:++;.;,;+.'#'':
;:;:;;:;;;;;;;;:;;;;,:;;::::;;::;;:'`,::,:,::::;;;';::::;,,:;;,:::;;::#';;';;::;:';:,+;:;;;::;:;; `::;;,:;;+,''';;+;;::,;;;;'''',+:,:.,':.,,::';:;'',:.,..`..,::;';',';;'';';,'+;;;:;.;:',,:;#;:;';
:,::::::::;,.`::;;;:;+,:;;:,;:,::.,;,,.,:';;;;;:;';;:;:`;;,,:::;;:.,':,:;::;;;#:;;'++`:::;;:;::::;;;':';';:;;;::'+;';:;;:::,::+'+,:;;:;;;;.,. ';:;:;'++#@##+';#'';;;'+''';:;;;::;:.,:;::.,,+.:::;::
:,,:':::,,:;::::::.;:;+',:,;::::;':;++;::@'';''+';':;;::,:;;`;;:,.;;,:;::;::::;::;;,;':;;::;::+';';;'';;;:;':;;;+;;;;;:;;:::,:+'+':,,:;;::;::;:,`:'+''++::::'+;:;;;;:''':';;'.::;';,::;,.,':::::::,
.::;::::,::;;:::,.`;;:::;''',;':;;:,,,:'::.;#+++':;;;:;:':::::;:`';';:;;;';;;;,;;:;;::::,:;;:'+;'':+'''+';'++'+#++'#;+;;:::';:;+;+''.::'+;'''';;+':`,;':#,:;::,;;;;;;'::;';:;':;'''';'.,:+;;:::;::;
:;;;,,,::::`::::::::::;::::,:;;;.,:;';;;;;::';';:,:;::::,.;,;::::;;:,;;':;;,:::;:';;:::::;+';;+#'.;@#+++'+++##+#+###;';'';++';:::;;;+,:::;.::::;:,+#''`.:';;';;;:;;;,.::,:+;::;;';:::;.,',;;:'#:,,;


http://gopher.floodgap.com/overbite/relevance.html

Name: Anonymous 2014-08-09 17:55

>>93
Does this mean that I will die? ;~;

Name: Anonymous 2014-08-15 2:32

Name: Anonymous 2014-08-15 16:32

>>95
reinventing the wheel in Rust with GC for added slowdown

Name: Anonymous 2014-08-15 19:52

>>96
you don't have a slightliest idea
just dropping all legacy/compatibility crap could provide _huge_ speedup

Name: Anonymous 2014-08-16 10:18

>>97

I've a big idea: GC is shit.

Name: Cudder !MhMRSATORI 2014-08-16 12:26

>>95
It's a start, at least...

children: Vec<Node>
That's not really the best choice for the DOM tree, as simple as it may look - arbitrary position inserts and deletes, and thus "find next sibling"/"find previous sibling", are going to be far more common than indexing operations.

The article about parsing is just one big facepalm. At least use a state machine for the tokeniser... I see now, this is written in an id10t-proofed language that's missing goto so they have to bend over backwards to do anything truly simple and efficient with it. In the old thread I mentioned I had a full HTML5 parser written in C in a 24KB binary, consisting of 12KB tokeniser and 12KB tree construction. I've rewritten the tokeniser in Asm since then, and it's now... less than one kilobyte!!! At ~70 states, with around a dozen bytes per state on average, maybe that's not so surprising after all.

Tree construction is a bit trickier since the full number of possibilities is basically {text, n types of tags open/close, comment, doctype, EOF} * 23 "insertion modes", but many of these cases are identical so there's a lot of redundancy (e.g. DOCTYPE tokens are basically ignored in everything but the initial IM - considering that 16 tokeniser states are needed just to parse these, it's rather wasteful.) At the moment my tree construction is 66 functions in ~2K lines of C with the bulk of the code being switch()s; when I have the time I should try to shrink that too. Encoding the state data in arrays instead of directly in code might help...

I haven't written any CSS parsing code yet so I'll not make any estimates nor comments on that third article.

Name: Anonymous 2014-08-16 19:16

>>99
Shalom!

Name: Anonymous 2014-08-16 20:08

>>99
but goto considered harmful

Name: Anonymous 2014-08-17 1:16

How to master CS like cudder?

Name: Anonymous 2014-08-17 5:22

>>102
By picking pecks of pickled peppers.

Name: Cudder !MhMRSATORI 2014-08-17 9:35

>>101
Dijkstra considered harmful.

Name: Anonymous 2014-08-17 9:38

>>104
Shalom!

Name: Cudder !MhMRSATORI 2014-08-18 11:24

Figured out another optimisation - DOCTYPE tokens don't need to be handled fully by the tokeniser, that's another dozen states I don't need...

Name: Anonymous 2014-08-18 11:38

>>106

implying removal of features is a valid optimization

Name: Anonymous 2014-08-18 12:24

Browsers are bloated mostly because the layout engines are bloated.
Hopefully, Servo will be good.
https://github.com/servo/servo

Name: Anonymous 2014-08-19 1:09

Name: Cudder !MhMRSATORI 2014-08-19 6:22

>>107
Yes, removal of features from one place and insertion of them in another place where they make more sense. The tokeniser doesn't need to parse the fields within a DOCTYPE, it just needs to figure out where the end of the tag is, which is really easy (but you wouldn't know just by reading the spec) - scan to the next '>'. The fields within it can be parsed at some later point, perhaps even in a different thread. The DOCTYPE is only used for an edge-case quirks-mode parsing decision but the way that's detected in the spec is ridiculously bloated (see http://www.w3.org/TR/html5/syntax.html#the-initial-insertion-mode; all those string constants are bigger than the whole tokeniser I have), so I'll probably end up just defaulting to quirks-mode off and letting the user push a button to toggle it if she feels the page doesn't look right...

Character references (&lt; &nbsp etc.) are another thing the spec tries to put into the tokeniser, but once again it's not necssary to parse them at this point to determine the boundaries between various pieces. Charref conversion can be done when strings get copied out of the input buffer and into the DOM.

>>108
2/3rds Rust and almost 1/3... Python!? The code I glanced at there doesn't look much simpler. Browsers are bloated because the whole thing is bloated. The HTML parser there contains a tokeniser...

https://github.com/servo/libhubbub/blob/master/src/tokeniser/tokeniser.c

...which is a pretty horrific 3kline+ piece of code, much of it duplicated, considering it came from one of the more "lightweight" browsers - NetSurf. On the other hand, Dillo's HTML parser (entire parser, tokeniser is integrated, around 4.1klines) is quite a bit nicer, although I don't know how HTML5-compliant it is:

http://hg.dillo.org/dillo/file/tip/src/html.cc

Name: Anonymous 2014-08-19 18:48

>>99
Make it in FORTRAN!

Name: Anonymous 2014-08-19 19:30

>>110
Shalom!

Name: Anonymous 2014-08-19 19:40

I've found you gays hate Cudder that much...

The fear of being identified as gay can be considered as a form of social homophobia. Theorists including Calvin Thomas and Judith Butler have suggested that homophobia can be rooted in an individual's fear of being identified as gay. Homophobia in men is correlated with insecurity about masculinity.[64][65] For this reason, homophobia is allegedly rampant in sports, and in the subculture of its supporters that is considered stereotypically male, such as association football and rugby.[66]

Name: Anonymous 2014-08-27 9:23

Name: Anonymous 2014-08-27 16:17

>>113
Shalom!

Name: Anonymous 2014-08-27 16:48

>>113
I don't hate him
Cudder is not gay tho, he is just a girl, thus making you transphobe thus showing that you are a tranny

Name: Cudder !MhMRSATORI 2014-08-31 11:59

HTML5 tokeniser + parser + DOM allocation + nice treeview GUI (looks like FF's DOM Inspector) in under 32KB! Only tokeniser is in Asm, rest is in unoptimised stupidly simple C.

Add CSS parser, box renderer, full network support, and it's still probably going to be under 256KB. Assuming the target is 1MB that still leaves 768KB for a JS interpreter, w00t w00t!!

Name: Anonymous 2014-08-31 12:30

>>117
Shalom!

Name: Anonymous 2014-08-31 13:53

>>117
That's impressive, Cudder-sama. But all that effort could go to defining a new web document standard instead. I don't see why anyone like you would write a browser based on the absolute shit ``technologies'' we have right now. You are much better than this.

You know nobody will use your lightweight browser, but you might get some attention if you propose a sane alternative to HTML, CSS and Javashit.

Name: Cudder !MhMRSATORI 2014-09-01 5:15

>>119
You're doing the equivalent of asking a C64 democoder why she chooses to continue working on a highly constrained 32-year-old platform. I'm more interested in redefining attitudes towards software complexity and engineering than reinventing the Internet, by taking a relatively complex standard and making a simple implementation of it.

HTML/CSS/JS is complex but my main argument is that complexity is far less than what contemporary implementations lead one to believe. Or perhaps that complexity is just from attempting to handle edge-cases that are not at all important in reality; that's why I'm trying to write a standards-compliant (or nearly so) browser, to prove what can be done.

Or if you want to be cynical, this is my "embrace, extend, and extinguish" strategy.

Newer Posts