@shipload/sdk 2.0.0-rc2 → 2.0.0-rc3

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.
package/lib/shipload.js CHANGED
@@ -213,7 +213,7 @@ var platform = /*#__PURE__*/Object.freeze({
213
213
  Contract: Contract$1
214
214
  });
215
215
 
216
- const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhQB2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgxidXljb250YWluZXIAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcIYnV5Z29vZHMABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdnb29kX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIHYnV5c2hpcAACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwxidXl3YXJlaG91c2UAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcGY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdnb29kX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIJdW5pdF9jb3N0BnVpbnQ2NAdtaXh0dXJlDW1peHR1cmVfaW5mbz8JY2FyZ29fcm93AAUCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHZ29vZF9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CXVuaXRfY29zdAZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ng1jb250YWluZXJfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MGdWludDMyCGNhcGFjaXR5BnVpbnQzMgljYXJnb21hc3MGdWludDMyCHNjaGVkdWxlCXNjaGVkdWxlPwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2C2VudGl0eV9pbmZvABUEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8GZW5lcmd5B3VpbnQxNj8IaHVsbG1hc3MHdWludDMyPwdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwhjYXBhY2l0eQd1aW50MzI/CWV4dHJhY3RvchBleHRyYWN0b3Jfc3RhdHM/B2lzX2lkbGUEYm9vbAxjdXJyZW50X3Rhc2sFdGFzaz8UY3VycmVudF90YXNrX2VsYXBzZWQGdWludDMyFmN1cnJlbnRfdGFza19yZW1haW5pbmcGdWludDMyDXBlbmRpbmdfdGFza3MGdGFza1tdB2lkbGVfYXQLdGltZV9wb2ludD8Ic2NoZWR1bGUJc2NoZWR1bGU/CmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQdleHRyYWN0AAEHc2hpcF9pZAZ1aW50NjQPZXh0cmFjdG9yX3N0YXRzAAMEcmF0ZQZ1aW50MTYFZHJhaW4GdWludDE2CmVmZmljaWVuY3kGdWludDE2C2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIZ2V0Z29vZHMAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0CWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCWdldHBsYXllcgABB2FjY291bnQEbmFtZQpnZXRzdGFydGVyAAAMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwRnb29kAAMCaWQGdWludDE2CmJhc2VfcHJpY2UGdWludDMyBG1hc3MGdWludDMyCmdvb2RzX2luZm8AAQVnb29kcwZnb29kW10LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nBGluaXQAAQRzZWVkC2NoZWNrc3VtMjU2BGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAIMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaA5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2dvb2QABQJpZAZ1aW50MTYFcHJpY2UGdWludDMyBnN1cHBseQZ1aW50MTYRcmFyaXR5X211bHRpcGxpZXIGdWludDMyE2xvY2F0aW9uX211bHRpcGxpZXIGdWludDMyDWxvY2F0aW9uX2luZm8AAwZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wFZ29vZHMPbG9jYXRpb25fZ29vZFtdDGxvY2F0aW9uX3JvdwAGAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29faXRlbVtdCHNjaGVkdWxlCXNjaGVkdWxlPw9sb2NhdGlvbl9zdGF0aWMABQZjb29yZHMLY29vcmRpbmF0ZXMEdHlwZQ1sb2NhdGlvbl90eXBlB3N1YnR5cGUFdWludDgFc2VlZDAFdWludDgFc2VlZDEFdWludDgRbWl4dHVyZV9jb21wb25lbnQAAgdnb29kX2lkBnVpbnQxNgZwdXJpdHkGdWludDE2DG1peHR1cmVfaW5mbwABCmNvbXBvbmVudHMTbWl4dHVyZV9jb21wb25lbnRbXQ5tb3ZlbWVudF9zdGF0cwACBnRocnVzdAZ1aW50MzIFZHJhaW4GdWludDE2C25lYXJieV9pbmZvAAUKY2FuX3RyYXZlbARib29sB2N1cnJlbnQUZW50aXR5X2N1cnJlbnRfc3RhdGUJcHJvamVjdGVkFGVudGl0eV9jdXJyZW50X3N0YXRlCm1heF9lbmVyZ3kGdWludDE2B3N5c3RlbXMPbmVhcmJ5X3N5c3RlbVtdDW5lYXJieV9zeXN0ZW0ABAhkaXN0YW5jZQZ1aW50NjQLZW5lcmd5X2Nvc3QGdWludDY0C2ZsaWdodF90aW1lBnVpbnQzMghsb2NhdGlvbg1sb2NhdGlvbl9pbmZvBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQHcGF5bG9hbgACB2FjY291bnQEbmFtZQZhbW91bnQGdWludDY0C3BsYXllcl9pbmZvAA0Fb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0DmF2YWlsYWJsZV9sb2FuBnVpbnQ2NA9uZXh0X3NoaXBfcHJpY2UGdWludDY0FG5leHRfd2FyZWhvdXNlX3ByaWNlBnVpbnQ2NBRuZXh0X2NvbnRhaW5lcl9wcmljZQZ1aW50NjQKc2hpcF9jb3VudAZ1aW50NjQPd2FyZWhvdXNlX2NvdW50BnVpbnQ2NA9jb250YWluZXJfY291bnQGdWludDY0CnBsYXllcl9yb3cABAVvd25lcgRuYW1lB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0C3B1cmdlc3VwcGx5AAEIbWF4X3Jvd3MHdWludDY0PwhyZWNoYXJnZQACC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B3Jlc29sdmUAAwtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAVjb3VudAd1aW50NjQ/D3Jlc29sdmVfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ5yZXNvbHZlZF9jb3VudAV1aW50OBRuZXdfc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwRzYWx0AAEEc2FsdAZ1aW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdCXNlbGxnb29kcwAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B2dvb2RfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQIc2hpcF9yb3cADgJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwZ1aW50MzIIY2FwYWNpdHkGdWludDMyBmVuZXJneQZ1aW50MTYJY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzDm1vdmVtZW50X3N0YXRzCWdlbmVyYXRvcgxlbmVyZ3lfc3RhdHMHbG9hZGVycwxsb2FkZXJfc3RhdHMFdHJhZGUMdHJhZGVfc3RhdHM/CWV4dHJhY3RvchBleHRyYWN0b3Jfc3RhdHM/CHNjaGVkdWxlCXNjaGVkdWxlPwxzdGFydGVyX2luZm8AAwdiYWxhbmNlBnVpbnQ2NARkZWJ0BnVpbnQ2NARzaGlwC2VudGl0eV9pbmZvCXN0YXRlX3JvdwAGB2VuYWJsZWQEYm9vbAVlcG9jaAZ1aW50MzIEc2FsdAZ1aW50NjQFc2hpcHMGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYGY29tbWl0C2NoZWNrc3VtMjU2CnN1cHBseV9yb3cABQJpZAZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMFZXBvY2gGdWludDY0B2dvb2RfaWQGdWludDE2BnN1cHBseQZ1aW50MTYIdGFrZWxvYW4AAgdhY2NvdW50BG5hbWUGYW1vdW50BnVpbnQ2NAR0YXNrAAkEdHlwZQV1aW50OAhkdXJhdGlvbgZ1aW50MzIKY2FuY2VsYWJsZQV1aW50OAtjb29yZGluYXRlcwxjb29yZGluYXRlcz8FY2FyZ28MY2FyZ29faXRlbVtdDGVudGl0eXRhcmdldAtlbnRpdHlfcmVmPwtlbnRpdHlncm91cAd1aW50NjQ/B2NyZWRpdHMGaW50NjQ/C2VuZXJneV9jb3N0B3VpbnQxNj8KdGFza19ldmVudAAOCmV2ZW50X3R5cGUFdWludDgFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKdGFza19pbmRleAV1aW50OAR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MTY/D25ld19jb29yZGluYXRlcwxjb29yZGluYXRlcz8PY2FyZ29tYXNzX2RlbHRhBWludDY0C2NhcmdvX2FkZGVkDGNhcmdvX2l0ZW1bXQ1jYXJnb19yZW1vdmVkDGNhcmdvX2l0ZW1bXQdjcmVkaXRzBmludDY0Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10LdHJhZGVfc3RhdHMAAQZtYXJnaW4GdWludDE2CHRyYW5zZmVyAAYLc291cmNlX3R5cGUEbmFtZQlzb3VyY2VfaWQGdWludDY0CWRlc3RfdHlwZQRuYW1lB2Rlc3RfaWQGdWludDY0B2dvb2RfaWQGdWludDE2CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cAAwJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRFzdGFydGVyX2luZm9fdHlwZQxzdGFydGVyX2luZm8MdXBkYXRlY3JlZGl0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NAp1cGRhdGVkZWJ0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NA13YXJlaG91c2Vfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIY2FwYWNpdHkGdWludDMyCWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycwxsb2FkZXJfc3RhdHMIc2NoZWR1bGUJc2NoZWR1bGU/BHdpcGUAAAx3aXBlc2VxdWVuY2UAACYAAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4ucNV0Jk+KvD4MYnV5Y29udGFpbmVyygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5Y29udGFpbmVyCnN1bW1hcnk6ICdCdXkgYSBuZXcgY29udGFpbmVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJjaGFzZSBhIG5ldyBjb250YWluZXIgYXQgdGhlIGxvY2F0aW9uIG9mIGFuIGlkbGUgc2hpcC4gQ29udGFpbmVycyBwcm92aWRlIGNhcmdvIHN0b3JhZ2UgYnV0IGhhdmUgbm8gbG9hZGVycyBhbmQgY2Fubm90IG1vdmUgaW5kZXBlbmRlbnRseS4AAAA4Ucq8PghidXlnb29kc90BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJ1eWdvb2RzCnN1bW1hcnk6ICdCdXkgZ29vZHMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGdvb2RzIGFuZCBhZGQgdGhlbSB0byBhIHNoaXAncyBjYXJnby4AAACguoa9PgdidXlzaGlwxgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5c2hpcApzdW1tYXJ5OiAnQnV5IGEgbmV3IHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHNoaXCgsKZNXcO9PgxidXl3YXJlaG91c2XMAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBidXl3YXJlaG91c2UKc3VtbWFyeTogJ0J1eSBhIG5ldyB3YXJlaG91c2UnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHdhcmVob3VzZSBhdCB0aGUgbG9jYXRpb24gb2YgYW4gaWRsZSBzaGlwLiBXYXJlaG91c2VzIHByb3ZpZGUgY2FyZ28gc3RvcmFnZSB3aXRoIGxvYWRpbmcvdW5sb2FkaW5nIGNhcGFiaWxpdGllcyBidXQgY2Fubm90IG1vdmUuAAAAAESFpkEGY2FuY2VsxwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuCgotLS0AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl08QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgoKLS0tAAAAAKh4zFQGZW5hYmxl4gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLgoKLS0tAAAAICNzc1cHZXh0cmFjdKADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGV4dHJhY3QKc3VtbWFyeTogJ0V4dHJhY3QgcmVzb3VyY2VzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFeHRyYWN0IHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZXh0cmFjdGFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhbiBleHRyYWN0aW9uIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGV4dHJhY3RvciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgbWl4dHVyZSBjb21wb3NpdGlvbi4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4AAAA4UcqyYghnZXRnb29kc6oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGdvb2RzCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBnb29kcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIHRyYWRlYWJsZSBnb29kcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIG5hbWUsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGdvb2Q6IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AwFX5moyzYgpnZXRzdGFydGVyhQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3RhcnRlcgpzdW1tYXJ5OiAnR2V0IHN0YXJ0ZXIgc2hpcCBhbmQgYmFsYW5jZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgc3RhcnRlciBzaGlwIHN0YXRzIGFuZCBpbml0aWFsIGJhbGFuY2UgYSBuZXcgcGxheWVyIHdvdWxkIHJlY2VpdmUgdXBvbiBqb2luaW5nLiBVc2VkIGZvciBvbmJvYXJkaW5nIFVJIHRvIGRpc3BsYXkgd2hhdCBwbGF5ZXJzIHdpbGwgZ2V0IGJlZm9yZSB0aGV5IHJlZ2lzdGVyLoCVu0ZKjbNiDGdldHN1bW1hcmllc+gCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN1bW1hcmllcwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdW1tYXJpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGxpZ2h0d2VpZ2h0IHN1bW1hcmllcyBvZiBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIgaW5jbHVkaW5nIHR5cGUsIGlkLCBvd25lciwgbmFtZSwgbG9jYXRpb24sIGFuZCBpZGxlIHN0YXR1cy4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo/QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgoKLS0tAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbskBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAoKLS0tAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAYBoavakHcGF5bG9hbq8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBheWxvYW4Kc3VtbWFyeTogJ0xvYW4gUGF5bWVudCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQB8rFVjxa6uC3B1cmdlc3VwcGx56QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcHVyZ2VzdXBwbHkKc3VtbWFyeTogJ1VwZGF0ZSBHYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJnZSBvbGQgc3VwcGx5IHJlY29yZHMgYW5kIGhlbHAgY2xlYW51cCBnYW1lIHN0YXRlLgAAAIpd05C6CHJlY2hhcmdl0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4KCi0tLQAAAEDtSLG6B3Jlc29sdmXVAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuCgotLS0AAAAAAJCjwQRzYWx03QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4KCi0tLQAAwIlSFqPCCXNlbGxnb29kc9UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNlbGxnb29kcwpzdW1tYXJ5OiAnU2VsbCBnb29kcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2VsbCBnb29kcyBmcm9tIGEgc2hpcCdzIGNhcmdvLgoKLS0tAAAA09CooMkIdGFrZWxvYW7qAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0YWtlbG9hbgpzdW1tYXJ5OiAnQ3JlZGl0IExvYW4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJvcnJvdyBjcmVkaXRzIGZyb20gdGhlIGJhbmsgdGhhdCB3aWxsIG5lZWQgdG8gYmUgcmVwYWlkLgAAAFctPM3NCHRyYW5zZmVyyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhbnNmZXIKc3VtbWFyeTogJ1RyYW5zZmVyIGNhcmdvIGJldHdlZW4gZW50aXRpZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZmVyIGNhcmdvIGJldHdlZW4gdHdvIGVudGl0aWVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBCb3RoIGVudGl0aWVzIG11c3QgYmUgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgYXQgbGVhc3Qgb25lIG11c3QgaGF2ZSBsb2FkZXJzLiBDcmVhdGVzIGxvYWQgYW5kIHVubG9hZCB0YXNrcyBvbiBib3RoIGVudGl0aWVzIHdpdGggZHVyYXRpb24gYmFzZWQgb24gY29tYmluZWQgbG9hZGVyIGNhcGFjaXR5IGFuZCBaLWRpc3RhbmNlIGJldHdlZW4gdGhlbS4AAAAARLXNzQZ0cmF2ZWzLAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uCgotLS0KClRoaXMgYWN0aW9uIGRldGVybWluZXMgdGhlIG1hcmtldCBwcmljZSBvZiBhbGwgZ29vZHMgYXQgYSBnaXZlbiBsb2NhdGlvbi6QXVIXqWxS1Qx1cGRhdGVjcmVkaXTCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVjcmVkaXQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVjcmVkaXQgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAEA+KqlsUtUKdXBkYXRlZGVidL4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVwZGF0ZWRlYnQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVkZWJ0IGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS2g0FTaKqyq4wx3aXBlc2VxdWVuY2XCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlc2VxdWVuY2UKc3VtbWFyeTogJ0RFQlVHOiB3aXBlc2VxdWVuY2UgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCwAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAuGo6kydFA2k2NAAADWNvbnRhaW5lcl9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAAACTumwQjQNpNjQAAAxsb2NhdGlvbl9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAACk2lrcIDaTY0AAAMc2VxdWVuY2Vfcm93AAAAAABQXcMDaTY0AAAIc2hpcF9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAA+FirxgNpNjQAAApzdXBwbHlfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAUAAAAOFHKvD4MdGFza19yZXN1bHRzAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAgI3NzVwx0YXNrX3Jlc3VsdHMAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm8AAAA4UcqyYgpnb29kc19pbmZvACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAAPDnGjWzYgtuZWFyYnlfaW5mbwAAuMqbWLNiC3BsYXllcl9pbmZvAMBV+ZqMs2IMc3RhcnRlcl9pbmZvgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAMCJUhajwgx0YXNrX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHM=');
216
+ const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhUB2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgxidXljb250YWluZXIAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcIYnV5aXRlbXMABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIHYnV5c2hpcAACB2FjY291bnQEbmFtZQRuYW1lBnN0cmluZwxidXl3YXJlaG91c2UAAwdhY2NvdW50BG5hbWUHc2hpcF9pZAZ1aW50NjQEbmFtZQZzdHJpbmcGY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIJdW5pdF9jb3N0BnVpbnQ2NARzZWVkB3VpbnQ2ND8JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0CXVuaXRfY29zdAZ1aW50NjQEc2VlZAZ1aW50NjQJY2xlYW5yc3ZwAAIFZXBvY2gGdWludDY0CG1heF9yb3dzBnVpbnQ2NApjbGVhcnRhYmxlAAMKdGFibGVfbmFtZQRuYW1lBXNjb3BlBW5hbWU/CG1heF9yb3dzB3VpbnQ2ND8GY29tbWl0AAEGY29tbWl0C2NoZWNrc3VtMjU2CWNvbmZpZ2xvZwABBmNvbmZpZwtnYW1lX2NvbmZpZw1jb250YWluZXJfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MGdWludDMyCGNhcGFjaXR5BnVpbnQzMgljYXJnb21hc3MGdWludDMyCHNjaGVkdWxlCXNjaGVkdWxlPwtjb29yZGluYXRlcwADAXgFaW50NjQBeQVpbnQ2NAF6B3VpbnQxNj8GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2D2VudGl0eV9kZWZhdWx0cwAPDXNoaXBfaHVsbG1hc3MGdWludDMyDXNoaXBfY2FwYWNpdHkGdWludDMyC3NoaXBfZW5lcmd5BnVpbnQxNgZzaGlwX3oGdWludDE2DHNoaXBfZW5naW5lcw5tb3ZlbWVudF9zdGF0cw5zaGlwX2dlbmVyYXRvcgxlbmVyZ3lfc3RhdHMMc2hpcF9sb2FkZXJzDGxvYWRlcl9zdGF0cwpzaGlwX3RyYWRlC3RyYWRlX3N0YXRzDnNoaXBfZXh0cmFjdG9yD2V4dHJhY3Rvcl9zdGF0cxJ3YXJlaG91c2VfY2FwYWNpdHkGdWludDMyC3dhcmVob3VzZV96BnVpbnQxNhF3YXJlaG91c2VfbG9hZGVycwxsb2FkZXJfc3RhdHMSY29udGFpbmVyX2h1bGxtYXNzBnVpbnQzMhJjb250YWluZXJfY2FwYWNpdHkGdWludDMyC2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAVBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10HbG9hZGVycw1sb2FkZXJfc3RhdHM/BmVuZXJneQd1aW50MTY/CGh1bGxtYXNzB3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8IY2FwYWNpdHkHdWludDMyPwlleHRyYWN0b3IQZXh0cmFjdG9yX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPwplbnRpdHlfcmVmAAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkCnRpbWVfcG9pbnQPZW50aXR5Z3JvdXBfcm93AAICaWQGdWludDY0DHBhcnRpY2lwYW50cwxlbnRpdHlfcmVmW10HZXh0cmFjdAAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B3N0cmF0dW0GdWludDE2CHF1YW50aXR5BnVpbnQzMg9leHRyYWN0b3Jfc3RhdHMABQRyYXRlBnVpbnQxNgVkcmFpbgZ1aW50MTYKZWZmaWNpZW5jeQZ1aW50MTYFZGVwdGgGdWludDE2BWRyaWxsBnVpbnQxNgtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdCWdldGNvbmZpZwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIZ2V0aXRlbXMAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0CWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCWdldHBsYXllcgABB2FjY291bnQEbmFtZQpnZXRzdGFydGVyAAAMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtncm91cHRyYXZlbAAECGVudGl0aWVzDGVudGl0eV9yZWZbXQF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbARoYXNoAAEFdmFsdWUGc3RyaW5nB2hhc2g1MTIAAQV2YWx1ZQZzdHJpbmcEaW5pdAABBHNlZWQLY2hlY2tzdW0yNTYIaXRlbV9kZWYAAwJpZAZ1aW50MTYKYmFzZV9wcmljZQZ1aW50MzIEbWFzcwZ1aW50MzIKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAgxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljC2Vwb2NoX3Byb3BzDmxvY2F0aW9uX2Vwb2NoDmxvY2F0aW9uX2Vwb2NoAAMGYWN0aXZlBGJvb2wFc2VlZDAFdWludDgFc2VlZDEFdWludDgNbG9jYXRpb25faW5mbwADBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAVpdGVtcw9sb2NhdGlvbl9pdGVtW10NbG9jYXRpb25faXRlbQAFAmlkBnVpbnQxNgVwcmljZQZ1aW50MzIGc3VwcGx5BnVpbnQxNhFyYXJpdHlfbXVsdGlwbGllcgZ1aW50MzITbG9jYXRpb25fbXVsdGlwbGllcgZ1aW50MzIMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OA5tb3ZlbWVudF9zdGF0cwACBnRocnVzdAZ1aW50MzIFZHJhaW4GdWludDE2C25lYXJieV9pbmZvAAUKY2FuX3RyYXZlbARib29sB2N1cnJlbnQUZW50aXR5X2N1cnJlbnRfc3RhdGUJcHJvamVjdGVkFGVudGl0eV9jdXJyZW50X3N0YXRlCm1heF9lbmVyZ3kGdWludDE2B3N5c3RlbXMPbmVhcmJ5X3N5c3RlbVtdDW5lYXJieV9zeXN0ZW0ABAhkaXN0YW5jZQZ1aW50NjQLZW5lcmd5X2Nvc3QGdWludDY0C2ZsaWdodF90aW1lBnVpbnQzMghsb2NhdGlvbg1sb2NhdGlvbl9pbmZvBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQHcGF5bG9hbgACB2FjY291bnQEbmFtZQZhbW91bnQGdWludDY0C3BsYXllcl9pbmZvAA0Fb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0DmF2YWlsYWJsZV9sb2FuBnVpbnQ2NA9uZXh0X3NoaXBfcHJpY2UGdWludDY0FG5leHRfd2FyZWhvdXNlX3ByaWNlBnVpbnQ2NBRuZXh0X2NvbnRhaW5lcl9wcmljZQZ1aW50NjQKc2hpcF9jb3VudAZ1aW50NjQPd2FyZWhvdXNlX2NvdW50BnVpbnQ2NA9jb250YWluZXJfY291bnQGdWludDY0CnBsYXllcl9yb3cABAVvd25lcgRuYW1lB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDMyCG5ldHdvcnRoBWludDY0C3B1cmdlc3VwcGx5AAEIbWF4X3Jvd3MHdWludDY0PwhyZWNoYXJnZQACC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0C3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/BHNhbHQAAQRzYWx0BnVpbnQ2NAhzY2hlZHVsZQACB3N0YXJ0ZWQKdGltZV9wb2ludAV0YXNrcwZ0YXNrW10Jc2VsbGl0ZW1zAAQLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyDHNlcXVlbmNlX3JvdwACA2tleQRuYW1lBXZhbHVlBnVpbnQ2NAhzaGlwX3JvdwAOAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIGZW5lcmd5BnVpbnQxNgljYXJnb21hc3MGdWludDMyB2VuZ2luZXMObW92ZW1lbnRfc3RhdHMJZ2VuZXJhdG9yDGVuZXJneV9zdGF0cwdsb2FkZXJzDGxvYWRlcl9zdGF0cwV0cmFkZQx0cmFkZV9zdGF0cz8JZXh0cmFjdG9yEGV4dHJhY3Rvcl9zdGF0cz8Ic2NoZWR1bGUJc2NoZWR1bGU/DHN0YXJ0ZXJfaW5mbwADB2JhbGFuY2UGdWludDY0BGRlYnQGdWludDY0BHNoaXALZW50aXR5X2luZm8Jc3RhdGVfcm93AAYHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzYWx0BnVpbnQ2NAVzaGlwcwZ1aW50MzIEc2VlZAtjaGVja3N1bTI1NgZjb21taXQLY2hlY2tzdW0yNTYKc3VwcGx5X3JvdwAFAmlkBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwVlcG9jaAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYGc3VwcGx5BnVpbnQxNgh0YWtlbG9hbgACB2FjY291bnQEbmFtZQZhbW91bnQGdWludDY0BHRhc2sACQR0eXBlBXVpbnQ4CGR1cmF0aW9uBnVpbnQzMgpjYW5jZWxhYmxlBXVpbnQ4C2Nvb3JkaW5hdGVzDGNvb3JkaW5hdGVzPwVjYXJnbwxjYXJnb19pdGVtW10MZW50aXR5dGFyZ2V0C2VudGl0eV9yZWY/C2VudGl0eWdyb3VwB3VpbnQ2ND8HY3JlZGl0cwZpbnQ2ND8LZW5lcmd5X2Nvc3QHdWludDE2Pwp0YXNrX2V2ZW50AAkKZXZlbnRfdHlwZQV1aW50OAVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAp0YXNrX2luZGV4BXVpbnQ4BHRhc2sEdGFzawlzdGFydHNfYXQKdGltZV9wb2ludAxjb21wbGV0ZXNfYXQKdGltZV9wb2ludApuZXdfZW5lcmd5B3VpbnQxNj8MdGFza19yZXN1bHRzAAEIZW50aXRpZXMSZW50aXR5X3Rhc2tfaW5mb1tdC3RyYWRlX3N0YXRzAAEGbWFyZ2luBnVpbnQxNgh0cmFuc2ZlcgAGC3NvdXJjZV90eXBlBG5hbWUJc291cmNlX2lkBnVpbnQ2NAlkZXN0X3R5cGUEbmFtZQdkZXN0X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGdHJhdmVsAAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wJdHlwZXNfcm93AAQCaWQGdWludDY0E2VudGl0eV9zdW1tYXJ5X3R5cGUOZW50aXR5X3N1bW1hcnkRc3RhcnRlcl9pbmZvX3R5cGUMc3RhcnRlcl9pbmZvEGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcMdXBkYXRlY3JlZGl0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NAp1cGRhdGVkZWJ0AAIHYWNjb3VudARuYW1lBmFtb3VudAVpbnQ2NA13YXJlaG91c2Vfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIY2FwYWNpdHkGdWludDMyCWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycwxsb2FkZXJfc3RhdHMIc2NoZWR1bGUJc2NoZWR1bGU/BHdpcGUAAAx3aXBlc2VxdWVuY2UAACkAAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4ucNV0Jk+KvD4MYnV5Y29udGFpbmVyygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5Y29udGFpbmVyCnN1bW1hcnk6ICdCdXkgYSBuZXcgY29udGFpbmVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJjaGFzZSBhIG5ldyBjb250YWluZXIgYXQgdGhlIGxvY2F0aW9uIG9mIGFuIGlkbGUgc2hpcC4gQ29udGFpbmVycyBwcm92aWRlIGNhcmdvIHN0b3JhZ2UgYnV0IGhhdmUgbm8gbG9hZGVycyBhbmQgY2Fubm90IG1vdmUgaW5kZXBlbmRlbnRseS4AAABYquy8PghidXlpdGVtc90BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJ1eWl0ZW1zCnN1bW1hcnk6ICdCdXkgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGl0ZW1zIGFuZCBhZGQgdGhlbSB0byBhIHNoaXAncyBjYXJnby4AAACguoa9PgdidXlzaGlwxgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYnV5c2hpcApzdW1tYXJ5OiAnQnV5IGEgbmV3IHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHNoaXCgsKZNXcO9PgxidXl3YXJlaG91c2XMAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBidXl3YXJlaG91c2UKc3VtbWFyeTogJ0J1eSBhIG5ldyB3YXJlaG91c2UnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClB1cmNoYXNlIGEgbmV3IHdhcmVob3VzZSBhdCB0aGUgbG9jYXRpb24gb2YgYW4gaWRsZSBzaGlwLiBXYXJlaG91c2VzIHByb3ZpZGUgY2FyZ28gc3RvcmFnZSB3aXRoIGxvYWRpbmcvdW5sb2FkaW5nIGNhcGFiaWxpdGllcyBidXQgY2Fubm90IG1vdmUuAAAAAESFpkEGY2FuY2VsxwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuCgotLS0AAKgb32lURAljbGVhbnJzdnAAAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdPEBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4KCi0tLQAAYDQytyZFCWNvbmZpZ2xvZwAAAAAAqHjMVAZlbmFibGXiAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQuCgotLS0AAAAgI3NzVwdleHRyYWN0oQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZXh0cmFjdApzdW1tYXJ5OiAnRXh0cmFjdCByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkV4dHJhY3QgcmVzb3VyY2VzIGF0IHRoZSBzaGlwJ3MgY3VycmVudCBsb2NhdGlvbi4gT25seSB3b3JrcyBhdCBleHRyYWN0YWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGFuIGV4dHJhY3Rpb24gdGFzayB0aGF0IGNvbnN1bWVzIGVuZXJneSBhbmQgeWllbGRzIGNhcmdvIGJhc2VkIG9uIHRoZSBzaGlwJ3MgZXh0cmFjdG9yIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWcAALBy2eWpsmILZ2V0ZW50aXRpZXOkAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdGllcwpzdW1tYXJ5OiAnR2V0IGFsbCBlbnRpdGllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgZnVsbCBlbnRpdHkgaW5mbyBmb3IgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4AAPDZ5amyYglnZXRlbnRpdHmiAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRlbnRpdHkKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYW4gZW50aXR5IGluY2x1ZGluZyBpZGVudGl0eSwgY2FyZ28sIHNjaGVkdWxlIHN0YXRlLCBhbmQgdHlwZS1zcGVjaWZpYyBmaWVsZHMuAAAAWKrssmIIZ2V0aXRlbXOaAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtcwpzdW1tYXJ5OiAnR2V0IGFsbCBhdmFpbGFibGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgYSBsaXN0IG9mIGFsbCBpdGVtcyBpbiB0aGUgZ2FtZSBpbmNsdWRpbmcgdGhlaXIgaWQsIGJhc2UgcHJpY2UsIGFuZCBtYXNzLgAmddkgGrNiC2dldGxvY2F0aW9u4gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jYXRpb24Kc3VtbWFyeTogJ0dldCBsb2NhdGlvbiBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIGxvY2F0aW9uIGluY2x1ZGluZyB3aGV0aGVyIGEgc3lzdGVtIGV4aXN0cywgYW5kIGZvciBlYWNoIGl0ZW06IHByaWNlLCBzdXBwbHksIHJhcml0eSBtdWx0aXBsaWVyLCBhbmQgbG9jYXRpb24gbXVsdGlwbGllci4AgMkmIRqzYgpnZXRsb2NkYXRh/gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bG9jZGF0YQpzdW1tYXJ5OiAnR2V0IGRlcml2ZWQgbG9jYXRpb24gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBkZXJpdmVkIGxvY2F0aW9uIGRhdGEgaW5jbHVkaW5nIHN0YXRpYyBwcm9wZXJ0aWVzICh0eXBlLCBkaWZmaWN1bHR5LCBzZWVkcykgZnJvbSB0aGUgZ2FtZSBzZWVkIGFuZCBlcG9jaC1zcGVjaWZpYyBwcm9wZXJ0aWVzIChhY3RpdmUsIHNlZWRzKSBmcm9tIHRoZSBjdXJyZW50IGVwb2NoIHNlZWQuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AwFX5moyzYgpnZXRzdGFydGVyhQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3RhcnRlcgpzdW1tYXJ5OiAnR2V0IHN0YXJ0ZXIgc2hpcCBhbmQgYmFsYW5jZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgc3RhcnRlciBzaGlwIHN0YXRzIGFuZCBpbml0aWFsIGJhbGFuY2UgYSBuZXcgcGxheWVyIHdvdWxkIHJlY2VpdmUgdXBvbiBqb2luaW5nLiBVc2VkIGZvciBvbmJvYXJkaW5nIFVJIHRvIGRpc3BsYXkgd2hhdCBwbGF5ZXJzIHdpbGwgZ2V0IGJlZm9yZSB0aGV5IHJlZ2lzdGVyLoCVu0ZKjbNiDGdldHN1bW1hcmllc+gCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN1bW1hcmllcwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdW1tYXJpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGxpZ2h0d2VpZ2h0IHN1bW1hcmllcyBvZiBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIgaW5jbHVkaW5nIHR5cGUsIGlkLCBvd25lciwgbmFtZSwgbG9jYXRpb24sIGFuZCBpZGxlIHN0YXR1cy4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo/QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgoKLS0tAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbskBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAoKLS0tAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAYBoavakHcGF5bG9hbq8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHBheWxvYW4Kc3VtbWFyeTogJ0xvYW4gUGF5bWVudCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQB8rFVjxa6uC3B1cmdlc3VwcGx56QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcHVyZ2VzdXBwbHkKc3VtbWFyeTogJ1VwZGF0ZSBHYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQdXJnZSBvbGQgc3VwcGx5IHJlY29yZHMgYW5kIGhlbHAgY2xlYW51cCBnYW1lIHN0YXRlLgAAAIpd05C6CHJlY2hhcmdl0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4KCi0tLQAAAEDtSLG6B3Jlc29sdmXVAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuCgotLS0AAAAAAJCjwQRzYWx03QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4KCi0tLQAAwFJlF6PCCXNlbGxpdGVtc9UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNlbGxpdGVtcwpzdW1tYXJ5OiAnU2VsbCBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2VsbCBpdGVtcyBmcm9tIGEgc2hpcCdzIGNhcmdvLgoKLS0tAAAA09CooMkIdGFrZWxvYW7qAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0YWtlbG9hbgpzdW1tYXJ5OiAnQ3JlZGl0IExvYW4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJvcnJvdyBjcmVkaXRzIGZyb20gdGhlIGJhbmsgdGhhdCB3aWxsIG5lZWQgdG8gYmUgcmVwYWlkLgAAAFctPM3NCHRyYW5zZmVyyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhbnNmZXIKc3VtbWFyeTogJ1RyYW5zZmVyIGNhcmdvIGJldHdlZW4gZW50aXRpZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZmVyIGNhcmdvIGJldHdlZW4gdHdvIGVudGl0aWVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBCb3RoIGVudGl0aWVzIG11c3QgYmUgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgYXQgbGVhc3Qgb25lIG11c3QgaGF2ZSBsb2FkZXJzLiBDcmVhdGVzIGxvYWQgYW5kIHVubG9hZCB0YXNrcyBvbiBib3RoIGVudGl0aWVzIHdpdGggZHVyYXRpb24gYmFzZWQgb24gY29tYmluZWQgbG9hZGVyIGNhcGFjaXR5IGFuZCBaLWRpc3RhbmNlIGJldHdlZW4gdGhlbS4AAAAARLXNzQZ0cmF2ZWzLAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uCgotLS0KClRoaXMgYWN0aW9uIGRldGVybWluZXMgdGhlIG1hcmtldCBwcmljZSBvZiBhbGwgaXRlbXMgYXQgYSBnaXZlbiBsb2NhdGlvbi6QXVIXqWxS1Qx1cGRhdGVjcmVkaXTCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVjcmVkaXQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVjcmVkaXQgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAEA+KqlsUtUKdXBkYXRlZGVidL4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVwZGF0ZWRlYnQKc3VtbWFyeTogJ0RFQlVHOiB1cGRhdGVkZWJ0IGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS2g0FTaKqyq4wx3aXBlc2VxdWVuY2XCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlc2VxdWVuY2UKc3VtbWFyeTogJ0RFQlVHOiB3aXBlc2VxdWVuY2UgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tDAAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAuGo6kydFA2k2NAAADWNvbnRhaW5lcl9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAAACTumwQjQNpNjQAAAxsb2NhdGlvbl9yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAKTaWtwgNpNjQAAAxzZXF1ZW5jZV9yb3cAAAAAAFBdwwNpNjQAAAhzaGlwX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwAAAAD4WKvGA2k2NAAACnN1cHBseV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAFBY06au4QNpNjQAAA13YXJlaG91c2Vfcm93ARFTaGlwbG9hZCAoU2VydmVyKRFTaGlwbG9hZCAoU2VydmVyKQAAABUAAABYquy8Pgx0YXNrX3Jlc3VsdHMAAAAARIWmQQ5jYW5jZWxfcmVzdWx0cwAAACAjc3NXDHRhc2tfcmVzdWx0cwAAYG5NirJiC2dhbWVfY29uZmlnALBy2eWpsmINZW50aXR5X2luZm9bXQAA8NnlqbJiC2VudGl0eV9pbmZvAAAAWKrssmIKaXRlbXNfaW5mbwAmddkgGrNiDWxvY2F0aW9uX2luZm8AgMkmIRqzYhBsb2NhdGlvbl9kZXJpdmVkAADw5xo1s2ILbmVhcmJ5X2luZm8AALjKm1izYgtwbGF5ZXJfaW5mbwDAVfmajLNiDHN0YXJ0ZXJfaW5mb4CVu0ZKjbNiEGVudGl0eV9zdW1tYXJ5W10Aotrm5qrpZQx0YXNrX3Jlc3VsdHMAAAAAANCwaQtjaGVja3N1bTI1NgAAAECE0rBpC2NoZWNrc3VtNTEyAAAAil3TkLoMdGFza19yZXN1bHRzAAAAQO1IsboPcmVzb2x2ZV9yZXN1bHRzAADAUmUXo8IMdGFza19yZXN1bHRzAAAAVy08zc0MdGFza19yZXN1bHRzAAAAAES1zc0MdGFza19yZXN1bHRz');
217
217
  const abi = antelope.ABI.from(abiBlob);
