@wildshard/shard-format 0.0.0 → 0.4.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (746) hide show
  1. package/corpus/brasscap-mesa/blobs/bin/02da0052111419cdff3a29f1c6d0ff0d223e0b53a956c16c65ed63d87928b3b9.bin +0 -0
  2. package/corpus/brasscap-mesa/blobs/bin/068a121cd780a2a9164416f6e4fde44834f2d2f3a5ed65c174e480b7a2d3f627.bin +0 -0
  3. package/corpus/brasscap-mesa/blobs/bin/07d5a061cd338618e528747d61eb2b17709510550ef0ba40a58b67761b200f3f.bin +0 -0
  4. package/corpus/brasscap-mesa/blobs/bin/086e3706070555baca863f6ecf9dbca09c084afa501d92d4246d896b09546f36.bin +0 -0
  5. package/corpus/brasscap-mesa/blobs/bin/08b1b9ab7c732d7dbe8f961f1fc40e84042d1fe42544f55c9ee89f04dffe3d5e.bin +0 -0
  6. package/corpus/brasscap-mesa/blobs/bin/18bdbdc704cb8aac93435d208dfe0e9a44374efb73afa3bc58c631650e0a2995.bin +0 -0
  7. package/corpus/brasscap-mesa/blobs/bin/1a210fcddcb9749ecb1c244837e8e37ea69b038faae191dee6bbbde228d31a18.bin +0 -0
  8. package/corpus/brasscap-mesa/blobs/bin/264ab9ede386504a5ff9814b0a620b879cb29f3f45a80bcfc0c80b8ee236e364.bin +0 -0
  9. package/corpus/brasscap-mesa/blobs/bin/2b6fbea4c846a23cf4802ebdb1804e128896c8dd87e5d23509db6729e5b1be4e.bin +0 -0
  10. package/corpus/brasscap-mesa/blobs/bin/2d755cc635dee90b0f3958272855a821e2dd605a189a5ffcd480a325155fe84f.bin +0 -0
  11. package/corpus/brasscap-mesa/blobs/bin/2d76c6829fe77fb55cc2541e4aca5ce5d18b68508dcdf3fa957fe4a83b9c887a.bin +0 -0
  12. package/corpus/brasscap-mesa/blobs/bin/32c15d55a4548501740593807c5007217c72dbc10a21f4613ef5e0cee0b90d1d.bin +0 -0
  13. package/corpus/brasscap-mesa/blobs/bin/3539b362cf3a61a79e92e113ebf8f255d0b25ec2d2edd816498879de831fa912.bin +0 -0
  14. package/corpus/brasscap-mesa/blobs/bin/3af38a2377bc89f6c6c82ee1e83df674efa2793db932b50a23bbce7ec9cd7941.bin +0 -0
  15. package/corpus/brasscap-mesa/blobs/bin/3c176a7a0d0850fdcee790ed2641216fc3d1cba025928de3d7784262bb9b6f4a.bin +0 -0
  16. package/corpus/brasscap-mesa/blobs/bin/3fb37e488aa81a64c997b3dd09794e988994c6ee3476c6d653ced1670888dd8e.bin +0 -0
  17. package/corpus/brasscap-mesa/blobs/bin/424dcc7b320317bf3f2c62c8f19bc80564035127eb38ab811e460934d57ea38c.bin +0 -0
  18. package/corpus/brasscap-mesa/blobs/bin/45cea35fab6bb06051a3286fca2307944850c7f9ed7aa89b7c24fafef28efda6.bin +0 -0
  19. package/corpus/brasscap-mesa/blobs/bin/499cc7863851f97d79dbfc64e76f9e6978894199184a0d80ebdca13066a8fa78.bin +0 -0
  20. package/corpus/brasscap-mesa/blobs/bin/4b7217644763b00c6ee6ae3f176c726914966fb791654a385c0638bb998b6dd2.bin +0 -0
  21. package/corpus/brasscap-mesa/blobs/bin/4cf11c7177bb082f335e5bc7a037ef00d09355c5ad8263e284a96a92630ff9ae.bin +0 -0
  22. package/corpus/brasscap-mesa/blobs/bin/536b37cab5a1edd6a68a71d122aab6898e44c68a5470a4ca8a9a72c57c02e034.bin +0 -0
  23. package/corpus/brasscap-mesa/blobs/bin/55d3628b27e0fcea383df86c434a69761439f51a013359f0829675b07ee2b616.bin +0 -0
  24. package/corpus/brasscap-mesa/blobs/bin/5652ba90fbd8146edaf42660329cc81798752f2f60b8d03956714460d5ba75ef.bin +0 -0
  25. package/corpus/brasscap-mesa/blobs/bin/57459ab5e2ac6cec65ef5e59789dd82b9666d8573df41c4a398df603f1fa456f.bin +0 -0
  26. package/corpus/brasscap-mesa/blobs/bin/5915b6aed21bba49b841b45574f44f60d26b44810bd68ac70b22f3f3b0dab072.bin +0 -0
  27. package/corpus/brasscap-mesa/blobs/bin/5c4a5c7a8e99253561105c5fa3faf14326cf0c23adc32bfe7f8aea4dbf4b05f9.bin +0 -0
  28. package/corpus/brasscap-mesa/blobs/bin/61822a412cfd461f4f7ae50bc13f242a0fca6c5c58fca72247b596ab037a1c85.bin +0 -0
  29. package/corpus/brasscap-mesa/blobs/bin/673b7712908966718341508469b39cd49e6461f690ca3c23d4621ea7eba0cc30.bin +0 -0
  30. package/corpus/brasscap-mesa/blobs/bin/69394a49520f84f6dccc1655f1c89eedc913ac53a7e48ac5dc1bff4141639bb4.bin +0 -0
  31. package/corpus/brasscap-mesa/blobs/bin/6e58a53a6c2acd50f9f80fd270ca034c54421df8a587e181101b4b75b952ac5d.bin +0 -0
  32. package/corpus/brasscap-mesa/blobs/bin/75dc9f23ee71e11a3a0c67eb77275d741a281c3398808fb42efd52b9973d5d04.bin +0 -0
  33. package/corpus/brasscap-mesa/blobs/bin/76c6a403293a68ed3d6ad14e9dd27b555c3a1ef4a3cae12a2bd2ab3e67c5ad02.bin +0 -0
  34. package/corpus/brasscap-mesa/blobs/bin/82b73ce3a18e47092840fc029177861887aa2867b007248ac79ffa20895a4491.bin +0 -0
  35. package/corpus/brasscap-mesa/blobs/bin/8430d9bbfb4e2b678c54595ad95555c3c73d0e1b144a4d6e29664ccb4371baf0.bin +0 -0
  36. package/corpus/brasscap-mesa/blobs/bin/848d4492508689f5c4a224079dca8809e872e33b8f2635c9f16da5dc21beed16.bin +0 -0
  37. package/corpus/brasscap-mesa/blobs/bin/84941ac387a0d245ea20bd663ff4ee78c5315bedfa058ada0961765aff61acaf.bin +0 -0
  38. package/corpus/brasscap-mesa/blobs/bin/859b7bbcf048a4525db0548b8f5afef83bfc4870914767153f44c05e83436ec5.bin +0 -0
  39. package/corpus/brasscap-mesa/blobs/bin/87b68b45680a57c796eed9183211b03335a6ad6737372b3ef476c2cf42efa631.bin +0 -0
  40. package/corpus/brasscap-mesa/blobs/bin/8cef94308af8d09670e4c99a3b6c3d9280b7a27d386653a3bd7d482b2cdf2b65.bin +0 -0
  41. package/corpus/brasscap-mesa/blobs/bin/8e564bce3f352c2186ae09ed7fbca9739c10abc46fd5f6893c68cb47178bd2b4.bin +0 -0
  42. package/corpus/brasscap-mesa/blobs/bin/8f89e79d0fb9b04d48c7b5719e1d024161c6a2119835b18dcb193ff51123a9be.bin +0 -0
  43. package/corpus/brasscap-mesa/blobs/bin/8fe511ad48656a0b10801100b9100edab1be605a8a182dc5c834d298bf0d9166.bin +0 -0
  44. package/corpus/brasscap-mesa/blobs/bin/900bda6562d06fafda54c495e325d57dbb7931813178ee207449c5519d89d537.bin +0 -0
  45. package/corpus/brasscap-mesa/blobs/bin/997b1b7d9210bfa77dc71f16a57c6bd66bc7c648686dc2a2666044c95042978a.bin +0 -0
  46. package/corpus/brasscap-mesa/blobs/bin/a111bb4c6cec536bcf57dddc744b871ac9f3d094ce459c16243adca19020db77.bin +0 -0
  47. package/corpus/brasscap-mesa/blobs/bin/a2208bf899e6c84942eef9fbab569d597f574551afae5864f1953c6a517af068.bin +0 -0
  48. package/corpus/brasscap-mesa/blobs/bin/a302ddb2598a72ece53780094b64ad861dc68e6913d8a1ea08f5d141736e2986.bin +0 -0
  49. package/corpus/brasscap-mesa/blobs/bin/afcbc671326d0dac14e460662c1f793335877ba53cc965f67c0306833b087e7c.bin +0 -0
  50. package/corpus/brasscap-mesa/blobs/bin/b657159e6a28c801a211024f96a7ef60e388ce928a7b41ae3d7555a6f8fd2e3e.bin +0 -0
  51. package/corpus/brasscap-mesa/blobs/bin/be6bbc6cd15ba525790075252ba0ed0b28dae5cfbfa118c00dfb9ea1ab95e668.bin +0 -0
  52. package/corpus/brasscap-mesa/blobs/bin/c1360e3cbe6b3dc8894bc66c359853854c2e5adeac9c7cd5ba63f5db448be601.bin +0 -0
  53. package/corpus/brasscap-mesa/blobs/bin/c7983018dbf8e384ddf73191f526075bd0b29907061ab17642ecdc18ea7b9897.bin +0 -0
  54. package/corpus/brasscap-mesa/blobs/bin/cea66f27ca60ea173ee0a2bcd91964dc2638eb5657250fe3aa5bd3e41faf8730.bin +0 -0
  55. package/corpus/brasscap-mesa/blobs/bin/d052be571a0f3ab69926951f3a4c9d63f05da2ca6d91e5963dd63e04ecb515de.bin +0 -0
  56. package/corpus/brasscap-mesa/blobs/bin/d162a993a60dd682c8c21dd111429d84d8d30413a000cf481cf98d06ca83e706.bin +0 -0
  57. package/corpus/brasscap-mesa/blobs/bin/d238c3d3d054911714ebe30dafc99e6ad13925b7a600ba9f8d532d0f515f3f5a.bin +0 -0
  58. package/corpus/brasscap-mesa/blobs/bin/d9a98cfe2865a9bb0e94f35c735a570b0625b58f890a6b1f6e14fab2401f0af2.bin +0 -0
  59. package/corpus/brasscap-mesa/blobs/bin/dc27ae954b7b8a13a9459d6ca6ef2997f662715ff5f5453ea0da169f141748b8.bin +0 -0
  60. package/corpus/brasscap-mesa/blobs/bin/e3ff1fd41cf76668b8e1927c0c2e4056b63a293ebbd300a8f1b1d27d87786271.bin +0 -0
  61. package/corpus/brasscap-mesa/blobs/bin/e45b7344d373b3ef4a94f560cf4e17b1eb3b8cd89d1e552fc9be11d6b7b546f0.bin +0 -0
  62. package/corpus/brasscap-mesa/blobs/bin/eb14eb898224d5d81d1012bec54f2b79f9377dc60fa1d01e49b4c3e148292d77.bin +0 -0
  63. package/corpus/brasscap-mesa/blobs/bin/ed0e0101a3d91a3a615f9e78ef36f7deb8bb0eab0f133241d621925d0b596599.bin +0 -0
  64. package/corpus/brasscap-mesa/blobs/bin/f722e3a3b1f0a3d7b9f7d7c66c46d8c87245de5f8eece055daf95c7086f8c267.bin +0 -0
  65. package/corpus/brasscap-mesa/blobs/bin/f76013aedfd810f136fa689a151024bcb942687ef42ae7edf1fd3513ac4e22c7.bin +0 -0
  66. package/corpus/brasscap-mesa/blobs/glb/0547e63693282614673b13bade4c08eb772020757b131b7c80f2077873aab70e.glb +0 -0
  67. package/corpus/brasscap-mesa/blobs/glb/0cf89e9b1824440d213c8e9e33fb357734b7241b4c7eedaba3df7f8306e05425.glb +0 -0
  68. package/corpus/brasscap-mesa/blobs/glb/0e01060e3a507ffff6461c50b5c565c71380a6a67d9760cdd7a09afd3e30b584.glb +0 -0
  69. package/corpus/brasscap-mesa/blobs/glb/0ef326c5cf5292cd15b48b851460ee8156f51e0a5b62457c8f1f3c53c41665a3.glb +0 -0
  70. package/corpus/brasscap-mesa/blobs/glb/1112ff4a3f69db3b62c6d2d6ae021e7c43ce0ca1feb1d3130376881decb3c6b0.glb +0 -0
  71. package/corpus/brasscap-mesa/blobs/glb/11357cb8a0670fdc9a03780dd79a31e0aa7a0537786cbf66491bae1722d6feb3.glb +0 -0
  72. package/corpus/brasscap-mesa/blobs/glb/11dbecc73bd343c375bd4b79db8dbda2272e76a6b8426ac29e90f2b1272ccfc2.glb +0 -0
  73. package/corpus/brasscap-mesa/blobs/glb/133f639cfa837bc5da7915121c71fd32281660c2aaa0248bd59bde47e7faf8bc.glb +0 -0
  74. package/corpus/brasscap-mesa/blobs/glb/16812a090136b6678633aa4db03e4187920ae0aca776ad6da373c600cd341972.glb +0 -0
  75. package/corpus/brasscap-mesa/blobs/glb/17e63980d7934cfe1d2823d78652af338fe9f0c2170106cd4506a2c4e7f4716f.glb +0 -0
  76. package/corpus/brasscap-mesa/blobs/glb/199224cafc86904bdefec8f01d131d7ca3e076a22b689bfc6a26dd20373cf286.glb +0 -0
  77. package/corpus/brasscap-mesa/blobs/glb/1a5c8cf223a2f64715ea5eaf14d97a0131f9ebdef4388dc4823dcfa57817724c.glb +0 -0
  78. package/corpus/brasscap-mesa/blobs/glb/1b0ec09ad6718149d7ca514136cee09b04c96425f03af0559fd097112aa0daa5.glb +0 -0
  79. package/corpus/brasscap-mesa/blobs/glb/1e5024bbb1284b2ed39bbca2d0ade3acb5be2a2c6ba643291f269b76098c7f79.glb +0 -0
  80. package/corpus/brasscap-mesa/blobs/glb/1e7635972e13468ffcbb1608f1d12559b066b4533912be2c35e3db07fd4a679d.glb +0 -0
  81. package/corpus/brasscap-mesa/blobs/glb/1f03db3a38a21b8d4d02f8ede30e1303cd8d4c426815326a88f45a268b17a492.glb +0 -0
  82. package/corpus/brasscap-mesa/blobs/glb/2624abb7bf45618be40f8c3221445179fca44f7321baff415fdf7ddd5e0afc6f.glb +0 -0
  83. package/corpus/brasscap-mesa/blobs/glb/27fc3bad6db6e2b5ade5d242867d882362482ddf19c647edef821afc27d52dc2.glb +0 -0
  84. package/corpus/brasscap-mesa/blobs/glb/29959bdb5b04a9180e88ec1ed976bae55424d3dc50985f13c0f85bae11ae79ee.glb +0 -0
  85. package/corpus/brasscap-mesa/blobs/glb/308cbce2b1b6360f9a2dc275d0bc28be1966fc3ff5e0a58844405ba867f3f668.glb +0 -0
  86. package/corpus/brasscap-mesa/blobs/glb/3674d7be969755aaffa368e57b8d1bb743bc98e766a57948859d54fdc7d2c066.glb +0 -0
  87. package/corpus/brasscap-mesa/blobs/glb/3736ca95c9c40b30e21302ae6c89148d8ac09264dfbb7e5764b08c265a73ba3c.glb +0 -0
  88. package/corpus/brasscap-mesa/blobs/glb/3bc90e1dc9411d249697e4ec352baa4886f91cacfe4940ac43aed879f60966c9.glb +0 -0
  89. package/corpus/brasscap-mesa/blobs/glb/3f519c7c7482307cae908b27602dcb7716e2da4b651eff39c4c37103998d18fa.glb +0 -0
  90. package/corpus/brasscap-mesa/blobs/glb/4767636d5554b60c94b447b87b77fc1456a2b9af42bfe08585389d27f306dd5e.glb +0 -0
  91. package/corpus/brasscap-mesa/blobs/glb/4a3242773b3a73a73ee746a0cdf30c8d6d904bb4406dfdf9822dcd535d6ae308.glb +0 -0
  92. package/corpus/brasscap-mesa/blobs/glb/4c7bf3788cba151442d85c3f76553c2e356edf8566ae8243d0a535c9bcde51d0.glb +0 -0
  93. package/corpus/brasscap-mesa/blobs/glb/4f3b9f4c818ed6d375947e9603dd058c539e14ff05aa193fb5054d899dbb82a2.glb +0 -0
  94. package/corpus/brasscap-mesa/blobs/glb/4fdf7ee67d12de1cd30c3c2bbd9409032dcab5feb3a7d3977b92c50b1d161afe.glb +0 -0
  95. package/corpus/brasscap-mesa/blobs/glb/5821f33aa00e9acd2f4c0a29129978ee7006a879d163ce1463ae476031bfabcf.glb +0 -0
  96. package/corpus/brasscap-mesa/blobs/glb/5a986c3e44fc686a2efe7648c3945bb7b51cf303918381383f21f898dd312cad.glb +0 -0
  97. package/corpus/brasscap-mesa/blobs/glb/5c32fc1de6d198ed606d3e8c3264319acdd950dab18e8b723fc6332bf2f56aea.glb +0 -0
  98. package/corpus/brasscap-mesa/blobs/glb/602ce4e8b00a0afbc1a894b65641e48d362ec834a559b9d97a4801473bb01da7.glb +0 -0
  99. package/corpus/brasscap-mesa/blobs/glb/6180f9f96167522d8cab4de1d52598cecee8d7ee042f48e41669c98cf61c19c3.glb +0 -0
  100. package/corpus/brasscap-mesa/blobs/glb/6205973ba63f7a554662ba05010d25131bed2d9656de422e2067ca54709d5b3c.glb +0 -0
  101. package/corpus/brasscap-mesa/blobs/glb/693e556f2165232e8a38b1b2d68676f235ece5705c564992cfa7731426f4d376.glb +0 -0
  102. package/corpus/brasscap-mesa/blobs/glb/6a46175438bec5527c281b577bd220b6badedf3c74266b997d39e596f83b8853.glb +0 -0
  103. package/corpus/brasscap-mesa/blobs/glb/6ca1bcad7ea053a259b7f9fc5a7ec388a4cd29d44391d93386ea8b1143d94c21.glb +0 -0
  104. package/corpus/brasscap-mesa/blobs/glb/6f9bc99656b611890d6acc76ee416f6222ca2d5f62167840b4216a21e020a4c8.glb +0 -0
  105. package/corpus/brasscap-mesa/blobs/glb/6fb1e7857996662233ab5314fc13f8aa30703f91c04542e352ec17f9dc4fc054.glb +0 -0
  106. package/corpus/brasscap-mesa/blobs/glb/7028ec39712143a7e9d09d2e1477282b654d0470102ca9d272ac82b23604cb21.glb +0 -0
  107. package/corpus/brasscap-mesa/blobs/glb/73af65ac86efa61099178f3e7075dcd26d389ee9b9aa3546c18dede10c3dfda1.glb +0 -0
  108. package/corpus/brasscap-mesa/blobs/glb/73b992b71bd3165ff7701ab1430c075cb5ba9b74e6363d24640377b1011ddc93.glb +0 -0
  109. package/corpus/brasscap-mesa/blobs/glb/7471261d4df59979ba41a622d93779b66ebecd50353ad433862e603ee65f8748.glb +0 -0
  110. package/corpus/brasscap-mesa/blobs/glb/76e9a3fcca962c2f900cf79dc1a0851840bd405dc11231f629f784adbcb69d23.glb +0 -0
  111. package/corpus/brasscap-mesa/blobs/glb/79d2d29e8cd8b642386b5f31429b39bc4d6f13e53107dda00ebc463abf80c79d.glb +0 -0
  112. package/corpus/brasscap-mesa/blobs/glb/7de66fcfffe4ff108510cbe6bebec44e28ab4b78e98e9c1a38466db5b81881f7.glb +0 -0
  113. package/corpus/brasscap-mesa/blobs/glb/811fa798cb81ea99488db98e3d3ddea815aac8f6e7493ad04d0176f603978678.glb +0 -0
  114. package/corpus/brasscap-mesa/blobs/glb/89b277f1636be220ff5658ff1f1c62efe14079d6e1f42efb373fbf0246801533.glb +0 -0
  115. package/corpus/brasscap-mesa/blobs/glb/905c5fe666d9f6174e987382e47d3f325c5696cf8792d7a4a1dd120a438b8270.glb +0 -0
  116. package/corpus/brasscap-mesa/blobs/glb/90efe3e05370ee853c0130b98ee82f00b86f7c7104e96b094715187fa49ac16f.glb +0 -0
  117. package/corpus/brasscap-mesa/blobs/glb/968a7c5cb13014bce00a29d43b344bd6943ff00ae2908abbc6b40a994f1172a1.glb +0 -0
  118. package/corpus/brasscap-mesa/blobs/glb/9a955b4e69dfa5b38f071099053c1a3684cf85ec2d346420de2853c61768f8cc.glb +0 -0
  119. package/corpus/brasscap-mesa/blobs/glb/9da2781216a2e482dd8a6ada5ebb43bcf48e0169430e787ac277559cb2ade19a.glb +0 -0
  120. package/corpus/brasscap-mesa/blobs/glb/9db02aab14a3b52463deadefbf4ba771809941e7fcb137c905955bdc80ec23bd.glb +0 -0
  121. package/corpus/brasscap-mesa/blobs/glb/a3fe1788cf5d7f260249c722f0e0695a4d55744d1b14be44122377147a296256.glb +0 -0
  122. package/corpus/brasscap-mesa/blobs/glb/a5c75af8f090d3c95fa46d2be49be5031138d7cd1bae234ae028edf717bf299e.glb +0 -0
  123. package/corpus/brasscap-mesa/blobs/glb/a771abd40bd337a464c1bd19f841b62e290124faa89b19ec50e85ab36bc740a5.glb +0 -0
  124. package/corpus/brasscap-mesa/blobs/glb/a94a2ad2ed463a47cdda117df25b06b3cf6be37ddac08594bc5f5d76c7237730.glb +0 -0
  125. package/corpus/brasscap-mesa/blobs/glb/ad434e4a6490e495994b25f7574a5847a9f7d9c2ca5a2b229a9dfdd2e5e2bb72.glb +0 -0
  126. package/corpus/brasscap-mesa/blobs/glb/aeae7b05404b852008a7897689e58aacef44a2c3bc0e87d2519ecdb4cb1e3ff5.glb +0 -0
  127. package/corpus/brasscap-mesa/blobs/glb/b0c0c8a4985f92be3b358a8e703c67957427501882aeee05b4ccd3c7880930d4.glb +0 -0
  128. package/corpus/brasscap-mesa/blobs/glb/b25174c3cd13eea6e1d9c3104ee5197dc6330129b2f0f7676e8a429900999d9b.glb +0 -0
  129. package/corpus/brasscap-mesa/blobs/glb/b3eecdec571df96338edf690443394ff859383b4c94f4cf33d42c240006f8543.glb +0 -0
  130. package/corpus/brasscap-mesa/blobs/glb/b7aa0c61ff9e7411535c7b7b8e587849a92bad00d431171ab16ad47d55db0a53.glb +0 -0
  131. package/corpus/brasscap-mesa/blobs/glb/b9deef944c22331bc05220d1d6e46412e3cb1246ef041a4405d0cbbd90c2d624.glb +0 -0
  132. package/corpus/brasscap-mesa/blobs/glb/ba9376e4ac39b809133ab717edb4c88b5219118766db492d7c97534ce119c2ec.glb +0 -0
  133. package/corpus/brasscap-mesa/blobs/glb/baf338e9c272158b905fb58a712e29410c657a45be2764f1c6c43ca87fd1db48.glb +0 -0
  134. package/corpus/brasscap-mesa/blobs/glb/bd442ac9fbe52b9f2e4ba586670017c3f2d9fedf1cbdec77ef24e9f8b3a183c8.glb +0 -0
  135. package/corpus/brasscap-mesa/blobs/glb/c142adcf253be43b66f23ede8cea1e8fcfa256ebf53054a1068ace04745718a6.glb +0 -0
  136. package/corpus/brasscap-mesa/blobs/glb/c6d7cbdc4b2ee9d416edf4d736a4f374f08aea98ca395ad371a50a1853744cfc.glb +0 -0
  137. package/corpus/brasscap-mesa/blobs/glb/cfb165a7675d15cee2c490b31095a58f73bace50ccc1e0fdf2c8dc4400f1df27.glb +0 -0
  138. package/corpus/brasscap-mesa/blobs/glb/d40f2ee59612473e9f687f17a0e203fdb4ba54c7185b05a8d81a433b04f24134.glb +0 -0
  139. package/corpus/brasscap-mesa/blobs/glb/d50ce95411156a6b6cf386aefa5ee58db659811813f74be74f323e7c5795056f.glb +0 -0
  140. package/corpus/brasscap-mesa/blobs/glb/d6af418bbde39b4fc7d22a61401d416be7a3fc1214ea2d3f42b4549c392d22ca.glb +0 -0
  141. package/corpus/brasscap-mesa/blobs/glb/de7222ceeb1f72693dfb7fd1f343798659e03772d77f2b498fd8ebece2d5550a.glb +0 -0
  142. package/corpus/brasscap-mesa/blobs/glb/e26975b198127ac3b6b4f5c4bc08ad47d6691398feee777743285391cd36d502.glb +0 -0
  143. package/corpus/brasscap-mesa/blobs/glb/ea428490cd5f2672676a2776a598b819b08246871e76de94b7196f9643144986.glb +0 -0
  144. package/corpus/brasscap-mesa/blobs/glb/eb96567a266d24be188cb5b08021112f2fad311cbead939d53c5565da11f6265.glb +0 -0
  145. package/corpus/brasscap-mesa/blobs/glb/ecf66230bf7b68050c0827c2e4caf3de90e46859d291b794faa0dd3816d9dac6.glb +0 -0
  146. package/corpus/brasscap-mesa/blobs/glb/ed8f067763a4a8adb83d80c8324b2a9668f1061f5f5352f21295e6cc5132386f.glb +0 -0
  147. package/corpus/brasscap-mesa/blobs/glb/ee507a38772865467736d370791fe73c6aa4d83fe3e7ff4baa156b9cb2894c1c.glb +0 -0
  148. package/corpus/brasscap-mesa/blobs/glb/eedc5b62dc6f27d4a089e9f5b282f626129236d3f1689b001e04f8748bf8859c.glb +0 -0
  149. package/corpus/brasscap-mesa/blobs/glb/f4119b9c6c23435619682b5d247743459e76584b9b0d6c5cb689d8e156906695.glb +0 -0
  150. package/corpus/brasscap-mesa/blobs/glb/f576047267a0bf9bd4bfc47072ea3d11066345b839953546292da678d1cb4722.glb +0 -0
  151. package/corpus/brasscap-mesa/blobs/glb/f8cdfb11997d4ccabea88bcdd3924cc8b621b33618b18fe5fbfd286edfc1d87e.glb +0 -0
  152. package/corpus/brasscap-mesa/blobs/glb/fce95ecc5db24c903bd46f338e366e2715411465a5efac180e2f0f46397e59de.glb +0 -0
  153. package/corpus/brasscap-mesa/blobs/image/0579557f9344df6f2c4b1225e6252e53ab86d417a4c9b504b5c714a08a388e47.jpg +0 -0
  154. package/corpus/brasscap-mesa/blobs/image/9e18816a2ec16fbbb1f00f4a39c73ac2cbf6a8cdc17b4c96b1eba4cc9a754dc7.jpg +0 -0
  155. package/corpus/brasscap-mesa/blobs/image/eb453c71cfb1f9441eb00b32281f98e226e49d9dcf75c231455575fcdc652222.jpg +0 -0
  156. package/corpus/brasscap-mesa/blobs/json/e0072ed82115c519b891f53a194ea3b28fff7d3826d8ddf23460d6f21b7728d9.json +1 -0
  157. package/corpus/brasscap-mesa/blobs/json/ffb0e08eaaa7188db1f55931c9b6330937316091cc7463ed2eff6767bbfa33de.json +1 -0
  158. package/corpus/brasscap-mesa/blobs/wasm/1d6ace79610c4d510b60ad0c52915e42b57797d91f1ef292f60d8a3daec03dd6.wasm +0 -0
  159. package/corpus/brasscap-mesa/blobs/wasm/24a4d4c1292677b1c984b5c0d3497ae2929528bf511df475f80cc20945bb08ec.wasm +0 -0
  160. package/corpus/brasscap-mesa/blobs/wasm/b86d8afcc269fb063ebf64768fc3787635b65a7409a571115b07be2e4da39733.wasm +0 -0
  161. package/corpus/brasscap-mesa/cook.json +1 -0
  162. package/corpus/brasscap-mesa/mounts/shardfiles/brasscap-mesa/discovery.json +1 -0
  163. package/corpus/brasscap-mesa/sections/actors/creatures.json +1 -0
  164. package/corpus/brasscap-mesa/sections/actors/crowds.json +1 -0
  165. package/corpus/brasscap-mesa/sections/actors/species.json +1 -0
  166. package/corpus/brasscap-mesa/sections/audio/audio.json +1 -0
  167. package/corpus/brasscap-mesa/sections/combat/encounters.json +1 -0
  168. package/corpus/brasscap-mesa/sections/combat/items.json +1 -0
  169. package/corpus/brasscap-mesa/sections/combat/strikes.json +1 -0
  170. package/corpus/brasscap-mesa/sections/economy/ledger.json +1 -0
  171. package/corpus/brasscap-mesa/sections/economy/loot.json +1 -0
  172. package/corpus/brasscap-mesa/sections/look/look.json +1 -0
  173. package/corpus/brasscap-mesa/sections/look/materials.json +1 -0
  174. package/corpus/brasscap-mesa/sections/quests/quests.json +1 -0
  175. package/corpus/brasscap-mesa/sections/sim/client-scripts.json +1 -0
  176. package/corpus/brasscap-mesa/sections/sim/hooks.json +1 -0
  177. package/corpus/brasscap-mesa/sections/sim/plumbing.json +1 -0
  178. package/corpus/brasscap-mesa/sections/sim/scripts.json +1 -0
  179. package/corpus/brasscap-mesa/sections/sim/sim.json +1 -0
  180. package/corpus/brasscap-mesa/sections/state/migrations.json +1 -0
  181. package/corpus/brasscap-mesa/sections/state/state.json +1 -0
  182. package/corpus/brasscap-mesa/sections/ui/card.json +1 -0
  183. package/corpus/brasscap-mesa/sections/ui/compendium.json +1 -0
  184. package/corpus/brasscap-mesa/sections/ui/level.json +1 -0
  185. package/corpus/brasscap-mesa/sections/ui/ui.json +1 -0
  186. package/corpus/brasscap-mesa/sections/world/collision.json +1 -0
  187. package/corpus/brasscap-mesa/sections/world/days.json +1 -0
  188. package/corpus/brasscap-mesa/sections/world/edge.json +1 -0
  189. package/corpus/brasscap-mesa/sections/world/movers.json +1 -0
  190. package/corpus/brasscap-mesa/sections/world/navigation.json +1 -0
  191. package/corpus/brasscap-mesa/sections/world/props.json +1 -0
  192. package/corpus/brasscap-mesa/sections/world/spawn.json +1 -0
  193. package/corpus/brasscap-mesa/sections/world/terrain.json +1 -0
  194. package/corpus/brasscap-mesa/sections/world/tiles.json +1 -0
  195. package/corpus/brasscap-mesa/sections/world/traversal.json +1 -0
  196. package/corpus/brasscap-mesa/sections/world/water.json +1 -0
  197. package/corpus/brasscap-mesa/sections/world/weather.json +1 -0
  198. package/corpus/brasscap-mesa/shard.json +1 -0
  199. package/corpus/brasscap-mesa/validation.json +1 -0
  200. package/corpus/handwritten/blobs/bin/027822f6ae9c374ce1ced851f2227cb9acb03077e5cc6b7fecb245c31f021abd.bin +0 -0
  201. package/corpus/handwritten/blobs/bin/0377ce182bd604bcf4d501f14bf954c434ea64ad856ad9d71c502d1045612703.bin +0 -0
  202. package/corpus/handwritten/blobs/bin/05ad93d239eeeb5d9afa09b00d90c56098d88e8850e5b5e691fcaa7520dec3cd.bin +0 -0
  203. package/corpus/handwritten/blobs/bin/0c8980141e6e394ea473df1eb11c347ba617a1a9a4b39b3fa1871b5d15b97d87.bin +0 -0
  204. package/corpus/handwritten/blobs/bin/14eb11f8d809320e0a68b1edea7837d7a5b4a3da71f1ce4f54068e0afe0b039b.bin +0 -0
  205. package/corpus/handwritten/blobs/bin/16590066c039ac71e5038a9866a53ccb95e21af13db29cb655b379c4fcfef7bb.bin +0 -0
  206. package/corpus/handwritten/blobs/bin/1795b5147ad52482445d2414ee22823b947c43a917b6e96fd9ec017f17000912.bin +0 -0
  207. package/corpus/handwritten/blobs/bin/18f2e24ecc1ed1b1d12ae1c89732a5a1a618ab6e973d4ff0332cf9ecc4e4f4a6.bin +0 -0
  208. package/corpus/handwritten/blobs/bin/1a18ade01095f1a9ebe75650127861ef27dda0bb17c2b91bde057ec88ef2e98a.bin +0 -0
  209. package/corpus/handwritten/blobs/bin/1dba017cddb874bc147efb00c55418846ffa344a696f4df702bbabeea55034d0.bin +0 -0
  210. package/corpus/handwritten/blobs/bin/248c703537e4687ddd2b69a40d1ef3936da718626289d6867ce0a6866f562ba4.bin +0 -0
  211. package/corpus/handwritten/blobs/bin/2612d9fd4727f8c349f2dbfb7b1650bb7a752d0798a4966ac22cf2b6cdd9fcef.bin +0 -0
  212. package/corpus/handwritten/blobs/bin/28c54c766e90e3b046a2377b9fa015b0ce45cf3da4420f2b10553251f86c06aa.bin +0 -0
  213. package/corpus/handwritten/blobs/bin/30866b4807b12579f50218f6525c3db00919fbd43c97921daf47b3244b25dca6.bin +0 -0
  214. package/corpus/handwritten/blobs/bin/3d14fae85d77406a9b8c59f2e973cdae9587d49108ea92fb460679ca860196b8.bin +0 -0
  215. package/corpus/handwritten/blobs/bin/3f2201a53c441abcfb52089fe9bbb01f26fac8744099d3fb6668452885c2fa11.bin +0 -0
  216. package/corpus/handwritten/blobs/bin/42f270a99367fc4cc901518ccaa344ab595e265f113be944510da745c11f69d1.bin +0 -0
  217. package/corpus/handwritten/blobs/bin/43fd4327fedd51a586684ac611bcad4a8b9d62e51e03967de71fb42c9bf0f6e1.bin +0 -0
  218. package/corpus/handwritten/blobs/bin/484adda0898a881b6f095dad447f6a619bf0933f65efe940b72f1ab7f3630c22.bin +0 -0
  219. package/corpus/handwritten/blobs/bin/4a38cd49e8797429ce76265c3d8972195d5b0a02a35fc05fc513eab11240f415.bin +0 -0
  220. package/corpus/handwritten/blobs/bin/4fe636237bbbd4f836b0816bc61702f4c224d4cb91fbd94f244c731e24a1b945.bin +0 -0
  221. package/corpus/handwritten/blobs/bin/51b1cff782dc7ebb382bc429ee965023d4cdb52c7b3e37d6ffff5ef55c1c2813.bin +0 -0
  222. package/corpus/handwritten/blobs/bin/52561f02071ecaa98432fab5e8ece407a8e8f733a01f8eb7c543d1efe02614da.bin +0 -0
  223. package/corpus/handwritten/blobs/bin/556d6333923afea9641c4738741a41d6a46ae28a508288b9a49a749a344c1398.bin +0 -0
  224. package/corpus/handwritten/blobs/bin/5caeb97f32c7f31e1029eebdf31131f879f781bb5e3a225206a646710d83fd75.bin +0 -0
  225. package/corpus/handwritten/blobs/bin/5d1131e42a045083225105b640ff72e02c7f353ee6285545ac264d01bea26b1b.bin +0 -0
  226. package/corpus/handwritten/blobs/bin/5d80b30eee9f8342a92f6756fd0d84fb9d2d2ce994d222627641e584ad45d2a8.bin +0 -0
  227. package/corpus/handwritten/blobs/bin/5e0f9f7f2a85abe11a0a61ede853c9b9942b4494c3eb9943785cf6ae221e40e3.bin +0 -0
  228. package/corpus/handwritten/blobs/bin/5fdc5485343bba8201185c9bae862ad8618498ab5ce63b53514e4e0226fa7bdb.bin +0 -0
  229. package/corpus/handwritten/blobs/bin/6623dcb0b31c9ca0be342f6dca6b9e607ec3c12ff82068fa6030c142c2df77f7.bin +0 -0
  230. package/corpus/handwritten/blobs/bin/6887131a04175edbd1989aa95e8749d1703e7f2d0b8464e85f6bad28d6964125.bin +0 -0
  231. package/corpus/handwritten/blobs/bin/6cf89771d998486cad9049e6f4fc177d742a18ad79fafa4596814ff9d3cf1952.bin +0 -0
  232. package/corpus/handwritten/blobs/bin/74bbb0fc219e8476cd5550014a357ee18abc981ff3fe787ae3e60d4593705ec5.bin +0 -0
  233. package/corpus/handwritten/blobs/bin/76784a7f519ac43ce113a0c9365881839b75f66f96aa009fe8d3c8ab539ef283.bin +0 -0
  234. package/corpus/handwritten/blobs/bin/79a2f693ee2da546bb551f8b641b9c3affd2b8bfb5632ed7f417daba9d900af9.bin +0 -0
  235. package/corpus/handwritten/blobs/bin/7b593b0f9eefb957fb9d58b316d9836971203038d7c8127284bba44ccb3090bb.bin +0 -0
  236. package/corpus/handwritten/blobs/bin/7bb8e518ca5606de78972a6c648b57623f8bc12d7e06b4bbf43c60ac419a9bbd.bin +0 -0
  237. package/corpus/handwritten/blobs/bin/7c6133f3350147257fa501f41269cb77cb11d8ed96d351e873333b079cee524a.bin +0 -0
  238. package/corpus/handwritten/blobs/bin/7f5acf1893828995256f5b2c54948f80ba21e53de72db26ea72ce2479f5b0682.bin +0 -0
  239. package/corpus/handwritten/blobs/bin/836516253cf0f3e6e79537609fdbe6331c8c5c974f9ec4d3fbe4a7db48cf123d.bin +0 -0
  240. package/corpus/handwritten/blobs/bin/89900344f82d5c1474d2a163f8d29903447bac64e9c9775123ef499be70c2380.bin +0 -0
  241. package/corpus/handwritten/blobs/bin/95d76a9273c3edd98b3643c54e2e7989800bdcaf6f815230ef09f601e760330f.bin +0 -0
  242. package/corpus/handwritten/blobs/bin/a7b5a5fe053a38c93eed899bde5051cddd80e0a3f3c82b6fd814869097f0944b.bin +0 -0
  243. package/corpus/handwritten/blobs/bin/b29be84df0bfd1bc97a1464fd5ea068130947bfed3328e167640c81326eb45d7.bin +0 -0
  244. package/corpus/handwritten/blobs/bin/b6518dc352be03332a256f1cd9d1149da262fe6829e87ba43364f19c687ca7c9.bin +0 -0
  245. package/corpus/handwritten/blobs/bin/b7edb8095beeb158adb61ae3caa1653773757afbcd8fb2764c94b975a43fe9e2.bin +0 -0
  246. package/corpus/handwritten/blobs/bin/b86d617ae7fa397df51ff7af87cd89fa113ac19abd3840ea8f3a086d6c82905c.bin +0 -0
  247. package/corpus/handwritten/blobs/bin/bb860b5c67ee7f2fafd67588822152228d6f6c9de1231123eeafa4844732b18b.bin +0 -0
  248. package/corpus/handwritten/blobs/bin/bf8c3971bbb224075d488ffa9cfc20e322c61f9ca0c59c356838415f6778014b.bin +0 -0
  249. package/corpus/handwritten/blobs/bin/c2edd52ee14ebdc9fcc01d38c15d6ab3379df7a20098c260c546551898959cd1.bin +0 -0
  250. package/corpus/handwritten/blobs/bin/c3de13c551c5b45270143dcbb9fc9a31651f6012355823c0709c2fe6cafda940.bin +0 -0
  251. package/corpus/handwritten/blobs/bin/c57a8d9da18b1289afd16de00dd1ec75027048b8dcf7dd218da36bc3276ff035.bin +0 -0
  252. package/corpus/handwritten/blobs/bin/cc2975c9dea4c31b1bf380623a8f44059423004653f9cae4f603d374174323b7.bin +0 -0
  253. package/corpus/handwritten/blobs/bin/d476abba2e1c63ad3c7527617559173484ee837a5be2744d968466d5527c286b.bin +0 -0
  254. package/corpus/handwritten/blobs/bin/db242f89115c878cf0c3b976a1647e9cdeb6a1a51813b1dacaf1188715603294.bin +0 -0
  255. package/corpus/handwritten/blobs/bin/dcc4b9b3bc4ca777d11c494ae5478f17ad7cf2efa18dcba30def872d55355bc3.bin +0 -0
  256. package/corpus/handwritten/blobs/bin/dd99da483f385327d6b8319d6e2e9000b580280069353718aa0fda2230707e8b.bin +0 -0
  257. package/corpus/handwritten/blobs/bin/dfc139dba26f1789e16f72602e654636f2d99bcd41e3f10454da74b3a6a64dda.bin +0 -0
  258. package/corpus/handwritten/blobs/bin/e15ab3cc9f60657321cfe8d9751e086f025734f4e7068271e0baf6066a686f18.bin +0 -0
  259. package/corpus/handwritten/blobs/bin/e16a83a71213db6f804ce1d53981a2308062752c85c440022d9eeb7605fd37c8.bin +0 -0
  260. package/corpus/handwritten/blobs/bin/e7355876487f660ac9f25c9d9dfcd66eaf432e1e1669eb89d12ce8267a8d3e86.bin +0 -0
  261. package/corpus/handwritten/blobs/bin/e81a632e2da0f6a4d801f18aadfe2c6e640401cc1178935a9099ebb8e3af6cc1.bin +0 -0
  262. package/corpus/handwritten/blobs/bin/f0721c60d0b1046579d8c587fac8482a70822f0b39a85f9acc0cfc31f82b7dd2.bin +0 -0
  263. package/corpus/handwritten/blobs/bin/f301cf574de6d84030f839098ca44705dca115f9d3e4ee848e0b35fff3deaf77.bin +0 -0
  264. package/corpus/handwritten/blobs/bin/f7797f295a7570c437bf7020a1ddf208fea2a7aab595333320a6396c1608d360.bin +0 -0
  265. package/corpus/handwritten/blobs/glb/08de0bb2439ac812adef528b4b073bdb954bbeada972a2f3afb1757bd0540396.glb +0 -0
  266. package/corpus/handwritten/blobs/glb/153681171c35d2898569324e21ebe734b8418d4122833618a1e64ea326be1e5e.glb +0 -0
  267. package/corpus/handwritten/blobs/glb/1df5ce0b6cae72ec4cf3c41510681ba70ebb474f9745d536ebd4f03e8fc82de9.glb +0 -0
  268. package/corpus/handwritten/blobs/glb/262031e2fa710bd8d586eafce1019ca1434a2170e407567741aac1d99fc9c5ab.glb +0 -0
  269. package/corpus/handwritten/blobs/glb/27466efb180fb5b5074b40e424bd0b8d78f7ff0f5f3663748e014daeeeb5bedd.glb +0 -0
  270. package/corpus/handwritten/blobs/glb/2d2f6d00a14c89a4efb7f679b371118f564f258797ed8b8b42baf4ae60902ea6.glb +0 -0
  271. package/corpus/handwritten/blobs/glb/31f327d215ed7ef422e2169172f3869769e9816c9da979616844081e74f2eb09.glb +0 -0
  272. package/corpus/handwritten/blobs/glb/3bfe0e9ca18077ffee9c284ef40fed9f2fc354f7495612c785a6f980b5966559.glb +0 -0
  273. package/corpus/handwritten/blobs/glb/3db43042b3eeb1dee7ce9de1cc00322cefc348aa18c37d168b0858e6af6ca7a4.glb +0 -0
  274. package/corpus/handwritten/blobs/glb/46460a50da44fb8e792b48a646ec9ce025bb309d315dbcf67d2e9598591750de.glb +0 -0
  275. package/corpus/handwritten/blobs/glb/4902213556fedaf269fba6f0f195e424b2e49973ab45dcb8b69e34d253d9d8ff.glb +0 -0
  276. package/corpus/handwritten/blobs/glb/4dda463c9cd4bf339e5611871d4ba2fe16fe1487389a88b2888e96bc55e45d93.glb +0 -0
  277. package/corpus/handwritten/blobs/glb/4ed23469bd2b6b73183564cfc80a1ebcd0ffe2666a90a556752af0ca147fd2f7.glb +0 -0
  278. package/corpus/handwritten/blobs/glb/4fe74a1bed6b67129885b90cfcae01b5ca82e23e6d40507e280f02fca7fda54f.glb +0 -0
  279. package/corpus/handwritten/blobs/glb/50521bb3a50cc7199d324a0b25bc167c2e9d69770cb500490428efefc81ce3ea.glb +0 -0
  280. package/corpus/handwritten/blobs/glb/5ecca36d1e503edc092af0ef42f139cdcad99b8c2008318eb6ad337023d57296.glb +0 -0
  281. package/corpus/handwritten/blobs/glb/60fc036925852568cdb1b9fb85218dc43a8bf2ed86d3971a221ad942ece203a7.glb +0 -0
  282. package/corpus/handwritten/blobs/glb/611633cee0e5822b744486e6dff5414ad5b159eaabffe1c0ba0bb68be794bfa1.glb +0 -0
  283. package/corpus/handwritten/blobs/glb/67c7f983a0bcb9f84425378acac121a53f30795dce3181643bc1b763d0ae80b5.glb +0 -0
  284. package/corpus/handwritten/blobs/glb/6ecc0d307030943727484b49b1872643479c55ccc92252fca06e9e3cbe98fa90.glb +0 -0
  285. package/corpus/handwritten/blobs/glb/774b366df4de56cb6f9e3c904f02ec98016ac2ec489dc9e214b09220fca2f8e5.glb +0 -0
  286. package/corpus/handwritten/blobs/glb/785bae514ffc029e611d602259db7d37cbef589409a0814b9d37175d8b6c0a45.glb +0 -0
  287. package/corpus/handwritten/blobs/glb/79e79524efb2830e90af3c945c5b36ef07c1a38f2da2958112203a99eac52a16.glb +0 -0
  288. package/corpus/handwritten/blobs/glb/7bebdcdaf0be30d9f8d21bde72af68c32d825d12dc668f48109223ed7ff71c9f.glb +0 -0
  289. package/corpus/handwritten/blobs/glb/7d8b5ec9326a11362b3f9fa3409cb59d11b99f549cc304319c63c1ec55cbf5ab.glb +0 -0
  290. package/corpus/handwritten/blobs/glb/82e886f826315e4bf962363165fadadd3d93f85132c1909095045e0a7ccc0b34.glb +0 -0
  291. package/corpus/handwritten/blobs/glb/84b4ef190c3994ae7ca1b1f7a936526d1d20ad7deac13f949e3fe6bb7ba139ed.glb +0 -0
  292. package/corpus/handwritten/blobs/glb/85b7153e943fbe8c659bd6e4b323511dc6f6e2c7a3a1185e7a9a29ea6ddfdfa6.glb +0 -0
  293. package/corpus/handwritten/blobs/glb/85cf2d2be91cedbaf454ca42ad53c0c17b311088528d274695dbcea490d6c684.glb +0 -0
  294. package/corpus/handwritten/blobs/glb/8662b4cdc626c61a45e63f71dc866746c083cd0d4644b817a373105f936a7047.glb +0 -0
  295. package/corpus/handwritten/blobs/glb/8a4d33bfbb17d865e5deb0a0bdf3de67fc2312950a7568ed2635c22fbe4b1ecf.glb +0 -0
  296. package/corpus/handwritten/blobs/glb/8b11171d41c9027411ca8b87797d9ec70355471bdd3a247c114c49b8b781bbd9.glb +0 -0
  297. package/corpus/handwritten/blobs/glb/9026e1c4f0250832b69a989e69fe3071e5cad72adfe9c22ce11c409b18bb3357.glb +0 -0
  298. package/corpus/handwritten/blobs/glb/945b946f17b6393ea040230641c3083678bb6ab42e1d7239aeb9c950d0e7d5bb.glb +0 -0
  299. package/corpus/handwritten/blobs/glb/9afab455d603f1f8a38074c5a6cbed26d7d7f2cfd8a531820bd165d4b37399ee.glb +0 -0
  300. package/corpus/handwritten/blobs/glb/a6d702fb1be1095517625bfb2a2383f5f9638775059fd7e0d093d2044651b848.glb +0 -0
  301. package/corpus/handwritten/blobs/glb/aae479c2f99848998a1b499bbcad815d971349c2442bc363786aef63baad4337.glb +0 -0
  302. package/corpus/handwritten/blobs/glb/b155bd41f260d5303e293d691b657e0fb9b9c8b2f8aa589a0187061baa033eb7.glb +0 -0
  303. package/corpus/handwritten/blobs/glb/b1e8b770d99e8ca4396f21fd512f632c587149fc13db69deba388f702a46982f.glb +0 -0
  304. package/corpus/handwritten/blobs/glb/b382c318a5baac35da59a7b99ebaad6992e30c4bac327e85851ce0b2f89aa58b.glb +0 -0
  305. package/corpus/handwritten/blobs/glb/ba4478198696802808262af9bbfc224fe37e24e3f8c13de91debc87d3e1a9d41.glb +0 -0
  306. package/corpus/handwritten/blobs/glb/baf02cd967d1bf3c6a2ae878f4ca4ed34d0c39302ca2b8b6e3560a4e87b5c16f.glb +0 -0
  307. package/corpus/handwritten/blobs/glb/bc14dd152815ea6ed39458dcf89f2d69173d61d6e2b57be99d31ce2da64ccf67.glb +0 -0
  308. package/corpus/handwritten/blobs/glb/bc4e4d3bcf7ace855183efec0fbf242d444a32714d8b2fd8a45fa7b539ef2c73.glb +0 -0
  309. package/corpus/handwritten/blobs/glb/bc53475e2aa2fc9c2c0574b36a449fd57259c462d771e2b360def5c338d37c26.glb +0 -0
  310. package/corpus/handwritten/blobs/glb/c35d9e50f392c29f2587e3a6eb4f21143ba08e48d76a53b9de62d3b5be46c1a5.glb +0 -0
  311. package/corpus/handwritten/blobs/glb/c6911e059d3ac6aea75bc0ad3dd8b220704bfbba8ba98b57705e7aa3ecbe0050.glb +0 -0
  312. package/corpus/handwritten/blobs/glb/c84d88b6ed878490bcf9fa985b5e6a7a683de8ee7808ee4151a3b6a898fbe4f2.glb +0 -0
  313. package/corpus/handwritten/blobs/glb/c9d5d02ef0e38ac2898d3e6ecbc2ea0a6d2bd04531118550ab54b5e83293d7ec.glb +0 -0
  314. package/corpus/handwritten/blobs/glb/cd9d04e361e4c3d0aeb82f8682d71114ff8318b8fc4980bccee3c5e5c16afc27.glb +0 -0
  315. package/corpus/handwritten/blobs/glb/d32499928422a0cd1a32b1afaeacc31d2d84d74876f6805b36218dc04402a921.glb +0 -0
  316. package/corpus/handwritten/blobs/glb/dc7ea629fcddeba445599d73a5d721f4d5004e056c3c140baa3e6817393c6462.glb +0 -0
  317. package/corpus/handwritten/blobs/glb/dce79b59c85ca5a7f9fc25e585d253b15558f8f5d8497a76923c9071601de8b1.glb +0 -0
  318. package/corpus/handwritten/blobs/glb/e7fa1b02bae6c8d19ace0e8db44810beab9a1be9f8172d5816324760267d6d11.glb +0 -0
  319. package/corpus/handwritten/blobs/glb/eb664feed0fdcc3ac73cecbe737109994fe5dfad8a33997de88598965fa936ba.glb +0 -0
  320. package/corpus/handwritten/blobs/glb/ec6a771ca852b0b69e55a12df9d347384d01e611c8c6151ea771910f1601605d.glb +0 -0
  321. package/corpus/handwritten/blobs/glb/ede05013f575b4216d2b4b3f8a14d611ef28756f952f702bb169529c8ab02eff.glb +0 -0
  322. package/corpus/handwritten/blobs/glb/fec21fa96950340a1a031b31b37407468361ab0a7645c683e0d7773c18591a26.glb +0 -0
  323. package/corpus/handwritten/blobs/glb/ff21ea082bb00b01006900e7dbbb85220f31f45c144405c840a70872f9e09cb9.glb +0 -0
  324. package/corpus/handwritten/blobs/image/248fe9601e921305ffb35421414bc5f03e9f1b3dba15bf9b5c3387d8f255da17.png +0 -0
  325. package/corpus/handwritten/blobs/image/4b47420aff1ded28c9c6cf1eb92d6e2d7b01d057f2654654405445ff8d562e55.webp +0 -0
  326. package/corpus/handwritten/blobs/image/5dbc818ed0be692e6ba3df87898fd623280a2686eed5a538333e1325764b238d.png +0 -0
  327. package/corpus/handwritten/blobs/image/d5ae692911bbc2b60b5fdde239b70aad4ce9be0d7665c4a91b438de6077e21e3.jpg +0 -0
  328. package/corpus/handwritten/blobs/ktx2/df0dd2e8adc1d9479148bb198cb750471df454680cf0c9ffd6dc85d6262ed676.ktx2 +0 -0
  329. package/corpus/handwritten/blobs/wasm/ecc886d8bbebcf190298ff9162b6bb364f2125606f5bdc8cc220ea28044f96ea.wasm +0 -0
  330. package/corpus/handwritten/cook.json +1 -0
  331. package/corpus/handwritten/mounts/shardfiles/blender-template/discovery.json +1 -0
  332. package/corpus/handwritten/sections/actors/creatures.json +1 -0
  333. package/corpus/handwritten/sections/actors/crowds.json +1 -0
  334. package/corpus/handwritten/sections/actors/species.json +1 -0
  335. package/corpus/handwritten/sections/audio/audio.json +1 -0
  336. package/corpus/handwritten/sections/client/plan.json +1 -0
  337. package/corpus/handwritten/sections/combat/encounters.json +1 -0
  338. package/corpus/handwritten/sections/combat/items.json +1 -0
  339. package/corpus/handwritten/sections/combat/strikes.json +1 -0
  340. package/corpus/handwritten/sections/economy/ledger.json +1 -0
  341. package/corpus/handwritten/sections/economy/loot.json +1 -0
  342. package/corpus/handwritten/sections/look/look.json +1 -0
  343. package/corpus/handwritten/sections/look/map.json +1 -0
  344. package/corpus/handwritten/sections/look/materials.json +1 -0
  345. package/corpus/handwritten/sections/quests/quests.json +1 -0
  346. package/corpus/handwritten/sections/sim/client-scripts.json +1 -0
  347. package/corpus/handwritten/sections/sim/hooks.json +1 -0
  348. package/corpus/handwritten/sections/sim/plumbing.json +1 -0
  349. package/corpus/handwritten/sections/sim/sim.json +1 -0
  350. package/corpus/handwritten/sections/state/migrations.json +1 -0
  351. package/corpus/handwritten/sections/state/state.json +1 -0
  352. package/corpus/handwritten/sections/ui/card.json +1 -0
  353. package/corpus/handwritten/sections/ui/compendium.json +1 -0
  354. package/corpus/handwritten/sections/ui/level.json +1 -0
  355. package/corpus/handwritten/sections/ui/ui.json +1 -0
  356. package/corpus/handwritten/sections/world/collision.json +1 -0
  357. package/corpus/handwritten/sections/world/days.json +1 -0
  358. package/corpus/handwritten/sections/world/edge.json +1 -0
  359. package/corpus/handwritten/sections/world/movers.json +1 -0
  360. package/corpus/handwritten/sections/world/navigation.json +1 -0
  361. package/corpus/handwritten/sections/world/props.json +1 -0
  362. package/corpus/handwritten/sections/world/spawn.json +1 -0
  363. package/corpus/handwritten/sections/world/terrain.json +1 -0
  364. package/corpus/handwritten/sections/world/tiles.json +1 -0
  365. package/corpus/handwritten/sections/world/traversal.json +1 -0
  366. package/corpus/handwritten/sections/world/water.json +1 -0
  367. package/corpus/handwritten/sections/world/weather.json +1 -0
  368. package/corpus/handwritten/shard.json +1 -0
  369. package/corpus/handwritten/validation.json +1 -0
  370. package/package.json +511 -4
  371. package/packages/wire/src/net-command.ts +150 -0
  372. package/src/cli/bin.mjs +9 -0
  373. package/src/cli/main.ts +148 -0
  374. package/src/cli/pack.ts +262 -0
  375. package/src/cli/validate.ts +210 -0
  376. package/src/cli/version.ts +13 -0
  377. package/src/format/aacIndex.ts +160 -0
  378. package/src/format/accent.ts +35 -0
  379. package/src/format/achievementCounters.ts +22 -0
  380. package/src/format/actorMoves.ts +615 -0
  381. package/src/format/actorProjectionV2.ts +93 -0
  382. package/src/format/admissionControl.ts +66 -0
  383. package/src/format/admissionLate.ts +22 -0
  384. package/src/format/admissionLimits.ts +11 -0
  385. package/src/format/admissionServer.ts +30 -0
  386. package/src/format/ambientLife.ts +123 -0
  387. package/src/format/arenaRoomDocument.ts +114 -0
  388. package/src/format/arenaScriptRows.ts +107 -0
  389. package/src/format/arenaView.ts +30 -0
  390. package/src/format/assetAdmission.ts +279 -0
  391. package/src/format/audio-measure.ts +184 -0
  392. package/src/format/audio-mp4.ts +234 -0
  393. package/src/format/audio-rules.ts +271 -0
  394. package/src/format/audio-waiver.ts +55 -0
  395. package/src/format/audio.ts +463 -0
  396. package/src/format/audioBank.ts +37 -0
  397. package/src/format/audioProfiles.ts +501 -0
  398. package/src/format/audioRouting.ts +67 -0
  399. package/src/format/audioScene.ts +342 -0
  400. package/src/format/bakedTerrainBytes.ts +35 -0
  401. package/src/format/bakedTerrainSampling.ts +66 -0
  402. package/src/format/bakedTiles.ts +407 -0
  403. package/src/format/binarySource.ts +32 -0
  404. package/src/format/bodySlots.ts +90 -0
  405. package/src/format/bossEncounter.ts +354 -0
  406. package/src/format/bossProfiles.ts +709 -0
  407. package/src/format/bossSocketRig.ts +92 -0
  408. package/src/format/bowVariantRows.ts +68 -0
  409. package/src/format/brains.ts +252 -0
  410. package/src/format/budget.ts +214 -0
  411. package/src/format/buildings.ts +496 -0
  412. package/src/format/builtIndexes.ts +26 -0
  413. package/src/format/catalogueEconomy.ts +65 -0
  414. package/src/format/caveInterior.ts +225 -0
  415. package/src/format/cellBounds.ts +47 -0
  416. package/src/format/cellField.ts +98 -0
  417. package/src/format/chapterDirector.ts +193 -0
  418. package/src/format/clientChannels.ts +450 -0
  419. package/src/format/clientCues.ts +34 -0
  420. package/src/format/clientNative.ts +358 -0
  421. package/src/format/clientOwnership.ts +43 -0
  422. package/src/format/clientPlan.ts +306 -0
  423. package/src/format/clientScripts.ts +116 -0
  424. package/src/format/clientState.ts +273 -0
  425. package/src/format/clientTrails.ts +56 -0
  426. package/src/format/collectionDisplay.ts +232 -0
  427. package/src/format/colourFunction.ts +44 -0
  428. package/src/format/colourLut.ts +4 -0
  429. package/src/format/commonsCosts.ts +28 -0
  430. package/src/format/compendiumRows.ts +151 -0
  431. package/src/format/compendiumSketches.ts +23 -0
  432. package/src/format/completion.ts +83 -0
  433. package/src/format/contentBounds.ts +76 -0
  434. package/src/format/contentCost.ts +50 -0
  435. package/src/format/contracts.ts +305 -0
  436. package/src/format/cook-data.ts +148 -0
  437. package/src/format/cook-preparation.ts +241 -0
  438. package/src/format/coverAppearance.ts +53 -0
  439. package/src/format/creatures.ts +175 -0
  440. package/src/format/crowdPresentation.ts +87 -0
  441. package/src/format/crowds.ts +46 -0
  442. package/src/format/cueDirector.ts +134 -0
  443. package/src/format/dayCycle.ts +28 -0
  444. package/src/format/dayLook.ts +44 -0
  445. package/src/format/decisionBindings.ts +80 -0
  446. package/src/format/decisionPublication.ts +35 -0
  447. package/src/format/decisionScripts.ts +327 -0
  448. package/src/format/declaredQuestPage.ts +101 -0
  449. package/src/format/deviceMemoryCost.ts +50 -0
  450. package/src/format/director.ts +52 -0
  451. package/src/format/directorProduct.ts +27 -0
  452. package/src/format/directorStages.ts +165 -0
  453. package/src/format/directorWhen.ts +78 -0
  454. package/src/format/discoveryValues.ts +416 -0
  455. package/src/format/easedFields.ts +48 -0
  456. package/src/format/edgeProfiles.ts +40 -0
  457. package/src/format/eliteContinuation.ts +110 -0
  458. package/src/format/eliteEntryRows.ts +351 -0
  459. package/src/format/eliteFeature.ts +605 -0
  460. package/src/format/eliteScripts.ts +60 -0
  461. package/src/format/encounterRows.ts +1030 -0
  462. package/src/format/encounters.ts +65 -0
  463. package/src/format/engine-music.ts +42 -0
  464. package/src/format/entryClearance.ts +86 -0
  465. package/src/format/entryCoverage.ts +61 -0
  466. package/src/format/entryGeometry.ts +56 -0
  467. package/src/format/entryLanding.ts +83 -0
  468. package/src/format/entryReads.ts +45 -0
  469. package/src/format/entrywayAssets.ts +33 -0
  470. package/src/format/entryways.ts +58 -0
  471. package/src/format/exchange.ts +25 -0
  472. package/src/format/explorerCatalogue.ts +312 -0
  473. package/src/format/feature-sides.ts +233 -0
  474. package/src/format/fieldPresentation.ts +62 -0
  475. package/src/format/figures.ts +437 -0
  476. package/src/format/findsCatalogue.ts +67 -0
  477. package/src/format/fixedDraws.ts +24 -0
  478. package/src/format/flyers.ts +226 -0
  479. package/src/format/forestNativeInputs.ts +37 -0
  480. package/src/format/forestPage.ts +285 -0
  481. package/src/format/forestWeather.ts +333 -0
  482. package/src/format/geometryPack.ts +136 -0
  483. package/src/format/glbBuffers.ts +77 -0
  484. package/src/format/glbCost.ts +212 -0
  485. package/src/format/glbImages.ts +95 -0
  486. package/src/format/glbTriangles.ts +95 -0
  487. package/src/format/graphArmsRows.ts +200 -0
  488. package/src/format/grapple.ts +123 -0
  489. package/src/format/grazers.ts +164 -0
  490. package/src/format/grid-catalogue.ts +247 -0
  491. package/src/format/gridReadiness.ts +49 -0
  492. package/src/format/groupBrains.ts +249 -0
  493. package/src/format/heldArms.ts +576 -0
  494. package/src/format/heldEquipment.ts +78 -0
  495. package/src/format/heldFinishes.ts +415 -0
  496. package/src/format/heldGear.ts +68 -0
  497. package/src/format/heldJianDocument.ts +75 -0
  498. package/src/format/heldMelee.ts +866 -0
  499. package/src/format/heldView.ts +26 -0
  500. package/src/format/heldWeaponDocuments.ts +36 -0
  501. package/src/format/herdShelter.ts +58 -0
  502. package/src/format/hooks.ts +45 -0
  503. package/src/format/immutable.ts +59 -0
  504. package/src/format/inputDeclarations.ts +157 -0
  505. package/src/format/islandLibrary.ts +51 -0
  506. package/src/format/items.ts +229 -0
  507. package/src/format/json.ts +143 -0
  508. package/src/format/keyedSky.ts +314 -0
  509. package/src/format/kitFigure.ts +68 -0
  510. package/src/format/ktx2Cost.ts +47 -0
  511. package/src/format/ledger.ts +56 -0
  512. package/src/format/liftApproach.ts +75 -0
  513. package/src/format/liftRider.ts +10 -0
  514. package/src/format/lightEmitters.ts +105 -0
  515. package/src/format/lights.ts +135 -0
  516. package/src/format/limbCollision.ts +136 -0
  517. package/src/format/limbPopulation.ts +33 -0
  518. package/src/format/limbRig.ts +202 -0
  519. package/src/format/loadout.ts +156 -0
  520. package/src/format/look-light.ts +153 -0
  521. package/src/format/lootBag.ts +145 -0
  522. package/src/format/lootEconomy.ts +235 -0
  523. package/src/format/materialFamilies.ts +565 -0
  524. package/src/format/materialGraph.ts +1220 -0
  525. package/src/format/materials.ts +449 -0
  526. package/src/format/memoryAdmission.ts +84 -0
  527. package/src/format/memoryGates.json +7 -0
  528. package/src/format/meshCollision.ts +56 -0
  529. package/src/format/meshCollisionAssets.ts +19 -0
  530. package/src/format/meshCollisionBytes.ts +102 -0
  531. package/src/format/meshEntryways.ts +54 -0
  532. package/src/format/meshopt-decoder.wasm +0 -0
  533. package/src/format/meshopt-module.ts +177 -0
  534. package/src/format/meshopt-static.mjs +11 -0
  535. package/src/format/meshopt-wasm.ts +61 -0
  536. package/src/format/migrations.ts +209 -0
  537. package/src/format/minimap.ts +1052 -0
  538. package/src/format/mixedPopulation.ts +222 -0
  539. package/src/format/modes.ts +304 -0
  540. package/src/format/mountedSpecimenRows.ts +64 -0
  541. package/src/format/moverLifecycle.ts +34 -0
  542. package/src/format/moverMotion.ts +271 -0
  543. package/src/format/movers.ts +224 -0
  544. package/src/format/namedJsonContracts.ts +423 -0
  545. package/src/format/nativeActors.ts +45 -0
  546. package/src/format/nativeAssembly.ts +141 -0
  547. package/src/format/nativeGround.ts +37 -0
  548. package/src/format/nativeGroundAssets.ts +35 -0
  549. package/src/format/nativeItems.ts +184 -0
  550. package/src/format/nativePhysics.ts +140 -0
  551. package/src/format/nativeQuestComposition.ts +398 -0
  552. package/src/format/nativeRiding.ts +103 -0
  553. package/src/format/nativeRuntimePlan.ts +89 -0
  554. package/src/format/navigation.ts +99 -0
  555. package/src/format/navigationBytes.ts +111 -0
  556. package/src/format/nearPlaceholder.ts +111 -0
  557. package/src/format/nearPlaceholderAssets.ts +23 -0
  558. package/src/format/netCommand.ts +11 -0
  559. package/src/format/npcs.ts +546 -0
  560. package/src/format/outputAddress.ts +11 -0
  561. package/src/format/outputDownload.ts +34 -0
  562. package/src/format/outputFields.ts +123 -0
  563. package/src/format/outputIndex.ts +352 -0
  564. package/src/format/overdraw.ts +41 -0
  565. package/src/format/pageLife.ts +303 -0
  566. package/src/format/pagePreparation.ts +60 -0
  567. package/src/format/paintedLook.ts +55 -0
  568. package/src/format/paintedResources.ts +158 -0
  569. package/src/format/panelTemplate.ts +139 -0
  570. package/src/format/placeholderSource.ts +209 -0
  571. package/src/format/platformDataSections.ts +146 -0
  572. package/src/format/platformFileFamilies.ts +299 -0
  573. package/src/format/plumbing.ts +165 -0
  574. package/src/format/populationEnvironment.ts +210 -0
  575. package/src/format/populationKeeper.ts +163 -0
  576. package/src/format/populationProjection.ts +496 -0
  577. package/src/format/populationRespawn.ts +48 -0
  578. package/src/format/populationRoster.ts +158 -0
  579. package/src/format/portalFloor.ts +56 -0
  580. package/src/format/portalLink.ts +112 -0
  581. package/src/format/portalLinkAssets.ts +42 -0
  582. package/src/format/portalRide.ts +22 -0
  583. package/src/format/postGraphDocument.ts +36 -0
  584. package/src/format/postGraphLook.ts +477 -0
  585. package/src/format/postStack.ts +114 -0
  586. package/src/format/practiceCourseRows.ts +466 -0
  587. package/src/format/preflight.ts +155 -0
  588. package/src/format/presentation.ts +33 -0
  589. package/src/format/product-audio.ts +76 -0
  590. package/src/format/product-reads.ts +178 -0
  591. package/src/format/product-stream-admit.ts +100 -0
  592. package/src/format/product-stream-assets.ts +493 -0
  593. package/src/format/product-stream-facts.ts +208 -0
  594. package/src/format/product-stream-miss.ts +12 -0
  595. package/src/format/product-stream-node.ts +47 -0
  596. package/src/format/product-stream-packs.ts +242 -0
  597. package/src/format/product-stream-rows.ts +202 -0
  598. package/src/format/product-stream-tar.ts +192 -0
  599. package/src/format/product-stream.ts +284 -0
  600. package/src/format/product.ts +358 -0
  601. package/src/format/productValidation.ts +205 -0
  602. package/src/format/propMaterials.ts +254 -0
  603. package/src/format/props.ts +137 -0
  604. package/src/format/questContinuation.ts +42 -0
  605. package/src/format/questFigures.ts +227 -0
  606. package/src/format/questGraph.ts +30 -0
  607. package/src/format/questHost.ts +314 -0
  608. package/src/format/questInteractionSource.ts +57 -0
  609. package/src/format/questInteractions.ts +642 -0
  610. package/src/format/questPageComposition.ts +92 -0
  611. package/src/format/questPageFacets.ts +121 -0
  612. package/src/format/questRuntime.ts +118 -0
  613. package/src/format/questSteps.ts +182 -0
  614. package/src/format/questStory.ts +512 -0
  615. package/src/format/questStoryBindings.ts +43 -0
  616. package/src/format/questWorld.ts +36 -0
  617. package/src/format/quests.ts +333 -0
  618. package/src/format/rainPresentation.ts +131 -0
  619. package/src/format/rangedPage.ts +117 -0
  620. package/src/format/receipt-cost.ts +71 -0
  621. package/src/format/registeredJson.ts +530 -0
  622. package/src/format/returnProgramDocument.ts +40 -0
  623. package/src/format/returnProjectionV2.ts +84 -0
  624. package/src/format/riding.ts +377 -0
  625. package/src/format/riggedHulls.ts +160 -0
  626. package/src/format/roamingBossProjection.ts +178 -0
  627. package/src/format/roamingCombat.ts +22 -0
  628. package/src/format/ropeDeckSite.ts +148 -0
  629. package/src/format/rows.ts +86 -0
  630. package/src/format/runtime.ts +38 -0
  631. package/src/format/runtimeBinds.ts +49 -0
  632. package/src/format/runtimeCost.ts +80 -0
  633. package/src/format/runtimeSpawns.ts +73 -0
  634. package/src/format/scalarChannel.ts +38 -0
  635. package/src/format/scaledPost.ts +27 -0
  636. package/src/format/scaledPostContract.ts +51 -0
  637. package/src/format/sceneBuffers.ts +122 -0
  638. package/src/format/sceneDraws.ts +89 -0
  639. package/src/format/sceneDressing.ts +247 -0
  640. package/src/format/sceneInstances.ts +192 -0
  641. package/src/format/sceneMotion.ts +122 -0
  642. package/src/format/sceneRefs.ts +71 -0
  643. package/src/format/sceneSources.ts +730 -0
  644. package/src/format/script-side-grandfather.ts +62 -0
  645. package/src/format/script-sides.ts +289 -0
  646. package/src/format/scriptAbi.ts +14 -0
  647. package/src/format/scriptAbiV1.ts +56 -0
  648. package/src/format/scriptActionsV2.ts +101 -0
  649. package/src/format/scriptAdmission.ts +165 -0
  650. package/src/format/scriptAdmissionV2.ts +126 -0
  651. package/src/format/scriptContract.ts +170 -0
  652. package/src/format/scriptFuelV2.ts +124 -0
  653. package/src/format/scriptGroupBankV2.ts +54 -0
  654. package/src/format/scriptGroupStepV2.ts +165 -0
  655. package/src/format/scriptInputStateV2.ts +52 -0
  656. package/src/format/scriptLimits.ts +5 -0
  657. package/src/format/scriptMemoryV2.ts +17 -0
  658. package/src/format/scriptModuleV2.ts +116 -0
  659. package/src/format/scriptObservationColumnsV2.ts +226 -0
  660. package/src/format/scriptQueriesV2.ts +164 -0
  661. package/src/format/scriptQueryStateV2.ts +40 -0
  662. package/src/format/scriptRngV2.ts +52 -0
  663. package/src/format/scriptWireV2.ts +106 -0
  664. package/src/format/scripts.ts +31 -0
  665. package/src/format/sections.ts +140 -0
  666. package/src/format/shardSchema.ts +632 -0
  667. package/src/format/shardSections.ts +383 -0
  668. package/src/format/sketch.ts +79 -0
  669. package/src/format/skin-materials.ts +172 -0
  670. package/src/format/skinAssets.ts +107 -0
  671. package/src/format/skinData.ts +110 -0
  672. package/src/format/skinLayers.ts +90 -0
  673. package/src/format/skins.ts +37 -0
  674. package/src/format/socketLift.ts +58 -0
  675. package/src/format/socketLiftAssets.ts +81 -0
  676. package/src/format/socketRigCreature.ts +66 -0
  677. package/src/format/sourceResidency.ts +16 -0
  678. package/src/format/spawnCombat.ts +26 -0
  679. package/src/format/spawnScriptV2.ts +145 -0
  680. package/src/format/spawnScripts.ts +229 -0
  681. package/src/format/spawnTables.ts +46 -0
  682. package/src/format/spawnView.ts +26 -0
  683. package/src/format/speciesActorsFile.ts +86 -0
  684. package/src/format/speciesBookRows.ts +84 -0
  685. package/src/format/speciesBrain.ts +96 -0
  686. package/src/format/speciesLooks.ts +1021 -0
  687. package/src/format/speciesPrograms.ts +97 -0
  688. package/src/format/speciesScripts.ts +45 -0
  689. package/src/format/specimenCatalogue.ts +94 -0
  690. package/src/format/splatTerrain.ts +192 -0
  691. package/src/format/standalone-catalogue.ts +144 -0
  692. package/src/format/standaloneControl.ts +44 -0
  693. package/src/format/state.ts +61 -0
  694. package/src/format/stateLineage.ts +71 -0
  695. package/src/format/stealth.ts +106 -0
  696. package/src/format/stillImage.ts +135 -0
  697. package/src/format/streamedCover.ts +105 -0
  698. package/src/format/surfaceLooks.ts +50 -0
  699. package/src/format/tar-fields.ts +54 -0
  700. package/src/format/tar-paths.ts +103 -0
  701. package/src/format/tar-source.ts +13 -0
  702. package/src/format/tar-write.ts +152 -0
  703. package/src/format/tar.ts +203 -0
  704. package/src/format/targets.ts +217 -0
  705. package/src/format/terrain.ts +241 -0
  706. package/src/format/terrainTileBytes.ts +104 -0
  707. package/src/format/tierSelection.ts +195 -0
  708. package/src/format/toonLighting.ts +32 -0
  709. package/src/format/toonLook.ts +332 -0
  710. package/src/format/trail.ts +17 -0
  711. package/src/format/traversal.ts +13 -0
  712. package/src/format/treeSetRows.ts +93 -0
  713. package/src/format/ui.ts +90 -0
  714. package/src/format/uiStrings.ts +17 -0
  715. package/src/format/uniformRows.ts +31 -0
  716. package/src/format/upload-wire.ts +184 -0
  717. package/src/format/validationReceipt.ts +142 -0
  718. package/src/format/version.ts +9 -0
  719. package/src/format/vertexWear.ts +45 -0
  720. package/src/format/viewProgram.ts +329 -0
  721. package/src/format/voicePatches.ts +47 -0
  722. package/src/format/water.ts +247 -0
  723. package/src/format/waterWaves.ts +7 -0
  724. package/src/format/waterWorld.ts +34 -0
  725. package/src/format/weaponProfiles.ts +1315 -0
  726. package/src/format/weatherBundle.ts +36 -0
  727. package/src/format/weatherEffects.ts +78 -0
  728. package/src/format/weatherProgram.ts +422 -0
  729. package/src/format/wildlifePopulation.ts +210 -0
  730. package/src/format/wireLimits.ts +9 -0
  731. package/src/format/worldAssembly.ts +104 -0
  732. package/src/format/worldEntry.ts +151 -0
  733. package/src/format/worldPhysics.ts +292 -0
  734. package/src/format/worldSceneBatch.ts +106 -0
  735. package/src/format/worldSceneModels.ts +79 -0
  736. package/src/format/worldScenePages.ts +89 -0
  737. package/src/format/worldScenePlacement.ts +191 -0
  738. package/src/format/worldSceneSlabs.ts +43 -0
  739. package/src/format/worldSceneSurface.ts +113 -0
  740. package/src/format/worldSceneWeld.ts +702 -0
  741. package/src/format/worldScenes.ts +184 -0
  742. package/src/format/worldTargets.ts +111 -0
  743. package/src/format/worldUpdates.ts +229 -0
  744. package/src/hook/format-hook.d.mts +2 -0
  745. package/src/hook/format-hook.mjs +47 -0
  746. package/README.md +0 -6
