Compare commits

...

6 Commits

Author SHA1 Message Date
bjorn 31d49fe8c6 When graphics module is destroyed, stop XR session;
Terrible, but better.
2022-08-08 23:27:35 -07:00
bjorn 3c71828afa Revert "Change the way modules are destroyed;"
This reverts commit 019814e2c1.
2022-08-08 23:16:34 -07:00
bjorn 0436a5deae Rework automipmapping;
The sync was totally wrong here.  It's a bit better now.  However there
are some general sync issues that need to be fixed.  Basically a Pass
that does reads and writes or multiple writes doesn't work properly, for
various reasons.  I think sync needs to be split into 2 phases -- first
process all the reads and merge barrier bits into the barrier of the
last writer, then process all the writes and set 'final' resource state
for stuff in the pass.  Due to branch prediction it may be better to
have 2 separate lists -- one for reads and one for writes.  And I'm not
100% sure on how to reconcile a Pass that is doing reads and writes to
the same resource yet, still thinking about it.
2022-08-08 21:26:07 -07:00
bjorn 6d6e79e704 Recompile nogame shader;
Need to automate better, but later
2022-08-08 20:46:27 -07:00
bjorn bf2f5a398c Fix defaultMaterial; 2022-08-08 20:40:57 -07:00
bjorn f310a7ad04 gpu_bind_bundles;
Now you can bind multiple bundles at once.
2022-08-08 20:36:22 -07:00
19 changed files with 727 additions and 598 deletions

View File

