@shipload/sdk 2.0.0-rc8 → 2.0.0-rc9

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.m.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { __decorate } from 'tslib';
2
- import { Blob, ABI, Struct, Name, UInt64, Checksum256, UInt32, TimePointSec, UInt8, UInt16, TimePoint, Int64, Bytes, Checksum512, APIClient } from '@wharfkit/antelope';
2
+ import { Blob, ABI, Struct, Name, UInt64, Checksum256, UInt32, TimePointSec, UInt8, Int64, UInt16, TimePoint, Bytes, Int32, Checksum512, APIClient } from '@wharfkit/antelope';
3
3
  import ContractKit, { Contract as Contract$2 } from '@wharfkit/contract';
4
4
 
5
5
  const abiBlob$1 = Blob.from('DmVvc2lvOjphYmkvMS4yAA0KY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/C2NvbXBhbnlfcm93AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAplbmFibGVnYW1lAAIIY29udHJhY3QEbmFtZQdlbmFibGVkBGJvb2wMZm91bmRjb21wYW55AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nC2dhbWVfY29uZmlnAAQEc2VlZAtjaGVja3N1bTI1NgllcG9jaHRpbWUGdWludDMyBXN0YXJ0DnRpbWVfcG9pbnRfc2VjA2VuZA50aW1lX3BvaW50X3NlYwlnYW1lX21ldGEABARuYW1lBnN0cmluZwtkZXNjcmlwdGlvbgZzdHJpbmcDdXJsBnN0cmluZwd2ZXJzaW9uBnN0cmluZwhnYW1lX3JvdwAECGNvbnRyYWN0BG5hbWUGY29uZmlnC2dhbWVfY29uZmlnBG1ldGEJZ2FtZV9tZXRhBXN0YXRlCmdhbWVfc3RhdGUKZ2FtZV9zdGF0ZQABB2VuYWJsZWQEYm9vbAlzdGFydGdhbWUABAhjb250cmFjdARuYW1lBmNvbmZpZwtnYW1lX2NvbmZpZwRtZXRhCWdhbWVfbWV0YQVzdGF0ZQpnYW1lX3N0YXRlCXN0YXRlX3JvdwABB2VuYWJsZWQEYm9vbAp1cGRhdGVnYW1lAAIIY29udHJhY3QEbmFtZQRtZXRhCWdhbWVfbWV0YQR3aXBlAAAHAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAACoeMxUBmVuYWJsZfMBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnRW5hYmxlL2Rpc2FibGUgcGxhdGZvcm0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgcGxhdGZvcm0gY29udHJhY3QuAICShql4zFQKZW5hYmxlZ2FtZfwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZWdhbWUKc3VtbWFyeTogJ0VuYWJsZS9kaXNiYWJsZSBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGUgc3BlY2lmaWVkIGdhbWUgY29udHJhY3Qu4KepkqI0NV0MZm91bmRjb21wYW55gwItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZm91bmRjb21wYW55CnN1bW1hcnk6ICdGb3VuZCBhIG5ldyBjb21wYW55JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRm91bmQgYSBuZXcgY29tcGFueSBpbiB0aGUgU2hpcGxvYWQgcGxhdGZvcm0gY29udHJhY3QuAABQ0rB8TcYJc3RhcnRnYW1l/wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3RhcnRnYW1lCnN1bW1hcnk6ICdTdGFydCBhIG5ldyBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKU3RhcnQgYSBuZXcgZ2FtZSBvZiBTaGlwbG9hZCBkZXBsb3llZCB0byBhIG5ldyBjb250cmFjdC4AgJKGqWxS1Qp1cGRhdGVnYW1ljQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdXBkYXRlZ2FtZQpzdW1tYXJ5OiAnVXBkYXRlIGdhbWUgaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpVcGRhdGUgdGhlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzcGVjaWZpZWQgZ2FtZSBjb250cmFjdC4KCi0tLQAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0DAAAAwE9TJUUDaTY0AAALY29tcGFueV9yb3cAAAAAAKykYQNpNjQAAAhnYW1lX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwETU2hpcGxvYWQgKFBsYXRmb3JtKRNTaGlwbG9hZCAoUGxhdGZvcm0pAAAAAA==');
@@ -205,7 +205,7 @@ var platform = /*#__PURE__*/Object.freeze({
205
205
  Contract: Contract$1
206
206
  });
207
207
 
