@shipload/sdk 1.0.0-next.0 → 1.0.0-next.10

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 (51) hide show
  1. package/lib/shipload.d.ts +512 -320
  2. package/lib/shipload.js +1960 -1060
  3. package/lib/shipload.js.map +1 -1
  4. package/lib/shipload.m.js +1920 -1056
  5. package/lib/shipload.m.js.map +1 -1
  6. package/package.json +8 -3
  7. package/src/capabilities/modules.ts +3 -0
  8. package/src/capabilities/storage.ts +1 -1
  9. package/src/contracts/platform.ts +13 -1
  10. package/src/contracts/server.ts +227 -282
  11. package/src/data/capabilities.ts +5 -330
  12. package/src/data/capability-formulas.ts +70 -0
  13. package/src/data/catalog.ts +0 -5
  14. package/src/data/colors.ts +2 -16
  15. package/src/data/entities.json +33 -10
  16. package/src/data/item-ids.ts +3 -1
  17. package/src/data/items.json +258 -0
  18. package/src/data/metadata.ts +57 -1
  19. package/src/data/recipes-runtime.ts +1 -0
  20. package/src/data/recipes.json +82 -11
  21. package/src/derivation/capability-mappings.ts +122 -0
  22. package/src/derivation/index.ts +1 -0
  23. package/src/derivation/resources.ts +116 -37
  24. package/src/derivation/stats.ts +1 -2
  25. package/src/entities/container.ts +25 -10
  26. package/src/entities/extractor.ts +144 -0
  27. package/src/entities/gamestate.ts +0 -9
  28. package/src/entities/makers.ts +71 -20
  29. package/src/entities/ship-deploy.ts +114 -56
  30. package/src/entities/ship.ts +17 -0
  31. package/src/entities/slot-multiplier.ts +21 -0
  32. package/src/entities/warehouse.ts +20 -3
  33. package/src/index-module.ts +67 -26
  34. package/src/managers/actions.ts +53 -80
  35. package/src/managers/entities.ts +31 -17
  36. package/src/managers/locations.ts +2 -20
  37. package/src/nft/atomicdata.ts +125 -0
  38. package/src/nft/description.ts +41 -7
  39. package/src/nft/index.ts +1 -0
  40. package/src/resolution/resolve-item.ts +17 -9
  41. package/src/scheduling/accessor.ts +4 -0
  42. package/src/scheduling/projection.ts +8 -0
  43. package/src/scheduling/schedule.ts +15 -1
  44. package/src/scheduling/task-cargo.ts +47 -0
  45. package/src/subscriptions/connection.ts +50 -2
  46. package/src/subscriptions/manager.ts +81 -2
  47. package/src/travel/travel.ts +61 -2
  48. package/src/types/entity-traits.ts +64 -1
  49. package/src/types.ts +11 -1
  50. package/src/utils/cargo.ts +27 -0
  51. package/src/utils/system.ts +25 -24
package/lib/shipload.js CHANGED
@@ -10,7 +10,7 @@ function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'defau
10
10
 
11
11
  var ContractKit__default = /*#__PURE__*/_interopDefaultLegacy(ContractKit);
12
12
 
13
- const abiBlob$1 = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAA0KY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/C2NvbXBhbnlfcm93AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAplbmFibGVnYW1lAAIIY29udHJhY3QEbmFtZQdlbmFibGVkBGJvb2wMZm91bmRjb21wYW55AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nC2dhbWVfY29uZmlnAAQEc2VlZAtjaGVja3N1bTI1NgllcG9jaHRpbWUGdWludDMyBXN0YXJ0DnRpbWVfcG9pbnRfc2VjA2VuZA50aW1lX3BvaW50X3NlYwlnYW1lX21ldGEABARuYW1lBnN0cmluZwtkZXNjcmlwdGlvbgZzdHJpbmcDdXJsBnN0cmluZwd2ZXJzaW9uBnN0cmluZwhnYW1lX3JvdwAECGNvbnRyYWN0BG5hbWUGY29uZmlnC2dhbWVfY29uZmlnBG1ldGEJZ2FtZV9tZXRhBXN0YXRlCmdhbWVfc3RhdGUKZ2FtZV9zdGF0ZQABB2VuYWJsZWQEYm9vbAlzdGFydGdhbWUABAhjb250cmFjdARuYW1lBmNvbmZpZwtnYW1lX2NvbmZpZwRtZXRhCWdhbWVfbWV0YQVzdGF0ZQpnYW1lX3N0YXRlCXN0YXRlX3JvdwABB2VuYWJsZWQEYm9vbAp1cGRhdGVnYW1lAAIIY29udHJhY3QEbmFtZQRtZXRhCWdhbWVfbWV0YQR3aXBlAAAHAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAACoeMxUBmVuYWJsZfMBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnRW5hYmxlL2Rpc2FibGUgcGxhdGZvcm0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZvcm0gY29udHJhY3QuAICShql4zFQKZW5hYmxlZ2FtZfwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZWdhbWUKc3VtbWFyeTogJ0VuYWJsZS9kaXNiYWJsZSBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgc3BlY2lmaWVkIGdhbWUgY29udHJhY3Qu4KepkqI0NV0MZm91bmRjb21wYW55gwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZm91bmRjb21wYW55CnN1bW1hcnk6ICdGb3VuZCBhIG5ldyBjb21wYW55JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRm91bmQgYSBuZXcgY29tcGFueSBpbiB0aGUgU2hpcGxvYWQgcGxhdGZvcm0gY29udHJhY3QuAABQ0rB8TcYJc3RhcnRnYW1l/wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3RhcnRnYW1lCnN1bW1hcnk6ICdTdGFydCBhIG5ldyBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKU3RhcnQgYSBuZXcgZ2FtZSBvZiBTaGlwbG9hZCBkZXBsb3llZCB0byBhIG5ldyBjb250cmFjdC4AgJKGqWxS1Qp1cGRhdGVnYW1ljQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdXBkYXRlZ2FtZQpzdW1tYXJ5OiAnVXBkYXRlIGdhbWUgaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgZ2FtZSBjb250cmFjdC4KCi0tLQAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0DAAAAwE9TJUUDaTY0AAALY29tcGFueV9yb3cAAAAAAKykYQNpNjQAAAhnYW1lX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwETU2hpcGxvYWQgKFBsYXRmb3JtKRNTaGlwbG9hZCAoUGxhdGZvcm0pAAAAAA==');
13
+ const abiBlob$1 = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAA4KY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/C2NvbXBhbnlfcm93AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAplbmFibGVnYW1lAAIIY29udHJhY3QEbmFtZQdlbmFibGVkBGJvb2wMZm91bmRjb21wYW55AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nC2dhbWVfY29uZmlnAAQEc2VlZAtjaGVja3N1bTI1NgllcG9jaHRpbWUGdWludDMyBXN0YXJ0DnRpbWVfcG9pbnRfc2VjA2VuZA50aW1lX3BvaW50X3NlYwlnYW1lX21ldGEABARuYW1lBnN0cmluZwtkZXNjcmlwdGlvbgZzdHJpbmcDdXJsBnN0cmluZwd2ZXJzaW9uBnN0cmluZwhnYW1lX3JvdwAECGNvbnRyYWN0BG5hbWUGY29uZmlnC2dhbWVfY29uZmlnBG1ldGEJZ2FtZV9tZXRhBXN0YXRlCmdhbWVfc3RhdGUKZ2FtZV9zdGF0ZQABB2VuYWJsZWQEYm9vbAxzZXRlcG9jaHRpbWUAAghjb250cmFjdARuYW1lCWVwb2NodGltZQZ1aW50MzIJc3RhcnRnYW1lAAQIY29udHJhY3QEbmFtZQZjb25maWcLZ2FtZV9jb25maWcEbWV0YQlnYW1lX21ldGEFc3RhdGUKZ2FtZV9zdGF0ZQlzdGF0ZV9yb3cAAQdlbmFibGVkBGJvb2wKdXBkYXRlZ2FtZQACCGNvbnRyYWN0BG5hbWUEbWV0YQlnYW1lX21ldGEEd2lwZQAACACAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAqHjMVAZlbmFibGXzAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ0VuYWJsZS9kaXNhYmxlIHBsYXRmb3JtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhlIHBsYXRmb3JtIGNvbnRyYWN0LgCAkoapeMxUCmVuYWJsZWdhbWX8AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGVnYW1lCnN1bW1hcnk6ICdFbmFibGUvZGlzYmFibGUgYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LuCnqZKiNDVdDGZvdW5kY29tcGFueYMCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGZvdW5kY29tcGFueQpzdW1tYXJ5OiAnRm91bmQgYSBuZXcgY29tcGFueScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkZvdW5kIGEgbmV3IGNvbXBhbnkgaW4gdGhlIFNoaXBsb2FkIHBsYXRmb3JtIGNvbnRyYWN0LqCkyw3RqrLCDHNldGVwb2NodGltZQAAAFDSsHxNxglzdGFydGdhbWX/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdGFydGdhbWUKc3VtbWFyeTogJ1N0YXJ0IGEgbmV3IGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpTdGFydCBhIG5ldyBnYW1lIG9mIFNoaXBsb2FkIGRlcGxveWVkIHRvIGEgbmV3IGNvbnRyYWN0LgCAkoapbFLVCnVwZGF0ZWdhbWWNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVnYW1lCnN1bW1hcnk6ICdVcGRhdGUgZ2FtZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KClVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LgoKLS0tAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQMAAADAT1MlRQNpNjQAAAtjb21wYW55X3JvdwAAAAAArKRhA2k2NAAACGdhbWVfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93ARNTaGlwbG9hZCAoUGxhdGZvcm0pE1NoaXBsb2FkIChQbGF0Zm9ybSkAAAAA');
14
14
  const abi$1 = antelope.ABI.from(abiBlob$1);
15
15
  exports.PlatformTypes = void 0;
16
16
  (function (Types) {
@@ -137,6 +137,18 @@ exports.PlatformTypes = void 0;
137
137
  antelope.Struct.type('game_row')
138
138
  ], game_row);
139
139
  Types.game_row = game_row;
140
+ let setepochtime = class setepochtime extends antelope.Struct {
141
+ };
142
+ tslib.__decorate([
143
+ antelope.Struct.field(antelope.Name)
144
+ ], setepochtime.prototype, "contract", void 0);
145
+ tslib.__decorate([
146
+ antelope.Struct.field(antelope.UInt32)
147
+ ], setepochtime.prototype, "epochtime", void 0);
148
+ setepochtime = tslib.__decorate([
149
+ antelope.Struct.type('setepochtime')
150
+ ], setepochtime);
151
+ Types.setepochtime = setepochtime;
140
152
  let startgame = class startgame extends antelope.Struct {
141
153
  };