@ -43,341 +43,448 @@ function lovr.load()
]])
]=]
logo = lovr.graphics.newShader({
0x07230203,0x00010300,0x0008000a,0x00000064,0x00000000,0x00020011,0x00000001,0x00020011,
0x0000114b,0x00020011,0x00001157,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,
0x00000000,0x0003000e,0x00000000,0x00000001,0x0010000f,0x00000000,0x00000004,0x6e69616d,
0x00000000,0x00000009,0x00000015,0x0000001c,0x00000021,0x00000030,0x00000036,0x00000038,
0x0000003e,0x00000045,0x0000004d,0x00000063,0x00030003,0x00000002,0x000001cc,0x00060004,
logo = logo or lovr.graphics.newShader({
0x07230203,0x00010000,0x0008000a,0x00000093,0x00000000,0x00020011,0x00000001,0x00020011,
0x0000114b,0x00020011,0x00001157,0x0006000a,0x5f565053,0x5f52484b,0x746c756d,0x65697669,
0x00000077,0x0009000a,0x5f565053,0x5f52484b,0x64616873,0x645f7265,0x5f776172,0x61726170,
0x6574656d,0x00007372,0x0006000b,0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,
0x0003000e,0x00000000,0x00000001,0x0011000f,0x00000000,0x00000004,0x6e69616d,0x00000000,
0x0000000d,0x00000019,0x0000001f,0x00000026,0x00000034,0x00000038,0x00000039,0x00000049,
0x0000004b,0x00000051,0x0000006e,0x00000092,0x00030003,0x00000002,0x000001cc,0x00060004,
0x455f4c47,0x6d5f5458,0x69746c75,0x77656976,0x00000000,0x000a0004,0x475f4c47,0x4c474f4f,
0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,
0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005,
0x00000004,0x6e69616d,0x00000000,0x00040005,0x00000009,0x6f6c6f43,0x00000072,0x00040005,
0x0000000b,0x77617244,0x00000000,0x00060006,0x0000000b,0x00000000,0x6e617274,0x726f6673,
0x0000006d,0x00070006,0x0000000b,0x00000001,0x6d726f6e,0x614d6c61,0x78697274,0x00000000,
0x00050006,0x0000000b,0x00000002,0x6f6c6f63,0x00000072,0x00050005,0x0000000f,0x77617244,
0x66667542,0x00007265,0x00050006,0x0000000f,0x00000000,0x77617244,0x00000073,0x00030005,
0x00000011,0x00000000,0x00060005,0x00000015,0x425f6c67,0x49657361,0x6174736e,0x0065636e,
0x00050005,0x0000001c,0x74726556,0x6f437865,0x00726f6c,0x00040005,0x00000021,0x6d726f4e,
0x00006c61,0x00060005,0x00000030,0x74726556,0x6f4e7865,0x6c616d72,0x00000000,0x00030005,
0x00000036,0x00005655,0x00050005,0x00000038,0x74726556,0x56557865,0x00000000,0x00060005,
0x0000003c,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,0x0000003c,0x00000000,
0x505f6c67,0x7469736f,0x006e6f69,0x00070006,0x0000003c,0x00000001,0x505f6c67,0x746e696f,
0x657a6953,0x00000000,0x00070006,0x0000003c,0x00000002,0x435f6c67,0x4470696c,0x61747369,
0x0065636e,0x00070006,0x0000003c,0x00000003,0x435f6c67,0x446c6c75,0x61747369,0x0065636e,
0x00030005,0x0000003e,0x00000000,0x00040005,0x0000003f,0x656d6143,0x00006172,0x00050006,
0x0000003f,0x00000000,0x77656976,0x00000000,0x00060006,0x0000003f,0x00000001,0x6a6f7270,
0x69746365,0x00006e6f,0x00070006,0x0000003f,0x00000002,0x77656976,0x6a6f7250,0x69746365,
0x00006e6f,0x00080006,0x0000003f,0x00000003,0x65766e69,0x50657372,0x656a6f72,0x6f697463,
0x0000006e,0x00060005,0x00000042,0x656d6143,0x75426172,0x72656666,0x00000000,0x00050006,
0x00000042,0x00000000,0x656d6143,0x00736172,0x00030005,0x00000044,0x00000000,0x00060005,
0x00000045,0x565f6c67,0x49776569,0x7865646e,0x00000000,0x00060005,0x0000004d,0x74726556,
0x6f507865,0x69746973,0x00006e6f,0x00040005,0x00000056,0x706d6153,0x0072656c,0x00060005,
0x00000057,0x6574614d,0x6c616972,0x66667542,0x00007265,0x00070006,0x00000057,0x00000000,
0x6574614d,0x6c616972,0x6f6c6f43,0x00000072,0x00060006,0x00000057,0x00000001,0x776f6c47,
0x6f6c6f43,0x00000072,0x00050006,0x00000057,0x00000002,0x68535655,0x00746669,0x00050006,
0x00000057,0x00000003,0x63535655,0x00656c61,0x00060006,0x00000057,0x00000004,0x52464453,
0x65676e61,0x00000000,0x00060006,0x00000057,0x00000005,0x6174654d,0x73656e6c,0x00000073,
0x00060006,0x00000057,0x00000006,0x67756f52,0x73656e68,0x00000073,0x00060006,0x00000057,
0x00000007,0x61656c43,0x616f6372,0x00000074,0x00080006,0x00000057,0x00000008,0x61656c43,
0x616f6372,0x756f5274,0x656e6867,0x00007373,0x00080006,0x00000057,0x00000009,0x6c63634f,
0x6f697375,0x7274536e,0x74676e65,0x00000068,0x00070006,0x00000057,0x0000000a,0x776f6c47,
0x65727453,0x6874676e,0x00000000,0x00060006,0x00000057,0x0000000b,0x6d726f4e,0x63536c61,
0x00656c61,0x00060006,0x00000057,0x0000000c,0x68706c41,0x74754361,0x0066666f,0x00060006,
0x00000057,0x0000000d,0x6e696f50,0x7a695374,0x00000065,0x00030005,0x00000059,0x00000000,
0x00060005,0x0000005c,0x6f6c6f43,0x78655472,0x65727574,0x00000000,0x00050005,0x0000005d,
0x776f6c47,0x74786554,0x00657275,0x00070005,0x0000005e,0x6c63634f,0x6f697375,0x7865546e,
0x65727574,0x00000000,0x00070005,0x0000005f,0x6174654d,0x73656e6c,0x78655473,0x65727574,
0x00000000,0x00070005,0x00000060,0x67756f52,0x73656e68,0x78655473,0x65727574,0x00000000,
0x00070005,0x00000061,0x61656c43,0x616f6372,0x78655474,0x65727574,0x00000000,0x00060005,
0x00000062,0x6d726f4e,0x65546c61,0x72757478,0x00000065,0x00060005,0x00000063,0x74726556,
0x61547865,0x6e65676e,0x00000074,0x00040047,0x00000009,0x0000001e,0x0000000b,0x00040048,
0x0000000b,0x00000000,0x00000005,0x00050048,0x0000000b,0x00000000,0x00000023,0x00000000,
0x00050048,0x0000000b,0x00000000,0x00000007,0x00000010,0x00040048,0x0000000b,0x00000001,
0x00000005,0x00050048,0x0000000b,0x00000001,0x00000023,0x00000040,0x00050048,0x0000000b,
0x00000001,0x00000007,0x00000010,0x00050048,0x0000000b,0x00000002,0x00000023,0x00000080,
0x00040047,0x0000000e,0x00000006,0x00000090,0x00050048,0x0000000f,0x00000000,0x00000023,
0x00000000,0x00030047,0x0000000f,0x00000002,0x00040047,0x00000011,0x00000022,0x00000000,
0x00040047,0x00000011,0x00000021,0x00000001,0x00040047,0x00000015,0x0000000b,0x00001149,
0x00040047,0x0000001c,0x0000001e,0x0000000d,0x00040047,0x00000021,0x0000001e,0x0000000a,
0x00040047,0x00000030,0x0000001e,0x0000000b,0x00040047,0x00000036,0x0000001e,0x0000000c,
0x00040047,0x00000038,0x0000001e,0x0000000c,0x00050048,0x0000003c,0x00000000,0x0000000b,
0x00000000,0x00050048,0x0000003c,0x00000001,0x0000000b,0x00000001,0x00050048,0x0000003c,
0x00000002,0x0000000b,0x00000003,0x00050048,0x0000003c,0x00000003,0x0000000b,0x00000004,
0x00030047,0x0000003c,0x00000002,0x00040048,0x0000003f,0x00000000,0x00000005,0x00050048,
0x0000003f,0x00000000,0x00000023,0x00000000,0x00050048,0x0000003f,0x00000000,0x00000007,
0x00000010,0x00040048,0x0000003f,0x00000001,0x00000005,0x00050048,0x0000003f,0x00000001,
0x00000023,0x00000040,0x00050048,0x0000003f,0x00000001,0x00000007,0x00000010,0x00040048,
0x0000003f,0x00000002,0x00000005,0x00050048,0x0000003f,0x00000002,0x00000023,0x00000080,
0x00050048,0x0000003f,0x00000002,0x00000007,0x00000010,0x00040048,0x0000003f,0x00000003,
0x00000005,0x00050048,0x0000003f,0x00000003,0x00000023,0x000000c0,0x00050048,0x0000003f,
0x00000003,0x00000007,0x00000010,0x00040047,0x00000041,0x00000006,0x00000100,0x00050048,
0x00000042,0x00000000,0x00000023,0x00000000,0x00030047,0x00000042,0x00000002,0x00040047,
0x00000044,0x00000022,0x00000000,0x00040047,0x00000044,0x00000021,0x00000000,0x00040047,
0x00000045,0x0000000b,0x00001158,0x00040047,0x0000004d,0x0000001e,0x0000000a,0x00040047,
0x00000056,0x00000022,0x00000000,0x00040047,0x00000056,0x00000021,0x00000002,0x00050048,
0x00000057,0x00000000,0x00000023,0x00000000,0x00050048,0x00000057,0x00000001,0x00000023,
0x00000010,0x00050048,0x00000057,0x00000002,0x00000023,0x00000020,0x00050048,0x00000057,
0x00000003,0x00000023,0x00000028,0x00050048,0x00000057,0x00000004,0x00000023,0x00000030,
0x00050048,0x00000057,0x00000005,0x00000023,0x00000038,0x00050048,0x00000057,0x00000006,
0x00000023,0x0000003c,0x00050048,0x00000057,0x00000007,0x00000023,0x00000040,0x00050048,
0x00000057,0x00000008,0x00000023,0x00000044,0x00050048,0x00000057,0x00000009,0x00000023,
0x00000048,0x00050048,0x00000057,0x0000000a,0x00000023,0x0000004c,0x00050048,0x00000057,
0x0000000b,0x00000023,0x00000050,0x00050048,0x00000057,0x0000000c,0x00000023,0x00000054,
0x00050048,0x00000057,0x0000000d,0x00000023,0x00000058,0x00030047,0x00000057,0x00000002,
0x00040047,0x00000059,0x00000022,0x00000001,0x00040047,0x00000059,0x00000021,0x00000000,
0x00040047,0x0000005c,0x00000022,0x00000001,0x00040047,0x0000005c,0x00000021,0x00000001,
0x00040047,0x0000005d,0x00000022,0x00000001,0x00040047,0x0000005d,0x00000021,0x00000002,
0x00040047,0x0000005e,0x00000022,0x00000001,0x00040047,0x0000005e,0x00000021,0x00000003,
0x00040047,0x0000005f,0x00000022,0x00000001,0x00040047,0x0000005f,0x00000021,0x00000004,
0x00040047,0x00000060,0x00000022,0x00000001,0x00040047,0x00000060,0x00000021,0x00000005,
0x00040047,0x00000061,0x00000022,0x00000001,0x00040047,0x00000061,0x00000021,0x00000006,
0x00040047,0x00000062,0x00000022,0x00000001,0x00040047,0x00000062,0x00000021,0x00000007,
0x00040047,0x00000063,0x0000001e,0x0000000e,0x00020013,0x00000002,0x00030021,0x00000003,
0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,0x00000007,0x00000006,0x00000004,
0x00040020,0x00000008,0x00000003,0x00000007,0x0004003b,0x00000008,0x00000009,0x00000003,
0x00040018,0x0000000a,0x00000007,0x00000004,0x0005001e,0x0000000b,0x0000000a,0x0000000a,
0x00000007,0x00040015,0x0000000c,0x00000020,0x00000000,0x0004002b,0x0000000c,0x0000000d,
0x00000100,0x0004001c,0x0000000e,0x0000000b,0x0000000d,0x0003001e,0x0000000f,0x0000000e,
0x00040020,0x00000010,0x00000002,0x0000000f,0x0004003b,0x00000010,0x00000011,0x00000002,
0x00040015,0x00000012,0x00000020,0x00000001,0x0004002b,0x00000012,0x00000013,0x00000000,
0x00040020,0x00000014,0x00000001,0x00000012,0x0004003b,0x00000014,0x00000015,0x00000001,
0x0004002b,0x00000012,0x00000017,0x00000002,0x00040020,0x00000018,0x00000002,0x00000007,
0x00040020,0x0000001b,0x00000001,0x00000007,0x0004003b,0x0000001b,0x0000001c,0x00000001,
0x00040017,0x0000001f,0x00000006,0x00000003,0x00040020,0x00000020,0x00000003,0x0000001f,
0x0004003b,0x00000020,0x00000021,0x00000003,0x0004002b,0x00000012,0x00000023,0x00000001,
0x00040020,0x00000024,0x00000002,0x0000000a,0x00040018,0x00000027,0x0000001f,0x00000003,
0x00040020,0x0000002f,0x00000001,0x0000001f,0x0004003b,0x0000002f,0x00000030,0x00000001,
0x00040017,0x00000034,0x00000006,0x00000002,0x00040020,0x00000035,0x00000003,0x00000034,
0x0004003b,0x00000035,0x00000036,0x00000003,0x00040020,0x00000037,0x00000001,0x00000034,
0x0004003b,0x00000037,0x00000038,0x00000001,0x0004002b,0x0000000c,0x0000003a,0x00000001,
0x0004001c,0x0000003b,0x00000006,0x0000003a,0x0006001e,0x0000003c,0x00000007,0x00000006,
0x0000003b,0x0000003b,0x00040020,0x0000003d,0x00000003,0x0000003c,0x0004003b,0x0000003d,
0x0000003e,0x00000003,0x0006001e,0x0000003f,0x0000000a,0x0000000a,0x0000000a,0x0000000a,
0x0004002b,0x0000000c,0x00000040,0x00000006,0x0004001c,0x00000041,0x0000003f,0x00000040,
0x0003001e,0x00000042,0x00000041,0x00040020,0x00000043,0x00000002,0x00000042,0x0004003b,
0x00000043,0x00000044,0x00000002,0x0004003b,0x00000014,0x00000045,0x00000001,0x0004003b,
0x0000001b,0x0000004d,0x00000001,0x0004002b,0x00000006,0x00000051,0x3f800000,0x00040020,
0x00000052,0x00000003,0x00000006,0x0002001a,0x00000054,0x00040020,0x00000055,0x00000000,
0x00000054,0x0004003b,0x00000055,0x00000056,0x00000000,0x0010001e,0x00000057,0x00000007,
0x00000007,0x00000034,0x00000034,0x00000034,0x00000006,0x00000006,0x00000006,0x00000006,
0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00040020,0x00000058,0x00000002,
0x00000057,0x0004003b,0x00000058,0x00000059,0x00000002,0x00090019,0x0000005a,0x00000006,
0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x0000005b,
0x00000000,0x0000005a,0x0004003b,0x0000005b,0x0000005c,0x00000000,0x0004003b,0x0000005b,
0x0000005d,0x00000000,0x0004003b,0x0000005b,0x0000005e,0x00000000,0x0004003b,0x0000005b,
0x0000005f,0x00000000,0x0004003b,0x0000005b,0x00000060,0x00000000,0x0004003b,0x0000005b,
0x00000061,0x00000000,0x0004003b,0x0000005b,0x00000062,0x00000000,0x0004003b,0x0000002f,
0x00000063,0x00000001,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,0x000200f8,
0x00000005,0x0004003d,0x00000012,0x00000016,0x00000015,0x00070041,0x00000018,0x00000019,
0x00000011,0x00000013,0x00000016,0x00000017,0x0004003d,0x00000007,0x0000001a,0x00000019,
0x0004003d,0x00000007,0x0000001d,0x0000001c,0x00050085,0x00000007,0x0000001e,0x0000001a,
0x0000001d,0x0003003e,0x00000009,0x0000001e,0x0004003d,0x00000012,0x00000022,0x00000015,
0x00070041,0x00000024,0x00000025,0x00000011,0x00000013,0x00000022,0x00000023,0x0004003d,
0x0000000a,0x00000026,0x00000025,0x00050051,0x00000007,0x00000028,0x00000026,0x00000000,
0x0008004f,0x0000001f,0x00000029,0x00000028,0x00000028,0x00000000,0x00000001,0x00000002,
0x00050051,0x00000007,0x0000002a,0x00000026,0x00000001,0x0008004f,0x0000001f,0x0000002b,
0x0000002a,0x0000002a,0x00000000,0x00000001,0x00000002,0x00050051,0x00000007,0x0000002c,
0x00000026,0x00000002,0x0008004f,0x0000001f,0x0000002d,0x0000002c,0x0000002c,0x00000000,
0x00000001,0x00000002,0x00060050,0x00000027,0x0000002e,0x00000029,0x0000002b,0x0000002d,
0x0004003d,0x0000001f,0x00000031,0x00000030,0x00050091,0x0000001f,0x00000032,0x0000002e,
0x00000031,0x0006000c,0x0000001f,0x00000033,0x00000001,0x00000045,0x00000032,0x0003003e,
0x00000021,0x00000033,0x0004003d,0x00000034,0x00000039,0x00000038,0x0003003e,0x00000036,
0x00000039,0x0004003d,0x00000012,0x00000046,0x00000045,0x00070041,0x00000024,0x00000047,
0x00000044,0x00000013,0x00000046,0x00000017,0x0004003d,0x0000000a,0x00000048,0x00000047,
0x0004003d,0x00000012,0x00000049,0x00000015,0x00070041,0x00000024,0x0000004a,0x00000011,
0x00000013,0x00000049,0x00000013,0x0004003d,0x0000000a,0x0000004b,0x0000004a,0x00050092,
0x0000000a,0x0000004c,0x00000048,0x0000004b,0x0004003d,0x00000007,0x0000004e,0x0000004d,
0x00050091,0x00000007,0x0000004f,0x0000004c,0x0000004e,0x00050041,0x00000008,0x00000050,
0x0000003e,0x00000013,0x0003003e,0x00000050,0x0000004f,0x00050041,0x00000052,0x00000053,
0x0000003e,0x00000023,0x0003003e,0x00000053,0x00000051,0x000100fd,0x00010038
0x00000004,0x6e69616d,0x00000000,0x00050005,0x00000009,0x72766f6c,0x6e69616d,0x00000028,
0x00060005,0x0000000d,0x69736f50,0x6e6f6974,0x6c726f57,0x00000064,0x00040005,0x0000000f,
0x77617244,0x00000000,0x00060006,0x0000000f,0x00000000,0x6e617274,0x726f6673,0x0000006d,
0x00070006,0x0000000f,0x00000001,0x6d726f6e,0x614d6c61,0x78697274,0x00000000,0x00050006,
0x0000000f,0x00000002,0x6f6c6f63,0x00000072,0x00050005,0x00000013,0x77617244,0x66667542,
0x00007265,0x00050006,0x00000013,0x00000000,0x77617244,0x00000073,0x00030005,0x00000015,
0x00000000,0x00060005,0x00000019,0x425f6c67,0x49657361,0x6174736e,0x0065636e,0x00060005,
0x0000001f,0x74726556,0x6f507865,0x69746973,0x00006e6f,0x00040005,0x00000026,0x6d726f4e,
0x00006c61,0x00060005,0x00000034,0x74726556,0x6f4e7865,0x6c616d72,0x00000000,0x00040005,
0x00000038,0x6f6c6f43,0x00000072,0x00050005,0x00000039,0x74726556,0x6f437865,0x00726f6c,
0x00060005,0x0000003c,0x6574614d,0x6c616972,0x66667542,0x00007265,0x00050006,0x0000003c,
0x00000000,0x6f6c6f63,0x00000072,0x00050006,0x0000003c,0x00000001,0x776f6c67,0x00000000,
0x00050006,0x0000003c,0x00000002,0x68537675,0x00746669,0x00050006,0x0000003c,0x00000003,
0x63537675,0x00656c61,0x00060006,0x0000003c,0x00000004,0x52666473,0x65676e61,0x00000000,
0x00060006,0x0000003c,0x00000005,0x6174656d,0x73656e6c,0x00000073,0x00060006,0x0000003c,
0x00000006,0x67756f72,0x73656e68,0x00000073,0x00060006,0x0000003c,0x00000007,0x61656c63,
0x616f6372,0x00000074,0x00080006,0x0000003c,0x00000008,0x61656c63,0x616f6372,0x756f5274,
0x656e6867,0x00007373,0x00080006,0x0000003c,0x00000009,0x6c63636f,0x6f697375,0x7274536e,
0x74676e65,0x00000068,0x00060006,0x0000003c,0x0000000a,0x6d726f6e,0x63536c61,0x00656c61,
0x00060006,0x0000003c,0x0000000b,0x68706c61,0x74754361,0x0066666f,0x00060006,0x0000003c,
0x0000000c,0x6e696f70,0x7a695374,0x00000065,0x00050005,0x0000003e,0x6574614d,0x6c616972,
0x00000000,0x00030005,0x00000049,0x00005655,0x00050005,0x0000004b,0x74726556,0x56557865,
0x00000000,0x00060005,0x0000004f,0x505f6c67,0x65567265,0x78657472,0x00000000,0x00060006,
0x0000004f,0x00000000,0x505f6c67,0x7469736f,0x006e6f69,0x00070006,0x0000004f,0x00000001,
0x505f6c67,0x746e696f,0x657a6953,0x00000000,0x00070006,0x0000004f,0x00000002,0x435f6c67,
0x4470696c,0x61747369,0x0065636e,0x00070006,0x0000004f,0x00000003,0x435f6c67,0x446c6c75,
0x61747369,0x0065636e,0x00030005,0x00000051,0x00000000,0x00070005,0x0000005b,0x62616e65,
0x5655656c,0x6e617254,0x726f6673,0x0000006d,0x00040005,0x00000068,0x656d6143,0x00006172,
0x00050006,0x00000068,0x00000000,0x77656976,0x00000000,0x00060006,0x00000068,0x00000001,
0x6a6f7270,0x69746365,0x00006e6f,0x00070006,0x00000068,0x00000002,0x77656976,0x6a6f7250,
0x69746365,0x00006e6f,0x00080006,0x00000068,0x00000003,0x65766e69,0x50657372,0x656a6f72,
0x6f697463,0x0000006e,0x00060005,0x0000006b,0x656d6143,0x75426172,0x72656666,0x00000000,
0x00050006,0x0000006b,0x00000000,0x656d6143,0x00736172,0x00030005,0x0000006d,0x00000000,
0x00060005,0x0000006e,0x565f6c67,0x49776569,0x7865646e,0x00000000,0x00070005,0x0000007a,
0x62616e65,0x6c41656c,0x43616870,0x666f7475,0x00000066,0x00050005,0x0000007b,0x62616e65,
0x6c47656c,0x0000776f,0x00060005,0x0000007c,0x43657375,0x726f6c6f,0x74786554,0x00657275,
0x00060005,0x0000007d,0x47657375,0x54776f6c,0x75747865,0x00006572,0x00070005,0x0000007e,
0x4d657375,0x6c617465,0x7373656e,0x74786554,0x00657275,0x00070005,0x0000007f,0x52657375,
0x6867756f,0x7373656e,0x74786554,0x00657275,0x00070005,0x00000080,0x4f657375,0x756c6363,
0x6e6f6973,0x74786554,0x00657275,0x00070005,0x00000081,0x43657375,0x7261656c,0x74616f63,
0x74786554,0x00657275,0x00070005,0x00000082,0x4e657375,0x616d726f,0x7865546c,0x65727574,
0x00000000,0x00040005,0x00000083,0x626f6c47,0x00736c61,0x00060006,0x00000083,0x00000000,
0x6f736552,0x6974756c,0x00006e6f,0x00050006,0x00000083,0x00000001,0x656d6954,0x00000000,
0x00030005,0x00000085,0x00000000,0x00040005,0x00000088,0x706d6153,0x0072656c,0x00060005,
0x0000008b,0x6f6c6f43,0x78655472,0x65727574,0x00000000,0x00050005,0x0000008c,0x776f6c47,
0x74786554,0x00657275,0x00070005,0x0000008d,0x6c63634f,0x6f697375,0x7865546e,0x65727574,
0x00000000,0x00070005,0x0000008e,0x6174654d,0x73656e6c,0x78655473,0x65727574,0x00000000,
0x00070005,0x0000008f,0x67756f52,0x73656e68,0x78655473,0x65727574,0x00000000,0x00070005,
0x00000090,0x61656c43,0x616f6372,0x78655474,0x65727574,0x00000000,0x00060005,0x00000091,
0x6d726f4e,0x65546c61,0x72757478,0x00000065,0x00060005,0x00000092,0x74726556,0x61547865,
0x6e65676e,0x00000074,0x00040047,0x0000000d,0x0000001e,0x0000000a,0x00040048,0x0000000f,
0x00000000,0x00000005,0x00050048,0x0000000f,0x00000000,0x00000023,0x00000000,0x00050048,
0x0000000f,0x00000000,0x00000007,0x00000010,0x00040048,0x0000000f,0x00000001,0x00000005,
0x00050048,0x0000000f,0x00000001,0x00000023,0x00000040,0x00050048,0x0000000f,0x00000001,
0x00000007,0x00000010,0x00050048,0x0000000f,0x00000002,0x00000023,0x00000080,0x00040047,
0x00000012,0x00000006,0x00000090,0x00050048,0x00000013,0x00000000,0x00000023,0x00000000,
0x00030047,0x00000013,0x00000002,0x00040047,0x00000015,0x00000022,0x00000000,0x00040047,
0x00000015,0x00000021,0x00000002,0x00040047,0x00000019,0x0000000b,0x00001149,0x00040047,
0x0000001f,0x0000001e,0x0000000a,0x00040047,0x00000026,0x0000001e,0x0000000b,0x00040047,
0x00000034,0x0000001e,0x0000000b,0x00040047,0x00000038,0x0000001e,0x0000000c,0x00040047,
0x00000039,0x0000001e,0x0000000d,0x00050048,0x0000003c,0x00000000,0x00000023,0x00000000,
0x00050048,0x0000003c,0x00000001,0x00000023,0x00000010,0x00050048,0x0000003c,0x00000002,
0x00000023,0x00000020,0x00050048,0x0000003c,0x00000003,0x00000023,0x00000028,0x00050048,
0x0000003c,0x00000004,0x00000023,0x00000030,0x00050048,0x0000003c,0x00000005,0x00000023,
0x00000038,0x00050048,0x0000003c,0x00000006,0x00000023,0x0000003c,0x00050048,0x0000003c,
0x00000007,0x00000023,0x00000040,0x00050048,0x0000003c,0x00000008,0x00000023,0x00000044,
0x00050048,0x0000003c,0x00000009,0x00000023,0x00000048,0x00050048,0x0000003c,0x0000000a,
0x00000023,0x0000004c,0x00050048,0x0000003c,0x0000000b,0x00000023,0x00000050,0x00050048,
0x0000003c,0x0000000c,0x00000023,0x00000054,0x00030047,0x0000003c,0x00000002,0x00040047,
0x0000003e,0x00000022,0x00000001,0x00040047,0x0000003e,0x00000021,0x00000000,0x00040047,
0x00000049,0x0000001e,0x0000000d,0x00040047,0x0000004b,0x0000001e,0x0000000c,0x00050048,
0x0000004f,0x00000000,0x0000000b,0x00000000,0x00050048,0x0000004f,0x00000001,0x0000000b,
0x00000001,0x00050048,0x0000004f,0x00000002,0x0000000b,0x00000003,0x00050048,0x0000004f,
0x00000003,0x0000000b,0x00000004,0x00030047,0x0000004f,0x00000002,0x00040047,0x0000005b,
0x00000001,0x000003e8,0x00040048,0x00000068,0x00000000,0x00000005,0x00050048,0x00000068,
0x00000000,0x00000023,0x00000000,0x00050048,0x00000068,0x00000000,0x00000007,0x00000010,
0x00040048,0x00000068,0x00000001,0x00000005,0x00050048,0x00000068,0x00000001,0x00000023,
0x00000040,0x00050048,0x00000068,0x00000001,0x00000007,0x00000010,0x00040048,0x00000068,
0x00000002,0x00000005,0x00050048,0x00000068,0x00000002,0x00000023,0x00000080,0x00050048,
0x00000068,0x00000002,0x00000007,0x00000010,0x00040048,0x00000068,0x00000003,0x00000005,
0x00050048,0x00000068,0x00000003,0x00000023,0x000000c0,0x00050048,0x00000068,0x00000003,
0x00000007,0x00000010,0x00040047,0x0000006a,0x00000006,0x00000100,0x00050048,0x0000006b,
0x00000000,0x00000023,0x00000000,0x00030047,0x0000006b,0x00000002,0x00040047,0x0000006d,
0x00000022,0x00000000,0x00040047,0x0000006d,0x00000021,0x00000001,0x00040047,0x0000006e,
0x0000000b,0x00001158,0x00040047,0x0000007a,0x00000001,0x000003e9,0x00040047,0x0000007b,
0x00000001,0x000003ea,0x00040047,0x0000007c,0x00000001,0x000003eb,0x00040047,0x0000007d,
0x00000001,0x000003ec,0x00040047,0x0000007e,0x00000001,0x000003ed,0x00040047,0x0000007f,
0x00000001,0x000003ee,0x00040047,0x00000080,0x00000001,0x000003ef,0x00040047,0x00000081,
0x00000001,0x000003f0,0x00040047,0x00000082,0x00000001,0x000003f1,0x00050048,0x00000083,
0x00000000,0x00000023,0x00000000,0x00050048,0x00000083,0x00000001,0x00000023,0x00000010,
0x00030047,0x00000083,0x00000002,0x00040047,0x00000085,0x00000022,0x00000000,0x00040047,
0x00000085,0x00000021,0x00000000,0x00040047,0x00000088,0x00000022,0x00000000,0x00040047,
0x00000088,0x00000021,0x00000003,0x00040047,0x0000008b,0x00000022,0x00000001,0x00040047,
0x0000008b,0x00000021,0x00000001,0x00040047,0x0000008c,0x00000022,0x00000001,0x00040047,
0x0000008c,0x00000021,0x00000002,0x00040047,0x0000008d,0x00000022,0x00000001,0x00040047,
0x0000008d,0x00000021,0x00000003,0x00040047,0x0000008e,0x00000022,0x00000001,0x00040047,
0x0000008e,0x00000021,0x00000004,0x00040047,0x0000008f,0x00000022,0x00000001,0x00040047,
0x0000008f,0x00000021,0x00000005,0x00040047,0x00000090,0x00000022,0x00000001,0x00040047,
0x00000090,0x00000021,0x00000006,0x00040047,0x00000091,0x00000022,0x00000001,0x00040047,
0x00000091,0x00000021,0x00000007,0x00040047,0x00000092,0x0000001e,0x0000000e,0x00020013,
0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00040017,
0x00000007,0x00000006,0x00000004,0x00030021,0x00000008,0x00000007,0x00040017,0x0000000b,
0x00000006,0x00000003,0x00040020,0x0000000c,0x00000003,0x0000000b,0x0004003b,0x0000000c,
0x0000000d,0x00000003,0x00040018,0x0000000e,0x00000007,0x00000004,0x0005001e,0x0000000f,
0x0000000e,0x0000000e,0x00000007,0x00040015,0x00000010,0x00000020,0x00000000,0x0004002b,
0x00000010,0x00000011,0x00000100,0x0004001c,0x00000012,0x0000000f,0x00000011,0x0003001e,
0x00000013,0x00000012,0x00040020,0x00000014,0x00000002,0x00000013,0x0004003b,0x00000014,
0x00000015,0x00000002,0x00040015,0x00000016,0x00000020,0x00000001,0x0004002b,0x00000016,
0x00000017,0x00000000,0x00040020,0x00000018,0x00000001,0x00000016,0x0004003b,0x00000018,
0x00000019,0x00000001,0x00040020,0x0000001b,0x00000002,0x0000000e,0x00040020,0x0000001e,
0x00000001,0x00000007,0x0004003b,0x0000001e,0x0000001f,0x00000001,0x0004003b,0x0000000c,
0x00000026,0x00000003,0x0004002b,0x00000016,0x00000028,0x00000001,0x00040018,0x0000002b,
0x0000000b,0x00000003,0x00040020,0x00000033,0x00000001,0x0000000b,0x0004003b,0x00000033,
0x00000034,0x00000001,0x00040020,0x00000037,0x00000003,0x00000007,0x0004003b,0x00000037,
0x00000038,0x00000003,0x0004003b,0x0000001e,0x00000039,0x00000001,0x00040017,0x0000003b,
0x00000006,0x00000002,0x000f001e,0x0000003c,0x00000007,0x00000007,0x0000003b,0x0000003b,
0x0000003b,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,
0x00000006,0x00040020,0x0000003d,0x00000002,0x0000003c,0x0004003b,0x0000003d,0x0000003e,
0x00000002,0x00040020,0x0000003f,0x00000002,0x00000007,0x0004002b,0x00000016,0x00000044,
0x00000002,0x00040020,0x00000048,0x00000003,0x0000003b,0x0004003b,0x00000048,0x00000049,
0x00000003,0x00040020,0x0000004a,0x00000001,0x0000003b,0x0004003b,0x0000004a,0x0000004b,
0x00000001,0x0004002b,0x00000010,0x0000004d,0x00000001,0x0004001c,0x0000004e,0x00000006,
0x0000004d,0x0006001e,0x0000004f,0x00000007,0x00000006,0x0000004e,0x0000004e,0x00040020,
0x00000050,0x00000003,0x0000004f,0x0004003b,0x00000050,0x00000051,0x00000003,0x0004002b,
0x00000016,0x00000052,0x0000000c,0x00040020,0x00000053,0x00000002,0x00000006,0x00040020,
0x00000056,0x00000003,0x00000006,0x00020014,0x0000005a,0x00030030,0x0000005a,0x0000005b,
0x0004002b,0x00000016,0x0000005e,0x00000003,0x00040020,0x0000005f,0x00000002,0x0000003b,
0x0006001e,0x00000068,0x0000000e,0x0000000e,0x0000000e,0x0000000e,0x0004002b,0x00000010,
0x00000069,0x00000006,0x0004001c,0x0000006a,0x00000068,0x00000069,0x0003001e,0x0000006b,
0x0000006a,0x00040020,0x0000006c,0x00000002,0x0000006b,0x0004003b,0x0000006c,0x0000006d,
0x00000002,0x0004003b,0x00000018,0x0000006e,0x00000001,0x00030031,0x0000005a,0x0000007a,
0x00030031,0x0000005a,0x0000007b,0x00030031,0x0000005a,0x0000007c,0x00030031,0x0000005a,
0x0000007d,0x00030031,0x0000005a,0x0000007e,0x00030031,0x0000005a,0x0000007f,0x00030031,
0x0000005a,0x00000080,0x00030031,0x0000005a,0x00000081,0x00030031,0x0000005a,0x00000082,
0x0004001e,0x00000083,0x00000007,0x00000006,0x00040020,0x00000084,0x00000002,0x00000083,
0x0004003b,0x00000084,0x00000085,0x00000002,0x0002001a,0x00000086,0x00040020,0x00000087,
0x00000000,0x00000086,0x0004003b,0x00000087,0x00000088,0x00000000,0x00090019,0x00000089,
0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,
0x0000008a,0x00000000,0x00000089,0x0004003b,0x0000008a,0x0000008b,0x00000000,0x0004003b,
0x0000008a,0x0000008c,0x00000000,0x0004003b,0x0000008a,0x0000008d,0x00000000,0x0004003b,
0x0000008a,0x0000008e,0x00000000,0x0004003b,0x0000008a,0x0000008f,0x00000000,0x0004003b,
0x0000008a,0x00000090,0x00000000,0x0004003b,0x0000008a,0x00000091,0x00000000,0x0004003b,
0x00000033,0x00000092,0x00000001,0x00050036,0x00000002,0x00000004,0x00000000,0x00000003,
0x000200f8,0x00000005,0x0004003d,0x00000016,0x0000001a,0x00000019,0x00070041,0x0000001b,
0x0000001c,0x00000015,0x00000017,0x0000001a,0x00000017,0x0004003d,0x0000000e,0x0000001d,
0x0000001c,0x0004003d,0x00000007,0x00000020,0x0000001f,0x00050091,0x00000007,0x00000021,
0x0000001d,0x00000020,0x00050051,0x00000006,0x00000022,0x00000021,0x00000000,0x00050051,
0x00000006,0x00000023,0x00000021,0x00000001,0x00050051,0x00000006,0x00000024,0x00000021,
0x00000002,0x00060050,0x0000000b,0x00000025,0x00000022,0x00000023,0x00000024,0x0003003e,
0x0000000d,0x00000025,0x0004003d,0x00000016,0x00000027,0x00000019,0x00070041,0x0000001b,
0x00000029,0x00000015,0x00000017,0x00000027,0x00000028,0x0004003d,0x0000000e,0x0000002a,
0x00000029,0x00050051,0x00000007,0x0000002c,0x0000002a,0x00000000,0x0008004f,0x0000000b,
0x0000002d,0x0000002c,0x0000002c,0x00000000,0x00000001,0x00000002,0x00050051,0x00000007,
0x0000002e,0x0000002a,0x00000001,0x0008004f,0x0000000b,0x0000002f,0x0000002e,0x0000002e,
0x00000000,0x00000001,0x00000002,0x00050051,0x00000007,0x00000030,0x0000002a,0x00000002,
0x0008004f,0x0000000b,0x00000031,0x00000030,0x00000030,0x00000000,0x00000001,0x00000002,
0x00060050,0x0000002b,0x00000032,0x0000002d,0x0000002f,0x00000031,0x0004003d,0x0000000b,
0x00000035,0x00000034,0x00050091,0x0000000b,0x00000036,0x00000032,0x00000035,0x0003003e,
0x00000026,0x00000036,0x0004003d,0x00000007,0x0000003a,0x00000039,0x00050041,0x0000003f,
0x00000040,0x0000003e,0x00000017,0x0004003d,0x00000007,0x00000041,0x00000040,0x00050085,
0x00000007,0x00000042,0x0000003a,0x00000041,0x0004003d,0x00000016,0x00000043,0x00000019,
0x00070041,0x0000003f,0x00000045,0x00000015,0x00000017,0x00000043,0x00000044,0x0004003d,
0x00000007,0x00000046,0x00000045,0x00050085,0x00000007,0x00000047,0x00000042,0x00000046,
0x0003003e,0x00000038,0x00000047,0x0004003d,0x0000003b,0x0000004c,0x0000004b,0x0003003e,
0x00000049,0x0000004c,0x00050041,0x00000053,0x00000054,0x0000003e,0x00000052,0x0004003d,
0x00000006,0x00000055,0x00000054,0x00050041,0x00000056,0x00000057,0x00000051,0x00000028,
0x0003003e,0x00000057,0x00000055,0x00040039,0x00000007,0x00000058,0x00000009,0x00050041,
0x00000037,0x00000059,0x00000051,0x00000017,0x0003003e,0x00000059,0x00000058,0x000300f7,
0x0000005d,0x00000000,0x000400fa,0x0000005b,0x0000005c,0x0000005d,0x000200f8,0x0000005c,
0x00050041,0x0000005f,0x00000060,0x0000003e,0x0000005e,0x0004003d,0x0000003b,0x00000061,
0x00000060,0x0004003d,0x0000003b,0x00000062,0x00000049,0x00050085,0x0000003b,0x00000063,
0x00000062,0x00000061,0x0003003e,0x00000049,0x00000063,0x00050041,0x0000005f,0x00000064,
0x0000003e,0x00000044,0x0004003d,0x0000003b,0x00000065,0x00000064,0x0004003d,0x0000003b,
0x00000066,0x00000049,0x00050081,0x0000003b,0x00000067,0x00000066,0x00000065,0x0003003e,
0x00000049,0x00000067,0x000200f9,0x0000005d,0x000200f8,0x0000005d,0x000100fd,0x00010038,
0x00050036,0x00000007,0x00000009,0x00000000,0x00000008,0x000200f8,0x0000000a,0x0004003d,
0x00000016,0x0000006f,0x0000006e,0x00070041,0x0000001b,0x00000070,0x0000006d,0x00000017,
0x0000006f,0x00000044,0x0004003d,0x0000000e,0x00000071,0x00000070,0x0004003d,0x00000016,
0x00000072,0x00000019,0x00070041,0x0000001b,0x00000073,0x00000015,0x00000017,0x00000072,
0x00000017,0x0004003d,0x0000000e,0x00000074,0x00000073,0x00050092,0x0000000e,0x00000075,
0x00000071,0x00000074,0x0004003d,0x00000007,0x00000076,0x0000001f,0x00050091,0x00000007,
0x00000077,0x00000075,0x00000076,0x000200fe,0x00000077,0x00010038
}, {
0x07230203,0x00010300,0x0008000a,0x000000b7,0x00000000,0x00020011,0x00000001,0x0006000b,
0x07230203,0x00010000,0x0008000a,0x00000101,0x00000000,0x00020011,0x00000001,0x0006000b,
0x00000001,0x4c534c47,0x6474732e,0x3035342e,0x00000000,0x0003000e,0x00000000,0x00000001,
0x0009000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x0000000b,0x00000089,0x000000b4,
0x000000b6,0x00030010,0x00000004,0x00000007,0x00030003,0x00000002,0x000001cc,0x00060004,
0x455f4c47,0x6d5f5458,0x69746c75,0x77656976,0x00000000,0x000a0004,0x475f4c47,0x4c474f4f,
0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,0x00080004,
0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,0x00040005,
0x00000004,0x6e69616d,0x00000000,0x00030005,0x00000008,0x00000079,0x00030005,0x0000000b,
0x00005655,0x00030005,0x00000012,0x00007675,0x00030005,0x00000051,0x00666473,0x00030005,
0x0000005b,0x00000077,0x00040005,0x0000005f,0x68706c61,0x00000061,0x00040005,0x00000069,
0x6f6c6f63,0x00000072,0x00050005,0x00000089,0x65786950,0x6c6f436c,0x0073726f,0x00040005,
0x00000098,0x656d6143,0x00006172,0x00050006,0x00000098,0x00000000,0x77656976,0x00000000,
0x00060006,0x00000098,0x00000001,0x6a6f7270,0x69746365,0x00006e6f,0x00070006,0x00000098,
0x00000002,0x77656976,0x6a6f7250,0x69746365,0x00006e6f,0x00080006,0x00000098,0x00000003,
0x65766e69,0x50657372,0x656a6f72,0x6f697463,0x0000006e,0x00060005,0x0000009b,0x656d6143,
0x75426172,0x72656666,0x00000000,0x00050006,0x0000009b,0x00000000,0x656d6143,0x00736172,
0x00030005,0x0000009d,0x00000000,0x00040005,0x0000009e,0x77617244,0x00000000,0x00060006,
0x0000009e,0x00000000,0x6e617274,0x726f6673,0x0000006d,0x00070006,0x0000009e,0x00000001,
0x6d726f6e,0x614d6c61,0x78697274,0x00000000,0x00050006,0x0000009e,0x00000002,0x6f6c6f63,
0x00000072,0x00050005,0x000000a1,0x77617244,0x66667542,0x00007265,0x00050006,0x000000a1,
0x00000000,0x77617244,0x00000073,0x00030005,0x000000a3,0x00000000,0x00040005,0x000000a6,
0x706d6153,0x0072656c,0x00060005,0x000000a7,0x6574614d,0x6c616972,0x66667542,0x00007265,
0x00070006,0x000000a7,0x00000000,0x6574614d,0x6c616972,0x6f6c6f43,0x00000072,0x00060006,
0x000000a7,0x00000001,0x776f6c47,0x6f6c6f43,0x00000072,0x00050006,0x000000a7,0x00000002,
0x68535655,0x00746669,0x00050006,0x000000a7,0x00000003,0x63535655,0x00656c61,0x00060006,
0x000000a7,0x00000004,0x52464453,0x65676e61,0x00000000,0x00060006,0x000000a7,0x00000005,
0x6174654d,0x73656e6c,0x00000073,0x00060006,0x000000a7,0x00000006,0x67756f52,0x73656e68,
0x00000073,0x00060006,0x000000a7,0x00000007,0x61656c43,0x616f6372,0x00000074,0x00080006,
0x000000a7,0x00000008,0x61656c43,0x616f6372,0x756f5274,0x656e6867,0x00007373,0x00080006,
0x000000a7,0x00000009,0x6c63634f,0x6f697375,0x7274536e,0x74676e65,0x00000068,0x00070006,
0x000000a7,0x0000000a,0x776f6c47,0x65727453,0x6874676e,0x00000000,0x00060006,0x000000a7,
0x0000000b,0x6d726f4e,0x63536c61,0x00656c61,0x00060006,0x000000a7,0x0000000c,0x68706c41,
0x74754361,0x0066666f,0x00060006,0x000000a7,0x0000000d,0x6e696f50,0x7a695374,0x00000065,
0x00030005,0x000000a9,0x00000000,0x00060005,0x000000ac,0x6f6c6f43,0x78655472,0x65727574,
0x00000000,0x00050005,0x000000ad,0x776f6c47,0x74786554,0x00657275,0x00070005,0x000000ae,
0x6c63634f,0x6f697375,0x7865546e,0x65727574,0x00000000,0x00070005,0x000000af,0x6174654d,
0x73656e6c,0x78655473,0x65727574,0x00000000,0x00070005,0x000000b0,0x67756f52,0x73656e68,
0x78655473,0x65727574,0x00000000,0x00070005,0x000000b1,0x61656c43,0x616f6372,0x78655474,
0x65727574,0x00000000,0x00060005,0x000000b2,0x6d726f4e,0x65546c61,0x72757478,0x00000065,
0x00040005,0x000000b4,0x6d726f4e,0x00006c61,0x00040005,0x000000b6,0x6f6c6f43,0x00000072,
0x00040047,0x0000000b,0x0000001e,0x0000000c,0x00040047,0x00000089,0x0000001e,0x00000000,
0x00040048,0x00000098,0x00000000,0x00000005,0x00050048,0x00000098,0x00000000,0x00000023,
0x00000000,0x00050048,0x00000098,0x00000000,0x00000007,0x00000010,0x00040048,0x00000098,
0x00000001,0x00000005,0x00050048,0x00000098,0x00000001,0x00000023,0x00000040,0x00050048,
0x00000098,0x00000001,0x00000007,0x00000010,0x00040048,0x00000098,0x00000002,0x00000005,
0x00050048,0x00000098,0x00000002,0x00000023,0x00000080,0x00050048,0x00000098,0x00000002,
0x00000007,0x00000010,0x00040048,0x00000098,0x00000003,0x00000005,0x00050048,0x00000098,
0x00000003,0x00000023,0x000000c0,0x00050048,0x00000098,0x00000003,0x00000007,0x00000010,
0x00040047,0x0000009a,0x00000006,0x00000100,0x00050048,0x0000009b,0x00000000,0x00000023,
0x00000000,0x00030047,0x0000009b,0x00000002,0x00040047,0x0000009d,0x00000022,0x00000000,
0x00040047,0x0000009d,0x00000021,0x00000000,0x00040048,0x0000009e,0x00000000,0x00000005,
0x00050048,0x0000009e,0x00000000,0x00000023,0x00000000,0x00050048,0x0000009e,0x00000000,
0x00000007,0x00000010,0x00040048,0x0000009e,0x00000001,0x00000005,0x00050048,0x0000009e,
0x00000001,0x00000023,0x00000040,0x00050048,0x0000009e,0x00000001,0x00000007,0x00000010,
0x00050048,0x0000009e,0x00000002,0x00000023,0x00000080,0x00040047,0x000000a0,0x00000006,
0x00000090,0x00050048,0x000000a1,0x00000000,0x00000023,0x00000000,0x00030047,0x000000a1,
0x00000002,0x00040047,0x000000a3,0x00000022,0x00000000,0x00040047,0x000000a3,0x00000021,
0x00000001,0x00040047,0x000000a6,0x00000022,0x00000000,0x00040047,0x000000a6,0x00000021,
0x00000002,0x00050048,0x000000a7,0x00000000,0x00000023,0x00000000,0x00050048,0x000000a7,
0x00000001,0x00000023,0x00000010,0x00050048,0x000000a7,0x00000002,0x00000023,0x00000020,
0x00050048,0x000000a7,0x00000003,0x00000023,0x00000028,0x00050048,0x000000a7,0x00000004,
0x00000023,0x00000030,0x00050048,0x000000a7,0x00000005,0x00000023,0x00000038,0x00050048,
0x000000a7,0x00000006,0x00000023,0x0000003c,0x00050048,0x000000a7,0x00000007,0x00000023,
0x00000040,0x00050048,0x000000a7,0x00000008,0x00000023,0x00000044,0x00050048,0x000000a7,
0x00000009,0x00000023,0x00000048,0x00050048,0x000000a7,0x0000000a,0x00000023,0x0000004c,
0x00050048,0x000000a7,0x0000000b,0x00000023,0x00000050,0x00050048,0x000000a7,0x0000000c,
0x00000023,0x00000054,0x00050048,0x000000a7,0x0000000d,0x00000023,0x00000058,0x00030047,
0x000000a7,0x00000002,0x00040047,0x000000a9,0x00000022,0x00000001,0x00040047,0x000000a9,
0x00000021,0x00000000,0x00040047,0x000000ac,0x00000022,0x00000001,0x00040047,0x000000ac,
0x00000021,0x00000001,0x00040047,0x000000ad,0x00000022,0x00000001,0x00040047,0x000000ad,
0x00000021,0x00000002,0x00040047,0x000000ae,0x00000022,0x00000001,0x00040047,0x000000ae,
0x00000021,0x00000003,0x00040047,0x000000af,0x00000022,0x00000001,0x00040047,0x000000af,
0x00000021,0x00000004,0x00040047,0x000000b0,0x00000022,0x00000001,0x00040047,0x000000b0,
0x00000021,0x00000005,0x00040047,0x000000b1,0x00000022,0x00000001,0x00040047,0x000000b1,
0x00000021,0x00000006,0x00040047,0x000000b2,0x00000022,0x00000001,0x00040047,0x000000b2,
0x00000021,0x00000007,0x00040047,0x000000b4,0x0000001e,0x0000000a,0x00040047,0x000000b6,
0x0000001e,0x0000000b,0x00020013,0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,
0x00000006,0x00000020,0x00040020,0x00000007,0x00000007,0x00000006,0x00040017,0x00000009,
0x00000006,0x00000002,0x00040020,0x0000000a,0x00000001,0x00000009,0x0004003b,0x0000000a,
0x0000000b,0x00000001,0x00040015,0x0000000c,0x00000020,0x00000000,0x0004002b,0x0000000c,
0x0000000d,0x00000001,0x00040020,0x0000000e,0x00000001,0x00000006,0x00040020,0x00000011,
0x00000007,0x00000009,0x0004002b,0x0000000c,0x00000013,0x00000000,0x0004002b,0x00000006,
0x00000016,0x3f800000,0x0004002b,0x00000006,0x0000001c,0x40800000,0x0004002b,0x00000006,
0x0000001e,0x40000000,0x0004002b,0x00000006,0x00000028,0x3f13cd3a,0x0004002b,0x00000006,
0x0000002a,0x3e800000,0x0004002b,0x00000006,0x0000002f,0x3fddb3d7,0x0004002b,0x00000006,
0x00000034,0x00000000,0x00020014,0x00000035,0x0004002b,0x00000006,0x0000003f,0xbfddb3d7,
0x0004002b,0x00000006,0x0000004b,0xc0000000,0x0004002b,0x00000006,0x00000059,0x3f000000,
0x0004002b,0x00000006,0x00000060,0x3e6147ae,0x00040017,0x00000067,0x00000006,0x00000003,
0x00040020,0x00000068,0x00000007,0x00000067,0x0004002b,0x00000006,0x0000006a,0x3dc08312,
0x0004002b,0x00000006,0x0000006b,0x3f2978d5,0x0004002b,0x00000006,0x0000006c,0x3f63d70a,
0x0006002c,0x00000067,0x0000006d,0x0000006a,0x0000006b,0x0000006c,0x0004002b,0x00000006,
0x0000006e,0x3f69ba5e,0x0004002b,0x00000006,0x0000006f,0x3e8ccccd,0x0004002b,0x00000006,
0x00000070,0x3f19999a,0x0006002c,0x00000067,0x00000071,0x0000006e,0x0000006f,0x00000070,
0x0004002b,0x00000006,0x00000073,0x3fc00000,0x0004002b,0x00000006,0x0000007a,0x3e4ccccd,
0x0004002b,0x00000006,0x0000007b,0x3e75c28f,0x0006002c,0x00000067,0x0000007c,0x0000007a,
0x0000007a,0x0000007b,0x0004002b,0x00000006,0x0000007d,0xbdf5c28f,0x00040017,0x00000086,
0x00000006,0x00000004,0x0004001c,0x00000087,0x00000086,0x0000000d,0x00040020,0x00000088,
0x00000003,0x00000087,0x0004003b,0x00000088,0x00000089,0x00000003,0x00040015,0x0000008a,
0x00000020,0x00000001,0x0004002b,0x0000008a,0x0000008b,0x00000000,0x0004002b,0x00000006,
0x0000008d,0x400ccccd,0x0006002c,0x00000067,0x0000008e,0x0000008d,0x0000008d,0x0000008d,
0x00040020,0x00000095,0x00000003,0x00000086,0x00040018,0x00000097,0x00000086,0x00000004,
0x0006001e,0x00000098,0x00000097,0x00000097,0x00000097,0x00000097,0x0004002b,0x0000000c,
0x00000099,0x00000006,0x0004001c,0x0000009a,0x00000098,0x00000099,0x0003001e,0x0000009b,
0x0000009a,0x00040020,0x0000009c,0x00000002,0x0000009b,0x0004003b,0x0000009c,0x0000009d,
0x00000002,0x0005001e,0x0000009e,0x00000097,0x00000097,0x00000086,0x0004002b,0x0000000c,
0x0000009f,0x00000100,0x0004001c,0x000000a0,0x0000009e,0x0000009f,0x0003001e,0x000000a1,
0x000000a0,0x00040020,0x000000a2,0x00000002,0x000000a1,0x0004003b,0x000000a2,0x000000a3,
0x00000002,0x0002001a,0x000000a4,0x00040020,0x000000a5,0x00000000,0x000000a4,0x0004003b,
0x000000a5,0x000000a6,0x00000000,0x0010001e,0x000000a7,0x00000086,0x00000086,0x00000009,
0x00000009,0x00000009,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,
0x00000006,0x00000006,0x00000006,0x00040020,0x000000a8,0x00000002,0x000000a7,0x0004003b,
0x000000a8,0x000000a9,0x00000002,0x00090019,0x000000aa,0x00000006,0x00000001,0x00000000,
0x00000000,0x00000000,0x00000001,0x00000000,0x00040020,0x000000ab,0x00000000,0x000000aa,
0x0004003b,0x000000ab,0x000000ac,0x00000000,0x0004003b,0x000000ab,0x000000ad,0x00000000,
0x0004003b,0x000000ab,0x000000ae,0x00000000,0x0004003b,0x000000ab,0x000000af,0x00000000,
0x0004003b,0x000000ab,0x000000b0,0x00000000,0x0004003b,0x000000ab,0x000000b1,0x00000000,
0x0004003b,0x000000ab,0x000000b2,0x00000000,0x00040020,0x000000b3,0x00000001,0x00000067,
0x0004003b,0x000000b3,0x000000b4,0x00000001,0x00040020,0x000000b5,0x00000001,0x00000086,
0x0004003b,0x000000b5,0x000000b6,0x00000001,0x00050036,0x00000002,0x00000004,0x00000000,
0x00000003,0x000200f8,0x00000005,0x0004003b,0x00000007,0x00000008,0x00000007,0x0004003b,
0x00000011,0x00000012,0x00000007,0x0004003b,0x00000007,0x00000051,0x00000007,0x0004003b,
0x00000007,0x0000005b,0x00000007,0x0004003b,0x00000007,0x0000005f,0x00000007,0x0004003b,
0x00000068,0x00000069,0x00000007,0x00050041,0x0000000e,0x0000000f,0x0000000b,0x0000000d,
0x0004003d,0x00000006,0x00000010,0x0000000f,0x0003003e,0x00000008,0x00000010,0x00050041,
0x0000000e,0x00000014,0x0000000b,0x00000013,0x0004003d,0x00000006,0x00000015,0x00000014,
0x00050041,0x0000000e,0x00000017,0x0000000b,0x0000000d,0x0004003d,0x00000006,0x00000018,
0x00000017,0x00050083,0x00000006,0x00000019,0x00000016,0x00000018,0x00050050,0x00000009,
0x0000001a,0x00000015,0x00000019,0x0003003e,0x00000012,0x0000001a,0x0004003d,0x00000009,
0x0000001b,0x00000012,0x0005008e,0x00000009,0x0000001d,0x0000001b,0x0000001c,0x00050050,
0x00000009,0x0000001f,0x0000001e,0x0000001e,0x00050083,0x00000009,0x00000020,0x0000001d,
0x0000001f,0x0003003e,0x00000012,0x00000020,0x00050041,0x00000007,0x00000021,0x00000012,
0x00000013,0x0004003d,0x00000006,0x00000022,0x00000021,0x0006000c,0x00000006,0x00000023,
0x00000001,0x00000004,0x00000022,0x00050083,0x00000006,0x00000024,0x00000023,0x00000016,
0x00050041,0x00000007,0x00000025,0x00000012,0x00000013,0x0003003e,0x00000025,0x00000024,
0x00050041,0x00000007,0x00000026,0x00000012,0x0000000d,0x0004003d,0x00000006,0x00000027,
0x00000026,0x00050081,0x00000006,0x00000029,0x00000027,0x00000028,0x00050081,0x00000006,
0x0000002b,0x00000029,0x0000002a,0x00050041,0x00000007,0x0000002c,0x00000012,0x0000000d,
0x0003003e,0x0000002c,0x0000002b,0x00050041,0x00000007,0x0000002d,0x00000012,0x00000013,
0x0004003d,0x00000006,0x0000002e,0x0000002d,0x00050041,0x00000007,0x00000030,0x00000012,
0x0000000d,0x0004003d,0x00000006,0x00000031,0x00000030,0x00050085,0x00000006,0x00000032,
0x0000002f,0x00000031,0x00050081,0x00000006,0x00000033,0x0000002e,0x00000032,0x000500ba,
0x00000035,0x00000036,0x00000033,0x00000034,0x000300f7,0x00000038,0x00000000,0x000400fa,
0x00000036,0x00000037,0x00000038,0x000200f8,0x00000037,0x00050041,0x00000007,0x00000039,
0x00000012,0x00000013,0x0004003d,0x00000006,0x0000003a,0x00000039,0x00050041,0x00000007,
0x0000003b,0x00000012,0x0000000d,0x0004003d,0x00000006,0x0000003c,0x0000003b,0x00050085,
0x00000006,0x0000003d,0x0000002f,0x0000003c,0x00050083,0x00000006,0x0000003e,0x0000003a,
0x0000003d,0x00050041,0x00000007,0x00000040,0x00000012,0x00000013,0x0004003d,0x00000006,
0x00000041,0x00000040,0x00050085,0x00000006,0x00000042,0x0000003f,0x00000041,0x00050041,
0x00000007,0x00000043,0x00000012,0x0000000d,0x0004003d,0x00000006,0x00000044,0x00000043,
0x00050083,0x00000006,0x00000045,0x00000042,0x00000044,0x00050050,0x00000009,0x00000046,
0x0000003e,0x00000045,0x00050050,0x00000009,0x00000047,0x0000001e,0x0000001e,0x00050088,
0x00000009,0x00000048,0x00000046,0x00000047,0x0003003e,0x00000012,0x00000048,0x000200f9,
0x00000038,0x000200f8,0x00000038,0x00050041,0x00000007,0x00000049,0x00000012,0x00000013,
0x0004003d,0x00000006,0x0000004a,0x00000049,0x0008000c,0x00000006,0x0000004c,0x00000001,
0x0000002b,0x0000004a,0x0000004b,0x00000034,0x00050041,0x00000007,0x0000004d,0x00000012,
0x00000013,0x0004003d,0x00000006,0x0000004e,0x0000004d,0x00050083,0x00000006,0x0000004f,
0x0000004e,0x0000004c,0x00050041,0x00000007,0x00000050,0x00000012,0x00000013,0x0003003e,
0x00000050,0x0000004f,0x0004003d,0x00000009,0x00000052,0x00000012,0x0006000c,0x00000006,
0x00000053,0x00000001,0x00000042,0x00000052,0x0004007f,0x00000006,0x00000054,0x00000053,
0x00050041,0x00000007,0x00000055,0x00000012,0x0000000d,0x0004003d,0x00000006,0x00000056,
0x00000055,0x0006000c,0x00000006,0x00000057,0x00000001,0x00000006,0x00000056,0x00050085,
0x00000006,0x00000058,0x00000054,0x00000057,0x00050083,0x00000006,0x0000005a,0x00000058,
0x00000059,0x0003003e,0x00000051,0x0000005a,0x0004003d,0x00000006,0x0000005c,0x00000051,
0x000400d1,0x00000006,0x0000005d,0x0000005c,0x00050085,0x00000006,0x0000005e,0x0000005d,
0x00000059,0x0003003e,0x0000005b,0x0000005e,0x0004003d,0x00000006,0x00000061,0x0000005b,
0x00050081,0x00000006,0x00000062,0x00000060,0x00000061,0x0004003d,0x00000006,0x00000063,
0x0000005b,0x00050083,0x00000006,0x00000064,0x00000060,0x00000063,0x0004003d,0x00000006,
0x00000065,0x00000051,0x0008000c,0x00000006,0x00000066,0x00000001,0x00000031,0x00000062,
0x00000064,0x00000065,0x0003003e,0x0000005f,0x00000066,0x0004003d,0x00000006,0x00000072,
0x00000008,0x00050085,0x00000006,0x00000074,0x00000072,0x00000073,0x00050083,0x00000006,
0x00000075,0x00000074,0x0000002a,0x0008000c,0x00000006,0x00000076,0x00000001,0x0000002b,
0x00000075,0x00000034,0x00000016,0x00060050,0x00000067,0x00000077,0x00000076,0x00000076,
0x00000076,0x0008000c,0x00000067,0x00000078,0x00000001,0x0000002e,0x0000006d,0x00000071,
0x00000077,0x0003003e,0x00000069,0x00000078,0x0004003d,0x00000067,0x00000079,0x00000069,
0x0004003d,0x00000006,0x0000007e,0x0000005b,0x00050081,0x00000006,0x0000007f,0x0000007d,
0x0000007e,0x0004003d,0x00000006,0x00000080,0x0000005b,0x00050083,0x00000006,0x00000081,
0x0000007d,0x00000080,0x0004003d,0x00000006,0x00000082,0x00000051,0x0008000c,0x00000006,
0x00000083,0x00000001,0x00000031,0x0000007f,0x00000081,0x00000082,0x00060050,0x00000067,
0x00000084,0x00000083,0x00000083,0x00000083,0x0008000c,0x00000067,0x00000085,0x00000001,
0x0000002e,0x00000079,0x0000007c,0x00000084,0x0003003e,0x00000069,0x00000085,0x0004003d,
0x00000067,0x0000008c,0x00000069,0x0007000c,0x00000067,0x0000008f,0x00000001,0x0000001a,
0x0000008c,0x0000008e,0x0004003d,0x00000006,0x00000090,0x0000005f,0x00050051,0x00000006,
0x00000091,0x0000008f,0x00000000,0x00050051,0x00000006,0x00000092,0x0000008f,0x00000001,
0x00050051,0x00000006,0x00000093,0x0000008f,0x00000002,0x00070050,0x00000086,0x00000094,
0x00000091,0x00000092,0x00000093,0x00000090,0x00050041,0x00000095,0x00000096,0x00000089,
0x0000008b,0x0003003e,0x00000096,0x00000094,0x000100fd,0x00010038
0x000a000f,0x00000004,0x00000004,0x6e69616d,0x00000000,0x00000023,0x0000002f,0x000000fd,
0x000000fe,0x00000100,0x00030010,0x00000004,0x00000007,0x00030003,0x00000002,0x000001cc,
0x00060004,0x455f4c47,0x6d5f5458,0x69746c75,0x77656976,0x00000000,0x000a0004,0x475f4c47,
0x4c474f4f,0x70635f45,0x74735f70,0x5f656c79,0x656e696c,0x7269645f,0x69746365,0x00006576,
0x00080004,0x475f4c47,0x4c474f4f,0x6e695f45,0x64756c63,0x69645f65,0x74636572,0x00657669,
0x00040005,0x00000004,0x6e69616d,0x00000000,0x00070005,0x0000000f,0x50746567,0x6c657869,
0x31327428,0x3266763b,0x0000003b,0x00030005,0x0000000d,0x00000074,0x00030005,0x0000000e,
0x00007675,0x00050005,0x00000012,0x72766f6c,0x6e69616d,0x00000028,0x00040005,0x00000017,
0x706d6153,0x0072656c,0x00050005,0x00000023,0x65786950,0x6c6f436c,0x0073726f,0x00050005,
0x0000002a,0x62616e65,0x6c47656c,0x0000776f,0x00050005,0x0000002d,0x776f6c47,0x74786554,
0x00657275,0x00030005,0x0000002f,0x00005655,0x00040005,0x00000030,0x61726170,0x0000006d,
0x00060005,0x00000035,0x6574614d,0x6c616972,0x66667542,0x00007265,0x00050006,0x00000035,
0x00000000,0x6f6c6f63,0x00000072,0x00050006,0x00000035,0x00000001,0x776f6c67,0x00000000,
0x00050006,0x00000035,0x00000002,0x68537675,0x00746669,0x00050006,0x00000035,0x00000003,
0x63537675,0x00656c61,0x00060006,0x00000035,0x00000004,0x52666473,0x65676e61,0x00000000,
0x00060006,0x00000035,0x00000005,0x6174656d,0x73656e6c,0x00000073,0x00060006,0x00000035,
0x00000006,0x67756f72,0x73656e68,0x00000073,0x00060006,0x00000035,0x00000007,0x61656c63,
0x616f6372,0x00000074,0x00080006,0x00000035,0x00000008,0x61656c63,0x616f6372,0x756f5274,
0x656e6867,0x00007373,0x00080006,0x00000035,0x00000009,0x6c63636f,0x6f697375,0x7274536e,
0x74676e65,0x00000068,0x00060006,0x00000035,0x0000000a,0x6d726f6e,0x63536c61,0x00656c61,
0x00060006,0x00000035,0x0000000b,0x68706c61,0x74754361,0x0066666f,0x00060006,0x00000035,
0x0000000c,0x6e696f70,0x7a695374,0x00000065,0x00050005,0x00000037,0x6574614d,0x6c616972,
0x00000000,0x00070005,0x00000050,0x62616e65,0x6c41656c,0x43616870,0x666f7475,0x00000066,
0x00030005,0x0000005e,0x00000079,0x00030005,0x00000062,0x00007675,0x00030005,0x0000009f,
0x00666473,0x00030005,0x000000a9,0x00000077,0x00040005,0x000000ad,0x68706c61,0x00000061,
0x00040005,0x000000b6,0x6f6c6f63,0x00000072,0x00070005,0x000000de,0x62616e65,0x5655656c,
0x6e617254,0x726f6673,0x0000006d,0x00060005,0x000000df,0x43657375,0x726f6c6f,0x74786554,
0x00657275,0x00060005,0x000000e0,0x47657375,0x54776f6c,0x75747865,0x00006572,0x00070005,
0x000000e1,0x4d657375,0x6c617465,0x7373656e,0x74786554,0x00657275,0x00070005,0x000000e2,
0x52657375,0x6867756f,0x7373656e,0x74786554,0x00657275,0x00070005,0x000000e3,0x4f657375,
0x756c6363,0x6e6f6973,0x74786554,0x00657275,0x00070005,0x000000e4,0x43657375,0x7261656c,
0x74616f63,0x74786554,0x00657275,0x00070005,0x000000e5,0x4e657375,0x616d726f,0x7865546c,
0x65727574,0x00000000,0x00040005,0x000000e6,0x626f6c47,0x00736c61,0x00060006,0x000000e6,
0x00000000,0x6f736552,0x6974756c,0x00006e6f,0x00050006,0x000000e6,0x00000001,0x656d6954,
0x00000000,0x00030005,0x000000e8,0x00000000,0x00040005,0x000000ea,0x656d6143,0x00006172,
0x00050006,0x000000ea,0x00000000,0x77656976,0x00000000,0x00060006,0x000000ea,0x00000001,
0x6a6f7270,0x69746365,0x00006e6f,0x00070006,0x000000ea,0x00000002,0x77656976,0x6a6f7250,
0x69746365,0x00006e6f,0x00080006,0x000000ea,0x00000003,0x65766e69,0x50657372,0x656a6f72,
0x6f697463,0x0000006e,0x00060005,0x000000ed,0x656d6143,0x75426172,0x72656666,0x00000000,
0x00050006,0x000000ed,0x00000000,0x656d6143,0x00736172,0x00030005,0x000000ef,0x00000000,
0x00040005,0x000000f0,0x77617244,0x00000000,0x00060006,0x000000f0,0x00000000,0x6e617274,
0x726f6673,0x0000006d,0x00070006,0x000000f0,0x00000001,0x6d726f6e,0x614d6c61,0x78697274,
0x00000000,0x00050006,0x000000f0,0x00000002,0x6f6c6f63,0x00000072,0x00050005,0x000000f3,
0x77617244,0x66667542,0x00007265,0x00050006,0x000000f3,0x00000000,0x77617244,0x00000073,
0x00030005,0x000000f5,0x00000000,0x00060005,0x000000f6,0x6f6c6f43,0x78655472,0x65727574,
0x00000000,0x00070005,0x000000f7,0x6c63634f,0x6f697375,0x7865546e,0x65727574,0x00000000,
0x00070005,0x000000f8,0x6174654d,0x73656e6c,0x78655473,0x65727574,0x00000000,0x00070005,
0x000000f9,0x67756f52,0x73656e68,0x78655473,0x65727574,0x00000000,0x00070005,0x000000fa,
0x61656c43,0x616f6372,0x78655474,0x65727574,0x00000000,0x00060005,0x000000fb,0x6d726f4e,
0x65546c61,0x72757478,0x00000065,0x00060005,0x000000fd,0x69736f50,0x6e6f6974,0x6c726f57,
0x00000064,0x00040005,0x000000fe,0x6d726f4e,0x00006c61,0x00040005,0x00000100,0x6f6c6f43,
0x00000072,0x00040047,0x00000017,0x00000022,0x00000000,0x00040047,0x00000017,0x00000021,
0x00000003,0x00040047,0x00000023,0x0000001e,0x00000000,0x00040047,0x0000002a,0x00000001,
0x000003ea,0x00040047,0x0000002d,0x00000022,0x00000001,0x00040047,0x0000002d,0x00000021,
0x00000002,0x00040047,0x0000002f,0x0000001e,0x0000000d,0x00050048,0x00000035,0x00000000,
0x00000023,0x00000000,0x00050048,0x00000035,0x00000001,0x00000023,0x00000010,0x00050048,
0x00000035,0x00000002,0x00000023,0x00000020,0x00050048,0x00000035,0x00000003,0x00000023,
0x00000028,0x00050048,0x00000035,0x00000004,0x00000023,0x00000030,0x00050048,0x00000035,
0x00000005,0x00000023,0x00000038,0x00050048,0x00000035,0x00000006,0x00000023,0x0000003c,
0x00050048,0x00000035,0x00000007,0x00000023,0x00000040,0x00050048,0x00000035,0x00000008,
0x00000023,0x00000044,0x00050048,0x00000035,0x00000009,0x00000023,0x00000048,0x00050048,
0x00000035,0x0000000a,0x00000023,0x0000004c,0x00050048,0x00000035,0x0000000b,0x00000023,
0x00000050,0x00050048,0x00000035,0x0000000c,0x00000023,0x00000054,0x00030047,0x00000035,
0x00000002,0x00040047,0x00000037,0x00000022,0x00000001,0x00040047,0x00000037,0x00000021,
0x00000000,0x00040047,0x00000050,0x00000001,0x000003e9,0x00040047,0x000000de,0x00000001,
0x000003e8,0x00040047,0x000000df,0x00000001,0x000003eb,0x00040047,0x000000e0,0x00000001,
0x000003ec,0x00040047,0x000000e1,0x00000001,0x000003ed,0x00040047,0x000000e2,0x00000001,
0x000003ee,0x00040047,0x000000e3,0x00000001,0x000003ef,0x00040047,0x000000e4,0x00000001,
0x000003f0,0x00040047,0x000000e5,0x00000001,0x000003f1,0x00050048,0x000000e6,0x00000000,
0x00000023,0x00000000,0x00050048,0x000000e6,0x00000001,0x00000023,0x00000010,0x00030047,
0x000000e6,0x00000002,0x00040047,0x000000e8,0x00000022,0x00000000,0x00040047,0x000000e8,
0x00000021,0x00000000,0x00040048,0x000000ea,0x00000000,0x00000005,0x00050048,0x000000ea,
0x00000000,0x00000023,0x00000000,0x00050048,0x000000ea,0x00000000,0x00000007,0x00000010,
0x00040048,0x000000ea,0x00000001,0x00000005,0x00050048,0x000000ea,0x00000001,0x00000023,
0x00000040,0x00050048,0x000000ea,0x00000001,0x00000007,0x00000010,0x00040048,0x000000ea,
0x00000002,0x00000005,0x00050048,0x000000ea,0x00000002,0x00000023,0x00000080,0x00050048,
0x000000ea,0x00000002,0x00000007,0x00000010,0x00040048,0x000000ea,0x00000003,0x00000005,
0x00050048,0x000000ea,0x00000003,0x00000023,0x000000c0,0x00050048,0x000000ea,0x00000003,
0x00000007,0x00000010,0x00040047,0x000000ec,0x00000006,0x00000100,0x00050048,0x000000ed,
0x00000000,0x00000023,0x00000000,0x00030047,0x000000ed,0x00000002,0x00040047,0x000000ef,
0x00000022,0x00000000,0x00040047,0x000000ef,0x00000021,0x00000001,0x00040048,0x000000f0,
0x00000000,0x00000005,0x00050048,0x000000f0,0x00000000,0x00000023,0x00000000,0x00050048,
0x000000f0,0x00000000,0x00000007,0x00000010,0x00040048,0x000000f0,0x00000001,0x00000005,
0x00050048,0x000000f0,0x00000001,0x00000023,0x00000040,0x00050048,0x000000f0,0x00000001,
0x00000007,0x00000010,0x00050048,0x000000f0,0x00000002,0x00000023,0x00000080,0x00040047,
0x000000f2,0x00000006,0x00000090,0x00050048,0x000000f3,0x00000000,0x00000023,0x00000000,
0x00030047,0x000000f3,0x00000002,0x00040047,0x000000f5,0x00000022,0x00000000,0x00040047,
0x000000f5,0x00000021,0x00000002,0x00040047,0x000000f6,0x00000022,0x00000001,0x00040047,
0x000000f6,0x00000021,0x00000001,0x00040047,0x000000f7,0x00000022,0x00000001,0x00040047,
0x000000f7,0x00000021,0x00000003,0x00040047,0x000000f8,0x00000022,0x00000001,0x00040047,
0x000000f8,0x00000021,0x00000004,0x00040047,0x000000f9,0x00000022,0x00000001,0x00040047,
0x000000f9,0x00000021,0x00000005,0x00040047,0x000000fa,0x00000022,0x00000001,0x00040047,
0x000000fa,0x00000021,0x00000006,0x00040047,0x000000fb,0x00000022,0x00000001,0x00040047,
0x000000fb,0x00000021,0x00000007,0x00040047,0x000000fd,0x0000001e,0x0000000a,0x00040047,
0x000000fe,0x0000001e,0x0000000b,0x00040047,0x00000100,0x0000001e,0x0000000c,0x00020013,
0x00000002,0x00030021,0x00000003,0x00000002,0x00030016,0x00000006,0x00000020,0x00090019,
0x00000007,0x00000006,0x00000001,0x00000000,0x00000000,0x00000000,0x00000001,0x00000000,
0x00040020,0x00000008,0x00000000,0x00000007,0x00040017,0x00000009,0x00000006,0x00000002,
0x00040020,0x0000000a,0x00000007,0x00000009,0x00040017,0x0000000b,0x00000006,0x00000004,
0x00050021,0x0000000c,0x0000000b,0x00000008,0x0000000a,0x00030021,0x00000011,0x0000000b,
0x0002001a,0x00000015,0x00040020,0x00000016,0x00000000,0x00000015,0x0004003b,0x00000016,
0x00000017,0x00000000,0x0003001b,0x00000019,0x00000007,0x00040015,0x0000001f,0x00000020,
0x00000000,0x0004002b,0x0000001f,0x00000020,0x00000001,0x0004001c,0x00000021,0x0000000b,
0x00000020,0x00040020,0x00000022,0x00000003,0x00000021,0x0004003b,0x00000022,0x00000023,
0x00000003,0x00040015,0x00000024,0x00000020,0x00000001,0x0004002b,0x00000024,0x00000025,
0x00000000,0x00040020,0x00000027,0x00000003,0x0000000b,0x00020014,0x00000029,0x00030031,
0x00000029,0x0000002a,0x0004003b,0x00000008,0x0000002d,0x00000000,0x00040020,0x0000002e,
0x00000001,0x00000009,0x0004003b,0x0000002e,0x0000002f,0x00000001,0x00040017,0x00000033,
0x00000006,0x00000003,0x000f001e,0x00000035,0x0000000b,0x0000000b,0x00000009,0x00000009,
0x00000009,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,0x00000006,
0x00000006,0x00040020,0x00000036,0x00000002,0x00000035,0x0004003b,0x00000036,0x00000037,
0x00000002,0x0004002b,0x00000024,0x00000038,0x00000001,0x00040020,0x00000039,0x00000002,
0x0000000b,0x0004002b,0x0000001f,0x0000003e,0x00000003,0x00040020,0x0000003f,0x00000002,
0x00000006,0x0004002b,0x0000001f,0x00000047,0x00000000,0x00040020,0x00000048,0x00000003,
0x00000006,0x0004002b,0x0000001f,0x0000004d,0x00000002,0x00030031,0x00000029,0x00000050,
0x0004002b,0x00000024,0x00000055,0x0000000b,0x00040020,0x0000005d,0x00000007,0x00000006,
0x00040020,0x0000005f,0x00000001,0x00000006,0x0004002b,0x00000006,0x00000065,0x3f800000,
0x0004002b,0x00000006,0x0000006b,0x40800000,0x0004002b,0x00000006,0x0000006d,0x40000000,
0x0004002b,0x00000006,0x00000077,0x3f13cd3a,0x0004002b,0x00000006,0x00000079,0x3e800000,
0x0004002b,0x00000006,0x0000007e,0x3fddb3d7,0x0004002b,0x00000006,0x00000083,0x00000000,
0x0004002b,0x00000006,0x0000008d,0xbfddb3d7,0x0004002b,0x00000006,0x00000099,0xc0000000,
0x0004002b,0x00000006,0x000000a7,0x3f000000,0x0004002b,0x00000006,0x000000ae,0x3e6147ae,
0x00040020,0x000000b5,0x00000007,0x00000033,0x0004002b,0x00000006,0x000000b7,0x3dc08312,
0x0004002b,0x00000006,0x000000b8,0x3f2978d5,0x0004002b,0x00000006,0x000000b9,0x3f63d70a,
0x0006002c,0x00000033,0x000000ba,0x000000b7,0x000000b8,0x000000b9,0x0004002b,0x00000006,
0x000000bb,0x3f69ba5e,0x0004002b,0x00000006,0x000000bc,0x3e8ccccd,0x0004002b,0x00000006,
0x000000bd,0x3f19999a,0x0006002c,0x00000033,0x000000be,0x000000bb,0x000000bc,0x000000bd,
0x0004002b,0x00000006,0x000000c0,0x3fc00000,0x0004002b,0x00000006,0x000000c7,0x3e4ccccd,
0x0004002b,0x00000006,0x000000c8,0x3e75c28f,0x0006002c,0x00000033,0x000000c9,0x000000c7,
0x000000c7,0x000000c8,0x0004002b,0x00000006,0x000000ca,0xbdf5c28f,0x0004002b,0x00000006,
0x000000d4,0x400ccccd,0x0006002c,0x00000033,0x000000d5,0x000000d4,0x000000d4,0x000000d4,
0x00030030,0x00000029,0x000000de,0x00030031,0x00000029,0x000000df,0x00030031,0x00000029,
0x000000e0,0x00030031,0x00000029,0x000000e1,0x00030031,0x00000029,0x000000e2,0x00030031,
0x00000029,0x000000e3,0x00030031,0x00000029,0x000000e4,0x00030031,0x00000029,0x000000e5,
0x0004001e,0x000000e6,0x0000000b,0x00000006,0x00040020,0x000000e7,0x00000002,0x000000e6,
0x0004003b,0x000000e7,0x000000e8,0x00000002,0x00040018,0x000000e9,0x0000000b,0x00000004,
0x0006001e,0x000000ea,0x000000e9,0x000000e9,0x000000e9,0x000000e9,0x0004002b,0x0000001f,
0x000000eb,0x00000006,0x0004001c,0x000000ec,0x000000ea,0x000000eb,0x0003001e,0x000000ed,
0x000000ec,0x00040020,0x000000ee,0x00000002,0x000000ed,0x0004003b,0x000000ee,0x000000ef,
0x00000002,0x0005001e,0x000000f0,0x000000e9,0x000000e9,0x0000000b,0x0004002b,0x0000001f,
0x000000f1,0x00000100,0x0004001c,0x000000f2,0x000000f0,0x000000f1,0x0003001e,0x000000f3,
0x000000f2,0x00040020,0x000000f4,0x00000002,0x000000f3,0x0004003b,0x000000f4,0x000000f5,
0x00000002,0x0004003b,0x00000008,0x000000f6,0x00000000,0x0004003b,0x00000008,0x000000f7,
0x00000000,0x0004003b,0x00000008,0x000000f8,0x00000000,0x0004003b,0x00000008,0x000000f9,
0x00000000,0x0004003b,0x00000008,0x000000fa,0x00000000,0x0004003b,0x00000008,0x000000fb,
0x00000000,0x00040020,0x000000fc,0x00000001,0x00000033,0x0004003b,0x000000fc,0x000000fd,
0x00000001,0x0004003b,0x000000fc,0x000000fe,0x00000001,0x00040020,0x000000ff,0x00000001,
0x0000000b,0x0004003b,0x000000ff,0x00000100,0x00000001,0x00050036,0x00000002,0x00000004,
0x00000000,0x00000003,0x000200f8,0x00000005,0x0004003b,0x0000000a,0x00000030,0x00000007,
0x00040039,0x0000000b,0x00000026,0x00000012,0x00050041,0x00000027,0x00000028,0x00000023,
0x00000025,0x0003003e,0x00000028,0x00000026,0x000300f7,0x0000002c,0x00000000,0x000400fa,
0x0000002a,0x0000002b,0x0000002c,0x000200f8,0x0000002b,0x0004003d,0x00000009,0x00000031,
0x0000002f,0x0003003e,0x00000030,0x00000031,0x00060039,0x0000000b,0x00000032,0x0000000f,
0x0000002d,0x00000030,0x0008004f,0x00000033,0x00000034,0x00000032,0x00000032,0x00000000,
0x00000001,0x00000002,0x00050041,0x00000039,0x0000003a,0x00000037,0x00000038,0x0004003d,
0x0000000b,0x0000003b,0x0000003a,0x0008004f,0x00000033,0x0000003c,0x0000003b,0x0000003b,
0x00000000,0x00000001,0x00000002,0x00050085,0x00000033,0x0000003d,0x00000034,0x0000003c,
0x00060041,0x0000003f,0x00000040,0x00000037,0x00000038,0x0000003e,0x0004003d,0x00000006,
0x00000041,0x00000040,0x0005008e,0x00000033,0x00000042,0x0000003d,0x00000041,0x00050041,
0x00000027,0x00000043,0x00000023,0x00000025,0x0004003d,0x0000000b,0x00000044,0x00000043,
0x0008004f,0x00000033,0x00000045,0x00000044,0x00000044,0x00000000,0x00000001,0x00000002,
0x00050081,0x00000033,0x00000046,0x00000045,0x00000042,0x00060041,0x00000048,0x00000049,
0x00000023,0x00000025,0x00000047,0x00050051,0x00000006,0x0000004a,0x00000046,0x00000000,
0x0003003e,0x00000049,0x0000004a,0x00060041,0x00000048,0x0000004b,0x00000023,0x00000025,
0x00000020,0x00050051,0x00000006,0x0000004c,0x00000046,0x00000001,0x0003003e,0x0000004b,
0x0000004c,0x00060041,0x00000048,0x0000004e,0x00000023,0x00000025,0x0000004d,0x00050051,
0x00000006,0x0000004f,0x00000046,0x00000002,0x0003003e,0x0000004e,0x0000004f,0x000200f9,
0x0000002c,0x000200f8,0x0000002c,0x000300f7,0x00000052,0x00000000,0x000400fa,0x00000050,
0x00000051,0x00000052,0x000200f8,0x00000051,0x00060041,0x00000048,0x00000053,0x00000023,
0x00000025,0x0000003e,0x0004003d,0x00000006,0x00000054,0x00000053,0x00050041,0x0000003f,
0x00000056,0x00000037,0x00000055,0x0004003d,0x00000006,0x00000057,0x00000056,0x000500bc,
0x00000029,0x00000058,0x00000054,0x00000057,0x000200f9,0x00000052,0x000200f8,0x00000052,
0x000700f5,0x00000029,0x00000059,0x00000050,0x0000002c,0x00000058,0x00000051,0x000300f7,
0x0000005b,0x00000000,0x000400fa,0x00000059,0x0000005a,0x0000005b,0x000200f8,0x0000005a,
0x000100fc,0x000200f8,0x0000005b,0x000100fd,0x00010038,0x00050036,0x0000000b,0x0000000f,
0x00000000,0x0000000c,0x00030037,0x00000008,0x0000000d,0x00030037,0x0000000a,0x0000000e,
0x000200f8,0x00000010,0x0004003d,0x00000007,0x00000014,0x0000000d,0x0004003d,0x00000015,
0x00000018,0x00000017,0x00050056,0x00000019,0x0000001a,0x00000014,0x00000018,0x0004003d,
0x00000009,0x0000001b,0x0000000e,0x00050057,0x0000000b,0x0000001c,0x0000001a,0x0000001b,
0x000200fe,0x0000001c,0x00010038,0x00050036,0x0000000b,0x00000012,0x00000000,0x00000011,
0x000200f8,0x00000013,0x0004003b,0x0000005d,0x0000005e,0x00000007,0x0004003b,0x0000000a,
0x00000062,0x00000007,0x0004003b,0x0000005d,0x0000009f,0x00000007,0x0004003b,0x0000005d,
0x000000a9,0x00000007,0x0004003b,0x0000005d,0x000000ad,0x00000007,0x0004003b,0x000000b5,
0x000000b6,0x00000007,0x00050041,0x0000005f,0x00000060,0x0000002f,0x00000020,0x0004003d,
0x00000006,0x00000061,0x00000060,0x0003003e,0x0000005e,0x00000061,0x00050041,0x0000005f,
0x00000063,0x0000002f,0x00000047,0x0004003d,0x00000006,0x00000064,0x00000063,0x00050041,
0x0000005f,0x00000066,0x0000002f,0x00000020,0x0004003d,0x00000006,0x00000067,0x00000066,
0x00050083,0x00000006,0x00000068,0x00000065,0x00000067,0x00050050,0x00000009,0x00000069,
0x00000064,0x00000068,0x0003003e,0x00000062,0x00000069,0x0004003d,0x00000009,0x0000006a,
0x00000062,0x0005008e,0x00000009,0x0000006c,0x0000006a,0x0000006b,0x00050050,0x00000009,
0x0000006e,0x0000006d,0x0000006d,0x00050083,0x00000009,0x0000006f,0x0000006c,0x0000006e,
0x0003003e,0x00000062,0x0000006f,0x00050041,0x0000005d,0x00000070,0x00000062,0x00000047,
0x0004003d,0x00000006,0x00000071,0x00000070,0x0006000c,0x00000006,0x00000072,0x00000001,
0x00000004,0x00000071,0x00050083,0x00000006,0x00000073,0x00000072,0x00000065,0x00050041,
0x0000005d,0x00000074,0x00000062,0x00000047,0x0003003e,0x00000074,0x00000073,0x00050041,
0x0000005d,0x00000075,0x00000062,0x00000020,0x0004003d,0x00000006,0x00000076,0x00000075,
0x00050081,0x00000006,0x00000078,0x00000076,0x00000077,0x00050081,0x00000006,0x0000007a,
0x00000078,0x00000079,0x00050041,0x0000005d,0x0000007b,0x00000062,0x00000020,0x0003003e,
0x0000007b,0x0000007a,0x00050041,0x0000005d,0x0000007c,0x00000062,0x00000047,0x0004003d,
0x00000006,0x0000007d,0x0000007c,0x00050041,0x0000005d,0x0000007f,0x00000062,0x00000020,
0x0004003d,0x00000006,0x00000080,0x0000007f,0x00050085,0x00000006,0x00000081,0x0000007e,
0x00000080,0x00050081,0x00000006,0x00000082,0x0000007d,0x00000081,0x000500ba,0x00000029,
0x00000084,0x00000082,0x00000083,0x000300f7,0x00000086,0x00000000,0x000400fa,0x00000084,
0x00000085,0x00000086,0x000200f8,0x00000085,0x00050041,0x0000005d,0x00000087,0x00000062,
0x00000047,0x0004003d,0x00000006,0x00000088,0x00000087,0x00050041,0x0000005d,0x00000089,
0x00000062,0x00000020,0x0004003d,0x00000006,0x0000008a,0x00000089,0x00050085,0x00000006,
0x0000008b,0x0000007e,0x0000008a,0x00050083,0x00000006,0x0000008c,0x00000088,0x0000008b,
0x00050041,0x0000005d,0x0000008e,0x00000062,0x00000047,0x0004003d,0x00000006,0x0000008f,
0x0000008e,0x00050085,0x00000006,0x00000090,0x0000008d,0x0000008f,0x00050041,0x0000005d,
0x00000091,0x00000062,0x00000020,0x0004003d,0x00000006,0x00000092,0x00000091,0x00050083,
0x00000006,0x00000093,0x00000090,0x00000092,0x00050050,0x00000009,0x00000094,0x0000008c,
0x00000093,0x00050050,0x00000009,0x00000095,0x0000006d,0x0000006d,0x00050088,0x00000009,
0x00000096,0x00000094,0x00000095,0x0003003e,0x00000062,0x00000096,0x000200f9,0x00000086,
0x000200f8,0x00000086,0x00050041,0x0000005d,0x00000097,0x00000062,0x00000047,0x0004003d,
0x00000006,0x00000098,0x00000097,0x0008000c,0x00000006,0x0000009a,0x00000001,0x0000002b,
0x00000098,0x00000099,0x00000083,0x00050041,0x0000005d,0x0000009b,0x00000062,0x00000047,
0x0004003d,0x00000006,0x0000009c,0x0000009b,0x00050083,0x00000006,0x0000009d,0x0000009c,
0x0000009a,0x00050041,0x0000005d,0x0000009e,0x00000062,0x00000047,0x0003003e,0x0000009e,
0x0000009d,0x0004003d,0x00000009,0x000000a0,0x00000062,0x0006000c,0x00000006,0x000000a1,
0x00000001,0x00000042,0x000000a0,0x0004007f,0x00000006,0x000000a2,0x000000a1,0x00050041,
0x0000005d,0x000000a3,0x00000062,0x00000020,0x0004003d,0x00000006,0x000000a4,0x000000a3,
0x0006000c,0x00000006,0x000000a5,0x00000001,0x00000006,0x000000a4,0x00050085,0x00000006,
0x000000a6,0x000000a2,0x000000a5,0x00050083,0x00000006,0x000000a8,0x000000a6,0x000000a7,
0x0003003e,0x0000009f,0x000000a8,0x0004003d,0x00000006,0x000000aa,0x0000009f,0x000400d1,
0x00000006,0x000000ab,0x000000aa,0x00050085,0x00000006,0x000000ac,0x000000ab,0x000000a7,
0x0003003e,0x000000a9,0x000000ac,0x0004003d,0x00000006,0x000000af,0x000000a9,0x00050081,
0x00000006,0x000000b0,0x000000ae,0x000000af,0x0004003d,0x00000006,0x000000b1,0x000000a9,
0x00050083,0x00000006,0x000000b2,0x000000ae,0x000000b1,0x0004003d,0x00000006,0x000000b3,
0x0000009f,0x0008000c,0x00000006,0x000000b4,0x00000001,0x00000031,0x000000b0,0x000000b2,
0x000000b3,0x0003003e,0x000000ad,0x000000b4,0x0004003d,0x00000006,0x000000bf,0x0000005e,
0x00050085,0x00000006,0x000000c1,0x000000bf,0x000000c0,0x00050083,0x00000006,0x000000c2,
0x000000c1,0x00000079,0x0008000c,0x00000006,0x000000c3,0x00000001,0x0000002b,0x000000c2,
0x00000083,0x00000065,0x00060050,0x00000033,0x000000c4,0x000000c3,0x000000c3,0x000000c3,
0x0008000c,0x00000033,0x000000c5,0x00000001,0x0000002e,0x000000ba,0x000000be,0x000000c4,
0x0003003e,0x000000b6,0x000000c5,0x0004003d,0x00000033,0x000000c6,0x000000b6,0x0004003d,
0x00000006,0x000000cb,0x000000a9,0x00050081,0x00000006,0x000000cc,0x000000ca,0x000000cb,
0x0004003d,0x00000006,0x000000cd,0x000000a9,0x00050083,0x00000006,0x000000ce,0x000000ca,
0x000000cd,0x0004003d,0x00000006,0x000000cf,0x0000009f,0x0008000c,0x00000006,0x000000d0,
0x00000001,0x00000031,0x000000cc,0x000000ce,0x000000cf,0x00060050,0x00000033,0x000000d1,
0x000000d0,0x000000d0,0x000000d0,0x0008000c,0x00000033,0x000000d2,0x00000001,0x0000002e,
0x000000c6,0x000000c9,0x000000d1,0x0003003e,0x000000b6,0x000000d2,0x0004003d,0x00000033,
0x000000d3,0x000000b6,0x0007000c,0x00000033,0x000000d6,0x00000001,0x0000001a,0x000000d3,
0x000000d5,0x0004003d,0x00000006,0x000000d7,0x000000ad,0x00050051,0x00000006,0x000000d8,
0x000000d6,0x00000000,0x00050051,0x00000006,0x000000d9,0x000000d6,0x00000001,0x00050051,
0x00000006,0x000000da,0x000000d6,0x00000002,0x00070050,0x0000000b,0x000000db,0x000000d8,
0x000000d9,0x000000da,0x000000d7,0x000200fe,0x000000db,0x00010038
})
end

View File

@ -28,17 +28,6 @@ LOVR_EXPORT int luaopen_lovr_system(lua_State* L);
LOVR_EXPORT int luaopen_lovr_thread(lua_State* L);
LOVR_EXPORT int luaopen_lovr_timer(lua_State* L);
void lovrAudioDestroy(void);
void lovrEventDestroy(void);
void lovrFilesystemDestroy(void);
void lovrGraphicsDestroy(void);
void lovrHeadsetDestroy(void);
void lovrMathDestroy(void);
void lovrPhysicsDestroy(void);
void lovrSystemDestroy(void);
void lovrThreadModuleDestroy(void);
void lovrTimerDestroy(void);
// Object names are lightuserdata because Variants need a non-Lua string due to threads.
static int luax_meta__tostring(lua_State* L) {
lua_getfield(L, -1, "__info");
@ -127,40 +116,6 @@ void luax_preload(lua_State* L) {
lua_pop(L, 2);
}
// Destroys modules in a specific order
void luax_unload(lua_State* L) {
#ifndef LOVR_DISABLE_TIMER
lovrTimerDestroy();
#endif
#ifndef LOVR_DISABLE_MATH
lovrMathDestroy();
#endif
#ifndef LOVR_DISABLE_EVENT
lovrEventDestroy();
#endif
#ifndef LOVR_DISABLE_THREAD
lovrThreadModuleDestroy();
#endif
#ifndef LOVR_DISABLE_PHYSICS
lovrPhysicsDestroy();
#endif
#ifndef LOVR_DISABLE_AUDIO
lovrAudioDestroy();
#endif
#ifndef LOVR_DISABLE_HEADSET
lovrHeadsetDestroy();
#endif
#ifndef LOVR_DISABLE_GRAPHICS
lovrGraphicsDestroy();
#endif
#ifndef LOVR_DISABLE_SYSTEM
lovrSystemDestroy();
#endif
#ifndef LOVR_DISABLE_FILESYSTEM
lovrFilesystemDestroy();
#endif
}
void _luax_registertype(lua_State* L, const char* name, const luaL_Reg* functions, destructorFn* destructor) {
// Push metatable

View File

@ -111,7 +111,6 @@ typedef struct {
#define luax_clearerror(L) lua_pushnil(L), luax_seterror(L)
void luax_preload(struct lua_State* L);
void luax_unload(struct lua_State* L);
void _luax_registertype(struct lua_State* L, const char* name, const struct luaL_Reg* functions, void (*destructor)(void*));
void* _luax_totype(struct lua_State* L, int index, uint64_t hash);
void* _luax_checktype(struct lua_State* L, int index, uint64_t hash, const char* debug);

View File

@ -331,6 +331,7 @@ int luaopen_lovr_audio(lua_State* L) {
lua_pop(L, 1);
if (lovrAudioInit(spatializer, sampleRate)) {
luax_atexit(L, lovrAudioDestroy);
if (start) {
lovrAudioSetDevice(AUDIO_PLAYBACK, NULL, 0, NULL, AUDIO_SHARED);
lovrAudioStart(AUDIO_PLAYBACK);

View File

@ -214,6 +214,9 @@ int luaopen_lovr_event(lua_State* L) {
lua_pushcfunction(L, nextEvent);
pollRef = luaL_ref(L, LUA_REGISTRYINDEX);
lovrEventInit();
if (lovrEventInit()) {
luax_atexit(L, lovrEventDestroy);
}
return 1;
}

View File

@ -516,7 +516,9 @@ int luaopen_lovr_filesystem(lua_State* L) {
}
lua_pop(L, 1);
lovrFilesystemInit(archive);
if (lovrFilesystemInit(archive)) {
luax_atexit(L, lovrFilesystemDestroy);
}
lua_newtable(L);
luax_register(L, lovrFilesystem);

View File

@ -658,10 +658,17 @@ static int l_lovrGraphicsInit(lua_State* L) {
if (shaderCache) {
config.cacheData = luax_readfile(".lovrshadercache", &config.cacheSize);
luax_atexit(L, luax_writeshadercache);
}
lovrGraphicsInit(&config);
if (lovrGraphicsInit(&config)) {
luax_atexit(L, lovrGraphicsDestroy);
// Finalizers run in the opposite order they were added, so this has to go last
if (shaderCache) {
luax_atexit(L, luax_writeshadercache);
}
}
return 0;
}

View File

@ -703,6 +703,7 @@ int luaopen_lovr_headset(lua_State* L) {
}
lua_pop(L, 1);
luax_atexit(L, lovrHeadsetDestroy);
lovrHeadsetInit(&config);
return 1;
}

View File

@ -389,7 +389,9 @@ int luaopen_lovr_math(lua_State* L) {
lua_pop(L, 1);
// Module
lovrMathInit();
if (lovrMathInit()) {
luax_atexit(L, lovrMathDestroy);
}
// Each Lua state gets its own thread-local Pool
pool = lovrPoolCreate();

View File

@ -169,6 +169,8 @@ int luaopen_lovr_physics(lua_State* L) {
luax_registertype(L, CapsuleShape);
luax_registertype(L, CylinderShape);
luax_registertype(L, MeshShape);
lovrPhysicsInit();
if (lovrPhysicsInit()) {
luax_atexit(L, lovrPhysicsDestroy);
}
return 1;
}

View File

@ -212,6 +212,8 @@ static const luaL_Reg lovrSystem[] = {
int luaopen_lovr_system(lua_State* L) {
lua_newtable(L);
luax_register(L, lovrSystem);
lovrSystemInit();
if (lovrSystemInit()) {
luax_atexit(L, lovrSystemDestroy);
}
return 1;
}

View File

@ -110,6 +110,8 @@ int luaopen_lovr_thread(lua_State* L) {
luax_register(L, lovrThreadModule);
luax_registertype(L, Thread);
luax_registertype(L, Channel);
lovrThreadModuleInit();
if (lovrThreadModuleInit()) {
luax_atexit(L, lovrThreadModuleDestroy);
}
return 1;
}

View File

@ -47,7 +47,8 @@ static const luaL_Reg lovrTimer[] = {
int luaopen_lovr_timer(lua_State* L) {
lua_newtable(L);
luax_register(L, lovrTimer);
lovrTimerInit();
luax_atexit(L, lovrTimerDestroy);
if (lovrTimerInit()) {
luax_atexit(L, lovrTimerDestroy);
}
return 1;
}

View File

@ -585,7 +585,7 @@ void gpu_set_viewport(gpu_stream* stream, float viewport[4], float depthRange[4]
void gpu_set_scissor(gpu_stream* stream, uint32_t scissor[4]);
void gpu_push_constants(gpu_stream* stream, gpu_shader* shader, void* data, uint32_t size);
void gpu_bind_pipeline(gpu_stream* stream, gpu_pipeline* pipeline, bool compute);
void gpu_bind_bundle(gpu_stream* stream, gpu_shader* shader, uint32_t set, gpu_bundle* bundle, uint32_t* dynamicOffsets, uint32_t dynamicOffsetCount);
void gpu_bind_bundles(gpu_stream* stream, gpu_shader* shader, gpu_bundle** bundles, uint32_t first, uint32_t count, uint32_t* dynamicOffsets, uint32_t dynamicOffsetCount);
void gpu_bind_vertex_buffers(gpu_stream* stream, gpu_buffer** buffers, uint32_t* offsets, uint32_t first, uint32_t count);
void gpu_bind_index_buffer(gpu_stream* stream, gpu_buffer* buffer, uint32_t offset, gpu_index_type type);
void gpu_draw(gpu_stream* stream, uint32_t vertexCount, uint32_t instanceCount, uint32_t firstVertex, uint32_t baseInstance);

View File

@ -1625,9 +1625,13 @@ void gpu_bind_pipeline(gpu_stream* stream, gpu_pipeline* pipeline, bool compute)
vkCmdBindPipeline(stream->commands, bindPoint, pipeline->handle);
}
void gpu_bind_bundle(gpu_stream* stream, gpu_shader* shader, uint32_t set, gpu_bundle* bundle, uint32_t* dynamicOffsets, uint32_t dynamicOffsetCount) {
void gpu_bind_bundles(gpu_stream* stream, gpu_shader* shader, gpu_bundle** bundles, uint32_t first, uint32_t count, uint32_t* dynamicOffsets, uint32_t dynamicOffsetCount) {
VkDescriptorSet sets[COUNTOF(((gpu_shader_info*) NULL)->layouts)];
for (uint32_t i = 0; i < count; i++) {
sets[i] = bundles[i]->handle;
}
VkPipelineBindPoint bindPoint = shader->handles[1] ? VK_PIPELINE_BIND_POINT_GRAPHICS : VK_PIPELINE_BIND_POINT_COMPUTE;
vkCmdBindDescriptorSets(stream->commands, bindPoint, shader->pipelineLayout, set, 1, &bundle->handle, dynamicOffsetCount, dynamicOffsets);
vkCmdBindDescriptorSets(stream->commands, bindPoint, shader->pipelineLayout, first, count, sets, dynamicOffsetCount, dynamicOffsets);
}
void gpu_bind_vertex_buffers(gpu_stream* stream, gpu_buffer** buffers, uint32_t* offsets, uint32_t first, uint32_t count) {

View File

@ -132,7 +132,6 @@ int main(int argc, char** argv) {
memset(&cookie.value, 0, sizeof(cookie.value));
}
lua_close(L);
luax_unload(L);
} while (restart);
os_destroy();
@ -148,7 +147,6 @@ void lovrDestroy(void* arg) {
lua_State* L = context->L;
emscripten_cancel_main_loop();
lua_close(L);
luax_unload(L);
os_destroy();
}
}
@ -167,7 +165,6 @@ static void emscriptenLoop(void* arg) {
}
lua_close(context->L);
luax_unload(L);
emscripten_cancel_main_loop();
if (restart) {

View File

@ -13,6 +13,7 @@
#include "monkey.h"
#include "shaders.h"
#include <math.h>
#include <limits.h>
#include <stdlib.h>
#include <string.h>
#ifdef LOVR_USE_GLSLANG
@ -592,6 +593,7 @@ bool lovrGraphicsInit(GraphicsConfig* config) {
state.defaultMaterial = lovrMaterialCreate(&(MaterialInfo) {
.data.color = { 1.f, 1.f, 1.f, 1.f },
.data.uvScale = { 1.f, 1.f },
.texture = state.defaultTexture
});
@ -638,6 +640,14 @@ bool lovrGraphicsInit(GraphicsConfig* config) {
void lovrGraphicsDestroy() {
if (!state.initialized) return;
#ifndef LOVR_DISABLE_HEADSET
// If there's an active headset session it needs to be stopped so it can clean up its Pass and
// swapchain textures before gpu_destroy is called. This is really hacky and should be solved
// with module-level refcounting in the future.
if (lovrHeadsetInterface && lovrHeadsetInterface->stop) {
lovrHeadsetInterface->stop();
}
#endif
for (Readback* readback = state.oldestReadback; readback; readback = readback->next) {
lovrRelease(readback, lovrReadbackDestroy);
}
@ -842,22 +852,28 @@ void lovrGraphicsSubmit(Pass** passes, uint32_t count) {
Canvas* canvas = &pass->info.canvas;
if (canvas->mipmap) {
for (uint32_t j = 0; j < COUNTOF(canvas->textures) && canvas->textures[j]; j++) {
if (canvas->textures[j]->info.mipmaps > 1) {
barriers[i].prev |= GPU_PHASE_COLOR;
barriers[i].next |= GPU_PHASE_TRANSFER;
barriers[i].flush |= GPU_CACHE_COLOR_WRITE;
barriers[i].clear |= GPU_CACHE_TRANSFER_READ;
mipmapTexture(pass->stream, canvas->textures[j], 0, ~0u);
bool depth = pass->depth && pass->depth->info.mipmaps > 1;
gpu_barrier barrier = {
.prev = GPU_PHASE_COLOR | (depth ? GPU_PHASE_DEPTH_LATE : 0),
.next = GPU_PHASE_TRANSFER,
.flush = GPU_CACHE_COLOR_WRITE | (depth ? GPU_CACHE_DEPTH_WRITE : 0),
.clear = GPU_CACHE_TRANSFER_READ
};
// Wait for rendering to finish before mipmapping
gpu_sync(pass->stream, &barrier, 1);
for (uint32_t t = 0; t < canvas->count; t++) {
if (pass->color[t]->info.mipmaps > 1) {
mipmapTexture(pass->stream, pass->color[t], 0, ~0u);
trackTexture(pass, pass->color[t], GPU_PHASE_TRANSFER, GPU_CACHE_TRANSFER_WRITE);
}
}
if (canvas->depth.texture && canvas->depth.texture->info.mipmaps > 1) {
barriers[i].prev |= GPU_PHASE_DEPTH_LATE;
barriers[i].next |= GPU_PHASE_TRANSFER;
barriers[i].flush |= GPU_CACHE_DEPTH_WRITE;
barriers[i].clear |= GPU_CACHE_TRANSFER_READ;
mipmapTexture(pass->stream, canvas->depth.texture, 0, ~0u);
if (depth) {
mipmapTexture(pass->stream, pass->depth, 0, ~0u);
trackTexture(pass, pass->depth, GPU_PHASE_TRANSFER, GPU_CACHE_TRANSFER_WRITE);
}
}
break;
@ -900,7 +916,7 @@ void lovrGraphicsSubmit(Pass** passes, uint32_t count) {
// finish. In between, the 'flush' cache is flushed and the 'clear' cache is cleared.
gpu_barrier* barrier = &barriers[sync->lastWriteIndex];
// Only the first write in a pass is considered for a barrier (and there's no intra-pass sync)
// Only the first write in a pass is used for inter-stream barriers
if (sync->lastWriteIndex == i + 1) {
continue;
}
@ -2891,7 +2907,7 @@ static void lovrModelReskin(Model* model) {
gpu_compute_begin(state.stream);
gpu_bind_pipeline(state.stream, pipeline, true);
gpu_bind_bundle(state.stream, shader, 0, bundle, NULL, 0);
gpu_bind_bundles(state.stream, shader, &bundle, 0, 1, NULL, 0);
gpu_push_constants(state.stream, shader, constants, sizeof(constants));
gpu_compute(state.stream, (skin->vertexCount + subgroupSize - 1) / subgroupSize, 1, 1);
gpu_compute_end(state.stream);
@ -3073,7 +3089,7 @@ static void lovrTallyResolve(Tally* tally, uint32_t index, uint32_t count, gpu_b
gpu_compute_begin(stream);
gpu_bind_pipeline(stream, pipeline, true);
gpu_bind_bundle(stream, shader, 0, bundle, NULL, 0);
gpu_bind_bundles(stream, shader, &bundle, 0, 1, NULL, 0);
gpu_push_constants(stream, shader, &constants, sizeof(constants));
gpu_compute(stream, (count + 31) / 32, 1, 1);
gpu_compute_end(stream);
@ -3467,22 +3483,14 @@ void lovrPassReset(Pass* pass) {
memcpy(pass->target.color[0].clear, state.background, 4 * sizeof(float));
}
if (canvas->mipmap) {
trackTexture(pass, pass->color[i], GPU_PHASE_TRANSFER, GPU_CACHE_TRANSFER_WRITE);
} else {
gpu_cache cache = GPU_CACHE_COLOR_WRITE | (canvas->loads[i] == LOAD_KEEP ? GPU_CACHE_COLOR_READ : 0);
trackTexture(pass, pass->color[i], GPU_PHASE_COLOR, cache);
}
gpu_cache cache = GPU_CACHE_COLOR_WRITE | (canvas->loads[i] == LOAD_KEEP ? GPU_CACHE_COLOR_READ : 0);
trackTexture(pass, pass->color[i], GPU_PHASE_COLOR, cache);
}
if (pass->depth) {
if (canvas->mipmap && pass->depth->info.mipmaps > 1) {
trackTexture(pass, pass->depth, GPU_PHASE_TRANSFER, GPU_CACHE_TRANSFER_WRITE);
} else {
gpu_phase phase = canvas->depth.load == LOAD_KEEP ? GPU_PHASE_DEPTH_EARLY : GPU_PHASE_DEPTH_LATE;
gpu_cache cache = GPU_CACHE_DEPTH_WRITE | (canvas->depth.load == LOAD_KEEP ? GPU_CACHE_DEPTH_READ : 0);
trackTexture(pass, pass->depth, phase, cache);
}
gpu_phase phase = canvas->depth.load == LOAD_KEEP ? GPU_PHASE_DEPTH_EARLY : GPU_PHASE_DEPTH_LATE;
gpu_cache cache = GPU_CACHE_DEPTH_WRITE | (canvas->depth.load == LOAD_KEEP ? GPU_CACHE_DEPTH_READ : 0);
trackTexture(pass, pass->depth, phase, cache);
}
gpu_render_begin(pass->stream, &pass->target);
@ -3985,7 +3993,7 @@ void lovrPassSendValue(Pass* pass, const char* name, size_t length, void** data,
lovrThrow("Shader has no push constant named '%s'", name);
}
static void flushPipeline(Pass* pass, Draw* draw, Shader* shader) {
static void bindPipeline(Pass* pass, Draw* draw, Shader* shader) {
Pipeline* pipeline = pass->pipeline;
if (pipeline->info.drawMode != (gpu_draw_mode) draw->mode) {
@ -4000,62 +4008,61 @@ static void flushPipeline(Pass* pass, Draw* draw, Shader* shader) {
pipeline->dirty = true;
}
// Builtin vertex format
if (!draw->vertex.buffer && pipeline->formatHash != 1 + draw->vertex.format) {
pipeline->formatHash = 1 + draw->vertex.format;
pipeline->info.vertex = state.vertexFormats[draw->vertex.format];
pipeline->dirty = true;
// Vertex formats
if (pipeline->formatHash != 1 + draw->vertex.format) {
if (!draw->vertex.buffer) {
pipeline->formatHash = 1 + draw->vertex.format;
pipeline->info.vertex = state.vertexFormats[draw->vertex.format];
pipeline->dirty = true;
if (shader->hasCustomAttributes) {
for (uint32_t i = 0; i < shader->attributeCount; i++) {
if (shader->attributes[i].location < 10) {
pipeline->info.vertex.attributes[pipeline->info.vertex.attributeCount++] = (gpu_attribute) {
.buffer = 1,
.location = shader->attributes[i].location,
.type = GPU_TYPE_F32x4,
.offset = shader->attributes[i].location == LOCATION_COLOR ? 16 : 0
};
}
}
}
} else {
pipeline->formatHash = draw->vertex.buffer->hash;
pipeline->info.vertex.bufferCount = 2;
pipeline->info.vertex.attributeCount = shader->attributeCount;
pipeline->info.vertex.bufferStrides[0] = draw->vertex.buffer->info.stride;
pipeline->info.vertex.bufferStrides[1] = 0;
pipeline->dirty = true;
if (shader->hasCustomAttributes) {
for (uint32_t i = 0; i < shader->attributeCount; i++) {
if (shader->attributes[i].location < 10) {
pipeline->info.vertex.attributes[pipeline->info.vertex.attributeCount++] = (gpu_attribute) {
.buffer = 1,
.location = shader->attributes[i].location,
.type = GPU_TYPE_F32x4,
.offset = shader->attributes[i].location == LOCATION_COLOR ? 16 : 0
};
ShaderAttribute* attribute = &shader->attributes[i];
bool found = false;
for (uint32_t j = 0; j < draw->vertex.buffer->info.fieldCount; j++) {
BufferField field = draw->vertex.buffer->info.fields[j];
lovrCheck(field.type < FIELD_MAT2, "Currently, matrix and index types can not be used in vertex buffers");
if (field.hash ? (field.hash == attribute->hash) : (field.location == attribute->location)) {
pipeline->info.vertex.attributes[i] = (gpu_attribute) {
.buffer = 0,
.location = attribute->location,
.offset = field.offset,
.type = field.type
};
found = true;
break;
}
}
}
}
}
// Custom vertex format
if (draw->vertex.buffer && pipeline->formatHash != draw->vertex.buffer->hash) {
pipeline->formatHash = draw->vertex.buffer->hash;
pipeline->info.vertex.bufferCount = 2;
pipeline->info.vertex.attributeCount = shader->attributeCount;
pipeline->info.vertex.bufferStrides[0] = draw->vertex.buffer->info.stride;
pipeline->info.vertex.bufferStrides[1] = 0;
pipeline->dirty = true;
for (uint32_t i = 0; i < shader->attributeCount; i++) {
ShaderAttribute* attribute = &shader->attributes[i];
bool found = false;
for (uint32_t j = 0; j < draw->vertex.buffer->info.fieldCount; j++) {
BufferField field = draw->vertex.buffer->info.fields[j];
lovrCheck(field.type < FIELD_MAT2, "Currently, matrix and index types can not be used in vertex buffers");
if (field.hash ? (field.hash == attribute->hash) : (field.location == attribute->location)) {
if (!found) {
pipeline->info.vertex.attributes[i] = (gpu_attribute) {
.buffer = 0,
.buffer = 1,
.location = attribute->location,
.offset = field.offset,
.type = field.type
.offset = attribute->location == LOCATION_COLOR ? 16 : 0,
.type = GPU_TYPE_F32x4
};
found = true;
break;
}
}
if (!found) {
pipeline->info.vertex.attributes[i] = (gpu_attribute) {
.buffer = 1,
.location = attribute->location,
.offset = attribute->location == LOCATION_COLOR ? 16 : 0,
.type = GPU_TYPE_F32x4
};
}
}
}
@ -4079,117 +4086,142 @@ static void flushPipeline(Pass* pass, Draw* draw, Shader* shader) {
pipeline->dirty = false;
}
static void flushConstants(Pass* pass, Shader* shader) {
if (pass->constantsDirty && shader->constantSize > 0) {
gpu_push_constants(pass->stream, shader->gpu, pass->constants, shader->constantSize);
pass->constantsDirty = false;
}
}
static void flushBindings(Pass* pass, Shader* shader) {
if (!pass->bindingsDirty || shader->resourceCount == 0) {
return;
}
static void bindBundles(Pass* pass, Draw* draw, Shader* shader) {
size_t stack = tempPush();
uint32_t set = pass->info.type == PASS_RENDER ? 2 : 0;
gpu_binding* bindings = tempAlloc(shader->resourceCount * sizeof(gpu_binding));
for (uint32_t i = 0; i < shader->resourceCount; i++) {
bindings[i] = pass->bindings[shader->resources[i].binding];
gpu_bundle* bundles[3];
uint32_t bundleMask = 0;
// Set 0 - Builtins
if (pass->info.type == PASS_RENDER) {
bool builtinsDirty = false;
if (pass->cameraDirty) {
for (uint32_t i = 0; i < pass->cameraCount; i++) {
mat4_init(pass->cameras[i].viewProjection, pass->cameras[i].projection);
mat4_init(pass->cameras[i].inverseProjection, pass->cameras[i].projection);
mat4_mul(pass->cameras[i].viewProjection, pass->cameras[i].view);
mat4_invert(pass->cameras[i].inverseProjection);
}
uint32_t size = pass->cameraCount * sizeof(Camera);
void* data = gpu_map(pass->builtins[1].buffer.object, size, state.limits.uniformBufferAlign, GPU_MAP_WRITE);
memcpy(data, pass->cameras, size);
pass->cameraDirty = false;
builtinsDirty = true;
}
if (pass->drawCount % 256 == 0) {
uint32_t size = 256 * sizeof(DrawData);
pass->drawData = gpu_map(pass->builtins[2].buffer.object, size, state.limits.uniformBufferAlign, GPU_MAP_WRITE);
builtinsDirty = true;
}
if (pass->samplerDirty) {
Sampler* sampler = pass->pipeline->sampler ? pass->pipeline->sampler : state.defaultSamplers[FILTER_LINEAR];
pass->builtins[3].sampler = sampler->gpu;
pass->samplerDirty = false;
builtinsDirty = true;
}
if (builtinsDirty) {
gpu_bundle_info bundleInfo = {
.layout = state.layouts.data[state.builtinLayout].gpu,
.bindings = pass->builtins,
.count = COUNTOF(pass->builtins)
};
bundles[0] = getBundle(state.builtinLayout);
gpu_bundle_write(&bundles[0], &bundleInfo, 1);
bundleMask |= (1 << 0);
}
// Draw data
float m[16];
float* transform;
if (draw->transform) {
transform = mat4_mul(mat4_init(m, pass->transform), draw->transform);
} else {
transform = pass->transform;
}
float cofactor[16];
mat4_init(cofactor, transform);
cofactor[12] = 0.f;
cofactor[13] = 0.f;
cofactor[14] = 0.f;
cofactor[15] = 1.f;
mat4_cofactor(cofactor);
memcpy(pass->drawData->transform, transform, 64);
memcpy(pass->drawData->cofactor, cofactor, 64);
memcpy(pass->drawData->color, pass->pipeline->color, 16);
pass->drawData++;
}
gpu_bundle_info info = {
.layout = state.layouts.data[shader->layout].gpu,
.bindings = bindings,
.count = shader->resourceCount
};
// Set 1 - Material
if (pass->info.type == PASS_RENDER) {
if (draw->material && draw->material != pass->pipeline->material) {
trackMaterial(pass, draw->material, GPU_PHASE_SHADER_VERTEX | GPU_PHASE_SHADER_FRAGMENT, GPU_CACHE_TEXTURE);
pass->materialDirty = true;
bundles[1] = draw->material->bundle;
bundleMask |= (1 << 1);
} else if (pass->materialDirty) {
Material* material = pass->pipeline->material ? pass->pipeline->material : state.defaultMaterial;
trackMaterial(pass, material, GPU_PHASE_SHADER_VERTEX | GPU_PHASE_SHADER_FRAGMENT, GPU_CACHE_TEXTURE);
pass->materialDirty = false;
bundles[1] = material->bundle;
bundleMask |= (1 << 1);
} else {
bundles[1] = (pass->pipeline->material ? pass->pipeline->material : state.defaultMaterial)->bundle;
}
}
// Set 2 - Resources
if (pass->bindingsDirty && shader->resourceCount > 0) {
gpu_binding* bindings = tempAlloc(shader->resourceCount * sizeof(gpu_binding));
for (uint32_t i = 0; i < shader->resourceCount; i++) {
bindings[i] = pass->bindings[shader->resources[i].binding];
}
gpu_bundle_info info = {
.layout = state.layouts.data[shader->layout].gpu,
.bindings = bindings,
.count = shader->resourceCount
};
gpu_bundle* bundle = getBundle(shader->layout);
gpu_bundle_write(&bundle, &info, 1);
pass->bindingsDirty = false;
uint32_t set = pass->info.type == PASS_RENDER ? 2 : 0;
bundleMask |= (1 << set);
bundles[set] = bundle;
}
// Bind
if (bundleMask) {
uint32_t first = 0;
while (~bundleMask & 0x1) {
bundleMask >>= 1;
first++;
}
uint32_t count = 0;
while (bundleMask) {
bundleMask >>= 1;
count++;
}
gpu_bind_bundles(pass->stream, shader->gpu, bundles + first, first, count, NULL, 0);
}
gpu_bundle* bundle = getBundle(shader->layout);
gpu_bundle_write(&bundle, &info, 1);
gpu_bind_bundle(pass->stream, shader->gpu, set, bundle, NULL, 0);
tempPop(stack);
}
static void flushBuiltins(Pass* pass, Draw* draw, Shader* shader) {
bool rebind = false;
if (pass->cameraDirty) {
for (uint32_t i = 0; i < pass->cameraCount; i++) {
mat4_init(pass->cameras[i].viewProjection, pass->cameras[i].projection);
mat4_init(pass->cameras[i].inverseProjection, pass->cameras[i].projection);
mat4_mul(pass->cameras[i].viewProjection, pass->cameras[i].view);
mat4_invert(pass->cameras[i].inverseProjection);
}
uint32_t size = pass->cameraCount * sizeof(Camera);
void* data = gpu_map(pass->builtins[1].buffer.object, size, state.limits.uniformBufferAlign, GPU_MAP_WRITE);
memcpy(data, pass->cameras, size);
pass->cameraDirty = false;
rebind = true;
}
if (pass->drawCount % 256 == 0) {
uint32_t size = 256 * sizeof(DrawData);
pass->drawData = gpu_map(pass->builtins[2].buffer.object, size, state.limits.uniformBufferAlign, GPU_MAP_WRITE);
rebind = true;
}
if (pass->samplerDirty) {
Sampler* sampler = pass->pipeline->sampler ? pass->pipeline->sampler : state.defaultSamplers[FILTER_LINEAR];
pass->builtins[3].sampler = sampler->gpu;
pass->samplerDirty = false;
rebind = true;
}
if (rebind) {
gpu_bundle_info bundleInfo = {
.layout = state.layouts.data[state.builtinLayout].gpu,
.bindings = pass->builtins,
.count = COUNTOF(pass->builtins)
};
gpu_bundle* bundle = getBundle(state.builtinLayout);
gpu_bundle_write(&bundle, &bundleInfo, 1);
gpu_bind_bundle(pass->stream, shader->gpu, 0, bundle, NULL, 0);
}
float m[16];
float* transform;
if (draw->transform) {
transform = mat4_mul(mat4_init(m, pass->transform), draw->transform);
} else {
transform = pass->transform;
}
float cofactor[16];
mat4_init(cofactor, transform);
cofactor[12] = 0.f;
cofactor[13] = 0.f;
cofactor[14] = 0.f;
cofactor[15] = 1.f;
mat4_cofactor(cofactor);
memcpy(pass->drawData->transform, transform, 64);
memcpy(pass->drawData->cofactor, cofactor, 64);
memcpy(pass->drawData->color, pass->pipeline->color, 16);
pass->drawData++;
}
static void flushMaterial(Pass* pass, Draw* draw, Shader* shader) {
if (draw->material && draw->material != pass->pipeline->material) {
gpu_bind_bundle(pass->stream, shader->gpu, 1, draw->material->bundle, NULL, 0);
trackMaterial(pass, draw->material, GPU_PHASE_SHADER_VERTEX | GPU_PHASE_SHADER_FRAGMENT, GPU_CACHE_TEXTURE);
pass->materialDirty = true;
} else if (pass->materialDirty) {
Material* material = pass->pipeline->material ? pass->pipeline->material : state.defaultMaterial;
gpu_bind_bundle(pass->stream, shader->gpu, 1, material->bundle, NULL, 0);
trackMaterial(pass, material, GPU_PHASE_SHADER_VERTEX | GPU_PHASE_SHADER_FRAGMENT, GPU_CACHE_TEXTURE);
pass->materialDirty = false;
}
}
static void flushBuffers(Pass* pass, Draw* draw) {
static void bindBuffers(Pass* pass, Draw* draw) {
Shape* cache = NULL;
if (draw->hash) {
@ -4250,16 +4282,21 @@ static void flushBuffers(Pass* pass, Draw* draw) {
}
}
static void pushConstants(Pass* pass, Shader* shader) {
if (pass->constantsDirty && shader->constantSize > 0) {
gpu_push_constants(pass->stream, shader->gpu, pass->constants, shader->constantSize);
pass->constantsDirty = false;
}
}
static void lovrPassDraw(Pass* pass, Draw* draw) {
lovrCheck(pass->info.type == PASS_RENDER, "This function can only be called on a render pass");
Shader* shader = pass->pipeline->shader ? pass->pipeline->shader : lovrGraphicsGetDefaultShader(draw->shader);
flushPipeline(pass, draw, shader);
flushConstants(pass, shader);
flushBindings(pass, shader);
flushBuiltins(pass, draw, shader);
flushMaterial(pass, draw, shader);
flushBuffers(pass, draw);
bindPipeline(pass, draw, shader);
bindBundles(pass, draw, shader);
bindBuffers(pass, draw);
pushConstants(pass, shader);
uint32_t defaultCount = draw->index.count > 0 ? draw->index.count : draw->vertex.count;
uint32_t count = draw->count > 0 ? draw->count : defaultCount;
@ -5100,12 +5137,10 @@ void lovrPassMeshIndirect(Pass* pass, Buffer* vertices, Buffer* indices, Buffer*
Shader* shader = pass->pipeline->shader;
lovrCheck(shader, "A custom Shader must be bound to source draws from a Buffer");
flushPipeline(pass, &draw, shader);
flushConstants(pass, shader);
flushBindings(pass, shader);
flushBuiltins(pass, &draw, shader);
flushMaterial(pass, &draw, shader);
flushBuffers(pass, &draw);
bindPipeline(pass, &draw, shader);
bindBundles(pass, &draw, shader);
bindBuffers(pass, &draw);
pushConstants(pass, shader);
if (indices) {
gpu_draw_indirect_indexed(pass->stream, draws->gpu, offset, count, stride);
@ -5132,8 +5167,8 @@ void lovrPassCompute(Pass* pass, uint32_t x, uint32_t y, uint32_t z, Buffer* ind
pass->pipeline->dirty = false;
}
flushConstants(pass, shader);
flushBindings(pass, shader);
bindBundles(pass, NULL, shader);
pushConstants(pass, shader);
if (indirect) {
lovrCheck(offset % 4 == 0, "Indirect compute offset must be a multiple of 4");

View File

@ -112,6 +112,7 @@ typedef enum {
// Notes:
// - init is called immediately, the graphics module may not exist yet
// - start is called after the graphics module is initialized, can be used to set up textures etc.
// - graphics module currently calls stop when it's destroyed, which is hacky and should be improved
// - getDisplayFrequency may return 0.f if the information is unavailable.
// - For isDown, changed can be set to false if change information is unavailable or inconvenient.
// - getAxis may write 4 floats to the output value. The expected number is a constant (see axisCounts in l_headset).
@ -124,6 +125,7 @@ typedef struct HeadsetInterface {
uint32_t (*createVulkanDevice)(void* instance, void* deviceCreateInfo, void* allocator, uintptr_t device, void* getInstanceProcAddr);
bool (*init)(HeadsetConfig* config);
void (*start)(void);
void (*stop)(void);
void (*destroy)(void);
bool (*getName)(char* name, size_t length);
HeadsetOrigin (*getOriginType)(void);

View File

@ -1035,20 +1035,24 @@ static void openxr_start(void) {
}
}
static void openxr_destroy(void) {
static void openxr_stop(void) {
if (!state.session) {
return;
}
lovrRelease(state.pass, lovrPassDestroy);
for (uint32_t i = 0; i < 2; i++) {
for (uint32_t j = 0; j < state.textureCount[i]; j++) {
lovrRelease(state.textures[i][j], lovrTextureDestroy);
}
}
lovrRelease(state.pass, lovrPassDestroy);
if (state.swapchain[COLOR]) xrDestroySwapchain(state.swapchain[COLOR]);
if (state.swapchain[DEPTH]) xrDestroySwapchain(state.swapchain[DEPTH]);
for (size_t i = 0; i < MAX_ACTIONS; i++) {
if (state.actions[i]) {
xrDestroyAction(state.actions[i]);
}
}
if (state.handTrackers[0]) xrDestroyHandTrackerEXT(state.handTrackers[0]);
if (state.handTrackers[1]) xrDestroyHandTrackerEXT(state.handTrackers[1]);
for (size_t i = 0; i < MAX_DEVICES; i++) {
if (state.spaces[i]) {
@ -1056,13 +1060,15 @@ static void openxr_destroy(void) {
}
}
if (state.handTrackers[0]) xrDestroyHandTrackerEXT(state.handTrackers[0]);
if (state.handTrackers[1]) xrDestroyHandTrackerEXT(state.handTrackers[1]);
if (state.actionSet) xrDestroyActionSet(state.actionSet);
if (state.swapchain[COLOR]) xrDestroySwapchain(state.swapchain[COLOR]);
if (state.swapchain[DEPTH]) xrDestroySwapchain(state.swapchain[DEPTH]);
if (state.referenceSpace) xrDestroySpace(state.referenceSpace);
if (state.session) xrDestroySession(state.session);
state.session = NULL;
}
static void openxr_destroy(void) {
openxr_stop();
if (state.actionSet) xrDestroyActionSet(state.actionSet);
if (state.instance) xrDestroyInstance(state.instance);
memset(&state, 0, sizeof(state));
}
@ -1967,6 +1973,7 @@ HeadsetInterface lovrHeadsetOpenXRDriver = {
.createVulkanDevice = openxr_createVulkanDevice,
.init = openxr_init,
.start = openxr_start,
.stop = openxr_stop,
.destroy = openxr_destroy,
.getName = openxr_getName,
.getOriginType = openxr_getOriginType,