208
- const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhWCWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIEc2VlZAd1aW50NjQ/B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10KY2FyZ29fc2VlZAACB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQLZW50aXR5X25hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMABhJ3YXJlaG91c2VfY2FwYWNpdHkGdWludDMyC3dhcmVob3VzZV96BnVpbnQxNhF3YXJlaG91c2VfbG9hZGVycwxsb2FkZXJfc3RhdHMSY29udGFpbmVyX2h1bGxtYXNzBnVpbnQzMhJjb250YWluZXJfY2FwYWNpdHkGdWludDMyC2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAXBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10HbG9hZGVycw1sb2FkZXJfc3RhdHM/BmVuZXJneQd1aW50MTY/CGh1bGxtYXNzB3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8IY2FwYWNpdHkHdWludDMyPwlleHRyYWN0b3IQZXh0cmFjdG9yX3N0YXRzPwR3YXJwC3dhcnBfc3RhdHM/B2NyYWZ0ZXIOY3JhZnRlcl9zdGF0cz8HaXNfaWRsZQRib29sDGN1cnJlbnRfdGFzawV0YXNrPxRjdXJyZW50X3Rhc2tfZWxhcHNlZAZ1aW50MzIWY3VycmVudF90YXNrX3JlbWFpbmluZwZ1aW50MzINcGVuZGluZ190YXNrcwZ0YXNrW10HaWRsZV9hdAt0aW1lX3BvaW50PwhzY2hlZHVsZQlzY2hlZHVsZT8KZW50aXR5X3JlZgACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NA5lbnRpdHlfc3VtbWFyeQAIBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMHaXNfaWRsZQRib29sDnJlc29sdmVkX2NvdW50BnVpbnQzMg1wZW5kaW5nX2NvdW50BnVpbnQzMhBlbnRpdHlfdGFza19pbmZvAAQJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lCnRhc2tfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAp0aW1lX3BvaW50D2VudGl0eWdyb3VwX3JvdwACAmlkBnVpbnQ2NAxwYXJ0aWNpcGFudHMMZW50aXR5X3JlZltdB2V4dHJhY3QABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIPZXh0cmFjdG9yX3N0YXRzAAQEcmF0ZQZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVkcmlsbAZ1aW50MTYLZ2FtZV9jb25maWcAAwd2ZXJzaW9uBnVpbnQzMghkZWZhdWx0cw9lbnRpdHlfZGVmYXVsdHMFaXRlbXMKaXRlbV9kZWZbXQlnZXRjb25maWcAAAtnZXRlbnRpdGllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8JZ2V0ZW50aXR5AAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CGdldGl0ZW1zAAALZ2V0bG9jYXRpb24AAgF4BWludDY0AXkFaW50NjQKZ2V0bG9jZGF0YQACAXgFaW50NjQBeQVpbnQ2NAlnZXRuZWFyYnkAAwtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbAlnZXRwbGF5ZXIAAQdhY2NvdW50BG5hbWUKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgppdGVtc19pbmZvAAEFaXRlbXMKaXRlbV9kZWZbXQRqb2luAAEHYWNjb3VudARuYW1lDGxvYWRlcl9zdGF0cwADBG1hc3MGdWludDMyBnRocnVzdAZ1aW50MTYIcXVhbnRpdHkFdWludDgQbG9jYXRpb25fZGVyaXZlZAADDHN0YXRpY19wcm9wcw9sb2NhdGlvbl9zdGF0aWMLZXBvY2hfcHJvcHMObG9jYXRpb25fZXBvY2gEc2l6ZQZ1aW50MTYObG9jYXRpb25fZXBvY2gAAwZhY3RpdmUEYm9vbAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OA1sb2NhdGlvbl9pbmZvAAIGY29vcmRzC2Nvb3JkaW5hdGVzCWlzX3N5c3RlbQRib29sDGxvY2F0aW9uX3JvdwAGAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29faXRlbVtdCHNjaGVkdWxlCXNjaGVkdWxlPw9sb2NhdGlvbl9zdGF0aWMABQZjb29yZHMLY29vcmRpbmF0ZXMEdHlwZQ1sb2NhdGlvbl90eXBlB3N1YnR5cGUFdWludDgFc2VlZDAFdWludDgFc2VlZDEFdWludDgMbW9kdWxlX2VudHJ5AAIEdHlwZQV1aW50OAlpbnN0YWxsZWQLY2FyZ29fc2VlZD8ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbwZub3RpZnkAAQVldmVudAp0YXNrX2V2ZW50C3BsYXllcl9pbmZvAAYFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnNoaXBfY291bnQGdWludDY0D3dhcmVob3VzZV9jb3VudAZ1aW50NjQPY29udGFpbmVyX2NvdW50BnVpbnQ2NApwbGF5ZXJfcm93AAEFb3duZXIEbmFtZQhyZWNoYXJnZQACC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0C3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DnJlc291cmNlX3N0YXRzAAMFc3RhdDEGdWludDE2BXN0YXQyBnVpbnQxNgVzdGF0MwZ1aW50MTYIcm1tb2R1bGUABAtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4D3RhcmdldF9jYXJnb19pZAZ1aW50NjQEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQIc2hpcF9yb3cAEAJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8GZW5lcmd5B3VpbnQxNj8JY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwdsb2FkZXJzDWxvYWRlcl9zdGF0cz8JZXh0cmFjdG9yEGV4dHJhY3Rvcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/CnNwYXduY2FyZ28AAwllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAtzcGF3bnNlZWRlZAAECWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0CXN0YXRlX3JvdwAGB2VuYWJsZWQEYm9vbAVlcG9jaAZ1aW50MzIEc2FsdAZ1aW50NjQFc2hpcHMGdWludDMyBHNlZWQLY2hlY2tzdW0yNTYGY29tbWl0C2NoZWNrc3VtMjU2DHN0cmF0dW1fZGF0YQACB3N0cmF0dW0Mc3RyYXR1bV9pbmZvBXN0YXRzDnJlc291cmNlX3N0YXRzDHN0cmF0dW1faW5mbwAEB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CHJpY2huZXNzBnVpbnQxNgdyZXNlcnZlBnVpbnQzMgR0YXNrAAgEdHlwZQV1aW50OAhkdXJhdGlvbgZ1aW50MzIKY2FuY2VsYWJsZQV1aW50OAtjb29yZGluYXRlcwxjb29yZGluYXRlcz8FY2FyZ28MY2FyZ29faXRlbVtdDGVudGl0eXRhcmdldAtlbnRpdHlfcmVmPwtlbnRpdHlncm91cAd1aW50NjQ/C2VuZXJneV9jb3N0B3VpbnQxNj8KdGFza19ldmVudAAJCmV2ZW50X3R5cGUFdWludDgFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKdGFza19pbmRleAV1aW50OAR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MTY/DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXQh0cmFuc2ZlcgAGC3NvdXJjZV90eXBlBG5hbWUJc291cmNlX2lkBnVpbnQ2NAlkZXN0X3R5cGUEbmFtZQdkZXN0X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGdHJhdmVsAAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wJdHlwZXNfcm93AAMCaWQGdWludDY0E2VudGl0eV9zdW1tYXJ5X3R5cGUOZW50aXR5X3N1bW1hcnkQZ2FtZV9jb25maWdfdHlwZQtnYW1lX2NvbmZpZw13YXJlaG91c2Vfcm93AAgCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIY2FwYWNpdHkGdWludDMyCWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycwxsb2FkZXJfc3RhdHMIc2NoZWR1bGUJc2NoZWR1bGU/BHdhcnAABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAAMd2lwZXNlcXVlbmNlAAAoAABQUScqUzIJYWRkbW9kdWxlAAAAAEChaXYyB2FkdmFuY2XTAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZHZhbmNlCnN1bW1hcnk6ICdBZHZhbmNlIHR1cm4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkdmFuY2UgdGhlIGdhbWUgdG8gdGhlIG5leHQgdHVybi4AAAAAgDRVPAVibGVuZAAAAAAARIWmQQZjYW5jZWzHAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4KCi0tLQAAqBvfaVRECWNsZWFucnN2cAAAgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl08QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgoKLS0tAABgNDK3JkUJY29uZmlnbG9nAAAAAACAvMxFBWNyYWZ0AOCzy1OpbNRFDGNyZWF0ZWVudGl0eQAAAAAAeBqrSgZkZXBsb3kAAAAAAKh4zFQGZW5hYmxl4gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLgoKLS0tAAAAICNzc1cHZXh0cmFjdKEDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGV4dHJhY3QKc3VtbWFyeTogJ0V4dHJhY3QgcmVzb3VyY2VzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFeHRyYWN0IHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZXh0cmFjdGFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhbiBleHRyYWN0aW9uIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGV4dHJhY3RvciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnAACwctnlqbJiC2dldGVudGl0aWVzpAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXRpZXMKc3VtbWFyeTogJ0dldCBhbGwgZW50aXRpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGZ1bGwgZW50aXR5IGluZm8gZm9yIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllci4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAADw2eWpsmIJZ2V0ZW50aXR5ogItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXR5CnN1bW1hcnk6ICdHZXQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGVudGl0eSBpbmNsdWRpbmcgaWRlbnRpdHksIGNhcmdvLCBzY2hlZHVsZSBzdGF0ZSwgYW5kIHR5cGUtc3BlY2lmaWMgZmllbGRzLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy4AJnXZIBqzYgtnZXRsb2NhdGlvbuICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2F0aW9uCnN1bW1hcnk6ICdHZXQgbG9jYXRpb24gaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBsb2NhdGlvbiBpbmNsdWRpbmcgd2hldGhlciBhIHN5c3RlbSBleGlzdHMsIGFuZCBmb3IgZWFjaCBpdGVtOiBwcmljZSwgc3VwcGx5LCByYXJpdHkgbXVsdGlwbGllciwgYW5kIGxvY2F0aW9uIG11bHRpcGxpZXIuAIDJJiEas2IKZ2V0bG9jZGF0Yf4CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2RhdGEKc3VtbWFyeTogJ0dldCBkZXJpdmVkIGxvY2F0aW9uIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgZGVyaXZlZCBsb2NhdGlvbiBkYXRhIGluY2x1ZGluZyBzdGF0aWMgcHJvcGVydGllcyAodHlwZSwgZGlmZmljdWx0eSwgc2VlZHMpIGZyb20gdGhlIGdhbWUgc2VlZCBhbmQgZXBvY2gtc3BlY2lmaWMgcHJvcGVydGllcyAoYWN0aXZlLCBzZWVkcykgZnJvbSB0aGUgY3VycmVudCBlcG9jaCBzZWVkLgAA8OcaNbNiCWdldG5lYXJied4DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5lYXJieQpzdW1tYXJ5OiAnR2V0IG5lYXJieSByZWFjaGFibGUgc3lzdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBuZWFyYnkgc3lzdGVtcyByZWFjaGFibGUgYnkgYW4gZW50aXR5IGZyb20gaXRzIHByb2plY3RlZCBsb2NhdGlvbi4gUmV0dXJucyBjdXJyZW50IHN0YXRlICh3aXRoIGNvbXBsZXRlZCB0YXNrcyByZXNvbHZlZCksIHByb2plY3RlZCBzdGF0ZSAoYWZ0ZXIgYWxsIHNjaGVkdWxlZCB0YXNrcyksIGFuZCBhIGxpc3Qgb2YgcmVhY2hhYmxlIHN5c3RlbXMgd2l0aCBkaXN0YW5jZSwgZW5lcmd5IGNvc3QsIGZsaWdodCB0aW1lLCBhbmQgbWFya2V0IGluZm9ybWF0aW9uLgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuAIDU2dyMs2IKZ2V0c3RyYXR1bQCAlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgCi2ubmqullC2dyb3VwdHJhdmVsmgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ3JvdXB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgbXVsdGlwbGUgZW50aXRpZXMgdG9nZXRoZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIGdyb3VwIHRyYXZlbCBmb3IgbXVsdGlwbGUgZW50aXRpZXMgdG8gYSBkZXN0aW5hdGlvbi4gQWxsIGVudGl0aWVzIG11c3QgYmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIuIEF0IGxlYXN0IG9uZSBlbnRpdHkgd2l0aCBlbmdpbmVzIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhydXN0LiBGbGlnaHQgZHVyYXRpb24gaXMgY2FsY3VsYXRlZCBmcm9tIGNvbWJpbmVkIHRocnVzdCBhbmQgdG90YWwgbWFzcyBvZiBhbGwgZW50aXRpZXMuIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgZm9yIGF0b21pYyByZXNvbHV0aW9uIGFuZCBjYW5jZWxsYXRpb24uAAAAAADQsGkEaGFzaP0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2gKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGEyNTYgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhMjU2IGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4KCi0tLQAAAECE0rBpB2hhc2g1MTL7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoNTEyCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhNTEyIGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTUxMiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAAACQ3XQEaW5pdPoBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGluaXQKc3VtbWFyeTogJ0luaXRpYWxpemUgZ2FtZSBzZWVkJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWFsaXplIGEgdGhlIGdhbWVzIHNlZWQgYW5kIHNlZWQgdmFsdWVzIHRvIGJvb3RzdHJhcCBnYW1lIHN0YXRlLgAAAAAAMB19BGpvaW7JAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBqb2luCnN1bW1hcnk6ICdKb2luIGEgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSm9pbiBhIGdhbWUgb2YgU2hpcGxvYWQKCi0tLQAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAAIpd05C6CHJlY2hhcmdl0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4KCi0tLQAAAEDtSLG6B3Jlc29sdmXVAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuCgotLS0AAAAq6kSlvAhybW1vZHVsZQAAAAAAAJCjwQRzYWx03QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4KCi0tLQAAZdegyU3FCnNwYXduY2FyZ28AAJJKSuHJTcULc3Bhd25zZWVkZWQAAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbMsCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4KCi0tLQoKVGhpcyBhY3Rpb24gZGV0ZXJtaW5lcyB0aGUgbWFya2V0IHByaWNlIG9mIGFsbCBpdGVtcyBhdCBhIGdpdmVuIGxvY2F0aW9uLgAAAAAAUK/hBHdhcnAAAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLaDQVNoqrKrjDHdpcGVzZXF1ZW5jZcIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGVzZXF1ZW5jZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGVzZXF1ZW5jZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0LAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AAC4ajqTJ0UDaTY0AAANY29udGFpbmVyX3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAAJO6bBCNA2k2NAAADGxvY2F0aW9uX3JvdwAAAABc5U2sA2k2NAAACnBsYXllcl9yb3cAAABA7auwugNpNjQAAAtyZXNlcnZlX3JvdwAAAApNpa3CA2k2NAAADHNlcXVlbmNlX3JvdwAAAAAAUF3DA2k2NAAACHNoaXBfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAWAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAAAAeBqrSgx0YXNrX3Jlc3VsdHMAAAAgI3NzVwx0YXNrX3Jlc3VsdHMAAGBuTYqyYgtnYW1lX2NvbmZpZwCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwAAAFiq7LJiCml0ZW1zX2luZm8AJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZAAA8OcaNbNiC25lYXJieV9pbmZvAAC4yptYs2ILcGxheWVyX2luZm8AgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cw==');
208
+ const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDhxCWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIEc2VlZAd1aW50NjQ/B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10KY2FyZ29fc2VlZAACB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQLZW50aXR5X25hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMABRJ3YXJlaG91c2VfY2FwYWNpdHkGdWludDMyC3dhcmVob3VzZV96BnVpbnQxNhJjb250YWluZXJfaHVsbG1hc3MGdWludDMyEmNvbnRhaW5lcl9jYXBhY2l0eQZ1aW50MzILY29udGFpbmVyX3oGdWludDE2C2VudGl0eV9pbmZvABcEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8GZW5lcmd5B3VpbnQxNj8IaHVsbG1hc3MHdWludDMyPwdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwhjYXBhY2l0eQd1aW50MzI/CWV4dHJhY3RvchBleHRyYWN0b3Jfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPwplbnRpdHlfcmVmAAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkCnRpbWVfcG9pbnQPZW50aXR5Z3JvdXBfcm93AAICaWQGdWludDY0DHBhcnRpY2lwYW50cwxlbnRpdHlfcmVmW10HZXh0cmFjdAAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0B3N0cmF0dW0GdWludDE2CHF1YW50aXR5BnVpbnQzMg9leHRyYWN0b3Jfc3RhdHMABARyYXRlBnVpbnQxNgVkcmFpbgZ1aW50MTYFZGVwdGgGdWludDE2BWRyaWxsBnVpbnQxNgtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdCWdldGNvbmZpZwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQLZ2V0aXRlbWRhdGEAAAhnZXRpdGVtcwAAC2dldGxvY2F0aW9uAAIBeAVpbnQ2NAF5BWludDY0CmdldGxvY2RhdGEAAgF4BWludDY0AXkFaW50NjQKZ2V0bW9kdWxlcwAACWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCmdldG5mdGluZm8AAAlnZXRwbGF5ZXIAAQdhY2NvdW50BG5hbWUJZ2V0cmVjaXBlAAEOb3V0cHV0X2l0ZW1faWQGdWludDE2CmdldHJlY2lwZXMAAgtsb3dlcl9ib3VuZAZ1aW50MTYFbGltaXQFdWludDgMZ2V0cmVzb3VyY2VzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OA9pdGVtZGF0YV9yZXN1bHQAAgVpdGVtcwppdGVtX2RlZltdB3JlY2lwZXMOcmVjaXBlc19yZXN1bHQKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAwxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljC2Vwb2NoX3Byb3BzDmxvY2F0aW9uX2Vwb2NoBHNpemUGdWludDE2DmxvY2F0aW9uX2Vwb2NoAAMGYWN0aXZlBGJvb2wFc2VlZDAFdWludDgFc2VlZDEFdWludDgNbG9jYXRpb25faW5mbwACBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAxsb2NhdGlvbl9yb3cABgJpZAZ1aW50NjQFb3duZXIEbmFtZQtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQhzY2hlZHVsZQlzY2hlZHVsZT8PbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkC2NhcmdvX3NlZWQ/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbwluZXh1c19yb3cABAJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAgdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDm5mdGluZm9fcmVzdWx0AAIHc2NoZW1hcxBuZnRfc2NoZW1hX2RlZltdCXRlbXBsYXRlcxJuZnRfdGVtcGxhdGVfZGVmW10Gbm90aWZ5AAEFZXZlbnQKdGFza19ldmVudAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwARAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwZlbmVyZ3kHdWludDE2PwljYXJnb21hc3MGdWludDMyB2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/B2xvYWRlcnMNbG9hZGVyX3N0YXRzPwlleHRyYWN0b3IQZXh0cmFjdG9yX3N0YXRzPwR3YXJwC3dhcnBfc3RhdHM/B2NyYWZ0ZXIOY3JhZnRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhzY2hlZHVsZQlzY2hlZHVsZT8Kc3Bhd25jYXJnbwADCWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0C3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQEc2VlZAZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABgtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBnRyYXZlbAAFC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwADAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcNd2FyZWhvdXNlX3JvdwALAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwljYXJnb21hc3MGdWludDMyB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwR3YXJwAAQLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADHdpcGVzZXF1ZW5jZQAABHdyYXAABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0MgAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1cwAAAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4uAAAAAIA0VTwFYmxlbmT9Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIGEgbmV3IGJsZW5kZWQgc2VlZC4gQWxsIGlucHV0IHN0YWNrcyBtdXN0IHNoYXJlIHRoZSBzYW1lIGl0ZW0gaWQuIFRoZSBvdXRwdXQgc3RhY2sgaGFzIHRoZSBjb21iaW5lZCBxdWFudGl0eSBvZiBhbGwgaW5wdXRzLgAAAABEhaZBBmNhbmNlbMICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNhbmNlbApzdW1tYXJ5OiAnQ2FuY2VsIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FuY2VsIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIHRhc2tzIGZyb20gdGhlIGVuZCBvZiBhbiBlbnRpdHkncyBzY2hlZHVsZS4gVGFza3MgdGhhdCBhcmUgaW1tdXRhYmxlIGFuZCBpbiBwcm9ncmVzcyBjYW5ub3QgYmUgY2FuY2VsbGVkLgAAqBvfaVRECWNsZWFucnN2cOwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFucnN2cApzdW1tYXJ5OiAnQ2xlYW4gdXAgcGFzdCBlcG9jaCByZXNlcnZlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRXJhc2UgcmVzZXJ2ZSB0YWJsZSByb3dzIGZyb20gYSBwYXN0IGVwb2NoLiBDYW5ub3QgY2xlYW4gdGhlIGN1cnJlbnQgb3IgZnV0dXJlIGVwb2Nocy4gVGhlIG1heF9yb3dzIHBhcmFtZXRlciBjYXBzIHRoZSBudW1iZXIgb2Ygcm93cyBlcmFzZWQgcGVyIGNhbGwgdG8gbGltaXQgQ1BVIHVzYWdlLgCAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAZCclRQZjb21taXTsAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb21taXQKc3VtbWFyeTogJ1NldCBjb21taXQgdmFsdWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNldCB0aGUgaW5pdGlhbCBjb21taXQgdmFsdWUgZHVyaW5nIGdhbWUgaW5pdGlhbGl6YXRpb24uAABgNDK3JkUJY29uZmlnbG9n3QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29uZmlnbG9nCnN1bW1hcnk6ICdMb2cgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBsb2dzIHRoZSBjdXJyZW50IGdhbWUgY29uZmlndXJhdGlvbi4gQ2FsbGVkIGlubGluZSBhZnRlciBpbml0aWFsaXphdGlvbiB0byBicm9hZGNhc3QgY29uZmlnIHZpYSBhY3Rpb24gdHJhY2VzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAIC8zEUFY3JhZnTIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmFmdApzdW1tYXJ5OiAnQ3JhZnQgaXRlbXMgZnJvbSBhIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmb3JtIGNhcmdvIGl0ZW1zIGludG8gYSBuZXcgaXRlbSB1c2luZyBhIHJlY2lwZS4gVGhlIGVudGl0eSBtdXN0IGhhdmUgYSBjcmFmdGVyIG1vZHVsZSBpbnN0YWxsZWQuIENvbnN1bWVzIGVuZXJneSBhbmQgc2NoZWR1bGVzIGEgY3JhZnRpbmcgdGFzayB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIHRvdGFsIGlucHV0IG1hc3MgYW5kIGNyYWZ0ZXIgc3BlZWQuIElucHV0IHF1YW50aXRpZXMgbXVzdCBleGFjdGx5IG1hdGNoIHRoZSByZWNpcGUgcmVxdWlyZW1lbnRzLuCzy1OpbNRFDGNyZWF0ZWVudGl0eb8BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyZWF0ZWVudGl0eQpzdW1tYXJ5OiAnREVCVUc6IGNyZWF0ZSBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAeBqrSgZkZXBsb3nsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXBsb3kKc3VtbWFyeTogJ0RlcGxveSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClVucGFjayBhIHBhY2tlZCBlbnRpdHkgaXRlbSAocGFja2VkIHNoaXAgb3IgcGFja2VkIGNvbnRhaW5lcikgZnJvbSBjYXJnbywgc2NoZWR1bGluZyBhIGRlcGxveSB0YXNrIHRoYXQgY3JlYXRlcyB0aGUgbmV3IGVudGl0eSBhdCB0aGUgZGVwbG95aW5nIGVudGl0eSdzIGxvY2F0aW9uIHVwb24gcmVzb2x1dGlvbi4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQuAAAAICNzc1cHZXh0cmFjdKEDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGV4dHJhY3QKc3VtbWFyeTogJ0V4dHJhY3QgcmVzb3VyY2VzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFeHRyYWN0IHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZXh0cmFjdGFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhbiBleHRyYWN0aW9uIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGV4dHJhY3RvciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YQAAAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AAFZRJyqzYgpnZXRtb2R1bGVzAAAA8OcaNbNiCWdldG5lYXJied4DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5lYXJieQpzdW1tYXJ5OiAnR2V0IG5lYXJieSByZWFjaGFibGUgc3lzdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBuZWFyYnkgc3lzdGVtcyByZWFjaGFibGUgYnkgYW4gZW50aXR5IGZyb20gaXRzIHByb2plY3RlZCBsb2NhdGlvbi4gUmV0dXJucyBjdXJyZW50IHN0YXRlICh3aXRoIGNvbXBsZXRlZCB0YXNrcyByZXNvbHZlZCksIHByb2plY3RlZCBzdGF0ZSAoYWZ0ZXIgYWxsIHNjaGVkdWxlZCB0YXNrcyksIGFuZCBhIGxpc3Qgb2YgcmVhY2hhYmxlIHN5c3RlbXMgd2l0aCBkaXN0YW5jZSwgZW5lcmd5IGNvc3QsIGZsaWdodCB0aW1lLCBhbmQgbWFya2V0IGluZm9ybWF0aW9uLgAAXdPlNbNiCmdldG5mdGluZm8AAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AAFDVIXWzYglnZXRyZWNpcGUAAABW1SF1s2IKZ2V0cmVjaXBlcwCAFbqaYnWzYgxnZXRyZXNvdXJjZXMAAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgCi2ubmqullC2dyb3VwdHJhdmVsmgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ3JvdXB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgbXVsdGlwbGUgZW50aXRpZXMgdG9nZXRoZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIGdyb3VwIHRyYXZlbCBmb3IgbXVsdGlwbGUgZW50aXRpZXMgdG8gYSBkZXN0aW5hdGlvbi4gQWxsIGVudGl0aWVzIG11c3QgYmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIuIEF0IGxlYXN0IG9uZSBlbnRpdHkgd2l0aCBlbmdpbmVzIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhydXN0LiBGbGlnaHQgZHVyYXRpb24gaXMgY2FsY3VsYXRlZCBmcm9tIGNvbWJpbmVkIHRocnVzdCBhbmQgdG90YWwgbWFzcyBvZiBhbGwgZW50aXRpZXMuIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgZm9yIGF0b21pYyByZXNvbHV0aW9uIGFuZCBjYW5jZWxsYXRpb24uAAAAAADQsGkEaGFzaPgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2gKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGEyNTYgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhMjU2IGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAABAhNKwaQdoYXNoNTEy+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaDUxMgpzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTUxMiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGE1MTIgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAAAAkN10BGluaXT6AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBpbml0CnN1bW1hcnk6ICdJbml0aWFsaXplIGdhbWUgc2VlZCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhbGl6ZSBhIHRoZSBnYW1lcyBzZWVkIGFuZCBzZWVkIHZhbHVlcyB0byBib290c3RyYXAgZ2FtZSBzdGF0ZS4AAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLgAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnAAAAAAAAkKPBBHNhbHTYAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzYWx0CnN1bW1hcnk6ICdBcHBlbmQgU2FsdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWRkIGFkZGl0aW9uYWwgc2FsdCB0byB0aGUgbmV4dCBlcG9jaCBzZWVkLgAAYAvlNbPCCXNldG5mdGNmZwAAAGXXoMlNxQpzcGF3bmNhcmdvxQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25jYXJnbwpzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGNhcmdvIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSSkrhyU3FC3NwYXduc2VlZGVkzQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25zZWVkZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBzZWVkZWQgY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLaDQVNoqrKrjDHdpcGVzZXF1ZW5jZcIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGVzZXF1ZW5jZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGVzZXF1ZW5jZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAFDN5QR3cmFwAA0AAAAAAMquQQNpNjQAAAljYXJnb19yb3cAALhqOpMnRQNpNjQAAA1jb250YWluZXJfcm93AKqml/ns8lQDaTY0AAAPZW50aXR5Z3JvdXBfcm93AAAAk7psEI0DaTY0AAAMbG9jYXRpb25fcm93AAAAAACsu5oDaTY0AAAJbmV4dXNfcm93AABgbk2K8poDaTY0AAANbmZ0Y29uZmlnX3JvdwAAAABc5U2sA2k2NAAACnBsYXllcl9yb3cAAABA7auwugNpNjQAAAtyZXNlcnZlX3JvdwAAAApNpa3CA2k2NAAADHNlcXVlbmNlX3JvdwAAAAAAUF3DA2k2NAAACHNoaXBfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAdAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAAAAeBqrSgx0YXNrX3Jlc3VsdHMAAAAgI3NzVwx0YXNrX3Jlc3VsdHMAAGBuTYqyYgtnYW1lX2NvbmZpZwCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwBMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm8AJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AAF3T5TWzYg5uZnRpbmZvX3Jlc3VsdAAAuMqbWLNiC3BsYXllcl9pbmZvAABQ1SF1s2IOcmVjaXBlc19yZXN1bHQAAFbVIXWzYg5yZWNpcGVzX3Jlc3VsdIAVuppidbNiEHJlc291cmNlc19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cwAAAAAAUM3lDHRhc2tfcmVzdWx0cw==');
209
209
  const abi = ABI.from(abiBlob);