142
154
  tslib.__decorate([
@@ -213,27 +225,63 @@ var platform = /*#__PURE__*/Object.freeze({
213
225
  Contract: Contract$1
214
226
  });
215
227
 
216
- const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDiDAQlhZGRtb2R1bGUABQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4D21vZHVsZV9jYXJnb19pZAZ1aW50NjQPdGFyZ2V0X2NhcmdvX2lkBnVpbnQ2NAhhZGRuZXh1cwADCm5leHVzX25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAdhZHZhbmNlAAIGcmV2ZWFsBnN0cmluZwZjb21taXQLY2hlY2tzdW0yNTYFYmxlbmQAAwtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAZpbnB1dHMMY2FyZ29faXRlbVtdBmNhbmNlbAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwpjYXJnb19pdGVtAAQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNhcmdvX3JvdwAGAmlkBnVpbnQ2NAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQxjbGFpbXN0YXJ0ZXIAAwdhY2NvdW50BG5hbWUBeAVpbnQ2NAF5BWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAxtb2R1bGVfaXRlbXMIdWludDE2W10MbW9kdWxlX3N0YXRzCHVpbnQ2NFtdBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMAAgt3YXJlaG91c2VfegZ1aW50MTYLY29udGFpbmVyX3oGdWludDE2C2VudGl0eV9pbmZvABkEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPw1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtlbnVtX21lbWJlcgACBXZhbHVlBXVpbnQ4BG5hbWUGc3RyaW5nC2VudW1fcmVzdWx0AAEHbWVtYmVycw1lbnVtX21lbWJlcltdC2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAQGc291cmNlCmVudGl0eV9yZWYLZGVzdGluYXRpb24KZW50aXR5X3JlZgdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAtnZXRpdGVtZGF0YQAACmdldGl0ZW1pZHMAAAhnZXRpdGVtcwAADGdldGl0ZW10eXBlcwAAC2dldGxvY2F0aW9uAAIBeAVpbnQ2NAF5BWludDY0CmdldGxvY2RhdGEAAgF4BWludDY0AXkFaW50NjQLZ2V0bW9kdHlwZXMAAApnZXRtb2R1bGVzAAAJZ2V0bmVhcmJ5AAMLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CHJlY2hhcmdlBGJvb2wKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQlnZXRyZWNpcGUAAQ5vdXRwdXRfaXRlbV9pZAZ1aW50MTYKZ2V0cmVjaXBlcwACC2xvd2VyX2JvdW5kBnVpbnQxNgVsaW1pdAV1aW50OApnZXRyZXNjYXRzAAALZ2V0cmVzZXJ2ZXMAAgF4BWludDY0AXkFaW50NjQMZ2V0cmVzb3VyY2VzAAAIZ2V0c2xvdHMAAApnZXRzdHJhdHVtAAMBeAVpbnQ2NAF5BWludDY0B3N0cmF0dW0GdWludDE2DGdldHN1bW1hcmllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwADCGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQxNgRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAMMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaARzaXplBnVpbnQxNg5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OAxtb2R1bGVfZW50cnkAAgR0eXBlBXVpbnQ4CWluc3RhbGxlZA5wYWNrZWRfbW9kdWxlPwttb2R1bGVfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgttb2R1bGVfdHlwZQV1aW50OAR0aWVyBXVpbnQ4Dm1vZHVsZXNfcmVzdWx0AAEHbW9kdWxlcw1tb2R1bGVfaW5mb1tdDm1vdmVtZW50X3N0YXRzAAIGdGhydXN0BnVpbnQzMgVkcmFpbgZ1aW50MTYLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MTYHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8JbmV4dXNfcm93AAQCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMObmZ0X3NjaGVtYV9kZWYAAgtzY2hlbWFfbmFtZQRuYW1lBmZpZWxkcw5zY2hlbWFfZmllbGRbXRBuZnRfdGVtcGxhdGVfZGVmAAIHaXRlbV9pZAZ1aW50MTYLc2NoZW1hX25hbWUEbmFtZQ1uZnRjb25maWdfcm93AAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQ5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQABAdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAR0aWVyBXVpbnQ4CHF1YW50aXR5BnVpbnQzMhByZWNpcGVfaXRlbV9pbmZvAAICaWQGdWludDE2BG1hc3MGdWludDMyD3JlY2lwZV9yZXNwb25zZQAHDm91dHB1dF9pdGVtX2lkBnVpbnQxNgtvdXRwdXRfbWFzcwZ1aW50MzIGaW5wdXRzDnJlY2lwZV9pbnB1dFtdCnN0YXRfc2xvdHMUc3RhdF9zbG90X3Jlc3BvbnNlW10NYmxlbmRfd2VpZ2h0cwVieXRlcwtvdXRwdXRfaXRlbRByZWNpcGVfaXRlbV9pbmZvC2lucHV0X2l0ZW1zEnJlY2lwZV9pdGVtX2luZm9bXQ5yZWNpcGVzX3Jlc3VsdAABB3JlY2lwZXMRcmVjaXBlX3Jlc3BvbnNlW10LcmVzZXJ2ZV9yb3cABAJpZAZ1aW50NjQIY29vcmRfaWQGdWludDY0B3N0cmF0dW0GdWludDE2CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8GZW5lcmd5B3VpbnQxNj8JY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwdsb2FkZXJzDWxvYWRlcl9zdGF0cz8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwhzbG90X2RlZgABBHR5cGUFdWludDgKc3Bhd25jYXJnbwADCWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0C3NwYXducGFja2VkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAlpbnN0YWxsZWQPcGFja2VkX21vZHVsZVtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQFc3RhdHMGdWludDY0EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAYHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzYWx0BnVpbnQ2NAVzaGlwcwZ1aW50MzIEc2VlZAtjaGVja3N1bTI1NgZjb21taXQLY2hlY2tzdW0yNTYMc3RyYXR1bV9kYXRhAAIHc3RyYXR1bQxzdHJhdHVtX2luZm8Fc3RhdHMOcmVzb3VyY2Vfc3RhdHMMc3RyYXR1bV9pbmZvAAUHaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQIcmljaG5lc3MGdWludDE2B3Jlc2VydmUGdWludDMyC3Jlc2VydmVfbWF4BnVpbnQzMhFzdHJhdHVtX3JlbWFpbmluZwACB3N0cmF0dW0GdWludDE2CXJlbWFpbmluZwZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABwtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABAJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcNd2FyZWhvdXNlX3JvdwALAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgdsb2FkZXJzDWxvYWRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhzY2hlZHVsZQlzY2hlZHVsZT8Ed2FycAAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAp3YXJwX3N0YXRzAAEFcmFuZ2UGdWludDMyBHdpcGUAAAx3aXBlc2VxdWVuY2UAAAR3cmFwAAUFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NDsAAFBRJypTMglhZGRtb2R1bGXHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRtb2R1bGUKc3VtbWFyeTogJ0luc3RhbGwgYSBtb2R1bGUgaW50byBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbGwgYSBtb2R1bGUgZnJvbSBjYXJnbyBpbnRvIGEgbW9kdWxlIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIHR5cGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBzbG90IHR5cGUuIFRoZSBtb2R1bGUgaXRlbSBpcyByZW1vdmVkIGZyb20gY2FyZ28gdXBvbiBpbnN0YWxsYXRpb24uAAAAWHc1UzIIYWRkbmV4dXOnAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRuZXh1cwpzdW1tYXJ5OiAnQWRkIGEgbmV4dXMgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNyZWF0ZSBhIG5ldyBuZXh1cyBlbnRpdHkgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBOZXh1c2VzIGFyZSBvd25lZCBieSB0aGUgY29udHJhY3QgYW5kIHNlcnZlIGFzIGZpeGVkIGdhdGhlcmluZyBwb2ludHMgd2hlcmUgcGxheWVycyBjYW4gd3JhcCwgdW53cmFwLCBkZXBsb3ksIGFuZCBvdGhlcndpc2UgaW50ZXJhY3Qgd2l0aCBORlQtYmFja2VkIGFzc2V0cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAEChaXYyB2FkdmFuY2XTAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZHZhbmNlCnN1bW1hcnk6ICdBZHZhbmNlIHR1cm4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkdmFuY2UgdGhlIGdhbWUgdG8gdGhlIG5leHQgdHVybi4AAAAAgDRVPAVibGVuZPwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJsZW5kCnN1bW1hcnk6ICdCbGVuZCBjYXJnbyBzdGFja3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNvbWJpbmUgbXVsdGlwbGUgY2FyZ28gc3RhY2tzIG9mIHRoZSBzYW1lIGl0ZW0gdHlwZSBpbnRvIGEgc2luZ2xlIHN0YWNrIHdpdGggbmV3IGJsZW5kZWQgc3RhdHMuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC5wVb4mY+lMRAxjbGFpbXN0YXJ0ZXKFBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGFpbXN0YXJ0ZXIKc3VtbWFyeTogJ0RFQlVHOiBjbGFpbSBhIHN0YXJ0ZXIgc2hpcCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU3Bhd24gYSBwcmUta2l0dGVkIFQxIHN0YXJ0ZXIgc2hpcCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgZm9yIGEgcmVnaXN0ZXJlZCBwbGF5ZXIuIEF2YWlsYWJsZSBvbmx5IG9uIHRlc3QgZGVwbG95bWVudHMgd2hlcmUgbm8gaW4tZ2FtZSBzaGlwIGVjb25vbXkgeWV0IGV4aXN0cy4gUmVxdWlyZXMgdGhlIGNhbGxlciB0byBiZSBhIGpvaW5lZCBwbGF5ZXIgd2l0aCBubyBleGlzdGluZyBzaGlwczsgdGhlIHJlc3VsdGluZyBzaGlwIGlzIGZpdHRlZCB3aXRoIGEgZ2VuZXJhdG9yLCBlbmdpbmUsIGdhdGhlcmVyLCBjcmFmdGVyLCBhbmQgaGF1bGVyIG1vZHVsZS4AAKgb32lURAljbGVhbnJzdnDsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhbnJzdnAKc3VtbWFyeTogJ0NsZWFuIHVwIHBhc3QgZXBvY2ggcmVzZXJ2ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVyYXNlIHJlc2VydmUgdGFibGUgcm93cyBmcm9tIGEgcGFzdCBlcG9jaC4gQ2Fubm90IGNsZWFuIHRoZSBjdXJyZW50IG9yIGZ1dHVyZSBlcG9jaHMuIFRoZSBtYXhfcm93cyBwYXJhbWV0ZXIgY2FwcyB0aGUgbnVtYmVyIG9mIHJvd3MgZXJhc2VkIHBlciBjYWxsIHRvIGxpbWl0IENQVSB1c2FnZS4AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl07AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgAAYDQytyZFCWNvbmZpZ2xvZ90CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbmZpZ2xvZwpzdW1tYXJ5OiAnTG9nIGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbG9ncyB0aGUgY3VycmVudCBnYW1lIGNvbmZpZ3VyYXRpb24uIENhbGxlZCBpbmxpbmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdG8gYnJvYWRjYXN0IGNvbmZpZyB2aWEgYWN0aW9uIHRyYWNlcy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAACAvMxFBWNyYWZ0yAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JhZnQKc3VtbWFyeTogJ0NyYWZ0IGl0ZW1zIGZyb20gYSByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZm9ybSBjYXJnbyBpdGVtcyBpbnRvIGEgbmV3IGl0ZW0gdXNpbmcgYSByZWNpcGUuIFRoZSBlbnRpdHkgbXVzdCBoYXZlIGEgY3JhZnRlciBtb2R1bGUgaW5zdGFsbGVkLiBDb25zdW1lcyBlbmVyZ3kgYW5kIHNjaGVkdWxlcyBhIGNyYWZ0aW5nIHRhc2sgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiB0b3RhbCBpbnB1dCBtYXNzIGFuZCBjcmFmdGVyIHNwZWVkLiBJbnB1dCBxdWFudGl0aWVzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgcmVjaXBlIHJlcXVpcmVtZW50cy7gs8tTqWzURQxjcmVhdGVlbnRpdHm/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmVhdGVlbnRpdHkKc3VtbWFyeTogJ0RFQlVHOiBjcmVhdGUgYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAHgaq0oGZGVwbG957AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVwbG95CnN1bW1hcnk6ICdEZXBsb3kgYSBwYWNrZWQgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpVbnBhY2sgYSBwYWNrZWQgZW50aXR5IGl0ZW0gKHBhY2tlZCBzaGlwIG9yIHBhY2tlZCBjb250YWluZXIpIGZyb20gY2FyZ28sIHNjaGVkdWxpbmcgYSBkZXBsb3kgdGFzayB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBlbnRpdHkgYXQgdGhlIGRlcGxveWluZyBlbnRpdHkncyBsb2NhdGlvbiB1cG9uIHJlc29sdXRpb24uAIDPLk+FsEoKZGVzY2VudGl0eckDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlc2NlbnRpdHkKc3VtbWFyeTogJ0Rlc2NyaWJlIGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzdHJpbmcgZm9yIGEgcGFja2VkIGVudGl0eSwgZGVyaXZlZCBmcm9tIHRoZSBlbnRpdHkgaXRlbSBpZCwgaHVsbCBzdGF0cywgYW5kIHRoZSBsaXN0IG9mIGluc3RhbGxlZCBtb2R1bGUgaXRlbSBpZHMgYW5kIHN0YXRzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBORlQgcmVuZGVyZXJzIHRvIGRpc3BsYXkgcGFja2VkIGVudGl0aWVzLgAAAACoeMxUBmVuYWJsZd0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnU2V0IGVuYWJsZWQgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZ2FtZSBvZiBTaGlwbG9hZC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YagDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLgAATk6q7LJiCmdldGl0ZW1pZHOGAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtaWRzCnN1bW1hcnk6ICdHZXQgaXRlbSBpZCB0byBuYW1lIG1hcHBpbmdzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBtYXBwaW5nIG9mIGl0ZW0gaWQgY29uc3RhbnRzIHRvIHRoZWlyIGNhbm9uaWNhbCBzdHJpbmcgbmFtZXMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcmVzb2x2ZSBudW1lcmljIGl0ZW0gaWRzIHRvIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXJzLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy6AVfVZquyyYgxnZXRpdGVtdHlwZXOIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtdHlwZXMKc3VtbWFyeTogJ0dldCBpdGVtIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBpdGVtIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAocmVzb3VyY2UsIGNvbXBvbmVudCwgbW9kdWxlLCBlbnRpdHkpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBpdGVtIHR5cGUgaWRlbnRpZmllcnMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlcwCAFbqaYnWzYgxnZXRyZXNvdXJjZXOHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNvdXJjZXMKc3VtbWFyeTogJ0dldCBhbGwgcmVzb3VyY2UgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyByZXNvdXJjZXMsIGluY2x1ZGluZyBlYWNoIHJlc291cmNlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBnYXRoZXJhYmxlIG1hdGVyaWFscy4AAAA404izYghnZXRzbG90c7sDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHNsb3RzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHNsb3QgbGF5b3V0cycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIG1vZHVsZSBzbG90IGxheW91dCBmb3IgZXZlcnkgZW50aXR5IGl0ZW0gdHlwZSwgbGlzdGluZyB0aGUgb3JkZXJlZCBzbG90IHR5cGVzIGF2YWlsYWJsZSBmb3IgbW9kdWxlIGluc3RhbGxhdGlvbi4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZXRlcm1pbmUgd2hpY2ggbW9kdWxlIHR5cGVzIGFyZSBjb21wYXRpYmxlIHdpdGggYSBnaXZlbiBlbnRpdHkgaHVsbC4AgNTZ3IyzYgpnZXRzdHJhdHVt0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3RyYXR1bQpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIHN0cmF0dW0gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyByZXNvdXJjZSBzdHJhdHVtIGRhdGEgZm9yIGEgc3BlY2lmaWMgZGVwdGggbGF5ZXIgYXQgYSBjb29yZGluYXRlLCBpbmNsdWRpbmcgdGhlIHN0cmF0dW0gc2VlZCBpbmZvIGFuZCBkZXJpdmVkIHJlc291cmNlIHN0YXRzLoCVu0ZKjbNiDGdldHN1bW1hcmllc+gCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN1bW1hcmllcwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdW1tYXJpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGxpZ2h0d2VpZ2h0IHN1bW1hcmllcyBvZiBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIgaW5jbHVkaW5nIHR5cGUsIGlkLCBvd25lciwgbmFtZSwgbG9jYXRpb24sIGFuZCBpZGxlIHN0YXR1cy4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo+AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAECE0rBpB2hhc2g1MTL7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoNTEyCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhNTEyIGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTUxMiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAAACQ3XQEaW5pdPoBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGluaXQKc3VtbWFyeTogJ0luaXRpYWxpemUgZ2FtZSBzZWVkJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWFsaXplIGEgdGhlIGdhbWVzIHNlZWQgYW5kIHNlZWQgdmFsdWVzIHRvIGJvb3RzdHJhcCBnYW1lIHN0YXRlLgAAAAAAMB19BGpvaW7EAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBqb2luCnN1bW1hcnk6ICdKb2luIGEgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSm9pbiBhIGdhbWUgb2YgU2hpcGxvYWQAAAAA+OUynQZub3RpZnmKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBub3RpZnkKc3VtbWFyeTogJ1Rhc2sgbGlmZWN5Y2xlIG5vdGlmaWNhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbm90aWZpZXMgZW50aXR5IG93bmVycyBvZiB0YXNrIGxpZmVjeWNsZSBldmVudHMgKHJlc29sdmVkLCBjYW5jZWxsZWQpLiBDYWxsZWQgaW5saW5lIHdoZW4gdGFza3MgY2hhbmdlIHN0YXRlLiBVc2VzIHJlcXVpcmVfcmVjaXBpZW50IHRvIGVuYWJsZSBvZmYtY2hhaW4gbW9uaXRvcmluZyB2aWEgYWN0aW9uIHRyYWNlcy4AAACKXdOQughyZWNoYXJnZc0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlY2hhcmdlCnN1bW1hcnk6ICdSZWNoYXJnZSBzaGlwIGVuZXJneScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2NoZWR1bGUgYSByZWNoYXJnZSB0YXNrIGZvciBhbiBlbnRpdHkgdG8gcmVzdG9yZSBlbmVyZ3kgdG8gZnVsbCBjYXBhY2l0eS4gVGhlIHJlY2hhcmdlIGR1cmF0aW9uIGRlcGVuZHMgb24gY3VycmVudCBlbmVyZ3kgbGV2ZWwgYW5kIHJlY2hhcmdlIHJhdGUuAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAAAAkKPBBHNhbHTYAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzYWx0CnN1bW1hcnk6ICdBcHBlbmQgU2FsdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWRkIGFkZGl0aW9uYWwgc2FsdCB0byB0aGUgbmV4dCBlcG9jaCBzZWVkLgAAYAvlNbPCCXNldG5mdGNmZ8QDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldG5mdGNmZwpzdW1tYXJ5OiAnU2V0IE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpCaW5kIGFuIGl0ZW0gaWQgdG8gYW4gQXRvbWljQXNzZXRzIHRlbXBsYXRlIGlkIGFuZCBzY2hlbWEgbmFtZS4gVXNlZCB0byBjb25maWd1cmUgaG93IHRoZSBjb250cmFjdCBtaW50cyBhbmQgcmVjb2duaXplcyBORlRzIGZvciBhIGdpdmVuIGl0ZW0uIEluc2VydHMgYSBuZXcgbWFwcGluZyBpZiBvbmUgZG9lcyBub3QgZXhpc3QsIG9yIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIG1hcHBpbmcuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAGXXoMlNxQpzcGF3bmNhcmdvxQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25jYXJnbwpzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGNhcmdvIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSgsjUyU3FC3NwYXducGFja2Vk5wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25wYWNrZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBhIHBhY2tlZCBlbnRpdHkgd2l0aCBpbnN0YWxsZWQgbW9kdWxlcyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AkkpK4clNxQtzcGF3bnNlZWRlZM0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXduc2VlZGVkCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gc2VlZGVkIGNhcmdvIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAFctPM3NCHRyYW5zZmVyyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhbnNmZXIKc3VtbWFyeTogJ1RyYW5zZmVyIGNhcmdvIGJldHdlZW4gZW50aXRpZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZmVyIGNhcmdvIGJldHdlZW4gdHdvIGVudGl0aWVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBCb3RoIGVudGl0aWVzIG11c3QgYmUgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgYXQgbGVhc3Qgb25lIG11c3QgaGF2ZSBsb2FkZXJzLiBDcmVhdGVzIGxvYWQgYW5kIHVubG9hZCB0YXNrcyBvbiBib3RoIGVudGl0aWVzIHdpdGggZHVyYXRpb24gYmFzZWQgb24gY29tYmluZWQgbG9hZGVyIGNhcGFjaXR5IGFuZCBaLWRpc3RhbmNlIGJldHdlZW4gdGhlbS4AAAAARLXNzQZ0cmF2ZWz7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uAAAAAABQr+EEd2FycJ8DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdhcnAKc3VtbWFyeTogJ1dhcnAgdG8gYSBkZXN0aW5hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFudGx5IHRlbGVwb3J0IGFuIGVudGl0eSB0byBhIGRlc3RpbmF0aW9uIHN5c3RlbS4gUmVxdWlyZXMgd2FycCBjYXBhYmlsaXR5LCBmdWxsIGVuZXJneSwgZW1wdHkgY2FyZ28sIGFuZCBhbiBlbXB0eSBzY2hlZHVsZS4gVGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgYSB2YWxpZCBzeXN0ZW0gd2l0aGluIHdhcnAgcmFuZ2UuIFJlc29sdmVzIGltbWVkaWF0ZWx5IGFzIGEgemVyby1kdXJhdGlvbiB0YXNrLgAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS2g0FTaKqyq4wx3aXBlc2VxdWVuY2XCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlc2VxdWVuY2UKc3VtbWFyeTogJ0RFQlVHOiB3aXBlc2VxdWVuY2UgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAABQzeUEd3JhcP4DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdyYXAKc3VtbWFyeTogJ1dyYXAgY2FyZ28gaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCldyYXAgYSBxdWFudGl0eSBvZiBjYXJnbyBmcm9tIGFuIGVudGl0eSBpbnRvIGFuIEF0b21pY0Fzc2V0cyBORlQgbWludGVkIHRvIHRoZSBzcGVjaWZpZWQgb3duZXIuIFRoZSBlbnRpdHkgbXVzdCBiZSBhdCBhIG5leHVzLCBoYXZlIGxvYWRlcnMsIGFuZCBjb250YWluIGVub3VnaCBvZiB0aGUgcmVxdWVzdGVkIGNhcmdvLiBTY2hlZHVsZXMgYSB3cmFwIHRhc2sgdGhhdCwgb24gcmVzb2x1dGlvbiwgcmVtb3ZlcyB0aGUgY2FyZ28gZnJvbSB0aGUgZW50aXR5IGFuZCBtaW50cyB0aGUgTkZUIHVzaW5nIHRoZSB0ZW1wbGF0ZSBjb25maWd1cmVkIGZvciB0aGF0IGl0ZW0gaWQuDQAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAuGo6kydFA2k2NAAADWNvbnRhaW5lcl9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAAACTumwQjQNpNjQAAAxsb2NhdGlvbl9yb3cAAAAAAKy7mgNpNjQAAAluZXh1c19yb3cAAGBuTYrymgNpNjQAAA1uZnRjb25maWdfcm93AAAAAFzlTawDaTY0AAAKcGxheWVyX3JvdwAAAEDtq7C6A2k2NAAAC3Jlc2VydmVfcm93AAAACk2lrcIDaTY0AAAMc2VxdWVuY2Vfcm93AAAAAABQXcMDaTY0AAAIc2hpcF9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAFBY06au4QNpNjQAAA13YXJlaG91c2Vfcm93ARFTaGlwbG9hZCAoU2VydmVyKRFTaGlwbG9hZCAoU2VydmVyKQAAACQAAAAARIWmQQ5jYW5jZWxfcmVzdWx0cwAAAACAvMxFDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwAAYG5NirJiC2dhbWVfY29uZmlnALBy2eWpsmINZW50aXR5X2luZm9bXQAA8NnlqbJiC2VudGl0eV9pbmZvAEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mb4BV9Vmq7LJiC2VudW1fcmVzdWx0ACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAsKo+JyqzYgtlbnVtX3Jlc3VsdAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AAF3T5TWzYg5uZnRpbmZvX3Jlc3VsdAAAuMqbWLNiC3BsYXllcl9pbmZvAABQ1SF1s2IOcmVjaXBlc19yZXN1bHQAAFbVIXWzYg5yZWNpcGVzX3Jlc3VsdAAAzgZhdbNiC2VudW1fcmVzdWx0ALDaV2F1s2ITc3RyYXR1bV9yZW1haW5pbmdbXYAVuppidbNiEHJlc291cmNlc19yZXN1bHQAAAA404izYhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cwAAAAAAUM3lDHRhc2tfcmVzdWx0cw==');
228
+ const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDiFAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQHYWR2YW5jZQACBnJldmVhbAZzdHJpbmcGY29tbWl0C2NoZWNrc3VtMjU2BWJsZW5kAAICaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAICaWQGdWludDY0BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwpjYXJnb19pdGVtAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10IcXVhbnRpdHkGdWludDMyCWNhcmdvX3JlZgADB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNhcmdvX3JvdwAGAmlkBnVpbnQ2NAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQpjYXJnb192aWV3AAUHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10IcXVhbnRpdHkGdWludDMyAmlkBnVpbnQ2NAxjbGFpbXN0YXJ0ZXIAAwdhY2NvdW50BG5hbWUBeAVpbnQ2NAF5BWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcLY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAQCaWQGdWludDY0CXJlY2lwZV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBmlucHV0cwxjYXJnb19pdGVtW10NY3JhZnRlcl9zdGF0cwACBXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MTYMY3JlYXRlZW50aXR5AAUFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQACAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmCmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAxtb2R1bGVfaXRlbXMIdWludDE2W10MbW9kdWxlX3N0YXRzCHVpbnQ2NFtdBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMAAgt3YXJlaG91c2VfegZ1aW50MTYLY29udGFpbmVyX3oGdWludDE2C2VudGl0eV9pbmZvABkEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX3ZpZXdbXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPw1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKZW50aXR5X3JvdwAUAmlkBnVpbnQ2NAVvd25lcgRuYW1lBGtpbmQEbmFtZQRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/BmVuZXJneQd1aW50MTY/CWNhcmdvbWFzcwZ1aW50MzIHZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8HbG9hZGVycw1sb2FkZXJfc3RhdHM/CGdhdGhlcmVyD2dhdGhlcmVyX3N0YXRzPwR3YXJwC3dhcnBfc3RhdHM/B2NyYWZ0ZXIOY3JhZnRlcl9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhzY2hlZHVsZQlzY2hlZHVsZT8HaXRlbV9pZAZ1aW50MTYOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtlbnVtX21lbWJlcgACBXZhbHVlBXVpbnQ4BG5hbWUGc3RyaW5nC2VudW1fcmVzdWx0AAEHbWVtYmVycw1lbnVtX21lbWJlcltdDGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQLZ2FtZV9jb25maWcAAwd2ZXJzaW9uBnVpbnQzMghkZWZhdWx0cw9lbnRpdHlfZGVmYXVsdHMFaXRlbXMKaXRlbV9kZWZbXQZnYXRoZXIABAlzb3VyY2VfaWQGdWludDY0DmRlc3RpbmF0aW9uX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZWxpZ2libGUAAgZjb29yZHMLY29vcmRpbmF0ZXMHc3RyYXR1bQZ1aW50MTYLZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQLZ2V0aXRlbWRhdGEAAApnZXRpdGVtaWRzAAAIZ2V0aXRlbXMAAAxnZXRpdGVtdHlwZXMAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRpbmZvAAAJZ2V0cGxheWVyAAEHYWNjb3VudARuYW1lCWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAAhnZXRzbG90cwAACmdldHN0cmF0dW0AAwF4BWludDY0AXkFaW50NjQHc3RyYXR1bQZ1aW50MTYMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtncm91cHRyYXZlbAAECGVudGl0aWVzDGVudGl0eV9yZWZbXQF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbARoYXNoAAEFdmFsdWUGc3RyaW5nB2hhc2g1MTIAAQV2YWx1ZQZzdHJpbmcMaGF1bGVyX3N0YXRzAAMIY2FwYWNpdHkFdWludDgKZWZmaWNpZW5jeQZ1aW50MTYFZHJhaW4GdWludDE2CmluaXRpYWxpemUAAQRzZWVkC2NoZWNrc3VtMjU2CGl0ZW1fZGVmAAUCaWQGdWludDE2BG1hc3MGdWludDMyBHR5cGUFdWludDgHc3VidHlwZQV1aW50OAR0aWVyBXVpbnQ4DGl0ZW1faWRfcGFpcgACAmlkBnVpbnQxNgRuYW1lBnN0cmluZw9pdGVtX2lkc19yZXN1bHQAAQVpdGVtcw5pdGVtX2lkX3BhaXJbXQ9pdGVtZGF0YV9yZXN1bHQAAgVpdGVtcwppdGVtX2RlZltdB3JlY2lwZXMOcmVjaXBlc19yZXN1bHQKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAgxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljBHNpemUGdWludDE2DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAgdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDm5mdGluZm9fcmVzdWx0AAIHc2NoZW1hcxBuZnRfc2NoZW1hX2RlZltdCXRlbXBsYXRlcxJuZnRfdGVtcGxhdGVfZGVmW10Gbm90aWZ5AAEFZXZlbnQKdGFza19ldmVudA1wYWNrZWRfbW9kdWxlAAIHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lCHJlY2hhcmdlAAECaWQGdWludDY0DHJlY2lwZV9pbnB1dAAEB2l0ZW1faWQGdWludDE2CGNhdGVnb3J5BXVpbnQ4BHRpZXIFdWludDgIcXVhbnRpdHkGdWludDMyEHJlY2lwZV9pdGVtX2luZm8AAgJpZAZ1aW50MTYEbWFzcwZ1aW50MzIPcmVjaXBlX3Jlc3BvbnNlAAcOb3V0cHV0X2l0ZW1faWQGdWludDE2C291dHB1dF9tYXNzBnVpbnQzMgZpbnB1dHMOcmVjaXBlX2lucHV0W10Kc3RhdF9zbG90cxRzdGF0X3Nsb3RfcmVzcG9uc2VbXQ1ibGVuZF93ZWlnaHRzBWJ5dGVzC291dHB1dF9pdGVtEHJlY2lwZV9pdGVtX2luZm8LaW5wdXRfaXRlbXMScmVjaXBlX2l0ZW1faW5mb1tdDnJlY2lwZXNfcmVzdWx0AAEHcmVjaXBlcxFyZWNpcGVfcmVzcG9uc2VbXQxyZWZyc2hlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0C3Jlc2VydmVfcm93AAQCaWQGdWludDY0CGNvb3JkX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyB3Jlc29sdmUAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw9yZXNvbHZlX3Jlc3VsdHMABgllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUOcmVzb2x2ZWRfY291bnQFdWludDgUbmV3X3NjaGVkdWxlX3N0YXJ0ZWQLdGltZV9wb2ludD8LZW50aXR5Z3JvdXAHdWludDY0Pw1ncm91cF9tZW1iZXJzFkJfdmVjdG9yX2VudGl0eV9yZWZfRT8NcmVzb3VyY2VfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMghjYXRlZ29yeQV1aW50OAR0aWVyBXVpbnQ4DnJlc291cmNlX3N0YXRzAAMFc3RhdDEGdWludDE2BXN0YXQyBnVpbnQxNgVzdGF0MwZ1aW50MTYQcmVzb3VyY2VzX3Jlc3VsdAABCXJlc291cmNlcw9yZXNvdXJjZV9pbmZvW10Icm1tb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAp0YXJnZXRfcmVmCmNhcmdvX3JlZj8Icm1uZnRjZmcAAQdpdGVtX2lkBnVpbnQxNgRzYWx0AAEEc2FsdAZ1aW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdDHNjaGVtYV9maWVsZAACBG5hbWUGc3RyaW5nCmZpZWxkX3R5cGUGc3RyaW5nCXNldG5mdGNmZwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUKc2tpcHJldmVhbAABBmNvbW1pdAtjaGVja3N1bTI1NghzbG90X2RlZgACBHR5cGUFdWludDgKb3V0cHV0X3BjdAZ1aW50MTYKc3Bhd25jYXJnbwADCWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0C3NwYXducGFja2VkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAlpbnN0YWxsZWQPcGFja2VkX21vZHVsZVtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQFc3RhdHMGdWludDY0EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAUHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzYWx0BnVpbnQ2NARzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABQdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzILcmVzZXJ2ZV9tYXgGdWludDMyEXN0cmF0dW1fcmVtYWluaW5nAAIHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgR0YXNrAAgEdHlwZQV1aW50OAhkdXJhdGlvbgZ1aW50MzIKY2FuY2VsYWJsZQV1aW50OAtjb29yZGluYXRlcwxjb29yZGluYXRlcz8FY2FyZ28MY2FyZ29faXRlbVtdDGVudGl0eXRhcmdldAtlbnRpdHlfcmVmPwtlbnRpdHlncm91cAd1aW50NjQ/C2VuZXJneV9jb3N0B3VpbnQxNj8KdGFza19ldmVudAAJCmV2ZW50X3R5cGUFdWludDgFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKdGFza19pbmRleAV1aW50OAR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MTY/DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXQh0cmFuc2ZlcgADCXNvdXJjZV9pZAZ1aW50NjQHZGVzdF9pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdBnRyYXZlbAAEAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABAJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcIdW5kZXBsb3kAAgdob3N0X2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0BHdhcnAAAwJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAABHdyYXAABAVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQp3cmFwZW50aXR5AAIJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjRBAABQUScqUzIJYWRkbW9kdWxlxwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbW9kdWxlCnN1bW1hcnk6ICdJbnN0YWxsIGEgbW9kdWxlIGludG8gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YWxsIGEgbW9kdWxlIGZyb20gY2FyZ28gaW50byBhIG1vZHVsZSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSB0eXBlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgc2xvdCB0eXBlLiBUaGUgbW9kdWxlIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGNhcmdvIHVwb24gaW5zdGFsbGF0aW9uLgAAAFh3NVMyCGFkZG5leHVzpwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbmV4dXMKc3VtbWFyeTogJ0FkZCBhIG5leHVzIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDcmVhdGUgYSBuZXcgbmV4dXMgZW50aXR5IGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4gTmV4dXNlcyBhcmUgb3duZWQgYnkgdGhlIGNvbnRyYWN0IGFuZCBzZXJ2ZSBhcyBmaXhlZCBnYXRoZXJpbmcgcG9pbnRzIHdoZXJlIHBsYXllcnMgY2FuIHdyYXAsIHVud3JhcCwgZGVwbG95LCBhbmQgb3RoZXJ3aXNlIGludGVyYWN0IHdpdGggTkZULWJhY2tlZCBhc3NldHMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4uAAAAAIA0VTwFYmxlbmT8Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIG5ldyBibGVuZGVkIHN0YXRzLiBBbGwgaW5wdXQgc3RhY2tzIG11c3Qgc2hhcmUgdGhlIHNhbWUgaXRlbSBpZC4gVGhlIG91dHB1dCBzdGFjayBoYXMgdGhlIGNvbWJpbmVkIHF1YW50aXR5IG9mIGFsbCBpbnB1dHMuAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQucFW+JmPpTEQMY2xhaW1zdGFydGVyhQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xhaW1zdGFydGVyCnN1bW1hcnk6ICdERUJVRzogY2xhaW0gYSBzdGFydGVyIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNwYXduIGEgcHJlLWtpdHRlZCBUMSBzdGFydGVyIHNoaXAgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGZvciBhIHJlZ2lzdGVyZWQgcGxheWVyLiBBdmFpbGFibGUgb25seSBvbiB0ZXN0IGRlcGxveW1lbnRzIHdoZXJlIG5vIGluLWdhbWUgc2hpcCBlY29ub215IHlldCBleGlzdHMuIFJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gYmUgYSBqb2luZWQgcGxheWVyIHdpdGggbm8gZXhpc3Rpbmcgc2hpcHM7IHRoZSByZXN1bHRpbmcgc2hpcCBpcyBmaXR0ZWQgd2l0aCBhIGdlbmVyYXRvciwgZW5naW5lLCBnYXRoZXJlciwgY3JhZnRlciwgYW5kIGhhdWxlciBtb2R1bGUuAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMu4LPLU6ls1EUMY3JlYXRlZW50aXR5vwEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JlYXRlZW50aXR5CnN1bW1hcnk6ICdERUJVRzogY3JlYXRlIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzAAAAAABc1bJhBmdhdGhlcpcDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdhdGhlcgpzdW1tYXJ5OiAnR2F0aGVyIHJlc291cmNlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKR2F0aGVyIHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZ2F0aGVyYWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGEgZ2F0aGVyIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGdhdGhlcmVyIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgBUPI65qLJiC2dldGVsaWdpYmxlyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZWxpZ2libGUKc3VtbWFyeTogJ0dldCBlbGlnaWJsZSByZXNvdXJjZSBpdGVtIElEcyBhdCBhIGxvY2F0aW9uIGFuZCBzdHJhdHVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgbGlzdCBvZiByZXNvdXJjZSBpdGVtIElEcyBlbGlnaWJsZSB0byBiZSBnYXRoZXJlZCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgYW5kIHN0cmF0dW0gZGVwdGguIEl0ZW1zIGFyZSBnYXRlZCBieSBib3RoIHRoZSBsb2NhdGlvbidzIHJlc291cmNlIHByb2ZpbGUgYW5kIHRoZSBkZXB0aCB0aHJlc2hvbGQgZm9yIGVhY2ggdGllci4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YagDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLgAATk6q7LJiCmdldGl0ZW1pZHOGAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtaWRzCnN1bW1hcnk6ICdHZXQgaXRlbSBpZCB0byBuYW1lIG1hcHBpbmdzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBtYXBwaW5nIG9mIGl0ZW0gaWQgY29uc3RhbnRzIHRvIHRoZWlyIGNhbm9uaWNhbCBzdHJpbmcgbmFtZXMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcmVzb2x2ZSBudW1lcmljIGl0ZW0gaWRzIHRvIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXJzLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy6AVfVZquyyYgxnZXRpdGVtdHlwZXOIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtdHlwZXMKc3VtbWFyeTogJ0dldCBpdGVtIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBpdGVtIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAocmVzb3VyY2UsIGNvbXBvbmVudCwgbW9kdWxlLCBlbnRpdHkpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBpdGVtIHR5cGUgaWRlbnRpZmllcnMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgAAADjTiLNiCGdldHNsb3RzuwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c2xvdHMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc2xvdCBsYXlvdXRzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgbW9kdWxlIHNsb3QgbGF5b3V0IGZvciBldmVyeSBlbnRpdHkgaXRlbSB0eXBlLCBsaXN0aW5nIHRoZSBvcmRlcmVkIHNsb3QgdHlwZXMgYXZhaWxhYmxlIGZvciBtb2R1bGUgaW5zdGFsbGF0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRldGVybWluZSB3aGljaCBtb2R1bGUgdHlwZXMgYXJlIGNvbXBhdGlibGUgd2l0aCBhIGdpdmVuIGVudGl0eSBodWxsLgCA1NncjLNiCmdldHN0cmF0dW3SAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdHJhdHVtCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHJlc291cmNlIHN0cmF0dW0gZGF0YSBmb3IgYSBzcGVjaWZpYyBkZXB0aCBsYXllciBhdCBhIGNvb3JkaW5hdGUsIGluY2x1ZGluZyB0aGUgc3RyYXR1bSBzZWVkIGluZm8gYW5kIGRlcml2ZWQgcmVzb3VyY2Ugc3RhdHMugJW7RkqNs2IMZ2V0c3VtbWFyaWVz6AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3VtbWFyaWVzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHN1bW1hcmllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgbGlnaHR3ZWlnaHQgc3VtbWFyaWVzIG9mIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllciBpbmNsdWRpbmcgdHlwZSwgaWQsIG93bmVyLCBuYW1lLCBsb2NhdGlvbiwgYW5kIGlkbGUgc3RhdHVzLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4Aotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AgPouGpfddAppbml0aWFsaXplgAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdGlhbGl6ZQpzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAAIpd05C6CHJlY2hhcmdlzQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS7gs8tTNXyXugxyZWZyc2hlbnRpdHkAAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAAAAkKPBBHNhbHTYAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzYWx0CnN1bW1hcnk6ICdBcHBlbmQgU2FsdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWRkIGFkZGl0aW9uYWwgc2FsdCB0byB0aGUgbmV4dCBlcG9jaCBzZWVkLgAAYAvlNbPCCXNldG5mdGNmZ8QDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldG5mdGNmZwpzdW1tYXJ5OiAnU2V0IE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpCaW5kIGFuIGl0ZW0gaWQgdG8gYW4gQXRvbWljQXNzZXRzIHRlbXBsYXRlIGlkIGFuZCBzY2hlbWEgbmFtZS4gVXNlZCB0byBjb25maWd1cmUgaG93IHRoZSBjb250cmFjdCBtaW50cyBhbmQgcmVjb2duaXplcyBORlRzIGZvciBhIGdpdmVuIGl0ZW0uIEluc2VydHMgYSBuZXcgbWFwcGluZyBpZiBvbmUgZG9lcyBub3QgZXhpc3QsIG9yIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIG1hcHBpbmcuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AQDRqq1sdxApza2lwcmV2ZWFsAAAAZdegyU3FCnNwYXduY2FyZ2/FAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bmNhcmdvCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJKCyNTJTcULc3Bhd25wYWNrZWTnAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnBhY2tlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGEgcGFja2VkIGVudGl0eSB3aXRoIGluc3RhbGxlZCBtb2R1bGVzIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSSkrhyU3FC3NwYXduc2VlZGVkzQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25zZWVkZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBzZWVkZWQgY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AAACexqrS1Ah1bmRlcGxveecELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVuZGVwbG95CnN1bW1hcnk6ICdQYWNrIGEgZGVwbG95ZWQgZW50aXR5IGludG8gYSBob3N0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQYWNrIGFuIGVudGl0eSBpbnRvIGEgaG9zdCBlbnRpdHkncyBjYXJnbyBhcyBhIHBhY2tlZC1lbnRpdHkgaXRlbS4gSG9zdCBhbmQgdGFyZ2V0IG11c3Qgc2hhcmUgdGhlIHNhbWUgb3duZXIgYW5kIGNvb3JkaW5hdGVzLCB0aGUgaG9zdCBtdXN0IGhhdmUgbG9hZGVycyBhbmQgZW5vdWdoIGNhcGFjaXR5IGZvciB0aGUgcGFja2VkIG1hc3MsIGFuZCB0aGUgdGFyZ2V0IG11c3QgYmUgaWRsZSB3aXRoIGVtcHR5IGNhcmdvLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGFuZCBzY2hlZHVsZXMgdW5kZXBsb3kgdGFza3Mgb24gYm90aCBlbnRpdGllczsgb24gcmVzb2x1dGlvbiB0aGUgdGFyZ2V0IGlzIGVyYXNlZCBhbmQgdGhlIHBhY2tlZCBlbnRpdHkgaXMgYWRkZWQgdG8gdGhlIGhvc3QncyBjYXJnby4gSW52ZXJzZSBvZiBkZXBsb3kuAAAAAABQr+EEd2FycJ8DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdhcnAKc3VtbWFyeTogJ1dhcnAgdG8gYSBkZXN0aW5hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFudGx5IHRlbGVwb3J0IGFuIGVudGl0eSB0byBhIGRlc3RpbmF0aW9uIHN5c3RlbS4gUmVxdWlyZXMgd2FycCBjYXBhYmlsaXR5LCBmdWxsIGVuZXJneSwgZW1wdHkgY2FyZ28sIGFuZCBhbiBlbXB0eSBzY2hlZHVsZS4gVGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgYSB2YWxpZCBzeXN0ZW0gd2l0aGluIHdhcnAgcmFuZ2UuIFJlc29sdmVzIGltbWVkaWF0ZWx5IGFzIGEgemVyby1kdXJhdGlvbiB0YXNrLgAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAFDN5QR3cmFw/gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcApzdW1tYXJ5OiAnV3JhcCBjYXJnbyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhIHF1YW50aXR5IG9mIGNhcmdvIGZyb20gYW4gZW50aXR5IGludG8gYW4gQXRvbWljQXNzZXRzIE5GVCBtaW50ZWQgdG8gdGhlIHNwZWNpZmllZCBvd25lci4gVGhlIGVudGl0eSBtdXN0IGJlIGF0IGEgbmV4dXMsIGhhdmUgbG9hZGVycywgYW5kIGNvbnRhaW4gZW5vdWdoIG9mIHRoZSByZXF1ZXN0ZWQgY2FyZ28uIFNjaGVkdWxlcyBhIHdyYXAgdGFzayB0aGF0LCBvbiByZXNvbHV0aW9uLCByZW1vdmVzIHRoZSBjYXJnbyBmcm9tIHRoZSBlbnRpdHkgYW5kIG1pbnRzIHRoZSBORlQgdXNpbmcgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyZWQgZm9yIHRoYXQgaXRlbSBpZC4AgM8uT1XN5Qp3cmFwZW50aXR55gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcGVudGl0eQpzdW1tYXJ5OiAnV3JhcCBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhbiBlbnRpdHkgaW50byBhbiBBdG9taWNBc3NldHMgTkZUIG1pbnRlZCB0byBpdHMgb3duZXIuIFRoZSBlbnRpdHkgbXVzdCBiZSBhdCBhIG5leHVzLCBpZGxlIHdpdGggZW1wdHkgY2FyZ28sIGFuZCBoYXZlIGFuIG5mdGNvbmZpZyBtYXBwaW5nIGZvciBpdHMgaXRlbSBpZC4gU2NoZWR1bGVzIGEgd3JhcCB0YXNrIHRoYXQsIG9uIHJlc29sdXRpb24sIGVyYXNlcyB0aGUgZW50aXR5IGFuZCBtaW50cyB0aGUgTkZUIHByZXNlcnZpbmcgaXRzIHN0YXRzIGFuZCBpbnN0YWxsZWQgbW9kdWxlcy4IAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AAAAAPjs8lQDaTY0AAAKZW50aXR5X3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAKAAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAADbtIpUoMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAABgbk2KsmILZ2FtZV9jb25maWcAVDyOuaiyYgh1aW50MTZbXQCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwBMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAATk6q7LJiD2l0ZW1faWRzX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm+AVfVZquyyYgtlbnVtX3Jlc3VsdAAmddkgGrNiDWxvY2F0aW9uX2luZm8AgMkmIRqzYhBsb2NhdGlvbl9kZXJpdmVkALCqPicqs2ILZW51bV9yZXN1bHQAAFZRJyqzYg5tb2R1bGVzX3Jlc3VsdAAA8OcaNbNiC25lYXJieV9pbmZvAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mbwAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AAAAONOIs2IVZW50aXR5X2xheW91dHNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAAACexqrS1Ax0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHMAAAAAAFDN5Qx0YXNrX3Jlc3VsdHMAgM8uT1XN5Qx0YXNrX3Jlc3VsdHM=');
217
229
  const abi = antelope.ABI.from(abiBlob);
218
230
  exports.ServerTypes = void 0;
219
231
  (function (Types) {
220
- let addmodule = class addmodule extends antelope.Struct {
232
+ let packed_module = class packed_module extends antelope.Struct {
221
233
  };
222
234
  tslib.__decorate([
223
- antelope.Struct.field(antelope.Name)
224
- ], addmodule.prototype, "entity_type", void 0);
235
+ antelope.Struct.field(antelope.UInt16)
236
+ ], packed_module.prototype, "item_id", void 0);
225
237
  tslib.__decorate([
226
238
  antelope.Struct.field(antelope.UInt64)
227
- ], addmodule.prototype, "entity_id", void 0);
239
+ ], packed_module.prototype, "stats", void 0);
240
+ packed_module = tslib.__decorate([
241
+ antelope.Struct.type('packed_module')
242
+ ], packed_module);
243
+ Types.packed_module = packed_module;
244
+ let module_entry = class module_entry extends antelope.Struct {
245
+ };
228
246
  tslib.__decorate([
229
247
  antelope.Struct.field(antelope.UInt8)
230
- ], addmodule.prototype, "module_index", void 0);
248
+ ], module_entry.prototype, "type", void 0);
249
+ tslib.__decorate([
250
+ antelope.Struct.field(packed_module, { optional: true })
251
+ ], module_entry.prototype, "installed", void 0);
252
+ module_entry = tslib.__decorate([
253
+ antelope.Struct.type('module_entry')
254
+ ], module_entry);
255
+ Types.module_entry = module_entry;
256
+ let cargo_ref = class cargo_ref extends antelope.Struct {
257
+ };
258
+ tslib.__decorate([
259
+ antelope.Struct.field(antelope.UInt16)
260
+ ], cargo_ref.prototype, "item_id", void 0);
231
261
  tslib.__decorate([
232
262
  antelope.Struct.field(antelope.UInt64)
233
- ], addmodule.prototype, "module_cargo_id", void 0);
263
+ ], cargo_ref.prototype, "stats", void 0);
264
+ tslib.__decorate([
265
+ antelope.Struct.field(module_entry, { array: true })
266
+ ], cargo_ref.prototype, "modules", void 0);
267
+ cargo_ref = tslib.__decorate([
268
+ antelope.Struct.type('cargo_ref')
269
+ ], cargo_ref);
270
+ Types.cargo_ref = cargo_ref;
271
+ let addmodule = class addmodule extends antelope.Struct {
272
+ };
234
273
  tslib.__decorate([
235
274
  antelope.Struct.field(antelope.UInt64)
236
- ], addmodule.prototype, "target_cargo_id", void 0);
275
+ ], addmodule.prototype, "entity_id", void 0);
276
+ tslib.__decorate([
277
+ antelope.Struct.field(antelope.UInt8)
278
+ ], addmodule.prototype, "module_index", void 0);
279
+ tslib.__decorate([
280
+ antelope.Struct.field(cargo_ref)
281
+ ], addmodule.prototype, "module_ref", void 0);
282
+ tslib.__decorate([
283
+ antelope.Struct.field(cargo_ref, { optional: true })
284
+ ], addmodule.prototype, "target_ref", void 0);
237
285
  addmodule = tslib.__decorate([
238
286
  antelope.Struct.type('addmodule')
239
287
  ], addmodule);
@@ -265,53 +313,26 @@ exports.ServerTypes = void 0;
265
313
  antelope.Struct.type('advance')
266
314
  ], advance);
267
315
  Types.advance = advance;
268
- let packed_module = class packed_module extends antelope.Struct {
269
- };
270
- tslib.__decorate([
271
- antelope.Struct.field(antelope.UInt16)
272
- ], packed_module.prototype, "item_id", void 0);
273
- tslib.__decorate([
274
- antelope.Struct.field(antelope.UInt64)
275
- ], packed_module.prototype, "stats", void 0);
276
- packed_module = tslib.__decorate([
277
- antelope.Struct.type('packed_module')
278
- ], packed_module);
279
- Types.packed_module = packed_module;
280
- let module_entry = class module_entry extends antelope.Struct {
281
- };
282
- tslib.__decorate([
283
- antelope.Struct.field(antelope.UInt8)
284
- ], module_entry.prototype, "type", void 0);
285
- tslib.__decorate([
286
- antelope.Struct.field(packed_module, { optional: true })
287
- ], module_entry.prototype, "installed", void 0);
288
- module_entry = tslib.__decorate([
289
- antelope.Struct.type('module_entry')
290
- ], module_entry);
291
- Types.module_entry = module_entry;
292
316
  let cargo_item = class cargo_item extends antelope.Struct {
293
317
  };
294
318
  tslib.__decorate([
295
319
  antelope.Struct.field(antelope.UInt16)
296
320
  ], cargo_item.prototype, "item_id", void 0);
297
- tslib.__decorate([
298
- antelope.Struct.field(antelope.UInt32)
299
- ], cargo_item.prototype, "quantity", void 0);
300
321
  tslib.__decorate([
301
322
  antelope.Struct.field(antelope.UInt64)
302
323
  ], cargo_item.prototype, "stats", void 0);
303
324
  tslib.__decorate([
304
325
  antelope.Struct.field(module_entry, { array: true })
305
326
  ], cargo_item.prototype, "modules", void 0);
327
+ tslib.__decorate([
328
+ antelope.Struct.field(antelope.UInt32)
329
+ ], cargo_item.prototype, "quantity", void 0);
306
330
  cargo_item = tslib.__decorate([
307
331
  antelope.Struct.type('cargo_item')
308
332
  ], cargo_item);
309
333
  Types.cargo_item = cargo_item;
310
334
  let blend = class blend extends antelope.Struct {
311
335
  };
312
- tslib.__decorate([
313
- antelope.Struct.field(antelope.Name)
314
- ], blend.prototype, "entity_type", void 0);
315
336
  tslib.__decorate([
316
337
  antelope.Struct.field(antelope.UInt64)
317
338
  ], blend.prototype, "id", void 0);
@@ -324,9 +345,6 @@ exports.ServerTypes = void 0;
324
345
  Types.blend = blend;
325
346
  let cancel = class cancel extends antelope.Struct {
326
347
  };
327
- tslib.__decorate([
328
- antelope.Struct.field(antelope.Name)
329
- ], cancel.prototype, "entity_type", void 0);
330
348
  tslib.__decorate([
331
349
  antelope.Struct.field(antelope.UInt64)
332
350
  ], cancel.prototype, "id", void 0);
@@ -397,6 +415,27 @@ exports.ServerTypes = void 0;
397
415
  antelope.Struct.type('cargo_row')
398
416
  ], cargo_row);
399
417
  Types.cargo_row = cargo_row;
418
+ let cargo_view = class cargo_view extends antelope.Struct {
419
+ };
420
+ tslib.__decorate([
421
+ antelope.Struct.field(antelope.UInt16)
422
+ ], cargo_view.prototype, "item_id", void 0);
423
+ tslib.__decorate([
424
+ antelope.Struct.field(antelope.UInt64)
425
+ ], cargo_view.prototype, "stats", void 0);
426
+ tslib.__decorate([
427
+ antelope.Struct.field(module_entry, { array: true })
428
+ ], cargo_view.prototype, "modules", void 0);
429
+ tslib.__decorate([
430
+ antelope.Struct.field(antelope.UInt32)
431
+ ], cargo_view.prototype, "quantity", void 0);
432
+ tslib.__decorate([
433
+ antelope.Struct.field(antelope.UInt64)
434
+ ], cargo_view.prototype, "id", void 0);
435
+ cargo_view = tslib.__decorate([
436
+ antelope.Struct.type('cargo_view')
437
+ ], cargo_view);
438
+ Types.cargo_view = cargo_view;
400
439
  let claimstarter = class claimstarter extends antelope.Struct {
401
440
  };
402
441
  tslib.__decorate([
@@ -520,83 +559,8 @@ exports.ServerTypes = void 0;
520
559
  antelope.Struct.type('coordinates')
521
560
  ], coordinates);
522
561
  Types.coordinates = coordinates;