@@ -0,0 +1,212 @@
1
+ /** Bounded GLB byte admission shared by build validation and runtime entry.
2
+ * No product/schema graph is initialized to admit an equipment or skin model. */
3
+ import type { AssetCost } from './product.ts';
4
+ import { glbBuffers, prepareGlbBuffers } from './glbBuffers.ts';
5
+ import { glbImageCost } from './glbImages.ts';
6
+ import { visitGlbGeometry, type GlbVertex } from './glbTriangles.ts';
7
+ import { projectedLayerCoverage, type OverdrawEstimate } from './overdraw.ts';
8
+
9
+ /** Await compressed-buffer readiness at the asynchronous model boundary. */
10
+ export function prepareGlbCost(): Promise<void> { return prepareGlbBuffers(); }
11
+
12
+ const MAX_BYTES = 25_000_000;
13
+ const MAX_ELEMENTS = 4_000_000;
14
+ function requireRange(bytes: Uint8Array, offset: number, size: number): void {
15
+ if (!Number.isSafeInteger(offset) || !Number.isSafeInteger(size) || offset < 0 || size < 0 || offset + size > bytes.length) throw new Error('asset truncated or oversized');
16
+ }
17
+ function object(value: unknown): Record<string, unknown> {
18
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) throw new Error('asset object required');
19
+ return value as Record<string, unknown>;
20
+ }
21
+ function list(value: unknown): unknown[] { if (!Array.isArray(value) || value.length > 10_000) throw new Error('asset array required or oversized'); return value; }
22
+ function count(value: unknown, max = MAX_ELEMENTS): number { if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0 || value > max) throw new Error('asset count outside cap'); return value; }
23
+ function json(bytes: Uint8Array): unknown { return JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes)); }
24
+
25
+ export function parseGlbData(bytes: Uint8Array, visit?: (triangle: readonly GlbVertex[]) => void, estimate?: OverdrawEstimate): AssetCost {
26
+ requireRange(bytes, 0, 20); const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
27
+ if (bytes.length > MAX_BYTES || view.getUint32(0, true) !== 0x46546c67 || view.getUint32(4, true) !== 2 || view.getUint32(8, true) !== bytes.length) throw new Error('invalid GLB header');
28
+ const length = view.getUint32(12, true); requireRange(bytes, 20, length);
29
+ if (length > 2_000_000 || length % 4 !== 0 || view.getUint32(16, true) !== 0x4e4f534a) throw new Error('invalid GLB JSON chunk');
30
+ const doc = object(json(bytes.subarray(20, 20 + length))); const asset = object(doc['asset']);
31
+ if (asset['version'] !== '2.0') throw new Error('GLB asset version');
32
+ let binaryBytes = 0;
33
+ if (20 + length < bytes.length) {
34
+ requireRange(bytes, 20 + length, 8); const n = view.getUint32(20 + length, true);
35
+ if (view.getUint32(24 + length, true) !== 0x004e4942 || n % 4 !== 0 || 28 + length + n !== bytes.length) throw new Error('invalid GLB binary chunk');
36
+ binaryBytes = n;
37
+ }
38
+ const data = glbBuffers(doc, bytes.subarray(28 + length, 28 + length + binaryBytes)), views = data.views;
39
+ const accessorBytes = new DataView(data.bytes.buffer, data.bytes.byteOffset, data.bytes.byteLength);
40
+ let gpu = 0, elements = 0;
41
+ const accessors = list(doc['accessors'] ?? []).map((entry) => {
42
+ const a = object(entry), components: Record<string, number> = { SCALAR: 1, VEC2: 2, VEC3: 3, VEC4: 4, MAT4: 16, MAT3: 9, MAT2: 4 };
43
+ const widths: Record<string, number> = { '5120': 1, '5121': 1, '5122': 2, '5123': 2, '5125': 4, '5126': 4 };
44
+ const width = widths[String(a['componentType'])], dimension = components[String(a['type'])], n = count(a['count']);
45
+ if (width === undefined || dimension === undefined || a['sparse'] !== undefined) throw new Error('unsupported GLB accessor');
46
+ elements += n * dimension;
47
+ if (elements > MAX_ELEMENTS * 16) throw new Error('GLB aggregate accessor cap');
48
+ const bufferView = views[count(a['bufferView'], 10_000)]; if (bufferView === undefined) throw new Error('missing GLB accessor view');
49
+ const size = width * dimension, stride = count(bufferView['byteStride'] ?? size, 252), offset = count(a['byteOffset'] ?? 0, MAX_BYTES);
50
+ if (stride < size || offset + (n === 0 ? 0 : (n - 1) * stride + size) > count(bufferView['byteLength'], MAX_BYTES)) throw new Error('GLB accessor outside view');
51
+ gpu += n * size; return { n, type: a['type'], component: a['componentType'], offset: count(bufferView['byteOffset'] ?? 0, MAX_BYTES) + offset, stride, width, dimension, normalized: a['normalized'] === true };
52
+ });
53
+ const read = (a: typeof accessors[number], row: number, component: number): number => {
54
+ const at = a.offset + row * a.stride + component * a.width;
55
+ switch (a.component) {
56
+ case 5120: return accessorBytes.getInt8(at);
57
+ case 5121: return accessorBytes.getUint8(at);
58
+ case 5122: return accessorBytes.getInt16(at, true);
59
+ case 5123: return accessorBytes.getUint16(at, true);
60
+ case 5125: return accessorBytes.getUint32(at, true);
61
+ case 5126: return accessorBytes.getFloat32(at, true);
62
+ default: throw new Error('unsupported GLB rig component');
63
+ }
64
+ };
65
+ const checkedPositions = new Set<number>(), maximumIndices = new Map<number, number>();
66
+ const materials = list(doc['materials'] ?? []).map(object);
67
+ const imageCost = glbImageCost(doc, views, data.bytes); gpu += imageCost.gpu;
68
+ const meshCosts = list(doc['meshes'] ?? []).map((mesh) => {
69
+ let triangles = 0, draws = 0, layers = 0, blendedLayers = 0, maskedLayers = 0;
70
+ for (const primitive of list(object(mesh)['primitives'])) {
71
+ const p = object(primitive); if ((p['mode'] ?? 4) !== 4 || p['extensions'] !== undefined) throw new Error('unsupported GLB primitive');
72
+ const attributes = object(p['attributes']);
73
+ const positionId = count(attributes['POSITION'], 10_000), position = accessors[positionId];
74
+ const indexId = count(p['indices'] ?? attributes['POSITION'], 10_000), index = accessors[indexId];
75
+ // RM8.1: float32, or Int16 on its node's grid (KHR_mesh_quantization, normalized or not; the node dequantizes it)
76
+ if (position === undefined || position.type !== 'VEC3' || !(position.component === 5126 || position.component === 5122) || index === undefined || index.n % 3 !== 0) throw new Error('invalid GLB triangle accessor');
77
+ if (!checkedPositions.has(positionId)) {
78
+ for (let i = 0; i < position.n; i++) for (let c = 0; c < 3; c++) if (!Number.isFinite(read(position, i, c))) throw new Error('nonfinite GLB position');
79
+ checkedPositions.add(positionId);
80
+ }
81
+ if (p['indices'] !== undefined) {
82
+ if (index.type !== 'SCALAR' || ![5121, 5123, 5125].includes(Number(index.component))) throw new Error('invalid GLB index encoding');
83
+ let maximum = maximumIndices.get(indexId);
84
+ if (maximum === undefined) { maximum = -1; for (let i = 0; i < index.n; i++) maximum = Math.max(maximum, read(index, i, 0)); maximumIndices.set(indexId, maximum); }
85
+ if (maximum >= position.n) throw new Error('GLB index outside positions');
86
+ }
87
+ triangles += index.n / 3; draws++;
88
+ const material = p['material'] === undefined ? undefined : materials[count(p['material'], 10_000)];
89
+ if (p['material'] !== undefined && material === undefined) throw new Error('missing GLB material');
90
+ const alpha = material?.['alphaMode'] ?? 'OPAQUE';
91
+ if (typeof alpha !== 'string' || !['OPAQUE', 'MASK', 'BLEND'].includes(alpha)) throw new Error('unsupported GLB alpha mode');
92
+ if (estimate !== undefined) {
93
+ const vertices = position, indices = index;
94
+ const primitiveGeometry = function* primitiveGeometry(): Generator<readonly GlbVertex[]> {
95
+ for (let i = 0; i < indices.n; i += 3) yield Array.from({ length: 3 }, (_, offset) => {
96
+ const row = p['indices'] === undefined ? i + offset : read(indices, i + offset, 0);
97
+ return { x: read(vertices, row, 0), y: read(vertices, row, 1), z: read(vertices, row, 2) };
98
+ });
99
+ };
100
+ const coverage = projectedLayerCoverage(primitiveGeometry()); layers += coverage;
101
+ if (alpha === 'BLEND') blendedLayers += coverage; if (alpha === 'MASK') maskedLayers += coverage;
102
+ }
103
+ for (const id of Object.values(attributes)) if (accessors[count(id, 10_000)] === undefined) throw new Error('missing GLB attribute');
104
+ }
105
+ return { triangles, draws, layers, blendedLayers, maskedLayers };
106
+ });
107
+ let triangles = 0, draws = 0, instanceCpu = 0;
108
+ const nodes = list(doc['nodes'] ?? []).map(object);
109
+ for (const node of nodes) {
110
+ if (node['mesh'] === undefined) continue;
111
+ const cost = meshCosts[count(node['mesh'], 10_000)]; if (cost === undefined) throw new Error('missing GLB mesh');
112
+ let instances = 1;
113
+ if (node['extensions'] !== undefined) {
114
+ const extensions = object(node['extensions']);
115
+ if (Object.keys(extensions).some((key) => key !== 'EXT_mesh_gpu_instancing')) throw new Error('unsupported GLB node extension');
116
+ const attributes = object(object(extensions['EXT_mesh_gpu_instancing'])['attributes']);
117
+ if (attributes['_MATRIX'] !== undefined && ['TRANSLATION', 'ROTATION', 'SCALE'].some(key => attributes[key] !== undefined)) throw new Error('GLB exact matrix cannot mix with TRS');
118
+ let size: number | undefined;
119
+ for (const [key, id] of Object.entries(attributes)) {
120
+ const normalized = object(list(doc['accessors'])[count(id, 10_000)])['normalized'];
121
+ const a = accessors[count(id, 10_000)], dimension = key === '_MATRIX' ? 16 : key === 'ROTATION' ? 4 : 3;
122
+ if (!['TRANSLATION', 'ROTATION', 'SCALE', '_MATRIX', '_COLOR_0'].includes(key) || a === undefined || a.component !== 5126 || a.dimension !== dimension || (key === '_MATRIX' && (a.type !== 'MAT4' || (normalized !== undefined && normalized !== false) || a.stride !== 64 || a.offset % 4 !== 0)) || (key === '_COLOR_0' && (a.type !== 'VEC3' || (normalized !== undefined && normalized !== false) || a.stride !== 12 || a.offset % 4 !== 0)) || a.n === 0 || a.n > 10_000 || (size !== undefined && a.n !== size)) throw new Error('invalid GLB instance attribute');
123
+ size = a.n;
124
+ for (let i = 0; i < a.n; i++) {
125
+ let norm = 0;
126
+ for (let c = 0; c < dimension; c++) {
127
+ const n = read(a, i, c);
128
+ if (!Number.isFinite(n) || (key === 'SCALE' && (n <= 0 || n > 1000)) || (key === '_COLOR_0' && (n < 0 || n > 1))) throw new Error('invalid GLB instance transform');
129
+ norm += n * n;
130
+ }
131
+ if (key === '_MATRIX') {
132
+ const m = (c: number): number => read(a, i, c);
133
+ if (m(3) !== 0 || m(7) !== 0 || m(11) !== 0 || m(15) !== 1) throw new Error('invalid GLB affine instance matrix');
134
+ for (const c of [0, 4, 8]) if (m(c) * m(c) + m(c + 1) * m(c + 1) + m(c + 2) * m(c + 2) > 1_000_000.25) throw new Error('invalid GLB instance matrix scale');
135
+ const determinant = m(0) * (m(5) * m(10) - m(6) * m(9)) - m(4) * (m(1) * m(10) - m(2) * m(9)) + m(8) * (m(1) * m(6) - m(2) * m(5));
136
+ if (determinant <= 0) throw new Error('invalid GLB instance matrix determinant');
137
+ }
138
+ if (key === 'ROTATION' && Math.abs(norm - 1) > 1e-4) throw new Error('invalid GLB instance quaternion');
139
+ }
140
+ }
141
+ if (size === undefined) throw new Error('empty GLB instance list');
142
+ instances = size; gpu += size * 64; instanceCpu += size * 64;
143
+ }
144
+ const shadow = node['extras'] === undefined ? true : object(node['extras'])['castShadow'] ?? true;
145
+ if (typeof shadow !== 'boolean') throw new Error('invalid GLB shadow flag');
146
+ triangles += cost.triangles * instances; draws += cost.draws * (shadow ? 2 : 1);
147
+ if (estimate !== undefined) { estimate.layers += cost.layers * instances; estimate.blendedLayers += cost.blendedLayers * instances; estimate.maskedLayers += cost.maskedLayers * instances; }
148
+ }
149
+ // Skins and clips are admitted before GLTFLoader allocates skeletons or animation tracks.
150
+ const nodeIndex = (value: unknown): number => { const id = count(value, 10000); if (nodes[id] === undefined) throw new Error('missing GLB rig node'); return id; };
151
+ const parents = new Map<number, number>();
152
+ nodes.forEach((node, id) => {
153
+ for (const child of list(node['children'] ?? [])) { const key = nodeIndex(child); if (key === id || parents.has(key)) throw new Error('GLB node hierarchy'); parents.set(key, id); }
154
+ for (const [key, size] of [['translation', 3], ['rotation', 4], ['scale', 3], ['matrix', 16]] as const) if (node[key] !== undefined) {
155
+ const values = list(node[key]); if (values.length !== size || values.some((n) => typeof n !== 'number' || !Number.isFinite(n) || Math.abs(n) > 100000)) throw new Error('GLB node transform');
156
+ if (key === 'rotation' && Math.abs(values.reduce<number>((sum, n) => sum + Number(n) ** 2, 0) - 1) > 1e-4) throw new Error('GLB node quaternion');
157
+ }
158
+ if (node['matrix'] !== undefined && ['translation', 'rotation', 'scale'].some((key) => node[key] !== undefined)) throw new Error('GLB matrix and TRS');
159
+ });
160
+ for (let id = 0; id < nodes.length; id++) { const seen = new Set<number>(); let parent: number | undefined = id; while (parent !== undefined) { if (seen.has(parent) || seen.size > 128) throw new Error('GLB node cycle or depth'); seen.add(parent); parent = parents.get(parent); } }
161
+ let rigCpu = 0;
162
+ const skins = list(doc['skins'] ?? []).map((value) => {
163
+ const skin = object(value), joints = list(skin['joints']).map(nodeIndex);
164
+ if (joints.length === 0 || joints.length > 128 || new Set(joints).size !== joints.length) throw new Error('GLB skin joints cap');
165
+ if (skin['skeleton'] !== undefined) nodeIndex(skin['skeleton']);
166
+ if (skin['inverseBindMatrices'] !== undefined) {
167
+ const a = accessors[count(skin['inverseBindMatrices'], 10000)]; if (a === undefined || a.type !== 'MAT4' || a.component !== 5126 || a.n !== joints.length) throw new Error('GLB inverse bind shape');
168
+ for (let i = 0; i < a.n; i++) for (let c = 0; c < 16; c++) if (!Number.isFinite(read(a, i, c))) throw new Error('GLB inverse bind value');
169
+ }
170
+ const textureSize = Math.max(4, Math.ceil(Math.sqrt(joints.length * 4) / 4) * 4);
171
+ gpu += textureSize * textureSize * 16; rigCpu += textureSize * textureSize * 16 + joints.length * 64;
172
+ return joints;
173
+ });
174
+ if (skins.length > 128) throw new Error('GLB skins cap');
175
+ const meshes = list(doc['meshes'] ?? []).map(object);
176
+ for (const node of nodes) if (node['skin'] !== undefined) {
177
+ const joints = skins[count(node['skin'], 128)], mesh = meshes[count(node['mesh'], 10000)]; if (joints === undefined || mesh === undefined || node['extensions'] !== undefined) throw new Error('GLB skin binding');
178
+ for (const primitive of list(mesh['primitives'])) {
179
+ const attrs = object(object(primitive)['attributes']), position = accessors[count(attrs['POSITION'], 10000)], indices = accessors[count(attrs['JOINTS_0'], 10000)], weights = accessors[count(attrs['WEIGHTS_0'], 10000)];
180
+ if (indices === undefined || weights === undefined || position === undefined || indices.type !== 'VEC4' || weights.type !== 'VEC4' || indices.n !== position.n || weights.n !== position.n || ![5121, 5123].includes(Number(indices.component)) || !(weights.component === 5126 || ([5121, 5123].includes(Number(weights.component)) && weights.normalized))) throw new Error('GLB skin weights shape');
181
+ for (let i = 0; i < indices.n; i++) { let total = 0; for (let c = 0; c < 4; c++) { const joint = read(indices, i, c), raw = read(weights, i, c), weight = weights.normalized ? raw / (weights.component === 5121 ? 255 : 65535) : raw;
182
+ if (joint >= joints.length || !Number.isFinite(weight) || weight < 0 || weight > 1) throw new Error('GLB skin weight value'); total += weight;
183
+ } if (Math.abs(total - 1) > 1e-4) throw new Error('GLB skin weights must sum to one'); }
184
+ }
185
+ }
186
+ const animations = list(doc['animations'] ?? []); if (animations.length > 32) throw new Error('GLB clips cap');
187
+ for (const value of animations) {
188
+ const animation = object(value), samplers = list(animation['samplers']).map(object), channels = list(animation['channels']), bindings = new Set<string>();
189
+ if (typeof animation['name'] !== 'string' || !/^[a-z][a-z0-9.:-]{0,127}$/u.test(animation['name'])) throw new Error('GLB clip name');
190
+ if (samplers.length === 0 || samplers.length > 512 || channels.length === 0 || channels.length > 512) throw new Error('GLB clip channels cap');
191
+ for (const entry of channels) {
192
+ const channel = object(entry), target = object(channel['target']), targetId = nodeIndex(target['node']), path = target['path'], sampler = samplers[count(channel['sampler'], 512)];
193
+ if (sampler === undefined || !['translation', 'rotation', 'scale'].includes(String(path)) || nodes[targetId]?.['matrix'] !== undefined || bindings.has(`${targetId}/${String(path)}`)) throw new Error('GLB clip target'); bindings.add(`${targetId}/${String(path)}`);
194
+ const input = accessors[count(sampler['input'], 10000)], output = accessors[count(sampler['output'], 10000)], width = path === 'rotation' ? 4 : 3;
195
+ if ((sampler['interpolation'] !== undefined && typeof sampler['interpolation'] !== 'string') || !['LINEAR', 'STEP'].includes(typeof sampler['interpolation'] === 'string' ? sampler['interpolation'] : 'LINEAR') || input === undefined || output === undefined || input.type !== 'SCALAR' || input.component !== 5126 || input.n < 2 || input.n > 4097 || output.component !== 5126 || output.dimension !== width || output.n !== input.n) throw new Error('GLB clip accessor shape');
196
+ let previous = -1;
197
+ for (let i = 0; i < input.n; i++) { const time = read(input, i, 0); if (!Number.isFinite(time) || time < 0 || time > 60 || time <= previous) throw new Error('GLB clip time order'); previous = time;
198
+ let norm = 0; for (let c = 0; c < width; c++) { const n = read(output, i, c); if (!Number.isFinite(n) || Math.abs(n) > 100000) throw new Error('GLB clip value'); norm += n * n; }
199
+ if (path === 'rotation' && Math.abs(norm - 1) > 1e-4) throw new Error('GLB clip quaternion');
200
+ }
201
+ rigCpu += (input.n + output.n * width) * 4;
202
+ }
203
+ }
204
+ // Old GLB fixtures omit scene nodes; count their mesh resources conservatively too.
205
+ if (nodes.length === 0) for (const cost of meshCosts) {
206
+ triangles += cost.triangles; draws += cost.draws * 2;
207
+ if (estimate !== undefined) { estimate.layers += cost.layers; estimate.blendedLayers += cost.blendedLayers; estimate.maskedLayers += cost.maskedLayers; }
208
+ }
209
+ if (length + binaryBytes + data.decoded + instanceCpu + rigCpu + imageCost.decoded > MAX_BYTES || gpu > MAX_BYTES || triangles > 400_000 || draws > 512) throw new Error('GLB resource cap');
210
+ if (visit !== undefined) visitGlbGeometry({ nodes, meshes, accessors, parents, read }, visit);
211
+ return { decoded: length + binaryBytes + data.decoded + instanceCpu + rigCpu + imageCost.decoded, gpu, triangles, draws };
212
+ }
@@ -0,0 +1,95 @@
1
+ import { parseStillImage } from './stillImage.ts';
2
+ import { parseKtx2 } from './ktx2Cost.ts';
3
+
4
+ const record = (value: unknown): Record<string, unknown> => {
5
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) throw new Error('GLB image object required');
6
+ return value as Record<string, unknown>;
7
+ };
8
+ function list(value: unknown, maximum: number): unknown[] {
9
+ if (!Array.isArray(value) || value.length > maximum) throw new Error('GLB image inventory exceeds cap');
10
+ return value;
11
+ }
12
+ function count(value: unknown): number {
13
+ if (typeof value !== 'number' || !Number.isSafeInteger(value) || value < 0 || value > 25_000_000) throw new Error('Invalid GLB image index or range');
14
+ return value;
15
+ }
16
+ function noExtensions(row: Record<string, unknown>): void {
17
+ if (row['extensions'] !== undefined && Object.keys(record(row['extensions'])).length > 0) throw new Error('Unsupported GLB image binding extension');
18
+ }
19
+ function mipBytes(width: number, height: number): number {
20
+ let bytes = 0, w = width, h = height;
21
+ while (true) {
22
+ bytes += w * h * 4;
23
+ if (w === 1 && h === 1) return bytes;
24
+ w = Math.max(1, Math.floor(w / 2)); h = Math.max(1, Math.floor(h / 2));
25
+ }
26
+ }
27
+
28
+ /** Admit bounded embedded WebP or Basis KTX2 through their matching texture extensions; external/data URIs
29
+ * and other bindings still refuse. Charge decoded images and conservative RGBA8 mips per texture/material use,
30
+ * conservatively covering loader clones for different material colour spaces. The GLB aggregate cap also applies. */
31
+ export function glbImageCost(doc: Record<string, unknown>, views: readonly Record<string, unknown>[], binary: Uint8Array): { decoded: number; gpu: number } {
32
+ let decoded = 0;
33
+ const images = list(doc['images'] ?? [], 16).map(value => {
34
+ const image = record(value); noExtensions(image);
35
+ if (image['uri'] !== undefined || (image['mimeType'] !== 'image/webp' && image['mimeType'] !== 'image/ktx2')) throw new Error('GLB images require embedded WebP or Basis KTX2 bytes');
36
+ const view = views[count(image['bufferView'])];
37
+ if (view === undefined || view['byteStride'] !== undefined || view['target'] !== undefined) throw new Error('Invalid GLB image view');
38
+ const offset = count(view['byteOffset'] ?? 0), length = count(view['byteLength']);
39
+ if (offset + length > binary.length) throw new Error('GLB image outside buffer');
40
+ const bytes = binary.subarray(offset, offset + length);
41
+ let parsed: { mime: string; decoded: number; gpu: number };
42
+ if (image['mimeType'] === 'image/ktx2') {
43
+ const cost = parseKtx2(bytes), header = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);
44
+ const model = header.getUint8(header.getUint32(48, true) + 12);
45
+ if (header.getUint32(12, true) !== 0 || (model !== 163 && model !== 166)) throw new Error('GLB KTX2 requires Basis LDR encoding');
46
+ parsed = { mime: 'image/ktx2', decoded: cost.decoded, gpu: cost.gpu };
47
+ } else {
48
+ const paint = parseStillImage(bytes);
49
+ if (paint.mime !== image['mimeType']) throw new Error('GLB image MIME differs from its bytes');
50
+ parsed = { mime: paint.mime, decoded: paint.decoded, gpu: mipBytes(paint.width, paint.height) };
51
+ }
52
+ decoded += parsed.decoded;
53
+ if (decoded > 25_000_000) throw new Error('GLB image resource cap');
54
+ return parsed;
55
+ });
56
+ const samplers = list(doc['samplers'] ?? [], 32).map(value => {
57
+ const sampler = record(value); noExtensions(sampler);
58
+ if (![9728, 9729].includes(count(sampler['magFilter'] ?? 9729))
59
+ || ![9728, 9729, 9984, 9985, 9986, 9987].includes(count(sampler['minFilter'] ?? 9987))
60
+ || ![33071, 33648, 10497].includes(count(sampler['wrapS'] ?? 10497))
61
+ || ![33071, 33648, 10497].includes(count(sampler['wrapT'] ?? 10497))) throw new Error('Invalid GLB image sampler');
62
+ return sampler;
63
+ });
64
+ const textures = list(doc['textures'] ?? [], 32).map(value => {
65
+ const texture = record(value), extensions = record(texture['extensions']);
66
+ const extension = extensions['EXT_texture_webp'] === undefined ? 'KHR_texture_basisu' : 'EXT_texture_webp';
67
+ if (texture['source'] !== undefined || Object.keys(extensions).length !== 1 || extensions[extension] === undefined
68
+ || !list(doc['extensionsUsed'] ?? [], 32).includes(extension)) throw new Error('GLB texture requires an unambiguous declared image extension');
69
+ const binding = record(extensions[extension]);
70
+ if (Object.keys(binding).some(key => key !== 'source')) throw new Error('Unsupported GLB image binding');
71
+ const image = images[count(binding['source'])];
72
+ if (image === undefined || (texture['sampler'] !== undefined && samplers[count(texture['sampler'])] === undefined)) throw new Error('Missing GLB texture image or sampler');
73
+ if (image.mime !== (extension === 'KHR_texture_basisu' ? 'image/ktx2' : 'image/webp')) throw new Error('GLB texture extension differs from image MIME');
74
+ return { bytes: image.gpu, uses: 0 };
75
+ });
76
+ if (images.length === 0 && textures.length === 0) return { decoded: 0, gpu: 0 };
77
+ const bind = (value: unknown): void => {
78
+ if (value === undefined) return;
79
+ const binding = record(value); noExtensions(binding);
80
+ const texture = textures[count(binding['index'])];
81
+ if (texture === undefined) throw new Error('Missing GLB material texture');
82
+ if (count(binding['texCoord'] ?? 0) > 1) throw new Error('Unsupported GLB texture coordinates');
83
+ texture.uses++;
84
+ };
85
+ for (const value of list(doc['materials'] ?? [], 10_000)) {
86
+ const material = record(value); noExtensions(material);
87
+ const pbr = material['pbrMetallicRoughness'] === undefined ? {} : record(material['pbrMetallicRoughness']);
88
+ noExtensions(pbr);
89
+ bind(pbr['baseColorTexture']); bind(pbr['metallicRoughnessTexture']);
90
+ bind(material['normalTexture']); bind(material['occlusionTexture']); bind(material['emissiveTexture']);
91
+ }
92
+ const gpu = textures.reduce((sum, texture) => sum + texture.bytes * Math.max(1, texture.uses), 0);
93
+ if (gpu > 25_000_000) throw new Error('GLB image resource cap');
94
+ return { decoded, gpu };
95
+ }
@@ -0,0 +1,95 @@
1
+ /** A renderer-independent vertex in the admitted GLB scene's local frame. */
2
+ export interface GlbVertex { x: number; y: number; z: number }
3
+ interface Accessor { n: number; component: unknown; type: unknown; offset: number; stride: number; width: number; dimension: number; normalized: boolean }
4
+ interface GeometryData {
5
+ nodes: readonly Record<string, unknown>[]; meshes: readonly Record<string, unknown>[];
6
+ accessors: readonly Accessor[]; parents: ReadonlyMap<number, number>;
7
+ read: (accessor: Accessor, row: number, component: number) => number;
8
+ }
9
+ const identity = [1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1];
10
+ function object(value: unknown): Record<string, unknown> {
11
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) throw new Error('GLB geometry object');
12
+ return value as Record<string, unknown>;
13
+ }
14
+ function list(value: unknown): unknown[] { if (!Array.isArray(value)) throw new Error('GLB geometry array'); return value; }
15
+ function number(value: unknown): number { if (typeof value !== 'number' || !Number.isFinite(value)) throw new Error('GLB geometry number'); return value; }
16
+ function at(matrix: readonly number[], i: number): number { return number(matrix[i]); }
17
+ function multiply(a: readonly number[], b: readonly number[]): number[] {
18
+ return Array.from({ length: 16 }, (_, i) => {
19
+ let sum = 0; for (let k = 0; k < 4; k++) sum += at(a, i % 4 + k * 4) * at(b, k + Math.floor(i / 4) * 4);
20
+ return sum;
21
+ });
22
+ }
23
+ /** Affine GLB TRS, including instance transforms, without a Three.js dependency. */
24
+ export function glbTransform(input: { translation?: unknown; rotation?: unknown; scale?: unknown; matrix?: unknown }): number[] {
25
+ if (input.matrix !== undefined) {
26
+ const matrix = list(input.matrix).map(number);
27
+ if (matrix.length !== 16 || matrix[3] !== 0 || matrix[7] !== 0 || matrix[11] !== 0 || matrix[15] !== 1) throw new Error('GLB geometry requires an affine matrix');
28
+ return matrix;
29
+ }
30
+ const translation = input.translation === undefined ? [0, 0, 0] : list(input.translation).map(number);
31
+ const rotation = input.rotation === undefined ? [0, 0, 0, 1] : list(input.rotation).map(number);
32
+ const scale = input.scale === undefined ? [1, 1, 1] : list(input.scale).map(number);
33
+ const x = at(rotation, 0), y = at(rotation, 1), z = at(rotation, 2), w = at(rotation, 3);
34
+ const sx = at(scale, 0), sy = at(scale, 1), sz = at(scale, 2);
35
+ return [(1 - 2 * (y * y + z * z)) * sx, 2 * (x * y + z * w) * sx, 2 * (x * z - y * w) * sx, 0,
36
+ 2 * (x * y - z * w) * sy, (1 - 2 * (x * x + z * z)) * sy, 2 * (y * z + x * w) * sy, 0,
37
+ 2 * (x * z + y * w) * sz, 2 * (y * z - x * w) * sz, (1 - 2 * (x * x + y * y)) * sz, 0,
38
+ at(translation, 0), at(translation, 1), at(translation, 2), 1];
39
+ }
40
+ /** Apply an admitted affine scene transform to an actual binary position. */
41
+ export function glbPoint(matrix: readonly number[], p: GlbVertex): GlbVertex {
42
+ const result = { x: at(matrix, 0) * p.x + at(matrix, 4) * p.y + at(matrix, 8) * p.z + at(matrix, 12),
43
+ y: at(matrix, 1) * p.x + at(matrix, 5) * p.y + at(matrix, 9) * p.z + at(matrix, 13),
44
+ z: at(matrix, 2) * p.x + at(matrix, 6) * p.y + at(matrix, 10) * p.z + at(matrix, 14) };
45
+ if (![result.x, result.y, result.z].every(Number.isFinite)) throw new Error('Nonfinite GLB geometry');
46
+ return result;
47
+ }
48
+ /** Walk admitted static triangles, respecting hierarchy, indices and GPU instancing; never trust accessor bounds. */
49
+ export function visitGlbGeometry(data: GeometryData, visit: (triangle: readonly GlbVertex[]) => void): void {
50
+ const { nodes, meshes, accessors, parents, read } = data, worlds = new Map<number, readonly number[]>();
51
+ const accessor = (value: unknown): Accessor => {
52
+ const a = accessors[number(value)]; if (a === undefined) throw new Error('Missing GLB geometry accessor'); return a;
53
+ };
54
+ const world = (id: number): readonly number[] => {
55
+ const existing = worlds.get(id); if (existing !== undefined) return existing;
56
+ const node = nodes[id]; if (node === undefined) throw new Error('Missing GLB geometry node');
57
+ const parent = parents.get(id), local = glbTransform(node), result = parent === undefined ? local : multiply(world(parent), local);
58
+ worlds.set(id, result); return result;
59
+ };
60
+ const mesh = (id: number, matrix: readonly number[]) => {
61
+ const row = meshes[id]; if (row === undefined) throw new Error('Missing GLB geometry mesh');
62
+ for (const value of list(row['primitives'])) {
63
+ const primitive = object(value), position = accessor(object(primitive['attributes'])['POSITION']);
64
+ if (!(position.component === 5126 || position.component === 5122)) throw new Error('Static GLB positions must be floats or Int16 grid steps');
65
+ // a normalized Int16 position is a fraction of its node's scale (KHR_mesh_quantization)
66
+ const coordinate = (index: number, c: number): number => { const v = read(position, index, c); return position.normalized ? Math.max(v / 32767, -1) : v; };
67
+ const indices = primitive['indices'] === undefined ? undefined : accessor(primitive['indices']);
68
+ for (let i = 0; i < (indices?.n ?? position.n); i += 3) {
69
+ const triangle = Array.from({ length: 3 }, (_, j) => {
70
+ const index = indices === undefined ? i + j : read(indices, i + j, 0);
71
+ if (!Number.isSafeInteger(index) || index < 0 || index >= position.n) throw new Error('GLB geometry index outside positions');
72
+ return glbPoint(matrix, { x: coordinate(index, 0), y: coordinate(index, 1), z: coordinate(index, 2) });
73
+ });
74
+ visit(triangle);
75
+ }
76
+ }
77
+ };
78
+ nodes.forEach((node, id) => {
79
+ if (node['mesh'] === undefined) return;
80
+ if (node['skin'] !== undefined) throw new Error('Static prop footprint cannot use a deforming skin');
81
+ const transform = world(id);
82
+ if (node['extensions'] === undefined) { mesh(number(node['mesh']), transform); return; }
83
+ const attributes = object(object(object(node['extensions'])['EXT_mesh_gpu_instancing'])['attributes']);
84
+ const entries = Object.entries(attributes).map(([key, value]) => ({ key, a: accessor(value) })), count = entries[0]?.a.n ?? 0;
85
+ for (let i = 0; i < count; i++) {
86
+ const instance: Record<string, unknown> = {};
87
+ for (const { key, a } of entries) {
88
+ if (key === '_COLOR_0') continue;
89
+ instance[key === '_MATRIX' ? 'matrix' : key.toLowerCase()] = Array.from({ length: key === '_MATRIX' ? 16 : key === 'ROTATION' ? 4 : 3 }, (_, c) => read(a, i, c));
90
+ }
91
+ mesh(number(node['mesh']), multiply(transform, glbTransform(instance)));
92
+ }
93
+ });
94
+ if (nodes.length === 0) meshes.forEach((_mesh, id) => mesh(id, identity));
95
+ }
@@ -0,0 +1,200 @@
1
+ import * as v from 'valibot';
2
+ import { PrivateSceneSchema } from './clientChannels.ts';
3
+ import { WorldScenePoolSchema, type WorldScenePoolRowInput, type WorldScenePoolRow } from './worldScenes.ts';
4
+
5
+ const finite = v.pipe(v.number(), v.finite());
6
+ const name = v.pipe(v.string(), v.minLength(1), v.maxLength(512));
7
+ const names: v.GenericSchema<string[], string[]> & { readonly pipe: readonly [unknown, unknown, unknown, v.CheckAction<string[], undefined>] } = v.pipe(v.array(name), v.minLength(1), v.maxLength(64),
8
+ v.check(rows => new Set(rows).size === rows.length));
9
+ const count = v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(4096));
10
+ const bounded = <T extends v.GenericSchema>(schema: T, max: number) => v.pipe(v.array(schema), v.maxLength(max));
11
+ /** G475 held arms drawn in graph looks: a skinned rig played by the shared arm player (its blade row is the hit sweep's
12
+ * and the swing trail's), its meshes dressed from rows, the trail sampled along the blade during each swing, and the
13
+ * per-frame look writes as named sources. Client-only presentation; ids only, no callbacks. */
14
+ export const GraphArmsSchema: v.StrictObjectSchema<{ readonly rig: v.GenericSchema<GraphArmsRowInput['rig'], GraphArmsRow['rig']> & { readonly entries: { readonly sockets: typeof names } }; readonly blade: v.GenericSchema<GraphArmsRowInput['blade'], GraphArmsRow['blade']>; readonly trail: v.GenericSchema<GraphArmsRowInput['trail'], GraphArmsRow['trail']>; readonly claw: v.GenericSchema<GraphArmsRowInput['claw'], GraphArmsRow['claw']>; readonly params: v.GenericSchema<GraphArmsRowInput['params'], GraphArmsRow['params']>; readonly meshes: v.GenericSchema<GraphArmsRowInput['meshes'], GraphArmsRow['meshes']>; readonly maps: v.GenericSchema<GraphArmsRowInput['maps'], GraphArmsRow['maps']>; readonly weave: v.GenericSchema<GraphArmsRowInput['weave'], GraphArmsRow['weave']>; readonly decal: v.GenericSchema<GraphArmsRowInput['decal'], GraphArmsRow['decal']>; readonly back: v.GenericSchema<GraphArmsRowInput['back'], GraphArmsRow['back']>; readonly additive: v.GenericSchema<GraphArmsRowInput['additive'], GraphArmsRow['additive']>; readonly pendants: v.GenericSchema<GraphArmsRowInput['pendants'], GraphArmsRow['pendants']>; readonly frame: v.GenericSchema<GraphArmsRowInput['frame'], GraphArmsRow['frame']>; }, undefined> = v.strictObject({
15
+ rig: v.strictObject({ url: name, skeleton: name, sockets: names, joints: bounded(names, 8), holdRight: bounded(name, 32), holdLeft: bounded(name, 32),
16
+ walkRate: finite, lag: v.strictObject({ max: finite, pitch: finite, yaw: finite }) }),
17
+ /** the blade on its socket: base and tip along the socket's +Y (rig units) */
18
+ blade: v.strictObject({ socket: name, base: finite, tip: finite }),
19
+ /** the swing trail: ribbon profile, its look and seed param, its life as a share of the clip (or `total` s), sampled from `from` of the blade */
20
+ trail: v.strictObject({ look: name, seed: name, samples: count, subdivisions: count, movementSq: finite, life: finite, total: finite, from: finite, order: finite }),
21
+ /** meshes whose name starts with this show with the claw */
22
+ claw: name,
23
+ /** every look's params, by look id; a frame source with no look writes each look that declares its param */
24
+ params: v.record(name, bounded(name, 128)),
25
+ meshes: bounded(v.strictObject({ name, channels: v.record(name, name), look: name, maps: v.exactOptional(name), hull: v.boolean(), doubleSide: v.boolean() }), 64),
26
+ /** per-mesh map pairs: `<base><maps>-<kind>.webp` (or its KTX2 stand-in) lent to the mesh look's params */
27
+ maps: v.strictObject({ base: name, names, kinds: v.strictObject({ maps: name, nrm: name }), anisotropy: finite }),
28
+ /** an R8 repeating weave and per-tier lossless decal images, all named product files */
29
+ weave: v.strictObject({ file: name, size: count, param: name }),
30
+ decal: v.strictObject({ files: v.strictObject({ phone: name, desktop: name }), param: name }),
31
+ back: bounded(name, 64), additive: bounded(name, 64),
32
+ /** The pendants: the existing verified world-scene GLB pools and a private scene on its socket. */
33
+ pendants: v.strictObject({ socket: name, scene: PrivateSceneSchema, materials: bounded(name, 64),
34
+ geometry: bounded(WorldScenePoolSchema, 16) }),
35
+ frame: bounded(v.strictObject({ look: v.exactOptional(name), param: name, source: v.picklist(['time', 'buffer', 'pixels', 'projection']),
36
+ scale: v.exactOptional(finite), min: v.exactOptional(finite) }), 32),
37
+ });
38
+
39
+ /** Build-only admission of the named held-view file, before any native binding reads it. */
40
+ export function parseGraphArms(input: unknown): GraphArmsRow { return v.parse(GraphArmsSchema, input); }
41
+
42
+ /** Admitted data contracts, independent of validator implementation metadata. */
43
+ interface GraphArmsRowInputFields {
44
+ rig: {
45
+ url: string;
46
+ skeleton: string;
47
+ sockets: (string)[];
48
+ joints: ((string)[])[];
49
+ holdRight: (string)[];
50
+ holdLeft: (string)[];
51
+ walkRate: number;
52
+ lag: {
53
+ max: number;
54
+ pitch: number;
55
+ yaw: number;
56
+ };
57
+ };
58
+ blade: {
59
+ socket: string;
60
+ base: number;
61
+ tip: number;
62
+ };
63
+ trail: {
64
+ look: string;
65
+ seed: string;
66
+ samples: number;
67
+ subdivisions: number;
68
+ movementSq: number;
69
+ life: number;
70
+ total: number;
71
+ from: number;
72
+ order: number;
73
+ };
74
+ claw: string;
75
+ params: Record<string, (string)[]>;
76
+ meshes: ({
77
+ name: string;
78
+ channels: Record<string, string>;
79
+ look: string;
80
+ maps?: string;
81
+ hull: boolean;
82
+ doubleSide: boolean;
83
+ })[];
84
+ maps: {
85
+ base: string;
86
+ names: (string)[];
87
+ kinds: {
88
+ maps: string;
89
+ nrm: string;
90
+ };
91
+ anisotropy: number;
92
+ };
93
+ weave: {
94
+ file: string;
95
+ size: number;
96
+ param: string;
97
+ };
98
+ decal: {
99
+ files: {
100
+ phone: string;
101
+ desktop: string;
102
+ };
103
+ param: string;
104
+ };
105
+ back: (string)[];
106
+ additive: (string)[];
107
+ pendants: {
108
+ socket: string;
109
+ scene: v.InferInput<typeof PrivateSceneSchema>;
110
+ materials: (string)[];
111
+ geometry: WorldScenePoolRowInput[];
112
+ };
113
+ frame: ({
114
+ look?: string;
115
+ param: string;
116
+ source: 'time' | 'buffer' | 'pixels' | 'projection';
117
+ scale?: number;
118
+ min?: number;
119
+ })[];
120
+ }
121
+ export type GraphArmsRowInput = { [Key in keyof GraphArmsRowInputFields]: GraphArmsRowInputFields[Key] };
122
+ interface GraphArmsRowFields {
123
+ rig: {
124
+ url: string;
125
+ skeleton: string;
126
+ sockets: (string)[];
127
+ joints: ((string)[])[];
128
+ holdRight: (string)[];
129
+ holdLeft: (string)[];
130
+ walkRate: number;
131
+ lag: {
132
+ max: number;
133
+ pitch: number;
134
+ yaw: number;
135
+ };
136
+ };
137
+ blade: {
138
+ socket: string;
139
+ base: number;
140
+ tip: number;
141
+ };
142
+ trail: {
143
+ look: string;
144
+ seed: string;
145
+ samples: number;
146
+ subdivisions: number;
147
+ movementSq: number;
148
+ life: number;
149
+ total: number;
150
+ from: number;
151
+ order: number;
152
+ };
153
+ claw: string;
154
+ params: Record<string, (string)[]>;
155
+ meshes: ({
156
+ name: string;
157
+ channels: Record<string, string>;
158
+ look: string;
159
+ maps?: string;
160
+ hull: boolean;
161
+ doubleSide: boolean;
162
+ })[];
163
+ maps: {
164
+ base: string;
165
+ names: (string)[];
166
+ kinds: {
167
+ maps: string;
168
+ nrm: string;
169
+ };
170
+ anisotropy: number;
171
+ };
172
+ weave: {
173
+ file: string;
174
+ size: number;
175
+ param: string;
176
+ };
177
+ decal: {
178
+ files: {
179
+ phone: string;
180
+ desktop: string;
181
+ };
182
+ param: string;
183
+ };
184
+ back: (string)[];
185
+ additive: (string)[];
186
+ pendants: {
187
+ socket: string;
188
+ scene: v.InferOutput<typeof PrivateSceneSchema>;
189
+ materials: (string)[];
190
+ geometry: WorldScenePoolRow[];
191
+ };
192
+ frame: ({
193
+ look?: string;
194
+ param: string;
195
+ source: 'time' | 'buffer' | 'pixels' | 'projection';
196
+ scale?: number;
197
+ min?: number;
198
+ })[];
199
+ }
200
+ export type GraphArmsRow = { [Key in keyof GraphArmsRowFields]: GraphArmsRowFields[Key] };