210
210
  var Types;
211
211
  (function (Types) {
@@ -230,6 +230,21 @@ var Types;
230
230
  Struct.type('addmodule')
231
231
  ], addmodule);
232
232
  Types.addmodule = addmodule;
233
+ let addnexus = class addnexus extends Struct {
234
+ };
235
+ __decorate([
236
+ Struct.field('string')
237
+ ], addnexus.prototype, "nexus_name", void 0);
238
+ __decorate([
239
+ Struct.field(Int64)
240
+ ], addnexus.prototype, "x", void 0);
241
+ __decorate([
242
+ Struct.field(Int64)
243
+ ], addnexus.prototype, "y", void 0);
244
+ addnexus = __decorate([
245
+ Struct.type('addnexus')
246
+ ], addnexus);
247
+ Types.addnexus = addnexus;
233
248
  let advance = class advance extends Struct {
234
249
  };
235
250
  __decorate([
@@ -410,21 +425,6 @@ var Types;
410
425
  Struct.type('commit')
411
426
  ], commit);
412
427
  Types.commit = commit;
413
- let loader_stats = class loader_stats extends Struct {
414
- };
415
- __decorate([
416
- Struct.field(UInt32)
417
- ], loader_stats.prototype, "mass", void 0);
418
- __decorate([
419
- Struct.field(UInt16)
420
- ], loader_stats.prototype, "thrust", void 0);
421
- __decorate([
422
- Struct.field(UInt8)
423
- ], loader_stats.prototype, "quantity", void 0);
424
- loader_stats = __decorate([
425
- Struct.type('loader_stats')
426
- ], loader_stats);
427
- Types.loader_stats = loader_stats;
428
428
  let entity_defaults = class entity_defaults extends Struct {
429
429
  };
430
430
  __decorate([
@@ -433,9 +433,6 @@ var Types;
433
433
  __decorate([
434
434
  Struct.field(UInt16)
435
435
  ], entity_defaults.prototype, "warehouse_z", void 0);
436
- __decorate([
437
- Struct.field(loader_stats)
438
- ], entity_defaults.prototype, "warehouse_loaders", void 0);
439
436
  __decorate([
440
437
  Struct.field(UInt32)
441
438
  ], entity_defaults.prototype, "container_hullmass", void 0);
@@ -457,6 +454,15 @@ var Types;
457
454
  __decorate([
458
455
  Struct.field(UInt32)
459
456
  ], item_def.prototype, "mass", void 0);
457
+ __decorate([
458
+ Struct.field(UInt8)
459
+ ], item_def.prototype, "type", void 0);
460
+ __decorate([
461
+ Struct.field(UInt8)
462
+ ], item_def.prototype, "subtype", void 0);
463
+ __decorate([
464
+ Struct.field(UInt8)
465
+ ], item_def.prototype, "tier", void 0);
460
466
  item_def = __decorate([
461
467
  Struct.type('item_def')
462
468
  ], item_def);
@@ -680,6 +686,21 @@ var Types;
680
686
  Struct.type('entity_current_state')
681
687
  ], entity_current_state);
682
688
  Types.entity_current_state = entity_current_state;
689
+ let loader_stats = class loader_stats extends Struct {
690
+ };
691
+ __decorate([
692
+ Struct.field(UInt32)
693
+ ], loader_stats.prototype, "mass", void 0);
694
+ __decorate([
695
+ Struct.field(UInt16)
696
+ ], loader_stats.prototype, "thrust", void 0);
697
+ __decorate([
698
+ Struct.field(UInt8)
699
+ ], loader_stats.prototype, "quantity", void 0);
700
+ loader_stats = __decorate([
701
+ Struct.type('loader_stats')
702
+ ], loader_stats);
703
+ Types.loader_stats = loader_stats;
683
704
  let movement_stats = class movement_stats extends Struct {
684
705
  };
685
706
  __decorate([
@@ -902,6 +923,12 @@ var Types;
902
923
  Struct.type('getentity')
903
924
  ], getentity);
904
925
  Types.getentity = getentity;
926
+ let getitemdata = class getitemdata extends Struct {
927
+ };
928
+ getitemdata = __decorate([
929
+ Struct.type('getitemdata')
930
+ ], getitemdata);
931
+ Types.getitemdata = getitemdata;
905
932
  let getitems = class getitems extends Struct {
906
933
  };
907
934
  getitems = __decorate([
@@ -932,6 +959,12 @@ var Types;
932
959
  Struct.type('getlocdata')
933
960
  ], getlocdata);
934
961
  Types.getlocdata = getlocdata;
962
+ let getmodules = class getmodules extends Struct {
963
+ };
964
+ getmodules = __decorate([
965
+ Struct.type('getmodules')
966
+ ], getmodules);
967
+ Types.getmodules = getmodules;
935
968
  let getnearby = class getnearby extends Struct {
936
969
  };
937
970
  __decorate([
@@ -947,6 +980,12 @@ var Types;
947
980
  Struct.type('getnearby')
948
981
  ], getnearby);
949
982
  Types.getnearby = getnearby;
983
+ let getnftinfo = class getnftinfo extends Struct {
984
+ };
985
+ getnftinfo = __decorate([
986
+ Struct.type('getnftinfo')
987
+ ], getnftinfo);
988
+ Types.getnftinfo = getnftinfo;
950
989
  let getplayer = class getplayer extends Struct {
951
990
  };
952
991
  __decorate([
@@ -956,6 +995,33 @@ var Types;
956
995
  Struct.type('getplayer')
957
996
  ], getplayer);
958
997
  Types.getplayer = getplayer;
998
+ let getrecipe = class getrecipe extends Struct {
999
+ };
1000
+ __decorate([
1001
+ Struct.field(UInt16)
1002
+ ], getrecipe.prototype, "output_item_id", void 0);
1003
+ getrecipe = __decorate([
1004
+ Struct.type('getrecipe')
1005
+ ], getrecipe);
1006
+ Types.getrecipe = getrecipe;
1007
+ let getrecipes = class getrecipes extends Struct {
1008
+ };
1009
+ __decorate([
1010
+ Struct.field(UInt16)
1011
+ ], getrecipes.prototype, "lower_bound", void 0);
1012
+ __decorate([
1013
+ Struct.field(UInt8)
1014
+ ], getrecipes.prototype, "limit", void 0);
1015
+ getrecipes = __decorate([
1016
+ Struct.type('getrecipes')
1017
+ ], getrecipes);
1018
+ Types.getrecipes = getrecipes;
1019
+ let getresources = class getresources extends Struct {
1020
+ };
1021
+ getresources = __decorate([
1022
+ Struct.type('getresources')
1023
+ ], getresources);
1024
+ Types.getresources = getresources;
959
1025
  let getstratum = class getstratum extends Struct {
960
1026
  };
961
1027
  __decorate([
@@ -1028,6 +1094,102 @@ var Types;
1028
1094
  Struct.type('init')
1029
1095
  ], init);
1030
1096
  Types.init = init;
1097
+ let recipe_input = class recipe_input extends Struct {
1098
+ };
1099
+ __decorate([
1100
+ Struct.field(UInt16)
1101
+ ], recipe_input.prototype, "item_id", void 0);
1102
+ __decorate([
1103
+ Struct.field(UInt8)
1104
+ ], recipe_input.prototype, "category", void 0);
1105
+ __decorate([
1106
+ Struct.field(UInt32)
1107
+ ], recipe_input.prototype, "quantity", void 0);
1108
+ recipe_input = __decorate([
1109
+ Struct.type('recipe_input')
1110
+ ], recipe_input);
1111
+ Types.recipe_input = recipe_input;
1112
+ let stat_source = class stat_source extends Struct {
1113
+ };
1114
+ __decorate([
1115
+ Struct.field(UInt8)
1116
+ ], stat_source.prototype, "input_index", void 0);
1117
+ __decorate([
1118
+ Struct.field(UInt8)
1119
+ ], stat_source.prototype, "input_stat_index", void 0);
1120
+ stat_source = __decorate([
1121
+ Struct.type('stat_source')
1122
+ ], stat_source);
1123
+ Types.stat_source = stat_source;
1124
+ let stat_slot_response = class stat_slot_response extends Struct {
1125
+ };
1126
+ __decorate([
1127
+ Struct.field(stat_source, { array: true })
1128
+ ], stat_slot_response.prototype, "sources", void 0);
1129
+ stat_slot_response = __decorate([
1130
+ Struct.type('stat_slot_response')
1131
+ ], stat_slot_response);
1132
+ Types.stat_slot_response = stat_slot_response;
1133
+ let recipe_item_info = class recipe_item_info extends Struct {
1134
+ };
1135
+ __decorate([
1136
+ Struct.field(UInt16)
1137
+ ], recipe_item_info.prototype, "id", void 0);
1138
+ __decorate([
1139
+ Struct.field(UInt32)
1140
+ ], recipe_item_info.prototype, "mass", void 0);
1141
+ recipe_item_info = __decorate([
1142
+ Struct.type('recipe_item_info')
1143
+ ], recipe_item_info);
1144
+ Types.recipe_item_info = recipe_item_info;
1145
+ let recipe_response = class recipe_response extends Struct {
1146
+ };
1147
+ __decorate([
1148
+ Struct.field(UInt16)
1149
+ ], recipe_response.prototype, "output_item_id", void 0);
1150
+ __decorate([
1151
+ Struct.field(UInt32)
1152
+ ], recipe_response.prototype, "output_mass", void 0);
1153
+ __decorate([
1154
+ Struct.field(recipe_input, { array: true })
1155
+ ], recipe_response.prototype, "inputs", void 0);
1156
+ __decorate([
1157
+ Struct.field(stat_slot_response, { array: true })
1158
+ ], recipe_response.prototype, "stat_slots", void 0);
1159
+ __decorate([
1160
+ Struct.field(Bytes)
1161
+ ], recipe_response.prototype, "blend_weights", void 0);
1162
+ __decorate([
1163
+ Struct.field(recipe_item_info)
1164
+ ], recipe_response.prototype, "output_item", void 0);
1165
+ __decorate([
1166
+ Struct.field(recipe_item_info, { array: true })
1167
+ ], recipe_response.prototype, "input_items", void 0);
1168
+ recipe_response = __decorate([
1169
+ Struct.type('recipe_response')
1170
+ ], recipe_response);
1171
+ Types.recipe_response = recipe_response;
1172
+ let recipes_result = class recipes_result extends Struct {
1173
+ };
1174
+ __decorate([
1175
+ Struct.field(recipe_response, { array: true })
1176
+ ], recipes_result.prototype, "recipes", void 0);
1177
+ recipes_result = __decorate([
1178
+ Struct.type('recipes_result')
1179
+ ], recipes_result);
1180
+ Types.recipes_result = recipes_result;
1181
+ let itemdata_result = class itemdata_result extends Struct {
1182
+ };
1183
+ __decorate([
1184
+ Struct.field(item_def, { array: true })
1185
+ ], itemdata_result.prototype, "items", void 0);
1186
+ __decorate([
1187
+ Struct.field(recipes_result)
1188
+ ], itemdata_result.prototype, "recipes", void 0);
1189
+ itemdata_result = __decorate([
1190
+ Struct.type('itemdata_result')
1191
+ ], itemdata_result);
1192
+ Types.itemdata_result = itemdata_result;
1031
1193
  let items_info = class items_info extends Struct {
1032
1194
  };
1033
1195
  __decorate([
@@ -1133,6 +1295,33 @@ var Types;
1133
1295
  Struct.type('location_row')
1134
1296
  ], location_row);
1135
1297
  Types.location_row = location_row;
1298
+ let module_info = class module_info extends Struct {
1299
+ };
1300
+ __decorate([
1301
+ Struct.field(UInt16)
1302
+ ], module_info.prototype, "id", void 0);
1303
+ __decorate([
1304
+ Struct.field(UInt32)
1305
+ ], module_info.prototype, "mass", void 0);
1306
+ __decorate([
1307
+ Struct.field(UInt8)
1308
+ ], module_info.prototype, "module_type", void 0);
1309
+ __decorate([
1310
+ Struct.field(UInt8)
1311
+ ], module_info.prototype, "tier", void 0);
1312
+ module_info = __decorate([
1313
+ Struct.type('module_info')
1314
+ ], module_info);
1315
+ Types.module_info = module_info;
1316
+ let modules_result = class modules_result extends Struct {
1317
+ };
1318
+ __decorate([
1319
+ Struct.field(module_info, { array: true })
1320
+ ], modules_result.prototype, "modules", void 0);
1321
+ modules_result = __decorate([
1322
+ Struct.type('modules_result')
1323
+ ], modules_result);
1324
+ Types.modules_result = modules_result;
1136
1325
  let nearby_system = class nearby_system extends Struct {
1137
1326
  };
1138
1327
  __decorate([
@@ -1172,6 +1361,87 @@ var Types;
1172
1361
  Struct.type('nearby_info')
1173
1362
  ], nearby_info);
1174
1363
  Types.nearby_info = nearby_info;
