diff --git a/www-client/iceweasel/additional-files/branding.zip b/www-client/iceweasel/additional-files/branding.zip
new file mode 100644
index 000000000..a3ff2ba7d
Binary files /dev/null and b/www-client/iceweasel/additional-files/branding.zip differ
diff --git a/www-client/iceweasel/additional-files/iceweasel.rdef.in b/www-client/iceweasel/additional-files/iceweasel.rdef.in
index bbc2126ac..19400f0fd 100644
--- a/www-client/iceweasel/additional-files/iceweasel.rdef.in
+++ b/www-client/iceweasel/additional-files/iceweasel.rdef.in
@@ -15,352 +15,263 @@ resource app_version {
resource app_signature "@APP_SIGNATURE@";
resource vector_icon {
- $"6E6369662E020112030000003941E5BC3F4A00000049EC214B97C30000B46600"
- $"5AFF0000034E9A0602000602000000BD04BA3D04BA0000004B78E04A2B900044"
- $"34E2FF15069A020102033D04BA0000000000003D04BA49ED074A2B9000FFFFFF"
- $"B2CC13059A00FF4434E2FF020112023CF9C0000000000000BCF9C049ED07461C"
- $"8600FFFFFFFF00020112023D357C0000000000003C62FF49ED074BA2D500FFFF"
- $"FFFF00020012023ADF4CBC7CC93C7CC93ADF4C4AEDCE4AB8F200FFFFFFFF0002"
- $"001202BC7CC93ADF4C3ADF4C3C7CC94A7D404B2FCD00FFFFFFFF00020012023C"
- $"7CC9BADF4CBADF4CBC7CC948CCE4486FC600FFFFFFFF0002001202BADF4C3C7C"
- $"C9BC7CC9BADF4C47D79049444700FFFFFFFF000201120236836E382D3CBC8891"
- $"3AECE349F3E34A357B00FFFFFFFF0002011202382D3CB6836E3AECE33C889149"
- $"F3E24A357B00FFFFFFFF0002011203000000386573B8657300000049F4814A36"
- $"C700FFFF59FFD7FFFF0002011203000000360903B609030000004ABDA248DE65"
- $"00FFFF59FFD7FFFF0002011203000000347EA9B47EA90000004B0B5D492E3B00"
- $"FFFF59FFD7FFFF0002011203000000368F77B68F7700000048FC9A48BCC800FF"
- $"FF59FFD7FFFF0002011203000000368F77B68F770000004AD2A44964DA00FFFF"
- $"59FFD7FFFF0002011203000000368F77B68F770000004A6FE64B06C300FFFF59"
- $"FFD7FFFF0002011203000000368F77B68F770000004826514AB90800FFFF59FF"
- $"D7FFFF0002011203000000360903B609030000004AB3214AF5F500FFFF59FFD7"
- $"FFFF0002011203000000347EA9B47EA90000004A82CF4B371500FFFF59FFD7FF"
- $"FF0002011203000000360903B609030000004861244AFE5C00FFFF59FFD7FFFF"
- $"0002011203000000360903B6090300000048612448EF3400FFFF59FFD7FFFF00"
- $"02011203000000347EA9B47EA90000004793C24AD67200FFFF59FFD7FFFF0002"
- $"011203000000347EA9B47EA900000048C1C84857F100FFFF59FFD7FFFF000334"
- $"65A4020112030000003C45D3BD86B90000004923B348FDAE0000B466005AFF00"
- $"000201060200000039AD20BC0AB00000004A01AE4802300073A0D0FFFFFFFF02"
- $"000202BA3D2EBBE0C63BE0C6BA3D2E4AF96147F359003465A4FFFF3465A40002"
- $"010602328E7F37DBF3B7864B0C5F334A81FF44BD530073A0D0FFFFFFFF020106"
- $"02B67BAE3705C7370D6835864B4B80DE466FD40073A0D0FFFFFFFF05FF03729F"
- $"CF0500020012022C7231B0483F32735E2EA0694A9F5546E9F100FFFFFFFF0002"
- $"011202B181C235459FB56A9FB1A96A4A9E48465CCB00FFFFFFFF00020012022C"
- $"7231B0483FB2735EAEA0694B2605477A4D00FFFFFFFF0002011202B181C23545"
- $"9F356A9F31A96A4B389347022A00FFFFFFFF0002010602BA263DB64DBE35C23C"
- $"B981C84AD97A47DF280073A0D0FFFFFFFF02011202B0B3F734859DB5D75BB20E"
- $"FB4AC45B48882E00FFFFFFFF0002010602B86193379E73B5F763B69C174B15D8"
- $"4593FE0073A0D0FFFFFFFF020106022D10FD37B982B7035A2C7B074AEBB44495"
- $"040073A0D0FFFFFFFF020112030000003A69CABBC3F30000004A30E14B008800"
- $"00B466005AFF000002000602B73751BB002A3B002AB737514C29044B48110073"
- $"A0D0FFFFFFFF02010202BB42993BF6B3BA6069B9E8D4481DBF4A60D1003465A4"
- $"FFFF3465A400020112020000003C33E2BC80DE000000496E3C4B26C900FFFFFF"
- $"FF003B0208C6AAC9E7C6AAC9E7C6AACAD4C315CC27C54DCBB0C0DECC9DBBEBCC"
- $"27BE23CC9DB9B4CBB0B856C9E7B856CAD4B856C8FABBEBC7A7B9B455BE23C731"
- $"C315C7A7C0DEC731C54D55C6AAC9E7C6AAC8FAC6AAC9E7C6AAC9E7C6AAC9E7C6"
- $"AAC9E70208BF83B736BF83B736C2F3B736C7D8BC0650B90CC990BF00C7D8C5A5"
- $"C990C2AB50C89FBF83CA74C2F3CA74BC13CA74B72EC5A5B8E6C89FB576C2ABB7"
- $"2EBC06B576BF00B8E6B90CBF83B736BC13B736BF83B736BF83B736BF83B736BF"
- $"83B7360208BF83B736BF83B736C2F3B736C7D8BC0650B90CC990BF00C7D8C5A5"
- $"C990C2AB50C89FBF83CA74C2F3CA74BC13CA74B72EC5A5B8E6C89FB576C2ABB7"
- $"2EBC06B576BF00B8E6B90CBF83B736BC13B736BF83B736BF83B736BF83B736BF"
- $"83B7360208BF83B736BF83B736C2F3B736C7D8BC0650B90CC990BF00C7D8C5A5"
- $"C990C2AB50C89FBF83CA74C2F3CA74BC13CA74B72EC5A5B8E6C89FB576C2ABB7"
- $"2EBC06B576BF00B8E6B90CBF83B736BC13B736BF83B736BF83B736BF83B736BF"
- $"83B7360208BF83B736BF83B736C2F3B736C7D8BC0650B90CC990BF00C7D8C5A5"
- $"C990C2AB50C89FBF83CA74C2F3CA74BC13CA74B72EC5A5B8E6C89FB576C2ABB7"
- $"2EBC06B576BF00B8E6B90CBF83B736BC13B736BF83B736BF83B736BF83B736BF"
- $"83B7360208BF83C56BBF83C56BC204C56BC594C1EAC454C415C6D4BFBFC594BA"
- $"E9C6D4BD14C454B8BEBF83B768C204B768BD02B768B972BAE9BAB2B8BEB832BD"
- $"14B972C1EAB832BFBFBAB2C415BF83C56BBD02C56BBF83C56BBF83C56BBF83C5"
- $"6BBF83C56B0208BF83BEF1BF83BEF1C236BEF1C60EC1C0C4B4C003C767C37DC6"
- $"0EC75EC767C5A1C4B4C91BBF83CA2EC236CA2EBCD0CA2EB8F8C75EBA52C91BB7"
- $"9FC5A1B8F8C1C0B79FC37DBA52C003BF83BEF1BCD0BEF1BF83BEF1BF83BEF1BF"
- $"83BEF1BF83BEF106047EBD41CA11BEF6B74CB40CC0C2B2A0C0B9BD41CA11BD49"
- $"CA05BD41CA11CA1106047EC895BEE6B5CFC09ABF45B5B1BF3CB444C895BEE6C8"
- $"88BEEDC895BEE6BEE606047EB636C32EC8FBC17ABF85CC63BF8ECDD0B636C32E"
- $"B643C327B636C32EC32E06047EC189B7B3BFD5CA78CABEC102CC2BC10BC189B7"
- $"B3C182B7BFC189B7B3B7B306047EB786C5BEC7ACBC6BC070C1F3BF36BFFDB786"
- $"C5BEB778C5BEB786C5BEC5BE06047EC442C928BAEFB901C078C03DBE81C177C4"
- $"42C928C442C935C442C928C9280608FF7FC184C11DC184C11DC184C1CBC08FC2"
- $"C4C127C26DBFF8C31BBEA6C2C4BF3EC31BBE0FC26DBDB2C11DBDB2C1CBBDB2C0"
- $"6EBEA6BF75BE0FBFCDBF3EBF1EC08FBF75BFF8BF1EC127BFCDC184C11DC184C0"
- $"6EC184C11DC11D0608FF7FC548BC24C548BC24C548BC6FC4E0BCD8C520BCB3C4"
- $"A0BCFDC411BCD8C451BCFDC3D0BCB3C3A9BC24C3A9BC6FC3A9BBDAC411BB71C3"
- $"D0BB96C451BB4CC4E0BB71C4A0BB4CC520BB96C548BC24C548BBDAC548BC24BC"
- $"240608FF7FC6E7BD23C6E7BD23C6E7BD50C6A8BD91C6CFBD7AC680BDA8C628BD"
- $"91C650BDA8C601BD7AC5E9BD23C5E9BD50C5E9BCF5C628BCB5C601BCCBC650BC"
- $"9EC6A8BCB5C680BC9EC6CFBCCBC6E7BD23C6E7BCF5C6E7BD23BD230608FF7FBD"
- $"8ABBB9BD8ABBB9BD8ABC17BD07BC9BBD58BC6DBCB6BCCABC02BC9BBC53BCCABB"
- $"B1BC6DBB80BBB9BB80BC17BB80BB5CBC02BAD7BBB1BB06BC53BAA8BD07BAD7BC"
- $"B6BAA8BD58BB06BD8ABBB9BD8ABB5CBD8ABBB9BBB90608FF7FC604BDD1C604BD"
- $"D1C604BE2EC581BEB3C5D2BE84C530BEE2C47CBEB3C4CDBEE2C42BBE84C3F9BD"
- $"D1C3F9BE2EC3F9BD74C47CBCEFC42BBD1DC4CDBCC0C581BCEFC530BCC0C5D2BD"
- $"1DC604BDD1C604BD74C604BDD1BDD10608FF7FC38EC64BC38EC64BC38EC6A8C3"
- $"0BC72DC35CC6FEC2BBC75BC206C72DC257C75BC1B5C6FEC184C64BC184C6A8C1"
- $"84C5EDC206C568C1B5C597C257C53AC30BC568C2BBC53AC35CC597C38EC64BC3"
- $"8EC5EDC38EC64BC64B0608FF7FBADFC45BBADFC45BBADFC4B8BA5CC53DBAADC5"
- $"0FBA0BC56CB957C53DB9A8C56CB906C50FB8D4C45BB8D4C4B8B8D4C3FEB957C3"
- $"79B906C3A8B9A8C34ABA5CC379BA0BC34ABAADC3A8BADFC45BBADFC3FEBADFC4"
- $"5BC45B0608FF7FC505C5DFC505C5DFC505C62AC49DC693C4DDC66EC45DC6B8C3"
- $"CEC693C40EC6B8C38DC66EC366C5DFC366C62AC366C595C3CEC52CC38DC551C4"
- $"0EC507C49DC52CC45DC507C4DDC551C505C5DFC505C595C505C5DFC5DF0608FF"
- $"7FC381C77FC381C77FC381C7ACC341C7EDC368C7D6C31AC804C2C2C7EDC2E9C8"
- $"04C29AC7D6C282C77FC282C7ACC282C751C2C2C710C29AC727C2E9C6FAC341C7"
- $"10C31AC6FAC368C727C381C77FC381C751C381C77FC77F0608FF7FBB65C615BB"
- $"65C615BB65C65FBAFDC6C9BB3DC6A4BABDC6EEBA2DC6C9BA6EC6EEB9EDC6A431"
- $"C61531C65F31C5CBBA2DC561B9EDC586BA6EC53CBAFDC561BABDC53CBB3DC586"
- $"BB65C615BB65C5CBBB65C615C6150608FF7FBB65BC5ABB65BC5ABB65BCA4BAFD"
- $"BD0EBB3DBCE9BABDBD33BA2DBD0EBA6EBD33B9EDBCE931BC5A31BCA431BC10BA"
- $"2DBBA6B9EDBBCBBA6EBB81BAFDBBA6BABDBB81BB3DBBCBBB65BC5ABB65BC10BB"
- $"65BC5ABC5A0608FF7FB932C517B932C517B932C544B8F3C585B91AC56EB8CBC5"
- $"9CB873C585B89BC59CB84CC56EB834C517B834C544B834C4E9B873C4A8B84CC4"
- $"BFB89BC492B8F3C4A8B8CBC492B91AC4BFB932C517B932C4E9B932C517C51706"
- $"08FF7FBC48BA78BC48BA78BC48BAA5BC09BAE6BC30BACFBBE1BAFDBB8ABAE6BB"
- $"B1BAFDBB62BACFBB4ABA78BB4ABAA5BB4ABA4ABB8ABA0ABB62BA20BBB1B9F3BC"
- $"09BA0ABBE1B9F3BC30BA20BC48BA78BC48BA4ABC48BA78BA780238C607B333C6"
- $"07B333C5D7B334C57BB3BFC599B34FC56AB369C4ADB37EC4ADB37EC4ADB37EC4"
- $"E9B3C9C4EBB3A8C4E9B3C9C4E9B3CAC4E9B3CAC4C9B3CEC48AB3D9C4A9B3D2C4"
- $"7CB3BBC485B354C48EB37EC46AB37DC459B3E4C45FB3B6C43AB3EDC3FEB402C4"
- $"1CB3F6C390B348C205B37BC2DDB2F5C18FB3C4C147B4BB44B43ABFEFB503BD14"
- $"B53FBE68B53FB9D1B53FB7F0BAF0B7F8B768B7E8BE77B8C2BF70B86DBF51B918"
- $"BF8FB8E1BF51B8E1BF51B8F6BF5EB920BF77B90BBF6AB920BF6AB920BF51B920"
- $"BF5EB932BF53B956BF58B944BF5630BF43B976BF1AB96BBF2FB98DBF1AB9BBBF"
- $"1AB9A4BF1AB9BBBF1AB9F2BE86B9FABEFBB9EABE12B9F2BD8DBA30BDFAB9B4BD"
- $"20B9EAB905B96DB96ABA67B8A0BD0CB77FBBE5B7B6BE34B749C1B4B778BF07B6"
- $"FBC1B4B7A5C1BFB81CC1B8B7DAC1E6B981C302BAD5C261B9BBC3C5BC33C632BB"
- $"B0C4DEBC6EC74BBB0CC8A6B9F5C7D1BB17C8D1B9BBC908B962C8F1B98BC93CB9"
- $"3CC99FB8F7C96FB917CA8BB859CB05B5E5CBA3B70BCA85B4F6C8E8B573C9AFB4"
- $"F2C8D5B559C8ADB528C8C2B540C8BCB509C8CFB4A8C8D1B4D4C8B1B4CCC877B4"
- $"EFC8A8B521C845B4BEC8AAB4B4C8AAB4B4C8AAB4B4C819B494C841B465C83FB4"
- $"05C7CBB3FCC7CBB3FCC7CBB3FCC7EBB455C7FDB42EC7E5B462C7C6B46DC7D6B4"
- $"6BC7B5B462C791B44DC7A3B457C78DB442C791B41FC78C23C773B414C74AB42B"
- $"C75BB41DC73DB425C722B41AC72FB420C72AB3F1C73AB39DC732B3C7C723B3C1"
- $"C6F6B409C70DB3E5C6EBB405C6D7B3FFC6E1B402C6D3B3D3C67BB393C6C0B3A0"
- $"C66FB3BFC63FB3D8C658B3D2C62DB3D4C60AB3CFC61CB3D1C5F2B3C2C5E3B393"
- $"C5E1B3AAC5E9B357C64AB33FC64AB33FC64AB33FC632B337C641B33AC626B334"
- $"C607B333C618B332C607B333C607B333C607B333C607B3330238C607B333C607"
- $"B333C5D7B334C57BB3BFC599B34FC56AB369C4ADB37EC4ADB37EC4ADB37EC4E9"
- $"B3C9C4EBB3A8C4E9B3C9C4E9B3CAC4E9B3CAC4C9B3CEC48AB3D9C4A9B3D2C47C"
- $"B3BBC485B354C48EB37EC46AB37DC459B3E4C45FB3B6C43AB3EDC3FEB402C41C"
- $"B3F6C390B348C205B37BC2DDB2F5C18FB3C4C147B4BB44B43ABFEFB503BD14B5"
- $"3FBE68B53FB9D1B53FB7F0BAF0B7F8B768B7E8BE77B8C2BF70B86DBF51B918BF"
- $"8FB8E1BF51B8E1BF51B8F6BF5EB920BF77B90BBF6AB920BF6AB920BF51B920BF"
- $"5EB932BF53B956BF58B944BF5630BF43B976BF1AB96BBF2FB98DBF1AB9BBBF1A"
- $"B9A4BF1AB9BBBF1AB9F2BE86B9FABEFBB9EABE12B9F2BD8DBA30BDFAB9B4BD20"
- $"B9EAB905B96DB96ABA67B8A0BD0CB77FBBE5B7B6BE34B749C1B4B778BF07B6FB"
- $"C1B4B7A5C1BFB81CC1B8B7DAC1E6B981C302BAD5C261B9BBC3C5BC33C632BBB0"
- $"C4DEBC6EC74BBB0CC8A6B9F5C7D1BB17C8D1B9BBC908B962C8F1B98BC93CB93C"
- $"C99FB8F7C96FB917CA8BB859CB05B5E5CBA3B70BCA85B4F6C8E8B573C9AFB4F2"
- $"C8D5B559C8ADB528C8C2B540C8BCB509C8CFB4A8C8D1B4D4C8B1B4CCC877B4EF"
- $"C8A8B521C845B4BEC8AAB4B4C8AAB4B4C8AAB4B4C819B494C841B465C83FB405"
- $"C7CBB3FCC7CBB3FCC7CBB3FCC7EBB455C7FDB42EC7E5B462C7C6B46DC7D6B46B"
- $"C7B5B462C791B44DC7A3B457C78DB442C791B41FC78C23C773B414C74AB42BC7"
- $"5BB41DC73DB425C722B41AC72FB420C72AB3F1C73AB39DC732B3C7C723B3C1C6"
- $"F6B409C70DB3E5C6EBB405C6D7B3FFC6E1B402C6D3B3D3C67BB393C6C0B3A0C6"
- $"6FB3BFC63FB3D8C658B3D2C62DB3D4C60AB3CFC61CB3D1C5F2B3C2C5E3B393C5"
- $"E1B3AAC5E9B357C64AB33FC64AB33FC64AB33FC632B337C641B33AC626B334C6"
- $"07B333C618B332C607B333C607B333C607B333C607B3330237C5DCB46AC5DCB4"
- $"6AC5ADB46BC555B4F1C572B485C544B49EC48EB4B2C48EB4B2C48EB4B2C4C8B4"
- $"FBC4CAB4DBC4C8B4FBC4C8B4FBC4C8B4FBC4A9B4FFC46DB50AC48BB503C45FB4"
- $"EDC468B48AC470B4B3C44EB4B1C43EB515C443B4E8C420B51DC3E6B531C403B5"
- $"26C37CB47EC201B4B0C2D1B42FC18FB4F6C14AB5E4C15AB567BFFFB628BD40B6"
- $"62BE87B662BA1DB662B84FBBDBB856B876B847BF3FB903BFEDB8B1BFCFB955C0"
- $"0BB921BFCFB921BFCFB935BFDCB95DBFF4B949BFE8B95DBFE8B95DBFCFB95DBF"
- $"DCB96EBFD2B991BFD6B97FBFD4B99BBFC2B9AFBF9BB9A5BFAE31BF9BB9F2BF9B"
- $"B9DCBF9BB9F2BF9BBA32BECBBA39BF3CBA2ABE5BBA69BDE6BAA4BE4FBA2DBD7E"
- $"BA2AB9F8B9DBBA7CBBA5B77FC1B2B885BFB2B786C1D7B898C1BDB923C1B6B8E4"
- $"C1E3BA7AC2F4BBC1C259BAB2C3B0BD12C605BC94C4BEBD4BC713BBF6C860BAEA"
- $"C794BC00C88ABAB2C8BFBA5CC8A8BA84C8F0BA3858B9F6C921BA14CA33B95DCA"
- $"A8B701CB40B81DCA2DB61CC8A0B694C95FB618C88EB67BC867B64CC87BB663C8"
- $"75B62EC888B5D1C88AB5FBC86BB5F3C833B615C862B645C803B5E6C864B5DDC8"
- $"64B5DDC864B5DDC7D8B5BEC7FFB590C7FDB535C78EB52CC78EB52CC78EB52CC7"
- $"ADB581C7BDB55BC7A7B58DC789B598C799B596C778B58EC756B57AC768B58353"
- $"B56FC756B54DC751B560C739B543C712B559C722B54BC705B553C6EBB549C6F8"
- $"B54EC6F3B521C703B4D0C6FBB4F9C6EDB4F3C6C1B538C6D7B515C6B7B534C6A3"
- $"B52EC6ADB531C6A0B504C64BB4C7C68DB4D3C63FB4F0C611B508C629B503C600"
- $"B505C5DEB500C5EFB502C5C7B4F3C5B8B4C7C5B6B4DDC5BEB48DC61CB475C61C"
- $"B475C61CB475C604B46EC613B471C5F9B46BC5DCB46AC5EBB469C5DCB46AC5DC"
- $"B46AC5DCB46AC5DCB46A0611FEFFFFFF01C4D6B3D1BD14B53FC05CB53FB9D1B5"
- $"3FB7F0BAEFB7F8B768B7E8BE77B8C2BF70B86CBF51B918BF8FB8E1BF51B8E1BF"
- $"51B8F6BF5EB920BF77B90BBF6BB920BF6BB920BF51B920BF5EB932BF53B956BF"
- $"58B944BF5630BF44B975BF1AB96BBF2FB98DBF1AB9BBBF1AB9A4BF1AB9BBBF1A"
- $"B9F2BE86B9FABEFBB9EABE11B9F2BD8DBA30BDFAB9B4BD20B9EAB905B96DB96A"
- $"BA67B89FBD0CB77FBBE4B7B6BE34B749C1B3B778BF06B6FBC461B7F4C4D6B3D1"
- $"C52BB42FC4D6B3D1B3D1020FB93FB922B93FB922B9D8C1B0B808BAC6B7E9BEDF"
- $"B809BC1CB865BEC4B802BD7BB87BBEFBB8CC3FB892BF40B87BBEEDB914BF37B9"
- $"0DBF69B962BF61B9A4BF03B951BEDDB9DABEFDB9DABE87B9DCBEB1B9CFBE33B9"
- $"DABD91BA17BDDEB99CBCC5B98FBB18B99BBBEBB992BA6AB9C5B90CB97FB9B0BA"
- $"1DB8AFBB04B834BA97B876BBD3B7BDBDA2B74ABCB5B76CBF0AB6F8C1E5B767C0"
- $"7FB727BD21B612B93FB922BA77B820B93FB922B93FB922B93FB922B93FB92206"
- $"05FF01C205B37BC205B37BC0E9B42BC1B1B6D7C134B5D8C235B7DAC352B8F1C2"
- $"A7B979C580B6C3C205B37BC449B214C205B37BB37B0605FF01CB05B5E5CB05B5"
- $"E5CBA3B70BC99FB8F7CA8CB859C8ACB995C72AB9F9C77ABAC4C65DB6FECB05B5"
- $"E5C9C2B38CCB05B5E5B5E50224C632B337C632B337C604B32CC57BB3BFC5A3B3"
- $"29C56AB368C4ADB37DC4ADB37DC4ADB37DC4E9B3C9C4EBB3A8C4E9B3C9C4E9B3"
- $"CAC4E9B3C9C4C9B3CDC489B3D9C4A9B3D2C47CB3BBC485B354C48DB37EC46AB3"
- $"7CC459B3E4C45EB3B6C36BB425C23EB5D1C2A0B4C2C1D9B6BAC1BFB81CC198B6"
- $"B8C1E6B981C301BAD5C260B9BBC3C5BC33C632BBB0C4DEBC6EC74BBB0CC8A6B9"
- $"F6C7D1BB17C97AB8D5C95EB7BAC940B8B6C996B6B5C8ADB528C946B5D4C8BCB5"
- $"09C8CFB4A8C8D1B4D4C8B1B4CCC877B4EFC8A8B521C845B4BDC8A9B4B4C8A9B4"
- $"B4C8A9B4B4C819B494C841B465C83FB405C7CBB3FCC7CBB3FCC7CBB3FCC7EBB4"
- $"55C7FDB42EC7E5B462C7C7B46CC7D7B46AC7B5B462C791B44DC7A3B457C78DB4"
- $"42C791B420C78CB433C773B415C74AB42BC75BB41DC73DB425C722B41AC72FB4"
- $"20C72AB3F1C73AB39EC732B3C7C723B3C1C6F5B409C70CB3E5C6EBB405C6D6B3"
- $"FFC6E1B402C6D3B3D3C67BB393C6C0B3A0C66FB3BFC63FB3D8C658B3D2C62EB3"
- $"D4C60AB3CFC61CB3D1C5F2B3C1C5E2B393C5E0B3AAC5E8B357C64AB33FC64AB3"
- $"3FC64AB33FC632B337C641B33AC632B337C632B337C632B337C632B3370216C9"
- $"01B8E7C901B8E7C95CB8A6CA10B82359B865C9F7B826C9C4B82BC9DEB828C9F4"
- $"B806CA53B7BCCA23B7E1CA27B7C6C9D0B7DCC9FBB7D1CA16B7B0CAA2B758CA5C"
- $"B784CA63B76BC9E7B790CA25B77DCA2CB75DCAB6B6F7CA71B72ACA80B702CA16"
- $"B718CA4BB70DCA50B6EFCAC6B69ECA8BB6C7CA8CB6B2CA18B6DACA52B6C6CA44"
- $"B6AACA9BB648CA6FB679CA66B65BC9FEB67FCA32B66DCA11B658CA39B60BCA25"
- $"B631CA1BB616C9DFB62DC9FDB622C9EDB608CA09B5BEC9FBB5E3C9F1B5C7C9C1"
- $"B5DBC9D9B5D1C9CAB5C9C9DCB5A5C9D3B5B7C991B5C9C8FBB60FC946B5ECC8FB"
- $"B60FC94CB736C93AB68BC95EB7E1C901B8E7C901B8E7C901B8E7C901B8E7C901"
- $"B8E7C901B8E70216C242B718C242B718C215B6B3C1B9B5E7C1E7B64DC1CEB5F6"
- $"C1F7B614C1E3B605C1E1B5DCC1B4B56CC1CAB5A4C1D4B58BC215B5C9C1F5B5AA"
- $"C1EEB580C1A1B4EFC1C8B537C1CEB51EC226B57CC1FAB54DC204B52DC1C0B490"
- $"C1E2B4DFC1E9B4B4C23AB4FDC212B4D9C21CB4BCC1DFB43CC1FDB47CC207B46A"
- $"C257B4C6C22F24C24AB486C22FB407C23CB447C253B431C29BB485C277B45BC2"
- $"9EB459C2A3B402C2A0B42EC2B7B41BC2DFB44DC2CBB434C2E5B426C2F2B3D7C2"
- $"ECB3FEC302B3ECC322B415C312B400C323B401C326B3D9C324B3EDC355B41DC3"
- $"B4B4A5C384B461C3B4B4A5C2DAB57CC33FB4F0C275B608C242B718C242B718C2"
- $"42B718C242B718C242B718C242B71806047EC30FB637C44DB810C4BFB666C2BA"
- $"B7A4C30FB637C4AAB6A5C30FB637B6370608FF7FC430B763C430B763C420B79C"
- $"4AB7D7C3F42CC383B7E6C31DB7ADC347B7D6C2F4B783C2F3B70EC2E3B747C302"
- $"B6D6C367B69AC32EB6A9C39FB68BC405B6C5C3DCB69BC42FB6EEC430B763C43F"
- $"B72AC430B763B7630608FF7FC3B7B7A4C3B7B7A4C3B4B7AFC391B7B5C3A6B7B5"
- $"C37DB7B5C353B7A4C365B7AFC341B79AC33AB783C337B78DC33DB778C360B772"
- $"C34CB772C375B772C39FB783C38DB778C3B1B78DC3B7B7A4C3BAB79AC3B7B7A4"
- $"B7A40608FF7FC404B715C404B715C3FFB729C3C6B738C3E7B736C3A5B73AC363"
- $"B71EC37FB730C348B70CC33FB6E0C33AB6F4C344B6CDC37DB6BEC35CB6BFC39E"
- $"B6BCC3E0B6D8C3C4B6C6C3FCB6EAC404B715C40AB702C404B715B71506047EC8"
- $"5BB7A2C65AB89CC6CCB6F3C7EEB909C85BB7A2C6C0B734C85BB7A2B7A20608FF"
- $"7FC6CAB816C6CAB816C6BBB84EC6F5B8B4C6CBB88BC71EB8DEC793B8DFC75BB8"
- $"EEC7CCB8D0C807B86BC7F8B8A3C816B832C7DDB7CCC806B7F6C7B3B7A3C73EB7"
- $"A2C777B793C706B7B1C6CAB816C6D9B7DDC6CAB816B8160608FF7FC712B88AC7"
- $"12B88AC70FB895C72AB8ACC718B8A2C73CB8B6C769B8BDC754B8BDC77EB8BDC7"
- $"8FB8ACC78CB8B6C792B8A2C776B88AC788B895C764B880C738B87AC74DB87AC7"
- $"23B87AC712B88AC715B880C712B88AB88A0608FF7FC717B7E8C717B7E8C711B7"
- $"FCC73BB825C71FB813C757B837C79EB840C77DB842C7BFB83EC7DCB81DC7D7B8"
- $"31C7E1B80954B7E0C7D3B7F2C79CB7CEC755B7C5C776B7C3C734B7C7C717B7E8"
- $"C71CB7D4C717B7E8B7E80605FF01C3F0BBD0C3F0BBD0C3EFBBCFC3ECBBD0C3ED"
- $"BBD0C3F1BBD3C3FCBBD9C3F7BBD6C3F9BBD5C3F0BBD0C3F5BBD1C3F0BBD0BBD0"
- $"0605FF01C566BBF7C566BBF7C562BBF9C558BBFFC55DBBFCC55FBBFEC56CBBFA"
- $"C566BBFCC56ABBF9C566BBF7C568BBF9C566BBF7BBF70605FF01C392BB7AC392"
- $"BB7AC38CBB7AC382BB78C387BB79C38BBB82C39DBB93C394BB8BC39ABB89C392"
- $"BB7AC397BB80C392BB7ABB7A021BC909B8CDC909B8CDC8FAB8CBC8D8B8E6C8E8"
- $"B8D2C8B7B8F5C8B6B94AC8EFB937C88FB95DC87CB92EC87EB8DDC88FB95CC849"
- $"B984C88CB9D0C83CB971C815B970C7F5B932C826B982C819B99FC848B9CDC807"
- $"B982C7DBB993C7BCB948C7E2B9B5C7FABA00C80BB9E3C7DCB9F1C7AEB9B9C7C6"
- $"B9B8C7BDB9D1C7BCB9FEC7FABA3AC7A4B9D4C786BA11C770B9DBC792BA2DC771"
- $"BA49C799BA8CC767BA30C72DBA1DC72FB9D3C727BA73C6DAB9EDC6F3B9F9C6ED"
- $"BA21C6E3BA83C6E7BA4DC6DEBAC6C672BA6EC697BA69C640BA51C5F9BAAAC5DA"
- $"BA5AC607BAF3C60DBB8AC625BB41C5F7BB83C5E5BB70C5CABB24C5FABB8FC5D0"
- $"BBA7C603BBC1C5BCBBB3C5A2BBE9C5B1BBD3C5D0BBD9C631BBA7C600BBC3C747"
- $"BB05C89FB9F1C7CCBB10C8EFB983C92FB8FDC919B93BC92CB8E4C909B8CDC91D"
- $"B8D1C909B8CDC909B8CDC909B8CDC909B8CD021BC1FAB6E9C1FAB6E9C1E6B6E6"
- $"C1C3B70CC1CFB6F3C1B9B74BC1C8B81CC1BAB79CC1EEB97DC307BACEC267B9B6"
- $"C325BB04C367BB5BC345BB33C362BB40C35FBB00C36CBB17C326BAFDC368BAC5"
- $"C347BAD6C3A633C339BAC8C350BACDC348BA7DC3BABA10C38ABA48C3FCB9DAC3"
- $"6FB99FC3A9B99FC352B988C303B979C2E5B9B5C31AB94849B8FCC32BB91FC33A"
- $"B8F9C2F6B8FCC2D0B949C319B8BBC2A5B8FFC2BBB8F0C261B926C2AFB8C5C296"
- $"B8D7C2DDB8A2C289B89AC2B3B881C235B8AEC2B8B864C29FB872C2A4B858C253"
- $"B87CC274B87EC252B85BC2A4B82DC28DB847C2E5B7FCC268B818C287B808C228"
- $"B829C283B7F2C26CB7F9C2BEB7CCC24CB7E9C261B7DFC1EDB80AC24BB78646B7"
- $"A3C272B73EC20CB78046B7A5C1E3B754C21FB719C235B736C21BB6FBC1FAB6E9"
- $"C20CB6ECC1FAB6E9C1FAB6E9C1FAB6E9C1FAB6E90607FF1FC438BA72C438BA72"
- $"C3DBBA78C3D6BAD1C3C6BA84C3E6BB1DC478BBA4C412BB89C4DEBBBFC56EBB3E"
- $"C53ABB78C5A3BB04C548BABBC5B0BB02C4E1BA75C438BA72C495BA6DC438BA72"
- $"BA720607FF1FC446BA87C446BA87C3F5BA8BC3F0BAD9C3E2BA96C3FEBB1CC47E"
- $"BB91C4C3BA8FC4C3BA90C555BB38C527BB6BC582BB06C533BAC6C58EBB04C4D9"
- $"BA89C446BA87C497BA82C446BA87BA870616EEEEFEEEEE06C5B9B68DC604B763"
- $"C626B6BFC68EB6DBC64BB659C6B6B72DC6E5B6A1C734B6ACC6F1B62AC796B693"
- $"C787B633C794B604C727B5AAC7FDB668C82AB5E5C860B58EC7A2B55BC873B5BB"
- $"C824B540C855B4FCC7D4B4D9C7D4B4D9C85AB51256B63AC88EB577C87CB5E6C8"
- $"0FB5AAC7F5B6C0C874B5EEC800B649C785B614C775B70FC7E2B691C787B6A4C7"
- $"32B68DC678B7A1C73BB750C69BB744C66FB705C5C0B7A2C67EB765C602B744C5"
- $"B9B68DB68D0612EFEEEFEE07C592B419C592B419C56BB408C49CB40DC4F4B3EF"
- $"C510B3DEC596B46BC48DB49AC4D7B440C55EB45BC59FB50CC4B4B512C513B4B9"
- $"C511B4EBC59AB563C50DB5D2C543B566C552B5B0C5B4B5C1C5B4B5C1C564B5CC"
- $"C4DBB615C53CB5D9C51BB598C55BB574C462B552C4B2B50BC4E5B4BEC550B4EC"
- $"C44FB4DCC4A1B48DC4A0B452C53DB45DC46CB423C4FAB413C521B3BBC592B419"
- $"C5B9B42AC592B419B4190221C8ABC3D9C8ABC3D9C8ABC3D9C4C6C8EDC8D9C869"
- $"C0B3C972BC3AC65FBE0DC78FBA67C52FB94EC31EB94EC31E30C328B985C33DB9"
- $"73C333B970C320B947C2E7B95BC304B959C2F7B97DC316B96BC307B968C2EDB9"
- $"3FC29AB954C2C3B94EC2A4B96DC2B9B95EC2AEB95B47B937C22DB949C25BB951"
- $"C24EB985C292B96BC270B973C263B94EC20630C234B963C210B98DC225B978C2"
- $"1AB985C200B975C1B8B97DC1DCB98AC1CCB9B4C1F6B99FC1E1B9B1C1DCB9ACC1"
- $"A8B9AEC1C2B9C1C1B3B9EAC1C7B9D5C1BDB9E5C1BAB9DAC1A0B9E0C1ADB9F2C1"
- $"ADBA21C1C7BA09C1BABA21C1B8BA21C199BA21C1A8BA35C1A6BA5FC1BFBA4AC1"
- $"B3BA5FC1A3BA5FC16ABA5FC186BA71C184BA95C1B8BA83C19EBA95C1A3BA95C1"
- $"79BA95C18EBAA8C193BACCC1C7BABAC1ADBACEC1B8BAD4C199BAD1C1A8BAE6C1"
- $"ABBB0AC1CF34C1BDBB0AC1C5BB0AC1B0BB0AC1BABB31C1D2BB7FC215BB58C1F3"
- $"BB82C203BB87C1DFBB84C1F1BB87C1DFC377C640C038C4A6C60BC785C8ABC3D9"
- $"C744C703C8ABC3D9C8ABC3D9C8ABC3D9C8ABC3D90221C8ABC3D9C8ABC3D9C8AB"
- $"C3D9C4C6C8EDC8D9C869C0B3C972BC3AC65FBE0DC78FBA67C52FB94EC31EB94E"
- $"C31E30C328B985C33DB973C333B970C320B947C2E7B95BC304B959C2F7B97DC3"
- $"16B96BC307B968C2EDB93FC29AB954C2C3B94EC2A4B96DC2B9B95EC2AEB95B47"
- $"B937C22DB949C25BB951C24EB985C292B96BC270B973C263B94EC20630C234B9"
- $"63C210B98DC225B978C21AB985C200B975C1B8B97DC1DCB98AC1CCB9B4C1F6B9"
- $"9FC1E1B9B1C1DCB9ACC1A8B9AEC1C2B9C1C1B3B9EAC1C7B9D5C1BDB9E5C1BAB9"
- $"DAC1A0B9E0C1ADB9F2C1ADBA21C1C7BA09C1BABA21C1B8BA21C199BA21C1A8BA"
- $"35C1A6BA5FC1BFBA4AC1B3BA5FC1A3BA5FC16ABA5FC186BA71C184BA95C1B8BA"
- $"83C19EBA95C1A3BA95C179BA95C18EBAA8C193BACCC1C7BABAC1ADBACEC1B8BA"
- $"D4C199BAD1C1A8BAE6C1ABBB0AC1CF34C1BDBB0AC1C5BB0AC1B0BB0AC1BABB31"
- $"C1D2BB7FC215BB58C1F3BB82C203BB87C1DFBB84C1F1BB87C1DFC377C640C038"
- $"C4A6C60BC785C8ABC3D9C744C703C8ABC3D9C8ABC3D9C8ABC3D9C8ABC3D90221"
- $"C865C4D2C865C4D2C865C4D2C4A6C9B5C892C936C0BBCA34BC6EC740BE30C864"
- $"BAADC61CB9A0C41FB9A0C41FB9B1C429B9D4C43DB9C2C433B9C0C421B998C3EA"
- $"B9ACC406B9A9C3F9B9CCC417B9BBC408B9B8C3EFB991C39FB9A5C3C7B9A0C3A9"
- $"B9BDC3BDB9AEC3B3B9ACC390B989C337B99BC363B9A2C357B9D4C398B9BBC377"
- $"B9C2C36BB9A0C311B9B1C33EB9B3C31BB9DBC32FB9C7C325B9D4C30CB9C5C2C6"
- $"B9CCC2E9B9D9C2DABA01C302B9EDC2EEB9FEC2E9B9F9C2B7B9FCC2D0BA0DC2C1"
- $"BA35C2D5BA21C2CBBA30C2C9BA26C2B0BA2BC2BCBA3DC2BCBA6AC2D5BA53C2C9"
- $"BA6AC2C6BA6AC2A8BA6AC2B7BA7EC2B5BAA6C2CE33C2C1BAA6C2B2BAA6C27BBA"
- $"A6C297BAB7C294BADAC2C6BAC9C2ADBADAC2B2BADA47BADAC29EBAEBC2A3BB0E"
- $"C2D5BAFDC2BCBB11C2C6BB16C2A8BB13C2B7BB27C2BABB4AC2DDBB39C2CBBB4A"
- $"C2D3BB4AC2BFBB4AC2C9BB70C2DFBBBBC320BB95C300BBBDC30FBBC2C2ECBBC0"
- $"C2FDBBC2C2ECC364C722C045C598C5DFC85AC865C4D2C70CC7DDC865C4D2C865"
- $"C4D2C865C4D2C865C4D20221C8ABC3D9C8ABC3D9C8ABC3D9C4C6C8EDC8D9C869"
- $"C0B3C972BC3AC65FBE0DC78FBA67C52FB94EC31EB94EC31E30C328B985C33DB9"
- $"73C333B970C320B947C2E7B95BC304B959C2F7B97DC316B96BC307B968C2EDB9"
- $"3FC29AB954C2C3B94EC2A4B96DC2B9B95EC2AEB95B47B937C22DB949C25BB951"
- $"C24EB985C292B96BC270B973C263B94EC20630C234B963C210B98DC225B978C2"
- $"1AB985C200B975C1B8B97DC1DCB98AC1CCB9B4C1F6B99FC1E1B9B1C1DCB9ACC1"
- $"A8B9AEC1C2B9C1C1B3B9EAC1C7B9D5C1BDB9E5C1BAB9DAC1A0B9E0C1ADB9F2C1"
- $"ADBA21C1C7BA09C1BABA21C1B8BA21C199BA21C1A8BA35C1A6BA5FC1BFBA4AC1"
- $"B3BA5FC1A3BA5FC16ABA5FC186BA71C184BA95C1B8BA83C19EBA95C1A3BA95C1"
- $"79BA95C18EBAA8C193BACCC1C7BABAC1ADBACEC1B8BAD4C199BAD1C1A8BAE6C1"
- $"ABBB0AC1CF34C1BDBB0AC1C5BB0AC1B0BB0AC1BABB31C1D2BB7FC215BB58C1F3"
- $"BB82C203BB87C1DFBB84C1F1BB87C1DFC377C640C038C4A6C60BC785C8ABC3D9"
- $"C744C703C8ABC3D9C8ABC3D9C8ABC3D9C8ABC3D90221C8ABC3D9C8ABC3D9C8AB"
- $"C3D9C4C6C8EDC8D9C869C0B3C972BC3AC65FBE0DC78FBA67C52FB94EC31EB94E"
- $"C31E30C328B985C33DB973C333B970C320B947C2E7B95BC304B959C2F7B97DC3"
- $"16B96BC307B968C2EDB93FC29AB954C2C3B94EC2A4B96DC2B9B95EC2AEB95B47"
- $"B937C22DB949C25BB951C24EB985C292B96BC270B973C263B94EC20630C234B9"
- $"63C210B98DC225B978C21AB985C200B975C1B8B97DC1DCB98AC1CCB9B4C1F6B9"
- $"9FC1E1B9B1C1DCB9ACC1A8B9AEC1C2B9C1C1B3B9EAC1C7B9D5C1BDB9E5C1BAB9"
- $"DAC1A0B9E0C1ADB9F2C1ADBA21C1C7BA09C1BABA21C1B8BA21C199BA21C1A8BA"
- $"35C1A6BA5FC1BFBA4AC1B3BA5FC1A3BA5FC16ABA5FC186BA71C184BA95C1B8BA"
- $"83C19EBA95C1A3BA95C179BA95C18EBAA8C193BACCC1C7BABAC1ADBACEC1B8BA"
- $"D4C199BAD1C1A8BAE6C1ABBB0AC1CF34C1BDBB0AC1C5BB0AC1B0BB0AC1BABB31"
- $"C1D2BB7FC215BB58C1F3BB82C203BB87C1DFBB84C1F1BB87C1DFC377C640C038"
- $"C4A6C60BC785C8ABC3D9C744C703C8ABC3D9C8ABC3D9C8ABC3D9C8ABC3D90618"
- $"BBBBFBEEEE7EBA73C3B0BA73C3B0BA80C43EBC7FC5A2BAC1C37ABB16C4C0BAF6"
- $"C432BCAEC53CBB15C32EBBB1C497BB85C3CABCD3C4D6BB6CC2B1BB6DC37CBC01"
- $"C3D7BD15C46DBBB8C29DBC55C41ABC6EC3B3BDA6C42BBBFBC269BC6EC35DBD6E"
- $"C38EC5FBC717C3CEC6E3C4C4C74AC156C642C59EC732C400C767C404C770C089"
- $"C682C55BC765C407C79DC3FEC7A1BF8DC6C2C49FC7C1C3DEC7B2C315C7F5BEDB"
- $"C6E6C405C7F0C34AC821C2A9C862BE1DC6FDC2CCC848C24AC885BFECC8D7BA73"
- $"C3B0BB8AC66DBA73C3B0C3B0370A000100000A010101000A0101021001178102"
- $"040A020103000A030104000A040105000A050106000A060107000A070108000A"
- $"080109000A09010A000A0A010B000A0B010C000A0C010D000A0D010E000A0E01"
- $"0F000A0F0110000A100111000A110112000A120113000A130114000A14011500"
- $"0A150116000A160117000A170118000A180119000A19011A000A19011B100117"
- $"8122040A1A011C000A1B011D000A1C011E000A1D011F000A1E0120000A1F0121"
- $"000A1F0122000A1F0123000A200124000A210125000A220126000A230127000A"
- $"200128000A210129000A24012A000A25012B000A26052C2D2E2F30000A210131"
- $"000A270132000A280133000A290134000A190135000A1901361001178122040A"
- $"2A0137000A2B0138000A2C0139000A2D013A00"
+ $"6E6369664D0500020106033D0AFE000000000000BD0AFE48F10748A0783133FF"
+ $"FFC80066FFFF0034CC020106033D0AFE000000000000BD0AFE48F10748A07854"
+ $"09B4B6D8033784FF051D61020106043D950B0000000000003D950B494FBC479B"
+ $"EC00FFFFFF4C00FF008F00B200FF008000050002030605B812A5BE03E13DE784"
+ $"B8020F49F79F49EDD800F1F1F136D9DDF48A9996B9B4B8BEDBFFF4F4F404EBD0"
+ $"020006023C92BF388F5EB8544F3C576348D8DF48895B004137A9FFB9B9B90401"
+ $"7E03FF350003FFFF0003FF9C0003FF000002010202BB36AEBA1760B80FFE392B"
+ $"574ACCFB48652300000001FFFF0000013205400500020004024AFFFC00FFFFBA"
+ $"360500020106033D0AFE000000000000BD0AFE48F10748A0783133FFFFC80066"
+ $"FFFF0034CC020106023D0AFE000000000000BD0AFE48F10748A0780033FFFFFF"
+ $"0033CC020106023D0AFE000000000000BD0AFE48F10748A0780033FFFFFF0066"
+ $"FF020004027AFFFC00DDFFBA360201040289FF0000A9C000000200040200FFE5"
+ $"CED0ECB989020004020DEFBC8CFFD4AA820200040200FFCB9CE9ECB989020004"
+ $"0200FFCB9CE9ECB98902000402B3FFCB9CBBD4AA820500020106033D0AFE0000"
+ $"00000000BD0AFE48F10748A0783133FFFFC80066FFFF0034CC020106033D0AFE"
+ $"000000000000BD0AFE48F10748A0785409B4B6D8033784FF051D61020106043D"
+ $"950B0000000000003D950B494FBC479BEC00FFFFFF4C00FF008F00B200FF0080"
+ $"00050002030605B812A5BE03E13DE784B8020F49F79F49EDD800F1F1F136D9DD"
+ $"F48A9996B9B4B8BEDBFFF4F4F404EBD0020006023C92BF388F5EB8544F3C5763"
+ $"48D8DF48895B004137A9FFB9B9B904017E03FF350003FFFF000200040200FFBC"
+ $"34FFFF9C0003FF000002010202BB36AEBA1760B80FFE392B574ACCFB48652300"
+ $"000001FFFF00000132054003FFFFC9020014020026FF1C0500050002030605B8"
+ $"12A5BE03E13DE784B8020F49F79F49EDD800F1F1F136D9DDF48A9996B9B4B8BE"
+ $"DBFFF4F4F404EBD0020006023C92BF388F5EB8544F3C576348D8DF48895B0041"
+ $"37A9FFB9B9B904017E03FF350003FF9C0003FF000002010202BB36AEBA1760B8"
+ $"0FFE392B574ACCFB48652300000001FFFF000001320540050003005275020010"
+ $"02F8006BFF003E04006C050003900000020310020000006E006504006B050003"
+ $"59463503C3A411039D816002001602BC24EEBBD48E3B7F4ABBEA6449A2A44ABF"
+ $"DE00C1FFFF01010000C8020106063F40580000000000003F40584A03AB439B6C"
+ $"0067C5D53E66C2D36E5392BAA90534CDCB1B006DFF031C7A02000603389BE83A"
+ $"53CCBADBCC39345F4A335A492AA7000F80BC560A5F9EFF00145A020106033D94"
+ $"8E0000000000003D948E4A0A594662CC000F80BC600B629BFF00022F02011202"
+ $"36836C382D3BBC88903AECE349F3E34A357B00FFE1FFFF7802011202382D3BB6"
+ $"836C3AECE33C889049F3E24A357B00FFFFFFFF0002011203000000386573B865"
+ $"7300000049F4814A36C700FFFF59FFD7FFFF00020102033D04BA000000000000"
+ $"3D04BA49ED074A2B9000FFFFFFB2D313059A00FF4433E2003C00000000020440"
+ $"B55A36B55AC3BDB55AC6FABC91C6FA2EC6FAC08E40C3CBC3BDC3CB36C3CBB888"
+ $"BC91B888C08EB8882E066EFFFFF30FFFFEFFFFBFBFFEFFFEFFFEFFFFFFFFBFFF"
+ $"EFDFFBF7FFFF0FC5DAB8B4C713BA9EC4CAB706C10EB579C307B5D3C0A22640B5"
+ $"5AC030B55ABDBCB55ABA69B7BA36B63AB8F9B94DB89BBD9BB84DBB7EB8C7BE9A"
+ $"B924BF75B8E0BEE7B9DEC11FBCDEC332BB37C277BEC3C405C2D6C31AC0F9C3FC"
+ $"C2C4C2BFC22DC2B7C278C2BDC22DC2B7C225C23FC2BDC23FC2BDC206C2AEC199"
+ $"C2D9C1D0C2CB44C2EEC0D4C2DBC113C2E5C051C2CEBF41C311BFB0C2B4BF3DC3"
+ $"11BF34BF1EBDEBC311BE23C311BDB7C2EDBD57C2DDBD85C2E1BD52C2DABD3EC2"
+ $"C1BD3EC2C1BD31C2B4BD11C2A3BD26C2A9BD11C2A3BCA4C27EBC31C254BC31C2"
+ $"54BC27C251BC10C24FBC1DC250BC10C24BBC0FC240BC10C244BC0FC240BBF5C2"
+ $"19BBF5C219BBD1C1DCBB68C193BBACC1A4BB6FC16EBB58C127BB61C14EBB4BC1"
+ $"01BB4BC0ABBB46C0D7BB4BC0ABBB4EC087BB4EC087BB51C054BB4DBFEEBB53C0"
+ $"21BB9DBF91BBA9BEBFBBAEBF34BBA9BEBFBBA7BE91BBA7BE91BBA7BE51BBBABE"
+ $"2FBBA8BE4BBBBABE2FBBC5BE1FBBC5BE1FBC00BDD3BBE1BCFABC5BBD3DBBE1BC"
+ $"FABAB7BC58BA89BC43BA90BC44BA89BC43BA89BC42BA89BC42BA87BBEABA21BB"
+ $"77BA6ABBABBA21BB77BA12BB6AB9F8BB47B9ACBAEEB9ACBAEEB97CBAC3B926BA"
+ $"AFB94EBAB5B924BAA9B919BA9AB920BA9FB984BA6CB9DEB995B9B5B9F9B9F6B9"
+ $"5DBA36B8EEBA09B91FBA5EB8C4BA78B85EBA83B89EBACCB83BBB5FB7E7BB18B8"
+ $"13BB5FB7E7BB6AB7E1BBFEB787BBFEB787BC65B748BCB6B682BC92B6F5BCF5B6"
+ $"89BD58B663BD2BB67BBDA8B695BE6BB64F3C29BE6FB64FBE88B64FBE7CB64FBE"
+ $"62B6A0BEE1B72FBE88B70EBEE4B733BEE7B73CBEE5B73ABED8B742BEC4B748BE"
+ $"74B7A5BE74B7A5BE63B7DB3DB847BE74B815BE8FB84CBE90B852BE90B852BE92"
+ $"B85ABE9BB87ABE97B86BBE92B882BE8CB88DBE8CB88DBE38B8EEBD90B98FBDB5"
+ $"B906BD90B98FBD8DB99FBD8DB99FBD64B9D6BD7EBA53BD59BA19BD79BA5CBD75"
+ $"BA61BD75BA61BD56BA9EBD4DBB2BBD37BAE6BD5EBB6EBDCCBBCEBD98BBA0BDFF"
+ $"BBF8BE73BC3FBE33BC27BEBEBC5CBF5CBC42BF10BC54BF5CBC42BFAA37BFAA37"
+ $"BFD0BC1DC01CBC0FBFF3BC0BC044BC12C083BC4EC066BC35C04DBCD943BDDAC0"
+ $"B6BD6343BDDAC107BDF7C102BDF2C0BABE82C125BF8FC0B0BF1BC125BF8FC133"
+ $"BF9BC133BF9BC12FC00DC1C3C0F7C135C0D6C257C11CC346C059C2EEC0C7C346"
+ $"C059C36BC02DC388C017C388C017C3A6C003C3D9BFC3C3C9BFE8C3EEBF9EC408"
+ $"BF50C3EFBF73C408BF50C408BF51C408BF51C40BBF99C49540C450BFCEC4EBBF"
+ $"B3C540BF0EC51FBF56C540BF0EC551BEF24EBEE94EBEE9C57FBEA3C568BDFCC5"
+ $"9EBE45C53ABDB9C4A1BDDDC4DFBDA8C4A1BDCABDB5C4A3BD31C4A3BD31C4A6BD"
+ $"1CC4E8BCDDC4D2BCF5C4E8BCDDC4FEBCC7C516BCB3C516BCB3C543BC8BC582BC"
+ $"1EC56FBC5DC58ABC03C587BBBAC586BBD9C587BBBABBA8C587BB9DC587BB9DC5"
+ $"8BBB5F4E34C584BB22C588BADAC5C0BA5DC5B0BAA0C5C2BA60C5CBBA6EC5CBBA"
+ $"6EC5D7BA8EC60DBAD2C5EDBAB3C608BB1EC648BBAAC625BB67C669BBEAC66DBC"
+ $"79C66EBC33C66DBC79C670BCC3C670BCC3C672BCE9C66CBD35C676BD0FC664BD"
+ $"5AC649BD9BC652BD77C633BDEAC62ABE90C62DBE3F50BED5C67FBF2AC648BF16"
+ $"C750BD0F001ABACDBFD1BACDBFD1BAEBBFA8BB293FBB11BF89BB43BF24BB34BE"
+ $"91BB34BECEBB34BE4D35BDE8BB34BE25BB80BDBEBBAABD5EBB9FBD98BB46BD29"
+ $"BA81BCBEBAE5BCF3BA67BCB1BA1FBC8332BC9EBA0FBC5BBA0DBC02BA1FBC28B9"
+ $"FCBBE5B9B9BBB6B9D0BBD0B99BBB91B95FBB44B983BB66B93DBB22B8EEBB2BB9"
+ $"1ABB14B8C0BB46B8BEBADEB8C1BAFFB8B1BB12B89FBB7EB8A7BB47B8C7BB7EB8"
+ $"C5BBB2B8C1BB88B8C6BBDBB8C7BC2CB8C7BC03B8CEBC40B8BABC47B8CBBC47B8"
+ $"B3BC4BB8A8BC4EB8ADBC4DB8A0BC57B893BC4BB898BC54B880BC4AB921BE74B9"
+ $"06BE4BB946BEA7B9A140B996BF80B9AEC00FBA15C05DB9DBC02CBA23C0B3BA75"
+ $"C125BA3BC0E7BA8FC142BAC0C17FBAA9C15EBAD6C19FBAFAC17ABAE2C19DBADD"
+ $"C13ABAD5C0A5BAD1C0EFBADBC05FBACDBFD1BAEAC011BACDBFD100093AB5D63A"
+ $"B5D6BD81B5EDBDB1B60CBD82B605BDCEB613BE19B600BE01B619BE55B5C33EB5"
+ $"C3BEB0B5EFBF2BB5A0BFA3B55D3FB55DBFCEB55DC00CB58CBFE9B577C03CB5A6"
+ $"C08EB566C062B573BF38B540BCA7B60CBDDBB57ABCEAB6233AB5D6BD29B6003A"
+ $"B5D60005BF33B6E8BF33B6E8BF55B6EABF99B6F5BF7BB702BFCEB6E0BF87B67C"
+ $"BF9AB693BF76B66DBF3CB663BF2FB623BF43B68FBF33B6E8BF69B6CABF33B6E8"
+ $"0004BA05B87FBA05B87FBA0AB867B9EDB84EB9FCB85FB982B8E4B8EEBA35B92C"
+ $"B986B97C31BA05B87FB974B8EEBA05B87F0066C6F5BC24C6F5BC24C6DABB08C6"
+ $"002FC689B9F0C5B9B87AC4FFB79BC563B805C4CEB768C463B708C49AB735C452"
+ $"B6FBC426B6EFC43EB6E2C410B6FAC407B6C1C401B6CFC314B60FC0D0B56DC1F7"
+ $"B59AC0F9B58AC15DB59CC12FB589C170B5A0C177B5C9C19FB5BDC12BB5E2C08A"
+ $"B5C9C0D7B5C3C059B5CDC03FB60CC041B5DDC03DB629C03FB676C036B65CC049"
+ $"B694C0B6B65DC0A6B66FC0CDB643C0F1B619C0AFB606C108B649C0D0B6AFC13A"
+ $"B6D5C0B5B6A7C066B689C083B67CC062B689C05BB6AFC05DB6A9C053B6C0C02F"
+ $"B6CFC042B6C9BFE4B6E3BF94B741BFB0B6EFBF87B768BF5BB78FBF88B781BF3B"
+ $"B79BBEF5B7B2BF17B7A2BECCB7C7BEF8B81ABEE8B7FFBF042DBF19B86CBF01B8"
+ $"60BF59B891BFBEB7E0BFA3B801BFDFB7B3C038B7ADC008B7BBC04FB7A6C084B7"
+ $"75C06CB76EC0D3B795C0F6B83EC0EBB7F4C10EB83FC135B80EC100B801C10BB7"
+ $"E5C0ECB76E43B7A9C125B795C15DB7FBC14DB7BBC170B83BC1C0B820C18CB860"
+ $"C1CFB813C1FBB7D4C1E0B7BBC212B7E8C1F1B838C2132DC206B84BC23AB83BC2"
+ $"22B841C258B83447B841C26CB834C2ADB84EC2F8B855C2D5B854C320B859C345"
+ $"B898C335B87AC375B8E6C248B8C5C257B8C6C226B8C1C1E0B8CEC202B8C0C1C7"
+ $"B8DAC199B8EEC1B62FC177B8E5C13EB8B4C159B8C7C116B89AC0C3B872C0EFB8"
+ $"85C07DB853BFE1B84DC02DB83FBFBFB854BF7FB87ABF9AB8663FB895BF0FB8A4"
+ $"BF33B87FBEDAB8DABE6CB940BEB4B91FBE4FB94EBE19B976BE2CB95ABE02B990"
+ $"BDF5B9D1BE02B9B4BDE8B9ECBDE2BA1DBDCAB9FABDF6BA3ABDEFBA76BDFEBA52"
+ $"BDD9BAA9BDC9BB27BD9DBAEDBDF235BE71BBBABE38BB92BEAFBBE9BF40BBD0BE"
+ $"FBBBE5BF81BBC1C009BB9CBFC3BB9FC05DBB94C0DBBC03C0A1BBCDC104BC26C0"
+ $"F3BC67C112BC34C0D3BC9DC103BD00C0E8BCC6C11FBD3544BDA3C13CBD6BC166"
+ $"BDB8C182BDE8C175BDCEC18CBE02C16DBE2BC179BE15C152BE5CC13EBECDC13E"
+ $"BE97C13EBF0DC185BF4CC15BBF24C1A8BF71C1A4BFE1C1A6BFB3C1A0C025C1D9"
+ $"C087C1B3C053C214C08AC289C06CC253C086C2CBC04DC319BFDCC2E8C00DC345"
+ $"BFB0C386BF66C376BFA9C396BF11C3FEBEBFC3C0BEF2C4353DC430BE0CC42CBE"
+ $"4DC432BDC0C433BD20C427BD6BC43BBCDCC4A9BC76C47EBCA7C4CDBC54C510BC"
+ $"03C505BC34C519BBE7C511BBA8C51136C511BB91C50F35C51ABB6FC4F6BB29C4"
+ $"7EBB2B4CBB5DC474BB0EC489BB01C475BB12C4A1BAEBC476BACDC489BAD6C440"
+ $"BAABC3EFBA66C418BA9AC3CCBA36C38FB9C9C3ACBA00C389B9BCC36CB939C340"
+ $"B92DC39AB94AC3E0B9A1C3C2B981C419B9DFC46DBA6AC44ABA1FC46EBA73C496"
+ $"BA88C48DBA85C4AFBA9CC4EABAA8C4CABAABC533BAA0C558BA1F4EBA5FC56231"
+ $"C4E8B9ADC51DB9DAC4CAB995C49EB958C4B6B975C48DB946C472B90DC466B92A"
+ $"C491B8F9C4BBB91BC49FB90BC4DEB932C52AB951C505B9444EB95EC5B4B96CC5"
+ $"90B952C5C9B97AC5E7B9B8C5D7B9A0C5FEB9DCC625BA26C614BA00C643BA5FC6"
+ $"94BA9EC64DBA87C667BAE8C6B6BB83C693BB3FC6DDBBD2C6E3BC7AC6E4BC21C6"
+ $"E2BCCEC6D0BD77C6F3BD2AC6A5BDCCC69FBE9AC69FBE3EC69FBE95C6A3BE88C6"
+ $"A1BE8DC6A03DC69FBEC0C696BEBEC6B2BEC2C6D4BE01C6D2BE15C6F4BD65C6F5"
+ $"BC24C700BCC3C6F5BC240008C301B7D8C301B7D8C2E6B7DBC2D4B7A2C2E8B7AE"
+ $"C2B1B792C269B7B6C288B7A7C204B7EEC236B742C221B77BC239B73AC285B742"
+ $"C278B746C2A5B740C2F1B74EC2D6B72FC30AB769C33CB7A1C31FB787C35EB7C1"
+ $"C301B7D8C31CB7D4C301B7D80004BB51C203BB51C203BB44C20BBB26C221BB37"
+ $"C21DBB53C247BBB8C28FBB85C26EBB91C265BB51C203BB84C225BB51C2030005"
+ $"C4F2BE2CC4F2BE2CC4D3BE57C48ABEA4C4A4BE74C46EBEDAC47DBF51C47DBF18"
+ $"C4B6BF36C4EDBEB7C4D0BEEAC502BE91C4F2BE2CC531BE48C4F2BE2C0009C211"
+ $"C325C211C325C17FC38EBFF5C343C09DC332BFD0C347BF8DC36ABFAAC350BF66"
+ $"C38ABF1EC386BF56C386BEAFC386BDCDC386BE3EC386BEC1C3CBC0BFC3BABFC2"
+ $"C3DBC137C3A8C221C367C1ADC38CC228C364C260C329C280C337C247C322C211"
+ $"C325C228C331C211C32502024E284E2C542E4C324C30482E020250304C325234"
+ $"4C364E344C34020258B81858305C32543654324E300202583456365836563C5A"
+ $"3854380204BCD4C1F1BACDC36FBEA5C09BC4A5BFA6C35FBE3CC67FC1AFC063C5"
+ $"ABC23AC443BE8FC715B827C85B30C9B7B682C68A0204C3CFC072C309BF44C521"
+ $"C2723DC65DC0DCC4E4BC10C7F5B880C76BB8DAC831B841C6E2BC6EC2E1B880C5"
+ $"CDBE41C1890622AEAAE6BAEAAAAF9A0EB9E3C6DDB9CA50B985C671BA12C5CDBA"
+ $"ABC592BAC54DBAB8C4BBBAEBC3C7BAABC37BBA85C0CABC87BE0E36B8E6B993B8"
+ $"DA2EB874B92DB96FB7AEBCD4BA52BCEDB87ABE39B7AEBD60B7AEBF11B7AEBF84"
+ $"2EBF91BA78C0D2BB91C49BBB6AC51ABC10C51ABBB6C51ABC5AC49BBCB6C21DBC"
+ $"C3BF9EBDCEBFCAC18BC1FBC323BF00C13E46C33BC195C43B46C3DAC129C484C0"
+ $"2AC492C010C3EFC090C36FBE1FC2BDBF40BC50C149BBF74EBB8451BBE8C66DBA"
+ $"9EC6B90611AAAAA8BA02BBEEB9ECBB48BAB8BCC7BB9DBCE0BE4EBB6FC017BC7A"
+ $"C0A5BE06BF73BE5F44BF9EBF6BBDDBC06CBD0245BCADC1C8BC2EBF40BAABBE0E"
+ $"BB04BF0DBB04BD82BB04BD13BAB8BCADBA38060BBAAA2A31C653BA0AC6C3BB84"
+ $"C644BB2BC69FBBB6C614BBAEC5A0BBDDC309BC1DC162BCADC0C9BB6FBFE4BAD6"
+ $"C0C9BADEC36FBAE2C5C4060AAAAB0ABE45C125BF99C12FBF80454448C1FBC393"
+ $"C21DC360C1C2C3EFC11EC446C052C492C02AC3EFC105C389BE67470605EA02BB"
+ $"37BAC5BBD5BA12B9ACB887B8E0B8ADB90BB868B887B939B920B96C0A05C16BBB"
+ $"91C472BB91C4D8BC36C4A5BCC3C16BBCE906078A2EBD4F2EBDB5B814BEA7BF40"
+ $"2EBF4DBA45BE0EBB04BEA7BB2BBD8ABAE1BD29BA520607AA3A39B8EDBE012F3C"
+ $"B99F3EB993BEDAB920BF99B946BE34B77BBFF4B7C139B74804032EBCE932BDCE"
+ $"BB2BBD34BB11BECDBB51BF4DBA380208CA68BA5FCB3FBD02CA38B9D0CA0DB6BC"
+ $"CAF2B7AEC947B5E955B58A55B58A55B58AC842B841C8FFB76C53B953C718B814"
+ $"C6E62FC74BB728C5A02FC601B84DC2703DC644BCB6C5ABBC1DC710BD82C89DBE"
+ $"E7C79E40C89DBEE7060ABFFB0FC6F0C096C624BFCAC6F0BFCA5A345C3758315A"
+ $"2E5A305A2C582A562E582C54305230C690B854C690B920C690B7DAC53ABAAB4F"
+ $"B9ACC501BB1EC46EBBF7C4ACBB9DC3F9BCB6C56DBE0EC38DBE4EC64DBDF00207"
+ $"C86EBE74C86EBE74C7A2BDA8C789BB44C809BB28C71835C633BBB7C6D3BBEEC5"
+ $"D9BB98C501BB44C508BB78C4F0BAECC3F3BC43C43DBBD0C4B4BC83C6FF38C633"
+ $"36C7CB3AC83BBE9AC5B3BF8DC907BD020202C6392F4DB9F9C66CBAC54DBBE14F"
+ $"BB15C46EBAEB0202C969B7CEC967B914CAFFB9E0543654324E30020258345636"
+ $"5836C875BD8FC969BB84C7A9BBF70604EAC2BD4448C10FC32DC07DC360C17CC3"
+ $"3CC0E3C37AC1E20205C5ABB861C65D31C52AB75C50204E224E20C3E0BA5FC37A"
+ $"B94EC455BB91C606BD02C492BCB6C721BE0DCB1BBDA8CB97BDE4C79EBBF70204"
+ $"4EB44BC4D4284EB5174BB9B9C408B8BAC43CBAD655BD4F4BBBD057BD4FC743BB"
+ $"77C818BC3A51BAC502034E28C4A1B847C53AB61650BA52C591B8A0C68FBBADC4"
+ $"DFBAAB59BD8FC4DFB7A104032EB77BC611B63CC969B50AC7A9B776CB34BCA9C9"
+ $"9C04032EB964B906B953B7D4B8D3B86D31B748BAB82C0406BE0BB689BE67B5FD"
+ $"C04AB606BF7FB5F0C11CB689C1D7B65BC1A2B73BC2A3B85448B77BC33CB801C3"
+ $"1EB70849B609C32304032EBDA8B887BEB4B76EBE0FB775BFEC2BC059B8AD0403"
+ $"2E28BE01B3FFC0D8B4253FB3D2C288B5BDC2FA0406FE0BC79EBB2BC8F4BBAAC8"
+ $"3FBB46C9EABC2DCB25BDDBCB04BD13CB3FBE74CA4FC07DCA99BFC9CA0DC116C9"
+ $"CFC27BCA0DC1E2C998C30058C3890A04C6FFBB11C855BC50C8BBBCC3C888BD4F"
+ $"040CAAFABABC6EC74BC090C699C303C5CDC3D9C54DC43FC4CEC44EC382C1EAC3"
+ $"03C237C34DC1D5C2EEC05DC402C148C3DEBF744BBD86C45FBD46C4F8BE45C512"
+ $"BE2C4DBE98C58ABDB9C5870608BAAABFECC1FB4448C1FBC393C21DC360C1C2C3"
+ $"EFC11EC446C052C492C02AC3EFC105C389BED2C2BD0A04C369BC83C6D638C666"
+ $"BD1CC35ABD350A03B46542B4BE41B4BE420605AF03B6AFC969B63CC9F0B72FC8"
+ $"D0BE4155B821CA8CC11CC6FAC42CC5C4C55EC53ABE67C91DC1E8C7EAB86DCB25"
+ $"0604EEBFCABB51C1FBBBD0C13EBC43C29FBB6DC18BBAAB43BB1EC144BAF2C09A"
+ $"BB4B02524929492949294527C2DEB5394328C11BB713C138B708C001B74FBDAA"
+ $"B782BEC3B781BDA7B782BDA1B782BDA4B782BC73B782BAC9B87FBB7EB7DBBA96"
+ $"B8AEBA3FB91DBA67B8E2BA3FB91DBA3FB91DBA3FB91DBA2AB93ABA05B979BA17"
+ $"B959B9FCB989B9EDB9ACB9F5B99BB9E4B9BDB9D4B9DEB9DCB9CDB9D4B9DEB9D4"
+ $"B9DEB9D4B9DEB9C5BA01B9ACBA4AB9B8BA25B9A0BA70B98CBABFB995BA97B985"
+ $"BADEB974BB3BB976BB31B974BB3BB974BB3CB974BB3BB96EBB66B966BBBFB966"
+ $"BBBFB963BBEC30BC4AB961BC1AB95FBCA8B963BD4DB963BD4CB965BD9AB96FBE"
+ $"1EB96FBE1EB974BE5CB99ABF4BB991BF27B99ABF4BB99ABF4BB99ABF4BB9A3BF"
+ $"6FB9B6BFA6B9ACBF8DB9B6BFA6B9B6BFA7B9B6BFA7B9C040B9D4BFE4B9CABFD4"
+ $"B9D4BFE4B9D4BFE5B9D4BFE5B9DEBFF5B9F2C00AB9E8C001B9FCC013BA0EC01C"
+ $"BA05C019BA48C032BA2DC00BBA36C017BA2AC008BA27C003BA27C003BA30C008"
+ $"BA41C012BA38C00DBA49C018BA5AC023BA52C01DBA5AC018BA5AC002BA5AC00D"
+ $"BA63C003BA73C006BA6BC004BA7AC006BA88C008BA81C007BA9CBFFBBAC4BFE1"
+ $"BAB0BFEEBAC6BFDDBACABFD4BAC8BFD8BADEBFD4BB04BFD4BAF1BFD4BB04BFD4"
+ $"BB3DBFA0BB30BFC6BB3EBF9CBB41BF95BB40BF9ABB41BF95BB41BF95BB41BF95"
+ $"BB45BF84BB46BF58BB48BF71BB41BF0EBB5ABEB6BB60BEE7BB58BEA6BB46BE7D"
+ $"BB53BE93BB2DBE4FBAF5BC9CBAFDBD76BAF4BC99BAF4BC92BAF4BC96BAF0BC24"
+ $"BAF9BB5DBAF1BBB5BAF9BB5DBAF9BB5DBAF9BB5DBB11BA3EBD3BB9BBBC5ABA03"
+ $"BD5BB9B2BD9AB9A4BD7BB9A9BDF5B993BEA8B972BE47B97FBEE8B96ABF83B965"
+ $"BF2FB964BF83B965BF83B965BF83B965BF85B965BF89B966BF87B966C007B968"
+ $"C173B99EC0A2B977C174B9C3C17DB9EAC177B9B3C17DB9EAC17DB9EAC17DB9EA"
+ $"C17DB9EBC17DB9EBC17DB9EBC18DBA80C1DCBB27C1AEBAD7C20ABB76C287BC34"
+ $"C245BBBDC288BC34C288BC34C288BC34C29CBC59C2C7BC97C2B1BC7AC2C8BC97"
+ $"C2C8BC97C2C8BC97C2DEBCB4C30EBCE3C2F6BCCDC326BCF9C35ABD19C340BD0B"
+ $"C35ABD19C35BBD1AC35BBD19C375BD28C3ADBD3AC390BD33C41EBD57C52CBCEC"
+ $"C49FBD3CC5A0BCA7C644BC59C5F6BC87C658BC4EC67EBC34C66BBC42C691BC26"
+ $"C6B8BC05C6A4BC17C6CBBBF4C6F3BBC8C6DFBBDFC6F3BBC8C6F3BBC8C6F3BBC8"
+ $"C707BBB1C733BB78C71DBB97C738BB70C73FBB65C73ABB6CC75BBB3EC784BAFE"
+ $"C773BB1BC7AEBADEC801BAA2C7D9BABDC863BA60C90FB983C8CDB9F9C90FB983"
+ $"C90FB983C90FB983C91FB967582CC9F1B869562A532C532C532C5029C6FCB704"
+ $"4C27022BBB63C1BBBB63C1BBBB63C1D3BB63C203BB63C1EBBB52C1F8BB30C1E2"
+ $"BB41C1EDBB30C1EFBB30C20ABB30C1FCBB1DC1FFBAF6C1E9BB09C1F4BAFAC1F4"
+ $"BB03C20ABAFFC1FFBAF2C201BACFC1EFBAE0C1F8BAD1C205BAD6C231BAD4C21B"
+ $"BAC5C21FBAA2C1FCBAB3C20EBAA9C21BBAB5C258BAAFC239BAA4C24FBA82C23E"
+ $"BA93C246BA91C265BAAFC2B3BAA0C28CBA9AC297BA6FC25EBA84C27BBA7EC286"
+ $"BA9CC2D4BA8DC2ADBA8FC2CCBA75C2BABA82C2C3BA86C2DDBAA9C323BA97C300"
+ $"BA9AC316BA7CC2FBBA8BC309BA8DC313BAAFC343BA9EC32BBAA0C33BBA82C329"
+ $"BA91C332BA82C329BCECC5E5BB6AC4E6BD4DC625BE31C6B6BDB9C66EBEA9C6FE"
+ $"BFC3C781BF2FC746C07CC7CCC238C817C14CC805C267C81BC2C9C81DC298C81D"
+ $"C32C55C3FFC80BC393C819C46BC7FDC51AC7BCC4C9C7E1C56CC796C5ECC731C5"
+ $"B1C767C644C6E0C6B550C685C681C6B550C6B550C6B550534DC737C3C6C737C3"
+ $"C6C647C5EFC401C63BC56EC69FC3DFC632C397C6174AC625C361C602C2EAC5CB"
+ $"C328C5EAC03AC473BC58C21DBC58C21DBC56C22CBC52C24BBC54C23BBC32C22E"
+ $"BBF1C1F6BC12C212BBF1C1FEBBF1C210BBF1C207BBE2C20136C1E2BBD3C1F1BB"
+ $"C2C1EFBBBEC20ABBC0C1FCBBAFC1F4BB91C1C8BBA0C1DEBB91C1D9BB91C1FCBB"
+ $"91C1EBBB82C1E7BB63C1BBBB72C1D1BB63C1BBBB63C1BBBB63C1BBBB63C1BB02"
+ $"07C418BAF9C418BAF9C3C5BAFEC3C0BB55C3B1BB0AC3CEBBA0C452BC24C3F6BC"
+ $"09C4AEBC3EC530BBC0C501BBF9C55FBB87C50DBB40C56BBB85C4B0BAFBC418BA"
+ $"F9C46CBAF4C418BAF9C418BAF9C418BAF9C418BAF90606FF07C41CB8EEC41CB8"
+ $"EEC406B940C361B95AC3B3B970C30FB944C2F5B89FC2DFB8F1C30BB84DC3B0B8"
+ $"33C35EB81DC402B849C41CB8EEC432B89CC41CB8EEB8EE0606FF07C5BFB96BC5"
+ $"BFB96BC5A9B9BDC62BBA26C5D9BA10C67DBA3CC6E6B9BAC6D0BA0CC6FCB968C6"
+ $"7AB8FFC6CCB915C628B8E9C5BFB96BC5D5B919C5BFB96BB96B06033EB786C5BD"
+ $"C7ACBC6AC070C1F2BF35BFFCB786C5BDB777C5BDB786C5BD06033EC441C927BA"
+ $"EEB900C077C03DBE81C176C441C927C441C935C441C9270207C184C11DC184C1"
+ $"1DC184C1CBC08EC2C3C126C26DBFF7C31BBEA6C2C3BF3EC31BBE0EC26DBDB2C1"
+ $"1DBDB2C1CBBDB2C06EBEA6BF74BE0EBFCDBF3EBF1DC08EBF74BFF7BF1DC126BF"
+ $"CDC184C11DC184C06EC184C11D0207BF82B735BF82B735C2F2B735C7D7BC0550"
+ $"B90CC990BF00C7D7C5A4C990C2AA50C89EBF82CA73C2F2CA73BC12CA73B72EC5"
+ $"A4B8E6C89EB576C2AAB72EBC05B576BF00B8E6B90CBF82B735BC12B735BF82B7"
+ $"350F0A3F010202409B620000000000003E7478C237534A44790A000233341240"
+ $"9D03000000000000403CAFC74454C30A4201178322040A0001021240BAB10000"
+ $"0000000040B755C78CDB4259A101178300040A4701020240BAB1000000000000"
+ $"40B755C78CDB4259A10A4801030240BAB100000000000040C57AC78CDB422FE4"
+ $"0A46090405060708090B0C0A0240BAB100000000000040B755C78CDB4259A10A"
+ $"490138201E210A4A0139201E210A4B013A201E210A4C013B000A440233340240"
+ $"9D03000000000000403CAFC74454C30A420A4502343312409D03000000000000"
+ $"403CAFC74454C30A4201178100040A00013502409D03000000000000403CAFC7"
+ $"4454C30A420A00013602409D03000000000000403CAFC74454C30A420A000137"
+ $"02409D03000000000000403CAFC74454C30A42"
};
diff --git a/www-client/iceweasel/iceweasel-136.0.1.recipe b/www-client/iceweasel/iceweasel-136.0.1.recipe
new file mode 100644
index 000000000..5e5ad1643
--- /dev/null
+++ b/www-client/iceweasel/iceweasel-136.0.1.recipe
@@ -0,0 +1,150 @@
+SUMMARY="Unofficial Haiku port of Mozilla Firefox"
+DESCRIPTION="Iceweasel is an open source web browser. \
+It achieves balance between ease of use and customization, catering to the \
+needs of both casual and power users."
+HOMEPAGE="https://github.com/kenz-gelsoft/gecko-dev"
+COPYRIGHT="1995-2025 Mozilla Developers and Contributors"
+LICENSE="MPL v2.0"
+REVISION="1"
+SOURCE_URI="https://ftp.mozilla.org/pub/firefox/releases/$portVersion/source/firefox-$portVersion.source.tar.xz"
+CHECKSUM_SHA256="4f12bdcfaa7271f7f2b18ab8d377a7b22be95ea01f11e18e1ebf77953e3221b6"
+SOURCE_DIR="firefox-$portVersion"
+PATCHES="iceweasel-$portVersion.patchset"
+ADDITIONAL_FILES="
+ iceweasel.rdef.in
+ branding.zip
+ "
+
+ARCHITECTURES="!x86_64"
+
+PROVIDES="
+ iceweasel= $portVersion
+ app:Iceweasel= $portVersion
+ cmd:iceweasel= $portVersion
+ "
+REQUIRES="
+ haiku
+ lib:libatk_1.0
+ lib:libcairo
+ lib:libcairo_gobject
+ lib:libdbus_1
+ lib:libevent_2.1
+ lib:libgdk_3
+ lib:libgdk_pixbuf_2.0
+ lib:libglib_2.0
+ lib:libgtk_3
+ lib:libharfbuzz
+ lib:libintl
+ lib:libnspr4
+ lib:libnss3
+ lib:libpango_1.0
+ lib:libpangocairo_1.0
+ lib:libpng16
+ lib:libz
+ "
+
+BUILD_REQUIRES="
+ haiku_devel
+ devel:libdbus_1
+ devel:libdbus_glib_1
+ devel:libevent
+ devel:libglib_2.0
+ devel:libgtk_3
+ devel:libnspr4
+ devel:libnss3
+ devel:libpng16
+ devel:libvpx
+ devel:libwebp
+ devel:libzstd
+ "
+BUILD_PREREQUIRES="
+ llvm18
+ nodejs20
+ rust_bin
+ cmd:autoconf_2.13
+ cmd:cbindgen
+ cmd:clang++
+ cmd:gawk
+ cmd:gcc
+ cmd:git
+ cmd:lld >= 18
+ cmd:m4
+ cmd:make
+ cmd:nasm
+ cmd:perl
+ cmd:pip3
+ cmd:pkg_config
+ cmd:python3
+ cmd:tar
+ cmd:unzip
+ cmd:xargs
+ cmd:zip
+ "
+
+BUILD()
+{
+ chmod +x \
+ build/cargo-linker \
+ mach
+
+ # extract browser branding for iceweasel
+ unzip $portDir/additional-files/branding.zip -o -d $sourceDir/browser/branding
+
+ rm -f mozconfig
+ cp haiku_mozconfig mozconfig
+ echo "ac_add_options --with-branding=browser/branding/unofficial" >> mozconfig
+ export MOZBUILD_STATE_PATH="$sourceDir/.mozconfig"
+
+ ./mach -vv \
+ --no-interactive bootstrap \
+ --application-choice="Firefox for Desktop" \
+ --exclude=sysroot-wasm32-wasi
+
+ ./mach build
+}
+
+INSTALL()
+{
+ export MOZBUILD_STATE_PATH="$sourceDir/.mozconfig"
+
+ ./mach install
+
+ ./mach package
+
+ mkdir -p $appsDir
+
+ mv /usr/local/lib/Iceweasel $appsDir/Iceweasel
+
+ mkdir -p $appsDir/Iceweasel/lib
+
+ # arranging the files in lib directories
+ cd $appsDir/Iceweasel
+ mv \
+ libgkcodecs.so \
+ libipcclientcerts.so \
+ liblgpllibs.so \
+ libmozavcodec.so \
+ libmozavutil.so \
+ libmozgtk.so \
+ libmozsqlite3.so \
+ libmozwayland.so \
+ libxul.so \
+ lib
+
+ local APP_SIGNATURE="application/x-vnd.iceweasel"
+ local MAJOR="`echo "$portVersion" | cut -d. -f1`"
+ local MIDDLE="`echo "$portVersion" | cut -d. -f2`"
+ local MINOR="`echo "$portVersion" | cut -d. -f3`"
+ local LONG_INFO="$SUMMARY"
+ sed \
+ -e "s|@APP_SIGNATURE@|$APP_SIGNATURE|" \
+ -e "s|@MAJOR@|$MAJOR|" \
+ -e "s|@MIDDLE@|$MIDDLE|" \
+ -e "s|@MINOR@|$MINOR|" \
+ -e "s|@LONG_INFO@|$LONG_INFO|" \
+ $portDir/additional-files/iceweasel.rdef.in > iceweasel.rdef
+
+ addResourcesToBinaries iceweasel.rdef $appsDir/Iceweasel/Iceweasel
+
+ addAppDeskbarSymlink $appsDir/Iceweasel/Iceweasel
+}
diff --git a/www-client/iceweasel/patches/iceweasel-136.0.1.patchset b/www-client/iceweasel/patches/iceweasel-136.0.1.patchset
new file mode 100644
index 000000000..60bff6f59
--- /dev/null
+++ b/www-client/iceweasel/patches/iceweasel-136.0.1.patchset
@@ -0,0 +1,2915 @@
+From 055c3d320459ca0f7ee2bfa06f9aa18d6ef2bdd8 Mon Sep 17 00:00:00 2001
+From: Gerasim Troeglazov <3dEyes@gmail.com>
+Date: Tue, 11 Mar 2025 23:15:03 +1000
+Subject: Add Haiku build support
+
+Based on patches sourced from https://github.com/kenz-gelsoft/gecko-dev/
+
+- Enabled building for the Haiku.
+- Implemented the cubeb audio backend for MediaKit.
+- Made additional modifications for Haiku compatibility.
+
+diff --git a/Cargo.lock b/Cargo.lock
+index da2fbe8..ebb325b 100644
+--- a/Cargo.lock
++++ b/Cargo.lock
+@@ -3655,7 +3655,6 @@ dependencies = [
+ name = "lmdb-rkv-sys"
+ version = "0.11.2"
+ source = "registry+https://github.com/rust-lang/crates.io-index"
+-checksum = "61b9ce6b3be08acefa3003c57b7565377432a89ec24476bbe72e11d101f852fe"
+ dependencies = [
+ "cc",
+ "libc",
+diff --git a/browser/app/profile/firefox.js b/browser/app/profile/firefox.js
+index b0ea784..0850260 100644
+--- a/browser/app/profile/firefox.js
++++ b/browser/app/profile/firefox.js
+@@ -15,7 +15,9 @@
+
+ #ifdef XP_UNIX
+ #ifndef XP_MACOSX
+- #define UNIX_BUT_NOT_MAC
++ #ifndef XP_HAIKU
++ #define UNIX_BUT_NOT_MAC_NOR_HAIKU
++ #endif
+ #endif
+ #endif
+
+@@ -273,7 +275,7 @@ pref("browser.fixup.domainsuffixwhitelist.local", true);
+ // search string, that may contain a valid host, to a search engine.
+ pref("browser.fixup.dns_first_for_single_words", false);
+
+-#ifdef UNIX_BUT_NOT_MAC
++#ifdef UNIX_BUT_NOT_MAC_NOR_HAIKU
+ pref("general.autoScroll", false);
+ #else
+ pref("general.autoScroll", true);
+@@ -1078,7 +1080,7 @@ pref("security.allow_parent_unrestricted_js_loads", false);
+ pref("browser.tabs.min_inactive_duration_before_unload", 600000);
+
+ // Does middleclick paste of clipboard to new tab button
+-#ifdef UNIX_BUT_NOT_MAC
++#ifdef UNIX_BUT_NOT_MAC_NOR_HAIKU
+ pref("browser.tabs.searchclipboardfor.middleclick", true);
+ #else
+ pref("browser.tabs.searchclipboardfor.middleclick", false);
+diff --git a/browser/base/content/browser-sets.inc b/browser/base/content/browser-sets.inc
+index 269b025..11fb0a4 100644
+--- a/browser/base/content/browser-sets.inc
++++ b/browser/base/content/browser-sets.inc
+@@ -6,6 +6,12 @@
+ #ifdef XP_UNIX
+ #ifndef XP_MACOSX
+ #define XP_GNOME 1
++
++#ifdef XP_HAIKU
++#define XP_MACOSX_OR_HAIKU 1
++#endif
++#else
++#define XP_MACOSX_OR_HAIKU 1
+ #endif
+ #endif
+
+@@ -201,7 +207,7 @@
+
+
+
+-#ifndef XP_MACOSX
++#ifndef XP_MACOSX_OR_HAIKU
+
+
+ #else
+@@ -346,10 +352,14 @@
+
+
+ #ifdef XP_GNOME
++#ifndef XP_HAIKU
+ #define NUM_SELECT_TAB_MODIFIER alt
+ #else
+ #define NUM_SELECT_TAB_MODIFIER accel
+ #endif
++#else
++#define NUM_SELECT_TAB_MODIFIER accel
++#endif
+
+ #expand
+ #expand
+diff --git a/build/RunCbindgen.py b/build/RunCbindgen.py
+index fbbe9d0..d0772b8 100644
+--- a/build/RunCbindgen.py
++++ b/build/RunCbindgen.py
+@@ -55,7 +55,7 @@ def generate_metadata(output, cargo_config):
+ # within a tree, the Rust dependencies have been vendored in so Cargo won't
+ # touch the lock file.
+ if not buildconfig.substs.get("JS_STANDALONE"):
+- args.append("--frozen")
++ args.append("--offline")
+
+ stdout, returncode = _run_process(args)
+
+diff --git a/build/gecko_templates.mozbuild b/build/gecko_templates.mozbuild
+index 11b51ae..7c04ddf 100644
+--- a/build/gecko_templates.mozbuild
++++ b/build/gecko_templates.mozbuild
+@@ -44,7 +44,8 @@ def GeckoBinary(linkage="dependent", mozglue=None):
+ USE_LIBS += ["sanitizer-options"]
+ DEFINES["MOZ_HAS_MOZGLUE"] = True
+ if CONFIG["MOZ_GLUE_IN_PROGRAM"] and CONFIG["CC_TYPE"] in ("clang", "gcc"):
+- LDFLAGS += ["-rdynamic"]
++ #LDFLAGS += ['-rdynamic']
++ LDFLAGS += ['-Wl,-export-dynamic']
+ elif mozglue == "library":
+ LIBRARY_DEFINES["MOZ_HAS_MOZGLUE"] = True
+ if not CONFIG["MOZ_GLUE_IN_PROGRAM"]:
+diff --git a/build/moz.configure/bindgen.configure b/build/moz.configure/bindgen.configure
+index 72f4d41..4c682da 100644
+--- a/build/moz.configure/bindgen.configure
++++ b/build/moz.configure/bindgen.configure
+@@ -203,7 +203,7 @@ def bindgen_libclang_path(libclang_path, clang, library_name_info, host):
+ libclang_choices.append(
+ "%sclang%s" % (library_name_info.dll.prefix, library_name_info.dll.suffix)
+ )
+- if host.kernel == "Linux":
++ if host.kernel == "Linux" or host.kernel == "Haiku":
+ libclang_choices.append("libclang.so.*")
+
+ if host.os == "OpenBSD":
+diff --git a/build/moz.configure/init.configure b/build/moz.configure/init.configure
+index 9bf4bb2..4c911a3 100644
+--- a/build/moz.configure/init.configure
++++ b/build/moz.configure/init.configure
+@@ -513,6 +513,8 @@ def split_triplet(triplet, allow_wasi=False):
+ canonical_os = canonical_kernel = "DragonFly"
+ elif os.startswith("freebsd"):
+ canonical_os = canonical_kernel = "FreeBSD"
++ elif os.startswith("haiku"):
++ canonical_os = canonical_kernel = "Haiku"
+ elif os.startswith("netbsd"):
+ canonical_os = canonical_kernel = "NetBSD"
+ elif os.startswith("openbsd"):
+@@ -941,6 +943,15 @@ def target_is_freebsd(target):
+ set_define("XP_FREEBSD", target_is_freebsd)
+
+
++@depends(target)
++def target_is_haiku(target):
++ if target.kernel == "Haiku":
++ return True
++
++
++set_define("XP_HAIKU", target_is_haiku)
++
++
+ @depends(target)
+ def target_is_solaris(target):
+ if target.kernel == "SunOS":
+diff --git a/build/moz.configure/nss.configure b/build/moz.configure/nss.configure
+index c6ce518..0b72eba 100644
+--- a/build/moz.configure/nss.configure
++++ b/build/moz.configure/nss.configure
+@@ -13,7 +13,7 @@ system_lib_option(
+ imply_option("--with-system-nspr", True, when="--with-system-nss")
+
+ nss_pkg = pkg_check_modules(
+- "NSS", "nss >= 3.108", when="--with-system-nss", config=False
++ "NSS", "nss >= 3.107", when="--with-system-nss", config=False
+ )
+
+ set_config("MOZ_SYSTEM_NSS", True, when="--with-system-nss")
+diff --git a/build/moz.configure/toolchain.configure b/build/moz.configure/toolchain.configure
+index 319deff..1b32de2 100644
+--- a/build/moz.configure/toolchain.configure
++++ b/build/moz.configure/toolchain.configure
+@@ -2941,7 +2941,7 @@ def security_hardening_cflags(
+ if (
+ c_compiler.type == "clang"
+ and c_compiler.version >= "11.0.1"
+- and target.os not in ("WINNT", "OSX", "OpenBSD")
++ and target.os not in ("WINNT", "OSX", "OpenBSD", "Haiku")
+ and target.cpu in ("x86", "x86_64", "ppc64", "s390x")
+ ):
+ flags.append("-fstack-clash-protection")
+diff --git a/dom/events/ShortcutKeyDefinitions.cpp b/dom/events/ShortcutKeyDefinitions.cpp
+index 3f34f45..97b7c98 100644
+--- a/dom/events/ShortcutKeyDefinitions.cpp
++++ b/dom/events/ShortcutKeyDefinitions.cpp
+@@ -435,13 +435,13 @@ ShortcutKeyData ShortcutKeys::sBrowserHandlers[] = {
+ {u"keypress", u"VK_LEFT", nullptr, u"control,shift", u"cmd_selectWordPrevious"}, // Android, Emacs
+ {u"keypress", u"VK_RIGHT", nullptr, u"control,shift", u"cmd_selectWordNext"}, // Android, Emacs
+ #endif // MOZ_WIDGET_ANDROID || USE_EMACS_KEY_BINDINGS
+-#if defined(XP_WIN) || defined(MOZ_WIDGET_GTK)
++#if defined(XP_WIN) || (defined(MOZ_WIDGET_GTK) && !defined(XP_HAIKU))
+ {u"keypress", u"VK_LEFT", nullptr, u"control", u"cmd_moveLeft2"}, // Win, Linux
+ {u"keypress", u"VK_RIGHT", nullptr, u"control", u"cmd_moveRight2"}, // Win, Linux
+ {u"keypress", u"VK_LEFT", nullptr, u"control,shift", u"cmd_selectLeft2"}, // Win, Linux
+ {u"keypress", u"VK_RIGHT", nullptr, u"control,shift", u"cmd_selectRight2"}, // Win, Linux
+ #endif // XP_WIN || MOZ_WIDGET_GTK
+-#if defined(MOZ_WIDGET_COCOA)
++#if defined(MOZ_WIDGET_COCOA) || defined(XP_HAIKU)
+ {u"keypress", u"VK_LEFT", nullptr, u"alt", u"cmd_moveLeft2"}, // macOS
+ {u"keypress", u"VK_RIGHT", nullptr, u"alt", u"cmd_moveRight2"}, // macOS
+ {u"keypress", u"VK_LEFT", nullptr, u"alt,shift", u"cmd_selectLeft2"}, // macOS
+diff --git a/dom/media/CallbackThreadRegistry.cpp b/dom/media/CallbackThreadRegistry.cpp
+index 84ef7b7..e041636 100644
+--- a/dom/media/CallbackThreadRegistry.cpp
++++ b/dom/media/CallbackThreadRegistry.cpp
+@@ -96,7 +96,9 @@ void CallbackThreadRegistry::Unregister(ProfilerThreadId aThreadId) {
+ return;
+ }
+ }
++#ifndef XP_HAIKU
+ MOZ_ASSERT_UNREACHABLE("Current thread was not registered");
++#endif
+ }
+
+ } // namespace mozilla
+diff --git a/gfx/angle/checkout/src/common/system_utils_posix.cpp b/gfx/angle/checkout/src/common/system_utils_posix.cpp
+index ab0faee..f9c9389 100644
+--- a/gfx/angle/checkout/src/common/system_utils_posix.cpp
++++ b/gfx/angle/checkout/src/common/system_utils_posix.cpp
+@@ -201,7 +201,9 @@ void *OpenSystemLibraryWithExtensionAndGetError(const char *libraryName,
+ int extraFlags = 0;
+ if (searchType == SearchType::AlreadyLoaded)
+ {
++#ifndef __HAIKU__
+ extraFlags = RTLD_NOLOAD;
++#endif
+ }
+
+ std::string fullPath = directory + libraryName;
+diff --git a/gfx/layers/wr/IpcResourceUpdateQueue.cpp b/gfx/layers/wr/IpcResourceUpdateQueue.cpp
+index d19dc7f..dcbd9e3 100644
+--- a/gfx/layers/wr/IpcResourceUpdateQueue.cpp
++++ b/gfx/layers/wr/IpcResourceUpdateQueue.cpp
+@@ -51,7 +51,8 @@ layers::OffsetRange ShmSegmentsWriter::Write(Range aBytes) {
+ const size_t start = mCursor;
+ const size_t length = aBytes.length();
+
+- if (length >= mChunkSize * 4) {
++// if (length >= mChunkSize * 4) {
++ if (length > 0) {
+ auto range = AllocLargeChunk(length);
+ if (range.length()) {
+ // Allocation was successful
+diff --git a/gfx/skia/skia/include/private/base/SkTArray.h b/gfx/skia/skia/include/private/base/SkTArray.h
+index 879bebe..eee6750 100644
+--- a/gfx/skia/skia/include/private/base/SkTArray.h
++++ b/gfx/skia/skia/include/private/base/SkTArray.h
+@@ -562,7 +562,7 @@ private:
+
+ // Note for 32-bit machines kMaxCapacity will be <= SIZE_MAX. For 64-bit machines it will
+ // just be INT_MAX if the sizeof(T) < 2^32.
+- static constexpr int kMaxCapacity = SkToInt(std::min(SIZE_MAX / sizeof(T), (size_t)INT_MAX));
++ static constexpr int kMaxCapacity = SkToInt(std::min((size_t)SIZE_MAX / sizeof(T), (size_t)INT_MAX));
+
+ void setDataFromBytes(SkSpan allocation) {
+ T* data = TCast(allocation.data());
+diff --git a/haiku_mozconfig b/haiku_mozconfig
+new file mode 100644
+index 0000000..41a452e
+--- /dev/null
++++ b/haiku_mozconfig
+@@ -0,0 +1,48 @@
++export MOZILLA_OFFICIAL=1
++
++# Application name
++ac_add_options --with-app-name=Iceweasel
++
++# Backend
++ac_add_options --enable-default-toolkit=cairo-gtk3-wayland-only
++ac_add_options --enable-audio-backends=haiku
++
++# System library
++ac_add_options --with-system-ffi
++ac_add_options --with-system-jpeg
++ac_add_options --with-system-libevent
++ac_add_options --with-system-libvpx
++ac_add_options --with-system-nspr
++ac_add_options --with-system-nss
++ac_add_options --with-system-webp
++ac_add_options --with-system-zlib
++
++# Disable
++ac_add_options --disable-tests
++ac_add_options --disable-updater
++ac_add_options --disable-valgrind
++ac_add_options --disable-crashreporter
++ac_add_options --without-wasm-sandboxed-libraries
++mk_add_options MOZ_CRASHREPORTER=0
++mk_add_options MOZ_DATA_REPORTING=0
++mk_add_options MOZ_SERVICES_HEALTHREPORT=0
++mk_add_options MOZ_TELEMETRY_REPORTING=0
++
++# Linker
++export LD="lld"
++export LDFLAGS="-fuse-ld=lld -Wl,--no-keep-memory -Wl,--undefined-version"
++
++# Optimize
++ac_add_options --enable-jit
++ac_add_options --enable-optimize=-O3
++ac_add_options RUSTC_OPT_LEVEL=1
++export RUSTC_OPT_LEVEL=1
++
++# Debug
++ac_add_options --disable-debug
++ac_add_options --disable-debug-symbols
++ac_add_options --disable-debug-js-modules
++ac_add_options --enable-strip
++ac_add_options --enable-install-strip
++export STRIP_FLAGS="--strip-debug --strip-unneeded"
++
+diff --git a/haiku_mozconfig_dbg b/haiku_mozconfig_dbg
+new file mode 100644
+index 0000000..55aaa1a
+--- /dev/null
++++ b/haiku_mozconfig_dbg
+@@ -0,0 +1,41 @@
++export MOZILLA_OFFICIAL=1
++
++mk_add_options MOZ_OBJDIR=@TOPSRCDIR@/obj-ff-dbg
++
++# Application name
++ac_add_options --with-app-name=Iceweasel
++
++# Backend
++ac_add_options --enable-default-toolkit=cairo-gtk3-wayland-only
++ac_add_options --enable-audio-backends=haiku
++
++# System library
++ac_add_options --with-system-ffi
++ac_add_options --with-system-jpeg
++ac_add_options --with-system-libevent
++ac_add_options --with-system-libvpx
++ac_add_options --with-system-nspr
++ac_add_options --with-system-nss
++ac_add_options --with-system-webp
++ac_add_options --with-system-zlib
++
++# Disable
++ac_add_options --disable-tests
++ac_add_options --disable-updater
++ac_add_options --disable-valgrind
++ac_add_options --disable-crashreporter
++ac_add_options --without-wasm-sandboxed-libraries
++mk_add_options MOZ_CRASHREPORTER=0
++mk_add_options MOZ_DATA_REPORTING=0
++mk_add_options MOZ_SERVICES_HEALTHREPORT=0
++mk_add_options MOZ_TELEMETRY_REPORTING=0
++
++# Linker
++export LD="lld"
++export LDFLAGS="-fuse-ld=lld -Wl,--no-keep-memory -Wl,--undefined-version"
++
++# Optimize
++ac_add_options --disable-jit
++
++# Debug
++ac_add_options --enable-debug
+diff --git a/image/SurfaceCache.cpp b/image/SurfaceCache.cpp
+index f97b32d..7857331 100644
+--- a/image/SurfaceCache.cpp
++++ b/image/SurfaceCache.cpp
+@@ -1625,7 +1625,7 @@ void SurfaceCache::Initialize() {
+ // Compute the size of the surface cache.
+ uint64_t memorySize = PR_GetPhysicalMemorySize();
+ if (memorySize == 0) {
+-#if !defined(__DragonFly__)
++#if !defined(__DragonFly__) && !defined(__HAIKU__)
+ MOZ_ASSERT_UNREACHABLE("PR_GetPhysicalMemorySize not implemented here");
+ #endif
+ memorySize = 256 * 1024 * 1024; // Fall back to 256MB.
+diff --git a/ipc/chromium/moz.build b/ipc/chromium/moz.build
+index 0e8504f..015993f 100644
+--- a/ipc/chromium/moz.build
++++ b/ipc/chromium/moz.build
+@@ -106,7 +106,7 @@ if CONFIG["TARGET_OS"] == "iOS":
+ "src/base/process_util_ios.cpp",
+ ]
+
+-if CONFIG["TARGET_KERNEL"] in ("DragonFly", "FreeBSD", "NetBSD", "OpenBSD"):
++if CONFIG["TARGET_KERNEL"] in ("DragonFly", "FreeBSD", "NetBSD", "OpenBSD", "Haiku"):
+ SOURCES += [
+ "src/base/process_util_linux.cc",
+ "src/base/time_posix.cc",
+diff --git a/ipc/chromium/src/base/message_loop.cc b/ipc/chromium/src/base/message_loop.cc
+index 5e7a653..90c600e 100644
+--- a/ipc/chromium/src/base/message_loop.cc
++++ b/ipc/chromium/src/base/message_loop.cc
+@@ -26,7 +26,7 @@
+ # include "base/message_pump_libevent.h"
+ #endif
+ #if defined(XP_LINUX) || defined(__DragonFly__) || defined(XP_FREEBSD) || \
+- defined(XP_NETBSD) || defined(XP_OPENBSD)
++ defined(XP_NETBSD) || defined(XP_OPENBSD) || defined(XP_HAIKU)
+ # if defined(MOZ_WIDGET_GTK)
+ # include "base/message_pump_glib.h"
+ # endif
+@@ -280,7 +280,7 @@ MessageLoop::MessageLoop(Type type, nsISerialEventTarget* aEventTarget)
+ # if defined(XP_DARWIN)
+ pump_ = base::MessagePumpMac::Create();
+ # elif defined(XP_LINUX) || defined(__DragonFly__) || defined(XP_FREEBSD) || \
+- defined(XP_NETBSD) || defined(XP_OPENBSD)
++ defined(XP_NETBSD) || defined(XP_OPENBSD) || defined(XP_HAIKU)
+ pump_ = new base::MessagePumpForUI();
+ # endif // XP_LINUX
+ } else if (type_ == TYPE_IO) {
+diff --git a/ipc/chromium/src/base/platform_thread.h b/ipc/chromium/src/base/platform_thread.h
+index f3a65e8..40ad58b 100644
+--- a/ipc/chromium/src/base/platform_thread.h
++++ b/ipc/chromium/src/base/platform_thread.h
+@@ -24,7 +24,7 @@ typedef void* PlatformThreadHandle; // HANDLE
+ #else
+ # include
+ typedef pthread_t PlatformThreadHandle;
+-# if defined(XP_LINUX) || defined(XP_OPENBSD) || defined(XP_SOLARIS) || \
++# if defined(XP_LINUX) || defined(XP_OPENBSD) || defined(XP_SOLARIS) || defined(XP_HAIKU) || \
+ defined(__GLIBC__)
+ # include
+ typedef pid_t PlatformThreadId;
+diff --git a/ipc/chromium/src/base/platform_thread_posix.cc b/ipc/chromium/src/base/platform_thread_posix.cc
+index d28abbc..af56adf 100644
+--- a/ipc/chromium/src/base/platform_thread_posix.cc
++++ b/ipc/chromium/src/base/platform_thread_posix.cc
+@@ -16,6 +16,8 @@
+ #elif defined(XP_LINUX)
+ # include
+ # include
++#elif defined(__HAIKU__)
++# include
+ #endif
+
+ #if !defined(XP_DARWIN)
+@@ -60,6 +62,8 @@ PlatformThreadId PlatformThread::CurrentId() {
+ return lwp_gettid();
+ #elif defined(XP_FREEBSD)
+ return pthread_getthreadid_np();
++#elif defined(__HAIKU__)
++ return find_thread(NULL);
+ #endif
+ }
+
+diff --git a/ipc/chromium/src/base/process_util_posix.cc b/ipc/chromium/src/base/process_util_posix.cc
+index c622c58..d6cb21b 100644
+--- a/ipc/chromium/src/base/process_util_posix.cc
++++ b/ipc/chromium/src/base/process_util_posix.cc
+@@ -129,7 +129,7 @@ void CloseSuperfluousFds(void* aCtx, bool (*aShouldPreserve)(void*, int)) {
+ #if defined(ANDROID)
+ static const rlim_t kSystemDefaultMaxFds = 1024;
+ static const char kFDDir[] = "/proc/self/fd";
+-#elif defined(XP_LINUX) || defined(XP_SOLARIS)
++#elif defined(XP_LINUX) || defined(XP_SOLARIS) || defined(XP_HAIKU)
+ static const rlim_t kSystemDefaultMaxFds = 8192;
+ static const char kFDDir[] = "/proc/self/fd";
+ #elif defined(XP_DARWIN)
+diff --git a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
+index 9b4a9d8..5b8f34f 100644
+--- a/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
++++ b/ipc/chromium/src/chrome/common/ipc_channel_posix.cc
+@@ -288,6 +288,18 @@ bool Channel::ChannelImpl::ProcessIncomingMessages() {
+ if (cmsg->cmsg_level == SOL_SOCKET && cmsg->cmsg_type == SCM_RIGHTS) {
+ const unsigned payload_len = cmsg->cmsg_len - CMSG_LEN(0);
+ DCHECK(payload_len % sizeof(int) == 0);
++#ifdef XP_HAIKU
++ if (num_wire_fds > 0) {
++ if (input_overflow_fds_.empty()) {
++ input_overflow_fds_ = std::vector(&wire_fds[0], &wire_fds[num_wire_fds]);
++ } else {
++ const size_t prev_size = input_overflow_fds_.size();
++ input_overflow_fds_.resize(prev_size + num_wire_fds);
++ memcpy(&input_overflow_fds_[prev_size], wire_fds,
++ num_wire_fds * sizeof(int));
++ }
++ }
++#endif
+ wire_fds = reinterpret_cast(CMSG_DATA(cmsg));
+ num_wire_fds = payload_len / 4;
+
+@@ -299,7 +311,9 @@ bool Channel::ChannelImpl::ProcessIncomingMessages() {
+ IGNORE_EINTR(close(wire_fds[i]));
+ return false;
+ }
++#ifndef XP_HAIKU
+ break;
++#endif
+ }
+ }
+ }
+diff --git a/ipc/chromium/src/chrome/common/process_watcher_posix_sigchld.cc b/ipc/chromium/src/chrome/common/process_watcher_posix_sigchld.cc
+index f01ee6e..19ebdfe 100644
+--- a/ipc/chromium/src/chrome/common/process_watcher_posix_sigchld.cc
++++ b/ipc/chromium/src/chrome/common/process_watcher_posix_sigchld.cc
+@@ -36,7 +36,7 @@
+ # error Unsupported OS
+ #endif
+
+-#if !defined(XP_DARWIN)
++#if !defined(XP_DARWIN) && !defined(XP_HAIKU)
+ // Linux, {Free,Net,Open}BSD, and Solaris; but not macOS, yet.
+ # define HAVE_PIPE2 1
+ #endif
+diff --git a/js/src/moz.build b/js/src/moz.build
+index 3a520d6..b8ddb64 100644
+--- a/js/src/moz.build
++++ b/js/src/moz.build
+@@ -518,6 +518,11 @@ elif CONFIG["OS_ARCH"] == "WASI":
+ "threading/noop/NoopThread.cpp",
+ ]
+ else:
++ if CONFIG["OS_ARCH"] == "Haiku":
++ DEFINES["_GNU_SOURCE"] = True
++ OS_LIBS += [
++ "gnu",
++ ]
+ UNIFIED_SOURCES += [
+ "threading/posix/CpuCount.cpp",
+ "threading/posix/PosixThread.cpp",
+diff --git a/js/src/util/NativeStack.cpp b/js/src/util/NativeStack.cpp
+index 4e4189d..37dc13a 100644
+--- a/js/src/util/NativeStack.cpp
++++ b/js/src/util/NativeStack.cpp
+@@ -31,6 +31,9 @@
+ # include
+ # define gettid() static_cast(syscall(__NR_gettid))
+ # endif
++# if defined(XP_HAIKU)
++# include
++# endif
+ #else
+ # error "Unsupported platform"
+ #endif
+@@ -117,6 +120,14 @@ void* js::GetNativeStackBaseImpl() {
+ # endif
+ }
+
++#elif defined(XP_HAIKU)
++
++void* js::GetNativeStackBaseImpl() {
++ thread_info info;
++ get_thread_info(find_thread(NULL), &info);
++ return info.stack_end;
++}
++
+ #elif defined(__wasi__)
+
+ // Since we rearrange the layout for wasi via --stack-first flag for the linker
+diff --git a/js/src/wasm/WasmSignalHandlers.cpp b/js/src/wasm/WasmSignalHandlers.cpp
+index 4115b3e..2a2dfa3 100644
+--- a/js/src/wasm/WasmSignalHandlers.cpp
++++ b/js/src/wasm/WasmSignalHandlers.cpp
+@@ -232,6 +232,17 @@ using namespace js::wasm;
+ # define R01_sig(p) ((p)->uc_mcontext.mc_gpr[1])
+ # define R32_sig(p) ((p)->uc_mcontext.mc_srr0)
+ # endif
++# elif defined(XP_HAIKU)
++# define EIP_sig(p) ((p)->uc_mcontext.eip)
++# define EBP_sig(p) ((p)->uc_mcontext.ebp)
++# define ESP_sig(p) ((p)->uc_mcontext.esp)
++# define RIP_sig(p) ((p)->uc_mcontext.rip)
++# define RSP_sig(p) ((p)->uc_mcontext.rsp)
++# define RBP_sig(p) ((p)->uc_mcontext.rbp)
++# define R11_sig(p) ((p)->uc_mcontext.r11)
++# define R13_sig(p) ((p)->uc_mcontext.r13)
++# define R14_sig(p) ((p)->uc_mcontext.r14)
++# define R15_sig(p) ((p)->uc_mcontext.r15)
+ # elif defined(XP_DARWIN)
+ # define EIP_sig(p) ((p)->thread.uts.ts32.__eip)
+ # define EBP_sig(p) ((p)->thread.uts.ts32.__ebp)
+diff --git a/media/ffvpx/config_unix64.h b/media/ffvpx/config_unix64.h
+index 7d63f47..2fe6932 100644
+--- a/media/ffvpx/config_unix64.h
++++ b/media/ffvpx/config_unix64.h
+@@ -291,7 +291,7 @@
+ #define HAVE_COMMANDLINETOARGVW 0
+ #define HAVE_FCNTL 1
+ #define HAVE_GETADDRINFO 1
+-#define HAVE_GETAUXVAL 1
++#define HAVE_GETAUXVAL 0
+ #define HAVE_GETENV 1
+ #define HAVE_GETHRTIME 0
+ #define HAVE_GETOPT 1
+diff --git a/media/libcubeb/src/cubeb.c b/media/libcubeb/src/cubeb.c
+index b0db033..efe0927 100644
+--- a/media/libcubeb/src/cubeb.c
++++ b/media/libcubeb/src/cubeb.c
+@@ -79,6 +79,10 @@ oss_init(cubeb ** context, char const * context_name);
+ int
+ aaudio_init(cubeb ** context, char const * context_name);
+ #endif
++#if defined(USE_HAIKU)
++int
++haiku_init(cubeb ** context, char const * context_name);
++#endif
+ #if defined(USE_AUDIOTRACK)
+ int
+ audiotrack_init(cubeb ** context, char const * context_name);
+@@ -199,6 +203,10 @@ cubeb_init(cubeb ** context, char const * context_name,
+ } else if (!strcmp(backend_name, "aaudio")) {
+ #if defined(USE_AAUDIO)
+ init_oneshot = aaudio_init;
++#endif
++ } else if (!strcmp(backend_name, "haiku")) {
++#if defined(USE_HAIKU)
++ init_oneshot = haiku_init;
+ #endif
+ } else if (!strcmp(backend_name, "audiotrack")) {
+ #if defined(USE_AUDIOTRACK)
+@@ -255,6 +263,9 @@ cubeb_init(cubeb ** context, char const * context_name,
+ #if defined(USE_AAUDIO)
+ aaudio_init,
+ #endif
++#if defined(USE_HAIKU)
++ haiku_init,
++#endif
+ #if defined(USE_OPENSL)
+ opensl_init,
+ #endif
+diff --git a/media/libcubeb/src/cubeb_haiku.cpp b/media/libcubeb/src/cubeb_haiku.cpp
+new file mode 100644
+index 0000000..700f826
+--- /dev/null
++++ b/media/libcubeb/src/cubeb_haiku.cpp
+@@ -0,0 +1,468 @@
++/*
++ * Copyright © 2024 Troeglazov Gerasim
++ *
++ * This program is made available under an ISC-style license. See the
++ * accompanying file LICENSE for details.
++ */
++
++#include "cubeb-internal.h"
++#include "cubeb/cubeb.h"
++#include "cubeb_utils.h"
++#include
++#include
++#include
++
++// Workaround for gcc_hidden.h hack of libxul.so
++#pragma GCC visibility push(default)
++#include
++#include
++#include
++#include
++#include
++#include
++#include
++#pragma GCC visibility pop
++
++static const int MAX_CHANNELS = 2;
++static const char DEFAULT_CONTEXT_NAME[] = "Cubeb";
++
++extern "C" {
++int haiku_init(cubeb ** context, char const * context_name);
++}
++static void haiku_destroy(cubeb* context);
++static char const* haiku_get_backend_id(cubeb* context);
++static int haiku_get_max_channel_count(cubeb* ctx, uint32_t* max_channels);
++static int haiku_get_min_latency(cubeb* ctx, cubeb_stream_params params, uint32_t* latency_frames);
++static int haiku_get_preferred_sample_rate(cubeb* ctx, uint32_t* rate);
++static int haiku_stream_init(cubeb* context,
++ cubeb_stream** stream,
++ char const* stream_name,
++ cubeb_devid input_device,
++ cubeb_stream_params* input_stream_params,
++ cubeb_devid output_device,
++ cubeb_stream_params* output_stream_params,
++ unsigned int latency_frames,
++ cubeb_data_callback data_callback,
++ cubeb_state_callback state_callback,
++ void* user_ptr);
++static void haiku_stream_destroy(cubeb_stream* stream);
++static int haiku_stream_start(cubeb_stream* stream);
++static int haiku_stream_stop(cubeb_stream* stream);
++static int haiku_stream_get_position(cubeb_stream* stream, uint64_t* position);
++static int haiku_stream_get_latency(cubeb_stream* stream, uint32_t* latency_frames);
++static int haiku_stream_set_volume(cubeb_stream* stream, float volume);
++static int haiku_stream_get_current_device(cubeb_stream* stream, cubeb_device** const device);
++static int haiku_stream_device_destroy(cubeb_stream* stream, cubeb_device* device);
++static int haiku_enumerate_devices(cubeb* context, cubeb_device_type type, cubeb_device_collection* collection);
++static int haiku_device_collection_destroy(cubeb* context, cubeb_device_collection* collection);
++
++static struct cubeb_ops const cubeb_haiku_ops = {
++ .init = haiku_init,
++ .get_backend_id = haiku_get_backend_id,
++ .get_max_channel_count = haiku_get_max_channel_count,
++ .get_min_latency = haiku_get_min_latency,
++ .get_preferred_sample_rate = haiku_get_preferred_sample_rate,
++ .get_supported_input_processing_params = NULL,
++ .enumerate_devices = haiku_enumerate_devices,
++ .device_collection_destroy = haiku_device_collection_destroy,
++ .destroy = haiku_destroy,
++ .stream_init = haiku_stream_init,
++ .stream_destroy = haiku_stream_destroy,
++ .stream_start = haiku_stream_start,
++ .stream_stop = haiku_stream_stop,
++ .stream_get_position = haiku_stream_get_position,
++ .stream_get_latency = haiku_stream_get_latency,
++ .stream_get_input_latency = NULL,
++ .stream_set_volume = haiku_stream_set_volume,
++ .stream_set_name = NULL,
++ .stream_get_current_device = haiku_stream_get_current_device,
++ .stream_set_input_mute = NULL,
++ .stream_set_input_processing_params = NULL,
++ .stream_device_destroy = haiku_stream_device_destroy,
++ .stream_register_device_changed_callback = NULL,
++ .register_device_collection_changed = NULL,
++};
++
++struct cubeb_stream {
++ /* Note: Must match cubeb_stream layout in cubeb.c. */
++ cubeb* context;
++ void* user_ptr;
++ /**/
++
++ pthread_mutex_t mutex;
++
++ cubeb_data_callback data_callback;
++ cubeb_state_callback state_callback;
++ cubeb_stream_params params;
++
++ uint64_t position;
++ bool pause;
++
++ float volume;
++
++ BSoundPlayer* sound_player;
++ media_raw_audio_format format;
++
++ char stream_name[256];
++};
++
++struct cubeb {
++ struct cubeb_ops const* ops;
++ pthread_mutex_t mutex;
++
++ bool active;
++ uint32_t sample_rate;
++ uint32_t latency;
++
++ char context_name[256];
++};
++
++static void
++haiku_audio_callback(void* cookie, void* buffer, size_t size, const media_raw_audio_format& format)
++{
++ cubeb_stream* stm = static_cast(cookie);
++
++ if (buffer == nullptr || cookie == nullptr)
++ return;
++
++ if (stm->pause) {
++ memset(buffer, 0, size);
++ return;
++ }
++
++ if (pthread_mutex_trylock(&stm->mutex) != 0) {
++ memset(buffer, 0, size);
++ return;
++ }
++
++ long frames = size / format.channel_count;
++ switch (format.format) {
++ case media_raw_audio_format::B_AUDIO_FLOAT:
++ frames /= sizeof(float);
++ break;
++ case media_raw_audio_format::B_AUDIO_SHORT:
++ frames /= sizeof(int16_t);
++ break;
++ }
++
++ long got = stm->data_callback(stm, stm->user_ptr, nullptr, buffer, frames);
++
++ if (got < 0) {
++ memset(buffer, 0, size);
++ pthread_mutex_unlock(&stm->mutex);
++ stm->state_callback(stm, stm->user_ptr, CUBEB_STATE_ERROR);
++ return;
++ }
++
++ stm->position += got;
++ pthread_mutex_unlock(&stm->mutex);
++}
++
++static media_raw_audio_format
++cubeb_format_to_haiku(cubeb_stream_params *params)
++{
++ media_raw_audio_format format;
++
++ format.frame_rate = params->rate;
++ format.channel_count = params->channels;
++ format.buffer_size = 2048;
++ format.byte_order = B_MEDIA_HOST_ENDIAN;
++
++ switch (params->format) {
++ case CUBEB_SAMPLE_FLOAT32NE:
++ format.format = media_raw_audio_format::B_AUDIO_FLOAT;
++ break;
++ case CUBEB_SAMPLE_S16NE:
++ format.format = media_raw_audio_format::B_AUDIO_SHORT;
++ break;
++ default:
++ format.format = media_raw_audio_format::B_AUDIO_FLOAT;
++ break;
++ }
++
++ return format;
++}
++
++int
++haiku_init(cubeb** context, char const* context_name)
++{
++ *context = NULL;
++
++ cubeb* ctx = (cubeb*)calloc(1, sizeof(*ctx));
++ if (!ctx) {
++ return CUBEB_ERROR;
++ }
++
++ ctx->ops = &cubeb_haiku_ops;
++ ctx->mutex = PTHREAD_MUTEX_INITIALIZER;
++
++ ctx->active = true;
++ ctx->sample_rate = 48000;
++ ctx->latency = 128;
++ if (context_name)
++ snprintf(ctx->context_name, 255, "%s", context_name);
++ else
++ snprintf(ctx->context_name, 255, "%s", DEFAULT_CONTEXT_NAME);
++
++ *context = ctx;
++ return CUBEB_OK;
++}
++
++static void
++haiku_destroy(cubeb* context)
++{
++ context->active = false;
++ free(context);
++}
++
++static char const*
++haiku_get_backend_id(cubeb* context)
++{
++ return "haiku";
++}
++
++static int
++haiku_get_max_channel_count(cubeb* ctx, uint32_t* max_channels)
++{
++ *max_channels = MAX_CHANNELS;
++ return CUBEB_OK;
++}
++
++static int
++haiku_get_min_latency(cubeb* ctx, cubeb_stream_params params, uint32_t* latency_frames)
++{
++ *latency_frames = 128;
++ return CUBEB_OK;
++}
++
++static int
++haiku_get_preferred_sample_rate(cubeb* ctx, uint32_t* rate)
++{
++ *rate = 48000;
++ return CUBEB_OK;
++}
++
++static int
++haiku_stream_init(cubeb* context,
++ cubeb_stream** stream,
++ char const* stream_name,
++ cubeb_devid input_device,
++ cubeb_stream_params* input_stream_params,
++ cubeb_devid output_device,
++ cubeb_stream_params* output_stream_params,
++ unsigned int latency_frames,
++ cubeb_data_callback data_callback,
++ cubeb_state_callback state_callback,
++ void* user_ptr)
++{
++ if (!output_stream_params) {
++ return CUBEB_ERROR_INVALID_PARAMETER;
++ }
++
++ *stream = NULL;
++
++ pthread_mutex_lock(&context->mutex);
++
++ cubeb_stream* stm = reinterpret_cast(calloc(1, sizeof(*stm)));
++
++ if (!stm) {
++ pthread_mutex_unlock(&context->mutex);
++ return CUBEB_ERROR;
++ }
++
++ stm->mutex = PTHREAD_MUTEX_INITIALIZER;
++ if (stream_name) {
++ if (strcmp(stream_name, "AudioStream") == 0) {
++ snprintf(stm->stream_name, 255, "%s", context->context_name);
++ } else {
++ snprintf(stm->stream_name, 255, "%s", stream_name);
++ }
++ } else {
++ snprintf(stm->stream_name, 255, "%s", context->context_name);
++ }
++
++ pthread_mutex_unlock(&context->mutex);
++
++ pthread_mutex_lock(&stm->mutex);
++
++ stm->context = context;
++ stm->user_ptr = user_ptr;
++ stm->params = *output_stream_params;
++ stm->data_callback = data_callback;
++ stm->state_callback = state_callback;
++ stm->position = 0;
++ stm->volume = 1.0f;
++ stm->format = cubeb_format_to_haiku(output_stream_params);
++ stm->sound_player = nullptr;
++
++ *stream = stm;
++ pthread_mutex_unlock(&stm->mutex);
++
++ return CUBEB_OK;
++}
++
++static void
++haiku_stream_destroy(cubeb_stream* stream)
++{
++ if (!stream)
++ return;
++
++ haiku_stream_stop(stream);
++}
++
++static int
++haiku_stream_start(cubeb_stream* stream)
++{
++ if (!stream->sound_player) {
++ stream->sound_player = new BSoundPlayer(&stream->format,
++ stream->stream_name,
++ haiku_audio_callback,
++ nullptr,
++ stream);
++
++ if (stream->sound_player->InitCheck() != B_OK)
++ return CUBEB_ERROR;
++
++ stream->pause = false;
++
++ haiku_stream_set_volume(stream, stream->volume);
++
++ stream->sound_player->Start();
++ stream->sound_player->SetHasData(true);
++ }
++
++ stream->state_callback(stream, stream->user_ptr, CUBEB_STATE_STARTED);
++
++ return CUBEB_OK;
++}
++
++static int
++haiku_stream_stop(cubeb_stream* stream)
++{
++ if (stream->sound_player) {
++ stream->pause = true;
++ stream->sound_player->SetHasData(false);
++ stream->sound_player->Stop();
++
++ delete stream->sound_player;
++ stream->sound_player = nullptr;
++ }
++
++ stream->state_callback(stream, stream->user_ptr, CUBEB_STATE_STOPPED);
++ return CUBEB_OK;
++}
++
++static int
++haiku_stream_get_position(cubeb_stream* stream, uint64_t* position)
++{
++ *position = stream->position;
++ return CUBEB_OK;
++}
++
++static int
++haiku_stream_get_latency(cubeb_stream* stream, uint32_t* latency_frames)
++{
++ if (!stream) {
++ return CUBEB_ERROR;
++ }
++
++ *latency_frames = stream->format.buffer_size /
++ (stream->format.channel_count *
++ (stream->format.format == media_raw_audio_format::B_AUDIO_FLOAT ?
++ sizeof(float) : sizeof(int16_t)));
++ return CUBEB_OK;
++}
++
++static int
++haiku_stream_set_volume(cubeb_stream* stream, float volume)
++{
++ if (!stream) {
++ return CUBEB_ERROR;
++ }
++
++ stream->volume = volume;
++
++ if (!stream->sound_player)
++ return CUBEB_ERROR;
++
++ stream->sound_player->SetVolume(volume);
++
++ return CUBEB_OK;
++}
++
++static int
++haiku_stream_get_current_device(cubeb_stream* stream, cubeb_device** const device)
++{
++ *device = (cubeb_device*)calloc(1, sizeof(cubeb_device));
++ if (!*device) {
++ return CUBEB_ERROR;
++ }
++
++ (*device)->output_name = strdup("Haiku Audio Output");
++ (*device)->input_name = strdup("");
++
++ return CUBEB_OK;
++}
++
++static int
++haiku_stream_device_destroy(cubeb_stream* stream, cubeb_device* device)
++{
++ if (device->input_name) {
++ free(device->input_name);
++ }
++ if (device->output_name) {
++ free(device->output_name);
++ }
++ free(device);
++ return CUBEB_OK;
++}
++
++static int
++haiku_enumerate_devices(cubeb* context, cubeb_device_type type,
++ cubeb_device_collection* collection)
++{
++ if (!context || type != CUBEB_DEVICE_TYPE_OUTPUT) {
++ return CUBEB_ERROR;
++ }
++
++ uint32_t rate;
++ haiku_get_preferred_sample_rate(context, &rate);
++
++ collection->count = 1;
++ collection->device = new cubeb_device_info[1];
++
++ cubeb_device_info* dev = &collection->device[0];
++ memset(dev, 0, sizeof(cubeb_device_info));
++
++ char const * a_name = "default";
++
++ dev->device_id = a_name;
++ dev->devid = (cubeb_devid)dev->device_id;
++ dev->friendly_name = a_name;
++ dev->group_id = a_name;
++ dev->vendor_name = a_name;
++ dev->type = CUBEB_DEVICE_TYPE_OUTPUT;
++ dev->state = CUBEB_DEVICE_STATE_ENABLED;
++ dev->preferred = CUBEB_DEVICE_PREF_ALL;
++ dev->format = CUBEB_DEVICE_FMT_F32NE;
++ dev->default_format = CUBEB_DEVICE_FMT_F32NE;
++ dev->max_channels = MAX_CHANNELS;
++ dev->min_rate = rate;
++ dev->max_rate = rate;
++ dev->default_rate = rate;
++ dev->latency_lo = 0;
++ dev->latency_hi = 0;
++
++ return CUBEB_OK;
++}
++
++static int
++haiku_device_collection_destroy(cubeb* context,
++ cubeb_device_collection* collection)
++{
++ delete[] collection->device;
++ collection->device = nullptr;
++ collection->count = 0;
++ return CUBEB_OK;
++}
++
+diff --git a/media/libcubeb/src/moz.build b/media/libcubeb/src/moz.build
+index fd6c684..880d871 100644
+--- a/media/libcubeb/src/moz.build
++++ b/media/libcubeb/src/moz.build
+@@ -30,6 +30,7 @@ if CONFIG['MOZ_SUNAUDIO']:
+
+ if (
+ CONFIG["MOZ_PULSEAUDIO"]
++ or CONFIG["MOZ_HAIKU"]
+ or CONFIG["MOZ_JACK"]
+ or CONFIG["MOZ_AAUDIO"]
+ or CONFIG["MOZ_OPENSL"]
+@@ -102,12 +103,22 @@ if CONFIG['MOZ_OPENSL']:
+ SOURCES += ['cubeb_opensl.cpp']
+ DEFINES['USE_OPENSL'] = True
+
++if CONFIG['MOZ_HAIKU']:
++ SOURCES += [
++ 'cubeb_haiku.cpp',
++ ]
++ DEFINES['USE_HAIKU'] = True
++ OS_LIBS += [
++ 'media',
++ ]
++
+ FINAL_LIBRARY = 'xul'
+
+ if CONFIG['MOZ_ALSA']:
+ CFLAGS += CONFIG['MOZ_ALSA_CFLAGS']
+
+ CFLAGS += CONFIG['MOZ_JACK_CFLAGS']
++CFLAGS += CONFIG['MOZ_HAIKU_CFLAGS']
+ CFLAGS += CONFIG['MOZ_PULSEAUDIO_CFLAGS']
+
+ # We allow warnings for third-party code that can be updated from upstream.
+diff --git a/mfbt/Assertions.h b/mfbt/Assertions.h
+index d05a301..627e2d2 100644
+--- a/mfbt/Assertions.h
++++ b/mfbt/Assertions.h
+@@ -227,7 +227,7 @@ MOZ_NoReturn(int aLine) {
+ MOZ_NoReturn(line); \
+ } while (false)
+
+-#elif __wasi__
++#elif __wasi__ || defined(__HAIKU__)
+
+ # define MOZ_REALLY_CRASH(line) __builtin_trap()
+
+diff --git a/modules/libpref/init/StaticPrefList.yaml b/modules/libpref/init/StaticPrefList.yaml
+index 65e2390..3d63d6f 100644
+--- a/modules/libpref/init/StaticPrefList.yaml
++++ b/modules/libpref/init/StaticPrefList.yaml
+@@ -10984,6 +10984,8 @@
+ value: true
+ #elif defined(XP_SOLARIS)
+ value: true
++#elif defined(XP_HAIKU)
++ value: true
+ #else
+ value: false
+ #endif
+@@ -11028,6 +11030,8 @@
+ value: true
+ #elif defined(XP_SOLARIS)
+ value: true
++#elif defined(XP_HAIKU)
++ value: true
+ #else
+ value: false
+ #endif
+@@ -11061,6 +11065,8 @@
+ value: true
+ #elif defined(XP_SOLARIS)
+ value: true
++#elif defined(XP_HAIKU)
++ value: true
+ #else
+ value: false
+ #endif
+@@ -11080,6 +11086,8 @@
+ value: true
+ #elif defined(XP_SOLARIS)
+ value: true
++#elif defined(XP_HAIKU)
++ value: true
+ #else
+ value: false
+ #endif
+@@ -11099,6 +11107,8 @@
+ value: true
+ #elif defined(XP_SOLARIS)
+ value: true
++#elif defined(XP_HAIKU)
++ value: true
+ #else
+ value: false
+ #endif
+@@ -11118,6 +11128,8 @@
+ value: true
+ #elif defined(XP_SOLARIS)
+ value: true
++#elif defined(XP_HAIKU)
++ value: true
+ #else
+ value: false
+ #endif
+@@ -11149,6 +11161,8 @@
+ value: true
+ #elif defined(XP_SOLARIS)
+ value: true
++#elif defined(XP_HAIKU)
++ value: true
+ #else
+ value: false
+ #endif
+@@ -12141,6 +12155,8 @@
+ type: bool
+ #if defined(MOZ_WIDGET_ANDROID)
+ value: true
++#elif defined(XP_HAIKU)
++ value: true
+ #else
+ value: false
+ #endif
+diff --git a/moz.configure b/moz.configure
+index beffb5a..2c9e48a 100755
+--- a/moz.configure
++++ b/moz.configure
+@@ -832,6 +832,8 @@ def strip_flags(flags, profiling, target):
+ # On Darwin, it tries to strip things it can't, so we need to limit its scope.
+ elif target.kernel == "Darwin":
+ return ["-x", "-S"]
++ elif target.kernel == "Haiku":
++ return ["--strip-debug"]
+
+
+ set_config("STRIP_FLAGS", strip_flags)
+diff --git a/mozglue/baseprofiler/core/ProfilerUtils.cpp b/mozglue/baseprofiler/core/ProfilerUtils.cpp
+index 517efcb..d896644 100644
+--- a/mozglue/baseprofiler/core/ProfilerUtils.cpp
++++ b/mozglue/baseprofiler/core/ProfilerUtils.cpp
+@@ -129,6 +129,19 @@ BaseProfilerThreadId profiler_current_thread_id() {
+
+ } // namespace mozilla::baseprofiler
+
++// ------------------------------------------------------- Haiku
++# elif defined(XP_HAIKU)
++
++# include
++
++namespace mozilla::baseprofiler {
++
++BaseProfilerThreadId profiler_current_thread_id() {
++ return BaseProfilerThreadId::FromNativeId(find_thread(NULL));
++}
++
++} // namespace mozilla::baseprofiler
++
+ // ------------------------------------------------------- Others
+ # else
+
+diff --git a/mozglue/baseprofiler/public/BaseProfilerUtils.h b/mozglue/baseprofiler/public/BaseProfilerUtils.h
+index ab02e03..6d55f37 100644
+--- a/mozglue/baseprofiler/public/BaseProfilerUtils.h
++++ b/mozglue/baseprofiler/public/BaseProfilerUtils.h
+@@ -66,6 +66,13 @@ namespace mozilla::baseprofiler::detail {
+ using ThreadIdType = long;
+ } // namespace mozilla::baseprofiler::detail
+
++// ------------------------------------------------------- Haiku
++# elif defined(XP_HAIKU)
++
++namespace mozilla::baseprofiler::detail {
++using ThreadIdType = int;
++} // namespace mozilla::baseprofiler::detail
++
+ // ------------------------------------------------------- Others
+ # else
+
+diff --git a/mozglue/misc/MutexPlatformData_posix.h b/mozglue/misc/MutexPlatformData_posix.h
+index d1659d8..b43e029 100644
+--- a/mozglue/misc/MutexPlatformData_posix.h
++++ b/mozglue/misc/MutexPlatformData_posix.h
+@@ -11,8 +11,19 @@
+
+ #include "mozilla/PlatformMutex.h"
+
++#ifdef __HAIKU__
++
++struct __attribute__((packed)) mozilla::detail::MutexImpl::PlatformData {
++ pthread_mutex_t ptMutex;
++ uint32_t padding;
++};
++
++#else
++
+ struct mozilla::detail::MutexImpl::PlatformData {
+ pthread_mutex_t ptMutex;
+ };
+
++#endif
++
+ #endif // MutexPlatformData_posix_h
+diff --git a/mozglue/misc/PlatformMutex.h b/mozglue/misc/PlatformMutex.h
+index ac5459c..d014d11 100644
+--- a/mozglue/misc/PlatformMutex.h
++++ b/mozglue/misc/PlatformMutex.h
+@@ -49,10 +49,17 @@ class MutexImpl {
+ PlatformData* platformData();
+
+ #if !defined(XP_WIN) && !defined(__wasi__)
++# ifdef __HAIKU__
++ void* platformData_[(sizeof(pthread_mutex_t) + sizeof(uint32_t)) / sizeof(void*)];
++ static_assert((sizeof(pthread_mutex_t) + sizeof(uint32_t)) / sizeof(void*) != 0 &&
++ (sizeof(pthread_mutex_t) + sizeof(uint32_t)) % sizeof(void*) == 0,
++ "pthread_mutex_t must have pointer alignment");
++# else
+ void* platformData_[sizeof(pthread_mutex_t) / sizeof(void*)];
+ static_assert(sizeof(pthread_mutex_t) / sizeof(void*) != 0 &&
+ sizeof(pthread_mutex_t) % sizeof(void*) == 0,
+ "pthread_mutex_t must have pointer alignment");
++#endif
+ #else
+ void* platformData_[6];
+ #endif
+diff --git a/mozglue/misc/TimeStamp_posix.cpp b/mozglue/misc/TimeStamp_posix.cpp
+index 6f87118..d26267d 100644
+--- a/mozglue/misc/TimeStamp_posix.cpp
++++ b/mozglue/misc/TimeStamp_posix.cpp
+@@ -13,7 +13,9 @@
+ // obtained with this API; see TimeDuration::Resolution;
+ //
+
+-#include
++#ifndef __HAIKU__
++# include
++#endif
+ #include
+ #include
+ #include
+diff --git a/netwerk/base/nsStandardURL.cpp b/netwerk/base/nsStandardURL.cpp
+index b1fc0db..a57eeae 100644
+--- a/netwerk/base/nsStandardURL.cpp
++++ b/netwerk/base/nsStandardURL.cpp
+@@ -320,7 +320,7 @@ struct DumpLeakedURLs {
+ };
+
+ DumpLeakedURLs::~DumpLeakedURLs() {
+- MOZ_ASSERT(NS_IsMainThread());
++// MOZ_ASSERT(NS_IsMainThread());
+ StaticMutexAutoLock lock(gAllURLsMutex);
+ if (!gAllURLs.isEmpty()) {
+ printf("Leaked URLs:\n");
+diff --git a/netwerk/dns/moz.build b/netwerk/dns/moz.build
+index b2456d2..127baf9 100644
+--- a/netwerk/dns/moz.build
++++ b/netwerk/dns/moz.build
+@@ -115,3 +115,7 @@ LOCAL_INCLUDES += [
+ ]
+
+ USE_LIBS += ["icu"]
++
++OS_LIBS += [
++ "network"
++]
+diff --git a/nsprpub/pr/src/misc/prsystem.c b/nsprpub/pr/src/misc/prsystem.c
+index f9fa0f6..7bb78a9 100644
+--- a/nsprpub/pr/src/misc/prsystem.c
++++ b/nsprpub/pr/src/misc/prsystem.c
+@@ -244,7 +244,7 @@ PR_IMPLEMENT(PRInt32) PR_GetNumberOfProcessors(void) {
+ PR_IMPLEMENT(PRUint64) PR_GetPhysicalMemorySize(void) {
+ PRUint64 bytes = 0;
+
+-#if defined(LINUX) || defined(SOLARIS)
++#if defined(LINUX) || defined(SOLARIS) || defined(__HAIKU__)
+
+ long pageSize = sysconf(_SC_PAGESIZE);
+ long pageCount = sysconf(_SC_PHYS_PAGES);
+diff --git a/python/mach/mach/site.py b/python/mach/mach/site.py
+index cfce1e2..ac90531 100644
+--- a/python/mach/mach/site.py
++++ b/python/mach/mach/site.py
+@@ -1471,6 +1471,14 @@ def _create_venv_with_pthfile(
+
+ _ensure_python_exe(Path(target_venv.python_path).parent)
+
++ if sys.platform.startswith("haiku"):
++ non_packaged = os.path.join(virtualenv_root, "non-packaged")
++ os.makedirs(non_packaged, exist_ok=True)
++ for dir in ("bin", "lib"):
++ src = os.path.join(virtualenv_root, dir)
++ dst = os.path.join(non_packaged, dir)
++ os.symlink(src, dst, target_is_directory=True)
++
+ platlib_site_packages_dir = target_venv.resolve_sysconfig_packages_path("platlib")
+ pthfile_contents = "\n".join(pthfile_lines)
+ with open(os.path.join(platlib_site_packages_dir, PTH_FILENAME), "w") as f:
+diff --git a/python/mozboot/mozboot/base.py b/python/mozboot/mozboot/base.py
+index 81f9b52..24b2c4f 100644
+--- a/python/mozboot/mozboot/base.py
++++ b/python/mozboot/mozboot/base.py
+@@ -573,6 +573,8 @@ class BaseBootstrapper(object):
+
+ if modern:
+ print("Your version of Rust (%s) is new enough." % version)
++ if sys.platform.startswith("haiku"):
++ return
+
+ elif version:
+ print("Your version of Rust (%s) is too old." % version)
+diff --git a/python/mozboot/mozboot/bootstrap.py b/python/mozboot/mozboot/bootstrap.py
+index 08377a7..15525ad 100644
+--- a/python/mozboot/mozboot/bootstrap.py
++++ b/python/mozboot/mozboot/bootstrap.py
+@@ -35,6 +35,7 @@ from mozboot.centosfedora import CentOSFedoraBootstrapper
+ from mozboot.debian import DebianBootstrapper
+ from mozboot.freebsd import FreeBSDBootstrapper
+ from mozboot.gentoo import GentooBootstrapper
++from mozboot.haiku import HaikuBootstrapper
+ from mozboot.mozconfig import MozconfigBuilder
+ from mozboot.mozillabuild import MozillaBuildBootstrapper
+ from mozboot.openbsd import OpenBSDBootstrapper
+@@ -331,6 +332,10 @@ class Bootstrapper(object):
+ args["version"] = platform.release()
+ args["flavor"] = platform.system()
+
++ elif sys.platform.startswith("haiku"):
++ cls = HaikuBootstrapper
++ args["version"] = platform.uname()[2]
++
+ elif sys.platform.startswith("win32") or sys.platform.startswith("msys"):
+ if "MOZILLABUILD" in os.environ:
+ cls = MozillaBuildBootstrapper
+diff --git a/python/mozboot/mozboot/haiku.py b/python/mozboot/mozboot/haiku.py
+new file mode 100644
+index 0000000..bf8f9fc
+--- /dev/null
++++ b/python/mozboot/mozboot/haiku.py
+@@ -0,0 +1,59 @@
++# This Source Code Form is subject to the terms of the Mozilla Public
++# License, v. 2.0. If a copy of the MPL was not distributed with this file,
++# You can obtain one at http://mozilla.org/MPL/2.0/.
++
++from mozboot.base import BaseBootstrapper
++
++
++class HaikuBootstrapper(BaseBootstrapper):
++ def __init__(self, version, **kwargs):
++ BaseBootstrapper.__init__(self, **kwargs)
++
++ self.packages = [
++ "make",
++ "pkgconfig",
++ "rust_bin",
++ ]
++
++ self.browser_packages = [
++ "dbus_devel",
++ "dbus_glib_devel",
++ "gtk3_devel",
++ "libevent_devel",
++ "libvpx_devel",
++ "nasm",
++ "nodejs20",
++ "nspr_devel",
++ ]
++
++ def pkgman_install(self, *packages):
++ command = ["pkgman", "install"]
++ if self.no_interactive:
++ command.append("-y")
++
++ command.extend(packages)
++ self.run_as_root(command)
++
++ def install_system_packages(self):
++ self.pkgman_install(*self.packages)
++
++ def install_browser_packages(self, mozconfig_builder, artifact_mode=False):
++ self.pkgman_install(*self.browser_packages)
++
++ def install_browser_artifact_mode_packages(self, mozconfig_builder):
++ self.install_browser_packages(mozconfig_builder, artifact_mode=True)
++
++ def ensure_clang_static_analysis_package(self):
++ # TODO: we don't ship clang base static analysis for this platform
++ pass
++
++ def ensure_stylo_packages(self):
++ # Clang / llvm already installed as browser package
++ self.pkgman_install("cbindgen")
++
++ def ensure_nasm_packages(self):
++ # installed via install_browser_packages
++ pass
++
++ def ensure_node_packages(self):
++ self.pkgman_install("npm")
+diff --git a/python/mozbuild/mozbuild/configure/constants.py b/python/mozbuild/mozbuild/configure/constants.py
+index 25f43bb..967aee7 100644
+--- a/python/mozbuild/mozbuild/configure/constants.py
++++ b/python/mozbuild/mozbuild/configure/constants.py
+@@ -36,6 +36,7 @@ class OS(EnumString):
+ "DragonFly",
+ "FreeBSD",
+ "GNU",
++ "Haiku",
+ "iOS",
+ "NetBSD",
+ "OpenBSD",
+@@ -51,6 +52,7 @@ class Kernel(EnumString):
+ "Darwin",
+ "DragonFly",
+ "FreeBSD",
++ "Haiku",
+ "kFreeBSD",
+ "Linux",
+ "NetBSD",
+@@ -142,6 +144,7 @@ kernel_preprocessor_checks = {
+ "Darwin": "__APPLE__",
+ "DragonFly": "__DragonFly__",
+ "FreeBSD": "__FreeBSD__",
++ "Haiku": "__HAIKU__",
+ "kFreeBSD": "__FreeBSD_kernel__",
+ "Linux": "__linux__",
+ "NetBSD": "__NetBSD__",
+diff --git a/security/certverifier/ExtendedValidation.cpp b/security/certverifier/ExtendedValidation.cpp
+index 8c1e0ac..382ac9c 100644
+--- a/security/certverifier/ExtendedValidation.cpp
++++ b/security/certverifier/ExtendedValidation.cpp
+@@ -1381,7 +1381,9 @@ nsresult LoadExtendedValidationInfo() {
+ // The entries for the debug EV roots are at indices 0 through
+ // NUM_TEST_EV_ROOTS - 1. Since they're not built-in, they probably
+ // haven't been loaded yet.
++# ifndef __HAIKU__
+ MOZ_ASSERT(i < NUM_TEST_EV_ROOTS, "Could not find built-in EV root");
++# endif
+ } else {
+ unsigned char certFingerprint[SHA256_LENGTH];
+ srv = PK11_HashBuf(SEC_OID_SHA256, certFingerprint, cert->derCert.data,
+diff --git a/security/certverifier/NSSCertDBTrustDomain.cpp b/security/certverifier/NSSCertDBTrustDomain.cpp
+index 7997cff..2bc7aa1 100644
+--- a/security/certverifier/NSSCertDBTrustDomain.cpp
++++ b/security/certverifier/NSSCertDBTrustDomain.cpp
+@@ -47,6 +47,7 @@
+ #include "nsThreadUtils.h"
+ #include "nss.h"
+ #include "pk11pub.h"
++#include "secmod.h"
+ #include "prerror.h"
+ #include "secder.h"
+ #include "secerr.h"
+@@ -1789,6 +1790,9 @@ bool LoadUserModuleAt(const char* moduleName, const char* libraryName,
+ return true;
+ }
+
++extern SECMODModule *SECMOD_LoadUserModuleWithFunction(const char *moduleName,
++ CK_C_GetFunctionList fentry);
++
+ bool LoadUserModuleFromXul(const char* moduleName,
+ CK_C_GetFunctionList fentry) {
+ // If a module exists with the same name, make a best effort attempt to delete
+diff --git a/security/manager/ssl/builtins/dynamic-library/moz.build b/security/manager/ssl/builtins/dynamic-library/moz.build
+index cf06de7..edc675d 100644
+--- a/security/manager/ssl/builtins/dynamic-library/moz.build
++++ b/security/manager/ssl/builtins/dynamic-library/moz.build
+@@ -20,6 +20,11 @@ else:
+ if CONFIG["OS_TARGET"] == "Android":
+ OS_LIBS += ["m"]
+
++if CONFIG["OS_ARCH"] == "Haiku":
++ OS_LIBS += [
++ "network",
++ ]
++
+ if CONFIG["OS_ARCH"] == "WINNT":
+ OS_LIBS += [
+ "advapi32",
+diff --git a/security/manager/ssl/ipcclientcerts/dynamic-library/moz.build b/security/manager/ssl/ipcclientcerts/dynamic-library/moz.build
+index 3db25ac..3d87cd4 100644
+--- a/security/manager/ssl/ipcclientcerts/dynamic-library/moz.build
++++ b/security/manager/ssl/ipcclientcerts/dynamic-library/moz.build
+@@ -24,6 +24,11 @@ OS_LIBS += CONFIG["DL_LIBS"]
+ if CONFIG["OS_TARGET"] == "Android":
+ OS_LIBS += ["m"]
+
++if CONFIG["OS_ARCH"] == "Haiku":
++ OS_LIBS += [
++ "network",
++ ]
++
+ if CONFIG["OS_ARCH"] == "WINNT":
+ OS_LIBS += [
+ "advapi32",
+diff --git a/supply-chain/audits.toml b/supply-chain/audits.toml
+index 5564fc9..3178af8 100644
+--- a/supply-chain/audits.toml
++++ b/supply-chain/audits.toml
+@@ -2405,6 +2405,12 @@ criteria = "safe-to-deploy"
+ delta = "6.0.1 -> 6.0.2"
+ notes = "I'm the author of the changes in this version of the crate."
+
++[[audits.glslopt]]
++who = "KENZ "
++criteria = "safe-to-deploy"
++delta = "0.1.10 -> 0.1.10@git:f9fb33cdab7d55ee0b06fbde64f61be74bd4ef2b"
++importable = false
++
+ [[audits.goblin]]
+ who = "Jan-Erik Rediger "
+ criteria = "safe-to-deploy"
+@@ -3034,6 +3040,12 @@ criteria = "safe-to-deploy"
+ version = "0.14.0"
+ notes = "Victor and Myk developed this crate at Mozilla."
+
++[[audits.lmdb-rkv-sys]]
++who = "KENZ "
++criteria = "safe-to-deploy"
++delta = "0.11.2 -> 0.11.2@git:9a481259e3b15932bd88bc90a8d7dc49e7ac9cd6"
++importable = false
++
+ [[audits.lock_api]]
+ who = "Mike Hommey "
+ criteria = "safe-to-deploy"
+diff --git a/supply-chain/config.toml b/supply-chain/config.toml
+index ebd5a8b..dfe3d95 100644
+--- a/supply-chain/config.toml
++++ b/supply-chain/config.toml
+@@ -68,6 +68,10 @@ notes = "Used for testing."
+ dependency-criteria = { tokio-reactor = [], tokio-threadpool = [] }
+ notes = "The dependencies on tokio-reactor and tokio-threadpools are just a hack to pin the version used by audioipc-{client,server}. Suppress vetting on those for the same reasons behind the policy entries."
+
++[policy.glslopt]
++audit-as-crates-io = true
++notes = "Patched version of upstream"
++
+ [policy.gluesmith]
+ criteria = "safe-to-run"
+ notes = "Used for fuzzing."
+@@ -95,6 +99,10 @@ notes = "This override is an api-compatible fork with an orthogonal implementati
+ [policy."libz-rs-sys:0.2.1@git:4aa430ccb77537d0d60dab8db993ca51bb1194c5"]
+ audit-as-crates-io = true
+
++[policy.lmdb-rkv-sys]
++audit-as-crates-io = true
++notes = "Patched version of upstream"
++
+ [policy.malloc_size_of_derive]
+ audit-as-crates-io = false
+ notes = "This was originally servo code which Bobby Holley put on crates.io some years ago and that was moved in-tree as first-party code later on."
+diff --git a/testing/mozbase/mozinfo/mozinfo/mozinfo.py b/testing/mozbase/mozinfo/mozinfo/mozinfo.py
+index 1943a2c..296fb25 100755
+--- a/testing/mozbase/mozinfo/mozinfo/mozinfo.py
++++ b/testing/mozbase/mozinfo/mozinfo/mozinfo.py
+@@ -103,7 +103,7 @@ elif system == "Linux":
+
+ info["os"] = "linux"
+ info["linux_distro"] = distribution
+-elif system in ["DragonFly", "FreeBSD", "NetBSD", "OpenBSD"]:
++elif system in ["DragonFly", "FreeBSD", "Haiku", "NetBSD", "OpenBSD"]:
+ info["os"] = "bsd" # community builds
+ version = os_version = sys.platform
+ elif system == "Darwin":
+diff --git a/third_party/dav1d/src/thread.h b/third_party/dav1d/src/thread.h
+index 459aace..b2989da 100644
+--- a/third_party/dav1d/src/thread.h
++++ b/third_party/dav1d/src/thread.h
+@@ -177,14 +177,14 @@ static inline void dav1d_set_thread_name(const char *const name) {
+ pthread_set_name_np(pthread_self(), name);
+ }
+
+-#elif defined(__HAIKU__)
+-
+-#include
+-
+-static inline void dav1d_set_thread_name(const char *const name) {
+- rename_thread(find_thread(NULL), name);
+-}
+-
++//#elif defined(__HAIKU__)
++//
++//#include
++//
++//static inline void dav1d_set_thread_name(const char *const name) {
++// rename_thread(find_thread(NULL), name);
++//}
++//
+ #else
+
+ #define dav1d_set_thread_name(name) do {} while (0)
+diff --git a/third_party/rust/glslopt/.cargo-checksum.json b/third_party/rust/glslopt/.cargo-checksum.json
+index ddd05da..d75a57c 100644
+--- a/third_party/rust/glslopt/.cargo-checksum.json
++++ b/third_party/rust/glslopt/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.toml":"010bb96167ff152e0e5ac30f9905dc749a3f038199b70c541c5d8cb97a185ee3","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"6a64610018701781af182c418a4355c9ac5d99d000be9457f0e38a7dadf7542a","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"878a97db5d3b69eb3b4c3a95780763b373cfcc0c02e0b28894f162dbbd1b8848","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"f8ad2b69fa472e332b50572c1b2dcc1c8a0fa783a1199aad245398d3df421b4b","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"74f4fbd490e366b37f4715168bb3465ecd9334d4130942f75dcc8e80e8e7f027","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"d0f798eb09271d41d068b9e7b18220d37f1ed0083300ab51eba30989698fe23d","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"454189d643c220fcb49116ee5c8a34f7b349aa67564040deb8607f6a41a15e70","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"2d179879b1ffe84f58875eee5b0c19b6bae9c973b0c48e6bcd99978f2f501c80","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"e4c5744c837200dafd7c15a912d13f650308ea552454d4fa67271bc0a5bde118","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"2b4741cce90b5d4abff5d719c7324e2693c67294d4d99736cb241554adb281bc","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"8c6df5abf2fe313363f285f171c19ca6c8ee4f3bc2ed79d33c0c88cc8be45c48","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"7b86c96021b9fbe165957f4ecb0b612fefcde1c2cf3c6d75e3cdb22e369216ba","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"9ad3346416392e3efa11e12ecf2feca7453c5253d241eb96c91dfb85d4f2b971","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"f8e34a983452be0dcb5a695e9c8e895eead24f9e540992a8afe510ae85da4c4c","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"643f5a68aae3fb37267fd793f1216d1cfdeb2c09338c26b1f30e4c6deaef4de5","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"40b1ecd5d4f6c7f13d5a87ce390561a51fdf6f3fcd9b2197b9c88b03a773ba94","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"57ecd573477c68091c7cc99537faa7139a8f395935e3d4f10144cefdefb5a611","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"8cfbef140d9c4b4d2f57bfa05c9c374d31a121d0f87afce94333f049023b654a","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"1ae221c3c7a95aeb867207e7a742be635f91b406c157747bfd6ddf10274d97fb","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"a118c85493d5d22b2c059a930c51a5854896d4b1dade76598eaa985e5a3dff8c","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"89bdbc6c1669230c644c0857db1ce2781ec61d349ecd08c7914146e1f4750a4a","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"25f45b20e1972ee8c789177a1aeda6e4286c25db2eae3a43ff83029ae64969c0","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"8abd59d3b14ef60ff14a9c69660e6945f5cf10b97edb4afebe56be3f81d96316","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"d80ee43bb97d9f016fb9c5e1e06f5b2afa569811f368ba067be794ec11d085fb","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"044bb6754f45419a3151e7a25c39202a82009ae3c6bc54ff7f0bb4258a5deefe","glsl-optimizer/src/compiler/glsl_types.h":"fd899a42f34ddeb8601bc3cd6c5e3aed82fc8aef4042dde1b39b3c01e1dcc219","glsl-optimizer/src/compiler/shader_enums.c":"436bff5216b11b0980bdfada5885fc6ac9afa2037a3027fcd6eea2a8635597ac","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"9f0dfe96d0c2154201adef942bd36053533ac7b2492fb3786acda5bea514c75e","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"63faf65b51058c483b17f1f77da51d1c53c8beab52678cb6bd01f1228a63b6b0","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"3ccea7e529740318d8a4b05c00db3adc9d1e292a52bdc56a05c9fae99209720f","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"a04e32e126db016413f9de0a2028a3e71737137463b1289eae576f884b06fcf1","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"79993db2058bde39f99ef483d02560d33b1cb882f6a552319e8b86eb6f9021e1","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":"913662ae8335df058d56e00f11340b20fa82e03e0276587797ef325ab01e50d4"}
+\ No newline at end of file
++{"files":{"Cargo.toml":"a2a6007c5edb279f43ebe8546495c424516581dca036f5fd7bf99439b7d3227e","README.md":"4468e08c64c19977707d792bfab0080e35ff927b64990eab77873f8ba056ba1c","build.rs":"6a64610018701781af182c418a4355c9ac5d99d000be9457f0e38a7dadf7542a","glsl-optimizer/CMakeLists.txt":"42ce94744e82ffa000da8b64d81fc140e293b9f5da7dd4cf6b49e7404a2448d9","glsl-optimizer/README.md":"b18eef11a92d267d88a937b1154f7670ee433c730b102fdf7e2da0b02722b146","glsl-optimizer/contrib/glslopt/Main.cpp":"14ba213210c62e234b8d9b0052105fed28eedd83d535ebe85acc10bda7322dd4","glsl-optimizer/contrib/glslopt/Readme":"65d2a6f1aa1dc61e903e090cdade027abad33e02e7c9c81e07dc80508acadec4","glsl-optimizer/generateParsers.sh":"878a97db5d3b69eb3b4c3a95780763b373cfcc0c02e0b28894f162dbbd1b8848","glsl-optimizer/include/GL/gl.h":"1989b51365b6d7d0c48ff6e8b181ef75e2cdf71bfb1626b1cc4362e2f54854a3","glsl-optimizer/include/GL/glext.h":"2ac3681045a35a2194a81a960cad395c04bef1c8a20ef46b799fb24af3ec5f70","glsl-optimizer/include/KHR/khrplatform.h":"1448141a0c054d7f46edfb63f4fe6c203acf9591974049481c32442fb03fd6ed","glsl-optimizer/include/c11/threads.h":"56e9e592b28df19f0db432125223cb3eb5c0c1f960c22db96a15692e14776337","glsl-optimizer/include/c11/threads_posix.h":"f8ad2b69fa472e332b50572c1b2dcc1c8a0fa783a1199aad245398d3df421b4b","glsl-optimizer/include/c11/threads_win32.h":"95bf19d7fc14d328a016889afd583e4c49c050a93bcfb114bd2e9130a4532488","glsl-optimizer/include/c11_compat.h":"103fedb48f658d36cb416c9c9e5ea4d70dff181aab551fcb1028107d098ffa3e","glsl-optimizer/include/c99_compat.h":"aafad02f1ea90a7857636913ea21617a0fcd6197256dcfc6dd97bb3410ba892e","glsl-optimizer/include/no_extern_c.h":"40069dbb6dd2843658d442f926e609c7799b9c296046a90b62b570774fd618f5","glsl-optimizer/license.txt":"e26a745226f4a46b3ca00ffbe8be18507362189a2863d04b4f563ba176a9a836","glsl-optimizer/src/compiler/builtin_type_macros.h":"5b4fc4d4da7b07f997b6eb569e37db79fa0735286575ef1fab08d419e76776ff","glsl-optimizer/src/compiler/glsl/README":"e7d408b621c1b605857c4cab63902f615edb06b530142b91ac040808df6e22f7","glsl-optimizer/src/compiler/glsl/TODO":"dd3b7a098e6f9c85ca8c99ce6dea49d65bb75d4cea243b917f29e4ad2c974603","glsl-optimizer/src/compiler/glsl/ast.h":"3e68ff374350c49211a9931f7f55a485d8d89fc4b21caaffbf6655009ad95bf8","glsl-optimizer/src/compiler/glsl/ast_array_index.cpp":"92b4d501f33e0544c00d14e4f8837753afd916c2b42e076ccc95c9e8fc37ba94","glsl-optimizer/src/compiler/glsl/ast_expr.cpp":"afd712a7b1beb2b633888f4a0911b0a8e4ae5eb5ab9c1e3f247d518cdaaa56d6","glsl-optimizer/src/compiler/glsl/ast_function.cpp":"74f4fbd490e366b37f4715168bb3465ecd9334d4130942f75dcc8e80e8e7f027","glsl-optimizer/src/compiler/glsl/ast_to_hir.cpp":"d0f798eb09271d41d068b9e7b18220d37f1ed0083300ab51eba30989698fe23d","glsl-optimizer/src/compiler/glsl/ast_type.cpp":"8eb790b24b26dfb72bdc333744b566c26d8464c5d47d20eae659461f5c4899f7","glsl-optimizer/src/compiler/glsl/builtin_functions.cpp":"4a76d998a4f1952085c3377a30c7944dbfc0422b5418a6a13e3280a497bc5f2f","glsl-optimizer/src/compiler/glsl/builtin_functions.h":"a37cad7ed09b522c5b8bec7b80115a36846e7ba6e0874a2a858e32f7f202c665","glsl-optimizer/src/compiler/glsl/builtin_int64.h":"619def6f3aebf180da3944ef08f159ab12a58b24767e41d8b985ac37ded54d62","glsl-optimizer/src/compiler/glsl/builtin_types.cpp":"afec060b62d6f3b00bfbf94e9fa5f96341ce096c128d1eef322791e6ed9cea4d","glsl-optimizer/src/compiler/glsl/builtin_variables.cpp":"6563bfb1345cbca4c77e00eef09ad152f3e1dc271d246a08c5ce9e1f4ce4250a","glsl-optimizer/src/compiler/glsl/float64.glsl":"1072fd888be48c2a7a5117cd2d92a65f034965a66375f598bb856bff5d7be766","glsl-optimizer/src/compiler/glsl/generate_ir.cpp":"e5f0175370a0d07f93c48d3f0f1b8233d12c64a7b02de02dcc753ef7b398ef0f","glsl-optimizer/src/compiler/glsl/glcpp/README":"a0332a1b221d047e9cce5181a64d4ac4056046fd878360ec8ae3a7b1e062bcff","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.c":"2d179879b1ffe84f58875eee5b0c19b6bae9c973b0c48e6bcd99978f2f501c80","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-lex.l":"e4c5744c837200dafd7c15a912d13f650308ea552454d4fa67271bc0a5bde118","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.c":"03494f9ce1cb82260506e2559e73a3eeb622c4bd51b65eaa0a2c3351862bd4c8","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.h":"264d9a18421cde255ce34a0a62b3d8e73465359f0d167e64aa3973062aae5bdd","glsl-optimizer/src/compiler/glsl/glcpp/glcpp-parse.y":"fafb66e3a8f149d19e085f18a4273ba6d4c11af9e9a01d665cc784dddf97b79f","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.c":"37ed294403c2abfd17fd999d1ae8d11b170e5e9c878979fefac74a31195c96b0","glsl-optimizer/src/compiler/glsl/glcpp/glcpp.h":"85ac8b444bcbd0822b66448a1da407b6ae5467b649f5afaf5c58325bd7569468","glsl-optimizer/src/compiler/glsl/glcpp/pp.c":"a52d94f1bcb3fb2747a95709c4a77c25de7eea8354d2b83bb18efd96976a4473","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.c":"d11aeb3acfe966d1b78f1ee49804093f2434214c41391d139ffcb67b69dc9862","glsl-optimizer/src/compiler/glsl/glcpp/pp_standalone_scaffolding.h":"abbf1f36ec5a92d035bfbb841b9452287d147616e56373cdbee1c0e55af46406","glsl-optimizer/src/compiler/glsl/glsl_lexer.cpp":"272b9fc1383d72b81bfc03fa11fdf82270ed91a294e523f9ce2b4554bd3effa9","glsl-optimizer/src/compiler/glsl/glsl_lexer.ll":"2b57d9f9eb830c3d7961d4533048a158ee6f458c8d05c65bea7b7cfbc36e4458","glsl-optimizer/src/compiler/glsl/glsl_optimizer.cpp":"f8095d20629d0af70be930b0612e169edb274551a1d25a3cd1bf9995a11ce2e8","glsl-optimizer/src/compiler/glsl/glsl_optimizer.h":"22e843b4ec53ba5f6cd85ca5f7bad33922dca8061b19fb512d46f1caca8d4757","glsl-optimizer/src/compiler/glsl/glsl_parser.cpp":"126baf368d525aba301854e3d91ba60b5aee32e1102376af71416f32cb95ec48","glsl-optimizer/src/compiler/glsl/glsl_parser.h":"2ea9a50716098a8f7bef782d2a030d757b68da73afb01b4d4940d3e8381d44e8","glsl-optimizer/src/compiler/glsl/glsl_parser.yy":"6b1fd1576b29fce005dff744a6dbd0219e4c695c361d61864e1f3a8d6fa6b764","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.cpp":"aad64b5b66467da650091430681e8c6a820cf3cadc4db3c160bf2f15875390ae","glsl-optimizer/src/compiler/glsl/glsl_parser_extras.h":"71fd0e92bbdb193dfb067d7bfdb1200d77392be2fbd0cbfc9ca89d1bb4c7e741","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.cpp":"6660fb83c0ddddbbd64581d46ccfdb9c84bfaa99d13348c289e6442ab00df046","glsl-optimizer/src/compiler/glsl/glsl_symbol_table.h":"24682b8304e0ea3f6318ddb8c859686bd1faee23cd0511d1760977ae975d41bf","glsl-optimizer/src/compiler/glsl/hir_field_selection.cpp":"72a039b0fcab4161788def9e4bedac7ac06a20d8e13146529c6d246bd5202afd","glsl-optimizer/src/compiler/glsl/int64.glsl":"303dbe95dde44b91aee3e38b115b92028400d6a92f9268975d607471984e13eb","glsl-optimizer/src/compiler/glsl/ir.cpp":"2b4741cce90b5d4abff5d719c7324e2693c67294d4d99736cb241554adb281bc","glsl-optimizer/src/compiler/glsl/ir.h":"990b1c74447c4eb4835353ccb0ed9aea644f97fc1129ef1739cd935075d85d2e","glsl-optimizer/src/compiler/glsl/ir_array_refcount.cpp":"8cdc1cffe01e42e0566fa2193a75f789628e8025ad1b82f0ee6f204451b7f9f7","glsl-optimizer/src/compiler/glsl/ir_array_refcount.h":"75f06ec81342b379096ca52e1dc0fd5f19a11ff8e9b58203c20628179d644c12","glsl-optimizer/src/compiler/glsl/ir_basic_block.cpp":"1e2920b1c0ecb08424c745c558f84d0d7e44b74585cf2cc2265dc4dfede3fa2f","glsl-optimizer/src/compiler/glsl/ir_basic_block.h":"81be7da0fc0ee547cd13ec60c1fcd7d3ce3d70d7e5e988f01a3b43a827acdf05","glsl-optimizer/src/compiler/glsl/ir_builder.cpp":"daba29c5a1efdd5a9754f420eb3e2ebdf73485273497f40d4863dadeddb23c0d","glsl-optimizer/src/compiler/glsl/ir_builder.h":"2822e74dd3f6e3df8b300af27d5b11ea2dd99d0e5e7ca809b7bbcce9833c483c","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.cpp":"8c6df5abf2fe313363f285f171c19ca6c8ee4f3bc2ed79d33c0c88cc8be45c48","glsl-optimizer/src/compiler/glsl/ir_builder_print_visitor.h":"799852adc3a0e54d04080655e7cebfa0d3bf5b6ffed5d8414f141380665d4db7","glsl-optimizer/src/compiler/glsl/ir_clone.cpp":"d897a4e1f5bbec4a6a2f15044c1be9a4d13899c73be77335b041049a4589aa5d","glsl-optimizer/src/compiler/glsl/ir_constant_expression.cpp":"78bd87ddb09db67f6c499067728d72aef4f16aa02721a99a4b769d1e0cfa9010","glsl-optimizer/src/compiler/glsl/ir_equals.cpp":"bca28533a6310b0fc152b56d80872368f1510dc62ed6e8ac199b9ffa7fac02e7","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.cpp":"7e918d4e1f237eca01396004015865ce345afe32a876c9dbc6728576a1a7eae4","glsl-optimizer/src/compiler/glsl/ir_expression_flattening.h":"f45b66aa9497520e7e08e612d24b308477c34477fbd963ee9320eac664957f16","glsl-optimizer/src/compiler/glsl/ir_expression_operation.h":"cc9f10727dbd26cac506804f51456302c702650f9eeb59054a7e1575d5cf6687","glsl-optimizer/src/compiler/glsl/ir_expression_operation.py":"7b86c96021b9fbe165957f4ecb0b612fefcde1c2cf3c6d75e3cdb22e369216ba","glsl-optimizer/src/compiler/glsl/ir_expression_operation_constant.h":"9ad3346416392e3efa11e12ecf2feca7453c5253d241eb96c91dfb85d4f2b971","glsl-optimizer/src/compiler/glsl/ir_expression_operation_strings.h":"a6826daf496a8b9e89885bc2a161ac3445d501b23c6e0ac33e2c01b506b273c8","glsl-optimizer/src/compiler/glsl/ir_function.cpp":"7537365fc0fbe4b37a26b9a2146cc64d3e9a774d60eab63b65002ad165ae8fc7","glsl-optimizer/src/compiler/glsl/ir_function_can_inline.cpp":"faddbf112187a048d502716a3fb82570a322299ba2a3abd79388382c82040bfc","glsl-optimizer/src/compiler/glsl/ir_function_detect_recursion.cpp":"9176973eaf5c0a984701f953bb7a80f37dca43d59b5bce50fc69b3f02f2902d7","glsl-optimizer/src/compiler/glsl/ir_function_inlining.h":"9739493f99c489987d650762fccdd3fb3d432f6481d67f6c799176685bd59632","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.cpp":"3725861fbe2b98e0617f52d3b14cf6d3b25fb5ec00f5ef5d308b03642f592767","glsl-optimizer/src/compiler/glsl/ir_hierarchical_visitor.h":"e0560210e966c0c31e4ca843e80ea154e64db5a444b8c2df845b6ba5b3a43fc1","glsl-optimizer/src/compiler/glsl/ir_hv_accept.cpp":"caf7ce2cd9494aadd3c58bcf77f29de58368dc9e347a362bbf37f8bda9509b80","glsl-optimizer/src/compiler/glsl/ir_optimization.h":"8b3dcfc7f9e96b21a8dd47a0040d90be483a9e67a2cdce3a697188fb758d4630","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.cpp":"f8e34a983452be0dcb5a695e9c8e895eead24f9e540992a8afe510ae85da4c4c","glsl-optimizer/src/compiler/glsl/ir_print_glsl_visitor.h":"1ad1bd3efd1ace39051c13f904c05fd80425d329444f9a8d47fd6d948faf46e0","glsl-optimizer/src/compiler/glsl/ir_print_visitor.cpp":"643f5a68aae3fb37267fd793f1216d1cfdeb2c09338c26b1f30e4c6deaef4de5","glsl-optimizer/src/compiler/glsl/ir_print_visitor.h":"4573eb93268a2654c14b505253dd651e2695d43dc745904d824da18305269b95","glsl-optimizer/src/compiler/glsl/ir_reader.cpp":"06bfba802c8354e5a8b2334b6d78d6297de18235bedd3f8fbb382c89870b02f2","glsl-optimizer/src/compiler/glsl/ir_reader.h":"63e3f7f1597936a7011d5b520e171b197bf82bee6c1560d822c3edf5aaa6f9e9","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.cpp":"84b5c5d746555adca85759c2912fe48010232b7c1c0bd2cf03bd04067a85e66f","glsl-optimizer/src/compiler/glsl/ir_rvalue_visitor.h":"fd8c561b71085d3211fff85ed514fecb299d8ce19a04bc063419a55b6d840525","glsl-optimizer/src/compiler/glsl/ir_set_program_inouts.cpp":"ab9f115ce9e7f312d9c7978340ced0dc4ae6d13a80e08442ba9709d11d50cae5","glsl-optimizer/src/compiler/glsl/ir_uniform.h":"683ae6896b1a08470c090be5f822fc31cd434eab9216e954b9bba24a46975109","glsl-optimizer/src/compiler/glsl/ir_unused_structs.cpp":"9c1620c45f2fc071fe5ed828472040b14c5f42effe06aa0e3b8352c95ef78786","glsl-optimizer/src/compiler/glsl/ir_unused_structs.h":"13387b49c23093575276b25b9dfd31fedd8f131c5c4f3128ab04cf03e15b5295","glsl-optimizer/src/compiler/glsl/ir_validate.cpp":"6b232be5999a86ea278f4f15b2832d76843246509118d924243055a3b9b0299f","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.cpp":"2764a3cad937d53f36db7447c3a5b98b04bf153acf81074d971857fc5bca460d","glsl-optimizer/src/compiler/glsl/ir_variable_refcount.h":"b0668e3eb1501ef65e38fe12830742ecb3d28e6039f30e366c8924efc29b4a39","glsl-optimizer/src/compiler/glsl/ir_visitor.h":"f21b3534c3d66d5fb707d1581fece7e1eb043523afbaedf89918cfb031c6df94","glsl-optimizer/src/compiler/glsl/link_atomics.cpp":"360f0209e11f367ba358223597b0a118bae095bff16337cf03f1fb89c5b80ca6","glsl-optimizer/src/compiler/glsl/link_functions.cpp":"de7895da8aa33a1e3c2c1eb2fdaf267ab5d1fbfdb79ae2e67f95211e946e294c","glsl-optimizer/src/compiler/glsl/link_interface_blocks.cpp":"1926cfa73810704eb19b916c1b2cdb9321155e2f98b2a0a57c7c3c6e960540cd","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.cpp":"1e14e06ca3b2c1089cfba2e8eaf0c1f373d9d6374b6082f320962dd71ae09611","glsl-optimizer/src/compiler/glsl/link_uniform_block_active_visitor.h":"fd58c155af645295bb6aec08797889de586f4d919731de2bce57e8dce59bb048","glsl-optimizer/src/compiler/glsl/link_uniform_blocks.cpp":"09589f49776dce32e6c4044937de7e0c839a9754ad31960148f8f9e010658997","glsl-optimizer/src/compiler/glsl/link_uniform_initializers.cpp":"bf98e08c12db466acf9623cbeb8fa8e3b4002512722e7a6521287f558a099f37","glsl-optimizer/src/compiler/glsl/link_uniforms.cpp":"84bad5b1377362cecf259b05124239be5220b03ce1c0c61b59bd9a47e4379af2","glsl-optimizer/src/compiler/glsl/link_varyings.cpp":"a5f1a53e7c80d635515fe808ff223d89fef1767abb0f2b7aa28fa6773dca353f","glsl-optimizer/src/compiler/glsl/link_varyings.h":"b9dbe018f038df69763df2e928742ce81bbc6e3aaba26f50621e30a6d9aa6220","glsl-optimizer/src/compiler/glsl/linker.cpp":"40b1ecd5d4f6c7f13d5a87ce390561a51fdf6f3fcd9b2197b9c88b03a773ba94","glsl-optimizer/src/compiler/glsl/linker.h":"ecf94b4ad75ef461c27c557fda4bd25f34c91930822b8e1d729ec84520d4a049","glsl-optimizer/src/compiler/glsl/linker_util.cpp":"1663ad88e2a369305659aeeffaedb5bd752cf76340a2ba5797fc0bf600633cf9","glsl-optimizer/src/compiler/glsl/linker_util.h":"6db788daf9c8e87ae2764b61a8b37ebe419e69c1b82ddee01986e37c978c6993","glsl-optimizer/src/compiler/glsl/list.h":"b1f46ce0e552fe7c45b2a19408a9d97662e23e4b182ab335491c26f8cf25886f","glsl-optimizer/src/compiler/glsl/loop_analysis.cpp":"57ecd573477c68091c7cc99537faa7139a8f395935e3d4f10144cefdefb5a611","glsl-optimizer/src/compiler/glsl/loop_analysis.h":"a85f045a038ee5b5176063e85d7988865862c44ab0580f771b993a042d0b69cc","glsl-optimizer/src/compiler/glsl/loop_unroll.cpp":"bd4292ea2809f5a669bcb76ceaa1ac365772dcd638c579c3ed10275214901a54","glsl-optimizer/src/compiler/glsl/lower_blend_equation_advanced.cpp":"8cfbef140d9c4b4d2f57bfa05c9c374d31a121d0f87afce94333f049023b654a","glsl-optimizer/src/compiler/glsl/lower_buffer_access.cpp":"1ae221c3c7a95aeb867207e7a742be635f91b406c157747bfd6ddf10274d97fb","glsl-optimizer/src/compiler/glsl/lower_buffer_access.h":"807886953a576a323591798cbca5e2df24295ea893b28affd8ffb5926cebaa04","glsl-optimizer/src/compiler/glsl/lower_builtins.cpp":"4d81afc32cf58e1481fcb5e42888ab93dbe6820310a20ff7a9982b77b2152d9b","glsl-optimizer/src/compiler/glsl/lower_const_arrays_to_uniforms.cpp":"608403f0eeeedf21cfcd3014116e0f44e28cbdf6c4c32aac7e613e64e30205e1","glsl-optimizer/src/compiler/glsl/lower_cs_derived.cpp":"179905cd47a294122adeb5b0abfed6f2f67782dcde21b544d1ee2c1985154e66","glsl-optimizer/src/compiler/glsl/lower_discard.cpp":"3b361b2db0004d544d64611cb50d5a6e364cf6c5f2e60c449085d7d753dd7fb0","glsl-optimizer/src/compiler/glsl/lower_discard_flow.cpp":"f5c29b6a27690bb5c91f196d1a1cf9f6be4f1025292311fe2dac561ce6774dee","glsl-optimizer/src/compiler/glsl/lower_distance.cpp":"a118c85493d5d22b2c059a930c51a5854896d4b1dade76598eaa985e5a3dff8c","glsl-optimizer/src/compiler/glsl/lower_if_to_cond_assign.cpp":"469e617757fd1728709cce021aac5c8da05ee503bf5366977bdc4ef7a6d83950","glsl-optimizer/src/compiler/glsl/lower_instructions.cpp":"6ff5c396abe40d8a2145d571e99e2bbe9143393e15aafc28adc2803a01d821b6","glsl-optimizer/src/compiler/glsl/lower_int64.cpp":"d1ed41196880dd53c7b13e2782f9423f8442bf1d46186e8be92b1b66218a83ee","glsl-optimizer/src/compiler/glsl/lower_jumps.cpp":"34de7b493f281589fb0c2c0f6e885d0a0fabbe7a4e97a73de374dd714777a58c","glsl-optimizer/src/compiler/glsl/lower_mat_op_to_vec.cpp":"dff7a308edc4846c348ed4225c6699a9c75abac68d88f41f85954276552779f4","glsl-optimizer/src/compiler/glsl/lower_named_interface_blocks.cpp":"16063ac127bff75a68272070ab11c21c25101edbff62b4c68f4983b4cd941af0","glsl-optimizer/src/compiler/glsl/lower_offset_array.cpp":"3b00773399135aea85746a5a68b96ef000bc6841be1a2c8e6f25c516628b0949","glsl-optimizer/src/compiler/glsl/lower_output_reads.cpp":"a0fc9975d5aa1617e21fc6c353659a9802da9e83779a3eef4ec584f74b4dadc5","glsl-optimizer/src/compiler/glsl/lower_packed_varyings.cpp":"7550099d4ae123d71541c2fc88bc04fbfe9271ec75d7e210987d1c8cac3cf3ea","glsl-optimizer/src/compiler/glsl/lower_packing_builtins.cpp":"79a13d161fe505a410ab948d92769395708693ec888153630fa240e5b97e356f","glsl-optimizer/src/compiler/glsl/lower_precision.cpp":"f82a185b879872b977a1787d8061b9a80bc4cf8db1b970db6efba2ad9cc20fa2","glsl-optimizer/src/compiler/glsl/lower_shared_reference.cpp":"ea2dccf50a83bc19391bf6b7ab6aa53c0005f427af4066d25140340af9a4beef","glsl-optimizer/src/compiler/glsl/lower_subroutine.cpp":"f69fa53650eeb6f2944fce4d36a6e0a423e6705f3a3bd3389c7fadb83cfc8802","glsl-optimizer/src/compiler/glsl/lower_tess_level.cpp":"b196c9d424c0569f3e85d75c2d125af21566cb113d69036db87c0990703e0fa7","glsl-optimizer/src/compiler/glsl/lower_texture_projection.cpp":"4d247f244272adc8250fd888d8d932a140dd5de4d1efc7a58492c3c2b8291527","glsl-optimizer/src/compiler/glsl/lower_ubo_reference.cpp":"89bdbc6c1669230c644c0857db1ce2781ec61d349ecd08c7914146e1f4750a4a","glsl-optimizer/src/compiler/glsl/lower_variable_index_to_cond_assign.cpp":"fce930f29ac9405b297d1f749d68f59506b89c70b4ee1b1ab8cf49a34cc71ecf","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_cond_assign.cpp":"3c67d851a11a55fad1c49a550f3a0cfe50892d33a3f238ce266cd829eba510a8","glsl-optimizer/src/compiler/glsl/lower_vec_index_to_swizzle.cpp":"f5ec666b73e1415cbab32519a53605ed385f3b03e889560373dbce69dda5000e","glsl-optimizer/src/compiler/glsl/lower_vector.cpp":"f7c13f5572ebe09b6a71553133b2cf003cd4b77b9657600672ee3b21bf890725","glsl-optimizer/src/compiler/glsl/lower_vector_derefs.cpp":"b05793da6dd620a531b43df5af8b2ecbc37b9db0c88910f5724ea10bcd057e19","glsl-optimizer/src/compiler/glsl/lower_vector_insert.cpp":"fee772ec17eea5e86a529bf9c5fa2ee0d29a5982bb75ebc6d68ed36cd19aa299","glsl-optimizer/src/compiler/glsl/lower_vertex_id.cpp":"690e8715182e03fead5cc5a35251fb4f41b357e4c71a1dfbc4bd7be19862b56d","glsl-optimizer/src/compiler/glsl/lower_xfb_varying.cpp":"58c0e8b270e4bbde54250be03cdb2f36966bcafb785372ad2e2b786835df7f9f","glsl-optimizer/src/compiler/glsl/main.cpp":"ae5e88abbbc8a12f769e1296bad938b9d7398cc6da0d3d0caeceeeb876536850","glsl-optimizer/src/compiler/glsl/opt_add_neg_to_sub.h":"f5054944bfd068810629080d0ea11df78b3f57a8f86df75e13ca50157ad1964d","glsl-optimizer/src/compiler/glsl/opt_algebraic.cpp":"25f45b20e1972ee8c789177a1aeda6e4286c25db2eae3a43ff83029ae64969c0","glsl-optimizer/src/compiler/glsl/opt_array_splitting.cpp":"19d3ce0e815438f4df9ab2890e767b03a4f3f191b53bb30c0217cf2ae6a95430","glsl-optimizer/src/compiler/glsl/opt_conditional_discard.cpp":"0e44e0e126711a3725c1f3a2aa65ff03c381fed08680ffc30101aae60f716c4e","glsl-optimizer/src/compiler/glsl/opt_constant_folding.cpp":"a088d04d9b45f9e55e235835648f614c89b7803c03a6d4f6a6d1a6bc1f0228bd","glsl-optimizer/src/compiler/glsl/opt_constant_propagation.cpp":"8a9440d77ecd6dcf13e683cbb99943aab6311c8fd4b5f6a9189a8d4f270746f4","glsl-optimizer/src/compiler/glsl/opt_constant_variable.cpp":"63d3ccd4dd09f19c9cf1a2f51592111bed41284504f29f3c0de4cadebc439a37","glsl-optimizer/src/compiler/glsl/opt_copy_propagation_elements.cpp":"ffa0f50863995e0d2e31f55a52e82319edc71e520987bebd7f7e561ea331c64b","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_variables.cpp":"84e8747b948232f01dd56b428b9315f96f9511f605f240119fc446fae28981a9","glsl-optimizer/src/compiler/glsl/opt_dead_builtin_varyings.cpp":"761523e88f5b3ba785170f4d7205e94fa99acb7e74d29efbe40e1c010e1dbdb3","glsl-optimizer/src/compiler/glsl/opt_dead_code.cpp":"fd1ba2da7337d4e5dad17f5c2d73d9cc8880305f423e85d64cf94553588fa401","glsl-optimizer/src/compiler/glsl/opt_dead_code_local.cpp":"969a598b4df322baf222258a66cd64a326ea20e5b3125be9d8d1771f522c69e0","glsl-optimizer/src/compiler/glsl/opt_dead_functions.cpp":"774cae6536d02edf26e996a2a895e1f62d5098f16dc96b44798b4fc731a9a95f","glsl-optimizer/src/compiler/glsl/opt_flatten_nested_if_blocks.cpp":"3696a5c55f02e20056e085bc2714f73ac992f221b6f3387d655068e86b512046","glsl-optimizer/src/compiler/glsl/opt_flip_matrices.cpp":"44f0fe05b49329667671f88c96dc86ab3fe1459ff7b87f2b2d88de2d49829f9f","glsl-optimizer/src/compiler/glsl/opt_function_inlining.cpp":"fb56a33c90419a01676b57cbd91d0674a54cca40e6defaacc88dd33facebc131","glsl-optimizer/src/compiler/glsl/opt_if_simplification.cpp":"ac406eb35e379c357641d6c5749f50c65961455924d3dc884e2b90046fa92c5c","glsl-optimizer/src/compiler/glsl/opt_minmax.cpp":"8abd59d3b14ef60ff14a9c69660e6945f5cf10b97edb4afebe56be3f81d96316","glsl-optimizer/src/compiler/glsl/opt_rebalance_tree.cpp":"8bb6329dc0f299042368fc81934c2df019b45ab9f7aa0415d4e57b8d1ff98c9f","glsl-optimizer/src/compiler/glsl/opt_redundant_jumps.cpp":"222c73e2ac7a938ebb6428cc6c780c908ff6156d8ff935b04fed93a48fc10496","glsl-optimizer/src/compiler/glsl/opt_structure_splitting.cpp":"2edc79cc13f3177934e0443ad62f5976a1991f01f86ea303a803434849b13a47","glsl-optimizer/src/compiler/glsl/opt_swizzle.cpp":"015d0abddfe507f67c4b96c82988d861d018ededf7bf055e2bcbe9ea92da694e","glsl-optimizer/src/compiler/glsl/opt_tree_grafting.cpp":"46d28ac983ea244a4315bdc0e8892979ec4d1f9b9a96ac8a8a08006d9bc5e878","glsl-optimizer/src/compiler/glsl/opt_vectorize.cpp":"d80ee43bb97d9f016fb9c5e1e06f5b2afa569811f368ba067be794ec11d085fb","glsl-optimizer/src/compiler/glsl/program.h":"2982447e2abd35371e273ad87951722782a8b21c08294f67c39d987da1e1c55f","glsl-optimizer/src/compiler/glsl/propagate_invariance.cpp":"080943e21baa32494723a2eefb185915d2daae1f46d6df420145c5ad6857e119","glsl-optimizer/src/compiler/glsl/s_expression.cpp":"1ced972bc6ecc8eab4116ea71fb0212ab9ae5bcc0be3b47aa5d9d903566b3af1","glsl-optimizer/src/compiler/glsl/s_expression.h":"65b847e30e22a809b57d0bc70243049c99d9c6318803c5b8d0826aba55dc217e","glsl-optimizer/src/compiler/glsl/serialize.cpp":"be0eb4251348a9d921acb839a5c48c6023a2e9d116d602bb0432787ab623655d","glsl-optimizer/src/compiler/glsl/serialize.h":"57425732eba1233d928e5f07f88b623ce65af46b3bb034bf147f0a4b7f94f9a1","glsl-optimizer/src/compiler/glsl/shader_cache.cpp":"e0c5c433f2df3fccdf1d61281bfcb0ee5633433339b97c697d64db99611cbaaf","glsl-optimizer/src/compiler/glsl/shader_cache.h":"9217164d8d7f54aca0fe5922c7187095a6ae0cb703b196b79805aeef07a7e697","glsl-optimizer/src/compiler/glsl/standalone.cpp":"8e6c416a14d631261917a5fe4cc91880c287b22b2dfd70eb22028289a8fa5364","glsl-optimizer/src/compiler/glsl/standalone.h":"a7c397d1dfdd1e7fb2cfe99db35cd9df93251e642059208533202b7f20497f83","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.cpp":"970d14b7a9d58e5270321f97bf5d57795558b1c570a56678e04a65b26c60bf4f","glsl-optimizer/src/compiler/glsl/standalone_scaffolding.h":"d921a617ea82b9e49413314492a645c44356de503581b1be3f1b57de236e480d","glsl-optimizer/src/compiler/glsl/string_to_uint_map.cpp":"d824bf5b839bd39498dc9e457103cdbe3e5289ddf7564107c27b1505948dd31f","glsl-optimizer/src/compiler/glsl/string_to_uint_map.h":"e2f18e66359c9d620e085de7f4a334a47df9c66e65a5bfe8b734c627bec04104","glsl-optimizer/src/compiler/glsl/test_optpass.h":"b27b8f35f5387e7ce4982bb51c7b63ccf14f91757f3108a5d02ed006925bb8a0","glsl-optimizer/src/compiler/glsl/xxd.py":"376484142f27f45090ea8203ae2621abf73f06175cb0ee8d96f44a3b9327f4bd","glsl-optimizer/src/compiler/glsl_types.cpp":"044bb6754f45419a3151e7a25c39202a82009ae3c6bc54ff7f0bb4258a5deefe","glsl-optimizer/src/compiler/glsl_types.h":"fd899a42f34ddeb8601bc3cd6c5e3aed82fc8aef4042dde1b39b3c01e1dcc219","glsl-optimizer/src/compiler/shader_enums.c":"436bff5216b11b0980bdfada5885fc6ac9afa2037a3027fcd6eea2a8635597ac","glsl-optimizer/src/compiler/shader_enums.h":"13220442a5c02e83540cf2c0ad4f8417b2fbda5f2586dec4e92082544c937cdd","glsl-optimizer/src/compiler/shader_info.h":"4c5453e81197ca83593ee4f365074b23530f2ab21c78e1733b63dec6f344c12a","glsl-optimizer/src/gallium/auxiliary/util/u_half.h":"3c2b37bda3ccb64387e44b723d29cf9046decab1a893bf42d842e9603398bdee","glsl-optimizer/src/gallium/include/pipe/p_compiler.h":"c75620096ce8523dae90599e50aa2ef6468d3b0e368a77795edeb20dd1abfc0c","glsl-optimizer/src/gallium/include/pipe/p_config.h":"a27692fc35f9e55df3224b7529e66b3001e911e94e6bc5f8f569e493e1ee3fb7","glsl-optimizer/src/gallium/include/pipe/p_defines.h":"be26d68c0acc67c5e44788c6299716a9eee415fd81d7d747e3738a829e3b6b38","glsl-optimizer/src/gallium/include/pipe/p_format.h":"5674215fc41d27496f037cf837717daefbf23ebb38d40ace7c0c414bc08182b0","glsl-optimizer/src/gallium/include/pipe/p_state.h":"d600593aba5f5a17072a6c38f6baa81e01c7994b0174250f7e433bb41684b702","glsl-optimizer/src/mapi/glapi/glapi.h":"73632a625c0ddabc401205e8b5a81eb8af8506868efe4b170d7979ec3619e9c5","glsl-optimizer/src/mesa/main/config.h":"5800259373099e5405de2eb52619f9de242552a479902a3a642a333c8cb3c1e7","glsl-optimizer/src/mesa/main/context.c":"2f3208473d99c94f734b1137ba91889d4a1babb9e7534bf1dc85d851ee98274e","glsl-optimizer/src/mesa/main/context.h":"cc7e4194797db9d007f01884e23d786c453b3860821f7f2ddcdf0f1bf3f8ffb1","glsl-optimizer/src/mesa/main/dd.h":"6a964acd06b6c2d88700e69fb75fe3c6b3b3d45bbc41db24f3f897a29695fe0c","glsl-optimizer/src/mesa/main/debug_output.h":"7312422e90b8c0e34028ac27280e438139b5cba525c99deb3ac883cd3d87e452","glsl-optimizer/src/mesa/main/draw.h":"7eaef3a9e27a60ea6f7937109bf3a6190b831162fde0479abb12077ce27c353d","glsl-optimizer/src/mesa/main/enums.h":"87d562a6764f51c014a2274fa7c3aca17c04441537ddd56b2554f13c6fffea92","glsl-optimizer/src/mesa/main/errors.h":"c79444b5df289c90fbb22a33b2d0c23917d9fc4510960088f0b79e53bb56b1b2","glsl-optimizer/src/mesa/main/extensions.h":"a38b2f87cc93c513994281350d69e06c84ff8eded5313ec0a1be33f375e0ebbd","glsl-optimizer/src/mesa/main/extensions_table.c":"17642d1a8c9a0bf2bd61060052d33ff14a005d2b962e6cf91465797a50851e85","glsl-optimizer/src/mesa/main/extensions_table.h":"2c879571c238d2e14461031ac740372fd0f9ac3a34c0d5541bb9b7ed4c0376c8","glsl-optimizer/src/mesa/main/formats.h":"02e2f7ec3e39286cf9f27e2641043e6df8ecb1dfde9e643313210e214af2a929","glsl-optimizer/src/mesa/main/glheader.h":"58217b33eead6aa6b23cd4a291cefeaa6cb84e465f4960daffca97c44d6d1c35","glsl-optimizer/src/mesa/main/glthread.h":"51fb2711f77e7eafcfc52d29d5b844978832b24c930d88accd48d143a6eb9c6f","glsl-optimizer/src/mesa/main/hash.h":"7e7f782034c16a8e693de48e00c31d4a90b0129f4029fd074033d7d16ccbe718","glsl-optimizer/src/mesa/main/macros.h":"73d15ddfd64f2b57b9b2ffeeb993b9c2c0899a80563e9d6ff337b11ccbe6eee5","glsl-optimizer/src/mesa/main/menums.h":"5dfac0e2279d60b0cd0c7b9fc2a5021620d0f6282ed2e738c420214e3af152d3","glsl-optimizer/src/mesa/main/mesa_private.h":"edda678b93438944279a551f663b8858ad84814a9fc88ba9672ef195599c24ae","glsl-optimizer/src/mesa/main/mtypes.h":"6efddefa099e4d2e3fdd97f0055644f47aba21711385edfeabc2d9b0676f2eec","glsl-optimizer/src/mesa/main/shaderobj.h":"9f0dfe96d0c2154201adef942bd36053533ac7b2492fb3786acda5bea514c75e","glsl-optimizer/src/mesa/main/uniforms.h":"4e331e6ad6e9cbded978b4082dbe0a57c1f8f01327446bb6892bfc179976c38b","glsl-optimizer/src/mesa/main/version.h":"9d0a13a758099302dc55cf7d045791834a89b0f9d4cf17b2692259b369a8a9a1","glsl-optimizer/src/mesa/math/m_matrix.h":"a37b19f182e070db3df93b0ede43c22fb8be8c2906504133ee6dbd7db1185d8b","glsl-optimizer/src/mesa/program/dummy_errors.c":"1820e305515b4c5e041f5e1623266a48ec8f076a155310be7d60637101f593e4","glsl-optimizer/src/mesa/program/ir_to_mesa.h":"b47f58d22e3ca2ae42d52501ea769d15c4476834944fa97eeccd3a3439211d00","glsl-optimizer/src/mesa/program/prog_instruction.h":"ab3832152a7e144b59e5a2264b2c29db56d93be31e76bbd958527a56771b40eb","glsl-optimizer/src/mesa/program/prog_parameter.h":"ba18c743284eadbc837c2c364c73e5d372321a7637a76e589d8d39fe8b5de225","glsl-optimizer/src/mesa/program/prog_statevars.h":"fc413698f84bc52d45fdeae0471934ee9904bfb7eac1a2b5f70446e54bcbbdca","glsl-optimizer/src/mesa/program/program.h":"1f01026a4eff440a3f122fd9b519d03546fe7f7d8be60dca834e95a2f8fbbfd2","glsl-optimizer/src/mesa/program/symbol_table.c":"6611cb9f078035bf5ff8c9112093a6c7d99f8af99a3931d0c07f227cc72283ea","glsl-optimizer/src/mesa/program/symbol_table.h":"631dc35ac48d5e87962d45507461920f6575610960ffcc42a08cefeb43300cda","glsl-optimizer/src/mesa/vbo/vbo.h":"6eb1dcd9a08c92f276c5fe08da184ff9d455d1be421913b8ad732a7b65e858fb","glsl-optimizer/src/util/bitscan.h":"9e49e694e6b34fe035bc685f32588827eb8cbe7d82878963c7ab52843e1c16aa","glsl-optimizer/src/util/bitset.h":"c40f78515c6230fed18345c6751ce33833a49da7a27901c7e6d7340cbdcbc5e7","glsl-optimizer/src/util/blob.c":"8f729846f66efc9c15485cc5fc24c6ec861fc1fecb2f652573f2a237d481b791","glsl-optimizer/src/util/blob.h":"93e1eaac866b9a7cd6fc03b533c18fb2edf0e97f03395eff4f3a605c4fc14d0c","glsl-optimizer/src/util/compiler.h":"79e3bf40a5bab704e6c949f23a1352759607bb57d80e5d8df2ef159755f10b68","glsl-optimizer/src/util/crc32.c":"2f3467a046b3a76784ecb9aa55d527698c8607fd0b12c622f6691aaa77b58505","glsl-optimizer/src/util/crc32.h":"59bd81865e51042b73a86f8fb117c312418df095fed2d828c5c1d1c8b6fc6cd4","glsl-optimizer/src/util/debug.c":"c3d68e9752ccc19e66c669562cd113cf1d0ac83cbb30174789e7fb8d1df58f9c","glsl-optimizer/src/util/debug.h":"50068d745c4199ccbd33d68dd4c8a36d2b5179c7869a21e75906ddd0718ca456","glsl-optimizer/src/util/detect_os.h":"343a8790d17a3710c6dd015ee367f84e3902ff3f2e36faca2bf93f9d725d3574","glsl-optimizer/src/util/disk_cache.c":"f533937e5a4fffe76e2739ef4b6b1e1da097d96d63eb808e68ebbc7027641c23","glsl-optimizer/src/util/disk_cache.h":"e83314fb14134a8e079b15e470a6376ba5a8253701f048c890a62b7e55d64bc8","glsl-optimizer/src/util/fast_urem_by_const.h":"e108fce804616c47d071dfe4a04163eec1126e448ed1aa89abb6b3a6d772bd5b","glsl-optimizer/src/util/fnv1a.h":"ab2596f19c6adf431ae27618f62c5743e24ad23ef83bb359a4c4c218245ab459","glsl-optimizer/src/util/format/u_format.h":"4cdfc0c59cbc99a092e5ec5a396910f2d93b9643e5d8141050b011e66f11e45b","glsl-optimizer/src/util/futex.h":"26f7c9d86e9ffef4c0fa2761f1aaa1918337302e20bd6ca10e61dc3c47356deb","glsl-optimizer/src/util/half_float.c":"11bc2584493d5d9d46e8c8a619a0307cf150bf5ab5d0f96bb764b061dc37a00e","glsl-optimizer/src/util/half_float.h":"7f7c380f126da1400a91758cc0392f24bf967bce1672890b62be26fe9fbd922b","glsl-optimizer/src/util/hash_table.c":"0ca40352e35dedab0a84c64c903f1b16d47e950bb5f43b4d22bb57d499bfea6e","glsl-optimizer/src/util/hash_table.h":"217191bb360592e2232f187473c10287d2cda8ae6fa5c53d0ef74c8c206118b4","glsl-optimizer/src/util/list.h":"9fab03c6a78186bb5f173269f825f6ce976b409d931852e3d93bac632e07989a","glsl-optimizer/src/util/macros.h":"63faf65b51058c483b17f1f77da51d1c53c8beab52678cb6bd01f1228a63b6b0","glsl-optimizer/src/util/mesa-sha1.c":"00c692ec353ebc02c06c57c5a71de0ab7a119f86a4146f452e65ec87e4944417","glsl-optimizer/src/util/mesa-sha1.h":"bff4c29f4bf7cdbcefb30fa0c996a7604a380eba8976467c2a60e7cd328f7e26","glsl-optimizer/src/util/mesa-sha1_test.c":"25da89a59d51469f77b4c468ca23ffdce0a7a1166a70b6cc23026a6800b0143c","glsl-optimizer/src/util/os_memory.h":"64555faf1760ae6954f42c83727c38dfc4c278e9152115779ffaad58b42adacf","glsl-optimizer/src/util/os_memory_aligned.h":"12d86fa94be38c13f7eeebdf313795e1267dd5a7187d2f0072e0e896f41702f6","glsl-optimizer/src/util/os_memory_stdc.h":"07360363b88c927065e10df71bebf6c8a0cc3b9167c9dfce55f2d65f11e6f787","glsl-optimizer/src/util/os_misc.c":"a9936e613ec84803abd59ad47c192c8e3939993c950ac91973fdc4cec1801bb8","glsl-optimizer/src/util/os_misc.h":"cc68eb12e05b5e749c54298cb4a6f4cd20cc5af7db3403e70b3c27b56090c740","glsl-optimizer/src/util/os_time.h":"73e775f7335244ff5964c678c27eedf1aea6abea44c4169d327ea8c7ce4a3a88","glsl-optimizer/src/util/ralloc.c":"4b51189595ef67bcef52c40cbf654d969041dbd15e15d4a893ad494ac060aeca","glsl-optimizer/src/util/ralloc.h":"e573c45875ff1530f0dbee9a93ae55535fdac8d5cc88a79ebc327c688824bde5","glsl-optimizer/src/util/rounding.h":"0450722353caf83de07e67f335949dbe95fe53b534052d4ee9d28d2781387614","glsl-optimizer/src/util/set.c":"86f8c9a830bead5a5a79bc970b0ff97809312af07b3beb39ef9d90af04d40a1b","glsl-optimizer/src/util/set.h":"3e39ca161e7ed4ec7c436cc9c7919ed9a55ed1b71edbf2caf6f9bcfd9bc578ed","glsl-optimizer/src/util/sha1/README":"00af7419af05247081858acb2902efd99fcda2ce16e331079f701645bb3729c0","glsl-optimizer/src/util/sha1/sha1.c":"1403bbe0aad42ba3e6be7e09f7cad87a6a8c4ad5b63962f7b92b9f37d8133b04","glsl-optimizer/src/util/sha1/sha1.h":"68d9f240eab2918026ecdf22be36811abbd4f1389f6c36e31258041aeaedd247","glsl-optimizer/src/util/simple_mtx.h":"12c6c3c4b7db9168bc656d5b3c65912075084d2b388c415d5c3d3f5953a9d6c7","glsl-optimizer/src/util/softfloat.c":"a97e51a96fe5e6a052c02aa6bbec683fe73fb88a8c087d9c930503e2120d8a2e","glsl-optimizer/src/util/softfloat.h":"66664b0250e83bf5dd4cc743acd119d076efcea624a0eab3d6b60718e6ee8811","glsl-optimizer/src/util/string_buffer.c":"63a1d1b1e34926c88ea00159cafbcd56568b805c4f64d1e8c97169fe313921fc","glsl-optimizer/src/util/string_buffer.h":"7b88d1b1d9c6cfb8e93331813535c127289437c75f822029e9a3bca8ea6b52ee","glsl-optimizer/src/util/strndup.h":"0273c4fdb7482cd7746881a63d3998648c6d63415ba85af1d1860f0e0dc504c6","glsl-optimizer/src/util/strtod.c":"5cf610d8a37373cf37cfb7aae903525d943b2674b1f32594c70b0eb19a8c9697","glsl-optimizer/src/util/strtod.h":"237396def4e264d35ed4bedea00ef9a4ceab6d7a11a18c770d9747d22c69ed2d","glsl-optimizer/src/util/u_atomic.h":"c02e809526c6c09ba8fe51f50b2490d1b6c8e5c7f3c4031ae958250d098fc3bb","glsl-optimizer/src/util/u_debug.c":"8c060e379b816618f3dd22c9ea523c68b9425c76c36a7dfe5d6d375b337f5f4a","glsl-optimizer/src/util/u_debug.h":"e11e26edd9b9e4e6f8e6a435e69f4d9edda27e9a379f68f4c82ea2525aaaea68","glsl-optimizer/src/util/u_dynarray.h":"853d0fa6ff2261614488be624deb8a2b01e57c2c8eabc28578cbeed4ccc95694","glsl-optimizer/src/util/u_endian.h":"420a4320adfc37f89cfbf761f289651600b773468f2f881a1f7e9afa377987f5","glsl-optimizer/src/util/u_math.c":"c868a8c0886dc78f1b06b13404ba8b253090449045774dd56893ac9d75795184","glsl-optimizer/src/util/u_math.h":"4f334f6cd005b5703e41fa145f761f882b7f3a15e61c3234773af4f4adde1036","glsl-optimizer/src/util/u_memory.h":"c5db17c724c70283ddbe04165722f6988d4e0eb9aa3602ae472feff016649af9","glsl-optimizer/src/util/u_queue.h":"92930ce236c0528a98b695f5cea8c5c6aa9683beaf71a2227bdc5d33d1b21506","glsl-optimizer/src/util/u_string.h":"c5a2f4ef576d1547bda12c4ea219179fefa54414977743ac094abcaf696ef6ca","glsl-optimizer/src/util/u_thread.h":"00b708459b27f9910d18db92c18cc65cfc618ac2b3cd144e45f8640057b10d58","glsl-optimizer/src/util/xxhash.h":"2f2aff2fc6c0c929f52cf6ae7314122124c5be026d41ad1c357608383c4a37ad","src/bindings.rs":"79993db2058bde39f99ef483d02560d33b1cb882f6a552319e8b86eb6f9021e1","src/lib.rs":"04be1554cd829eb40864b06d80b491dd48117a4e3a601c7d482117f7a0391e67","wrapper.hpp":"f3ea34cc496f7d90b9bfcada3250b37b314c3524dac693b2ece9517bc7d274ac"},"package":"913662ae8335df058d56e00f11340b20fa82e03e0276587797ef325ab01e50d4"}
+diff --git a/third_party/rust/glslopt/Cargo.toml b/third_party/rust/glslopt/Cargo.toml
+index b391d8c..9fc8504 100644
+--- a/third_party/rust/glslopt/Cargo.toml
++++ b/third_party/rust/glslopt/Cargo.toml
+@@ -9,11 +9,21 @@
+ # will likely look very different (and much more reasonable).
+ # See Cargo.toml.orig for the original contents.
+
++bin = []
++example = []
++test = []
++bench = []
++
+ [package]
+ edition = "2018"
+ name = "glslopt"
+ version = "0.1.11"
+ authors = ["Jamie Nicol "]
++build = "build.rs"
++autobins = false
++autoexamples = false
++autotests = false
++autobenches = false
+ description = "Optimizes GLSL shader code"
+ readme = "README.md"
+ keywords = [
+@@ -26,5 +36,9 @@ keywords = [
+ license = "MIT"
+ repository = "https://github.com/jamienicol/glslopt-rs"
+
+-[build-dependencies.cc]
+-version = "1.0"
++[lib]
++name = "glslopt"
++path = "src/lib.rs"
++
++[build-dependencies]
++cc = "1.0"
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
+index 3dafcf0..cc6fe4b 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
++++ b/third_party/rust/glslopt/glsl-optimizer/src/compiler/glsl/builtin_functions.cpp
+@@ -735,7 +735,7 @@ fp64(const _mesa_glsl_parse_state *state)
+ }
+
+ static bool
+-int64(const _mesa_glsl_parse_state *state)
++int64_(const _mesa_glsl_parse_state *state)
+ {
+ return state->has_int64();
+ }
+@@ -1617,10 +1617,10 @@ builtin_builder::create_builtins()
+ _##NAME(fp64, glsl_type::dvec2_type), \
+ _##NAME(fp64, glsl_type::dvec3_type), \
+ _##NAME(fp64, glsl_type::dvec4_type), \
+- _##NAME(int64, glsl_type::int64_t_type), \
+- _##NAME(int64, glsl_type::i64vec2_type), \
+- _##NAME(int64, glsl_type::i64vec3_type), \
+- _##NAME(int64, glsl_type::i64vec4_type), \
++ _##NAME(int64_, glsl_type::int64_t_type), \
++ _##NAME(int64_, glsl_type::i64vec2_type), \
++ _##NAME(int64_, glsl_type::i64vec3_type), \
++ _##NAME(int64_, glsl_type::i64vec4_type), \
+ NULL);
+
+ #define FIUD_VEC(NAME) \
+@@ -1639,14 +1639,14 @@ builtin_builder::create_builtins()
+ _##NAME(fp64, glsl_type::dvec2_type), \
+ _##NAME(fp64, glsl_type::dvec3_type), \
+ _##NAME(fp64, glsl_type::dvec4_type), \
+- _##NAME(int64, glsl_type::int64_t_type), \
+- _##NAME(int64, glsl_type::i64vec2_type), \
+- _##NAME(int64, glsl_type::i64vec3_type), \
+- _##NAME(int64, glsl_type::i64vec4_type), \
+- _##NAME(int64, glsl_type::uint64_t_type), \
+- _##NAME(int64, glsl_type::u64vec2_type), \
+- _##NAME(int64, glsl_type::u64vec3_type), \
+- _##NAME(int64, glsl_type::u64vec4_type), \
++ _##NAME(int64_, glsl_type::int64_t_type), \
++ _##NAME(int64_, glsl_type::i64vec2_type), \
++ _##NAME(int64_, glsl_type::i64vec3_type), \
++ _##NAME(int64_, glsl_type::i64vec4_type), \
++ _##NAME(int64_, glsl_type::uint64_t_type), \
++ _##NAME(int64_, glsl_type::u64vec2_type), \
++ _##NAME(int64_, glsl_type::u64vec3_type), \
++ _##NAME(int64_, glsl_type::u64vec4_type), \
+ NULL);
+
+ #define IU(NAME) \
+@@ -1683,14 +1683,14 @@ builtin_builder::create_builtins()
+ _##NAME(fp64, glsl_type::dvec2_type), \
+ _##NAME(fp64, glsl_type::dvec3_type), \
+ _##NAME(fp64, glsl_type::dvec4_type), \
+- _##NAME(int64, glsl_type::int64_t_type), \
+- _##NAME(int64, glsl_type::i64vec2_type), \
+- _##NAME(int64, glsl_type::i64vec3_type), \
+- _##NAME(int64, glsl_type::i64vec4_type), \
+- _##NAME(int64, glsl_type::uint64_t_type), \
+- _##NAME(int64, glsl_type::u64vec2_type), \
+- _##NAME(int64, glsl_type::u64vec3_type), \
+- _##NAME(int64, glsl_type::u64vec4_type), \
++ _##NAME(int64_, glsl_type::int64_t_type), \
++ _##NAME(int64_, glsl_type::i64vec2_type), \
++ _##NAME(int64_, glsl_type::i64vec3_type), \
++ _##NAME(int64_, glsl_type::i64vec4_type), \
++ _##NAME(int64_, glsl_type::uint64_t_type), \
++ _##NAME(int64_, glsl_type::u64vec2_type), \
++ _##NAME(int64_, glsl_type::u64vec3_type), \
++ _##NAME(int64_, glsl_type::u64vec4_type), \
+ NULL);
+
+ #define FIUD2_MIXED(NAME) \
+@@ -1730,20 +1730,20 @@ builtin_builder::create_builtins()
+ _##NAME(fp64, glsl_type::dvec3_type, glsl_type::dvec3_type), \
+ _##NAME(fp64, glsl_type::dvec4_type, glsl_type::dvec4_type), \
+ \
+- _##NAME(int64, glsl_type::int64_t_type, glsl_type::int64_t_type), \
+- _##NAME(int64, glsl_type::i64vec2_type, glsl_type::int64_t_type), \
+- _##NAME(int64, glsl_type::i64vec3_type, glsl_type::int64_t_type), \
+- _##NAME(int64, glsl_type::i64vec4_type, glsl_type::int64_t_type), \
+- _##NAME(int64, glsl_type::i64vec2_type, glsl_type::i64vec2_type), \
+- _##NAME(int64, glsl_type::i64vec3_type, glsl_type::i64vec3_type), \
+- _##NAME(int64, glsl_type::i64vec4_type, glsl_type::i64vec4_type), \
+- _##NAME(int64, glsl_type::uint64_t_type, glsl_type::uint64_t_type), \
+- _##NAME(int64, glsl_type::u64vec2_type, glsl_type::uint64_t_type), \
+- _##NAME(int64, glsl_type::u64vec3_type, glsl_type::uint64_t_type), \
+- _##NAME(int64, glsl_type::u64vec4_type, glsl_type::uint64_t_type), \
+- _##NAME(int64, glsl_type::u64vec2_type, glsl_type::u64vec2_type), \
+- _##NAME(int64, glsl_type::u64vec3_type, glsl_type::u64vec3_type), \
+- _##NAME(int64, glsl_type::u64vec4_type, glsl_type::u64vec4_type), \
++ _##NAME(int64_, glsl_type::int64_t_type, glsl_type::int64_t_type), \
++ _##NAME(int64_, glsl_type::i64vec2_type, glsl_type::int64_t_type), \
++ _##NAME(int64_, glsl_type::i64vec3_type, glsl_type::int64_t_type), \
++ _##NAME(int64_, glsl_type::i64vec4_type, glsl_type::int64_t_type), \
++ _##NAME(int64_, glsl_type::i64vec2_type, glsl_type::i64vec2_type), \
++ _##NAME(int64_, glsl_type::i64vec3_type, glsl_type::i64vec3_type), \
++ _##NAME(int64_, glsl_type::i64vec4_type, glsl_type::i64vec4_type), \
++ _##NAME(int64_, glsl_type::uint64_t_type, glsl_type::uint64_t_type), \
++ _##NAME(int64_, glsl_type::u64vec2_type, glsl_type::uint64_t_type), \
++ _##NAME(int64_, glsl_type::u64vec3_type, glsl_type::uint64_t_type), \
++ _##NAME(int64_, glsl_type::u64vec4_type, glsl_type::uint64_t_type), \
++ _##NAME(int64_, glsl_type::u64vec2_type, glsl_type::u64vec2_type), \
++ _##NAME(int64_, glsl_type::u64vec3_type, glsl_type::u64vec3_type), \
++ _##NAME(int64_, glsl_type::u64vec4_type, glsl_type::u64vec4_type), \
+ NULL);
+
+ F(radians)
+@@ -1865,15 +1865,15 @@ builtin_builder::create_builtins()
+ _mix_sel(shader_integer_mix, glsl_type::bvec3_type, glsl_type::bvec3_type),
+ _mix_sel(shader_integer_mix, glsl_type::bvec4_type, glsl_type::bvec4_type),
+
+- _mix_sel(int64, glsl_type::int64_t_type, glsl_type::bool_type),
+- _mix_sel(int64, glsl_type::i64vec2_type, glsl_type::bvec2_type),
+- _mix_sel(int64, glsl_type::i64vec3_type, glsl_type::bvec3_type),
+- _mix_sel(int64, glsl_type::i64vec4_type, glsl_type::bvec4_type),
++ _mix_sel(int64_, glsl_type::int64_t_type, glsl_type::bool_type),
++ _mix_sel(int64_, glsl_type::i64vec2_type, glsl_type::bvec2_type),
++ _mix_sel(int64_, glsl_type::i64vec3_type, glsl_type::bvec3_type),
++ _mix_sel(int64_, glsl_type::i64vec4_type, glsl_type::bvec4_type),
+
+- _mix_sel(int64, glsl_type::uint64_t_type, glsl_type::bool_type),
+- _mix_sel(int64, glsl_type::u64vec2_type, glsl_type::bvec2_type),
+- _mix_sel(int64, glsl_type::u64vec3_type, glsl_type::bvec3_type),
+- _mix_sel(int64, glsl_type::u64vec4_type, glsl_type::bvec4_type),
++ _mix_sel(int64_, glsl_type::uint64_t_type, glsl_type::bool_type),
++ _mix_sel(int64_, glsl_type::u64vec2_type, glsl_type::bvec2_type),
++ _mix_sel(int64_, glsl_type::u64vec3_type, glsl_type::bvec3_type),
++ _mix_sel(int64_, glsl_type::u64vec4_type, glsl_type::bvec4_type),
+ NULL);
+
+ add_function("step",
+@@ -1973,10 +1973,10 @@ builtin_builder::create_builtins()
+ add_function("packDouble2x32", _packDouble2x32(fp64), NULL);
+ add_function("unpackDouble2x32", _unpackDouble2x32(fp64), NULL);
+
+- add_function("packInt2x32", _packInt2x32(int64), NULL);
+- add_function("unpackInt2x32", _unpackInt2x32(int64), NULL);
+- add_function("packUint2x32", _packUint2x32(int64), NULL);
+- add_function("unpackUint2x32", _unpackUint2x32(int64), NULL);
++ add_function("packInt2x32", _packInt2x32(int64_), NULL);
++ add_function("unpackInt2x32", _unpackInt2x32(int64_), NULL);
++ add_function("packUint2x32", _packUint2x32(int64_), NULL);
++ add_function("unpackUint2x32", _unpackUint2x32(int64_), NULL);
+
+ FD(length)
+ FD(distance)
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/util/u_endian.h b/third_party/rust/glslopt/glsl-optimizer/src/util/u_endian.h
+index 6bbae3c..d1540e9 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/util/u_endian.h
++++ b/third_party/rust/glslopt/glsl-optimizer/src/util/u_endian.h
+@@ -27,7 +27,7 @@
+ #ifndef U_ENDIAN_H
+ #define U_ENDIAN_H
+
+-#ifdef HAVE_ENDIAN_H
++#if defined(HAVE_ENDIAN_H) || defined(__HAIKU__)
+ #include
+
+ #if __BYTE_ORDER == __LITTLE_ENDIAN
+diff --git a/third_party/rust/glslopt/glsl-optimizer/src/util/u_math.h b/third_party/rust/glslopt/glsl-optimizer/src/util/u_math.h
+index 42d9e34..240bd41 100644
+--- a/third_party/rust/glslopt/glsl-optimizer/src/util/u_math.h
++++ b/third_party/rust/glslopt/glsl-optimizer/src/util/u_math.h
+@@ -676,6 +676,9 @@ util_memcpy_cpu_to_le32(void * restrict dest, const void * restrict src, size_t
+ #define MAX4( A, B, C, D ) ((A) > (B) ? MAX3(A, C, D) : MAX3(B, C, D))
+
+
++#ifdef __HAIKU__
++#undef ALIGN
++#endif
+ /**
+ * Align a value up to an alignment value
+ *
+diff --git a/third_party/rust/lmdb-rkv-sys/.cargo-checksum.json b/third_party/rust/lmdb-rkv-sys/.cargo-checksum.json
+index 6ae8903..ae32d1c 100644
+--- a/third_party/rust/lmdb-rkv-sys/.cargo-checksum.json
++++ b/third_party/rust/lmdb-rkv-sys/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.toml":"497afaab87773f297aef19f09219b951afcbfe06d5b0cf0c22f44e7543a020b0","bindgen.rs":"4579cf8b217b9673fd08f8306bfe1b4bbac1b31cf11b2a395f81ddac04dfc10e","build.rs":"54abc550db966ce0479e1cf54ed992e3eca7e947357c54bf937b6048f0813c95","lmdb/libraries/liblmdb/CHANGES":"ba14b94dda8670db454275d2f5fb83510f810ccb3ccfca642176a0efef245e08","lmdb/libraries/liblmdb/COPYRIGHT":"fae797823b892c4b59913256b4d10b17d71f57d4bc45e46d901b84fd6dfc3d13","lmdb/libraries/liblmdb/Doxyfile":"5545f6b049040ce58e6d1a603eaea6b7fb8ae92459f2ab8d3bcbacabcce1014d","lmdb/libraries/liblmdb/LICENSE":"310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569","lmdb/libraries/liblmdb/Makefile":"60b5f574e6642602f692a95956da61c588a265ad50b8059960c230b9e6aaf4fd","lmdb/libraries/liblmdb/intro.doc":"9442e0db4fc9c70f058c43545e710476d8d5a80b959d20f4381240fd50c6b843","lmdb/libraries/liblmdb/lmdb.h":"05abf244b621b2d14e838b0643e72d5075ce77d8df856b6dccde74ee51c9cf22","lmdb/libraries/liblmdb/mdb.c":"9a4f14f3f7bf146715c01b1353b24ca9734ff1b2599c65ce4389f293ecda7015","lmdb/libraries/liblmdb/mdb_copy.1":"3a6a8a7a91e1bd42dc4d2a0188ff62d699ff2b3b097a670f30681decf63f22f3","lmdb/libraries/liblmdb/mdb_copy.c":"d3d412a770a5c3afeb88c44b4acdde0f0b985cde22497198e8f38296281cdddd","lmdb/libraries/liblmdb/mdb_dump.1":"9257be883c7fcfcbd61003cc730f7c0900fa8f6feba074c8c1e46634a257b13a","lmdb/libraries/liblmdb/mdb_dump.c":"b046cffcd997254e6daea47a2d7fb74f9d23282174cbb1e3bf9f5fb51a90fe64","lmdb/libraries/liblmdb/mdb_load.1":"ea927473245a4a7777ba687aa26baf7f0951fb620daf82b8d730a090185b2bbc","lmdb/libraries/liblmdb/mdb_load.c":"4f722613c65350315db23060be98584fb572978108885dab271101ba7187dca4","lmdb/libraries/liblmdb/mdb_stat.1":"c0a70d96b4b2d32e73301383d9d5620bc0bbbefb019bfd54f32088dfd4bc921a","lmdb/libraries/liblmdb/mdb_stat.c":"e6405fa191d784ecfa8eb8d1f153a58facc49a8f5a2c891a93802e67acc4861e","lmdb/libraries/liblmdb/midl.c":"e19143db51dd606396c7eba765832e4b66167c0975614e576b950349f8f6cdfd","lmdb/libraries/liblmdb/midl.h":"52066a085aa0fc90799113fb1cc60ca78a5e35ca6191f5f5cb29488d4bd66dba","lmdb/libraries/liblmdb/mtest.c":"89ab9ac8bf1e14a9f32a33757c4b3254e4984e0f24e5a302e2d126eb2c86f6db","lmdb/libraries/liblmdb/mtest2.c":"076b00395fe1461dd9577f7bb5567908ce50cf470efbf652787e6fe1dc2fb68c","lmdb/libraries/liblmdb/mtest3.c":"51b9a055e123bd0757ee3082cc6864c836969cf630e646a9cc34e01398c20634","lmdb/libraries/liblmdb/mtest4.c":"b0a725405d80bda6ab95b3ecf410ae330ab8df7a081ca81dd6ea1f8db87642e9","lmdb/libraries/liblmdb/mtest5.c":"7f3b06ca3833315ea4c70d5e91feb1b677f6949f105f4f89d96c3ac35e104f2f","lmdb/libraries/liblmdb/mtest6.c":"e4d7880c36547ebf33bc020046730bf2c075c53aaacd5c876152cc5ae7ab5e6c","lmdb/libraries/liblmdb/sample-bdb.txt":"153d84f8fc49a3abba53ed52d5a41c8d6d4698753a10bbe0689a9e65d3513513","lmdb/libraries/liblmdb/sample-mdb.txt":"1f77385786cffdf72b33da06a91a444fe2827673c3627f89110903a8fe012795","lmdb/libraries/liblmdb/tooltag":"4734c6dc1fa7aec8c2e9646bd04bc5218ef6a03ad83a3b18de2ac4069eb94120","src/bindings.rs":"ab64073ce4ec64282e8f67cd8f148c83661810a662cb804813b3add0d92a4bf6","src/lib.rs":"e0cf0afbab6dfded166e11d492b66d5701efe07ef978c386060054bd09f7e0c8","tests/fixtures/testdb-32/data.mdb":"74d09a30a020789631ef5c64d60d34f6913cf63ad73c82327bd605c5a37849bb","tests/fixtures/testdb-32/lock.mdb":"bbfd0f5aa3eea8421b0a2c277de69b105789dbc744391d9a08d0d3332ae91f70","tests/fixtures/testdb/data.mdb":"8a0cf8ad63473ae63d437a646042b0d64c112a8fa33d5c916f0678ce4d23189b","tests/fixtures/testdb/lock.mdb":"6ef7eea0c15b42835891c2d1d62905cfca7ae018572971610600196714858f53","tests/lmdb.rs":"5086cb43f3a7b6a8aaa257084c1e0bea664f279ff260b99a8ad0d3c598867a45","tests/simple.rs":"774a3edf589dd5fab3b90d5faabb8b8e06e51ec231a795ba17b1e35e65490848"},"package":"61b9ce6b3be08acefa3003c57b7565377432a89ec24476bbe72e11d101f852fe"}
+\ No newline at end of file
++{"files":{".rustfmt.toml":"fbef9d8f2ff25a0b6c6f032f2b066aedfd7b1d34d8f75e0be811bc087bff5469","Cargo.toml":"a111b0e819d64bea0f117d2f1f25c58692b2cc2e70859881bf4cdf89817d9af3","bindgen.rs":"4579cf8b217b9673fd08f8306bfe1b4bbac1b31cf11b2a395f81ddac04dfc10e","build.rs":"54abc550db966ce0479e1cf54ed992e3eca7e947357c54bf937b6048f0813c95","lmdb/libraries/liblmdb/CHANGES":"ba14b94dda8670db454275d2f5fb83510f810ccb3ccfca642176a0efef245e08","lmdb/libraries/liblmdb/COPYRIGHT":"fae797823b892c4b59913256b4d10b17d71f57d4bc45e46d901b84fd6dfc3d13","lmdb/libraries/liblmdb/Doxyfile":"5545f6b049040ce58e6d1a603eaea6b7fb8ae92459f2ab8d3bcbacabcce1014d","lmdb/libraries/liblmdb/LICENSE":"310fe25c858a9515fc8c8d7d1f24a67c9496f84a91e0a0e41ea9975b1371e569","lmdb/libraries/liblmdb/Makefile":"60b5f574e6642602f692a95956da61c588a265ad50b8059960c230b9e6aaf4fd","lmdb/libraries/liblmdb/intro.doc":"9442e0db4fc9c70f058c43545e710476d8d5a80b959d20f4381240fd50c6b843","lmdb/libraries/liblmdb/lmdb.h":"05abf244b621b2d14e838b0643e72d5075ce77d8df856b6dccde74ee51c9cf22","lmdb/libraries/liblmdb/mdb.c":"3b23059962db42311f6811f60ce19730da5b51e1d263fa2f63d1be6f6b5ff490","lmdb/libraries/liblmdb/mdb_copy.1":"3a6a8a7a91e1bd42dc4d2a0188ff62d699ff2b3b097a670f30681decf63f22f3","lmdb/libraries/liblmdb/mdb_copy.c":"d3d412a770a5c3afeb88c44b4acdde0f0b985cde22497198e8f38296281cdddd","lmdb/libraries/liblmdb/mdb_dump.1":"9257be883c7fcfcbd61003cc730f7c0900fa8f6feba074c8c1e46634a257b13a","lmdb/libraries/liblmdb/mdb_dump.c":"b046cffcd997254e6daea47a2d7fb74f9d23282174cbb1e3bf9f5fb51a90fe64","lmdb/libraries/liblmdb/mdb_load.1":"ea927473245a4a7777ba687aa26baf7f0951fb620daf82b8d730a090185b2bbc","lmdb/libraries/liblmdb/mdb_load.c":"4f722613c65350315db23060be98584fb572978108885dab271101ba7187dca4","lmdb/libraries/liblmdb/mdb_stat.1":"c0a70d96b4b2d32e73301383d9d5620bc0bbbefb019bfd54f32088dfd4bc921a","lmdb/libraries/liblmdb/mdb_stat.c":"e6405fa191d784ecfa8eb8d1f153a58facc49a8f5a2c891a93802e67acc4861e","lmdb/libraries/liblmdb/midl.c":"e19143db51dd606396c7eba765832e4b66167c0975614e576b950349f8f6cdfd","lmdb/libraries/liblmdb/midl.h":"52066a085aa0fc90799113fb1cc60ca78a5e35ca6191f5f5cb29488d4bd66dba","lmdb/libraries/liblmdb/mtest.c":"89ab9ac8bf1e14a9f32a33757c4b3254e4984e0f24e5a302e2d126eb2c86f6db","lmdb/libraries/liblmdb/mtest2.c":"076b00395fe1461dd9577f7bb5567908ce50cf470efbf652787e6fe1dc2fb68c","lmdb/libraries/liblmdb/mtest3.c":"51b9a055e123bd0757ee3082cc6864c836969cf630e646a9cc34e01398c20634","lmdb/libraries/liblmdb/mtest4.c":"b0a725405d80bda6ab95b3ecf410ae330ab8df7a081ca81dd6ea1f8db87642e9","lmdb/libraries/liblmdb/mtest5.c":"7f3b06ca3833315ea4c70d5e91feb1b677f6949f105f4f89d96c3ac35e104f2f","lmdb/libraries/liblmdb/mtest6.c":"e4d7880c36547ebf33bc020046730bf2c075c53aaacd5c876152cc5ae7ab5e6c","lmdb/libraries/liblmdb/sample-bdb.txt":"153d84f8fc49a3abba53ed52d5a41c8d6d4698753a10bbe0689a9e65d3513513","lmdb/libraries/liblmdb/sample-mdb.txt":"1f77385786cffdf72b33da06a91a444fe2827673c3627f89110903a8fe012795","lmdb/libraries/liblmdb/tooltag":"4734c6dc1fa7aec8c2e9646bd04bc5218ef6a03ad83a3b18de2ac4069eb94120","src/bindings.rs":"ab64073ce4ec64282e8f67cd8f148c83661810a662cb804813b3add0d92a4bf6","src/lib.rs":"e0cf0afbab6dfded166e11d492b66d5701efe07ef978c386060054bd09f7e0c8","tests/fixtures/testdb-32/data.mdb":"74d09a30a020789631ef5c64d60d34f6913cf63ad73c82327bd605c5a37849bb","tests/fixtures/testdb-32/lock.mdb":"bbfd0f5aa3eea8421b0a2c277de69b105789dbc744391d9a08d0d3332ae91f70","tests/fixtures/testdb/data.mdb":"8a0cf8ad63473ae63d437a646042b0d64c112a8fa33d5c916f0678ce4d23189b","tests/fixtures/testdb/lock.mdb":"6ef7eea0c15b42835891c2d1d62905cfca7ae018572971610600196714858f53","tests/lmdb.rs":"5086cb43f3a7b6a8aaa257084c1e0bea664f279ff260b99a8ad0d3c598867a45","tests/simple.rs":"774a3edf589dd5fab3b90d5faabb8b8e06e51ec231a795ba17b1e35e65490848"},"package":null}
+\ No newline at end of file
+diff --git a/third_party/rust/lmdb-rkv-sys/.rustfmt.toml b/third_party/rust/lmdb-rkv-sys/.rustfmt.toml
+new file mode 100644
+index 0000000..fc441bb
+--- /dev/null
++++ b/third_party/rust/lmdb-rkv-sys/.rustfmt.toml
+@@ -0,0 +1,3 @@
++ignore = [
++ "src/bindings.rs"
++]
+\ No newline at end of file
+diff --git a/third_party/rust/lmdb-rkv-sys/Cargo.toml b/third_party/rust/lmdb-rkv-sys/Cargo.toml
+index e8f59d9..6843f92 100644
+--- a/third_party/rust/lmdb-rkv-sys/Cargo.toml
++++ b/third_party/rust/lmdb-rkv-sys/Cargo.toml
+@@ -9,36 +9,65 @@
+ # will likely look very different (and much more reasonable).
+ # See Cargo.toml.orig for the original contents.
+
++bin = []
++example = []
++bench = []
++
+ [package]
+ name = "lmdb-rkv-sys"
+ version = "0.11.2"
+-authors = ["Dan Burkert ", "Victor Porof "]
++authors = [
++ "Dan Burkert ",
++ "Victor Porof ",
++]
+ build = "build.rs"
++autobins = false
++autoexamples = false
++autotests = false
++autobenches = false
+ description = "Rust bindings for liblmdb."
+ homepage = "https://github.com/mozilla/lmdb-rs"
+ documentation = "https://docs.rs/lmdb-rkv-sys"
+ readme = "../README.md"
+-keywords = ["LMDB", "database", "storage-engine", "bindings", "library"]
+-categories = ["database", "external-ffi-bindings"]
++keywords = [
++ "LMDB",
++ "database",
++ "storage-engine",
++ "bindings",
++ "library",
++]
++categories = [
++ "database",
++ "external-ffi-bindings",
++]
+ license = "Apache-2.0"
+ repository = "https://github.com/mozilla/lmdb-rs.git"
+
+ [lib]
+ name = "lmdb_sys"
+-[dependencies.libc]
+-version = "0.2"
++path = "src/lib.rs"
++
++[[test]]
++name = "lmdb"
++path = "tests/lmdb.rs"
++
++[[test]]
++name = "simple"
++path = "tests/simple.rs"
++
++[dependencies]
++libc = "0.2"
++
++[build-dependencies]
++cc = "1.0"
++pkg-config = "0.3"
++
+ [build-dependencies.bindgen]
+ version = "0.53.2"
+ features = ["runtime"]
+ optional = true
+ default-features = false
+
+-[build-dependencies.cc]
+-version = "1.0"
+-
+-[build-dependencies.pkg-config]
+-version = "0.3"
+-
+ [features]
+ default = []
+ mdb_idl_logn_10 = []
+@@ -52,6 +81,7 @@ mdb_idl_logn_9 = []
+ with-asan = []
+ with-fuzzer = []
+ with-fuzzer-no-link = []
++
+ [badges.appveyor]
+ repository = "mozilla/lmdb-rs"
+
+diff --git a/third_party/rust/lmdb-rkv-sys/lmdb/libraries/liblmdb/mdb.c b/third_party/rust/lmdb-rkv-sys/lmdb/libraries/liblmdb/mdb.c
+index 01741d0..ad4f34d 100644
+--- a/third_party/rust/lmdb-rkv-sys/lmdb/libraries/liblmdb/mdb.c
++++ b/third_party/rust/lmdb-rkv-sys/lmdb/libraries/liblmdb/mdb.c
+@@ -123,7 +123,7 @@ typedef SSIZE_T ssize_t;
+ #include /* defines BYTE_ORDER on HPUX and Solaris */
+ #endif
+
+-#if defined(__APPLE__) || defined (BSD) || defined(__FreeBSD_kernel__)
++#if defined(__APPLE__) || defined (BSD) || defined(__FreeBSD_kernel__) || defined(__HAIKU__)
+ # define MDB_USE_POSIX_SEM 1
+ # define MDB_FDATASYNC fsync
+ #elif defined(__ANDROID__)
+@@ -256,7 +256,7 @@ typedef SSIZE_T ssize_t;
+ */
+ #ifndef MDB_USE_ROBUST
+ /* Android currently lacks Robust Mutex support. So does glibc < 2.4. */
+-# if defined(MDB_USE_POSIX_MUTEX) && (defined(__ANDROID__) || \
++# if defined(MDB_USE_POSIX_MUTEX) && (defined(__ANDROID__) || defined(__HAIKU__) || \
+ (defined(__GLIBC__) && GLIBC_VER < 0x020004))
+ # define MDB_USE_ROBUST 0
+ # else
+diff --git a/third_party/rust/quinn-udp/.cargo-checksum.json b/third_party/rust/quinn-udp/.cargo-checksum.json
+index 37b14c8..0706460 100644
+--- a/third_party/rust/quinn-udp/.cargo-checksum.json
++++ b/third_party/rust/quinn-udp/.cargo-checksum.json
+@@ -1 +1 @@
+-{"files":{"Cargo.toml":"739bf78e6b796c0d89224ba2bbed4350a16536fc1ebac928c018dbdee46a3686","LICENSE-APACHE":"c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4","LICENSE-MIT":"4b2d0aca6789fa39e03d6738e869ea0988cceba210ca34ebb59c15c463e93a04","benches/throughput.rs":"095137508f85b68174978ff968cade74587751484402ca09269ffc2631d97f34","build.rs":"f15147312964f6a6dfc1a3b3d9645022c14a7be8bdb9bd321afc9a218235b431","src/cmsg/mod.rs":"63d6ea7126341fededdaef14260a7eed715ad3f507d4da586dbab814f581a54d","src/cmsg/unix.rs":"7917bce2f3c8e844eca2e4cfea82669b2a31cf311321dc42532626db4ee42de8","src/cmsg/windows.rs":"6fb936ec4a283efc5796872e777441e3039c40589073865644a8ef7936af4f4b","src/fallback.rs":"6378c177db7ba0eb88115b63f1ec9e17b05f53b1daae2c1e215520f103145585","src/lib.rs":"3c20f8012db32df03acb8b76094ce3f86f112159adf5e51ac9e2e9dec86516f1","src/unix.rs":"6583182c85cdaf7e1232332d161e4e537a3ea66b33604634daeba87df337dd9d","src/windows.rs":"09554e6b40fae544c1985b04dbe402454e0591877df243b10e86ff780a92aa1b","tests/tests.rs":"babb0fc08884958203b2a0546647e44a67f6b457fe2784935e32d73becb20f4c"},"package":"1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904"}
+\ No newline at end of file
++{"files":{"Cargo.toml":"739bf78e6b796c0d89224ba2bbed4350a16536fc1ebac928c018dbdee46a3686","LICENSE-APACHE":"c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4","LICENSE-MIT":"4b2d0aca6789fa39e03d6738e869ea0988cceba210ca34ebb59c15c463e93a04","benches/throughput.rs":"095137508f85b68174978ff968cade74587751484402ca09269ffc2631d97f34","build.rs":"f15147312964f6a6dfc1a3b3d9645022c14a7be8bdb9bd321afc9a218235b431","src/cmsg/mod.rs":"63d6ea7126341fededdaef14260a7eed715ad3f507d4da586dbab814f581a54d","src/cmsg/unix.rs":"7917bce2f3c8e844eca2e4cfea82669b2a31cf311321dc42532626db4ee42de8","src/cmsg/windows.rs":"6fb936ec4a283efc5796872e777441e3039c40589073865644a8ef7936af4f4b","src/fallback.rs":"6378c177db7ba0eb88115b63f1ec9e17b05f53b1daae2c1e215520f103145585","src/lib.rs":"3c20f8012db32df03acb8b76094ce3f86f112159adf5e51ac9e2e9dec86516f1","src/unix.rs":"8d7ca923a3f523239f8912d171718cc17b4ffd27b99208104b3795765c488f58","src/windows.rs":"09554e6b40fae544c1985b04dbe402454e0591877df243b10e86ff780a92aa1b","tests/tests.rs":"babb0fc08884958203b2a0546647e44a67f6b457fe2784935e32d73becb20f4c"},"package":"1c40286217b4ba3a71d644d752e6a0b71f13f1b6a2c5311acfcbe0c2418ed904"}
+diff --git a/third_party/rust/quinn-udp/src/unix.rs b/third_party/rust/quinn-udp/src/unix.rs
+index c39941d..36e4dde 100644
+--- a/third_party/rust/quinn-udp/src/unix.rs
++++ b/third_party/rust/quinn-udp/src/unix.rs
+@@ -53,9 +53,9 @@ extern "C" {
+ // Defined in netinet6/in6.h on OpenBSD, this is not yet exported by the libc crate
+ // directly. See https://github.com/rust-lang/libc/issues/3704 for when we might be able to
+ // rely on this from the libc crate.
+-#[cfg(any(target_os = "openbsd", target_os = "netbsd"))]
++#[cfg(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku"))]
+ const IPV6_DONTFRAG: libc::c_int = 62;
+-#[cfg(not(any(target_os = "openbsd", target_os = "netbsd")))]
++#[cfg(not(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku")))]
+ const IPV6_DONTFRAG: libc::c_int = libc::IPV6_DONTFRAG;
+
+ #[cfg(target_os = "freebsd")]
+@@ -86,16 +86,6 @@ impl UdpSocketState {
+ pub fn new(sock: UdpSockRef<'_>) -> io::Result {
+ let io = sock.0;
+ let mut cmsg_platform_space = 0;
+- if cfg!(target_os = "linux")
+- || cfg!(bsd)
+- || cfg!(apple)
+- || cfg!(target_os = "android")
+- || cfg!(solarish)
+- {
+- cmsg_platform_space +=
+- unsafe { libc::CMSG_SPACE(mem::size_of::() as _) as usize };
+- }
+-
+ assert!(
+ CMSG_LEN
+ >= unsafe { libc::CMSG_SPACE(mem::size_of::() as _) as usize }
+@@ -113,7 +103,7 @@ impl UdpSocketState {
+
+ // mac and ios do not support IP_RECVTOS on dual-stack sockets :(
+ // older macos versions also don't have the flag and will error out if we don't ignore it
+- #[cfg(not(any(target_os = "openbsd", target_os = "netbsd", solarish)))]
++ #[cfg(not(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku", solarish)))]
+ if is_ipv4 || !io.only_v6()? {
+ if let Err(_err) =
+ set_socket_option(&*io, libc::IPPROTO_IP, libc::IP_RECVTOS, OPTION_ON)
+@@ -174,7 +164,6 @@ impl UdpSocketState {
+ // Options standardized in RFC 3542
+ if !is_ipv4 {
+ set_socket_option(&*io, libc::IPPROTO_IPV6, libc::IPV6_RECVPKTINFO, OPTION_ON)?;
+- set_socket_option(&*io, libc::IPPROTO_IPV6, libc::IPV6_RECVTCLASS, OPTION_ON)?;
+ // Linux's IP_PMTUDISC_PROBE allows us to operate under interface MTU rather than the
+ // kernel's path MTU guess, but actually disabling fragmentation requires this too. See
+ // __ip6_append_data in ip6_output.c.
+@@ -452,7 +441,7 @@ fn send(state: &UdpSocketState, io: SockRef<'_>, transmit: &Transmit<'_>) -> io:
+ }
+ }
+
+-#[cfg(not(any(apple, target_os = "openbsd", target_os = "netbsd", solarish)))]
++#[cfg(not(any(apple, target_os = "openbsd", target_os = "netbsd", target_os = "haiku", solarish)))]
+ fn recv(io: SockRef<'_>, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta]) -> io::Result {
+ let mut names = [MaybeUninit::::uninit(); BATCH_SIZE];
+ let mut ctrls = [cmsg::Aligned(MaybeUninit::<[u8; CMSG_LEN]>::uninit()); BATCH_SIZE];
+@@ -519,7 +508,7 @@ fn recv(io: SockRef<'_>, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta]) ->
+ Ok(msg_count as usize)
+ }
+
+-#[cfg(any(target_os = "openbsd", target_os = "netbsd", solarish, apple_slow))]
++#[cfg(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku", solarish, apple_slow))]
+ fn recv(io: SockRef<'_>, bufs: &mut [IoSliceMut<'_>], meta: &mut [RecvMeta]) -> io::Result {
+ let mut name = MaybeUninit::::uninit();
+ let mut ctrl = cmsg::Aligned(MaybeUninit::<[u8; CMSG_LEN]>::uninit());
+@@ -585,8 +574,6 @@ fn prepare_msg(
+ encoder.push(libc::IPPROTO_IP, libc::IP_TOS, ecn as IpTosTy);
+ }
+ }
+- } else {
+- encoder.push(libc::IPPROTO_IPV6, libc::IPV6_TCLASS, ecn);
+ }
+
+ // Only set the segment size if it is different from the size of the contents.
+@@ -598,42 +585,6 @@ fn prepare_msg(
+ gso::set_segment_size(&mut encoder, segment_size as u16);
+ }
+
+- if let Some(ip) = &transmit.src_ip {
+- match ip {
+- IpAddr::V4(v4) => {
+- #[cfg(any(target_os = "linux", target_os = "android"))]
+- {
+- let pktinfo = libc::in_pktinfo {
+- ipi_ifindex: 0,
+- ipi_spec_dst: libc::in_addr {
+- s_addr: u32::from_ne_bytes(v4.octets()),
+- },
+- ipi_addr: libc::in_addr { s_addr: 0 },
+- };
+- encoder.push(libc::IPPROTO_IP, libc::IP_PKTINFO, pktinfo);
+- }
+- #[cfg(any(bsd, apple, solarish))]
+- {
+- if encode_src_ip {
+- let addr = libc::in_addr {
+- s_addr: u32::from_ne_bytes(v4.octets()),
+- };
+- encoder.push(libc::IPPROTO_IP, libc::IP_RECVDSTADDR, addr);
+- }
+- }
+- }
+- IpAddr::V6(v6) => {
+- let pktinfo = libc::in6_pktinfo {
+- ipi6_ifindex: 0,
+- ipi6_addr: libc::in6_addr {
+- s6_addr: v6.octets(),
+- },
+- };
+- encoder.push(libc::IPPROTO_IPV6, libc::IPV6_PKTINFO, pktinfo);
+- }
+- }
+- }
+-
+ encoder.finish();
+ }
+
+@@ -689,22 +640,10 @@ fn decode_recv(
+ ecn_bits = cmsg::decode::(cmsg);
+ },
+ // FreeBSD uses IP_RECVTOS here, and we can be liberal because cmsgs are opt-in.
+- #[cfg(not(any(target_os = "openbsd", target_os = "netbsd", solarish)))]
++ #[cfg(not(any(target_os = "openbsd", target_os = "netbsd", target_os = "haiku", solarish)))]
+ (libc::IPPROTO_IP, libc::IP_RECVTOS) => unsafe {
+ ecn_bits = cmsg::decode::(cmsg);
+ },
+- (libc::IPPROTO_IPV6, libc::IPV6_TCLASS) => unsafe {
+- // Temporary hack around broken macos ABI. Remove once upstream fixes it.
+- // https://bugreport.apple.com/web/?problemID=48761855
+- #[allow(clippy::unnecessary_cast)] // cmsg.cmsg_len defined as size_t
+- if cfg!(apple)
+- && cmsg.cmsg_len as usize == libc::CMSG_LEN(mem::size_of::() as _) as usize
+- {
+- ecn_bits = cmsg::decode::(cmsg);
+- } else {
+- ecn_bits = cmsg::decode::(cmsg) as u8;
+- }
+- },
+ #[cfg(any(target_os = "linux", target_os = "android"))]
+ (libc::IPPROTO_IP, libc::IP_PKTINFO) => {
+ let pktinfo = unsafe { cmsg::decode::(cmsg) };
+@@ -717,10 +656,6 @@ fn decode_recv(
+ let in_addr = unsafe { cmsg::decode::(cmsg) };
+ dst_ip = Some(IpAddr::V4(Ipv4Addr::from(in_addr.s_addr.to_ne_bytes())));
+ }
+- (libc::IPPROTO_IPV6, libc::IPV6_PKTINFO) => {
+- let pktinfo = unsafe { cmsg::decode::(cmsg) };
+- dst_ip = Some(IpAddr::V6(Ipv6Addr::from(pktinfo.ipi6_addr.s6_addr)));
+- }
+ #[cfg(any(target_os = "linux", target_os = "android"))]
+ (libc::SOL_UDP, gro::UDP_GRO) => unsafe {
+ stride = cmsg::decode::(cmsg) as usize;
+diff --git a/toolkit/components/processtools/ProcInfo_haiku.cpp b/toolkit/components/processtools/ProcInfo_haiku.cpp
+new file mode 100644
+index 0000000..ad41c23
+--- /dev/null
++++ b/toolkit/components/processtools/ProcInfo_haiku.cpp
+@@ -0,0 +1,86 @@
++/* -*- Mode: C++; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
++/* vim: set ts=8 sts=2 et sw=2 tw=80: */
++/* This Source Code Form is subject to the terms of the Mozilla Public
++ * License, v. 2.0. If a copy of the MPL was not distributed with this
++ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
++
++#include "mozilla/ProcInfo.h"
++
++#include
++
++namespace mozilla {
++
++int GetCycleTimeFrequencyMHz() { return 0; }
++
++nsresult GetCpuTimeSinceProcessStartInMs(uint64_t* aResult) {
++ team_usage_info usage;
++ if (B_OK != get_team_usage_info(B_CURRENT_TEAM, B_TEAM_USAGE_SELF, &usage)) {
++ return NS_ERROR_FAILURE;
++ }
++ const bigtime_t microseconds = usage.user_time + usage.kernel_time;
++ *aResult = microseconds / 1000;
++ return NS_OK;
++}
++
++nsresult GetGpuTimeSinceProcessStartInMs(uint64_t* aResult) {
++ return NS_ERROR_NOT_IMPLEMENTED;
++}
++
++ProcInfoPromise::ResolveOrRejectValue GetProcInfoSync(
++ nsTArray&& aRequests) {
++ ProcInfoPromise::ResolveOrRejectValue result;
++
++ HashMap gathered;
++ if (!gathered.reserve(aRequests.Length())) {
++ result.SetReject(NS_ERROR_OUT_OF_MEMORY);
++ return result;
++ }
++ for (const auto& request : aRequests) {
++ ProcInfo info;
++
++ team_usage_info usage;
++ if (B_OK != get_team_usage_info(request.pid, B_TEAM_USAGE_SELF, &usage)) {
++ continue;
++ }
++ const bigtime_t microseconds = usage.user_time + usage.kernel_time;
++ const uint64_t nanoseconds = microseconds * 1000;
++ info.cpuTime = nanoseconds;
++
++ info.memory = 0;
++ ssize_t cookie_area = 0;
++ area_info area;
++ while (B_OK == get_next_area_info(request.pid, &cookie_area, &area)) {
++ info.memory += area.ram_size;
++ }
++
++ info.pid = request.pid;
++ info.childId = request.childId;
++ info.type = request.processType;
++ info.origin = request.origin;
++ info.windows = std::move(request.windowInfo);
++ info.utilityActors = std::move(request.utilityInfo);
++
++ int32 cookie_thread = 0;
++ thread_info thread;
++ while (B_OK == get_next_thread_info(request.pid, &cookie_thread, &thread)) {
++ const bigtime_t microseconds = thread.user_time + thread.kernel_time;
++ const uint64_t nanoseconds = microseconds * 1000;
++
++ ThreadInfo threadInfo;
++ threadInfo.tid = thread.thread;
++ threadInfo.cpuTime = nanoseconds;
++ info.threads.AppendElement(threadInfo);
++ }
++
++ if (!gathered.put(request.pid, std::move(info))) {
++ result.SetReject(NS_ERROR_OUT_OF_MEMORY);
++ return result;
++ }
++ }
++
++ // ... and we're done!
++ result.SetResolve(std::move(gathered));
++ return result;
++}
++
++} // namespace mozilla
+diff --git a/toolkit/components/processtools/moz.build b/toolkit/components/processtools/moz.build
+index d5c0aca..506a7b1 100644
+--- a/toolkit/components/processtools/moz.build
++++ b/toolkit/components/processtools/moz.build
+@@ -43,6 +43,8 @@ if toolkit == "gtk" or toolkit == "android":
+ UNIFIED_SOURCES += ["ProcInfo_bsd.cpp"]
+ elif CONFIG["OS_TARGET"] == "SunOS":
+ UNIFIED_SOURCES += ["ProcInfo_solaris.cpp"]
++ elif CONFIG["OS_TARGET"] == "Haiku":
++ UNIFIED_SOURCES += ["ProcInfo_haiku.cpp"]
+ else:
+ UNIFIED_SOURCES += ["ProcInfo_linux.cpp"]
+ elif toolkit == "windows":
+diff --git a/toolkit/library/moz.build b/toolkit/library/moz.build
+index 2f33348..8203d3e 100644
+--- a/toolkit/library/moz.build
++++ b/toolkit/library/moz.build
+@@ -344,6 +344,10 @@ if CONFIG["OS_ARCH"] == "Darwin":
+ "-weak_framework MediaPlayer",
+ ]
+
++if CONFIG["OS_ARCH"] == "Haiku":
++ OS_LIBS += [
++ "be",
++ ]
+
+ if CONFIG["OS_ARCH"] == "WINNT":
+ OS_LIBS += [
+diff --git a/toolkit/library/rust/moz.build b/toolkit/library/rust/moz.build
+index 0926e21..da8ff80 100644
+--- a/toolkit/library/rust/moz.build
++++ b/toolkit/library/rust/moz.build
+@@ -8,6 +8,12 @@ include("gkrust-features.mozbuild")
+
+ RustLibrary("gkrust", gkrust_features, is_gkrust=True)
+
++if CONFIG["OS_ARCH"] == "Haiku":
++ # Rust 1.83+ requires arc4random_buf()
++ OS_LIBS += [
++ "bsd"
++ ]
++
+ for feature in gkrust_features:
+ # We don't want to enable refcount logging during rusttests, since the
+ # relevant FFI symbols wouldn't be found.
+diff --git a/toolkit/modules/ShortcutUtils.sys.mjs b/toolkit/modules/ShortcutUtils.sys.mjs
+index 360a7db..69b089f 100644
+--- a/toolkit/modules/ShortcutUtils.sys.mjs
++++ b/toolkit/modules/ShortcutUtils.sys.mjs
+@@ -64,7 +64,7 @@ export var ShortcutUtils = {
+ let elemString = "";
+ let haveCloverLeaf = false;
+ if (elemMod.match("accel")) {
+- if (Services.appinfo.OS == "Darwin") {
++ if (Services.appinfo.OS == "Darwin" || Services.appinfo.OS == "Haiku") {
+ haveCloverLeaf = true;
+ } else {
+ elemString +=
+@@ -73,7 +73,7 @@ export var ShortcutUtils = {
+ }
+ }
+ if (elemMod.match("access")) {
+- if (Services.appinfo.OS == "Darwin") {
++ if (Services.appinfo.OS == "Darwin" || Services.appinfo.OS == "Haiku") {
+ elemString +=
+ lazy.PlatformKeys.GetStringFromName("VK_CONTROL") +
+ lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
+@@ -94,14 +94,26 @@ export var ShortcutUtils = {
+ lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
+ }
+ if (elemMod.match("alt")) {
+- elemString +=
+- lazy.PlatformKeys.GetStringFromName("VK_ALT") +
+- lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
++ if (Services.appinfo.OS == "Haiku") {
++ elemString +=
++ lazy.PlatformKeys.GetStringFromName("VK_CONTROL") +
++ lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
++ } else {
++ elemString +=
++ lazy.PlatformKeys.GetStringFromName("VK_ALT") +
++ lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
++ }
+ }
+ if (elemMod.match("ctrl") || elemMod.match("control")) {
+- elemString +=
+- lazy.PlatformKeys.GetStringFromName("VK_CONTROL") +
+- lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
++ if (Services.appinfo.OS == "Haiku") {
++ elemString +=
++ lazy.PlatformKeys.GetStringFromName("VK_ALT") +
++ lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
++ } else {
++ elemString +=
++ lazy.PlatformKeys.GetStringFromName("VK_CONTROL") +
++ lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
++ }
+ }
+ if (elemMod.match("meta") && this.metaKeyIsCommandKey()) {
+ elemString +=
+@@ -110,9 +122,15 @@ export var ShortcutUtils = {
+ }
+
+ if (haveCloverLeaf) {
+- elemString +=
+- lazy.PlatformKeys.GetStringFromName("VK_COMMAND_OR_WIN") +
+- lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
++ if (Services.appinfo.OS == "Haiku") {
++ elemString +=
++ lazy.PlatformKeys.GetStringFromName("VK_ALT") +
++ lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
++ } else {
++ elemString +=
++ lazy.PlatformKeys.GetStringFromName("VK_COMMAND_OR_WIN") +
++ lazy.PlatformKeys.GetStringFromName("MODIFIER_SEPARATOR");
++ }
+ }
+
+ return elemString;
+diff --git a/toolkit/moz.configure b/toolkit/moz.configure
+index 5873dbe..1534ba4 100644
+--- a/toolkit/moz.configure
++++ b/toolkit/moz.configure
+@@ -293,6 +293,8 @@ def audio_backends_default(target):
+ return ("sndio",)
+ elif target.kernel == "Darwin":
+ return ("audiounit",)
++ elif target.os == "Haiku":
++ return ("haiku",)
+ elif target.os == "NetBSD":
+ return ("sunaudio",)
+ elif target.os == "SunOS":
+@@ -310,6 +312,7 @@ option(
+ "aaudio",
+ "alsa",
+ "audiounit",
++ "haiku",
+ "jack",
+ "opensl",
+ "oss",
+@@ -348,6 +351,11 @@ def imply_audiounit(values, target):
+ return any("audiounit" in value for value in values) or None
+
+
++@depends("--enable-audio-backends")
++def imply_haiku(values):
++ return any("haiku" in value for value in values) or None
++
++
+ @depends("--enable-audio-backends")
+ def imply_jack(values):
+ return any("jack" in value for value in values) or None
+@@ -411,6 +419,8 @@ imply_option(
+
+ set_config("MOZ_AUDIOUNIT_RUST", imply_audiounit, when="--enable-audio-backends")
+
++set_config("MOZ_HAIKU", imply_haiku, when="--enable-audio-backends")
++
+ imply_option(
+ "--enable-jack", imply_jack, reason="--enable-audio-backends", when=use_pkg_config
+ )
+@@ -3054,6 +3064,7 @@ def forkserver_default(target, build_project):
+ (target.os == "GNU" and target.kernel == "Linux")
+ or target.os == "FreeBSD"
+ or target.os == "OpenBSD"
++ or target.os == "Haiku"
+ )
+
+
+@@ -3576,7 +3587,7 @@ with only_when(compile_environment):
+
+ @depends(target)
+ def default_user_appdir(target):
+- if target.kernel in ("WINNT", "Darwin"):
++ if target.kernel in ("WINNT", "Darwin", "Haiku"):
+ return "Mozilla"
+ return ".mozilla"
+
+diff --git a/toolkit/system/gnome/nsGIOService.cpp b/toolkit/system/gnome/nsGIOService.cpp
+index fd173f9..839d9f4 100644
+--- a/toolkit/system/gnome/nsGIOService.cpp
++++ b/toolkit/system/gnome/nsGIOService.cpp
+@@ -399,6 +399,32 @@ gboolean g_app_info_launch_default_for_uri_openbsd(const char* uri,
+ }
+ #endif
+
++#ifdef __HAIKU__
++
++gboolean g_app_info_launch_uris_haiku(GAppInfo* mApp, const char* uri,
++ GAppLaunchContext* context,
++ GError** error) {
++ gchar* command = g_strdup_printf("open '%s'", uri);
++ auto releaseCommand = MakeScopeExit([&] { g_free(command); });
++
++ int result = system(command);
++
++ if (result != 0) {
++ g_set_error(error, G_IO_ERROR, G_IO_ERROR_FAILED,
++ "Failed to open URI '%s' using 'open' utility", uri);
++ return FALSE;
++ }
++ return TRUE;
++}
++
++gboolean g_app_info_launch_default_for_uri_haiku(const char* uri,
++ GAppLaunchContext* context,
++ GError** error) {
++ return g_app_info_launch_uris_haiku(NULL, uri, context, error);
++}
++
++#endif // __HAIKU__
++
+ static NS_IMETHODIMP LaunchWithURIImpl(RefPtr aInfo, nsIURI* aUri,
+ const char* aXDGToken = nullptr) {
+ GList uris = {0};
+@@ -412,6 +438,10 @@ static NS_IMETHODIMP LaunchWithURIImpl(RefPtr aInfo, nsIURI* aUri,
+ gboolean result = g_app_info_launch_uris_openbsd(
+ aInfo, spec.get(), GetLaunchContext(aXDGToken).get(),
+ getter_Transfers(error));
++#elif defined(__HAIKU__)
++ gboolean result = g_app_info_launch_uris_haiku(
++ aInfo, spec.get(), GetLaunchContext(aXDGToken).get(),
++ getter_Transfers(error));
+ #else
+ gboolean result = g_app_info_launch_uris(
+ aInfo, &uris, GetLaunchContext(aXDGToken).get(), getter_Transfers(error));
+@@ -802,6 +832,9 @@ static nsresult ShowURIImpl(nsIURI* aURI, const char* aXDGToken = nullptr) {
+ #ifdef __OpenBSD__
+ if (!g_app_info_launch_default_for_uri_openbsd(
+ spec.get(), GetLaunchContext(aXDGToken).get(),
++#elif defined(__HAIKU__)
++ if (!g_app_info_launch_default_for_uri_haiku(
++ spec.get(), GetLaunchContext(aXDGToken).get(),
+ #else
+ if (!g_app_info_launch_default_for_uri(spec.get(),
+ GetLaunchContext(aXDGToken).get(),
+@@ -837,6 +870,9 @@ static nsresult LaunchPathImpl(const nsACString& aPath,
+ #ifdef __OpenBSD__
+ g_app_info_launch_default_for_uri_openbsd(spec.get(),
+ GetLaunchContext(aXDGToken).get(),
++#elif defined(__HAIKU__)
++ g_app_info_launch_default_for_uri_haiku(spec.get(),
++ GetLaunchContext(aXDGToken).get(),
+ #else
+ g_app_info_launch_default_for_uri(spec.get(),
+ GetLaunchContext(aXDGToken).get(),
+diff --git a/toolkit/themes/shared/popup.css b/toolkit/themes/shared/popup.css
+index 648c65a..7263a13 100644
+--- a/toolkit/themes/shared/popup.css
++++ b/toolkit/themes/shared/popup.css
+@@ -49,6 +49,12 @@ panel {
+ --panel-border-radius: 0px !important;
+ }
+
++ /* Disable border-radius and shadow for Haiku popups */
++ @media (-moz-platform: linux) {
++ --panel-border-radius: 0px;
++ --panel-shadow-margin: 0px;
++ }
++
+ @media (-moz-platform: macos) {
+ appearance: auto;
+ -moz-default-appearance: menupopup;
+diff --git a/toolkit/xre/nsAppRunner.cpp b/toolkit/xre/nsAppRunner.cpp
+index 4a663a5..bcd9d96 100644
+--- a/toolkit/xre/nsAppRunner.cpp
++++ b/toolkit/xre/nsAppRunner.cpp
+@@ -344,14 +344,16 @@ MOZ_CONSTINIT nsString gProcessStartupShortcut;
+ # ifdef MOZ_WAYLAND
+ # include
+ # include "mozilla/widget/nsWaylandDisplay.h"
+-# include "wayland-proxy.h"
++# ifndef XP_HAIKU
++# include "wayland-proxy.h"
++# endif /* !XP_HAIKU */
+ # endif
+ # ifdef MOZ_X11
+ # include
+ # endif /* MOZ_X11 */
+ #endif
+
+-#if defined(MOZ_WAYLAND)
++#if defined(MOZ_WAYLAND) && !defined(XP_HAIKU)
+ MOZ_RUNINIT std::unique_ptr gWaylandProxy;
+ #endif
+
+@@ -431,6 +433,9 @@ static void UnexpectedExit() {
+
+ #if defined(MOZ_WAYLAND)
+ bool IsWaylandEnabled() {
++#ifdef XP_HAIKU
++ return true;
++#else
+ static bool isWaylandEnabled = []() {
+ const char* waylandDisplay = PR_GetEnv("WAYLAND_DISPLAY");
+ if (!waylandDisplay) {
+@@ -461,6 +466,7 @@ bool IsWaylandEnabled() {
+ return !gtk_check_version(3, 24, 30);
+ }();
+ return isWaylandEnabled;
++#endif // !XP_HAIKU
+ }
+ #else
+ bool IsWaylandEnabled() { return false; }
+@@ -3761,7 +3767,7 @@ class XREMain {
+ #endif
+ };
+
+-#if defined(XP_UNIX) && !defined(ANDROID)
++#if defined(XP_UNIX) && !defined(ANDROID) && !defined(XP_HAIKU)
+ static SmprintfPointer FormatUid(uid_t aId) {
+ if (const auto pw = getpwuid(aId)) {
+ return mozilla::Smprintf("%s", pw->pw_name);
+@@ -3810,7 +3816,7 @@ static bool CheckForUserMismatch() {
+ }
+ return false;
+ }
+-#else // !XP_UNIX || ANDROID
++#else // !XP_UNIX || ANDROID || XP_HAIKU
+ static bool CheckForUserMismatch() { return false; }
+ #endif
+
+@@ -4802,7 +4808,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) {
+ // display_name is owned by gdk.
+ display_name = gdk_get_display_arg_name();
+ bool waylandEnabled = IsWaylandEnabled();
+-# ifdef MOZ_WAYLAND
++# if defined(MOZ_WAYLAND) && !defined(XP_HAIKU)
+ if (!display_name) {
+ auto* proxyEnv = getenv("MOZ_DISABLE_WAYLAND_PROXY");
+ bool disableWaylandProxy = proxyEnv && *proxyEnv;
+@@ -4857,7 +4863,7 @@ int XREMain::XRE_mainStartup(bool* aExitFlag) {
+ } else {
+ gdk_display_manager_open_display(gdk_display_manager_get(), nullptr);
+ }
+-# if defined(MOZ_WAYLAND)
++# if defined(MOZ_WAYLAND) && !defined(XP_HAIKU)
+ // We want to use proxy for main connection only so
+ // restore original Wayland display for next potential Wayland connections
+ // from gfx probe code and so on.
+@@ -6139,7 +6145,9 @@ int XREMain::XRE_main(int argc, char* argv[], const BootstrapConfig& aConfig) {
+ if (!gfxPlatform::IsHeadless()) {
+ # ifdef MOZ_WAYLAND
+ WaylandDisplayRelease();
++# ifndef XP_HAIKU
+ gWaylandProxy = nullptr;
++# endif // !XP_HAIKU
+ # endif
+ }
+ #endif
+diff --git a/toolkit/xre/nsSigHandlers.cpp b/toolkit/xre/nsSigHandlers.cpp
+index 146a586..10b7fb6 100644
+--- a/toolkit/xre/nsSigHandlers.cpp
++++ b/toolkit/xre/nsSigHandlers.cpp
+@@ -43,7 +43,9 @@
+ # endif
+
+ # ifdef MOZ_WAYLAND
+-# include "wayland-proxy.h"
++# ifndef XP_HAIKU
++# include "wayland-proxy.h"
++# endif /* !XP_HAIKU */
+ # endif
+
+ // Note: some tests manipulate this value.
+@@ -180,7 +182,7 @@ static bool IsCrashyGtkMessage(const nsACString& aMessage) {
+ static void HandleGLibMessage(GLogLevelFlags aLogLevel,
+ const nsDependentCString& aMessage) {
+ if (MOZ_UNLIKELY(IsCrashyGtkMessage(aMessage))) {
+-# ifdef MOZ_WAYLAND
++# if defined(MOZ_WAYLAND) && !defined(XP_HAIKU)
+ MOZ_CRASH_UNSAFE_PRINTF(
+ "(%s) %s Proxy: %s",
+ mozilla::widget::GetDesktopEnvironmentIdentifier().get(),
+diff --git a/toolkit/xre/nsXREDirProvider.cpp b/toolkit/xre/nsXREDirProvider.cpp
+index 3b4612e..118fa5e 100644
+--- a/toolkit/xre/nsXREDirProvider.cpp
++++ b/toolkit/xre/nsXREDirProvider.cpp
+@@ -80,6 +80,10 @@
+ #ifdef XP_IOS
+ # include "UIKitDirProvider.h"
+ #endif
++#ifdef XP_HAIKU
++# include
++# include
++#endif
+
+ #if defined(XP_MACOSX)
+ # define APP_REGISTRY_NAME "Application Registry"
+@@ -365,7 +369,7 @@ nsXREDirProvider::GetFile(const char* aProperty, bool* aPersistent,
+ } else if (!strcmp(aProperty, XRE_USER_NATIVE_MANIFESTS)) {
+ rv = GetUserDataDirectoryHome(getter_AddRefs(file), false);
+ NS_ENSURE_SUCCESS(rv, rv);
+-# if defined(XP_MACOSX)
++# if defined(XP_MACOSX) || defined(XP_HAIKU)
+ rv = file->AppendNative("Mozilla"_ns);
+ # else // defined(XP_MACOSX)
+ rv = file->AppendNative(".mozilla"_ns);
+@@ -1081,6 +1085,12 @@ nsresult nsXREDirProvider::GetUserDataDirectoryHome(nsIFile** aFile,
+ NS_ENSURE_SUCCESS(rv, rv);
+
+ MOZ_TRY(NS_NewLocalFile(path, getter_AddRefs(localDir)));
++#elif defined(XP_HAIKU)
++ nsresult rv;
++ BPath settingsDir;
++ status_t status = find_directory(B_USER_SETTINGS_DIRECTORY, &settingsDir);
++ if (status != B_OK) return NS_ERROR_FAILURE;
++ rv = NS_NewNativeLocalFile(nsDependentCString(settingsDir.Path()), getter_AddRefs(localDir));
+ #elif defined(XP_UNIX)
+ const char* homeDir = getenv("HOME");
+ if (!homeDir || !*homeDir) return NS_ERROR_FAILURE;
+@@ -1190,7 +1200,7 @@ nsresult nsXREDirProvider::AppendSysUserExtensionPath(nsIFile* aFile) {
+
+ nsresult rv;
+
+-#if defined(XP_MACOSX) || defined(XP_WIN)
++#if defined(XP_MACOSX) || defined(XP_WIN) || defined(XP_HAIKU)
+
+ static const char* const sXR = "Mozilla";
+ rv = aFile->AppendNative(nsDependentCString(sXR));
+@@ -1249,7 +1259,7 @@ nsresult nsXREDirProvider::AppendProfilePath(nsIFile* aFile, bool aLocal) {
+ }
+ NS_ENSURE_SUCCESS(rv, rv);
+
+-#elif defined(XP_WIN)
++#elif defined(XP_WIN) || defined(XP_HAIKU)
+ if (!profile.IsEmpty()) {
+ rv = AppendProfileString(aFile, profile.get());
+ } else {
+diff --git a/tools/profiler/core/ProfilerUtils.cpp b/tools/profiler/core/ProfilerUtils.cpp
+index 4c53061..76d3561 100644
+--- a/tools/profiler/core/ProfilerUtils.cpp
++++ b/tools/profiler/core/ProfilerUtils.cpp
+@@ -88,6 +88,15 @@ ProfilerThreadId profiler_current_thread_id() {
+ return ProfilerThreadId::FromNativeId(id);
+ }
+
++// ------------------------------------------------------- Haiku
++# elif defined(XP_HAIKU)
++
++# include
++
++ProfilerThreadId profiler_current_thread_id() {
++ return ProfilerThreadId::FromNativeId(find_thread(NULL));
++}
++
+ // ------------------------------------------------------- Others
+ # else
+
+diff --git a/widget/gtk/moz.build b/widget/gtk/moz.build
+index fb086cf..1b1b941 100644
+--- a/widget/gtk/moz.build
++++ b/widget/gtk/moz.build
+@@ -23,7 +23,9 @@ if CONFIG["COMPILE_ENVIRONMENT"]:
+ DIRS += ["mozgtk"]
+
+ if CONFIG["MOZ_WAYLAND"]:
+- DIRS += ["wayland", "mozwayland", "../../third_party/wayland-proxy"]
++ DIRS += ["wayland", "mozwayland"]
++ if CONFIG["OS_ARCH"] != "Haiku":
++ DIRS += ["../../third_party/wayland-proxy"]
+
+ if CONFIG["MOZ_ENABLE_VAAPI"]:
+ DIRS += ["vaapitest"]
+diff --git a/widget/gtk/nsWaylandDisplay.cpp b/widget/gtk/nsWaylandDisplay.cpp
+index 8cfcdce..383e2af 100644
+--- a/widget/gtk/nsWaylandDisplay.cpp
++++ b/widget/gtk/nsWaylandDisplay.cpp
+@@ -20,7 +20,9 @@
+ #include "WidgetUtilsGtk.h"
+ #include "nsGtkKeyUtils.h"
+ #include "nsWindow.h"
+-#include "wayland-proxy.h"
++#ifndef XP_HAIKU
++# include "wayland-proxy.h"
++#endif /* !XP_HAIKU */
+
+ namespace mozilla::widget {
+
+@@ -247,6 +249,7 @@ static const struct moz_wl_pointer_listener pointer_listener = {
+ };
+
+ void nsWaylandDisplay::SetPointer(wl_pointer* aPointer) {
++#ifndef XP_HAIKU
+ // Don't even try on such old interface
+ if (wl_proxy_get_version((struct wl_proxy*)aPointer) <
+ WL_POINTER_RELEASE_SINCE_VERSION) {
+@@ -271,6 +274,7 @@ void nsWaylandDisplay::SetPointer(wl_pointer* aPointer) {
+ zwp_pointer_gesture_hold_v1_add_listener(mPointerGestureHold,
+ &gesture_hold_listener, this);
+ }
++#endif
+ }
+
+ void nsWaylandDisplay::RemovePointer() {
+@@ -619,19 +623,22 @@ static void WlLogHandler(const char* format, va_list args) {
+ if (strstr(error, "still attached")) {
+ return;
+ }
+-
++#ifndef XP_HAIKU
+ MOZ_CRASH_UNSAFE_PRINTF("(%s) %s Proxy: %s",
+ GetDesktopEnvironmentIdentifier().get(), error,
+ WaylandProxy::GetState());
++#endif
+ }
+
+ void WlCompositorCrashHandler() {
++#ifndef XP_HAIKU
+ gfxCriticalNote << "Wayland protocol error: Compositor ("
+ << GetDesktopEnvironmentIdentifier().get()
+ << ") crashed, proxy: " << WaylandProxy::GetState();
+ MOZ_CRASH_UNSAFE_PRINTF("Compositor crashed (%s) proxy: %s",
+ GetDesktopEnvironmentIdentifier().get(),
+ WaylandProxy::GetState());
++#endif
+ }
+
+ nsWaylandDisplay::nsWaylandDisplay(wl_display* aDisplay)
+diff --git a/xpcom/base/nsSystemInfo.cpp b/xpcom/base/nsSystemInfo.cpp
+index 033e951..39463db 100644
+--- a/xpcom/base/nsSystemInfo.cpp
++++ b/xpcom/base/nsSystemInfo.cpp
+@@ -81,6 +81,10 @@
+ # include "mozilla/SandboxInfo.h"
+ #endif
+
++#ifdef XP_HAIKU
++# include
++#endif
++
+ // Slot for NS_InitXPCOM to pass information to nsSystemInfo::Init.
+ // Only set to nonzero (potentially) if XP_UNIX. On such systems, the
+ // system call to discover the appropriate value is not thread-safe,
+@@ -1366,7 +1370,15 @@ nsresult nsSystemInfo::Init() {
+ SetInt32Property(u"pagesize"_ns, PR_GetPageSize());
+ SetInt32Property(u"pageshift"_ns, PR_GetPageShift());
+ SetInt32Property(u"memmapalign"_ns, PR_GetMemMapAlignment());
++#ifdef XP_HAIKU
++ { // workaround
++ system_info info;
++ get_system_info(&info);
++ SetUint64Property(u"memsize"_ns, info.max_pages * B_PAGE_SIZE);
++ }
++#else
+ SetUint64Property(u"memsize"_ns, PR_GetPhysicalMemorySize());
++#endif
+ SetUint32Property(u"umask"_ns, nsSystemInfo::gUserUmask);
+
+ #ifdef HAVE_64BIT_BUILD
+diff --git a/xpcom/build/BinaryPath.h b/xpcom/build/BinaryPath.h
+index 1718caa..64de0b2 100644
+--- a/xpcom/build/BinaryPath.h
++++ b/xpcom/build/BinaryPath.h
+@@ -24,6 +24,10 @@
+ #if defined(__OpenBSD__)
+ # include
+ #endif
++#if defined(XP_HAIKU)
++# include
++# include
++#endif
+ #include "mozilla/UniquePtr.h"
+ #include "mozilla/UniquePtrExtensions.h"
+
+@@ -273,6 +277,21 @@ class BinaryPath {
+ return NS_ERROR_FAILURE;
+ }
+
++#elif defined(XP_HAIKU)
++ static nsresult Get(char aResult[MAXPATHLEN]) {
++ image_info info;
++ int32 cookie = 0;
++
++ while (get_next_image_info(B_CURRENT_TEAM, &cookie, &info) >= B_OK) {
++ if (info.type == B_APP_IMAGE) {
++ strlcpy(aResult, info.name, MAXPATHLEN - 1);
++ return NS_OK;
++ }
++ }
++
++ return NS_ERROR_FAILURE;
++ }
++
+ #else
+ # error Oops, you need platform-specific code here
+ #endif
+diff --git a/xpcom/reflect/xptcall/md/unix/moz.build b/xpcom/reflect/xptcall/md/unix/moz.build
+index 6b566f9..2895ad9 100644
+--- a/xpcom/reflect/xptcall/md/unix/moz.build
++++ b/xpcom/reflect/xptcall/md/unix/moz.build
+@@ -33,6 +33,7 @@ if CONFIG["OS_ARCH"] in (
+ "Bitrig",
+ "DragonFly",
+ "FreeBSD",
++ "Haiku",
+ "NetBSD",
+ "OpenBSD",
+ "SunOS",
+diff --git a/xpcom/threads/nsProcessCommon.cpp b/xpcom/threads/nsProcessCommon.cpp
+index dbd9993..1431340 100644
+--- a/xpcom/threads/nsProcessCommon.cpp
++++ b/xpcom/threads/nsProcessCommon.cpp
+@@ -43,7 +43,11 @@
+ # include "base/process_util.h"
+ # endif
+ # include
+-# include
++# ifdef XP_HAIKU
++# include
++# else
++# include
++# endif
+ # endif
+ # include
+ # include
+--
+2.48.1
+