218
218
  var Types;
219
219
  (function (Types) {
@@ -244,24 +244,24 @@ var Types;
244
244
  antelope.Struct.type('buycontainer')
245
245
  ], buycontainer);
246
246
  Types.buycontainer = buycontainer;
247
- let buygoods = class buygoods extends antelope.Struct {
247
+ let buyitems = class buyitems extends antelope.Struct {
248
248
  };
249
249
  tslib.__decorate([
250
250
  antelope.Struct.field(antelope.Name)
251
- ], buygoods.prototype, "entity_type", void 0);
251
+ ], buyitems.prototype, "entity_type", void 0);
252
252
  tslib.__decorate([
253
253
  antelope.Struct.field(antelope.UInt64)
254
- ], buygoods.prototype, "id", void 0);
254
+ ], buyitems.prototype, "id", void 0);
255
255
  tslib.__decorate([
256
256
  antelope.Struct.field(antelope.UInt16)
257
- ], buygoods.prototype, "good_id", void 0);
257
+ ], buyitems.prototype, "item_id", void 0);
258
258
  tslib.__decorate([
259
259
  antelope.Struct.field(antelope.UInt32)
260
- ], buygoods.prototype, "quantity", void 0);
261
- buygoods = tslib.__decorate([
262
- antelope.Struct.type('buygoods')
263
- ], buygoods);
264
- Types.buygoods = buygoods;
260
+ ], buyitems.prototype, "quantity", void 0);
261
+ buyitems = tslib.__decorate([
262
+ antelope.Struct.type('buyitems')
263
+ ], buyitems);
264
+ Types.buyitems = buyitems;
265
265
  let buyship = class buyship extends antelope.Struct {
266
266
  };
267
267
  tslib.__decorate([
@@ -340,32 +340,11 @@ var Types;
340
340
  antelope.Struct.type('cancel_results')
341
341
  ], cancel_results);
342
342
  Types.cancel_results = cancel_results;
343
- let mixture_component = class mixture_component extends antelope.Struct {
344
- };
345
- tslib.__decorate([
346
- antelope.Struct.field(antelope.UInt16)
347
- ], mixture_component.prototype, "good_id", void 0);
348
- tslib.__decorate([
349
- antelope.Struct.field(antelope.UInt16)
350
- ], mixture_component.prototype, "purity", void 0);
351
- mixture_component = tslib.__decorate([
352
- antelope.Struct.type('mixture_component')
353
- ], mixture_component);
354
- Types.mixture_component = mixture_component;
355
- let mixture_info = class mixture_info extends antelope.Struct {
356
- };
357
- tslib.__decorate([
358
- antelope.Struct.field(mixture_component, { array: true })
359
- ], mixture_info.prototype, "components", void 0);
360
- mixture_info = tslib.__decorate([
361
- antelope.Struct.type('mixture_info')
362
- ], mixture_info);
363
- Types.mixture_info = mixture_info;
364
343
  let cargo_item = class cargo_item extends antelope.Struct {
365
344
  };
366
345
  tslib.__decorate([
367
346
  antelope.Struct.field(antelope.UInt16)
368
- ], cargo_item.prototype, "good_id", void 0);
347
+ ], cargo_item.prototype, "item_id", void 0);
369
348
  tslib.__decorate([
370
349
  antelope.Struct.field(antelope.UInt32)
371
350
  ], cargo_item.prototype, "quantity", void 0);
@@ -373,8 +352,8 @@ var Types;
373
352
  antelope.Struct.field(antelope.UInt64)
374
353
  ], cargo_item.prototype, "unit_cost", void 0);
375
354
  tslib.__decorate([
376
- antelope.Struct.field(mixture_info, { optional: true })
377
- ], cargo_item.prototype, "mixture", void 0);
355
+ antelope.Struct.field(antelope.UInt64, { optional: true })
356
+ ], cargo_item.prototype, "seed", void 0);
378
357
  cargo_item = tslib.__decorate([
379
358
  antelope.Struct.type('cargo_item')
380
359
  ], cargo_item);
@@ -389,17 +368,32 @@ var Types;
389
368
  ], cargo_row.prototype, "entity_id", void 0);
390
369
  tslib.__decorate([
391
370
  antelope.Struct.field(antelope.UInt64)
392
- ], cargo_row.prototype, "good_id", void 0);
371
+ ], cargo_row.prototype, "item_id", void 0);
393
372
  tslib.__decorate([
394
373
  antelope.Struct.field(antelope.UInt64)
395
374
  ], cargo_row.prototype, "quantity", void 0);
396
375
  tslib.__decorate([
397
376
  antelope.Struct.field(antelope.UInt64)
398
377
  ], cargo_row.prototype, "unit_cost", void 0);
378
+ tslib.__decorate([
379
+ antelope.Struct.field(antelope.UInt64)
380
+ ], cargo_row.prototype, "seed", void 0);
399
381
  cargo_row = tslib.__decorate([
400
382
  antelope.Struct.type('cargo_row')
401
383
  ], cargo_row);
402
384
  Types.cargo_row = cargo_row;
385
+ let cleanrsvp = class cleanrsvp extends antelope.Struct {
386
+ };
387
+ tslib.__decorate([
388
+ antelope.Struct.field(antelope.UInt64)
389
+ ], cleanrsvp.prototype, "epoch", void 0);
390
+ tslib.__decorate([
391
+ antelope.Struct.field(antelope.UInt64)
392
+ ], cleanrsvp.prototype, "max_rows", void 0);
393
+ cleanrsvp = tslib.__decorate([
394
+ antelope.Struct.type('cleanrsvp')
395
+ ], cleanrsvp);
396
+ Types.cleanrsvp = cleanrsvp;
403
397
  let cleartable = class cleartable extends antelope.Struct {
404
398
  };
405
399
  tslib.__decorate([
@@ -424,6 +418,174 @@ var Types;
424
418
  antelope.Struct.type('commit')
425
419
  ], commit);
426
420
  Types.commit = commit;
421
+ let movement_stats = class movement_stats extends antelope.Struct {
422
+ };
423
+ tslib.__decorate([
424
+ antelope.Struct.field(antelope.UInt32)
425
+ ], movement_stats.prototype, "thrust", void 0);
426
+ tslib.__decorate([
427
+ antelope.Struct.field(antelope.UInt16)
428
+ ], movement_stats.prototype, "drain", void 0);
429
+ movement_stats = tslib.__decorate([
430
+ antelope.Struct.type('movement_stats')
431
+ ], movement_stats);
432
+ Types.movement_stats = movement_stats;
433
+ let energy_stats = class energy_stats extends antelope.Struct {
434
+ };
435
+ tslib.__decorate([
436
+ antelope.Struct.field(antelope.UInt16)
437
+ ], energy_stats.prototype, "capacity", void 0);
438
+ tslib.__decorate([
439
+ antelope.Struct.field(antelope.UInt16)
440
+ ], energy_stats.prototype, "recharge", void 0);
441
+ energy_stats = tslib.__decorate([
442
+ antelope.Struct.type('energy_stats')
443
+ ], energy_stats);
444
+ Types.energy_stats = energy_stats;
445
+ let loader_stats = class loader_stats extends antelope.Struct {
446
+ };
447
+ tslib.__decorate([
448
+ antelope.Struct.field(antelope.UInt32)
449
+ ], loader_stats.prototype, "mass", void 0);
450
+ tslib.__decorate([
451
+ antelope.Struct.field(antelope.UInt16)
452
+ ], loader_stats.prototype, "thrust", void 0);
453
+ tslib.__decorate([
454
+ antelope.Struct.field(antelope.UInt8)
455
+ ], loader_stats.prototype, "quantity", void 0);
456
+ loader_stats = tslib.__decorate([
457
+ antelope.Struct.type('loader_stats')
458
+ ], loader_stats);
459
+ Types.loader_stats = loader_stats;
460
+ let trade_stats = class trade_stats extends antelope.Struct {
461
+ };
462
+ tslib.__decorate([
463
+ antelope.Struct.field(antelope.UInt16)
464
+ ], trade_stats.prototype, "margin", void 0);
465
+ trade_stats = tslib.__decorate([
466
+ antelope.Struct.type('trade_stats')
467
+ ], trade_stats);
468
+ Types.trade_stats = trade_stats;
469
+ let extractor_stats = class extractor_stats extends antelope.Struct {
470
+ };
471
+ tslib.__decorate([
472
+ antelope.Struct.field(antelope.UInt16)
473
+ ], extractor_stats.prototype, "rate", void 0);
474
+ tslib.__decorate([
475
+ antelope.Struct.field(antelope.UInt16)
476
+ ], extractor_stats.prototype, "drain", void 0);
477
+ tslib.__decorate([
478
+ antelope.Struct.field(antelope.UInt16)
479
+ ], extractor_stats.prototype, "efficiency", void 0);
480
+ tslib.__decorate([
481
+ antelope.Struct.field(antelope.UInt16)
482
+ ], extractor_stats.prototype, "depth", void 0);
483
+ tslib.__decorate([
484
+ antelope.Struct.field(antelope.UInt16)
485
+ ], extractor_stats.prototype, "drill", void 0);
486
+ extractor_stats = tslib.__decorate([
487
+ antelope.Struct.type('extractor_stats')
488
+ ], extractor_stats);
489
+ Types.extractor_stats = extractor_stats;
490
+ let warp_stats = class warp_stats extends antelope.Struct {
491
+ };
492
+ tslib.__decorate([
493
+ antelope.Struct.field(antelope.UInt32)
494
+ ], warp_stats.prototype, "range", void 0);
495
+ warp_stats = tslib.__decorate([
496
+ antelope.Struct.type('warp_stats')
497
+ ], warp_stats);
498
+ Types.warp_stats = warp_stats;
499
+ let entity_defaults = class entity_defaults extends antelope.Struct {
500
+ };
501
+ tslib.__decorate([
502
+ antelope.Struct.field(antelope.UInt32)
503
+ ], entity_defaults.prototype, "ship_hullmass", void 0);
504
+ tslib.__decorate([
505
+ antelope.Struct.field(antelope.UInt32)
506
+ ], entity_defaults.prototype, "ship_capacity", void 0);
507
+ tslib.__decorate([
508
+ antelope.Struct.field(antelope.UInt16)
509
+ ], entity_defaults.prototype, "ship_energy", void 0);
510
+ tslib.__decorate([
511
+ antelope.Struct.field(antelope.UInt16)
512
+ ], entity_defaults.prototype, "ship_z", void 0);
513
+ tslib.__decorate([
514
+ antelope.Struct.field(movement_stats)
515
+ ], entity_defaults.prototype, "ship_engines", void 0);
516
+ tslib.__decorate([
517
+ antelope.Struct.field(energy_stats)
518
+ ], entity_defaults.prototype, "ship_generator", void 0);
519
+ tslib.__decorate([
520
+ antelope.Struct.field(loader_stats)
521
+ ], entity_defaults.prototype, "ship_loaders", void 0);
522
+ tslib.__decorate([
523
+ antelope.Struct.field(trade_stats)
524
+ ], entity_defaults.prototype, "ship_trade", void 0);
525
+ tslib.__decorate([
526
+ antelope.Struct.field(extractor_stats)
527
+ ], entity_defaults.prototype, "ship_extractor", void 0);
528
+ tslib.__decorate([
529
+ antelope.Struct.field(antelope.UInt32)
530
+ ], entity_defaults.prototype, "warehouse_capacity", void 0);
531
+ tslib.__decorate([
532
+ antelope.Struct.field(antelope.UInt16)
533
+ ], entity_defaults.prototype, "warehouse_z", void 0);
534
+ tslib.__decorate([
535
+ antelope.Struct.field(loader_stats)
536
+ ], entity_defaults.prototype, "warehouse_loaders", void 0);
537
+ tslib.__decorate([
538
+ antelope.Struct.field(antelope.UInt32)
539
+ ], entity_defaults.prototype, "container_hullmass", void 0);
540
+ tslib.__decorate([
541
+ antelope.Struct.field(antelope.UInt32)
542
+ ], entity_defaults.prototype, "container_capacity", void 0);
543
+ tslib.__decorate([
544
+ antelope.Struct.field(antelope.UInt16)
545
+ ], entity_defaults.prototype, "container_z", void 0);
546
+ entity_defaults = tslib.__decorate([
547
+ antelope.Struct.type('entity_defaults')
548
+ ], entity_defaults);
549
+ Types.entity_defaults = entity_defaults;
550
+ let item_def = class item_def extends antelope.Struct {
551
+ };
552
+ tslib.__decorate([
553
+ antelope.Struct.field(antelope.UInt16)
554
+ ], item_def.prototype, "id", void 0);
555
+ tslib.__decorate([
556
+ antelope.Struct.field(antelope.UInt32)
557
+ ], item_def.prototype, "base_price", void 0);
558
+ tslib.__decorate([
559
+ antelope.Struct.field(antelope.UInt32)
560
+ ], item_def.prototype, "mass", void 0);
561
+ item_def = tslib.__decorate([
562
+ antelope.Struct.type('item_def')
563
+ ], item_def);
564
+ Types.item_def = item_def;
565
+ let game_config = class game_config extends antelope.Struct {
566
+ };
567
+ tslib.__decorate([
568
+ antelope.Struct.field(antelope.UInt32)
569
+ ], game_config.prototype, "version", void 0);
570
+ tslib.__decorate([
571
+ antelope.Struct.field(entity_defaults)
572
+ ], game_config.prototype, "defaults", void 0);
573
+ tslib.__decorate([
574
+ antelope.Struct.field(item_def, { array: true })
575
+ ], game_config.prototype, "items", void 0);
576
+ game_config = tslib.__decorate([
577
+ antelope.Struct.type('game_config')
578
+ ], game_config);
579
+ Types.game_config = game_config;
580
+ let configlog = class configlog extends antelope.Struct {
581
+ };
582
+ tslib.__decorate([
583
+ antelope.Struct.field(game_config)
584
+ ], configlog.prototype, "config", void 0);
585
+ configlog = tslib.__decorate([
586
+ antelope.Struct.type('configlog')
587
+ ], configlog);
588
+ Types.configlog = configlog;
427
589
  let coordinates = class coordinates extends antelope.Struct {
428
590
  };
429
591
  tslib.__decorate([
@@ -523,18 +685,6 @@ var Types;
523
685
  antelope.Struct.type('enable')
524
686
  ], enable);
525
687
  Types.enable = enable;
526
- let energy_stats = class energy_stats extends antelope.Struct {
527
- };
528
- tslib.__decorate([
529
- antelope.Struct.field(antelope.UInt16)
530
- ], energy_stats.prototype, "capacity", void 0);
531
- tslib.__decorate([
532
- antelope.Struct.field(antelope.UInt16)
533
- ], energy_stats.prototype, "recharge", void 0);
534
- energy_stats = tslib.__decorate([
535
- antelope.Struct.type('energy_stats')
536
- ], energy_stats);
537
- Types.energy_stats = energy_stats;
538
688
  let entity_current_state = class entity_current_state extends antelope.Struct {
539
689
  };