1364
+ let nexus_row = class nexus_row extends Struct {
1365
+ };
1366
+ __decorate([
1367
+ Struct.field(UInt64)
1368
+ ], nexus_row.prototype, "id", void 0);
1369
+ __decorate([
1370
+ Struct.field(Name)
1371
+ ], nexus_row.prototype, "owner", void 0);
1372
+ __decorate([
1373
+ Struct.field('string')
1374
+ ], nexus_row.prototype, "name", void 0);
1375
+ __decorate([
1376
+ Struct.field(coordinates)
1377
+ ], nexus_row.prototype, "coordinates", void 0);
1378
+ nexus_row = __decorate([
1379
+ Struct.type('nexus_row')
1380
+ ], nexus_row);
1381
+ Types.nexus_row = nexus_row;
1382
+ let schema_field = class schema_field extends Struct {
1383
+ };
1384
+ __decorate([
1385
+ Struct.field('string')
1386
+ ], schema_field.prototype, "name", void 0);
1387
+ __decorate([
1388
+ Struct.field('string')
1389
+ ], schema_field.prototype, "field_type", void 0);
1390
+ schema_field = __decorate([
1391
+ Struct.type('schema_field')
1392
+ ], schema_field);
1393
+ Types.schema_field = schema_field;
1394
+ let nft_schema_def = class nft_schema_def extends Struct {
1395
+ };
1396
+ __decorate([
1397
+ Struct.field(Name)
1398
+ ], nft_schema_def.prototype, "schema_name", void 0);
1399
+ __decorate([
1400
+ Struct.field(schema_field, { array: true })
1401
+ ], nft_schema_def.prototype, "fields", void 0);
1402
+ nft_schema_def = __decorate([
1403
+ Struct.type('nft_schema_def')
1404
+ ], nft_schema_def);
1405
+ Types.nft_schema_def = nft_schema_def;
1406
+ let nft_template_def = class nft_template_def extends Struct {
1407
+ };
1408
+ __decorate([
1409
+ Struct.field(UInt16)
1410
+ ], nft_template_def.prototype, "item_id", void 0);
1411
+ __decorate([
1412
+ Struct.field(Name)
1413
+ ], nft_template_def.prototype, "schema_name", void 0);
1414
+ nft_template_def = __decorate([
1415
+ Struct.type('nft_template_def')
1416
+ ], nft_template_def);
1417
+ Types.nft_template_def = nft_template_def;
1418
+ let nftconfig_row = class nftconfig_row extends Struct {
1419
+ };
1420
+ __decorate([
1421
+ Struct.field(UInt16)
1422
+ ], nftconfig_row.prototype, "item_id", void 0);
1423
+ __decorate([
1424
+ Struct.field(Int32)
1425
+ ], nftconfig_row.prototype, "template_id", void 0);
1426
+ __decorate([
1427
+ Struct.field(Name)
1428
+ ], nftconfig_row.prototype, "schema_name", void 0);
1429
+ nftconfig_row = __decorate([
1430
+ Struct.type('nftconfig_row')
1431
+ ], nftconfig_row);
1432
+ Types.nftconfig_row = nftconfig_row;
1433
+ let nftinfo_result = class nftinfo_result extends Struct {
1434
+ };
1435
+ __decorate([
1436
+ Struct.field(nft_schema_def, { array: true })
1437
+ ], nftinfo_result.prototype, "schemas", void 0);
1438
+ __decorate([
1439
+ Struct.field(nft_template_def, { array: true })
1440
+ ], nftinfo_result.prototype, "templates", void 0);
1441
+ nftinfo_result = __decorate([
1442
+ Struct.type('nftinfo_result')
1443
+ ], nftinfo_result);
1444
+ Types.nftinfo_result = nftinfo_result;
1175
1445
  let task_event = class task_event extends Struct {
1176
1446
  };
1177
1447
  __decorate([
@@ -1310,6 +1580,24 @@ var Types;
1310
1580
  Struct.type('resolve_results')
1311
1581
  ], resolve_results);
1312
1582
  Types.resolve_results = resolve_results;
1583
+ let resource_info = class resource_info extends Struct {
1584
+ };
1585
+ __decorate([
1586
+ Struct.field(UInt16)
1587
+ ], resource_info.prototype, "id", void 0);
1588
+ __decorate([
1589
+ Struct.field(UInt32)
1590
+ ], resource_info.prototype, "mass", void 0);
1591
+ __decorate([
1592
+ Struct.field(UInt8)
1593
+ ], resource_info.prototype, "category", void 0);
1594
+ __decorate([
1595
+ Struct.field(UInt8)
1596
+ ], resource_info.prototype, "tier", void 0);
1597
+ resource_info = __decorate([
1598
+ Struct.type('resource_info')
1599
+ ], resource_info);
1600
+ Types.resource_info = resource_info;
1313
1601
  let resource_stats = class resource_stats extends Struct {
1314
1602
  };
1315
1603
  __decorate([
@@ -1325,6 +1613,15 @@ var Types;
1325
1613
  Struct.type('resource_stats')
1326
1614
  ], resource_stats);
1327
1615
  Types.resource_stats = resource_stats;
1616
+ let resources_result = class resources_result extends Struct {
1617
+ };
1618
+ __decorate([
1619
+ Struct.field(resource_info, { array: true })
1620
+ ], resources_result.prototype, "resources", void 0);
1621
+ resources_result = __decorate([
1622
+ Struct.type('resources_result')
1623
+ ], resources_result);
1624
+ Types.resources_result = resources_result;
1328
1625
  let rmmodule = class rmmodule extends Struct {
1329
1626
  };
1330
1627
  __decorate([
@@ -1343,6 +1640,15 @@ var Types;
1343
1640
  Struct.type('rmmodule')
1344
1641
  ], rmmodule);
1345
1642
  Types.rmmodule = rmmodule;
1643
+ let rmnftcfg = class rmnftcfg extends Struct {
1644
+ };
1645
+ __decorate([
1646
+ Struct.field(UInt16)
1647
+ ], rmnftcfg.prototype, "item_id", void 0);
1648
+ rmnftcfg = __decorate([
1649
+ Struct.type('rmnftcfg')
1650
+ ], rmnftcfg);
1651
+ Types.rmnftcfg = rmnftcfg;
1346
1652
  let salt = class salt extends Struct {
1347
1653
  };
1348
1654
  __decorate([
@@ -1364,6 +1670,21 @@ var Types;
1364
1670
  Struct.type('sequence_row')
1365
1671
  ], sequence_row);
1366
1672
  Types.sequence_row = sequence_row;
1673
+ let setnftcfg = class setnftcfg extends Struct {
1674
+ };
1675
+ __decorate([
1676
+ Struct.field(UInt16)
1677
+ ], setnftcfg.prototype, "item_id", void 0);
1678
+ __decorate([
1679
+ Struct.field(Int32)
1680
+ ], setnftcfg.prototype, "template_id", void 0);
1681
+ __decorate([
1682
+ Struct.field(Name)
1683
+ ], setnftcfg.prototype, "schema_name", void 0);
1684
+ setnftcfg = __decorate([
1685
+ Struct.type('setnftcfg')
1686
+ ], setnftcfg);
1687
+ Types.setnftcfg = setnftcfg;
1367
1688
  let ship_row = class ship_row extends Struct {
1368
1689
  };
1369
1690
  __decorate([
@@ -1375,6 +1696,9 @@ var Types;
1375
1696
  __decorate([
1376
1697
  Struct.field('string')
1377
1698
  ], ship_row.prototype, "name", void 0);
1699
+ __decorate([
1700
+ Struct.field(UInt64)
1701
+ ], ship_row.prototype, "seed", void 0);
1378
1702
  __decorate([
1379
1703
  Struct.field(coordinates)
1380
1704
  ], ship_row.prototype, "coordinates", void 0);
@@ -1585,18 +1909,27 @@ var Types;
1585
1909
  __decorate([
1586
1910
  Struct.field('string')
1587
1911
  ], warehouse_row.prototype, "name", void 0);
1912
+ __decorate([
1913
+ Struct.field(UInt64)
1914
+ ], warehouse_row.prototype, "seed", void 0);
1588
1915
  __decorate([
1589
1916
  Struct.field(coordinates)
1590
1917
  ], warehouse_row.prototype, "coordinates", void 0);
1591
1918
  __decorate([
1592
- Struct.field(UInt32)
1919
+ Struct.field(UInt32, { optional: true })
1920
+ ], warehouse_row.prototype, "hullmass", void 0);
1921
+ __decorate([
1922
+ Struct.field(UInt32, { optional: true })
1593
1923
  ], warehouse_row.prototype, "capacity", void 0);
1594
1924
  __decorate([
1595
1925
  Struct.field(UInt32)
1596
1926
  ], warehouse_row.prototype, "cargomass", void 0);
1597
1927
  __decorate([
1598
- Struct.field(loader_stats)
1928
+ Struct.field(loader_stats, { optional: true })
1599
1929
  ], warehouse_row.prototype, "loaders", void 0);
1930
+ __decorate([
1931
+ Struct.field(module_entry, { array: true })
1932
+ ], warehouse_row.prototype, "modules", void 0);
1600
1933
  __decorate([
1601
1934
  Struct.field(schedule, { optional: true })
1602
1935
  ], warehouse_row.prototype, "schedule", void 0);
@@ -1634,12 +1967,35 @@ var Types;
1634
1967
  Struct.type('wipesequence')
1635
1968
  ], wipesequence);
1636
1969
  Types.wipesequence = wipesequence;
1970
+ let wrap = class wrap extends Struct {
1971
+ };
1972
+ __decorate([
1973
+ Struct.field(Name)
1974
+ ], wrap.prototype, "owner", void 0);
1975
+ __decorate([
1976
+ Struct.field(Name)
1977
+ ], wrap.prototype, "entity_type", void 0);
1978
+ __decorate([
1979
+ Struct.field(UInt64)
1980
+ ], wrap.prototype, "entity_id", void 0);
1981
+ __decorate([
1982
+ Struct.field(UInt64)
1983
+ ], wrap.prototype, "cargo_id", void 0);
1984
+ __decorate([
1985
+ Struct.field(UInt64)
1986
+ ], wrap.prototype, "quantity", void 0);
1987
+ wrap = __decorate([
1988
+ Struct.type('wrap')
1989
+ ], wrap);
1990
+ Types.wrap = wrap;
1637
1991
  })(Types || (Types = {}));