523
- let task = class task extends antelope.Struct {
524
- };
525
- tslib.__decorate([
526
- antelope.Struct.field(antelope.UInt8)
527
- ], task.prototype, "type", void 0);
528
- tslib.__decorate([
529
- antelope.Struct.field(antelope.UInt32)
530
- ], task.prototype, "duration", void 0);
531
- tslib.__decorate([
532
- antelope.Struct.field(antelope.UInt8)
533
- ], task.prototype, "cancelable", void 0);
534
- tslib.__decorate([
535
- antelope.Struct.field(coordinates, { optional: true })
536
- ], task.prototype, "coordinates", void 0);
537
- tslib.__decorate([
538
- antelope.Struct.field(cargo_item, { array: true })
539
- ], task.prototype, "cargo", void 0);
540
- tslib.__decorate([
541
- antelope.Struct.field(entity_ref, { optional: true })
542
- ], task.prototype, "entitytarget", void 0);
543
- tslib.__decorate([
544
- antelope.Struct.field(antelope.UInt64, { optional: true })
545
- ], task.prototype, "entitygroup", void 0);
546
- tslib.__decorate([
547
- antelope.Struct.field(antelope.UInt16, { optional: true })
548
- ], task.prototype, "energy_cost", void 0);
549
- task = tslib.__decorate([
550
- antelope.Struct.type('task')
551
- ], task);
552
- Types.task = task;
553
- let schedule = class schedule extends antelope.Struct {
554
- };
555
- tslib.__decorate([
556
- antelope.Struct.field(antelope.TimePoint)
557
- ], schedule.prototype, "started", void 0);
558
- tslib.__decorate([
559
- antelope.Struct.field(task, { array: true })
560
- ], schedule.prototype, "tasks", void 0);
561
- schedule = tslib.__decorate([
562
- antelope.Struct.type('schedule')
563
- ], schedule);
564
- Types.schedule = schedule;
565
- let container_row = class container_row extends antelope.Struct {
566
- };
567
- tslib.__decorate([
568
- antelope.Struct.field(antelope.UInt64)
569
- ], container_row.prototype, "id", void 0);
570
- tslib.__decorate([
571
- antelope.Struct.field(antelope.Name)
572
- ], container_row.prototype, "owner", void 0);
573
- tslib.__decorate([
574
- antelope.Struct.field('string')
575
- ], container_row.prototype, "name", void 0);
576
- tslib.__decorate([
577
- antelope.Struct.field(coordinates)
578
- ], container_row.prototype, "coordinates", void 0);
579
- tslib.__decorate([
580
- antelope.Struct.field(antelope.UInt32)
581
- ], container_row.prototype, "hullmass", void 0);
582
- tslib.__decorate([
583
- antelope.Struct.field(antelope.UInt32)
584
- ], container_row.prototype, "capacity", void 0);
585
- tslib.__decorate([
586
- antelope.Struct.field(antelope.UInt32)
587
- ], container_row.prototype, "cargomass", void 0);
588
- tslib.__decorate([
589
- antelope.Struct.field(schedule, { optional: true })
590
- ], container_row.prototype, "schedule", void 0);
591
- container_row = tslib.__decorate([
592
- antelope.Struct.type('container_row')
593
- ], container_row);
594
- Types.container_row = container_row;
595
562
  let craft = class craft extends antelope.Struct {
596
563
  };
597
- tslib.__decorate([
598
- antelope.Struct.field(antelope.Name)
599
- ], craft.prototype, "entity_type", void 0);
600
564
  tslib.__decorate([
601
565
  antelope.Struct.field(antelope.UInt64)
602
566
  ], craft.prototype, "id", void 0);
@@ -646,20 +610,23 @@ exports.ServerTypes = void 0;
646
610
  antelope.Struct.type('createentity')
647
611
  ], createentity);
648
612
  Types.createentity = createentity;
649
- let deploy = class deploy extends antelope.Struct {
613
+ let demolish = class demolish extends antelope.Struct {
650
614
  };
651
615
  tslib.__decorate([
652
- antelope.Struct.field(antelope.Name)
653
- ], deploy.prototype, "entity_type", void 0);
616
+ antelope.Struct.field(antelope.UInt64)
617
+ ], demolish.prototype, "entity_id", void 0);
618
+ demolish = tslib.__decorate([
619
+ antelope.Struct.type('demolish')
620
+ ], demolish);
621
+ Types.demolish = demolish;
622
+ let deploy = class deploy extends antelope.Struct {
623
+ };
654
624
  tslib.__decorate([
655
625
  antelope.Struct.field(antelope.UInt64)
656
626
  ], deploy.prototype, "id", void 0);
657
627
  tslib.__decorate([
658
- antelope.Struct.field(antelope.UInt16)
659
- ], deploy.prototype, "packed_item_id", void 0);
660
- tslib.__decorate([
661
- antelope.Struct.field(antelope.UInt64)
662
- ], deploy.prototype, "stats", void 0);
628
+ antelope.Struct.field(cargo_ref)
629
+ ], deploy.prototype, "ref", void 0);
663
630
  deploy = tslib.__decorate([
664
631
  antelope.Struct.type('deploy')
665
632
  ], deploy);
@@ -784,6 +751,48 @@ exports.ServerTypes = void 0;
784
751
  antelope.Struct.type('warp_stats')
785
752
  ], warp_stats);
786
753
  Types.warp_stats = warp_stats;
754
+ let task = class task extends antelope.Struct {
755
+ };
756
+ tslib.__decorate([
757
+ antelope.Struct.field(antelope.UInt8)
758
+ ], task.prototype, "type", void 0);
759
+ tslib.__decorate([
760
+ antelope.Struct.field(antelope.UInt32)
761
+ ], task.prototype, "duration", void 0);
762
+ tslib.__decorate([
763
+ antelope.Struct.field(antelope.UInt8)
764
+ ], task.prototype, "cancelable", void 0);
765
+ tslib.__decorate([
766
+ antelope.Struct.field(coordinates, { optional: true })
767
+ ], task.prototype, "coordinates", void 0);
768
+ tslib.__decorate([
769
+ antelope.Struct.field(cargo_item, { array: true })
770
+ ], task.prototype, "cargo", void 0);
771
+ tslib.__decorate([
772
+ antelope.Struct.field(entity_ref, { optional: true })
773
+ ], task.prototype, "entitytarget", void 0);
774
+ tslib.__decorate([
775
+ antelope.Struct.field(antelope.UInt64, { optional: true })
776
+ ], task.prototype, "entitygroup", void 0);
777
+ tslib.__decorate([
778
+ antelope.Struct.field(antelope.UInt16, { optional: true })
779
+ ], task.prototype, "energy_cost", void 0);
780
+ task = tslib.__decorate([
781
+ antelope.Struct.type('task')
782
+ ], task);
783
+ Types.task = task;
784
+ let schedule = class schedule extends antelope.Struct {
785
+ };
786
+ tslib.__decorate([
787
+ antelope.Struct.field(antelope.TimePoint)
788
+ ], schedule.prototype, "started", void 0);
789
+ tslib.__decorate([
790
+ antelope.Struct.field(task, { array: true })
791
+ ], schedule.prototype, "tasks", void 0);
792
+ schedule = tslib.__decorate([
793
+ antelope.Struct.type('schedule')
794
+ ], schedule);
795
+ Types.schedule = schedule;
787
796
  let entity_info = class entity_info extends antelope.Struct {
788
797
  };
789
798
  tslib.__decorate([
@@ -805,7 +814,7 @@ exports.ServerTypes = void 0;
805
814
  antelope.Struct.field(antelope.UInt32)
806
815
  ], entity_info.prototype, "cargomass", void 0);
807
816
  tslib.__decorate([
808
- antelope.Struct.field(cargo_item, { array: true })
817
+ antelope.Struct.field(cargo_view, { array: true })
809
818
  ], entity_info.prototype, "cargo", void 0);
810
819
  tslib.__decorate([
811
820
  antelope.Struct.field(loader_stats, { optional: true })
@@ -870,6 +879,9 @@ exports.ServerTypes = void 0;
870
879
  tslib.__decorate([
871
880
  antelope.Struct.field(antelope.UInt8)
872
881
  ], slot_def.prototype, "type", void 0);
882
+ tslib.__decorate([
883
+ antelope.Struct.field(antelope.UInt16)
884
+ ], slot_def.prototype, "output_pct", void 0);
873
885
  slot_def = tslib.__decorate([
874
886
  antelope.Struct.type('slot_def')
875
887
  ], slot_def);
@@ -895,6 +907,72 @@ exports.ServerTypes = void 0;
895
907
  antelope.Struct.type('entity_layouts_result')
896
908
  ], entity_layouts_result);
897
909
  Types.entity_layouts_result = entity_layouts_result;
910
+ let entity_row = class entity_row extends antelope.Struct {
911
+ };
912
+ tslib.__decorate([
913
+ antelope.Struct.field(antelope.UInt64)
914
+ ], entity_row.prototype, "id", void 0);
915
+ tslib.__decorate([
916
+ antelope.Struct.field(antelope.Name)
917
+ ], entity_row.prototype, "owner", void 0);
918
+ tslib.__decorate([
919
+ antelope.Struct.field(antelope.Name)
920
+ ], entity_row.prototype, "kind", void 0);
921
+ tslib.__decorate([
922
+ antelope.Struct.field('string')
923
+ ], entity_row.prototype, "name", void 0);
924
+ tslib.__decorate([
925
+ antelope.Struct.field(antelope.UInt64)
926
+ ], entity_row.prototype, "stats", void 0);
927
+ tslib.__decorate([
928
+ antelope.Struct.field(coordinates)
929
+ ], entity_row.prototype, "coordinates", void 0);
930
+ tslib.__decorate([
931
+ antelope.Struct.field(antelope.UInt32, { optional: true })
932
+ ], entity_row.prototype, "hullmass", void 0);
933
+ tslib.__decorate([
934
+ antelope.Struct.field(antelope.UInt32, { optional: true })
935
+ ], entity_row.prototype, "capacity", void 0);
936
+ tslib.__decorate([
937
+ antelope.Struct.field(antelope.UInt16, { optional: true })
938
+ ], entity_row.prototype, "energy", void 0);
939
+ tslib.__decorate([
940
+ antelope.Struct.field(antelope.UInt32)
941
+ ], entity_row.prototype, "cargomass", void 0);
942
+ tslib.__decorate([
943
+ antelope.Struct.field(movement_stats, { optional: true })
944
+ ], entity_row.prototype, "engines", void 0);
945
+ tslib.__decorate([
946
+ antelope.Struct.field(energy_stats, { optional: true })
947
+ ], entity_row.prototype, "generator", void 0);
948
+ tslib.__decorate([
949
+ antelope.Struct.field(loader_stats, { optional: true })
950
+ ], entity_row.prototype, "loaders", void 0);
951
+ tslib.__decorate([
952
+ antelope.Struct.field(gatherer_stats, { optional: true })
953
+ ], entity_row.prototype, "gatherer", void 0);
954
+ tslib.__decorate([
955
+ antelope.Struct.field(warp_stats, { optional: true })
956
+ ], entity_row.prototype, "warp", void 0);
957
+ tslib.__decorate([
958
+ antelope.Struct.field(crafter_stats, { optional: true })
959
+ ], entity_row.prototype, "crafter", void 0);
960
+ tslib.__decorate([
961
+ antelope.Struct.field(hauler_stats, { optional: true })
962
+ ], entity_row.prototype, "hauler", void 0);
963
+ tslib.__decorate([
964
+ antelope.Struct.field(module_entry, { array: true })
965
+ ], entity_row.prototype, "modules", void 0);
966
+ tslib.__decorate([
967
+ antelope.Struct.field(schedule, { optional: true })
968
+ ], entity_row.prototype, "schedule", void 0);
969
+ tslib.__decorate([
970
+ antelope.Struct.field(antelope.UInt16)
971
+ ], entity_row.prototype, "item_id", void 0);
972
+ entity_row = tslib.__decorate([
973
+ antelope.Struct.type('entity_row')
974
+ ], entity_row);
975
+ Types.entity_row = entity_row;
898
976
  let entity_summary = class entity_summary extends antelope.Struct {
899
977
  };
900
978
  tslib.__decorate([
@@ -976,14 +1054,23 @@ exports.ServerTypes = void 0;
976
1054
  antelope.Struct.type('enum_result')
977
1055
  ], enum_result);
978
1056
  Types.enum_result = enum_result;
1057
+ let fixcargomass = class fixcargomass extends antelope.Struct {
1058
+ };
1059
+ tslib.__decorate([
1060
+ antelope.Struct.field(antelope.UInt64)
1061
+ ], fixcargomass.prototype, "entity_id", void 0);
1062
+ fixcargomass = tslib.__decorate([
1063
+ antelope.Struct.type('fixcargomass')
1064
+ ], fixcargomass);
1065
+ Types.fixcargomass = fixcargomass;
979
1066
  let gather = class gather extends antelope.Struct {
980
1067
  };
981
1068
  tslib.__decorate([
982
- antelope.Struct.field(entity_ref)
983
- ], gather.prototype, "source", void 0);
1069
+ antelope.Struct.field(antelope.UInt64)
1070
+ ], gather.prototype, "source_id", void 0);
984
1071
  tslib.__decorate([
985
- antelope.Struct.field(entity_ref)
986
- ], gather.prototype, "destination", void 0);
1072
+ antelope.Struct.field(antelope.UInt64)
1073
+ ], gather.prototype, "destination_id", void 0);
987
1074
  tslib.__decorate([
988
1075
  antelope.Struct.field(antelope.UInt16)
989
1076
  ], gather.prototype, "stratum", void 0);
@@ -1000,6 +1087,18 @@ exports.ServerTypes = void 0;
1000
1087
  antelope.Struct.type('getconfig')
1001
1088
  ], getconfig);
1002
1089
  Types.getconfig = getconfig;
1090
+ let geteligible = class geteligible extends antelope.Struct {
1091
+ };
1092
+ tslib.__decorate([
1093
+ antelope.Struct.field(coordinates)
1094
+ ], geteligible.prototype, "coords", void 0);
1095
+ tslib.__decorate([
1096
+ antelope.Struct.field(antelope.UInt16)
1097
+ ], geteligible.prototype, "stratum", void 0);
1098
+ geteligible = tslib.__decorate([
1099
+ antelope.Struct.type('geteligible')
1100
+ ], geteligible);
1101
+ Types.geteligible = geteligible;
1003
1102
  let getentities = class getentities extends antelope.Struct {
1004
1103
  };
1005
1104
  tslib.__decorate([
@@ -1014,9 +1113,6 @@ exports.ServerTypes = void 0;
1014
1113
  Types.getentities = getentities;
1015
1114
  let getentity = class getentity extends antelope.Struct {
1016
1115
  };
1017
- tslib.__decorate([
1018
- antelope.Struct.field(antelope.Name)
1019
- ], getentity.prototype, "entity_type", void 0);
1020
1116
  tslib.__decorate([
1021
1117
  antelope.Struct.field(antelope.UInt64)
1022
1118
  ], getentity.prototype, "entity_id", void 0);
@@ -1086,9 +1182,6 @@ exports.ServerTypes = void 0;
1086
1182
  Types.getmodules = getmodules;
1087
1183
  let getnearby = class getnearby extends antelope.Struct {
1088
1184
  };
1089
- tslib.__decorate([
1090
- antelope.Struct.field(antelope.Name)
1091
- ], getnearby.prototype, "entity_type", void 0);
1092
1185
  tslib.__decorate([
1093
1186
  antelope.Struct.field(antelope.UInt64)
1094
1187
  ], getnearby.prototype, "entity_id", void 0);
@@ -1228,15 +1321,15 @@ exports.ServerTypes = void 0;
1228
1321
  antelope.Struct.type('hash512')
1229
1322
  ], hash512);
1230
1323
  Types.hash512 = hash512;
1231
- let init = class init extends antelope.Struct {
1324
+ let initialize = class initialize extends antelope.Struct {
1232
1325
  };
1233
1326
  tslib.__decorate([
1234
1327
  antelope.Struct.field(antelope.Checksum256)
1235
- ], init.prototype, "seed", void 0);
1236
- init = tslib.__decorate([
1237
- antelope.Struct.type('init')
1238
- ], init);
1239
- Types.init = init;
1328
+ ], initialize.prototype, "seed", void 0);
1329
+ initialize = tslib.__decorate([
1330
+ antelope.Struct.type('initialize')
1331
+ ], initialize);
1332
+ Types.initialize = initialize;
1240
1333
  let item_id_pair = class item_id_pair extends antelope.Struct {
1241
1334
  };
1242
1335
  tslib.__decorate([
@@ -1396,29 +1489,11 @@ exports.ServerTypes = void 0;
1396
1489
  antelope.Struct.type('location_static')
1397
1490
  ], location_static);
1398
1491
  Types.location_static = location_static;
1399
- let location_epoch = class location_epoch extends antelope.Struct {
1400
- };
1401
- tslib.__decorate([
1402
- antelope.Struct.field('bool')
1403
- ], location_epoch.prototype, "active", void 0);
1404
- tslib.__decorate([
1405
- antelope.Struct.field(antelope.UInt8)
1406
- ], location_epoch.prototype, "seed0", void 0);
1407
- tslib.__decorate([
1408
- antelope.Struct.field(antelope.UInt8)
1409
- ], location_epoch.prototype, "seed1", void 0);
1410
- location_epoch = tslib.__decorate([
1411
- antelope.Struct.type('location_epoch')
1412
- ], location_epoch);
1413
- Types.location_epoch = location_epoch;
1414
- let location_derived = class location_derived extends antelope.Struct {
1492
+ let location_derived = class location_derived extends antelope.Struct {
1415
1493
  };
1416
1494
  tslib.__decorate([
1417
1495
  antelope.Struct.field(location_static)
1418
1496
  ], location_derived.prototype, "static_props", void 0);
1419
- tslib.__decorate([
1420
- antelope.Struct.field(location_epoch)
1421
- ], location_derived.prototype, "epoch_props", void 0);
1422
1497
  tslib.__decorate([
1423
1498
  antelope.Struct.field(antelope.UInt16)
1424
1499
  ], location_derived.prototype, "size", void 0);
@@ -1438,30 +1513,6 @@ exports.ServerTypes = void 0;
1438
1513
  antelope.Struct.type('location_info')
1439
1514
  ], location_info);
1440
1515
  Types.location_info = location_info;
1441
- let location_row = class location_row extends antelope.Struct {
1442
- };
1443
- tslib.__decorate([
1444
- antelope.Struct.field(antelope.UInt64)
1445
- ], location_row.prototype, "id", void 0);
1446
- tslib.__decorate([
1447
- antelope.Struct.field(antelope.Name)
1448
- ], location_row.prototype, "owner", void 0);
1449
- tslib.__decorate([
1450
- antelope.Struct.field(coordinates)
1451
- ], location_row.prototype, "coordinates", void 0);
1452
- tslib.__decorate([
1453
- antelope.Struct.field(antelope.UInt32)
1454
- ], location_row.prototype, "cargomass", void 0);
1455
- tslib.__decorate([
1456
- antelope.Struct.field(cargo_item, { array: true })
1457
- ], location_row.prototype, "cargo", void 0);
1458
- tslib.__decorate([
1459
- antelope.Struct.field(schedule, { optional: true })
1460
- ], location_row.prototype, "schedule", void 0);
1461
- location_row = tslib.__decorate([
1462
- antelope.Struct.type('location_row')
1463
- ], location_row);
1464
- Types.location_row = location_row;
1465
1516
  let module_info = class module_info extends antelope.Struct {
1466
1517
  };
1467
1518
  tslib.__decorate([
@@ -1528,24 +1579,6 @@ exports.ServerTypes = void 0;
1528
1579
  antelope.Struct.type('nearby_info')
1529
1580
  ], nearby_info);
1530
1581
  Types.nearby_info = nearby_info;
1531
- let nexus_row = class nexus_row extends antelope.Struct {
1532
- };
1533
- tslib.__decorate([
1534
- antelope.Struct.field(antelope.UInt64)
1535
- ], nexus_row.prototype, "id", void 0);
1536
- tslib.__decorate([
1537
- antelope.Struct.field(antelope.Name)
1538
- ], nexus_row.prototype, "owner", void 0);
1539
- tslib.__decorate([
1540
- antelope.Struct.field('string')
1541
- ], nexus_row.prototype, "name", void 0);
1542
- tslib.__decorate([
1543
- antelope.Struct.field(coordinates)
1544
- ], nexus_row.prototype, "coordinates", void 0);
1545
- nexus_row = tslib.__decorate([
1546
- antelope.Struct.type('nexus_row')
1547
- ], nexus_row);
1548
- Types.nexus_row = nexus_row;
1549
1582
  let schema_field = class schema_field extends antelope.Struct {
1550
1583
  };
1551
1584
  tslib.__decorate([
@@ -1662,15 +1695,6 @@ exports.ServerTypes = void 0;
1662
1695
  tslib.__decorate([
1663
1696
  antelope.Struct.field('string')
1664
1697
  ], player_info.prototype, "company_name", void 0);
1665
- tslib.__decorate([
1666
- antelope.Struct.field(antelope.UInt64)
1667
- ], player_info.prototype, "ship_count", void 0);
1668
- tslib.__decorate([
1669
- antelope.Struct.field(antelope.UInt64)
1670
- ], player_info.prototype, "warehouse_count", void 0);
1671
- tslib.__decorate([
1672
- antelope.Struct.field(antelope.UInt64)
1673
- ], player_info.prototype, "container_count", void 0);
1674
1698
  player_info = tslib.__decorate([
1675
1699
  antelope.Struct.type('player_info')
1676
1700
  ], player_info);
@@ -1686,9 +1710,6 @@ exports.ServerTypes = void 0;
1686
1710
  Types.player_row = player_row;
1687
1711
  let recharge = class recharge extends antelope.Struct {
1688
1712
  };
1689
- tslib.__decorate([
1690
- antelope.Struct.field(antelope.Name)
1691
- ], recharge.prototype, "entity_type", void 0);
1692
1713
  tslib.__decorate([
1693
1714
  antelope.Struct.field(antelope.UInt64)
1694
1715
  ], recharge.prototype, "id", void 0);
@@ -1696,6 +1717,15 @@ exports.ServerTypes = void 0;
1696
1717
  antelope.Struct.type('recharge')
1697
1718
  ], recharge);
1698
1719
  Types.recharge = recharge;
1720
+ let refrshentity = class refrshentity extends antelope.Struct {
1721
+ };
1722
+ tslib.__decorate([
1723
+ antelope.Struct.field(antelope.UInt64)
1724
+ ], refrshentity.prototype, "entity_id", void 0);
1725
+ refrshentity = tslib.__decorate([
1726
+ antelope.Struct.type('refrshentity')
1727
+ ], refrshentity);
1728
+ Types.refrshentity = refrshentity;
1699
1729
  let reserve_row = class reserve_row extends antelope.Struct {
1700
1730
  };
1701
1731
  tslib.__decorate([
@@ -1716,9 +1746,6 @@ exports.ServerTypes = void 0;
1716
1746
  Types.reserve_row = reserve_row;
1717
1747
  let resolve = class resolve extends antelope.Struct {
1718
1748
  };
1719
- tslib.__decorate([
1720
- antelope.Struct.field(antelope.Name)
1721
- ], resolve.prototype, "entity_type", void 0);
1722
1749
  tslib.__decorate([
1723
1750
  antelope.Struct.field(antelope.UInt64)
1724
1751
  ], resolve.prototype, "id", void 0);
@@ -1797,9 +1824,6 @@ exports.ServerTypes = void 0;
1797
1824
  Types.resources_result = resources_result;
1798
1825
  let rmmodule = class rmmodule extends antelope.Struct {
1799
1826
  };
1800
- tslib.__decorate([
1801
- antelope.Struct.field(antelope.Name)
1802
- ], rmmodule.prototype, "entity_type", void 0);
1803
1827
  tslib.__decorate([
1804
1828
  antelope.Struct.field(antelope.UInt64)
1805
1829
  ], rmmodule.prototype, "entity_id", void 0);
@@ -1807,8 +1831,8 @@ exports.ServerTypes = void 0;
1807
1831
  antelope.Struct.field(antelope.UInt8)
1808
1832
  ], rmmodule.prototype, "module_index", void 0);
1809
1833
  tslib.__decorate([
1810
- antelope.Struct.field(antelope.UInt64)
1811
- ], rmmodule.prototype, "target_cargo_id", void 0);
1834
+ antelope.Struct.field(cargo_ref, { optional: true })
1835
+ ], rmmodule.prototype, "target_ref", void 0);
1812
1836
  rmmodule = tslib.__decorate([
1813
1837
  antelope.Struct.type('rmmodule')
1814
1838
  ], rmmodule);
@@ -1831,18 +1855,6 @@ exports.ServerTypes = void 0;
1831
1855
  antelope.Struct.type('salt')
1832
1856
  ], salt);
1833
1857
  Types.salt = salt;
1834
- let sequence_row = class sequence_row extends antelope.Struct {
1835
- };
1836
- tslib.__decorate([
1837
- antelope.Struct.field(antelope.Name)
1838
- ], sequence_row.prototype, "key", void 0);
1839
- tslib.__decorate([
1840
- antelope.Struct.field(antelope.UInt64)
1841
- ], sequence_row.prototype, "value", void 0);
1842
- sequence_row = tslib.__decorate([
1843
- antelope.Struct.type('sequence_row')
1844
- ], sequence_row);
1845
- Types.sequence_row = sequence_row;
1846
1858
  let setnftcfg = class setnftcfg extends antelope.Struct {
1847
1859
  };
1848
1860
  tslib.__decorate([
@@ -1858,66 +1870,15 @@ exports.ServerTypes = void 0;
1858
1870
  antelope.Struct.type('setnftcfg')
1859
1871
  ], setnftcfg);
1860
1872
  Types.setnftcfg = setnftcfg;
1861
- let ship_row = class ship_row extends antelope.Struct {
1873
+ let skipreveal = class skipreveal extends antelope.Struct {
1862
1874
  };
1863
1875
  tslib.__decorate([
1864
- antelope.Struct.field(antelope.UInt64)
1865
- ], ship_row.prototype, "id", void 0);
1866
- tslib.__decorate([
1867
- antelope.Struct.field(antelope.Name)
1868
- ], ship_row.prototype, "owner", void 0);
1869
- tslib.__decorate([
1870
- antelope.Struct.field('string')
1871
- ], ship_row.prototype, "name", void 0);
1872
- tslib.__decorate([
1873
- antelope.Struct.field(antelope.UInt64)
1874
- ], ship_row.prototype, "stats", void 0);
1875
- tslib.__decorate([
1876
- antelope.Struct.field(coordinates)
1877
- ], ship_row.prototype, "coordinates", void 0);
1878
- tslib.__decorate([
1879
- antelope.Struct.field(antelope.UInt32, { optional: true })
1880
- ], ship_row.prototype, "hullmass", void 0);
1881
- tslib.__decorate([
1882
- antelope.Struct.field(antelope.UInt32, { optional: true })
1883
- ], ship_row.prototype, "capacity", void 0);
1884
- tslib.__decorate([
1885
- antelope.Struct.field(antelope.UInt16, { optional: true })
1886
- ], ship_row.prototype, "energy", void 0);
1887
- tslib.__decorate([
1888
- antelope.Struct.field(antelope.UInt32)
1889
- ], ship_row.prototype, "cargomass", void 0);
1890
- tslib.__decorate([
1891
- antelope.Struct.field(movement_stats, { optional: true })
1892
- ], ship_row.prototype, "engines", void 0);
1893
- tslib.__decorate([
1894
- antelope.Struct.field(energy_stats, { optional: true })
1895
- ], ship_row.prototype, "generator", void 0);
1896
- tslib.__decorate([
1897
- antelope.Struct.field(loader_stats, { optional: true })
1898
- ], ship_row.prototype, "loaders", void 0);
1899
- tslib.__decorate([
1900
- antelope.Struct.field(gatherer_stats, { optional: true })
1901
- ], ship_row.prototype, "gatherer", void 0);
1902
- tslib.__decorate([
1903
- antelope.Struct.field(warp_stats, { optional: true })
1904
- ], ship_row.prototype, "warp", void 0);
1905
- tslib.__decorate([
1906
- antelope.Struct.field(crafter_stats, { optional: true })
1907
- ], ship_row.prototype, "crafter", void 0);
1908
- tslib.__decorate([
1909
- antelope.Struct.field(hauler_stats, { optional: true })
1910
- ], ship_row.prototype, "hauler", void 0);
1911
- tslib.__decorate([
1912
- antelope.Struct.field(module_entry, { array: true })
1913
- ], ship_row.prototype, "modules", void 0);
1914
- tslib.__decorate([
1915
- antelope.Struct.field(schedule, { optional: true })
1916
- ], ship_row.prototype, "schedule", void 0);
1917
- ship_row = tslib.__decorate([
1918
- antelope.Struct.type('ship_row')
1919
- ], ship_row);
1920
- Types.ship_row = ship_row;
1876
+ antelope.Struct.field(antelope.Checksum256)
1877
+ ], skipreveal.prototype, "commit", void 0);
1878
+ skipreveal = tslib.__decorate([
1879
+ antelope.Struct.type('skipreveal')
1880
+ ], skipreveal);
1881
+ Types.skipreveal = skipreveal;
1921
1882
  let spawncargo = class spawncargo extends antelope.Struct {
1922
1883
  };
1923
1884
  tslib.__decorate([
@@ -1980,9 +1941,6 @@ exports.ServerTypes = void 0;
1980
1941
  tslib.__decorate([
1981
1942
  antelope.Struct.field(antelope.UInt64)
1982
1943
  ], state_row.prototype, "salt", void 0);
1983
- tslib.__decorate([
1984
- antelope.Struct.field(antelope.UInt32)
1985
- ], state_row.prototype, "ships", void 0);
1986
1944
  tslib.__decorate([
1987
1945
  antelope.Struct.field(antelope.Checksum256)
1988
1946
  ], state_row.prototype, "seed", void 0);
@@ -2049,36 +2007,21 @@ exports.ServerTypes = void 0;
2049
2007
  Types.task_results = task_results;
2050
2008
  let transfer = class transfer extends antelope.Struct {
2051
2009
  };
2052
- tslib.__decorate([
2053
- antelope.Struct.field(antelope.Name)
2054
- ], transfer.prototype, "source_type", void 0);
2055
2010
  tslib.__decorate([
2056
2011
  antelope.Struct.field(antelope.UInt64)
2057
2012
  ], transfer.prototype, "source_id", void 0);
2058
- tslib.__decorate([
2059
- antelope.Struct.field(antelope.Name)
2060
- ], transfer.prototype, "dest_type", void 0);
2061
2013
  tslib.__decorate([
2062
2014
  antelope.Struct.field(antelope.UInt64)
2063
2015
  ], transfer.prototype, "dest_id", void 0);
2064
2016
  tslib.__decorate([
2065
- antelope.Struct.field(antelope.UInt16)
2066
- ], transfer.prototype, "item_id", void 0);
2067
- tslib.__decorate([
2068
- antelope.Struct.field(antelope.UInt64)
2069
- ], transfer.prototype, "stats", void 0);
2070
- tslib.__decorate([
2071
- antelope.Struct.field(antelope.UInt32)
2072
- ], transfer.prototype, "quantity", void 0);
2017
+ antelope.Struct.field(cargo_item, { array: true })
2018
+ ], transfer.prototype, "items", void 0);
2073
2019
  transfer = tslib.__decorate([
2074
2020
  antelope.Struct.type('transfer')
2075
2021
  ], transfer);
2076
2022
  Types.transfer = transfer;
2077
2023
  let travel = class travel extends antelope.Struct {
2078
2024
  };
2079
- tslib.__decorate([
2080
- antelope.Struct.field(antelope.Name)
2081
- ], travel.prototype, "entity_type", void 0);
2082
2025
  tslib.__decorate([
2083
2026
  antelope.Struct.field(antelope.UInt64)
2084
2027
  ], travel.prototype, "id", void 0);
@@ -2113,50 +2056,20 @@ exports.ServerTypes = void 0;
2113
2056
  antelope.Struct.type('types_row')
2114
2057
  ], types_row);
2115
2058
  Types.types_row = types_row;
2116
- let warehouse_row = class warehouse_row extends antelope.Struct {
2059
+ let undeploy = class undeploy extends antelope.Struct {
2117
2060
  };
2118
2061
  tslib.__decorate([
2119
2062
  antelope.Struct.field(antelope.UInt64)
2120
- ], warehouse_row.prototype, "id", void 0);
2121
- tslib.__decorate([
2122
- antelope.Struct.field(antelope.Name)
2123
- ], warehouse_row.prototype, "owner", void 0);
2124
- tslib.__decorate([
2125
- antelope.Struct.field('string')
2126
- ], warehouse_row.prototype, "name", void 0);
2063
+ ], undeploy.prototype, "host_id", void 0);
2127
2064
  tslib.__decorate([
2128
2065
  antelope.Struct.field(antelope.UInt64)
2129
- ], warehouse_row.prototype, "stats", void 0);
2130
- tslib.__decorate([
2131
- antelope.Struct.field(coordinates)
2132
- ], warehouse_row.prototype, "coordinates", void 0);
2133
- tslib.__decorate([
2134
- antelope.Struct.field(antelope.UInt32, { optional: true })
2135
- ], warehouse_row.prototype, "hullmass", void 0);
2136
- tslib.__decorate([
2137
- antelope.Struct.field(antelope.UInt32, { optional: true })
2138
- ], warehouse_row.prototype, "capacity", void 0);
2139
- tslib.__decorate([
2140
- antelope.Struct.field(antelope.UInt32)
2141
- ], warehouse_row.prototype, "cargomass", void 0);
2142
- tslib.__decorate([
2143
- antelope.Struct.field(loader_stats, { optional: true })
2144
- ], warehouse_row.prototype, "loaders", void 0);
2145
- tslib.__decorate([
2146
- antelope.Struct.field(module_entry, { array: true })
2147
- ], warehouse_row.prototype, "modules", void 0);
2148
- tslib.__decorate([
2149
- antelope.Struct.field(schedule, { optional: true })
2150
- ], warehouse_row.prototype, "schedule", void 0);
2151
- warehouse_row = tslib.__decorate([
2152
- antelope.Struct.type('warehouse_row')
2153
- ], warehouse_row);
2154
- Types.warehouse_row = warehouse_row;
2066
+ ], undeploy.prototype, "target_id", void 0);
2067
+ undeploy = tslib.__decorate([
2068
+ antelope.Struct.type('undeploy')
2069
+ ], undeploy);
2070
+ Types.undeploy = undeploy;
2155
2071
  let warp = class warp extends antelope.Struct {
2156
2072
  };