540
690
  tslib.__decorate([
@@ -547,48 +697,6 @@ var Types;
547
697
  antelope.Struct.type('entity_current_state')
548
698
  ], entity_current_state);
549
699
  Types.entity_current_state = entity_current_state;
550
- let loader_stats = class loader_stats extends antelope.Struct {
551
- };
552
- tslib.__decorate([
553
- antelope.Struct.field(antelope.UInt32)
554
- ], loader_stats.prototype, "mass", void 0);
555
- tslib.__decorate([
556
- antelope.Struct.field(antelope.UInt16)
557
- ], loader_stats.prototype, "thrust", void 0);
558
- tslib.__decorate([
559
- antelope.Struct.field(antelope.UInt8)
560
- ], loader_stats.prototype, "quantity", void 0);
561
- loader_stats = tslib.__decorate([
562
- antelope.Struct.type('loader_stats')
563
- ], loader_stats);
564
- Types.loader_stats = loader_stats;
565
- let movement_stats = class movement_stats extends antelope.Struct {
566
- };
567
- tslib.__decorate([
568
- antelope.Struct.field(antelope.UInt32)
569
- ], movement_stats.prototype, "thrust", void 0);
570
- tslib.__decorate([
571
- antelope.Struct.field(antelope.UInt16)
572
- ], movement_stats.prototype, "drain", void 0);
573
- movement_stats = tslib.__decorate([
574
- antelope.Struct.type('movement_stats')
575
- ], movement_stats);
576
- Types.movement_stats = movement_stats;
577
- let extractor_stats = class extractor_stats extends antelope.Struct {
578
- };
579
- tslib.__decorate([
580
- antelope.Struct.field(antelope.UInt16)
581
- ], extractor_stats.prototype, "rate", void 0);
582
- tslib.__decorate([
583
- antelope.Struct.field(antelope.UInt16)
584
- ], extractor_stats.prototype, "drain", void 0);
585
- tslib.__decorate([
586
- antelope.Struct.field(antelope.UInt16)
587
- ], extractor_stats.prototype, "efficiency", void 0);
588
- extractor_stats = tslib.__decorate([
589
- antelope.Struct.type('extractor_stats')
590
- ], extractor_stats);
591
- Types.extractor_stats = extractor_stats;
592
700
  let entity_info = class entity_info extends antelope.Struct {
593
701
  };
594
702
  tslib.__decorate([
@@ -633,6 +741,9 @@ var Types;
633
741
  tslib.__decorate([
634
742
  antelope.Struct.field(extractor_stats, { optional: true })
635
743
  ], entity_info.prototype, "extractor", void 0);
744
+ tslib.__decorate([
745
+ antelope.Struct.field(warp_stats, { optional: true })
746
+ ], entity_info.prototype, "warp", void 0);
636
747
  tslib.__decorate([
637
748
  antelope.Struct.field('bool')
638
749
  ], entity_info.prototype, "is_idle", void 0);
@@ -720,13 +831,28 @@ var Types;
720
831
  Types.entitygroup_row = entitygroup_row;
721
832
  let extract = class extract extends antelope.Struct {
722
833
  };
834
+ tslib.__decorate([
835
+ antelope.Struct.field(antelope.Name)
836
+ ], extract.prototype, "entity_type", void 0);
723
837
  tslib.__decorate([
724
838
  antelope.Struct.field(antelope.UInt64)
725
- ], extract.prototype, "ship_id", void 0);
839
+ ], extract.prototype, "id", void 0);
840
+ tslib.__decorate([
841
+ antelope.Struct.field(antelope.UInt16)
842
+ ], extract.prototype, "stratum", void 0);
843
+ tslib.__decorate([
844
+ antelope.Struct.field(antelope.UInt32)
845
+ ], extract.prototype, "quantity", void 0);
726
846
  extract = tslib.__decorate([
727
847
  antelope.Struct.type('extract')
728
848
  ], extract);
729
849
  Types.extract = extract;
850
+ let getconfig = class getconfig extends antelope.Struct {
851
+ };
852
+ getconfig = tslib.__decorate([
853
+ antelope.Struct.type('getconfig')
854
+ ], getconfig);
855
+ Types.getconfig = getconfig;
730
856
  let getentities = class getentities extends antelope.Struct {
731
857
  };
732
858
  tslib.__decorate([
@@ -751,12 +877,12 @@ var Types;
751
877
  antelope.Struct.type('getentity')
752
878
  ], getentity);
753
879
  Types.getentity = getentity;
754
- let getgoods = class getgoods extends antelope.Struct {
880
+ let getitems = class getitems extends antelope.Struct {
755
881
  };
756
- getgoods = tslib.__decorate([
757
- antelope.Struct.type('getgoods')
758
- ], getgoods);
759
- Types.getgoods = getgoods;
882
+ getitems = tslib.__decorate([
883
+ antelope.Struct.type('getitems')
884
+ ], getitems);
885
+ Types.getitems = getitems;
760
886
  let getlocation = class getlocation extends antelope.Struct {
761
887
  };
762
888
  tslib.__decorate([
@@ -823,30 +949,6 @@ var Types;
823
949
  antelope.Struct.type('getsummaries')
824
950
  ], getsummaries);
825
951
  Types.getsummaries = getsummaries;
826
- let good = class good extends antelope.Struct {
827
- };
828
- tslib.__decorate([
829
- antelope.Struct.field(antelope.UInt16)
830
- ], good.prototype, "id", void 0);
831
- tslib.__decorate([
832
- antelope.Struct.field(antelope.UInt32)
833
- ], good.prototype, "base_price", void 0);
834
- tslib.__decorate([
835
- antelope.Struct.field(antelope.UInt32)
836
- ], good.prototype, "mass", void 0);
837
- good = tslib.__decorate([
838
- antelope.Struct.type('good')
839
- ], good);
840
- Types.good = good;
841
- let goods_info = class goods_info extends antelope.Struct {
842
- };
843
- tslib.__decorate([
844
- antelope.Struct.field(good, { array: true })
845
- ], goods_info.prototype, "goods", void 0);
846
- goods_info = tslib.__decorate([
847
- antelope.Struct.type('goods_info')
848
- ], goods_info);
849
- Types.goods_info = goods_info;
850
952
  let grouptravel = class grouptravel extends antelope.Struct {
851
953
  };
852
954
  tslib.__decorate([
@@ -892,6 +994,15 @@ var Types;
892
994
  antelope.Struct.type('init')
893
995
  ], init);
894
996
  Types.init = init;
997
+ let items_info = class items_info extends antelope.Struct {
998
+ };
999
+ tslib.__decorate([
1000
+ antelope.Struct.field(item_def, { array: true })
1001
+ ], items_info.prototype, "items", void 0);
1002
+ items_info = tslib.__decorate([
1003
+ antelope.Struct.type('items_info')
1004
+ ], items_info);
1005
+ Types.items_info = items_info;
895
1006
  let join = class join extends antelope.Struct {
896
1007
  };
897
1008
  tslib.__decorate([
@@ -949,27 +1060,27 @@ var Types;
949
1060
  antelope.Struct.type('location_derived')
950
1061
  ], location_derived);
951
1062
  Types.location_derived = location_derived;
952
- let location_good = class location_good extends antelope.Struct {
1063
+ let location_item = class location_item extends antelope.Struct {
953
1064
  };
954
1065
  tslib.__decorate([
955
1066
  antelope.Struct.field(antelope.UInt16)
956
- ], location_good.prototype, "id", void 0);
1067
+ ], location_item.prototype, "id", void 0);
957
1068
  tslib.__decorate([
958
1069
  antelope.Struct.field(antelope.UInt32)
959
- ], location_good.prototype, "price", void 0);
1070
+ ], location_item.prototype, "price", void 0);
960
1071
  tslib.__decorate([
961
1072
  antelope.Struct.field(antelope.UInt16)
962
- ], location_good.prototype, "supply", void 0);
1073
+ ], location_item.prototype, "supply", void 0);
963
1074
  tslib.__decorate([
964
1075
  antelope.Struct.field(antelope.UInt32)
965
- ], location_good.prototype, "rarity_multiplier", void 0);
1076
+ ], location_item.prototype, "rarity_multiplier", void 0);
966
1077
  tslib.__decorate([
967
1078
  antelope.Struct.field(antelope.UInt32)
968
- ], location_good.prototype, "location_multiplier", void 0);
969
- location_good = tslib.__decorate([
970
- antelope.Struct.type('location_good')
971
- ], location_good);
972
- Types.location_good = location_good;
1079
+ ], location_item.prototype, "location_multiplier", void 0);
1080
+ location_item = tslib.__decorate([
1081
+ antelope.Struct.type('location_item')
1082
+ ], location_item);
1083
+ Types.location_item = location_item;
973
1084
  let location_info = class location_info extends antelope.Struct {
974
1085
  };
975
1086
  tslib.__decorate([
@@ -979,8 +1090,8 @@ var Types;
979
1090
  antelope.Struct.field('bool')
980
1091
  ], location_info.prototype, "is_system", void 0);
981
1092
  tslib.__decorate([
982
- antelope.Struct.field(location_good, { array: true })
983
- ], location_info.prototype, "goods", void 0);
1093
+ antelope.Struct.field(location_item, { array: true })
1094
+ ], location_info.prototype, "items", void 0);
984
1095
  location_info = tslib.__decorate([
985
1096
  antelope.Struct.type('location_info')
986
1097
  ], location_info);
@@ -1077,21 +1188,6 @@ var Types;
1077
1188
  tslib.__decorate([
1078
1189
  antelope.Struct.field(antelope.UInt16, { optional: true })
1079
1190
  ], task_event.prototype, "new_energy", void 0);
1080
- tslib.__decorate([
1081
- antelope.Struct.field(coordinates, { optional: true })
1082
- ], task_event.prototype, "new_coordinates", void 0);
1083
- tslib.__decorate([
1084
- antelope.Struct.field(antelope.Int64)
1085
- ], task_event.prototype, "cargomass_delta", void 0);
1086
- tslib.__decorate([
1087
- antelope.Struct.field(cargo_item, { array: true })
1088
- ], task_event.prototype, "cargo_added", void 0);
1089
- tslib.__decorate([
1090
- antelope.Struct.field(cargo_item, { array: true })
1091
- ], task_event.prototype, "cargo_removed", void 0);
1092
- tslib.__decorate([
1093
- antelope.Struct.field(antelope.Int64, { optional: true })
1094
- ], task_event.prototype, "credits", void 0);
1095
1191
  task_event = tslib.__decorate([
1096
1192
  antelope.Struct.type('task_event')
1097
1193
  ], task_event);
@@ -1201,6 +1297,18 @@ var Types;
1201
1297
  antelope.Struct.type('recharge')
1202
1298
  ], recharge);
1203
1299
  Types.recharge = recharge;
1300
+ let reserve_row = class reserve_row extends antelope.Struct {
1301
+ };
1302
+ tslib.__decorate([
1303
+ antelope.Struct.field(antelope.UInt64)
1304
+ ], reserve_row.prototype, "id", void 0);
1305
+ tslib.__decorate([
1306
+ antelope.Struct.field(antelope.UInt32)
1307
+ ], reserve_row.prototype, "remaining", void 0);
1308
+ reserve_row = tslib.__decorate([
1309
+ antelope.Struct.type('reserve_row')
1310
+ ], reserve_row);
1311
+ Types.reserve_row = reserve_row;
1204
1312
  let resolve = class resolve extends antelope.Struct {
1205
1313
  };
1206
1314
  tslib.__decorate([
@@ -1249,24 +1357,24 @@ var Types;
1249
1357
  antelope.Struct.type('salt')
1250
1358
  ], salt);
1251
1359
  Types.salt = salt;
1252
- let sellgoods = class sellgoods extends antelope.Struct {
1360
+ let sellitems = class sellitems extends antelope.Struct {
1253
1361
  };
1254
1362
  tslib.__decorate([
1255
1363
  antelope.Struct.field(antelope.Name)
1256
- ], sellgoods.prototype, "entity_type", void 0);
1364
+ ], sellitems.prototype, "entity_type", void 0);
1257
1365
  tslib.__decorate([
1258
1366
  antelope.Struct.field(antelope.UInt64)
1259
- ], sellgoods.prototype, "id", void 0);
1367
+ ], sellitems.prototype, "id", void 0);
1260
1368
  tslib.__decorate([
1261
1369
  antelope.Struct.field(antelope.UInt16)
1262
- ], sellgoods.prototype, "good_id", void 0);
1370
+ ], sellitems.prototype, "item_id", void 0);
1263
1371
  tslib.__decorate([
1264
1372
  antelope.Struct.field(antelope.UInt32)
1265
- ], sellgoods.prototype, "quantity", void 0);
1266
- sellgoods = tslib.__decorate([
1267
- antelope.Struct.type('sellgoods')
1268
- ], sellgoods);
1269
- Types.sellgoods = sellgoods;
1373
+ ], sellitems.prototype, "quantity", void 0);
1374
+ sellitems = tslib.__decorate([
1375
+ antelope.Struct.type('sellitems')
1376
+ ], sellitems);
1377
+ Types.sellitems = sellitems;
1270
1378
  let sequence_row = class sequence_row extends antelope.Struct {
1271
1379
  };
1272
1380
  tslib.__decorate([
@@ -1279,15 +1387,6 @@ var Types;
1279
1387
  antelope.Struct.type('sequence_row')
1280
1388
  ], sequence_row);
1281
1389
  Types.sequence_row = sequence_row;
1282
- let trade_stats = class trade_stats extends antelope.Struct {
1283
- };
1284
- tslib.__decorate([
1285
- antelope.Struct.field(antelope.UInt16)
1286
- ], trade_stats.prototype, "margin", void 0);
1287
- trade_stats = tslib.__decorate([
1288
- antelope.Struct.type('trade_stats')
1289
- ], trade_stats);
1290
- Types.trade_stats = trade_stats;
1291
1390
  let ship_row = class ship_row extends antelope.Struct {
1292
1391
  };
1293
1392
  tslib.__decorate([
@@ -1329,6 +1428,9 @@ var Types;
1329
1428
  tslib.__decorate([
1330
1429
  antelope.Struct.field(extractor_stats, { optional: true })
1331
1430
  ], ship_row.prototype, "extractor", void 0);
1431
+ tslib.__decorate([
1432
+ antelope.Struct.field(warp_stats, { optional: true })
1433
+ ], ship_row.prototype, "warp", void 0);
1332
1434
  tslib.__decorate([
1333
1435
  antelope.Struct.field(schedule, { optional: true })
1334
1436
  ], ship_row.prototype, "schedule", void 0);
@@ -1388,7 +1490,7 @@ var Types;
1388
1490
  ], supply_row.prototype, "epoch", void 0);
1389
1491
  tslib.__decorate([
1390
1492
  antelope.Struct.field(antelope.UInt16)
1391
- ], supply_row.prototype, "good_id", void 0);
1493
+ ], supply_row.prototype, "item_id", void 0);
1392
1494
  tslib.__decorate([
1393
1495
  antelope.Struct.field(antelope.UInt16)
1394
1496
  ], supply_row.prototype, "supply", void 0);
@@ -1433,7 +1535,7 @@ var Types;
1433
1535
  ], transfer.prototype, "dest_id", void 0);
1434
1536
  tslib.__decorate([
1435
1537
  antelope.Struct.field(antelope.UInt16)
1436
- ], transfer.prototype, "good_id", void 0);
1538
+ ], transfer.prototype, "item_id", void 0);
1437
1539
  tslib.__decorate([
1438
1540
  antelope.Struct.field(antelope.UInt32)
1439
1541
  ], transfer.prototype, "quantity", void 0);
@@ -1473,6 +1575,9 @@ var Types;
1473
1575
  tslib.__decorate([
1474
1576
  antelope.Struct.field(starter_info)
1475
1577
  ], types_row.prototype, "starter_info_type", void 0);
1578
+ tslib.__decorate([
1579
+ antelope.Struct.field(game_config)
1580
+ ], types_row.prototype, "game_config_type", void 0);
1476
1581
  types_row = tslib.__decorate([
1477
1582
  antelope.Struct.type('types_row')
1478
1583
  ], types_row);
@@ -1550,6 +1655,7 @@ const TableMap = {
1550
1655
  entitygroup: Types.entitygroup_row,
1551
1656
  location: Types.location_row,
1552
1657
  player: Types.player_row,
1658
+ reserve: Types.reserve_row,
1553
1659
  sequence: Types.sequence_row,
1554
1660
  ship: Types.ship_row,
1555
1661
  state: Types.state_row,
@@ -1596,11 +1702,11 @@ const ERROR_SYSTEM_DISABLED = 'This game is currently disabled.';
1596
1702
  const ERROR_SYSTEM_NOT_INITIALIZED = 'This game has not been initialized.';
1597
1703
  const GAME_NOT_FOUND = 'Cannot find game for given account name.';
1598
1704
  const GAME_SEED_NOT_SET = 'This game has not initialized an epoch seed value.';
1599
- const GOOD_DOES_NOT_EXIST = 'Good does not exist.';
1600
- const GOOD_NOT_AVAILABLE_AT_LOCATION = 'Good is not tradeable at ship location.';
1705
+ const ITEM_DOES_NOT_EXIST = 'Item does not exist.';
1706
+ const ITEM_NOT_AVAILABLE_AT_LOCATION = 'Item is not tradeable at ship location.';
1601
1707
  const INSUFFICIENT_BALANCE = 'Insufficient balance.';
1602
- const INSUFFICIENT_GOOD_QUANTITY = 'Insufficient quantity in cargo.';
1603
- const INSUFFICIENT_GOOD_SUPPLY = 'Insufficient supply of good at location.';
1708
+ const INSUFFICIENT_ITEM_QUANTITY = 'Insufficient quantity in cargo.';
1709
+ const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
1604
1710
  const INVALID_AMOUNT = 'Invalid amount.';
1605
1711
  const REQUIRES_MORE_THAN_ONE = 'A value greater than one is required.';
1606
1712
  const REQUIRES_POSITIVE_VALUE = 'Value must be greater than zero.';
@@ -1661,6 +1767,7 @@ exports.TaskType = void 0;
1661
1767
  TaskType[TaskType["LOAD"] = 3] = "LOAD";
1662
1768
  TaskType[TaskType["UNLOAD"] = 4] = "UNLOAD";
1663
1769
  TaskType[TaskType["EXTRACT"] = 5] = "EXTRACT";
1770
+ TaskType[TaskType["WARP"] = 6] = "WARP";
1664
1771
  })(exports.TaskType || (exports.TaskType = {}));
1665
1772
  exports.LocationType = void 0;
1666
1773
  (function (LocationType) {
@@ -1700,43 +1807,52 @@ function coordsToLocationId(coords) {
1700
1807
  const id = (x << BigInt(32)) | y;
1701
1808
  return antelope.UInt64.from(id);
1702
1809
  }
1703
- exports.Good = class Good extends antelope.Struct {
1810
+ exports.Item = class Item extends antelope.Struct {
1704
1811
  };
1705
1812
  tslib.__decorate([
1706
1813
  antelope.Struct.field(antelope.UInt16)
1707
- ], exports.Good.prototype, "id", void 0);
1814
+ ], exports.Item.prototype, "id", void 0);
1708
1815
  tslib.__decorate([
1709
1816
  antelope.Struct.field('string')
1710
- ], exports.Good.prototype, "name", void 0);
1817
+ ], exports.Item.prototype, "name", void 0);
1711
1818
  tslib.__decorate([
1712
1819
  antelope.Struct.field('string')
1713
- ], exports.Good.prototype, "description", void 0);
1820
+ ], exports.Item.prototype, "description", void 0);
1714
1821
  tslib.__decorate([
1715
1822
  antelope.Struct.field(antelope.UInt32)
1716
- ], exports.Good.prototype, "base_price", void 0);
1823
+ ], exports.Item.prototype, "base_price", void 0);
1717
1824
  tslib.__decorate([
1718
1825
  antelope.Struct.field(antelope.UInt32)
1719
- ], exports.Good.prototype, "mass", void 0);
1720
- exports.Good = tslib.__decorate([
1721
- antelope.Struct.type('good')
1722
- ], exports.Good);
1723
- exports.GoodPrice = class GoodPrice extends antelope.Struct {
1826
+ ], exports.Item.prototype, "mass", void 0);
1827
+ tslib.__decorate([
1828
+ antelope.Struct.field('string')
1829
+ ], exports.Item.prototype, "category", void 0);
1830
+ tslib.__decorate([
1831
+ antelope.Struct.field('string')
1832
+ ], exports.Item.prototype, "rarity", void 0);
1833
+ tslib.__decorate([
1834
+ antelope.Struct.field('string')
1835
+ ], exports.Item.prototype, "color", void 0);
1836
+ exports.Item = tslib.__decorate([
1837
+ antelope.Struct.type('item')
1838
+ ], exports.Item);
1839
+ exports.ItemPrice = class ItemPrice extends antelope.Struct {
1724
1840
  };
1725
1841
  tslib.__decorate([
1726
1842
  antelope.Struct.field(antelope.UInt16)
1727
- ], exports.GoodPrice.prototype, "id", void 0);
1843
+ ], exports.ItemPrice.prototype, "id", void 0);
1728
1844
  tslib.__decorate([
1729
- antelope.Struct.field(exports.Good)
1730
- ], exports.GoodPrice.prototype, "good", void 0);
1845
+ antelope.Struct.field(exports.Item)
1846
+ ], exports.ItemPrice.prototype, "item", void 0);
1731
1847
  tslib.__decorate([
1732
1848
  antelope.Struct.field(antelope.UInt32)
1733
- ], exports.GoodPrice.prototype, "price", void 0);
1849
+ ], exports.ItemPrice.prototype, "price", void 0);
1734
1850
  tslib.__decorate([
1735
1851
  antelope.Struct.field(antelope.UInt16)
1736
- ], exports.GoodPrice.prototype, "supply", void 0);
1737
- exports.GoodPrice = tslib.__decorate([
1738
- antelope.Struct.type('GoodPrice')
1739
- ], exports.GoodPrice);
1852
+ ], exports.ItemPrice.prototype, "supply", void 0);
1853
+ exports.ItemPrice = tslib.__decorate([
1854
+ antelope.Struct.type('ItemPrice')
1855
+ ], exports.ItemPrice);
1740
1856
 