1638
1992
  const TableMap = {
1639
1993
  cargo: Types.cargo_row,
1640
1994
  container: Types.container_row,
1641
1995
  entitygroup: Types.entitygroup_row,
1642
1996
  location: Types.location_row,
1997
+ nexus: Types.nexus_row,
1998
+ nftconfig: Types.nftconfig_row,
1643
1999
  player: Types.player_row,
1644
2000
  reserve: Types.reserve_row,
1645
2001
  sequence: Types.sequence_row,
@@ -4558,7 +4914,9 @@ function calc_rechargetime(capacity, energy, recharge) {
4558
4914
  return cap.subtracting(eng).dividing(recharge);
4559
4915
  }
4560
4916
  function calc_ship_rechargetime(ship) {
4561
- return calc_rechargetime(ship.generator.capacity, ship.energy, ship.generator.recharge);
4917
+ if (!ship.generator)
4918
+ return UInt32.from(0);
4919
+ return calc_rechargetime(ship.generator.capacity, ship.energy ?? UInt16.from(0), ship.generator.recharge);
4562
4920
  }
4563
4921
  function calc_flighttime(distance, acceleration) {
4564
4922
  return UInt32.from(2 * Math.sqrt(Number(distance) / acceleration));
@@ -4568,14 +4926,17 @@ function calc_loader_flighttime(ship, mass, altitude) {
4568
4926
  return calc_flighttime(z, calc_loader_acceleration(ship, mass));
4569
4927
  }
4570
4928
  function calc_loader_acceleration(ship, mass) {
4571
- return calc_acceleration(Number(ship.loaders.thrust), Number(mass) + Number(ship.loaders.mass));
4929
+ const thrust = ship.loaders ? Number(ship.loaders.thrust) : 0;
4930
+ const loaderMass = ship.loaders ? Number(ship.loaders.mass) : 0;
4931
+ return calc_acceleration(thrust, Number(mass) + loaderMass);
4572
4932
  }
4573
4933
  function calc_ship_flighttime(ship, mass, distance) {
4574
4934
  const acceleration = calc_ship_acceleration(ship, mass);
4575
4935
  return calc_flighttime(distance, acceleration);
4576
4936
  }
4577
4937
  function calc_ship_acceleration(ship, mass) {
4578
- return calc_acceleration(Number(ship.engines.thrust), Number(mass));
4938
+ const thrust = ship.engines ? Number(ship.engines.thrust) : 0;
4939
+ return calc_acceleration(thrust, Number(mass));
4579
4940
  }
4580
4941
  function calc_acceleration(thrust, mass) {
4581
4942
  return (thrust / mass) * PRECISION;
@@ -4583,7 +4944,7 @@ function calc_acceleration(thrust, mass) {
4583
4944
  function calc_ship_mass(ship, cargos) {
4584
4945
  const mass = UInt64.from(0);
4585
4946
  mass.add(ship.hullmass);
4586
- if (ship.loaders.quantity.gt(UInt32.zero)) {
4947
+ if (ship.loaders && ship.loaders.quantity.gt(UInt32.zero)) {
4587
4948
  mass.add(ship.loaders.mass.multiplying(ship.loaders.quantity));
4588
4949
  }
4589
4950
  for (const cargo of cargos) {
@@ -4607,6 +4968,8 @@ function calculateTransferTime(ship, cargos, quantities) {
4607
4968
  if (mass.equals(UInt64.zero)) {
4608
4969
  return UInt32.from(0);
4609
4970
  }
4971
+ if (!ship.loaders)
4972
+ return UInt32.from(0);
4610
4973
  mass = UInt64.from(mass).adding(ship.loaders.mass);
4611
4974
  const transfer_time = calc_loader_flighttime(ship, mass);
4612
4975
  return transfer_time.dividing(ship.loaders.quantity);
@@ -4639,15 +5002,15 @@ function calculateLoadTimeBreakdown(ship, cargos, loadQuantities, unloadQuantiti
4639
5002
  }
4640
5003
  let unloadTime = 0;
4641
5004
  let loadTime = 0;
4642
- if (mass_unload.gt(UInt64.zero)) {
5005
+ if (mass_unload.gt(UInt64.zero) && ship.loaders) {
4643
5006
  const totalMass = UInt64.from(mass_unload).adding(ship.loaders.mass);
4644
5007
  unloadTime = Number(calc_loader_flighttime(ship, totalMass));
4645
5008
  }
4646
- if (mass_load.gt(UInt64.zero)) {
5009
+ if (mass_load.gt(UInt64.zero) && ship.loaders) {
4647
5010
  const totalMass = UInt64.from(mass_load).adding(ship.loaders.mass);
4648
5011
  loadTime = Number(calc_loader_flighttime(ship, totalMass));
4649
5012
  }
4650
- const numLoaders = Number(ship.loaders.quantity);
5013
+ const numLoaders = ship.loaders ? Number(ship.loaders.quantity) : 0;
4651
5014
  const totalTime = numLoaders > 0 ? (unloadTime + loadTime) / numLoaders : 0;
4652
5015
  const unloadTimePerLoader = numLoaders > 0 ? unloadTime / numLoaders : 0;
4653
5016
  const loadTimePerLoader = numLoaders > 0 ? loadTime / numLoaders : 0;
@@ -4667,12 +5030,14 @@ function estimateTravelTime(ship, travelMass, distance, options = {}) {
4667
5030
  let unloadTime = UInt32.zero;
4668
5031
  if (loadMass &&
4669
5032
  UInt32.from(loadMass).gt(UInt32.zero) &&
5033
+ ship.loaders &&
4670
5034
  ship.loaders.quantity.gt(UInt32.zero)) {
4671
5035
  const totalMass = UInt64.from(loadMass).adding(ship.loaders.mass);
4672
5036
  loadTime = calc_loader_flighttime(ship, totalMass).dividing(ship.loaders.quantity);
4673
5037
  }
4674
5038
  if (unloadMass &&
4675
5039
  UInt32.from(unloadMass).gt(UInt32.zero) &&
5040
+ ship.loaders &&
4676
5041
  ship.loaders.quantity.gt(UInt32.zero)) {
4677
5042
  const totalMass = UInt64.from(unloadMass).adding(ship.loaders.mass);
4678
5043
  unloadTime = calc_loader_flighttime(ship, totalMass).dividing(ship.loaders.quantity);
@@ -4694,8 +5059,10 @@ function estimateDealTravelTime(ship, shipMass, distance, loadMass) {
4694
5059
  return estimate.total;
4695
5060
  }
4696
5061
  function hasEnergyForDistance$1(ship, distance) {
5062
+ if (!ship.engines)
5063
+ return false;
4697
5064
  const energyNeeded = UInt64.from(distance).dividing(PRECISION).multiplying(ship.engines.drain);
4698
- return UInt64.from(ship.energy).gte(energyNeeded);
5065
+ return UInt64.from(ship.energy ?? 0).gte(energyNeeded);
4699
5066
  }
4700
5067
  function getFlightOrigin(entity, flightTaskIndex) {
4701
5068
  if (!entity.schedule)
@@ -5536,6 +5903,10 @@ class Warehouse extends Types.entity_info {
5536
5903
  get orbitalAltitude() {
5537
5904
  return this.coordinates.z?.toNumber() || 0;
5538
5905
  }
5906
+ get totalMass() {
5907
+ const hull = this.hullmass ? UInt64.from(this.hullmass) : UInt64.from(0);
5908
+ return hull.adding(this.totalCargoMass);
5909
+ }
5539
5910
  }
5540
5911
 
5541
5912
  class Container extends Types.entity_info {
@@ -5588,6 +5959,17 @@ function computeContainerCapabilities(stats) {
5588
5959
  const capacity = Math.floor(1000000 * Math.pow(10, exponent));
5589
5960
  return { hullmass, capacity };
5590
5961
  }
5962
+ function computeContainerT2Capabilities(stats) {
5963
+ const strength = stats['strength'] ?? 0;
5964
+ const density = stats['density'] ?? 0;
5965
+ const ductility = stats['ductility'] ?? 0;
5966
+ const purity = stats['purity'] ?? 0;
5967
+ const hullmass = 20000 + 50 * density;
5968
+ const statSum = strength + ductility + purity;
5969
+ const exponent = statSum / 2500;
5970
+ const capacity = Math.floor(1500000 * Math.pow(10, exponent));
5971
+ return { hullmass, capacity };
5972
+ }
5591
5973
 
5592
5974
  class EntitiesManager extends BaseManager {
5593
5975
  async getEntity(type, id) {
@@ -6037,7 +6419,7 @@ function makeShip(state) {
6037
6419
  return new Ship(entityInfo);
6038
6420
  }
6039
6421
  function makeWarehouse(state) {
6040
- const entityInfo = Types.entity_info.from({
6422
+ const info = {
6041
6423
  type: Name.from('warehouse'),
6042
6424
  id: UInt64.from(state.id),
6043
6425
  owner: Name.from(state.owner),
@@ -6046,13 +6428,18 @@ function makeWarehouse(state) {
6046
6428
  capacity: UInt32.from(state.capacity),
6047
6429
  cargomass: UInt32.from(0),
6048
6430
  cargo: state.cargo || [],
6049
- loaders: state.loaders,
6050
6431
  is_idle: !state.schedule,
6051
6432
  current_task_elapsed: UInt32.from(0),
6052
6433
  current_task_remaining: UInt32.from(0),
6053
6434
  pending_tasks: [],
6054
- schedule: state.schedule,
6055
- });
6435
+ };
6436
+ if (state.hullmass !== undefined)
6437
+ info.hullmass = UInt32.from(state.hullmass);
6438
+ if (state.loaders)
6439
+ info.loaders = state.loaders;
6440
+ if (state.schedule)
6441
+ info.schedule = state.schedule;
6442
+ const entityInfo = Types.entity_info.from(info);
6056
6443
  return new Warehouse(entityInfo);
6057
6444
  }
6058
6445
  function makeContainer(state) {
@@ -6272,11 +6659,12 @@ function resolveStats(category, stats) {
6272
6659
  };
6273
6660
  }
6274
6661
 
6275
- const ITEM_ENGINE_T1 = 10006;
6276
- const ITEM_GENERATOR_T1 = 10007;
6277
- const ITEM_EXTRACTOR_T1 = 10014;
6278
- const ITEM_LOADER_T1 = 10015;
6279
- const ITEM_MANUFACTURING_T1 = 10016;
6662
+ const ITEM_ENGINE_T1 = 10100;
6663
+ const ITEM_GENERATOR_T1 = 10101;
6664
+ const ITEM_EXTRACTOR_T1 = 10102;
6665
+ const ITEM_LOADER_T1 = 10103;
6666
+ const ITEM_MANUFACTURING_T1 = 10104;
6667
+ const ITEM_STORAGE_T1 = 10105;
6280
6668
  const MODULE_ANY = 0;
6281
6669
  const MODULE_ENGINE = 1;
6282
6670
  const MODULE_GENERATOR = 2;
@@ -6285,6 +6673,7 @@ const MODULE_LOADER = 4;
6285
6673
  const MODULE_WARP = 5;
6286
6674
  const MODULE_CRAFTER = 6;
6287
6675
  const MODULE_LAUNCHER = 7;
6676
+ const MODULE_STORAGE = 8;
6288
6677
  function moduleAccepts(slotType, moduleType) {
6289
6678
  return slotType === MODULE_ANY || slotType === moduleType;
6290
6679
  }
@@ -6300,6 +6689,8 @@ function getModuleCapabilityType(itemId) {
6300
6689
  return MODULE_LOADER;
6301
6690
  case ITEM_MANUFACTURING_T1:
6302
6691
  return MODULE_CRAFTER;
6692
+ case ITEM_STORAGE_T1:
6693
+ return MODULE_STORAGE;
6303
6694
  default:
6304
6695
  return 0xff;
6305
6696
  }
@@ -6308,17 +6699,21 @@ function isModuleItem(itemId) {
6308
6699
  return getModuleCapabilityType(itemId) !== 0xff;
6309
6700
  }
6310
6701
 
6311
- const ITEM_DRILL_SHAFT = 10009;
6312
- const ITEM_EXTRACTION_PROBE = 10010;
6313
- const ITEM_CARGO_ARM = 10011;
6314
- const ITEM_TOOL_BIT = 10012;
6315
- const ITEM_REACTION_CHAMBER = 10013;
6702
+ const ITEM_DRILL_SHAFT = 10005;
6703
+ const ITEM_EXTRACTION_PROBE = 10006;
6704
+ const ITEM_CARGO_ARM = 10007;
6705
+ const ITEM_TOOL_BIT = 10008;
6706
+ const ITEM_REACTION_CHAMBER = 10009;
6316
6707
  const ITEM_HULL_PLATES = 10001;
6317
6708
  const ITEM_CARGO_LINING = 10002;
6318
- const ITEM_CONTAINER_PACKED = 10003;
6319
- const ITEM_THRUSTER_CORE = 10004;
6320
- const ITEM_POWER_CELL = 10005;
6321
- const ITEM_SHIP_T1_PACKED = 10008;
6709
+ const ITEM_CONTAINER_T1_PACKED = 10200;
6710
+ const ITEM_THRUSTER_CORE = 10003;
6711
+ const ITEM_POWER_CELL = 10004;
6712
+ const ITEM_SHIP_T1_PACKED = 10201;
6713
+ const ITEM_WAREHOUSE_T1_PACKED = 10202;
6714
+ const ITEM_HULL_PLATES_T2 = 20001;
6715
+ const ITEM_CARGO_LINING_T2 = 20002;
6716
+ const ITEM_CONTAINER_T2_PACKED = 20200;
6322
6717
  const components = [
6323
6718
  {
6324
6719
  id: ITEM_HULL_PLATES,
@@ -6331,7 +6726,7 @@ const components = [
6331
6726
  { key: 'density', source: 'metal' },
6332
6727
  ],
6333
6728
  recipe: [{ category: 'metal', quantity: 15 }],
6334
- usedIn: [{ type: 'entity', name: 'Container' }, { type: 'entity', name: 'Ship T1' }],
6729
+ usedIn: [{ type: 'entity', name: 'Container' }, { type: 'entity', name: 'Warehouse T1' }, { type: 'entity', name: 'Ship T1' }],
6335
6730
  },
6336
6731
  {
6337
6732
  id: ITEM_CARGO_LINING,
@@ -6347,7 +6742,7 @@ const components = [
6347
6742
  { category: 'precious', quantity: 6 },
6348
6743
  { category: 'organic', quantity: 14 },
6349
6744
  ],
6350
- usedIn: [{ type: 'entity', name: 'Container' }, { type: 'entity', name: 'Ship T1' }],
6745
+ usedIn: [{ type: 'entity', name: 'Container' }, { type: 'entity', name: 'Warehouse T1' }, { type: 'entity', name: 'Ship T1' }],
6351
6746
  },
6352
6747
  {
6353
6748
  id: ITEM_THRUSTER_CORE,
@@ -6440,6 +6835,39 @@ const components = [
6440
6835
  recipe: [{ category: 'gas', quantity: 32 }],
6441
6836
  usedIn: [{ type: 'module', name: 'Manufacturing' }],
6442
6837
  },
6838
+ {
6839
+ id: ITEM_HULL_PLATES_T2,
6840
+ name: 'Hull Plates T2',
6841
+ description: 'Advanced structural plating reinforced with tier 2 metals.',
6842
+ color: '#9BADB8',
6843
+ mass: 50000,
6844
+ stats: [
6845
+ { key: 'strength', source: 'metal' },
6846
+ { key: 'density', source: 'metal' },
6847
+ ],
6848
+ recipe: [
6849
+ { itemId: ITEM_HULL_PLATES, quantity: 2 },
6850
+ { category: 'metal', quantity: 15 },
6851
+ ],
6852
+ usedIn: [{ type: 'entity', name: 'Container T2' }],
6853
+ },
6854
+ {
6855
+ id: ITEM_CARGO_LINING_T2,
6856
+ name: 'Cargo Lining T2',
6857
+ description: 'Advanced composite lining with improved storage properties.',
6858
+ color: '#E0B84D',
6859
+ mass: 30000,
6860
+ stats: [
6861
+ { key: 'ductility', source: 'precious' },
6862
+ { key: 'purity', source: 'organic' },
6863
+ ],
6864
+ recipe: [
6865
+ { itemId: ITEM_CARGO_LINING, quantity: 2 },
6866
+ { category: 'precious', quantity: 6 },
6867
+ { category: 'organic', quantity: 14 },
6868
+ ],
6869
+ usedIn: [{ type: 'entity', name: 'Container T2' }],
6870
+ },
6443
6871
  ];
6444
6872
  const entityRecipes = [
6445
6873
  {
@@ -6447,7 +6875,7 @@ const entityRecipes = [
6447
6875
  name: 'Container',
6448
6876
  description: 'Passive floating cargo storage in space. Towed by ships.',
6449
6877
  color: '#7B8D9E',
6450
- packedItemId: ITEM_CONTAINER_PACKED,
6878
+ packedItemId: ITEM_CONTAINER_T1_PACKED,
6451
6879
  recipe: [
6452
6880
  { itemId: ITEM_HULL_PLATES, quantity: 6 },
6453
6881
  { itemId: ITEM_CARGO_LINING, quantity: 2 },
@@ -6483,6 +6911,47 @@ const entityRecipes = [
6483
6911
  { type: MODULE_ANY },
6484
6912
  ],
6485
6913
  },
6914
+ {
6915
+ id: 'warehouse-t1',
6916
+ name: 'Warehouse T1',
6917
+ description: 'Massive stationary storage facility with a single loader module slot.',
6918
+ color: '#EAB308',
6919
+ packedItemId: ITEM_WAREHOUSE_T1_PACKED,
6920
+ recipe: [
6921
+ { itemId: ITEM_HULL_PLATES, quantity: 20 },
6922
+ { itemId: ITEM_CARGO_LINING, quantity: 10 },
6923
+ ],
6924
+ stats: [
6925
+ { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
6926
+ { key: 'density', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'density' },
6927
+ { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'ductility' },
6928
+ { key: 'purity', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'purity' },
6929
+ ],
6930
+ moduleSlots: [
6931
+ { type: MODULE_LOADER, label: 'Loader' },
6932
+ { type: MODULE_STORAGE, label: 'Storage' },
6933
+ { type: MODULE_STORAGE, label: 'Storage' },
6934
+ { type: MODULE_STORAGE, label: 'Storage' },
6935
+ { type: MODULE_STORAGE, label: 'Storage' },
6936
+ ],
6937
+ },
6938
+ {
6939
+ id: 'container-t2',
6940
+ name: 'Container T2',
6941
+ description: 'Advanced cargo container with improved capacity formulas.',
6942
+ color: '#9BADB8',
6943
+ packedItemId: ITEM_CONTAINER_T2_PACKED,
6944
+ recipe: [
6945
+ { itemId: ITEM_HULL_PLATES_T2, quantity: 6 },
6946
+ { itemId: ITEM_CARGO_LINING_T2, quantity: 2 },
6947
+ ],
6948
+ stats: [
6949
+ { key: 'strength', sourceComponentId: ITEM_HULL_PLATES_T2, sourceStatKey: 'strength' },
6950
+ { key: 'density', sourceComponentId: ITEM_HULL_PLATES_T2, sourceStatKey: 'density' },
6951
+ { key: 'ductility', sourceComponentId: ITEM_CARGO_LINING_T2, sourceStatKey: 'ductility' },
6952
+ { key: 'purity', sourceComponentId: ITEM_CARGO_LINING_T2, sourceStatKey: 'purity' },
6953
+ ],
6954
+ },
6486
6955
  ];
6487
6956
  const moduleRecipes = [
6488
6957
  {
@@ -6562,6 +7031,24 @@ const moduleRecipes = [
6562
7031
  { key: 'clarity', sourceComponentId: ITEM_TOOL_BIT, sourceStatKey: 'clarity' },
6563
7032
  ],
6564
7033
  },
7034
+ {
7035
+ id: 'storage-t1',
7036
+ name: 'Storage',
7037
+ description: 'Expands cargo capacity based on hull material quality',
7038
+ color: '#8B7355',
7039
+ itemId: ITEM_STORAGE_T1,
7040
+ moduleType: MODULE_STORAGE,
7041
+ recipe: [
7042
+ { itemId: ITEM_HULL_PLATES, quantity: 8 },
7043
+ { itemId: ITEM_CARGO_LINING, quantity: 4 },
7044
+ ],
7045
+ stats: [
7046
+ { key: 'strength', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'strength' },
7047
+ { key: 'ductility', sourceComponentId: ITEM_HULL_PLATES, sourceStatKey: 'ductility' },
7048
+ { key: 'purity', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'purity' },
7049
+ { key: 'density', sourceComponentId: ITEM_CARGO_LINING, sourceStatKey: 'density' },
7050
+ ],
7051
+ },
6565
7052
  ];
6566
7053
  function getModuleRecipe(id) {
6567
7054
  return moduleRecipes.find((r) => r.id === id);
@@ -6578,6 +7065,10 @@ function getEntityRecipe(id) {
6578
7065
  function getEntityRecipeByItemId(itemId) {
6579
7066
  return entityRecipes.find((r) => r.packedItemId === itemId);
6580
7067
  }
7068
+ function getEntitySlotLayout(packedItemId) {
7069
+ const recipe = getEntityRecipeByItemId(packedItemId);
7070
+ return recipe?.moduleSlots ?? [];
7071
+ }
6581
7072
  function getAllCraftableItems() {
6582
7073
  const items = [];
6583
7074
  for (const comp of components) {
@@ -6605,10 +7096,13 @@ function encodeStats(values) {
6605
7096
  }
6606
7097
  return seed;
6607
7098
  }
7099
+ function decodeStat(seed, index) {
7100
+ return Number((seed >> BigInt(index * 10)) & 0x3ffn);
7101
+ }
6608
7102
  function decodeStats(seed, count) {
6609
7103
  const stats = [];
6610
7104
  for (let i = 0; i < count; i++) {
6611
- stats.push(Number((seed >> BigInt(i * 10)) & 0x3ffn));
7105
+ stats.push(decodeStat(seed, i));
6612
7106
  }
6613
7107
  return stats;
6614
7108
  }
@@ -6689,6 +7183,55 @@ function decodeStackStats(itemId, seed) {
6689
7183
  const raw = deriveResourceStats(BigInt(seed.toString()));
6690
7184
  return { stat1: raw.stat1, stat2: raw.stat2, stat3: raw.stat3 };
6691
7185
  }
7186
+ const categoryItemMass = {
7187
+ metal: 30000,
7188
+ precious: 40000,
7189
+ gas: 15000,
7190
+ mineral: 22000,
7191
+ organic: 15000,
7192
+ };
7193
+ function computeInputMass(itemId, itemType) {
7194
+ if (itemType === 'component') {
7195
+ const comp = getComponentById(itemId);
7196
+ if (!comp)
7197
+ return 0;
7198
+ return comp.recipe.reduce((sum, input) => {
7199
+ const mass = input.category ? (categoryItemMass[input.category] ?? 0) : 0;
7200
+ return sum + mass * input.quantity;
7201
+ }, 0);
7202
+ }
7203
+ if (itemType === 'module') {
7204
+ const mod = getModuleRecipe(itemId);
7205
+ if (!mod)
7206
+ return 0;
7207
+ return mod.recipe.reduce((sum, input) => {
7208
+ const comp = input.itemId ? getComponentById(input.itemId) : undefined;
7209
+ return sum + (comp?.mass ?? 0) * input.quantity;
7210
+ }, 0);
7211
+ }
7212
+ if (itemType === 'entity') {
7213
+ const ent = getEntityRecipe(itemId);
7214
+ if (!ent)
7215
+ return 0;
7216
+ return ent.recipe.reduce((sum, input) => {
7217
+ const comp = input.itemId ? getComponentById(input.itemId) : undefined;
7218
+ return sum + (comp?.mass ?? 0) * input.quantity;
7219
+ }, 0);
7220
+ }
7221
+ return 0;
7222
+ }
7223
+ function blendCrossGroup(sources) {
7224
+ let weightedSum = 0;
7225
+ let totalWeight = 0;
7226
+ for (const src of sources) {
7227
+ weightedSum += src.value * src.weight;
7228
+ totalWeight += src.weight;
7229
+ }
7230
+ if (totalWeight === 0)
7231
+ return 1;
7232
+ const result = Math.floor(weightedSum / totalWeight);
7233
+ return Math.max(1, Math.min(999, result));
7234
+ }
6692
7235
  function blendCargoStacks(itemId, stacks) {
6693
7236
  const decoded = stacks.map((s) => ({
6694
7237
  quantity: s.quantity,
@@ -6846,22 +7389,506 @@ const moduleIcon = '⬢';
6846
7389
  const itemIcons = {
6847
7390
  10001: 'HP',
6848
7391
  10002: 'CL',
6849
- 10003: 'CT',
6850
- 10004: 'TC',
6851
- 10005: 'PC',
6852
- 10006: 'EN',
6853
- 10007: 'GN',
6854
- 10008: 'SH',
6855
- 10009: 'DS',
6856
- 10010: 'EP',
6857
- 10011: 'CA',
6858
- 10012: 'TB',
6859
- 10013: 'RC',
6860
- 10014: 'EX',
6861
- 10015: 'LD',
6862
- 10016: 'MF',
7392
+ 10003: 'TC',
7393
+ 10004: 'PC',
7394
+ 10005: 'DS',
7395
+ 10006: 'EP',
7396
+ 10007: 'CA',
7397
+ 10008: 'TB',
7398
+ 10009: 'RC',
7399
+ 10100: 'EN',
7400
+ 10101: 'GN',
7401
+ 10102: 'EX',
7402
+ 10103: 'LD',
7403
+ 10104: 'MF',
7404
+ 10105: 'ST',
7405
+ 10200: 'CT',
7406
+ 10201: 'SH',
7407
+ 10202: 'WH',
7408
+ 20001: 'HP',
7409
+ 20002: 'CL',
7410
+ 20200: 'CT',
6863
7411
  };
6864
7412
 
7413
+ const ITEM_TYPE_RESOURCE = 0;
7414
+ const ITEM_TYPE_COMPONENT = 1;
7415
+ const ITEM_TYPE_MODULE = 2;
7416
+ const ITEM_TYPE_ENTITY = 3;
7417
+ function itemTypeCode(id) {
7418
+ switch (itemCategory(id)) {
7419
+ case 'resource': return ITEM_TYPE_RESOURCE;
7420
+ case 'component': return ITEM_TYPE_COMPONENT;
7421
+ case 'module': return ITEM_TYPE_MODULE;
7422
+ case 'entity': return ITEM_TYPE_ENTITY;
7423
+ }
7424
+ }
7425
+ function itemTier(id) {
7426
+ if (id < 10000)
7427
+ return 0;
7428
+ return Math.floor(id / 10000);
7429
+ }
7430
+ function itemOffset(id) {
7431
+ return id % 10000;
7432
+ }
7433
+ function itemCategory(id) {
7434
+ if (id < 10000)
7435
+ return 'resource';
7436
+ const offset = itemOffset(id);
7437
+ if (offset >= 200)
7438
+ return 'entity';
7439
+ if (offset >= 100)
7440
+ return 'module';
7441
+ return 'component';
7442
+ }
7443
+ function isRelatedItem(a, b) {
7444
+ if (a < 10000 || b < 10000)
7445
+ return false;
7446
+ return itemOffset(a) === itemOffset(b);
7447
+ }
7448
+ function isCraftedItem(id) {
7449
+ return id >= 10000;
7450
+ }
7451
+
7452
+ const categories = [
7453
+ {
7454
+ id: 'metal',
7455
+ name: 'Metals',
7456
+ label: 'Metal',
7457
+ description: 'Structural, strong, heavy — hulls, frames, load-bearing components',
7458
+ color: categoryColors.metal,
7459
+ },
7460
+ {
7461
+ id: 'precious',
7462
+ name: 'Precious Metals',
7463
+ label: 'Precious',
7464
+ description: 'Conductive, corrosion-resistant — electronics, energy systems, precision components',
7465
+ color: categoryColors.precious,
7466
+ },
7467
+ {
7468
+ id: 'gas',
7469
+ name: 'Gases',
7470
+ label: 'Gas',
7471
+ description: 'Energy, fuel, volatile/reactive — propulsion, thermal processing, chemical reactions',
7472
+ color: categoryColors.gas,
7473
+ },
7474
+ {
7475
+ id: 'mineral',
7476
+ name: 'Minerals',
7477
+ label: 'Mineral',
7478
+ description: 'Crystalline, hard, precise — sensors, optics, energy storage, cutting surfaces',
7479
+ color: categoryColors.mineral,
7480
+ },
7481
+ {
7482
+ id: 'organic',
7483
+ name: 'Organics',
7484
+ label: 'Organic',
7485
+ description: 'Adaptive, biological, polymer — insulation, composites, bio-processes',
7486
+ color: categoryColors.organic,
7487
+ },
7488
+ ];
7489
+ function getCategoryInfo(id) {
7490
+ if (id === undefined)
7491
+ return categories;
7492
+ return categories.find((c) => c.id === id);
7493
+ }
7494
+
7495
+ const planetSubtypes = [
7496
+ {
7497
+ id: 0,
7498
+ label: 'Gas Giant',
7499
+ description: 'Massive planets with thick atmospheres rich in gases',
7500
+ paletteType: 'gasGiant',
7501
+ },
7502
+ {
7503
+ id: 1,
7504
+ label: 'Rocky',
7505
+ description: 'Dense, mineral-rich worlds with metallic cores',
7506
+ paletteType: 'rocky',
7507
+ },
7508
+ {
7509
+ id: 2,
7510
+ label: 'Terrestrial',
7511
+ description: 'Earth-like planets with varied terrain and life potential',
7512
+ paletteType: 'terrestrial',
7513
+ },
7514
+ {
7515
+ id: 3,
7516
+ label: 'Icy',
7517
+ description: 'Frozen worlds with subsurface resources',
7518
+ paletteType: 'ice',
7519
+ },
7520
+ {
7521
+ id: 4,
7522
+ label: 'Ocean',
7523
+ description: 'Water worlds with dissolved minerals and organics',
7524
+ paletteType: 'ocean',
7525
+ },
7526
+ {
7527
+ id: 5,
7528
+ label: 'Industrial',
7529
+ description: 'Heavily processed worlds rich in refined materials',
7530
+ paletteType: 'industrial',
7531
+ },
7532
+ ];
7533
+ function getPlanetSubtypes() {
7534
+ return planetSubtypes;
7535
+ }
7536
+ function getPlanetSubtype(id) {
7537
+ return planetSubtypes.find((s) => s.id === id);
7538
+ }
7539
+
7540
+ const capabilityNames = [
7541
+ 'Hull',
7542
+ 'Storage',
7543
+ 'Movement',
7544
+ 'Energy',
7545
+ 'Loader',
7546
+ 'Extraction',
7547
+ 'Warp',
7548
+ 'Manufacturing',
7549
+ 'Launch',
7550
+ ];
7551
+ const capabilityAttributes = [
7552
+ { capability: 'Hull', attribute: 'mass', description: 'Total mass of the hull' },
7553
+ { capability: 'Storage', attribute: 'capacity', description: 'Maximum mass that can be stored' },
7554
+ { capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
7555
+ { capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
7556
+ { capability: 'Energy', attribute: 'capacity', description: 'Maximum energy storage' },
7557
+ { capability: 'Energy', attribute: 'recharge', description: 'Energy regeneration rate' },
7558
+ { capability: 'Loader', attribute: 'mass', description: 'Weight of the loader unit itself' },
7559
+ { capability: 'Loader', attribute: 'thrust', description: 'Loading speed/force' },
7560
+ { capability: 'Extraction', attribute: 'rate', description: 'Mass extracted per second' },
7561
+ { capability: 'Extraction', attribute: 'drain', description: 'Energy consumed per extraction' },
7562
+ { capability: 'Extraction', attribute: 'depth', description: 'Maximum extraction depth' },
7563
+ { capability: 'Extraction', attribute: 'drill', description: 'Drilling speed/penetration' },
7564
+ { capability: 'Warp', attribute: 'range', description: 'Maximum warp distance' },
7565
+ { capability: 'Manufacturing', attribute: 'speed', description: 'Crafting time per item' },
7566
+ {
7567
+ capability: 'Manufacturing',
7568
+ attribute: 'drain',
7569
+ description: 'Energy consumed per second while crafting',
7570
+ },
7571
+ { capability: 'Manufacturing', attribute: 'quality', description: 'Modifier on output quality' },
7572
+ { capability: 'Launch', attribute: 'range', description: 'Maximum launch distance' },
7573
+ { capability: 'Launch', attribute: 'capacity', description: 'Maximum mass per launch' },
7574
+ { capability: 'Launch', attribute: 'drain', description: 'Energy consumed per launch' },
7575
+ ];
7576
+ const statMappings = [
7577
+ {
7578
+ stat: 'Strength',
7579
+ capability: 'Extraction',
7580
+ attribute: 'rate',
7581
+ rationale: 'Raw mechanical force drives faster extraction',
7582
+ },
7583
+ {
7584
+ stat: 'Strength',
7585
+ capability: 'Storage',
7586
+ attribute: 'capacity',
7587
+ rationale: 'Stronger walls hold more capacity per mass',
7588
+ },
7589
+ {
7590
+ stat: 'Strength',
7591
+ capability: 'Launch',
7592
+ attribute: 'capacity',
7593
+ rationale: 'Stronger housing handles larger launch loads',
7594
+ },
7595
+ {
7596
+ stat: 'Tolerance',
7597
+ capability: 'Movement',
7598
+ attribute: 'thrust',
7599
+ rationale: 'Engine components that tolerate more can push harder',
7600
+ },
7601
+ {
7602
+ stat: 'Tolerance',
7603
+ capability: 'Energy',
7604
+ attribute: 'recharge',
7605
+ rationale: 'Generator housing withstands stress for faster recharge',
7606
+ },
7607
+ {
7608
+ stat: 'Tolerance',
7609
+ capability: 'Extraction',
7610
+ attribute: 'depth',
7611
+ rationale: 'Housing withstands pressure/heat at extreme depths',
7612
+ },
7613
+ {
7614
+ stat: 'Tolerance',
7615
+ capability: 'Warp',
7616
+ attribute: 'range',
7617
+ rationale: 'Warp drive housing withstands extreme forces',
7618
+ },
7619
+ {
7620
+ stat: 'Density',
7621
+ capability: 'Hull',
7622
+ attribute: 'mass',
7623
+ rationale: 'Lighter metal = lighter hull',
7624
+ },
7625
+ {
7626
+ stat: 'Density',
7627
+ capability: 'Loader',
7628
+ attribute: 'mass',
7629
+ rationale: 'Lighter metal = lighter loader units',
7630
+ },
7631
+ {
7632
+ stat: 'Density',
7633
+ capability: 'Movement',
7634
+ attribute: 'drain',
7635
+ rationale: 'Lighter components require less energy to move',
7636
+ },
7637
+ {
7638
+ stat: 'Conductivity',
7639
+ capability: 'Movement',
7640
+ attribute: 'drain',
7641
+ rationale: 'Efficient energy transfer reduces movement energy cost',
7642
+ },
7643
+ {
7644
+ stat: 'Conductivity',
7645
+ capability: 'Extraction',
7646
+ attribute: 'drain',
7647
+ rationale: 'Efficient energy transfer reduces extraction energy cost',
7648
+ },
7649
+ {
7650
+ stat: 'Conductivity',
7651
+ capability: 'Manufacturing',
7652
+ attribute: 'drain',
7653
+ rationale: 'Efficient energy transfer reduces manufacturing energy cost',
7654
+ },
7655
+ {
7656
+ stat: 'Conductivity',
7657
+ capability: 'Energy',
7658
+ attribute: 'recharge',
7659
+ rationale: 'Better conductivity speeds energy flow during recharge',
7660
+ },
7661
+ {
7662
+ stat: 'Ductility',
7663
+ capability: 'Manufacturing',
7664
+ attribute: 'quality',
7665
+ rationale: 'Precise shaping enables tighter manufacturing tolerances',
7666
+ },
7667
+ {
7668
+ stat: 'Ductility',
7669
+ capability: 'Extraction',
7670
+ attribute: 'rate',
7671
+ rationale: 'Precisely shaped drill components extract faster',
7672
+ },
7673
+ {
7674
+ stat: 'Ductility',
7675
+ capability: 'Storage',
7676
+ attribute: 'capacity',
7677
+ rationale: 'Precision-formed container walls maximize volume',
7678
+ },
7679
+ {
7680
+ stat: 'Ductility',
7681
+ capability: 'Loader',
7682
+ attribute: 'mass',
7683
+ rationale: 'Precision-formed precious metal reduces loader unit mass',
7684
+ },
7685
+ {
7686
+ stat: 'Reflectivity',
7687
+ capability: 'Extraction',
7688
+ attribute: 'depth',
7689
+ rationale: 'Reflective heat shielding protects equipment at depth',
7690
+ },
7691
+ {
7692
+ stat: 'Reflectivity',
7693
+ capability: 'Launch',
7694
+ attribute: 'range',
7695
+ rationale: 'Reflective surfaces focus electromagnetic launch energy',
7696
+ },
7697
+ {
7698
+ stat: 'Volatility',
7699
+ capability: 'Extraction',
7700
+ attribute: 'rate',
7701
+ rationale: 'Energy release powers faster extraction',
7702
+ },
7703
+ {
7704
+ stat: 'Volatility',
7705
+ capability: 'Movement',
7706
+ attribute: 'thrust',
7707
+ rationale: 'Energy release drives propulsion force',
7708
+ },
7709
+ {
7710
+ stat: 'Volatility',
7711
+ capability: 'Loader',
7712
+ attribute: 'thrust',
7713
+ rationale: 'Energy release powers loader motors',
7714
+ },
7715
+ {
7716
+ stat: 'Volatility',
7717
+ capability: 'Launch',
7718
+ attribute: 'capacity',
7719
+ rationale: 'Energy release enables launching heavier payloads',
7720
+ },
7721
+ {
7722
+ stat: 'Reactivity',
7723
+ capability: 'Manufacturing',
7724
+ attribute: 'speed',
7725
+ rationale: 'Reactive gases accelerate chemical/thermal processing',
7726
+ },
7727
+ {
7728
+ stat: 'Reactivity',
7729
+ capability: 'Extraction',
7730
+ attribute: 'drill',
7731
+ rationale: 'Reactive gases manage heat/friction during drilling',
7732
+ },
7733
+ {
7734
+ stat: 'Reactivity',
7735
+ capability: 'Launch',
7736
+ attribute: 'drain',
7737
+ rationale: 'Reactive gas medium reduces electromagnetic resistance',
7738
+ },
7739
+ {
7740
+ stat: 'Thermal',
7741
+ capability: 'Manufacturing',
7742
+ attribute: 'quality',
7743
+ rationale: 'Precise thermal control during fabrication',
7744
+ },
7745
+ {
7746
+ stat: 'Thermal',
7747
+ capability: 'Extraction',
7748
+ attribute: 'drain',
7749
+ rationale: 'Thermal management reduces energy waste during extraction',
7750
+ },
7751
+ {
7752
+ stat: 'Thermal',
7753
+ capability: 'Energy',
7754
+ attribute: 'capacity',
7755
+ rationale: 'Thermal management enables denser energy storage',
7756
+ },
7757
+ {
7758
+ stat: 'Resonance',
7759
+ capability: 'Energy',
7760
+ attribute: 'capacity',
7761
+ rationale: 'Resonating crystals store energy in fields',
7762
+ },
7763
+ {
7764
+ stat: 'Resonance',
7765
+ capability: 'Warp',
7766
+ attribute: 'range',
7767
+ rationale: 'Resonant crystals amplify warp field projection',
7768
+ },
7769
+ {
7770
+ stat: 'Resonance',
7771
+ capability: 'Launch',
7772
+ attribute: 'range',
7773
+ rationale: 'Resonant crystals focus electromagnetic launch field',
7774
+ },
7775
+ {
7776
+ stat: 'Resonance',
7777
+ capability: 'Launch',
7778
+ attribute: 'capacity',
7779
+ rationale: 'Stronger resonant field launches heavier payloads',
7780
+ },
7781
+ {
7782
+ stat: 'Hardness',
7783
+ capability: 'Manufacturing',
7784
+ attribute: 'speed',
7785
+ rationale: 'Hard tooling surfaces cut and shape materials faster',
7786
+ },
7787
+ {
7788
+ stat: 'Hardness',
7789
+ capability: 'Launch',
7790
+ attribute: 'drain',
7791
+ rationale: 'Hard rail surfaces reduce friction, less energy wasted',
7792
+ },
7793
+ {
7794
+ stat: 'Clarity',
7795
+ capability: 'Energy',
7796
+ attribute: 'recharge',
7797
+ rationale: 'Flawless crystals enable smoother energy flow during recharge',
7798
+ },
7799
+ {
7800
+ stat: 'Clarity',
7801
+ capability: 'Manufacturing',
7802
+ attribute: 'quality',
7803
+ rationale: 'Precision optics for calibration during fabrication',
7804
+ },
7805
+ {
7806
+ stat: 'Clarity',
7807
+ capability: 'Manufacturing',
7808
+ attribute: 'drain',
7809
+ rationale: 'Precision computing optimizes energy routing in factory',
7810
+ },
7811
+ {
7812
+ stat: 'Plasticity',
7813
+ capability: 'Manufacturing',
7814
+ attribute: 'speed',
7815
+ rationale: 'Easily reshaped materials speed up processing',
7816
+ },
7817
+ {
7818
+ stat: 'Plasticity',
7819
+ capability: 'Movement',
7820
+ attribute: 'thrust',
7821
+ rationale: 'Flexible polymer seals reduce friction in propulsion',
7822
+ },
7823
+ {
7824
+ stat: 'Plasticity',
7825
+ capability: 'Loader',
7826
+ attribute: 'thrust',
7827
+ rationale: 'Flexible joints improve loader force transfer',
7828
+ },
7829
+ {
7830
+ stat: 'Insulation',
7831
+ capability: 'Movement',
7832
+ attribute: 'drain',
7833
+ rationale: 'Better insulation reduces energy loss during movement',
7834
+ },
7835
+ {
7836
+ stat: 'Insulation',
7837
+ capability: 'Extraction',
7838
+ attribute: 'drain',
7839
+ rationale: 'Better insulation reduces energy loss during extraction',
7840
+ },
7841
+ {
7842
+ stat: 'Insulation',
7843
+ capability: 'Manufacturing',
7844
+ attribute: 'drain',
7845
+ rationale: 'Better insulation reduces energy loss during manufacturing',
7846
+ },
7847
+ {
7848
+ stat: 'Insulation',
7849
+ capability: 'Launch',
7850
+ attribute: 'drain',
7851
+ rationale: 'Better insulation reduces energy loss during launch',
7852
+ },
7853
+ {
7854
+ stat: 'Purity',
7855
+ capability: 'Storage',
7856
+ attribute: 'capacity',
7857
+ rationale: 'Purer composites make better containers',
7858
+ },
7859
+ {
7860
+ stat: 'Purity',
7861
+ capability: 'Extraction',
7862
+ attribute: 'drill',
7863
+ rationale: 'Purer bio-lubricants reduce friction during drilling',
7864
+ },
7865
+ {
7866
+ stat: 'Purity',
7867
+ capability: 'Energy',
7868
+ attribute: 'capacity',
7869
+ rationale: 'Purer organic electrolytes store more charge',
7870
+ },
7871
+ ];
7872
+ const invertedAttributes = new Set(['drain', 'mass']);
7873
+ function isInvertedAttribute(attribute) {
7874
+ return invertedAttributes.has(attribute);
7875
+ }
7876
+ function getCapabilityAttributes(capability) {
7877
+ if (capability) {
7878
+ return capabilityAttributes.filter((a) => a.capability === capability);
7879
+ }
7880
+ return capabilityAttributes;
7881
+ }
7882
+ function getStatMappings() {
7883
+ return statMappings;
7884
+ }
7885
+ function getStatMappingsForStat(stat) {
7886
+ return statMappings.filter((m) => m.stat === stat);
7887
+ }
7888
+ function getStatMappingsForCapability(capability) {
7889
+ return statMappings.filter((m) => m.capability === capability);
7890
+ }
7891
+
6865
7892
  function computeShipHullCapabilities(stats) {
6866
7893
  const density = stats.density ?? 500;
6867
7894
  const strength = stats.strength ?? 500;
@@ -6878,7 +7905,7 @@ function computeEngineCapabilities(stats) {
6878
7905
  const thm = stats.thermal ?? 500;
6879
7906
  return {
6880
7907
  thrust: 400 + Math.floor(vol * 3 / 4),
6881
- drain: Math.max(16, 30 - Math.floor(thm / 70)),
7908
+ drain: Math.max(30, 50 - Math.floor(thm / 70)),
6882
7909
  };
6883
7910
  }
6884
7911
  function computeGeneratorCapabilities(stats) {
@@ -6918,6 +7945,25 @@ function computeManufacturingCapabilities(stats) {
6918
7945
  drain: Math.max(5, 30 - Math.floor(clr / 33)),
6919
7946
  };
6920
7947
  }
7948
+ function computeStorageCapabilities(stats, baseCapacity) {
7949
+ const strength = stats.strength ?? 500;
7950
+ const ductility = stats.ductility ?? 500;
7951
+ const purity = stats.purity ?? 500;
7952
+ const statSum = strength + ductility + purity;
7953
+ const capacityBonus = Math.floor(baseCapacity * (10 + Math.floor(statSum * 10 / 2997)) / 100);
7954
+ return { capacityBonus };
7955
+ }
7956
+ function computeWarehouseHullCapabilities(stats) {
7957
+ const density = stats.density ?? 500;
7958
+ const strength = stats.strength ?? 500;
7959
+ const ductility = stats.ductility ?? 500;
7960
+ const purity = stats.purity ?? 500;
7961
+ const hullmass = 25000 + 75 * density;
7962
+ const statSum = strength + ductility + purity;
7963
+ const exponent = statSum / 2997.0;
7964
+ const capacity = Math.floor(20000000 * Math.pow(10, exponent));
7965
+ return { hullmass, capacity };
7966
+ }
6921
7967
 
6922
7968
  function toNum(v) {
6923
7969
  return Number(UInt16.from(v).value.toString());
@@ -7029,6 +8075,16 @@ function computeCapabilityGroup(moduleType, stats) {
7029
8075
  { label: 'Drain', value: caps.drain },
7030
8076
  ] };
7031
8077
  }
8078
+ case MODULE_STORAGE: {
8079
+ const str = stats.strength ?? 500;
8080
+ const duc = stats.ductility ?? 500;
8081
+ const pur = stats.purity ?? 500;
8082
+ const statSum = str + duc + pur;
8083
+ const pct = 10 + Math.floor(statSum * 10 / 2997);
8084
+ return { capability: 'Storage', attributes: [
8085
+ { label: 'Capacity Bonus', value: pct },
8086
+ ] };
8087
+ }
7032
8088
  default:
7033
8089
  return undefined;
7034
8090
  }
@@ -7117,5 +8173,211 @@ function resolveItem(itemId, seed, modules) {
7117
8173
  return resolveResource(id, seed);
7118
8174
  }
7119
8175
 
7120
- export { ActionsManager, BASE_ORBITAL_MASS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_Z, Container, Coordinates, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityInventory, EntityType, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GameState, INITIAL_CONTAINER_CAPACITY, INITIAL_CONTAINER_HULLMASS, INITIAL_WAREHOUSE_CAPACITY, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_CARGO_ARM, ITEM_CARGO_LINING, ITEM_CONTAINER_PACKED, ITEM_DOES_NOT_EXIST, ITEM_DRILL_SHAFT, ITEM_ENGINE_T1, ITEM_EXTRACTION_PROBE, ITEM_EXTRACTOR_T1, ITEM_GENERATOR_T1, ITEM_HULL_PLATES, ITEM_LOADER_T1, ITEM_MANUFACTURING_T1, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_POWER_CELL, ITEM_REACTION_CHAMBER, ITEM_SHIP_T1_PACKED, ITEM_THRUSTER_CORE, ITEM_TOOL_BIT, InventoryAccessor, Item, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, MODULE_ANY, MODULE_CRAFTER, MODULE_ENGINE, MODULE_EXTRACTOR, MODULE_GENERATOR, MODULE_LAUNCHER, MODULE_LOADER, MODULE_WARP, NO_SCHEDULE, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PRECISION, platform as PlatformContract, Player, PlayersManager, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CARGO_NOT_LOADED, SHIP_CARGO_NOT_OWNED, SHIP_INVALID_CARGO, SHIP_INVALID_DESTINATION, SHIP_INVALID_TRAVEL_DURATION, SHIP_NOT_ARRIVED, SHIP_NOT_ENOUGH_ENERGY, SHIP_NOT_ENOUGH_ENERGY_CAPACITY, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, ScheduleAccessor, server as ServerContract, Ship, Shipload, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND, WAREHOUSE_Z, Warehouse, availableCapacity$1 as availableCapacity, availableCapacityFromMass, blendCargoStacks, blendComponentStacks, blendStacks, calcCargoMass, calcEnergyUsage, calcLoadDuration, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_extraction_duration, calc_extraction_energy, calc_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, capsHasCrafter, capsHasExtractor, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoUtils, categoryColors, categoryIcons, componentIcon, components, computeComponentStats, computeContainerCapabilities, computeEngineCapabilities, computeEntityStats, computeExtractorCapabilities, computeGeneratorCapabilities, computeLoaderCapabilities, computeManufacturingCapabilities, computeShipHullCapabilities, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeCraftedItemStats, decodeStats, Shipload as default, depthScaleFactor, deriveLocation, deriveLocationEpoch, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStratum, distanceBetweenCoordinates, distanceBetweenPoints, encodeStats, energyPercent, entityRecipes, estimateDealTravelTime, estimateTravelTime, findNearbyPlanets, getAllCraftableItems, getComponentById, getComponentsForCategory, getComponentsForStat, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEligibleResources, getEntityRecipe, getEntityRecipeByItemId, getEpochInfo, getFlightOrigin, getItem, getItems, getLocationCandidates, getLocationType, getModuleCapabilityType, getModuleRecipe, getModuleRecipeByItemId, getPositionAt, getResourceTier, getResourceWeight, getStatDefinitions, getStatName, getSystemName, hasEnergy, hasEnergyForDistance$1 as hasEnergyForDistance, hasExtractor, hasLoaders, hasMass, hasSchedule, hasSpace$1 as hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, isExtractableLocation, isFull$1 as isFull, isFullFromMass, isModuleItem, itemIcons, itemIds, lerp, makeContainer, makeShip, makeWarehouse, maxTravelDistance, moduleAccepts, moduleIcon, moduleRecipes, needsRecharge, projectEntity, projectEntityAt, resolveItem, resolveStats, rotation, schedule, tierColors, toLocation };
8176
+ function readCommonBase(data) {
8177
+ return {
8178
+ quantity: Number(data.quantity),
8179
+ seed: String(data.seed),
8180
+ origin_x: String(data.origin_x),
8181
+ origin_y: String(data.origin_y),
8182
+ };
8183
+ }
8184
+ function deserializeScalar(data, itemId) {
8185
+ const base = readCommonBase(data);
8186
+ return { item_id: itemId, quantity: base.quantity, seed: base.seed };
8187
+ }
8188
+ const deserializeResource = deserializeScalar;
8189
+ const deserializeComponent = deserializeScalar;
8190
+ const deserializeModule = deserializeScalar;
8191
+ function deserializeEntity(data, itemId) {
8192
+ const base = readCommonBase(data);
8193
+ const moduleItems = (data.module_items ?? []).map((v) => Number(v));
8194
+ const moduleSeeds = (data.module_seeds ?? []).map((v) => String(v));
8195
+ const layout = getEntitySlotLayout(itemId);
8196
+ const modules = layout.map((slot, i) => ({
8197
+ type: slot.type,
8198
+ installed: moduleItems[i] && moduleItems[i] !== 0
8199
+ ? { item_id: moduleItems[i], seed: moduleSeeds[i] }
8200
+ : undefined,
8201
+ }));
8202
+ return { item_id: itemId, quantity: base.quantity, seed: base.seed, modules };
8203
+ }
8204
+ function deserializeAsset(data, itemId) {
8205
+ const type = itemTypeCode(itemId);
8206
+ switch (type) {
8207
+ case ITEM_TYPE_RESOURCE:
8208
+ case ITEM_TYPE_COMPONENT:
8209
+ case ITEM_TYPE_MODULE:
8210
+ return deserializeScalar(data, itemId);
8211
+ case ITEM_TYPE_ENTITY:
8212
+ return deserializeEntity(data, itemId);
8213
+ default:
8214
+ throw new Error(`unknown item type ${type} for item ${itemId}`);
8215
+ }
8216
+ }
8217
+
8218
+ function idiv(a, b) {
8219
+ return Math.floor(a / b);
8220
+ }
8221
+ function computeBaseHullmass(seed) {
8222
+ const density = decodeStat(seed, 1);
8223
+ return 25000 + 75 * density;
8224
+ }
8225
+ function computeBaseCapacityShip(seed) {
8226
+ const s = decodeStat(seed, 0) + decodeStat(seed, 2) + decodeStat(seed, 3);
8227
+ return Math.floor(1000000 * Math.pow(10, s / 2997));
8228
+ }
8229
+ function computeBaseCapacityWarehouse(seed) {
8230
+ const s = decodeStat(seed, 0) + decodeStat(seed, 2) + decodeStat(seed, 3);
8231
+ return Math.floor(20000000 * Math.pow(10, s / 2997));
8232
+ }
8233
+ const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
8234
+ const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
8235
+ const computeGeneratorCap = (res) => 300 + idiv(res, 6);
8236
+ const computeGeneratorRech = (clr) => 5 + idiv(clr * 15, 1000);
8237
+ const computeExtractorRate = (str) => 200 + str;
8238
+ const computeExtractorDrain = (con) => Math.max(10, 50 - idiv(con, 20));
8239
+ const computeExtractorDepth = (tol) => 200 + idiv(tol * 3, 2);
8240
+ const computeExtractorDrill = (ref) => 100 + idiv(ref * 4, 5);
8241
+ const computeLoaderMass = (duc) => Math.max(200, 2000 - duc * 2);
8242
+ const computeLoaderThrust = (pla) => 1 + idiv(pla, 500);
8243
+ const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
8244
+ const computeCrafterDrain = (clr) => Math.max(5, 30 - idiv(clr, 33));
8245
+ function entityDisplayName(itemId) {
8246
+ switch (itemId) {
8247
+ case ITEM_SHIP_T1_PACKED:
8248
+ return 'Ship T1';
8249
+ case ITEM_WAREHOUSE_T1_PACKED:
8250
+ return 'Warehouse T1';
8251
+ case ITEM_CONTAINER_T1_PACKED:
8252
+ return 'Container T1';
8253
+ case ITEM_CONTAINER_T2_PACKED:
8254
+ return 'Container T2';
8255
+ default:
8256
+ return 'Entity';
8257
+ }
8258
+ }
8259
+ function moduleDisplayName(itemId) {
8260
+ switch (itemId) {
8261
+ case ITEM_ENGINE_T1:
8262
+ return 'Engine T1';
8263
+ case ITEM_GENERATOR_T1:
8264
+ return 'Generator T1';
8265
+ case ITEM_EXTRACTOR_T1:
8266
+ return 'Extractor T1';
8267
+ case ITEM_LOADER_T1:
8268
+ return 'Loader T1';
8269
+ case ITEM_MANUFACTURING_T1:
8270
+ return 'Manufacturing T1';
8271
+ case ITEM_STORAGE_T1:
8272
+ return 'Storage T1';
8273
+ default:
8274
+ return 'Module';
8275
+ }
8276
+ }
8277
+ function formatModuleLine(slot, itemId, seed) {
8278
+ let out = `Slot ${slot} - `;
8279
+ if (itemId === 0) {
8280
+ out += '(empty)';
8281
+ return out;
8282
+ }
8283
+ out += moduleDisplayName(itemId);
8284
+ const subtype = getModuleCapabilityType(itemId);
8285
+ switch (subtype) {
8286
+ case MODULE_ENGINE: {
8287
+ const vol = decodeStat(seed, 0);
8288
+ const thm = decodeStat(seed, 1);
8289
+ out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
8290
+ break;
8291
+ }
8292
+ case MODULE_GENERATOR: {
8293
+ const res = decodeStat(seed, 0);
8294
+ const clr = decodeStat(seed, 1);
8295
+ out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(clr)}`;
8296
+ break;
8297
+ }
8298
+ case MODULE_EXTRACTOR: {
8299
+ const str = decodeStat(seed, 0);
8300
+ const tol = decodeStat(seed, 1);
8301
+ const con = decodeStat(seed, 3);
8302
+ const ref = decodeStat(seed, 4);
8303
+ out += ` Rate ${computeExtractorRate(str)} Depth ${computeExtractorDepth(tol)} Drill ${computeExtractorDrill(ref)} Drain ${computeExtractorDrain(con)}`;
8304
+ break;
8305
+ }
8306
+ case MODULE_LOADER: {
8307
+ const duc = decodeStat(seed, 0);
8308
+ const pla = decodeStat(seed, 1);
8309
+ out += ` Mass ${computeLoaderMass(duc)} Thrust ${computeLoaderThrust(pla)}`;
8310
+ break;
8311
+ }
8312
+ case MODULE_CRAFTER: {
8313
+ const rea = decodeStat(seed, 0);
8314
+ const clr = decodeStat(seed, 1);
8315
+ out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(clr)}`;
8316
+ break;
8317
+ }
8318
+ case MODULE_STORAGE: {
8319
+ const str = decodeStat(seed, 0);
8320
+ const duc = decodeStat(seed, 1);
8321
+ const pur = decodeStat(seed, 2);
8322
+ const sum = str + duc + pur;
8323
+ const pct = 10 + idiv(sum * 10, 2997);
8324
+ out += ` +${pct}% capacity`;
8325
+ break;
8326
+ }
8327
+ }
8328
+ return out;
8329
+ }
8330
+ function buildEntityDescription(itemId, hullSeed, moduleItems, moduleSeeds) {
8331
+ const hullMass = computeBaseHullmass(hullSeed);
8332
+ let baseCapacity = 0;
8333
+ if (itemId === ITEM_SHIP_T1_PACKED) {
8334
+ baseCapacity = computeBaseCapacityShip(hullSeed);
8335
+ }
8336
+ else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
8337
+ baseCapacity = computeBaseCapacityWarehouse(hullSeed);
8338
+ }
8339
+ let out = entityDisplayName(itemId);
8340
+ out += ` - Hull ${hullMass} mass`;
8341
+ if (baseCapacity > 0) {
8342
+ out += ` * ${baseCapacity} capacity`;
8343
+ }
8344
+ out += '\n\n';
8345
+ for (let i = 0; i < moduleItems.length; i++) {
8346
+ out += formatModuleLine(i, moduleItems[i], moduleSeeds[i] ?? 0n);
8347
+ out += '\n';
8348
+ }
8349
+ return out;
8350
+ }
8351
+
8352
+ var index = /*#__PURE__*/Object.freeze({
8353
+ __proto__: null,
8354
+ readCommonBase: readCommonBase,
8355
+ deserializeScalar: deserializeScalar,
8356
+ deserializeResource: deserializeResource,
8357
+ deserializeComponent: deserializeComponent,
8358
+ deserializeModule: deserializeModule,
8359
+ deserializeEntity: deserializeEntity,
8360
+ deserializeAsset: deserializeAsset,
8361
+ computeBaseHullmass: computeBaseHullmass,
8362
+ computeBaseCapacityShip: computeBaseCapacityShip,
8363
+ computeBaseCapacityWarehouse: computeBaseCapacityWarehouse,
8364
+ computeEngineThrust: computeEngineThrust,
8365
+ computeEngineDrain: computeEngineDrain,
8366
+ computeGeneratorCap: computeGeneratorCap,
8367
+ computeGeneratorRech: computeGeneratorRech,
8368
+ computeExtractorRate: computeExtractorRate,
8369
+ computeExtractorDrain: computeExtractorDrain,
8370
+ computeExtractorDepth: computeExtractorDepth,
8371
+ computeExtractorDrill: computeExtractorDrill,
8372
+ computeLoaderMass: computeLoaderMass,
8373
+ computeLoaderThrust: computeLoaderThrust,
8374
+ computeCrafterSpeed: computeCrafterSpeed,
8375
+ computeCrafterDrain: computeCrafterDrain,
8376
+ entityDisplayName: entityDisplayName,
8377
+ moduleDisplayName: moduleDisplayName,
8378
+ formatModuleLine: formatModuleLine,
8379
+ buildEntityDescription: buildEntityDescription
8380
+ });
8381
+
8382
+ export { ActionsManager, BASE_ORBITAL_MASS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_Z, Container, Coordinates, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityInventory, EntityType, EpochsManager, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GameState, INITIAL_CONTAINER_CAPACITY, INITIAL_CONTAINER_HULLMASS, INITIAL_WAREHOUSE_CAPACITY, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_CARGO_ARM, ITEM_CARGO_LINING, ITEM_CARGO_LINING_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_DOES_NOT_EXIST, ITEM_DRILL_SHAFT, ITEM_ENGINE_T1, ITEM_EXTRACTION_PROBE, ITEM_EXTRACTOR_T1, ITEM_GENERATOR_T1, ITEM_HULL_PLATES, ITEM_HULL_PLATES_T2, ITEM_LOADER_T1, ITEM_MANUFACTURING_T1, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_POWER_CELL, ITEM_REACTION_CHAMBER, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_THRUSTER_CORE, ITEM_TOOL_BIT, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, InventoryAccessor, Item, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, MODULE_ANY, MODULE_CRAFTER, MODULE_ENGINE, MODULE_EXTRACTOR, MODULE_GENERATOR, MODULE_LAUNCHER, MODULE_LOADER, MODULE_STORAGE, MODULE_WARP, index as NFT, NO_SCHEDULE, PLANET_SUBTYPE_GAS_GIANT, PLANET_SUBTYPE_ICY, PLANET_SUBTYPE_INDUSTRIAL, PLANET_SUBTYPE_OCEAN, PLANET_SUBTYPE_ROCKY, PLANET_SUBTYPE_TERRESTRIAL, PLAYER_ALREADY_JOINED, PLAYER_NOT_FOUND, PRECISION, platform as PlatformContract, Player, PlayersManager, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CARGO_NOT_LOADED, SHIP_CARGO_NOT_OWNED, SHIP_INVALID_CARGO, SHIP_INVALID_DESTINATION, SHIP_INVALID_TRAVEL_DURATION, SHIP_NOT_ARRIVED, SHIP_NOT_ENOUGH_ENERGY, SHIP_NOT_ENOUGH_ENERGY_CAPACITY, SHIP_NOT_FOUND, SHIP_NOT_IDLE, SHIP_NOT_OWNED, SHIP_NO_COMPLETED_TASKS, SHIP_NO_TASKS_TO_CANCEL, ScheduleAccessor, server as ServerContract, Ship, Shipload, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND, WAREHOUSE_Z, Warehouse, availableCapacity$1 as availableCapacity, availableCapacityFromMass, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildEntityDescription, calcCargoMass, calcEnergyUsage, calcLoadDuration, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_extraction_duration, calc_extraction_energy, calc_flighttime, calc_loader_acceleration, calc_loader_flighttime, calc_orbital_altitude, calc_rechargetime, calc_ship_acceleration, calc_ship_flighttime, calc_ship_mass, calc_ship_rechargetime, calc_transfer_duration, calculateFlightTime, calculateLoadTimeBreakdown, calculateRefuelingTime, calculateTransferTime, canMove, capabilityAttributes, capabilityNames, capsHasCrafter, capsHasExtractor, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoUtils, categoryColors, categoryIcons, categoryItemMass, componentIcon, components, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass, computeComponentStats, computeContainerCapabilities, computeContainerT2Capabilities, computeCrafterDrain, computeCrafterSpeed, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityStats, computeExtractorCapabilities, computeExtractorDepth, computeExtractorDrain, computeExtractorDrill, computeExtractorRate, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeInputMass, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeManufacturingCapabilities, computeShipHullCapabilities, computeStorageCapabilities, computeWarehouseHullCapabilities, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeCraftedItemStats, decodeStat, decodeStats, Shipload as default, depthScaleFactor, deriveLocation, deriveLocationEpoch, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStratum, deserializeAsset, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, distanceBetweenCoordinates, distanceBetweenPoints, encodeStats, energyPercent, entityDisplayName, entityRecipes, estimateDealTravelTime, estimateTravelTime, findNearbyPlanets, formatModuleLine, getAllCraftableItems, getCapabilityAttributes, getCategoryInfo, getComponentById, getComponentsForCategory, getComponentsForStat, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEligibleResources, getEntityRecipe, getEntityRecipeByItemId, getEntitySlotLayout, getEpochInfo, getFlightOrigin, getItem, getItems, getLocationCandidates, getLocationType, getModuleCapabilityType, getModuleRecipe, getModuleRecipeByItemId, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getResourceTier, getResourceWeight, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, hasEnergy, hasEnergyForDistance$1 as hasEnergyForDistance, hasExtractor, hasLoaders, hasMass, hasSchedule, hasSpace$1 as hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, isCraftedItem, isExtractableLocation, isFull$1 as isFull, isFullFromMass, isInvertedAttribute, isModuleItem, isRelatedItem, itemCategory, itemIcons, itemIds, itemOffset, itemTier, itemTypeCode, lerp, makeContainer, makeShip, makeWarehouse, maxTravelDistance, moduleAccepts, moduleDisplayName, moduleIcon, moduleRecipes, needsRecharge, projectEntity, projectEntityAt, readCommonBase, resolveItem, resolveStats, rotation, schedule, statMappings, tierColors, toLocation };
7121
8383
  //# sourceMappingURL=shipload.m.js.map