@shipload/sdk 1.0.0-next.0 → 1.0.0-next.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/lib/shipload.d.ts +512 -320
- package/lib/shipload.js +1960 -1060
- package/lib/shipload.js.map +1 -1
- package/lib/shipload.m.js +1920 -1056
- package/lib/shipload.m.js.map +1 -1
- package/package.json +8 -3
- package/src/capabilities/modules.ts +3 -0
- package/src/capabilities/storage.ts +1 -1
- package/src/contracts/platform.ts +13 -1
- package/src/contracts/server.ts +227 -282
- package/src/data/capabilities.ts +5 -330
- package/src/data/capability-formulas.ts +70 -0
- package/src/data/catalog.ts +0 -5
- package/src/data/colors.ts +2 -16
- package/src/data/entities.json +33 -10
- package/src/data/item-ids.ts +3 -1
- package/src/data/items.json +258 -0
- package/src/data/metadata.ts +57 -1
- package/src/data/recipes-runtime.ts +1 -0
- package/src/data/recipes.json +82 -11
- package/src/derivation/capability-mappings.ts +122 -0
- package/src/derivation/index.ts +1 -0
- package/src/derivation/resources.ts +116 -37
- package/src/derivation/stats.ts +1 -2
- package/src/entities/container.ts +25 -10
- package/src/entities/extractor.ts +144 -0
- package/src/entities/gamestate.ts +0 -9
- package/src/entities/makers.ts +71 -20
- package/src/entities/ship-deploy.ts +114 -56
- package/src/entities/ship.ts +17 -0
- package/src/entities/slot-multiplier.ts +21 -0
- package/src/entities/warehouse.ts +20 -3
- package/src/index-module.ts +67 -26
- package/src/managers/actions.ts +53 -80
- package/src/managers/entities.ts +31 -17
- package/src/managers/locations.ts +2 -20
- package/src/nft/atomicdata.ts +125 -0
- package/src/nft/description.ts +41 -7
- package/src/nft/index.ts +1 -0
- package/src/resolution/resolve-item.ts +17 -9
- package/src/scheduling/accessor.ts +4 -0
- package/src/scheduling/projection.ts +8 -0
- package/src/scheduling/schedule.ts +15 -1
- package/src/scheduling/task-cargo.ts +47 -0
- package/src/subscriptions/connection.ts +50 -2
- package/src/subscriptions/manager.ts +81 -2
- package/src/travel/travel.ts +61 -2
- package/src/types/entity-traits.ts +64 -1
- package/src/types.ts +11 -1
- package/src/utils/cargo.ts +27 -0
- package/src/utils/system.ts +25 -24
package/lib/shipload.m.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { __decorate } from 'tslib';
|
|
2
|
-
import { Blob, ABI, Struct, Name, UInt64, Checksum256, UInt32, TimePointSec, UInt8, Int64,
|
|
2
|
+
import { Blob, ABI, Struct, Name, UInt64, Checksum256, UInt32, TimePointSec, UInt16, UInt8, Int64, TimePoint, Bytes, Int32, Checksum512, APIClient } from '@wharfkit/antelope';
|
|
3
3
|
import ContractKit, { Contract as Contract$2 } from '@wharfkit/contract';
|
|
4
4
|
|
|
5
|
-
const abiBlob$1 = Blob.from('
|
|
5
|
+
const abiBlob$1 = Blob.from('DmVvc2lvOjphYmkvMS4yAA4KY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/C2NvbXBhbnlfcm93AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nBmVuYWJsZQABB2VuYWJsZWQEYm9vbAplbmFibGVnYW1lAAIIY29udHJhY3QEbmFtZQdlbmFibGVkBGJvb2wMZm91bmRjb21wYW55AAIHYWNjb3VudARuYW1lBG5hbWUGc3RyaW5nC2dhbWVfY29uZmlnAAQEc2VlZAtjaGVja3N1bTI1NgllcG9jaHRpbWUGdWludDMyBXN0YXJ0DnRpbWVfcG9pbnRfc2VjA2VuZA50aW1lX3BvaW50X3NlYwlnYW1lX21ldGEABARuYW1lBnN0cmluZwtkZXNjcmlwdGlvbgZzdHJpbmcDdXJsBnN0cmluZwd2ZXJzaW9uBnN0cmluZwhnYW1lX3JvdwAECGNvbnRyYWN0BG5hbWUGY29uZmlnC2dhbWVfY29uZmlnBG1ldGEJZ2FtZV9tZXRhBXN0YXRlCmdhbWVfc3RhdGUKZ2FtZV9zdGF0ZQABB2VuYWJsZWQEYm9vbAxzZXRlcG9jaHRpbWUAAghjb250cmFjdARuYW1lCWVwb2NodGltZQZ1aW50MzIJc3RhcnRnYW1lAAQIY29udHJhY3QEbmFtZQZjb25maWcLZ2FtZV9jb25maWcEbWV0YQlnYW1lX21ldGEFc3RhdGUKZ2FtZV9zdGF0ZQlzdGF0ZV9yb3cAAQdlbmFibGVkBGJvb2wKdXBkYXRlZ2FtZQACCGNvbnRyYWN0BG5hbWUEbWV0YQlnYW1lX21ldGEEd2lwZQAACACAisfka1RECmNsZWFydGFibGW+AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhcnRhYmxlCnN1bW1hcnk6ICdERUJVRzogY2xlYXJ0YWJsZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAqHjMVAZlbmFibGXzAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ0VuYWJsZS9kaXNhYmxlIHBsYXRmb3JtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhlIHBsYXRmb3JtIGNvbnRyYWN0LgCAkoapeMxUCmVuYWJsZWdhbWX8AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGVnYW1lCnN1bW1hcnk6ICdFbmFibGUvZGlzYmFibGUgYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTU4MTEzNzgyI2QzYmYyOTBmZGRlZGRiYjdkMzJhYTg5N2U5ZjdlOWUxM2EyYWU0NDk1NjE0MmUyM2ViNDdiNzcwOTZhMmVhOGQKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LuCnqZKiNDVdDGZvdW5kY29tcGFueYMCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGZvdW5kY29tcGFueQpzdW1tYXJ5OiAnRm91bmQgYSBuZXcgY29tcGFueScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KCkZvdW5kIGEgbmV3IGNvbXBhbnkgaW4gdGhlIFNoaXBsb2FkIHBsYXRmb3JtIGNvbnRyYWN0LqCkyw3RqrLCDHNldGVwb2NodGltZQAAAFDSsHxNxglzdGFydGdhbWX/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzdGFydGdhbWUKc3VtbWFyeTogJ1N0YXJ0IGEgbmV3IGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNTgxMTM3ODIjZDNiZjI5MGZkZGVkZGJiN2QzMmFhODk3ZTlmN2U5ZTEzYTJhZTQ0OTU2MTQyZTIzZWI0N2I3NzA5NmEyZWE4ZAoKLS0tCgpTdGFydCBhIG5ldyBnYW1lIG9mIFNoaXBsb2FkIGRlcGxveWVkIHRvIGEgbmV3IGNvbnRyYWN0LgCAkoapbFLVCnVwZGF0ZWdhbWWNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB1cGRhdGVnYW1lCnN1bW1hcnk6ICdVcGRhdGUgZ2FtZSBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE1ODExMzc4MiNkM2JmMjkwZmRkZWRkYmI3ZDMyYWE4OTdlOWY3ZTllMTNhMmFlNDQ5NTYxNDJlMjNlYjQ3Yjc3MDk2YTJlYThkCgotLS0KClVwZGF0ZSB0aGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHNwZWNpZmllZCBnYW1lIGNvbnRyYWN0LgoKLS0tAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQMAAADAT1MlRQNpNjQAAAtjb21wYW55X3JvdwAAAAAArKRhA2k2NAAACGdhbWVfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93ARNTaGlwbG9hZCAoUGxhdGZvcm0pE1NoaXBsb2FkIChQbGF0Zm9ybSkAAAAA');
|
|
6
6
|
const abi$1 = ABI.from(abiBlob$1);
|
|
7
7
|
var Types$1;
|
|
8
8
|
(function (Types) {
|
|
@@ -129,6 +129,18 @@ var Types$1;
|
|
|
129
129
|
Struct.type('game_row')
|
|
130
130
|
], game_row);
|
|
131
131
|
Types.game_row = game_row;
|
|
132
|
+
let setepochtime = class setepochtime extends Struct {
|
|
133
|
+
};
|
|
134
|
+
__decorate([
|
|
135
|
+
Struct.field(Name)
|
|
136
|
+
], setepochtime.prototype, "contract", void 0);
|
|
137
|
+
__decorate([
|
|
138
|
+
Struct.field(UInt32)
|
|
139
|
+
], setepochtime.prototype, "epochtime", void 0);
|
|
140
|
+
setepochtime = __decorate([
|
|
141
|
+
Struct.type('setepochtime')
|
|
142
|
+
], setepochtime);
|
|
143
|
+
Types.setepochtime = setepochtime;
|
|
132
144
|
let startgame = class startgame extends Struct {
|
|
133
145
|
};
|
|
134
146
|
__decorate([
|
|
@@ -205,27 +217,63 @@ var platform = /*#__PURE__*/Object.freeze({
|
|
|
205
217
|
Contract: Contract$1
|
|
206
218
|
});
|
|
207
219
|
|
|
208
|
-
const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDiDAQlhZGRtb2R1bGUABQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQMbW9kdWxlX2luZGV4BXVpbnQ4D21vZHVsZV9jYXJnb19pZAZ1aW50NjQPdGFyZ2V0X2NhcmdvX2lkBnVpbnQ2NAhhZGRuZXh1cwADCm5leHVzX25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAdhZHZhbmNlAAIGcmV2ZWFsBnN0cmluZwZjb21taXQLY2hlY2tzdW0yNTYFYmxlbmQAAwtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAZpbnB1dHMMY2FyZ29faXRlbVtdBmNhbmNlbAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwpjYXJnb19pdGVtAAQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNhcmdvX3JvdwAGAmlkBnVpbnQ2NAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQxjbGFpbXN0YXJ0ZXIAAwdhY2NvdW50BG5hbWUBeAVpbnQ2NAF5BWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAxtb2R1bGVfaXRlbXMIdWludDE2W10MbW9kdWxlX3N0YXRzCHVpbnQ2NFtdBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMAAgt3YXJlaG91c2VfegZ1aW50MTYLY29udGFpbmVyX3oGdWludDE2C2VudGl0eV9pbmZvABkEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPw1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtlbnVtX21lbWJlcgACBXZhbHVlBXVpbnQ4BG5hbWUGc3RyaW5nC2VudW1fcmVzdWx0AAEHbWVtYmVycw1lbnVtX21lbWJlcltdC2dhbWVfY29uZmlnAAMHdmVyc2lvbgZ1aW50MzIIZGVmYXVsdHMPZW50aXR5X2RlZmF1bHRzBWl0ZW1zCml0ZW1fZGVmW10GZ2F0aGVyAAQGc291cmNlCmVudGl0eV9yZWYLZGVzdGluYXRpb24KZW50aXR5X3JlZgdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAtnZXRpdGVtZGF0YQAACmdldGl0ZW1pZHMAAAhnZXRpdGVtcwAADGdldGl0ZW10eXBlcwAAC2dldGxvY2F0aW9uAAIBeAVpbnQ2NAF5BWludDY0CmdldGxvY2RhdGEAAgF4BWludDY0AXkFaW50NjQLZ2V0bW9kdHlwZXMAAApnZXRtb2R1bGVzAAAJZ2V0bmVhcmJ5AAMLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CHJlY2hhcmdlBGJvb2wKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQlnZXRyZWNpcGUAAQ5vdXRwdXRfaXRlbV9pZAZ1aW50MTYKZ2V0cmVjaXBlcwACC2xvd2VyX2JvdW5kBnVpbnQxNgVsaW1pdAV1aW50OApnZXRyZXNjYXRzAAALZ2V0cmVzZXJ2ZXMAAgF4BWludDY0AXkFaW50NjQMZ2V0cmVzb3VyY2VzAAAIZ2V0c2xvdHMAAApnZXRzdHJhdHVtAAMBeAVpbnQ2NAF5BWludDY0B3N0cmF0dW0GdWludDE2DGdldHN1bW1hcmllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwADCGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQxNgRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OAxpdGVtX2lkX3BhaXIAAgJpZAZ1aW50MTYEbmFtZQZzdHJpbmcPaXRlbV9pZHNfcmVzdWx0AAEFaXRlbXMOaXRlbV9pZF9wYWlyW10PaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAMMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaARzaXplBnVpbnQxNg5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OAxtb2R1bGVfZW50cnkAAgR0eXBlBXVpbnQ4CWluc3RhbGxlZA5wYWNrZWRfbW9kdWxlPwttb2R1bGVfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgttb2R1bGVfdHlwZQV1aW50OAR0aWVyBXVpbnQ4Dm1vZHVsZXNfcmVzdWx0AAEHbW9kdWxlcw1tb2R1bGVfaW5mb1tdDm1vdmVtZW50X3N0YXRzAAIGdGhydXN0BnVpbnQzMgVkcmFpbgZ1aW50MTYLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MTYHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8JbmV4dXNfcm93AAQCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMObmZ0X3NjaGVtYV9kZWYAAgtzY2hlbWFfbmFtZQRuYW1lBmZpZWxkcw5zY2hlbWFfZmllbGRbXRBuZnRfdGVtcGxhdGVfZGVmAAIHaXRlbV9pZAZ1aW50MTYLc2NoZW1hX25hbWUEbmFtZQ1uZnRjb25maWdfcm93AAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQ5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQABAdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAR0aWVyBXVpbnQ4CHF1YW50aXR5BnVpbnQzMhByZWNpcGVfaXRlbV9pbmZvAAICaWQGdWludDE2BG1hc3MGdWludDMyD3JlY2lwZV9yZXNwb25zZQAHDm91dHB1dF9pdGVtX2lkBnVpbnQxNgtvdXRwdXRfbWFzcwZ1aW50MzIGaW5wdXRzDnJlY2lwZV9pbnB1dFtdCnN0YXRfc2xvdHMUc3RhdF9zbG90X3Jlc3BvbnNlW10NYmxlbmRfd2VpZ2h0cwVieXRlcwtvdXRwdXRfaXRlbRByZWNpcGVfaXRlbV9pbmZvC2lucHV0X2l0ZW1zEnJlY2lwZV9pdGVtX2luZm9bXQ5yZWNpcGVzX3Jlc3VsdAABB3JlY2lwZXMRcmVjaXBlX3Jlc3BvbnNlW10LcmVzZXJ2ZV9yb3cABAJpZAZ1aW50NjQIY29vcmRfaWQGdWludDY0B3N0cmF0dW0GdWludDE2CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8GZW5lcmd5B3VpbnQxNj8JY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwdsb2FkZXJzDWxvYWRlcl9zdGF0cz8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwhzbG90X2RlZgABBHR5cGUFdWludDgKc3Bhd25jYXJnbwADCWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0C3NwYXducGFja2VkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAlpbnN0YWxsZWQPcGFja2VkX21vZHVsZVtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQFc3RhdHMGdWludDY0EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAYHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzYWx0BnVpbnQ2NAVzaGlwcwZ1aW50MzIEc2VlZAtjaGVja3N1bTI1NgZjb21taXQLY2hlY2tzdW0yNTYMc3RyYXR1bV9kYXRhAAIHc3RyYXR1bQxzdHJhdHVtX2luZm8Fc3RhdHMOcmVzb3VyY2Vfc3RhdHMMc3RyYXR1bV9pbmZvAAUHaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQIcmljaG5lc3MGdWludDE2B3Jlc2VydmUGdWludDMyC3Jlc2VydmVfbWF4BnVpbnQzMhFzdHJhdHVtX3JlbWFpbmluZwACB3N0cmF0dW0GdWludDE2CXJlbWFpbmluZwZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABwtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABAJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcNd2FyZWhvdXNlX3JvdwALAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8JY2FyZ29tYXNzBnVpbnQzMgdsb2FkZXJzDWxvYWRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhzY2hlZHVsZQlzY2hlZHVsZT8Ed2FycAAEC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAp3YXJwX3N0YXRzAAEFcmFuZ2UGdWludDMyBHdpcGUAAAx3aXBlc2VxdWVuY2UAAAR3cmFwAAUFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQIY2FyZ29faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NDsAAFBRJypTMglhZGRtb2R1bGXHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRtb2R1bGUKc3VtbWFyeTogJ0luc3RhbGwgYSBtb2R1bGUgaW50byBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbGwgYSBtb2R1bGUgZnJvbSBjYXJnbyBpbnRvIGEgbW9kdWxlIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIHR5cGUgbXVzdCBiZSBjb21wYXRpYmxlIHdpdGggdGhlIHRhcmdldCBzbG90IHR5cGUuIFRoZSBtb2R1bGUgaXRlbSBpcyByZW1vdmVkIGZyb20gY2FyZ28gdXBvbiBpbnN0YWxsYXRpb24uAAAAWHc1UzIIYWRkbmV4dXOnAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZGRuZXh1cwpzdW1tYXJ5OiAnQWRkIGEgbmV4dXMgbG9jYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNyZWF0ZSBhIG5ldyBuZXh1cyBlbnRpdHkgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzLiBOZXh1c2VzIGFyZSBvd25lZCBieSB0aGUgY29udHJhY3QgYW5kIHNlcnZlIGFzIGZpeGVkIGdhdGhlcmluZyBwb2ludHMgd2hlcmUgcGxheWVycyBjYW4gd3JhcCwgdW53cmFwLCBkZXBsb3ksIGFuZCBvdGhlcndpc2UgaW50ZXJhY3Qgd2l0aCBORlQtYmFja2VkIGFzc2V0cy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAEChaXYyB2FkdmFuY2XTAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBhZHZhbmNlCnN1bW1hcnk6ICdBZHZhbmNlIHR1cm4nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkdmFuY2UgdGhlIGdhbWUgdG8gdGhlIG5leHQgdHVybi4AAAAAgDRVPAVibGVuZPwCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGJsZW5kCnN1bW1hcnk6ICdCbGVuZCBjYXJnbyBzdGFja3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNvbWJpbmUgbXVsdGlwbGUgY2FyZ28gc3RhY2tzIG9mIHRoZSBzYW1lIGl0ZW0gdHlwZSBpbnRvIGEgc2luZ2xlIHN0YWNrIHdpdGggbmV3IGJsZW5kZWQgc3RhdHMuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC5wVb4mY+lMRAxjbGFpbXN0YXJ0ZXKFBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGFpbXN0YXJ0ZXIKc3VtbWFyeTogJ0RFQlVHOiBjbGFpbSBhIHN0YXJ0ZXIgc2hpcCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU3Bhd24gYSBwcmUta2l0dGVkIFQxIHN0YXJ0ZXIgc2hpcCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgZm9yIGEgcmVnaXN0ZXJlZCBwbGF5ZXIuIEF2YWlsYWJsZSBvbmx5IG9uIHRlc3QgZGVwbG95bWVudHMgd2hlcmUgbm8gaW4tZ2FtZSBzaGlwIGVjb25vbXkgeWV0IGV4aXN0cy4gUmVxdWlyZXMgdGhlIGNhbGxlciB0byBiZSBhIGpvaW5lZCBwbGF5ZXIgd2l0aCBubyBleGlzdGluZyBzaGlwczsgdGhlIHJlc3VsdGluZyBzaGlwIGlzIGZpdHRlZCB3aXRoIGEgZ2VuZXJhdG9yLCBlbmdpbmUsIGdhdGhlcmVyLCBjcmFmdGVyLCBhbmQgaGF1bGVyIG1vZHVsZS4AAKgb32lURAljbGVhbnJzdnDsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhbnJzdnAKc3VtbWFyeTogJ0NsZWFuIHVwIHBhc3QgZXBvY2ggcmVzZXJ2ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVyYXNlIHJlc2VydmUgdGFibGUgcm93cyBmcm9tIGEgcGFzdCBlcG9jaC4gQ2Fubm90IGNsZWFuIHRoZSBjdXJyZW50IG9yIGZ1dHVyZSBlcG9jaHMuIFRoZSBtYXhfcm93cyBwYXJhbWV0ZXIgY2FwcyB0aGUgbnVtYmVyIG9mIHJvd3MgZXJhc2VkIHBlciBjYWxsIHRvIGxpbWl0IENQVSB1c2FnZS4AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl07AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgAAYDQytyZFCWNvbmZpZ2xvZ90CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbmZpZ2xvZwpzdW1tYXJ5OiAnTG9nIGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbG9ncyB0aGUgY3VycmVudCBnYW1lIGNvbmZpZ3VyYXRpb24uIENhbGxlZCBpbmxpbmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdG8gYnJvYWRjYXN0IGNvbmZpZyB2aWEgYWN0aW9uIHRyYWNlcy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAACAvMxFBWNyYWZ0yAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JhZnQKc3VtbWFyeTogJ0NyYWZ0IGl0ZW1zIGZyb20gYSByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZm9ybSBjYXJnbyBpdGVtcyBpbnRvIGEgbmV3IGl0ZW0gdXNpbmcgYSByZWNpcGUuIFRoZSBlbnRpdHkgbXVzdCBoYXZlIGEgY3JhZnRlciBtb2R1bGUgaW5zdGFsbGVkLiBDb25zdW1lcyBlbmVyZ3kgYW5kIHNjaGVkdWxlcyBhIGNyYWZ0aW5nIHRhc2sgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiB0b3RhbCBpbnB1dCBtYXNzIGFuZCBjcmFmdGVyIHNwZWVkLiBJbnB1dCBxdWFudGl0aWVzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgcmVjaXBlIHJlcXVpcmVtZW50cy7gs8tTqWzURQxjcmVhdGVlbnRpdHm/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmVhdGVlbnRpdHkKc3VtbWFyeTogJ0RFQlVHOiBjcmVhdGUgYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAHgaq0oGZGVwbG957AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVwbG95CnN1bW1hcnk6ICdEZXBsb3kgYSBwYWNrZWQgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpVbnBhY2sgYSBwYWNrZWQgZW50aXR5IGl0ZW0gKHBhY2tlZCBzaGlwIG9yIHBhY2tlZCBjb250YWluZXIpIGZyb20gY2FyZ28sIHNjaGVkdWxpbmcgYSBkZXBsb3kgdGFzayB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBlbnRpdHkgYXQgdGhlIGRlcGxveWluZyBlbnRpdHkncyBsb2NhdGlvbiB1cG9uIHJlc29sdXRpb24uAIDPLk+FsEoKZGVzY2VudGl0eckDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlc2NlbnRpdHkKc3VtbWFyeTogJ0Rlc2NyaWJlIGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzdHJpbmcgZm9yIGEgcGFja2VkIGVudGl0eSwgZGVyaXZlZCBmcm9tIHRoZSBlbnRpdHkgaXRlbSBpZCwgaHVsbCBzdGF0cywgYW5kIHRoZSBsaXN0IG9mIGluc3RhbGxlZCBtb2R1bGUgaXRlbSBpZHMgYW5kIHN0YXRzLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBORlQgcmVuZGVyZXJzIHRvIGRpc3BsYXkgcGFja2VkIGVudGl0aWVzLgAAAACoeMxUBmVuYWJsZd0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnU2V0IGVuYWJsZWQgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZ2FtZSBvZiBTaGlwbG9hZC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YagDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLgAATk6q7LJiCmdldGl0ZW1pZHOGAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtaWRzCnN1bW1hcnk6ICdHZXQgaXRlbSBpZCB0byBuYW1lIG1hcHBpbmdzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBtYXBwaW5nIG9mIGl0ZW0gaWQgY29uc3RhbnRzIHRvIHRoZWlyIGNhbm9uaWNhbCBzdHJpbmcgbmFtZXMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcmVzb2x2ZSBudW1lcmljIGl0ZW0gaWRzIHRvIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXJzLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy6AVfVZquyyYgxnZXRpdGVtdHlwZXOIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtdHlwZXMKc3VtbWFyeTogJ0dldCBpdGVtIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBpdGVtIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAocmVzb3VyY2UsIGNvbXBvbmVudCwgbW9kdWxlLCBlbnRpdHkpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBpdGVtIHR5cGUgaWRlbnRpZmllcnMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlcwCAFbqaYnWzYgxnZXRyZXNvdXJjZXOHAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNvdXJjZXMKc3VtbWFyeTogJ0dldCBhbGwgcmVzb3VyY2UgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyByZXNvdXJjZXMsIGluY2x1ZGluZyBlYWNoIHJlc291cmNlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBnYXRoZXJhYmxlIG1hdGVyaWFscy4AAAA404izYghnZXRzbG90c7sDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHNsb3RzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHNsb3QgbGF5b3V0cycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIG1vZHVsZSBzbG90IGxheW91dCBmb3IgZXZlcnkgZW50aXR5IGl0ZW0gdHlwZSwgbGlzdGluZyB0aGUgb3JkZXJlZCBzbG90IHR5cGVzIGF2YWlsYWJsZSBmb3IgbW9kdWxlIGluc3RhbGxhdGlvbi4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZXRlcm1pbmUgd2hpY2ggbW9kdWxlIHR5cGVzIGFyZSBjb21wYXRpYmxlIHdpdGggYSBnaXZlbiBlbnRpdHkgaHVsbC4AgNTZ3IyzYgpnZXRzdHJhdHVt0gItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3RyYXR1bQpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIHN0cmF0dW0gZGF0YScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyByZXNvdXJjZSBzdHJhdHVtIGRhdGEgZm9yIGEgc3BlY2lmaWMgZGVwdGggbGF5ZXIgYXQgYSBjb29yZGluYXRlLCBpbmNsdWRpbmcgdGhlIHN0cmF0dW0gc2VlZCBpbmZvIGFuZCBkZXJpdmVkIHJlc291cmNlIHN0YXRzLoCVu0ZKjbNiDGdldHN1bW1hcmllc+gCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN1bW1hcmllcwpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdW1tYXJpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGxpZ2h0d2VpZ2h0IHN1bW1hcmllcyBvZiBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIgaW5jbHVkaW5nIHR5cGUsIGlkLCBvd25lciwgbmFtZSwgbG9jYXRpb24sIGFuZCBpZGxlIHN0YXR1cy4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAKLa5uaq6WULZ3JvdXB0cmF2ZWyaBC0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBncm91cHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBtdWx0aXBsZSBlbnRpdGllcyB0b2dldGhlcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgZ3JvdXAgdHJhdmVsIGZvciBtdWx0aXBsZSBlbnRpdGllcyB0byBhIGRlc3RpbmF0aW9uLiBBbGwgZW50aXRpZXMgbXVzdCBiZSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBhbmQgb3duZWQgYnkgdGhlIGNhbGxlci4gQXQgbGVhc3Qgb25lIGVudGl0eSB3aXRoIGVuZ2luZXMgaXMgcmVxdWlyZWQgdG8gcHJvdmlkZSB0aHJ1c3QuIEZsaWdodCBkdXJhdGlvbiBpcyBjYWxjdWxhdGVkIGZyb20gY29tYmluZWQgdGhydXN0IGFuZCB0b3RhbCBtYXNzIG9mIGFsbCBlbnRpdGllcy4gQ3JlYXRlcyBhbiBlbnRpdHlncm91cCBmb3IgYXRvbWljIHJlc29sdXRpb24gYW5kIGNhbmNlbGxhdGlvbi4AAAAAANCwaQRoYXNo+AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaApzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTI1NiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGEyNTYgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAECE0rBpB2hhc2g1MTL7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoNTEyCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhNTEyIGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTUxMiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAAACQ3XQEaW5pdPoBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGluaXQKc3VtbWFyeTogJ0luaXRpYWxpemUgZ2FtZSBzZWVkJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWFsaXplIGEgdGhlIGdhbWVzIHNlZWQgYW5kIHNlZWQgdmFsdWVzIHRvIGJvb3RzdHJhcCBnYW1lIHN0YXRlLgAAAAAAMB19BGpvaW7EAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBqb2luCnN1bW1hcnk6ICdKb2luIGEgZ2FtZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSm9pbiBhIGdhbWUgb2YgU2hpcGxvYWQAAAAA+OUynQZub3RpZnmKAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBub3RpZnkKc3VtbWFyeTogJ1Rhc2sgbGlmZWN5Y2xlIG5vdGlmaWNhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbm90aWZpZXMgZW50aXR5IG93bmVycyBvZiB0YXNrIGxpZmVjeWNsZSBldmVudHMgKHJlc29sdmVkLCBjYW5jZWxsZWQpLiBDYWxsZWQgaW5saW5lIHdoZW4gdGFza3MgY2hhbmdlIHN0YXRlLiBVc2VzIHJlcXVpcmVfcmVjaXBpZW50IHRvIGVuYWJsZSBvZmYtY2hhaW4gbW9uaXRvcmluZyB2aWEgYWN0aW9uIHRyYWNlcy4AAACKXdOQughyZWNoYXJnZc0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlY2hhcmdlCnN1bW1hcnk6ICdSZWNoYXJnZSBzaGlwIGVuZXJneScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2NoZWR1bGUgYSByZWNoYXJnZSB0YXNrIGZvciBhbiBlbnRpdHkgdG8gcmVzdG9yZSBlbmVyZ3kgdG8gZnVsbCBjYXBhY2l0eS4gVGhlIHJlY2hhcmdlIGR1cmF0aW9uIGRlcGVuZHMgb24gY3VycmVudCBlbmVyZ3kgbGV2ZWwgYW5kIHJlY2hhcmdlIHJhdGUuAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAAAAkKPBBHNhbHTYAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzYWx0CnN1bW1hcnk6ICdBcHBlbmQgU2FsdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWRkIGFkZGl0aW9uYWwgc2FsdCB0byB0aGUgbmV4dCBlcG9jaCBzZWVkLgAAYAvlNbPCCXNldG5mdGNmZ8QDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldG5mdGNmZwpzdW1tYXJ5OiAnU2V0IE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpCaW5kIGFuIGl0ZW0gaWQgdG8gYW4gQXRvbWljQXNzZXRzIHRlbXBsYXRlIGlkIGFuZCBzY2hlbWEgbmFtZS4gVXNlZCB0byBjb25maWd1cmUgaG93IHRoZSBjb250cmFjdCBtaW50cyBhbmQgcmVjb2duaXplcyBORlRzIGZvciBhIGdpdmVuIGl0ZW0uIEluc2VydHMgYSBuZXcgbWFwcGluZyBpZiBvbmUgZG9lcyBub3QgZXhpc3QsIG9yIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIG1hcHBpbmcuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAGXXoMlNxQpzcGF3bmNhcmdvxQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25jYXJnbwpzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGNhcmdvIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSgsjUyU3FC3NwYXducGFja2Vk5wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25wYWNrZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBhIHBhY2tlZCBlbnRpdHkgd2l0aCBpbnN0YWxsZWQgbW9kdWxlcyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AkkpK4clNxQtzcGF3bnNlZWRlZM0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXduc2VlZGVkCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gc2VlZGVkIGNhcmdvIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAFctPM3NCHRyYW5zZmVyyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhbnNmZXIKc3VtbWFyeTogJ1RyYW5zZmVyIGNhcmdvIGJldHdlZW4gZW50aXRpZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZmVyIGNhcmdvIGJldHdlZW4gdHdvIGVudGl0aWVzIGF0IHRoZSBzYW1lIGxvY2F0aW9uLiBCb3RoIGVudGl0aWVzIG11c3QgYmUgb3duZWQgYnkgdGhlIGNhbGxlciBhbmQgYXQgbGVhc3Qgb25lIG11c3QgaGF2ZSBsb2FkZXJzLiBDcmVhdGVzIGxvYWQgYW5kIHVubG9hZCB0YXNrcyBvbiBib3RoIGVudGl0aWVzIHdpdGggZHVyYXRpb24gYmFzZWQgb24gY29tYmluZWQgbG9hZGVyIGNhcGFjaXR5IGFuZCBaLWRpc3RhbmNlIGJldHdlZW4gdGhlbS4AAAAARLXNzQZ0cmF2ZWz7AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgYSBzaGlwJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSB0cmF2ZWwgb2YgYW4gZW50aXR5IGZyb20gaXRzIGN1cnJlbnQgbG9jYXRpb24gdG8gYSBuZXcgZGVzdGluYXRpb24uAAAAAABQr+EEd2FycJ8DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdhcnAKc3VtbWFyeTogJ1dhcnAgdG8gYSBkZXN0aW5hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFudGx5IHRlbGVwb3J0IGFuIGVudGl0eSB0byBhIGRlc3RpbmF0aW9uIHN5c3RlbS4gUmVxdWlyZXMgd2FycCBjYXBhYmlsaXR5LCBmdWxsIGVuZXJneSwgZW1wdHkgY2FyZ28sIGFuZCBhbiBlbXB0eSBzY2hlZHVsZS4gVGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgYSB2YWxpZCBzeXN0ZW0gd2l0aGluIHdhcnAgcmFuZ2UuIFJlc29sdmVzIGltbWVkaWF0ZWx5IGFzIGEgemVyby1kdXJhdGlvbiB0YXNrLgAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS2g0FTaKqyq4wx3aXBlc2VxdWVuY2XCAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlc2VxdWVuY2UKc3VtbWFyeTogJ0RFQlVHOiB3aXBlc2VxdWVuY2UgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAABQzeUEd3JhcP4DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdyYXAKc3VtbWFyeTogJ1dyYXAgY2FyZ28gaW50byBhbiBORlQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCldyYXAgYSBxdWFudGl0eSBvZiBjYXJnbyBmcm9tIGFuIGVudGl0eSBpbnRvIGFuIEF0b21pY0Fzc2V0cyBORlQgbWludGVkIHRvIHRoZSBzcGVjaWZpZWQgb3duZXIuIFRoZSBlbnRpdHkgbXVzdCBiZSBhdCBhIG5leHVzLCBoYXZlIGxvYWRlcnMsIGFuZCBjb250YWluIGVub3VnaCBvZiB0aGUgcmVxdWVzdGVkIGNhcmdvLiBTY2hlZHVsZXMgYSB3cmFwIHRhc2sgdGhhdCwgb24gcmVzb2x1dGlvbiwgcmVtb3ZlcyB0aGUgY2FyZ28gZnJvbSB0aGUgZW50aXR5IGFuZCBtaW50cyB0aGUgTkZUIHVzaW5nIHRoZSB0ZW1wbGF0ZSBjb25maWd1cmVkIGZvciB0aGF0IGl0ZW0gaWQuDQAAAAAAyq5BA2k2NAAACWNhcmdvX3JvdwAAuGo6kydFA2k2NAAADWNvbnRhaW5lcl9yb3cAqqaX+ezyVANpNjQAAA9lbnRpdHlncm91cF9yb3cAAACTumwQjQNpNjQAAAxsb2NhdGlvbl9yb3cAAAAAAKy7mgNpNjQAAAluZXh1c19yb3cAAGBuTYrymgNpNjQAAA1uZnRjb25maWdfcm93AAAAAFzlTawDaTY0AAAKcGxheWVyX3JvdwAAAEDtq7C6A2k2NAAAC3Jlc2VydmVfcm93AAAACk2lrcIDaTY0AAAMc2VxdWVuY2Vfcm93AAAAAABQXcMDaTY0AAAIc2hpcF9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cAAFBY06au4QNpNjQAAA13YXJlaG91c2Vfcm93ARFTaGlwbG9hZCAoU2VydmVyKRFTaGlwbG9hZCAoU2VydmVyKQAAACQAAAAARIWmQQ5jYW5jZWxfcmVzdWx0cwAAAACAvMxFDHRhc2tfcmVzdWx0cwAAAAB4GqtKDHRhc2tfcmVzdWx0cwCAzy5PhbBKBnN0cmluZwAAAABc1bJhDHRhc2tfcmVzdWx0cwAAYG5NirJiC2dhbWVfY29uZmlnALBy2eWpsmINZW50aXR5X2luZm9bXQAA8NnlqbJiC2VudGl0eV9pbmZvAEw2SarssmIPaXRlbWRhdGFfcmVzdWx0AABOTqrssmIPaXRlbV9pZHNfcmVzdWx0AAAAWKrssmIKaXRlbXNfaW5mb4BV9Vmq7LJiC2VudW1fcmVzdWx0ACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAsKo+JyqzYgtlbnVtX3Jlc3VsdAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AAF3T5TWzYg5uZnRpbmZvX3Jlc3VsdAAAuMqbWLNiC3BsYXllcl9pbmZvAABQ1SF1s2IOcmVjaXBlc19yZXN1bHQAAFbVIXWzYg5yZWNpcGVzX3Jlc3VsdAAAzgZhdbNiC2VudW1fcmVzdWx0ALDaV2F1s2ITc3RyYXR1bV9yZW1haW5pbmdbXYAVuppidbNiEHJlc291cmNlc19yZXN1bHQAAAA404izYhVlbnRpdHlfbGF5b3V0c19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cwAAAAAAUM3lDHRhc2tfcmVzdWx0cw==');
|
|
220
|
+
const abiBlob = Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDiFAQlhZGRtb2R1bGUABAllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAptb2R1bGVfcmVmCWNhcmdvX3JlZgp0YXJnZXRfcmVmCmNhcmdvX3JlZj8IYWRkbmV4dXMAAwpuZXh1c19uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQHYWR2YW5jZQACBnJldmVhbAZzdHJpbmcGY29tbWl0C2NoZWNrc3VtMjU2BWJsZW5kAAICaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAICaWQGdWludDY0BWNvdW50BnVpbnQ2NA5jYW5jZWxfcmVzdWx0cwAGCWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQ9jYW5jZWxsZWRfY291bnQFdWludDgQc2NoZWR1bGVfc3RhcnRlZAt0aW1lX3BvaW50PwtlbnRpdHlncm91cAd1aW50NjQ/DWdyb3VwX21lbWJlcnMWQl92ZWN0b3JfZW50aXR5X3JlZl9FPwpjYXJnb19pdGVtAAQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10IcXVhbnRpdHkGdWludDMyCWNhcmdvX3JlZgADB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNhcmdvX3JvdwAGAmlkBnVpbnQ2NAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQHbW9kdWxlcw5tb2R1bGVfZW50cnlbXQpjYXJnb192aWV3AAUHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10IcXVhbnRpdHkGdWludDMyAmlkBnVpbnQ2NAxjbGFpbXN0YXJ0ZXIAAwdhY2NvdW50BG5hbWUBeAVpbnQ2NAF5BWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcLY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAQCaWQGdWludDY0CXJlY2lwZV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBmlucHV0cwxjYXJnb19pdGVtW10NY3JhZnRlcl9zdGF0cwACBXNwZWVkBnVpbnQxNgVkcmFpbgZ1aW50MTYMY3JlYXRlZW50aXR5AAUFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwF4BWludDY0AXkFaW50NjQIZGVtb2xpc2gAAQllbnRpdHlfaWQGdWludDY0BmRlcGxveQACAmlkBnVpbnQ2NANyZWYJY2FyZ29fcmVmCmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAxtb2R1bGVfaXRlbXMIdWludDE2W10MbW9kdWxlX3N0YXRzCHVpbnQ2NFtdBmVuYWJsZQABB2VuYWJsZWQEYm9vbAxlbmVyZ3lfc3RhdHMAAghjYXBhY2l0eQZ1aW50MTYIcmVjaGFyZ2UGdWludDE2FGVudGl0eV9jdXJyZW50X3N0YXRlAAILY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMGZW5lcmd5BnVpbnQxNg9lbnRpdHlfZGVmYXVsdHMAAgt3YXJlaG91c2VfegZ1aW50MTYLY29udGFpbmVyX3oGdWludDE2C2VudGl0eV9pbmZvABkEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX3ZpZXdbXQdsb2FkZXJzDWxvYWRlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPw1lbnRpdHlfbGF5b3V0AAIOZW50aXR5X2l0ZW1faWQGdWludDE2BXNsb3RzCnNsb3RfZGVmW10VZW50aXR5X2xheW91dHNfcmVzdWx0AAEIZW50aXRpZXMPZW50aXR5X2xheW91dFtdCmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKZW50aXR5X3JvdwAUAmlkBnVpbnQ2NAVvd25lcgRuYW1lBGtpbmQEbmFtZQRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/BmVuZXJneQd1aW50MTY/CWNhcmdvbWFzcwZ1aW50MzIHZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8HbG9hZGVycw1sb2FkZXJfc3RhdHM/CGdhdGhlcmVyD2dhdGhlcmVyX3N0YXRzPwR3YXJwC3dhcnBfc3RhdHM/B2NyYWZ0ZXIOY3JhZnRlcl9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8HbW9kdWxlcw5tb2R1bGVfZW50cnlbXQhzY2hlZHVsZQlzY2hlZHVsZT8HaXRlbV9pZAZ1aW50MTYOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtlbnVtX21lbWJlcgACBXZhbHVlBXVpbnQ4BG5hbWUGc3RyaW5nC2VudW1fcmVzdWx0AAEHbWVtYmVycw1lbnVtX21lbWJlcltdDGZpeGNhcmdvbWFzcwABCWVudGl0eV9pZAZ1aW50NjQLZ2FtZV9jb25maWcAAwd2ZXJzaW9uBnVpbnQzMghkZWZhdWx0cw9lbnRpdHlfZGVmYXVsdHMFaXRlbXMKaXRlbV9kZWZbXQZnYXRoZXIABAlzb3VyY2VfaWQGdWludDY0DmRlc3RpbmF0aW9uX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZWxpZ2libGUAAgZjb29yZHMLY29vcmRpbmF0ZXMHc3RyYXR1bQZ1aW50MTYLZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQABCWVudGl0eV9pZAZ1aW50NjQLZ2V0aXRlbWRhdGEAAApnZXRpdGVtaWRzAAAIZ2V0aXRlbXMAAAxnZXRpdGVtdHlwZXMAAAtnZXRsb2NhdGlvbgACAXgFaW50NjQBeQVpbnQ2NApnZXRsb2NkYXRhAAIBeAVpbnQ2NAF5BWludDY0C2dldG1vZHR5cGVzAAAKZ2V0bW9kdWxlcwAACWdldG5lYXJieQACCWVudGl0eV9pZAZ1aW50NjQIcmVjaGFyZ2UEYm9vbApnZXRuZnRpbmZvAAAJZ2V0cGxheWVyAAEHYWNjb3VudARuYW1lCWdldHJlY2lwZQABDm91dHB1dF9pdGVtX2lkBnVpbnQxNgpnZXRyZWNpcGVzAAILbG93ZXJfYm91bmQGdWludDE2BWxpbWl0BXVpbnQ4CmdldHJlc2NhdHMAAAtnZXRyZXNlcnZlcwACAXgFaW50NjQBeQVpbnQ2NAxnZXRyZXNvdXJjZXMAAAhnZXRzbG90cwAACmdldHN0cmF0dW0AAwF4BWludDY0AXkFaW50NjQHc3RyYXR1bQZ1aW50MTYMZ2V0c3VtbWFyaWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwtncm91cHRyYXZlbAAECGVudGl0aWVzDGVudGl0eV9yZWZbXQF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbARoYXNoAAEFdmFsdWUGc3RyaW5nB2hhc2g1MTIAAQV2YWx1ZQZzdHJpbmcMaGF1bGVyX3N0YXRzAAMIY2FwYWNpdHkFdWludDgKZWZmaWNpZW5jeQZ1aW50MTYFZHJhaW4GdWludDE2CmluaXRpYWxpemUAAQRzZWVkC2NoZWNrc3VtMjU2CGl0ZW1fZGVmAAUCaWQGdWludDE2BG1hc3MGdWludDMyBHR5cGUFdWludDgHc3VidHlwZQV1aW50OAR0aWVyBXVpbnQ4DGl0ZW1faWRfcGFpcgACAmlkBnVpbnQxNgRuYW1lBnN0cmluZw9pdGVtX2lkc19yZXN1bHQAAQVpdGVtcw5pdGVtX2lkX3BhaXJbXQ9pdGVtZGF0YV9yZXN1bHQAAgVpdGVtcwppdGVtX2RlZltdB3JlY2lwZXMOcmVjaXBlc19yZXN1bHQKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAgxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljBHNpemUGdWludDE2DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wPbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkDnBhY2tlZF9tb2R1bGU/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAgdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDm5mdGluZm9fcmVzdWx0AAIHc2NoZW1hcxBuZnRfc2NoZW1hX2RlZltdCXRlbXBsYXRlcxJuZnRfdGVtcGxhdGVfZGVmW10Gbm90aWZ5AAEFZXZlbnQKdGFza19ldmVudA1wYWNrZWRfbW9kdWxlAAIHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0C3BsYXllcl9pbmZvAAMFb3duZXIEbmFtZQlpc19wbGF5ZXIEYm9vbAxjb21wYW55X25hbWUGc3RyaW5nCnBsYXllcl9yb3cAAQVvd25lcgRuYW1lCHJlY2hhcmdlAAECaWQGdWludDY0DHJlY2lwZV9pbnB1dAAEB2l0ZW1faWQGdWludDE2CGNhdGVnb3J5BXVpbnQ4BHRpZXIFdWludDgIcXVhbnRpdHkGdWludDMyEHJlY2lwZV9pdGVtX2luZm8AAgJpZAZ1aW50MTYEbWFzcwZ1aW50MzIPcmVjaXBlX3Jlc3BvbnNlAAcOb3V0cHV0X2l0ZW1faWQGdWludDE2C291dHB1dF9tYXNzBnVpbnQzMgZpbnB1dHMOcmVjaXBlX2lucHV0W10Kc3RhdF9zbG90cxRzdGF0X3Nsb3RfcmVzcG9uc2VbXQ1ibGVuZF93ZWlnaHRzBWJ5dGVzC291dHB1dF9pdGVtEHJlY2lwZV9pdGVtX2luZm8LaW5wdXRfaXRlbXMScmVjaXBlX2l0ZW1faW5mb1tdDnJlY2lwZXNfcmVzdWx0AAEHcmVjaXBlcxFyZWNpcGVfcmVzcG9uc2VbXQxyZWZyc2hlbnRpdHkAAQllbnRpdHlfaWQGdWludDY0C3Jlc2VydmVfcm93AAQCaWQGdWludDY0CGNvb3JkX2lkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNglyZW1haW5pbmcGdWludDMyB3Jlc29sdmUAAgJpZAZ1aW50NjQFY291bnQHdWludDY0Pw9yZXNvbHZlX3Jlc3VsdHMABgllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUOcmVzb2x2ZWRfY291bnQFdWludDgUbmV3X3NjaGVkdWxlX3N0YXJ0ZWQLdGltZV9wb2ludD8LZW50aXR5Z3JvdXAHdWludDY0Pw1ncm91cF9tZW1iZXJzFkJfdmVjdG9yX2VudGl0eV9yZWZfRT8NcmVzb3VyY2VfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMghjYXRlZ29yeQV1aW50OAR0aWVyBXVpbnQ4DnJlc291cmNlX3N0YXRzAAMFc3RhdDEGdWludDE2BXN0YXQyBnVpbnQxNgVzdGF0MwZ1aW50MTYQcmVzb3VyY2VzX3Jlc3VsdAABCXJlc291cmNlcw9yZXNvdXJjZV9pbmZvW10Icm1tb2R1bGUAAwllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OAp0YXJnZXRfcmVmCmNhcmdvX3JlZj8Icm1uZnRjZmcAAQdpdGVtX2lkBnVpbnQxNgRzYWx0AAEEc2FsdAZ1aW50NjQIc2NoZWR1bGUAAgdzdGFydGVkCnRpbWVfcG9pbnQFdGFza3MGdGFza1tdDHNjaGVtYV9maWVsZAACBG5hbWUGc3RyaW5nCmZpZWxkX3R5cGUGc3RyaW5nCXNldG5mdGNmZwADB2l0ZW1faWQGdWludDE2C3RlbXBsYXRlX2lkBWludDMyC3NjaGVtYV9uYW1lBG5hbWUKc2tpcHJldmVhbAABBmNvbW1pdAtjaGVja3N1bTI1NghzbG90X2RlZgACBHR5cGUFdWludDgKb3V0cHV0X3BjdAZ1aW50MTYKc3Bhd25jYXJnbwADCWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0C3NwYXducGFja2VkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQxNgpodWxsX3N0YXRzBnVpbnQ2NAlpbnN0YWxsZWQPcGFja2VkX21vZHVsZVtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQFc3RhdHMGdWludDY0EnN0YXRfc2xvdF9yZXNwb25zZQABB3NvdXJjZXMNc3RhdF9zb3VyY2VbXQtzdGF0X3NvdXJjZQACC2lucHV0X2luZGV4BXVpbnQ4EGlucHV0X3N0YXRfaW5kZXgFdWludDgJc3RhdGVfcm93AAUHZW5hYmxlZARib29sBWVwb2NoBnVpbnQzMgRzYWx0BnVpbnQ2NARzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABQdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzILcmVzZXJ2ZV9tYXgGdWludDMyEXN0cmF0dW1fcmVtYWluaW5nAAIHc3RyYXR1bQZ1aW50MTYJcmVtYWluaW5nBnVpbnQzMgR0YXNrAAgEdHlwZQV1aW50OAhkdXJhdGlvbgZ1aW50MzIKY2FuY2VsYWJsZQV1aW50OAtjb29yZGluYXRlcwxjb29yZGluYXRlcz8FY2FyZ28MY2FyZ29faXRlbVtdDGVudGl0eXRhcmdldAtlbnRpdHlfcmVmPwtlbnRpdHlncm91cAd1aW50NjQ/C2VuZXJneV9jb3N0B3VpbnQxNj8KdGFza19ldmVudAAJCmV2ZW50X3R5cGUFdWludDgFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQKdGFza19pbmRleAV1aW50OAR0YXNrBHRhc2sJc3RhcnRzX2F0CnRpbWVfcG9pbnQMY29tcGxldGVzX2F0CnRpbWVfcG9pbnQKbmV3X2VuZXJneQd1aW50MTY/DHRhc2tfcmVzdWx0cwABCGVudGl0aWVzEmVudGl0eV90YXNrX2luZm9bXQh0cmFuc2ZlcgADCXNvdXJjZV9pZAZ1aW50NjQHZGVzdF9pZAZ1aW50NjQFaXRlbXMMY2FyZ29faXRlbVtdBnRyYXZlbAAEAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cABAJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnFnN0cmF0dW1fcmVtYWluaW5nX3R5cGURc3RyYXR1bV9yZW1haW5pbmcIdW5kZXBsb3kAAgdob3N0X2lkBnVpbnQ2NAl0YXJnZXRfaWQGdWludDY0BHdhcnAAAwJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAABHdyYXAABAVvd25lcgRuYW1lCWVudGl0eV9pZAZ1aW50NjQIbmV4dXNfaWQGdWludDY0BWl0ZW1zDGNhcmdvX2l0ZW1bXQp3cmFwZW50aXR5AAIJZW50aXR5X2lkBnVpbnQ2NAhuZXh1c19pZAZ1aW50NjRBAABQUScqUzIJYWRkbW9kdWxlxwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbW9kdWxlCnN1bW1hcnk6ICdJbnN0YWxsIGEgbW9kdWxlIGludG8gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YWxsIGEgbW9kdWxlIGZyb20gY2FyZ28gaW50byBhIG1vZHVsZSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSB0eXBlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgc2xvdCB0eXBlLiBUaGUgbW9kdWxlIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGNhcmdvIHVwb24gaW5zdGFsbGF0aW9uLgAAAFh3NVMyCGFkZG5leHVzpwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbmV4dXMKc3VtbWFyeTogJ0FkZCBhIG5leHVzIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDcmVhdGUgYSBuZXcgbmV4dXMgZW50aXR5IGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4gTmV4dXNlcyBhcmUgb3duZWQgYnkgdGhlIGNvbnRyYWN0IGFuZCBzZXJ2ZSBhcyBmaXhlZCBnYXRoZXJpbmcgcG9pbnRzIHdoZXJlIHBsYXllcnMgY2FuIHdyYXAsIHVud3JhcCwgZGVwbG95LCBhbmQgb3RoZXJ3aXNlIGludGVyYWN0IHdpdGggTkZULWJhY2tlZCBhc3NldHMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4uAAAAAIA0VTwFYmxlbmT8Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIG5ldyBibGVuZGVkIHN0YXRzLiBBbGwgaW5wdXQgc3RhY2tzIG11c3Qgc2hhcmUgdGhlIHNhbWUgaXRlbSBpZC4gVGhlIG91dHB1dCBzdGFjayBoYXMgdGhlIGNvbWJpbmVkIHF1YW50aXR5IG9mIGFsbCBpbnB1dHMuAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQucFW+JmPpTEQMY2xhaW1zdGFydGVyhQQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xhaW1zdGFydGVyCnN1bW1hcnk6ICdERUJVRzogY2xhaW0gYSBzdGFydGVyIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNwYXduIGEgcHJlLWtpdHRlZCBUMSBzdGFydGVyIHNoaXAgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGVzIGZvciBhIHJlZ2lzdGVyZWQgcGxheWVyLiBBdmFpbGFibGUgb25seSBvbiB0ZXN0IGRlcGxveW1lbnRzIHdoZXJlIG5vIGluLWdhbWUgc2hpcCBlY29ub215IHlldCBleGlzdHMuIFJlcXVpcmVzIHRoZSBjYWxsZXIgdG8gYmUgYSBqb2luZWQgcGxheWVyIHdpdGggbm8gZXhpc3Rpbmcgc2hpcHM7IHRoZSByZXN1bHRpbmcgc2hpcCBpcyBmaXR0ZWQgd2l0aCBhIGdlbmVyYXRvciwgZW5naW5lLCBnYXRoZXJlciwgY3JhZnRlciwgYW5kIGhhdWxlciBtb2R1bGUuAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMu4LPLU6ls1EUMY3JlYXRlZW50aXR5vwEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JlYXRlZW50aXR5CnN1bW1hcnk6ICdERUJVRzogY3JlYXRlIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAA27SKVKCGRlbW9saXNo8QMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVtb2xpc2gKc3VtbWFyeTogJ0RlbW9saXNoIGEgc3RhdGlvbmFyeSBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkRlY29tbWlzc2lvbiBhbiBlbnRpdHksIGVyYXNpbmcgaXQgZnJvbSB0aGUgZ2FtZS4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUsIGhhdmUgZW1wdHkgY2FyZ28sIGFuZCBoYXZlIG5vIGluc3RhbGxlZCBtb2R1bGVzIChyZW1vdmUgZWFjaCB2aWEgcm1tb2R1bGUgZmlyc3QpLiBTY2hlZHVsZXMgYSBkZW1vbGlzaCB0YXNrIHRoYXQgZXJhc2VzIHRoZSBlbnRpdHkgb24gcmVzb2x1dGlvbi4gT25seSB2YWxpZCBmb3IgZW50aXRpZXMgdGhhdCBjYW5ub3QgbW92ZTsgdXNlIHVuZGVwbG95IG9yIHdyYXBlbnRpdHkgZm9yIHRoZSByZXN0LgAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHnJAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4AAAAAqHjMVAZlbmFibGXdAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBlbmFibGUKc3VtbWFyeTogJ1NldCBlbmFibGVkIHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFbmFibGUgb3IgZGlzYWJsZSB0aGlzIGdhbWUgb2YgU2hpcGxvYWQugLGRlF2DulsMZml4Y2FyZ29tYXNzAAAAAABc1bJhBmdhdGhlcpcDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdhdGhlcgpzdW1tYXJ5OiAnR2F0aGVyIHJlc291cmNlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKR2F0aGVyIHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZ2F0aGVyYWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGEgZ2F0aGVyIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGdhdGhlcmVyIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgBUPI65qLJiC2dldGVsaWdpYmxlyAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZWxpZ2libGUKc3VtbWFyeTogJ0dldCBlbGlnaWJsZSByZXNvdXJjZSBpdGVtIElEcyBhdCBhIGxvY2F0aW9uIGFuZCBzdHJhdHVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgbGlzdCBvZiByZXNvdXJjZSBpdGVtIElEcyBlbGlnaWJsZSB0byBiZSBnYXRoZXJlZCBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMgYW5kIHN0cmF0dW0gZGVwdGguIEl0ZW1zIGFyZSBnYXRlZCBieSBib3RoIHRoZSBsb2NhdGlvbidzIHJlc291cmNlIHByb2ZpbGUgYW5kIHRoZSBkZXB0aCB0aHJlc2hvbGQgZm9yIGVhY2ggdGllci4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YagDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLgAATk6q7LJiCmdldGl0ZW1pZHOGAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtaWRzCnN1bW1hcnk6ICdHZXQgaXRlbSBpZCB0byBuYW1lIG1hcHBpbmdzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBtYXBwaW5nIG9mIGl0ZW0gaWQgY29uc3RhbnRzIHRvIHRoZWlyIGNhbm9uaWNhbCBzdHJpbmcgbmFtZXMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gcmVzb2x2ZSBudW1lcmljIGl0ZW0gaWRzIHRvIGh1bWFuLXJlYWRhYmxlIGlkZW50aWZpZXJzLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy6AVfVZquyyYgxnZXRpdGVtdHlwZXOIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRpdGVtdHlwZXMKc3VtbWFyeTogJ0dldCBpdGVtIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBpdGVtIHR5cGUgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAocmVzb3VyY2UsIGNvbXBvbmVudCwgbW9kdWxlLCBlbnRpdHkpLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRlY29kZSBpdGVtIHR5cGUgaWRlbnRpZmllcnMuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AsKo+JyqzYgtnZXRtb2R0eXBlc9YDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG1vZHR5cGVzCnN1bW1hcnk6ICdHZXQgbW9kdWxlIHR5cGUgZW51bSB2YWx1ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBtb2R1bGUgdHlwZSBlbnVtIHZhbHVlcyBhbmQgdGhlaXIgc3RyaW5nIG5hbWVzIChhbnksIGVuZ2luZSwgZ2VuZXJhdG9yLCBnYXRoZXJlciwgbG9hZGVyLCB3YXJwLCBjcmFmdGVyLCBsYXVuY2hlciwgc3RvcmFnZSwgaGF1bGVyKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgbW9kdWxlIHN1YnR5cGUgaWRlbnRpZmllcnMgYW5kIHNsb3QgY29tcGF0aWJpbGl0eS4AAFZRJyqzYgpnZXRtb2R1bGVzgAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZv8AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuAAC4yptYs2IJZ2V0cGxheWVy/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cGxheWVyCnN1bW1hcnk6ICdHZXQgcGxheWVyIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgcGxheWVyIGluY2x1ZGluZyBiYWxhbmNlLCBkZWJ0LCBuZXR3b3J0aCwgZW50aXR5IGNvdW50cywgYW5kIHByaWNpbmcgZm9yIG5leHQgcHVyY2hhc2VzLiBSZXR1cm5zIGlzX3BsYXllcj1mYWxzZSBpZiB0aGUgYWNjb3VudCBoYXMgbm90IGpvaW5lZCB0aGUgZ2FtZS4AAFDVIXWzYglnZXRyZWNpcGWmAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZWNpcGUKc3VtbWFyeTogJ0dldCBhIHNpbmdsZSBjcmFmdGluZyByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSByZWNpcGUgd2hvc2Ugb3V0cHV0IG1hdGNoZXMgdGhlIGdpdmVuIGl0ZW0gaWQsIGluY2x1ZGluZyBpdHMgaW5wdXRzLCBibGVuZCB3ZWlnaHRzLCBzdGF0IHNsb3RzLCBhbmQgcmVzb2x2ZWQgaXRlbSBtYXNzIGluZm8uIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZGlzcGxheSBjcmFmdGluZyByZXF1aXJlbWVudHMuAABW1SF1s2IKZ2V0cmVjaXBlc6wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4AAM4GYXWzYgpnZXRyZXNjYXRzngMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzY2F0cwpzdW1tYXJ5OiAnR2V0IHJlc291cmNlIGNhdGVnb3J5IGVudW0gdmFsdWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgcmVzb3VyY2UgY2F0ZWdvcnkgZW51bSB2YWx1ZXMgYW5kIHRoZWlyIHN0cmluZyBuYW1lcyAob3JlLCBnYXMsIHJlZ29saXRoLCBiaW9tYXNzLCBjcnlzdGFsKS4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkZWNvZGUgcmVzb3VyY2Ugc3VidHlwZSBpZGVudGlmaWVycy4AsNpXYXWzYgtnZXRyZXNlcnZlc/wDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc2VydmVzCnN1bW1hcnk6ICdHZXQgY3VycmVudCByZXNlcnZlIG1vZGlmaWNhdGlvbnMgYXQgYSBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyB0aGUgY2hhaW4ncyBtb2RpZmljYXRpb25zIHRvIGRlcml2ZWQgcmVzZXJ2ZXMgYXQgdGhlIGdpdmVuIGNvb3JkaW5hdGUgZm9yIHRoZSBjdXJyZW50IGVwb2NoIGFzIGEgbGlzdCBvZiB7c3RyYXR1bSwgcmVtYWluaW5nfSBwYWlycy4gU3RyYXRhIG5vdCBwcmVzZW50IGluIHRoZSByZXNwb25zZSB1c2UgdGhlaXIgZGVyaXZlZCBpbml0aWFsIHJlc2VydmUuIENvbXBvc2Ugd2l0aCBTREsgZGVyaXZhdGlvbiB0byBnZXQgdGhlIGZ1bGwgcGVyLWxvY2F0aW9uIHN0cmF0YSB2aWV3LoAVuppidbNiDGdldHJlc291cmNlc4cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlc291cmNlcwpzdW1tYXJ5OiAnR2V0IGFsbCByZXNvdXJjZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIHJlc291cmNlcywgaW5jbHVkaW5nIGVhY2ggcmVzb3VyY2UncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGdhdGhlcmFibGUgbWF0ZXJpYWxzLgAAADjTiLNiCGdldHNsb3RzuwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c2xvdHMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc2xvdCBsYXlvdXRzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgbW9kdWxlIHNsb3QgbGF5b3V0IGZvciBldmVyeSBlbnRpdHkgaXRlbSB0eXBlLCBsaXN0aW5nIHRoZSBvcmRlcmVkIHNsb3QgdHlwZXMgYXZhaWxhYmxlIGZvciBtb2R1bGUgaW5zdGFsbGF0aW9uLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRldGVybWluZSB3aGljaCBtb2R1bGUgdHlwZXMgYXJlIGNvbXBhdGlibGUgd2l0aCBhIGdpdmVuIGVudGl0eSBodWxsLgCA1NncjLNiCmdldHN0cmF0dW3SAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdHJhdHVtCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHJlc291cmNlIHN0cmF0dW0gZGF0YSBmb3IgYSBzcGVjaWZpYyBkZXB0aCBsYXllciBhdCBhIGNvb3JkaW5hdGUsIGluY2x1ZGluZyB0aGUgc3RyYXR1bSBzZWVkIGluZm8gYW5kIGRlcml2ZWQgcmVzb3VyY2Ugc3RhdHMugJW7RkqNs2IMZ2V0c3VtbWFyaWVz6AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3VtbWFyaWVzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHN1bW1hcmllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgbGlnaHR3ZWlnaHQgc3VtbWFyaWVzIG9mIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllciBpbmNsdWRpbmcgdHlwZSwgaWQsIG93bmVyLCBuYW1lLCBsb2NhdGlvbiwgYW5kIGlkbGUgc3RhdHVzLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4Aotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AgPouGpfddAppbml0aWFsaXplgAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdGlhbGl6ZQpzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAAIpd05C6CHJlY2hhcmdlzQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS7gs8tTNXyXugxyZWZyc2hlbnRpdHkAAAAAQO1IsboHcmVzb2x2ZdADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJlc29sdmUKc3VtbWFyeTogJ0NvbXBsZXRlIHNjaGVkdWxlZCB0YXNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVzb2x2ZSBjb21wbGV0ZWQgdGFza3MgaW4gYW4gZW50aXR5J3Mgc2NoZWR1bGUsIGFwcGx5aW5nIHRoZWlyIGVmZmVjdHMgKHJlY2hhcmdlIGVuZXJneSwgdXBkYXRlIGxvY2F0aW9uLCBsb2FkL3VubG9hZCBjYXJnbykuIElmIGNvdW50IGlzIHNwZWNpZmllZCwgcmVzb2x2ZSBleGFjdGx5IHRoYXQgbWFueSB0YXNrczsgb3RoZXJ3aXNlIHJlc29sdmUgYWxsIGNvbXBsZXRlZCB0YXNrcy4gRmFpbHMgaWYgY291bnQgZXhjZWVkcyB0aGUgbnVtYmVyIG9mIGNvbXBsZXRlZCB0YXNrcy4AAAAq6kSlvAhybW1vZHVsZbwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbW9kdWxlCnN1bW1hcnk6ICdSZW1vdmUgYSBtb2R1bGUgZnJvbSBhIHNsb3QnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSBhbiBpbnN0YWxsZWQgbW9kdWxlIGZyb20gYSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSBpcyByZXR1cm5lZCB0byBjYXJnby4gRmFpbHMgaWYgdGhlIGVudGl0eSBkb2VzIG5vdCBoYXZlIGVub3VnaCBjYXJnbyBjYXBhY2l0eSB0byBob2xkIHRoZSByZXR1cm5lZCBtb2R1bGUuAAAAbKG8prwIcm1uZnRjZmehAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW5mdGNmZwpzdW1tYXJ5OiAnUmVtb3ZlIE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgdGhlIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBtYXBwaW5nIGZvciB0aGUgc3BlY2lmaWVkIGl0ZW0gaWQgZnJvbSB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIEFmdGVyIHJlbW92YWwgdGhlIGl0ZW0gY2FuIG5vIGxvbmdlciBiZSB3cmFwcGVkIG9yIHVud3JhcHBlZCB1bnRpbCBhIG5ldyBtYXBwaW5nIGlzIHNldC4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAAAAkKPBBHNhbHTYAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzYWx0CnN1bW1hcnk6ICdBcHBlbmQgU2FsdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWRkIGFkZGl0aW9uYWwgc2FsdCB0byB0aGUgbmV4dCBlcG9jaCBzZWVkLgAAYAvlNbPCCXNldG5mdGNmZ8QDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNldG5mdGNmZwpzdW1tYXJ5OiAnU2V0IE5GVCB0ZW1wbGF0ZSBtYXBwaW5nIGZvciBhbiBpdGVtJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpCaW5kIGFuIGl0ZW0gaWQgdG8gYW4gQXRvbWljQXNzZXRzIHRlbXBsYXRlIGlkIGFuZCBzY2hlbWEgbmFtZS4gVXNlZCB0byBjb25maWd1cmUgaG93IHRoZSBjb250cmFjdCBtaW50cyBhbmQgcmVjb2duaXplcyBORlRzIGZvciBhIGdpdmVuIGl0ZW0uIEluc2VydHMgYSBuZXcgbWFwcGluZyBpZiBvbmUgZG9lcyBub3QgZXhpc3QsIG9yIHVwZGF0ZXMgdGhlIGV4aXN0aW5nIG1hcHBpbmcuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AQDRqq1sdxApza2lwcmV2ZWFsAAAAZdegyU3FCnNwYXduY2FyZ2/FAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bmNhcmdvCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJKCyNTJTcULc3Bhd25wYWNrZWTnAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnBhY2tlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGEgcGFja2VkIGVudGl0eSB3aXRoIGluc3RhbGxlZCBtb2R1bGVzIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSSkrhyU3FC3NwYXduc2VlZGVkzQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25zZWVkZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBzZWVkZWQgY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AAACexqrS1Ah1bmRlcGxveecELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHVuZGVwbG95CnN1bW1hcnk6ICdQYWNrIGEgZGVwbG95ZWQgZW50aXR5IGludG8gYSBob3N0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpQYWNrIGFuIGVudGl0eSBpbnRvIGEgaG9zdCBlbnRpdHkncyBjYXJnbyBhcyBhIHBhY2tlZC1lbnRpdHkgaXRlbS4gSG9zdCBhbmQgdGFyZ2V0IG11c3Qgc2hhcmUgdGhlIHNhbWUgb3duZXIgYW5kIGNvb3JkaW5hdGVzLCB0aGUgaG9zdCBtdXN0IGhhdmUgbG9hZGVycyBhbmQgZW5vdWdoIGNhcGFjaXR5IGZvciB0aGUgcGFja2VkIG1hc3MsIGFuZCB0aGUgdGFyZ2V0IG11c3QgYmUgaWRsZSB3aXRoIGVtcHR5IGNhcmdvLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGFuZCBzY2hlZHVsZXMgdW5kZXBsb3kgdGFza3Mgb24gYm90aCBlbnRpdGllczsgb24gcmVzb2x1dGlvbiB0aGUgdGFyZ2V0IGlzIGVyYXNlZCBhbmQgdGhlIHBhY2tlZCBlbnRpdHkgaXMgYWRkZWQgdG8gdGhlIGhvc3QncyBjYXJnby4gSW52ZXJzZSBvZiBkZXBsb3kuAAAAAABQr+EEd2FycJ8DLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdhcnAKc3VtbWFyeTogJ1dhcnAgdG8gYSBkZXN0aW5hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFudGx5IHRlbGVwb3J0IGFuIGVudGl0eSB0byBhIGRlc3RpbmF0aW9uIHN5c3RlbS4gUmVxdWlyZXMgd2FycCBjYXBhYmlsaXR5LCBmdWxsIGVuZXJneSwgZW1wdHkgY2FyZ28sIGFuZCBhbiBlbXB0eSBzY2hlZHVsZS4gVGhlIGRlc3RpbmF0aW9uIG11c3QgYmUgYSB2YWxpZCBzeXN0ZW0gd2l0aGluIHdhcnAgcmFuZ2UuIFJlc29sdmVzIGltbWVkaWF0ZWx5IGFzIGEgemVyby1kdXJhdGlvbiB0YXNrLgAAAAAAoKrjBHdpcGWyAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3aXBlCnN1bW1hcnk6ICdERUJVRzogd2lwZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAFDN5QR3cmFw/gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcApzdW1tYXJ5OiAnV3JhcCBjYXJnbyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhIHF1YW50aXR5IG9mIGNhcmdvIGZyb20gYW4gZW50aXR5IGludG8gYW4gQXRvbWljQXNzZXRzIE5GVCBtaW50ZWQgdG8gdGhlIHNwZWNpZmllZCBvd25lci4gVGhlIGVudGl0eSBtdXN0IGJlIGF0IGEgbmV4dXMsIGhhdmUgbG9hZGVycywgYW5kIGNvbnRhaW4gZW5vdWdoIG9mIHRoZSByZXF1ZXN0ZWQgY2FyZ28uIFNjaGVkdWxlcyBhIHdyYXAgdGFzayB0aGF0LCBvbiByZXNvbHV0aW9uLCByZW1vdmVzIHRoZSBjYXJnbyBmcm9tIHRoZSBlbnRpdHkgYW5kIG1pbnRzIHRoZSBORlQgdXNpbmcgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyZWQgZm9yIHRoYXQgaXRlbSBpZC4AgM8uT1XN5Qp3cmFwZW50aXR55gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcGVudGl0eQpzdW1tYXJ5OiAnV3JhcCBhIGRlcGxveWVkIGVudGl0eSBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhbiBlbnRpdHkgaW50byBhbiBBdG9taWNBc3NldHMgTkZUIG1pbnRlZCB0byBpdHMgb3duZXIuIFRoZSBlbnRpdHkgbXVzdCBiZSBhdCBhIG5leHVzLCBpZGxlIHdpdGggZW1wdHkgY2FyZ28sIGFuZCBoYXZlIGFuIG5mdGNvbmZpZyBtYXBwaW5nIGZvciBpdHMgaXRlbSBpZC4gU2NoZWR1bGVzIGEgd3JhcCB0YXNrIHRoYXQsIG9uIHJlc29sdXRpb24sIGVyYXNlcyB0aGUgZW50aXR5IGFuZCBtaW50cyB0aGUgTkZUIHByZXNlcnZpbmcgaXRzIHN0YXRzIGFuZCBpbnN0YWxsZWQgbW9kdWxlcy4IAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AAAAAPjs8lQDaTY0AAAKZW50aXR5X3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAAAJVNxgNpNjQAAAlzdGF0ZV9yb3cAAAAAAKyqzwNpNjQAAAl0eXBlc19yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAKAAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAADbtIpUoMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAABgbk2KsmILZ2FtZV9jb25maWcAVDyOuaiyYgh1aW50MTZbXQCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwBMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAATk6q7LJiD2l0ZW1faWRzX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm+AVfVZquyyYgtlbnVtX3Jlc3VsdAAmddkgGrNiDWxvY2F0aW9uX2luZm8AgMkmIRqzYhBsb2NhdGlvbl9kZXJpdmVkALCqPicqs2ILZW51bV9yZXN1bHQAAFZRJyqzYg5tb2R1bGVzX3Jlc3VsdAAA8OcaNbNiC25lYXJieV9pbmZvAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mbwAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHQAAM4GYXWzYgtlbnVtX3Jlc3VsdACw2ldhdbNiE3N0cmF0dW1fcmVtYWluaW5nW12AFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AAAAONOIs2IVZW50aXR5X2xheW91dHNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAAACexqrS1Ax0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHMAAAAAAFDN5Qx0YXNrX3Jlc3VsdHMAgM8uT1XN5Qx0YXNrX3Jlc3VsdHM=');
|
|
209
221
|
const abi = ABI.from(abiBlob);
|
|
210
222
|
var Types;
|
|
211
223
|
(function (Types) {
|
|
212
|
-
let
|
|
224
|
+
let packed_module = class packed_module extends Struct {
|
|
213
225
|
};
|
|
214
226
|
__decorate([
|
|
215
|
-
Struct.field(
|
|
216
|
-
],
|
|
227
|
+
Struct.field(UInt16)
|
|
228
|
+
], packed_module.prototype, "item_id", void 0);
|
|
217
229
|
__decorate([
|
|
218
230
|
Struct.field(UInt64)
|
|
219
|
-
],
|
|
231
|
+
], packed_module.prototype, "stats", void 0);
|
|
232
|
+
packed_module = __decorate([
|
|
233
|
+
Struct.type('packed_module')
|
|
234
|
+
], packed_module);
|
|
235
|
+
Types.packed_module = packed_module;
|
|
236
|
+
let module_entry = class module_entry extends Struct {
|
|
237
|
+
};
|
|
220
238
|
__decorate([
|
|
221
239
|
Struct.field(UInt8)
|
|
222
|
-
],
|
|
240
|
+
], module_entry.prototype, "type", void 0);
|
|
241
|
+
__decorate([
|
|
242
|
+
Struct.field(packed_module, { optional: true })
|
|
243
|
+
], module_entry.prototype, "installed", void 0);
|
|
244
|
+
module_entry = __decorate([
|
|
245
|
+
Struct.type('module_entry')
|
|
246
|
+
], module_entry);
|
|
247
|
+
Types.module_entry = module_entry;
|
|
248
|
+
let cargo_ref = class cargo_ref extends Struct {
|
|
249
|
+
};
|
|
250
|
+
__decorate([
|
|
251
|
+
Struct.field(UInt16)
|
|
252
|
+
], cargo_ref.prototype, "item_id", void 0);
|
|
223
253
|
__decorate([
|
|
224
254
|
Struct.field(UInt64)
|
|
225
|
-
],
|
|
255
|
+
], cargo_ref.prototype, "stats", void 0);
|
|
256
|
+
__decorate([
|
|
257
|
+
Struct.field(module_entry, { array: true })
|
|
258
|
+
], cargo_ref.prototype, "modules", void 0);
|
|
259
|
+
cargo_ref = __decorate([
|
|
260
|
+
Struct.type('cargo_ref')
|
|
261
|
+
], cargo_ref);
|
|
262
|
+
Types.cargo_ref = cargo_ref;
|
|
263
|
+
let addmodule = class addmodule extends Struct {
|
|
264
|
+
};
|
|
226
265
|
__decorate([
|
|
227
266
|
Struct.field(UInt64)
|
|
228
|
-
], addmodule.prototype, "
|
|
267
|
+
], addmodule.prototype, "entity_id", void 0);
|
|
268
|
+
__decorate([
|
|
269
|
+
Struct.field(UInt8)
|
|
270
|
+
], addmodule.prototype, "module_index", void 0);
|
|
271
|
+
__decorate([
|
|
272
|
+
Struct.field(cargo_ref)
|
|
273
|
+
], addmodule.prototype, "module_ref", void 0);
|
|
274
|
+
__decorate([
|
|
275
|
+
Struct.field(cargo_ref, { optional: true })
|
|
276
|
+
], addmodule.prototype, "target_ref", void 0);
|
|
229
277
|
addmodule = __decorate([
|
|
230
278
|
Struct.type('addmodule')
|
|
231
279
|
], addmodule);
|
|
@@ -257,53 +305,26 @@ var Types;
|
|
|
257
305
|
Struct.type('advance')
|
|
258
306
|
], advance);
|
|
259
307
|
Types.advance = advance;
|
|
260
|
-
let packed_module = class packed_module extends Struct {
|
|
261
|
-
};
|
|
262
|
-
__decorate([
|
|
263
|
-
Struct.field(UInt16)
|
|
264
|
-
], packed_module.prototype, "item_id", void 0);
|
|
265
|
-
__decorate([
|
|
266
|
-
Struct.field(UInt64)
|
|
267
|
-
], packed_module.prototype, "stats", void 0);
|
|
268
|
-
packed_module = __decorate([
|
|
269
|
-
Struct.type('packed_module')
|
|
270
|
-
], packed_module);
|
|
271
|
-
Types.packed_module = packed_module;
|
|
272
|
-
let module_entry = class module_entry extends Struct {
|
|
273
|
-
};
|
|
274
|
-
__decorate([
|
|
275
|
-
Struct.field(UInt8)
|
|
276
|
-
], module_entry.prototype, "type", void 0);
|
|
277
|
-
__decorate([
|
|
278
|
-
Struct.field(packed_module, { optional: true })
|
|
279
|
-
], module_entry.prototype, "installed", void 0);
|
|
280
|
-
module_entry = __decorate([
|
|
281
|
-
Struct.type('module_entry')
|
|
282
|
-
], module_entry);
|
|
283
|
-
Types.module_entry = module_entry;
|
|
284
308
|
let cargo_item = class cargo_item extends Struct {
|
|
285
309
|
};
|
|
286
310
|
__decorate([
|
|
287
311
|
Struct.field(UInt16)
|
|
288
312
|
], cargo_item.prototype, "item_id", void 0);
|
|
289
|
-
__decorate([
|
|
290
|
-
Struct.field(UInt32)
|
|
291
|
-
], cargo_item.prototype, "quantity", void 0);
|
|
292
313
|
__decorate([
|
|
293
314
|
Struct.field(UInt64)
|
|
294
315
|
], cargo_item.prototype, "stats", void 0);
|
|
295
316
|
__decorate([
|
|
296
317
|
Struct.field(module_entry, { array: true })
|
|
297
318
|
], cargo_item.prototype, "modules", void 0);
|
|
319
|
+
__decorate([
|
|
320
|
+
Struct.field(UInt32)
|
|
321
|
+
], cargo_item.prototype, "quantity", void 0);
|
|
298
322
|
cargo_item = __decorate([
|
|
299
323
|
Struct.type('cargo_item')
|
|
300
324
|
], cargo_item);
|
|
301
325
|
Types.cargo_item = cargo_item;
|
|
302
326
|
let blend = class blend extends Struct {
|
|
303
327
|
};
|
|
304
|
-
__decorate([
|
|
305
|
-
Struct.field(Name)
|
|
306
|
-
], blend.prototype, "entity_type", void 0);
|
|
307
328
|
__decorate([
|
|
308
329
|
Struct.field(UInt64)
|
|
309
330
|
], blend.prototype, "id", void 0);
|
|
@@ -316,9 +337,6 @@ var Types;
|
|
|
316
337
|
Types.blend = blend;
|
|
317
338
|
let cancel = class cancel extends Struct {
|
|
318
339
|
};
|
|
319
|
-
__decorate([
|
|
320
|
-
Struct.field(Name)
|
|
321
|
-
], cancel.prototype, "entity_type", void 0);
|
|
322
340
|
__decorate([
|
|
323
341
|
Struct.field(UInt64)
|
|
324
342
|
], cancel.prototype, "id", void 0);
|
|
@@ -389,6 +407,27 @@ var Types;
|
|
|
389
407
|
Struct.type('cargo_row')
|
|
390
408
|
], cargo_row);
|
|
391
409
|
Types.cargo_row = cargo_row;
|
|
410
|
+
let cargo_view = class cargo_view extends Struct {
|
|
411
|
+
};
|
|
412
|
+
__decorate([
|
|
413
|
+
Struct.field(UInt16)
|
|
414
|
+
], cargo_view.prototype, "item_id", void 0);
|
|
415
|
+
__decorate([
|
|
416
|
+
Struct.field(UInt64)
|
|
417
|
+
], cargo_view.prototype, "stats", void 0);
|
|
418
|
+
__decorate([
|
|
419
|
+
Struct.field(module_entry, { array: true })
|
|
420
|
+
], cargo_view.prototype, "modules", void 0);
|
|
421
|
+
__decorate([
|
|
422
|
+
Struct.field(UInt32)
|
|
423
|
+
], cargo_view.prototype, "quantity", void 0);
|
|
424
|
+
__decorate([
|
|
425
|
+
Struct.field(UInt64)
|
|
426
|
+
], cargo_view.prototype, "id", void 0);
|
|
427
|
+
cargo_view = __decorate([
|
|
428
|
+
Struct.type('cargo_view')
|
|
429
|
+
], cargo_view);
|
|
430
|
+
Types.cargo_view = cargo_view;
|
|
392
431
|
let claimstarter = class claimstarter extends Struct {
|
|
393
432
|
};
|
|
394
433
|
__decorate([
|
|
@@ -512,83 +551,8 @@ var Types;
|
|
|
512
551
|
Struct.type('coordinates')
|
|
513
552
|
], coordinates);
|
|
514
553
|
Types.coordinates = coordinates;
|
|
515
|
-
let task = class task extends Struct {
|
|
516
|
-
};
|
|
517
|
-
__decorate([
|
|
518
|
-
Struct.field(UInt8)
|
|
519
|
-
], task.prototype, "type", void 0);
|
|
520
|
-
__decorate([
|
|
521
|
-
Struct.field(UInt32)
|
|
522
|
-
], task.prototype, "duration", void 0);
|
|
523
|
-
__decorate([
|
|
524
|
-
Struct.field(UInt8)
|
|
525
|
-
], task.prototype, "cancelable", void 0);
|
|
526
|
-
__decorate([
|
|
527
|
-
Struct.field(coordinates, { optional: true })
|
|
528
|
-
], task.prototype, "coordinates", void 0);
|
|
529
|
-
__decorate([
|
|
530
|
-
Struct.field(cargo_item, { array: true })
|
|
531
|
-
], task.prototype, "cargo", void 0);
|
|
532
|
-
__decorate([
|
|
533
|
-
Struct.field(entity_ref, { optional: true })
|
|
534
|
-
], task.prototype, "entitytarget", void 0);
|
|
535
|
-
__decorate([
|
|
536
|
-
Struct.field(UInt64, { optional: true })
|
|
537
|
-
], task.prototype, "entitygroup", void 0);
|
|
538
|
-
__decorate([
|
|
539
|
-
Struct.field(UInt16, { optional: true })
|
|
540
|
-
], task.prototype, "energy_cost", void 0);
|
|
541
|
-
task = __decorate([
|
|
542
|
-
Struct.type('task')
|
|
543
|
-
], task);
|
|
544
|
-
Types.task = task;
|
|
545
|
-
let schedule = class schedule extends Struct {
|
|
546
|
-
};
|
|
547
|
-
__decorate([
|
|
548
|
-
Struct.field(TimePoint)
|
|
549
|
-
], schedule.prototype, "started", void 0);
|
|
550
|
-
__decorate([
|
|
551
|
-
Struct.field(task, { array: true })
|
|
552
|
-
], schedule.prototype, "tasks", void 0);
|
|
553
|
-
schedule = __decorate([
|
|
554
|
-
Struct.type('schedule')
|
|
555
|
-
], schedule);
|
|
556
|
-
Types.schedule = schedule;
|
|
557
|
-
let container_row = class container_row extends Struct {
|
|
558
|
-
};
|
|
559
|
-
__decorate([
|
|
560
|
-
Struct.field(UInt64)
|
|
561
|
-
], container_row.prototype, "id", void 0);
|
|
562
|
-
__decorate([
|
|
563
|
-
Struct.field(Name)
|
|
564
|
-
], container_row.prototype, "owner", void 0);
|
|
565
|
-
__decorate([
|
|
566
|
-
Struct.field('string')
|
|
567
|
-
], container_row.prototype, "name", void 0);
|
|
568
|
-
__decorate([
|
|
569
|
-
Struct.field(coordinates)
|
|
570
|
-
], container_row.prototype, "coordinates", void 0);
|
|
571
|
-
__decorate([
|
|
572
|
-
Struct.field(UInt32)
|
|
573
|
-
], container_row.prototype, "hullmass", void 0);
|
|
574
|
-
__decorate([
|
|
575
|
-
Struct.field(UInt32)
|
|
576
|
-
], container_row.prototype, "capacity", void 0);
|
|
577
|
-
__decorate([
|
|
578
|
-
Struct.field(UInt32)
|
|
579
|
-
], container_row.prototype, "cargomass", void 0);
|
|
580
|
-
__decorate([
|
|
581
|
-
Struct.field(schedule, { optional: true })
|
|
582
|
-
], container_row.prototype, "schedule", void 0);
|
|
583
|
-
container_row = __decorate([
|
|
584
|
-
Struct.type('container_row')
|
|
585
|
-
], container_row);
|
|
586
|
-
Types.container_row = container_row;
|
|
587
554
|
let craft = class craft extends Struct {
|
|
588
555
|
};
|
|
589
|
-
__decorate([
|
|
590
|
-
Struct.field(Name)
|
|
591
|
-
], craft.prototype, "entity_type", void 0);
|
|
592
556
|
__decorate([
|
|
593
557
|
Struct.field(UInt64)
|
|
594
558
|
], craft.prototype, "id", void 0);
|
|
@@ -638,20 +602,23 @@ var Types;
|
|
|
638
602
|
Struct.type('createentity')
|
|
639
603
|
], createentity);
|
|
640
604
|
Types.createentity = createentity;
|
|
641
|
-
let
|
|
605
|
+
let demolish = class demolish extends Struct {
|
|
642
606
|
};
|
|
643
607
|
__decorate([
|
|
644
|
-
Struct.field(
|
|
645
|
-
],
|
|
608
|
+
Struct.field(UInt64)
|
|
609
|
+
], demolish.prototype, "entity_id", void 0);
|
|
610
|
+
demolish = __decorate([
|
|
611
|
+
Struct.type('demolish')
|
|
612
|
+
], demolish);
|
|
613
|
+
Types.demolish = demolish;
|
|
614
|
+
let deploy = class deploy extends Struct {
|
|
615
|
+
};
|
|
646
616
|
__decorate([
|
|
647
617
|
Struct.field(UInt64)
|
|
648
618
|
], deploy.prototype, "id", void 0);
|
|
649
619
|
__decorate([
|
|
650
|
-
Struct.field(
|
|
651
|
-
], deploy.prototype, "
|
|
652
|
-
__decorate([
|
|
653
|
-
Struct.field(UInt64)
|
|
654
|
-
], deploy.prototype, "stats", void 0);
|
|
620
|
+
Struct.field(cargo_ref)
|
|
621
|
+
], deploy.prototype, "ref", void 0);
|
|
655
622
|
deploy = __decorate([
|
|
656
623
|
Struct.type('deploy')
|
|
657
624
|
], deploy);
|
|
@@ -776,6 +743,48 @@ var Types;
|
|
|
776
743
|
Struct.type('warp_stats')
|
|
777
744
|
], warp_stats);
|
|
778
745
|
Types.warp_stats = warp_stats;
|
|
746
|
+
let task = class task extends Struct {
|
|
747
|
+
};
|
|
748
|
+
__decorate([
|
|
749
|
+
Struct.field(UInt8)
|
|
750
|
+
], task.prototype, "type", void 0);
|
|
751
|
+
__decorate([
|
|
752
|
+
Struct.field(UInt32)
|
|
753
|
+
], task.prototype, "duration", void 0);
|
|
754
|
+
__decorate([
|
|
755
|
+
Struct.field(UInt8)
|
|
756
|
+
], task.prototype, "cancelable", void 0);
|
|
757
|
+
__decorate([
|
|
758
|
+
Struct.field(coordinates, { optional: true })
|
|
759
|
+
], task.prototype, "coordinates", void 0);
|
|
760
|
+
__decorate([
|
|
761
|
+
Struct.field(cargo_item, { array: true })
|
|
762
|
+
], task.prototype, "cargo", void 0);
|
|
763
|
+
__decorate([
|
|
764
|
+
Struct.field(entity_ref, { optional: true })
|
|
765
|
+
], task.prototype, "entitytarget", void 0);
|
|
766
|
+
__decorate([
|
|
767
|
+
Struct.field(UInt64, { optional: true })
|
|
768
|
+
], task.prototype, "entitygroup", void 0);
|
|
769
|
+
__decorate([
|
|
770
|
+
Struct.field(UInt16, { optional: true })
|
|
771
|
+
], task.prototype, "energy_cost", void 0);
|
|
772
|
+
task = __decorate([
|
|
773
|
+
Struct.type('task')
|
|
774
|
+
], task);
|
|
775
|
+
Types.task = task;
|
|
776
|
+
let schedule = class schedule extends Struct {
|
|
777
|
+
};
|
|
778
|
+
__decorate([
|
|
779
|
+
Struct.field(TimePoint)
|
|
780
|
+
], schedule.prototype, "started", void 0);
|
|
781
|
+
__decorate([
|
|
782
|
+
Struct.field(task, { array: true })
|
|
783
|
+
], schedule.prototype, "tasks", void 0);
|
|
784
|
+
schedule = __decorate([
|
|
785
|
+
Struct.type('schedule')
|
|
786
|
+
], schedule);
|
|
787
|
+
Types.schedule = schedule;
|
|
779
788
|
let entity_info = class entity_info extends Struct {
|
|
780
789
|
};
|
|
781
790
|
__decorate([
|
|
@@ -797,7 +806,7 @@ var Types;
|
|
|
797
806
|
Struct.field(UInt32)
|
|
798
807
|
], entity_info.prototype, "cargomass", void 0);
|
|
799
808
|
__decorate([
|
|
800
|
-
Struct.field(
|
|
809
|
+
Struct.field(cargo_view, { array: true })
|
|
801
810
|
], entity_info.prototype, "cargo", void 0);
|
|
802
811
|
__decorate([
|
|
803
812
|
Struct.field(loader_stats, { optional: true })
|
|
@@ -862,6 +871,9 @@ var Types;
|
|
|
862
871
|
__decorate([
|
|
863
872
|
Struct.field(UInt8)
|
|
864
873
|
], slot_def.prototype, "type", void 0);
|
|
874
|
+
__decorate([
|
|
875
|
+
Struct.field(UInt16)
|
|
876
|
+
], slot_def.prototype, "output_pct", void 0);
|
|
865
877
|
slot_def = __decorate([
|
|
866
878
|
Struct.type('slot_def')
|
|
867
879
|
], slot_def);
|
|
@@ -887,6 +899,72 @@ var Types;
|
|
|
887
899
|
Struct.type('entity_layouts_result')
|
|
888
900
|
], entity_layouts_result);
|
|
889
901
|
Types.entity_layouts_result = entity_layouts_result;
|
|
902
|
+
let entity_row = class entity_row extends Struct {
|
|
903
|
+
};
|
|
904
|
+
__decorate([
|
|
905
|
+
Struct.field(UInt64)
|
|
906
|
+
], entity_row.prototype, "id", void 0);
|
|
907
|
+
__decorate([
|
|
908
|
+
Struct.field(Name)
|
|
909
|
+
], entity_row.prototype, "owner", void 0);
|
|
910
|
+
__decorate([
|
|
911
|
+
Struct.field(Name)
|
|
912
|
+
], entity_row.prototype, "kind", void 0);
|
|
913
|
+
__decorate([
|
|
914
|
+
Struct.field('string')
|
|
915
|
+
], entity_row.prototype, "name", void 0);
|
|
916
|
+
__decorate([
|
|
917
|
+
Struct.field(UInt64)
|
|
918
|
+
], entity_row.prototype, "stats", void 0);
|
|
919
|
+
__decorate([
|
|
920
|
+
Struct.field(coordinates)
|
|
921
|
+
], entity_row.prototype, "coordinates", void 0);
|
|
922
|
+
__decorate([
|
|
923
|
+
Struct.field(UInt32, { optional: true })
|
|
924
|
+
], entity_row.prototype, "hullmass", void 0);
|
|
925
|
+
__decorate([
|
|
926
|
+
Struct.field(UInt32, { optional: true })
|
|
927
|
+
], entity_row.prototype, "capacity", void 0);
|
|
928
|
+
__decorate([
|
|
929
|
+
Struct.field(UInt16, { optional: true })
|
|
930
|
+
], entity_row.prototype, "energy", void 0);
|
|
931
|
+
__decorate([
|
|
932
|
+
Struct.field(UInt32)
|
|
933
|
+
], entity_row.prototype, "cargomass", void 0);
|
|
934
|
+
__decorate([
|
|
935
|
+
Struct.field(movement_stats, { optional: true })
|
|
936
|
+
], entity_row.prototype, "engines", void 0);
|
|
937
|
+
__decorate([
|
|
938
|
+
Struct.field(energy_stats, { optional: true })
|
|
939
|
+
], entity_row.prototype, "generator", void 0);
|
|
940
|
+
__decorate([
|
|
941
|
+
Struct.field(loader_stats, { optional: true })
|
|
942
|
+
], entity_row.prototype, "loaders", void 0);
|
|
943
|
+
__decorate([
|
|
944
|
+
Struct.field(gatherer_stats, { optional: true })
|
|
945
|
+
], entity_row.prototype, "gatherer", void 0);
|
|
946
|
+
__decorate([
|
|
947
|
+
Struct.field(warp_stats, { optional: true })
|
|
948
|
+
], entity_row.prototype, "warp", void 0);
|
|
949
|
+
__decorate([
|
|
950
|
+
Struct.field(crafter_stats, { optional: true })
|
|
951
|
+
], entity_row.prototype, "crafter", void 0);
|
|
952
|
+
__decorate([
|
|
953
|
+
Struct.field(hauler_stats, { optional: true })
|
|
954
|
+
], entity_row.prototype, "hauler", void 0);
|
|
955
|
+
__decorate([
|
|
956
|
+
Struct.field(module_entry, { array: true })
|
|
957
|
+
], entity_row.prototype, "modules", void 0);
|
|
958
|
+
__decorate([
|
|
959
|
+
Struct.field(schedule, { optional: true })
|
|
960
|
+
], entity_row.prototype, "schedule", void 0);
|
|
961
|
+
__decorate([
|
|
962
|
+
Struct.field(UInt16)
|
|
963
|
+
], entity_row.prototype, "item_id", void 0);
|
|
964
|
+
entity_row = __decorate([
|
|
965
|
+
Struct.type('entity_row')
|
|
966
|
+
], entity_row);
|
|
967
|
+
Types.entity_row = entity_row;
|
|
890
968
|
let entity_summary = class entity_summary extends Struct {
|
|
891
969
|
};
|
|
892
970
|
__decorate([
|
|
@@ -968,14 +1046,23 @@ var Types;
|
|
|
968
1046
|
Struct.type('enum_result')
|
|
969
1047
|
], enum_result);
|
|
970
1048
|
Types.enum_result = enum_result;
|
|
1049
|
+
let fixcargomass = class fixcargomass extends Struct {
|
|
1050
|
+
};
|
|
1051
|
+
__decorate([
|
|
1052
|
+
Struct.field(UInt64)
|
|
1053
|
+
], fixcargomass.prototype, "entity_id", void 0);
|
|
1054
|
+
fixcargomass = __decorate([
|
|
1055
|
+
Struct.type('fixcargomass')
|
|
1056
|
+
], fixcargomass);
|
|
1057
|
+
Types.fixcargomass = fixcargomass;
|
|
971
1058
|
let gather = class gather extends Struct {
|
|
972
1059
|
};
|
|
973
1060
|
__decorate([
|
|
974
|
-
Struct.field(
|
|
975
|
-
], gather.prototype, "
|
|
1061
|
+
Struct.field(UInt64)
|
|
1062
|
+
], gather.prototype, "source_id", void 0);
|
|
976
1063
|
__decorate([
|
|
977
|
-
Struct.field(
|
|
978
|
-
], gather.prototype, "
|
|
1064
|
+
Struct.field(UInt64)
|
|
1065
|
+
], gather.prototype, "destination_id", void 0);
|
|
979
1066
|
__decorate([
|
|
980
1067
|
Struct.field(UInt16)
|
|
981
1068
|
], gather.prototype, "stratum", void 0);
|
|
@@ -992,6 +1079,18 @@ var Types;
|
|
|
992
1079
|
Struct.type('getconfig')
|
|
993
1080
|
], getconfig);
|
|
994
1081
|
Types.getconfig = getconfig;
|
|
1082
|
+
let geteligible = class geteligible extends Struct {
|
|
1083
|
+
};
|
|
1084
|
+
__decorate([
|
|
1085
|
+
Struct.field(coordinates)
|
|
1086
|
+
], geteligible.prototype, "coords", void 0);
|
|
1087
|
+
__decorate([
|
|
1088
|
+
Struct.field(UInt16)
|
|
1089
|
+
], geteligible.prototype, "stratum", void 0);
|
|
1090
|
+
geteligible = __decorate([
|
|
1091
|
+
Struct.type('geteligible')
|
|
1092
|
+
], geteligible);
|
|
1093
|
+
Types.geteligible = geteligible;
|
|
995
1094
|
let getentities = class getentities extends Struct {
|
|
996
1095
|
};
|
|
997
1096
|
__decorate([
|
|
@@ -1006,9 +1105,6 @@ var Types;
|
|
|
1006
1105
|
Types.getentities = getentities;
|
|
1007
1106
|
let getentity = class getentity extends Struct {
|
|
1008
1107
|
};
|
|
1009
|
-
__decorate([
|
|
1010
|
-
Struct.field(Name)
|
|
1011
|
-
], getentity.prototype, "entity_type", void 0);
|
|
1012
1108
|
__decorate([
|
|
1013
1109
|
Struct.field(UInt64)
|
|
1014
1110
|
], getentity.prototype, "entity_id", void 0);
|
|
@@ -1078,9 +1174,6 @@ var Types;
|
|
|
1078
1174
|
Types.getmodules = getmodules;
|
|
1079
1175
|
let getnearby = class getnearby extends Struct {
|
|
1080
1176
|
};
|
|
1081
|
-
__decorate([
|
|
1082
|
-
Struct.field(Name)
|
|
1083
|
-
], getnearby.prototype, "entity_type", void 0);
|
|
1084
1177
|
__decorate([
|
|
1085
1178
|
Struct.field(UInt64)
|
|
1086
1179
|
], getnearby.prototype, "entity_id", void 0);
|
|
@@ -1220,15 +1313,15 @@ var Types;
|
|
|
1220
1313
|
Struct.type('hash512')
|
|
1221
1314
|
], hash512);
|
|
1222
1315
|
Types.hash512 = hash512;
|
|
1223
|
-
let
|
|
1316
|
+
let initialize = class initialize extends Struct {
|
|
1224
1317
|
};
|
|
1225
1318
|
__decorate([
|
|
1226
1319
|
Struct.field(Checksum256)
|
|
1227
|
-
],
|
|
1228
|
-
|
|
1229
|
-
Struct.type('
|
|
1230
|
-
],
|
|
1231
|
-
Types.
|
|
1320
|
+
], initialize.prototype, "seed", void 0);
|
|
1321
|
+
initialize = __decorate([
|
|
1322
|
+
Struct.type('initialize')
|
|
1323
|
+
], initialize);
|
|
1324
|
+
Types.initialize = initialize;
|
|
1232
1325
|
let item_id_pair = class item_id_pair extends Struct {
|
|
1233
1326
|
};
|
|
1234
1327
|
__decorate([
|
|
@@ -1388,29 +1481,11 @@ var Types;
|
|
|
1388
1481
|
Struct.type('location_static')
|
|
1389
1482
|
], location_static);
|
|
1390
1483
|
Types.location_static = location_static;
|
|
1391
|
-
let
|
|
1392
|
-
};
|
|
1393
|
-
__decorate([
|
|
1394
|
-
Struct.field('bool')
|
|
1395
|
-
], location_epoch.prototype, "active", void 0);
|
|
1396
|
-
__decorate([
|
|
1397
|
-
Struct.field(UInt8)
|
|
1398
|
-
], location_epoch.prototype, "seed0", void 0);
|
|
1399
|
-
__decorate([
|
|
1400
|
-
Struct.field(UInt8)
|
|
1401
|
-
], location_epoch.prototype, "seed1", void 0);
|
|
1402
|
-
location_epoch = __decorate([
|
|
1403
|
-
Struct.type('location_epoch')
|
|
1404
|
-
], location_epoch);
|
|
1405
|
-
Types.location_epoch = location_epoch;
|
|
1406
|
-
let location_derived = class location_derived extends Struct {
|
|
1484
|
+
let location_derived = class location_derived extends Struct {
|
|
1407
1485
|
};
|
|
1408
1486
|
__decorate([
|
|
1409
1487
|
Struct.field(location_static)
|
|
1410
1488
|
], location_derived.prototype, "static_props", void 0);
|
|
1411
|
-
__decorate([
|
|
1412
|
-
Struct.field(location_epoch)
|
|
1413
|
-
], location_derived.prototype, "epoch_props", void 0);
|
|
1414
1489
|
__decorate([
|
|
1415
1490
|
Struct.field(UInt16)
|
|
1416
1491
|
], location_derived.prototype, "size", void 0);
|
|
@@ -1430,30 +1505,6 @@ var Types;
|
|
|
1430
1505
|
Struct.type('location_info')
|
|
1431
1506
|
], location_info);
|
|
1432
1507
|
Types.location_info = location_info;
|
|
1433
|
-
let location_row = class location_row extends Struct {
|
|
1434
|
-
};
|
|
1435
|
-
__decorate([
|
|
1436
|
-
Struct.field(UInt64)
|
|
1437
|
-
], location_row.prototype, "id", void 0);
|
|
1438
|
-
__decorate([
|
|
1439
|
-
Struct.field(Name)
|
|
1440
|
-
], location_row.prototype, "owner", void 0);
|
|
1441
|
-
__decorate([
|
|
1442
|
-
Struct.field(coordinates)
|
|
1443
|
-
], location_row.prototype, "coordinates", void 0);
|
|
1444
|
-
__decorate([
|
|
1445
|
-
Struct.field(UInt32)
|
|
1446
|
-
], location_row.prototype, "cargomass", void 0);
|
|
1447
|
-
__decorate([
|
|
1448
|
-
Struct.field(cargo_item, { array: true })
|
|
1449
|
-
], location_row.prototype, "cargo", void 0);
|
|
1450
|
-
__decorate([
|
|
1451
|
-
Struct.field(schedule, { optional: true })
|
|
1452
|
-
], location_row.prototype, "schedule", void 0);
|
|
1453
|
-
location_row = __decorate([
|
|
1454
|
-
Struct.type('location_row')
|
|
1455
|
-
], location_row);
|
|
1456
|
-
Types.location_row = location_row;
|
|
1457
1508
|
let module_info = class module_info extends Struct {
|
|
1458
1509
|
};
|
|
1459
1510
|
__decorate([
|
|
@@ -1520,24 +1571,6 @@ var Types;
|
|
|
1520
1571
|
Struct.type('nearby_info')
|
|
1521
1572
|
], nearby_info);
|
|
1522
1573
|
Types.nearby_info = nearby_info;
|
|
1523
|
-
let nexus_row = class nexus_row extends Struct {
|
|
1524
|
-
};
|
|
1525
|
-
__decorate([
|
|
1526
|
-
Struct.field(UInt64)
|
|
1527
|
-
], nexus_row.prototype, "id", void 0);
|
|
1528
|
-
__decorate([
|
|
1529
|
-
Struct.field(Name)
|
|
1530
|
-
], nexus_row.prototype, "owner", void 0);
|
|
1531
|
-
__decorate([
|
|
1532
|
-
Struct.field('string')
|
|
1533
|
-
], nexus_row.prototype, "name", void 0);
|
|
1534
|
-
__decorate([
|
|
1535
|
-
Struct.field(coordinates)
|
|
1536
|
-
], nexus_row.prototype, "coordinates", void 0);
|
|
1537
|
-
nexus_row = __decorate([
|
|
1538
|
-
Struct.type('nexus_row')
|
|
1539
|
-
], nexus_row);
|
|
1540
|
-
Types.nexus_row = nexus_row;
|
|
1541
1574
|
let schema_field = class schema_field extends Struct {
|
|
1542
1575
|
};
|
|
1543
1576
|
__decorate([
|
|
@@ -1654,15 +1687,6 @@ var Types;
|
|
|
1654
1687
|
__decorate([
|
|
1655
1688
|
Struct.field('string')
|
|
1656
1689
|
], player_info.prototype, "company_name", void 0);
|
|
1657
|
-
__decorate([
|
|
1658
|
-
Struct.field(UInt64)
|
|
1659
|
-
], player_info.prototype, "ship_count", void 0);
|
|
1660
|
-
__decorate([
|
|
1661
|
-
Struct.field(UInt64)
|
|
1662
|
-
], player_info.prototype, "warehouse_count", void 0);
|
|
1663
|
-
__decorate([
|
|
1664
|
-
Struct.field(UInt64)
|
|
1665
|
-
], player_info.prototype, "container_count", void 0);
|
|
1666
1690
|
player_info = __decorate([
|
|
1667
1691
|
Struct.type('player_info')
|
|
1668
1692
|
], player_info);
|
|
@@ -1678,9 +1702,6 @@ var Types;
|
|
|
1678
1702
|
Types.player_row = player_row;
|
|
1679
1703
|
let recharge = class recharge extends Struct {
|
|
1680
1704
|
};
|
|
1681
|
-
__decorate([
|
|
1682
|
-
Struct.field(Name)
|
|
1683
|
-
], recharge.prototype, "entity_type", void 0);
|
|
1684
1705
|
__decorate([
|
|
1685
1706
|
Struct.field(UInt64)
|
|
1686
1707
|
], recharge.prototype, "id", void 0);
|
|
@@ -1688,6 +1709,15 @@ var Types;
|
|
|
1688
1709
|
Struct.type('recharge')
|
|
1689
1710
|
], recharge);
|
|
1690
1711
|
Types.recharge = recharge;
|
|
1712
|
+
let refrshentity = class refrshentity extends Struct {
|
|
1713
|
+
};
|
|
1714
|
+
__decorate([
|
|
1715
|
+
Struct.field(UInt64)
|
|
1716
|
+
], refrshentity.prototype, "entity_id", void 0);
|
|
1717
|
+
refrshentity = __decorate([
|
|
1718
|
+
Struct.type('refrshentity')
|
|
1719
|
+
], refrshentity);
|
|
1720
|
+
Types.refrshentity = refrshentity;
|
|
1691
1721
|
let reserve_row = class reserve_row extends Struct {
|
|
1692
1722
|
};
|
|
1693
1723
|
__decorate([
|
|
@@ -1708,9 +1738,6 @@ var Types;
|
|
|
1708
1738
|
Types.reserve_row = reserve_row;
|
|
1709
1739
|
let resolve = class resolve extends Struct {
|
|
1710
1740
|
};
|
|
1711
|
-
__decorate([
|
|
1712
|
-
Struct.field(Name)
|
|
1713
|
-
], resolve.prototype, "entity_type", void 0);
|
|
1714
1741
|
__decorate([
|
|
1715
1742
|
Struct.field(UInt64)
|
|
1716
1743
|
], resolve.prototype, "id", void 0);
|
|
@@ -1789,9 +1816,6 @@ var Types;
|
|
|
1789
1816
|
Types.resources_result = resources_result;
|
|
1790
1817
|
let rmmodule = class rmmodule extends Struct {
|
|
1791
1818
|
};
|
|
1792
|
-
__decorate([
|
|
1793
|
-
Struct.field(Name)
|
|
1794
|
-
], rmmodule.prototype, "entity_type", void 0);
|
|
1795
1819
|
__decorate([
|
|
1796
1820
|
Struct.field(UInt64)
|
|
1797
1821
|
], rmmodule.prototype, "entity_id", void 0);
|
|
@@ -1799,8 +1823,8 @@ var Types;
|
|
|
1799
1823
|
Struct.field(UInt8)
|
|
1800
1824
|
], rmmodule.prototype, "module_index", void 0);
|
|
1801
1825
|
__decorate([
|
|
1802
|
-
Struct.field(
|
|
1803
|
-
], rmmodule.prototype, "
|
|
1826
|
+
Struct.field(cargo_ref, { optional: true })
|
|
1827
|
+
], rmmodule.prototype, "target_ref", void 0);
|
|
1804
1828
|
rmmodule = __decorate([
|
|
1805
1829
|
Struct.type('rmmodule')
|
|
1806
1830
|
], rmmodule);
|
|
@@ -1823,18 +1847,6 @@ var Types;
|
|
|
1823
1847
|
Struct.type('salt')
|
|
1824
1848
|
], salt);
|
|
1825
1849
|
Types.salt = salt;
|
|
1826
|
-
let sequence_row = class sequence_row extends Struct {
|
|
1827
|
-
};
|
|
1828
|
-
__decorate([
|
|
1829
|
-
Struct.field(Name)
|
|
1830
|
-
], sequence_row.prototype, "key", void 0);
|
|
1831
|
-
__decorate([
|
|
1832
|
-
Struct.field(UInt64)
|
|
1833
|
-
], sequence_row.prototype, "value", void 0);
|
|
1834
|
-
sequence_row = __decorate([
|
|
1835
|
-
Struct.type('sequence_row')
|
|
1836
|
-
], sequence_row);
|
|
1837
|
-
Types.sequence_row = sequence_row;
|
|
1838
1850
|
let setnftcfg = class setnftcfg extends Struct {
|
|
1839
1851
|
};
|
|
1840
1852
|
__decorate([
|
|
@@ -1850,66 +1862,15 @@ var Types;
|
|
|
1850
1862
|
Struct.type('setnftcfg')
|
|
1851
1863
|
], setnftcfg);
|
|
1852
1864
|
Types.setnftcfg = setnftcfg;
|
|
1853
|
-
let
|
|
1865
|
+
let skipreveal = class skipreveal extends Struct {
|
|
1854
1866
|
};
|
|
1855
1867
|
__decorate([
|
|
1856
|
-
Struct.field(
|
|
1857
|
-
],
|
|
1858
|
-
__decorate([
|
|
1859
|
-
Struct.
|
|
1860
|
-
],
|
|
1861
|
-
|
|
1862
|
-
Struct.field('string')
|
|
1863
|
-
], ship_row.prototype, "name", void 0);
|
|
1864
|
-
__decorate([
|
|
1865
|
-
Struct.field(UInt64)
|
|
1866
|
-
], ship_row.prototype, "stats", void 0);
|
|
1867
|
-
__decorate([
|
|
1868
|
-
Struct.field(coordinates)
|
|
1869
|
-
], ship_row.prototype, "coordinates", void 0);
|
|
1870
|
-
__decorate([
|
|
1871
|
-
Struct.field(UInt32, { optional: true })
|
|
1872
|
-
], ship_row.prototype, "hullmass", void 0);
|
|
1873
|
-
__decorate([
|
|
1874
|
-
Struct.field(UInt32, { optional: true })
|
|
1875
|
-
], ship_row.prototype, "capacity", void 0);
|
|
1876
|
-
__decorate([
|
|
1877
|
-
Struct.field(UInt16, { optional: true })
|
|
1878
|
-
], ship_row.prototype, "energy", void 0);
|
|
1879
|
-
__decorate([
|
|
1880
|
-
Struct.field(UInt32)
|
|
1881
|
-
], ship_row.prototype, "cargomass", void 0);
|
|
1882
|
-
__decorate([
|
|
1883
|
-
Struct.field(movement_stats, { optional: true })
|
|
1884
|
-
], ship_row.prototype, "engines", void 0);
|
|
1885
|
-
__decorate([
|
|
1886
|
-
Struct.field(energy_stats, { optional: true })
|
|
1887
|
-
], ship_row.prototype, "generator", void 0);
|
|
1888
|
-
__decorate([
|
|
1889
|
-
Struct.field(loader_stats, { optional: true })
|
|
1890
|
-
], ship_row.prototype, "loaders", void 0);
|
|
1891
|
-
__decorate([
|
|
1892
|
-
Struct.field(gatherer_stats, { optional: true })
|
|
1893
|
-
], ship_row.prototype, "gatherer", void 0);
|
|
1894
|
-
__decorate([
|
|
1895
|
-
Struct.field(warp_stats, { optional: true })
|
|
1896
|
-
], ship_row.prototype, "warp", void 0);
|
|
1897
|
-
__decorate([
|
|
1898
|
-
Struct.field(crafter_stats, { optional: true })
|
|
1899
|
-
], ship_row.prototype, "crafter", void 0);
|
|
1900
|
-
__decorate([
|
|
1901
|
-
Struct.field(hauler_stats, { optional: true })
|
|
1902
|
-
], ship_row.prototype, "hauler", void 0);
|
|
1903
|
-
__decorate([
|
|
1904
|
-
Struct.field(module_entry, { array: true })
|
|
1905
|
-
], ship_row.prototype, "modules", void 0);
|
|
1906
|
-
__decorate([
|
|
1907
|
-
Struct.field(schedule, { optional: true })
|
|
1908
|
-
], ship_row.prototype, "schedule", void 0);
|
|
1909
|
-
ship_row = __decorate([
|
|
1910
|
-
Struct.type('ship_row')
|
|
1911
|
-
], ship_row);
|
|
1912
|
-
Types.ship_row = ship_row;
|
|
1868
|
+
Struct.field(Checksum256)
|
|
1869
|
+
], skipreveal.prototype, "commit", void 0);
|
|
1870
|
+
skipreveal = __decorate([
|
|
1871
|
+
Struct.type('skipreveal')
|
|
1872
|
+
], skipreveal);
|
|
1873
|
+
Types.skipreveal = skipreveal;
|
|
1913
1874
|
let spawncargo = class spawncargo extends Struct {
|
|
1914
1875
|
};
|
|
1915
1876
|
__decorate([
|
|
@@ -1972,9 +1933,6 @@ var Types;
|
|
|
1972
1933
|
__decorate([
|
|
1973
1934
|
Struct.field(UInt64)
|
|
1974
1935
|
], state_row.prototype, "salt", void 0);
|
|
1975
|
-
__decorate([
|
|
1976
|
-
Struct.field(UInt32)
|
|
1977
|
-
], state_row.prototype, "ships", void 0);
|
|
1978
1936
|
__decorate([
|
|
1979
1937
|
Struct.field(Checksum256)
|
|
1980
1938
|
], state_row.prototype, "seed", void 0);
|
|
@@ -2041,36 +1999,21 @@ var Types;
|
|
|
2041
1999
|
Types.task_results = task_results;
|
|
2042
2000
|
let transfer = class transfer extends Struct {
|
|
2043
2001
|
};
|
|
2044
|
-
__decorate([
|
|
2045
|
-
Struct.field(Name)
|
|
2046
|
-
], transfer.prototype, "source_type", void 0);
|
|
2047
2002
|
__decorate([
|
|
2048
2003
|
Struct.field(UInt64)
|
|
2049
2004
|
], transfer.prototype, "source_id", void 0);
|
|
2050
|
-
__decorate([
|
|
2051
|
-
Struct.field(Name)
|
|
2052
|
-
], transfer.prototype, "dest_type", void 0);
|
|
2053
2005
|
__decorate([
|
|
2054
2006
|
Struct.field(UInt64)
|
|
2055
2007
|
], transfer.prototype, "dest_id", void 0);
|
|
2056
2008
|
__decorate([
|
|
2057
|
-
Struct.field(
|
|
2058
|
-
], transfer.prototype, "
|
|
2059
|
-
__decorate([
|
|
2060
|
-
Struct.field(UInt64)
|
|
2061
|
-
], transfer.prototype, "stats", void 0);
|
|
2062
|
-
__decorate([
|
|
2063
|
-
Struct.field(UInt32)
|
|
2064
|
-
], transfer.prototype, "quantity", void 0);
|
|
2009
|
+
Struct.field(cargo_item, { array: true })
|
|
2010
|
+
], transfer.prototype, "items", void 0);
|
|
2065
2011
|
transfer = __decorate([
|
|
2066
2012
|
Struct.type('transfer')
|
|
2067
2013
|
], transfer);
|
|
2068
2014
|
Types.transfer = transfer;
|
|
2069
2015
|
let travel = class travel extends Struct {
|
|
2070
2016
|
};
|
|
2071
|
-
__decorate([
|
|
2072
|
-
Struct.field(Name)
|
|
2073
|
-
], travel.prototype, "entity_type", void 0);
|
|
2074
2017
|
__decorate([
|
|
2075
2018
|
Struct.field(UInt64)
|
|
2076
2019
|
], travel.prototype, "id", void 0);
|
|
@@ -2105,50 +2048,20 @@ var Types;
|
|
|
2105
2048
|
Struct.type('types_row')
|
|
2106
2049
|
], types_row);
|
|
2107
2050
|
Types.types_row = types_row;
|
|
2108
|
-
let
|
|
2051
|
+
let undeploy = class undeploy extends Struct {
|
|
2109
2052
|
};
|
|
2110
2053
|
__decorate([
|
|
2111
2054
|
Struct.field(UInt64)
|
|
2112
|
-
],
|
|
2113
|
-
__decorate([
|
|
2114
|
-
Struct.field(Name)
|
|
2115
|
-
], warehouse_row.prototype, "owner", void 0);
|
|
2116
|
-
__decorate([
|
|
2117
|
-
Struct.field('string')
|
|
2118
|
-
], warehouse_row.prototype, "name", void 0);
|
|
2055
|
+
], undeploy.prototype, "host_id", void 0);
|
|
2119
2056
|
__decorate([
|
|
2120
2057
|
Struct.field(UInt64)
|
|
2121
|
-
],
|
|
2122
|
-
__decorate([
|
|
2123
|
-
Struct.
|
|
2124
|
-
],
|
|
2125
|
-
|
|
2126
|
-
Struct.field(UInt32, { optional: true })
|
|
2127
|
-
], warehouse_row.prototype, "hullmass", void 0);
|
|
2128
|
-
__decorate([
|
|
2129
|
-
Struct.field(UInt32, { optional: true })
|
|
2130
|
-
], warehouse_row.prototype, "capacity", void 0);
|
|
2131
|
-
__decorate([
|
|
2132
|
-
Struct.field(UInt32)
|
|
2133
|
-
], warehouse_row.prototype, "cargomass", void 0);
|
|
2134
|
-
__decorate([
|
|
2135
|
-
Struct.field(loader_stats, { optional: true })
|
|
2136
|
-
], warehouse_row.prototype, "loaders", void 0);
|
|
2137
|
-
__decorate([
|
|
2138
|
-
Struct.field(module_entry, { array: true })
|
|
2139
|
-
], warehouse_row.prototype, "modules", void 0);
|
|
2140
|
-
__decorate([
|
|
2141
|
-
Struct.field(schedule, { optional: true })
|
|
2142
|
-
], warehouse_row.prototype, "schedule", void 0);
|
|
2143
|
-
warehouse_row = __decorate([
|
|
2144
|
-
Struct.type('warehouse_row')
|
|
2145
|
-
], warehouse_row);
|
|
2146
|
-
Types.warehouse_row = warehouse_row;
|
|
2058
|
+
], undeploy.prototype, "target_id", void 0);
|
|
2059
|
+
undeploy = __decorate([
|
|
2060
|
+
Struct.type('undeploy')
|
|
2061
|
+
], undeploy);
|
|
2062
|
+
Types.undeploy = undeploy;
|
|
2147
2063
|
let warp = class warp extends Struct {
|
|
2148
2064
|
};
|
|
2149
|
-
__decorate([
|
|
2150
|
-
Struct.field(Name)
|
|
2151
|
-
], warp.prototype, "entity_type", void 0);
|
|
2152
2065
|
__decorate([
|
|
2153
2066
|
Struct.field(UInt64)
|
|
2154
2067
|
], warp.prototype, "id", void 0);
|
|
@@ -2168,48 +2081,46 @@ var Types;
|
|
|
2168
2081
|
Struct.type('wipe')
|
|
2169
2082
|
], wipe);
|
|
2170
2083
|
Types.wipe = wipe;
|
|
2171
|
-
let wipesequence = class wipesequence extends Struct {
|
|
2172
|
-
};
|
|
2173
|
-
wipesequence = __decorate([
|
|
2174
|
-
Struct.type('wipesequence')
|
|
2175
|
-
], wipesequence);
|
|
2176
|
-
Types.wipesequence = wipesequence;
|
|
2177
2084
|
let wrap = class wrap extends Struct {
|
|
2178
2085
|
};
|
|
2179
2086
|
__decorate([
|
|
2180
2087
|
Struct.field(Name)
|
|
2181
2088
|
], wrap.prototype, "owner", void 0);
|
|
2182
|
-
__decorate([
|
|
2183
|
-
Struct.field(Name)
|
|
2184
|
-
], wrap.prototype, "entity_type", void 0);
|
|
2185
2089
|
__decorate([
|
|
2186
2090
|
Struct.field(UInt64)
|
|
2187
2091
|
], wrap.prototype, "entity_id", void 0);
|
|
2188
2092
|
__decorate([
|
|
2189
2093
|
Struct.field(UInt64)
|
|
2190
|
-
], wrap.prototype, "
|
|
2094
|
+
], wrap.prototype, "nexus_id", void 0);
|
|
2191
2095
|
__decorate([
|
|
2192
|
-
Struct.field(
|
|
2193
|
-
], wrap.prototype, "
|
|
2096
|
+
Struct.field(cargo_item, { array: true })
|
|
2097
|
+
], wrap.prototype, "items", void 0);
|
|
2194
2098
|
wrap = __decorate([
|
|
2195
2099
|
Struct.type('wrap')
|
|
2196
2100
|
], wrap);
|
|
2197
2101
|
Types.wrap = wrap;
|
|
2102
|
+
let wrapentity = class wrapentity extends Struct {
|
|
2103
|
+
};
|
|
2104
|
+
__decorate([
|
|
2105
|
+
Struct.field(UInt64)
|
|
2106
|
+
], wrapentity.prototype, "entity_id", void 0);
|
|
2107
|
+
__decorate([
|
|
2108
|
+
Struct.field(UInt64)
|
|
2109
|
+
], wrapentity.prototype, "nexus_id", void 0);
|
|
2110
|
+
wrapentity = __decorate([
|
|
2111
|
+
Struct.type('wrapentity')
|
|
2112
|
+
], wrapentity);
|
|
2113
|
+
Types.wrapentity = wrapentity;
|
|
2198
2114
|
})(Types || (Types = {}));
|
|
2199
2115
|
const TableMap = {
|
|
2200
2116
|
cargo: Types.cargo_row,
|
|
2201
|
-
|
|
2117
|
+
entity: Types.entity_row,
|
|
2202
2118
|
entitygroup: Types.entitygroup_row,
|
|
2203
|
-
location: Types.location_row,
|
|
2204
|
-
nexus: Types.nexus_row,
|
|
2205
2119
|
nftconfig: Types.nftconfig_row,
|
|
2206
2120
|
player: Types.player_row,
|
|
2207
2121
|
reserve: Types.reserve_row,
|
|
2208
|
-
sequence: Types.sequence_row,
|
|
2209
|
-
ship: Types.ship_row,
|
|
2210
2122
|
state: Types.state_row,
|
|
2211
2123
|
types: Types.types_row,
|
|
2212
|
-
warehouse: Types.warehouse_row,
|
|
2213
2124
|
};
|
|
2214
2125
|
class Contract extends Contract$2 {
|
|
2215
2126
|
constructor(args) {
|
|
@@ -2331,12 +2242,13 @@ const INSUFFICIENT_ITEM_SUPPLY = 'Insufficient supply of item at location.';
|
|
|
2331
2242
|
|
|
2332
2243
|
const PRECISION$1 = 10000;
|
|
2333
2244
|
const CRAFT_ENERGY_DIVISOR = 150000;
|
|
2334
|
-
const
|
|
2245
|
+
const PLANETARY_STRUCTURE_Z = 0;
|
|
2335
2246
|
const CONTAINER_Z = 300;
|
|
2336
2247
|
const TRAVEL_MAX_DURATION = 86400;
|
|
2337
2248
|
const MIN_ORBITAL_ALTITUDE = 800;
|
|
2338
2249
|
const MAX_ORBITAL_ALTITUDE = 3000;
|
|
2339
2250
|
const BASE_ORBITAL_MASS = 100000;
|
|
2251
|
+
const MIN_TRANSFER_DISTANCE = 100;
|
|
2340
2252
|
var TaskType;
|
|
2341
2253
|
(function (TaskType) {
|
|
2342
2254
|
TaskType[TaskType["IDLE"] = 0] = "IDLE";
|
|
@@ -2350,6 +2262,9 @@ var TaskType;
|
|
|
2350
2262
|
TaskType[TaskType["DEPLOY"] = 8] = "DEPLOY";
|
|
2351
2263
|
TaskType[TaskType["WRAP"] = 9] = "WRAP";
|
|
2352
2264
|
TaskType[TaskType["UNWRAP"] = 10] = "UNWRAP";
|
|
2265
|
+
TaskType[TaskType["UNDEPLOY"] = 11] = "UNDEPLOY";
|
|
2266
|
+
TaskType[TaskType["WRAP_ENTITY"] = 12] = "WRAP_ENTITY";
|
|
2267
|
+
TaskType[TaskType["DEMOLISH"] = 13] = "DEMOLISH";
|
|
2353
2268
|
})(TaskType || (TaskType = {}));
|
|
2354
2269
|
var LocationType;
|
|
2355
2270
|
(function (LocationType) {
|
|
@@ -2357,6 +2272,7 @@ var LocationType;
|
|
|
2357
2272
|
LocationType[LocationType["PLANET"] = 1] = "PLANET";
|
|
2358
2273
|
LocationType[LocationType["ASTEROID"] = 2] = "ASTEROID";
|
|
2359
2274
|
LocationType[LocationType["NEBULA"] = 3] = "NEBULA";
|
|
2275
|
+
LocationType[LocationType["ICE_FIELD"] = 4] = "ICE_FIELD";
|
|
2360
2276
|
})(LocationType || (LocationType = {}));
|
|
2361
2277
|
var TaskCancelable;
|
|
2362
2278
|
(function (TaskCancelable) {
|
|
@@ -2411,6 +2327,9 @@ const CATEGORY_LABELS = {
|
|
|
2411
2327
|
function formatTier(tier) {
|
|
2412
2328
|
return 'T' + tier;
|
|
2413
2329
|
}
|
|
2330
|
+
function tierAdjective(tier) {
|
|
2331
|
+
return TIER_ADJECTIVES[tier] ?? `T${tier}`;
|
|
2332
|
+
}
|
|
2414
2333
|
|
|
2415
2334
|
const ITEM_ORE_T1 = 101;
|
|
2416
2335
|
const ITEM_ORE_T2 = 102;
|
|
@@ -2479,9 +2398,11 @@ const ITEM_LOADER_T1 = 10103;
|
|
|
2479
2398
|
const ITEM_CRAFTER_T1 = 10104;
|
|
2480
2399
|
const ITEM_STORAGE_T1 = 10105;
|
|
2481
2400
|
const ITEM_HAULER_T1 = 10106;
|
|
2401
|
+
const ITEM_WARP_T1 = 10107;
|
|
2482
2402
|
const ITEM_CONTAINER_T1_PACKED = 10200;
|
|
2483
2403
|
const ITEM_SHIP_T1_PACKED = 10201;
|
|
2484
2404
|
const ITEM_WAREHOUSE_T1_PACKED = 10202;
|
|
2405
|
+
const ITEM_EXTRACTOR_T1_PACKED = 10203;
|
|
2485
2406
|
const ITEM_HULL_PLATES_T2 = 20001;
|
|
2486
2407
|
const ITEM_CARGO_LINING_T2 = 20002;
|
|
2487
2408
|
const ITEM_CONTAINER_T2_PACKED = 20200;
|
|
@@ -2508,6 +2429,55 @@ var items = [
|
|
|
2508
2429
|
tier: 3,
|
|
2509
2430
|
category: "ore"
|
|
2510
2431
|
},
|
|
2432
|
+
{
|
|
2433
|
+
id: 104,
|
|
2434
|
+
mass: 71000,
|
|
2435
|
+
type: "resource",
|
|
2436
|
+
tier: 4,
|
|
2437
|
+
category: "ore"
|
|
2438
|
+
},
|
|
2439
|
+
{
|
|
2440
|
+
id: 105,
|
|
2441
|
+
mass: 78000,
|
|
2442
|
+
type: "resource",
|
|
2443
|
+
tier: 5,
|
|
2444
|
+
category: "ore"
|
|
2445
|
+
},
|
|
2446
|
+
{
|
|
2447
|
+
id: 106,
|
|
2448
|
+
mass: 87000,
|
|
2449
|
+
type: "resource",
|
|
2450
|
+
tier: 6,
|
|
2451
|
+
category: "ore"
|
|
2452
|
+
},
|
|
2453
|
+
{
|
|
2454
|
+
id: 107,
|
|
2455
|
+
mass: 96000,
|
|
2456
|
+
type: "resource",
|
|
2457
|
+
tier: 7,
|
|
2458
|
+
category: "ore"
|
|
2459
|
+
},
|
|
2460
|
+
{
|
|
2461
|
+
id: 108,
|
|
2462
|
+
mass: 107000,
|
|
2463
|
+
type: "resource",
|
|
2464
|
+
tier: 8,
|
|
2465
|
+
category: "ore"
|
|
2466
|
+
},
|
|
2467
|
+
{
|
|
2468
|
+
id: 109,
|
|
2469
|
+
mass: 118000,
|
|
2470
|
+
type: "resource",
|
|
2471
|
+
tier: 9,
|
|
2472
|
+
category: "ore"
|
|
2473
|
+
},
|
|
2474
|
+
{
|
|
2475
|
+
id: 110,
|
|
2476
|
+
mass: 130000,
|
|
2477
|
+
type: "resource",
|
|
2478
|
+
tier: 10,
|
|
2479
|
+
category: "ore"
|
|
2480
|
+
},
|
|
2511
2481
|
{
|
|
2512
2482
|
id: 201,
|
|
2513
2483
|
mass: 35000,
|
|
@@ -2529,6 +2499,55 @@ var items = [
|
|
|
2529
2499
|
tier: 3,
|
|
2530
2500
|
category: "crystal"
|
|
2531
2501
|
},
|
|
2502
|
+
{
|
|
2503
|
+
id: 204,
|
|
2504
|
+
mass: 35000,
|
|
2505
|
+
type: "resource",
|
|
2506
|
+
tier: 4,
|
|
2507
|
+
category: "crystal"
|
|
2508
|
+
},
|
|
2509
|
+
{
|
|
2510
|
+
id: 205,
|
|
2511
|
+
mass: 35000,
|
|
2512
|
+
type: "resource",
|
|
2513
|
+
tier: 5,
|
|
2514
|
+
category: "crystal"
|
|
2515
|
+
},
|
|
2516
|
+
{
|
|
2517
|
+
id: 206,
|
|
2518
|
+
mass: 35000,
|
|
2519
|
+
type: "resource",
|
|
2520
|
+
tier: 6,
|
|
2521
|
+
category: "crystal"
|
|
2522
|
+
},
|
|
2523
|
+
{
|
|
2524
|
+
id: 207,
|
|
2525
|
+
mass: 35000,
|
|
2526
|
+
type: "resource",
|
|
2527
|
+
tier: 7,
|
|
2528
|
+
category: "crystal"
|
|
2529
|
+
},
|
|
2530
|
+
{
|
|
2531
|
+
id: 208,
|
|
2532
|
+
mass: 35000,
|
|
2533
|
+
type: "resource",
|
|
2534
|
+
tier: 8,
|
|
2535
|
+
category: "crystal"
|
|
2536
|
+
},
|
|
2537
|
+
{
|
|
2538
|
+
id: 209,
|
|
2539
|
+
mass: 35000,
|
|
2540
|
+
type: "resource",
|
|
2541
|
+
tier: 9,
|
|
2542
|
+
category: "crystal"
|
|
2543
|
+
},
|
|
2544
|
+
{
|
|
2545
|
+
id: 210,
|
|
2546
|
+
mass: 35000,
|
|
2547
|
+
type: "resource",
|
|
2548
|
+
tier: 10,
|
|
2549
|
+
category: "crystal"
|
|
2550
|
+
},
|
|
2532
2551
|
{
|
|
2533
2552
|
id: 301,
|
|
2534
2553
|
mass: 15000,
|
|
@@ -2550,6 +2569,55 @@ var items = [
|
|
|
2550
2569
|
tier: 3,
|
|
2551
2570
|
category: "gas"
|
|
2552
2571
|
},
|
|
2572
|
+
{
|
|
2573
|
+
id: 304,
|
|
2574
|
+
mass: 11000,
|
|
2575
|
+
type: "resource",
|
|
2576
|
+
tier: 4,
|
|
2577
|
+
category: "gas"
|
|
2578
|
+
},
|
|
2579
|
+
{
|
|
2580
|
+
id: 305,
|
|
2581
|
+
mass: 10000,
|
|
2582
|
+
type: "resource",
|
|
2583
|
+
tier: 5,
|
|
2584
|
+
category: "gas"
|
|
2585
|
+
},
|
|
2586
|
+
{
|
|
2587
|
+
id: 306,
|
|
2588
|
+
mass: 9000,
|
|
2589
|
+
type: "resource",
|
|
2590
|
+
tier: 6,
|
|
2591
|
+
category: "gas"
|
|
2592
|
+
},
|
|
2593
|
+
{
|
|
2594
|
+
id: 307,
|
|
2595
|
+
mass: 8000,
|
|
2596
|
+
type: "resource",
|
|
2597
|
+
tier: 7,
|
|
2598
|
+
category: "gas"
|
|
2599
|
+
},
|
|
2600
|
+
{
|
|
2601
|
+
id: 308,
|
|
2602
|
+
mass: 7500,
|
|
2603
|
+
type: "resource",
|
|
2604
|
+
tier: 8,
|
|
2605
|
+
category: "gas"
|
|
2606
|
+
},
|
|
2607
|
+
{
|
|
2608
|
+
id: 309,
|
|
2609
|
+
mass: 6500,
|
|
2610
|
+
type: "resource",
|
|
2611
|
+
tier: 9,
|
|
2612
|
+
category: "gas"
|
|
2613
|
+
},
|
|
2614
|
+
{
|
|
2615
|
+
id: 310,
|
|
2616
|
+
mass: 6000,
|
|
2617
|
+
type: "resource",
|
|
2618
|
+
tier: 10,
|
|
2619
|
+
category: "gas"
|
|
2620
|
+
},
|
|
2553
2621
|
{
|
|
2554
2622
|
id: 401,
|
|
2555
2623
|
mass: 22000,
|
|
@@ -2571,6 +2639,55 @@ var items = [
|
|
|
2571
2639
|
tier: 3,
|
|
2572
2640
|
category: "regolith"
|
|
2573
2641
|
},
|
|
2642
|
+
{
|
|
2643
|
+
id: 404,
|
|
2644
|
+
mass: 32000,
|
|
2645
|
+
type: "resource",
|
|
2646
|
+
tier: 4,
|
|
2647
|
+
category: "regolith"
|
|
2648
|
+
},
|
|
2649
|
+
{
|
|
2650
|
+
id: 405,
|
|
2651
|
+
mass: 36000,
|
|
2652
|
+
type: "resource",
|
|
2653
|
+
tier: 5,
|
|
2654
|
+
category: "regolith"
|
|
2655
|
+
},
|
|
2656
|
+
{
|
|
2657
|
+
id: 406,
|
|
2658
|
+
mass: 40500,
|
|
2659
|
+
type: "resource",
|
|
2660
|
+
tier: 6,
|
|
2661
|
+
category: "regolith"
|
|
2662
|
+
},
|
|
2663
|
+
{
|
|
2664
|
+
id: 407,
|
|
2665
|
+
mass: 46000,
|
|
2666
|
+
type: "resource",
|
|
2667
|
+
tier: 7,
|
|
2668
|
+
category: "regolith"
|
|
2669
|
+
},
|
|
2670
|
+
{
|
|
2671
|
+
id: 408,
|
|
2672
|
+
mass: 52000,
|
|
2673
|
+
type: "resource",
|
|
2674
|
+
tier: 8,
|
|
2675
|
+
category: "regolith"
|
|
2676
|
+
},
|
|
2677
|
+
{
|
|
2678
|
+
id: 409,
|
|
2679
|
+
mass: 58500,
|
|
2680
|
+
type: "resource",
|
|
2681
|
+
tier: 9,
|
|
2682
|
+
category: "regolith"
|
|
2683
|
+
},
|
|
2684
|
+
{
|
|
2685
|
+
id: 410,
|
|
2686
|
+
mass: 66000,
|
|
2687
|
+
type: "resource",
|
|
2688
|
+
tier: 10,
|
|
2689
|
+
category: "regolith"
|
|
2690
|
+
},
|
|
2574
2691
|
{
|
|
2575
2692
|
id: 501,
|
|
2576
2693
|
mass: 42000,
|
|
@@ -2593,10 +2710,59 @@ var items = [
|
|
|
2593
2710
|
category: "biomass"
|
|
2594
2711
|
},
|
|
2595
2712
|
{
|
|
2596
|
-
id:
|
|
2597
|
-
mass:
|
|
2598
|
-
type: "
|
|
2599
|
-
tier:
|
|
2713
|
+
id: 504,
|
|
2714
|
+
mass: 29000,
|
|
2715
|
+
type: "resource",
|
|
2716
|
+
tier: 4,
|
|
2717
|
+
category: "biomass"
|
|
2718
|
+
},
|
|
2719
|
+
{
|
|
2720
|
+
id: 505,
|
|
2721
|
+
mass: 26000,
|
|
2722
|
+
type: "resource",
|
|
2723
|
+
tier: 5,
|
|
2724
|
+
category: "biomass"
|
|
2725
|
+
},
|
|
2726
|
+
{
|
|
2727
|
+
id: 506,
|
|
2728
|
+
mass: 23000,
|
|
2729
|
+
type: "resource",
|
|
2730
|
+
tier: 6,
|
|
2731
|
+
category: "biomass"
|
|
2732
|
+
},
|
|
2733
|
+
{
|
|
2734
|
+
id: 507,
|
|
2735
|
+
mass: 20000,
|
|
2736
|
+
type: "resource",
|
|
2737
|
+
tier: 7,
|
|
2738
|
+
category: "biomass"
|
|
2739
|
+
},
|
|
2740
|
+
{
|
|
2741
|
+
id: 508,
|
|
2742
|
+
mass: 18000,
|
|
2743
|
+
type: "resource",
|
|
2744
|
+
tier: 8,
|
|
2745
|
+
category: "biomass"
|
|
2746
|
+
},
|
|
2747
|
+
{
|
|
2748
|
+
id: 509,
|
|
2749
|
+
mass: 16000,
|
|
2750
|
+
type: "resource",
|
|
2751
|
+
tier: 9,
|
|
2752
|
+
category: "biomass"
|
|
2753
|
+
},
|
|
2754
|
+
{
|
|
2755
|
+
id: 510,
|
|
2756
|
+
mass: 14000,
|
|
2757
|
+
type: "resource",
|
|
2758
|
+
tier: 10,
|
|
2759
|
+
category: "biomass"
|
|
2760
|
+
},
|
|
2761
|
+
{
|
|
2762
|
+
id: 10001,
|
|
2763
|
+
mass: 50000,
|
|
2764
|
+
type: "component",
|
|
2765
|
+
tier: 1
|
|
2600
2766
|
},
|
|
2601
2767
|
{
|
|
2602
2768
|
id: 10002,
|
|
@@ -2701,6 +2867,13 @@ var items = [
|
|
|
2701
2867
|
tier: 1,
|
|
2702
2868
|
subtype: "hauler"
|
|
2703
2869
|
},
|
|
2870
|
+
{
|
|
2871
|
+
id: 10107,
|
|
2872
|
+
mass: 180000,
|
|
2873
|
+
type: "module",
|
|
2874
|
+
tier: 1,
|
|
2875
|
+
subtype: "warp"
|
|
2876
|
+
},
|
|
2704
2877
|
{
|
|
2705
2878
|
id: 10200,
|
|
2706
2879
|
mass: 80000,
|
|
@@ -2719,6 +2892,12 @@ var items = [
|
|
|
2719
2892
|
type: "entity",
|
|
2720
2893
|
tier: 1
|
|
2721
2894
|
},
|
|
2895
|
+
{
|
|
2896
|
+
id: 10203,
|
|
2897
|
+
mass: 800000,
|
|
2898
|
+
type: "entity",
|
|
2899
|
+
tier: 1
|
|
2900
|
+
},
|
|
2722
2901
|
{
|
|
2723
2902
|
id: 20001,
|
|
2724
2903
|
mass: 50000,
|
|
@@ -3147,10 +3326,6 @@ var recipes = [
|
|
|
3147
3326
|
},
|
|
3148
3327
|
{
|
|
3149
3328
|
sources: [
|
|
3150
|
-
{
|
|
3151
|
-
inputIndex: 1,
|
|
3152
|
-
statIndex: 1
|
|
3153
|
-
}
|
|
3154
3329
|
]
|
|
3155
3330
|
},
|
|
3156
3331
|
{
|
|
@@ -3190,8 +3365,8 @@ var recipes = [
|
|
|
3190
3365
|
{
|
|
3191
3366
|
sources: [
|
|
3192
3367
|
{
|
|
3193
|
-
inputIndex:
|
|
3194
|
-
statIndex:
|
|
3368
|
+
inputIndex: 1,
|
|
3369
|
+
statIndex: 1
|
|
3195
3370
|
}
|
|
3196
3371
|
]
|
|
3197
3372
|
},
|
|
@@ -3309,7 +3484,7 @@ var recipes = [
|
|
|
3309
3484
|
sources: [
|
|
3310
3485
|
{
|
|
3311
3486
|
inputIndex: 0,
|
|
3312
|
-
statIndex:
|
|
3487
|
+
statIndex: 1
|
|
3313
3488
|
}
|
|
3314
3489
|
]
|
|
3315
3490
|
},
|
|
@@ -3325,12 +3500,38 @@ var recipes = [
|
|
|
3325
3500
|
sources: [
|
|
3326
3501
|
{
|
|
3327
3502
|
inputIndex: 0,
|
|
3328
|
-
statIndex:
|
|
3503
|
+
statIndex: 0
|
|
3329
3504
|
}
|
|
3330
3505
|
]
|
|
3331
3506
|
},
|
|
3507
|
+
{
|
|
3508
|
+
sources: [
|
|
3509
|
+
]
|
|
3510
|
+
}
|
|
3511
|
+
],
|
|
3512
|
+
blendWeights: [
|
|
3513
|
+
]
|
|
3514
|
+
},
|
|
3515
|
+
{
|
|
3516
|
+
outputItemId: 10107,
|
|
3517
|
+
outputMass: 180000,
|
|
3518
|
+
inputs: [
|
|
3519
|
+
{
|
|
3520
|
+
itemId: 10010,
|
|
3521
|
+
quantity: 6
|
|
3522
|
+
},
|
|
3523
|
+
{
|
|
3524
|
+
itemId: 10009,
|
|
3525
|
+
quantity: 4
|
|
3526
|
+
}
|
|
3527
|
+
],
|
|
3528
|
+
statSlots: [
|
|
3332
3529
|
{
|
|
3333
3530
|
sources: [
|
|
3531
|
+
{
|
|
3532
|
+
inputIndex: 0,
|
|
3533
|
+
statIndex: 1
|
|
3534
|
+
},
|
|
3334
3535
|
{
|
|
3335
3536
|
inputIndex: 1,
|
|
3336
3537
|
statIndex: 1
|
|
@@ -3339,6 +3540,8 @@ var recipes = [
|
|
|
3339
3540
|
}
|
|
3340
3541
|
],
|
|
3341
3542
|
blendWeights: [
|
|
3543
|
+
1,
|
|
3544
|
+
1
|
|
3342
3545
|
]
|
|
3343
3546
|
},
|
|
3344
3547
|
{
|
|
@@ -3491,6 +3694,56 @@ var recipes = [
|
|
|
3491
3694
|
blendWeights: [
|
|
3492
3695
|
]
|
|
3493
3696
|
},
|
|
3697
|
+
{
|
|
3698
|
+
outputItemId: 10203,
|
|
3699
|
+
outputMass: 800000,
|
|
3700
|
+
inputs: [
|
|
3701
|
+
{
|
|
3702
|
+
itemId: 10001,
|
|
3703
|
+
quantity: 15
|
|
3704
|
+
},
|
|
3705
|
+
{
|
|
3706
|
+
itemId: 10002,
|
|
3707
|
+
quantity: 8
|
|
3708
|
+
}
|
|
3709
|
+
],
|
|
3710
|
+
statSlots: [
|
|
3711
|
+
{
|
|
3712
|
+
sources: [
|
|
3713
|
+
{
|
|
3714
|
+
inputIndex: 0,
|
|
3715
|
+
statIndex: 0
|
|
3716
|
+
}
|
|
3717
|
+
]
|
|
3718
|
+
},
|
|
3719
|
+
{
|
|
3720
|
+
sources: [
|
|
3721
|
+
{
|
|
3722
|
+
inputIndex: 0,
|
|
3723
|
+
statIndex: 1
|
|
3724
|
+
}
|
|
3725
|
+
]
|
|
3726
|
+
},
|
|
3727
|
+
{
|
|
3728
|
+
sources: [
|
|
3729
|
+
{
|
|
3730
|
+
inputIndex: 1,
|
|
3731
|
+
statIndex: 0
|
|
3732
|
+
}
|
|
3733
|
+
]
|
|
3734
|
+
},
|
|
3735
|
+
{
|
|
3736
|
+
sources: [
|
|
3737
|
+
{
|
|
3738
|
+
inputIndex: 1,
|
|
3739
|
+
statIndex: 1
|
|
3740
|
+
}
|
|
3741
|
+
]
|
|
3742
|
+
}
|
|
3743
|
+
],
|
|
3744
|
+
blendWeights: [
|
|
3745
|
+
]
|
|
3746
|
+
},
|
|
3494
3747
|
{
|
|
3495
3748
|
outputItemId: 20001,
|
|
3496
3749
|
outputMass: 50000,
|
|
@@ -3649,19 +3902,24 @@ var entities = [
|
|
|
3649
3902
|
entityItemId: 10201,
|
|
3650
3903
|
slots: [
|
|
3651
3904
|
{
|
|
3652
|
-
type: "any"
|
|
3905
|
+
type: "any",
|
|
3906
|
+
outputPct: 100
|
|
3653
3907
|
},
|
|
3654
3908
|
{
|
|
3655
|
-
type: "any"
|
|
3909
|
+
type: "any",
|
|
3910
|
+
outputPct: 100
|
|
3656
3911
|
},
|
|
3657
3912
|
{
|
|
3658
|
-
type: "any"
|
|
3913
|
+
type: "any",
|
|
3914
|
+
outputPct: 100
|
|
3659
3915
|
},
|
|
3660
3916
|
{
|
|
3661
|
-
type: "any"
|
|
3917
|
+
type: "any",
|
|
3918
|
+
outputPct: 100
|
|
3662
3919
|
},
|
|
3663
3920
|
{
|
|
3664
|
-
type: "any"
|
|
3921
|
+
type: "any",
|
|
3922
|
+
outputPct: 100
|
|
3665
3923
|
}
|
|
3666
3924
|
]
|
|
3667
3925
|
},
|
|
@@ -3669,19 +3927,37 @@ var entities = [
|
|
|
3669
3927
|
entityItemId: 10202,
|
|
3670
3928
|
slots: [
|
|
3671
3929
|
{
|
|
3672
|
-
type: "loader"
|
|
3930
|
+
type: "loader",
|
|
3931
|
+
outputPct: 100
|
|
3932
|
+
},
|
|
3933
|
+
{
|
|
3934
|
+
type: "storage",
|
|
3935
|
+
outputPct: 100
|
|
3673
3936
|
},
|
|
3674
3937
|
{
|
|
3675
|
-
type: "storage"
|
|
3938
|
+
type: "storage",
|
|
3939
|
+
outputPct: 100
|
|
3676
3940
|
},
|
|
3677
3941
|
{
|
|
3678
|
-
type: "storage"
|
|
3942
|
+
type: "storage",
|
|
3943
|
+
outputPct: 100
|
|
3679
3944
|
},
|
|
3680
3945
|
{
|
|
3681
|
-
type: "storage"
|
|
3946
|
+
type: "storage",
|
|
3947
|
+
outputPct: 100
|
|
3948
|
+
}
|
|
3949
|
+
]
|
|
3950
|
+
},
|
|
3951
|
+
{
|
|
3952
|
+
entityItemId: 10203,
|
|
3953
|
+
slots: [
|
|
3954
|
+
{
|
|
3955
|
+
type: "generator",
|
|
3956
|
+
outputPct: 100
|
|
3682
3957
|
},
|
|
3683
3958
|
{
|
|
3684
|
-
type: "
|
|
3959
|
+
type: "gatherer",
|
|
3960
|
+
outputPct: 100
|
|
3685
3961
|
}
|
|
3686
3962
|
]
|
|
3687
3963
|
},
|
|
@@ -3692,78 +3968,6 @@ var entities = [
|
|
|
3692
3968
|
}
|
|
3693
3969
|
];
|
|
3694
3970
|
|
|
3695
|
-
const categoryColors = {
|
|
3696
|
-
ore: '#C26D3F',
|
|
3697
|
-
crystal: '#4ADBFF',
|
|
3698
|
-
gas: '#B8E4A0',
|
|
3699
|
-
regolith: '#C4A57B',
|
|
3700
|
-
biomass: '#5A8B3E',
|
|
3701
|
-
};
|
|
3702
|
-
const tierColors = {
|
|
3703
|
-
1: '#8b8b8b',
|
|
3704
|
-
2: '#4ade80',
|
|
3705
|
-
3: '#818cf8',
|
|
3706
|
-
4: '#c084fc',
|
|
3707
|
-
5: '#fbbf24',
|
|
3708
|
-
6: '#f97316',
|
|
3709
|
-
7: '#ef4444',
|
|
3710
|
-
8: '#ec4899',
|
|
3711
|
-
9: '#06b6d4',
|
|
3712
|
-
10: '#ffffff',
|
|
3713
|
-
};
|
|
3714
|
-
const tierLabels = {
|
|
3715
|
-
1: 'Common',
|
|
3716
|
-
2: 'Uncommon',
|
|
3717
|
-
3: 'Rare',
|
|
3718
|
-
4: 'Epic',
|
|
3719
|
-
5: 'Legendary',
|
|
3720
|
-
6: 'Mythic',
|
|
3721
|
-
7: 'Divine',
|
|
3722
|
-
8: 'Celestial',
|
|
3723
|
-
9: 'Eternal',
|
|
3724
|
-
10: 'Transcendent',
|
|
3725
|
-
};
|
|
3726
|
-
const categoryIcons = {
|
|
3727
|
-
ore: '⬡',
|
|
3728
|
-
crystal: '◈',
|
|
3729
|
-
gas: '◎',
|
|
3730
|
-
regolith: '■',
|
|
3731
|
-
biomass: '❋',
|
|
3732
|
-
};
|
|
3733
|
-
const categoryIconShapes = {
|
|
3734
|
-
ore: 'hex',
|
|
3735
|
-
crystal: 'diamond',
|
|
3736
|
-
gas: 'circle',
|
|
3737
|
-
regolith: 'square',
|
|
3738
|
-
biomass: 'star',
|
|
3739
|
-
};
|
|
3740
|
-
const componentIcon = '▣';
|
|
3741
|
-
const moduleIcon = '⬢';
|
|
3742
|
-
const itemAbbreviations = {
|
|
3743
|
-
10001: 'HP',
|
|
3744
|
-
10002: 'CL',
|
|
3745
|
-
10003: 'TC',
|
|
3746
|
-
10004: 'PC',
|
|
3747
|
-
10005: 'DS',
|
|
3748
|
-
10006: 'EP',
|
|
3749
|
-
10007: 'CA',
|
|
3750
|
-
10008: 'TB',
|
|
3751
|
-
10009: 'RC',
|
|
3752
|
-
10010: 'FA',
|
|
3753
|
-
10100: 'EN',
|
|
3754
|
-
10101: 'GN',
|
|
3755
|
-
10102: 'EX',
|
|
3756
|
-
10103: 'LD',
|
|
3757
|
-
10104: 'MF',
|
|
3758
|
-
10105: 'ST',
|
|
3759
|
-
10200: 'CT',
|
|
3760
|
-
10201: 'SH',
|
|
3761
|
-
10202: 'WH',
|
|
3762
|
-
20001: 'HP',
|
|
3763
|
-
20002: 'CL',
|
|
3764
|
-
20200: 'CT',
|
|
3765
|
-
};
|
|
3766
|
-
|
|
3767
3971
|
const itemMetadata = {
|
|
3768
3972
|
101: { name: 'Ore', description: 'Crude metallic ore.', color: '#C26D3F' },
|
|
3769
3973
|
102: { name: 'Ore', description: 'Refined metallic ore with improved purity.', color: '#C26D3F' },
|
|
@@ -3772,6 +3976,13 @@ const itemMetadata = {
|
|
|
3772
3976
|
description: 'High-grade metallic ore with exceptional density.',
|
|
3773
3977
|
color: '#C26D3F',
|
|
3774
3978
|
},
|
|
3979
|
+
104: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
3980
|
+
105: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
3981
|
+
106: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
3982
|
+
107: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
3983
|
+
108: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
3984
|
+
109: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
3985
|
+
110: { name: 'Ore', description: '', color: '#C26D3F' },
|
|
3775
3986
|
201: { name: 'Crystal', description: 'Raw resonant crystal.', color: '#4ADBFF' },
|
|
3776
3987
|
202: {
|
|
3777
3988
|
name: 'Crystal',
|
|
@@ -3783,6 +3994,13 @@ const itemMetadata = {
|
|
|
3783
3994
|
description: 'High-grade resonant crystal with exceptional purity.',
|
|
3784
3995
|
color: '#4ADBFF',
|
|
3785
3996
|
},
|
|
3997
|
+
204: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
3998
|
+
205: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
3999
|
+
206: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4000
|
+
207: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4001
|
+
208: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4002
|
+
209: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
4003
|
+
210: { name: 'Crystal', description: '', color: '#4ADBFF' },
|
|
3786
4004
|
301: { name: 'Gas', description: 'Raw volatile gas.', color: '#B8E4A0' },
|
|
3787
4005
|
302: {
|
|
3788
4006
|
name: 'Gas',
|
|
@@ -3794,6 +4012,13 @@ const itemMetadata = {
|
|
|
3794
4012
|
description: 'High-grade volatile gas with exceptional energy density.',
|
|
3795
4013
|
color: '#B8E4A0',
|
|
3796
4014
|
},
|
|
4015
|
+
304: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4016
|
+
305: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4017
|
+
306: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4018
|
+
307: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4019
|
+
308: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4020
|
+
309: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
4021
|
+
310: { name: 'Gas', description: '', color: '#B8E4A0' },
|
|
3797
4022
|
401: { name: 'Regolith', description: 'Crude regolith dust.', color: '#C4A57B' },
|
|
3798
4023
|
402: {
|
|
3799
4024
|
name: 'Regolith',
|
|
@@ -3805,6 +4030,13 @@ const itemMetadata = {
|
|
|
3805
4030
|
description: 'High-grade regolith with exceptional uniformity.',
|
|
3806
4031
|
color: '#C4A57B',
|
|
3807
4032
|
},
|
|
4033
|
+
404: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4034
|
+
405: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4035
|
+
406: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4036
|
+
407: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4037
|
+
408: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4038
|
+
409: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
4039
|
+
410: { name: 'Regolith', description: '', color: '#C4A57B' },
|
|
3808
4040
|
501: { name: 'Biomass', description: 'Crude organic biomass.', color: '#5A8B3E' },
|
|
3809
4041
|
502: {
|
|
3810
4042
|
name: 'Biomass',
|
|
@@ -3816,6 +4048,13 @@ const itemMetadata = {
|
|
|
3816
4048
|
description: 'High-grade biomass with exceptional saturation.',
|
|
3817
4049
|
color: '#5A8B3E',
|
|
3818
4050
|
},
|
|
4051
|
+
504: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4052
|
+
505: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4053
|
+
506: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4054
|
+
507: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4055
|
+
508: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4056
|
+
509: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
4057
|
+
510: { name: 'Biomass', description: '', color: '#5A8B3E' },
|
|
3819
4058
|
10001: {
|
|
3820
4059
|
name: 'Hull Plates',
|
|
3821
4060
|
description: 'Structural plating formed from ore. Used in hulls, containers, and frames.',
|
|
@@ -3901,6 +4140,11 @@ const itemMetadata = {
|
|
|
3901
4140
|
description: 'Projects a haul beam to lock onto and transport containers or warehouses through group travel.',
|
|
3902
4141
|
color: '#4ADBFF',
|
|
3903
4142
|
},
|
|
4143
|
+
10107: {
|
|
4144
|
+
name: 'Warp',
|
|
4145
|
+
description: 'Folds local space-time around the hull, projecting the ship across vast distances in a single discharge of the entire energy reserve.',
|
|
4146
|
+
color: '#9be4ff',
|
|
4147
|
+
},
|
|
3904
4148
|
10200: {
|
|
3905
4149
|
name: 'Container',
|
|
3906
4150
|
description: 'Passive floating cargo storage in space. Towed by ships.',
|
|
@@ -3916,6 +4160,11 @@ const itemMetadata = {
|
|
|
3916
4160
|
description: 'Massive stationary storage facility with a single loader module slot.',
|
|
3917
4161
|
color: '#EAB308',
|
|
3918
4162
|
},
|
|
4163
|
+
10203: {
|
|
4164
|
+
name: 'Extractor',
|
|
4165
|
+
description: 'Planetary resource extraction facility with generator and gatherer module slots.',
|
|
4166
|
+
color: '#D4726F',
|
|
4167
|
+
},
|
|
3919
4168
|
20001: {
|
|
3920
4169
|
name: 'Hull Plates',
|
|
3921
4170
|
description: 'Advanced structural plating reinforced with tier 2 ore.',
|
|
@@ -3935,6 +4184,7 @@ const itemMetadata = {
|
|
|
3935
4184
|
const entityMetadata = {
|
|
3936
4185
|
10201: { moduleSlotLabels: ['Engine', 'Generator', 'Gatherer', 'Loader', 'Storage'] },
|
|
3937
4186
|
10202: { moduleSlotLabels: ['Loader', 'Storage', 'Storage', 'Storage', 'Storage'] },
|
|
4187
|
+
10203: { moduleSlotLabels: ['Generator', 'Gatherer'] },
|
|
3938
4188
|
};
|
|
3939
4189
|
for (const item of items) {
|
|
3940
4190
|
if (!itemMetadata[item.id]) {
|
|
@@ -4040,9 +4290,6 @@ function typeLabel(type) {
|
|
|
4040
4290
|
function categoryLabel(cat) {
|
|
4041
4291
|
return CATEGORY_LABELS[cat];
|
|
4042
4292
|
}
|
|
4043
|
-
function tierLabel(tier) {
|
|
4044
|
-
return tierLabels[tier] ?? `T${tier}`;
|
|
4045
|
-
}
|
|
4046
4293
|
const CATEGORY_BY_INDEX = ['ore', 'gas', 'regolith', 'biomass', 'crystal'];
|
|
4047
4294
|
function categoryFromIndex(i) {
|
|
4048
4295
|
return CATEGORY_BY_INDEX[i];
|
|
@@ -4105,10 +4352,15 @@ function hash512(seed, string) {
|
|
|
4105
4352
|
}
|
|
4106
4353
|
|
|
4107
4354
|
const DEPTH_THRESHOLD_T1 = 0;
|
|
4108
|
-
const DEPTH_THRESHOLD_T2 =
|
|
4109
|
-
const DEPTH_THRESHOLD_T3 =
|
|
4110
|
-
const DEPTH_THRESHOLD_T4 =
|
|
4111
|
-
const DEPTH_THRESHOLD_T5 =
|
|
4355
|
+
const DEPTH_THRESHOLD_T2 = 1500;
|
|
4356
|
+
const DEPTH_THRESHOLD_T3 = 5000;
|
|
4357
|
+
const DEPTH_THRESHOLD_T4 = 12000;
|
|
4358
|
+
const DEPTH_THRESHOLD_T5 = 22000;
|
|
4359
|
+
const DEPTH_THRESHOLD_T6 = 32000;
|
|
4360
|
+
const DEPTH_THRESHOLD_T7 = 42000;
|
|
4361
|
+
const DEPTH_THRESHOLD_T8 = 50000;
|
|
4362
|
+
const DEPTH_THRESHOLD_T9 = 57000;
|
|
4363
|
+
const DEPTH_THRESHOLD_T10 = 63000;
|
|
4112
4364
|
const LOCATION_MIN_DEPTH = 500;
|
|
4113
4365
|
const LOCATION_MAX_DEPTH = 65535;
|
|
4114
4366
|
const YIELD_THRESHOLD = Math.floor(0.001 * 0xffffffff);
|
|
@@ -4118,19 +4370,22 @@ const PLANET_SUBTYPE_TERRESTRIAL = 2;
|
|
|
4118
4370
|
const PLANET_SUBTYPE_ICY = 3;
|
|
4119
4371
|
const PLANET_SUBTYPE_OCEAN = 4;
|
|
4120
4372
|
const PLANET_SUBTYPE_INDUSTRIAL = 5;
|
|
4373
|
+
const DEPTH_THRESHOLD_TABLE = [
|
|
4374
|
+
DEPTH_THRESHOLD_T1,
|
|
4375
|
+
DEPTH_THRESHOLD_T2,
|
|
4376
|
+
DEPTH_THRESHOLD_T3,
|
|
4377
|
+
DEPTH_THRESHOLD_T4,
|
|
4378
|
+
DEPTH_THRESHOLD_T5,
|
|
4379
|
+
DEPTH_THRESHOLD_T6,
|
|
4380
|
+
DEPTH_THRESHOLD_T7,
|
|
4381
|
+
DEPTH_THRESHOLD_T8,
|
|
4382
|
+
DEPTH_THRESHOLD_T9,
|
|
4383
|
+
DEPTH_THRESHOLD_T10,
|
|
4384
|
+
];
|
|
4121
4385
|
function getDepthThreshold(tier) {
|
|
4122
|
-
|
|
4123
|
-
|
|
4124
|
-
|
|
4125
|
-
case 2:
|
|
4126
|
-
return DEPTH_THRESHOLD_T2;
|
|
4127
|
-
case 3:
|
|
4128
|
-
return DEPTH_THRESHOLD_T3;
|
|
4129
|
-
case 4:
|
|
4130
|
-
return DEPTH_THRESHOLD_T4;
|
|
4131
|
-
default:
|
|
4132
|
-
return DEPTH_THRESHOLD_T5;
|
|
4133
|
-
}
|
|
4386
|
+
if (tier < 1 || tier > 10)
|
|
4387
|
+
return 65535;
|
|
4388
|
+
return DEPTH_THRESHOLD_TABLE[tier - 1];
|
|
4134
4389
|
}
|
|
4135
4390
|
function getResourceTier(itemId) {
|
|
4136
4391
|
return getItem(itemId).tier;
|
|
@@ -4143,11 +4398,11 @@ function getResourceWeight(itemId, stratum) {
|
|
|
4143
4398
|
const depthAbove = stratum - threshold;
|
|
4144
4399
|
switch (tier) {
|
|
4145
4400
|
case 1:
|
|
4146
|
-
if (stratum <
|
|
4401
|
+
if (stratum < DEPTH_THRESHOLD_T2)
|
|
4147
4402
|
return 100;
|
|
4148
|
-
if (stratum <
|
|
4403
|
+
if (stratum < DEPTH_THRESHOLD_T3)
|
|
4149
4404
|
return 80;
|
|
4150
|
-
if (stratum <
|
|
4405
|
+
if (stratum < DEPTH_THRESHOLD_T4)
|
|
4151
4406
|
return 50;
|
|
4152
4407
|
return 30;
|
|
4153
4408
|
case 2:
|
|
@@ -4172,37 +4427,97 @@ function getResourceWeight(itemId, stratum) {
|
|
|
4172
4427
|
return 10;
|
|
4173
4428
|
}
|
|
4174
4429
|
}
|
|
4175
|
-
const
|
|
4176
|
-
const
|
|
4177
|
-
const
|
|
4178
|
-
const
|
|
4179
|
-
const
|
|
4180
|
-
|
|
4181
|
-
|
|
4182
|
-
|
|
4183
|
-
|
|
4184
|
-
|
|
4185
|
-
|
|
4186
|
-
|
|
4187
|
-
|
|
4188
|
-
|
|
4430
|
+
const RESOURCE_ORE = 0;
|
|
4431
|
+
const RESOURCE_GAS = 1;
|
|
4432
|
+
const RESOURCE_REGOLITH = 2;
|
|
4433
|
+
const RESOURCE_BIOMASS = 3;
|
|
4434
|
+
const RESOURCE_CRYSTAL = 4;
|
|
4435
|
+
function categoryBaseId(category) {
|
|
4436
|
+
switch (category) {
|
|
4437
|
+
case RESOURCE_ORE:
|
|
4438
|
+
return 100;
|
|
4439
|
+
case RESOURCE_CRYSTAL:
|
|
4440
|
+
return 200;
|
|
4441
|
+
case RESOURCE_GAS:
|
|
4442
|
+
return 300;
|
|
4443
|
+
case RESOURCE_REGOLITH:
|
|
4444
|
+
return 400;
|
|
4445
|
+
case RESOURCE_BIOMASS:
|
|
4446
|
+
return 500;
|
|
4447
|
+
default:
|
|
4448
|
+
return 0;
|
|
4449
|
+
}
|
|
4450
|
+
}
|
|
4451
|
+
function resourceId(category, tier) {
|
|
4452
|
+
return categoryBaseId(category) + tier;
|
|
4453
|
+
}
|
|
4454
|
+
function getLocationProfile(locationType, subtype) {
|
|
4455
|
+
if (locationType === LocationType.ASTEROID) {
|
|
4456
|
+
return [
|
|
4457
|
+
{ category: RESOURCE_ORE, maxTier: 5 },
|
|
4458
|
+
{ category: RESOURCE_CRYSTAL, maxTier: 5 },
|
|
4459
|
+
];
|
|
4460
|
+
}
|
|
4461
|
+
if (locationType === LocationType.NEBULA) {
|
|
4462
|
+
return [
|
|
4463
|
+
{ category: RESOURCE_GAS, maxTier: 5 },
|
|
4464
|
+
{ category: RESOURCE_REGOLITH, maxTier: 5 },
|
|
4465
|
+
];
|
|
4466
|
+
}
|
|
4467
|
+
if (locationType === LocationType.ICE_FIELD) {
|
|
4468
|
+
return [
|
|
4469
|
+
{ category: RESOURCE_GAS, maxTier: 5 },
|
|
4470
|
+
{ category: RESOURCE_BIOMASS, maxTier: 5 },
|
|
4471
|
+
];
|
|
4472
|
+
}
|
|
4473
|
+
if (locationType === LocationType.PLANET) {
|
|
4189
4474
|
switch (subtype) {
|
|
4190
4475
|
case PLANET_SUBTYPE_GAS_GIANT:
|
|
4191
|
-
return
|
|
4476
|
+
return [
|
|
4477
|
+
{ category: RESOURCE_GAS, maxTier: 10 },
|
|
4478
|
+
{ category: RESOURCE_CRYSTAL, maxTier: 3 },
|
|
4479
|
+
];
|
|
4192
4480
|
case PLANET_SUBTYPE_ROCKY:
|
|
4193
|
-
return
|
|
4481
|
+
return [
|
|
4482
|
+
{ category: RESOURCE_REGOLITH, maxTier: 10 },
|
|
4483
|
+
{ category: RESOURCE_ORE, maxTier: 3 },
|
|
4484
|
+
];
|
|
4194
4485
|
case PLANET_SUBTYPE_TERRESTRIAL:
|
|
4195
|
-
return
|
|
4486
|
+
return [
|
|
4487
|
+
{ category: RESOURCE_ORE, maxTier: 10 },
|
|
4488
|
+
{ category: RESOURCE_BIOMASS, maxTier: 3 },
|
|
4489
|
+
];
|
|
4196
4490
|
case PLANET_SUBTYPE_ICY:
|
|
4197
|
-
return
|
|
4491
|
+
return [
|
|
4492
|
+
{ category: RESOURCE_CRYSTAL, maxTier: 10 },
|
|
4493
|
+
{ category: RESOURCE_REGOLITH, maxTier: 3 },
|
|
4494
|
+
];
|
|
4198
4495
|
case PLANET_SUBTYPE_OCEAN:
|
|
4199
|
-
return
|
|
4496
|
+
return [
|
|
4497
|
+
{ category: RESOURCE_BIOMASS, maxTier: 10 },
|
|
4498
|
+
{ category: RESOURCE_GAS, maxTier: 3 },
|
|
4499
|
+
];
|
|
4200
4500
|
case PLANET_SUBTYPE_INDUSTRIAL:
|
|
4201
|
-
return
|
|
4501
|
+
return [
|
|
4502
|
+
{ category: RESOURCE_ORE, maxTier: 3 },
|
|
4503
|
+
{ category: RESOURCE_CRYSTAL, maxTier: 3 },
|
|
4504
|
+
{ category: RESOURCE_REGOLITH, maxTier: 3 },
|
|
4505
|
+
{ category: RESOURCE_BIOMASS, maxTier: 3 },
|
|
4506
|
+
];
|
|
4202
4507
|
}
|
|
4203
4508
|
}
|
|
4204
4509
|
return [];
|
|
4205
4510
|
}
|
|
4511
|
+
function getLocationCandidates(locationType, subtype) {
|
|
4512
|
+
const profile = getLocationProfile(locationType, subtype);
|
|
4513
|
+
const ids = [];
|
|
4514
|
+
for (const { category, maxTier } of profile) {
|
|
4515
|
+
for (let tier = 1; tier <= maxTier; tier++) {
|
|
4516
|
+
ids.push(resourceId(category, tier));
|
|
4517
|
+
}
|
|
4518
|
+
}
|
|
4519
|
+
return ids;
|
|
4520
|
+
}
|
|
4206
4521
|
function getEligibleResources(locationType, subtype, stratum) {
|
|
4207
4522
|
const candidates = getLocationCandidates(locationType, subtype);
|
|
4208
4523
|
return candidates.filter((itemId) => {
|
|
@@ -6378,7 +6693,6 @@ var nebulaNouns = [
|
|
|
6378
6693
|
];
|
|
6379
6694
|
|
|
6380
6695
|
const LOCATION_EXISTS_THRESHOLD = 0x10;
|
|
6381
|
-
const LOCATION_ACTIVE_THRESHOLD = 0x80;
|
|
6382
6696
|
function getLocationType(gameSeed, coordinates) {
|
|
6383
6697
|
const seed = Checksum256.from(gameSeed);
|
|
6384
6698
|
const str = ['system', coordinates.x, coordinates.y].join('-');
|
|
@@ -6386,13 +6700,13 @@ function getLocationType(gameSeed, coordinates) {
|
|
|
6386
6700
|
if (hashResult.array[0] >= LOCATION_EXISTS_THRESHOLD) {
|
|
6387
6701
|
return LocationType.EMPTY;
|
|
6388
6702
|
}
|
|
6389
|
-
if (hashResult.array[1] < 96)
|
|
6703
|
+
if (hashResult.array[1] < 96)
|
|
6390
6704
|
return LocationType.PLANET;
|
|
6391
|
-
|
|
6392
|
-
else if (hashResult.array[1] < 176) {
|
|
6705
|
+
if (hashResult.array[1] < 149)
|
|
6393
6706
|
return LocationType.ASTEROID;
|
|
6394
|
-
|
|
6395
|
-
|
|
6707
|
+
if (hashResult.array[1] < 202)
|
|
6708
|
+
return LocationType.NEBULA;
|
|
6709
|
+
return LocationType.ICE_FIELD;
|
|
6396
6710
|
}
|
|
6397
6711
|
function isGatherableLocation(locationType) {
|
|
6398
6712
|
return locationType !== LocationType.EMPTY;
|
|
@@ -6407,6 +6721,8 @@ function getLocationTypeName(type) {
|
|
|
6407
6721
|
return 'Asteroid';
|
|
6408
6722
|
case LocationType.NEBULA:
|
|
6409
6723
|
return 'Nebula';
|
|
6724
|
+
case LocationType.ICE_FIELD:
|
|
6725
|
+
return 'Ice Field';
|
|
6410
6726
|
}
|
|
6411
6727
|
}
|
|
6412
6728
|
function uint16(hash, offset) {
|
|
@@ -6434,6 +6750,14 @@ function generateNebulaName(hashResult) {
|
|
|
6434
6750
|
const nounIdx = uint16(hashResult, 2) % nebulaNouns.length;
|
|
6435
6751
|
return `${nebulaAdjectives[adjIdx]} ${nebulaNouns[nounIdx]}`;
|
|
6436
6752
|
}
|
|
6753
|
+
function generateIceFieldName(hashResult) {
|
|
6754
|
+
const A = 65;
|
|
6755
|
+
const letter1 = String.fromCharCode(A + (hashResult.array[0] % 26));
|
|
6756
|
+
const letter2 = String.fromCharCode(A + (hashResult.array[1] % 26));
|
|
6757
|
+
const subId = (hashResult.array[2] % 9) + 1;
|
|
6758
|
+
const num = (uint16(hashResult, 3) % 9000) + 1000;
|
|
6759
|
+
return `${letter1}${letter2}-${subId}/${num}`;
|
|
6760
|
+
}
|
|
6437
6761
|
function getSystemName(gameSeed, location) {
|
|
6438
6762
|
const seed = Checksum256.from(gameSeed);
|
|
6439
6763
|
const locationType = getLocationType(seed, location);
|
|
@@ -6449,6 +6773,8 @@ function getSystemName(gameSeed, location) {
|
|
|
6449
6773
|
return generateAsteroidName(hashResult);
|
|
6450
6774
|
case LocationType.NEBULA:
|
|
6451
6775
|
return generateNebulaName(hashResult);
|
|
6776
|
+
case LocationType.ICE_FIELD:
|
|
6777
|
+
return generateIceFieldName(hashResult);
|
|
6452
6778
|
default:
|
|
6453
6779
|
return generatePlanetName(hashResult);
|
|
6454
6780
|
}
|
|
@@ -6474,33 +6800,27 @@ function deriveLocationStatic(gameSeed, coordinates) {
|
|
|
6474
6800
|
if (hashResult.array[1] < 96) {
|
|
6475
6801
|
loc.type = UInt8.from(LocationType.PLANET);
|
|
6476
6802
|
}
|
|
6477
|
-
else if (hashResult.array[1] <
|
|
6803
|
+
else if (hashResult.array[1] < 149) {
|
|
6478
6804
|
loc.type = UInt8.from(LocationType.ASTEROID);
|
|
6479
6805
|
}
|
|
6480
|
-
else {
|
|
6806
|
+
else if (hashResult.array[1] < 202) {
|
|
6481
6807
|
loc.type = UInt8.from(LocationType.NEBULA);
|
|
6482
6808
|
}
|
|
6809
|
+
else {
|
|
6810
|
+
loc.type = UInt8.from(LocationType.ICE_FIELD);
|
|
6811
|
+
}
|
|
6483
6812
|
loc.subtype = UInt8.from(Number(loc.type) === LocationType.PLANET ? hashResult.array[2] % 6 : hashResult.array[2]);
|
|
6484
6813
|
loc.seed0 = UInt8.from(hashResult.array[3]);
|
|
6485
6814
|
loc.seed1 = UInt8.from(hashResult.array[4]);
|
|
6486
6815
|
return loc;
|
|
6487
6816
|
}
|
|
6488
|
-
function
|
|
6489
|
-
|
|
6490
|
-
const coords = Coordinates.from(coordinates);
|
|
6491
|
-
const str = `system-epoch-${coords.x}-${coords.y}`;
|
|
6492
|
-
const hashResult = hash512(seed, str);
|
|
6493
|
-
return Types.location_epoch.from({
|
|
6494
|
-
active: hashResult.array[0] < LOCATION_ACTIVE_THRESHOLD,
|
|
6495
|
-
seed0: hashResult.array[1],
|
|
6496
|
-
seed1: hashResult.array[2],
|
|
6497
|
-
});
|
|
6817
|
+
function isLocationBuildable(gameSeed, coordinates) {
|
|
6818
|
+
return getLocationType(gameSeed, coordinates) === LocationType.PLANET;
|
|
6498
6819
|
}
|
|
6499
|
-
function deriveLocation(gameSeed,
|
|
6820
|
+
function deriveLocation(gameSeed, coordinates) {
|
|
6500
6821
|
const staticProps = deriveLocationStatic(gameSeed, coordinates);
|
|
6501
6822
|
return Types.location_derived.from({
|
|
6502
6823
|
static_props: staticProps,
|
|
6503
|
-
epoch_props: deriveLocationEpoch(epochSeed, coordinates),
|
|
6504
6824
|
size: deriveLocationSize(staticProps),
|
|
6505
6825
|
});
|
|
6506
6826
|
}
|
|
@@ -6527,9 +6847,6 @@ class GameState extends Types.state_row {
|
|
|
6527
6847
|
get isEnabled() {
|
|
6528
6848
|
return this.enabled;
|
|
6529
6849
|
}
|
|
6530
|
-
get shipCount() {
|
|
6531
|
-
return Number(this.ships);
|
|
6532
|
-
}
|
|
6533
6850
|
get currentSalt() {
|
|
6534
6851
|
return this.salt;
|
|
6535
6852
|
}
|
|
@@ -6570,7 +6887,6 @@ class GameState extends Types.state_row {
|
|
|
6570
6887
|
return {
|
|
6571
6888
|
enabled: this.enabled,
|
|
6572
6889
|
epoch: this.epoch.toString(),
|
|
6573
|
-
ships: this.shipCount,
|
|
6574
6890
|
hasSeed: !this.seed.equals(Checksum256.from('0'.repeat(64))),
|
|
6575
6891
|
hasCommit: !this.commit.equals(Checksum256.from('0'.repeat(64))),
|
|
6576
6892
|
};
|
|
@@ -6622,6 +6938,40 @@ function lerp$1(origin, destination, time) {
|
|
|
6622
6938
|
y: (1 - time) * Number(origin.y) + time * Number(destination.y),
|
|
6623
6939
|
};
|
|
6624
6940
|
}
|
|
6941
|
+
function easeFlightProgress(t) {
|
|
6942
|
+
if (t <= 0)
|
|
6943
|
+
return 0;
|
|
6944
|
+
if (t >= 1)
|
|
6945
|
+
return 1;
|
|
6946
|
+
return t < 0.5 ? 2 * t * t : 1 - 2 * (1 - t) * (1 - t);
|
|
6947
|
+
}
|
|
6948
|
+
function flightSpeedFactor(t) {
|
|
6949
|
+
if (t <= 0 || t >= 1)
|
|
6950
|
+
return 0;
|
|
6951
|
+
return t < 0.5 ? 4 * t : 4 * (1 - t);
|
|
6952
|
+
}
|
|
6953
|
+
function interpolateFlightPosition(origin, destination, taskProgress, options) {
|
|
6954
|
+
const t = options?.easing === 'linear' ? taskProgress : easeFlightProgress(taskProgress);
|
|
6955
|
+
return {
|
|
6956
|
+
x: (1 - t) * Number(origin.x) + t * Number(destination.x),
|
|
6957
|
+
y: (1 - t) * Number(origin.y) + t * Number(destination.y),
|
|
6958
|
+
};
|
|
6959
|
+
}
|
|
6960
|
+
function getInterpolatedPosition(entity, taskIndex, taskProgress) {
|
|
6961
|
+
if (!entity.schedule || entity.schedule.tasks.length === 0) {
|
|
6962
|
+
return { x: Number(entity.coordinates.x), y: Number(entity.coordinates.y) };
|
|
6963
|
+
}
|
|
6964
|
+
if (taskIndex < 0) {
|
|
6965
|
+
const settled = getFlightOrigin(entity, entity.schedule.tasks.length);
|
|
6966
|
+
return { x: Number(settled.x), y: Number(settled.y) };
|
|
6967
|
+
}
|
|
6968
|
+
const task = entity.schedule.tasks[taskIndex];
|
|
6969
|
+
if (!task.type.equals(TaskType.TRAVEL) || !task.coordinates) {
|
|
6970
|
+
const origin = getFlightOrigin(entity, taskIndex);
|
|
6971
|
+
return { x: Number(origin.x), y: Number(origin.y) };
|
|
6972
|
+
}
|
|
6973
|
+
return interpolateFlightPosition(getFlightOrigin(entity, taskIndex), task.coordinates, taskProgress);
|
|
6974
|
+
}
|
|
6625
6975
|
function rotation(origin, destination) {
|
|
6626
6976
|
return Math.atan2(destination.y - origin.y, destination.x - origin.x) * (180 / Math.PI) + 90;
|
|
6627
6977
|
}
|
|
@@ -6831,9 +7181,12 @@ function getDestinationLocation(entity) {
|
|
|
6831
7181
|
return undefined;
|
|
6832
7182
|
}
|
|
6833
7183
|
function getPositionAt(entity, taskIndex, taskProgress) {
|
|
6834
|
-
if (!entity.schedule || entity.schedule.tasks.length === 0
|
|
7184
|
+
if (!entity.schedule || entity.schedule.tasks.length === 0) {
|
|
6835
7185
|
return entity.coordinates;
|
|
6836
7186
|
}
|
|
7187
|
+
if (taskIndex < 0) {
|
|
7188
|
+
return getFlightOrigin(entity, entity.schedule.tasks.length);
|
|
7189
|
+
}
|
|
6837
7190
|
const task = entity.schedule.tasks[taskIndex];
|
|
6838
7191
|
if (!task.type.equals(TaskType.TRAVEL) || !task.coordinates) {
|
|
6839
7192
|
return getFlightOrigin(entity, taskIndex);
|
|
@@ -6886,7 +7239,8 @@ function calc_transfer_duration(source, dest, cargoMass) {
|
|
|
6886
7239
|
? source.location.z
|
|
6887
7240
|
: (source.location.z?.toNumber() ?? 0);
|
|
6888
7241
|
const destZ = typeof dest.location.z === 'number' ? dest.location.z : (dest.location.z?.toNumber() ?? 0);
|
|
6889
|
-
const
|
|
7242
|
+
const rawDistance = Math.abs(sourceZ - destZ);
|
|
7243
|
+
const distance = rawDistance < MIN_TRANSFER_DISTANCE ? MIN_TRANSFER_DISTANCE : rawDistance;
|
|
6890
7244
|
const totalMass = cargoMass + totalLoaderMass;
|
|
6891
7245
|
const acceleration = calc_acceleration(totalThrust, totalMass);
|
|
6892
7246
|
const flightTime = 2 * Math.sqrt(distance / acceleration);
|
|
@@ -6965,7 +7319,7 @@ function cargoItemToStack(item) {
|
|
|
6965
7319
|
return {
|
|
6966
7320
|
item_id: UInt16.from(item.item_id),
|
|
6967
7321
|
quantity: UInt32.from(item.quantity),
|
|
6968
|
-
stats: item.stats,
|
|
7322
|
+
stats: UInt64.from(item.stats),
|
|
6969
7323
|
modules: item.modules ?? [],
|
|
6970
7324
|
};
|
|
6971
7325
|
}
|
|
@@ -7062,7 +7416,7 @@ function currentTaskIndex(entity, now) {
|
|
|
7062
7416
|
}
|
|
7063
7417
|
timeAccum += taskDuration;
|
|
7064
7418
|
}
|
|
7065
|
-
return
|
|
7419
|
+
return -1;
|
|
7066
7420
|
}
|
|
7067
7421
|
function currentTask(entity, now) {
|
|
7068
7422
|
const index = currentTaskIndex(entity, now);
|
|
@@ -7128,8 +7482,25 @@ function currentTaskProgress(entity, now) {
|
|
|
7128
7482
|
return 1;
|
|
7129
7483
|
return Math.min(1, elapsed / duration);
|
|
7130
7484
|
}
|
|
7131
|
-
function
|
|
7132
|
-
|
|
7485
|
+
function currentTaskProgressFloat(entity, now) {
|
|
7486
|
+
if (!entity.schedule || entity.schedule.tasks.length === 0)
|
|
7487
|
+
return 0;
|
|
7488
|
+
const index = currentTaskIndex(entity, now);
|
|
7489
|
+
if (index < 0)
|
|
7490
|
+
return 0;
|
|
7491
|
+
const task = entity.schedule.tasks[index];
|
|
7492
|
+
const durationMs = task.duration.toNumber() * 1000;
|
|
7493
|
+
if (durationMs === 0)
|
|
7494
|
+
return 1;
|
|
7495
|
+
const startedMs = entity.schedule.started.toDate().getTime();
|
|
7496
|
+
const taskStartMs = startedMs + getTaskStartTime(entity, index) * 1000;
|
|
7497
|
+
const elapsedMs = now.getTime() - taskStartMs;
|
|
7498
|
+
if (elapsedMs <= 0)
|
|
7499
|
+
return 0;
|
|
7500
|
+
return Math.min(1, elapsedMs / durationMs);
|
|
7501
|
+
}
|
|
7502
|
+
function scheduleProgress(entity, now) {
|
|
7503
|
+
const duration = scheduleDuration(entity);
|
|
7133
7504
|
if (duration === 0)
|
|
7134
7505
|
return hasSchedule$1(entity) ? 1 : 0;
|
|
7135
7506
|
const elapsed = scheduleElapsed(entity, now);
|
|
@@ -7172,6 +7543,7 @@ var schedule = /*#__PURE__*/Object.freeze({
|
|
|
7172
7543
|
isTaskComplete: isTaskComplete,
|
|
7173
7544
|
isTaskInProgress: isTaskInProgress,
|
|
7174
7545
|
currentTaskProgress: currentTaskProgress,
|
|
7546
|
+
currentTaskProgressFloat: currentTaskProgressFloat,
|
|
7175
7547
|
scheduleProgress: scheduleProgress,
|
|
7176
7548
|
isTaskType: isTaskType,
|
|
7177
7549
|
isInFlight: isInFlight,
|
|
@@ -7352,6 +7724,10 @@ function applyTask(projected, task) {
|
|
|
7352
7724
|
case TaskType.DEPLOY:
|
|
7353
7725
|
applyDeployTask(projected, task);
|
|
7354
7726
|
break;
|
|
7727
|
+
case TaskType.UNDEPLOY:
|
|
7728
|
+
case TaskType.WRAP_ENTITY:
|
|
7729
|
+
case TaskType.DEMOLISH:
|
|
7730
|
+
break;
|
|
7355
7731
|
}
|
|
7356
7732
|
}
|
|
7357
7733
|
function projectEntity(entity, options) {
|
|
@@ -7517,6 +7893,10 @@ function projectEntityAt(entity, now) {
|
|
|
7517
7893
|
if (taskComplete)
|
|
7518
7894
|
applyDeployTask(projected, task);
|
|
7519
7895
|
break;
|
|
7896
|
+
case TaskType.UNDEPLOY:
|
|
7897
|
+
case TaskType.WRAP_ENTITY:
|
|
7898
|
+
case TaskType.DEMOLISH:
|
|
7899
|
+
break;
|
|
7520
7900
|
}
|
|
7521
7901
|
}
|
|
7522
7902
|
return projected;
|
|
@@ -7620,6 +8000,9 @@ class ScheduleAccessor {
|
|
|
7620
8000
|
currentTaskProgress(now) {
|
|
7621
8001
|
return currentTaskProgress(this.entity, now);
|
|
7622
8002
|
}
|
|
8003
|
+
currentTaskProgressFloat(now) {
|
|
8004
|
+
return currentTaskProgressFloat(this.entity, now);
|
|
8005
|
+
}
|
|
7623
8006
|
progress(now) {
|
|
7624
8007
|
return scheduleProgress(this.entity, now);
|
|
7625
8008
|
}
|
|
@@ -7708,6 +8091,12 @@ class Ship extends Types.entity_info {
|
|
|
7708
8091
|
get name() {
|
|
7709
8092
|
return this.entity_name;
|
|
7710
8093
|
}
|
|
8094
|
+
get entityClass() {
|
|
8095
|
+
return 'mobile';
|
|
8096
|
+
}
|
|
8097
|
+
get canUndeploy() {
|
|
8098
|
+
return true;
|
|
8099
|
+
}
|
|
7711
8100
|
get inv() {
|
|
7712
8101
|
this._inv ?? (this._inv = new InventoryAccessor(this));
|
|
7713
8102
|
return this._inv;
|
|
@@ -7739,6 +8128,11 @@ class Ship extends Types.entity_info {
|
|
|
7739
8128
|
const progress = this.sched.currentTaskProgress(now);
|
|
7740
8129
|
return Coordinates.from(getPositionAt(this, taskIndex, progress));
|
|
7741
8130
|
}
|
|
8131
|
+
interpolatedPositionAt(now) {
|
|
8132
|
+
const taskIndex = this.sched.currentTaskIndex(now);
|
|
8133
|
+
const progress = this.sched.currentTaskProgressFloat(now);
|
|
8134
|
+
return getInterpolatedPosition(this, taskIndex, progress);
|
|
8135
|
+
}
|
|
7742
8136
|
isInFlight(now) {
|
|
7743
8137
|
return isInFlight(this, now);
|
|
7744
8138
|
}
|
|
@@ -7845,8 +8239,7 @@ const ORE_STATS = [
|
|
|
7845
8239
|
key: 'density',
|
|
7846
8240
|
label: 'Density',
|
|
7847
8241
|
abbreviation: 'DEN',
|
|
7848
|
-
purpose: '
|
|
7849
|
-
inverted: true,
|
|
8242
|
+
purpose: 'Structural integrity — higher rolls produce lighter hulls',
|
|
7850
8243
|
},
|
|
7851
8244
|
];
|
|
7852
8245
|
const CRYSTAL_STATS = [
|
|
@@ -8387,6 +8780,8 @@ function getModuleCapabilityType(itemId) {
|
|
|
8387
8780
|
return MODULE_STORAGE;
|
|
8388
8781
|
case ITEM_HAULER_T1:
|
|
8389
8782
|
return MODULE_HAULER;
|
|
8783
|
+
case ITEM_WARP_T1:
|
|
8784
|
+
return MODULE_WARP;
|
|
8390
8785
|
default:
|
|
8391
8786
|
return 0xff;
|
|
8392
8787
|
}
|
|
@@ -8421,92 +8816,124 @@ function moduleSlotTypeToCode(slotType) {
|
|
|
8421
8816
|
}
|
|
8422
8817
|
}
|
|
8423
8818
|
|
|
8819
|
+
const U16_MAX = 65535;
|
|
8820
|
+
function clampUint16(value) {
|
|
8821
|
+
return Math.min(value, U16_MAX);
|
|
8822
|
+
}
|
|
8823
|
+
function applySlotMultiplier(value, outputPct) {
|
|
8824
|
+
return clampUint16(Math.floor((value * outputPct) / 100));
|
|
8825
|
+
}
|
|
8826
|
+
function getSlotAmp(layout, slotIndex) {
|
|
8827
|
+
return layout[slotIndex]?.outputPct ?? 100;
|
|
8828
|
+
}
|
|
8829
|
+
|
|
8424
8830
|
function computeShipHullCapabilities(stats) {
|
|
8425
|
-
const density = stats.density
|
|
8426
|
-
const strength = stats.strength
|
|
8427
|
-
const hardness = stats.hardness
|
|
8428
|
-
const saturation = stats.saturation
|
|
8429
|
-
const hullmass =
|
|
8831
|
+
const density = stats.density;
|
|
8832
|
+
const strength = stats.strength;
|
|
8833
|
+
const hardness = stats.hardness;
|
|
8834
|
+
const saturation = stats.saturation;
|
|
8835
|
+
const hullmass = 100000 - 75 * density;
|
|
8430
8836
|
const statSum = strength + hardness + saturation;
|
|
8431
8837
|
const exponent = statSum / 2997.0;
|
|
8432
8838
|
const capacity = Math.floor(1000000 * 10 ** exponent);
|
|
8433
8839
|
return { hullmass, capacity };
|
|
8434
8840
|
}
|
|
8435
8841
|
function computeEngineCapabilities(stats) {
|
|
8436
|
-
const vol = stats.volatility
|
|
8437
|
-
const thm = stats.thermal
|
|
8842
|
+
const vol = stats.volatility;
|
|
8843
|
+
const thm = stats.thermal;
|
|
8438
8844
|
return {
|
|
8439
8845
|
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
8440
8846
|
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
8441
8847
|
};
|
|
8442
8848
|
}
|
|
8443
8849
|
function computeGeneratorCapabilities(stats) {
|
|
8444
|
-
const
|
|
8445
|
-
const
|
|
8850
|
+
const com = stats.composition;
|
|
8851
|
+
const fin = stats.fineness;
|
|
8446
8852
|
return {
|
|
8447
|
-
capacity: 300 + Math.floor(
|
|
8448
|
-
recharge: 1 + Math.floor((
|
|
8449
|
-
};
|
|
8450
|
-
}
|
|
8451
|
-
|
|
8452
|
-
|
|
8453
|
-
|
|
8454
|
-
|
|
8455
|
-
|
|
8853
|
+
capacity: 300 + Math.floor(com / 6),
|
|
8854
|
+
recharge: 1 + Math.floor((fin * 3) / 1000),
|
|
8855
|
+
};
|
|
8856
|
+
}
|
|
8857
|
+
const GATHERER_DEPTH_TABLE = [
|
|
8858
|
+
{ floor: 500, slope: 5 },
|
|
8859
|
+
{ floor: 2000, slope: 11 },
|
|
8860
|
+
{ floor: 7000, slope: 16 },
|
|
8861
|
+
{ floor: 15000, slope: 18 },
|
|
8862
|
+
{ floor: 25000, slope: 19 },
|
|
8863
|
+
{ floor: 35000, slope: 16 },
|
|
8864
|
+
{ floor: 46000, slope: 12 },
|
|
8865
|
+
{ floor: 53500, slope: 10 },
|
|
8866
|
+
{ floor: 60000, slope: 5 },
|
|
8867
|
+
{ floor: 63500, slope: 2 },
|
|
8868
|
+
];
|
|
8869
|
+
const GATHERER_DEPTH_MAX_TIER = 10;
|
|
8870
|
+
function gathererDepthForTier(tol, tier) {
|
|
8871
|
+
if (tier < 1 || tier > GATHERER_DEPTH_MAX_TIER) {
|
|
8872
|
+
throw new Error(`gatherer tier out of range: ${tier}`);
|
|
8873
|
+
}
|
|
8874
|
+
const p = GATHERER_DEPTH_TABLE[tier - 1];
|
|
8875
|
+
return p.floor + tol * p.slope;
|
|
8876
|
+
}
|
|
8877
|
+
function computeGathererCapabilities(stats, tier) {
|
|
8878
|
+
const str = stats.strength;
|
|
8879
|
+
const con = stats.conductivity;
|
|
8880
|
+
const ref = stats.reflectivity;
|
|
8881
|
+
const tol = stats.tolerance;
|
|
8456
8882
|
return {
|
|
8457
8883
|
yield: 200 + str,
|
|
8458
8884
|
drain: Math.max(250, 1250 - Math.floor((con * 25) / 20)),
|
|
8459
|
-
depth:
|
|
8885
|
+
depth: gathererDepthForTier(tol, tier),
|
|
8460
8886
|
speed: 100 + Math.floor((ref * 4) / 5),
|
|
8461
8887
|
};
|
|
8462
8888
|
}
|
|
8463
8889
|
function computeLoaderCapabilities(stats) {
|
|
8464
|
-
const
|
|
8465
|
-
const
|
|
8890
|
+
const insulation = stats.insulation;
|
|
8891
|
+
const plasticity = stats.plasticity;
|
|
8466
8892
|
return {
|
|
8467
|
-
mass: Math.max(200, 2000 - Math.floor(
|
|
8468
|
-
thrust: 1 + Math.floor(
|
|
8893
|
+
mass: Math.max(200, 2000 - Math.floor(insulation * 2)),
|
|
8894
|
+
thrust: 1 + Math.floor(plasticity / 500),
|
|
8469
8895
|
quantity: 1,
|
|
8470
8896
|
};
|
|
8471
8897
|
}
|
|
8472
8898
|
function computeCrafterCapabilities(stats) {
|
|
8473
|
-
const rea = stats.reactivity
|
|
8474
|
-
const
|
|
8899
|
+
const rea = stats.reactivity;
|
|
8900
|
+
const fin = stats.fineness;
|
|
8475
8901
|
return {
|
|
8476
8902
|
speed: 100 + Math.floor((rea * 4) / 5),
|
|
8477
|
-
drain: Math.max(5, 30 - Math.floor(
|
|
8903
|
+
drain: Math.max(5, 30 - Math.floor(fin / 33)),
|
|
8478
8904
|
};
|
|
8479
8905
|
}
|
|
8480
8906
|
function computeHaulerCapabilities(stats) {
|
|
8481
|
-
const
|
|
8482
|
-
const
|
|
8483
|
-
const
|
|
8907
|
+
const fineness = stats.fineness;
|
|
8908
|
+
const conductivity = stats.conductivity;
|
|
8909
|
+
const composition = stats.composition;
|
|
8484
8910
|
return {
|
|
8485
|
-
capacity: Math.max(1, 1 + Math.floor(
|
|
8486
|
-
efficiency: 2000 +
|
|
8487
|
-
drain: Math.max(3, 15 - Math.floor(
|
|
8911
|
+
capacity: Math.max(1, 1 + Math.floor(fineness / 400)),
|
|
8912
|
+
efficiency: 2000 + conductivity * 6,
|
|
8913
|
+
drain: Math.max(3, 15 - Math.floor(composition / 80)),
|
|
8488
8914
|
};
|
|
8489
8915
|
}
|
|
8490
8916
|
function computeStorageCapabilities(stats, baseCapacity) {
|
|
8491
|
-
const strength = stats.strength
|
|
8492
|
-
const
|
|
8493
|
-
const
|
|
8494
|
-
const
|
|
8917
|
+
const strength = stats.strength;
|
|
8918
|
+
const density = stats.density;
|
|
8919
|
+
const hardness = stats.hardness;
|
|
8920
|
+
const saturation = stats.saturation;
|
|
8921
|
+
const statSum = strength + density + hardness + saturation;
|
|
8495
8922
|
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
8496
8923
|
return { capacityBonus };
|
|
8497
8924
|
}
|
|
8498
8925
|
function computeWarehouseHullCapabilities(stats) {
|
|
8499
|
-
const density = stats.density
|
|
8500
|
-
const strength = stats.strength
|
|
8501
|
-
const hardness = stats.hardness
|
|
8502
|
-
const saturation = stats.saturation
|
|
8503
|
-
const hullmass =
|
|
8926
|
+
const density = stats.density;
|
|
8927
|
+
const strength = stats.strength;
|
|
8928
|
+
const hardness = stats.hardness;
|
|
8929
|
+
const saturation = stats.saturation;
|
|
8930
|
+
const hullmass = 100000 - 75 * density;
|
|
8504
8931
|
const statSum = strength + hardness + saturation;
|
|
8505
8932
|
const exponent = statSum / 2997.0;
|
|
8506
8933
|
const capacity = Math.floor(20000000 * 10 ** exponent);
|
|
8507
8934
|
return { hullmass, capacity };
|
|
8508
8935
|
}
|
|
8509
|
-
function computeShipCapabilities(modules) {
|
|
8936
|
+
function computeShipCapabilities(modules, layout) {
|
|
8510
8937
|
const ship = {};
|
|
8511
8938
|
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
8512
8939
|
if (engineModules.length > 0) {
|
|
@@ -8514,7 +8941,7 @@ function computeShipCapabilities(modules) {
|
|
|
8514
8941
|
let totalDrain = 0;
|
|
8515
8942
|
for (const m of engineModules) {
|
|
8516
8943
|
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8517
|
-
totalThrust += caps.thrust;
|
|
8944
|
+
totalThrust += applySlotMultiplier(caps.thrust, getSlotAmp(layout, m.slotIndex));
|
|
8518
8945
|
totalDrain += caps.drain;
|
|
8519
8946
|
}
|
|
8520
8947
|
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
@@ -8525,25 +8952,37 @@ function computeShipCapabilities(modules) {
|
|
|
8525
8952
|
let totalRecharge = 0;
|
|
8526
8953
|
for (const m of generatorModules) {
|
|
8527
8954
|
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8528
|
-
|
|
8529
|
-
|
|
8955
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
8956
|
+
totalCapacity += applySlotMultiplier(caps.capacity, amp);
|
|
8957
|
+
totalRecharge += applySlotMultiplier(caps.recharge, amp);
|
|
8530
8958
|
}
|
|
8531
|
-
ship.generator = {
|
|
8959
|
+
ship.generator = {
|
|
8960
|
+
capacity: clampUint16(totalCapacity),
|
|
8961
|
+
recharge: clampUint16(totalRecharge),
|
|
8962
|
+
};
|
|
8532
8963
|
}
|
|
8533
8964
|
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
8534
8965
|
if (gathererModules.length > 0) {
|
|
8535
8966
|
let totalYield = 0;
|
|
8536
8967
|
let totalDrain = 0;
|
|
8537
|
-
let
|
|
8968
|
+
let maxDepth = 0;
|
|
8538
8969
|
let totalSpeed = 0;
|
|
8539
8970
|
for (const m of gathererModules) {
|
|
8540
|
-
const
|
|
8541
|
-
|
|
8971
|
+
const tier = getItem(m.itemId).tier;
|
|
8972
|
+
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats), tier);
|
|
8973
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
8974
|
+
totalYield += applySlotMultiplier(caps.yield, amp);
|
|
8542
8975
|
totalDrain += caps.drain;
|
|
8543
|
-
|
|
8544
|
-
|
|
8976
|
+
if (caps.depth > maxDepth)
|
|
8977
|
+
maxDepth = caps.depth;
|
|
8978
|
+
totalSpeed += applySlotMultiplier(caps.speed, amp);
|
|
8545
8979
|
}
|
|
8546
|
-
ship.gatherer = {
|
|
8980
|
+
ship.gatherer = {
|
|
8981
|
+
yield: clampUint16(totalYield),
|
|
8982
|
+
drain: totalDrain,
|
|
8983
|
+
depth: maxDepth,
|
|
8984
|
+
speed: clampUint16(totalSpeed),
|
|
8985
|
+
};
|
|
8547
8986
|
}
|
|
8548
8987
|
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
8549
8988
|
if (haulerModules.length > 0) {
|
|
@@ -8552,13 +8991,15 @@ function computeShipCapabilities(modules) {
|
|
|
8552
8991
|
let totalDrain = 0;
|
|
8553
8992
|
for (const m of haulerModules) {
|
|
8554
8993
|
const caps = computeHaulerCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8994
|
+
const eff = applySlotMultiplier(caps.efficiency, getSlotAmp(layout, m.slotIndex));
|
|
8555
8995
|
totalCapacity += caps.capacity;
|
|
8556
|
-
weightedEffNum +=
|
|
8996
|
+
weightedEffNum += eff * caps.capacity;
|
|
8557
8997
|
totalDrain += caps.drain;
|
|
8558
8998
|
}
|
|
8999
|
+
const efficiency = totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0;
|
|
8559
9000
|
ship.hauler = {
|
|
8560
9001
|
capacity: totalCapacity,
|
|
8561
|
-
efficiency:
|
|
9002
|
+
efficiency: clampUint16(efficiency),
|
|
8562
9003
|
drain: totalDrain,
|
|
8563
9004
|
};
|
|
8564
9005
|
}
|
|
@@ -8570,10 +9011,14 @@ function computeShipCapabilities(modules) {
|
|
|
8570
9011
|
for (const m of loaderModules) {
|
|
8571
9012
|
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8572
9013
|
totalMass += caps.mass;
|
|
8573
|
-
totalThrust += caps.thrust;
|
|
9014
|
+
totalThrust += applySlotMultiplier(caps.thrust, getSlotAmp(layout, m.slotIndex));
|
|
8574
9015
|
totalQuantity += caps.quantity;
|
|
8575
9016
|
}
|
|
8576
|
-
ship.loaders = {
|
|
9017
|
+
ship.loaders = {
|
|
9018
|
+
mass: totalMass,
|
|
9019
|
+
thrust: clampUint16(totalThrust),
|
|
9020
|
+
quantity: totalQuantity,
|
|
9021
|
+
};
|
|
8577
9022
|
}
|
|
8578
9023
|
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
8579
9024
|
if (crafterModules.length > 0) {
|
|
@@ -8581,10 +9026,10 @@ function computeShipCapabilities(modules) {
|
|
|
8581
9026
|
let totalDrain = 0;
|
|
8582
9027
|
for (const m of crafterModules) {
|
|
8583
9028
|
const caps = computeCrafterCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8584
|
-
totalSpeed += caps.speed;
|
|
9029
|
+
totalSpeed += applySlotMultiplier(caps.speed, getSlotAmp(layout, m.slotIndex));
|
|
8585
9030
|
totalDrain += caps.drain;
|
|
8586
9031
|
}
|
|
8587
|
-
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
9032
|
+
ship.crafter = { speed: clampUint16(totalSpeed), drain: totalDrain };
|
|
8588
9033
|
}
|
|
8589
9034
|
return ship;
|
|
8590
9035
|
}
|
|
@@ -8593,6 +9038,12 @@ class Warehouse extends Types.entity_info {
|
|
|
8593
9038
|
get name() {
|
|
8594
9039
|
return this.entity_name;
|
|
8595
9040
|
}
|
|
9041
|
+
get entityClass() {
|
|
9042
|
+
return 'building';
|
|
9043
|
+
}
|
|
9044
|
+
get canDemolish() {
|
|
9045
|
+
return true;
|
|
9046
|
+
}
|
|
8596
9047
|
get inv() {
|
|
8597
9048
|
this._inv ?? (this._inv = new InventoryAccessor(this));
|
|
8598
9049
|
return this._inv;
|
|
@@ -8643,7 +9094,7 @@ class Warehouse extends Types.entity_info {
|
|
|
8643
9094
|
return hull.adding(this.totalCargoMass);
|
|
8644
9095
|
}
|
|
8645
9096
|
}
|
|
8646
|
-
function computeWarehouseCapabilities(modules) {
|
|
9097
|
+
function computeWarehouseCapabilities(modules, layout) {
|
|
8647
9098
|
const warehouse = {};
|
|
8648
9099
|
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
8649
9100
|
if (loaderModules.length > 0) {
|
|
@@ -8653,10 +9104,14 @@ function computeWarehouseCapabilities(modules) {
|
|
|
8653
9104
|
for (const m of loaderModules) {
|
|
8654
9105
|
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
8655
9106
|
totalMass += caps.mass;
|
|
8656
|
-
totalThrust += caps.thrust;
|
|
9107
|
+
totalThrust += applySlotMultiplier(caps.thrust, getSlotAmp(layout, m.slotIndex));
|
|
8657
9108
|
totalQuantity += caps.quantity;
|
|
8658
9109
|
}
|
|
8659
|
-
warehouse.loaders = {
|
|
9110
|
+
warehouse.loaders = {
|
|
9111
|
+
mass: totalMass,
|
|
9112
|
+
thrust: clampUint16(totalThrust),
|
|
9113
|
+
quantity: totalQuantity,
|
|
9114
|
+
};
|
|
8660
9115
|
}
|
|
8661
9116
|
return warehouse;
|
|
8662
9117
|
}
|
|
@@ -8665,6 +9120,12 @@ class Container extends Types.entity_info {
|
|
|
8665
9120
|
get name() {
|
|
8666
9121
|
return this.entity_name;
|
|
8667
9122
|
}
|
|
9123
|
+
get entityClass() {
|
|
9124
|
+
return 'mobile';
|
|
9125
|
+
}
|
|
9126
|
+
get canUndeploy() {
|
|
9127
|
+
return true;
|
|
9128
|
+
}
|
|
8668
9129
|
get sched() {
|
|
8669
9130
|
this._sched ?? (this._sched = new ScheduleAccessor(this));
|
|
8670
9131
|
return this._sched;
|
|
@@ -8672,6 +9133,11 @@ class Container extends Types.entity_info {
|
|
|
8672
9133
|
get isIdle() {
|
|
8673
9134
|
return this.is_idle;
|
|
8674
9135
|
}
|
|
9136
|
+
interpolatedPositionAt(now) {
|
|
9137
|
+
const taskIndex = this.sched.currentTaskIndex(now);
|
|
9138
|
+
const progress = this.sched.currentTaskProgressFloat(now);
|
|
9139
|
+
return getInterpolatedPosition(this, taskIndex, progress);
|
|
9140
|
+
}
|
|
8675
9141
|
isLoading(now) {
|
|
8676
9142
|
return isLoading(this, now);
|
|
8677
9143
|
}
|
|
@@ -8702,32 +9168,119 @@ class Container extends Types.entity_info {
|
|
|
8702
9168
|
}
|
|
8703
9169
|
}
|
|
8704
9170
|
function computeContainerCapabilities(stats) {
|
|
8705
|
-
const density = stats
|
|
8706
|
-
const strength = stats
|
|
8707
|
-
const hardness = stats
|
|
8708
|
-
const saturation = stats
|
|
8709
|
-
const hullmass =
|
|
9171
|
+
const density = stats.density;
|
|
9172
|
+
const strength = stats.strength;
|
|
9173
|
+
const hardness = stats.hardness;
|
|
9174
|
+
const saturation = stats.saturation;
|
|
9175
|
+
const hullmass = 100000 - 75 * density;
|
|
8710
9176
|
const statSum = strength + hardness + saturation;
|
|
8711
9177
|
const exponent = statSum / 2997;
|
|
8712
9178
|
const capacity = Math.floor(1000000 * 10 ** exponent);
|
|
8713
9179
|
return { hullmass, capacity };
|
|
8714
9180
|
}
|
|
8715
9181
|
function computeContainerT2Capabilities(stats) {
|
|
8716
|
-
const strength = stats
|
|
8717
|
-
const density = stats
|
|
8718
|
-
const hardness = stats
|
|
8719
|
-
const saturation = stats
|
|
8720
|
-
const hullmass =
|
|
9182
|
+
const strength = stats.strength;
|
|
9183
|
+
const density = stats.density;
|
|
9184
|
+
const hardness = stats.hardness;
|
|
9185
|
+
const saturation = stats.saturation;
|
|
9186
|
+
const hullmass = 70000 - 50 * density;
|
|
8721
9187
|
const statSum = strength + hardness + saturation;
|
|
8722
9188
|
const exponent = statSum / 2500;
|
|
8723
9189
|
const capacity = Math.floor(1500000 * 10 ** exponent);
|
|
8724
9190
|
return { hullmass, capacity };
|
|
8725
9191
|
}
|
|
8726
9192
|
|
|
9193
|
+
class Extractor extends Types.entity_info {
|
|
9194
|
+
get name() {
|
|
9195
|
+
return this.entity_name;
|
|
9196
|
+
}
|
|
9197
|
+
get entityClass() {
|
|
9198
|
+
return 'building';
|
|
9199
|
+
}
|
|
9200
|
+
get canDemolish() {
|
|
9201
|
+
return true;
|
|
9202
|
+
}
|
|
9203
|
+
get inv() {
|
|
9204
|
+
this._inv ?? (this._inv = new InventoryAccessor(this));
|
|
9205
|
+
return this._inv;
|
|
9206
|
+
}
|
|
9207
|
+
get inventory() {
|
|
9208
|
+
return this.inv.items;
|
|
9209
|
+
}
|
|
9210
|
+
get sched() {
|
|
9211
|
+
this._sched ?? (this._sched = new ScheduleAccessor(this));
|
|
9212
|
+
return this._sched;
|
|
9213
|
+
}
|
|
9214
|
+
get isIdle() {
|
|
9215
|
+
return this.is_idle;
|
|
9216
|
+
}
|
|
9217
|
+
get location() {
|
|
9218
|
+
return Location.from(this.coordinates);
|
|
9219
|
+
}
|
|
9220
|
+
get totalCargoMass() {
|
|
9221
|
+
return this.inv.totalMass;
|
|
9222
|
+
}
|
|
9223
|
+
get maxCapacity() {
|
|
9224
|
+
return UInt64.from(this.capacity);
|
|
9225
|
+
}
|
|
9226
|
+
get availableCapacity() {
|
|
9227
|
+
const cargo = this.totalCargoMass;
|
|
9228
|
+
return cargo.gte(this.maxCapacity) ? UInt64.from(0) : this.maxCapacity.subtracting(cargo);
|
|
9229
|
+
}
|
|
9230
|
+
get isFull() {
|
|
9231
|
+
return this.totalCargoMass.gte(this.maxCapacity);
|
|
9232
|
+
}
|
|
9233
|
+
get totalMass() {
|
|
9234
|
+
const hull = this.hullmass ? UInt64.from(this.hullmass) : UInt64.from(0);
|
|
9235
|
+
return hull.adding(this.totalCargoMass);
|
|
9236
|
+
}
|
|
9237
|
+
}
|
|
9238
|
+
function computeExtractorCapabilities(modules, layout) {
|
|
9239
|
+
const out = {};
|
|
9240
|
+
const genModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
9241
|
+
if (genModules.length > 0) {
|
|
9242
|
+
let totalCapacity = 0;
|
|
9243
|
+
let totalRecharge = 0;
|
|
9244
|
+
for (const m of genModules) {
|
|
9245
|
+
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
9246
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
9247
|
+
totalCapacity += applySlotMultiplier(caps.capacity, amp);
|
|
9248
|
+
totalRecharge += applySlotMultiplier(caps.recharge, amp);
|
|
9249
|
+
}
|
|
9250
|
+
out.generator = {
|
|
9251
|
+
capacity: clampUint16(totalCapacity),
|
|
9252
|
+
recharge: clampUint16(totalRecharge),
|
|
9253
|
+
};
|
|
9254
|
+
}
|
|
9255
|
+
const gathModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
9256
|
+
if (gathModules.length > 0) {
|
|
9257
|
+
let totalYield = 0;
|
|
9258
|
+
let totalDrain = 0;
|
|
9259
|
+
let maxDepth = 0;
|
|
9260
|
+
let totalSpeed = 0;
|
|
9261
|
+
for (const m of gathModules) {
|
|
9262
|
+
const tier = getItem(m.itemId).tier;
|
|
9263
|
+
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats), tier);
|
|
9264
|
+
const amp = getSlotAmp(layout, m.slotIndex);
|
|
9265
|
+
totalYield += applySlotMultiplier(caps.yield, amp);
|
|
9266
|
+
totalDrain += caps.drain;
|
|
9267
|
+
if (caps.depth > maxDepth)
|
|
9268
|
+
maxDepth = caps.depth;
|
|
9269
|
+
totalSpeed += applySlotMultiplier(caps.speed, amp);
|
|
9270
|
+
}
|
|
9271
|
+
out.gatherer = {
|
|
9272
|
+
yield: clampUint16(totalYield),
|
|
9273
|
+
drain: totalDrain,
|
|
9274
|
+
depth: maxDepth,
|
|
9275
|
+
speed: clampUint16(totalSpeed),
|
|
9276
|
+
};
|
|
9277
|
+
}
|
|
9278
|
+
return out;
|
|
9279
|
+
}
|
|
9280
|
+
|
|
8727
9281
|
class EntitiesManager extends BaseManager {
|
|
8728
|
-
async getEntity(
|
|
9282
|
+
async getEntity(id) {
|
|
8729
9283
|
const result = await this.server.readonly('getentity', {
|
|
8730
|
-
entity_type: Name.from(type),
|
|
8731
9284
|
entity_id: id,
|
|
8732
9285
|
});
|
|
8733
9286
|
const entityInfo = result;
|
|
@@ -8737,7 +9290,7 @@ class EntitiesManager extends BaseManager {
|
|
|
8737
9290
|
const ownerName = this.resolveOwner(owner);
|
|
8738
9291
|
const result = await this.server.readonly('getentities', {
|
|
8739
9292
|
owner: ownerName,
|
|
8740
|
-
entity_type: type
|
|
9293
|
+
entity_type: type,
|
|
8741
9294
|
});
|
|
8742
9295
|
const entities = result;
|
|
8743
9296
|
return entities.map((entity) => this.wrapEntity(entity));
|
|
@@ -8746,18 +9299,21 @@ class EntitiesManager extends BaseManager {
|
|
|
8746
9299
|
const ownerName = this.resolveOwner(owner);
|
|
8747
9300
|
const result = await this.server.readonly('getsummaries', {
|
|
8748
9301
|
owner: ownerName,
|
|
8749
|
-
entity_type: type
|
|
9302
|
+
entity_type: type,
|
|
8750
9303
|
});
|
|
8751
9304
|
return result;
|
|
8752
9305
|
}
|
|
8753
9306
|
async getShip(id) {
|
|
8754
|
-
return (await this.getEntity(
|
|
9307
|
+
return (await this.getEntity(id));
|
|
8755
9308
|
}
|
|
8756
9309
|
async getWarehouse(id) {
|
|
8757
|
-
return (await this.getEntity(
|
|
9310
|
+
return (await this.getEntity(id));
|
|
8758
9311
|
}
|
|
8759
9312
|
async getContainer(id) {
|
|
8760
|
-
return (await this.getEntity(
|
|
9313
|
+
return (await this.getEntity(id));
|
|
9314
|
+
}
|
|
9315
|
+
async getExtractor(id) {
|
|
9316
|
+
return (await this.getEntity(id));
|
|
8761
9317
|
}
|
|
8762
9318
|
async getShips(owner) {
|
|
8763
9319
|
return (await this.getEntities(owner, 'ship'));
|
|
@@ -8768,6 +9324,9 @@ class EntitiesManager extends BaseManager {
|
|
|
8768
9324
|
async getContainers(owner) {
|
|
8769
9325
|
return (await this.getEntities(owner, 'container'));
|
|
8770
9326
|
}
|
|
9327
|
+
async getExtractors(owner) {
|
|
9328
|
+
return (await this.getEntities(owner, 'extractor'));
|
|
9329
|
+
}
|
|
8771
9330
|
async getShipSummaries(owner) {
|
|
8772
9331
|
return this.getSummaries(owner, 'ship');
|
|
8773
9332
|
}
|
|
@@ -8777,16 +9336,19 @@ class EntitiesManager extends BaseManager {
|
|
|
8777
9336
|
async getContainerSummaries(owner) {
|
|
8778
9337
|
return this.getSummaries(owner, 'container');
|
|
8779
9338
|
}
|
|
9339
|
+
async getExtractorSummaries(owner) {
|
|
9340
|
+
return this.getSummaries(owner, 'extractor');
|
|
9341
|
+
}
|
|
8780
9342
|
wrapEntity(entity) {
|
|
8781
|
-
if (entity.type.equals('ship'))
|
|
9343
|
+
if (entity.type.equals('ship'))
|
|
8782
9344
|
return new Ship(entity);
|
|
8783
|
-
|
|
8784
|
-
else if (entity.type.equals('warehouse')) {
|
|
9345
|
+
if (entity.type.equals('warehouse'))
|
|
8785
9346
|
return new Warehouse(entity);
|
|
8786
|
-
|
|
8787
|
-
|
|
9347
|
+
if (entity.type.equals('extractor'))
|
|
9348
|
+
return new Extractor(entity);
|
|
9349
|
+
if (entity.type.equals('container'))
|
|
8788
9350
|
return new Container(entity);
|
|
8789
|
-
}
|
|
9351
|
+
throw new Error(`unknown entity type: ${entity.type}`);
|
|
8790
9352
|
}
|
|
8791
9353
|
resolveOwner(owner) {
|
|
8792
9354
|
if (typeof owner === 'object' && owner !== null && 'owner' in owner) {
|
|
@@ -8870,17 +9432,6 @@ class LocationsManager extends BaseManager {
|
|
|
8870
9432
|
reserve: overrideMap.get(s.index) ?? s.reserve,
|
|
8871
9433
|
}));
|
|
8872
9434
|
}
|
|
8873
|
-
async getLocationEntity(id) {
|
|
8874
|
-
const row = await this.server.table('location').get(UInt64.from(id));
|
|
8875
|
-
return row ?? undefined;
|
|
8876
|
-
}
|
|
8877
|
-
async getLocationEntityAt(coords) {
|
|
8878
|
-
const id = coordsToLocationId(coords);
|
|
8879
|
-
return this.getLocationEntity(id);
|
|
8880
|
-
}
|
|
8881
|
-
async getAllLocationEntities() {
|
|
8882
|
-
return this.server.table('location').all();
|
|
8883
|
-
}
|
|
8884
9435
|
}
|
|
8885
9436
|
|
|
8886
9437
|
class EpochsManager extends BaseManager {
|
|
@@ -8927,7 +9478,6 @@ class ActionsManager extends BaseManager {
|
|
|
8927
9478
|
const x = Int64.from(destination.x);
|
|
8928
9479
|
const y = Int64.from(destination.y);
|
|
8929
9480
|
return this.server.action('travel', {
|
|
8930
|
-
entity_type: EntityType.SHIP,
|
|
8931
9481
|
id: UInt64.from(shipId),
|
|
8932
9482
|
x,
|
|
8933
9483
|
y,
|
|
@@ -8948,9 +9498,8 @@ class ActionsManager extends BaseManager {
|
|
|
8948
9498
|
recharge,
|
|
8949
9499
|
});
|
|
8950
9500
|
}
|
|
8951
|
-
resolve(entityId,
|
|
9501
|
+
resolve(entityId, count) {
|
|
8952
9502
|
const params = {
|
|
8953
|
-
entity_type: entityType,
|
|
8954
9503
|
id: UInt64.from(entityId),
|
|
8955
9504
|
};
|
|
8956
9505
|
if (count !== undefined) {
|
|
@@ -8958,28 +9507,27 @@ class ActionsManager extends BaseManager {
|
|
|
8958
9507
|
}
|
|
8959
9508
|
return this.server.action('resolve', params);
|
|
8960
9509
|
}
|
|
8961
|
-
cancel(entityId, count
|
|
9510
|
+
cancel(entityId, count) {
|
|
8962
9511
|
return this.server.action('cancel', {
|
|
8963
|
-
entity_type: entityType,
|
|
8964
9512
|
id: UInt64.from(entityId),
|
|
8965
9513
|
count: UInt64.from(count),
|
|
8966
9514
|
});
|
|
8967
9515
|
}
|
|
8968
|
-
recharge(entityId
|
|
9516
|
+
recharge(entityId) {
|
|
8969
9517
|
return this.server.action('recharge', {
|
|
8970
|
-
entity_type: entityType,
|
|
8971
9518
|
id: UInt64.from(entityId),
|
|
8972
9519
|
});
|
|
8973
9520
|
}
|
|
8974
|
-
|
|
9521
|
+
refrshentity(entityId) {
|
|
9522
|
+
return this.server.action('refrshentity', {
|
|
9523
|
+
entity_id: UInt64.from(entityId),
|
|
9524
|
+
});
|
|
9525
|
+
}
|
|
9526
|
+
transfer(sourceId, destId, items) {
|
|
8975
9527
|
return this.server.action('transfer', {
|
|
8976
|
-
source_type: sourceType,
|
|
8977
9528
|
source_id: UInt64.from(sourceId),
|
|
8978
|
-
dest_type: destType,
|
|
8979
9529
|
dest_id: UInt64.from(destId),
|
|
8980
|
-
|
|
8981
|
-
stats: UInt64.from(stats),
|
|
8982
|
-
quantity: UInt32.from(quantity),
|
|
9530
|
+
items,
|
|
8983
9531
|
});
|
|
8984
9532
|
}
|
|
8985
9533
|
foundCompany(account, name) {
|
|
@@ -8993,80 +9541,81 @@ class ActionsManager extends BaseManager {
|
|
|
8993
9541
|
account: Name.from(account),
|
|
8994
9542
|
});
|
|
8995
9543
|
}
|
|
8996
|
-
gather(
|
|
9544
|
+
gather(sourceId, destinationId, stratum, quantity) {
|
|
8997
9545
|
return this.server.action('gather', {
|
|
8998
|
-
|
|
8999
|
-
|
|
9000
|
-
entity_id: UInt64.from(source.entityId),
|
|
9001
|
-
}),
|
|
9002
|
-
destination: Types.entity_ref.from({
|
|
9003
|
-
entity_type: destination.entityType,
|
|
9004
|
-
entity_id: UInt64.from(destination.entityId),
|
|
9005
|
-
}),
|
|
9546
|
+
source_id: UInt64.from(sourceId),
|
|
9547
|
+
destination_id: UInt64.from(destinationId),
|
|
9006
9548
|
stratum: UInt16.from(stratum),
|
|
9007
9549
|
quantity: UInt32.from(quantity),
|
|
9008
9550
|
});
|
|
9009
9551
|
}
|
|
9010
|
-
warp(entityId, destination
|
|
9552
|
+
warp(entityId, destination) {
|
|
9011
9553
|
const x = Int64.from(destination.x);
|
|
9012
9554
|
const y = Int64.from(destination.y);
|
|
9013
9555
|
return this.server.action('warp', {
|
|
9014
|
-
entity_type: entityType,
|
|
9015
9556
|
id: UInt64.from(entityId),
|
|
9016
9557
|
x,
|
|
9017
9558
|
y,
|
|
9018
9559
|
});
|
|
9019
9560
|
}
|
|
9020
|
-
craft(
|
|
9021
|
-
const cargoInputs = inputs.map((i) => Types.cargo_item.from(i));
|
|
9561
|
+
craft(entityId, recipeId, quantity, inputs) {
|
|
9022
9562
|
return this.server.action('craft', {
|
|
9023
|
-
entity_type: entityType,
|
|
9024
9563
|
id: UInt64.from(entityId),
|
|
9025
9564
|
recipe_id: UInt16.from(recipeId),
|
|
9026
9565
|
quantity: UInt32.from(quantity),
|
|
9027
|
-
inputs
|
|
9566
|
+
inputs,
|
|
9028
9567
|
});
|
|
9029
9568
|
}
|
|
9030
|
-
blend(
|
|
9031
|
-
const cargoInputs = inputs.map((i) => Types.cargo_item.from(i));
|
|
9569
|
+
blend(entityId, inputs) {
|
|
9032
9570
|
return this.server.action('blend', {
|
|
9033
|
-
entity_type: entityType,
|
|
9034
9571
|
id: UInt64.from(entityId),
|
|
9035
|
-
inputs
|
|
9572
|
+
inputs,
|
|
9036
9573
|
});
|
|
9037
9574
|
}
|
|
9038
|
-
deploy(
|
|
9575
|
+
deploy(entityId, ref) {
|
|
9039
9576
|
return this.server.action('deploy', {
|
|
9040
|
-
entity_type: entityType,
|
|
9041
9577
|
id: UInt64.from(entityId),
|
|
9042
|
-
|
|
9043
|
-
stats: UInt64.from(stats),
|
|
9578
|
+
ref,
|
|
9044
9579
|
});
|
|
9045
9580
|
}
|
|
9046
|
-
addmodule(
|
|
9581
|
+
addmodule(entityId, moduleIndex, moduleRef, targetRef = null) {
|
|
9047
9582
|
return this.server.action('addmodule', {
|
|
9048
|
-
entity_type: entityType,
|
|
9049
9583
|
entity_id: UInt64.from(entityId),
|
|
9050
9584
|
module_index: moduleIndex,
|
|
9051
|
-
|
|
9052
|
-
|
|
9585
|
+
module_ref: moduleRef,
|
|
9586
|
+
target_ref: targetRef ?? undefined,
|
|
9053
9587
|
});
|
|
9054
9588
|
}
|
|
9055
|
-
rmmodule(
|
|
9589
|
+
rmmodule(entityId, moduleIndex, targetRef = null) {
|
|
9056
9590
|
return this.server.action('rmmodule', {
|
|
9057
|
-
entity_type: entityType,
|
|
9058
9591
|
entity_id: UInt64.from(entityId),
|
|
9059
9592
|
module_index: moduleIndex,
|
|
9060
|
-
|
|
9593
|
+
target_ref: targetRef ?? undefined,
|
|
9061
9594
|
});
|
|
9062
9595
|
}
|
|
9063
|
-
wrap(owner,
|
|
9596
|
+
wrap(owner, entityId, nexusId, items) {
|
|
9064
9597
|
return this.server.action('wrap', {
|
|
9065
9598
|
owner: Name.from(owner),
|
|
9066
|
-
entity_type: entityType,
|
|
9067
9599
|
entity_id: UInt64.from(entityId),
|
|
9068
|
-
|
|
9069
|
-
|
|
9600
|
+
nexus_id: UInt64.from(nexusId),
|
|
9601
|
+
items,
|
|
9602
|
+
});
|
|
9603
|
+
}
|
|
9604
|
+
undeploy(hostId, targetId) {
|
|
9605
|
+
return this.server.action('undeploy', {
|
|
9606
|
+
host_id: UInt64.from(hostId),
|
|
9607
|
+
target_id: UInt64.from(targetId),
|
|
9608
|
+
});
|
|
9609
|
+
}
|
|
9610
|
+
wrapEntity(entityId, nexusId) {
|
|
9611
|
+
return this.server.action('wrapentity', {
|
|
9612
|
+
entity_id: UInt64.from(entityId),
|
|
9613
|
+
nexus_id: UInt64.from(nexusId),
|
|
9614
|
+
});
|
|
9615
|
+
}
|
|
9616
|
+
demolish(entityId) {
|
|
9617
|
+
return this.server.action('demolish', {
|
|
9618
|
+
entity_id: UInt64.from(entityId),
|
|
9070
9619
|
});
|
|
9071
9620
|
}
|
|
9072
9621
|
joinGame(account, companyName) {
|
|
@@ -9095,9 +9644,15 @@ class WebSocketConnection {
|
|
|
9095
9644
|
this._state = 'disconnected';
|
|
9096
9645
|
this.shouldReconnect = true;
|
|
9097
9646
|
this.sendQueue = [];
|
|
9647
|
+
this.pingTimer = null;
|
|
9648
|
+
this.staleTimer = null;
|
|
9098
9649
|
this.url = options.url;
|
|
9099
9650
|
this.onMessage = options.onMessage;
|
|
9100
9651
|
this.onStateChange = options.onStateChange;
|
|
9652
|
+
this.minReconnectDelay =
|
|
9653
|
+
options.minReconnectDelay ?? WebSocketConnection.DEFAULT_MIN_RECONNECT_DELAY;
|
|
9654
|
+
this.pingIntervalMs = options.pingIntervalMs ?? WebSocketConnection.DEFAULT_PING_INTERVAL_MS;
|
|
9655
|
+
this.pongTimeoutMs = options.pongTimeoutMs ?? WebSocketConnection.DEFAULT_PONG_TIMEOUT_MS;
|
|
9101
9656
|
}
|
|
9102
9657
|
get state() {
|
|
9103
9658
|
return this._state;
|
|
@@ -9126,8 +9681,10 @@ class WebSocketConnection {
|
|
|
9126
9681
|
this.ws.readyState === WebSocket.OPEN) {
|
|
9127
9682
|
this.ws.send(this.sendQueue.shift());
|
|
9128
9683
|
}
|
|
9684
|
+
this.startHeartbeat();
|
|
9129
9685
|
};
|
|
9130
9686
|
this.ws.onmessage = (event) => {
|
|
9687
|
+
this.resetStaleTimer();
|
|
9131
9688
|
try {
|
|
9132
9689
|
const message = JSON.parse(event.data);
|
|
9133
9690
|
this.onMessage(message);
|
|
@@ -9137,6 +9694,7 @@ class WebSocketConnection {
|
|
|
9137
9694
|
}
|
|
9138
9695
|
};
|
|
9139
9696
|
this.ws.onclose = () => {
|
|
9697
|
+
this.stopHeartbeat();
|
|
9140
9698
|
this.ws = null;
|
|
9141
9699
|
this.sendQueue.length = 0;
|
|
9142
9700
|
if (this.shouldReconnect) {
|
|
@@ -9161,7 +9719,7 @@ class WebSocketConnection {
|
|
|
9161
9719
|
if (this.reconnectTimeout) {
|
|
9162
9720
|
return;
|
|
9163
9721
|
}
|
|
9164
|
-
const delay = Math.min(
|
|
9722
|
+
const delay = Math.min(this.minReconnectDelay *
|
|
9165
9723
|
WebSocketConnection.RECONNECT_MULTIPLIER ** this.reconnectAttempts, WebSocketConnection.MAX_RECONNECT_DELAY);
|
|
9166
9724
|
debug(`Reconnecting in ${delay}ms (attempt ${this.reconnectAttempts + 1})`);
|
|
9167
9725
|
this.reconnectTimeout = setTimeout(() => {
|
|
@@ -9176,6 +9734,7 @@ class WebSocketConnection {
|
|
|
9176
9734
|
clearTimeout(this.reconnectTimeout);
|
|
9177
9735
|
this.reconnectTimeout = null;
|
|
9178
9736
|
}
|
|
9737
|
+
this.stopHeartbeat();
|
|
9179
9738
|
if (this.ws) {
|
|
9180
9739
|
this.ws.close();
|
|
9181
9740
|
this.ws = null;
|
|
@@ -9183,6 +9742,34 @@ class WebSocketConnection {
|
|
|
9183
9742
|
this.sendQueue.length = 0;
|
|
9184
9743
|
this.setState('disconnected');
|
|
9185
9744
|
}
|
|
9745
|
+
startHeartbeat() {
|
|
9746
|
+
this.stopHeartbeat();
|
|
9747
|
+
this.resetStaleTimer();
|
|
9748
|
+
this.pingTimer = setInterval(() => {
|
|
9749
|
+
if (this.ws && this.ws.readyState === WebSocket.OPEN) {
|
|
9750
|
+
this.ws.send(JSON.stringify({ type: 'ping' }));
|
|
9751
|
+
}
|
|
9752
|
+
}, this.pingIntervalMs);
|
|
9753
|
+
}
|
|
9754
|
+
stopHeartbeat() {
|
|
9755
|
+
if (this.pingTimer) {
|
|
9756
|
+
clearInterval(this.pingTimer);
|
|
9757
|
+
this.pingTimer = null;
|
|
9758
|
+
}
|
|
9759
|
+
if (this.staleTimer) {
|
|
9760
|
+
clearTimeout(this.staleTimer);
|
|
9761
|
+
this.staleTimer = null;
|
|
9762
|
+
}
|
|
9763
|
+
}
|
|
9764
|
+
resetStaleTimer() {
|
|
9765
|
+
if (this.staleTimer)
|
|
9766
|
+
clearTimeout(this.staleTimer);
|
|
9767
|
+
this.staleTimer = setTimeout(() => {
|
|
9768
|
+
debug('No frames within ping interval + pong timeout — forcing reconnect');
|
|
9769
|
+
if (this.ws)
|
|
9770
|
+
this.ws.close();
|
|
9771
|
+
}, this.pingIntervalMs + this.pongTimeoutMs);
|
|
9772
|
+
}
|
|
9186
9773
|
close() {
|
|
9187
9774
|
this.disconnect();
|
|
9188
9775
|
}
|
|
@@ -9198,9 +9785,11 @@ class WebSocketConnection {
|
|
|
9198
9785
|
return this._state === 'connected';
|
|
9199
9786
|
}
|
|
9200
9787
|
}
|
|
9201
|
-
WebSocketConnection.
|
|
9788
|
+
WebSocketConnection.DEFAULT_MIN_RECONNECT_DELAY = 1000;
|
|
9202
9789
|
WebSocketConnection.MAX_RECONNECT_DELAY = 30000;
|
|
9203
9790
|
WebSocketConnection.RECONNECT_MULTIPLIER = 2;
|
|
9791
|
+
WebSocketConnection.DEFAULT_PING_INTERVAL_MS = 25000;
|
|
9792
|
+
WebSocketConnection.DEFAULT_PONG_TIMEOUT_MS = 10000;
|
|
9204
9793
|
|
|
9205
9794
|
function mapEntity(ei) {
|
|
9206
9795
|
if (ei.type.equals('ship'))
|
|
@@ -9229,9 +9818,14 @@ class SubscriptionsManager {
|
|
|
9229
9818
|
this.entitySubs = new Map();
|
|
9230
9819
|
this.boundsSubs = new Map();
|
|
9231
9820
|
this.subCounter = 0;
|
|
9821
|
+
this.hasConnected = false;
|
|
9232
9822
|
this.conn = new WebSocketConnection({
|
|
9233
9823
|
url: opts.url,
|
|
9234
9824
|
onMessage: (m) => this.onMessage(m),
|
|
9825
|
+
onStateChange: (s) => this.onStateChange(s),
|
|
9826
|
+
minReconnectDelay: opts.minReconnectDelay,
|
|
9827
|
+
pingIntervalMs: opts.pingIntervalMs,
|
|
9828
|
+
pongTimeoutMs: opts.pongTimeoutMs,
|
|
9235
9829
|
});
|
|
9236
9830
|
this.conn.connect();
|
|
9237
9831
|
}
|
|
@@ -9288,6 +9882,9 @@ class SubscriptionsManager {
|
|
|
9288
9882
|
current: new Map(),
|
|
9289
9883
|
};
|
|
9290
9884
|
this.boundsSubs.set(subId, {
|
|
9885
|
+
bounds,
|
|
9886
|
+
owner: handlers.owner,
|
|
9887
|
+
prioritizeOwner: handlers.prioritizeOwner,
|
|
9291
9888
|
onSnapshot: handlers.onSnapshot,
|
|
9292
9889
|
onUpdate: handlers.onUpdate,
|
|
9293
9890
|
onBoundsDelta: handlers.onBoundsDelta,
|
|
@@ -9296,14 +9893,67 @@ class SubscriptionsManager {
|
|
|
9296
9893
|
this.sendMessage(msg);
|
|
9297
9894
|
return handle;
|
|
9298
9895
|
}
|
|
9896
|
+
subscribeOwner(owner, handlers = {}) {
|
|
9897
|
+
const subId = this.generateSubID('own');
|
|
9898
|
+
const msg = {
|
|
9899
|
+
type: 'subscribe',
|
|
9900
|
+
sub_id: subId,
|
|
9901
|
+
owner,
|
|
9902
|
+
};
|
|
9903
|
+
const handle = {
|
|
9904
|
+
subId,
|
|
9905
|
+
unsubscribe: () => this.unsubscribeBounds(subId),
|
|
9906
|
+
current: new Map(),
|
|
9907
|
+
};
|
|
9908
|
+
this.boundsSubs.set(subId, {
|
|
9909
|
+
bounds: undefined,
|
|
9910
|
+
owner,
|
|
9911
|
+
prioritizeOwner: undefined,
|
|
9912
|
+
onSnapshot: handlers.onSnapshot,
|
|
9913
|
+
onUpdate: handlers.onUpdate,
|
|
9914
|
+
handle,
|
|
9915
|
+
});
|
|
9916
|
+
this.sendMessage(msg);
|
|
9917
|
+
return handle;
|
|
9918
|
+
}
|
|
9299
9919
|
unsubscribeBounds(subId) {
|
|
9300
9920
|
this.boundsSubs.delete(subId);
|
|
9301
9921
|
this.sendMessage({ type: 'unsubscribe', sub_id: subId });
|
|
9302
9922
|
}
|
|
9303
9923
|
updateBounds(subId, bounds) {
|
|
9924
|
+
const entry = this.boundsSubs.get(subId);
|
|
9925
|
+
if (entry)
|
|
9926
|
+
entry.bounds = bounds;
|
|
9304
9927
|
const msg = { type: 'update_bounds', sub_id: subId, bounds };
|
|
9305
9928
|
this.sendMessage(msg);
|
|
9306
9929
|
}
|
|
9930
|
+
onStateChange(state) {
|
|
9931
|
+
if (state !== 'connected')
|
|
9932
|
+
return;
|
|
9933
|
+
if (!this.hasConnected) {
|
|
9934
|
+
this.hasConnected = true;
|
|
9935
|
+
return;
|
|
9936
|
+
}
|
|
9937
|
+
for (const [subId, entry] of this.entitySubs) {
|
|
9938
|
+
const msg = {
|
|
9939
|
+
type: 'subscribe_entity',
|
|
9940
|
+
sub_id: subId,
|
|
9941
|
+
entity_type: entry.type,
|
|
9942
|
+
entity_id: entry.id,
|
|
9943
|
+
};
|
|
9944
|
+
this.sendMessage(msg);
|
|
9945
|
+
}
|
|
9946
|
+
for (const [subId, entry] of this.boundsSubs) {
|
|
9947
|
+
const msg = {
|
|
9948
|
+
type: 'subscribe',
|
|
9949
|
+
sub_id: subId,
|
|
9950
|
+
bounds: entry.bounds,
|
|
9951
|
+
owner: entry.owner,
|
|
9952
|
+
prioritize_owner: entry.prioritizeOwner,
|
|
9953
|
+
};
|
|
9954
|
+
this.sendMessage(msg);
|
|
9955
|
+
}
|
|
9956
|
+
}
|
|
9307
9957
|
onMessage(msg) {
|
|
9308
9958
|
switch (msg.type) {
|
|
9309
9959
|
case 'snapshot':
|
|
@@ -9565,15 +10215,22 @@ function assignModulesToSlots(packedEntityItemId, modules, entityLabel) {
|
|
|
9565
10215
|
installed: r.installed,
|
|
9566
10216
|
}));
|
|
9567
10217
|
}
|
|
9568
|
-
function
|
|
9569
|
-
|
|
9570
|
-
|
|
9571
|
-
|
|
9572
|
-
|
|
10218
|
+
function toInstalledModules(entries) {
|
|
10219
|
+
const installed = [];
|
|
10220
|
+
entries.forEach((entry, slotIndex) => {
|
|
10221
|
+
if (!entry.installed)
|
|
10222
|
+
return;
|
|
10223
|
+
installed.push({
|
|
10224
|
+
slotIndex,
|
|
10225
|
+
itemId: Number(UInt16.from(entry.installed.item_id).value.toString()),
|
|
10226
|
+
stats: BigInt(UInt64.from(entry.installed.stats).toString()),
|
|
10227
|
+
});
|
|
10228
|
+
});
|
|
10229
|
+
return installed;
|
|
9573
10230
|
}
|
|
9574
|
-
function computeStorageBonus(
|
|
10231
|
+
function computeStorageBonus(modules, baseCapacity) {
|
|
9575
10232
|
let totalBonus = 0;
|
|
9576
|
-
for (const m of
|
|
10233
|
+
for (const m of modules) {
|
|
9577
10234
|
if (getModuleCapabilityType(m.itemId) !== MODULE_STORAGE)
|
|
9578
10235
|
continue;
|
|
9579
10236
|
const stats = decodeCraftedItemStats(m.itemId, m.stats);
|
|
@@ -9582,10 +10239,10 @@ function computeStorageBonus(decoded, baseCapacity) {
|
|
|
9582
10239
|
}
|
|
9583
10240
|
return totalBonus;
|
|
9584
10241
|
}
|
|
9585
|
-
function deriveShipFromModules(
|
|
9586
|
-
const
|
|
9587
|
-
const capabilities = computeShipCapabilities(
|
|
9588
|
-
const totalBonus = computeStorageBonus(
|
|
10242
|
+
function deriveShipFromModules(moduleEntries, layout, baseCapacity) {
|
|
10243
|
+
const installed = toInstalledModules(moduleEntries);
|
|
10244
|
+
const capabilities = computeShipCapabilities(installed, layout);
|
|
10245
|
+
const totalBonus = computeStorageBonus(installed, baseCapacity);
|
|
9589
10246
|
return { capabilities, finalCapacity: baseCapacity + totalBonus };
|
|
9590
10247
|
}
|
|
9591
10248
|
function makeShip(state) {
|
|
@@ -9609,9 +10266,10 @@ function makeShip(state) {
|
|
|
9609
10266
|
if (state.schedule)
|
|
9610
10267
|
info.schedule = state.schedule;
|
|
9611
10268
|
let moduleEntries = [];
|
|
10269
|
+
const shipLayout = getEntityLayout(ITEM_SHIP_T1_PACKED)?.slots ?? [];
|
|
9612
10270
|
if (state.modules && state.modules.length > 0) {
|
|
9613
10271
|
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, state.modules, 'Ship T1');
|
|
9614
|
-
const { capabilities, finalCapacity } = deriveShipFromModules(
|
|
10272
|
+
const { capabilities, finalCapacity } = deriveShipFromModules(moduleEntries, shipLayout, state.capacity ?? 0);
|
|
9615
10273
|
if (capabilities.engines)
|
|
9616
10274
|
info.engines = capabilities.engines;
|
|
9617
10275
|
if (capabilities.generator)
|
|
@@ -9656,13 +10314,14 @@ function makeWarehouse(state) {
|
|
|
9656
10314
|
if (state.schedule)
|
|
9657
10315
|
info.schedule = state.schedule;
|
|
9658
10316
|
let moduleEntries = [];
|
|
10317
|
+
const warehouseLayout = getEntityLayout(ITEM_WAREHOUSE_T1_PACKED)?.slots ?? [];
|
|
9659
10318
|
if (state.modules && state.modules.length > 0) {
|
|
9660
10319
|
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, state.modules, 'Warehouse T1');
|
|
9661
|
-
const
|
|
9662
|
-
const capabilities = computeWarehouseCapabilities(
|
|
10320
|
+
const installed = toInstalledModules(moduleEntries);
|
|
10321
|
+
const capabilities = computeWarehouseCapabilities(installed, warehouseLayout);
|
|
9663
10322
|
if (capabilities.loaders)
|
|
9664
10323
|
info.loaders = capabilities.loaders;
|
|
9665
|
-
const totalBonus = computeStorageBonus(
|
|
10324
|
+
const totalBonus = computeStorageBonus(installed, state.capacity);
|
|
9666
10325
|
info.capacity = UInt32.from(state.capacity + totalBonus);
|
|
9667
10326
|
}
|
|
9668
10327
|
else {
|
|
@@ -9672,6 +10331,42 @@ function makeWarehouse(state) {
|
|
|
9672
10331
|
const entityInfo = Types.entity_info.from(info);
|
|
9673
10332
|
return new Warehouse(entityInfo);
|
|
9674
10333
|
}
|
|
10334
|
+
function makeExtractor(state) {
|
|
10335
|
+
const info = {
|
|
10336
|
+
type: Name.from('extractor'),
|
|
10337
|
+
id: UInt64.from(state.id),
|
|
10338
|
+
owner: Name.from(state.owner),
|
|
10339
|
+
entity_name: state.name,
|
|
10340
|
+
coordinates: Types.coordinates.from(state.coordinates),
|
|
10341
|
+
cargomass: UInt32.from(0),
|
|
10342
|
+
cargo: state.cargo || [],
|
|
10343
|
+
is_idle: !state.schedule,
|
|
10344
|
+
current_task_elapsed: UInt32.from(0),
|
|
10345
|
+
current_task_remaining: UInt32.from(0),
|
|
10346
|
+
pending_tasks: [],
|
|
10347
|
+
};
|
|
10348
|
+
if (state.hullmass !== undefined)
|
|
10349
|
+
info.hullmass = UInt32.from(state.hullmass);
|
|
10350
|
+
if (state.energy !== undefined)
|
|
10351
|
+
info.energy = UInt16.from(state.energy);
|
|
10352
|
+
if (state.schedule)
|
|
10353
|
+
info.schedule = state.schedule;
|
|
10354
|
+
if (state.capacity !== undefined)
|
|
10355
|
+
info.capacity = UInt32.from(state.capacity);
|
|
10356
|
+
const moduleEntries = assignModulesToSlots(ITEM_EXTRACTOR_T1_PACKED, state.modules ?? [], 'Extractor T1');
|
|
10357
|
+
if (state.modules && state.modules.length > 0) {
|
|
10358
|
+
const layout = getEntityLayout(ITEM_EXTRACTOR_T1_PACKED)?.slots ?? [];
|
|
10359
|
+
const installed = toInstalledModules(moduleEntries);
|
|
10360
|
+
const capabilities = computeExtractorCapabilities(installed, layout);
|
|
10361
|
+
if (capabilities.generator)
|
|
10362
|
+
info.generator = capabilities.generator;
|
|
10363
|
+
if (capabilities.gatherer)
|
|
10364
|
+
info.gatherer = capabilities.gatherer;
|
|
10365
|
+
}
|
|
10366
|
+
info.modules = moduleEntries;
|
|
10367
|
+
const entityInfo = Types.entity_info.from(info);
|
|
10368
|
+
return new Extractor(entityInfo);
|
|
10369
|
+
}
|
|
9675
10370
|
function makeContainer(state) {
|
|
9676
10371
|
const entityInfo = Types.entity_info.from({
|
|
9677
10372
|
type: Name.from('container'),
|
|
@@ -9753,6 +10448,149 @@ var cargoUtils = /*#__PURE__*/Object.freeze({
|
|
|
9753
10448
|
afterRemoveAllItems: afterRemoveAllItems
|
|
9754
10449
|
});
|
|
9755
10450
|
|
|
10451
|
+
function cargoRef(src) {
|
|
10452
|
+
return {
|
|
10453
|
+
item_id: src.item_id,
|
|
10454
|
+
stats: src.stats,
|
|
10455
|
+
modules: src.modules ?? [],
|
|
10456
|
+
};
|
|
10457
|
+
}
|
|
10458
|
+
function cargoItem(src, quantity) {
|
|
10459
|
+
return {
|
|
10460
|
+
...cargoRef(src),
|
|
10461
|
+
quantity,
|
|
10462
|
+
};
|
|
10463
|
+
}
|
|
10464
|
+
|
|
10465
|
+
function toChange(item, direction) {
|
|
10466
|
+
return {
|
|
10467
|
+
direction,
|
|
10468
|
+
item_id: Number(item.item_id),
|
|
10469
|
+
stats: BigInt(item.stats.toString()),
|
|
10470
|
+
modules: item.modules ?? [],
|
|
10471
|
+
quantity: Number(item.quantity),
|
|
10472
|
+
};
|
|
10473
|
+
}
|
|
10474
|
+
function taskCargoChanges(task) {
|
|
10475
|
+
const items = task.cargo ?? [];
|
|
10476
|
+
if (items.length === 0)
|
|
10477
|
+
return [];
|
|
10478
|
+
switch (Number(task.type)) {
|
|
10479
|
+
case TaskType.LOAD:
|
|
10480
|
+
case TaskType.UNWRAP:
|
|
10481
|
+
return items.map((i) => toChange(i, 'in'));
|
|
10482
|
+
case TaskType.GATHER:
|
|
10483
|
+
return task.entitytarget ? [] : items.map((i) => toChange(i, 'in'));
|
|
10484
|
+
case TaskType.UNLOAD:
|
|
10485
|
+
case TaskType.WRAP:
|
|
10486
|
+
return items.map((i) => toChange(i, 'out'));
|
|
10487
|
+
case TaskType.CRAFT:
|
|
10488
|
+
return [
|
|
10489
|
+
...items.slice(0, -1).map((i) => toChange(i, 'out')),
|
|
10490
|
+
toChange(items[items.length - 1], 'in'),
|
|
10491
|
+
];
|
|
10492
|
+
default:
|
|
10493
|
+
return [];
|
|
10494
|
+
}
|
|
10495
|
+
}
|
|
10496
|
+
|
|
10497
|
+
const ENTITY_SHIP = Name.from('ship');
|
|
10498
|
+
const ENTITY_WAREHOUSE = Name.from('warehouse');
|
|
10499
|
+
const ENTITY_EXTRACTOR = Name.from('extractor');
|
|
10500
|
+
const ENTITY_CONTAINER = Name.from('container');
|
|
10501
|
+
var EntityClass;
|
|
10502
|
+
(function (EntityClass) {
|
|
10503
|
+
EntityClass[EntityClass["OrbitalVessel"] = 0] = "OrbitalVessel";
|
|
10504
|
+
EntityClass[EntityClass["PlanetaryStructure"] = 1] = "PlanetaryStructure";
|
|
10505
|
+
})(EntityClass || (EntityClass = {}));
|
|
10506
|
+
function getEntityClass(entityType) {
|
|
10507
|
+
const typeName = typeof entityType === 'string' ? entityType : entityType.toString();
|
|
10508
|
+
switch (typeName) {
|
|
10509
|
+
case 'ship':
|
|
10510
|
+
case 'container':
|
|
10511
|
+
return EntityClass.OrbitalVessel;
|
|
10512
|
+
case 'warehouse':
|
|
10513
|
+
case 'extractor':
|
|
10514
|
+
return EntityClass.PlanetaryStructure;
|
|
10515
|
+
default:
|
|
10516
|
+
throw new Error(`Entity type has no class: ${typeName}`);
|
|
10517
|
+
}
|
|
10518
|
+
}
|
|
10519
|
+
function getPackedEntityType(itemId) {
|
|
10520
|
+
switch (itemId) {
|
|
10521
|
+
case ITEM_SHIP_T1_PACKED:
|
|
10522
|
+
return ENTITY_SHIP;
|
|
10523
|
+
case ITEM_CONTAINER_T1_PACKED:
|
|
10524
|
+
case ITEM_CONTAINER_T2_PACKED:
|
|
10525
|
+
return ENTITY_CONTAINER;
|
|
10526
|
+
case ITEM_WAREHOUSE_T1_PACKED:
|
|
10527
|
+
return ENTITY_WAREHOUSE;
|
|
10528
|
+
case ITEM_EXTRACTOR_T1_PACKED:
|
|
10529
|
+
return ENTITY_EXTRACTOR;
|
|
10530
|
+
default:
|
|
10531
|
+
return null;
|
|
10532
|
+
}
|
|
10533
|
+
}
|
|
10534
|
+
const shipTraits = {
|
|
10535
|
+
typeName: ENTITY_SHIP,
|
|
10536
|
+
isMovable: true,
|
|
10537
|
+
hasEnergy: true,
|
|
10538
|
+
hasLoaders: true,
|
|
10539
|
+
hasModules: true,
|
|
10540
|
+
notFoundError: 'ship not found',
|
|
10541
|
+
};
|
|
10542
|
+
const warehouseTraits = {
|
|
10543
|
+
typeName: ENTITY_WAREHOUSE,
|
|
10544
|
+
isMovable: false,
|
|
10545
|
+
hasEnergy: false,
|
|
10546
|
+
hasLoaders: true,
|
|
10547
|
+
hasModules: true,
|
|
10548
|
+
notFoundError: 'warehouse not found',
|
|
10549
|
+
};
|
|
10550
|
+
const extractorTraits = {
|
|
10551
|
+
typeName: ENTITY_EXTRACTOR,
|
|
10552
|
+
isMovable: false,
|
|
10553
|
+
hasEnergy: true,
|
|
10554
|
+
hasLoaders: false,
|
|
10555
|
+
hasModules: true,
|
|
10556
|
+
notFoundError: 'extractor not found',
|
|
10557
|
+
};
|
|
10558
|
+
const containerTraits = {
|
|
10559
|
+
typeName: ENTITY_CONTAINER,
|
|
10560
|
+
isMovable: true,
|
|
10561
|
+
hasEnergy: false,
|
|
10562
|
+
hasLoaders: false,
|
|
10563
|
+
hasModules: false,
|
|
10564
|
+
notFoundError: 'container not found',
|
|
10565
|
+
};
|
|
10566
|
+
function getEntityTraits(entityType) {
|
|
10567
|
+
const typeName = typeof entityType === 'string' ? entityType : entityType.toString();
|
|
10568
|
+
switch (typeName) {
|
|
10569
|
+
case 'ship':
|
|
10570
|
+
return shipTraits;
|
|
10571
|
+
case 'warehouse':
|
|
10572
|
+
return warehouseTraits;
|
|
10573
|
+
case 'extractor':
|
|
10574
|
+
return extractorTraits;
|
|
10575
|
+
case 'container':
|
|
10576
|
+
return containerTraits;
|
|
10577
|
+
default:
|
|
10578
|
+
throw new Error(`Unknown entity type: ${typeName}`);
|
|
10579
|
+
}
|
|
10580
|
+
}
|
|
10581
|
+
function isShip(entity) {
|
|
10582
|
+
return entity.type?.equals(ENTITY_SHIP) ?? false;
|
|
10583
|
+
}
|
|
10584
|
+
function isWarehouse(entity) {
|
|
10585
|
+
return entity.type?.equals(ENTITY_WAREHOUSE) ?? false;
|
|
10586
|
+
}
|
|
10587
|
+
function isExtractor(entity) {
|
|
10588
|
+
return entity.type?.equals(ENTITY_EXTRACTOR) ?? false;
|
|
10589
|
+
}
|
|
10590
|
+
function isContainer(entity) {
|
|
10591
|
+
return entity.type?.equals(ENTITY_CONTAINER) ?? false;
|
|
10592
|
+
}
|
|
10593
|
+
|
|
9756
10594
|
function canMove(e) {
|
|
9757
10595
|
return 'engines' in e && 'generator' in e && 'energy' in e;
|
|
9758
10596
|
}
|
|
@@ -9825,34 +10663,96 @@ function computeHaulPenalty(totalThrust, haulCount, avgEfficiency) {
|
|
|
9825
10663
|
HAULER_EFFICIENCY_DENOM);
|
|
9826
10664
|
return Math.floor((totalThrust * 1000) / penaltyMilli);
|
|
9827
10665
|
}
|
|
9828
|
-
function computeHaulerDrain(distance, drain, haulCount) {
|
|
10666
|
+
function computeHaulerDrain$1(distance, drain, haulCount) {
|
|
9829
10667
|
return Math.floor(distance / PRECISION) * drain * haulCount;
|
|
9830
10668
|
}
|
|
9831
10669
|
|
|
9832
|
-
const
|
|
9833
|
-
|
|
9834
|
-
|
|
9835
|
-
|
|
9836
|
-
|
|
9837
|
-
|
|
9838
|
-
|
|
9839
|
-
|
|
9840
|
-
|
|
9841
|
-
|
|
9842
|
-
|
|
9843
|
-
|
|
9844
|
-
|
|
9845
|
-
|
|
9846
|
-
|
|
9847
|
-
|
|
9848
|
-
|
|
9849
|
-
|
|
9850
|
-
|
|
9851
|
-
|
|
9852
|
-
|
|
9853
|
-
|
|
9854
|
-
|
|
9855
|
-
|
|
10670
|
+
const categoryColors = {
|
|
10671
|
+
ore: '#C26D3F',
|
|
10672
|
+
crystal: '#4ADBFF',
|
|
10673
|
+
gas: '#B8E4A0',
|
|
10674
|
+
regolith: '#C4A57B',
|
|
10675
|
+
biomass: '#5A8B3E',
|
|
10676
|
+
};
|
|
10677
|
+
const tierColors = {
|
|
10678
|
+
1: '#8b8b8b',
|
|
10679
|
+
2: '#4ade80',
|
|
10680
|
+
3: '#818cf8',
|
|
10681
|
+
4: '#c084fc',
|
|
10682
|
+
5: '#fbbf24',
|
|
10683
|
+
6: '#f97316',
|
|
10684
|
+
7: '#ef4444',
|
|
10685
|
+
8: '#ec4899',
|
|
10686
|
+
9: '#06b6d4',
|
|
10687
|
+
10: '#ffffff',
|
|
10688
|
+
};
|
|
10689
|
+
const categoryIcons = {
|
|
10690
|
+
ore: '⬡',
|
|
10691
|
+
crystal: '◈',
|
|
10692
|
+
gas: '◎',
|
|
10693
|
+
regolith: '■',
|
|
10694
|
+
biomass: '❋',
|
|
10695
|
+
};
|
|
10696
|
+
const categoryIconShapes = {
|
|
10697
|
+
ore: 'hex',
|
|
10698
|
+
crystal: 'diamond',
|
|
10699
|
+
gas: 'circle',
|
|
10700
|
+
regolith: 'square',
|
|
10701
|
+
biomass: 'star',
|
|
10702
|
+
};
|
|
10703
|
+
const componentIcon = '▣';
|
|
10704
|
+
const moduleIcon = '⬢';
|
|
10705
|
+
const itemAbbreviations = {
|
|
10706
|
+
10001: 'HP',
|
|
10707
|
+
10002: 'CL',
|
|
10708
|
+
10003: 'TC',
|
|
10709
|
+
10004: 'PC',
|
|
10710
|
+
10005: 'DS',
|
|
10711
|
+
10006: 'EP',
|
|
10712
|
+
10007: 'CA',
|
|
10713
|
+
10008: 'TB',
|
|
10714
|
+
10009: 'RC',
|
|
10715
|
+
10010: 'FA',
|
|
10716
|
+
10100: 'EN',
|
|
10717
|
+
10101: 'GN',
|
|
10718
|
+
10102: 'EX',
|
|
10719
|
+
10103: 'LD',
|
|
10720
|
+
10104: 'MF',
|
|
10721
|
+
10105: 'ST',
|
|
10722
|
+
10106: 'HL',
|
|
10723
|
+
10107: 'WP',
|
|
10724
|
+
10200: 'CT',
|
|
10725
|
+
10201: 'SH',
|
|
10726
|
+
10202: 'WH',
|
|
10727
|
+
20001: 'HP',
|
|
10728
|
+
20002: 'CL',
|
|
10729
|
+
20200: 'CT',
|
|
10730
|
+
};
|
|
10731
|
+
|
|
10732
|
+
const ITEM_TYPE_RESOURCE = 0;
|
|
10733
|
+
const ITEM_TYPE_COMPONENT = 1;
|
|
10734
|
+
const ITEM_TYPE_MODULE = 2;
|
|
10735
|
+
const ITEM_TYPE_ENTITY = 3;
|
|
10736
|
+
function itemTypeCode(id) {
|
|
10737
|
+
switch (itemCategory(id)) {
|
|
10738
|
+
case 'resource':
|
|
10739
|
+
return ITEM_TYPE_RESOURCE;
|
|
10740
|
+
case 'component':
|
|
10741
|
+
return ITEM_TYPE_COMPONENT;
|
|
10742
|
+
case 'module':
|
|
10743
|
+
return ITEM_TYPE_MODULE;
|
|
10744
|
+
case 'entity':
|
|
10745
|
+
return ITEM_TYPE_ENTITY;
|
|
10746
|
+
}
|
|
10747
|
+
}
|
|
10748
|
+
function itemTier(id) {
|
|
10749
|
+
if (id < 10000)
|
|
10750
|
+
return 0;
|
|
10751
|
+
return Math.floor(id / 10000);
|
|
10752
|
+
}
|
|
10753
|
+
function itemOffset(id) {
|
|
10754
|
+
return id % 10000;
|
|
10755
|
+
}
|
|
9856
10756
|
function itemCategory(id) {
|
|
9857
10757
|
if (id < 10000)
|
|
9858
10758
|
return 'resource';
|
|
@@ -9975,6 +10875,11 @@ const capabilityNames = [
|
|
|
9975
10875
|
const capabilityAttributes = [
|
|
9976
10876
|
{ capability: 'Hull', attribute: 'mass', description: 'Total mass of the hull' },
|
|
9977
10877
|
{ capability: 'Storage', attribute: 'capacity', description: 'Maximum mass that can be stored' },
|
|
10878
|
+
{
|
|
10879
|
+
capability: 'Storage',
|
|
10880
|
+
attribute: 'bonus',
|
|
10881
|
+
description: 'Capacity bonus added by an installed Storage module',
|
|
10882
|
+
},
|
|
9978
10883
|
{ capability: 'Movement', attribute: 'thrust', description: 'Propulsion force' },
|
|
9979
10884
|
{ capability: 'Movement', attribute: 'drain', description: 'Energy consumed per movement' },
|
|
9980
10885
|
{ capability: 'Energy', attribute: 'capacity', description: 'Maximum energy storage' },
|
|
@@ -10012,338 +10917,151 @@ const capabilityAttributes = [
|
|
|
10012
10917
|
description: 'Energy consumed per target during haul-beam operation',
|
|
10013
10918
|
},
|
|
10014
10919
|
];
|
|
10015
|
-
const
|
|
10016
|
-
|
|
10017
|
-
|
|
10018
|
-
|
|
10019
|
-
|
|
10020
|
-
|
|
10021
|
-
|
|
10022
|
-
|
|
10023
|
-
|
|
10024
|
-
|
|
10025
|
-
|
|
10026
|
-
|
|
10027
|
-
},
|
|
10028
|
-
{
|
|
10029
|
-
|
|
10030
|
-
|
|
10031
|
-
|
|
10032
|
-
|
|
10033
|
-
|
|
10034
|
-
|
|
10035
|
-
|
|
10036
|
-
capability: 'Movement',
|
|
10037
|
-
attribute: 'thrust',
|
|
10038
|
-
rationale: 'Engine components that tolerate more can push harder',
|
|
10039
|
-
},
|
|
10040
|
-
{
|
|
10041
|
-
stat: 'Tolerance',
|
|
10042
|
-
capability: 'Energy',
|
|
10043
|
-
attribute: 'recharge',
|
|
10044
|
-
rationale: 'Generator housing withstands stress for faster recharge',
|
|
10045
|
-
},
|
|
10046
|
-
{
|
|
10047
|
-
stat: 'Tolerance',
|
|
10048
|
-
capability: 'Gathering',
|
|
10049
|
-
attribute: 'depth',
|
|
10050
|
-
rationale: 'Housing withstands pressure/heat at extreme depths',
|
|
10051
|
-
},
|
|
10052
|
-
{
|
|
10053
|
-
stat: 'Tolerance',
|
|
10054
|
-
capability: 'Warp',
|
|
10055
|
-
attribute: 'range',
|
|
10056
|
-
rationale: 'Warp drive housing withstands extreme forces',
|
|
10057
|
-
},
|
|
10058
|
-
{
|
|
10059
|
-
stat: 'Density',
|
|
10060
|
-
capability: 'Hull',
|
|
10061
|
-
attribute: 'mass',
|
|
10062
|
-
rationale: 'Lighter metal = lighter hull',
|
|
10063
|
-
},
|
|
10064
|
-
{
|
|
10065
|
-
stat: 'Density',
|
|
10066
|
-
capability: 'Loader',
|
|
10067
|
-
attribute: 'mass',
|
|
10068
|
-
rationale: 'Lighter metal = lighter loader units',
|
|
10069
|
-
},
|
|
10070
|
-
{
|
|
10071
|
-
stat: 'Density',
|
|
10072
|
-
capability: 'Movement',
|
|
10073
|
-
attribute: 'drain',
|
|
10074
|
-
rationale: 'Lighter components require less energy to move',
|
|
10075
|
-
},
|
|
10076
|
-
{
|
|
10077
|
-
stat: 'Conductivity',
|
|
10078
|
-
capability: 'Movement',
|
|
10079
|
-
attribute: 'drain',
|
|
10080
|
-
rationale: 'Efficient energy transfer reduces movement energy cost',
|
|
10081
|
-
},
|
|
10082
|
-
{
|
|
10083
|
-
stat: 'Conductivity',
|
|
10084
|
-
capability: 'Gathering',
|
|
10085
|
-
attribute: 'drain',
|
|
10086
|
-
rationale: 'Efficient energy transfer reduces gathering energy cost',
|
|
10087
|
-
},
|
|
10088
|
-
{
|
|
10089
|
-
stat: 'Conductivity',
|
|
10090
|
-
capability: 'Crafter',
|
|
10091
|
-
attribute: 'drain',
|
|
10092
|
-
rationale: 'Efficient energy transfer reduces crafting energy cost',
|
|
10093
|
-
},
|
|
10094
|
-
{
|
|
10095
|
-
stat: 'Conductivity',
|
|
10096
|
-
capability: 'Energy',
|
|
10097
|
-
attribute: 'recharge',
|
|
10098
|
-
rationale: 'Better conductivity speeds energy flow during recharge',
|
|
10099
|
-
},
|
|
10100
|
-
{
|
|
10101
|
-
stat: 'Ductility',
|
|
10102
|
-
capability: 'Crafter',
|
|
10103
|
-
attribute: 'quality',
|
|
10104
|
-
rationale: 'Precise shaping enables tighter crafting tolerances',
|
|
10105
|
-
},
|
|
10106
|
-
{
|
|
10107
|
-
stat: 'Ductility',
|
|
10108
|
-
capability: 'Gathering',
|
|
10109
|
-
attribute: 'yield',
|
|
10110
|
-
rationale: 'Precisely shaped conduit components gather faster',
|
|
10111
|
-
},
|
|
10112
|
-
{
|
|
10113
|
-
stat: 'Ductility',
|
|
10114
|
-
capability: 'Storage',
|
|
10115
|
-
attribute: 'capacity',
|
|
10116
|
-
rationale: 'Precision-formed container walls maximize volume',
|
|
10117
|
-
},
|
|
10118
|
-
{
|
|
10119
|
-
stat: 'Ductility',
|
|
10120
|
-
capability: 'Loader',
|
|
10121
|
-
attribute: 'mass',
|
|
10122
|
-
rationale: 'Precision-formed precious metal reduces loader unit mass',
|
|
10123
|
-
},
|
|
10124
|
-
{
|
|
10125
|
-
stat: 'Reflectivity',
|
|
10126
|
-
capability: 'Gathering',
|
|
10127
|
-
attribute: 'depth',
|
|
10128
|
-
rationale: 'Reflective heat shielding protects equipment at depth',
|
|
10129
|
-
},
|
|
10130
|
-
{
|
|
10131
|
-
stat: 'Reflectivity',
|
|
10132
|
-
capability: 'Launch',
|
|
10133
|
-
attribute: 'range',
|
|
10134
|
-
rationale: 'Reflective surfaces focus electromagnetic launch energy',
|
|
10135
|
-
},
|
|
10136
|
-
{
|
|
10137
|
-
stat: 'Volatility',
|
|
10138
|
-
capability: 'Gathering',
|
|
10139
|
-
attribute: 'yield',
|
|
10140
|
-
rationale: 'Energy release powers faster gathering',
|
|
10141
|
-
},
|
|
10142
|
-
{
|
|
10143
|
-
stat: 'Volatility',
|
|
10144
|
-
capability: 'Movement',
|
|
10145
|
-
attribute: 'thrust',
|
|
10146
|
-
rationale: 'Energy release drives propulsion force',
|
|
10147
|
-
},
|
|
10148
|
-
{
|
|
10149
|
-
stat: 'Volatility',
|
|
10150
|
-
capability: 'Loader',
|
|
10151
|
-
attribute: 'thrust',
|
|
10152
|
-
rationale: 'Energy release powers loader motors',
|
|
10153
|
-
},
|
|
10154
|
-
{
|
|
10155
|
-
stat: 'Volatility',
|
|
10156
|
-
capability: 'Launch',
|
|
10157
|
-
attribute: 'capacity',
|
|
10158
|
-
rationale: 'Energy release enables launching heavier payloads',
|
|
10159
|
-
},
|
|
10160
|
-
{
|
|
10161
|
-
stat: 'Reactivity',
|
|
10162
|
-
capability: 'Crafter',
|
|
10163
|
-
attribute: 'speed',
|
|
10164
|
-
rationale: 'Reactive gases accelerate chemical/thermal processing',
|
|
10165
|
-
},
|
|
10166
|
-
{
|
|
10167
|
-
stat: 'Reactivity',
|
|
10168
|
-
capability: 'Gathering',
|
|
10169
|
-
attribute: 'speed',
|
|
10170
|
-
rationale: 'Reactive gases manage heat/friction during gathering',
|
|
10171
|
-
},
|
|
10172
|
-
{
|
|
10173
|
-
stat: 'Reactivity',
|
|
10174
|
-
capability: 'Launch',
|
|
10175
|
-
attribute: 'drain',
|
|
10176
|
-
rationale: 'Reactive gas medium reduces electromagnetic resistance',
|
|
10177
|
-
},
|
|
10178
|
-
{
|
|
10179
|
-
stat: 'Thermal',
|
|
10180
|
-
capability: 'Crafter',
|
|
10181
|
-
attribute: 'quality',
|
|
10182
|
-
rationale: 'Precise thermal control during fabrication',
|
|
10183
|
-
},
|
|
10184
|
-
{
|
|
10185
|
-
stat: 'Thermal',
|
|
10186
|
-
capability: 'Gathering',
|
|
10187
|
-
attribute: 'drain',
|
|
10188
|
-
rationale: 'Thermal management reduces energy waste during gathering',
|
|
10189
|
-
},
|
|
10190
|
-
{
|
|
10191
|
-
stat: 'Thermal',
|
|
10192
|
-
capability: 'Energy',
|
|
10193
|
-
attribute: 'capacity',
|
|
10194
|
-
rationale: 'Thermal management enables denser energy storage',
|
|
10195
|
-
},
|
|
10196
|
-
{
|
|
10197
|
-
stat: 'Resonance',
|
|
10198
|
-
capability: 'Energy',
|
|
10199
|
-
attribute: 'capacity',
|
|
10200
|
-
rationale: 'Resonating crystals store energy in fields',
|
|
10201
|
-
},
|
|
10202
|
-
{
|
|
10203
|
-
stat: 'Resonance',
|
|
10204
|
-
capability: 'Warp',
|
|
10205
|
-
attribute: 'range',
|
|
10206
|
-
rationale: 'Resonant crystals amplify warp field projection',
|
|
10207
|
-
},
|
|
10208
|
-
{
|
|
10209
|
-
stat: 'Resonance',
|
|
10210
|
-
capability: 'Launch',
|
|
10211
|
-
attribute: 'range',
|
|
10212
|
-
rationale: 'Resonant crystals focus electromagnetic launch field',
|
|
10213
|
-
},
|
|
10214
|
-
{
|
|
10215
|
-
stat: 'Resonance',
|
|
10216
|
-
capability: 'Launch',
|
|
10217
|
-
attribute: 'capacity',
|
|
10218
|
-
rationale: 'Stronger resonant field launches heavier payloads',
|
|
10219
|
-
},
|
|
10220
|
-
{
|
|
10221
|
-
stat: 'Hardness',
|
|
10222
|
-
capability: 'Crafter',
|
|
10223
|
-
attribute: 'speed',
|
|
10224
|
-
rationale: 'Hard tooling surfaces cut and shape materials faster',
|
|
10225
|
-
},
|
|
10226
|
-
{
|
|
10227
|
-
stat: 'Hardness',
|
|
10228
|
-
capability: 'Launch',
|
|
10229
|
-
attribute: 'drain',
|
|
10230
|
-
rationale: 'Hard rail surfaces reduce friction, less energy wasted',
|
|
10231
|
-
},
|
|
10232
|
-
{
|
|
10233
|
-
stat: 'Clarity',
|
|
10234
|
-
capability: 'Energy',
|
|
10235
|
-
attribute: 'recharge',
|
|
10236
|
-
rationale: 'Flawless crystals enable smoother energy flow during recharge',
|
|
10237
|
-
},
|
|
10238
|
-
{
|
|
10239
|
-
stat: 'Clarity',
|
|
10240
|
-
capability: 'Crafter',
|
|
10241
|
-
attribute: 'quality',
|
|
10242
|
-
rationale: 'Precision optics for calibration during fabrication',
|
|
10243
|
-
},
|
|
10244
|
-
{
|
|
10245
|
-
stat: 'Clarity',
|
|
10246
|
-
capability: 'Crafter',
|
|
10247
|
-
attribute: 'drain',
|
|
10248
|
-
rationale: 'Precision computing optimizes energy routing in factory',
|
|
10249
|
-
},
|
|
10250
|
-
{
|
|
10251
|
-
stat: 'Plasticity',
|
|
10252
|
-
capability: 'Crafter',
|
|
10253
|
-
attribute: 'speed',
|
|
10254
|
-
rationale: 'Easily reshaped materials speed up processing',
|
|
10255
|
-
},
|
|
10256
|
-
{
|
|
10257
|
-
stat: 'Plasticity',
|
|
10258
|
-
capability: 'Movement',
|
|
10259
|
-
attribute: 'thrust',
|
|
10260
|
-
rationale: 'Flexible polymer seals reduce friction in propulsion',
|
|
10261
|
-
},
|
|
10262
|
-
{
|
|
10263
|
-
stat: 'Plasticity',
|
|
10264
|
-
capability: 'Loader',
|
|
10265
|
-
attribute: 'thrust',
|
|
10266
|
-
rationale: 'Flexible joints improve loader force transfer',
|
|
10267
|
-
},
|
|
10268
|
-
{
|
|
10269
|
-
stat: 'Insulation',
|
|
10270
|
-
capability: 'Movement',
|
|
10271
|
-
attribute: 'drain',
|
|
10272
|
-
rationale: 'Better insulation reduces energy loss during movement',
|
|
10273
|
-
},
|
|
10274
|
-
{
|
|
10275
|
-
stat: 'Insulation',
|
|
10276
|
-
capability: 'Gathering',
|
|
10277
|
-
attribute: 'drain',
|
|
10278
|
-
rationale: 'Better insulation reduces energy loss during gathering',
|
|
10279
|
-
},
|
|
10280
|
-
{
|
|
10281
|
-
stat: 'Insulation',
|
|
10282
|
-
capability: 'Crafter',
|
|
10283
|
-
attribute: 'drain',
|
|
10284
|
-
rationale: 'Better insulation reduces energy loss during crafting',
|
|
10920
|
+
const invertedAttributes = new Set(['drain', 'mass']);
|
|
10921
|
+
function isInvertedAttribute(attribute) {
|
|
10922
|
+
return invertedAttributes.has(attribute);
|
|
10923
|
+
}
|
|
10924
|
+
function getCapabilityAttributes(capability) {
|
|
10925
|
+
if (capability) {
|
|
10926
|
+
return capabilityAttributes.filter((a) => a.capability === capability);
|
|
10927
|
+
}
|
|
10928
|
+
return capabilityAttributes;
|
|
10929
|
+
}
|
|
10930
|
+
|
|
10931
|
+
const ENTITY_HULL_SLOTS = {
|
|
10932
|
+
0: { capability: 'Storage', attribute: 'capacity' },
|
|
10933
|
+
1: { capability: 'Hull', attribute: 'mass' },
|
|
10934
|
+
2: { capability: 'Storage', attribute: 'capacity' },
|
|
10935
|
+
3: { capability: 'Storage', attribute: 'capacity' },
|
|
10936
|
+
};
|
|
10937
|
+
const SLOT_FORMULAS = {
|
|
10938
|
+
engine: {
|
|
10939
|
+
0: { capability: 'Movement', attribute: 'thrust' },
|
|
10940
|
+
1: { capability: 'Movement', attribute: 'drain' },
|
|
10285
10941
|
},
|
|
10286
|
-
{
|
|
10287
|
-
|
|
10288
|
-
capability: '
|
|
10289
|
-
attribute: 'drain',
|
|
10290
|
-
rationale: 'Better insulation reduces energy loss during launch',
|
|
10942
|
+
generator: {
|
|
10943
|
+
0: { capability: 'Energy', attribute: 'capacity' },
|
|
10944
|
+
1: { capability: 'Energy', attribute: 'recharge' },
|
|
10291
10945
|
},
|
|
10292
|
-
{
|
|
10293
|
-
|
|
10294
|
-
capability: '
|
|
10295
|
-
attribute: '
|
|
10296
|
-
|
|
10946
|
+
gatherer: {
|
|
10947
|
+
0: { capability: 'Gathering', attribute: 'yield' },
|
|
10948
|
+
1: { capability: 'Gathering', attribute: 'depth' },
|
|
10949
|
+
3: { capability: 'Gathering', attribute: 'drain' },
|
|
10950
|
+
4: { capability: 'Gathering', attribute: 'speed' },
|
|
10297
10951
|
},
|
|
10298
|
-
{
|
|
10299
|
-
|
|
10300
|
-
capability: '
|
|
10301
|
-
attribute: 'speed',
|
|
10302
|
-
rationale: 'Purer bio-lubricants reduce friction during gathering',
|
|
10952
|
+
loader: {
|
|
10953
|
+
0: { capability: 'Loader', attribute: 'mass' },
|
|
10954
|
+
1: { capability: 'Loader', attribute: 'thrust' },
|
|
10303
10955
|
},
|
|
10304
|
-
{
|
|
10305
|
-
|
|
10306
|
-
capability: '
|
|
10307
|
-
attribute: 'capacity',
|
|
10308
|
-
rationale: 'Purer organic electrolytes store more charge',
|
|
10956
|
+
crafter: {
|
|
10957
|
+
0: { capability: 'Crafter', attribute: 'speed' },
|
|
10958
|
+
1: { capability: 'Crafter', attribute: 'drain' },
|
|
10309
10959
|
},
|
|
10310
|
-
{
|
|
10311
|
-
|
|
10312
|
-
capability: '
|
|
10313
|
-
attribute: '
|
|
10314
|
-
|
|
10960
|
+
storage: {
|
|
10961
|
+
0: { capability: 'Storage', attribute: 'bonus' },
|
|
10962
|
+
1: { capability: 'Storage', attribute: 'bonus' },
|
|
10963
|
+
2: { capability: 'Storage', attribute: 'bonus' },
|
|
10964
|
+
3: { capability: 'Storage', attribute: 'bonus' },
|
|
10315
10965
|
},
|
|
10316
|
-
{
|
|
10317
|
-
|
|
10318
|
-
capability: 'Hauler',
|
|
10319
|
-
attribute: '
|
|
10320
|
-
rationale: 'Energy-transfer efficiency reduces the thrust penalty from each hauled target.',
|
|
10966
|
+
hauler: {
|
|
10967
|
+
0: { capability: 'Hauler', attribute: 'capacity' },
|
|
10968
|
+
1: { capability: 'Hauler', attribute: 'efficiency' },
|
|
10969
|
+
2: { capability: 'Hauler', attribute: 'drain' },
|
|
10321
10970
|
},
|
|
10322
|
-
{
|
|
10323
|
-
|
|
10324
|
-
capability: 'Hauler',
|
|
10325
|
-
attribute: 'drain',
|
|
10326
|
-
rationale: 'Clarity-focused energy routing reduces per-target drain during haul-beam operation.',
|
|
10971
|
+
warp: {
|
|
10972
|
+
0: { capability: 'Warp', attribute: 'range' },
|
|
10327
10973
|
},
|
|
10328
|
-
|
|
10329
|
-
|
|
10330
|
-
|
|
10331
|
-
|
|
10974
|
+
'ship-t1': ENTITY_HULL_SLOTS,
|
|
10975
|
+
'container-t1': ENTITY_HULL_SLOTS,
|
|
10976
|
+
'warehouse-t1': ENTITY_HULL_SLOTS,
|
|
10977
|
+
'extractor-t1': ENTITY_HULL_SLOTS,
|
|
10978
|
+
'container-t2': ENTITY_HULL_SLOTS,
|
|
10979
|
+
};
|
|
10980
|
+
|
|
10981
|
+
const KIND_TO_ITEM_ID = {
|
|
10982
|
+
engine: ITEM_ENGINE_T1,
|
|
10983
|
+
generator: ITEM_GENERATOR_T1,
|
|
10984
|
+
gatherer: ITEM_GATHERER_T1,
|
|
10985
|
+
loader: ITEM_LOADER_T1,
|
|
10986
|
+
crafter: ITEM_CRAFTER_T1,
|
|
10987
|
+
storage: ITEM_STORAGE_T1,
|
|
10988
|
+
hauler: ITEM_HAULER_T1,
|
|
10989
|
+
warp: ITEM_WARP_T1,
|
|
10990
|
+
'ship-t1': ITEM_SHIP_T1_PACKED,
|
|
10991
|
+
'container-t1': ITEM_CONTAINER_T1_PACKED,
|
|
10992
|
+
'warehouse-t1': ITEM_WAREHOUSE_T1_PACKED,
|
|
10993
|
+
'extractor-t1': ITEM_EXTRACTOR_T1_PACKED,
|
|
10994
|
+
'container-t2': ITEM_CONTAINER_T2_PACKED,
|
|
10995
|
+
};
|
|
10996
|
+
function isCategoryInput(input) {
|
|
10997
|
+
return 'category' in input;
|
|
10332
10998
|
}
|
|
10333
|
-
function
|
|
10334
|
-
|
|
10335
|
-
|
|
10999
|
+
function traceToRawCategoryStat(recipe, source, visited = new Set()) {
|
|
11000
|
+
const input = recipe.inputs[source.inputIndex];
|
|
11001
|
+
if (!input)
|
|
11002
|
+
return undefined;
|
|
11003
|
+
if (isCategoryInput(input)) {
|
|
11004
|
+
const defs = getStatDefinitions(input.category);
|
|
11005
|
+
return defs[source.statIndex];
|
|
10336
11006
|
}
|
|
10337
|
-
|
|
11007
|
+
if (visited.has(input.itemId))
|
|
11008
|
+
return undefined;
|
|
11009
|
+
const subRecipe = getRecipe(input.itemId);
|
|
11010
|
+
if (!subRecipe)
|
|
11011
|
+
return undefined;
|
|
11012
|
+
const subSlot = subRecipe.statSlots[source.statIndex];
|
|
11013
|
+
if (!subSlot)
|
|
11014
|
+
return undefined;
|
|
11015
|
+
const subSource = subSlot.sources[0];
|
|
11016
|
+
if (!subSource)
|
|
11017
|
+
return undefined;
|
|
11018
|
+
const nextVisited = new Set(visited);
|
|
11019
|
+
nextVisited.add(input.itemId);
|
|
11020
|
+
return traceToRawCategoryStat(subRecipe, subSource, nextVisited);
|
|
11021
|
+
}
|
|
11022
|
+
let cached;
|
|
11023
|
+
function deriveStatMappings() {
|
|
11024
|
+
if (cached)
|
|
11025
|
+
return cached;
|
|
11026
|
+
const out = [];
|
|
11027
|
+
const seen = new Set();
|
|
11028
|
+
for (const [kind, slots] of Object.entries(SLOT_FORMULAS)) {
|
|
11029
|
+
const itemId = KIND_TO_ITEM_ID[kind];
|
|
11030
|
+
const recipe = getRecipe(itemId);
|
|
11031
|
+
if (!recipe)
|
|
11032
|
+
continue;
|
|
11033
|
+
for (const [slotIdxStr, consumer] of Object.entries(slots)) {
|
|
11034
|
+
const slotIdx = Number(slotIdxStr);
|
|
11035
|
+
const slot = recipe.statSlots[slotIdx];
|
|
11036
|
+
if (!slot)
|
|
11037
|
+
continue;
|
|
11038
|
+
for (const source of slot.sources) {
|
|
11039
|
+
const stat = traceToRawCategoryStat(recipe, source);
|
|
11040
|
+
if (!stat)
|
|
11041
|
+
continue;
|
|
11042
|
+
const key = `${stat.label}|${consumer.capability}|${consumer.attribute}`;
|
|
11043
|
+
if (seen.has(key))
|
|
11044
|
+
continue;
|
|
11045
|
+
seen.add(key);
|
|
11046
|
+
out.push({
|
|
11047
|
+
stat: stat.label,
|
|
11048
|
+
capability: consumer.capability,
|
|
11049
|
+
attribute: consumer.attribute,
|
|
11050
|
+
});
|
|
11051
|
+
}
|
|
11052
|
+
}
|
|
11053
|
+
}
|
|
11054
|
+
cached = out;
|
|
11055
|
+
return out;
|
|
10338
11056
|
}
|
|
10339
11057
|
function getStatMappings() {
|
|
10340
|
-
return
|
|
11058
|
+
return deriveStatMappings();
|
|
10341
11059
|
}
|
|
10342
11060
|
function getStatMappingsForStat(stat) {
|
|
10343
|
-
return
|
|
11061
|
+
return deriveStatMappings().filter((m) => m.stat === stat);
|
|
10344
11062
|
}
|
|
10345
11063
|
function getStatMappingsForCapability(capability) {
|
|
10346
|
-
return
|
|
11064
|
+
return deriveStatMappings().filter((m) => m.capability === capability);
|
|
10347
11065
|
}
|
|
10348
11066
|
|
|
10349
11067
|
function toNum(v) {
|
|
@@ -10415,7 +11133,7 @@ function resolveComponent(id, stats) {
|
|
|
10415
11133
|
stats: resolvedStats,
|
|
10416
11134
|
};
|
|
10417
11135
|
}
|
|
10418
|
-
function computeCapabilityGroup(moduleType, stats) {
|
|
11136
|
+
function computeCapabilityGroup(moduleType, stats, tier) {
|
|
10419
11137
|
switch (moduleType) {
|
|
10420
11138
|
case MODULE_ENGINE: {
|
|
10421
11139
|
const caps = computeEngineCapabilities(stats);
|
|
@@ -10438,7 +11156,7 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
10438
11156
|
};
|
|
10439
11157
|
}
|
|
10440
11158
|
case MODULE_GATHERER: {
|
|
10441
|
-
const caps = computeGathererCapabilities(stats);
|
|
11159
|
+
const caps = computeGathererCapabilities(stats, tier);
|
|
10442
11160
|
return {
|
|
10443
11161
|
capability: 'Gatherer',
|
|
10444
11162
|
attributes: [
|
|
@@ -10482,10 +11200,11 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
10482
11200
|
};
|
|
10483
11201
|
}
|
|
10484
11202
|
case MODULE_STORAGE: {
|
|
10485
|
-
const str = stats.strength
|
|
10486
|
-
const
|
|
10487
|
-
const
|
|
10488
|
-
const
|
|
11203
|
+
const str = stats.strength;
|
|
11204
|
+
const den = stats.density;
|
|
11205
|
+
const hrd = stats.hardness;
|
|
11206
|
+
const sat = stats.saturation;
|
|
11207
|
+
const statSum = str + den + hrd + sat;
|
|
10489
11208
|
const pct = 10 + Math.floor((statSum * 10) / 2997);
|
|
10490
11209
|
return { capability: 'Storage', attributes: [{ label: 'Capacity Bonus', value: pct }] };
|
|
10491
11210
|
}
|
|
@@ -10499,7 +11218,7 @@ function resolveModule(id, stats) {
|
|
|
10499
11218
|
if (stats !== undefined) {
|
|
10500
11219
|
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
10501
11220
|
const modType = getModuleCapabilityType(id);
|
|
10502
|
-
const group = computeCapabilityGroup(modType, decoded);
|
|
11221
|
+
const group = computeCapabilityGroup(modType, decoded, item.tier);
|
|
10503
11222
|
if (group)
|
|
10504
11223
|
attributes = [group];
|
|
10505
11224
|
}
|
|
@@ -10520,6 +11239,8 @@ function hullCapsForEntity(itemId, decoded) {
|
|
|
10520
11239
|
return computeShipHullCapabilities(decoded);
|
|
10521
11240
|
case ITEM_WAREHOUSE_T1_PACKED:
|
|
10522
11241
|
return computeWarehouseHullCapabilities(decoded);
|
|
11242
|
+
case ITEM_EXTRACTOR_T1_PACKED:
|
|
11243
|
+
return computeShipHullCapabilities(decoded);
|
|
10523
11244
|
case ITEM_CONTAINER_T1_PACKED:
|
|
10524
11245
|
return computeContainerCapabilities(decoded);
|
|
10525
11246
|
case ITEM_CONTAINER_T2_PACKED:
|
|
@@ -10555,14 +11276,17 @@ function resolveEntity(id, stats, modules) {
|
|
|
10555
11276
|
const modStats = BigInt(mod.installed.stats.toString());
|
|
10556
11277
|
const decodedStats = decodeCraftedItemStats(modItemId, modStats);
|
|
10557
11278
|
const modType = getModuleCapabilityType(modItemId);
|
|
10558
|
-
const group = computeCapabilityGroup(modType, decodedStats);
|
|
10559
11279
|
let modName = 'Module';
|
|
11280
|
+
let modTier = 1;
|
|
10560
11281
|
try {
|
|
10561
|
-
|
|
11282
|
+
const modItem = getItem(modItemId);
|
|
11283
|
+
modName = modItem.name;
|
|
11284
|
+
modTier = modItem.tier;
|
|
10562
11285
|
}
|
|
10563
11286
|
catch {
|
|
10564
11287
|
modName = itemMetadata[modItemId]?.name ?? 'Module';
|
|
10565
11288
|
}
|
|
11289
|
+
const group = computeCapabilityGroup(modType, decodedStats, modTier);
|
|
10566
11290
|
return {
|
|
10567
11291
|
name: modName,
|
|
10568
11292
|
installed: true,
|
|
@@ -10778,7 +11502,7 @@ function idiv(a, b) {
|
|
|
10778
11502
|
}
|
|
10779
11503
|
function computeBaseHullmass(stats) {
|
|
10780
11504
|
const density = decodeStat(stats, 1);
|
|
10781
|
-
return
|
|
11505
|
+
return 100000 - 75 * density;
|
|
10782
11506
|
}
|
|
10783
11507
|
function computeBaseCapacityShip(stats) {
|
|
10784
11508
|
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
@@ -10790,22 +11514,28 @@ function computeBaseCapacityWarehouse(stats) {
|
|
|
10790
11514
|
}
|
|
10791
11515
|
const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
|
|
10792
11516
|
const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
|
|
10793
|
-
const computeGeneratorCap = (
|
|
10794
|
-
const computeGeneratorRech = (
|
|
11517
|
+
const computeGeneratorCap = (com) => 300 + idiv(com, 6);
|
|
11518
|
+
const computeGeneratorRech = (fin) => 1 + idiv(fin * 3, 1000);
|
|
10795
11519
|
const computeGathererYield = (str) => 200 + str;
|
|
10796
11520
|
const computeGathererDrain = (con) => Math.max(250, 1250 - idiv(con * 25, 20));
|
|
10797
|
-
const computeGathererDepth = (tol) =>
|
|
11521
|
+
const computeGathererDepth = (tol, tier) => gathererDepthForTier(tol, tier);
|
|
10798
11522
|
const computeGathererSpeed = (ref) => 100 + idiv(ref * 4, 5);
|
|
10799
|
-
const computeLoaderMass = (
|
|
11523
|
+
const computeLoaderMass = (ins) => Math.max(200, 2000 - ins * 2);
|
|
10800
11524
|
const computeLoaderThrust = (pla) => 1 + idiv(pla, 500);
|
|
10801
11525
|
const computeCrafterSpeed = (rea) => 100 + idiv(rea * 4, 5);
|
|
10802
|
-
const computeCrafterDrain = (
|
|
11526
|
+
const computeCrafterDrain = (fin) => Math.max(5, 30 - idiv(fin, 33));
|
|
11527
|
+
const computeHaulerCapacity = (fin) => Math.max(1, 1 + idiv(fin, 400));
|
|
11528
|
+
const computeHaulerEfficiency = (con) => 2000 + con * 6;
|
|
11529
|
+
const computeHaulerDrain = (com) => Math.max(3, 15 - idiv(com, 80));
|
|
11530
|
+
const computeWarpRange = (stat) => 100 + stat * 3;
|
|
10803
11531
|
function entityDisplayName(itemId) {
|
|
10804
11532
|
switch (itemId) {
|
|
10805
11533
|
case ITEM_SHIP_T1_PACKED:
|
|
10806
11534
|
return 'Ship';
|
|
10807
11535
|
case ITEM_WAREHOUSE_T1_PACKED:
|
|
10808
11536
|
return 'Warehouse';
|
|
11537
|
+
case ITEM_EXTRACTOR_T1_PACKED:
|
|
11538
|
+
return 'Extractor';
|
|
10809
11539
|
case ITEM_CONTAINER_T1_PACKED:
|
|
10810
11540
|
return 'Container';
|
|
10811
11541
|
case ITEM_CONTAINER_T2_PACKED:
|
|
@@ -10828,6 +11558,10 @@ function moduleDisplayName(itemId) {
|
|
|
10828
11558
|
return 'Crafter';
|
|
10829
11559
|
case ITEM_STORAGE_T1:
|
|
10830
11560
|
return 'Storage';
|
|
11561
|
+
case ITEM_HAULER_T1:
|
|
11562
|
+
return 'Hauler';
|
|
11563
|
+
case ITEM_WARP_T1:
|
|
11564
|
+
return 'Warp';
|
|
10831
11565
|
default:
|
|
10832
11566
|
return 'Module';
|
|
10833
11567
|
}
|
|
@@ -10858,7 +11592,8 @@ function formatModuleLine(slot, itemId, stats) {
|
|
|
10858
11592
|
const tol = decodeStat(stats, 1);
|
|
10859
11593
|
const con = decodeStat(stats, 3);
|
|
10860
11594
|
const ref = decodeStat(stats, 4);
|
|
10861
|
-
|
|
11595
|
+
const tier = getItem(itemId).tier;
|
|
11596
|
+
out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol, tier)} Speed ${computeGathererSpeed(ref)} Drain ${computeGathererDrain(con)}`;
|
|
10862
11597
|
break;
|
|
10863
11598
|
}
|
|
10864
11599
|
case MODULE_LOADER: {
|
|
@@ -10882,6 +11617,18 @@ function formatModuleLine(slot, itemId, stats) {
|
|
|
10882
11617
|
out += ` +${pct}% capacity`;
|
|
10883
11618
|
break;
|
|
10884
11619
|
}
|
|
11620
|
+
case MODULE_HAULER: {
|
|
11621
|
+
const fin = decodeStat(stats, 0);
|
|
11622
|
+
const con = decodeStat(stats, 1);
|
|
11623
|
+
const com = decodeStat(stats, 2);
|
|
11624
|
+
out += ` Capacity ${computeHaulerCapacity(fin)} Efficiency ${computeHaulerEfficiency(con)} Drain ${computeHaulerDrain(com)}`;
|
|
11625
|
+
break;
|
|
11626
|
+
}
|
|
11627
|
+
case MODULE_WARP: {
|
|
11628
|
+
const stat = decodeStat(stats, 0);
|
|
11629
|
+
out += ` Range ${computeWarpRange(stat)}`;
|
|
11630
|
+
break;
|
|
11631
|
+
}
|
|
10885
11632
|
}
|
|
10886
11633
|
return out;
|
|
10887
11634
|
}
|
|
@@ -10894,6 +11641,9 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
|
|
|
10894
11641
|
else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
|
|
10895
11642
|
baseCapacity = computeBaseCapacityWarehouse(hullStats);
|
|
10896
11643
|
}
|
|
11644
|
+
else if (itemId === ITEM_EXTRACTOR_T1_PACKED) {
|
|
11645
|
+
baseCapacity = computeBaseCapacityShip(hullStats);
|
|
11646
|
+
}
|
|
10897
11647
|
let out = entityDisplayName(itemId);
|
|
10898
11648
|
out += ` - Hull ${hullMass} mass`;
|
|
10899
11649
|
if (baseCapacity > 0) {
|
|
@@ -10907,6 +11657,115 @@ function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
|
|
|
10907
11657
|
return out;
|
|
10908
11658
|
}
|
|
10909
11659
|
|
|
11660
|
+
function deserializeAtomicData(data, schema) {
|
|
11661
|
+
let rawData;
|
|
11662
|
+
if (data && typeof data === 'object' && 'immutable_serialized_data' in data) {
|
|
11663
|
+
rawData = data
|
|
11664
|
+
.immutable_serialized_data;
|
|
11665
|
+
}
|
|
11666
|
+
else {
|
|
11667
|
+
rawData = data;
|
|
11668
|
+
}
|
|
11669
|
+
let bytes;
|
|
11670
|
+
if (typeof rawData === 'string') {
|
|
11671
|
+
const hex = rawData;
|
|
11672
|
+
bytes = new Uint8Array(hex.length / 2);
|
|
11673
|
+
for (let i = 0; i < hex.length; i += 2) {
|
|
11674
|
+
bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);
|
|
11675
|
+
}
|
|
11676
|
+
}
|
|
11677
|
+
else if (Array.isArray(rawData)) {
|
|
11678
|
+
bytes = new Uint8Array(rawData);
|
|
11679
|
+
}
|
|
11680
|
+
else {
|
|
11681
|
+
bytes = rawData;
|
|
11682
|
+
}
|
|
11683
|
+
let offset = 0;
|
|
11684
|
+
function readVarint() {
|
|
11685
|
+
let result = 0;
|
|
11686
|
+
let multiplier = 1;
|
|
11687
|
+
while (bytes[offset] >= 128) {
|
|
11688
|
+
result += (bytes[offset] - 128) * multiplier;
|
|
11689
|
+
offset++;
|
|
11690
|
+
multiplier *= 128;
|
|
11691
|
+
}
|
|
11692
|
+
result += bytes[offset] * multiplier;
|
|
11693
|
+
offset++;
|
|
11694
|
+
return result;
|
|
11695
|
+
}
|
|
11696
|
+
function readVarint64() {
|
|
11697
|
+
let result = 0n;
|
|
11698
|
+
let multiplier = 1n;
|
|
11699
|
+
while (bytes[offset] >= 128) {
|
|
11700
|
+
result += BigInt(bytes[offset] - 128) * multiplier;
|
|
11701
|
+
offset++;
|
|
11702
|
+
multiplier *= 128n;
|
|
11703
|
+
}
|
|
11704
|
+
result += BigInt(bytes[offset]) * multiplier;
|
|
11705
|
+
offset++;
|
|
11706
|
+
return result;
|
|
11707
|
+
}
|
|
11708
|
+
function readZigzagInt64() {
|
|
11709
|
+
const unsigned = readVarint64();
|
|
11710
|
+
if (unsigned % 2n === 0n) {
|
|
11711
|
+
return unsigned / 2n;
|
|
11712
|
+
}
|
|
11713
|
+
else {
|
|
11714
|
+
return -(unsigned / 2n) - 1n;
|
|
11715
|
+
}
|
|
11716
|
+
}
|
|
11717
|
+
function readString() {
|
|
11718
|
+
const length = readVarint();
|
|
11719
|
+
const str = new TextDecoder().decode(bytes.slice(offset, offset + length));
|
|
11720
|
+
offset += length;
|
|
11721
|
+
return str;
|
|
11722
|
+
}
|
|
11723
|
+
const RESERVED = 4;
|
|
11724
|
+
const result = {};
|
|
11725
|
+
while (offset < bytes.length) {
|
|
11726
|
+
const fieldIndex = readVarint() - RESERVED;
|
|
11727
|
+
const field = schema[fieldIndex];
|
|
11728
|
+
if (!field)
|
|
11729
|
+
break;
|
|
11730
|
+
switch (field.type) {
|
|
11731
|
+
case 'uint16':
|
|
11732
|
+
result[field.name] = readVarint();
|
|
11733
|
+
break;
|
|
11734
|
+
case 'uint32':
|
|
11735
|
+
result[field.name] = readVarint();
|
|
11736
|
+
break;
|
|
11737
|
+
case 'uint64':
|
|
11738
|
+
result[field.name] = readVarint64();
|
|
11739
|
+
break;
|
|
11740
|
+
case 'int64':
|
|
11741
|
+
result[field.name] = readZigzagInt64();
|
|
11742
|
+
break;
|
|
11743
|
+
case 'string':
|
|
11744
|
+
result[field.name] = readString();
|
|
11745
|
+
break;
|
|
11746
|
+
case 'uint16[]': {
|
|
11747
|
+
const len = readVarint();
|
|
11748
|
+
const arr = [];
|
|
11749
|
+
for (let i = 0; i < len; i++)
|
|
11750
|
+
arr.push(readVarint());
|
|
11751
|
+
result[field.name] = arr;
|
|
11752
|
+
break;
|
|
11753
|
+
}
|
|
11754
|
+
case 'uint64[]': {
|
|
11755
|
+
const len = readVarint();
|
|
11756
|
+
const arr = [];
|
|
11757
|
+
for (let i = 0; i < len; i++)
|
|
11758
|
+
arr.push(readVarint64());
|
|
11759
|
+
result[field.name] = arr;
|
|
11760
|
+
break;
|
|
11761
|
+
}
|
|
11762
|
+
default:
|
|
11763
|
+
throw new Error(`Unknown type: ${field.type}`);
|
|
11764
|
+
}
|
|
11765
|
+
}
|
|
11766
|
+
return result;
|
|
11767
|
+
}
|
|
11768
|
+
|
|
10910
11769
|
var index = /*#__PURE__*/Object.freeze({
|
|
10911
11770
|
__proto__: null,
|
|
10912
11771
|
readCommonBase: readCommonBase,
|
|
@@ -10931,10 +11790,15 @@ var index = /*#__PURE__*/Object.freeze({
|
|
|
10931
11790
|
computeLoaderThrust: computeLoaderThrust,
|
|
10932
11791
|
computeCrafterSpeed: computeCrafterSpeed,
|
|
10933
11792
|
computeCrafterDrain: computeCrafterDrain,
|
|
11793
|
+
computeHaulerCapacity: computeHaulerCapacity,
|
|
11794
|
+
computeHaulerEfficiency: computeHaulerEfficiency,
|
|
11795
|
+
computeHaulerDrain: computeHaulerDrain,
|
|
11796
|
+
computeWarpRange: computeWarpRange,
|
|
10934
11797
|
entityDisplayName: entityDisplayName,
|
|
10935
11798
|
moduleDisplayName: moduleDisplayName,
|
|
10936
11799
|
formatModuleLine: formatModuleLine,
|
|
10937
|
-
buildEntityDescription: buildEntityDescription
|
|
11800
|
+
buildEntityDescription: buildEntityDescription,
|
|
11801
|
+
deserializeAtomicData: deserializeAtomicData
|
|
10938
11802
|
});
|
|
10939
11803
|
|
|
10940
11804
|
function formatMass(kg) {
|
|
@@ -10971,5 +11835,5 @@ function describeItem(resolved, opts) {
|
|
|
10971
11835
|
return `${tier} ${resolved.name} · ${mass}`;
|
|
10972
11836
|
}
|
|
10973
11837
|
|
|
10974
|
-
export { ActionsManager, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CANCEL_PAIRED_HAS_PENDING, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_CAPACITY_EXCEEDED, CONTAINER_NOT_FOUND, CONTAINER_Z, CRAFT_ENERGY_DIVISOR, CRAFT_EXCEEDS_ENERGY_CAPACITY, CRAFT_NOT_ENOUGH_ENERGY, Container, Coordinates, DEPLOY_ENTITY_HAS_SCHEDULE, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, DESTINATION_CAPACITY_EXCEEDED, ENTITY_CAPACITY_EXCEEDED, ENTITY_NO_CRAFTER, 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, GATHER_EXCEEDS_ENERGY_CAPACITY, GATHER_NOT_ENOUGH_ENERGY, GROUP_DUPLICATE_ENTITY, GROUP_EMPTY, GROUP_ENTITY_NOT_MOVABLE, GROUP_HAUL_CAPACITY_EXCEEDED, GROUP_NOT_FOUND, GROUP_NOT_SAME_LOCATION, GROUP_NOT_SAME_OWNER, GROUP_NO_THRUST, GameState, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_BIOMASS_T1, ITEM_BIOMASS_T10, ITEM_BIOMASS_T2, ITEM_BIOMASS_T3, ITEM_BIOMASS_T4, ITEM_BIOMASS_T5, ITEM_BIOMASS_T6, ITEM_BIOMASS_T7, ITEM_BIOMASS_T8, ITEM_BIOMASS_T9, ITEM_CARGO_ARM, ITEM_CARGO_LINING, ITEM_CARGO_LINING_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_CRAFTER_T1, ITEM_CRYSTAL_T1, ITEM_CRYSTAL_T10, ITEM_CRYSTAL_T2, ITEM_CRYSTAL_T3, ITEM_CRYSTAL_T4, ITEM_CRYSTAL_T5, ITEM_CRYSTAL_T6, ITEM_CRYSTAL_T7, ITEM_CRYSTAL_T8, ITEM_CRYSTAL_T9, ITEM_DOES_NOT_EXIST, ITEM_ENGINE_T1, ITEM_FOCUSING_ARRAY, ITEM_GAS_T1, ITEM_GAS_T10, ITEM_GAS_T2, ITEM_GAS_T3, ITEM_GAS_T4, ITEM_GAS_T5, ITEM_GAS_T6, ITEM_GAS_T7, ITEM_GAS_T8, ITEM_GAS_T9, ITEM_GATHERER_T1, ITEM_GENERATOR_T1, ITEM_HAULER_T1, ITEM_HULL_PLATES, ITEM_HULL_PLATES_T2, ITEM_LOADER_T1, ITEM_MATTER_CONDUIT, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_NOT_DEPLOYABLE, ITEM_NOT_PACKED_ENTITY, ITEM_ORE_T1, ITEM_ORE_T10, ITEM_ORE_T2, ITEM_ORE_T3, ITEM_ORE_T4, ITEM_ORE_T5, ITEM_ORE_T6, ITEM_ORE_T7, ITEM_ORE_T8, ITEM_ORE_T9, ITEM_POWER_CELL, ITEM_REACTION_CHAMBER, ITEM_REGOLITH_T1, ITEM_REGOLITH_T10, ITEM_REGOLITH_T2, ITEM_REGOLITH_T3, ITEM_REGOLITH_T4, ITEM_REGOLITH_T5, ITEM_REGOLITH_T6, ITEM_REGOLITH_T7, ITEM_REGOLITH_T8, ITEM_REGOLITH_T9, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_SURVEY_PROBE, ITEM_THRUSTER_CORE, ITEM_TOOL_BIT, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, InventoryAccessor, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, MODULE_ANY, MODULE_CARGO_NOT_FOUND, MODULE_CRAFTER, MODULE_ENGINE, MODULE_ENTITY_BUSY, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_NOT_MODULE, MODULE_SLOT_EMPTY, MODULE_SLOT_INVALID, MODULE_SLOT_OCCUPIED, MODULE_STORAGE, MODULE_TYPE_MISMATCH, 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, PLAYER_NOT_JOINED, PRECISION$1 as PRECISION, platform as PlatformContract, Types$1 as PlatformTypes, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, RECIPE_NOT_FOUND, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, RESOLVE_COUNT_EXCEEDS_COMPLETED, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CAPACITY_EXCEEDED, 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, STARTER_ALREADY_CLAIMED, ScheduleAccessor, server as ServerContract, Types as ServerTypes, Ship, Shipload, SubscriptionsManager, TIER_ADJECTIVES, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND,
|
|
11838
|
+
export { ActionsManager, BASE_ORBITAL_MASS, BLEND_INPUTS_MUST_MATCH, BLEND_REQUIRES_MULTIPLE, BLEND_STAT_LESS_NOT_SUPPORTED, CANCEL_CONTAINS_GROUPED_TASK, CANCEL_PAIRED_HAS_PENDING, CATEGORY_LABELS, COMMIT_ALREADY_SET, COMMIT_CANNOT_MATCH, COMMIT_NOT_SET, COMPANY_NOT_FOUND, CONTAINER_CAPACITY_EXCEEDED, CONTAINER_NOT_FOUND, CONTAINER_Z, CRAFT_ENERGY_DIVISOR, CRAFT_EXCEEDS_ENERGY_CAPACITY, CRAFT_NOT_ENOUGH_ENERGY, Container, Coordinates, DEPLOY_ENTITY_HAS_SCHEDULE, DEPTH_THRESHOLD_T1, DEPTH_THRESHOLD_T2, DEPTH_THRESHOLD_T3, DEPTH_THRESHOLD_T4, DEPTH_THRESHOLD_T5, DESTINATION_CAPACITY_EXCEEDED, ENTITY_CAPACITY_EXCEEDED, ENTITY_CONTAINER, ENTITY_EXTRACTOR, ENTITY_NO_CRAFTER, ENTITY_SHIP, ENTITY_WAREHOUSE, EPOCH_NON_ZERO, EPOCH_NOT_READY, ERROR_SYSTEM_ALREADY_INITIALIZED, ERROR_SYSTEM_DISABLED, ERROR_SYSTEM_NOT_INITIALIZED, EntitiesManager, EntityClass, EntityInventory, EntityType, EpochsManager, Extractor, GAME_NOT_FOUND, GAME_SEED_NOT_SET, GATHERER_DEPTH_MAX_TIER, GATHERER_DEPTH_TABLE, GATHER_EXCEEDS_ENERGY_CAPACITY, GATHER_NOT_ENOUGH_ENERGY, GROUP_DUPLICATE_ENTITY, GROUP_EMPTY, GROUP_ENTITY_NOT_MOVABLE, GROUP_HAUL_CAPACITY_EXCEEDED, GROUP_NOT_FOUND, GROUP_NOT_SAME_LOCATION, GROUP_NOT_SAME_OWNER, GROUP_NO_THRUST, GameState, INSUFFICIENT_BALANCE, INSUFFICIENT_ITEM_QUANTITY, INSUFFICIENT_ITEM_SUPPLY, INVALID_AMOUNT, ITEM_BIOMASS_T1, ITEM_BIOMASS_T10, ITEM_BIOMASS_T2, ITEM_BIOMASS_T3, ITEM_BIOMASS_T4, ITEM_BIOMASS_T5, ITEM_BIOMASS_T6, ITEM_BIOMASS_T7, ITEM_BIOMASS_T8, ITEM_BIOMASS_T9, ITEM_CARGO_ARM, ITEM_CARGO_LINING, ITEM_CARGO_LINING_T2, ITEM_CONTAINER_T1_PACKED, ITEM_CONTAINER_T2_PACKED, ITEM_CRAFTER_T1, ITEM_CRYSTAL_T1, ITEM_CRYSTAL_T10, ITEM_CRYSTAL_T2, ITEM_CRYSTAL_T3, ITEM_CRYSTAL_T4, ITEM_CRYSTAL_T5, ITEM_CRYSTAL_T6, ITEM_CRYSTAL_T7, ITEM_CRYSTAL_T8, ITEM_CRYSTAL_T9, ITEM_DOES_NOT_EXIST, ITEM_ENGINE_T1, ITEM_EXTRACTOR_T1_PACKED, ITEM_FOCUSING_ARRAY, ITEM_GAS_T1, ITEM_GAS_T10, ITEM_GAS_T2, ITEM_GAS_T3, ITEM_GAS_T4, ITEM_GAS_T5, ITEM_GAS_T6, ITEM_GAS_T7, ITEM_GAS_T8, ITEM_GAS_T9, ITEM_GATHERER_T1, ITEM_GENERATOR_T1, ITEM_HAULER_T1, ITEM_HULL_PLATES, ITEM_HULL_PLATES_T2, ITEM_LOADER_T1, ITEM_MATTER_CONDUIT, ITEM_NOT_AVAILABLE_AT_LOCATION, ITEM_NOT_DEPLOYABLE, ITEM_NOT_PACKED_ENTITY, ITEM_ORE_T1, ITEM_ORE_T10, ITEM_ORE_T2, ITEM_ORE_T3, ITEM_ORE_T4, ITEM_ORE_T5, ITEM_ORE_T6, ITEM_ORE_T7, ITEM_ORE_T8, ITEM_ORE_T9, ITEM_POWER_CELL, ITEM_REACTION_CHAMBER, ITEM_REGOLITH_T1, ITEM_REGOLITH_T10, ITEM_REGOLITH_T2, ITEM_REGOLITH_T3, ITEM_REGOLITH_T4, ITEM_REGOLITH_T5, ITEM_REGOLITH_T6, ITEM_REGOLITH_T7, ITEM_REGOLITH_T8, ITEM_REGOLITH_T9, ITEM_SHIP_T1_PACKED, ITEM_STORAGE_T1, ITEM_SURVEY_PROBE, ITEM_THRUSTER_CORE, ITEM_TOOL_BIT, ITEM_TYPE_COMPONENT, ITEM_TYPE_ENTITY, ITEM_TYPE_MODULE, ITEM_TYPE_RESOURCE, ITEM_WAREHOUSE_T1_PACKED, ITEM_WARP_T1, InventoryAccessor, LOCATION_MAX_DEPTH, LOCATION_MIN_DEPTH, Location, LocationType, LocationsManager, MAX_ORBITAL_ALTITUDE, MIN_ORBITAL_ALTITUDE, MIN_TRANSFER_DISTANCE, MODULE_ANY, MODULE_CARGO_NOT_FOUND, MODULE_CRAFTER, MODULE_ENGINE, MODULE_ENTITY_BUSY, MODULE_GATHERER, MODULE_GENERATOR, MODULE_HAULER, MODULE_LAUNCHER, MODULE_LOADER, MODULE_NOT_MODULE, MODULE_SLOT_EMPTY, MODULE_SLOT_INVALID, MODULE_SLOT_OCCUPIED, MODULE_STORAGE, MODULE_TYPE_MISMATCH, MODULE_WARP, index as NFT, NO_SCHEDULE, PLANETARY_STRUCTURE_Z, 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, PLAYER_NOT_JOINED, PRECISION$1 as PRECISION, platform as PlatformContract, Types$1 as PlatformTypes, Player, PlayersManager, RECIPE_INPUTS_EXCESS, RECIPE_INPUTS_INSUFFICIENT, RECIPE_INPUTS_INVALID, RECIPE_INPUTS_MIXED, RECIPE_NOT_FOUND, REQUIRES_MORE_THAN_ONE, REQUIRES_POSITIVE_VALUE, RESERVE_TIERS, RESOLVE_COUNT_EXCEEDS_COMPLETED, SHIP_ALREADY_THERE, SHIP_ALREADY_TRAVELING, SHIP_CANNOT_BUY_TRAVELING, SHIP_CANNOT_CANCEL_TASK, SHIP_CANNOT_UPDATE_TRAVELING, SHIP_CAPACITY_EXCEEDED, 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, SLOT_FORMULAS, STARTER_ALREADY_CLAIMED, ScheduleAccessor, server as ServerContract, Types as ServerTypes, Ship, Shipload, SubscriptionsManager, TIER_ADJECTIVES, TIER_ROLL_MAX, TRAVEL_MAX_DURATION, TaskCancelable, TaskType, WAREHOUSE_ALREADY_AT_LOCATION, WAREHOUSE_CAPACITY_EXCEEDED, WAREHOUSE_NOT_FOUND, WARP_HAS_CARGO, WARP_HAS_SCHEDULE, WARP_NOT_FULL_ENERGY, WARP_NO_CAPABILITY, WARP_OUT_OF_RANGE, Warehouse, WebSocketConnection, availableCapacity$1 as availableCapacity, availableCapacityFromMass, blendCargoStacks, blendComponentStacks, blendCrossGroup, blendStacks, buildEntityDescription, calcCargoItemMass, calcCargoMass, calcEnergyUsage, calcLoadDuration, calcStacksMass, calc_acceleration, calc_craft_duration, calc_craft_energy, calc_energyusage, calc_flighttime, calc_gather_duration, calc_gather_energy, 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, capsHasGatherer, capsHasHauler, capsHasLoaders, capsHasMass, capsHasMovement, capsHasStorage, cargoItem, cargoItemToStack, cargoRef, cargoUtils, categoryColors, categoryFromIndex, categoryIconShapes, categoryIcons, categoryLabel, categoryLabelFromIndex, componentIcon, computeBaseCapacityShip, computeBaseCapacityWarehouse, computeBaseHullmass, computeComponentStats, computeContainerCapabilities, computeContainerT2Capabilities, computeCraftedOutputStats, computeCrafterCapabilities, computeCrafterDrain, computeCrafterSpeed, computeEngineCapabilities, computeEngineDrain, computeEngineThrust, computeEntityStats, computeExtractorCapabilities, computeGathererCapabilities, computeGathererDepth, computeGathererDrain, computeGathererSpeed, computeGathererYield, computeGeneratorCap, computeGeneratorCapabilities, computeGeneratorRech, computeHaulPenalty, computeHaulerCapabilities, computeHaulerCapacity, computeHaulerDrain$1 as computeHaulerDrain, computeHaulerEfficiency, computeInputMass, computeLoaderCapabilities, computeLoaderMass, computeLoaderThrust, computeShipCapabilities, computeShipHullCapabilities, computeStorageCapabilities, computeWarehouseCapabilities, computeWarehouseHullCapabilities, computeWarpRange, containerTraits, coordsToLocationId, createInventoryAccessor, createProjectedEntity, createScheduleAccessor, decodeCraftedItemStats, decodeStat, decodeStats, Shipload as default, deriveLocation, deriveLocationSize, deriveLocationStatic, deriveResourceStats, deriveStatMappings, deriveStrata, deriveStratum, describeItem, describeModule, describeModuleForItem, describeModuleForSlot, deserializeAsset, deserializeAtomicData, deserializeComponent, deserializeEntity, deserializeModule, deserializeResource, displayName, distanceBetweenCoordinates, distanceBetweenPoints, easeFlightProgress, encodeGatheredCargoStats, encodeStats, energyPercent, entityDisplayName, estimateDealTravelTime, estimateTravelTime, extractorTraits, findItemByCategoryAndTier, findNearbyPlanets, flightSpeedFactor, formatMass, formatMassDelta, formatModuleLine, formatTier, gathererDepthForTier, getCapabilityAttributes, getCategoryInfo, getComponents, getCurrentEpoch, getDepthThreshold, getDestinationLocation, getEligibleResources, getEntityClass, getEntityItems, getEntityLayout, getEntityTraits, getEpochInfo, getFlightOrigin, getInterpolatedPosition, getItem, getItems, getLocationCandidates, getLocationProfile, getLocationType, getLocationTypeName, getModuleCapabilityType, getModules, getPackedEntityType, getPlanetSubtype, getPlanetSubtypes, getPositionAt, getRecipe, getResourceTier, getResourceWeight, getResources, getStatDefinitions, getStatMappings, getStatMappingsForCapability, getStatMappingsForStat, getStatName, getSystemName, hasEnergy, hasEnergyForDistance$1 as hasEnergyForDistance, hasGatherer, hasLoaders, hasMass, hasSchedule, hasSpace$1 as hasSpace, hasSpaceForMass, hasStorage, hasSystem, hash, hash512, interpolateFlightPosition, isContainer, isCraftedItem, isExtractor, isFull$1 as isFull, isFullFromMass, isGatherableLocation, isInvertedAttribute, isLocationBuildable, isModuleItem, isRelatedItem, isShip, isSubscriptionsDebugEnabled, isWarehouse, itemAbbreviations, itemCategory, itemIds, itemOffset, itemTier, itemTypeCode, lerp$1 as lerp, makeContainer, makeExtractor, makeShip, makeWarehouse, mapEntity, maxTravelDistance, mergeStacks, moduleAccepts, moduleDisplayName, moduleIcon, moduleSlotTypeToCode, needsRecharge, parseWireEntity, projectEntity, projectEntityAt, projectFromCurrentState, projectFromCurrentStateAt, readCommonBase, removeFromStacks, renderDescription, resolveItem, resolveItemCategory, resolveStats, rollTier, rollWithinTier, rotation, schedule, setSubscriptionsDebug, shipTraits, stackKey, stackToCargoItem, stacksEqual, taskCargoChanges, tierAdjective, tierColors, toLocation, typeLabel, validateSchedule, warehouseTraits };
|
|
10975
11839
|
//# sourceMappingURL=shipload.m.js.map
|