1741
1857
  function getCurrentEpoch(game) {
1742
1858
  const current = new Date().getTime();
@@ -2968,7 +3084,7 @@ function getLocationType(gameSeed, coordinates) {
2968
3084
  return exports.LocationType.NEBULA;
2969
3085
  }
2970
3086
  function isExtractableLocation(locationType) {
2971
- return locationType === exports.LocationType.ASTEROID || locationType === exports.LocationType.NEBULA;
3087
+ return locationType !== exports.LocationType.EMPTY;
2972
3088
  }
2973
3089
  function getSystemName(gameSeed, location) {
2974
3090
  const seed = antelope.Checksum256.from(gameSeed);
@@ -3013,7 +3129,9 @@ function deriveLocationStatic(gameSeed, coordinates) {
3013
3129
  else {
3014
3130
  loc.type = antelope.UInt8.from(exports.LocationType.NEBULA);
3015
3131
  }
3016
- loc.subtype = antelope.UInt8.from(hashResult.array[2]);
3132
+ loc.subtype = antelope.UInt8.from(Number(loc.type) === exports.LocationType.PLANET
3133
+ ? hashResult.array[2] % 6
3134
+ : hashResult.array[2]);
3017
3135
  loc.seed0 = antelope.UInt8.from(hashResult.array[3]);
3018
3136
  loc.seed1 = antelope.UInt8.from(hashResult.array[4]);
3019
3137
  return loc;
@@ -3035,35 +3153,6 @@ function deriveLocation(gameSeed, epochSeed, coordinates) {
3035
3153
  epoch_props: deriveLocationEpoch(epochSeed, coordinates),
3036
3154
  });
3037
3155
  }
3038
- function deriveLocationMixture(location, epochSeed) {
3039
- const locationType = location.static_props.type.toNumber();
3040
- if (locationType === exports.LocationType.NEBULA) {
3041
- return Types.mixture_info.from({
3042
- components: [{ good_id: 1, purity: PRECISION }],
3043
- });
3044
- }
3045
- if (locationType === exports.LocationType.ASTEROID) {
3046
- const seed = antelope.Checksum256.from(epochSeed);
3047
- const coords = location.static_props.coords;
3048
- const str = `mixture-${coords.x}-${coords.y}`;
3049
- const hashResult = hash512(seed, str);
3050
- const ironPrimary = location.static_props.subtype.toNumber() % 2 === 0;
3051
- const purityRange = 0.3;
3052
- const purityRoll = hashResult.array[0] / 255;
3053
- const primaryPurity = 0.5 + purityRoll * purityRange;
3054
- const primaryId = ironPrimary ? 26 : 29;
3055
- const secondaryId = ironPrimary ? 29 : 26;
3056
- const primaryAmt = Math.floor(primaryPurity * PRECISION);
3057
- const secondaryAmt = PRECISION - primaryAmt;
3058
- return Types.mixture_info.from({
3059
- components: [
3060
- { good_id: primaryId, purity: primaryAmt },
3061
- { good_id: secondaryId, purity: secondaryAmt },
3062
- ],
3063
- });
3064
- }
3065
- return Types.mixture_info.from({ components: [] });
3066
- }
3067
3156
 
3068
3157
  class GameState extends Types.state_row {
3069
3158
  static from(state, game) {
@@ -3082,8 +3171,7 @@ class GameState extends Types.state_row {
3082
3171
  return this.seed;
3083
3172
  }
3084
3173
  get gameSeed() {
3085
- var _a;
3086
- return (_a = this._game) === null || _a === void 0 ? void 0 : _a.config.seed;
3174
+ return this._game?.config.seed;
3087
3175
  }
3088
3176
  get isEnabled() {
3089
3177
  return this.enabled;
@@ -3151,59 +3239,178 @@ class BaseManager {
3151
3239
  get platform() {
3152
3240
  return this.context.platform;
3153
3241
  }
3154
- getGame() {
3155
- return tslib.__awaiter(this, void 0, void 0, function* () {
3156
- return this.context.getGame();
3157
- });
3242
+ async getGame() {
3243
+ return this.context.getGame();
3158
3244
  }
3159
- getState() {
3160
- return tslib.__awaiter(this, void 0, void 0, function* () {
3161
- return this.context.getState();
3162
- });
3245
+ async getState() {
3246
+ return this.context.getState();
3163
3247
  }
3164
3248
  }
3165
3249
 
3166
- var goodsData = [
3250
+ var itemsData = [
3167
3251
  {
3168
3252
  id: 1,
3169
3253
  name: "Hydrogen",
3170
- description: "A lightweight fuel source essential for interstellar travel.",
3254
+ description: "A lightweight gas used for fuel cells and propulsion.",
3171
3255
  base_price: 50,
3172
- mass: 15000
3256
+ mass: 15000,
3257
+ category: "gas",
3258
+ rarity: "common",
3259
+ color: "#7EC8E3"
3260
+ },
3261
+ {
3262
+ id: 2,
3263
+ name: "Helium",
3264
+ description: "An inert noble gas used in energy systems.",
3265
+ base_price: 75,
3266
+ mass: 2000,
3267
+ category: "gas",
3268
+ rarity: "uncommon",
3269
+ color: "#F5E6CC"
3270
+ },
3271
+ {
3272
+ id: 6,
3273
+ name: "Carbon",
3274
+ description: "A versatile element for life support and coatings.",
3275
+ base_price: 100,
3276
+ mass: 12000,
3277
+ category: "organic",
3278
+ rarity: "common",
3279
+ color: "#4A4A4A"
3280
+ },
3281
+ {
3282
+ id: 14,
3283
+ name: "Silicon",
3284
+ description: "A semiconductor used in sensors and computing.",
3285
+ base_price: 150,
3286
+ mass: 28000,
3287
+ category: "mineral",
3288
+ rarity: "common",
3289
+ color: "#B8A9C9"
3290
+ },
3291
+ {
3292
+ id: 18,
3293
+ name: "Argon",
3294
+ description: "A noble gas used in industrial and energy applications.",
3295
+ base_price: 60,
3296
+ mass: 8000,
3297
+ category: "gas",
3298
+ rarity: "rare",
3299
+ color: "#9B59B6"
3300
+ },
3301
+ {
3302
+ id: 22,
3303
+ name: "Titanium",
3304
+ description: "A strong, lightweight metal for ship construction.",
3305
+ base_price: 300,
3306
+ mass: 48000,
3307
+ category: "metal",
3308
+ rarity: "rare",
3309
+ color: "#C0C0C0"
3173
3310
  },
3174
3311
  {
3175
3312
  id: 26,
3176
3313
  name: "Iron",
3177
- description: "A versatile metal used in construction and manufacturing.",
3314
+ description: "A versatile metal used in hulls and structures.",
3178
3315
  base_price: 125,
3179
- mass: 40000
3316
+ mass: 40000,
3317
+ category: "metal",
3318
+ rarity: "common",
3319
+ color: "#B7410E"
3180
3320
  },
3181
3321
  {
3182
3322
  id: 29,
3183
3323
  name: "Copper",
3184
- description: "A conductive metal vital for electronics and wiring.",
3324
+ description: "A conductive metal for electronics and wiring.",
3185
3325
  base_price: 200,
3186
- mass: 60000
3326
+ mass: 60000,
3327
+ category: "metal",
3328
+ rarity: "uncommon",
3329
+ color: "#B87333"
3330
+ },
3331
+ {
3332
+ id: 54,
3333
+ name: "Xenon",
3334
+ description: "A rare noble gas for advanced propulsion systems.",
3335
+ base_price: 175,
3336
+ mass: 20000,
3337
+ category: "gas",
3338
+ rarity: "epic",
3339
+ color: "#5B2C6F"
3340
+ },
3341
+ {
3342
+ id: 74,
3343
+ name: "Tungsten",
3344
+ description: "An extremely dense metal for heavy-duty applications.",
3345
+ base_price: 500,
3346
+ mass: 80000,
3347
+ category: "metal",
3348
+ rarity: "epic",
3349
+ color: "#708090"
3350
+ },
3351
+ {
3352
+ id: 1000,
3353
+ name: "Quartz",
3354
+ description: "A crystalline mineral for sensors and optics.",
3355
+ base_price: 200,
3356
+ mass: 35000,
3357
+ category: "mineral",
3358
+ rarity: "uncommon",
3359
+ color: "#E8D5B7"
3360
+ },
3361
+ {
3362
+ id: 1001,
3363
+ name: "Sapphire",
3364
+ description: "A precious crystal for precision instruments.",
3365
+ base_price: 400,
3366
+ mass: 45000,
3367
+ category: "mineral",
3368
+ rarity: "rare",
3369
+ color: "#0F52BA"
3370
+ },
3371
+ {
3372
+ id: 1002,
3373
+ name: "Polymers",
3374
+ description: "Synthetic materials for coatings and consumables.",
3375
+ base_price: 150,
3376
+ mass: 25000,
3377
+ category: "organic",
3378
+ rarity: "rare",
3379
+ color: "#2ECC71"
3380
+ },
3381
+ {
3382
+ id: 1003,
3383
+ name: "Biomass",
3384
+ description: "Organic matter for life support systems.",
3385
+ base_price: 100,
3386
+ mass: 30000,
3387
+ category: "organic",
3388
+ rarity: "uncommon",
3389
+ color: "#8B4513"
3187
3390
  }
3188
3391
  ];
3189
3392
 
3190
- const goods = goodsData;
3191
- const goodIds = goods.map((g) => g.id);
3192
- function getGood(goodId) {
3193
- const good = goods.find((g) => antelope.UInt16.from(goodId).equals(g.id));
3194
- if (!good) {
3195
- throw new Error('Good does not exist');
3196
- }
3197
- return exports.Good.from({
3198
- id: antelope.UInt16.from(good.id),
3199
- name: good.name,
3200
- description: good.description,
3201
- base_price: antelope.UInt32.from(good.base_price),
3202
- mass: antelope.UInt32.from(good.mass),
3203
- });
3204
- }
3205
- function getGoods() {
3206
- return goods.map((g) => getGood(g.id));
3393
+ const items = itemsData.map((g) => exports.Item.from({
3394
+ id: g.id,
3395
+ name: g.name,
3396
+ description: g.description,
3397
+ base_price: g.base_price,
3398
+ mass: g.mass,
3399
+ category: g.category,
3400
+ rarity: g.rarity,
3401
+ color: g.color,
3402
+ }));
3403
+ const itemIds = items.map((i) => i.id);
3404
+ function getItem(itemId) {
3405
+ const id = antelope.UInt16.from(itemId);
3406
+ const item = items.find((i) => i.id.equals(id));
3407
+ if (!item) {
3408
+ throw new Error(`Item with id ${id} not found`);
3409
+ }
3410
+ return item;
3411
+ }
3412
+ function getItems() {
3413
+ return items;
3207
3414
  }
3208
3415
 
3209
3416
  function calc_orbital_altitude(mass) {
@@ -3270,8 +3477,7 @@ function calc_flighttime(distance, acceleration) {
3270
3477
  return antelope.UInt32.from(2 * Math.sqrt(Number(distance) / acceleration));
3271
3478
  }
3272
3479
  function calc_loader_flighttime(ship, mass, altitude) {
3273
- var _a, _b;
3274
- const z = (_b = altitude !== null && altitude !== void 0 ? altitude : (_a = ship.coordinates.z) === null || _a === void 0 ? void 0 : _a.toNumber()) !== null && _b !== void 0 ? _b : calc_orbital_altitude(Number(mass));
3480
+ const z = altitude ?? ship.coordinates.z?.toNumber() ?? calc_orbital_altitude(Number(mass));
3275
3481
  return calc_flighttime(z, calc_loader_acceleration(ship, mass));
3276
3482
  }
3277
3483
  function calc_loader_acceleration(ship, mass) {
@@ -3294,7 +3500,7 @@ function calc_ship_mass(ship, cargos) {
3294
3500
  mass.add(ship.loaders.mass.multiplying(ship.loaders.quantity));
3295
3501
  }
3296
3502
  for (const cargo of cargos) {
3297
- mass.add(getGood(cargo.good_id).mass.multiplying(cargo.quantity));
3503
+ mass.add(getItem(cargo.item_id).mass.multiplying(cargo.quantity));
3298
3504
  }
3299
3505
  return mass;
3300
3506
  }
@@ -3302,12 +3508,11 @@ function calc_energyusage(distance, drain) {
3302
3508
  return antelope.UInt64.from(distance).dividing(PRECISION).multiplying(drain);
3303
3509
  }
3304
3510
  function calculateTransferTime(ship, cargos, quantities) {
3305
- var _a;
3306
3511
  let mass = antelope.UInt64.from(0);
3307
3512
  for (const cargo of cargos) {
3308
- const qty = (_a = quantities === null || quantities === void 0 ? void 0 : quantities.get(Number(cargo.good_id))) !== null && _a !== void 0 ? _a : 0;
3513
+ const qty = quantities?.get(Number(cargo.item_id)) ?? 0;
3309
3514
  if (qty > 0) {
3310
- const good_mass = getGood(cargo.good_id).mass;
3515
+ const good_mass = getItem(cargo.item_id).mass;
3311
3516
  const cargo_mass = good_mass.multiplying(qty);
3312
3517
  mass = antelope.UInt64.from(mass).adding(cargo_mass);
3313
3518
  }
@@ -3327,15 +3532,14 @@ function calculateFlightTime(ship, cargos, distance) {
3327
3532
  return calc_ship_flighttime(ship, mass, distance);
3328
3533
  }
3329
3534
  function calculateLoadTimeBreakdown(ship, cargos, loadQuantities, unloadQuantities) {
3330
- var _a, _b;
3331
3535
  let mass_unload = antelope.UInt64.from(0);
3332
3536
  let mass_load = antelope.UInt64.from(0);
3333
3537
  for (const cargo of cargos) {
3334
- const goodId = Number(cargo.good_id);
3335
- const loadQty = (_a = loadQuantities === null || loadQuantities === void 0 ? void 0 : loadQuantities.get(goodId)) !== null && _a !== void 0 ? _a : 0;
3336
- const unloadQty = (_b = unloadQuantities === null || unloadQuantities === void 0 ? void 0 : unloadQuantities.get(goodId)) !== null && _b !== void 0 ? _b : 0;
3538
+ const goodId = Number(cargo.item_id);
3539
+ const loadQty = loadQuantities?.get(goodId) ?? 0;
3540
+ const unloadQty = unloadQuantities?.get(goodId) ?? 0;
3337
3541
  if (loadQty > 0 || unloadQty > 0) {
3338
- const good = getGood(cargo.good_id);
3542
+ const good = getItem(cargo.item_id);
3339
3543
  if (loadQty > 0) {
3340
3544
  const cargo_mass = good.mass.multiplying(loadQty);
3341
3545
  mass_load = antelope.UInt64.from(mass_load).adding(cargo_mass);
@@ -3446,7 +3650,6 @@ function getPositionAt(entity, taskIndex, taskProgress) {
3446
3650
  };
3447
3651
  }
3448
3652
  function calc_transfer_duration(source, dest, cargoMass) {
3449
- var _a, _b, _c, _d;
3450
3653
  if (cargoMass === 0) {
3451
3654
  return 0;
3452
3655
  }
@@ -3484,8 +3687,8 @@ function calc_transfer_duration(source, dest, cargoMass) {
3484
3687
  }
3485
3688
  const sourceZ = typeof source.location.z === 'number'
3486
3689
  ? source.location.z
3487
- : (_b = (_a = source.location.z) === null || _a === void 0 ? void 0 : _a.toNumber()) !== null && _b !== void 0 ? _b : 0;
3488
- const destZ = typeof dest.location.z === 'number' ? dest.location.z : (_d = (_c = dest.location.z) === null || _c === void 0 ? void 0 : _c.toNumber()) !== null && _d !== void 0 ? _d : 0;
3690
+ : source.location.z?.toNumber() ?? 0;
3691
+ const destZ = typeof dest.location.z === 'number' ? dest.location.z : dest.location.z?.toNumber() ?? 0;
3489
3692
  const distance = Math.abs(sourceZ - destZ);
3490
3693
  const totalMass = cargoMass + totalLoaderMass;
3491
3694
  const acceleration = calc_acceleration(totalThrust, totalMass);
@@ -3515,7 +3718,7 @@ function capsHasMass(caps) {
3515
3718
  function calcCargoMass(entity) {
3516
3719
  let mass = antelope.UInt64.from(0);
3517
3720
  for (const item of entity.cargo) {
3518
- const good = getGood(item.good_id);
3721
+ const good = getItem(item.item_id);
3519
3722
  mass = mass.adding(good.mass.multiplying(item.quantity));
3520
3723
  }
3521
3724
  return mass;
@@ -3559,8 +3762,7 @@ function isIdle(entity) {
3559
3762
  return !hasSchedule$1(entity);
3560
3763
  }
3561
3764
  function getTasks(entity) {
3562
- var _a;
3563
- return ((_a = entity.schedule) === null || _a === void 0 ? void 0 : _a.tasks) || [];
3765
+ return entity.schedule?.tasks || [];
3564
3766
  }
3565
3767
  function scheduleDuration(entity) {
3566
3768
  if (!entity.schedule)
@@ -3716,11 +3918,9 @@ var schedule = /*#__PURE__*/Object.freeze({
3716
3918
  });
3717
3919
 
3718
3920
  function getHullMass(entity) {
3719
- var _a;
3720
- return antelope.UInt32.from((_a = entity.hullmass) !== null && _a !== void 0 ? _a : 0);
3921
+ return antelope.UInt32.from(entity.hullmass ?? 0);
3721
3922
  }
3722
3923
  function createProjectedEntity(entity) {
3723
- var _a;
3724
3924
  const cargoMass = calcCargoMass(entity);
3725
3925
  const shipMass = getHullMass(entity);
3726
3926
  const loaders = entity.loaders;
@@ -3730,7 +3930,7 @@ function createProjectedEntity(entity) {
3730
3930
  const capacity = entity.capacity;
3731
3931
  const projected = {
3732
3932
  location: Coordinates.from(entity.coordinates),
3733
- energy: antelope.UInt16.from((_a = entity.energy) !== null && _a !== void 0 ? _a : 0),
3933
+ energy: antelope.UInt16.from(entity.energy ?? 0),
3734
3934
  cargoMass,
3735
3935
  shipMass,
3736
3936
  capacity: capacity ? antelope.UInt64.from(capacity) : undefined,
@@ -3768,9 +3968,8 @@ function createProjectedEntity(entity) {
3768
3968
  };
3769
3969
  },
3770
3970
  state() {
3771
- var _a;
3772
3971
  return {
3773
- owner: (_a = entity.owner) !== null && _a !== void 0 ? _a : antelope.Name.from(''),
3972
+ owner: entity.owner ?? antelope.Name.from(''),
3774
3973
  location: Types.coordinates.from(this.location),
3775
3974
  energy: this.energy,
3776
3975
  cargomass: antelope.UInt32.from(this.cargoMass),
@@ -3818,19 +4017,19 @@ function applyFlightTask(projected, task, options) {
3818
4017
  : antelope.UInt16.from(0);
3819
4018
  }
3820
4019
  }
3821
- function getGoodMass(good_id) {
3822
- const good = getGood(good_id);
3823
- return good.mass;
4020
+ function getItemMass(item_id) {
4021
+ const item = getItem(item_id);
4022
+ return item.mass;
3824
4023
  }
3825
4024
  function applyLoadTask(projected, task) {
3826
4025
  for (const item of task.cargo) {
3827
- const good_mass = getGoodMass(item.good_id);
4026
+ const good_mass = getItemMass(item.item_id);
3828
4027
  projected.cargoMass = projected.cargoMass.adding(good_mass.multiplying(item.quantity));
3829
4028
  }
3830
4029
  }
3831
4030
  function applyUnloadTask(projected, task) {
3832
4031
  for (const item of task.cargo) {
3833
- const good_mass = getGoodMass(item.good_id);
4032
+ const good_mass = getItemMass(item.item_id);
3834
4033
  const cargoMass = good_mass.multiplying(item.quantity);
3835
4034
  projected.cargoMass = projected.cargoMass.gt(cargoMass)
3836
4035
  ? projected.cargoMass.subtracting(cargoMass)
@@ -3847,7 +4046,7 @@ function applyExtractTask(projected, task, options) {
3847
4046
  : antelope.UInt16.from(0);
3848
4047
  }
3849
4048
  for (const item of task.cargo) {
3850
- const good_mass = getGoodMass(item.good_id);
4049
+ const good_mass = getItemMass(item.item_id);
3851
4050
  projected.cargoMass = projected.cargoMass.adding(good_mass.multiplying(item.quantity));
3852
4051
  }
3853
4052
  }
@@ -3927,9 +4126,8 @@ class Location {
3927
4126
  return new Location(Coordinates.from(coordinates));
3928
4127
  }
3929
4128
  hasSystemAt(gameSeed) {
3930
- var _a;
3931
4129
  const seed = antelope.Checksum256.from(gameSeed);
3932
- if (this._hasSystem === undefined || !((_a = this._gameSeed) === null || _a === void 0 ? void 0 : _a.equals(seed))) {
4130
+ if (this._hasSystem === undefined || !this._gameSeed?.equals(seed)) {
3933
4131
  this._gameSeed = seed;
3934
4132
  this._hasSystem = hasSystem(seed, this.coordinates);
3935
4133
  }
@@ -3969,7 +4167,7 @@ class Location {
3969
4167
  getSupply(goodId) {
3970
4168
  if (!this._locationRows)
3971
4169
  return undefined;
3972
- const row = this._locationRows.find((r) => r.good_id.equals(goodId) && this._epoch && r.epoch.equals(this._epoch));
4170
+ const row = this._locationRows.find((r) => r.item_id.equals(goodId) && this._epoch && r.epoch.equals(this._epoch));
3973
4171
  return row ? row.supply : undefined;
3974
4172
  }
3975
4173
  get availableGoods() {
@@ -4007,9 +4205,9 @@ class Location {
4007
4205
  ? currentSupply.subtracting(delta)
4008
4206
  : antelope.UInt16.from(0)
4009
4207
  : currentSupply.adding(quantityDelta);
4010
- return exports.GoodPrice.from({
4208
+ return exports.ItemPrice.from({
4011
4209
  id: price.id,
4012
- good: price.good,
4210
+ item: price.item,
4013
4211
  price: price.price,
4014
4212
  supply: newSupply,
4015
4213
  });
@@ -4019,7 +4217,7 @@ class Location {
4019
4217
  }
4020
4218
  if (this._locationRows && this._epoch) {
4021
4219
  newLocation._locationRows = this._locationRows.map((row) => {
4022
- if (row.good_id.equals(goodId) && row.epoch.equals(this._epoch)) {
4220
+ if (row.item_id.equals(goodId) && row.epoch.equals(this._epoch)) {
4023
4221
  const currentSupply = antelope.UInt16.from(row.supply);
4024
4222
  const delta = antelope.UInt16.from(Math.abs(quantityDelta));
4025
4223
  const newSupply = quantityDelta < 0
@@ -4031,7 +4229,7 @@ class Location {
4031
4229
  id: row.id,
4032
4230
  coordinates: row.coordinates,
4033
4231
  epoch: row.epoch,
4034
- good_id: row.good_id,
4232
+ item_id: row.item_id,
4035
4233
  supply: newSupply,
4036
4234
  });
4037
4235
  }
@@ -4112,17 +4310,20 @@ function createScheduleAccessor(entity) {
4112
4310
  }
4113
4311
 
4114
4312
  class EntityInventory extends Types.cargo_item {
4115
- get good() {
4116
- if (!this._good) {
4117
- this._good = getGood(this.good_id);
4313
+ get item() {
4314
+ if (!this._item) {
4315
+ this._item = getItem(this.item_id);
4118
4316
  }
4119
- return this._good;
4317
+ return this._item;
4318
+ }
4319
+ get good() {
4320
+ return this.item;
4120
4321
  }
4121
4322
  get name() {
4122
- return this.good.name;
4323
+ return this.item.name;
4123
4324
  }
4124
4325
  get unitMass() {
4125
- return this.good.mass;
4326
+ return this.item.mass;
4126
4327
  }
4127
4328
  get totalMass() {
4128
4329
  return antelope.UInt64.from(this.unitMass).multiplying(this.quantity);
@@ -4154,8 +4355,8 @@ class InventoryAccessor {
4154
4355
  get totalValue() {
4155
4356
  return this.items.reduce((sum, c) => sum.adding(c.totalCost), antelope.UInt64.from(0));
4156
4357
  }
4157
- forGood(goodId) {
4158
- return this.items.find((c) => c.good_id.equals(goodId));
4358
+ forItem(goodId) {
4359
+ return this.items.find((c) => c.item_id.equals(goodId));
4159
4360
  }
4160
4361
  get sellable() {
4161
4362
  return this.items.filter((c) => c.hasCargo);
@@ -4200,8 +4401,8 @@ function cargoValue(cargo) {
4200
4401
  return sum.adding(c.totalCost);
4201
4402
  }, antelope.UInt64.from(0));
4202
4403
  }
4203
- function getCargoForGood(cargo, goodId) {
4204
- return cargo.find((c) => c.good_id.equals(goodId));
4404
+ function getCargoForItem(cargo, goodId) {
4405
+ return cargo.find((c) => c.item_id.equals(goodId));
4205
4406
  }
4206
4407
  function hasSpace(currentMass, maxCapacity, goodMass, quantity) {
4207
4408
  const additionalMass = goodMass.multiplying(quantity);
@@ -4226,7 +4427,7 @@ function calculateSaleValue(cargo, prices) {
4226
4427
  for (const item of cargo) {
4227
4428
  if (antelope.UInt32.from(item.quantity).equals(antelope.UInt32.from(0)))
4228
4429
  continue;
4229
- const goodId = Number(item.good_id);
4430
+ const goodId = Number(item.item_id);
4230
4431
  const salePrice = prices.get(goodId);
4231
4432
  if (salePrice) {
4232
4433
  revenue = revenue.adding(salePrice.multiplying(item.quantity));
@@ -4247,30 +4448,30 @@ function calculateSaleValueFromArray(cargo, prices) {
4247
4448
  });
4248
4449
  return calculateSaleValue(cargo, priceMap);
4249
4450
  }
4250
- function afterSellGoods(cargo, goodsToSell) {
4451
+ function afterSellItems(cargo, goodsToSell) {
4251
4452
  if (cargo.length === 0) {
4252
4453
  return [];
4253
4454
  }
4254
4455
  return cargo.map((item) => {
4255
- const saleItem = goodsToSell.find((s) => Number(item.good_id) === s.goodId);
4456
+ const saleItem = goodsToSell.find((s) => Number(item.item_id) === s.goodId);
4256
4457
  if (!saleItem) {
4257
4458
  return new EntityInventory(item);
4258
4459
  }
4259
4460
  const currentQty = Number(item.quantity);
4260
4461
  const newQty = Math.max(0, currentQty - saleItem.quantity);
4261
4462
  return new EntityInventory(Types.cargo_item.from({
4262
- good_id: item.good_id,
4463
+ item_id: item.item_id,
4263
4464
  quantity: antelope.UInt32.from(newQty),
4264
4465
  unit_cost: item.unit_cost,
4265
4466
  }));
4266
4467
  });
4267
4468
  }
4268
- function afterSellAllGoods(cargo) {
4469
+ function afterSellAllItems(cargo) {
4269
4470
  if (cargo.length === 0) {
4270
4471
  return [];
4271
4472
  }
4272
4473
  return cargo.map((item) => new EntityInventory(Types.cargo_item.from({
4273
- good_id: item.good_id,
4474
+ item_id: item.item_id,
4274
4475
  quantity: antelope.UInt32.from(0),
4275
4476
  unit_cost: item.unit_cost,
4276
4477
  })));
@@ -4280,14 +4481,14 @@ var cargoUtils = /*#__PURE__*/Object.freeze({
4280
4481
  __proto__: null,
4281
4482
  totalCargoMass: totalCargoMass,
4282
4483
  cargoValue: cargoValue,
4283
- getCargoForGood: getCargoForGood,
4484
+ getCargoForItem: getCargoForItem,
4284
4485
  hasSpace: hasSpace,
4285
4486
  availableCapacity: availableCapacity,
4286
4487
  isFull: isFull,
4287
4488
  calculateSaleValue: calculateSaleValue,
4288
4489
  calculateSaleValueFromArray: calculateSaleValueFromArray,
4289
- afterSellGoods: afterSellGoods,
4290
- afterSellAllGoods: afterSellAllGoods
4490
+ afterSellItems: afterSellItems,
4491
+ afterSellAllItems: afterSellAllItems
4291
4492
  });
4292
4493
 
4293
4494
  class Ship extends Types.entity_info {
@@ -4295,15 +4496,13 @@ class Ship extends Types.entity_info {
4295
4496
  return this.entity_name;
4296
4497
  }
4297
4498
  get inv() {
4298
- var _a;
4299
- return ((_a = this._inv) !== null && _a !== void 0 ? _a : (this._inv = new InventoryAccessor(this)));
4499
+ return (this._inv ?? (this._inv = new InventoryAccessor(this)));
4300
4500
  }
4301
4501
  get inventory() {
4302
4502
  return this.inv.items;
4303
4503
  }
4304
4504
  get sched() {
4305
- var _a;
4306
- return ((_a = this._sched) !== null && _a !== void 0 ? _a : (this._sched = new ScheduleAccessor(this)));
4505
+ return (this._sched ?? (this._sched = new ScheduleAccessor(this)));
4307
4506
  }
4308
4507
  get maxDistance() {
4309
4508
  if (!this.generator || !this.engines)
@@ -4343,6 +4542,9 @@ class Ship extends Types.entity_info {
4343
4542
  get hasExtractor() {
4344
4543
  return this.extractor !== undefined;
4345
4544
  }
4545
+ get hasWarp() {
4546
+ return this.warp !== undefined;
4547
+ }
4346
4548
  project() {
4347
4549
  return projectEntity(this);
4348
4550
  }
@@ -4359,8 +4561,7 @@ class Ship extends Types.entity_info {
4359
4561
  return this.inv.totalValue;
4360
4562
  }
4361
4563
  get totalMass() {
4362
- var _a;
4363
- let mass = antelope.UInt64.from((_a = this.hullmass) !== null && _a !== void 0 ? _a : 0).adding(this.totalCargoMass);
4564
+ let mass = antelope.UInt64.from(this.hullmass ?? 0).adding(this.totalCargoMass);
4364
4565
  if (this.loaders) {
4365
4566
  mass = mass.adding(antelope.UInt64.from(this.loaders.mass).multiplying(this.loaders.quantity));
4366
4567
  }
@@ -4377,8 +4578,8 @@ class Ship extends Types.entity_info {
4377
4578
  ? antelope.UInt64.from(0)
4378
4579
  : this.maxCapacity.subtracting(this.totalMass);
4379
4580
  }
4380
- getCargoForGood(goodId) {
4381
- return this.inv.forGood(goodId);
4581
+ getCargoForItem(goodId) {
4582
+ return this.inv.forItem(goodId);
4382
4583
  }
4383
4584
  get sellableCargo() {
4384
4585
  return this.inv.sellable;
@@ -4413,11 +4614,11 @@ class Ship extends Types.entity_info {
4413
4614
  calculateSaleValueFromArray(prices) {
4414
4615
  return calculateSaleValueFromArray(this.cargo, prices);
4415
4616
  }
4416
- afterSellGoods(goodsToSell) {
4417
- return afterSellGoods(this.cargo, goodsToSell);
4617
+ afterSellItems(goodsToSell) {
4618
+ return afterSellItems(this.cargo, goodsToSell);
4418
4619
  }
4419
- afterSellAllGoods() {
4420
- return afterSellAllGoods(this.cargo);
4620
+ afterSellAllItems() {
4621
+ return afterSellAllItems(this.cargo);
4421
4622
  }
4422
4623
  }
4423
4624
 
@@ -4426,15 +4627,13 @@ class Warehouse extends Types.entity_info {
4426
4627
  return this.entity_name;
4427
4628
  }
4428
4629
  get inv() {
4429
- var _a;
4430
- return ((_a = this._inv) !== null && _a !== void 0 ? _a : (this._inv = new InventoryAccessor(this)));
4630
+ return (this._inv ?? (this._inv = new InventoryAccessor(this)));
4431
4631
  }
4432
4632
  get inventory() {
4433
4633
  return this.inv.items;
4434
4634
  }
4435
4635
  get sched() {
4436
- var _a;
4437
- return ((_a = this._sched) !== null && _a !== void 0 ? _a : (this._sched = new ScheduleAccessor(this)));
4636
+ return (this._sched ?? (this._sched = new ScheduleAccessor(this)));
4438
4637
  }
4439
4638
  get isIdle() {
4440
4639
  return this.is_idle;
@@ -4467,12 +4666,11 @@ class Warehouse extends Types.entity_info {
4467
4666
  get isFull() {
4468
4667
  return this.totalCargoMass.gte(this.maxCapacity);
4469
4668
  }
4470
- getCargoForGood(goodId) {
4471
- return this.inv.forGood(goodId);
4669
+ getCargoForItem(goodId) {
4670
+ return this.inv.forItem(goodId);
4472
4671
  }
4473
4672
  get orbitalAltitude() {
4474
- var _a;
4475
- return ((_a = this.coordinates.z) === null || _a === void 0 ? void 0 : _a.toNumber()) || 0;
4673
+ return this.coordinates.z?.toNumber() || 0;
4476
4674
  }
4477
4675
  }
4478
4676
 
@@ -4481,8 +4679,7 @@ class Container extends Types.entity_info {
4481
4679
  return this.entity_name;
4482
4680
  }
4483
4681
  get sched() {
4484
- var _a;
4485
- return ((_a = this._sched) !== null && _a !== void 0 ? _a : (this._sched = new ScheduleAccessor(this)));
4682
+ return (this._sched ?? (this._sched = new ScheduleAccessor(this)));
4486
4683
  }
4487
4684
  get isIdle() {
4488
4685
  return this.is_idle;
@@ -4497,8 +4694,7 @@ class Container extends Types.entity_info {
4497
4694
  return Location.from(this.coordinates);
4498
4695
  }
4499
4696
  get totalMass() {
4500
- var _a;
4501
- return antelope.UInt64.from((_a = this.hullmass) !== null && _a !== void 0 ? _a : 0).adding(this.cargomass);
4697
+ return antelope.UInt64.from(this.hullmass ?? 0).adding(this.cargomass);
4502
4698
  }
4503
4699
  get maxCapacity() {
4504
4700
  return antelope.UInt64.from(this.capacity);
@@ -4514,87 +4710,62 @@ class Container extends Types.entity_info {
4514
4710
  return antelope.UInt64.from(this.cargomass).gte(this.maxCapacity);
4515
4711
  }
4516
4712
  get orbitalAltitude() {
4517
- var _a;
4518
- return ((_a = this.coordinates.z) === null || _a === void 0 ? void 0 : _a.toNumber()) || 0;
4713
+ return this.coordinates.z?.toNumber() || 0;
4519
4714
  }
4520
4715
  }
4521
4716
 
4522
4717
  class EntitiesManager extends BaseManager {
4523
- getEntity(type, id) {
4524
- return tslib.__awaiter(this, void 0, void 0, function* () {
4525
- const result = yield this.server.readonly('getentity', {
4526
- entity_type: antelope.Name.from(type),
4527
- entity_id: id,
4528
- });
4529
- const entityInfo = result;
4530
- return this.wrapEntity(entityInfo);
4718
+ async getEntity(type, id) {
4719
+ const result = await this.server.readonly('getentity', {
4720
+ entity_type: antelope.Name.from(type),
4721
+ entity_id: id,
4531
4722
  });
4532
- }
4533
- getEntities(owner, type) {
4534
- return tslib.__awaiter(this, void 0, void 0, function* () {
4535
- const ownerName = this.resolveOwner(owner);
4536
- const result = yield this.server.readonly('getentities', {
4537
- owner: ownerName,
4538
- entity_type: type ? antelope.Name.from(type) : null,
4539
- });
4540
- const entities = result;
4541
- return entities.map((entity) => this.wrapEntity(entity));
4723
+ const entityInfo = result;
4724
+ return this.wrapEntity(entityInfo);
4725
+ }
4726
+ async getEntities(owner, type) {
4727
+ const ownerName = this.resolveOwner(owner);
4728
+ const result = await this.server.readonly('getentities', {
4729
+ owner: ownerName,
4730
+ entity_type: type ? antelope.Name.from(type) : null,
4542
4731
  });
4543
- }
4544
- getSummaries(owner, type) {
4545
- return tslib.__awaiter(this, void 0, void 0, function* () {
4546
- const ownerName = this.resolveOwner(owner);
4547
- const result = yield this.server.readonly('getsummaries', {
4548
- owner: ownerName,
4549
- entity_type: type ? antelope.Name.from(type) : null,
4550
- });
4551
- return result;
4732
+ const entities = result;
4733
+ return entities.map((entity) => this.wrapEntity(entity));
4734
+ }
4735
+ async getSummaries(owner, type) {
4736
+ const ownerName = this.resolveOwner(owner);
4737
+ const result = await this.server.readonly('getsummaries', {
4738
+ owner: ownerName,
4739
+ entity_type: type ? antelope.Name.from(type) : null,
4552
4740
  });
4741
+ return result;
4553
4742
  }
4554
- getShip(id) {
4555
- return tslib.__awaiter(this, void 0, void 0, function* () {
4556
- return (yield this.getEntity('ship', id));
4557
- });
4743
+ async getShip(id) {
4744
+ return (await this.getEntity('ship', id));
4558
4745
  }
4559
- getWarehouse(id) {
4560
- return tslib.__awaiter(this, void 0, void 0, function* () {
4561
- return (yield this.getEntity('warehouse', id));
4562
- });
4746
+ async getWarehouse(id) {
4747
+ return (await this.getEntity('warehouse', id));
4563
4748
  }
4564
- getContainer(id) {
4565
- return tslib.__awaiter(this, void 0, void 0, function* () {
4566
- return (yield this.getEntity('container', id));
4567
- });
4749
+ async getContainer(id) {
4750
+ return (await this.getEntity('container', id));
4568
4751
  }
4569
- getShips(owner) {
4570
- return tslib.__awaiter(this, void 0, void 0, function* () {
4571
- return (yield this.getEntities(owner, 'ship'));
4572
- });
4752
+ async getShips(owner) {
4753
+ return (await this.getEntities(owner, 'ship'));
4573
4754
  }
4574
- getWarehouses(owner) {
4575
- return tslib.__awaiter(this, void 0, void 0, function* () {
4576
- return (yield this.getEntities(owner, 'warehouse'));
4577
- });
4755
+ async getWarehouses(owner) {
4756
+ return (await this.getEntities(owner, 'warehouse'));
4578
4757
  }
4579
- getContainers(owner) {
4580
- return tslib.__awaiter(this, void 0, void 0, function* () {
4581
- return (yield this.getEntities(owner, 'container'));
4582
- });
4758
+ async getContainers(owner) {
4759
+ return (await this.getEntities(owner, 'container'));
4583
4760
  }
4584
- getShipSummaries(owner) {
4585
- return tslib.__awaiter(this, void 0, void 0, function* () {
4586
- return this.getSummaries(owner, 'ship');
4587
- });
4761
+ async getShipSummaries(owner) {
4762
+ return this.getSummaries(owner, 'ship');
4588
4763
  }
4589
- getWarehouseSummaries(owner) {
4590
- return tslib.__awaiter(this, void 0, void 0, function* () {
4591
- return this.getSummaries(owner, 'warehouse');
4592
- });
4764
+ async getWarehouseSummaries(owner) {
4765
+ return this.getSummaries(owner, 'warehouse');
4593
4766
  }
4594
- getContainerSummaries(owner) {
4595
- return tslib.__awaiter(this, void 0, void 0, function* () {
4596
- return this.getSummaries(owner, 'container');
4597
- });
4767
+ async getContainerSummaries(owner) {
4768
+ return this.getSummaries(owner, 'container');
4598
4769
  }
4599
4770
  wrapEntity(entity) {
4600
4771
  if (entity.type.equals('ship')) {
@@ -4632,8 +4803,7 @@ class Player extends Types.player_row {
4632
4803
  return this._shipCount;
4633
4804
  }
4634
4805
  getNextShipCost(shipCount) {
4635
- var _a;
4636
- const count = (_a = shipCount !== null && shipCount !== void 0 ? shipCount : this._shipCount) !== null && _a !== void 0 ? _a : 0;
4806
+ const count = shipCount ?? this._shipCount ?? 0;
4637
4807
  const cost = Math.pow(Player.SHIP_COST_MULTIPLIER, count) * Player.BASE_SHIP_COST;
4638
4808
  return antelope.UInt64.from(Math.floor(cost));
4639
4809
  }
@@ -4750,14 +4920,12 @@ Player.BASE_SHIP_COST = 500;
4750
4920
  Player.SHIP_COST_MULTIPLIER = 5;
4751
4921
 
4752
4922
  class PlayersManager extends BaseManager {
4753
- getPlayer(account) {
4754
- return tslib.__awaiter(this, void 0, void 0, function* () {
4755
- const playerRow = yield this.server.table('player').get(antelope.Name.from(account));
4756
- if (!playerRow) {
4757
- return undefined;
4758
- }
4759
- return new Player(playerRow);
4760
- });
4923
+ async getPlayer(account) {
4924
+ const playerRow = await this.server.table('player').get(antelope.Name.from(account));
4925
+ if (!playerRow) {
4926
+ return undefined;
4927
+ }
4928
+ return new Player(playerRow);
4761
4929
  }
4762
4930
  }
4763
4931
 
@@ -4911,137 +5079,113 @@ function getSupply(gameSeed, state, location, goodId) {
4911
5079
  return Math.floor(base * percent * ship * epoch);
4912
5080
  }
4913
5081
  function marketPrice(location, goodId, gameSeed, state) {
4914
- const good = getGood(goodId);
4915
- let price = Number(good.base_price);
5082
+ const item = getItem(goodId);
5083
+ let price = Number(item.base_price);
4916
5084
  const rarityMultiplier = getRarityMultiplier(gameSeed, state.seed, location, goodId);
4917
5085
  price *= rarityMultiplier;
4918
5086
  const locationMultiplier = getLocationMultiplier(gameSeed, location, goodId);
4919
5087
  price *= locationMultiplier;
4920
5088
  const supply = getSupply(gameSeed, state, location, goodId);
4921
- return exports.GoodPrice.from({
5089
+ return exports.ItemPrice.from({
4922
5090
  id: goodId,
4923
- good,
5091
+ item,
4924
5092
  price: antelope.UInt32.from(price),
4925
5093
  supply: antelope.UInt16.from(supply),
4926
5094
  });
4927
5095
  }
4928
5096
  function marketPrices(location, gameSeed, state) {
4929
- return getGoods().map((good) => marketPrice(location, good.id, gameSeed, state));
5097
+ return getItems().map((item) => marketPrice(location, item.id, gameSeed, state));
4930
5098
  }
4931
5099
 
4932
5100
  class LocationsManager extends BaseManager {
4933
- getMarketPrice(location, goodId) {
4934
- return tslib.__awaiter(this, void 0, void 0, function* () {
4935
- const game = yield this.getGame();
4936
- const state = yield this.getState();
4937
- return marketPrice(location, goodId, game.config.seed, state);
4938
- });
4939
- }
4940
- getMarketPrices(location) {
4941
- return tslib.__awaiter(this, void 0, void 0, function* () {
4942
- const game = yield this.getGame();
4943
- const state = yield this.getState();
4944
- return marketPrices(location, game.config.seed, state);
4945
- });
4946
- }
4947
- getMarketPricesWithSupply(location) {
4948
- return tslib.__awaiter(this, void 0, void 0, function* () {
4949
- const [game, state, supplyRows] = yield Promise.all([
4950
- this.getGame(),
4951
- this.getState(),
4952
- this.getSupplyRows(location),
4953
- ]);
4954
- const prices = marketPrices(location, game.config.seed, state);
4955
- const supplyMap = new Map();
4956
- for (const row of supplyRows) {
4957
- if (antelope.UInt64.from(row.epoch).equals(state.epoch)) {
4958
- supplyMap.set(Number(row.good_id), Number(row.supply));
4959
- }
5101
+ async getMarketPrice(location, goodId) {
5102
+ const game = await this.getGame();
5103
+ const state = await this.getState();
5104
+ return marketPrice(location, goodId, game.config.seed, state);
5105
+ }
5106
+ async getMarketPrices(location) {
5107
+ const game = await this.getGame();
5108
+ const state = await this.getState();
5109
+ return marketPrices(location, game.config.seed, state);
5110
+ }
5111
+ async getMarketPricesWithSupply(location) {
5112
+ const [game, state, supplyRows] = await Promise.all([
5113
+ this.getGame(),
5114
+ this.getState(),
5115
+ this.getSupplyRows(location),
5116
+ ]);
5117
+ const prices = marketPrices(location, game.config.seed, state);
5118
+ const supplyMap = new Map();
5119
+ for (const row of supplyRows) {
5120
+ if (antelope.UInt64.from(row.epoch).equals(state.epoch)) {
5121
+ supplyMap.set(Number(row.item_id), Number(row.supply));
4960
5122
  }
4961
- return prices.map((price) => {
4962
- const actualSupply = supplyMap.get(Number(price.id));
4963
- if (actualSupply !== undefined) {
4964
- return exports.GoodPrice.from({
4965
- id: price.id,
4966
- good: price.good,
4967
- price: price.price,
4968
- supply: antelope.UInt64.from(actualSupply),
4969
- });
4970
- }
4971
- return price;
4972
- });
4973
- });
4974
- }
4975
- hasSystem(location) {
4976
- return tslib.__awaiter(this, void 0, void 0, function* () {
4977
- const game = yield this.getGame();
4978
- return hasSystem(game.config.seed, location);
4979
- });
4980
- }
4981
- findNearbyPlanets(origin, maxDistance = 20) {
4982
- return tslib.__awaiter(this, void 0, void 0, function* () {
4983
- const game = yield this.getGame();
4984
- return findNearbyPlanets(game.config.seed, origin, maxDistance);
4985
- });
4986
- }
4987
- getSupplyRows(location) {
4988
- return tslib.__awaiter(this, void 0, void 0, function* () {
4989
- const hash = antelope.Checksum256.hash(antelope.Bytes.from(`${location.x}-${location.y}`, 'utf8'));
4990
- return this.server.table('supply').all({
4991
- index_position: 'secondary',
4992
- from: hash,
4993
- to: hash,
4994
- });
4995
- });
4996
- }
4997
- getLocationWithPrices(coords) {
4998
- return tslib.__awaiter(this, void 0, void 0, function* () {
4999
- const location = toLocation(coords);
5000
- const prices = yield this.getMarketPrices(location.coordinates);
5001
- location.setMarketPrices(prices);
5002
- return location;
5003
- });
5004
- }
5005
- getLocationWithSupply(coords) {
5006
- return tslib.__awaiter(this, void 0, void 0, function* () {
5007
- const location = toLocation(coords);
5008
- const [rows, state] = yield Promise.all([
5009
- this.getSupplyRows(location.coordinates),
5010
- this.getState(),
5011
- ]);
5012
- location.setLocationRows(rows, state.epoch);
5013
- return location;
5123
+ }
5124
+ return prices.map((price) => {
5125
+ const actualSupply = supplyMap.get(Number(price.id));
5126
+ if (actualSupply !== undefined) {
5127
+ return exports.ItemPrice.from({
5128
+ id: price.id,
5129
+ item: price.item,
5130
+ price: price.price,
5131
+ supply: antelope.UInt64.from(actualSupply),
5132
+ });
5133
+ }
5134
+ return price;
5014
5135
  });
5015
5136
  }
5016
- getLocationComplete(coords) {
5017
- return tslib.__awaiter(this, void 0, void 0, function* () {
5018
- const location = toLocation(coords);
5019
- const [prices, rows, state] = yield Promise.all([
5020
- this.getMarketPrices(location.coordinates),
5021
- this.getSupplyRows(location.coordinates),
5022
- this.getState(),
5023
- ]);
5024
- location.setMarketPrices(prices);
5025
- location.setLocationRows(rows, state.epoch);
5026
- return location;
5027
- });
5137
+ async hasSystem(location) {
5138
+ const game = await this.getGame();
5139
+ return hasSystem(game.config.seed, location);
5028
5140
  }
5029
- getLocationEntity(id) {
5030
- return tslib.__awaiter(this, void 0, void 0, function* () {
5031
- const row = yield this.server.table('location').get(antelope.UInt64.from(id));
5032
- return row !== null && row !== void 0 ? row : undefined;
5033
- });
5141
+ async findNearbyPlanets(origin, maxDistance = 20) {
5142
+ const game = await this.getGame();
5143
+ return findNearbyPlanets(game.config.seed, origin, maxDistance);
5034
5144
  }
5035
- getLocationEntityAt(coords) {
5036
- return tslib.__awaiter(this, void 0, void 0, function* () {
5037
- const id = coordsToLocationId(coords);
5038
- return this.getLocationEntity(id);
5145
+ async getSupplyRows(location) {
5146
+ const hash = antelope.Checksum256.hash(antelope.Bytes.from(`${location.x}-${location.y}`, 'utf8'));
5147
+ return this.server.table('supply').all({
5148
+ index_position: 'secondary',
5149
+ from: hash,
5150
+ to: hash,
5039
5151
  });
5040
5152
  }
5041
- getAllLocationEntities() {
5042
- return tslib.__awaiter(this, void 0, void 0, function* () {
5043
- return this.server.table('location').all();
5044
- });
5153
+ async getLocationWithPrices(coords) {
5154
+ const location = toLocation(coords);
5155
+ const prices = await this.getMarketPrices(location.coordinates);
5156
+ location.setMarketPrices(prices);
5157
+ return location;
5158
+ }
5159
+ async getLocationWithSupply(coords) {
5160
+ const location = toLocation(coords);
5161
+ const [rows, state] = await Promise.all([
5162
+ this.getSupplyRows(location.coordinates),
5163
+ this.getState(),
5164
+ ]);
5165
+ location.setLocationRows(rows, state.epoch);
5166
+ return location;
5167
+ }
5168
+ async getLocationComplete(coords) {
5169
+ const location = toLocation(coords);
5170
+ const [prices, rows, state] = await Promise.all([
5171
+ this.getMarketPrices(location.coordinates),
5172
+ this.getSupplyRows(location.coordinates),
5173
+ this.getState(),
5174
+ ]);
5175
+ location.setMarketPrices(prices);
5176
+ location.setLocationRows(rows, state.epoch);
5177
+ return location;
5178
+ }
5179
+ async getLocationEntity(id) {
5180
+ const row = await this.server.table('location').get(antelope.UInt64.from(id));
5181
+ return row ?? undefined;
5182
+ }
5183
+ async getLocationEntityAt(coords) {
5184
+ const id = coordsToLocationId(coords);
5185
+ return this.getLocationEntity(id);
5186
+ }
5187
+ async getAllLocationEntities() {
5188
+ return this.server.table('location').all();
5045
5189
  }
5046
5190
  }
5047
5191
 
@@ -5052,7 +5196,7 @@ function calculateUpdatedCargoCost(currentPaid, currentOwned, purchaseCost, purc
5052
5196
  }
5053
5197
  function calculateMaxTradeQuantity(ship, player, goodPrice) {
5054
5198
  const pricePerUnit = antelope.UInt32.from(goodPrice.price);
5055
- const massPerUnit = antelope.UInt32.from(goodPrice.good.mass);
5199
+ const massPerUnit = antelope.UInt32.from(goodPrice.item.mass);
5056
5200
  const spaceForQuantity = ship.availableCapacity.dividing(massPerUnit);
5057
5201
  const affordableQuantity = player.balance.dividing(pricePerUnit);
5058
5202
  const maxQuantity = spaceForQuantity.lt(affordableQuantity)
@@ -5085,7 +5229,7 @@ function calculateProfitPerSecond(profit, travelTimeSeconds) {
5085
5229
  const t = antelope.UInt32.from(travelTimeSeconds);
5086
5230
  return t.gt(antelope.UInt32.zero) ? Number(profit) / Number(t) : 0;
5087
5231
  }
5088
- function findBestGoodToTrade(ship, player, originPrices, destPrices, travelTimeSeconds) {
5232
+ function findBestItemToTrade(ship, player, originPrices, destPrices, travelTimeSeconds) {
5089
5233
  let bestTrade = null;
5090
5234
  let bestProfitPerSecond = 0;
5091
5235
  for (const originPrice of originPrices) {
@@ -5102,7 +5246,7 @@ function findBestGoodToTrade(ship, player, originPrices, destPrices, travelTimeS
5102
5246
  if (profitPerSecond > bestProfitPerSecond) {
5103
5247
  bestProfitPerSecond = profitPerSecond;
5104
5248
  bestTrade = {
5105
- good: originPrice,
5249
+ item: originPrice,
5106
5250
  quantity: calc.maxQuantity,
5107
5251
  profit: Number(tradeResult.profit),
5108
5252
  profitPerSecond,
@@ -5122,100 +5266,99 @@ function calculateROI(cost, profit) {
5122
5266
  return cost > 0 ? (profit / cost) * 100 : 0;
5123
5267
  }
5124
5268
 
5125
- function findDealsForShip(ship, originLocation, getNearbyLocations, getMarketPrices, options = {}) {
5126
- return tslib.__awaiter(this, void 0, void 0, function* () {
5127
- const { maxDeals = 10, maxDistance = 20 * PRECISION, playerBalance, minProfitPerSecond = 0, minMarginPercent = 0, availableSpace, } = options;
5128
- const balance = playerBalance !== undefined ? antelope.UInt64.from(playerBalance) : undefined;
5129
- const origin = Location.from(originLocation);
5130
- const originPrices = yield getMarketPrices(originLocation);
5131
- origin.setMarketPrices(originPrices);
5132
- const nearbyLocations = yield getNearbyLocations(originLocation, maxDistance);
5133
- const deals = [];
5134
- const currentMass = ship.totalMass;
5135
- const shipCapacity = ship.maxCapacity;
5136
- const effectiveAvailableMass = availableSpace !== undefined
5137
- ? antelope.UInt64.from(availableSpace)
5138
- : currentMass.lt(shipCapacity)
5139
- ? shipCapacity.subtracting(currentMass)
5140
- : antelope.UInt64.zero;
5141
- for (const destLocation of nearbyLocations) {
5142
- const destinationPrices = yield getMarketPrices(destLocation.coordinates);
5143
- destLocation.setMarketPrices(destinationPrices);
5144
- const distance = distanceBetweenCoordinates(originLocation, destLocation.coordinates);
5145
- for (const originGood of originPrices) {
5146
- const destGood = destinationPrices.find((g) => g.id.equals(originGood.id));
5147
- if (!destGood)
5148
- continue;
5149
- if (!isProfitable(originGood.price, destGood.price) ||
5150
- originGood.supply.equals(antelope.UInt16.from(0))) {
5151
- continue;
5152
- }
5153
- const canAfford = balance !== undefined
5154
- ? balance.dividing(originGood.price)
5155
- : antelope.UInt64.from(Number.MAX_SAFE_INTEGER);
5156
- const canHaul = effectiveAvailableMass.dividing(originGood.good.mass);
5157
- const supplyLimit = antelope.UInt64.from(originGood.supply);
5158
- let maxQuantity = canAfford;
5159
- if (canHaul.lt(maxQuantity))
5160
- maxQuantity = canHaul;
5161
- if (supplyLimit.lt(maxQuantity))
5162
- maxQuantity = supplyLimit;
5163
- if (maxQuantity.equals(antelope.UInt64.zero))
5164
- continue;
5165
- const cargoMass = originGood.good.mass.multiplying(maxQuantity);
5166
- const availableSpaceUInt = antelope.UInt64.from(availableSpace);
5167
- const baseMass = availableSpace !== undefined
5168
- ? shipCapacity.gte(availableSpaceUInt)
5169
- ? shipCapacity.subtracting(availableSpaceUInt)
5170
- : antelope.UInt64.zero
5171
- : currentMass;
5172
- const totalMass = baseMass.adding(cargoMass);
5173
- const needsRecharge = !ship.hasEnergyFor(distance);
5174
- const travelEstimate = estimateTravelTime(ship, totalMass, distance, {
5175
- needsRecharge,
5176
- loadMass: Number(cargoMass),
5177
- });
5178
- const tradeCalc = calculateTradeProfit(maxQuantity, originGood.price, destGood.price);
5179
- const profitPerUnit = destGood.price.subtracting(originGood.price);
5180
- const profitPerSecond = calculateProfitPerSecond(tradeCalc.profit, travelEstimate.total);
5181
- if (profitPerSecond < minProfitPerSecond)
5182
- continue;
5183
- if (tradeCalc.margin < minMarginPercent)
5184
- continue;
5185
- deals.push({
5186
- origin,
5187
- destination: destLocation,
5188
- good: originGood,
5189
- distance,
5190
- supply: originGood.supply,
5191
- buyPrice: originGood.price,
5192
- sellPrice: destGood.price,
5193
- profitPerUnit,
5194
- maxQuantity: antelope.UInt32.from(maxQuantity),
5195
- totalProfit: tradeCalc.profit,
5196
- travelTime: travelEstimate.total,
5197
- travelTimeBreakdown: travelEstimate,
5198
- profitPerSecond,
5199
- marginPercent: tradeCalc.margin,
5200
- });
5269
+ async function findDealsForShip(ship, originLocation, getNearbyLocations, getMarketPrices, options = {}) {
5270
+ const { maxDeals = 10, maxDistance = 20 * PRECISION, playerBalance, minProfitPerSecond = 0, minMarginPercent = 0, availableSpace, } = options;
5271
+ const balance = playerBalance !== undefined ? antelope.UInt64.from(playerBalance) : undefined;
5272
+ const origin = Location.from(originLocation);
5273
+ const originPrices = await getMarketPrices(originLocation);
5274
+ origin.setMarketPrices(originPrices);
5275
+ const nearbyLocations = await getNearbyLocations(originLocation, maxDistance);
5276
+ const deals = [];
5277
+ const currentMass = ship.totalMass;
5278
+ const shipCapacity = ship.maxCapacity;
5279
+ const effectiveAvailableMass = availableSpace !== undefined
5280
+ ? antelope.UInt64.from(availableSpace)
5281
+ : currentMass.lt(shipCapacity)
5282
+ ? shipCapacity.subtracting(currentMass)
5283
+ : antelope.UInt64.zero;
5284
+ for (const destLocation of nearbyLocations) {
5285
+ const destinationPrices = await getMarketPrices(destLocation.coordinates);
5286
+ destLocation.setMarketPrices(destinationPrices);
5287
+ const distance = distanceBetweenCoordinates(originLocation, destLocation.coordinates);
5288
+ for (const originGood of originPrices) {
5289
+ const destGood = destinationPrices.find((g) => g.id.equals(originGood.id));
5290
+ if (!destGood)
5291
+ continue;
5292
+ if (!isProfitable(originGood.price, destGood.price) ||
5293
+ originGood.supply.equals(antelope.UInt16.from(0))) {
5294
+ continue;
5201
5295
  }
5296
+ const canAfford = balance !== undefined
5297
+ ? balance.dividing(originGood.price)
5298
+ : antelope.UInt64.from(Number.MAX_SAFE_INTEGER);
5299
+ const canHaul = effectiveAvailableMass.dividing(originGood.item.mass);
5300
+ const supplyLimit = antelope.UInt64.from(originGood.supply);
5301
+ let maxQuantity = canAfford;
5302
+ if (canHaul.lt(maxQuantity))
5303
+ maxQuantity = canHaul;
5304
+ if (supplyLimit.lt(maxQuantity))
5305
+ maxQuantity = supplyLimit;
5306
+ if (maxQuantity.equals(antelope.UInt64.zero))
5307
+ continue;
5308
+ const cargoMass = originGood.item.mass.multiplying(maxQuantity);
5309
+ const availableSpaceUInt = antelope.UInt64.from(availableSpace);
5310
+ const baseMass = availableSpace !== undefined
5311
+ ? shipCapacity.gte(availableSpaceUInt)
5312
+ ? shipCapacity.subtracting(availableSpaceUInt)
5313
+ : antelope.UInt64.zero
5314
+ : currentMass;
5315
+ const totalMass = baseMass.adding(cargoMass);
5316
+ const needsRecharge = !ship.hasEnergyFor(distance);
5317
+ const travelEstimate = estimateTravelTime(ship, totalMass, distance, {
5318
+ needsRecharge,
5319
+ loadMass: Number(cargoMass),
5320
+ });
5321
+ const tradeCalc = calculateTradeProfit(maxQuantity, originGood.price, destGood.price);
5322
+ const profitPerUnit = destGood.price.subtracting(originGood.price);
5323
+ const profitPerSecond = calculateProfitPerSecond(tradeCalc.profit, travelEstimate.total);
5324
+ if (profitPerSecond < minProfitPerSecond)
5325
+ continue;
5326
+ if (tradeCalc.margin < minMarginPercent)
5327
+ continue;
5328
+ deals.push({
5329
+ origin,
5330
+ destination: destLocation,
5331
+ item: originGood,
5332
+ distance,
5333
+ supply: originGood.supply,
5334
+ buyPrice: originGood.price,
5335
+ sellPrice: destGood.price,
5336
+ profitPerUnit,
5337
+ maxQuantity: antelope.UInt32.from(maxQuantity),
5338
+ totalProfit: tradeCalc.profit,
5339
+ travelTime: travelEstimate.total,
5340
+ travelTimeBreakdown: travelEstimate,
5341
+ profitPerSecond,
5342
+ marginPercent: tradeCalc.margin,
5343
+ });
5202
5344
  }
5203
- deals.sort((a, b) => b.profitPerSecond - a.profitPerSecond);
5204
- return deals.slice(0, maxDeals);
5205
- });
5345
+ }
5346
+ deals.sort((a, b) => b.profitPerSecond - a.profitPerSecond);
5347
+ return deals.slice(0, maxDeals);
5206
5348
  }
5207
- function findBestDeal(ship, originLocation, getNearbyLocations, getMarketPrices, options = {}) {
5208
- return tslib.__awaiter(this, void 0, void 0, function* () {
5209
- const deals = yield findDealsForShip(ship, originLocation, getNearbyLocations, getMarketPrices, Object.assign(Object.assign({}, options), { maxDeals: 1 }));
5210
- return deals[0];
5349
+ async function findBestDeal(ship, originLocation, getNearbyLocations, getMarketPrices, options = {}) {
5350
+ const deals = await findDealsForShip(ship, originLocation, getNearbyLocations, getMarketPrices, {
5351
+ ...options,
5352
+ maxDeals: 1,
5211
5353
  });
5354
+ return deals[0];
5212
5355
  }
5213
5356
 
5214
5357
  function calculateCargoMass(cargo) {
5215
5358
  let mass = antelope.UInt32.from(0);
5216
5359
  for (const c of cargo) {
5217
5360
  if (antelope.UInt64.from(c.quantity).gt(antelope.UInt64.zero)) {
5218
- const goodMass = getGood(c.good_id).mass;
5361
+ const goodMass = getItem(c.item_id).mass;
5219
5362
  mass = mass.adding(goodMass.multiplying(c.quantity));
5220
5363
  }
5221
5364
  }
@@ -5237,7 +5380,7 @@ function analyzeCargoSale(cargo, prices) {
5237
5380
  for (const c of cargo) {
5238
5381
  if (antelope.UInt64.from(c.quantity).equals(antelope.UInt64.zero))
5239
5382
  continue;
5240
- const goodId = Number(c.good_id);
5383
+ const goodId = Number(c.item_id);
5241
5384
  const salePrice = prices.get(goodId);
5242
5385
  if (salePrice) {
5243
5386
  revenue = revenue.adding(antelope.UInt64.from(salePrice).multiplying(c.quantity));
@@ -5251,20 +5394,19 @@ function analyzeCargoSale(cargo, prices) {
5251
5394
  };
5252
5395
  }
5253
5396
  function buildCargoSaleItems(cargo, prices) {
5254
- var _a, _b;
5255
5397
  const items = [];
5256
5398
  for (const c of cargo) {
5257
5399
  if (antelope.UInt64.from(c.quantity).equals(antelope.UInt64.zero))
5258
5400
  continue;
5259
- const goodId = Number(c.good_id);
5401
+ const goodId = Number(c.item_id);
5260
5402
  const salePrice = prices.get(goodId);
5261
5403
  const pricePerUnit = salePrice ? antelope.UInt32.from(salePrice) : antelope.UInt32.zero;
5262
5404
  const revenue = antelope.UInt64.from(pricePerUnit).multiplying(c.quantity);
5263
5405
  const cost = c.unit_cost.multiplying(c.quantity);
5264
5406
  const profit = antelope.Int64.from(revenue).subtracting(cost);
5265
5407
  items.push({
5266
- goodId: c.good_id,
5267
- goodName: (_b = (_a = c.good) === null || _a === void 0 ? void 0 : _a.name) !== null && _b !== void 0 ? _b : `Good #${goodId}`,
5408
+ goodId: c.item_id,
5409
+ goodName: c.item?.name ?? `Item #${goodId}`,
5268
5410
  quantity: antelope.UInt32.from(c.quantity),
5269
5411
  pricePerUnit,
5270
5412
  revenue,
@@ -5275,13 +5417,12 @@ function buildCargoSaleItems(cargo, prices) {
5275
5417
  return items;
5276
5418
  }
5277
5419
  function createSellAndTradeOption(saleRevenue, saleCost, deal, cargoSale, unloadTime) {
5278
- var _a;
5279
5420
  const saleProfit = antelope.Int64.from(saleRevenue).subtracting(saleCost);
5280
5421
  const totalProfit = saleProfit.adding(deal.totalProfit);
5281
5422
  const profitPerSecond = deal.travelTime.gt(antelope.UInt32.zero)
5282
5423
  ? Number(totalProfit) / Number(deal.travelTime)
5283
5424
  : Number(totalProfit);
5284
- const unload = unloadTime !== null && unloadTime !== void 0 ? unloadTime : antelope.UInt32.zero;
5425
+ const unload = unloadTime ?? antelope.UInt32.zero;
5285
5426
  const breakdown = deal.travelTimeBreakdown
5286
5427
  ? {
5287
5428
  unloadTime: unload,
@@ -5295,10 +5436,10 @@ function createSellAndTradeOption(saleRevenue, saleCost, deal, cargoSale, unload
5295
5436
  }
5296
5437
  : undefined;
5297
5438
  return {
5298
- id: `sell-trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.good.id}`,
5439
+ id: `sell-trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.item.id}`,
5299
5440
  type: 'sell-and-trade',
5300
- title: `Trade ${deal.good.good.name}`,
5301
- description: `Sell cargo, buy ${deal.maxQuantity} ${deal.good.good.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
5441
+ title: `Trade ${deal.item.item.name}`,
5442
+ description: `Sell cargo, buy ${deal.maxQuantity} ${deal.item.item.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
5302
5443
  reason: `${deal.marginPercent.toFixed(0)}% margin, ${deal.profitPerSecond.toFixed(1)}/s profit rate`,
5303
5444
  recommended: false,
5304
5445
  highestProfit: false,
@@ -5310,7 +5451,7 @@ function createSellAndTradeOption(saleRevenue, saleCost, deal, cargoSale, unload
5310
5451
  marginPercent: deal.marginPercent,
5311
5452
  destination: deal.destination,
5312
5453
  deal,
5313
- travelTime: (_a = breakdown === null || breakdown === void 0 ? void 0 : breakdown.total) !== null && _a !== void 0 ? _a : deal.travelTime,
5454
+ travelTime: breakdown?.total ?? deal.travelTime,
5314
5455
  travelTimeBreakdown: breakdown,
5315
5456
  cargoSale,
5316
5457
  cargoProfitLoss: saleProfit,
@@ -5326,7 +5467,7 @@ function createTravelToSellOption(currentRevenue, cargoCost, betterSale, cargo,
5326
5467
  : antelope.UInt32.zero;
5327
5468
  const hasDealAfter = !!betterSale.bestDealAfterSale;
5328
5469
  const cargoSale = destPrices ? buildCargoSaleItems(cargo, destPrices) : undefined;
5329
- const cargoProfitLoss = cargoSale === null || cargoSale === void 0 ? void 0 : cargoSale.reduce((sum, item) => sum.adding(item.profit), antelope.Int64.zero);
5470
+ const cargoProfitLoss = cargoSale?.reduce((sum, item) => sum.adding(item.profit), antelope.Int64.zero);
5330
5471
  const saleProfit = antelope.Int64.from(betterSale.revenue).subtracting(cargoCost);
5331
5472
  const profitPerSecond = betterSale.travelTime.gt(antelope.UInt32.zero)
5332
5473
  ? Number(saleProfit) / Number(betterSale.travelTime)
@@ -5360,7 +5501,7 @@ function createSellAndRepositionOption(saleRevenue, saleCost, reposition, cargoS
5360
5501
  id: `sell-reposition-${reposition.location.coordinates.x}-${reposition.location.coordinates.y}`,
5361
5502
  type: 'sell-and-reposition',
5362
5503
  title: 'Sell & Move',
5363
- description: `Sell cargo here, travel empty to buy ${deal.good.good.name}`,
5504
+ description: `Sell cargo here, travel empty to buy ${deal.item.item.name}`,
5364
5505
  reason: `No good trades here — ${deal.marginPercent.toFixed(0)}% margin trade available at destination`,
5365
5506
  recommended: false,
5366
5507
  highestProfit: false,
@@ -5461,249 +5602,246 @@ function createExploreOption(destination, travelTime, discountedGood, travelTime
5461
5602
  potentialDeals,
5462
5603
  };
5463
5604
  }
5464
- function analyzeCollectOptions(ship, arrivedAt, callbacks, options = {}) {
5465
- var _a, _b, _c, _d, _e;
5466
- return tslib.__awaiter(this, void 0, void 0, function* () {
5467
- const { playerBalance = Infinity, minSaleImprovement = 100 } = options;
5468
- const cargo = ship.sellableCargo;
5469
- const hasCargo = cargo.length > 0;
5470
- const originPrices = yield callbacks.getMarketPrices(arrivedAt);
5471
- const priceMap = new Map(originPrices.map((p) => [Number(p.id), p.price]));
5472
- const { revenue: cargoValueHere, cost: cargoCost } = analyzeCargoSale(cargo, priceMap);
5473
- const cargoSaleHere = buildCargoSaleItems(cargo, priceMap);
5474
- const collectOptions = [];
5475
- const maxDistance = (_a = options.maxDistance) !== null && _a !== void 0 ? _a : Number(ship.maxDistance);
5476
- const nearbyLocations = yield callbacks.getNearbyLocations(arrivedAt, maxDistance);
5477
- const dealsAtOrigin = yield findDealsForShip(ship, arrivedAt, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
5478
- maxDeals: 5,
5479
- maxDistance,
5480
- playerBalance: playerBalance + Number(cargoValueHere),
5481
- availableSpace: Number(ship.maxCapacity),
5482
- });
5483
- if (hasCargo && dealsAtOrigin.length > 0) {
5484
- const cargoGoodIds = new Set(cargo.map((c) => Number(c.good_id)));
5485
- for (const deal of dealsAtOrigin.slice(0, 3)) {
5486
- const dealGoodId = Number(deal.good.id);
5487
- if (cargoGoodIds.has(dealGoodId)) {
5488
- continue;
5489
- }
5490
- const unloadTime = calculateUnloadTime(ship, cargo);
5491
- const option = createSellAndTradeOption(cargoValueHere, cargoCost, deal, cargoSaleHere, unloadTime);
5492
- collectOptions.push(option);
5605
+ async function analyzeCollectOptions(ship, arrivedAt, callbacks, options = {}) {
5606
+ const { playerBalance = Infinity, minSaleImprovement = 100 } = options;
5607
+ const cargo = ship.sellableCargo;
5608
+ const hasCargo = cargo.length > 0;
5609
+ const originPrices = await callbacks.getMarketPrices(arrivedAt);
5610
+ const priceMap = new Map(originPrices.map((p) => [Number(p.id), p.price]));
5611
+ const { revenue: cargoValueHere, cost: cargoCost } = analyzeCargoSale(cargo, priceMap);
5612
+ const cargoSaleHere = buildCargoSaleItems(cargo, priceMap);
5613
+ const collectOptions = [];
5614
+ const maxDistance = options.maxDistance ?? Number(ship.maxDistance);
5615
+ const nearbyLocations = await callbacks.getNearbyLocations(arrivedAt, maxDistance);
5616
+ const dealsAtOrigin = await findDealsForShip(ship, arrivedAt, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
5617
+ maxDeals: 5,
5618
+ maxDistance,
5619
+ playerBalance: playerBalance + Number(cargoValueHere),
5620
+ availableSpace: Number(ship.maxCapacity),
5621
+ });
5622
+ if (hasCargo && dealsAtOrigin.length > 0) {
5623
+ const cargoGoodIds = new Set(cargo.map((c) => Number(c.item_id)));
5624
+ for (const deal of dealsAtOrigin.slice(0, 3)) {
5625
+ const dealGoodId = Number(deal.item.id);
5626
+ if (cargoGoodIds.has(dealGoodId)) {
5627
+ continue;
5493
5628
  }
5629
+ const unloadTime = calculateUnloadTime(ship, cargo);
5630
+ const option = createSellAndTradeOption(cargoValueHere, cargoCost, deal, cargoSaleHere, unloadTime);
5631
+ collectOptions.push(option);
5494
5632
  }
5495
- if (hasCargo) {
5496
- const locationsToCheck = nearbyLocations.slice(0, 10);
5497
- const allDestPrices = yield Promise.all(locationsToCheck.map((loc) => callbacks.getMarketPrices(loc.coordinates)));
5498
- const candidateLocations = [];
5499
- for (let i = 0; i < locationsToCheck.length; i++) {
5500
- const destLocation = locationsToCheck[i];
5501
- const destPrices = allDestPrices[i];
5502
- const destPriceMap = new Map(destPrices.map((p) => [Number(p.id), p.price]));
5503
- const { revenue: destRevenue } = analyzeCargoSale(cargo, destPriceMap);
5504
- const improvement = antelope.Int64.from(destRevenue).subtracting(cargoValueHere);
5505
- if (improvement.gt(antelope.Int64.from(minSaleImprovement))) {
5506
- candidateLocations.push({ destLocation, destPriceMap, destRevenue, improvement });
5507
- }
5508
- }
5509
- const betterSaleResults = yield Promise.all(candidateLocations.map(({ destLocation, destPriceMap, destRevenue, improvement }) => tslib.__awaiter(this, void 0, void 0, function* () {
5510
- const distance = distanceBetweenCoordinates(arrivedAt, destLocation.coordinates);
5511
- const needsRecharge = !ship.hasEnergyFor(distance);
5512
- const travelEstimate = estimateTravelTime(ship, ship.totalMass, distance, {
5513
- needsRecharge,
5514
- });
5515
- const dealsAfterSale = yield findDealsForShip(ship, destLocation.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
5516
- maxDeals: 1,
5517
- maxDistance,
5518
- playerBalance: destRevenue,
5519
- availableSpace: Number(ship.maxCapacity),
5520
- });
5521
- return {
5522
- better: {
5523
- location: destLocation,
5524
- price: antelope.UInt32.from(destRevenue.dividing(cargo.reduce((s, c) => s.adding(c.quantity), antelope.UInt64.zero))),
5525
- revenue: destRevenue,
5526
- improvement,
5527
- bestDealAfterSale: dealsAfterSale[0],
5528
- distance,
5529
- travelTime: travelEstimate.total,
5530
- travelTimeBreakdown: travelEstimate,
5531
- },
5532
- destPriceMap,
5533
- };
5534
- })));
5535
- const betterSaleLocations = betterSaleResults.sort((a, b) => Number(b.better.improvement) - Number(a.better.improvement));
5536
- for (const { better, destPriceMap } of betterSaleLocations.slice(0, 2)) {
5537
- const option = createTravelToSellOption(cargoValueHere, cargoCost, better, cargo, destPriceMap);
5538
- collectOptions.push(option);
5633
+ }
5634
+ if (hasCargo) {
5635
+ const locationsToCheck = nearbyLocations.slice(0, 10);
5636
+ const allDestPrices = await Promise.all(locationsToCheck.map((loc) => callbacks.getMarketPrices(loc.coordinates)));
5637
+ const candidateLocations = [];
5638
+ for (let i = 0; i < locationsToCheck.length; i++) {
5639
+ const destLocation = locationsToCheck[i];
5640
+ const destPrices = allDestPrices[i];
5641
+ const destPriceMap = new Map(destPrices.map((p) => [Number(p.id), p.price]));
5642
+ const { revenue: destRevenue } = analyzeCargoSale(cargo, destPriceMap);
5643
+ const improvement = antelope.Int64.from(destRevenue).subtracting(cargoValueHere);
5644
+ if (improvement.gt(antelope.Int64.from(minSaleImprovement))) {
5645
+ candidateLocations.push({ destLocation, destPriceMap, destRevenue, improvement });
5539
5646
  }
5540
5647
  }
5541
- if (hasCargo && dealsAtOrigin.length === 0) {
5542
- const locationsToCheck = nearbyLocations.slice(0, 10);
5543
- const allDealsAtDest = yield Promise.all(locationsToCheck.map((destLocation) => findDealsForShip(ship, destLocation.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
5648
+ const betterSaleResults = await Promise.all(candidateLocations.map(async ({ destLocation, destPriceMap, destRevenue, improvement }) => {
5649
+ const distance = distanceBetweenCoordinates(arrivedAt, destLocation.coordinates);
5650
+ const needsRecharge = !ship.hasEnergyFor(distance);
5651
+ const travelEstimate = estimateTravelTime(ship, ship.totalMass, distance, {
5652
+ needsRecharge,
5653
+ });
5654
+ const dealsAfterSale = await findDealsForShip(ship, destLocation.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
5544
5655
  maxDeals: 1,
5545
5656
  maxDistance,
5546
- playerBalance: antelope.UInt64.from(playerBalance).adding(cargoValueHere),
5657
+ playerBalance: destRevenue,
5547
5658
  availableSpace: Number(ship.maxCapacity),
5548
- })));
5549
- const repositionLocations = [];
5550
- for (let i = 0; i < locationsToCheck.length; i++) {
5551
- const destLocation = locationsToCheck[i];
5552
- const dealsAtDest = allDealsAtDest[i];
5553
- if (dealsAtDest.length > 0) {
5554
- const distance = distanceBetweenCoordinates(arrivedAt, destLocation.coordinates);
5555
- const needsRecharge = !ship.hasEnergyFor(distance);
5556
- const travelEstimate = estimateTravelTime(ship, ship.totalMass, distance, {
5557
- needsRecharge,
5558
- unloadMass: calculateCargoMass(cargo),
5559
- });
5560
- repositionLocations.push({
5561
- location: destLocation,
5562
- bestDeal: dealsAtDest[0],
5563
- distance,
5564
- travelTime: travelEstimate.total,
5565
- travelTimeBreakdown: travelEstimate,
5566
- });
5567
- }
5568
- }
5569
- repositionLocations.sort((a, b) => b.bestDeal.profitPerSecond - a.bestDeal.profitPerSecond);
5570
- for (const reposition of repositionLocations.slice(0, 2)) {
5571
- const option = createSellAndRepositionOption(cargoValueHere, cargoCost, reposition, cargoSaleHere);
5572
- collectOptions.push(option);
5573
- }
5574
- }
5575
- if (hasCargo) {
5576
- const unloadTime = calculateUnloadTime(ship, cargo);
5577
- const sellAndStay = createSellAndStayOption(cargoValueHere, cargoCost, cargoSaleHere, unloadTime);
5578
- collectOptions.push(sellAndStay);
5579
- }
5580
- if (!hasCargo && dealsAtOrigin.length > 0) {
5581
- for (const deal of dealsAtOrigin.slice(0, 3)) {
5582
- const option = {
5583
- id: `trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.good.id}`,
5584
- type: 'sell-and-trade',
5585
- title: `Trade ${deal.good.good.name}`,
5586
- description: `Buy ${deal.maxQuantity} ${deal.good.good.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
5587
- reason: `${deal.marginPercent.toFixed(0)}% margin, ${deal.profitPerSecond.toFixed(1)}/s profit rate`,
5588
- recommended: false,
5589
- highestProfit: false,
5590
- estimatedProfit: deal.totalProfit,
5591
- purchaseCost: antelope.UInt64.from(deal.buyPrice).multiplying(deal.maxQuantity),
5592
- nextTradeProfit: deal.totalProfit,
5593
- profitPerSecond: deal.profitPerSecond,
5594
- marginPercent: deal.marginPercent,
5595
- destination: deal.destination,
5596
- deal,
5597
- travelTime: deal.travelTime,
5598
- travelTimeBreakdown: {
5599
- unloadTime: antelope.UInt32.zero,
5600
- loadTime: deal.travelTimeBreakdown.loadTime,
5601
- rechargeTime: deal.travelTimeBreakdown.rechargeTime,
5602
- flightTime: deal.travelTimeBreakdown.flightTime,
5603
- total: deal.travelTimeBreakdown.total,
5604
- },
5605
- };
5606
- collectOptions.push(option);
5607
- }
5659
+ });
5660
+ return {
5661
+ better: {
5662
+ location: destLocation,
5663
+ price: antelope.UInt32.from(destRevenue.dividing(cargo.reduce((s, c) => s.adding(c.quantity), antelope.UInt64.zero))),
5664
+ revenue: destRevenue,
5665
+ improvement,
5666
+ bestDealAfterSale: dealsAfterSale[0],
5667
+ distance,
5668
+ travelTime: travelEstimate.total,
5669
+ travelTimeBreakdown: travelEstimate,
5670
+ },
5671
+ destPriceMap,
5672
+ };
5673
+ }));
5674
+ const betterSaleLocations = betterSaleResults.sort((a, b) => Number(b.better.improvement) - Number(a.better.improvement));
5675
+ for (const { better, destPriceMap } of betterSaleLocations.slice(0, 2)) {
5676
+ const option = createTravelToSellOption(cargoValueHere, cargoCost, better, cargo, destPriceMap);
5677
+ collectOptions.push(option);
5608
5678
  }
5609
- if (collectOptions.length === 0) {
5610
- const gameSeed = (_b = callbacks.getGameSeed) === null || _b === void 0 ? void 0 : _b.call(callbacks);
5611
- const state = (_c = callbacks.getState) === null || _c === void 0 ? void 0 : _c.call(callbacks);
5612
- const exploreCandidates = [];
5613
- for (const dest of nearbyLocations.slice(0, 10)) {
5614
- const distance = distanceBetweenCoordinates(arrivedAt, dest.coordinates);
5679
+ }
5680
+ if (hasCargo && dealsAtOrigin.length === 0) {
5681
+ const locationsToCheck = nearbyLocations.slice(0, 10);
5682
+ const allDealsAtDest = await Promise.all(locationsToCheck.map((destLocation) => findDealsForShip(ship, destLocation.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, {
5683
+ maxDeals: 1,
5684
+ maxDistance,
5685
+ playerBalance: antelope.UInt64.from(playerBalance).adding(cargoValueHere),
5686
+ availableSpace: Number(ship.maxCapacity),
5687
+ })));
5688
+ const repositionLocations = [];
5689
+ for (let i = 0; i < locationsToCheck.length; i++) {
5690
+ const destLocation = locationsToCheck[i];
5691
+ const dealsAtDest = allDealsAtDest[i];
5692
+ if (dealsAtDest.length > 0) {
5693
+ const distance = distanceBetweenCoordinates(arrivedAt, destLocation.coordinates);
5615
5694
  const needsRecharge = !ship.hasEnergyFor(distance);
5616
- const unloadMass = hasCargo ? calculateCargoMass(cargo) : antelope.UInt32.zero;
5617
5695
  const travelEstimate = estimateTravelTime(ship, ship.totalMass, distance, {
5618
5696
  needsRecharge,
5619
- unloadMass,
5697
+ unloadMass: calculateCargoMass(cargo),
5620
5698
  });
5621
- let discountedGood;
5622
- let bestDiscount = 0;
5623
- if (gameSeed && state) {
5624
- const allGoods = getGoods();
5625
- for (const good of allGoods) {
5626
- const rarity = getRarity(gameSeed, state.seed, dest.coordinates, good.id);
5627
- if (rarity.minMultiplier < 1.0) {
5628
- const discountPercent = Math.round((1 - rarity.minMultiplier) * 100);
5629
- if (discountPercent > bestDiscount) {
5630
- bestDiscount = discountPercent;
5631
- const rarityName = rarity.rarity === exports.Rarities.legendary
5632
- ? 'Legendary'
5633
- : rarity.rarity === exports.Rarities.epic
5634
- ? 'Epic'
5635
- : rarity.rarity === exports.Rarities.rare
5636
- ? 'Rare'
5637
- : rarity.rarity === exports.Rarities.uncommon
5638
- ? 'Uncommon'
5639
- : 'Common';
5640
- discountedGood = {
5641
- goodId: Number(good.id),
5642
- name: good.name,
5643
- rarity: rarityName,
5644
- discountPercent,
5645
- };
5646
- }
5647
- }
5648
- }
5649
- }
5650
- const destDeals = yield findDealsForShip(ship, dest.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, { maxDeals: 2 });
5651
- const potentialDeals = destDeals.map((d) => ({
5652
- goodId: Number(d.good.id),
5653
- goodName: d.good.good.name,
5654
- destinationCoords: d.destination.coordinates,
5655
- marginPercent: d.marginPercent,
5656
- profitPerSecond: d.profitPerSecond,
5657
- }));
5658
- let score = 0;
5659
- if (potentialDeals.length > 0) {
5660
- score = potentialDeals[0].profitPerSecond;
5661
- }
5662
- else if (bestDiscount > 0) {
5663
- score = bestDiscount * 0.01;
5664
- }
5665
- exploreCandidates.push({
5666
- dest,
5699
+ repositionLocations.push({
5700
+ location: destLocation,
5701
+ bestDeal: dealsAtDest[0],
5702
+ distance,
5667
5703
  travelTime: travelEstimate.total,
5668
5704
  travelTimeBreakdown: travelEstimate,
5669
- discountedGood,
5670
- bestDiscount,
5671
- potentialDeals: potentialDeals.length > 0 ? potentialDeals : undefined,
5672
- score,
5673
5705
  });
5674
5706
  }
5675
- exploreCandidates.sort((a, b) => b.score - a.score);
5676
- for (const candidate of exploreCandidates.slice(0, 3)) {
5677
- const option = createExploreOption(candidate.dest, candidate.travelTime, candidate.discountedGood, candidate.travelTimeBreakdown, candidate.potentialDeals);
5678
- collectOptions.push(option);
5679
- }
5680
5707
  }
5681
- const orbitOption = createOrbitOption();
5682
- collectOptions.push(orbitOption);
5683
- const MIN_MARGIN_THRESHOLD = 15;
5684
- const MIN_PROFIT_PER_SECOND_THRESHOLD = 0.5;
5685
- collectOptions.sort((a, b) => { var _a, _b; return ((_a = b.profitPerSecond) !== null && _a !== void 0 ? _a : 0) - ((_b = a.profitPerSecond) !== null && _b !== void 0 ? _b : 0); });
5686
- if (collectOptions.length > 0) {
5687
- const bestByProfitPerSecond = collectOptions[0];
5688
- const meetsQualityThreshold = ((_d = bestByProfitPerSecond.marginPercent) !== null && _d !== void 0 ? _d : 0) > MIN_MARGIN_THRESHOLD ||
5689
- ((_e = bestByProfitPerSecond.profitPerSecond) !== null && _e !== void 0 ? _e : 0) > MIN_PROFIT_PER_SECOND_THRESHOLD;
5690
- if (meetsQualityThreshold) {
5691
- bestByProfitPerSecond.recommended = true;
5708
+ repositionLocations.sort((a, b) => b.bestDeal.profitPerSecond - a.bestDeal.profitPerSecond);
5709
+ for (const reposition of repositionLocations.slice(0, 2)) {
5710
+ const option = createSellAndRepositionOption(cargoValueHere, cargoCost, reposition, cargoSaleHere);
5711
+ collectOptions.push(option);
5712
+ }
5713
+ }
5714
+ if (hasCargo) {
5715
+ const unloadTime = calculateUnloadTime(ship, cargo);
5716
+ const sellAndStay = createSellAndStayOption(cargoValueHere, cargoCost, cargoSaleHere, unloadTime);
5717
+ collectOptions.push(sellAndStay);
5718
+ }
5719
+ if (!hasCargo && dealsAtOrigin.length > 0) {
5720
+ for (const deal of dealsAtOrigin.slice(0, 3)) {
5721
+ const option = {
5722
+ id: `trade-${deal.destination.coordinates.x}-${deal.destination.coordinates.y}-${deal.item.id}`,
5723
+ type: 'sell-and-trade',
5724
+ title: `Trade ${deal.item.item.name}`,
5725
+ description: `Buy ${deal.maxQuantity} ${deal.item.item.name}, deliver to (${deal.destination.coordinates.x}, ${deal.destination.coordinates.y})`,
5726
+ reason: `${deal.marginPercent.toFixed(0)}% margin, ${deal.profitPerSecond.toFixed(1)}/s profit rate`,
5727
+ recommended: false,
5728
+ highestProfit: false,
5729
+ estimatedProfit: deal.totalProfit,
5730
+ purchaseCost: antelope.UInt64.from(deal.buyPrice).multiplying(deal.maxQuantity),
5731
+ nextTradeProfit: deal.totalProfit,
5732
+ profitPerSecond: deal.profitPerSecond,
5733
+ marginPercent: deal.marginPercent,
5734
+ destination: deal.destination,
5735
+ deal,
5736
+ travelTime: deal.travelTime,
5737
+ travelTimeBreakdown: {
5738
+ unloadTime: antelope.UInt32.zero,
5739
+ loadTime: deal.travelTimeBreakdown.loadTime,
5740
+ rechargeTime: deal.travelTimeBreakdown.rechargeTime,
5741
+ flightTime: deal.travelTimeBreakdown.flightTime,
5742
+ total: deal.travelTimeBreakdown.total,
5743
+ },
5744
+ };
5745
+ collectOptions.push(option);
5746
+ }
5747
+ }
5748
+ if (collectOptions.length === 0) {
5749
+ const gameSeed = callbacks.getGameSeed?.();
5750
+ const state = callbacks.getState?.();
5751
+ const exploreCandidates = [];
5752
+ for (const dest of nearbyLocations.slice(0, 10)) {
5753
+ const distance = distanceBetweenCoordinates(arrivedAt, dest.coordinates);
5754
+ const needsRecharge = !ship.hasEnergyFor(distance);
5755
+ const unloadMass = hasCargo ? calculateCargoMass(cargo) : antelope.UInt32.zero;
5756
+ const travelEstimate = estimateTravelTime(ship, ship.totalMass, distance, {
5757
+ needsRecharge,
5758
+ unloadMass,
5759
+ });
5760
+ let discountedGood;
5761
+ let bestDiscount = 0;
5762
+ if (gameSeed && state) {
5763
+ const allGoods = getItems();
5764
+ for (const good of allGoods) {
5765
+ const rarity = getRarity(gameSeed, state.seed, dest.coordinates, good.id);
5766
+ if (rarity.minMultiplier < 1.0) {
5767
+ const discountPercent = Math.round((1 - rarity.minMultiplier) * 100);
5768
+ if (discountPercent > bestDiscount) {
5769
+ bestDiscount = discountPercent;
5770
+ const rarityName = rarity.rarity === exports.Rarities.legendary
5771
+ ? 'Legendary'
5772
+ : rarity.rarity === exports.Rarities.epic
5773
+ ? 'Epic'
5774
+ : rarity.rarity === exports.Rarities.rare
5775
+ ? 'Rare'
5776
+ : rarity.rarity === exports.Rarities.uncommon
5777
+ ? 'Uncommon'
5778
+ : 'Common';
5779
+ discountedGood = {
5780
+ goodId: Number(good.id),
5781
+ name: good.name,
5782
+ rarity: rarityName,
5783
+ discountPercent,
5784
+ };
5785
+ }
5786
+ }
5787
+ }
5692
5788
  }
5693
- const bestByProfit = collectOptions.reduce((best, opt) => opt.estimatedProfit > best.estimatedProfit ? opt : best);
5694
- if (bestByProfit.id !== bestByProfitPerSecond.id || !meetsQualityThreshold) {
5695
- bestByProfit.highestProfit = true;
5789
+ const destDeals = await findDealsForShip(ship, dest.coordinates, callbacks.getNearbyLocations, callbacks.getMarketPrices, { maxDeals: 2 });
5790
+ const potentialDeals = destDeals.map((d) => ({
5791
+ goodId: Number(d.item.id),
5792
+ goodName: d.item.item.name,
5793
+ destinationCoords: d.destination.coordinates,
5794
+ marginPercent: d.marginPercent,
5795
+ profitPerSecond: d.profitPerSecond,
5796
+ }));
5797
+ let score = 0;
5798
+ if (potentialDeals.length > 0) {
5799
+ score = potentialDeals[0].profitPerSecond;
5696
5800
  }
5801
+ else if (bestDiscount > 0) {
5802
+ score = bestDiscount * 0.01;
5803
+ }
5804
+ exploreCandidates.push({
5805
+ dest,
5806
+ travelTime: travelEstimate.total,
5807
+ travelTimeBreakdown: travelEstimate,
5808
+ discountedGood,
5809
+ bestDiscount,
5810
+ potentialDeals: potentialDeals.length > 0 ? potentialDeals : undefined,
5811
+ score,
5812
+ });
5697
5813
  }
5698
- return {
5699
- arrivedAt,
5700
- ship,
5701
- cargo,
5702
- cargoValueHere,
5703
- options: collectOptions,
5704
- hasProfitableOptions: collectOptions.some((o) => o.estimatedProfit.gt(antelope.UInt64.zero)),
5705
- };
5706
- });
5814
+ exploreCandidates.sort((a, b) => b.score - a.score);
5815
+ for (const candidate of exploreCandidates.slice(0, 3)) {
5816
+ const option = createExploreOption(candidate.dest, candidate.travelTime, candidate.discountedGood, candidate.travelTimeBreakdown, candidate.potentialDeals);
5817
+ collectOptions.push(option);
5818
+ }
5819
+ }
5820
+ const orbitOption = createOrbitOption();
5821
+ collectOptions.push(orbitOption);
5822
+ const MIN_MARGIN_THRESHOLD = 15;
5823
+ const MIN_PROFIT_PER_SECOND_THRESHOLD = 0.5;
5824
+ collectOptions.sort((a, b) => (b.profitPerSecond ?? 0) - (a.profitPerSecond ?? 0));
5825
+ if (collectOptions.length > 0) {
5826
+ const bestByProfitPerSecond = collectOptions[0];
5827
+ const meetsQualityThreshold = (bestByProfitPerSecond.marginPercent ?? 0) > MIN_MARGIN_THRESHOLD ||
5828
+ (bestByProfitPerSecond.profitPerSecond ?? 0) > MIN_PROFIT_PER_SECOND_THRESHOLD;
5829
+ if (meetsQualityThreshold) {
5830
+ bestByProfitPerSecond.recommended = true;
5831
+ }
5832
+ const bestByProfit = collectOptions.reduce((best, opt) => opt.estimatedProfit > best.estimatedProfit ? opt : best);
5833
+ if (bestByProfit.id !== bestByProfitPerSecond.id || !meetsQualityThreshold) {
5834
+ bestByProfit.highestProfit = true;
5835
+ }
5836
+ }
5837
+ return {
5838
+ arrivedAt,
5839
+ ship,
5840
+ cargo,
5841
+ cargoValueHere,
5842
+ options: collectOptions,
5843
+ hasProfitableOptions: collectOptions.some((o) => o.estimatedProfit.gt(antelope.UInt64.zero)),
5844
+ };
5707
5845
  }
5708
5846
 
5709
5847
  class TradesManager extends BaseManager {
@@ -5714,122 +5852,102 @@ class TradesManager extends BaseManager {
5714
5852
  makePriceCacheKey(location) {
5715
5853
  return `${location.x},${location.y}`;
5716
5854
  }
5717
- createCallbacks() {
5718
- return tslib.__awaiter(this, void 0, void 0, function* () {
5719
- const game = yield this.getGame();
5720
- const serverState = yield this.getState();
5721
- const currentEpoch = getCurrentEpoch(game);
5722
- if (!this.priceCacheEpoch || !this.priceCacheEpoch.equals(currentEpoch)) {
5723
- this.priceCache.clear();
5724
- this.priceCacheEpoch = currentEpoch;
5855
+ async createCallbacks() {
5856
+ const game = await this.getGame();
5857
+ const serverState = await this.getState();
5858
+ const currentEpoch = getCurrentEpoch(game);
5859
+ if (!this.priceCacheEpoch || !this.priceCacheEpoch.equals(currentEpoch)) {
5860
+ this.priceCache.clear();
5861
+ this.priceCacheEpoch = currentEpoch;
5862
+ }
5863
+ const getNearbyLocations = async (origin, maxDistance) => {
5864
+ const nearby = findNearbyPlanets(game.config.seed, origin, maxDistance);
5865
+ return nearby.map((d) => toLocation(d.destination));
5866
+ };
5867
+ const getMarketPrices = async (location) => {
5868
+ const cacheKey = this.makePriceCacheKey(location);
5869
+ const cached = this.priceCache.get(cacheKey);
5870
+ if (cached) {
5871
+ return cached;
5725
5872
  }
5726
- const getNearbyLocations = (origin, maxDistance) => tslib.__awaiter(this, void 0, void 0, function* () {
5727
- const nearby = findNearbyPlanets(game.config.seed, origin, maxDistance);
5728
- return nearby.map((d) => toLocation(d.destination));
5729
- });
5730
- const getMarketPrices = (location) => tslib.__awaiter(this, void 0, void 0, function* () {
5731
- const cacheKey = this.makePriceCacheKey(location);
5732
- const cached = this.priceCache.get(cacheKey);
5733
- if (cached) {
5734
- return cached;
5873
+ const locationWithSupply = await this.context.locations.getLocationComplete(location);
5874
+ const prices = locationWithSupply.marketPrices || [];
5875
+ const result = prices.map((price) => {
5876
+ const actualSupply = locationWithSupply.getSupply(price.id);
5877
+ if (actualSupply !== undefined) {
5878
+ return exports.ItemPrice.from({
5879
+ id: price.id,
5880
+ item: price.item,
5881
+ price: price.price,
5882
+ supply: actualSupply,
5883
+ });
5735
5884
  }
5736
- const locationWithSupply = yield this.context.locations.getLocationComplete(location);
5737
- const prices = locationWithSupply.marketPrices || [];
5738
- const result = prices.map((price) => {
5739
- const actualSupply = locationWithSupply.getSupply(price.id);
5740
- if (actualSupply !== undefined) {
5741
- return exports.GoodPrice.from({
5742
- id: price.id,
5743
- good: price.good,
5744
- price: price.price,
5745
- supply: actualSupply,
5746
- });
5747
- }
5748
- return price;
5749
- });
5750
- this.priceCache.set(cacheKey, result);
5751
- return result;
5885
+ return price;
5752
5886
  });
5753
- const getGameSeed = () => game.config.seed;
5754
- const getState = () => serverState;
5755
- return { getNearbyLocations, getMarketPrices, getGameSeed, getState };
5756
- });
5887
+ this.priceCache.set(cacheKey, result);
5888
+ return result;
5889
+ };
5890
+ const getGameSeed = () => game.config.seed;
5891
+ const getState = () => serverState;
5892
+ return { getNearbyLocations, getMarketPrices, getGameSeed, getState };
5757
5893
  }
5758
5894
  clearPriceCache() {
5759
5895
  this.priceCache.clear();
5760
5896
  this.priceCacheEpoch = undefined;
5761
5897
  }
5762
- findDeals(ship, originLocation, options = {}) {
5763
- return tslib.__awaiter(this, void 0, void 0, function* () {
5764
- const origin = originLocation || Coordinates.from(ship.coordinates);
5765
- const callbacks = yield this.createCallbacks();
5766
- const deals = yield findDealsForShip(ship, origin, callbacks.getNearbyLocations, callbacks.getMarketPrices, options);
5767
- return deals;
5768
- });
5898
+ async findDeals(ship, originLocation, options = {}) {
5899
+ const origin = originLocation || Coordinates.from(ship.coordinates);
5900
+ const callbacks = await this.createCallbacks();
5901
+ const deals = await findDealsForShip(ship, origin, callbacks.getNearbyLocations, callbacks.getMarketPrices, options);
5902
+ return deals;
5769
5903
  }
5770
- findBestDeal(ship, originLocation, options = {}) {
5771
- return tslib.__awaiter(this, void 0, void 0, function* () {
5772
- const deals = yield this.findDeals(ship, originLocation, Object.assign(Object.assign({}, options), { maxDeals: 1 }));
5773
- return deals[0];
5774
- });
5904
+ async findBestDeal(ship, originLocation, options = {}) {
5905
+ const deals = await this.findDeals(ship, originLocation, { ...options, maxDeals: 1 });
5906
+ return deals[0];
5775
5907
  }
5776
- getCollectOptions(ship, arrivedAt, options = {}) {
5777
- return tslib.__awaiter(this, void 0, void 0, function* () {
5778
- const location = arrivedAt || Coordinates.from(ship.coordinates);
5779
- const callbacks = yield this.createCallbacks();
5780
- return analyzeCollectOptions(ship, location, callbacks, options);
5781
- });
5908
+ async getCollectOptions(ship, arrivedAt, options = {}) {
5909
+ const location = arrivedAt || Coordinates.from(ship.coordinates);
5910
+ const callbacks = await this.createCallbacks();
5911
+ return analyzeCollectOptions(ship, location, callbacks, options);
5782
5912
  }
5783
5913
  }
5784
5914
 
5785
5915
  class EpochsManager extends BaseManager {
5786
- getCurrentHeight() {
5787
- return tslib.__awaiter(this, void 0, void 0, function* () {
5788
- const game = yield this.getGame();
5789
- return getCurrentEpoch(game);
5790
- });
5791
- }
5792
- getCurrent() {
5793
- return tslib.__awaiter(this, void 0, void 0, function* () {
5794
- const game = yield this.getGame();
5795
- const epoch = yield this.getCurrentHeight();
5796
- return getEpochInfo(game, epoch);
5797
- });
5798
- }
5799
- getByHeight(height) {
5800
- return tslib.__awaiter(this, void 0, void 0, function* () {
5801
- const game = yield this.getGame();
5802
- return getEpochInfo(game, antelope.UInt64.from(height));
5803
- });
5804
- }
5805
- getTimeRemaining() {
5806
- return tslib.__awaiter(this, void 0, void 0, function* () {
5807
- const epochInfo = yield this.getCurrent();
5808
- const now = Date.now();
5809
- const endTime = epochInfo.end.getTime();
5810
- return Math.max(0, endTime - now);
5811
- });
5812
- }
5813
- getProgress() {
5814
- return tslib.__awaiter(this, void 0, void 0, function* () {
5815
- const epochInfo = yield this.getCurrent();
5816
- const now = Date.now();
5817
- const startTime = epochInfo.start.getTime();
5818
- const endTime = epochInfo.end.getTime();
5819
- const duration = endTime - startTime;
5820
- const elapsed = now - startTime;
5821
- if (elapsed <= 0)
5822
- return 0;
5823
- if (elapsed >= duration)
5824
- return 1;
5825
- return elapsed / duration;
5826
- });
5916
+ async getCurrentHeight() {
5917
+ const game = await this.getGame();
5918
+ return getCurrentEpoch(game);
5919
+ }
5920
+ async getCurrent() {
5921
+ const game = await this.getGame();
5922
+ const epoch = await this.getCurrentHeight();
5923
+ return getEpochInfo(game, epoch);
5924
+ }
5925
+ async getByHeight(height) {
5926
+ const game = await this.getGame();
5927
+ return getEpochInfo(game, antelope.UInt64.from(height));
5928
+ }
5929
+ async getTimeRemaining() {
5930
+ const epochInfo = await this.getCurrent();
5931
+ const now = Date.now();
5932
+ const endTime = epochInfo.end.getTime();
5933
+ return Math.max(0, endTime - now);
5934
+ }
5935
+ async getProgress() {
5936
+ const epochInfo = await this.getCurrent();
5937
+ const now = Date.now();
5938
+ const startTime = epochInfo.start.getTime();
5939
+ const endTime = epochInfo.end.getTime();
5940
+ const duration = endTime - startTime;
5941
+ const elapsed = now - startTime;
5942
+ if (elapsed <= 0)
5943
+ return 0;
5944
+ if (elapsed >= duration)
5945
+ return 1;
5946
+ return elapsed / duration;
5827
5947
  }
5828
- fitsInCurrentEpoch(durationMs) {
5829
- return tslib.__awaiter(this, void 0, void 0, function* () {
5830
- const remaining = yield this.getTimeRemaining();
5831
- return durationMs <= remaining;
5832
- });
5948
+ async fitsInCurrentEpoch(durationMs) {
5949
+ const remaining = await this.getTimeRemaining();
5950
+ return durationMs <= remaining;
5833
5951
  }
5834
5952
  }
5835
5953
 
@@ -5884,23 +6002,23 @@ class ActionsManager extends BaseManager {
5884
6002
  source_id: antelope.UInt64.from(sourceId),
5885
6003
  dest_type: destType,
5886
6004
  dest_id: antelope.UInt64.from(destId),
5887
- good_id: antelope.UInt16.from(goodId),
6005
+ item_id: antelope.UInt16.from(goodId),
5888
6006
  quantity: antelope.UInt32.from(quantity),
5889
6007
  });
5890
6008
  }
5891
- buyGoods(entityId, goodId, quantity, entityType = EntityType.SHIP) {
5892
- return this.server.action('buygoods', {
6009
+ buyItems(entityId, goodId, quantity, entityType = EntityType.SHIP) {
6010
+ return this.server.action('buyitems', {
5893
6011
  entity_type: entityType,
5894
6012
  id: antelope.UInt64.from(entityId),
5895
- good_id: antelope.UInt16.from(goodId),
6013
+ item_id: antelope.UInt16.from(goodId),
5896
6014
  quantity: antelope.UInt32.from(quantity),
5897
6015
  });
5898
6016
  }
5899
- sellGoods(entityId, goodId, quantity, entityType = EntityType.SHIP) {
5900
- return this.server.action('sellgoods', {
6017
+ sellItems(entityId, goodId, quantity, entityType = EntityType.SHIP) {
6018
+ return this.server.action('sellitems', {
5901
6019
  entity_type: entityType,
5902
6020
  id: antelope.UInt64.from(entityId),
5903
- good_id: antelope.UInt16.from(goodId),
6021
+ item_id: antelope.UInt16.from(goodId),
5904
6022
  quantity: antelope.UInt32.from(quantity),
5905
6023
  });
5906
6024
  }
@@ -5952,6 +6070,16 @@ class ActionsManager extends BaseManager {
5952
6070
  ship_id: antelope.UInt64.from(shipId),
5953
6071
  });
5954
6072
  }
6073
+ warp(shipId, destination) {
6074
+ const x = antelope.Int64.from(destination.x);
6075
+ const y = antelope.Int64.from(destination.y);
6076
+ return this.server.action('warp', {
6077
+ entity_type: EntityType.SHIP,
6078
+ id: antelope.UInt64.from(shipId),
6079
+ x,
6080
+ y,
6081
+ });
6082
+ }
5955
6083
  joinGame(account, companyName) {
5956
6084
  return [this.foundCompany(account, companyName), this.join(account)];
5957
6085
  }
@@ -5969,7 +6097,7 @@ class ActionsManager extends BaseManager {
5969
6097
  const shipId = ship instanceof Ship ? ship.id : antelope.UInt64.from(ship);
5970
6098
  return shipCargo
5971
6099
  .filter((c) => c.hasCargo)
5972
- .map((c) => this.sellGoods(shipId, c.good_id, c.quantity, EntityType.SHIP));
6100
+ .map((c) => this.sellItems(shipId, c.item_id, c.quantity, EntityType.SHIP));
5973
6101
  }
5974
6102
  }
5975
6103
 
@@ -6015,32 +6143,28 @@ class GameContext {
6015
6143
  }
6016
6144
  return this._actions;
6017
6145
  }
6018
- getGame(reload = false) {
6019
- return tslib.__awaiter(this, void 0, void 0, function* () {
6020
- if (!reload && this._gameCache) {
6021
- return this._gameCache;
6022
- }
6023
- const game = yield this.platform.table('games').get();
6024
- if (!game) {
6025
- throw new Error('Game not initialized');
6026
- }
6027
- this._gameCache = game;
6028
- return game;
6029
- });
6146
+ async getGame(reload = false) {
6147
+ if (!reload && this._gameCache) {
6148
+ return this._gameCache;
6149
+ }
6150
+ const game = await this.platform.table('games').get();
6151
+ if (!game) {
6152
+ throw new Error('Game not initialized');
6153
+ }
6154
+ this._gameCache = game;
6155
+ return game;
6030
6156
  }
6031
- getState(reload = false) {
6032
- return tslib.__awaiter(this, void 0, void 0, function* () {
6033
- if (!reload && this._stateCache) {
6034
- return this._stateCache;
6035
- }
6036
- const state = yield this.server.table('state').get();
6037
- if (!state) {
6038
- throw new Error('Game state not initialized');
6039
- }
6040
- const game = this._gameCache;
6041
- this._stateCache = GameState.from(state, game);
6157
+ async getState(reload = false) {
6158
+ if (!reload && this._stateCache) {
6042
6159
  return this._stateCache;
6043
- });
6160
+ }
6161
+ const state = await this.server.table('state').get();
6162
+ if (!state) {
6163
+ throw new Error('Game state not initialized');
6164
+ }
6165
+ const game = this._gameCache;
6166
+ this._stateCache = GameState.from(state, game);
6167
+ return this._stateCache;
6044
6168
  }
6045
6169
  get cachedGame() {
6046
6170
  return this._gameCache;
@@ -6062,25 +6186,27 @@ class Shipload {
6062
6186
  : new Contract({ client: apiClient });
6063
6187
  this._context = new GameContext(apiClient, server$1, platform$1);
6064
6188
  }
6065
- static load(chain, shiploadOptions) {
6066
- return tslib.__awaiter(this, void 0, void 0, function* () {
6067
- let platform$1 = new Contract$1({
6068
- client: new antelope.APIClient({ url: chain.url }),
6069
- });
6070
- if (shiploadOptions === null || shiploadOptions === void 0 ? void 0 : shiploadOptions.platformContractName) {
6071
- const client = shiploadOptions.client || new antelope.APIClient({ url: chain.url });
6072
- const contractKit = new ContractKit__default["default"]({ client });
6073
- platform$1 = yield contractKit.load(shiploadOptions.platformContractName);
6074
- }
6075
- let server$1 = new Contract({
6076
- client: new antelope.APIClient({ url: chain.url }),
6077
- });
6078
- if (shiploadOptions === null || shiploadOptions === void 0 ? void 0 : shiploadOptions.serverContractName) {
6079
- const client = shiploadOptions.client || new antelope.APIClient({ url: chain.url });
6080
- const contractKit = new ContractKit__default["default"]({ client });
6081
- server$1 = yield contractKit.load(shiploadOptions.serverContractName);
6082
- }
6083
- return new Shipload(chain, Object.assign(Object.assign({}, shiploadOptions), { platformContract: platform$1, serverContract: server$1 }));
6189
+ static async load(chain, shiploadOptions) {
6190
+ let platform$1 = new Contract$1({
6191
+ client: new antelope.APIClient({ url: chain.url }),
6192
+ });
6193
+ if (shiploadOptions?.platformContractName) {
6194
+ const client = shiploadOptions.client || new antelope.APIClient({ url: chain.url });
6195
+ const contractKit = new ContractKit__default["default"]({ client });
6196
+ platform$1 = await contractKit.load(shiploadOptions.platformContractName);
6197
+ }
6198
+ let server$1 = new Contract({
6199
+ client: new antelope.APIClient({ url: chain.url }),
6200
+ });
6201
+ if (shiploadOptions?.serverContractName) {
6202
+ const client = shiploadOptions.client || new antelope.APIClient({ url: chain.url });
6203
+ const contractKit = new ContractKit__default["default"]({ client });
6204
+ server$1 = await contractKit.load(shiploadOptions.serverContractName);
6205
+ }
6206
+ return new Shipload(chain, {
6207
+ ...shiploadOptions,
6208
+ platformContract: platform$1,
6209
+ serverContract: server$1,
6084
6210
  });
6085
6211
  }
6086
6212
  get client() {
@@ -6110,15 +6236,11 @@ class Shipload {
6110
6236
  get actions() {
6111
6237
  return this._context.actions;
6112
6238
  }
6113
- getGame(reload = false) {
6114
- return tslib.__awaiter(this, void 0, void 0, function* () {
6115
- return this._context.getGame(reload);
6116
- });
6239
+ async getGame(reload = false) {
6240
+ return this._context.getGame(reload);
6117
6241
  }
6118
- getState(reload = false) {
6119
- return tslib.__awaiter(this, void 0, void 0, function* () {
6120
- return this._context.getState(reload);
6121
- });
6242
+ async getState(reload = false) {
6243
+ return this._context.getState(reload);
6122
6244
  }
6123
6245
  }
6124
6246
 
@@ -6184,6 +6306,219 @@ function makeContainer(state) {
6184
6306
  return new Container(entityInfo);
6185
6307
  }
6186
6308
 
6309
+ const DEPTH_THRESHOLD_COMMON = 0;
6310
+ const DEPTH_THRESHOLD_UNCOMMON = 2000;
6311
+ const DEPTH_THRESHOLD_RARE = 10000;
6312
+ const DEPTH_THRESHOLD_EPIC = 30000;
6313
+ const DEPTH_THRESHOLD_LEGENDARY = 55000;
6314
+ const LOCATION_MIN_DEPTH = 500;
6315
+ const LOCATION_MAX_DEPTH = 65535;
6316
+ const YIELD_THRESHOLD = Math.floor(0.003 * 0xffffffff);
6317
+ const PLANET_SUBTYPE_GAS_GIANT = 0;
6318
+ const PLANET_SUBTYPE_ROCKY = 1;
6319
+ const PLANET_SUBTYPE_TERRESTRIAL = 2;
6320
+ const PLANET_SUBTYPE_ICY = 3;
6321
+ const PLANET_SUBTYPE_OCEAN = 4;
6322
+ const PLANET_SUBTYPE_INDUSTRIAL = 5;
6323
+ const RESOURCE_CATALOG = [
6324
+ { id: 26, rarity: 'common' },
6325
+ { id: 1, rarity: 'common' },
6326
+ { id: 14, rarity: 'common' },
6327
+ { id: 6, rarity: 'common' },
6328
+ { id: 29, rarity: 'uncommon' },
6329
+ { id: 2, rarity: 'uncommon' },
6330
+ { id: 1000, rarity: 'uncommon' },
6331
+ { id: 1003, rarity: 'uncommon' },
6332
+ { id: 22, rarity: 'rare' },
6333
+ { id: 18, rarity: 'rare' },
6334
+ { id: 1001, rarity: 'rare' },
6335
+ { id: 1002, rarity: 'rare' },
6336
+ { id: 74, rarity: 'epic' },
6337
+ { id: 54, rarity: 'epic' },
6338
+ ];
6339
+ function getDepthThreshold(rarity) {
6340
+ switch (rarity) {
6341
+ case 'common':
6342
+ return DEPTH_THRESHOLD_COMMON;
6343
+ case 'uncommon':
6344
+ return DEPTH_THRESHOLD_UNCOMMON;
6345
+ case 'rare':
6346
+ return DEPTH_THRESHOLD_RARE;
6347
+ case 'epic':
6348
+ return DEPTH_THRESHOLD_EPIC;
6349
+ case 'legendary':
6350
+ return DEPTH_THRESHOLD_LEGENDARY;
6351
+ }
6352
+ }
6353
+ function getResourceRarity(itemId) {
6354
+ const entry = RESOURCE_CATALOG.find((r) => r.id === itemId);
6355
+ return entry ? entry.rarity : 'legendary';
6356
+ }
6357
+ function getResourceWeight(itemId, stratum) {
6358
+ const rarity = getResourceRarity(itemId);
6359
+ const threshold = getDepthThreshold(rarity);
6360
+ if (stratum < threshold)
6361
+ return 0;
6362
+ const depthAbove = stratum - threshold;
6363
+ switch (rarity) {
6364
+ case 'common':
6365
+ if (stratum < 2000)
6366
+ return 100;
6367
+ if (stratum < 10000)
6368
+ return 80;
6369
+ if (stratum < 30000)
6370
+ return 50;
6371
+ return 30;
6372
+ case 'uncommon':
6373
+ if (depthAbove < 3000)
6374
+ return 40;
6375
+ if (depthAbove < 8000)
6376
+ return 60;
6377
+ return 50;
6378
+ case 'rare':
6379
+ if (depthAbove < 5000)
6380
+ return 20;
6381
+ if (depthAbove < 15000)
6382
+ return 35;
6383
+ return 40;
6384
+ case 'epic':
6385
+ if (depthAbove < 10000)
6386
+ return 10;
6387
+ if (depthAbove < 25000)
6388
+ return 20;
6389
+ return 30;
6390
+ case 'legendary':
6391
+ return 10;
6392
+ }
6393
+ }
6394
+ const ASTEROID_RESOURCES = [26, 29, 22, 74, 14, 1000, 1001];
6395
+ const NEBULA_RESOURCES = [1, 2, 18, 54];
6396
+ const GAS_GIANT_RESOURCES = [1, 2, 18, 54];
6397
+ const ROCKY_RESOURCES = [26, 29, 22, 74, 6, 1003, 1002];
6398
+ const TERRESTRIAL_RESOURCES = [6, 1003, 1002, 1001];
6399
+ const ICY_RESOURCES = [6, 14, 1000, 1001, 18];
6400
+ const OCEAN_RESOURCES = [1, 2, 1003, 1002];
6401
+ const INDUSTRIAL_RESOURCES = [26, 29, 22, 74, 14, 1000, 54];
6402
+ function getLocationCandidates(locationType, subtype) {
6403
+ if (locationType === 2)
6404
+ return ASTEROID_RESOURCES;
6405
+ if (locationType === 3)
6406
+ return NEBULA_RESOURCES;
6407
+ if (locationType === 1) {
6408
+ switch (subtype) {
6409
+ case PLANET_SUBTYPE_GAS_GIANT:
6410
+ return GAS_GIANT_RESOURCES;
6411
+ case PLANET_SUBTYPE_ROCKY:
6412
+ return ROCKY_RESOURCES;
6413
+ case PLANET_SUBTYPE_TERRESTRIAL:
6414
+ return TERRESTRIAL_RESOURCES;
6415
+ case PLANET_SUBTYPE_ICY:
6416
+ return ICY_RESOURCES;
6417
+ case PLANET_SUBTYPE_OCEAN:
6418
+ return OCEAN_RESOURCES;
6419
+ case PLANET_SUBTYPE_INDUSTRIAL:
6420
+ return INDUSTRIAL_RESOURCES;
6421
+ }
6422
+ }
6423
+ return [];
6424
+ }
6425
+ function getEligibleResources(locationType, subtype, stratum) {
6426
+ const candidates = getLocationCandidates(locationType, subtype);
6427
+ return candidates.filter((itemId) => {
6428
+ const rarity = getResourceRarity(itemId);
6429
+ const threshold = getDepthThreshold(rarity);
6430
+ return stratum >= threshold;
6431
+ });
6432
+ }
6433
+ function depthScaleFactor(stratum) {
6434
+ if (stratum <= 1)
6435
+ return 1.0;
6436
+ const logScale = Math.log(stratum) / Math.log(65535);
6437
+ return 1.0 + logScale * 2.0;
6438
+ }
6439
+
6440
+ function deriveStratum(epochSeed, coords, stratum, locationType, subtype, _maxDepth) {
6441
+ const seed = antelope.Checksum256.from(epochSeed);
6442
+ const c = Coordinates.from(coords);
6443
+ const input = `stratum-${c.x}-${c.y}-${stratum}`;
6444
+ const hashResult = hash512(seed, input);
6445
+ const bytes = hashResult.array;
6446
+ const rawReserve = ((bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3]) >>> 0;
6447
+ let reserve = 0;
6448
+ if (rawReserve <= YIELD_THRESHOLD) {
6449
+ const baseReserve = (rawReserve % 333) + 1;
6450
+ const scale = depthScaleFactor(stratum);
6451
+ reserve = Math.floor(baseReserve * scale);
6452
+ }
6453
+ if (reserve === 0)
6454
+ return { itemId: 0, seed: 0n, richness: 0, reserve: 0 };
6455
+ const eligible = getEligibleResources(locationType, subtype, stratum);
6456
+ if (eligible.length === 0)
6457
+ return { itemId: 0, seed: 0n, richness: 0, reserve: 0 };
6458
+ const resourceRoll = ((bytes[4] << 24) | (bytes[5] << 16) | (bytes[6] << 8) | bytes[7]) >>> 0;
6459
+ let totalWeight = 0;
6460
+ for (const id of eligible) {
6461
+ totalWeight += getResourceWeight(id, stratum);
6462
+ }
6463
+ let selectedItemId = eligible[0];
6464
+ if (totalWeight > 0) {
6465
+ const roll = resourceRoll % totalWeight;
6466
+ let cumulative = 0;
6467
+ for (const id of eligible) {
6468
+ cumulative += getResourceWeight(id, stratum);
6469
+ if (roll < cumulative) {
6470
+ selectedItemId = id;
6471
+ break;
6472
+ }
6473
+ }
6474
+ }
6475
+ const seedBigInt = (BigInt(bytes[8]) << 56n) |
6476
+ (BigInt(bytes[9]) << 48n) |
6477
+ (BigInt(bytes[10]) << 40n) |
6478
+ (BigInt(bytes[11]) << 32n) |
6479
+ (BigInt(bytes[12]) << 24n) |
6480
+ (BigInt(bytes[13]) << 16n) |
6481
+ (BigInt(bytes[14]) << 8n) |
6482
+ BigInt(bytes[15]);
6483
+ const rawRichness = (bytes[16] << 8) | bytes[17];
6484
+ const normalized = rawRichness / 65535;
6485
+ const baseRichness = Math.floor(normalized * normalized * 999) + 1;
6486
+ let depthBonus = 0;
6487
+ if (stratum > 1) {
6488
+ depthBonus = 50 * Math.log(stratum) / Math.log(65535);
6489
+ }
6490
+ const richness = Math.min(Math.floor(baseRichness + depthBonus), 1000);
6491
+ return { itemId: selectedItemId, seed: seedBigInt, richness, reserve };
6492
+ }
6493
+ function deriveResourceStats(seed) {
6494
+ const seedStr = seed.toString();
6495
+ const encoder = new TextEncoder();
6496
+ const data = encoder.encode(seedStr);
6497
+ const hashResult = antelope.Checksum256.hash(antelope.Bytes.from(data));
6498
+ const hashBytes = hashResult.array;
6499
+ const extractU32 = (offset) => ((hashBytes[offset] << 24) |
6500
+ (hashBytes[offset + 1] << 16) |
6501
+ (hashBytes[offset + 2] << 8) |
6502
+ hashBytes[offset + 3]) >>>
6503
+ 0;
6504
+ return {
6505
+ purity: (extractU32(0) % 1000) + 1,
6506
+ density: (extractU32(4) % 1000) + 1,
6507
+ reactivity: (extractU32(8) % 1000) + 1,
6508
+ resonance: (extractU32(12) % 1000) + 1,
6509
+ };
6510
+ }
6511
+
6512
+ function deriveLocationSize(loc) {
6513
+ if (loc.type.toNumber() === exports.LocationType.EMPTY)
6514
+ return 0;
6515
+ const raw = (loc.seed0.toNumber() << 8) | loc.seed1.toNumber();
6516
+ const normalized = raw / 65535;
6517
+ const curved = Math.pow(normalized, 3.0);
6518
+ const range = LOCATION_MAX_DEPTH - LOCATION_MIN_DEPTH;
6519
+ return Math.floor(LOCATION_MIN_DEPTH + curved * range);
6520
+ }
6521
+
6187
6522
  function canMove(e) {
6188
6523
  return 'engines' in e && 'generator' in e && 'energy' in e;
6189
6524
  }
@@ -6216,19 +6551,16 @@ function calcLoadDuration(entity, cargoMass) {
6216
6551
  return antelope.UInt32.from(Math.ceil(Number(cargoMass) / totalThrust));
6217
6552
  }
6218
6553
 
6219
- function calc_load_time_internal(loaders, shipZ, cargoMass) {
6220
- if (cargoMass === 0 || loaders.quantity.toNumber() === 0 || loaders.thrust.toNumber() === 0) {
6221
- return 0;
6222
- }
6223
- const totalMass = cargoMass + loaders.mass.toNumber();
6224
- const acceleration = (loaders.thrust.toNumber() / totalMass) * PRECISION;
6225
- const flightTime = Math.floor(2 * Math.sqrt(shipZ / acceleration));
6226
- return Math.floor(flightTime / loaders.quantity.toNumber());
6227
- }
6228
- function calc_extraction_duration(extractor, loaders, shipZ, batchMass) {
6229
- const extractionTime = Math.floor(batchMass / extractor.rate.toNumber());
6230
- const loadingTime = calc_load_time_internal(loaders, shipZ, batchMass);
6231
- return antelope.UInt32.from(Math.max(extractionTime, loadingTime));
6554
+ function calc_extraction_duration(extractor, cargoMass, stratum, richness) {
6555
+ const rate = extractor.rate.toNumber();
6556
+ const efficiency = extractor.efficiency.toNumber();
6557
+ const drill = extractor.drill.toNumber();
6558
+ const rateProduct = Math.floor((rate * richness * efficiency) / PRECISION);
6559
+ if (rateProduct === 0)
6560
+ return antelope.UInt32.from(0);
6561
+ const extractionTime = Math.floor((cargoMass * PRECISION) / rateProduct);
6562
+ const drillTime = Math.floor(stratum / drill);
6563
+ return antelope.UInt32.from(extractionTime + drillTime);
6232
6564
  }
6233
6565
  function calc_extraction_energy(extractor, duration) {
6234
6566
  const energy = Math.floor((duration * extractor.drain.toNumber()) / PRECISION);
@@ -6243,6 +6575,11 @@ exports.COMPANY_NOT_FOUND = COMPANY_NOT_FOUND;
6243
6575
  exports.CONTAINER_Z = CONTAINER_Z;
6244
6576
  exports.Container = Container;
6245
6577
  exports.Coordinates = Coordinates;
6578
+ exports.DEPTH_THRESHOLD_COMMON = DEPTH_THRESHOLD_COMMON;
6579
+ exports.DEPTH_THRESHOLD_EPIC = DEPTH_THRESHOLD_EPIC;
6580
+ exports.DEPTH_THRESHOLD_LEGENDARY = DEPTH_THRESHOLD_LEGENDARY;
6581
+ exports.DEPTH_THRESHOLD_RARE = DEPTH_THRESHOLD_RARE;
6582
+ exports.DEPTH_THRESHOLD_UNCOMMON = DEPTH_THRESHOLD_UNCOMMON;
6246
6583
  exports.EPOCH_NON_ZERO = EPOCH_NON_ZERO;
6247
6584
  exports.EPOCH_NOT_READY = EPOCH_NOT_READY;
6248
6585
  exports.ERROR_SYSTEM_ALREADY_INITIALIZED = ERROR_SYSTEM_ALREADY_INITIALIZED;
@@ -6254,8 +6591,6 @@ exports.EntityType = EntityType;
6254
6591
  exports.EpochsManager = EpochsManager;
6255
6592
  exports.GAME_NOT_FOUND = GAME_NOT_FOUND;
6256
6593
  exports.GAME_SEED_NOT_SET = GAME_SEED_NOT_SET;
6257
- exports.GOOD_DOES_NOT_EXIST = GOOD_DOES_NOT_EXIST;
6258
- exports.GOOD_NOT_AVAILABLE_AT_LOCATION = GOOD_NOT_AVAILABLE_AT_LOCATION;
6259
6594
  exports.GameState = GameState;
6260
6595
  exports.INITIAL_CONTAINER_CAPACITY = INITIAL_CONTAINER_CAPACITY;
6261
6596
  exports.INITIAL_CONTAINER_HULLMASS = INITIAL_CONTAINER_HULLMASS;
@@ -6276,15 +6611,25 @@ exports.INITIAL_SHIP_THRUST = INITIAL_SHIP_THRUST;
6276
6611
  exports.INITIAL_SHIP_Z = INITIAL_SHIP_Z;
6277
6612
  exports.INITIAL_WAREHOUSE_CAPACITY = INITIAL_WAREHOUSE_CAPACITY;
6278
6613
  exports.INSUFFICIENT_BALANCE = INSUFFICIENT_BALANCE;
6279
- exports.INSUFFICIENT_GOOD_QUANTITY = INSUFFICIENT_GOOD_QUANTITY;
6280
- exports.INSUFFICIENT_GOOD_SUPPLY = INSUFFICIENT_GOOD_SUPPLY;
6614
+ exports.INSUFFICIENT_ITEM_QUANTITY = INSUFFICIENT_ITEM_QUANTITY;
6615
+ exports.INSUFFICIENT_ITEM_SUPPLY = INSUFFICIENT_ITEM_SUPPLY;
6281
6616
  exports.INVALID_AMOUNT = INVALID_AMOUNT;
6617
+ exports.ITEM_DOES_NOT_EXIST = ITEM_DOES_NOT_EXIST;
6618
+ exports.ITEM_NOT_AVAILABLE_AT_LOCATION = ITEM_NOT_AVAILABLE_AT_LOCATION;
6282
6619
  exports.InventoryAccessor = InventoryAccessor;
6620
+ exports.LOCATION_MAX_DEPTH = LOCATION_MAX_DEPTH;
6621
+ exports.LOCATION_MIN_DEPTH = LOCATION_MIN_DEPTH;
6283
6622
  exports.Location = Location;
6284
6623
  exports.LocationsManager = LocationsManager;
6285
6624
  exports.MAX_ORBITAL_ALTITUDE = MAX_ORBITAL_ALTITUDE;
6286
6625
  exports.MIN_ORBITAL_ALTITUDE = MIN_ORBITAL_ALTITUDE;
6287
6626
  exports.NO_SCHEDULE = NO_SCHEDULE;
6627
+ exports.PLANET_SUBTYPE_GAS_GIANT = PLANET_SUBTYPE_GAS_GIANT;
6628
+ exports.PLANET_SUBTYPE_ICY = PLANET_SUBTYPE_ICY;
6629
+ exports.PLANET_SUBTYPE_INDUSTRIAL = PLANET_SUBTYPE_INDUSTRIAL;
6630
+ exports.PLANET_SUBTYPE_OCEAN = PLANET_SUBTYPE_OCEAN;
6631
+ exports.PLANET_SUBTYPE_ROCKY = PLANET_SUBTYPE_ROCKY;
6632
+ exports.PLANET_SUBTYPE_TERRESTRIAL = PLANET_SUBTYPE_TERRESTRIAL;
6288
6633
  exports.PLAYER_ALREADY_JOINED = PLAYER_ALREADY_JOINED;
6289
6634
  exports.PLAYER_NOT_FOUND = PLAYER_NOT_FOUND;
6290
6635
  exports.PRECISION = PRECISION;
@@ -6373,30 +6718,37 @@ exports.createSellAndStayOption = createSellAndStayOption;
6373
6718
  exports.createSellAndTradeOption = createSellAndTradeOption;
6374
6719
  exports.createTravelToSellOption = createTravelToSellOption;
6375
6720
  exports["default"] = Shipload;
6721
+ exports.depthScaleFactor = depthScaleFactor;
6376
6722
  exports.deriveLocation = deriveLocation;
6377
6723
  exports.deriveLocationEpoch = deriveLocationEpoch;
6378
- exports.deriveLocationMixture = deriveLocationMixture;
6724
+ exports.deriveLocationSize = deriveLocationSize;
6379
6725
  exports.deriveLocationStatic = deriveLocationStatic;
6726
+ exports.deriveResourceStats = deriveResourceStats;
6727
+ exports.deriveStratum = deriveStratum;
6380
6728
  exports.distanceBetweenCoordinates = distanceBetweenCoordinates;
6381
6729
  exports.distanceBetweenPoints = distanceBetweenPoints;
6382
6730
  exports.energyPercent = energyPercent;
6383
6731
  exports.estimateDealTravelTime = estimateDealTravelTime;
6384
6732
  exports.estimateTravelTime = estimateTravelTime;
6385
6733
  exports.findBestDeal = findBestDeal;
6386
- exports.findBestGoodToTrade = findBestGoodToTrade;
6734
+ exports.findBestItemToTrade = findBestItemToTrade;
6387
6735
  exports.findDealsForShip = findDealsForShip;
6388
6736
  exports.findNearbyPlanets = findNearbyPlanets;
6389
6737
  exports.getCurrentEpoch = getCurrentEpoch;
6738
+ exports.getDepthThreshold = getDepthThreshold;
6390
6739
  exports.getDestinationLocation = getDestinationLocation;
6740
+ exports.getEligibleResources = getEligibleResources;
6391
6741
  exports.getEpochInfo = getEpochInfo;
6392
6742
  exports.getFlightOrigin = getFlightOrigin;
6393
- exports.getGood = getGood;
6394
- exports.getGoods = getGoods;
6743
+ exports.getItem = getItem;
6744
+ exports.getItems = getItems;
6745
+ exports.getLocationCandidates = getLocationCandidates;
6395
6746
  exports.getLocationType = getLocationType;
6396
6747
  exports.getPositionAt = getPositionAt;
6397
6748
  exports.getRarity = getRarity;
6749
+ exports.getResourceRarity = getResourceRarity;
6750
+ exports.getResourceWeight = getResourceWeight;
6398
6751
  exports.getSystemName = getSystemName;
6399
- exports.goodIds = goodIds;
6400
6752
  exports.hasEnergy = hasEnergy;
6401
6753
  exports.hasEnergyForDistance = hasEnergyForDistance$1;
6402
6754
  exports.hasExtractor = hasExtractor;
@@ -6414,6 +6766,7 @@ exports.isExtractableLocation = isExtractableLocation;
6414
6766
  exports.isFull = isFull$1;
6415
6767
  exports.isFullFromMass = isFullFromMass;
6416
6768
  exports.isProfitable = isProfitable;
6769
+ exports.itemIds = itemIds;
6417
6770
  exports.lerp = lerp;
6418
6771
  exports.makeContainer = makeContainer;
6419
6772
  exports.makeShip = makeShip;