2157
- tslib.__decorate([
2158
- antelope.Struct.field(antelope.Name)
2159
- ], warp.prototype, "entity_type", void 0);
2160
2073
  tslib.__decorate([
2161
2074
  antelope.Struct.field(antelope.UInt64)
2162
2075
  ], warp.prototype, "id", void 0);
@@ -2176,48 +2089,46 @@ exports.ServerTypes = void 0;
2176
2089
  antelope.Struct.type('wipe')
2177
2090
  ], wipe);
2178
2091
  Types.wipe = wipe;
2179
- let wipesequence = class wipesequence extends antelope.Struct {
2180
- };
2181
- wipesequence = tslib.__decorate([
2182
- antelope.Struct.type('wipesequence')
2183
- ], wipesequence);
2184
- Types.wipesequence = wipesequence;
2185
2092
  let wrap = class wrap extends antelope.Struct {
2186
2093
  };
2187
2094
  tslib.__decorate([
2188
2095
  antelope.Struct.field(antelope.Name)
2189
2096
  ], wrap.prototype, "owner", void 0);
2190
- tslib.__decorate([
2191
- antelope.Struct.field(antelope.Name)
2192
- ], wrap.prototype, "entity_type", void 0);
2193
2097
  tslib.__decorate([
2194
2098
  antelope.Struct.field(antelope.UInt64)
2195
2099
  ], wrap.prototype, "entity_id", void 0);
2196
2100
  tslib.__decorate([
2197
2101
  antelope.Struct.field(antelope.UInt64)
2198
- ], wrap.prototype, "cargo_id", void 0);
2102
+ ], wrap.prototype, "nexus_id", void 0);
2199
2103
  tslib.__decorate([
2200
- antelope.Struct.field(antelope.UInt64)
2201
- ], wrap.prototype, "quantity", void 0);
2104
+ antelope.Struct.field(cargo_item, { array: true })
2105
+ ], wrap.prototype, "items", void 0);
2202
2106
  wrap = tslib.__decorate([
2203
2107
  antelope.Struct.type('wrap')
2204
2108
  ], wrap);
2205
2109
  Types.wrap = wrap;
2110
+ let wrapentity = class wrapentity extends antelope.Struct {
2111
+ };
2112
+ tslib.__decorate([
2113
+ antelope.Struct.field(antelope.UInt64)
2114
+ ], wrapentity.prototype, "entity_id", void 0);
2115
+ tslib.__decorate([
2116
+ antelope.Struct.field(antelope.UInt64)
2117
+ ], wrapentity.prototype, "nexus_id", void 0);
2118
+ wrapentity = tslib.__decorate([
2119
+ antelope.Struct.type('wrapentity')
2120
+ ], wrapentity);
2121
+ Types.wrapentity = wrapentity;
2206
2122
  })(exports.ServerTypes || (exports.ServerTypes = {}));
2207
2123
  const TableMap = {
2208
2124
  cargo: exports.ServerTypes.cargo_row,
2209
- container: exports.ServerTypes.container_row,
2125
+ entity: exports.ServerTypes.entity_row,
2210
2126
  entitygroup: exports.ServerTypes.entitygroup_row,
2211
- location: exports.ServerTypes.location_row,
2212
- nexus: exports.ServerTypes.nexus_row,
2213
2127
  nftconfig: exports.ServerTypes.nftconfig_row,
2214
2128
  player: exports.ServerTypes.player_row,
2215
2129
  reserve: exports.ServerTypes.reserve_row,
2216
- sequence: exports.ServerTypes.sequence_row,
2217
- ship: exports.ServerTypes.ship_row,
2218
2130
  state: exports.ServerTypes.state_row,
2219
2131
  types: exports.ServerTypes.types_row,
2220
- warehouse: exports.ServerTypes.warehouse_row,
2221
2132
  };
2222
2133
  class Contract extends ContractKit.Contract {
2223
2134
  constructor(args) {
@@ -2339,12 +2250,13 @@ const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
2339
2250
 
2340
2251
  const PRECISION$1 = 10000;
2341
2252
  const CRAFT_ENERGY_DIVISOR = 150000;
2342
- const WAREHOUSE_Z = 500;
2253
+ const PLANETARY_STRUCTURE_Z = 0;
2343
2254
  const CONTAINER_Z = 300;
2344
2255
  const TRAVEL_MAX_DURATION = 86400;
2345
2256
  const MIN_ORBITAL_ALTITUDE = 800;
2346
2257
  const MAX_ORBITAL_ALTITUDE = 3000;
2347
2258
  const BASE_ORBITAL_MASS = 100000;
2259
+ const MIN_TRANSFER_DISTANCE = 100;
2348
2260
  exports.TaskType = void 0;
2349
2261
  (function (TaskType) {
2350
2262
  TaskType[TaskType["IDLE"] = 0] = "IDLE";
@@ -2358,6 +2270,9 @@ exports.TaskType = void 0;
2358
2270
  TaskType[TaskType["DEPLOY"] = 8] = "DEPLOY";
2359
2271
  TaskType[TaskType["WRAP"] = 9] = "WRAP";
2360
2272
  TaskType[TaskType["UNWRAP"] = 10] = "UNWRAP";
2273
+ TaskType[TaskType["UNDEPLOY"] = 11] = "UNDEPLOY";
2274
+ TaskType[TaskType["WRAP_ENTITY"] = 12] = "WRAP_ENTITY";
2275
+ TaskType[TaskType["DEMOLISH"] = 13] = "DEMOLISH";
2361
2276
  })(exports.TaskType || (exports.TaskType = {}));
2362
2277
  exports.LocationType = void 0;
2363
2278
  (function (LocationType) {
@@ -2365,6 +2280,7 @@ exports.LocationType = void 0;
2365
2280
  LocationType[LocationType["PLANET"] = 1] = "PLANET";
2366
2281
  LocationType[LocationType["ASTEROID"] = 2] = "ASTEROID";
2367
2282
  LocationType[LocationType["NEBULA"] = 3] = "NEBULA";
2283
+ LocationType[LocationType["ICE_FIELD"] = 4] = "ICE_FIELD";
2368
2284
  })(exports.LocationType || (exports.LocationType = {}));
2369
2285
  exports.TaskCancelable = void 0;
2370
2286
  (function (TaskCancelable) {
@@ -2419,6 +2335,9 @@ const CATEGORY_LABELS = {
2419
2335
  function formatTier(tier) {
2420
2336
  return 'T' + tier;
2421
2337
  }
2338
+ function tierAdjective(tier) {
2339
+ return TIER_ADJECTIVES[tier] ?? `T${tier}`;
2340
+ }
2422
2341
 
2423
2342
  const ITEM_ORE_T1 = 101;
2424
2343
  const ITEM_ORE_T2 = 102;
@@ -2487,9 +2406,11 @@ const ITEM_LOADER_T1 = 10103;
2487
2406
  const ITEM_CRAFTER_T1 = 10104;
2488
2407
  const ITEM_STORAGE_T1 = 10105;
2489
2408
  const ITEM_HAULER_T1 = 10106;
2409
+ const ITEM_WARP_T1 = 10107;
2490
2410
  const ITEM_CONTAINER_T1_PACKED = 10200;
2491
2411
  const ITEM_SHIP_T1_PACKED = 10201;
2492
2412
  const ITEM_WAREHOUSE_T1_PACKED = 10202;
2413
+ const ITEM_EXTRACTOR_T1_PACKED = 10203;
2493
2414
  const ITEM_HULL_PLATES_T2 = 20001;
2494
2415
  const ITEM_CARGO_LINING_T2 = 20002;
2495
2416
  const ITEM_CONTAINER_T2_PACKED = 20200;
@@ -2516,6 +2437,55 @@ var items = [
2516
2437
  tier: 3,
2517
2438
  category: "ore"
2518
2439
  },
2440
+ {
2441
+ id: 104,
2442
+ mass: 71000,
2443
+ type: "resource",
2444
+ tier: 4,
2445
+ category: "ore"
2446
+ },
2447
+ {
2448
+ id: 105,
2449
+ mass: 78000,
2450
+ type: "resource",
2451
+ tier: 5,
2452
+ category: "ore"
2453
+ },
2454
+ {
2455
+ id: 106,
2456
+ mass: 87000,
2457
+ type: "resource",
2458
+ tier: 6,
2459
+ category: "ore"
2460
+ },
2461
+ {
2462
+ id: 107,
2463
+ mass: 96000,
2464
+ type: "resource",
2465
+ tier: 7,
2466
+ category: "ore"
2467
+ },
2468
+ {
2469
+ id: 108,
2470
+ mass: 107000,
2471
+ type: "resource",
2472
+ tier: 8,
2473
+ category: "ore"
2474
+ },
2475
+ {
2476
+ id: 109,
2477
+ mass: 118000,
2478
+ type: "resource",
2479
+ tier: 9,
2480
+ category: "ore"
2481
+ },
2482
+ {
2483
+ id: 110,
2484
+ mass: 130000,
2485
+ type: "resource",
2486
+ tier: 10,
2487
+ category: "ore"
2488
+ },
2519
2489
  {
2520
2490
  id: 201,
2521
2491
  mass: 35000,
@@ -2537,6 +2507,55 @@ var items = [
2537
2507
  tier: 3,
2538
2508
  category: "crystal"
2539
2509
  },
2510
+ {
2511
+ id: 204,
2512
+ mass: 35000,
2513
+ type: "resource",
2514
+ tier: 4,
2515
+ category: "crystal"
2516
+ },
2517
+ {
2518
+ id: 205,
2519
+ mass: 35000,
2520
+ type: "resource",
2521
+ tier: 5,
2522
+ category: "crystal"
2523
+ },
2524
+ {
2525
+ id: 206,
2526
+ mass: 35000,
2527
+ type: "resource",
2528
+ tier: 6,
2529
+ category: "crystal"
2530
+ },
2531
+ {
2532
+ id: 207,
2533
+ mass: 35000,
2534
+ type: "resource",
2535
+ tier: 7,
2536
+ category: "crystal"
2537
+ },
2538
+ {
2539
+ id: 208,
2540
+ mass: 35000,
2541
+ type: "resource",
2542
+ tier: 8,
2543
+ category: "crystal"
2544
+ },
2545
+ {
2546
+ id: 209,
2547
+ mass: 35000,
2548
+ type: "resource",
2549
+ tier: 9,
2550
+ category: "crystal"
2551
+ },
2552
+ {
2553
+ id: 210,
2554
+ mass: 35000,
2555
+ type: "resource",
2556
+ tier: 10,
2557
+ category: "crystal"
2558
+ },
2540
2559
  {
2541
2560
  id: 301,
2542
2561
  mass: 15000,
@@ -2558,6 +2577,55 @@ var items = [
2558
2577
  tier: 3,
2559
2578
  category: "gas"
2560
2579
  },
2580
+ {
2581
+ id: 304,
2582
+ mass: 11000,
2583
+ type: "resource",
2584
+ tier: 4,
2585
+ category: "gas"
2586
+ },
2587
+ {
2588
+ id: 305,
2589
+ mass: 10000,
2590
+ type: "resource",
2591
+ tier: 5,
2592
+ category: "gas"
2593
+ },
2594
+ {
2595
+ id: 306,
2596
+ mass: 9000,
2597
+ type: "resource",
2598
+ tier: 6,
2599
+ category: "gas"
2600
+ },
2601
+ {
2602
+ id: 307,
2603
+ mass: 8000,
2604
+ type: "resource",
2605
+ tier: 7,
2606
+ category: "gas"
2607
+ },
2608
+ {
2609
+ id: 308,
2610
+ mass: 7500,
2611
+ type: "resource",
2612
+ tier: 8,
2613
+ category: "gas"
2614
+ },
2615
+ {
2616
+ id: 309,
2617
+ mass: 6500,
2618
+ type: "resource",
2619
+ tier: 9,
2620
+ category: "gas"
2621
+ },
2622
+ {
2623
+ id: 310,
2624
+ mass: 6000,
2625
+ type: "resource",
2626
+ tier: 10,
2627
+ category: "gas"
2628
+ },
2561
2629
  {
2562
2630
  id: 401,
2563
2631
  mass: 22000,
@@ -2579,6 +2647,55 @@ var items = [
2579
2647
  tier: 3,
2580
2648
  category: "regolith"
2581
2649
  },
2650
+ {
2651
+ id: 404,
2652
+ mass: 32000,
2653
+ type: "resource",
2654
+ tier: 4,
2655
+ category: "regolith"
2656
+ },
2657
+ {
2658
+ id: 405,
2659
+ mass: 36000,
2660
+ type: "resource",
2661
+ tier: 5,
2662
+ category: "regolith"
2663
+ },
2664
+ {
2665
+ id: 406,
2666
+ mass: 40500,
2667
+ type: "resource",
2668
+ tier: 6,
2669
+ category: "regolith"
2670
+ },
2671
+ {
2672
+ id: 407,
2673
+ mass: 46000,
2674
+ type: "resource",
2675
+ tier: 7,
2676
+ category: "regolith"
2677
+ },
2678
+ {
2679
+ id: 408,
2680
+ mass: 52000,
2681
+ type: "resource",
2682
+ tier: 8,
2683
+ category: "regolith"
2684
+ },
2685
+ {
2686
+ id: 409,
2687
+ mass: 58500,
2688
+ type: "resource",
2689
+ tier: 9,
2690
+ category: "regolith"
2691
+ },
2692
+ {
2693
+ id: 410,
2694
+ mass: 66000,
2695
+ type: "resource",
2696
+ tier: 10,
2697
+ category: "regolith"
2698
+ },
2582
2699
  {
2583
2700
  id: 501,
2584
2701
  mass: 42000,
@@ -2601,10 +2718,59 @@ var items = [
2601
2718
  category: "biomass"
2602
2719
  },
2603
2720
  {
2604
- id: 10001,
2605
- mass: 50000,
2606
- type: "component",
2607
- tier: 1
2721
+ id: 504,
2722
+ mass: 29000,
2723
+ type: "resource",
2724
+ tier: 4,
2725
+ category: "biomass"
2726
+ },
2727
+ {
2728
+ id: 505,
2729
+ mass: 26000,
2730
+ type: "resource",
2731
+ tier: 5,
2732
+ category: "biomass"
2733
+ },
2734
+ {
2735
+ id: 506,
2736
+ mass: 23000,
2737
+ type: "resource",
2738
+ tier: 6,
2739
+ category: "biomass"
2740
+ },
2741
+ {
2742
+ id: 507,
2743
+ mass: 20000,
2744
+ type: "resource",
2745
+ tier: 7,
2746
+ category: "biomass"
2747
+ },
2748
+ {
2749
+ id: 508,
2750
+ mass: 18000,
2751
+ type: "resource",
2752
+ tier: 8,
2753
+ category: "biomass"
2754
+ },
2755
+ {
2756
+ id: 509,
2757
+ mass: 16000,
2758
+ type: "resource",
2759
+ tier: 9,
2760
+ category: "biomass"
2761
+ },
2762
+ {
2763
+ id: 510,
2764
+ mass: 14000,
2765
+ type: "resource",
2766
+ tier: 10,
2767
+ category: "biomass"
2768
+ },
2769
+ {
2770
+ id: 10001,
2771
+ mass: 50000,
2772
+ type: "component",
2773
+ tier: 1
2608
2774
  },
2609
2775
  {
2610
2776
  id: 10002,
@@ -2709,6 +2875,13 @@ var items = [
2709
2875
  tier: 1,
2710
2876
  subtype: "hauler"
2711
2877
  },
2878
+ {
2879
+ id: 10107,
2880
+ mass: 180000,
2881
+ type: "module",
2882
+ tier: 1,
2883
+ subtype: "warp"
2884
+ },
2712
2885
  {
2713
2886
  id: 10200,
2714
2887
  mass: 80000,
@@ -2727,6 +2900,12 @@ var items = [
2727
2900
  type: "entity",
2728
2901
  tier: 1
2729
2902
  },
2903
+ {
2904
+ id: 10203,
2905
+ mass: 800000,
2906
+ type: "entity",
2907
+ tier: 1
2908
+ },
2730
2909
  {
2731
2910
  id: 20001,
2732
2911
  mass: 50000,
@@ -3155,10 +3334,6 @@ var recipes = [
3155
3334
  },
3156
3335
  {
3157
3336
  sources: [
3158
- {
3159
- inputIndex: 1,
3160
- statIndex: 1
3161
- }
3162
3337
  ]
3163
3338
  },
3164
3339
  {
@@ -3198,8 +3373,8 @@ var recipes = [
3198
3373
  {
3199
3374
  sources: [
3200
3375
  {
3201
- inputIndex: 0,
3202
- statIndex: 0
3376
+ inputIndex: 1,
3377
+ statIndex: 1
3203
3378
  }
3204
3379
  ]
3205
3380
  },
@@ -3317,7 +3492,7 @@ var recipes = [
3317
3492
  sources: [
3318
3493
  {
3319
3494
  inputIndex: 0,
3320
- statIndex: 0
3495
+ statIndex: 1
3321
3496
  }
3322
3497
  ]
3323
3498
  },
@@ -3333,12 +3508,38 @@ var recipes = [
3333
3508
  sources: [
3334
3509
  {
3335
3510
  inputIndex: 0,
3336
- statIndex: 1
3511
+ statIndex: 0
3337
3512
  }
3338
3513
  ]
3339
3514
  },
3515
+ {
3516
+ sources: [
3517
+ ]
3518
+ }
3519
+ ],
3520
+ blendWeights: [
3521
+ ]
3522
+ },
3523
+ {
3524
+ outputItemId: 10107,
3525
+ outputMass: 180000,
3526
+ inputs: [
3527
+ {
3528
+ itemId: 10010,
3529
+ quantity: 6
3530
+ },
3531
+ {
3532
+ itemId: 10009,
3533
+ quantity: 4
3534
+ }
3535
+ ],
3536
+ statSlots: [
3340
3537
  {
3341
3538
  sources: [
3539
+ {
3540
+ inputIndex: 0,
3541
+ statIndex: 1
3542
+ },
3342
3543
  {
3343
3544
  inputIndex: 1,
3344
3545
  statIndex: 1
@@ -3347,6 +3548,8 @@ var recipes = [
3347
3548
  }
3348
3549
  ],
3349
3550
  blendWeights: [
3551
+ 1,
3552
+ 1
3350
3553
  ]
3351
3554
  },
3352
3555
  {
@@ -3499,6 +3702,56 @@ var recipes = [
3499
3702
  blendWeights: [
3500
3703
  ]
3501
3704
  },
3705
+ {
3706
+ outputItemId: 10203,
3707
+ outputMass: 800000,
3708
+ inputs: [
3709
+ {
3710
+ itemId: 10001,
3711
+ quantity: 15
3712
+ },
3713
+ {
3714
+ itemId: 10002,
3715
+ quantity: 8
3716
+ }
3717
+ ],
3718
+ statSlots: [
3719
+ {
3720
+ sources: [
3721
+ {
3722
+ inputIndex: 0,
3723
+ statIndex: 0
3724
+ }
3725
+ ]
3726
+ },
3727
+ {
3728
+ sources: [
3729
+ {
3730
+ inputIndex: 0,
3731
+ statIndex: 1
3732
+ }
3733
+ ]
3734
+ },
3735
+ {
3736
+ sources: [
3737
+ {
3738
+ inputIndex: 1,
3739
+ statIndex: 0
3740
+ }
3741
+ ]
3742
+ },
3743
+ {
3744
+ sources: [
3745
+ {
3746
+ inputIndex: 1,
3747
+ statIndex: 1
3748
+ }
3749
+ ]
3750
+ }
3751
+ ],
3752
+ blendWeights: [
3753
+ ]
3754
+ },
3502
3755
  {
3503
3756
  outputItemId: 20001,
3504
3757
  outputMass: 50000,
@@ -3657,19 +3910,24 @@ var entities = [
3657
3910
  entityItemId: 10201,
3658
3911
  slots: [
3659
3912
  {
3660
- type: "any"
3913
+ type: "any",
3914
+ outputPct: 100
3661
3915
  },
3662
3916
  {
3663
- type: "any"
3917
+ type: "any",
3918
+ outputPct: 100
3664
3919
  },
3665
3920
  {
3666
- type: "any"
3921
+ type: "any",
3922
+ outputPct: 100
3667
3923
  },
3668
3924
  {
3669
- type: "any"
3925
+ type: "any",
3926
+ outputPct: 100
3670
3927
  },
3671
3928
  {
3672
- type: "any"
3929
+ type: "any",
3930
+ outputPct: 100
3673
3931
  }
3674
3932
  ]
3675
3933
  },
@@ -3677,19 +3935,37 @@ var entities = [
3677
3935
  entityItemId: 10202,
3678
3936
  slots: [
3679
3937
  {
3680
- type: "loader"
3938
+ type: "loader",
3939
+ outputPct: 100
3940
+ },
3941
+ {
3942
+ type: "storage",
3943
+ outputPct: 100
3681
3944
  },
3682
3945
  {
3683
- type: "storage"
3946
+ type: "storage",
3947
+ outputPct: 100
3684
3948
  },
3685
3949
  {
3686
- type: "storage"
3950
+ type: "storage",
3951
+ outputPct: 100
3687
3952
  },
3688
3953
  {
3689
- type: "storage"
3954
+ type: "storage",
3955
+ outputPct: 100
3956
+ }
3957
+ ]
3958
+ },
3959
+ {
3960
+ entityItemId: 10203,
3961
+ slots: [
3962
+ {
3963
+ type: "generator",
3964
+ outputPct: 100
3690
3965
  },
3691
3966
  {
3692
- type: "storage"
3967
+ type: "gatherer",
3968
+ outputPct: 100
3693
3969
  }
3694
3970
  ]
3695
3971
  },
@@ -3700,78 +3976,6 @@ var entities = [
3700
3976
  }
3701
3977
  ];
3702
3978
 
3703
- const categoryColors = {
3704
- ore: '#C26D3F',
3705
- crystal: '#4ADBFF',
3706
- gas: '#B8E4A0',
3707
- regolith: '#C4A57B',
3708
- biomass: '#5A8B3E',
3709
- };
3710
- const tierColors = {
3711
- 1: '#8b8b8b',
3712
- 2: '#4ade80',
3713
- 3: '#818cf8',
3714
- 4: '#c084fc',
3715
- 5: '#fbbf24',
3716
- 6: '#f97316',
3717
- 7: '#ef4444',
3718
- 8: '#ec4899',
3719
- 9: '#06b6d4',
3720
- 10: '#ffffff',
3721
- };
3722
- const tierLabels = {
3723
- 1: 'Common',
3724
- 2: 'Uncommon',
3725
- 3: 'Rare',
3726
- 4: 'Epic',
3727
- 5: 'Legendary',
3728
- 6: 'Mythic',
3729
- 7: 'Divine',
3730
- 8: 'Celestial',
3731
- 9: 'Eternal',
3732
- 10: 'Transcendent',
3733
- };
3734
- const categoryIcons = {
3735
- ore: '⬡',
3736
- crystal: '◈',
3737
- gas: '◎',
3738
- regolith: '■',
3739
- biomass: '❋',
3740
- };
3741
- const categoryIconShapes = {
3742
- ore: 'hex',
3743
- crystal: 'diamond',
3744
- gas: 'circle',
3745
- regolith: 'square',
3746
- biomass: 'star',
3747
- };
3748
- const componentIcon = '▣';
3749
- const moduleIcon = '⬢';
3750
- const itemAbbreviations = {
3751
- 10001: 'HP',
3752
- 10002: 'CL',
3753
- 10003: 'TC',
3754
- 10004: 'PC',
3755
- 10005: 'DS',
3756
- 10006: 'EP',
3757
- 10007: 'CA',
3758
- 10008: 'TB',
3759
- 10009: 'RC',
3760
- 10010: 'FA',
3761
- 10100: 'EN',
3762
- 10101: 'GN',
3763
- 10102: 'EX',
3764
- 10103: 'LD',
3765
- 10104: 'MF',
3766
- 10105: 'ST',
3767
- 10200: 'CT',
3768
- 10201: 'SH',
3769
- 10202: 'WH',
3770
- 20001: 'HP',
3771
- 20002: 'CL',
3772
- 20200: 'CT',
3773
- };
3774
-
3775
3979
  const itemMetadata = {
3776
3980
  101: { name: 'Ore', description: 'Crude metallic ore.', color: '#C26D3F' },
3777
3981
  102: { name: 'Ore', description: 'Refined metallic ore with improved purity.', color: '#C26D3F' },
@@ -3780,6 +3984,13 @@ const itemMetadata = {
3780
3984
  description: 'High-grade metallic ore with exceptional density.',
3781
3985
  color: '#C26D3F',
3782
3986
  },
3987
+ 104: { name: 'Ore', description: '', color: '#C26D3F' },
3988
+ 105: { name: 'Ore', description: '', color: '#C26D3F' },
3989
+ 106: { name: 'Ore', description: '', color: '#C26D3F' },
3990
+ 107: { name: 'Ore', description: '', color: '#C26D3F' },
3991
+ 108: { name: 'Ore', description: '', color: '#C26D3F' },
3992
+ 109: { name: 'Ore', description: '', color: '#C26D3F' },
3993
+ 110: { name: 'Ore', description: '', color: '#C26D3F' },
3783
3994
  201: { name: 'Crystal', description: 'Raw resonant crystal.', color: '#4ADBFF' },
3784
3995
  202: {
3785
3996
  name: 'Crystal',
@@ -3791,6 +4002,13 @@ const itemMetadata = {
3791
4002
  description: 'High-grade resonant crystal with exceptional purity.',
3792
4003
  color: '#4ADBFF',
3793
4004
  },
4005
+ 204: { name: 'Crystal', description: '', color: '#4ADBFF' },
4006
+ 205: { name: 'Crystal', description: '', color: '#4ADBFF' },
4007
+ 206: { name: 'Crystal', description: '', color: '#4ADBFF' },
4008
+ 207: { name: 'Crystal', description: '', color: '#4ADBFF' },
4009
+ 208: { name: 'Crystal', description: '', color: '#4ADBFF' },
4010
+ 209: { name: 'Crystal', description: '', color: '#4ADBFF' },
4011
+ 210: { name: 'Crystal', description: '', color: '#4ADBFF' },
3794
4012
  301: { name: 'Gas', description: 'Raw volatile gas.', color: '#B8E4A0' },
3795
4013
  302: {
3796
4014
  name: 'Gas',
@@ -3802,6 +4020,13 @@ const itemMetadata = {
3802
4020
  description: 'High-grade volatile gas with exceptional energy density.',
3803
4021
  color: '#B8E4A0',
3804
4022
  },
4023
+ 304: { name: 'Gas', description: '', color: '#B8E4A0' },
4024
+ 305: { name: 'Gas', description: '', color: '#B8E4A0' },
4025
+ 306: { name: 'Gas', description: '', color: '#B8E4A0' },
4026
+ 307: { name: 'Gas', description: '', color: '#B8E4A0' },
4027
+ 308: { name: 'Gas', description: '', color: '#B8E4A0' },
4028
+ 309: { name: 'Gas', description: '', color: '#B8E4A0' },
4029
+ 310: { name: 'Gas', description: '', color: '#B8E4A0' },
3805
4030
  401: { name: 'Regolith', description: 'Crude regolith dust.', color: '#C4A57B' },
3806
4031
  402: {
3807
4032
  name: 'Regolith',
@@ -3813,6 +4038,13 @@ const itemMetadata = {
3813
4038
  description: 'High-grade regolith with exceptional uniformity.',
3814
4039
  color: '#C4A57B',
3815
4040
  },
4041
+ 404: { name: 'Regolith', description: '', color: '#C4A57B' },
4042
+ 405: { name: 'Regolith', description: '', color: '#C4A57B' },
4043
+ 406: { name: 'Regolith', description: '', color: '#C4A57B' },
4044
+ 407: { name: 'Regolith', description: '', color: '#C4A57B' },
4045
+ 408: { name: 'Regolith', description: '', color: '#C4A57B' },
4046
+ 409: { name: 'Regolith', description: '', color: '#C4A57B' },
4047
+ 410: { name: 'Regolith', description: '', color: '#C4A57B' },
3816
4048
  501: { name: 'Biomass', description: 'Crude organic biomass.', color: '#5A8B3E' },
3817
4049
  502: {
3818
4050
  name: 'Biomass',
@@ -3824,6 +4056,13 @@ const itemMetadata = {
3824
4056
  description: 'High-grade biomass with exceptional saturation.',
3825
4057
  color: '#5A8B3E',
3826
4058
  },
4059
+ 504: { name: 'Biomass', description: '', color: '#5A8B3E' },
4060
+ 505: { name: 'Biomass', description: '', color: '#5A8B3E' },
4061
+ 506: { name: 'Biomass', description: '', color: '#5A8B3E' },
4062
+ 507: { name: 'Biomass', description: '', color: '#5A8B3E' },
4063
+ 508: { name: 'Biomass', description: '', color: '#5A8B3E' },
4064
+ 509: { name: 'Biomass', description: '', color: '#5A8B3E' },
4065
+ 510: { name: 'Biomass', description: '', color: '#5A8B3E' },
3827
4066
  10001: {
3828
4067
  name: 'Hull Plates',
3829
4068
  description: 'Structural plating formed from ore. Used in hulls, containers, and frames.',
@@ -3909,6 +4148,11 @@ const itemMetadata = {
3909
4148
  description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
3910
4149
  color: '#4ADBFF',
3911
4150
  },
4151
+ 10107: {
4152
+ name: 'Warp',
4153
+ description: 'Folds local space-time around the hull, projecting the ship across vast distances in a single discharge of the entire energy reserve.',
4154
+ color: '#9be4ff',
4155
+ },
3912
4156
  10200: {
3913
4157
  name: 'Container',
3914
4158
  description: 'Passive floating cargo storage in space. Towed by ships.',
@@ -3924,6 +4168,11 @@ const itemMetadata = {
3924
4168
  description: 'Massive stationary storage facility with a single loader module slot.',
3925
4169
  color: '#EAB308',
3926
4170
  },
4171
+ 10203: {
4172
+ name: 'Extractor',
4173
+ description: 'Planetary resource extraction facility with generator and gatherer module slots.',
4174
+ color: '#D4726F',
4175
+ },
3927
4176
  20001: {
3928
4177
  name: 'Hull Plates',
3929
4178
  description: 'Advanced structural plating reinforced with tier 2 ore.',
@@ -3943,6 +4192,7 @@ const itemMetadata = {
3943
4192
  const entityMetadata = {
3944
4193
  10201: { moduleSlotLabels: ['Engine', 'Generator', 'Gatherer', 'Loader', 'Storage'] },
3945
4194
  10202: { moduleSlotLabels: ['Loader', 'Storage', 'Storage', 'Storage', 'Storage'] },
4195
+ 10203: { moduleSlotLabels: ['Generator', 'Gatherer'] },
3946
4196
  };
3947
4197
  for (const item of items) {
3948
4198
  if (!itemMetadata[item.id]) {
@@ -4048,9 +4298,6 @@ function typeLabel(type) {
4048
4298
  function categoryLabel(cat) {
4049
4299
  return CATEGORY_LABELS[cat];
4050
4300
  }
4051
- function tierLabel(tier) {
4052
- return tierLabels[tier] ?? `T${tier}`;
4053
- }
4054
4301
  const CATEGORY_BY_INDEX = ['ore', 'gas', 'regolith', 'biomass', 'crystal'];
4055
4302
  function categoryFromIndex(i) {
4056
4303
  return CATEGORY_BY_INDEX[i];
@@ -4113,10 +4360,15 @@ function hash512(seed, string) {
4113
4360
  }
4114
4361
 
4115
4362
  const DEPTH_THRESHOLD_T1 = 0;
4116
- const DEPTH_THRESHOLD_T2 = 2000;
4117
- const DEPTH_THRESHOLD_T3 = 10000;
4118
- const DEPTH_THRESHOLD_T4 = 30000;
4119
- const DEPTH_THRESHOLD_T5 = 55000;
4363
+ const DEPTH_THRESHOLD_T2 = 1500;
4364
+ const DEPTH_THRESHOLD_T3 = 5000;
4365
+ const DEPTH_THRESHOLD_T4 = 12000;
4366
+ const DEPTH_THRESHOLD_T5 = 22000;
4367
+ const DEPTH_THRESHOLD_T6 = 32000;
4368
+ const DEPTH_THRESHOLD_T7 = 42000;
4369
+ const DEPTH_THRESHOLD_T8 = 50000;
4370
+ const DEPTH_THRESHOLD_T9 = 57000;
4371
+ const DEPTH_THRESHOLD_T10 = 63000;
4120
4372
  const LOCATION_MIN_DEPTH = 500;
4121
4373
  const LOCATION_MAX_DEPTH = 65535;
4122
4374
  const YIELD_THRESHOLD = Math.floor(0.001 * 0xffffffff);
@@ -4126,19 +4378,22 @@ const PLANET_SUBTYPE_TERRESTRIAL = 2;
4126
4378
  const PLANET_SUBTYPE_ICY = 3;
4127
4379
  const PLANET_SUBTYPE_OCEAN = 4;
4128
4380
  const PLANET_SUBTYPE_INDUSTRIAL = 5;
4381
+ const DEPTH_THRESHOLD_TABLE = [
4382
+ DEPTH_THRESHOLD_T1,
4383
+ DEPTH_THRESHOLD_T2,
4384
+ DEPTH_THRESHOLD_T3,
4385
+ DEPTH_THRESHOLD_T4,
4386
+ DEPTH_THRESHOLD_T5,
4387
+ DEPTH_THRESHOLD_T6,
4388
+ DEPTH_THRESHOLD_T7,
4389
+ DEPTH_THRESHOLD_T8,
4390
+ DEPTH_THRESHOLD_T9,
4391
+ DEPTH_THRESHOLD_T10,
4392
+ ];
4129
4393
  function getDepthThreshold(tier) {
4130
- switch (tier) {
4131
- case 1:
4132
- return DEPTH_THRESHOLD_T1;
4133
- case 2:
4134
- return DEPTH_THRESHOLD_T2;
4135
- case 3:
4136
- return DEPTH_THRESHOLD_T3;
4137
- case 4:
4138
- return DEPTH_THRESHOLD_T4;
4139
- default:
4140
- return DEPTH_THRESHOLD_T5;
4141
- }
4394
+ if (tier < 1 || tier > 10)
4395
+ return 65535;
4396
+ return DEPTH_THRESHOLD_TABLE[tier - 1];
4142
4397
  }
4143
4398
  function getResourceTier(itemId) {
4144
4399
  return getItem(itemId).tier;
@@ -4151,11 +4406,11 @@ function getResourceWeight(itemId, stratum) {
4151
4406
  const depthAbove = stratum - threshold;
4152
4407
  switch (tier) {
4153
4408
  case 1:
4154
- if (stratum < 2000)
4409
+ if (stratum < DEPTH_THRESHOLD_T2)
4155
4410
  return 100;
4156
- if (stratum < 10000)
4411
+ if (stratum < DEPTH_THRESHOLD_T3)
4157
4412
  return 80;
4158
- if (stratum < 30000)
4413
+ if (stratum < DEPTH_THRESHOLD_T4)
4159
4414
  return 50;
4160
4415
  return 30;
4161
4416
  case 2:
@@ -4180,37 +4435,97 @@ function getResourceWeight(itemId, stratum) {
4180
4435
  return 10;
4181
4436
  }
4182
4437
  }
4183
- const ASTEROID_RESOURCES = [101, 102, 103, 201, 202];
4184
- const NEBULA_RESOURCES = [202, 203, 301, 302, 303];
4185
- const GAS_GIANT_RESOURCES = [301, 302, 303, 401, 501];
4186
- const ROCKY_RESOURCES = [101, 102, 103, 401, 402, 403, 503];
4187
- const TERRESTRIAL_RESOURCES = [201, 202, 401, 402, 501, 502, 503];
4188
- const ICY_RESOURCES = [101, 301, 302, 401, 403, 501, 502];
4189
- const OCEAN_RESOURCES = [201, 203, 301, 303, 501, 502, 503];
4190
- const INDUSTRIAL_RESOURCES = [101, 102, 103, 201, 203, 402, 403];
4191
- function getLocationCandidates(locationType, subtype) {
4192
- if (locationType === 2)
4193
- return ASTEROID_RESOURCES;
4194
- if (locationType === 3)
4195
- return NEBULA_RESOURCES;
4196
- if (locationType === 1) {
4438
+ const RESOURCE_ORE = 0;
4439
+ const RESOURCE_GAS = 1;
4440
+ const RESOURCE_REGOLITH = 2;
4441
+ const RESOURCE_BIOMASS = 3;
4442
+ const RESOURCE_CRYSTAL = 4;
4443
+ function categoryBaseId(category) {
4444
+ switch (category) {
4445
+ case RESOURCE_ORE:
4446
+ return 100;
4447
+ case RESOURCE_CRYSTAL:
4448
+ return 200;
4449
+ case RESOURCE_GAS:
4450
+ return 300;
4451
+ case RESOURCE_REGOLITH:
4452
+ return 400;
4453
+ case RESOURCE_BIOMASS:
4454
+ return 500;
4455
+ default:
4456
+ return 0;
4457
+ }
4458
+ }
4459
+ function resourceId(category, tier) {
4460
+ return categoryBaseId(category) + tier;
4461
+ }
4462
+ function getLocationProfile(locationType, subtype) {
4463
+ if (locationType === exports.LocationType.ASTEROID) {
4464
+ return [
4465
+ { category: RESOURCE_ORE, maxTier: 5 },
4466
+ { category: RESOURCE_CRYSTAL, maxTier: 5 },
4467
+ ];
4468
+ }
4469
+ if (locationType === exports.LocationType.NEBULA) {
4470
+ return [
4471
+ { category: RESOURCE_GAS, maxTier: 5 },
4472
+ { category: RESOURCE_REGOLITH, maxTier: 5 },
4473
+ ];
4474
+ }
4475
+ if (locationType === exports.LocationType.ICE_FIELD) {
4476
+ return [
4477
+ { category: RESOURCE_GAS, maxTier: 5 },
4478
+ { category: RESOURCE_BIOMASS, maxTier: 5 },
4479
+ ];
4480
+ }
4481
+ if (locationType === exports.LocationType.PLANET) {
4197
4482
  switch (subtype) {
4198
4483
  case PLANET_SUBTYPE_GAS_GIANT:
4199
- return GAS_GIANT_RESOURCES;
4484
+ return [
4485
+ { category: RESOURCE_GAS, maxTier: 10 },
4486
+ { category: RESOURCE_CRYSTAL, maxTier: 3 },
4487
+ ];
4200
4488
  case PLANET_SUBTYPE_ROCKY:
4201
- return ROCKY_RESOURCES;
4489
+ return [
4490
+ { category: RESOURCE_REGOLITH, maxTier: 10 },
4491
+ { category: RESOURCE_ORE, maxTier: 3 },
4492
+ ];
4202
4493
  case PLANET_SUBTYPE_TERRESTRIAL:
4203
- return TERRESTRIAL_RESOURCES;
4494
+ return [
4495
+ { category: RESOURCE_ORE, maxTier: 10 },
4496
+ { category: RESOURCE_BIOMASS, maxTier: 3 },
4497
+ ];
4204
4498
  case PLANET_SUBTYPE_ICY:
4205
- return ICY_RESOURCES;
4499
+ return [
4500
+ { category: RESOURCE_CRYSTAL, maxTier: 10 },
4501
+ { category: RESOURCE_REGOLITH, maxTier: 3 },
4502
+ ];
4206
4503
  case PLANET_SUBTYPE_OCEAN:
4207
- return OCEAN_RESOURCES;
4504
+ return [
4505
+ { category: RESOURCE_BIOMASS, maxTier: 10 },
4506
+ { category: RESOURCE_GAS, maxTier: 3 },
4507
+ ];
4208
4508
  case PLANET_SUBTYPE_INDUSTRIAL:
4209
- return INDUSTRIAL_RESOURCES;
4509
+ return [
4510
+ { category: RESOURCE_ORE, maxTier: 3 },
4511
+ { category: RESOURCE_CRYSTAL, maxTier: 3 },
4512
+ { category: RESOURCE_REGOLITH, maxTier: 3 },
4513
+ { category: RESOURCE_BIOMASS, maxTier: 3 },
4514
+ ];
4210
4515
  }
4211
4516
  }
4212
4517
  return [];
4213
4518
  }
4519
+ function getLocationCandidates(locationType, subtype) {
4520
+ const profile = getLocationProfile(locationType, subtype);
4521
+ const ids = [];
4522
+ for (const { category, maxTier } of profile) {
4523
+ for (let tier = 1; tier <= maxTier; tier++) {
4524
+ ids.push(resourceId(category, tier));
4525
+ }
4526
+ }
4527
+ return ids;
4528
+ }
4214
4529
  function getEligibleResources(locationType, subtype, stratum) {
4215
4530
  const candidates = getLocationCandidates(locationType, subtype);
4216
4531
  return candidates.filter((itemId) => {
@@ -6386,7 +6701,6 @@ var nebulaNouns = [
6386
6701
  ];
6387
6702
 
6388
6703
  const LOCATION_EXISTS_THRESHOLD = 0x10;
6389
- const LOCATION_ACTIVE_THRESHOLD = 0x80;
6390
6704
  function getLocationType(gameSeed, coordinates) {
6391
6705
  const seed = antelope.Checksum256.from(gameSeed);
6392
6706
  const str = ['system', coordinates.x, coordinates.y].join('-');
@@ -6394,13 +6708,13 @@ function getLocationType(gameSeed, coordinates) {
6394
6708
  if (hashResult.array[0] >= LOCATION_EXISTS_THRESHOLD) {
6395
6709
  return exports.LocationType.EMPTY;
6396
6710
  }
6397
- if (hashResult.array[1] < 96) {
6711
+ if (hashResult.array[1] < 96)
6398
6712
  return exports.LocationType.PLANET;
6399
- }
6400
- else if (hashResult.array[1] < 176) {
6713
+ if (hashResult.array[1] < 149)
6401
6714
  return exports.LocationType.ASTEROID;
6402
- }
6403
- return exports.LocationType.NEBULA;
6715
+ if (hashResult.array[1] < 202)
6716
+ return exports.LocationType.NEBULA;
6717
+ return exports.LocationType.ICE_FIELD;
6404
6718
  }
6405
6719
  function isGatherableLocation(locationType) {
6406
6720
  return locationType !== exports.LocationType.EMPTY;
@@ -6415,6 +6729,8 @@ function getLocationTypeName(type) {
6415
6729
  return 'Asteroid';
6416
6730
  case exports.LocationType.NEBULA:
6417
6731
  return 'Nebula';
6732
+ case exports.LocationType.ICE_FIELD:
6733
+ return 'Ice Field';
6418
6734
  }
6419
6735
  }
6420
6736
  function uint16(hash, offset) {
@@ -6442,6 +6758,14 @@ function generateNebulaName(hashResult) {
6442
6758
  const nounIdx = uint16(hashResult, 2) % nebulaNouns.length;
6443
6759
  return `${nebulaAdjectives[adjIdx]} ${nebulaNouns[nounIdx]}`;
6444
6760
  }
6761
+ function generateIceFieldName(hashResult) {
6762
+ const A = 65;
6763
+ const letter1 = String.fromCharCode(A + (hashResult.array[0] % 26));
6764
+ const letter2 = String.fromCharCode(A + (hashResult.array[1] % 26));
6765
+ const subId = (hashResult.array[2] % 9) + 1;
6766
+ const num = (uint16(hashResult, 3) % 9000) + 1000;
6767
+ return `${letter1}${letter2}-${subId}/${num}`;
6768
+ }
6445
6769
  function getSystemName(gameSeed, location) {
6446
6770
  const seed = antelope.Checksum256.from(gameSeed);
6447
6771
  const locationType = getLocationType(seed, location);
@@ -6457,6 +6781,8 @@ function getSystemName(gameSeed, location) {
6457
6781
  return generateAsteroidName(hashResult);
6458
6782
  case exports.LocationType.NEBULA:
6459
6783
  return generateNebulaName(hashResult);
6784
+ case exports.LocationType.ICE_FIELD:
6785
+ return generateIceFieldName(hashResult);
6460
6786
  default:
6461
6787
  return generatePlanetName(hashResult);
6462
6788
  }
@@ -6482,33 +6808,27 @@ function deriveLocationStatic(gameSeed, coordinates) {
6482
6808
  if (hashResult.array[1] < 96) {
6483
6809
  loc.type = antelope.UInt8.from(exports.LocationType.PLANET);
6484
6810
  }
6485
- else if (hashResult.array[1] < 176) {
6811
+ else if (hashResult.array[1] < 149) {
6486
6812
  loc.type = antelope.UInt8.from(exports.LocationType.ASTEROID);
6487
6813
  }
6488
- else {
6814
+ else if (hashResult.array[1] < 202) {
6489
6815
  loc.type = antelope.UInt8.from(exports.LocationType.NEBULA);
6490
6816
  }
6817
+ else {
6818
+ loc.type = antelope.UInt8.from(exports.LocationType.ICE_FIELD);
6819
+ }
6491
6820
  loc.subtype = antelope.UInt8.from(Number(loc.type) === exports.LocationType.PLANET ? hashResult.array[2] % 6 : hashResult.array[2]);
6492
6821
  loc.seed0 = antelope.UInt8.from(hashResult.array[3]);
6493
6822
  loc.seed1 = antelope.UInt8.from(hashResult.array[4]);
6494
6823
  return loc;
6495
6824
  }
6496
- function deriveLocationEpoch(epochSeed, coordinates) {
6497
- const seed = antelope.Checksum256.from(epochSeed);
6498
- const coords = Coordinates.from(coordinates);
6499
- const str = `system-epoch-${coords.x}-${coords.y}`;
6500
- const hashResult = hash512(seed, str);
6501
- return exports.ServerTypes.location_epoch.from({
6502
- active: hashResult.array[0] < LOCATION_ACTIVE_THRESHOLD,
6503
- seed0: hashResult.array[1],
6504
- seed1: hashResult.array[2],
6505
- });
6825
+ function isLocationBuildable(gameSeed, coordinates) {
6826
+ return getLocationType(gameSeed, coordinates) === exports.LocationType.PLANET;
6506
6827
  }
6507
- function deriveLocation(gameSeed, epochSeed, coordinates) {
6828
+ function deriveLocation(gameSeed, coordinates) {
6508
6829
  const staticProps = deriveLocationStatic(gameSeed, coordinates);
6509
6830
  return exports.ServerTypes.location_derived.from({
6510
6831
  static_props: staticProps,
6511
- epoch_props: deriveLocationEpoch(epochSeed, coordinates),
6512
6832
  size: deriveLocationSize(staticProps),
6513
6833
  });
6514
6834
  }
@@ -6535,9 +6855,6 @@ class GameState extends exports.ServerTypes.state_row {
6535
6855
  get isEnabled() {
6536
6856
  return this.enabled;
6537
6857
  }
6538
- get shipCount() {
6539
- return Number(this.ships);
6540
- }
6541
6858
  get currentSalt() {
6542
6859
  return this.salt;
6543
6860
  }
@@ -6578,7 +6895,6 @@ class GameState extends exports.ServerTypes.state_row {
6578
6895
  return {
6579
6896
  enabled: this.enabled,
6580
6897
  epoch: this.epoch.toString(),
6581
- ships: this.shipCount,
6582
6898
  hasSeed: !this.seed.equals(antelope.Checksum256.from('0'.repeat(64))),
6583
6899
  hasCommit: !this.commit.equals(antelope.Checksum256.from('0'.repeat(64))),
6584
6900
  };
@@ -6630,6 +6946,40 @@ function lerp$1(origin, destination, time) {
6630
6946
  y: (1 - time) * Number(origin.y) + time * Number(destination.y),
6631
6947
  };
6632
6948
  }
6949
+ function easeFlightProgress(t) {
6950
+ if (t <= 0)
6951
+ return 0;
6952
+ if (t >= 1)
6953
+ return 1;
6954
+ return t < 0.5 ? 2 * t * t : 1 - 2 * (1 - t) * (1 - t);
6955
+ }
6956
+ function flightSpeedFactor(t) {
6957
+ if (t <= 0 || t >= 1)
6958
+ return 0;
6959
+ return t < 0.5 ? 4 * t : 4 * (1 - t);
6960
+ }
6961
+ function interpolateFlightPosition(origin, destination, taskProgress, options) {
6962
+ const t = options?.easing === 'linear' ? taskProgress : easeFlightProgress(taskProgress);
6963
+ return {
6964
+ x: (1 - t) * Number(origin.x) + t * Number(destination.x),
6965
+ y: (1 - t) * Number(origin.y) + t * Number(destination.y),
6966
+ };
6967
+ }
6968
+ function getInterpolatedPosition(entity, taskIndex, taskProgress) {
6969
+ if (!entity.schedule || entity.schedule.tasks.length === 0) {
6970
+ return { x: Number(entity.coordinates.x), y: Number(entity.coordinates.y) };
6971
+ }
6972
+ if (taskIndex < 0) {
6973
+ const settled = getFlightOrigin(entity, entity.schedule.tasks.length);
6974
+ return { x: Number(settled.x), y: Number(settled.y) };
6975
+ }
6976
+ const task = entity.schedule.tasks[taskIndex];
6977
+ if (!task.type.equals(exports.TaskType.TRAVEL) || !task.coordinates) {
6978
+ const origin = getFlightOrigin(entity, taskIndex);
6979
+ return { x: Number(origin.x), y: Number(origin.y) };
6980
+ }
6981
+ return interpolateFlightPosition(getFlightOrigin(entity, taskIndex), task.coordinates, taskProgress);
6982
+ }
6633
6983
  function rotation(origin, destination) {
6634
6984
  return Math.atan2(destination.y - origin.y, destination.x - origin.x) * (180 / Math.PI) + 90;
6635
6985
  }
@@ -6839,9 +7189,12 @@ function getDestinationLocation(entity) {
6839
7189
  return undefined;
6840
7190
  }
6841
7191
  function getPositionAt(entity, taskIndex, taskProgress) {
6842
- if (!entity.schedule || entity.schedule.tasks.length === 0 || taskIndex < 0) {
7192
+ if (!entity.schedule || entity.schedule.tasks.length === 0) {
6843
7193
  return entity.coordinates;
6844
7194
  }
7195
+ if (taskIndex < 0) {
7196
+ return getFlightOrigin(entity, entity.schedule.tasks.length);
7197
+ }
6845
7198
  const task = entity.schedule.tasks[taskIndex];
6846
7199
  if (!task.type.equals(exports.TaskType.TRAVEL) || !task.coordinates) {
6847
7200
  return getFlightOrigin(entity, taskIndex);
@@ -6894,7 +7247,8 @@ function calc_transfer_duration(source, dest, cargoMass) {
6894
7247
  ? source.location.z
6895
7248
  : (source.location.z?.toNumber() ?? 0);
6896
7249
  const destZ = typeof dest.location.z === 'number' ? dest.location.z : (dest.location.z?.toNumber() ?? 0);
6897
- const distance = Math.abs(sourceZ - destZ);
7250
+ const rawDistance = Math.abs(sourceZ - destZ);
7251
+ const distance = rawDistance < MIN_TRANSFER_DISTANCE ? MIN_TRANSFER_DISTANCE : rawDistance;
6898
7252
  const totalMass = cargoMass + totalLoaderMass;
6899
7253
  const acceleration = calc_acceleration(totalThrust, totalMass);
6900
7254
  const flightTime = 2 * Math.sqrt(distance / acceleration);
@@ -6973,7 +7327,7 @@ function cargoItemToStack(item) {
6973
7327
  return {
6974
7328
  item_id: antelope.UInt16.from(item.item_id),
6975
7329
  quantity: antelope.UInt32.from(item.quantity),
6976
- stats: item.stats,
7330
+ stats: antelope.UInt64.from(item.stats),
6977
7331
  modules: item.modules ?? [],
6978
7332
  };
6979
7333
  }
@@ -7070,7 +7424,7 @@ function currentTaskIndex(entity, now) {
7070
7424
  }
7071
7425
  timeAccum += taskDuration;
7072
7426
  }
7073
- return entity.schedule.tasks.length - 1;
7427
+ return -1;
7074
7428
  }
7075
7429
  function currentTask(entity, now) {
7076
7430
  const index = currentTaskIndex(entity, now);
@@ -7136,8 +7490,25 @@ function currentTaskProgress(entity, now) {
7136
7490
  return 1;
7137
7491
  return Math.min(1, elapsed / duration);
7138
7492
  }
7139
- function scheduleProgress(entity, now) {
7140
- const duration = scheduleDuration(entity);
7493
+ function currentTaskProgressFloat(entity, now) {
7494
+ if (!entity.schedule || entity.schedule.tasks.length === 0)
7495
+ return 0;
7496
+ const index = currentTaskIndex(entity, now);
7497
+ if (index < 0)
7498
+ return 0;
7499
+ const task = entity.schedule.tasks[index];
7500
+ const durationMs = task.duration.toNumber() * 1000;
7501
+ if (durationMs === 0)
7502
+ return 1;
7503
+ const startedMs = entity.schedule.started.toDate().getTime();
7504
+ const taskStartMs = startedMs + getTaskStartTime(entity, index) * 1000;
7505
+ const elapsedMs = now.getTime() - taskStartMs;
7506
+ if (elapsedMs <= 0)
7507
+ return 0;
7508
+ return Math.min(1, elapsedMs / durationMs);
7509
+ }
7510
+ function scheduleProgress(entity, now) {
7511
+ const duration = scheduleDuration(entity);
7141
7512
  if (duration === 0)
7142
7513
  return hasSchedule$1(entity) ? 1 : 0;
7143
7514
  const elapsed = scheduleElapsed(entity, now);
@@ -7180,6 +7551,7 @@ var schedule = /*#__PURE__*/Object.freeze({
7180
7551
  isTaskComplete: isTaskComplete,
7181
7552
  isTaskInProgress: isTaskInProgress,
7182
7553
  currentTaskProgress: currentTaskProgress,
7554
+ currentTaskProgressFloat: currentTaskProgressFloat,
7183
7555
  scheduleProgress: scheduleProgress,
7184
7556
  isTaskType: isTaskType,
7185
7557
  isInFlight: isInFlight,
@@ -7360,6 +7732,10 @@ function applyTask(projected, task) {
7360
7732
  case exports.TaskType.DEPLOY:
7361
7733
  applyDeployTask(projected, task);
7362
7734
  break;
7735
+ case exports.TaskType.UNDEPLOY:
7736
+ case exports.TaskType.WRAP_ENTITY:
7737
+ case exports.TaskType.DEMOLISH:
7738
+ break;
7363
7739
  }
7364
7740
  }
7365
7741
  function projectEntity(entity, options) {
@@ -7525,6 +7901,10 @@ function projectEntityAt(entity, now) {
7525
7901
  if (taskComplete)
7526
7902
  applyDeployTask(projected, task);
7527
7903
  break;
7904
+ case exports.TaskType.UNDEPLOY:
7905
+ case exports.TaskType.WRAP_ENTITY:
7906
+ case exports.TaskType.DEMOLISH:
7907
+ break;
7528
7908
  }
7529
7909
  }
7530
7910
  return projected;
@@ -7628,6 +8008,9 @@ class ScheduleAccessor {
7628
8008
  currentTaskProgress(now) {
7629
8009
  return currentTaskProgress(this.entity, now);
7630
8010
  }
8011
+ currentTaskProgressFloat(now) {
8012
+ return currentTaskProgressFloat(this.entity, now);
8013
+ }
7631
8014
  progress(now) {
7632
8015
  return scheduleProgress(this.entity, now);
7633
8016
  }
@@ -7716,6 +8099,12 @@ class Ship extends exports.ServerTypes.entity_info {
7716
8099
  get name() {
7717
8100
  return this.entity_name;
7718
8101
  }
8102
+ get entityClass() {
8103
+ return 'mobile';
8104
+ }
8105
+ get canUndeploy() {
8106
+ return true;
8107
+ }
7719
8108
  get inv() {
7720
8109
  this._inv ?? (this._inv = new InventoryAccessor(this));
7721
8110
  return this._inv;
@@ -7747,6 +8136,11 @@ class Ship extends exports.ServerTypes.entity_info {
7747
8136
  const progress = this.sched.currentTaskProgress(now);
7748
8137
  return Coordinates.from(getPositionAt(this, taskIndex, progress));
7749
8138
  }
8139
+ interpolatedPositionAt(now) {
8140
+ const taskIndex = this.sched.currentTaskIndex(now);
8141
+ const progress = this.sched.currentTaskProgressFloat(now);
8142
+ return getInterpolatedPosition(this, taskIndex, progress);
8143
+ }
7750
8144
  isInFlight(now) {
7751
8145
  return isInFlight(this, now);
7752
8146
  }
@@ -7853,8 +8247,7 @@ const ORE_STATS = [
7853
8247
  key: 'density',
7854
8248
  label: 'Density',
7855
8249
  abbreviation: 'DEN',
7856
- purpose: 'Mass per unit',
7857
- inverted: true,
8250
+ purpose: 'Structural integrity — higher rolls produce lighter hulls',
7858
8251
  },
7859
8252
  ];
7860
8253
  const CRYSTAL_STATS = [
@@ -8395,6 +8788,8 @@ function getModuleCapabilityType(itemId) {
8395
8788
  return MODULE_STORAGE;
8396
8789
  case ITEM_HAULER_T1:
8397
8790
  return MODULE_HAULER;
8791
+ case ITEM_WARP_T1:
8792
+ return MODULE_WARP;
8398
8793
  default:
8399
8794
  return 0xff;
8400
8795
  }
@@ -8429,92 +8824,124 @@ function moduleSlotTypeToCode(slotType) {
8429
8824
  }
8430
8825
  }
8431
8826
 
8827
+ const U16_MAX = 65535;
8828
+ function clampUint16(value) {
8829
+ return Math.min(value, U16_MAX);
8830
+ }
8831
+ function applySlotMultiplier(value, outputPct) {
8832
+ return clampUint16(Math.floor((value * outputPct) / 100));
8833
+ }
8834
+ function getSlotAmp(layout, slotIndex) {
8835
+ return layout[slotIndex]?.outputPct ?? 100;
8836
+ }
8837
+
8432
8838
  function computeShipHullCapabilities(stats) {
8433
- const density = stats.density ?? 500;
8434
- const strength = stats.strength ?? 500;
8435
- const hardness = stats.hardness ?? 500;
8436
- const saturation = stats.saturation ?? 500;
8437
- const hullmass = 25000 + 75 * density;
8839
+ const density = stats.density;
8840
+ const strength = stats.strength;
8841
+ const hardness = stats.hardness;
8842
+ const saturation = stats.saturation;
8843
+ const hullmass = 100000 - 75 * density;
8438
8844
  const statSum = strength + hardness + saturation;
8439
8845
  const exponent = statSum / 2997.0;
8440
8846
  const capacity = Math.floor(1000000 * 10 ** exponent);
8441
8847
  return { hullmass, capacity };
8442
8848
  }
8443
8849
  function computeEngineCapabilities(stats) {
8444
- const vol = stats.volatility ?? 500;
8445
- const thm = stats.thermal ?? 500;
8850
+ const vol = stats.volatility;
8851
+ const thm = stats.thermal;
8446
8852
  return {
8447
8853
  thrust: 400 + Math.floor((vol * 3) / 4),
8448
8854
  drain: Math.max(30, 50 - Math.floor(thm / 70)),
8449
8855
  };
8450
8856
  }
8451
8857
  function computeGeneratorCapabilities(stats) {
8452
- const res = stats.resonance ?? 500;
8453
- const ref = stats.reflectivity ?? 500;
8858
+ const com = stats.composition;
8859
+ const fin = stats.fineness;
8454
8860
  return {
8455
- capacity: 300 + Math.floor(res / 6),
8456
- recharge: 1 + Math.floor((ref * 3) / 1000),
8457
- };
8458
- }
8459
- function computeGathererCapabilities(stats) {
8460
- const str = stats.strength ?? 500;
8461
- const con = stats.conductivity ?? 500;
8462
- const ref = stats.reflectivity ?? 500;
8463
- const tol = stats.tolerance ?? 500;
8861
+ capacity: 300 + Math.floor(com / 6),
8862
+ recharge: 1 + Math.floor((fin * 3) / 1000),
8863
+ };
8864
+ }
8865
+ const GATHERER_DEPTH_TABLE = [
8866
+ { floor: 500, slope: 5 },
8867
+ { floor: 2000, slope: 11 },
8868
+ { floor: 7000, slope: 16 },
8869
+ { floor: 15000, slope: 18 },
8870
+ { floor: 25000, slope: 19 },
8871
+ { floor: 35000, slope: 16 },
8872
+ { floor: 46000, slope: 12 },
8873
+ { floor: 53500, slope: 10 },
8874
+ { floor: 60000, slope: 5 },
8875
+ { floor: 63500, slope: 2 },
8876
+ ];
8877
+ const GATHERER_DEPTH_MAX_TIER = 10;
8878
+ function gathererDepthForTier(tol, tier) {
8879
+ if (tier < 1 || tier > GATHERER_DEPTH_MAX_TIER) {
8880
+ throw new Error(`gatherer tier out of range: ${tier}`);
8881
+ }
8882
+ const p = GATHERER_DEPTH_TABLE[tier - 1];
8883
+ return p.floor + tol * p.slope;
8884
+ }
8885
+ function computeGathererCapabilities(stats, tier) {
8886
+ const str = stats.strength;
8887
+ const con = stats.conductivity;
8888
+ const ref = stats.reflectivity;
8889
+ const tol = stats.tolerance;
8464
8890
  return {
8465
8891
  yield: 200 + str,
8466
8892
  drain: Math.max(250, 1250 - Math.floor((con * 25) / 20)),
8467
- depth: 200 + Math.floor((tol * 3) / 2),
8893
+ depth: gathererDepthForTier(tol, tier),
8468
8894
  speed: 100 + Math.floor((ref * 4) / 5),
8469
8895
  };
8470
8896
  }
8471
8897
  function computeLoaderCapabilities(stats) {
8472
- const hrd = stats.hardness ?? 500;
8473
- const pla = stats.plasticity ?? 500;
8898
+ const insulation = stats.insulation;
8899
+ const plasticity = stats.plasticity;
8474
8900
  return {
8475
- mass: Math.max(200, 2000 - Math.floor(hrd * 2)),
8476
- thrust: 1 + Math.floor(pla / 500),
8901
+ mass: Math.max(200, 2000 - Math.floor(insulation * 2)),
8902
+ thrust: 1 + Math.floor(plasticity / 500),
8477
8903
  quantity: 1,
8478
8904
  };
8479
8905
  }
8480
8906
  function computeCrafterCapabilities(stats) {
8481
- const rea = stats.reactivity ?? 500;
8482
- const com = stats.composition ?? 500;
8907
+ const rea = stats.reactivity;
8908
+ const fin = stats.fineness;
8483
8909
  return {
8484
8910
  speed: 100 + Math.floor((rea * 4) / 5),
8485
- drain: Math.max(5, 30 - Math.floor(com / 33)),
8911
+ drain: Math.max(5, 30 - Math.floor(fin / 33)),
8486
8912
  };
8487
8913
  }
8488
8914
  function computeHaulerCapabilities(stats) {
8489
- const res = stats.resonance ?? 500;
8490
- const con = stats.conductivity ?? 500;
8491
- const ref = stats.reflectivity ?? 500;
8915
+ const fineness = stats.fineness;
8916
+ const conductivity = stats.conductivity;
8917
+ const composition = stats.composition;
8492
8918
  return {
8493
- capacity: Math.max(1, 1 + Math.floor(res / 400)),
8494
- efficiency: 2000 + con * 6,
8495
- drain: Math.max(3, 15 - Math.floor(ref / 80)),
8919
+ capacity: Math.max(1, 1 + Math.floor(fineness / 400)),
8920
+ efficiency: 2000 + conductivity * 6,
8921
+ drain: Math.max(3, 15 - Math.floor(composition / 80)),
8496
8922
  };
8497
8923
  }
8498
8924
  function computeStorageCapabilities(stats, baseCapacity) {
8499
- const strength = stats.strength ?? 500;
8500
- const hardness = stats.hardness ?? 500;
8501
- const saturation = stats.saturation ?? 500;
8502
- const statSum = strength + hardness + saturation;
8925
+ const strength = stats.strength;
8926
+ const density = stats.density;
8927
+ const hardness = stats.hardness;
8928
+ const saturation = stats.saturation;
8929
+ const statSum = strength + density + hardness + saturation;
8503
8930
  const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
8504
8931
  return { capacityBonus };
8505
8932
  }
8506
8933
  function computeWarehouseHullCapabilities(stats) {
8507
- const density = stats.density ?? 500;
8508
- const strength = stats.strength ?? 500;
8509
- const hardness = stats.hardness ?? 500;
8510
- const saturation = stats.saturation ?? 500;
8511
- const hullmass = 25000 + 75 * density;
8934
+ const density = stats.density;
8935
+ const strength = stats.strength;
8936
+ const hardness = stats.hardness;
8937
+ const saturation = stats.saturation;
8938
+ const hullmass = 100000 - 75 * density;
8512
8939
  const statSum = strength + hardness + saturation;
8513
8940
  const exponent = statSum / 2997.0;
8514
8941
  const capacity = Math.floor(20000000 * 10 ** exponent);
8515
8942
  return { hullmass, capacity };
8516
8943
  }
8517
- function computeShipCapabilities(modules) {
8944
+ function computeShipCapabilities(modules, layout) {
8518
8945
  const ship = {};
8519
8946
  const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
8520
8947
  if (engineModules.length > 0) {
@@ -8522,7 +8949,7 @@ function computeShipCapabilities(modules) {
8522
8949
  let totalDrain = 0;
8523
8950
  for (const m of engineModules) {
8524
8951
  const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
8525
- totalThrust += caps.thrust;
8952
+ totalThrust += applySlotMultiplier(caps.thrust, getSlotAmp(layout, m.slotIndex));
8526
8953
  totalDrain += caps.drain;
8527
8954
  }
8528
8955
  ship.engines = { thrust: totalThrust, drain: totalDrain };
@@ -8533,25 +8960,37 @@ function computeShipCapabilities(modules) {
8533
8960
  let totalRecharge = 0;
8534
8961
  for (const m of generatorModules) {
8535
8962
  const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
8536
- totalCapacity += caps.capacity;
8537
- totalRecharge += caps.recharge;
8963
+ const amp = getSlotAmp(layout, m.slotIndex);
8964
+ totalCapacity += applySlotMultiplier(caps.capacity, amp);
8965
+ totalRecharge += applySlotMultiplier(caps.recharge, amp);
8538
8966
  }
8539
- ship.generator = { capacity: totalCapacity, recharge: totalRecharge };
8967
+ ship.generator = {
8968
+ capacity: clampUint16(totalCapacity),
8969
+ recharge: clampUint16(totalRecharge),
8970
+ };
8540
8971
  }
8541
8972
  const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
8542
8973
  if (gathererModules.length > 0) {
8543
8974
  let totalYield = 0;
8544
8975
  let totalDrain = 0;
8545
- let totalDepth = 0;
8976
+ let maxDepth = 0;
8546
8977
  let totalSpeed = 0;
8547
8978
  for (const m of gathererModules) {
8548
- const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
8549
- totalYield += caps.yield;
8979
+ const tier = getItem(m.itemId).tier;
8980
+ const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats), tier);
8981
+ const amp = getSlotAmp(layout, m.slotIndex);
8982
+ totalYield += applySlotMultiplier(caps.yield, amp);
8550
8983
  totalDrain += caps.drain;
8551
- totalDepth += caps.depth;
8552
- totalSpeed += caps.speed;
8984
+ if (caps.depth > maxDepth)
8985
+ maxDepth = caps.depth;
8986
+ totalSpeed += applySlotMultiplier(caps.speed, amp);
8553
8987
  }
8554
- ship.gatherer = { yield: totalYield, drain: totalDrain, depth: totalDepth, speed: totalSpeed };
8988
+ ship.gatherer = {
8989
+ yield: clampUint16(totalYield),
8990
+ drain: totalDrain,
8991
+ depth: maxDepth,
8992
+ speed: clampUint16(totalSpeed),
8993
+ };
8555
8994
  }
8556
8995
  const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
8557
8996
  if (haulerModules.length > 0) {
@@ -8560,13 +8999,15 @@ function computeShipCapabilities(modules) {
8560
8999
  let totalDrain = 0;
8561
9000
  for (const m of haulerModules) {
8562
9001
  const caps = computeHaulerCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
9002
+ const eff = applySlotMultiplier(caps.efficiency, getSlotAmp(layout, m.slotIndex));
8563
9003
  totalCapacity += caps.capacity;
8564
- weightedEffNum += caps.efficiency * caps.capacity;
9004
+ weightedEffNum += eff * caps.capacity;
8565
9005
  totalDrain += caps.drain;
8566
9006
  }
9007
+ const efficiency = totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0;
8567
9008
  ship.hauler = {
8568
9009
  capacity: totalCapacity,
8569
- efficiency: totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0,
9010
+ efficiency: clampUint16(efficiency),
8570
9011
  drain: totalDrain,
8571
9012
  };
8572
9013
  }
@@ -8578,10 +9019,14 @@ function computeShipCapabilities(modules) {
8578
9019
  for (const m of loaderModules) {
8579
9020
  const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
8580
9021
  totalMass += caps.mass;
8581
- totalThrust += caps.thrust;
9022
+ totalThrust += applySlotMultiplier(caps.thrust, getSlotAmp(layout, m.slotIndex));
8582
9023
  totalQuantity += caps.quantity;
8583
9024
  }
8584
- ship.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
9025
+ ship.loaders = {
9026
+ mass: totalMass,
9027
+ thrust: clampUint16(totalThrust),
9028
+ quantity: totalQuantity,
9029
+ };
8585
9030
  }
8586
9031
  const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
8587
9032
  if (crafterModules.length > 0) {
@@ -8589,10 +9034,10 @@ function computeShipCapabilities(modules) {
8589
9034
  let totalDrain = 0;
8590
9035
  for (const m of crafterModules) {
8591
9036
  const caps = computeCrafterCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
8592
- totalSpeed += caps.speed;
9037
+ totalSpeed += applySlotMultiplier(caps.speed, getSlotAmp(layout, m.slotIndex));
8593
9038
  totalDrain += caps.drain;
8594
9039
  }
8595
- ship.crafter = { speed: totalSpeed, drain: totalDrain };
9040
+ ship.crafter = { speed: clampUint16(totalSpeed), drain: totalDrain };
8596
9041
  }
8597
9042
  return ship;
8598
9043
  }
@@ -8601,6 +9046,12 @@ class Warehouse extends exports.ServerTypes.entity_info {
8601
9046
  get name() {
8602
9047
  return this.entity_name;
8603
9048
  }
9049
+ get entityClass() {
9050
+ return 'building';
9051
+ }
9052
+ get canDemolish() {
9053
+ return true;
9054
+ }
8604
9055
  get inv() {
8605
9056
  this._inv ?? (this._inv = new InventoryAccessor(this));
8606
9057
  return this._inv;
@@ -8651,7 +9102,7 @@ class Warehouse extends exports.ServerTypes.entity_info {
8651
9102
  return hull.adding(this.totalCargoMass);
8652
9103
  }
8653
9104
  }
8654
- function computeWarehouseCapabilities(modules) {
9105
+ function computeWarehouseCapabilities(modules, layout) {
8655
9106
  const warehouse = {};
8656
9107
  const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
8657
9108
  if (loaderModules.length > 0) {
@@ -8661,10 +9112,14 @@ function computeWarehouseCapabilities(modules) {
8661
9112
  for (const m of loaderModules) {
8662
9113
  const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
8663
9114
  totalMass += caps.mass;
8664
- totalThrust += caps.thrust;
9115
+ totalThrust += applySlotMultiplier(caps.thrust, getSlotAmp(layout, m.slotIndex));
8665
9116
  totalQuantity += caps.quantity;
8666
9117
  }
8667
- warehouse.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
9118
+ warehouse.loaders = {
9119
+ mass: totalMass,
9120
+ thrust: clampUint16(totalThrust),
9121
+ quantity: totalQuantity,
9122
+ };
8668
9123
  }
8669
9124
  return warehouse;
8670
9125
  }
@@ -8673,6 +9128,12 @@ class Container extends exports.ServerTypes.entity_info {
8673
9128
  get name() {
8674
9129
  return this.entity_name;
8675
9130
  }
9131
+ get entityClass() {
9132
+ return 'mobile';
9133
+ }
9134
+ get canUndeploy() {
9135
+ return true;
9136
+ }
8676
9137
  get sched() {
8677
9138
  this._sched ?? (this._sched = new ScheduleAccessor(this));
8678
9139
  return this._sched;
@@ -8680,6 +9141,11 @@ class Container extends exports.ServerTypes.entity_info {
8680
9141
  get isIdle() {
8681
9142
  return this.is_idle;
8682
9143
  }
9144
+ interpolatedPositionAt(now) {
9145
+ const taskIndex = this.sched.currentTaskIndex(now);
9146
+ const progress = this.sched.currentTaskProgressFloat(now);
9147
+ return getInterpolatedPosition(this, taskIndex, progress);
9148
+ }
8683
9149
  isLoading(now) {
8684
9150
  return isLoading(this, now);
8685
9151
  }
@@ -8710,32 +9176,119 @@ class Container extends exports.ServerTypes.entity_info {
8710
9176
  }
8711
9177
  }
8712
9178
  function computeContainerCapabilities(stats) {
8713
- const density = stats['density'] ?? 500;
8714
- const strength = stats['strength'] ?? 500;
8715
- const hardness = stats['hardness'] ?? 500;
8716
- const saturation = stats['saturation'] ?? 500;
8717
- const hullmass = 25000 + 75 * density;
9179
+ const density = stats.density;
9180
+ const strength = stats.strength;
9181
+ const hardness = stats.hardness;
9182
+ const saturation = stats.saturation;
9183
+ const hullmass = 100000 - 75 * density;
8718
9184
  const statSum = strength + hardness + saturation;
8719
9185
  const exponent = statSum / 2997;
8720
9186
  const capacity = Math.floor(1000000 * 10 ** exponent);
8721
9187
  return { hullmass, capacity };
8722
9188
  }
8723
9189
  function computeContainerT2Capabilities(stats) {
8724
- const strength = stats['strength'] ?? 0;
8725
- const density = stats['density'] ?? 0;
8726
- const hardness = stats['hardness'] ?? 0;
8727
- const saturation = stats['saturation'] ?? 0;
8728
- const hullmass = 20000 + 50 * density;
9190
+ const strength = stats.strength;
9191
+ const density = stats.density;
9192
+ const hardness = stats.hardness;
9193
+ const saturation = stats.saturation;
9194
+ const hullmass = 70000 - 50 * density;
8729
9195
  const statSum = strength + hardness + saturation;
8730
9196
  const exponent = statSum / 2500;
8731
9197
  const capacity = Math.floor(1500000 * 10 ** exponent);
8732
9198
  return { hullmass, capacity };
8733
9199
  }
8734
9200
 
9201
+ class Extractor extends exports.ServerTypes.entity_info {
9202
+ get name() {
9203
+ return this.entity_name;
9204
+ }
9205
+ get entityClass() {
9206
+ return 'building';
9207
+ }
9208
+ get canDemolish() {
9209
+ return true;
9210
+ }
9211
+ get inv() {
9212
+ this._inv ?? (this._inv = new InventoryAccessor(this));
9213
+ return this._inv;
9214
+ }
9215
+ get inventory() {
9216
+ return this.inv.items;
9217
+ }
9218
+ get sched() {
9219
+ this._sched ?? (this._sched = new ScheduleAccessor(this));
9220
+ return this._sched;
9221
+ }
9222
+ get isIdle() {
9223
+ return this.is_idle;
9224
+ }
9225
+ get location() {
9226
+ return Location.from(this.coordinates);
9227
+ }
9228
+ get totalCargoMass() {
9229
+ return this.inv.totalMass;
9230
+ }
9231
+ get maxCapacity() {
9232
+ return antelope.UInt64.from(this.capacity);
9233
+ }
9234
+ get availableCapacity() {
9235
+ const cargo = this.totalCargoMass;
9236
+ return cargo.gte(this.maxCapacity) ? antelope.UInt64.from(0) : this.maxCapacity.subtracting(cargo);
9237
+ }
9238
+ get isFull() {
9239
+ return this.totalCargoMass.gte(this.maxCapacity);
9240
+ }
9241
+ get totalMass() {
9242
+ const hull = this.hullmass ? antelope.UInt64.from(this.hullmass) : antelope.UInt64.from(0);
9243
+ return hull.adding(this.totalCargoMass);
9244
+ }
9245
+ }
9246
+ function computeExtractorCapabilities(modules, layout) {
9247
+ const out = {};
9248
+ const genModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
9249
+ if (genModules.length > 0) {
9250
+ let totalCapacity = 0;
9251
+ let totalRecharge = 0;
9252
+ for (const m of genModules) {
9253
+ const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
9254
+ const amp = getSlotAmp(layout, m.slotIndex);
9255
+ totalCapacity += applySlotMultiplier(caps.capacity, amp);
9256
+ totalRecharge += applySlotMultiplier(caps.recharge, amp);
9257
+ }
9258
+ out.generator = {
9259
+ capacity: clampUint16(totalCapacity),
9260
+ recharge: clampUint16(totalRecharge),
9261
+ };
9262
+ }
9263
+ const gathModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
9264
+ if (gathModules.length > 0) {
9265
+ let totalYield = 0;
9266
+ let totalDrain = 0;
9267
+ let maxDepth = 0;
9268
+ let totalSpeed = 0;
9269
+ for (const m of gathModules) {
9270
+ const tier = getItem(m.itemId).tier;
9271
+ const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats), tier);
9272
+ const amp = getSlotAmp(layout, m.slotIndex);
9273
+ totalYield += applySlotMultiplier(caps.yield, amp);
9274
+ totalDrain += caps.drain;
9275
+ if (caps.depth > maxDepth)
9276
+ maxDepth = caps.depth;
9277
+ totalSpeed += applySlotMultiplier(caps.speed, amp);
9278
+ }
9279
+ out.gatherer = {
9280
+ yield: clampUint16(totalYield),
9281
+ drain: totalDrain,
9282
+ depth: maxDepth,
9283
+ speed: clampUint16(totalSpeed),
9284
+ };
9285
+ }
9286
+ return out;
9287
+ }
9288
+
8735
9289
  class EntitiesManager extends BaseManager {
8736
- async getEntity(type, id) {
9290
+ async getEntity(id) {
8737
9291
  const result = await this.server.readonly('getentity', {
8738
- entity_type: antelope.Name.from(type),
8739
9292
  entity_id: id,
8740
9293
  });
8741
9294
  const entityInfo = result;
@@ -8745,7 +9298,7 @@ class EntitiesManager extends BaseManager {
8745
9298
  const ownerName = this.resolveOwner(owner);
8746
9299
  const result = await this.server.readonly('getentities', {
8747
9300
  owner: ownerName,
8748
- entity_type: type ? antelope.Name.from(type) : null,
9301
+ entity_type: type,
8749
9302
  });
8750
9303
  const entities = result;
8751
9304
  return entities.map((entity) => this.wrapEntity(entity));
@@ -8754,18 +9307,21 @@ class EntitiesManager extends BaseManager {
8754
9307
  const ownerName = this.resolveOwner(owner);
8755
9308
  const result = await this.server.readonly('getsummaries', {
8756
9309
  owner: ownerName,
8757
- entity_type: type ? antelope.Name.from(type) : null,
9310
+ entity_type: type,
8758
9311
  });
8759
9312
  return result;
8760
9313
  }
8761
9314
  async getShip(id) {
8762
- return (await this.getEntity('ship', id));
9315
+ return (await this.getEntity(id));
8763
9316
  }
8764
9317
  async getWarehouse(id) {
8765
- return (await this.getEntity('warehouse', id));
9318
+ return (await this.getEntity(id));
8766
9319
  }
8767
9320
  async getContainer(id) {
8768
- return (await this.getEntity('container', id));
9321
+ return (await this.getEntity(id));
9322
+ }
9323
+ async getExtractor(id) {
9324
+ return (await this.getEntity(id));
8769
9325
  }
8770
9326
  async getShips(owner) {
8771
9327
  return (await this.getEntities(owner, 'ship'));
@@ -8776,6 +9332,9 @@ class EntitiesManager extends BaseManager {
8776
9332
  async getContainers(owner) {
8777
9333
  return (await this.getEntities(owner, 'container'));
8778
9334
  }
9335
+ async getExtractors(owner) {
9336
+ return (await this.getEntities(owner, 'extractor'));
9337
+ }
8779
9338
  async getShipSummaries(owner) {
8780
9339
  return this.getSummaries(owner, 'ship');
8781
9340
  }
@@ -8785,16 +9344,19 @@ class EntitiesManager extends BaseManager {
8785
9344
  async getContainerSummaries(owner) {
8786
9345
  return this.getSummaries(owner, 'container');
8787
9346
  }
9347
+ async getExtractorSummaries(owner) {
9348
+ return this.getSummaries(owner, 'extractor');
9349
+ }
8788
9350
  wrapEntity(entity) {
8789
- if (entity.type.equals('ship')) {
9351
+ if (entity.type.equals('ship'))
8790
9352
  return new Ship(entity);
8791
- }
8792
- else if (entity.type.equals('warehouse')) {
9353
+ if (entity.type.equals('warehouse'))
8793
9354
  return new Warehouse(entity);
8794
- }
8795
- else {
9355
+ if (entity.type.equals('extractor'))
9356
+ return new Extractor(entity);
9357
+ if (entity.type.equals('container'))
8796
9358
  return new Container(entity);
8797
- }
9359
+ throw new Error(`unknown entity type: ${entity.type}`);
8798
9360
  }
8799
9361
  resolveOwner(owner) {
8800
9362
  if (typeof owner === 'object' && owner !== null && 'owner' in owner) {
@@ -8878,17 +9440,6 @@ class LocationsManager extends BaseManager {
8878
9440
  reserve: overrideMap.get(s.index) ?? s.reserve,
8879
9441
  }));
8880
9442
  }
8881
- async getLocationEntity(id) {
8882
- const row = await this.server.table('location').get(antelope.UInt64.from(id));
8883
- return row ?? undefined;
8884
- }
8885
- async getLocationEntityAt(coords) {
8886
- const id = coordsToLocationId(coords);
8887
- return this.getLocationEntity(id);
8888
- }
8889
- async getAllLocationEntities() {
8890
- return this.server.table('location').all();
8891
- }
8892
9443
  }
8893
9444
 
8894
9445
  class EpochsManager extends BaseManager {
@@ -8935,7 +9486,6 @@ class ActionsManager extends BaseManager {
8935
9486
  const x = antelope.Int64.from(destination.x);
8936
9487
  const y = antelope.Int64.from(destination.y);
8937
9488
  return this.server.action('travel', {
8938
- entity_type: EntityType.SHIP,
8939
9489
  id: antelope.UInt64.from(shipId),
8940
9490
  x,
8941
9491
  y,
@@ -8956,9 +9506,8 @@ class ActionsManager extends BaseManager {
8956
9506
  recharge,
8957
9507
  });
8958
9508
  }
8959
- resolve(entityId, entityType = EntityType.SHIP, count) {
9509
+ resolve(entityId, count) {
8960
9510
  const params = {
8961
- entity_type: entityType,
8962
9511
  id: antelope.UInt64.from(entityId),
8963
9512
  };
8964
9513
  if (count !== undefined) {
@@ -8966,28 +9515,27 @@ class ActionsManager extends BaseManager {
8966
9515
  }
8967
9516
  return this.server.action('resolve', params);
8968
9517
  }
8969
- cancel(entityId, count, entityType = EntityType.SHIP) {
9518
+ cancel(entityId, count) {
8970
9519
  return this.server.action('cancel', {
8971
- entity_type: entityType,
8972
9520
  id: antelope.UInt64.from(entityId),
8973
9521
  count: antelope.UInt64.from(count),
8974
9522
  });
8975
9523
  }
8976
- recharge(entityId, entityType = EntityType.SHIP) {
9524
+ recharge(entityId) {
8977
9525
  return this.server.action('recharge', {
8978
- entity_type: entityType,
8979
9526
  id: antelope.UInt64.from(entityId),
8980
9527
  });
8981
9528
  }
8982
- transfer(sourceType, sourceId, destType, destId, itemId, stats, quantity) {
9529
+ refrshentity(entityId) {
9530
+ return this.server.action('refrshentity', {
9531
+ entity_id: antelope.UInt64.from(entityId),
9532
+ });
9533
+ }
9534
+ transfer(sourceId, destId, items) {
8983
9535
  return this.server.action('transfer', {
8984
- source_type: sourceType,
8985
9536
  source_id: antelope.UInt64.from(sourceId),
8986
- dest_type: destType,
8987
9537
  dest_id: antelope.UInt64.from(destId),
8988
- item_id: antelope.UInt16.from(itemId),
8989
- stats: antelope.UInt64.from(stats),
8990
- quantity: antelope.UInt32.from(quantity),
9538
+ items,
8991
9539
  });
8992
9540
  }
8993
9541
  foundCompany(account, name) {
@@ -9001,80 +9549,81 @@ class ActionsManager extends BaseManager {
9001
9549
  account: antelope.Name.from(account),
9002
9550
  });
9003
9551
  }
9004
- gather(source, destination, stratum, quantity) {
9552
+ gather(sourceId, destinationId, stratum, quantity) {
9005
9553
  return this.server.action('gather', {
9006
- source: exports.ServerTypes.entity_ref.from({
9007
- entity_type: source.entityType,
9008
- entity_id: antelope.UInt64.from(source.entityId),
9009
- }),
9010
- destination: exports.ServerTypes.entity_ref.from({
9011
- entity_type: destination.entityType,
9012
- entity_id: antelope.UInt64.from(destination.entityId),
9013
- }),
9554
+ source_id: antelope.UInt64.from(sourceId),
9555
+ destination_id: antelope.UInt64.from(destinationId),
9014
9556
  stratum: antelope.UInt16.from(stratum),
9015
9557
  quantity: antelope.UInt32.from(quantity),
9016
9558
  });
9017
9559
  }
9018
- warp(entityId, destination, entityType = EntityType.SHIP) {
9560
+ warp(entityId, destination) {
9019
9561
  const x = antelope.Int64.from(destination.x);
9020
9562
  const y = antelope.Int64.from(destination.y);
9021
9563
  return this.server.action('warp', {
9022
- entity_type: entityType,
9023
9564
  id: antelope.UInt64.from(entityId),
9024
9565
  x,
9025
9566
  y,
9026
9567
  });
9027
9568
  }
9028
- craft(entityType, entityId, recipeId, quantity, inputs) {
9029
- const cargoInputs = inputs.map((i) => exports.ServerTypes.cargo_item.from(i));
9569
+ craft(entityId, recipeId, quantity, inputs) {
9030
9570
  return this.server.action('craft', {
9031
- entity_type: entityType,
9032
9571
  id: antelope.UInt64.from(entityId),
9033
9572
  recipe_id: antelope.UInt16.from(recipeId),
9034
9573
  quantity: antelope.UInt32.from(quantity),
9035
- inputs: cargoInputs,
9574
+ inputs,
9036
9575
  });
9037
9576
  }
9038
- blend(entityType, entityId, inputs) {
9039
- const cargoInputs = inputs.map((i) => exports.ServerTypes.cargo_item.from(i));
9577
+ blend(entityId, inputs) {
9040
9578
  return this.server.action('blend', {
9041
- entity_type: entityType,
9042
9579
  id: antelope.UInt64.from(entityId),
9043
- inputs: cargoInputs,
9580
+ inputs,
9044
9581
  });
9045
9582
  }
9046
- deploy(entityType, entityId, packedItemId, stats) {
9583
+ deploy(entityId, ref) {
9047
9584
  return this.server.action('deploy', {
9048
- entity_type: entityType,
9049
9585
  id: antelope.UInt64.from(entityId),
9050
- packed_item_id: antelope.UInt16.from(packedItemId),
9051
- stats: antelope.UInt64.from(stats),
9586
+ ref,
9052
9587
  });
9053
9588
  }
9054
- addmodule(entityType, entityId, moduleIndex, moduleCargoId, targetCargoId = antelope.UInt64.from(0)) {
9589
+ addmodule(entityId, moduleIndex, moduleRef, targetRef = null) {
9055
9590
  return this.server.action('addmodule', {
9056
- entity_type: entityType,
9057
9591
  entity_id: antelope.UInt64.from(entityId),
9058
9592
  module_index: moduleIndex,
9059
- module_cargo_id: antelope.UInt64.from(moduleCargoId),
9060
- target_cargo_id: antelope.UInt64.from(targetCargoId),
9593
+ module_ref: moduleRef,
9594
+ target_ref: targetRef ?? undefined,
9061
9595
  });
9062
9596
  }
9063
- rmmodule(entityType, entityId, moduleIndex, targetCargoId = antelope.UInt64.from(0)) {
9597
+ rmmodule(entityId, moduleIndex, targetRef = null) {
9064
9598
  return this.server.action('rmmodule', {
9065
- entity_type: entityType,
9066
9599
  entity_id: antelope.UInt64.from(entityId),
9067
9600
  module_index: moduleIndex,
9068
- target_cargo_id: antelope.UInt64.from(targetCargoId),
9601
+ target_ref: targetRef ?? undefined,
9069
9602
  });
9070
9603
  }
9071
- wrap(owner, entityType, entityId, cargoId, quantity) {
9604
+ wrap(owner, entityId, nexusId, items) {
9072
9605
  return this.server.action('wrap', {
9073
9606
  owner: antelope.Name.from(owner),
9074
- entity_type: entityType,
9075
9607
  entity_id: antelope.UInt64.from(entityId),
9076
- cargo_id: antelope.UInt64.from(cargoId),
9077
- quantity: antelope.UInt64.from(quantity),
9608
+ nexus_id: antelope.UInt64.from(nexusId),
9609
+ items,
9610
+ });
9611
+ }
9612
+ undeploy(hostId, targetId) {
9613
+ return this.server.action('undeploy', {
9614
+ host_id: antelope.UInt64.from(hostId),
9615
+ target_id: antelope.UInt64.from(targetId),
9616
+ });
9617
+ }
9618
+ wrapEntity(entityId, nexusId) {
9619
+ return this.server.action('wrapentity', {
9620
+ entity_id: antelope.UInt64.from(entityId),
9621
+ nexus_id: antelope.UInt64.from(nexusId),
9622
+ });
9623
+ }
9624
+ demolish(entityId) {
9625
+ return this.server.action('demolish', {
9626
+ entity_id: antelope.UInt64.from(entityId),
9078
9627
  });
9079
9628
  }
9080
9629
  joinGame(account, companyName) {
@@ -9103,9 +9652,15 @@ class WebSocketConnection {
9103
9652
  this._state = 'disconnected';
9104
9653
  this.shouldReconnect = true;
9105
9654
  this.sendQueue = [];
9655
+ this.pingTimer = null;
9656
+ this.staleTimer = null;
9106
9657
  this.url = options.url;
9107
9658
  this.onMessage = options.onMessage;
9108
9659
  this.onStateChange = options.onStateChange;
9660
+ this.minReconnectDelay =
9661
+ options.minReconnectDelay ?? WebSocketConnection.DEFAULT_MIN_RECONNECT_DELAY;
9662
+ this.pingIntervalMs = options.pingIntervalMs ?? WebSocketConnection.DEFAULT_PING_INTERVAL_MS;
9663
+ this.pongTimeoutMs = options.pongTimeoutMs ?? WebSocketConnection.DEFAULT_PONG_TIMEOUT_MS;
9109
9664
  }
9110
9665
  get state() {
9111
9666
  return this._state;
@@ -9134,8 +9689,10 @@ class WebSocketConnection {
9134
9689
  this.ws.readyState === WebSocket.OPEN) {
9135
9690
  this.ws.send(this.sendQueue.shift());
9136
9691
  }
9692
+ this.startHeartbeat();
9137
9693
  };
9138
9694
  this.ws.onmessage = (event) => {
9695
+ this.resetStaleTimer();
9139
9696
  try {
9140
9697
  const message = JSON.parse(event.data);
9141
9698
  this.onMessage(message);
@@ -9145,6 +9702,7 @@ class WebSocketConnection {
9145
9702
  }
9146
9703
  };
9147
9704
  this.ws.onclose = () => {
9705
+ this.stopHeartbeat();
9148
9706
  this.ws = null;
9149
9707
  this.sendQueue.length = 0;
9150
9708
  if (this.shouldReconnect) {
@@ -9169,7 +9727,7 @@ class WebSocketConnection {
9169
9727
  if (this.reconnectTimeout) {
9170
9728
  return;
9171
9729
  }
9172
- const delay = Math.min(WebSocketConnection.MIN_RECONNECT_DELAY *
9730
+ const delay = Math.min(this.minReconnectDelay *
9173
9731
  WebSocketConnection.RECONNECT_MULTIPLIER ** this.reconnectAttempts, WebSocketConnection.MAX_RECONNECT_DELAY);
9174
9732
  debug(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts + 1})`);
9175
9733
  this.reconnectTimeout = setTimeout(() => {
@@ -9184,6 +9742,7 @@ class WebSocketConnection {
9184
9742
  clearTimeout(this.reconnectTimeout);
9185
9743
  this.reconnectTimeout = null;
9186
9744
  }
9745
+ this.stopHeartbeat();
9187
9746
  if (this.ws) {
9188
9747
  this.ws.close();
9189
9748
  this.ws = null;
@@ -9191,6 +9750,34 @@ class WebSocketConnection {
9191
9750
  this.sendQueue.length = 0;
9192
9751
  this.setState('disconnected');
9193
9752
  }
9753
+ startHeartbeat() {
9754
+ this.stopHeartbeat();
9755
+ this.resetStaleTimer();
9756
+ this.pingTimer = setInterval(() => {
9757
+ if (this.ws && this.ws.readyState === WebSocket.OPEN) {
9758
+ this.ws.send(JSON.stringify({ type: 'ping' }));
9759
+ }
9760
+ }, this.pingIntervalMs);
9761
+ }
9762
+ stopHeartbeat() {
9763
+ if (this.pingTimer) {
9764
+ clearInterval(this.pingTimer);
9765
+ this.pingTimer = null;
9766
+ }
9767
+ if (this.staleTimer) {
9768
+ clearTimeout(this.staleTimer);
9769
+ this.staleTimer = null;
9770
+ }
9771
+ }
9772
+ resetStaleTimer() {
9773
+ if (this.staleTimer)
9774
+ clearTimeout(this.staleTimer);
9775
+ this.staleTimer = setTimeout(() => {
9776
+ debug('No frames within ping interval + pong timeout — forcing reconnect');
9777
+ if (this.ws)
9778
+ this.ws.close();
9779
+ }, this.pingIntervalMs + this.pongTimeoutMs);
9780
+ }
9194
9781
  close() {
9195
9782
  this.disconnect();
9196
9783
  }
@@ -9206,9 +9793,11 @@ class WebSocketConnection {
9206
9793
  return this._state === 'connected';
9207
9794
  }
9208
9795
  }
9209
- WebSocketConnection.MIN_RECONNECT_DELAY = 1000;
9796
+ WebSocketConnection.DEFAULT_MIN_RECONNECT_DELAY = 1000;
9210
9797
  WebSocketConnection.MAX_RECONNECT_DELAY = 30000;
9211
9798
  WebSocketConnection.RECONNECT_MULTIPLIER = 2;
9799
+ WebSocketConnection.DEFAULT_PING_INTERVAL_MS = 25000;
9800
+ WebSocketConnection.DEFAULT_PONG_TIMEOUT_MS = 10000;
9212
9801
 
9213
9802
  function mapEntity(ei) {
9214
9803
  if (ei.type.equals('ship'))
@@ -9237,9 +9826,14 @@ class SubscriptionsManager {
9237
9826
  this.entitySubs = new Map();
9238
9827
  this.boundsSubs = new Map();
9239
9828
  this.subCounter = 0;
9829
+ this.hasConnected = false;
9240
9830
  this.conn = new WebSocketConnection({
9241
9831
  url: opts.url,
9242
9832
  onMessage: (m) => this.onMessage(m),
9833
+ onStateChange: (s) => this.onStateChange(s),
9834
+ minReconnectDelay: opts.minReconnectDelay,
9835
+ pingIntervalMs: opts.pingIntervalMs,
9836
+ pongTimeoutMs: opts.pongTimeoutMs,
9243
9837
  });
9244
9838
  this.conn.connect();
9245
9839
  }
@@ -9296,6 +9890,9 @@ class SubscriptionsManager {
9296
9890
  current: new Map(),
9297
9891
  };
9298
9892
  this.boundsSubs.set(subId, {
9893
+ bounds,
9894
+ owner: handlers.owner,
9895
+ prioritizeOwner: handlers.prioritizeOwner,
9299
9896
  onSnapshot: handlers.onSnapshot,
9300
9897
  onUpdate: handlers.onUpdate,
9301
9898
  onBoundsDelta: handlers.onBoundsDelta,
@@ -9304,14 +9901,67 @@ class SubscriptionsManager {
9304
9901
  this.sendMessage(msg);
9305
9902
  return handle;
9306
9903
  }
9904
+ subscribeOwner(owner, handlers = {}) {
9905
+ const subId = this.generateSubID('own');
9906
+ const msg = {
9907
+ type: 'subscribe',
9908
+ sub_id: subId,
9909
+ owner,
9910
+ };
9911
+ const handle = {
9912
+ subId,
9913
+ unsubscribe: () => this.unsubscribeBounds(subId),
9914
+ current: new Map(),
9915
+ };
9916
+ this.boundsSubs.set(subId, {
9917
+ bounds: undefined,
9918
+ owner,
9919
+ prioritizeOwner: undefined,
9920
+ onSnapshot: handlers.onSnapshot,
9921
+ onUpdate: handlers.onUpdate,
9922
+ handle,
9923
+ });
9924
+ this.sendMessage(msg);
9925
+ return handle;
9926
+ }
9307
9927
  unsubscribeBounds(subId) {
9308
9928
  this.boundsSubs.delete(subId);
9309
9929
  this.sendMessage({ type: 'unsubscribe', sub_id: subId });
9310
9930
  }
9311
9931
  updateBounds(subId, bounds) {
9932
+ const entry = this.boundsSubs.get(subId);
9933
+ if (entry)
9934
+ entry.bounds = bounds;
9312
9935
  const msg = { type: 'update_bounds', sub_id: subId, bounds };
9313
9936
  this.sendMessage(msg);
9314
9937
  }
9938
+ onStateChange(state) {
9939
+ if (state !== 'connected')
9940
+ return;
9941
+ if (!this.hasConnected) {
9942
+ this.hasConnected = true;
9943
+ return;
9944
+ }
9945
+ for (const [subId, entry] of this.entitySubs) {
9946
+ const msg = {
9947
+ type: 'subscribe_entity',
9948
+ sub_id: subId,
9949
+ entity_type: entry.type,
9950
+ entity_id: entry.id,
9951
+ };
9952
+ this.sendMessage(msg);
9953
+ }
9954
+ for (const [subId, entry] of this.boundsSubs) {
9955
+ const msg = {
9956
+ type: 'subscribe',
9957
+ sub_id: subId,
9958
+ bounds: entry.bounds,
9959
+ owner: entry.owner,
9960
+ prioritize_owner: entry.prioritizeOwner,
9961
+ };
9962
+ this.sendMessage(msg);
9963
+ }
9964
+ }
9315
9965
  onMessage(msg) {
9316
9966
  switch (msg.type) {
9317
9967
  case 'snapshot':
@@ -9573,15 +10223,22 @@ function assignModulesToSlots(packedEntityItemId, modules, entityLabel) {
9573
10223
  installed: r.installed,
9574
10224
  }));
9575
10225
  }
9576
- function decodePackedInput(m) {
9577
- return {
9578
- itemId: Number(antelope.UInt16.from(m.itemId).value.toString()),
9579
- stats: BigInt(antelope.UInt64.from(m.stats).toString()),
9580
- };
10226
+ function toInstalledModules(entries) {
10227
+ const installed = [];
10228
+ entries.forEach((entry, slotIndex) => {
10229
+ if (!entry.installed)
10230
+ return;
10231
+ installed.push({
10232
+ slotIndex,
10233
+ itemId: Number(antelope.UInt16.from(entry.installed.item_id).value.toString()),
10234
+ stats: BigInt(antelope.UInt64.from(entry.installed.stats).toString()),
10235
+ });
10236
+ });
10237
+ return installed;
9581
10238
  }
9582
- function computeStorageBonus(decoded, baseCapacity) {
10239
+ function computeStorageBonus(modules, baseCapacity) {
9583
10240
  let totalBonus = 0;
9584
- for (const m of decoded) {
10241
+ for (const m of modules) {
9585
10242
  if (getModuleCapabilityType(m.itemId) !== MODULE_STORAGE)
9586
10243
  continue;
9587
10244
  const stats = decodeCraftedItemStats(m.itemId, m.stats);
@@ -9590,10 +10247,10 @@ function computeStorageBonus(decoded, baseCapacity) {
9590
10247
  }
9591
10248
  return totalBonus;
9592
10249
  }
9593
- function deriveShipFromModules(modules, baseCapacity) {
9594
- const decoded = modules.map(decodePackedInput);
9595
- const capabilities = computeShipCapabilities(decoded);
9596
- const totalBonus = computeStorageBonus(decoded, baseCapacity);
10250
+ function deriveShipFromModules(moduleEntries, layout, baseCapacity) {
10251
+ const installed = toInstalledModules(moduleEntries);
10252
+ const capabilities = computeShipCapabilities(installed, layout);
10253
+ const totalBonus = computeStorageBonus(installed, baseCapacity);
9597
10254
  return { capabilities, finalCapacity: baseCapacity + totalBonus };
9598
10255
  }
9599
10256
  function makeShip(state) {
@@ -9617,9 +10274,10 @@ function makeShip(state) {
9617
10274
  if (state.schedule)
9618
10275
  info.schedule = state.schedule;
9619
10276
  let moduleEntries = [];
10277
+ const shipLayout = getEntityLayout(ITEM_SHIP_T1_PACKED)?.slots ?? [];
9620
10278
  if (state.modules && state.modules.length > 0) {
9621
10279
  moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, state.modules, 'Ship T1');
9622
- const { capabilities, finalCapacity } = deriveShipFromModules(state.modules, state.capacity ?? 0);
10280
+ const { capabilities, finalCapacity } = deriveShipFromModules(moduleEntries, shipLayout, state.capacity ?? 0);
9623
10281
  if (capabilities.engines)
9624
10282
  info.engines = capabilities.engines;
9625
10283
  if (capabilities.generator)
@@ -9664,13 +10322,14 @@ function makeWarehouse(state) {
9664
10322
  if (state.schedule)
9665
10323
  info.schedule = state.schedule;
9666
10324
  let moduleEntries = [];
10325
+ const warehouseLayout = getEntityLayout(ITEM_WAREHOUSE_T1_PACKED)?.slots ?? [];
9667
10326
  if (state.modules && state.modules.length > 0) {
9668
10327
  moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, state.modules, 'Warehouse T1');
9669
- const decoded = state.modules.map(decodePackedInput);
9670
- const capabilities = computeWarehouseCapabilities(decoded);
10328
+ const installed = toInstalledModules(moduleEntries);
10329
+ const capabilities = computeWarehouseCapabilities(installed, warehouseLayout);
9671
10330
  if (capabilities.loaders)
9672
10331
  info.loaders = capabilities.loaders;
9673
- const totalBonus = computeStorageBonus(decoded, state.capacity);
10332
+ const totalBonus = computeStorageBonus(installed, state.capacity);
9674
10333
  info.capacity = antelope.UInt32.from(state.capacity + totalBonus);
9675
10334
  }
9676
10335
  else {
@@ -9680,6 +10339,42 @@ function makeWarehouse(state) {
9680
10339
  const entityInfo = exports.ServerTypes.entity_info.from(info);
9681
10340
  return new Warehouse(entityInfo);
9682
10341
  }
10342
+ function makeExtractor(state) {
10343
+ const info = {
10344
+ type: antelope.Name.from('extractor'),
10345
+ id: antelope.UInt64.from(state.id),
10346
+ owner: antelope.Name.from(state.owner),
10347
+ entity_name: state.name,
10348
+ coordinates: exports.ServerTypes.coordinates.from(state.coordinates),
10349
+ cargomass: antelope.UInt32.from(0),
10350
+ cargo: state.cargo || [],
10351
+ is_idle: !state.schedule,
10352
+ current_task_elapsed: antelope.UInt32.from(0),
10353
+ current_task_remaining: antelope.UInt32.from(0),
10354
+ pending_tasks: [],
10355
+ };
10356
+ if (state.hullmass !== undefined)
10357
+ info.hullmass = antelope.UInt32.from(state.hullmass);
10358
+ if (state.energy !== undefined)
10359
+ info.energy = antelope.UInt16.from(state.energy);
10360
+ if (state.schedule)
10361
+ info.schedule = state.schedule;
10362
+ if (state.capacity !== undefined)
10363
+ info.capacity = antelope.UInt32.from(state.capacity);
10364
+ const moduleEntries = assignModulesToSlots(ITEM_EXTRACTOR_T1_PACKED, state.modules ?? [], 'Extractor T1');
10365
+ if (state.modules && state.modules.length > 0) {
10366
+ const layout = getEntityLayout(ITEM_EXTRACTOR_T1_PACKED)?.slots ?? [];
10367
+ const installed = toInstalledModules(moduleEntries);
10368
+ const capabilities = computeExtractorCapabilities(installed, layout);
10369
+ if (capabilities.generator)
10370
+ info.generator = capabilities.generator;
10371
+ if (capabilities.gatherer)
10372
+ info.gatherer = capabilities.gatherer;
10373
+ }
10374
+ info.modules = moduleEntries;
10375
+ const entityInfo = exports.ServerTypes.entity_info.from(info);
10376
+ return new Extractor(entityInfo);
10377
+ }
9683
10378
  function makeContainer(state) {
9684
10379
  const entityInfo = exports.ServerTypes.entity_info.from({
9685
10380
  type: antelope.Name.from('container'),
@@ -9761,6 +10456,149 @@ var cargoUtils = /*#__PURE__*/Object.freeze({
9761
10456
  afterRemoveAllItems: afterRemoveAllItems
9762
10457
  });
9763
10458
 
10459
+ function cargoRef(src) {
10460
+ return {
10461
+ item_id: src.item_id,
10462
+ stats: src.stats,
10463
+ modules: src.modules ?? [],
10464
+ };
10465
+ }
10466
+ function cargoItem(src, quantity) {
10467
+ return {
10468
+ ...cargoRef(src),
10469
+ quantity,
10470
+ };
10471
+ }
10472
+
10473
+ function toChange(item, direction) {
10474
+ return {
10475
+ direction,
10476
+ item_id: Number(item.item_id),
10477
+ stats: BigInt(item.stats.toString()),
10478
+ modules: item.modules ?? [],
10479
+ quantity: Number(item.quantity),
10480
+ };
10481
+ }
10482
+ function taskCargoChanges(task) {
10483
+ const items = task.cargo ?? [];
10484
+ if (items.length === 0)
10485
+ return [];
10486
+ switch (Number(task.type)) {
10487
+ case exports.TaskType.LOAD:
10488
+ case exports.TaskType.UNWRAP:
10489
+ return items.map((i) => toChange(i, 'in'));
10490
+ case exports.TaskType.GATHER:
10491
+ return task.entitytarget ? [] : items.map((i) => toChange(i, 'in'));
10492
+ case exports.TaskType.UNLOAD:
10493
+ case exports.TaskType.WRAP:
10494
+ return items.map((i) => toChange(i, 'out'));
10495
+ case exports.TaskType.CRAFT:
10496
+ return [
10497
+ ...items.slice(0, -1).map((i) => toChange(i, 'out')),
10498
+ toChange(items[items.length - 1], 'in'),
10499
+ ];
10500
+ default:
10501
+ return [];
10502
+ }
10503
+ }
10504
+
10505
+ const ENTITY_SHIP = antelope.Name.from('ship');
10506
+ const ENTITY_WAREHOUSE = antelope.Name.from('warehouse');
10507
+ const ENTITY_EXTRACTOR = antelope.Name.from('extractor');
10508
+ const ENTITY_CONTAINER = antelope.Name.from('container');
10509
+ exports.EntityClass = void 0;
10510
+ (function (EntityClass) {
10511
+ EntityClass[EntityClass["OrbitalVessel"] = 0] = "OrbitalVessel";
10512
+ EntityClass[EntityClass["PlanetaryStructure"] = 1] = "PlanetaryStructure";
10513
+ })(exports.EntityClass || (exports.EntityClass = {}));
10514
+ function getEntityClass(entityType) {
10515
+ const typeName = typeof entityType === 'string' ? entityType : entityType.toString();
10516
+ switch (typeName) {
10517
+ case 'ship':
10518
+ case 'container':
10519
+ return exports.EntityClass.OrbitalVessel;
10520
+ case 'warehouse':
10521
+ case 'extractor':
10522
+ return exports.EntityClass.PlanetaryStructure;
10523
+ default:
10524
+ throw new Error(`Entity type has no class: ${typeName}`);
10525
+ }
10526
+ }
10527
+ function getPackedEntityType(itemId) {
10528
+ switch (itemId) {
10529
+ case ITEM_SHIP_T1_PACKED:
10530
+ return ENTITY_SHIP;
10531
+ case ITEM_CONTAINER_T1_PACKED:
10532
+ case ITEM_CONTAINER_T2_PACKED:
10533
+ return ENTITY_CONTAINER;
10534
+ case ITEM_WAREHOUSE_T1_PACKED:
10535
+ return ENTITY_WAREHOUSE;
10536
+ case ITEM_EXTRACTOR_T1_PACKED:
10537
+ return ENTITY_EXTRACTOR;
10538
+ default:
10539
+ return null;
10540
+ }
10541
+ }
10542
+ const shipTraits = {
10543
+ typeName: ENTITY_SHIP,
10544
+ isMovable: true,
10545
+ hasEnergy: true,
10546
+ hasLoaders: true,
10547
+ hasModules: true,
10548
+ notFoundError: 'ship not found',
10549
+ };
10550
+ const warehouseTraits = {
10551
+ typeName: ENTITY_WAREHOUSE,
10552
+ isMovable: false,
10553
+ hasEnergy: false,
10554
+ hasLoaders: true,
10555
+ hasModules: true,
10556
+ notFoundError: 'warehouse not found',
10557
+ };
10558
+ const extractorTraits = {
10559
+ typeName: ENTITY_EXTRACTOR,
10560
+ isMovable: false,
10561
+ hasEnergy: true,
10562
+ hasLoaders: false,
10563
+ hasModules: true,
10564
+ notFoundError: 'extractor not found',
10565
+ };
10566
+ const containerTraits = {
10567
+ typeName: ENTITY_CONTAINER,
10568
+ isMovable: true,
10569
+ hasEnergy: false,
10570
+ hasLoaders: false,
10571
+ hasModules: false,
10572
+ notFoundError: 'container not found',
10573
+ };
10574
+ function getEntityTraits(entityType) {
10575
+ const typeName = typeof entityType === 'string' ? entityType : entityType.toString();
10576
+ switch (typeName) {
10577
+ case 'ship':
10578
+ return shipTraits;
10579
+ case 'warehouse':
10580
+ return warehouseTraits;
10581
+ case 'extractor':
10582
+ return extractorTraits;
10583
+ case 'container':
10584
+ return containerTraits;
10585
+ default:
10586
+ throw new Error(`Unknown entity type: ${typeName}`);
10587
+ }
10588
+ }
10589
+ function isShip(entity) {
10590
+ return entity.type?.equals(ENTITY_SHIP) ?? false;
10591
+ }
10592
+ function isWarehouse(entity) {
10593
+ return entity.type?.equals(ENTITY_WAREHOUSE) ?? false;
10594
+ }
10595
+ function isExtractor(entity) {
10596
+ return entity.type?.equals(ENTITY_EXTRACTOR) ?? false;
10597
+ }
10598
+ function isContainer(entity) {
10599
+ return entity.type?.equals(ENTITY_CONTAINER) ?? false;
10600
+ }
10601
+
9764
10602
  function canMove(e) {
9765
10603
  return 'engines' in e && 'generator' in e && 'energy' in e;
9766
10604
  }
@@ -9833,34 +10671,96 @@ function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
9833
10671
  HAULER_EFFICIENCY_DENOM);
9834
10672
  return Math.floor((totalThrust * 1000) / penaltyMilli);
9835
10673
  }
9836
- function computeHaulerDrain(distance, drain, haulCount) {
10674
+ function computeHaulerDrain$1(distance, drain, haulCount) {
9837
10675
  return Math.floor(distance / PRECISION) * drain * haulCount;
9838
10676
  }
9839
10677
 
9840
- const ITEM_TYPE_RESOURCE = 0;
9841
- const ITEM_TYPE_COMPONENT = 1;
9842
- const ITEM_TYPE_MODULE = 2;
9843
- const ITEM_TYPE_ENTITY = 3;
9844
- function itemTypeCode(id) {
9845
- switch (itemCategory(id)) {
9846
- case 'resource':
9847
- return ITEM_TYPE_RESOURCE;
9848
- case 'component':
9849
- return ITEM_TYPE_COMPONENT;
9850
- case 'module':
9851
- return ITEM_TYPE_MODULE;
9852
- case 'entity':
9853
- return ITEM_TYPE_ENTITY;
9854
- }
9855
- }
9856
- function itemTier(id) {
9857
- if (id < 10000)
9858
- return 0;
9859
- return Math.floor(id / 10000);
9860
- }
9861
- function itemOffset(id) {
9862
- return id % 10000;
9863
- }
10678
+ const categoryColors = {
10679
+ ore: '#C26D3F',
10680
+ crystal: '#4ADBFF',
10681
+ gas: '#B8E4A0',
10682
+ regolith: '#C4A57B',
10683
+ biomass: '#5A8B3E',
10684
+ };
10685
+ const tierColors = {
10686
+ 1: '#8b8b8b',
10687
+ 2: '#4ade80',
10688
+ 3: '#818cf8',
10689
+ 4: '#c084fc',
10690
+ 5: '#fbbf24',
10691
+ 6: '#f97316',
10692
+ 7: '#ef4444',
10693
+ 8: '#ec4899',
10694
+ 9: '#06b6d4',
10695
+ 10: '#ffffff',
10696
+ };
10697
+ const categoryIcons = {
10698
+ ore: '⬡',
10699
+ crystal: '◈',
10700
+ gas: '◎',
10701
+ regolith: '■',
10702
+ biomass: '❋',
10703
+ };
10704
+ const categoryIconShapes = {
10705
+ ore: 'hex',
10706
+ crystal: 'diamond',
10707
+ gas: 'circle',
10708
+ regolith: 'square',
10709
+ biomass: 'star',
10710
+ };
10711
+ const componentIcon = '▣';
10712
+ const moduleIcon = '⬢';
10713
+ const itemAbbreviations = {
10714
+ 10001: 'HP',
10715
+ 10002: 'CL',
10716
+ 10003: 'TC',
10717
+ 10004: 'PC',
10718
+ 10005: 'DS',
10719
+ 10006: 'EP',
10720
+ 10007: 'CA',
10721
+ 10008: 'TB',
10722
+ 10009: 'RC',
10723
+ 10010: 'FA',
10724
+ 10100: 'EN',
10725
+ 10101: 'GN',
10726
+ 10102: 'EX',
10727
+ 10103: 'LD',
10728
+ 10104: 'MF',
10729
+ 10105: 'ST',
10730
+ 10106: 'HL',
10731
+ 10107: 'WP',
10732
+ 10200: 'CT',
10733
+ 10201: 'SH',
10734
+ 10202: 'WH',
10735
+ 20001: 'HP',
10736
+ 20002: 'CL',
10737
+ 20200: 'CT',
10738
+ };
10739
+
10740
+ const ITEM_TYPE_RESOURCE = 0;
10741
+ const ITEM_TYPE_COMPONENT = 1;
10742
+ const ITEM_TYPE_MODULE = 2;
10743
+ const ITEM_TYPE_ENTITY = 3;
10744
+ function itemTypeCode(id) {
10745
+ switch (itemCategory(id)) {
10746
+ case 'resource':
10747
+ return ITEM_TYPE_RESOURCE;
10748
+ case 'component':
10749
+ return ITEM_TYPE_COMPONENT;
10750
+ case 'module':
10751
+ return ITEM_TYPE_MODULE;
10752
+ case 'entity':
10753
+ return ITEM_TYPE_ENTITY;
10754
+ }
10755
+ }
10756
+ function itemTier(id) {
10757
+ if (id < 10000)
10758
+ return 0;
10759
+ return Math.floor(id / 10000);
10760
+ }
10761
+ function itemOffset(id) {
10762
+ return id % 10000;
10763
+ }
9864
10764
  function itemCategory(id) {
9865
10765
  if (id < 10000)
9866
10766
  return 'resource';
@@ -9983,6 +10883,11 @@ const capabilityNames = [
9983
10883
  const capabilityAttributes = [
9984
10884
  { capability: 'Hull', attribute: 'mass', description: 'Total mass of the hull' },
9985
10885
  { capability: 'Storage', attribute: 'capacity', description: 'Maximum mass that can be stored' },
10886
+ {
10887
+ capability: 'Storage',
10888
+ attribute: 'bonus',
10889
+ description: 'Capacity bonus added by an installed Storage module',
10890
+ },
9986
10891
  { capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
9987
10892
  { capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
9988
10893
  { capability: 'Energy', attribute: 'capacity', description: 'Maximum energy storage' },
@@ -10020,338 +10925,151 @@ const capabilityAttributes = [
10020
10925
  description: 'Energy consumed per target during haul-beam operation',
10021
10926
  },
10022
10927
  ];
10023
- const statMappings = [
10024
- {
10025
- stat: 'Strength',
10026
- capability: 'Gathering',
10027
- attribute: 'yield',
10028
- rationale: 'Raw mechanical force drives faster gathering',
10029
- },
10030
- {
10031
- stat: 'Strength',
10032
- capability: 'Storage',
10033
- attribute: 'capacity',
10034
- rationale: 'Stronger walls hold more capacity per mass',
10035
- },
10036
- {
10037
- stat: 'Strength',
10038
- capability: 'Launch',
10039
- attribute: 'capacity',
10040
- rationale: 'Stronger housing handles larger launch loads',
10041
- },
10042
- {
10043
- stat: 'Tolerance',
10044
- capability: 'Movement',
10045
- attribute: 'thrust',
10046
- rationale: 'Engine components that tolerate more can push harder',
10047
- },
10048
- {
10049
- stat: 'Tolerance',
10050
- capability: 'Energy',
10051
- attribute: 'recharge',
10052
- rationale: 'Generator housing withstands stress for faster recharge',
10053
- },
10054
- {
10055
- stat: 'Tolerance',
10056
- capability: 'Gathering',
10057
- attribute: 'depth',
10058
- rationale: 'Housing withstands pressure/heat at extreme depths',
10059
- },
10060
- {
10061
- stat: 'Tolerance',
10062
- capability: 'Warp',
10063
- attribute: 'range',
10064
- rationale: 'Warp drive housing withstands extreme forces',
10065
- },
10066
- {
10067
- stat: 'Density',
10068
- capability: 'Hull',
10069
- attribute: 'mass',
10070
- rationale: 'Lighter metal = lighter hull',
10071
- },
10072
- {
10073
- stat: 'Density',
10074
- capability: 'Loader',
10075
- attribute: 'mass',
10076
- rationale: 'Lighter metal = lighter loader units',
10077
- },
10078
- {
10079
- stat: 'Density',
10080
- capability: 'Movement',
10081
- attribute: 'drain',
10082
- rationale: 'Lighter components require less energy to move',
10083
- },
10084
- {
10085
- stat: 'Conductivity',
10086
- capability: 'Movement',
10087
- attribute: 'drain',
10088
- rationale: 'Efficient energy transfer reduces movement energy cost',
10089
- },
10090
- {
10091
- stat: 'Conductivity',
10092
- capability: 'Gathering',
10093
- attribute: 'drain',
10094
- rationale: 'Efficient energy transfer reduces gathering energy cost',
10095
- },
10096
- {
10097
- stat: 'Conductivity',
10098
- capability: 'Crafter',
10099
- attribute: 'drain',
10100
- rationale: 'Efficient energy transfer reduces crafting energy cost',
10101
- },
10102
- {
10103
- stat: 'Conductivity',
10104
- capability: 'Energy',
10105
- attribute: 'recharge',
10106
- rationale: 'Better conductivity speeds energy flow during recharge',
10107
- },
10108
- {
10109
- stat: 'Ductility',
10110
- capability: 'Crafter',
10111
- attribute: 'quality',
10112
- rationale: 'Precise shaping enables tighter crafting tolerances',
10113
- },
10114
- {
10115
- stat: 'Ductility',
10116
- capability: 'Gathering',
10117
- attribute: 'yield',
10118
- rationale: 'Precisely shaped conduit components gather faster',
10119
- },
10120
- {
10121
- stat: 'Ductility',
10122
- capability: 'Storage',
10123
- attribute: 'capacity',
10124
- rationale: 'Precision-formed container walls maximize volume',
10125
- },
10126
- {
10127
- stat: 'Ductility',
10128
- capability: 'Loader',
10129
- attribute: 'mass',
10130
- rationale: 'Precision-formed precious metal reduces loader unit mass',
10131
- },
10132
- {
10133
- stat: 'Reflectivity',
10134
- capability: 'Gathering',
10135
- attribute: 'depth',
10136
- rationale: 'Reflective heat shielding protects equipment at depth',
10137
- },
10138
- {
10139
- stat: 'Reflectivity',
10140
- capability: 'Launch',
10141
- attribute: 'range',
10142
- rationale: 'Reflective surfaces focus electromagnetic launch energy',
10143
- },
10144
- {
10145
- stat: 'Volatility',
10146
- capability: 'Gathering',
10147
- attribute: 'yield',
10148
- rationale: 'Energy release powers faster gathering',
10149
- },
10150
- {
10151
- stat: 'Volatility',
10152
- capability: 'Movement',
10153
- attribute: 'thrust',
10154
- rationale: 'Energy release drives propulsion force',
10155
- },
10156
- {
10157
- stat: 'Volatility',
10158
- capability: 'Loader',
10159
- attribute: 'thrust',
10160
- rationale: 'Energy release powers loader motors',
10161
- },
10162
- {
10163
- stat: 'Volatility',
10164
- capability: 'Launch',
10165
- attribute: 'capacity',
10166
- rationale: 'Energy release enables launching heavier payloads',
10167
- },
10168
- {
10169
- stat: 'Reactivity',
10170
- capability: 'Crafter',
10171
- attribute: 'speed',
10172
- rationale: 'Reactive gases accelerate chemical/thermal processing',
10173
- },
10174
- {
10175
- stat: 'Reactivity',
10176
- capability: 'Gathering',
10177
- attribute: 'speed',
10178
- rationale: 'Reactive gases manage heat/friction during gathering',
10179
- },
10180
- {
10181
- stat: 'Reactivity',
10182
- capability: 'Launch',
10183
- attribute: 'drain',
10184
- rationale: 'Reactive gas medium reduces electromagnetic resistance',
10185
- },
10186
- {
10187
- stat: 'Thermal',
10188
- capability: 'Crafter',
10189
- attribute: 'quality',
10190
- rationale: 'Precise thermal control during fabrication',
10191
- },
10192
- {
10193
- stat: 'Thermal',
10194
- capability: 'Gathering',
10195
- attribute: 'drain',
10196
- rationale: 'Thermal management reduces energy waste during gathering',
10197
- },
10198
- {
10199
- stat: 'Thermal',
10200
- capability: 'Energy',
10201
- attribute: 'capacity',
10202
- rationale: 'Thermal management enables denser energy storage',
10203
- },
10204
- {
10205
- stat: 'Resonance',
10206
- capability: 'Energy',
10207
- attribute: 'capacity',
10208
- rationale: 'Resonating crystals store energy in fields',
10209
- },
10210
- {
10211
- stat: 'Resonance',
10212
- capability: 'Warp',
10213
- attribute: 'range',
10214
- rationale: 'Resonant crystals amplify warp field projection',
10215
- },
10216
- {
10217
- stat: 'Resonance',
10218
- capability: 'Launch',
10219
- attribute: 'range',
10220
- rationale: 'Resonant crystals focus electromagnetic launch field',
10221
- },
10222
- {
10223
- stat: 'Resonance',
10224
- capability: 'Launch',
10225
- attribute: 'capacity',
10226
- rationale: 'Stronger resonant field launches heavier payloads',
10227
- },
10228
- {
10229
- stat: 'Hardness',
10230
- capability: 'Crafter',
10231
- attribute: 'speed',
10232
- rationale: 'Hard tooling surfaces cut and shape materials faster',
10233
- },
10234
- {
10235
- stat: 'Hardness',
10236
- capability: 'Launch',
10237
- attribute: 'drain',
10238
- rationale: 'Hard rail surfaces reduce friction, less energy wasted',
10239
- },
10240
- {
10241
- stat: 'Clarity',
10242
- capability: 'Energy',
10243
- attribute: 'recharge',
10244
- rationale: 'Flawless crystals enable smoother energy flow during recharge',
10245
- },
10246
- {
10247
- stat: 'Clarity',
10248
- capability: 'Crafter',
10249
- attribute: 'quality',
10250
- rationale: 'Precision optics for calibration during fabrication',
10251
- },
10252
- {
10253
- stat: 'Clarity',
10254
- capability: 'Crafter',
10255
- attribute: 'drain',
10256
- rationale: 'Precision computing optimizes energy routing in factory',
10257
- },
10258
- {
10259
- stat: 'Plasticity',
10260
- capability: 'Crafter',
10261
- attribute: 'speed',
10262
- rationale: 'Easily reshaped materials speed up processing',
10263
- },
10264
- {
10265
- stat: 'Plasticity',
10266
- capability: 'Movement',
10267
- attribute: 'thrust',
10268
- rationale: 'Flexible polymer seals reduce friction in propulsion',
10269
- },
10270
- {
10271
- stat: 'Plasticity',
10272
- capability: 'Loader',
10273
- attribute: 'thrust',
10274
- rationale: 'Flexible joints improve loader force transfer',
10275
- },
10276
- {
10277
- stat: 'Insulation',
10278
- capability: 'Movement',
10279
- attribute: 'drain',
10280
- rationale: 'Better insulation reduces energy loss during movement',
10281
- },
10282
- {
10283
- stat: 'Insulation',
10284
- capability: 'Gathering',
10285
- attribute: 'drain',
10286
- rationale: 'Better insulation reduces energy loss during gathering',
10287
- },
10288
- {
10289
- stat: 'Insulation',
10290
- capability: 'Crafter',
10291
- attribute: 'drain',
10292
- rationale: 'Better insulation reduces energy loss during crafting',
10928
+ const invertedAttributes = new Set(['drain', 'mass']);
10929
+ function isInvertedAttribute(attribute) {
10930
+ return invertedAttributes.has(attribute);
10931
+ }
10932
+ function getCapabilityAttributes(capability) {
10933
+ if (capability) {
10934
+ return capabilityAttributes.filter((a) => a.capability === capability);
10935
+ }
10936
+ return capabilityAttributes;
10937
+ }
10938
+
10939
+ const ENTITY_HULL_SLOTS = {
10940
+ 0: { capability: 'Storage', attribute: 'capacity' },
10941
+ 1: { capability: 'Hull', attribute: 'mass' },
10942
+ 2: { capability: 'Storage', attribute: 'capacity' },
10943
+ 3: { capability: 'Storage', attribute: 'capacity' },
10944
+ };
10945
+ const SLOT_FORMULAS = {
10946
+ engine: {
10947
+ 0: { capability: 'Movement', attribute: 'thrust' },
10948
+ 1: { capability: 'Movement', attribute: 'drain' },
10293
10949
  },
10294
- {
10295
- stat: 'Insulation',
10296
- capability: 'Launch',
10297
- attribute: 'drain',
10298
- rationale: 'Better insulation reduces energy loss during launch',
10950
+ generator: {
10951
+ 0: { capability: 'Energy', attribute: 'capacity' },
10952
+ 1: { capability: 'Energy', attribute: 'recharge' },
10299
10953
  },
10300
- {
10301
- stat: 'Purity',
10302
- capability: 'Storage',
10303
- attribute: 'capacity',
10304
- rationale: 'Purer composites make better containers',
10954
+ gatherer: {
10955
+ 0: { capability: 'Gathering', attribute: 'yield' },
10956
+ 1: { capability: 'Gathering', attribute: 'depth' },
10957
+ 3: { capability: 'Gathering', attribute: 'drain' },
10958
+ 4: { capability: 'Gathering', attribute: 'speed' },
10305
10959
  },
10306
- {
10307
- stat: 'Purity',
10308
- capability: 'Gathering',
10309
- attribute: 'speed',
10310
- rationale: 'Purer bio-lubricants reduce friction during gathering',
10960
+ loader: {
10961
+ 0: { capability: 'Loader', attribute: 'mass' },
10962
+ 1: { capability: 'Loader', attribute: 'thrust' },
10311
10963
  },
10312
- {
10313
- stat: 'Purity',
10314
- capability: 'Energy',
10315
- attribute: 'capacity',
10316
- rationale: 'Purer organic electrolytes store more charge',
10964
+ crafter: {
10965
+ 0: { capability: 'Crafter', attribute: 'speed' },
10966
+ 1: { capability: 'Crafter', attribute: 'drain' },
10317
10967
  },
10318
- {
10319
- stat: 'Resonance',
10320
- capability: 'Hauler',
10321
- attribute: 'capacity',
10322
- rationale: 'Resonant field strength determines how many targets the haul beam can lock onto simultaneously.',
10968
+ storage: {
10969
+ 0: { capability: 'Storage', attribute: 'bonus' },
10970
+ 1: { capability: 'Storage', attribute: 'bonus' },
10971
+ 2: { capability: 'Storage', attribute: 'bonus' },
10972
+ 3: { capability: 'Storage', attribute: 'bonus' },
10323
10973
  },
10324
- {
10325
- stat: 'Conductivity',
10326
- capability: 'Hauler',
10327
- attribute: 'efficiency',
10328
- rationale: 'Energy-transfer efficiency reduces the thrust penalty from each hauled target.',
10974
+ hauler: {
10975
+ 0: { capability: 'Hauler', attribute: 'capacity' },
10976
+ 1: { capability: 'Hauler', attribute: 'efficiency' },
10977
+ 2: { capability: 'Hauler', attribute: 'drain' },
10329
10978
  },
10330
- {
10331
- stat: 'Clarity',
10332
- capability: 'Hauler',
10333
- attribute: 'drain',
10334
- rationale: 'Clarity-focused energy routing reduces per-target drain during haul-beam operation.',
10979
+ warp: {
10980
+ 0: { capability: 'Warp', attribute: 'range' },
10335
10981
  },
10336
- ];
10337
- const invertedAttributes = new Set(['drain', 'mass']);
10338
- function isInvertedAttribute(attribute) {
10339
- return invertedAttributes.has(attribute);
10982
+ 'ship-t1': ENTITY_HULL_SLOTS,
10983
+ 'container-t1': ENTITY_HULL_SLOTS,
10984
+ 'warehouse-t1': ENTITY_HULL_SLOTS,
10985
+ 'extractor-t1': ENTITY_HULL_SLOTS,
10986
+ 'container-t2': ENTITY_HULL_SLOTS,
10987
+ };
10988
+
10989
+ const KIND_TO_ITEM_ID = {
10990
+ engine: ITEM_ENGINE_T1,
10991
+ generator: ITEM_GENERATOR_T1,
10992
+ gatherer: ITEM_GATHERER_T1,
10993
+ loader: ITEM_LOADER_T1,
10994
+ crafter: ITEM_CRAFTER_T1,
10995
+ storage: ITEM_STORAGE_T1,
10996
+ hauler: ITEM_HAULER_T1,
10997
+ warp: ITEM_WARP_T1,
10998
+ 'ship-t1': ITEM_SHIP_T1_PACKED,
10999
+ 'container-t1': ITEM_CONTAINER_T1_PACKED,
11000
+ 'warehouse-t1': ITEM_WAREHOUSE_T1_PACKED,
11001
+ 'extractor-t1': ITEM_EXTRACTOR_T1_PACKED,
11002
+ 'container-t2': ITEM_CONTAINER_T2_PACKED,
11003
+ };
11004
+ function isCategoryInput(input) {
11005
+ return 'category' in input;
10340
11006
  }
10341
- function getCapabilityAttributes(capability) {
10342
- if (capability) {
10343
- return capabilityAttributes.filter((a) => a.capability === capability);
11007
+ function traceToRawCategoryStat(recipe, source, visited = new Set()) {
11008
+ const input = recipe.inputs[source.inputIndex];
11009
+ if (!input)
11010
+ return undefined;
11011
+ if (isCategoryInput(input)) {
11012
+ const defs = getStatDefinitions(input.category);
11013
+ return defs[source.statIndex];
10344
11014
  }
10345
- return capabilityAttributes;
11015
+ if (visited.has(input.itemId))
11016
+ return undefined;
11017
+ const subRecipe = getRecipe(input.itemId);
11018
+ if (!subRecipe)
11019
+ return undefined;
11020
+ const subSlot = subRecipe.statSlots[source.statIndex];
11021
+ if (!subSlot)
11022
+ return undefined;
11023
+ const subSource = subSlot.sources[0];
11024
+ if (!subSource)
11025
+ return undefined;
11026
+ const nextVisited = new Set(visited);
11027
+ nextVisited.add(input.itemId);
11028
+ return traceToRawCategoryStat(subRecipe, subSource, nextVisited);
11029
+ }
11030
+ let cached;
11031
+ function deriveStatMappings() {
11032
+ if (cached)
11033
+ return cached;
11034
+ const out = [];
11035
+ const seen = new Set();
11036
+ for (const [kind, slots] of Object.entries(SLOT_FORMULAS)) {
11037
+ const itemId = KIND_TO_ITEM_ID[kind];
11038
+ const recipe = getRecipe(itemId);
11039
+ if (!recipe)
11040
+ continue;
11041
+ for (const [slotIdxStr, consumer] of Object.entries(slots)) {
11042
+ const slotIdx = Number(slotIdxStr);
11043
+ const slot = recipe.statSlots[slotIdx];
11044
+ if (!slot)
11045
+ continue;
11046
+ for (const source of slot.sources) {
11047
+ const stat = traceToRawCategoryStat(recipe, source);
11048
+ if (!stat)
11049
+ continue;
11050
+ const key = `${stat.label}|${consumer.capability}|${consumer.attribute}`;
11051
+ if (seen.has(key))
11052
+ continue;
11053
+ seen.add(key);
11054
+ out.push({
11055
+ stat: stat.label,
11056
+ capability: consumer.capability,
11057
+ attribute: consumer.attribute,
11058
+ });
11059
+ }
11060
+ }
11061
+ }
11062
+ cached = out;
11063
+ return out;
10346
11064
  }
10347
11065
  function getStatMappings() {
10348
- return statMappings;
11066
+ return deriveStatMappings();
10349
11067
  }
10350
11068
  function getStatMappingsForStat(stat) {
10351
- return statMappings.filter((m) => m.stat === stat);
11069
+ return deriveStatMappings().filter((m) => m.stat === stat);
10352
11070
  }
10353
11071
  function getStatMappingsForCapability(capability) {
10354
- return statMappings.filter((m) => m.capability === capability);
11072
+ return deriveStatMappings().filter((m) => m.capability === capability);
10355
11073
  }
10356
11074
 
10357
11075
  function toNum(v) {
@@ -10423,7 +11141,7 @@ function resolveComponent(id, stats) {
10423
11141
  stats: resolvedStats,
10424
11142
  };
10425
11143
  }
10426
- function computeCapabilityGroup(moduleType, stats) {
11144
+ function computeCapabilityGroup(moduleType, stats, tier) {
10427
11145
  switch (moduleType) {
10428
11146
  case MODULE_ENGINE: {
10429
11147
  const caps = computeEngineCapabilities(stats);
@@ -10446,7 +11164,7 @@ function computeCapabilityGroup(moduleType, stats) {
10446
11164
  };
10447
11165
  }
10448
11166
  case MODULE_GATHERER: {
10449
- const caps = computeGathererCapabilities(stats);
11167
+ const caps = computeGathererCapabilities(stats, tier);
10450
11168
  return {
10451
11169
  capability: 'Gatherer',
10452
11170
  attributes: [
@@ -10490,10 +11208,11 @@ function computeCapabilityGroup(moduleType, stats) {
10490
11208
  };
10491
11209
  }
10492
11210
  case MODULE_STORAGE: {
10493
- const str = stats.strength ?? 500;
10494
- const hrd = stats.hardness ?? 500;
10495
- const sat = stats.saturation ?? 500;
10496
- const statSum = str + hrd + sat;
11211
+ const str = stats.strength;
11212
+ const den = stats.density;
11213
+ const hrd = stats.hardness;
11214
+ const sat = stats.saturation;
11215
+ const statSum = str + den + hrd + sat;
10497
11216
  const pct = 10 + Math.floor((statSum * 10) / 2997);
10498
11217
  return { capability: 'Storage', attributes: [{ label: 'Capacity Bonus', value: pct }] };
10499
11218
  }
@@ -10507,7 +11226,7 @@ function resolveModule(id, stats) {
10507
11226
  if (stats !== undefined) {
10508
11227
  const decoded = decodeCraftedItemStats(id, toBigStats(stats));
10509
11228
  const modType = getModuleCapabilityType(id);
10510
- const group = computeCapabilityGroup(modType, decoded);
11229
+ const group = computeCapabilityGroup(modType, decoded, item.tier);
10511
11230
  if (group)
10512
11231
  attributes = [group];
10513
11232
  }
@@ -10528,6 +11247,8 @@ function hullCapsForEntity(itemId, decoded) {
10528
11247
  return computeShipHullCapabilities(decoded);
10529
11248
  case ITEM_WAREHOUSE_T1_PACKED:
10530
11249
  return computeWarehouseHullCapabilities(decoded);
11250
+ case ITEM_EXTRACTOR_T1_PACKED:
11251
+ return computeShipHullCapabilities(decoded);
10531
11252
  case ITEM_CONTAINER_T1_PACKED:
10532
11253
  return computeContainerCapabilities(decoded);
10533
11254
  case ITEM_CONTAINER_T2_PACKED:
@@ -10563,14 +11284,17 @@ function resolveEntity(id, stats, modules) {
10563
11284
  const modStats = BigInt(mod.installed.stats.toString());
10564
11285
  const decodedStats = decodeCraftedItemStats(modItemId, modStats);
10565
11286
  const modType = getModuleCapabilityType(modItemId);
10566
- const group = computeCapabilityGroup(modType, decodedStats);
10567
11287
  let modName = 'Module';
11288
+ let modTier = 1;
10568
11289
  try {
10569
- modName = getItem(modItemId).name;
11290
+ const modItem = getItem(modItemId);
11291
+ modName = modItem.name;
11292
+ modTier = modItem.tier;
10570
11293
  }
10571
11294
  catch {
10572
11295
  modName = itemMetadata[modItemId]?.name ?? 'Module';
10573
11296
  }
11297
+ const group = computeCapabilityGroup(modType, decodedStats, modTier);
10574
11298
  return {
10575
11299
  name: modName,
10576
11300
  installed: true,
@@ -10786,7 +11510,7 @@ function idiv(a, b) {
10786
11510
  }
10787
11511
  function computeBaseHullmass(stats) {
10788
11512
  const density = decodeStat(stats, 1);
10789
- return 25000 + 75 * density;
11513
+ return 100000 - 75 * density;
10790
11514
  }
10791
11515
  function computeBaseCapacityShip(stats) {
10792
11516
  const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
@@ -10798,22 +11522,28 @@ function computeBaseCapacityWarehouse(stats) {
10798
11522
  }
10799
11523
  const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
10800
11524
  const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
10801
- const computeGeneratorCap = (res) => 300 + idiv(res, 6);
10802
- const computeGeneratorRech = (ref) => 1 + idiv(ref * 3, 1000);
11525
+ const computeGeneratorCap = (com) => 300 + idiv(com, 6);
11526
+ const computeGeneratorRech = (fin) => 1 + idiv(fin * 3, 1000);
10803
11527
  const computeGathererYield = (str) => 200 + str;
10804
11528
  const computeGathererDrain = (con) => Math.max(250, 1250 - idiv(con * 25, 20));
10805
- const computeGathererDepth = (tol) => 200 + idiv(tol * 3, 2);
11529
+ const computeGathererDepth = (tol, tier) => gathererDepthForTier(tol, tier);
10806
11530
  const computeGathererSpeed = (ref) => 100 + idiv(ref * 4, 5);
10807
- const computeLoaderMass = (fin) => Math.max(200, 2000 - fin * 2);
11531
+ const computeLoaderMass = (ins) => Math.max(200, 2000 - ins * 2);
10808
11532
  const computeLoaderThrust = (pla) => 1 + idiv(pla, 500);
10809
11533
  const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
10810
- const computeCrafterDrain = (com) => Math.max(5, 30 - idiv(com, 33));
11534
+ const computeCrafterDrain = (fin) => Math.max(5, 30 - idiv(fin, 33));
11535
+ const computeHaulerCapacity = (fin) => Math.max(1, 1 + idiv(fin, 400));
11536
+ const computeHaulerEfficiency = (con) => 2000 + con * 6;
11537
+ const computeHaulerDrain = (com) => Math.max(3, 15 - idiv(com, 80));
11538
+ const computeWarpRange = (stat) => 100 + stat * 3;
10811
11539
  function entityDisplayName(itemId) {
10812
11540
  switch (itemId) {
10813
11541
  case ITEM_SHIP_T1_PACKED:
10814
11542
  return 'Ship';
10815
11543
  case ITEM_WAREHOUSE_T1_PACKED:
10816
11544
  return 'Warehouse';
11545
+ case ITEM_EXTRACTOR_T1_PACKED:
11546
+ return 'Extractor';
10817
11547
  case ITEM_CONTAINER_T1_PACKED:
10818
11548
  return 'Container';
10819
11549
  case ITEM_CONTAINER_T2_PACKED:
@@ -10836,6 +11566,10 @@ function moduleDisplayName(itemId) {
10836
11566
  return 'Crafter';
10837
11567
  case ITEM_STORAGE_T1:
10838
11568
  return 'Storage';
11569
+ case ITEM_HAULER_T1:
11570
+ return 'Hauler';
11571
+ case ITEM_WARP_T1:
11572
+ return 'Warp';
10839
11573
  default:
10840
11574
  return 'Module';
10841
11575
  }
@@ -10866,7 +11600,8 @@ function formatModuleLine(slot, itemId, stats) {
10866
11600
  const tol = decodeStat(stats, 1);
10867
11601
  const con = decodeStat(stats, 3);
10868
11602
  const ref = decodeStat(stats, 4);
10869
- out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol)} Speed ${computeGathererSpeed(ref)} Drain ${computeGathererDrain(con)}`;
11603
+ const tier = getItem(itemId).tier;
11604
+ out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Speed ${computeGathererSpeed(ref)} Drain ${computeGathererDrain(con)}`;
10870
11605
  break;
10871
11606
  }
10872
11607
  case MODULE_LOADER: {
@@ -10890,6 +11625,18 @@ function formatModuleLine(slot, itemId, stats) {
10890
11625
  out += ` +${pct}% capacity`;
10891
11626
  break;
10892
11627
  }
11628
+ case MODULE_HAULER: {
11629
+ const fin = decodeStat(stats, 0);
11630
+ const con = decodeStat(stats, 1);
11631
+ const com = decodeStat(stats, 2);
11632
+ out += ` Capacity ${computeHaulerCapacity(fin)} Efficiency ${computeHaulerEfficiency(con)} Drain ${computeHaulerDrain(com)}`;
11633
+ break;
11634
+ }
11635
+ case MODULE_WARP: {
11636
+ const stat = decodeStat(stats, 0);
11637
+ out += ` Range ${computeWarpRange(stat)}`;
11638
+ break;
11639
+ }
10893
11640
  }
10894
11641
  return out;
10895
11642
  }
@@ -10902,6 +11649,9 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
10902
11649
  else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
10903
11650
  baseCapacity = computeBaseCapacityWarehouse(hullStats);
10904
11651
  }
11652
+ else if (itemId === ITEM_EXTRACTOR_T1_PACKED) {
11653
+ baseCapacity = computeBaseCapacityShip(hullStats);
11654
+ }
10905
11655
  let out = entityDisplayName(itemId);
10906
11656
  out += ` - Hull ${hullMass} mass`;
10907
11657
  if (baseCapacity > 0) {
@@ -10915,6 +11665,115 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
10915
11665
  return out;
10916
11666
  }
10917
11667
 
11668
+ function deserializeAtomicData(data, schema) {
11669
+ let rawData;
11670
+ if (data && typeof data === 'object' && 'immutable_serialized_data' in data) {
11671
+ rawData = data
11672
+ .immutable_serialized_data;
11673
+ }
11674
+ else {
11675
+ rawData = data;
11676
+ }
11677
+ let bytes;
11678
+ if (typeof rawData === 'string') {
11679
+ const hex = rawData;
11680
+ bytes = new Uint8Array(hex.length / 2);
11681
+ for (let i = 0; i < hex.length; i += 2) {
11682
+ bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
11683
+ }
11684
+ }
11685
+ else if (Array.isArray(rawData)) {
11686
+ bytes = new Uint8Array(rawData);
11687
+ }
11688
+ else {
11689
+ bytes = rawData;
11690
+ }
11691
+ let offset = 0;
11692
+ function readVarint() {
11693
+ let result = 0;
11694
+ let multiplier = 1;
11695
+ while (bytes[offset] >= 128) {
11696
+ result += (bytes[offset] - 128) * multiplier;
11697
+ offset++;
11698
+ multiplier *= 128;
11699
+ }
11700
+ result += bytes[offset] * multiplier;
11701
+ offset++;
11702
+ return result;
11703
+ }
11704
+ function readVarint64() {
11705
+ let result = 0n;
11706
+ let multiplier = 1n;
11707
+ while (bytes[offset] >= 128) {
11708
+ result += BigInt(bytes[offset] - 128) * multiplier;
11709
+ offset++;
11710
+ multiplier *= 128n;
11711
+ }
11712
+ result += BigInt(bytes[offset]) * multiplier;
11713
+ offset++;
11714
+ return result;
11715
+ }
11716
+ function readZigzagInt64() {
11717
+ const unsigned = readVarint64();
11718
+ if (unsigned % 2n === 0n) {
11719
+ return unsigned / 2n;
11720
+ }
11721
+ else {
11722
+ return -(unsigned / 2n) - 1n;
11723
+ }
11724
+ }
11725
+ function readString() {
11726
+ const length = readVarint();
11727
+ const str = new TextDecoder().decode(bytes.slice(offset, offset + length));
11728
+ offset += length;
11729
+ return str;
11730
+ }
11731
+ const RESERVED = 4;
11732
+ const result = {};
11733
+ while (offset < bytes.length) {
11734
+ const fieldIndex = readVarint() - RESERVED;
11735
+ const field = schema[fieldIndex];
11736
+ if (!field)
11737
+ break;
11738
+ switch (field.type) {
11739
+ case 'uint16':
11740
+ result[field.name] = readVarint();
11741
+ break;
11742
+ case 'uint32':
11743
+ result[field.name] = readVarint();
11744
+ break;
11745
+ case 'uint64':
11746
+ result[field.name] = readVarint64();
11747
+ break;
11748
+ case 'int64':
11749
+ result[field.name] = readZigzagInt64();
11750
+ break;
11751
+ case 'string':
11752
+ result[field.name] = readString();
11753
+ break;
11754
+ case 'uint16[]': {
11755
+ const len = readVarint();
11756
+ const arr = [];
11757
+ for (let i = 0; i < len; i++)
11758
+ arr.push(readVarint());
11759
+ result[field.name] = arr;
11760
+ break;
11761
+ }
11762
+ case 'uint64[]': {
11763
+ const len = readVarint();
11764
+ const arr = [];
11765
+ for (let i = 0; i < len; i++)
11766
+ arr.push(readVarint64());
11767
+ result[field.name] = arr;
11768
+ break;
11769
+ }
11770
+ default:
11771
+ throw new Error(`Unknown type: ${field.type}`);
11772
+ }
11773
+ }
11774
+ return result;
11775
+ }
11776
+
10918
11777
  var index = /*#__PURE__*/Object.freeze({
10919
11778
  __proto__: null,
10920
11779
  readCommonBase: readCommonBase,
@@ -10939,10 +11798,15 @@ var index = /*#__PURE__*/Object.freeze({
10939
11798
  computeLoaderThrust: computeLoaderThrust,
10940
11799
  computeCrafterSpeed: computeCrafterSpeed,
10941
11800
  computeCrafterDrain: computeCrafterDrain,
11801
+ computeHaulerCapacity: computeHaulerCapacity,
11802
+ computeHaulerEfficiency: computeHaulerEfficiency,
11803
+ computeHaulerDrain: computeHaulerDrain,
11804
+ computeWarpRange: computeWarpRange,
10942
11805
  entityDisplayName: entityDisplayName,
10943
11806
  moduleDisplayName: moduleDisplayName,
10944
11807
  formatModuleLine: formatModuleLine,
10945
- buildEntityDescription: buildEntityDescription
11808
+ buildEntityDescription: buildEntityDescription,
11809
+ deserializeAtomicData: deserializeAtomicData
10946
11810
  });
10947
11811
 
10948
11812
  function formatMass(kg) {
@@ -11007,7 +11871,11 @@ exports.DEPTH_THRESHOLD_T4 = DEPTH_THRESHOLD_T4;
11007
11871
  exports.DEPTH_THRESHOLD_T5 = DEPTH_THRESHOLD_T5;
11008
11872
  exports.DESTINATION_CAPACITY_EXCEEDED = DESTINATION_CAPACITY_EXCEEDED;
11009
11873
  exports.ENTITY_CAPACITY_EXCEEDED = ENTITY_CAPACITY_EXCEEDED;
11874
+ exports.ENTITY_CONTAINER = ENTITY_CONTAINER;
11875
+ exports.ENTITY_EXTRACTOR = ENTITY_EXTRACTOR;
11010
11876
  exports.ENTITY_NO_CRAFTER = ENTITY_NO_CRAFTER;
11877
+ exports.ENTITY_SHIP = ENTITY_SHIP;
11878
+ exports.ENTITY_WAREHOUSE = ENTITY_WAREHOUSE;
11011
11879
  exports.EPOCH_NON_ZERO = EPOCH_NON_ZERO;
11012
11880
  exports.EPOCH_NOT_READY = EPOCH_NOT_READY;
11013
11881
  exports.ERROR_SYSTEM_ALREADY_INITIALIZED = ERROR_SYSTEM_ALREADY_INITIALIZED;
@@ -11017,8 +11885,11 @@ exports.EntitiesManager = EntitiesManager;
11017
11885
  exports.EntityInventory = EntityInventory;
11018
11886
  exports.EntityType = EntityType;
11019
11887
  exports.EpochsManager = EpochsManager;
11888
+ exports.Extractor = Extractor;
11020
11889
  exports.GAME_NOT_FOUND = GAME_NOT_FOUND;
11021
11890
  exports.GAME_SEED_NOT_SET = GAME_SEED_NOT_SET;
11891
+ exports.GATHERER_DEPTH_MAX_TIER = GATHERER_DEPTH_MAX_TIER;
11892
+ exports.GATHERER_DEPTH_TABLE = GATHERER_DEPTH_TABLE;
11022
11893
  exports.GATHER_EXCEEDS_ENERGY_CAPACITY = GATHER_EXCEEDS_ENERGY_CAPACITY;
11023
11894
  exports.GATHER_NOT_ENOUGH_ENERGY = GATHER_NOT_ENOUGH_ENERGY;
11024
11895
  exports.GROUP_DUPLICATE_ENTITY = GROUP_DUPLICATE_ENTITY;
@@ -11062,6 +11933,7 @@ exports.ITEM_CRYSTAL_T8 = ITEM_CRYSTAL_T8;
11062
11933
  exports.ITEM_CRYSTAL_T9 = ITEM_CRYSTAL_T9;
11063
11934
  exports.ITEM_DOES_NOT_EXIST = ITEM_DOES_NOT_EXIST;
11064
11935
  exports.ITEM_ENGINE_T1 = ITEM_ENGINE_T1;
11936
+ exports.ITEM_EXTRACTOR_T1_PACKED = ITEM_EXTRACTOR_T1_PACKED;
11065
11937
  exports.ITEM_FOCUSING_ARRAY = ITEM_FOCUSING_ARRAY;
11066
11938
  exports.ITEM_GAS_T1 = ITEM_GAS_T1;
11067
11939
  exports.ITEM_GAS_T10 = ITEM_GAS_T10;
@@ -11115,6 +11987,7 @@ exports.ITEM_TYPE_ENTITY = ITEM_TYPE_ENTITY;
11115
11987
  exports.ITEM_TYPE_MODULE = ITEM_TYPE_MODULE;
11116
11988
  exports.ITEM_TYPE_RESOURCE = ITEM_TYPE_RESOURCE;
11117
11989
  exports.ITEM_WAREHOUSE_T1_PACKED = ITEM_WAREHOUSE_T1_PACKED;
11990
+ exports.ITEM_WARP_T1 = ITEM_WARP_T1;
11118
11991
  exports.InventoryAccessor = InventoryAccessor;
11119
11992
  exports.LOCATION_MAX_DEPTH = LOCATION_MAX_DEPTH;
11120
11993
  exports.LOCATION_MIN_DEPTH = LOCATION_MIN_DEPTH;
@@ -11122,6 +11995,7 @@ exports.Location = Location;
11122
11995
  exports.LocationsManager = LocationsManager;
11123
11996
  exports.MAX_ORBITAL_ALTITUDE = MAX_ORBITAL_ALTITUDE;
11124
11997
  exports.MIN_ORBITAL_ALTITUDE = MIN_ORBITAL_ALTITUDE;
11998
+ exports.MIN_TRANSFER_DISTANCE = MIN_TRANSFER_DISTANCE;
11125
11999
  exports.MODULE_ANY = MODULE_ANY;
11126
12000
  exports.MODULE_CARGO_NOT_FOUND = MODULE_CARGO_NOT_FOUND;
11127
12001
  exports.MODULE_CRAFTER = MODULE_CRAFTER;
@@ -11141,6 +12015,7 @@ exports.MODULE_TYPE_MISMATCH = MODULE_TYPE_MISMATCH;
11141
12015
  exports.MODULE_WARP = MODULE_WARP;
11142
12016
  exports.NFT = index;
11143
12017
  exports.NO_SCHEDULE = NO_SCHEDULE;
12018
+ exports.PLANETARY_STRUCTURE_Z = PLANETARY_STRUCTURE_Z;
11144
12019
  exports.PLANET_SUBTYPE_GAS_GIANT = PLANET_SUBTYPE_GAS_GIANT;
11145
12020
  exports.PLANET_SUBTYPE_ICY = PLANET_SUBTYPE_ICY;
11146
12021
  exports.PLANET_SUBTYPE_INDUSTRIAL = PLANET_SUBTYPE_INDUSTRIAL;
@@ -11182,6 +12057,7 @@ exports.SHIP_NOT_IDLE = SHIP_NOT_IDLE;
11182
12057
  exports.SHIP_NOT_OWNED = SHIP_NOT_OWNED;
11183
12058
  exports.SHIP_NO_COMPLETED_TASKS = SHIP_NO_COMPLETED_TASKS;
11184
12059
  exports.SHIP_NO_TASKS_TO_CANCEL = SHIP_NO_TASKS_TO_CANCEL;
12060
+ exports.SLOT_FORMULAS = SLOT_FORMULAS;
11185
12061
  exports.STARTER_ALREADY_CLAIMED = STARTER_ALREADY_CLAIMED;
11186
12062
  exports.ScheduleAccessor = ScheduleAccessor;
11187
12063
  exports.ServerContract = server;
@@ -11194,7 +12070,6 @@ exports.TRAVEL_MAX_DURATION = TRAVEL_MAX_DURATION;
11194
12070
  exports.WAREHOUSE_ALREADY_AT_LOCATION = WAREHOUSE_ALREADY_AT_LOCATION;
11195
12071
  exports.WAREHOUSE_CAPACITY_EXCEEDED = WAREHOUSE_CAPACITY_EXCEEDED;
11196
12072
  exports.WAREHOUSE_NOT_FOUND = WAREHOUSE_NOT_FOUND;
11197
- exports.WAREHOUSE_Z = WAREHOUSE_Z;
11198
12073
  exports.WARP_HAS_CARGO = WARP_HAS_CARGO;
11199
12074
  exports.WARP_HAS_SCHEDULE = WARP_HAS_SCHEDULE;
11200
12075
  exports.WARP_NOT_FULL_ENERGY = WARP_NOT_FULL_ENERGY;
@@ -11244,7 +12119,9 @@ exports.capsHasLoaders = capsHasLoaders;
11244
12119
  exports.capsHasMass = capsHasMass;
11245
12120
  exports.capsHasMovement = capsHasMovement;
11246
12121
  exports.capsHasStorage = capsHasStorage;
12122
+ exports.cargoItem = cargoItem;
11247
12123
  exports.cargoItemToStack = cargoItemToStack;
12124
+ exports.cargoRef = cargoRef;
11248
12125
  exports.cargoUtils = cargoUtils;
11249
12126
  exports.categoryColors = categoryColors;
11250
12127
  exports.categoryFromIndex = categoryFromIndex;
@@ -11267,6 +12144,7 @@ exports.computeEngineCapabilities = computeEngineCapabilities;
11267
12144
  exports.computeEngineDrain = computeEngineDrain;
11268
12145
  exports.computeEngineThrust = computeEngineThrust;
11269
12146
  exports.computeEntityStats = computeEntityStats;
12147
+ exports.computeExtractorCapabilities = computeExtractorCapabilities;
11270
12148
  exports.computeGathererCapabilities = computeGathererCapabilities;
11271
12149
  exports.computeGathererDepth = computeGathererDepth;
11272
12150
  exports.computeGathererDrain = computeGathererDrain;
@@ -11277,7 +12155,9 @@ exports.computeGeneratorCapabilities = computeGeneratorCapabilities;
11277
12155
  exports.computeGeneratorRech = computeGeneratorRech;
11278
12156
  exports.computeHaulPenalty = computeHaulPenalty;
11279
12157
  exports.computeHaulerCapabilities = computeHaulerCapabilities;
11280
- exports.computeHaulerDrain = computeHaulerDrain;
12158
+ exports.computeHaulerCapacity = computeHaulerCapacity;
12159
+ exports.computeHaulerDrain = computeHaulerDrain$1;
12160
+ exports.computeHaulerEfficiency = computeHaulerEfficiency;
11281
12161
  exports.computeInputMass = computeInputMass;
11282
12162
  exports.computeLoaderCapabilities = computeLoaderCapabilities;
11283
12163
  exports.computeLoaderMass = computeLoaderMass;
@@ -11287,6 +12167,8 @@ exports.computeShipHullCapabilities = computeShipHullCapabilities;
11287
12167
  exports.computeStorageCapabilities = computeStorageCapabilities;
11288
12168
  exports.computeWarehouseCapabilities = computeWarehouseCapabilities;
11289
12169
  exports.computeWarehouseHullCapabilities = computeWarehouseHullCapabilities;
12170
+ exports.computeWarpRange = computeWarpRange;
12171
+ exports.containerTraits = containerTraits;
11290
12172
  exports.coordsToLocationId = coordsToLocationId;
11291
12173
  exports.createInventoryAccessor = createInventoryAccessor;
11292
12174
  exports.createProjectedEntity = createProjectedEntity;
@@ -11296,10 +12178,10 @@ exports.decodeStat = decodeStat;
11296
12178
  exports.decodeStats = decodeStats;
11297
12179
  exports["default"] = Shipload;
11298
12180
  exports.deriveLocation = deriveLocation;
11299
- exports.deriveLocationEpoch = deriveLocationEpoch;
11300
12181
  exports.deriveLocationSize = deriveLocationSize;
11301
12182
  exports.deriveLocationStatic = deriveLocationStatic;
11302
12183
  exports.deriveResourceStats = deriveResourceStats;
12184
+ exports.deriveStatMappings = deriveStatMappings;
11303
12185
  exports.deriveStrata = deriveStrata;
11304
12186
  exports.deriveStratum = deriveStratum;
11305
12187
  exports.describeItem = describeItem;
@@ -11307,6 +12189,7 @@ exports.describeModule = describeModule;
11307
12189
  exports.describeModuleForItem = describeModuleForItem;
11308
12190
  exports.describeModuleForSlot = describeModuleForSlot;
11309
12191
  exports.deserializeAsset = deserializeAsset;
12192
+ exports.deserializeAtomicData = deserializeAtomicData;
11310
12193
  exports.deserializeComponent = deserializeComponent;
11311
12194
  exports.deserializeEntity = deserializeEntity;
11312
12195
  exports.deserializeModule = deserializeModule;
@@ -11314,18 +12197,22 @@ exports.deserializeResource = deserializeResource;
11314
12197
  exports.displayName = displayName;
11315
12198
  exports.distanceBetweenCoordinates = distanceBetweenCoordinates;
11316
12199
  exports.distanceBetweenPoints = distanceBetweenPoints;
12200
+ exports.easeFlightProgress = easeFlightProgress;
11317
12201
  exports.encodeGatheredCargoStats = encodeGatheredCargoStats;
11318
12202
  exports.encodeStats = encodeStats;
11319
12203
  exports.energyPercent = energyPercent;
11320
12204
  exports.entityDisplayName = entityDisplayName;
11321
12205
  exports.estimateDealTravelTime = estimateDealTravelTime;
11322
12206
  exports.estimateTravelTime = estimateTravelTime;
12207
+ exports.extractorTraits = extractorTraits;
11323
12208
  exports.findItemByCategoryAndTier = findItemByCategoryAndTier;
11324
12209
  exports.findNearbyPlanets = findNearbyPlanets;
12210
+ exports.flightSpeedFactor = flightSpeedFactor;
11325
12211
  exports.formatMass = formatMass;
11326
12212
  exports.formatMassDelta = formatMassDelta;
11327
12213
  exports.formatModuleLine = formatModuleLine;
11328
12214
  exports.formatTier = formatTier;
12215
+ exports.gathererDepthForTier = gathererDepthForTier;
11329
12216
  exports.getCapabilityAttributes = getCapabilityAttributes;
11330
12217
  exports.getCategoryInfo = getCategoryInfo;
11331
12218
  exports.getComponents = getComponents;
@@ -11333,17 +12220,22 @@ exports.getCurrentEpoch = getCurrentEpoch;
11333
12220
  exports.getDepthThreshold = getDepthThreshold;
11334
12221
  exports.getDestinationLocation = getDestinationLocation;
11335
12222
  exports.getEligibleResources = getEligibleResources;
12223
+ exports.getEntityClass = getEntityClass;
11336
12224
  exports.getEntityItems = getEntityItems;
11337
12225
  exports.getEntityLayout = getEntityLayout;
12226
+ exports.getEntityTraits = getEntityTraits;
11338
12227
  exports.getEpochInfo = getEpochInfo;
11339
12228
  exports.getFlightOrigin = getFlightOrigin;
12229
+ exports.getInterpolatedPosition = getInterpolatedPosition;
11340
12230
  exports.getItem = getItem;
11341
12231
  exports.getItems = getItems;
11342
12232
  exports.getLocationCandidates = getLocationCandidates;
12233
+ exports.getLocationProfile = getLocationProfile;
11343
12234
  exports.getLocationType = getLocationType;
11344
12235
  exports.getLocationTypeName = getLocationTypeName;
11345
12236
  exports.getModuleCapabilityType = getModuleCapabilityType;
11346
12237
  exports.getModules = getModules;
12238
+ exports.getPackedEntityType = getPackedEntityType;
11347
12239
  exports.getPlanetSubtype = getPlanetSubtype;
11348
12240
  exports.getPlanetSubtypes = getPlanetSubtypes;
11349
12241
  exports.getPositionAt = getPositionAt;
@@ -11369,14 +12261,20 @@ exports.hasStorage = hasStorage;
11369
12261
  exports.hasSystem = hasSystem;
11370
12262
  exports.hash = hash;
11371
12263
  exports.hash512 = hash512;
12264
+ exports.interpolateFlightPosition = interpolateFlightPosition;
12265
+ exports.isContainer = isContainer;
11372
12266
  exports.isCraftedItem = isCraftedItem;
12267
+ exports.isExtractor = isExtractor;
11373
12268
  exports.isFull = isFull$1;
11374
12269
  exports.isFullFromMass = isFullFromMass;
11375
12270
  exports.isGatherableLocation = isGatherableLocation;
11376
12271
  exports.isInvertedAttribute = isInvertedAttribute;
12272
+ exports.isLocationBuildable = isLocationBuildable;
11377
12273
  exports.isModuleItem = isModuleItem;
11378
12274
  exports.isRelatedItem = isRelatedItem;
12275
+ exports.isShip = isShip;
11379
12276
  exports.isSubscriptionsDebugEnabled = isSubscriptionsDebugEnabled;
12277
+ exports.isWarehouse = isWarehouse;
11380
12278
  exports.itemAbbreviations = itemAbbreviations;
11381
12279
  exports.itemCategory = itemCategory;
11382
12280
  exports.itemIds = itemIds;
@@ -11385,6 +12283,7 @@ exports.itemTier = itemTier;
11385
12283
  exports.itemTypeCode = itemTypeCode;
11386
12284
  exports.lerp = lerp$1;
11387
12285
  exports.makeContainer = makeContainer;
12286
+ exports.makeExtractor = makeExtractor;
11388
12287
  exports.makeShip = makeShip;
11389
12288
  exports.makeWarehouse = makeWarehouse;
11390
12289
  exports.mapEntity = mapEntity;
@@ -11411,14 +12310,15 @@ exports.rollWithinTier = rollWithinTier;
11411
12310
  exports.rotation = rotation;
11412
12311
  exports.schedule = schedule;
11413
12312
  exports.setSubscriptionsDebug = setSubscriptionsDebug;
12313
+ exports.shipTraits = shipTraits;
11414
12314
  exports.stackKey = stackKey;
11415
12315
  exports.stackToCargoItem = stackToCargoItem;
11416
12316
  exports.stacksEqual = stacksEqual;
11417
- exports.statMappings = statMappings;
12317
+ exports.taskCargoChanges = taskCargoChanges;
12318
+ exports.tierAdjective = tierAdjective;
11418
12319
  exports.tierColors = tierColors;
11419
- exports.tierLabel = tierLabel;
11420
- exports.tierLabels = tierLabels;
11421
12320
  exports.toLocation = toLocation;
11422
12321
  exports.typeLabel = typeLabel;
11423
12322
  exports.validateSchedule = validateSchedule;
12323
+ exports.warehouseTraits = warehouseTraits;
11424
12324
  //# sourceMappingURL=shipload.js.map