@shipload/sdk 2.0.0-rc12 → 2.0.0-rc14
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 +137 -57
- package/lib/shipload.js +636 -335
- package/lib/shipload.js.map +1 -1
- package/lib/shipload.m.js +626 -334
- package/lib/shipload.m.js.map +1 -1
- package/package.json +1 -1
- package/src/capabilities/modules.ts +3 -3
- package/src/capabilities/storage.ts +6 -9
- package/src/contracts/server.ts +37 -34
- package/src/data/colors.ts +19 -1
- package/src/data/recipes.ts +3 -3
- package/src/derivation/crafting.ts +46 -32
- package/src/derivation/stratum.ts +12 -0
- package/src/entities/container.ts +1 -0
- package/src/entities/makers.ts +126 -11
- package/src/entities/ship-deploy.ts +9 -14
- package/src/entities/ship.ts +16 -4
- package/src/entities/warehouse.ts +36 -1
- package/src/index-module.ts +22 -5
- package/src/managers/actions.ts +48 -8
- package/src/nft/description.ts +31 -30
- package/src/nft/deserializers.ts +8 -8
- package/src/resolution/describe-module.ts +165 -0
- package/src/resolution/resolve-item.ts +60 -37
- package/src/scheduling/projection.ts +17 -4
- package/src/types/capabilities.ts +5 -0
package/lib/shipload.js
CHANGED
|
@@ -213,7 +213,7 @@ var platform = /*#__PURE__*/Object.freeze({
|
|
|
213
213
|
Contract: Contract$1
|
|
214
214
|
});
|
|
215
215
|
|
|
216
|
-
const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDh0CWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIEc2VlZAd1aW50NjQ/B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BHNlZWQGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10KY2FyZ29fc2VlZAACB2l0ZW1faWQGdWludDE2BHNlZWQGdWludDY0CWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYEc2VlZAZ1aW50NjQLZW50aXR5X25hbWUGc3RyaW5nCmRlc2NlbnRpdHkABAdpdGVtX2lkBnVpbnQxNglodWxsX3NlZWQGdWludDY0DG1vZHVsZV9pdGVtcwh1aW50MTZbXQxtb2R1bGVfc2VlZHMIdWludDY0W10GZW5hYmxlAAEHZW5hYmxlZARib29sDGVuZXJneV9zdGF0cwACCGNhcGFjaXR5BnVpbnQxNghyZWNoYXJnZQZ1aW50MTYUZW50aXR5X2N1cnJlbnRfc3RhdGUAAgtjb29yZGluYXRlcwtjb29yZGluYXRlcwZlbmVyZ3kGdWludDE2D2VudGl0eV9kZWZhdWx0cwAFEndhcmVob3VzZV9jYXBhY2l0eQZ1aW50MzILd2FyZWhvdXNlX3oGdWludDE2EmNvbnRhaW5lcl9odWxsbWFzcwZ1aW50MzISY29udGFpbmVyX2NhcGFjaXR5BnVpbnQzMgtjb250YWluZXJfegZ1aW50MTYLZW50aXR5X2luZm8AGAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCWNhcmdvbWFzcwZ1aW50MzIFY2FyZ28MY2FyZ29faXRlbVtdB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwZlbmVyZ3kHdWludDE2PwhodWxsbWFzcwd1aW50MzI/B2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/CGNhcGFjaXR5B3VpbnQzMj8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwdpc19pZGxlBGJvb2wMY3VycmVudF90YXNrBXRhc2s/FGN1cnJlbnRfdGFza19lbGFwc2VkBnVpbnQzMhZjdXJyZW50X3Rhc2tfcmVtYWluaW5nBnVpbnQzMg1wZW5kaW5nX3Rhc2tzBnRhc2tbXQdpZGxlX2F0C3RpbWVfcG9pbnQ/CHNjaGVkdWxlCXNjaGVkdWxlPwplbnRpdHlfcmVmAAILZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DmVudGl0eV9zdW1tYXJ5AAgEdHlwZQRuYW1lAmlkBnVpbnQ2NAVvd25lcgRuYW1lC2VudGl0eV9uYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcwdpc19pZGxlBGJvb2wOcmVzb2x2ZWRfY291bnQGdWludDMyDXBlbmRpbmdfY291bnQGdWludDMyEGVudGl0eV90YXNrX2luZm8ABAllbnRpdHlfaWQGdWludDY0C2VudGl0eV90eXBlBG5hbWUKdGFza19jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkCnRpbWVfcG9pbnQPZW50aXR5Z3JvdXBfcm93AAICaWQGdWludDY0DHBhcnRpY2lwYW50cwxlbnRpdHlfcmVmW10LZ2FtZV9jb25maWcAAwd2ZXJzaW9uBnVpbnQzMghkZWZhdWx0cw9lbnRpdHlfZGVmYXVsdHMFaXRlbXMKaXRlbV9kZWZbXQZnYXRoZXIABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAdzdHJhdHVtBnVpbnQxNghxdWFudGl0eQZ1aW50MzIOZ2F0aGVyZXJfc3RhdHMABAV5aWVsZAZ1aW50MTYFZHJhaW4GdWludDE2BWRlcHRoBnVpbnQxNgVzcGVlZAZ1aW50MTYJZ2V0Y29uZmlnAAALZ2V0ZW50aXRpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/CWdldGVudGl0eQACC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAtnZXRpdGVtZGF0YQAACGdldGl0ZW1zAAALZ2V0bG9jYXRpb24AAgF4BWludDY0AXkFaW50NjQKZ2V0bG9jZGF0YQACAXgFaW50NjQBeQVpbnQ2NApnZXRtb2R1bGVzAAAJZ2V0bmVhcmJ5AAMLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CHJlY2hhcmdlBGJvb2wKZ2V0bmZ0aW5mbwAACWdldHBsYXllcgABB2FjY291bnQEbmFtZQlnZXRyZWNpcGUAAQ5vdXRwdXRfaXRlbV9pZAZ1aW50MTYKZ2V0cmVjaXBlcwACC2xvd2VyX2JvdW5kBnVpbnQxNgVsaW1pdAV1aW50OAxnZXRyZXNvdXJjZXMAAApnZXRzdHJhdHVtAAMBeAVpbnQ2NAF5BWludDY0B3N0cmF0dW0GdWludDE2DGdldHN1bW1hcmllcwACBW93bmVyBG5hbWULZW50aXR5X3R5cGUFbmFtZT8LZ3JvdXB0cmF2ZWwABAhlbnRpdGllcwxlbnRpdHlfcmVmW10BeAVpbnQ2NAF5BWludDY0CHJlY2hhcmdlBGJvb2wEaGFzaAABBXZhbHVlBnN0cmluZwdoYXNoNTEyAAEFdmFsdWUGc3RyaW5nDGhhdWxlcl9zdGF0cwADCGNhcGFjaXR5BXVpbnQ4CmVmZmljaWVuY3kGdWludDE2BWRyYWluBnVpbnQxNgRpbml0AAEEc2VlZAtjaGVja3N1bTI1NghpdGVtX2RlZgAFAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgR0eXBlBXVpbnQ4B3N1YnR5cGUFdWludDgEdGllcgV1aW50OA9pdGVtZGF0YV9yZXN1bHQAAgVpdGVtcwppdGVtX2RlZltdB3JlY2lwZXMOcmVjaXBlc19yZXN1bHQKaXRlbXNfaW5mbwABBWl0ZW1zCml0ZW1fZGVmW10Eam9pbgABB2FjY291bnQEbmFtZQxsb2FkZXJfc3RhdHMAAwRtYXNzBnVpbnQzMgZ0aHJ1c3QGdWludDE2CHF1YW50aXR5BXVpbnQ4EGxvY2F0aW9uX2Rlcml2ZWQAAwxzdGF0aWNfcHJvcHMPbG9jYXRpb25fc3RhdGljC2Vwb2NoX3Byb3BzDmxvY2F0aW9uX2Vwb2NoBHNpemUGdWludDE2DmxvY2F0aW9uX2Vwb2NoAAMGYWN0aXZlBGJvb2wFc2VlZDAFdWludDgFc2VlZDEFdWludDgNbG9jYXRpb25faW5mbwACBmNvb3Jkcwtjb29yZGluYXRlcwlpc19zeXN0ZW0EYm9vbAxsb2NhdGlvbl9yb3cABgJpZAZ1aW50NjQFb3duZXIEbmFtZQtjb29yZGluYXRlcwtjb29yZGluYXRlcwljYXJnb21hc3MGdWludDMyBWNhcmdvDGNhcmdvX2l0ZW1bXQhzY2hlZHVsZQlzY2hlZHVsZT8PbG9jYXRpb25fc3RhdGljAAUGY29vcmRzC2Nvb3JkaW5hdGVzBHR5cGUNbG9jYXRpb25fdHlwZQdzdWJ0eXBlBXVpbnQ4BXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DG1vZHVsZV9lbnRyeQACBHR5cGUFdWludDgJaW5zdGFsbGVkC2NhcmdvX3NlZWQ/C21vZHVsZV9pbmZvAAQCaWQGdWludDE2BG1hc3MGdWludDMyC21vZHVsZV90eXBlBXVpbnQ4BHRpZXIFdWludDgObW9kdWxlc19yZXN1bHQAAQdtb2R1bGVzDW1vZHVsZV9pbmZvW10ObW92ZW1lbnRfc3RhdHMAAgZ0aHJ1c3QGdWludDMyBWRyYWluBnVpbnQxNgtuZWFyYnlfaW5mbwAFCmNhbl90cmF2ZWwEYm9vbAdjdXJyZW50FGVudGl0eV9jdXJyZW50X3N0YXRlCXByb2plY3RlZBRlbnRpdHlfY3VycmVudF9zdGF0ZQptYXhfZW5lcmd5BnVpbnQxNgdzeXN0ZW1zD25lYXJieV9zeXN0ZW1bXQ1uZWFyYnlfc3lzdGVtAAQIZGlzdGFuY2UGdWludDY0C2VuZXJneV9jb3N0BnVpbnQ2NAtmbGlnaHRfdGltZQZ1aW50MzIIbG9jYXRpb24NbG9jYXRpb25faW5mbwluZXh1c19yb3cABAJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwtjb29yZGluYXRlcwtjb29yZGluYXRlcw5uZnRfc2NoZW1hX2RlZgACC3NjaGVtYV9uYW1lBG5hbWUGZmllbGRzDnNjaGVtYV9maWVsZFtdEG5mdF90ZW1wbGF0ZV9kZWYAAgdpdGVtX2lkBnVpbnQxNgtzY2hlbWFfbmFtZQRuYW1lDW5mdGNvbmZpZ19yb3cAAwdpdGVtX2lkBnVpbnQxNgt0ZW1wbGF0ZV9pZAVpbnQzMgtzY2hlbWFfbmFtZQRuYW1lDm5mdGluZm9fcmVzdWx0AAIHc2NoZW1hcxBuZnRfc2NoZW1hX2RlZltdCXRlbXBsYXRlcxJuZnRfdGVtcGxhdGVfZGVmW10Gbm90aWZ5AAEFZXZlbnQKdGFza19ldmVudAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwZlbmVyZ3kHdWludDE2PwljYXJnb21hc3MGdWludDMyB2VuZ2luZXMPbW92ZW1lbnRfc3RhdHM/CWdlbmVyYXRvcg1lbmVyZ3lfc3RhdHM/B2xvYWRlcnMNbG9hZGVyX3N0YXRzPwhnYXRoZXJlcg9nYXRoZXJlcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/BmhhdWxlcg1oYXVsZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/CnNwYXduY2FyZ28AAwllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAtzcGF3bnBhY2tlZAAECWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYJaHVsbF9zZWVkBnVpbnQ2NAlpbnN0YWxsZWQMY2FyZ29fc2VlZFtdC3NwYXduc2VlZGVkAAQJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQEc2VlZAZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABgtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYIcXVhbnRpdHkGdWludDMyBnRyYXZlbAAFC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0AXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sCXR5cGVzX3JvdwADAmlkBnVpbnQ2NBNlbnRpdHlfc3VtbWFyeV90eXBlDmVudGl0eV9zdW1tYXJ5EGdhbWVfY29uZmlnX3R5cGULZ2FtZV9jb25maWcNd2FyZWhvdXNlX3JvdwALAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBHNlZWQGdWludDY0C2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzB3VpbnQzMj8IY2FwYWNpdHkHdWludDMyPwljYXJnb21hc3MGdWludDMyB2xvYWRlcnMNbG9hZGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwR3YXJwAAQLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQBeAVpbnQ2NAF5BWludDY0CndhcnBfc3RhdHMAAQVyYW5nZQZ1aW50MzIEd2lwZQAADHdpcGVzZXF1ZW5jZQAABHdyYXAABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhjYXJnb19pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0NAAAUFEnKlMyCWFkZG1vZHVsZccDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG1vZHVsZQpzdW1tYXJ5OiAnSW5zdGFsbCBhIG1vZHVsZSBpbnRvIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5zdGFsbCBhIG1vZHVsZSBmcm9tIGNhcmdvIGludG8gYSBtb2R1bGUgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgdHlwZSBtdXN0IGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgdGFyZ2V0IHNsb3QgdHlwZS4gVGhlIG1vZHVsZSBpdGVtIGlzIHJlbW92ZWQgZnJvbSBjYXJnbyB1cG9uIGluc3RhbGxhdGlvbi4AAABYdzVTMghhZGRuZXh1c6cDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkZG5leHVzCnN1bW1hcnk6ICdBZGQgYSBuZXh1cyBsb2NhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ3JlYXRlIGEgbmV3IG5leHVzIGVudGl0eSBhdCB0aGUgZ2l2ZW4gY29vcmRpbmF0ZXMuIE5leHVzZXMgYXJlIG93bmVkIGJ5IHRoZSBjb250cmFjdCBhbmQgc2VydmUgYXMgZml4ZWQgZ2F0aGVyaW5nIHBvaW50cyB3aGVyZSBwbGF5ZXJzIGNhbiB3cmFwLCB1bndyYXAsIGRlcGxveSwgYW5kIG90aGVyd2lzZSBpbnRlcmFjdCB3aXRoIE5GVC1iYWNrZWQgYXNzZXRzLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAQKFpdjIHYWR2YW5jZdMBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGFkdmFuY2UKc3VtbWFyeTogJ0FkdmFuY2UgdHVybicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQWR2YW5jZSB0aGUgZ2FtZSB0byB0aGUgbmV4dCB0dXJuLgAAAACANFU8BWJsZW5k/QItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYmxlbmQKc3VtbWFyeTogJ0JsZW5kIGNhcmdvIHN0YWNrcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ29tYmluZSBtdWx0aXBsZSBjYXJnbyBzdGFja3Mgb2YgdGhlIHNhbWUgaXRlbSB0eXBlIGludG8gYSBzaW5nbGUgc3RhY2sgd2l0aCBhIG5ldyBibGVuZGVkIHNlZWQuIEFsbCBpbnB1dCBzdGFja3MgbXVzdCBzaGFyZSB0aGUgc2FtZSBpdGVtIGlkLiBUaGUgb3V0cHV0IHN0YWNrIGhhcyB0aGUgY29tYmluZWQgcXVhbnRpdHkgb2YgYWxsIGlucHV0cy4AAAAARIWmQQZjYW5jZWzCAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjYW5jZWwKc3VtbWFyeTogJ0NhbmNlbCBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbmNlbCB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiB0YXNrcyBmcm9tIHRoZSBlbmQgb2YgYW4gZW50aXR5J3Mgc2NoZWR1bGUuIFRhc2tzIHRoYXQgYXJlIGltbXV0YWJsZSBhbmQgaW4gcHJvZ3Jlc3MgY2Fubm90IGJlIGNhbmNlbGxlZC4AAKgb32lURAljbGVhbnJzdnDsAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjbGVhbnJzdnAKc3VtbWFyeTogJ0NsZWFuIHVwIHBhc3QgZXBvY2ggcmVzZXJ2ZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVyYXNlIHJlc2VydmUgdGFibGUgcm93cyBmcm9tIGEgcGFzdCBlcG9jaC4gQ2Fubm90IGNsZWFuIHRoZSBjdXJyZW50IG9yIGZ1dHVyZSBlcG9jaHMuIFRoZSBtYXhfcm93cyBwYXJhbWV0ZXIgY2FwcyB0aGUgbnVtYmVyIG9mIHJvd3MgZXJhc2VkIHBlciBjYWxsIHRvIGxpbWl0IENQVSB1c2FnZS4AgIrH5GtURApjbGVhcnRhYmxlvgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYXJ0YWJsZQpzdW1tYXJ5OiAnREVCVUc6IGNsZWFydGFibGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAGQnJUUGY29tbWl07AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY29tbWl0CnN1bW1hcnk6ICdTZXQgY29tbWl0IHZhbHVlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTZXQgdGhlIGluaXRpYWwgY29tbWl0IHZhbHVlIGR1cmluZyBnYW1lIGluaXRpYWxpemF0aW9uLgAAYDQytyZFCWNvbmZpZ2xvZ90CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbmZpZ2xvZwpzdW1tYXJ5OiAnTG9nIGdhbWUgY29uZmlndXJhdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW50ZXJuYWwgYWN0aW9uIHRoYXQgbG9ncyB0aGUgY3VycmVudCBnYW1lIGNvbmZpZ3VyYXRpb24uIENhbGxlZCBpbmxpbmUgYWZ0ZXIgaW5pdGlhbGl6YXRpb24gdG8gYnJvYWRjYXN0IGNvbmZpZyB2aWEgYWN0aW9uIHRyYWNlcy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAAACAvMxFBWNyYWZ0yAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JhZnQKc3VtbWFyeTogJ0NyYWZ0IGl0ZW1zIGZyb20gYSByZWNpcGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRyYW5zZm9ybSBjYXJnbyBpdGVtcyBpbnRvIGEgbmV3IGl0ZW0gdXNpbmcgYSByZWNpcGUuIFRoZSBlbnRpdHkgbXVzdCBoYXZlIGEgY3JhZnRlciBtb2R1bGUgaW5zdGFsbGVkLiBDb25zdW1lcyBlbmVyZ3kgYW5kIHNjaGVkdWxlcyBhIGNyYWZ0aW5nIHRhc2sgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiB0b3RhbCBpbnB1dCBtYXNzIGFuZCBjcmFmdGVyIHNwZWVkLiBJbnB1dCBxdWFudGl0aWVzIG11c3QgZXhhY3RseSBtYXRjaCB0aGUgcmVjaXBlIHJlcXVpcmVtZW50cy7gs8tTqWzURQxjcmVhdGVlbnRpdHm/AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjcmVhdGVlbnRpdHkKc3VtbWFyeTogJ0RFQlVHOiBjcmVhdGUgYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAAHgaq0oGZGVwbG957AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZGVwbG95CnN1bW1hcnk6ICdEZXBsb3kgYSBwYWNrZWQgZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpVbnBhY2sgYSBwYWNrZWQgZW50aXR5IGl0ZW0gKHBhY2tlZCBzaGlwIG9yIHBhY2tlZCBjb250YWluZXIpIGZyb20gY2FyZ28sIHNjaGVkdWxpbmcgYSBkZXBsb3kgdGFzayB0aGF0IGNyZWF0ZXMgdGhlIG5ldyBlbnRpdHkgYXQgdGhlIGRlcGxveWluZyBlbnRpdHkncyBsb2NhdGlvbiB1cG9uIHJlc29sdXRpb24uAIDPLk+FsEoKZGVzY2VudGl0efwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlc2NlbnRpdHkKc3VtbWFyeTogJ0Rlc2NyaWJlIGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBodW1hbi1yZWFkYWJsZSBkZXNjcmlwdGlvbiBzdHJpbmcgZm9yIGEgcGFja2VkIGVudGl0eSwgZGVyaXZlZCBmcm9tIHRoZSBlbnRpdHkgaXRlbSBpZCwgaHVsbCBzZWVkLCBhbmQgdGhlIGxpc3Qgb2YgaW5zdGFsbGVkIG1vZHVsZSBpdGVtIGlkcyBhbmQgc2VlZHMuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIE5GVCByZW5kZXJlcnMgdG8gZGlzcGxheSBwYWNrZWQgZW50aXRpZXMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAAACoeMxUBmVuYWJsZd0BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGVuYWJsZQpzdW1tYXJ5OiAnU2V0IGVuYWJsZWQgc3RhdGUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkVuYWJsZSBvciBkaXNhYmxlIHRoaXMgZ2FtZSBvZiBTaGlwbG9hZC4AAAAAXNWyYQZnYXRoZXKXAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnYXRoZXIKc3VtbWFyeTogJ0dhdGhlciByZXNvdXJjZXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkdhdGhlciByZXNvdXJjZXMgYXQgdGhlIHNoaXAncyBjdXJyZW50IGxvY2F0aW9uLiBPbmx5IHdvcmtzIGF0IGdhdGhlcmFibGUgbG9jYXRpb24gdHlwZXMuIFNjaGVkdWxlcyBhIGdhdGhlciB0YXNrIHRoYXQgY29uc3VtZXMgZW5lcmd5IGFuZCB5aWVsZHMgY2FyZ28gYmFzZWQgb24gdGhlIHNoaXAncyBnYXRoZXJlciBzdGF0cyBhbmQgdGhlIGxvY2F0aW9uJ3MgcmVzb3VyY2UgY29tcG9zaXRpb24uAABgbk2KsmIJZ2V0Y29uZmlnygItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0Y29uZmlnCnN1bW1hcnk6ICdHZXQgZ2FtZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHRoZSBnYW1lIGNvbmZpZ3VyYXRpb24gaW5jbHVkaW5nIGRlZmF1bHQgZW50aXR5IHN0YXRzIGZvciB3YXJlaG91c2VzIGFuZCBjb250YWluZXJzLCBhbmQgdGhlIGZ1bGwgaXRlbSBkZWZpbml0aW9ucyB0YWJsZS4AsHLZ5amyYgtnZXRlbnRpdGllc6QCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0aWVzCnN1bW1hcnk6ICdHZXQgYWxsIGVudGl0aWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBmdWxsIGVudGl0eSBpbmZvIGZvciBhbGwgZW50aXRpZXMgb3duZWQgYnkgYSBwbGF5ZXIuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgAA8NnlqbJiCWdldGVudGl0eaICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGVudGl0eQpzdW1tYXJ5OiAnR2V0IGVudGl0eSBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyB0aGUgY3VycmVudCBzdGF0ZSBvZiBhbiBlbnRpdHkgaW5jbHVkaW5nIGlkZW50aXR5LCBjYXJnbywgc2NoZWR1bGUgc3RhdGUsIGFuZCB0eXBlLXNwZWNpZmljIGZpZWxkcy4ATDZJquyyYgtnZXRpdGVtZGF0YdwDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1kYXRhCnN1bW1hcnk6ICdHZXQgZnVsbCBpdGVtIGNhdGFsb2cnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBjb21wbGV0ZSBpdGVtIGNhdGFsb2cgYXMgdGhlIGNvbnRyYWN0IHNlZXMgaXQsIGluY2x1ZGluZyB0eXBlLCBzdWJ0eXBlLCB0aWVyLCBtYXNzLCBhbmQgb3RoZXIgc3RhdGljIG1ldGFkYXRhLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIGFuZCBjbGllbnRzIHRvIG1pcnJvciB0aGUgY29udHJhY3QncyBpdGVtIGRlZmluaXRpb25zLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAABYquyyYghnZXRpdGVtc5oCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGl0ZW1zCnN1bW1hcnk6ICdHZXQgYWxsIGF2YWlsYWJsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBhIGxpc3Qgb2YgYWxsIGl0ZW1zIGluIHRoZSBnYW1lIGluY2x1ZGluZyB0aGVpciBpZCwgYmFzZSBwcmljZSwgYW5kIG1hc3MuACZ12SAas2ILZ2V0bG9jYXRpb27iAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NhdGlvbgpzdW1tYXJ5OiAnR2V0IGxvY2F0aW9uIGluZm9ybWF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGluZm9ybWF0aW9uIGFib3V0IGEgbG9jYXRpb24gaW5jbHVkaW5nIHdoZXRoZXIgYSBzeXN0ZW0gZXhpc3RzLCBhbmQgZm9yIGVhY2ggaXRlbTogcHJpY2UsIHN1cHBseSwgcmFyaXR5IG11bHRpcGxpZXIsIGFuZCBsb2NhdGlvbiBtdWx0aXBsaWVyLgCAySYhGrNiCmdldGxvY2RhdGH+Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRsb2NkYXRhCnN1bW1hcnk6ICdHZXQgZGVyaXZlZCBsb2NhdGlvbiBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGRlcml2ZWQgbG9jYXRpb24gZGF0YSBpbmNsdWRpbmcgc3RhdGljIHByb3BlcnRpZXMgKHR5cGUsIGRpZmZpY3VsdHksIHNlZWRzKSBmcm9tIHRoZSBnYW1lIHNlZWQgYW5kIGVwb2NoLXNwZWNpZmljIHByb3BlcnRpZXMgKGFjdGl2ZSwgc2VlZHMpIGZyb20gdGhlIGN1cnJlbnQgZXBvY2ggc2VlZC4AAFZRJyqzYgpnZXRtb2R1bGVztAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bW9kdWxlcwpzdW1tYXJ5OiAnR2V0IGFsbCBtb2R1bGUgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyBtb2R1bGVzLCBpbmNsdWRpbmcgZWFjaCBtb2R1bGUncyBpZCwgbWFzcywgc3VidHlwZSwgYW5kIHRpZXIuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gZW51bWVyYXRlIGluc3RhbGxhYmxlIGVxdWlwbWVudC4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAADw5xo1s2IJZ2V0bmVhcmJ53gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmVhcmJ5CnN1bW1hcnk6ICdHZXQgbmVhcmJ5IHJlYWNoYWJsZSBzeXN0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIG5lYXJieSBzeXN0ZW1zIHJlYWNoYWJsZSBieSBhbiBlbnRpdHkgZnJvbSBpdHMgcHJvamVjdGVkIGxvY2F0aW9uLiBSZXR1cm5zIGN1cnJlbnQgc3RhdGUgKHdpdGggY29tcGxldGVkIHRhc2tzIHJlc29sdmVkKSwgcHJvamVjdGVkIHN0YXRlIChhZnRlciBhbGwgc2NoZWR1bGVkIHRhc2tzKSwgYW5kIGEgbGlzdCBvZiByZWFjaGFibGUgc3lzdGVtcyB3aXRoIGRpc3RhbmNlLCBlbmVyZ3kgY29zdCwgZmxpZ2h0IHRpbWUsIGFuZCBtYXJrZXQgaW5mb3JtYXRpb24uAABd0+U1s2IKZ2V0bmZ0aW5mb6QELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldG5mdGluZm8Kc3VtbWFyeTogJ0dldCBORlQgc2NoZW1hIGFuZCB0ZW1wbGF0ZSBjb25maWd1cmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgZnVsbCBzZXQgb2YgQXRvbWljQXNzZXRzIHNjaGVtYXMgYW5kIHRlbXBsYXRlcyB0aGUgZ2FtZSBjb250cmFjdCBleHBlY3RzLCBwbHVzIHRoZSBjdXJyZW50IGBpdGVtX2lkIOKGkiAodGVtcGxhdGVfaWQsIHNjaGVtYV9uYW1lKWAgbWFwcGluZyBzdG9yZWQgaW4gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIHN5bmMgYXRvbWljYXNzZXRzIHN0YXRlIHdpdGggdGhlIGNvbnRyYWN0LiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AALjKm1izYglnZXRwbGF5ZXL9Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRwbGF5ZXIKc3VtbWFyeTogJ0dldCBwbGF5ZXIgaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBwbGF5ZXIgaW5jbHVkaW5nIGJhbGFuY2UsIGRlYnQsIG5ldHdvcnRoLCBlbnRpdHkgY291bnRzLCBhbmQgcHJpY2luZyBmb3IgbmV4dCBwdXJjaGFzZXMuIFJldHVybnMgaXNfcGxheWVyPWZhbHNlIGlmIHRoZSBhY2NvdW50IGhhcyBub3Qgam9pbmVkIHRoZSBnYW1lLgAAUNUhdbNiCWdldHJlY2lwZdoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZQpzdW1tYXJ5OiAnR2V0IGEgc2luZ2xlIGNyYWZ0aW5nIHJlY2lwZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHJlY2lwZSB3aG9zZSBvdXRwdXQgbWF0Y2hlcyB0aGUgZ2l2ZW4gaXRlbSBpZCwgaW5jbHVkaW5nIGl0cyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBkaXNwbGF5IGNyYWZ0aW5nIHJlcXVpcmVtZW50cy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAABW1SF1s2IKZ2V0cmVjaXBlc+ADLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHJlY2lwZXMKc3VtbWFyeTogJ0xpc3QgY3JhZnRpbmcgcmVjaXBlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgYSBwYWdpbmF0ZWQgbGlzdCBvZiBjcmFmdGluZyByZWNpcGVzIHN0YXJ0aW5nIGF0IHRoZSBwcm92aWRlZCBsb3dlciBib3VuZCBvdXRwdXQgaXRlbSBpZCwgdXAgdG8gdGhlIHNwZWNpZmllZCBsaW1pdC4gRWFjaCBlbnRyeSBpbmNsdWRlcyBpbnB1dHMsIGJsZW5kIHdlaWdodHMsIHN0YXQgc2xvdHMsIGFuZCByZXNvbHZlZCBpdGVtIG1hc3MgaW5mby4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUugBW6mmJ1s2IMZ2V0cmVzb3VyY2VzuwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVzb3VyY2VzCnN1bW1hcnk6ICdHZXQgYWxsIHJlc291cmNlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgc3Vic2V0IG9mIGl0ZW1zIGNsYXNzaWZpZWQgYXMgcmVzb3VyY2VzLCBpbmNsdWRpbmcgZWFjaCByZXNvdXJjZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgZ2F0aGVyYWJsZSBtYXRlcmlhbHMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgCA1NncjLNiCmdldHN0cmF0dW3SAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdHJhdHVtCnN1bW1hcnk6ICdHZXQgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIHJlc291cmNlIHN0cmF0dW0gZGF0YSBmb3IgYSBzcGVjaWZpYyBkZXB0aCBsYXllciBhdCBhIGNvb3JkaW5hdGUsIGluY2x1ZGluZyB0aGUgc3RyYXR1bSBzZWVkIGluZm8gYW5kIGRlcml2ZWQgcmVzb3VyY2Ugc3RhdHMugJW7RkqNs2IMZ2V0c3VtbWFyaWVz6AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0c3VtbWFyaWVzCnN1bW1hcnk6ICdHZXQgZW50aXR5IHN1bW1hcmllcyBmb3IgYSBwbGF5ZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJldHVybnMgbGlnaHR3ZWlnaHQgc3VtbWFyaWVzIG9mIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllciBpbmNsdWRpbmcgdHlwZSwgaWQsIG93bmVyLCBuYW1lLCBsb2NhdGlvbiwgYW5kIGlkbGUgc3RhdHVzLiBPcHRpb25hbGx5IGZpbHRlciBieSBlbnRpdHkgdHlwZS4Aotrm5qrpZQtncm91cHRyYXZlbJoELS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdyb3VwdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIG11bHRpcGxlIGVudGl0aWVzIHRvZ2V0aGVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbml0aWF0ZSBncm91cCB0cmF2ZWwgZm9yIG11bHRpcGxlIGVudGl0aWVzIHRvIGEgZGVzdGluYXRpb24uIEFsbCBlbnRpdGllcyBtdXN0IGJlIGF0IHRoZSBzYW1lIGxvY2F0aW9uIGFuZCBvd25lZCBieSB0aGUgY2FsbGVyLiBBdCBsZWFzdCBvbmUgZW50aXR5IHdpdGggZW5naW5lcyBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRocnVzdC4gRmxpZ2h0IGR1cmF0aW9uIGlzIGNhbGN1bGF0ZWQgZnJvbSBjb21iaW5lZCB0aHJ1c3QgYW5kIHRvdGFsIG1hc3Mgb2YgYWxsIGVudGl0aWVzLiBDcmVhdGVzIGFuIGVudGl0eWdyb3VwIGZvciBhdG9taWMgcmVzb2x1dGlvbiBhbmQgY2FuY2VsbGF0aW9uLgAAAAAA0LBpBGhhc2j4AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBoYXNoCnN1bW1hcnk6ICdDYWxjdWxhdGUgc2hhMjU2IGhhc2gnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkNhbGN1bGF0ZXMgdGhlIHNoYTI1NiBoYXNoIG9mIGEgc3RyaW5nIGJhc2VkIHVzaW5nIHRoZSBnYW1lIHNlZWQuAAAAQITSsGkHaGFzaDUxMvsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2g1MTIKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGE1MTIgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhNTEyIGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAAAAAJDddARpbml0+gEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaW5pdApzdW1tYXJ5OiAnSW5pdGlhbGl6ZSBnYW1lIHNlZWQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYWxpemUgYSB0aGUgZ2FtZXMgc2VlZCBhbmQgc2VlZCB2YWx1ZXMgdG8gYm9vdHN0cmFwIGdhbWUgc3RhdGUuAAAAAAAwHX0Eam9pbsQBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGpvaW4Kc3VtbWFyeTogJ0pvaW4gYSBnYW1lJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpKb2luIGEgZ2FtZSBvZiBTaGlwbG9hZAAAAAD45TKdBm5vdGlmeYoDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IG5vdGlmeQpzdW1tYXJ5OiAnVGFzayBsaWZlY3ljbGUgbm90aWZpY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnRlcm5hbCBhY3Rpb24gdGhhdCBub3RpZmllcyBlbnRpdHkgb3duZXJzIG9mIHRhc2sgbGlmZWN5Y2xlIGV2ZW50cyAocmVzb2x2ZWQsIGNhbmNlbGxlZCkuIENhbGxlZCBpbmxpbmUgd2hlbiB0YXNrcyBjaGFuZ2Ugc3RhdGUuIFVzZXMgcmVxdWlyZV9yZWNpcGllbnQgdG8gZW5hYmxlIG9mZi1jaGFpbiBtb25pdG9yaW5nIHZpYSBhY3Rpb24gdHJhY2VzLgAAAIpd05C6CHJlY2hhcmdlzQItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVjaGFyZ2UKc3VtbWFyeTogJ1JlY2hhcmdlIHNoaXAgZW5lcmd5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpTY2hlZHVsZSBhIHJlY2hhcmdlIHRhc2sgZm9yIGFuIGVudGl0eSB0byByZXN0b3JlIGVuZXJneSB0byBmdWxsIGNhcGFjaXR5LiBUaGUgcmVjaGFyZ2UgZHVyYXRpb24gZGVwZW5kcyBvbiBjdXJyZW50IGVuZXJneSBsZXZlbCBhbmQgcmVjaGFyZ2UgcmF0ZS4AAABA7UixugdyZXNvbHZl0AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcmVzb2x2ZQpzdW1tYXJ5OiAnQ29tcGxldGUgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXNvbHZlIGNvbXBsZXRlZCB0YXNrcyBpbiBhbiBlbnRpdHkncyBzY2hlZHVsZSwgYXBwbHlpbmcgdGhlaXIgZWZmZWN0cyAocmVjaGFyZ2UgZW5lcmd5LCB1cGRhdGUgbG9jYXRpb24sIGxvYWQvdW5sb2FkIGNhcmdvKS4gSWYgY291bnQgaXMgc3BlY2lmaWVkLCByZXNvbHZlIGV4YWN0bHkgdGhhdCBtYW55IHRhc2tzOyBvdGhlcndpc2UgcmVzb2x2ZSBhbGwgY29tcGxldGVkIHRhc2tzLiBGYWlscyBpZiBjb3VudCBleGNlZWRzIHRoZSBudW1iZXIgb2YgY29tcGxldGVkIHRhc2tzLgAAACrqRKW8CHJtbW9kdWxlvAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1tb2R1bGUKc3VtbWFyeTogJ1JlbW92ZSBhIG1vZHVsZSBmcm9tIGEgc2xvdCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIGFuIGluc3RhbGxlZCBtb2R1bGUgZnJvbSBhIHNsb3Qgb24gYSBsaXZlIGVudGl0eSBvciBhIHBhY2tlZCBlbnRpdHkgaW4gY2FyZ28uIFRoZSBlbnRpdHkgbXVzdCBiZSBpZGxlIHdpdGggbm8gc2NoZWR1bGVkIHRhc2tzLiBUaGUgbW9kdWxlIGlzIHJldHVybmVkIHRvIGNhcmdvLiBGYWlscyBpZiB0aGUgZW50aXR5IGRvZXMgbm90IGhhdmUgZW5vdWdoIGNhcmdvIGNhcGFjaXR5IHRvIGhvbGQgdGhlIHJldHVybmVkIG1vZHVsZS4AAABsobymvAhybW5mdGNmZ6EDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHJtbmZ0Y2ZnCnN1bW1hcnk6ICdSZW1vdmUgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlbW92ZSB0aGUgQXRvbWljQXNzZXRzIHRlbXBsYXRlIG1hcHBpbmcgZm9yIHRoZSBzcGVjaWZpZWQgaXRlbSBpZCBmcm9tIHRoZSBgbmZ0Y29uZmlnYCB0YWJsZS4gQWZ0ZXIgcmVtb3ZhbCB0aGUgaXRlbSBjYW4gbm8gbG9uZ2VyIGJlIHdyYXBwZWQgb3IgdW53cmFwcGVkIHVudGlsIGEgbmV3IG1hcHBpbmcgaXMgc2V0LiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAAAAAACQo8EEc2FsdNgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNhbHQKc3VtbWFyeTogJ0FwcGVuZCBTYWx0JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZGQgYWRkaXRpb25hbCBzYWx0IHRvIHRoZSBuZXh0IGVwb2NoIHNlZWQuAABgC+U1s8IJc2V0bmZ0Y2ZnxAMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2V0bmZ0Y2ZnCnN1bW1hcnk6ICdTZXQgTkZUIHRlbXBsYXRlIG1hcHBpbmcgZm9yIGFuIGl0ZW0nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkJpbmQgYW4gaXRlbSBpZCB0byBhbiBBdG9taWNBc3NldHMgdGVtcGxhdGUgaWQgYW5kIHNjaGVtYSBuYW1lLiBVc2VkIHRvIGNvbmZpZ3VyZSBob3cgdGhlIGNvbnRyYWN0IG1pbnRzIGFuZCByZWNvZ25pemVzIE5GVHMgZm9yIGEgZ2l2ZW4gaXRlbS4gSW5zZXJ0cyBhIG5ldyBtYXBwaW5nIGlmIG9uZSBkb2VzIG5vdCBleGlzdCwgb3IgdXBkYXRlcyB0aGUgZXhpc3RpbmcgbWFwcGluZy4gUmVxdWlyZXMgY29udHJhY3QgYXV0aG9yaXR5LgAAZdegyU3FCnNwYXduY2FyZ2/FAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bmNhcmdvCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJKCyNTJTcULc3Bhd25wYWNrZWTnAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnBhY2tlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIGEgcGFja2VkIGVudGl0eSB3aXRoIGluc3RhbGxlZCBtb2R1bGVzIG9uIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQCSSkrhyU3FC3NwYXduc2VlZGVkzQEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc3Bhd25zZWVkZWQKc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBzZWVkZWQgY2FyZ28gb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAAAAVy08zc0IdHJhbnNmZXLIAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB0cmFuc2ZlcgpzdW1tYXJ5OiAnVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiBlbnRpdGllcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVHJhbnNmZXIgY2FyZ28gYmV0d2VlbiB0d28gZW50aXRpZXMgYXQgdGhlIHNhbWUgbG9jYXRpb24uIEJvdGggZW50aXRpZXMgbXVzdCBiZSBvd25lZCBieSB0aGUgY2FsbGVyIGFuZCBhdCBsZWFzdCBvbmUgbXVzdCBoYXZlIGxvYWRlcnMuIENyZWF0ZXMgbG9hZCBhbmQgdW5sb2FkIHRhc2tzIG9uIGJvdGggZW50aXRpZXMgd2l0aCBkdXJhdGlvbiBiYXNlZCBvbiBjb21iaW5lZCBsb2FkZXIgY2FwYWNpdHkgYW5kIFotZGlzdGFuY2UgYmV0d2VlbiB0aGVtLgAAAABEtc3NBnRyYXZlbPsBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYXZlbApzdW1tYXJ5OiAnTW92ZSBhIHNoaXAnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIHRyYXZlbCBvZiBhbiBlbnRpdHkgZnJvbSBpdHMgY3VycmVudCBsb2NhdGlvbiB0byBhIG5ldyBkZXN0aW5hdGlvbi4AAAAAAFCv4QR3YXJwnwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2FycApzdW1tYXJ5OiAnV2FycCB0byBhIGRlc3RpbmF0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YW50bHkgdGVsZXBvcnQgYW4gZW50aXR5IHRvIGEgZGVzdGluYXRpb24gc3lzdGVtLiBSZXF1aXJlcyB3YXJwIGNhcGFiaWxpdHksIGZ1bGwgZW5lcmd5LCBlbXB0eSBjYXJnbywgYW5kIGFuIGVtcHR5IHNjaGVkdWxlLiBUaGUgZGVzdGluYXRpb24gbXVzdCBiZSBhIHZhbGlkIHN5c3RlbSB3aXRoaW4gd2FycCByYW5nZS4gUmVzb2x2ZXMgaW1tZWRpYXRlbHkgYXMgYSB6ZXJvLWR1cmF0aW9uIHRhc2suAAAAAACgquMEd2lwZbIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGUKc3VtbWFyeTogJ0RFQlVHOiB3aXBlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLaDQVNoqrKrjDHdpcGVzZXF1ZW5jZcIBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHdpcGVzZXF1ZW5jZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGVzZXF1ZW5jZSBhY3Rpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAAAAAFDN5QR3cmFw/gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd3JhcApzdW1tYXJ5OiAnV3JhcCBjYXJnbyBpbnRvIGFuIE5GVCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKV3JhcCBhIHF1YW50aXR5IG9mIGNhcmdvIGZyb20gYW4gZW50aXR5IGludG8gYW4gQXRvbWljQXNzZXRzIE5GVCBtaW50ZWQgdG8gdGhlIHNwZWNpZmllZCBvd25lci4gVGhlIGVudGl0eSBtdXN0IGJlIGF0IGEgbmV4dXMsIGhhdmUgbG9hZGVycywgYW5kIGNvbnRhaW4gZW5vdWdoIG9mIHRoZSByZXF1ZXN0ZWQgY2FyZ28uIFNjaGVkdWxlcyBhIHdyYXAgdGFzayB0aGF0LCBvbiByZXNvbHV0aW9uLCByZW1vdmVzIHRoZSBjYXJnbyBmcm9tIHRoZSBlbnRpdHkgYW5kIG1pbnRzIHRoZSBORlQgdXNpbmcgdGhlIHRlbXBsYXRlIGNvbmZpZ3VyZWQgZm9yIHRoYXQgaXRlbSBpZC4NAAAAAADKrkEDaTY0AAAJY2FyZ29fcm93AAC4ajqTJ0UDaTY0AAANY29udGFpbmVyX3JvdwCqppf57PJUA2k2NAAAD2VudGl0eWdyb3VwX3JvdwAAAJO6bBCNA2k2NAAADGxvY2F0aW9uX3JvdwAAAAAArLuaA2k2NAAACW5leHVzX3JvdwAAYG5NivKaA2k2NAAADW5mdGNvbmZpZ19yb3cAAAAAXOVNrANpNjQAAApwbGF5ZXJfcm93AAAAQO2rsLoDaTY0AAALcmVzZXJ2ZV9yb3cAAAAKTaWtwgNpNjQAAAxzZXF1ZW5jZV9yb3cAAAAAAFBdwwNpNjQAAAhzaGlwX3JvdwAAAAAAlU3GA2k2NAAACXN0YXRlX3JvdwAAAAAArKrPA2k2NAAACXR5cGVzX3JvdwAAUFjTpq7hA2k2NAAADXdhcmVob3VzZV9yb3cBEVNoaXBsb2FkIChTZXJ2ZXIpEVNoaXBsb2FkIChTZXJ2ZXIpAAAAHgAAAABEhaZBDmNhbmNlbF9yZXN1bHRzAAAAAIC8zEUMdGFza19yZXN1bHRzAAAAAHgaq0oMdGFza19yZXN1bHRzAIDPLk+FsEoGc3RyaW5nAAAAAFzVsmEMdGFza19yZXN1bHRzAABgbk2KsmILZ2FtZV9jb25maWcAsHLZ5amyYg1lbnRpdHlfaW5mb1tdAADw2eWpsmILZW50aXR5X2luZm8ATDZJquyyYg9pdGVtZGF0YV9yZXN1bHQAAABYquyyYgppdGVtc19pbmZvACZ12SAas2INbG9jYXRpb25faW5mbwCAySYhGrNiEGxvY2F0aW9uX2Rlcml2ZWQAAFZRJyqzYg5tb2R1bGVzX3Jlc3VsdAAA8OcaNbNiC25lYXJieV9pbmZvAABd0+U1s2IObmZ0aW5mb19yZXN1bHQAALjKm1izYgtwbGF5ZXJfaW5mbwAAUNUhdbNiDnJlY2lwZXNfcmVzdWx0AABW1SF1s2IOcmVjaXBlc19yZXN1bHSAFbqaYnWzYhByZXNvdXJjZXNfcmVzdWx0AIDU2dyMs2IMc3RyYXR1bV9kYXRhgJW7RkqNs2IQZW50aXR5X3N1bW1hcnlbXQCi2ubmqullDHRhc2tfcmVzdWx0cwAAAAAA0LBpC2NoZWNrc3VtMjU2AAAAQITSsGkLY2hlY2tzdW01MTIAAACKXdOQugx0YXNrX3Jlc3VsdHMAAABA7Uixug9yZXNvbHZlX3Jlc3VsdHMAAABXLTzNzQx0YXNrX3Jlc3VsdHMAAAAARLXNzQx0YXNrX3Jlc3VsdHMAAAAAAFCv4Qx0YXNrX3Jlc3VsdHMAAAAAAFDN5Qx0YXNrX3Jlc3VsdHM=');
|
|
216
|
+
const abiBlob = antelope.Blob.from('DmVvc2lvOjphYmkvMS4yAhVCX3ZlY3Rvcl9lbnRpdHlfcmVmX0UMZW50aXR5X3JlZltdDWxvY2F0aW9uX3R5cGUFdWludDh0CWFkZG1vZHVsZQAFC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAxtb2R1bGVfaW5kZXgFdWludDgPbW9kdWxlX2NhcmdvX2lkBnVpbnQ2NA90YXJnZXRfY2FyZ29faWQGdWludDY0CGFkZG5leHVzAAMKbmV4dXNfbmFtZQZzdHJpbmcBeAVpbnQ2NAF5BWludDY0B2FkdmFuY2UAAgZyZXZlYWwGc3RyaW5nBmNvbW1pdAtjaGVja3N1bTI1NgVibGVuZAADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BmlucHV0cwxjYXJnb19pdGVtW10GY2FuY2VsAAMLZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQFY291bnQGdWludDY0DmNhbmNlbF9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lD2NhbmNlbGxlZF9jb3VudAV1aW50OBBzY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/CmNhcmdvX2l0ZW0ABAdpdGVtX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIFc3RhdHMGdWludDY0B21vZHVsZXMObW9kdWxlX2VudHJ5W10JY2FyZ29fcm93AAYCaWQGdWludDY0CWVudGl0eV9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50NjQIcXVhbnRpdHkGdWludDY0BXN0YXRzBnVpbnQ2NAdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCWNsZWFucnN2cAACBWVwb2NoBnVpbnQ2NAhtYXhfcm93cwZ1aW50NjQKY2xlYXJ0YWJsZQADCnRhYmxlX25hbWUEbmFtZQVzY29wZQVuYW1lPwhtYXhfcm93cwd1aW50NjQ/BmNvbW1pdAABBmNvbW1pdAtjaGVja3N1bTI1Ngljb25maWdsb2cAAQZjb25maWcLZ2FtZV9jb25maWcNY29udGFpbmVyX3JvdwAIAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzCGh1bGxtYXNzBnVpbnQzMghjYXBhY2l0eQZ1aW50MzIJY2FyZ29tYXNzBnVpbnQzMghzY2hlZHVsZQlzY2hlZHVsZT8LY29vcmRpbmF0ZXMAAwF4BWludDY0AXkFaW50NjQBegd1aW50MTY/BWNyYWZ0AAULZW50aXR5X3R5cGUEbmFtZQJpZAZ1aW50NjQJcmVjaXBlX2lkBnVpbnQxNghxdWFudGl0eQZ1aW50MzIGaW5wdXRzDGNhcmdvX2l0ZW1bXQ1jcmFmdGVyX3N0YXRzAAIFc3BlZWQGdWludDE2BWRyYWluBnVpbnQxNgxjcmVhdGVlbnRpdHkABQVvd25lcgRuYW1lC2VudGl0eV90eXBlBG5hbWULZW50aXR5X25hbWUGc3RyaW5nAXgFaW50NjQBeQVpbnQ2NAZkZXBsb3kABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NA5wYWNrZWRfaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0C2VudGl0eV9uYW1lBnN0cmluZwpkZXNjZW50aXR5AAQHaXRlbV9pZAZ1aW50MTYKaHVsbF9zdGF0cwZ1aW50NjQMbW9kdWxlX2l0ZW1zCHVpbnQxNltdDG1vZHVsZV9zdGF0cwh1aW50NjRbXQZlbmFibGUAAQdlbmFibGVkBGJvb2wMZW5lcmd5X3N0YXRzAAIIY2FwYWNpdHkGdWludDE2CHJlY2hhcmdlBnVpbnQxNhRlbnRpdHlfY3VycmVudF9zdGF0ZQACC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzBmVuZXJneQZ1aW50MTYPZW50aXR5X2RlZmF1bHRzAAUSd2FyZWhvdXNlX2NhcGFjaXR5BnVpbnQzMgt3YXJlaG91c2VfegZ1aW50MTYSY29udGFpbmVyX2h1bGxtYXNzBnVpbnQzMhJjb250YWluZXJfY2FwYWNpdHkGdWludDMyC2NvbnRhaW5lcl96BnVpbnQxNgtlbnRpdHlfaW5mbwAYBHR5cGUEbmFtZQJpZAZ1aW50NjQFb3duZXIEbmFtZQtlbnRpdHlfbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10HbG9hZGVycw1sb2FkZXJfc3RhdHM/BmVuZXJneQd1aW50MTY/CGh1bGxtYXNzB3VpbnQzMj8HZW5naW5lcw9tb3ZlbWVudF9zdGF0cz8JZ2VuZXJhdG9yDWVuZXJneV9zdGF0cz8IY2FwYWNpdHkHdWludDMyPwhnYXRoZXJlcg9nYXRoZXJlcl9zdGF0cz8GaGF1bGVyDWhhdWxlcl9zdGF0cz8Ed2FycAt3YXJwX3N0YXRzPwdjcmFmdGVyDmNyYWZ0ZXJfc3RhdHM/B2lzX2lkbGUEYm9vbAxjdXJyZW50X3Rhc2sFdGFzaz8UY3VycmVudF90YXNrX2VsYXBzZWQGdWludDMyFmN1cnJlbnRfdGFza19yZW1haW5pbmcGdWludDMyDXBlbmRpbmdfdGFza3MGdGFza1tdB2lkbGVfYXQLdGltZV9wb2ludD8Ic2NoZWR1bGUJc2NoZWR1bGU/CmVudGl0eV9yZWYAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQOZW50aXR5X3N1bW1hcnkACAR0eXBlBG5hbWUCaWQGdWludDY0BW93bmVyBG5hbWULZW50aXR5X25hbWUGc3RyaW5nC2Nvb3JkaW5hdGVzC2Nvb3JkaW5hdGVzB2lzX2lkbGUEYm9vbA5yZXNvbHZlZF9jb3VudAZ1aW50MzINcGVuZGluZ19jb3VudAZ1aW50MzIQZW50aXR5X3Rhc2tfaW5mbwAECWVudGl0eV9pZAZ1aW50NjQLZW50aXR5X3R5cGUEbmFtZQp0YXNrX2NvdW50BXVpbnQ4EHNjaGVkdWxlX3N0YXJ0ZWQKdGltZV9wb2ludA9lbnRpdHlncm91cF9yb3cAAgJpZAZ1aW50NjQMcGFydGljaXBhbnRzDGVudGl0eV9yZWZbXQtnYW1lX2NvbmZpZwADB3ZlcnNpb24GdWludDMyCGRlZmF1bHRzD2VudGl0eV9kZWZhdWx0cwVpdGVtcwppdGVtX2RlZltdBmdhdGhlcgAEBnNvdXJjZQplbnRpdHlfcmVmC2Rlc3RpbmF0aW9uCmVudGl0eV9yZWYHc3RyYXR1bQZ1aW50MTYIcXVhbnRpdHkGdWludDMyDmdhdGhlcmVyX3N0YXRzAAQFeWllbGQGdWludDE2BWRyYWluBnVpbnQxNgVkZXB0aAZ1aW50MTYFc3BlZWQGdWludDE2CWdldGNvbmZpZwAAC2dldGVudGl0aWVzAAIFb3duZXIEbmFtZQtlbnRpdHlfdHlwZQVuYW1lPwlnZXRlbnRpdHkAAgtlbnRpdHlfdHlwZQRuYW1lCWVudGl0eV9pZAZ1aW50NjQLZ2V0aXRlbWRhdGEAAAhnZXRpdGVtcwAAC2dldGxvY2F0aW9uAAIBeAVpbnQ2NAF5BWludDY0CmdldGxvY2RhdGEAAgF4BWludDY0AXkFaW50NjQKZ2V0bW9kdWxlcwAACWdldG5lYXJieQADC2VudGl0eV90eXBlBG5hbWUJZW50aXR5X2lkBnVpbnQ2NAhyZWNoYXJnZQRib29sCmdldG5mdGluZm8AAAlnZXRwbGF5ZXIAAQdhY2NvdW50BG5hbWUJZ2V0cmVjaXBlAAEOb3V0cHV0X2l0ZW1faWQGdWludDE2CmdldHJlY2lwZXMAAgtsb3dlcl9ib3VuZAZ1aW50MTYFbGltaXQFdWludDgMZ2V0cmVzb3VyY2VzAAAKZ2V0c3RyYXR1bQADAXgFaW50NjQBeQVpbnQ2NAdzdHJhdHVtBnVpbnQxNgxnZXRzdW1tYXJpZXMAAgVvd25lcgRuYW1lC2VudGl0eV90eXBlBW5hbWU/C2dyb3VwdHJhdmVsAAQIZW50aXRpZXMMZW50aXR5X3JlZltdAXgFaW50NjQBeQVpbnQ2NAhyZWNoYXJnZQRib29sBGhhc2gAAQV2YWx1ZQZzdHJpbmcHaGFzaDUxMgABBXZhbHVlBnN0cmluZwxoYXVsZXJfc3RhdHMAAwhjYXBhY2l0eQV1aW50OAplZmZpY2llbmN5BnVpbnQxNgVkcmFpbgZ1aW50MTYEaW5pdAABBHNlZWQLY2hlY2tzdW0yNTYIaXRlbV9kZWYABQJpZAZ1aW50MTYEbWFzcwZ1aW50MzIEdHlwZQV1aW50OAdzdWJ0eXBlBXVpbnQ4BHRpZXIFdWludDgPaXRlbWRhdGFfcmVzdWx0AAIFaXRlbXMKaXRlbV9kZWZbXQdyZWNpcGVzDnJlY2lwZXNfcmVzdWx0Cml0ZW1zX2luZm8AAQVpdGVtcwppdGVtX2RlZltdBGpvaW4AAQdhY2NvdW50BG5hbWUMbG9hZGVyX3N0YXRzAAMEbWFzcwZ1aW50MzIGdGhydXN0BnVpbnQxNghxdWFudGl0eQV1aW50OBBsb2NhdGlvbl9kZXJpdmVkAAMMc3RhdGljX3Byb3BzD2xvY2F0aW9uX3N0YXRpYwtlcG9jaF9wcm9wcw5sb2NhdGlvbl9lcG9jaARzaXplBnVpbnQxNg5sb2NhdGlvbl9lcG9jaAADBmFjdGl2ZQRib29sBXNlZWQwBXVpbnQ4BXNlZWQxBXVpbnQ4DWxvY2F0aW9uX2luZm8AAgZjb29yZHMLY29vcmRpbmF0ZXMJaXNfc3lzdGVtBGJvb2wMbG9jYXRpb25fcm93AAYCaWQGdWludDY0BW93bmVyBG5hbWULY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMJY2FyZ29tYXNzBnVpbnQzMgVjYXJnbwxjYXJnb19pdGVtW10Ic2NoZWR1bGUJc2NoZWR1bGU/D2xvY2F0aW9uX3N0YXRpYwAFBmNvb3Jkcwtjb29yZGluYXRlcwR0eXBlDWxvY2F0aW9uX3R5cGUHc3VidHlwZQV1aW50OAVzZWVkMAV1aW50OAVzZWVkMQV1aW50OAxtb2R1bGVfZW50cnkAAgR0eXBlBXVpbnQ4CWluc3RhbGxlZA5wYWNrZWRfbW9kdWxlPwttb2R1bGVfaW5mbwAEAmlkBnVpbnQxNgRtYXNzBnVpbnQzMgttb2R1bGVfdHlwZQV1aW50OAR0aWVyBXVpbnQ4Dm1vZHVsZXNfcmVzdWx0AAEHbW9kdWxlcw1tb2R1bGVfaW5mb1tdDm1vdmVtZW50X3N0YXRzAAIGdGhydXN0BnVpbnQzMgVkcmFpbgZ1aW50MTYLbmVhcmJ5X2luZm8ABQpjYW5fdHJhdmVsBGJvb2wHY3VycmVudBRlbnRpdHlfY3VycmVudF9zdGF0ZQlwcm9qZWN0ZWQUZW50aXR5X2N1cnJlbnRfc3RhdGUKbWF4X2VuZXJneQZ1aW50MTYHc3lzdGVtcw9uZWFyYnlfc3lzdGVtW10NbmVhcmJ5X3N5c3RlbQAECGRpc3RhbmNlBnVpbnQ2NAtlbmVyZ3lfY29zdAZ1aW50NjQLZmxpZ2h0X3RpbWUGdWludDMyCGxvY2F0aW9uDWxvY2F0aW9uX2luZm8JbmV4dXNfcm93AAQCaWQGdWludDY0BW93bmVyBG5hbWUEbmFtZQZzdHJpbmcLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMObmZ0X3NjaGVtYV9kZWYAAgtzY2hlbWFfbmFtZQRuYW1lBmZpZWxkcw5zY2hlbWFfZmllbGRbXRBuZnRfdGVtcGxhdGVfZGVmAAIHaXRlbV9pZAZ1aW50MTYLc2NoZW1hX25hbWUEbmFtZQ1uZnRjb25maWdfcm93AAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQ5uZnRpbmZvX3Jlc3VsdAACB3NjaGVtYXMQbmZ0X3NjaGVtYV9kZWZbXQl0ZW1wbGF0ZXMSbmZ0X3RlbXBsYXRlX2RlZltdBm5vdGlmeQABBWV2ZW50CnRhc2tfZXZlbnQNcGFja2VkX21vZHVsZQACB2l0ZW1faWQGdWludDE2BXN0YXRzBnVpbnQ2NAtwbGF5ZXJfaW5mbwAGBW93bmVyBG5hbWUJaXNfcGxheWVyBGJvb2wMY29tcGFueV9uYW1lBnN0cmluZwpzaGlwX2NvdW50BnVpbnQ2NA93YXJlaG91c2VfY291bnQGdWludDY0D2NvbnRhaW5lcl9jb3VudAZ1aW50NjQKcGxheWVyX3JvdwABBW93bmVyBG5hbWUIcmVjaGFyZ2UAAgtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAxyZWNpcGVfaW5wdXQAAwdpdGVtX2lkBnVpbnQxNghjYXRlZ29yeQV1aW50OAhxdWFudGl0eQZ1aW50MzIQcmVjaXBlX2l0ZW1faW5mbwACAmlkBnVpbnQxNgRtYXNzBnVpbnQzMg9yZWNpcGVfcmVzcG9uc2UABw5vdXRwdXRfaXRlbV9pZAZ1aW50MTYLb3V0cHV0X21hc3MGdWludDMyBmlucHV0cw5yZWNpcGVfaW5wdXRbXQpzdGF0X3Nsb3RzFHN0YXRfc2xvdF9yZXNwb25zZVtdDWJsZW5kX3dlaWdodHMFYnl0ZXMLb3V0cHV0X2l0ZW0QcmVjaXBlX2l0ZW1faW5mbwtpbnB1dF9pdGVtcxJyZWNpcGVfaXRlbV9pbmZvW10OcmVjaXBlc19yZXN1bHQAAQdyZWNpcGVzEXJlY2lwZV9yZXNwb25zZVtdC3Jlc2VydmVfcm93AAICaWQGdWludDY0CXJlbWFpbmluZwZ1aW50MzIHcmVzb2x2ZQADC2VudGl0eV90eXBlBG5hbWUCaWQGdWludDY0BWNvdW50B3VpbnQ2ND8PcmVzb2x2ZV9yZXN1bHRzAAYJZW50aXR5X2lkBnVpbnQ2NAtlbnRpdHlfdHlwZQRuYW1lDnJlc29sdmVkX2NvdW50BXVpbnQ4FG5ld19zY2hlZHVsZV9zdGFydGVkC3RpbWVfcG9pbnQ/C2VudGl0eWdyb3VwB3VpbnQ2ND8NZ3JvdXBfbWVtYmVycxZCX3ZlY3Rvcl9lbnRpdHlfcmVmX0U/DXJlc291cmNlX2luZm8ABAJpZAZ1aW50MTYEbWFzcwZ1aW50MzIIY2F0ZWdvcnkFdWludDgEdGllcgV1aW50OA5yZXNvdXJjZV9zdGF0cwADBXN0YXQxBnVpbnQxNgVzdGF0MgZ1aW50MTYFc3RhdDMGdWludDE2EHJlc291cmNlc19yZXN1bHQAAQlyZXNvdXJjZXMPcmVzb3VyY2VfaW5mb1tdCHJtbW9kdWxlAAQLZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0DG1vZHVsZV9pbmRleAV1aW50OA90YXJnZXRfY2FyZ29faWQGdWludDY0CHJtbmZ0Y2ZnAAEHaXRlbV9pZAZ1aW50MTYEc2FsdAABBHNhbHQGdWludDY0CHNjaGVkdWxlAAIHc3RhcnRlZAp0aW1lX3BvaW50BXRhc2tzBnRhc2tbXQxzY2hlbWFfZmllbGQAAgRuYW1lBnN0cmluZwpmaWVsZF90eXBlBnN0cmluZwxzZXF1ZW5jZV9yb3cAAgNrZXkEbmFtZQV2YWx1ZQZ1aW50NjQJc2V0bmZ0Y2ZnAAMHaXRlbV9pZAZ1aW50MTYLdGVtcGxhdGVfaWQFaW50MzILc2NoZW1hX25hbWUEbmFtZQhzaGlwX3JvdwASAmlkBnVpbnQ2NAVvd25lcgRuYW1lBG5hbWUGc3RyaW5nBXN0YXRzBnVpbnQ2NAtjb29yZGluYXRlcwtjb29yZGluYXRlcwhodWxsbWFzcwd1aW50MzI/CGNhcGFjaXR5B3VpbnQzMj8GZW5lcmd5B3VpbnQxNj8JY2FyZ29tYXNzBnVpbnQzMgdlbmdpbmVzD21vdmVtZW50X3N0YXRzPwlnZW5lcmF0b3INZW5lcmd5X3N0YXRzPwdsb2FkZXJzDWxvYWRlcl9zdGF0cz8IZ2F0aGVyZXIPZ2F0aGVyZXJfc3RhdHM/BHdhcnALd2FycF9zdGF0cz8HY3JhZnRlcg5jcmFmdGVyX3N0YXRzPwZoYXVsZXINaGF1bGVyX3N0YXRzPwdtb2R1bGVzDm1vZHVsZV9lbnRyeVtdCHNjaGVkdWxlCXNjaGVkdWxlPwpzcGF3bmNhcmdvAAMJZW50aXR5X2lkBnVpbnQ2NAdpdGVtX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQLc3Bhd25wYWNrZWQABAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDE2Cmh1bGxfc3RhdHMGdWludDY0CWluc3RhbGxlZA9wYWNrZWRfbW9kdWxlW10Lc3Bhd25zZWVkZWQABAllbnRpdHlfaWQGdWludDY0B2l0ZW1faWQGdWludDY0CHF1YW50aXR5BnVpbnQ2NAVzdGF0cwZ1aW50NjQSc3RhdF9zbG90X3Jlc3BvbnNlAAEHc291cmNlcw1zdGF0X3NvdXJjZVtdC3N0YXRfc291cmNlAAILaW5wdXRfaW5kZXgFdWludDgQaW5wdXRfc3RhdF9pbmRleAV1aW50OAlzdGF0ZV9yb3cABgdlbmFibGVkBGJvb2wFZXBvY2gGdWludDMyBHNhbHQGdWludDY0BXNoaXBzBnVpbnQzMgRzZWVkC2NoZWNrc3VtMjU2BmNvbW1pdAtjaGVja3N1bTI1NgxzdHJhdHVtX2RhdGEAAgdzdHJhdHVtDHN0cmF0dW1faW5mbwVzdGF0cw5yZXNvdXJjZV9zdGF0cwxzdHJhdHVtX2luZm8ABAdpdGVtX2lkBnVpbnQxNgRzZWVkBnVpbnQ2NAhyaWNobmVzcwZ1aW50MTYHcmVzZXJ2ZQZ1aW50MzIEdGFzawAIBHR5cGUFdWludDgIZHVyYXRpb24GdWludDMyCmNhbmNlbGFibGUFdWludDgLY29vcmRpbmF0ZXMMY29vcmRpbmF0ZXM/BWNhcmdvDGNhcmdvX2l0ZW1bXQxlbnRpdHl0YXJnZXQLZW50aXR5X3JlZj8LZW50aXR5Z3JvdXAHdWludDY0PwtlbmVyZ3lfY29zdAd1aW50MTY/CnRhc2tfZXZlbnQACQpldmVudF90eXBlBXVpbnQ4BW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CnRhc2tfaW5kZXgFdWludDgEdGFzawR0YXNrCXN0YXJ0c19hdAp0aW1lX3BvaW50DGNvbXBsZXRlc19hdAp0aW1lX3BvaW50Cm5ld19lbmVyZ3kHdWludDE2Pwx0YXNrX3Jlc3VsdHMAAQhlbnRpdGllcxJlbnRpdHlfdGFza19pbmZvW10IdHJhbnNmZXIABwtzb3VyY2VfdHlwZQRuYW1lCXNvdXJjZV9pZAZ1aW50NjQJZGVzdF90eXBlBG5hbWUHZGVzdF9pZAZ1aW50NjQHaXRlbV9pZAZ1aW50MTYFc3RhdHMGdWludDY0CHF1YW50aXR5BnVpbnQzMgZ0cmF2ZWwABQtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQIcmVjaGFyZ2UEYm9vbAl0eXBlc19yb3cAAwJpZAZ1aW50NjQTZW50aXR5X3N1bW1hcnlfdHlwZQ5lbnRpdHlfc3VtbWFyeRBnYW1lX2NvbmZpZ190eXBlC2dhbWVfY29uZmlnDXdhcmVob3VzZV9yb3cACwJpZAZ1aW50NjQFb3duZXIEbmFtZQRuYW1lBnN0cmluZwVzdGF0cwZ1aW50NjQLY29vcmRpbmF0ZXMLY29vcmRpbmF0ZXMIaHVsbG1hc3MHdWludDMyPwhjYXBhY2l0eQd1aW50MzI/CWNhcmdvbWFzcwZ1aW50MzIHbG9hZGVycw1sb2FkZXJfc3RhdHM/B21vZHVsZXMObW9kdWxlX2VudHJ5W10Ic2NoZWR1bGUJc2NoZWR1bGU/BHdhcnAABAtlbnRpdHlfdHlwZQRuYW1lAmlkBnVpbnQ2NAF4BWludDY0AXkFaW50NjQKd2FycF9zdGF0cwABBXJhbmdlBnVpbnQzMgR3aXBlAAAMd2lwZXNlcXVlbmNlAAAEd3JhcAAFBW93bmVyBG5hbWULZW50aXR5X3R5cGUEbmFtZQllbnRpdHlfaWQGdWludDY0CGNhcmdvX2lkBnVpbnQ2NAhxdWFudGl0eQZ1aW50NjQ0AABQUScqUzIJYWRkbW9kdWxlxwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbW9kdWxlCnN1bW1hcnk6ICdJbnN0YWxsIGEgbW9kdWxlIGludG8gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpJbnN0YWxsIGEgbW9kdWxlIGZyb20gY2FyZ28gaW50byBhIG1vZHVsZSBzbG90IG9uIGEgbGl2ZSBlbnRpdHkgb3IgYSBwYWNrZWQgZW50aXR5IGluIGNhcmdvLiBUaGUgZW50aXR5IG11c3QgYmUgaWRsZSB3aXRoIG5vIHNjaGVkdWxlZCB0YXNrcy4gVGhlIG1vZHVsZSB0eXBlIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSB0YXJnZXQgc2xvdCB0eXBlLiBUaGUgbW9kdWxlIGl0ZW0gaXMgcmVtb3ZlZCBmcm9tIGNhcmdvIHVwb24gaW5zdGFsbGF0aW9uLgAAAFh3NVMyCGFkZG5leHVzpwMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWRkbmV4dXMKc3VtbWFyeTogJ0FkZCBhIG5leHVzIGxvY2F0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDcmVhdGUgYSBuZXcgbmV4dXMgZW50aXR5IGF0IHRoZSBnaXZlbiBjb29yZGluYXRlcy4gTmV4dXNlcyBhcmUgb3duZWQgYnkgdGhlIGNvbnRyYWN0IGFuZCBzZXJ2ZSBhcyBmaXhlZCBnYXRoZXJpbmcgcG9pbnRzIHdoZXJlIHBsYXllcnMgY2FuIHdyYXAsIHVud3JhcCwgZGVwbG95LCBhbmQgb3RoZXJ3aXNlIGludGVyYWN0IHdpdGggTkZULWJhY2tlZCBhc3NldHMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAABAoWl2MgdhZHZhbmNl0wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogYWR2YW5jZQpzdW1tYXJ5OiAnQWR2YW5jZSB0dXJuJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpBZHZhbmNlIHRoZSBnYW1lIHRvIHRoZSBuZXh0IHR1cm4uAAAAAIA0VTwFYmxlbmT8Ai0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBibGVuZApzdW1tYXJ5OiAnQmxlbmQgY2FyZ28gc3RhY2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDb21iaW5lIG11bHRpcGxlIGNhcmdvIHN0YWNrcyBvZiB0aGUgc2FtZSBpdGVtIHR5cGUgaW50byBhIHNpbmdsZSBzdGFjayB3aXRoIG5ldyBibGVuZGVkIHN0YXRzLiBBbGwgaW5wdXQgc3RhY2tzIG11c3Qgc2hhcmUgdGhlIHNhbWUgaXRlbSBpZC4gVGhlIG91dHB1dCBzdGFjayBoYXMgdGhlIGNvbWJpbmVkIHF1YW50aXR5IG9mIGFsbCBpbnB1dHMuAAAAAESFpkEGY2FuY2VswgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2FuY2VsCnN1bW1hcnk6ICdDYW5jZWwgc2NoZWR1bGVkIHRhc2tzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYW5jZWwgdGhlIHNwZWNpZmllZCBudW1iZXIgb2YgdGFza3MgZnJvbSB0aGUgZW5kIG9mIGFuIGVudGl0eSdzIHNjaGVkdWxlLiBUYXNrcyB0aGF0IGFyZSBpbW11dGFibGUgYW5kIGluIHByb2dyZXNzIGNhbm5vdCBiZSBjYW5jZWxsZWQuAACoG99pVEQJY2xlYW5yc3Zw7AItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY2xlYW5yc3ZwCnN1bW1hcnk6ICdDbGVhbiB1cCBwYXN0IGVwb2NoIHJlc2VydmVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpFcmFzZSByZXNlcnZlIHRhYmxlIHJvd3MgZnJvbSBhIHBhc3QgZXBvY2guIENhbm5vdCBjbGVhbiB0aGUgY3VycmVudCBvciBmdXR1cmUgZXBvY2hzLiBUaGUgbWF4X3Jvd3MgcGFyYW1ldGVyIGNhcHMgdGhlIG51bWJlciBvZiByb3dzIGVyYXNlZCBwZXIgY2FsbCB0byBsaW1pdCBDUFUgdXNhZ2UuAICKx+RrVEQKY2xlYXJ0YWJsZb4BLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNsZWFydGFibGUKc3VtbWFyeTogJ0RFQlVHOiBjbGVhcnRhYmxlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAABkJyVFBmNvbW1pdOwBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNvbW1pdApzdW1tYXJ5OiAnU2V0IGNvbW1pdCB2YWx1ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKU2V0IHRoZSBpbml0aWFsIGNvbW1pdCB2YWx1ZSBkdXJpbmcgZ2FtZSBpbml0aWFsaXphdGlvbi4AAGA0MrcmRQljb25maWdsb2fdAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBjb25maWdsb2cKc3VtbWFyeTogJ0xvZyBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IGxvZ3MgdGhlIGN1cnJlbnQgZ2FtZSBjb25maWd1cmF0aW9uLiBDYWxsZWQgaW5saW5lIGFmdGVyIGluaXRpYWxpemF0aW9uIHRvIGJyb2FkY2FzdCBjb25maWcgdmlhIGFjdGlvbiB0cmFjZXMuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAgLzMRQVjcmFmdMgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGNyYWZ0CnN1bW1hcnk6ICdDcmFmdCBpdGVtcyBmcm9tIGEgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2Zvcm0gY2FyZ28gaXRlbXMgaW50byBhIG5ldyBpdGVtIHVzaW5nIGEgcmVjaXBlLiBUaGUgZW50aXR5IG11c3QgaGF2ZSBhIGNyYWZ0ZXIgbW9kdWxlIGluc3RhbGxlZC4gQ29uc3VtZXMgZW5lcmd5IGFuZCBzY2hlZHVsZXMgYSBjcmFmdGluZyB0YXNrIHdpdGggZHVyYXRpb24gYmFzZWQgb24gdG90YWwgaW5wdXQgbWFzcyBhbmQgY3JhZnRlciBzcGVlZC4gSW5wdXQgcXVhbnRpdGllcyBtdXN0IGV4YWN0bHkgbWF0Y2ggdGhlIHJlY2lwZSByZXF1aXJlbWVudHMu4LPLU6ls1EUMY3JlYXRlZW50aXR5vwEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogY3JlYXRlZW50aXR5CnN1bW1hcnk6ICdERUJVRzogY3JlYXRlIGFuIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAB4GqtKBmRlcGxveewCLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGRlcGxveQpzdW1tYXJ5OiAnRGVwbG95IGEgcGFja2VkIGVudGl0eScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVW5wYWNrIGEgcGFja2VkIGVudGl0eSBpdGVtIChwYWNrZWQgc2hpcCBvciBwYWNrZWQgY29udGFpbmVyKSBmcm9tIGNhcmdvLCBzY2hlZHVsaW5nIGEgZGVwbG95IHRhc2sgdGhhdCBjcmVhdGVzIHRoZSBuZXcgZW50aXR5IGF0IHRoZSBkZXBsb3lpbmcgZW50aXR5J3MgbG9jYXRpb24gdXBvbiByZXNvbHV0aW9uLgCAzy5PhbBKCmRlc2NlbnRpdHn9Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBkZXNjZW50aXR5CnN1bW1hcnk6ICdEZXNjcmliZSBhIHBhY2tlZCBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIGEgaHVtYW4tcmVhZGFibGUgZGVzY3JpcHRpb24gc3RyaW5nIGZvciBhIHBhY2tlZCBlbnRpdHksIGRlcml2ZWQgZnJvbSB0aGUgZW50aXR5IGl0ZW0gaWQsIGh1bGwgc3RhdHMsIGFuZCB0aGUgbGlzdCBvZiBpbnN0YWxsZWQgbW9kdWxlIGl0ZW0gaWRzIGFuZCBzdGF0cy4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyBhbmQgTkZUIHJlbmRlcmVycyB0byBkaXNwbGF5IHBhY2tlZCBlbnRpdGllcy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAAAAAKh4zFQGZW5hYmxl3QEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZW5hYmxlCnN1bW1hcnk6ICdTZXQgZW5hYmxlZCBzdGF0ZScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKRW5hYmxlIG9yIGRpc2FibGUgdGhpcyBnYW1lIG9mIFNoaXBsb2FkLgAAAABc1bJhBmdhdGhlcpcDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdhdGhlcgpzdW1tYXJ5OiAnR2F0aGVyIHJlc291cmNlcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKR2F0aGVyIHJlc291cmNlcyBhdCB0aGUgc2hpcCdzIGN1cnJlbnQgbG9jYXRpb24uIE9ubHkgd29ya3MgYXQgZ2F0aGVyYWJsZSBsb2NhdGlvbiB0eXBlcy4gU2NoZWR1bGVzIGEgZ2F0aGVyIHRhc2sgdGhhdCBjb25zdW1lcyBlbmVyZ3kgYW5kIHlpZWxkcyBjYXJnbyBiYXNlZCBvbiB0aGUgc2hpcCdzIGdhdGhlcmVyIHN0YXRzIGFuZCB0aGUgbG9jYXRpb24ncyByZXNvdXJjZSBjb21wb3NpdGlvbi4AAGBuTYqyYglnZXRjb25maWfKAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRjb25maWcKc3VtbWFyeTogJ0dldCBnYW1lIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgdGhlIGdhbWUgY29uZmlndXJhdGlvbiBpbmNsdWRpbmcgZGVmYXVsdCBlbnRpdHkgc3RhdHMgZm9yIHdhcmVob3VzZXMgYW5kIGNvbnRhaW5lcnMsIGFuZCB0aGUgZnVsbCBpdGVtIGRlZmluaXRpb25zIHRhYmxlLgCwctnlqbJiC2dldGVudGl0aWVzpAItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXRpZXMKc3VtbWFyeTogJ0dldCBhbGwgZW50aXRpZXMgZm9yIGEgcGxheWVyJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIGZ1bGwgZW50aXR5IGluZm8gZm9yIGFsbCBlbnRpdGllcyBvd25lZCBieSBhIHBsYXllci4gT3B0aW9uYWxseSBmaWx0ZXIgYnkgZW50aXR5IHR5cGUuAADw2eWpsmIJZ2V0ZW50aXR5ogItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0ZW50aXR5CnN1bW1hcnk6ICdHZXQgZW50aXR5IHN0YXRlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZXR1cm5zIHRoZSBjdXJyZW50IHN0YXRlIG9mIGFuIGVudGl0eSBpbmNsdWRpbmcgaWRlbnRpdHksIGNhcmdvLCBzY2hlZHVsZSBzdGF0ZSwgYW5kIHR5cGUtc3BlY2lmaWMgZmllbGRzLgBMNkmq7LJiC2dldGl0ZW1kYXRh3AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbWRhdGEKc3VtbWFyeTogJ0dldCBmdWxsIGl0ZW0gY2F0YWxvZycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIGNvbXBsZXRlIGl0ZW0gY2F0YWxvZyBhcyB0aGUgY29udHJhY3Qgc2VlcyBpdCwgaW5jbHVkaW5nIHR5cGUsIHN1YnR5cGUsIHRpZXIsIG1hc3MsIGFuZCBvdGhlciBzdGF0aWMgbWV0YWRhdGEuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgYW5kIGNsaWVudHMgdG8gbWlycm9yIHRoZSBjb250cmFjdCdzIGl0ZW0gZGVmaW5pdGlvbnMuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAAFiq7LJiCGdldGl0ZW1zmgItLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0aXRlbXMKc3VtbWFyeTogJ0dldCBhbGwgYXZhaWxhYmxlIGl0ZW1zJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGFjdGlvbiByZXR1cm5zIGEgbGlzdCBvZiBhbGwgaXRlbXMgaW4gdGhlIGdhbWUgaW5jbHVkaW5nIHRoZWlyIGlkLCBiYXNlIHByaWNlLCBhbmQgbWFzcy4AJnXZIBqzYgtnZXRsb2NhdGlvbuICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2F0aW9uCnN1bW1hcnk6ICdHZXQgbG9jYXRpb24gaW5mb3JtYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgaW5mb3JtYXRpb24gYWJvdXQgYSBsb2NhdGlvbiBpbmNsdWRpbmcgd2hldGhlciBhIHN5c3RlbSBleGlzdHMsIGFuZCBmb3IgZWFjaCBpdGVtOiBwcmljZSwgc3VwcGx5LCByYXJpdHkgbXVsdGlwbGllciwgYW5kIGxvY2F0aW9uIG11bHRpcGxpZXIuAIDJJiEas2IKZ2V0bG9jZGF0Yf4CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldGxvY2RhdGEKc3VtbWFyeTogJ0dldCBkZXJpdmVkIGxvY2F0aW9uIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgZGVyaXZlZCBsb2NhdGlvbiBkYXRhIGluY2x1ZGluZyBzdGF0aWMgcHJvcGVydGllcyAodHlwZSwgZGlmZmljdWx0eSwgc2VlZHMpIGZyb20gdGhlIGdhbWUgc2VlZCBhbmQgZXBvY2gtc3BlY2lmaWMgcHJvcGVydGllcyAoYWN0aXZlLCBzZWVkcykgZnJvbSB0aGUgY3VycmVudCBlcG9jaCBzZWVkLgAAVlEnKrNiCmdldG1vZHVsZXO0Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRtb2R1bGVzCnN1bW1hcnk6ICdHZXQgYWxsIG1vZHVsZSBpdGVtcycKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBpcyBhIHJlYWQtb25seSBxdWVyeSB0aGF0IHJldHVybnMgdGhlIHN1YnNldCBvZiBpdGVtcyBjbGFzc2lmaWVkIGFzIG1vZHVsZXMsIGluY2x1ZGluZyBlYWNoIG1vZHVsZSdzIGlkLCBtYXNzLCBzdWJ0eXBlLCBhbmQgdGllci4gVXNlZCBieSBvZmYtY2hhaW4gdG9vbGluZyB0byBlbnVtZXJhdGUgaW5zdGFsbGFibGUgZXF1aXBtZW50LiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAPDnGjWzYglnZXRuZWFyYnneAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRuZWFyYnkKc3VtbWFyeTogJ0dldCBuZWFyYnkgcmVhY2hhYmxlIHN5c3RlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgbmVhcmJ5IHN5c3RlbXMgcmVhY2hhYmxlIGJ5IGFuIGVudGl0eSBmcm9tIGl0cyBwcm9qZWN0ZWQgbG9jYXRpb24uIFJldHVybnMgY3VycmVudCBzdGF0ZSAod2l0aCBjb21wbGV0ZWQgdGFza3MgcmVzb2x2ZWQpLCBwcm9qZWN0ZWQgc3RhdGUgKGFmdGVyIGFsbCBzY2hlZHVsZWQgdGFza3MpLCBhbmQgYSBsaXN0IG9mIHJlYWNoYWJsZSBzeXN0ZW1zIHdpdGggZGlzdGFuY2UsIGVuZXJneSBjb3N0LCBmbGlnaHQgdGltZSwgYW5kIG1hcmtldCBpbmZvcm1hdGlvbi4AAF3T5TWzYgpnZXRuZnRpbmZvpAQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0bmZ0aW5mbwpzdW1tYXJ5OiAnR2V0IE5GVCBzY2hlbWEgYW5kIHRlbXBsYXRlIGNvbmZpZ3VyYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBmdWxsIHNldCBvZiBBdG9taWNBc3NldHMgc2NoZW1hcyBhbmQgdGVtcGxhdGVzIHRoZSBnYW1lIGNvbnRyYWN0IGV4cGVjdHMsIHBsdXMgdGhlIGN1cnJlbnQgYGl0ZW1faWQg4oaSICh0ZW1wbGF0ZV9pZCwgc2NoZW1hX25hbWUpYCBtYXBwaW5nIHN0b3JlZCBpbiB0aGUgYG5mdGNvbmZpZ2AgdGFibGUuIFVzZWQgYnkgb2ZmLWNoYWluIHRvb2xpbmcgdG8gc3luYyBhdG9taWNhc3NldHMgc3RhdGUgd2l0aCB0aGUgY29udHJhY3QuIENhbGxpbmcgdGhpcyBhY3Rpb24gZG9lcyBub3QgbW9kaWZ5IGNvbnRyYWN0IHN0YXRlLgAAuMqbWLNiCWdldHBsYXllcv0CLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHBsYXllcgpzdW1tYXJ5OiAnR2V0IHBsYXllciBpbmZvcm1hdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKVGhpcyBhY3Rpb24gcmV0dXJucyBpbmZvcm1hdGlvbiBhYm91dCBhIHBsYXllciBpbmNsdWRpbmcgYmFsYW5jZSwgZGVidCwgbmV0d29ydGgsIGVudGl0eSBjb3VudHMsIGFuZCBwcmljaW5nIGZvciBuZXh0IHB1cmNoYXNlcy4gUmV0dXJucyBpc19wbGF5ZXI9ZmFsc2UgaWYgdGhlIGFjY291bnQgaGFzIG5vdCBqb2luZWQgdGhlIGdhbWUuAABQ1SF1s2IJZ2V0cmVjaXBl2gMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlCnN1bW1hcnk6ICdHZXQgYSBzaW5nbGUgY3JhZnRpbmcgcmVjaXBlJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyB0aGUgcmVjaXBlIHdob3NlIG91dHB1dCBtYXRjaGVzIHRoZSBnaXZlbiBpdGVtIGlkLCBpbmNsdWRpbmcgaXRzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGRpc3BsYXkgY3JhZnRpbmcgcmVxdWlyZW1lbnRzLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS4AAFbVIXWzYgpnZXRyZWNpcGVz4AMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ2V0cmVjaXBlcwpzdW1tYXJ5OiAnTGlzdCBjcmFmdGluZyByZWNpcGVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUaGlzIGlzIGEgcmVhZC1vbmx5IHF1ZXJ5IHRoYXQgcmV0dXJucyBhIHBhZ2luYXRlZCBsaXN0IG9mIGNyYWZ0aW5nIHJlY2lwZXMgc3RhcnRpbmcgYXQgdGhlIHByb3ZpZGVkIGxvd2VyIGJvdW5kIG91dHB1dCBpdGVtIGlkLCB1cCB0byB0aGUgc3BlY2lmaWVkIGxpbWl0LiBFYWNoIGVudHJ5IGluY2x1ZGVzIGlucHV0cywgYmxlbmQgd2VpZ2h0cywgc3RhdCBzbG90cywgYW5kIHJlc29sdmVkIGl0ZW0gbWFzcyBpbmZvLiBDYWxsaW5nIHRoaXMgYWN0aW9uIGRvZXMgbm90IG1vZGlmeSBjb250cmFjdCBzdGF0ZS6AFbqaYnWzYgxnZXRyZXNvdXJjZXO7Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRyZXNvdXJjZXMKc3VtbWFyeTogJ0dldCBhbGwgcmVzb3VyY2UgaXRlbXMnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgaXMgYSByZWFkLW9ubHkgcXVlcnkgdGhhdCByZXR1cm5zIHRoZSBzdWJzZXQgb2YgaXRlbXMgY2xhc3NpZmllZCBhcyByZXNvdXJjZXMsIGluY2x1ZGluZyBlYWNoIHJlc291cmNlJ3MgaWQsIG1hc3MsIHN1YnR5cGUsIGFuZCB0aWVyLiBVc2VkIGJ5IG9mZi1jaGFpbiB0b29saW5nIHRvIGVudW1lcmF0ZSBnYXRoZXJhYmxlIG1hdGVyaWFscy4gQ2FsbGluZyB0aGlzIGFjdGlvbiBkb2VzIG5vdCBtb2RpZnkgY29udHJhY3Qgc3RhdGUuAIDU2dyMs2IKZ2V0c3RyYXR1bdICLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGdldHN0cmF0dW0Kc3VtbWFyeTogJ0dldCByZXNvdXJjZSBzdHJhdHVtIGRhdGEnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClRoaXMgYWN0aW9uIHJldHVybnMgcmVzb3VyY2Ugc3RyYXR1bSBkYXRhIGZvciBhIHNwZWNpZmljIGRlcHRoIGxheWVyIGF0IGEgY29vcmRpbmF0ZSwgaW5jbHVkaW5nIHRoZSBzdHJhdHVtIHNlZWQgaW5mbyBhbmQgZGVyaXZlZCByZXNvdXJjZSBzdGF0cy6AlbtGSo2zYgxnZXRzdW1tYXJpZXPoAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBnZXRzdW1tYXJpZXMKc3VtbWFyeTogJ0dldCBlbnRpdHkgc3VtbWFyaWVzIGZvciBhIHBsYXllcicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmV0dXJucyBsaWdodHdlaWdodCBzdW1tYXJpZXMgb2YgYWxsIGVudGl0aWVzIG93bmVkIGJ5IGEgcGxheWVyIGluY2x1ZGluZyB0eXBlLCBpZCwgb3duZXIsIG5hbWUsIGxvY2F0aW9uLCBhbmQgaWRsZSBzdGF0dXMuIE9wdGlvbmFsbHkgZmlsdGVyIGJ5IGVudGl0eSB0eXBlLgCi2ubmqullC2dyb3VwdHJhdmVsmgQtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogZ3JvdXB0cmF2ZWwKc3VtbWFyeTogJ01vdmUgbXVsdGlwbGUgZW50aXRpZXMgdG9nZXRoZXInCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluaXRpYXRlIGdyb3VwIHRyYXZlbCBmb3IgbXVsdGlwbGUgZW50aXRpZXMgdG8gYSBkZXN0aW5hdGlvbi4gQWxsIGVudGl0aWVzIG11c3QgYmUgYXQgdGhlIHNhbWUgbG9jYXRpb24gYW5kIG93bmVkIGJ5IHRoZSBjYWxsZXIuIEF0IGxlYXN0IG9uZSBlbnRpdHkgd2l0aCBlbmdpbmVzIGlzIHJlcXVpcmVkIHRvIHByb3ZpZGUgdGhydXN0LiBGbGlnaHQgZHVyYXRpb24gaXMgY2FsY3VsYXRlZCBmcm9tIGNvbWJpbmVkIHRocnVzdCBhbmQgdG90YWwgbWFzcyBvZiBhbGwgZW50aXRpZXMuIENyZWF0ZXMgYW4gZW50aXR5Z3JvdXAgZm9yIGF0b21pYyByZXNvbHV0aW9uIGFuZCBjYW5jZWxsYXRpb24uAAAAAADQsGkEaGFzaPgBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IGhhc2gKc3VtbWFyeTogJ0NhbGN1bGF0ZSBzaGEyNTYgaGFzaCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQ2FsY3VsYXRlcyB0aGUgc2hhMjU2IGhhc2ggb2YgYSBzdHJpbmcgYmFzZWQgdXNpbmcgdGhlIGdhbWUgc2VlZC4AAABAhNKwaQdoYXNoNTEy+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogaGFzaDUxMgpzdW1tYXJ5OiAnQ2FsY3VsYXRlIHNoYTUxMiBoYXNoJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpDYWxjdWxhdGVzIHRoZSBzaGE1MTIgaGFzaCBvZiBhIHN0cmluZyBiYXNlZCB1c2luZyB0aGUgZ2FtZSBzZWVkLgAAAAAAkN10BGluaXT6AS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBpbml0CnN1bW1hcnk6ICdJbml0aWFsaXplIGdhbWUgc2VlZCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhbGl6ZSBhIHRoZSBnYW1lcyBzZWVkIGFuZCBzZWVkIHZhbHVlcyB0byBib290c3RyYXAgZ2FtZSBzdGF0ZS4AAAAAADAdfQRqb2luxAEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogam9pbgpzdW1tYXJ5OiAnSm9pbiBhIGdhbWUnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkpvaW4gYSBnYW1lIG9mIFNoaXBsb2FkAAAAAPjlMp0Gbm90aWZ5igMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogbm90aWZ5CnN1bW1hcnk6ICdUYXNrIGxpZmVjeWNsZSBub3RpZmljYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkludGVybmFsIGFjdGlvbiB0aGF0IG5vdGlmaWVzIGVudGl0eSBvd25lcnMgb2YgdGFzayBsaWZlY3ljbGUgZXZlbnRzIChyZXNvbHZlZCwgY2FuY2VsbGVkKS4gQ2FsbGVkIGlubGluZSB3aGVuIHRhc2tzIGNoYW5nZSBzdGF0ZS4gVXNlcyByZXF1aXJlX3JlY2lwaWVudCB0byBlbmFibGUgb2ZmLWNoYWluIG1vbml0b3JpbmcgdmlhIGFjdGlvbiB0cmFjZXMuAAAAil3TkLoIcmVjaGFyZ2XNAi0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZWNoYXJnZQpzdW1tYXJ5OiAnUmVjaGFyZ2Ugc2hpcCBlbmVyZ3knCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClNjaGVkdWxlIGEgcmVjaGFyZ2UgdGFzayBmb3IgYW4gZW50aXR5IHRvIHJlc3RvcmUgZW5lcmd5IHRvIGZ1bGwgY2FwYWNpdHkuIFRoZSByZWNoYXJnZSBkdXJhdGlvbiBkZXBlbmRzIG9uIGN1cnJlbnQgZW5lcmd5IGxldmVsIGFuZCByZWNoYXJnZSByYXRlLgAAAEDtSLG6B3Jlc29sdmXQAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiByZXNvbHZlCnN1bW1hcnk6ICdDb21wbGV0ZSBzY2hlZHVsZWQgdGFza3MnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KClJlc29sdmUgY29tcGxldGVkIHRhc2tzIGluIGFuIGVudGl0eSdzIHNjaGVkdWxlLCBhcHBseWluZyB0aGVpciBlZmZlY3RzIChyZWNoYXJnZSBlbmVyZ3ksIHVwZGF0ZSBsb2NhdGlvbiwgbG9hZC91bmxvYWQgY2FyZ28pLiBJZiBjb3VudCBpcyBzcGVjaWZpZWQsIHJlc29sdmUgZXhhY3RseSB0aGF0IG1hbnkgdGFza3M7IG90aGVyd2lzZSByZXNvbHZlIGFsbCBjb21wbGV0ZWQgdGFza3MuIEZhaWxzIGlmIGNvdW50IGV4Y2VlZHMgdGhlIG51bWJlciBvZiBjb21wbGV0ZWQgdGFza3MuAAAAKupEpbwIcm1tb2R1bGW8Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBybW1vZHVsZQpzdW1tYXJ5OiAnUmVtb3ZlIGEgbW9kdWxlIGZyb20gYSBzbG90JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpSZW1vdmUgYW4gaW5zdGFsbGVkIG1vZHVsZSBmcm9tIGEgc2xvdCBvbiBhIGxpdmUgZW50aXR5IG9yIGEgcGFja2VkIGVudGl0eSBpbiBjYXJnby4gVGhlIGVudGl0eSBtdXN0IGJlIGlkbGUgd2l0aCBubyBzY2hlZHVsZWQgdGFza3MuIFRoZSBtb2R1bGUgaXMgcmV0dXJuZWQgdG8gY2FyZ28uIEZhaWxzIGlmIHRoZSBlbnRpdHkgZG9lcyBub3QgaGF2ZSBlbm91Z2ggY2FyZ28gY2FwYWNpdHkgdG8gaG9sZCB0aGUgcmV0dXJuZWQgbW9kdWxlLgAAAGyhvKa8CHJtbmZ0Y2ZnoQMtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogcm1uZnRjZmcKc3VtbWFyeTogJ1JlbW92ZSBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKUmVtb3ZlIHRoZSBBdG9taWNBc3NldHMgdGVtcGxhdGUgbWFwcGluZyBmb3IgdGhlIHNwZWNpZmllZCBpdGVtIGlkIGZyb20gdGhlIGBuZnRjb25maWdgIHRhYmxlLiBBZnRlciByZW1vdmFsIHRoZSBpdGVtIGNhbiBubyBsb25nZXIgYmUgd3JhcHBlZCBvciB1bndyYXBwZWQgdW50aWwgYSBuZXcgbWFwcGluZyBpcyBzZXQuIFJlcXVpcmVzIGNvbnRyYWN0IGF1dGhvcml0eS4AAAAAAJCjwQRzYWx02AEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogc2FsdApzdW1tYXJ5OiAnQXBwZW5kIFNhbHQnCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkFkZCBhZGRpdGlvbmFsIHNhbHQgdG8gdGhlIG5leHQgZXBvY2ggc2VlZC4AAGAL5TWzwglzZXRuZnRjZmfEAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzZXRuZnRjZmcKc3VtbWFyeTogJ1NldCBORlQgdGVtcGxhdGUgbWFwcGluZyBmb3IgYW4gaXRlbScKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKQmluZCBhbiBpdGVtIGlkIHRvIGFuIEF0b21pY0Fzc2V0cyB0ZW1wbGF0ZSBpZCBhbmQgc2NoZW1hIG5hbWUuIFVzZWQgdG8gY29uZmlndXJlIGhvdyB0aGUgY29udHJhY3QgbWludHMgYW5kIHJlY29nbml6ZXMgTkZUcyBmb3IgYSBnaXZlbiBpdGVtLiBJbnNlcnRzIGEgbmV3IG1hcHBpbmcgaWYgb25lIGRvZXMgbm90IGV4aXN0LCBvciB1cGRhdGVzIHRoZSBleGlzdGluZyBtYXBwaW5nLiBSZXF1aXJlcyBjb250cmFjdCBhdXRob3JpdHkuAABl16DJTcUKc3Bhd25jYXJnb8UBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXduY2FyZ28Kc3VtbWFyeTogJ0RFQlVHOiBzcGF3biBjYXJnbyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AkoLI1MlNxQtzcGF3bnBhY2tlZOcBLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHNwYXducGFja2VkCnN1bW1hcnk6ICdERUJVRzogc3Bhd24gYSBwYWNrZWQgZW50aXR5IHdpdGggaW5zdGFsbGVkIG1vZHVsZXMgb24gYW4gZW50aXR5JwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tAJJKSuHJTcULc3Bhd25zZWVkZWTNAS0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiBzcGF3bnNlZWRlZApzdW1tYXJ5OiAnREVCVUc6IHNwYXduIHNlZWRlZCBjYXJnbyBvbiBhbiBlbnRpdHknCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0AAABXLTzNzQh0cmFuc2ZlcsgDLS0tCgpzcGVjX3ZlcnNpb246ICIwLjIuMCIKdGl0bGU6IHRyYW5zZmVyCnN1bW1hcnk6ICdUcmFuc2ZlciBjYXJnbyBiZXR3ZWVuIGVudGl0aWVzJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpUcmFuc2ZlciBjYXJnbyBiZXR3ZWVuIHR3byBlbnRpdGllcyBhdCB0aGUgc2FtZSBsb2NhdGlvbi4gQm90aCBlbnRpdGllcyBtdXN0IGJlIG93bmVkIGJ5IHRoZSBjYWxsZXIgYW5kIGF0IGxlYXN0IG9uZSBtdXN0IGhhdmUgbG9hZGVycy4gQ3JlYXRlcyBsb2FkIGFuZCB1bmxvYWQgdGFza3Mgb24gYm90aCBlbnRpdGllcyB3aXRoIGR1cmF0aW9uIGJhc2VkIG9uIGNvbWJpbmVkIGxvYWRlciBjYXBhY2l0eSBhbmQgWi1kaXN0YW5jZSBiZXR3ZWVuIHRoZW0uAAAAAES1zc0GdHJhdmVs+wEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogdHJhdmVsCnN1bW1hcnk6ICdNb3ZlIGEgc2hpcCcKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQoKSW5pdGlhdGUgdHJhdmVsIG9mIGFuIGVudGl0eSBmcm9tIGl0cyBjdXJyZW50IGxvY2F0aW9uIHRvIGEgbmV3IGRlc3RpbmF0aW9uLgAAAAAAUK/hBHdhcnCfAy0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3YXJwCnN1bW1hcnk6ICdXYXJwIHRvIGEgZGVzdGluYXRpb24nCmljb246IGh0dHBzOi8vYXZhdGFycy5naXRodWJ1c2VyY29udGVudC5jb20vdS8xNDcyOTI4NjE/cz00MDAmdT0zYjFhZjY2ZTkwZGQ4NTFmNGQ3YzA5NmVkNmEyZmJiNGI5ZTE5MGRhCgotLS0KCkluc3RhbnRseSB0ZWxlcG9ydCBhbiBlbnRpdHkgdG8gYSBkZXN0aW5hdGlvbiBzeXN0ZW0uIFJlcXVpcmVzIHdhcnAgY2FwYWJpbGl0eSwgZnVsbCBlbmVyZ3ksIGVtcHR5IGNhcmdvLCBhbmQgYW4gZW1wdHkgc2NoZWR1bGUuIFRoZSBkZXN0aW5hdGlvbiBtdXN0IGJlIGEgdmFsaWQgc3lzdGVtIHdpdGhpbiB3YXJwIHJhbmdlLiBSZXNvbHZlcyBpbW1lZGlhdGVseSBhcyBhIHplcm8tZHVyYXRpb24gdGFzay4AAAAAAKCq4wR3aXBlsgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZQpzdW1tYXJ5OiAnREVCVUc6IHdpcGUgYWN0aW9uJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0toNBU2iqsquMMd2lwZXNlcXVlbmNlwgEtLS0KCnNwZWNfdmVyc2lvbjogIjAuMi4wIgp0aXRsZTogd2lwZXNlcXVlbmNlCnN1bW1hcnk6ICdERUJVRzogd2lwZXNlcXVlbmNlIGFjdGlvbicKaWNvbjogaHR0cHM6Ly9hdmF0YXJzLmdpdGh1YnVzZXJjb250ZW50LmNvbS91LzE0NzI5Mjg2MT9zPTQwMCZ1PTNiMWFmNjZlOTBkZDg1MWY0ZDdjMDk2ZWQ2YTJmYmI0YjllMTkwZGEKCi0tLQAAAAAAUM3lBHdyYXD+Ay0tLQoKc3BlY192ZXJzaW9uOiAiMC4yLjAiCnRpdGxlOiB3cmFwCnN1bW1hcnk6ICdXcmFwIGNhcmdvIGludG8gYW4gTkZUJwppY29uOiBodHRwczovL2F2YXRhcnMuZ2l0aHVidXNlcmNvbnRlbnQuY29tL3UvMTQ3MjkyODYxP3M9NDAwJnU9M2IxYWY2NmU5MGRkODUxZjRkN2MwOTZlZDZhMmZiYjRiOWUxOTBkYQoKLS0tCgpXcmFwIGEgcXVhbnRpdHkgb2YgY2FyZ28gZnJvbSBhbiBlbnRpdHkgaW50byBhbiBBdG9taWNBc3NldHMgTkZUIG1pbnRlZCB0byB0aGUgc3BlY2lmaWVkIG93bmVyLiBUaGUgZW50aXR5IG11c3QgYmUgYXQgYSBuZXh1cywgaGF2ZSBsb2FkZXJzLCBhbmQgY29udGFpbiBlbm91Z2ggb2YgdGhlIHJlcXVlc3RlZCBjYXJnby4gU2NoZWR1bGVzIGEgd3JhcCB0YXNrIHRoYXQsIG9uIHJlc29sdXRpb24sIHJlbW92ZXMgdGhlIGNhcmdvIGZyb20gdGhlIGVudGl0eSBhbmQgbWludHMgdGhlIE5GVCB1c2luZyB0aGUgdGVtcGxhdGUgY29uZmlndXJlZCBmb3IgdGhhdCBpdGVtIGlkLg0AAAAAAMquQQNpNjQAAAljYXJnb19yb3cAALhqOpMnRQNpNjQAAA1jb250YWluZXJfcm93AKqml/ns8lQDaTY0AAAPZW50aXR5Z3JvdXBfcm93AAAAk7psEI0DaTY0AAAMbG9jYXRpb25fcm93AAAAAACsu5oDaTY0AAAJbmV4dXNfcm93AABgbk2K8poDaTY0AAANbmZ0Y29uZmlnX3JvdwAAAABc5U2sA2k2NAAACnBsYXllcl9yb3cAAABA7auwugNpNjQAAAtyZXNlcnZlX3JvdwAAAApNpa3CA2k2NAAADHNlcXVlbmNlX3JvdwAAAAAAUF3DA2k2NAAACHNoaXBfcm93AAAAAACVTcYDaTY0AAAJc3RhdGVfcm93AAAAAACsqs8DaTY0AAAJdHlwZXNfcm93AABQWNOmruEDaTY0AAANd2FyZWhvdXNlX3JvdwERU2hpcGxvYWQgKFNlcnZlcikRU2hpcGxvYWQgKFNlcnZlcikAAAAeAAAAAESFpkEOY2FuY2VsX3Jlc3VsdHMAAAAAgLzMRQx0YXNrX3Jlc3VsdHMAAAAAeBqrSgx0YXNrX3Jlc3VsdHMAgM8uT4WwSgZzdHJpbmcAAAAAXNWyYQx0YXNrX3Jlc3VsdHMAAGBuTYqyYgtnYW1lX2NvbmZpZwCwctnlqbJiDWVudGl0eV9pbmZvW10AAPDZ5amyYgtlbnRpdHlfaW5mbwBMNkmq7LJiD2l0ZW1kYXRhX3Jlc3VsdAAAAFiq7LJiCml0ZW1zX2luZm8AJnXZIBqzYg1sb2NhdGlvbl9pbmZvAIDJJiEas2IQbG9jYXRpb25fZGVyaXZlZAAAVlEnKrNiDm1vZHVsZXNfcmVzdWx0AADw5xo1s2ILbmVhcmJ5X2luZm8AAF3T5TWzYg5uZnRpbmZvX3Jlc3VsdAAAuMqbWLNiC3BsYXllcl9pbmZvAABQ1SF1s2IOcmVjaXBlc19yZXN1bHQAAFbVIXWzYg5yZWNpcGVzX3Jlc3VsdIAVuppidbNiEHJlc291cmNlc19yZXN1bHQAgNTZ3IyzYgxzdHJhdHVtX2RhdGGAlbtGSo2zYhBlbnRpdHlfc3VtbWFyeVtdAKLa5uaq6WUMdGFza19yZXN1bHRzAAAAAADQsGkLY2hlY2tzdW0yNTYAAABAhNKwaQtjaGVja3N1bTUxMgAAAIpd05C6DHRhc2tfcmVzdWx0cwAAAEDtSLG6D3Jlc29sdmVfcmVzdWx0cwAAAFctPM3NDHRhc2tfcmVzdWx0cwAAAABEtc3NDHRhc2tfcmVzdWx0cwAAAAAAUK/hDHRhc2tfcmVzdWx0cwAAAAAAUM3lDHRhc2tfcmVzdWx0cw==');
|
|
217
217
|
const abi = antelope.ABI.from(abiBlob);
|
|
218
218
|
var Types;
|
|
219
219
|
(function (Types) {
|
|
@@ -265,25 +265,25 @@ var Types;
|
|
|
265
265
|
antelope.Struct.type('advance')
|
|
266
266
|
], advance);
|
|
267
267
|
Types.advance = advance;
|
|
268
|
-
let
|
|
268
|
+
let packed_module = class packed_module extends antelope.Struct {
|
|
269
269
|
};
|
|
270
270
|
tslib.__decorate([
|
|
271
271
|
antelope.Struct.field(antelope.UInt16)
|
|
272
|
-
],
|
|
272
|
+
], packed_module.prototype, "item_id", void 0);
|
|
273
273
|
tslib.__decorate([
|
|
274
274
|
antelope.Struct.field(antelope.UInt64)
|
|
275
|
-
],
|
|
276
|
-
|
|
277
|
-
antelope.Struct.type('
|
|
278
|
-
],
|
|
279
|
-
Types.
|
|
275
|
+
], packed_module.prototype, "stats", void 0);
|
|
276
|
+
packed_module = tslib.__decorate([
|
|
277
|
+
antelope.Struct.type('packed_module')
|
|
278
|
+
], packed_module);
|
|
279
|
+
Types.packed_module = packed_module;
|
|
280
280
|
let module_entry = class module_entry extends antelope.Struct {
|
|
281
281
|
};
|
|
282
282
|
tslib.__decorate([
|
|
283
283
|
antelope.Struct.field(antelope.UInt8)
|
|
284
284
|
], module_entry.prototype, "type", void 0);
|
|
285
285
|
tslib.__decorate([
|
|
286
|
-
antelope.Struct.field(
|
|
286
|
+
antelope.Struct.field(packed_module, { optional: true })
|
|
287
287
|
], module_entry.prototype, "installed", void 0);
|
|
288
288
|
module_entry = tslib.__decorate([
|
|
289
289
|
antelope.Struct.type('module_entry')
|
|
@@ -298,8 +298,8 @@ var Types;
|
|
|
298
298
|
antelope.Struct.field(antelope.UInt32)
|
|
299
299
|
], cargo_item.prototype, "quantity", void 0);
|
|
300
300
|
tslib.__decorate([
|
|
301
|
-
antelope.Struct.field(antelope.UInt64
|
|
302
|
-
], cargo_item.prototype, "
|
|
301
|
+
antelope.Struct.field(antelope.UInt64)
|
|
302
|
+
], cargo_item.prototype, "stats", void 0);
|
|
303
303
|
tslib.__decorate([
|
|
304
304
|
antelope.Struct.field(module_entry, { array: true })
|
|
305
305
|
], cargo_item.prototype, "modules", void 0);
|
|
@@ -389,7 +389,7 @@ var Types;
|
|
|
389
389
|
], cargo_row.prototype, "quantity", void 0);
|
|
390
390
|
tslib.__decorate([
|
|
391
391
|
antelope.Struct.field(antelope.UInt64)
|
|
392
|
-
], cargo_row.prototype, "
|
|
392
|
+
], cargo_row.prototype, "stats", void 0);
|
|
393
393
|
tslib.__decorate([
|
|
394
394
|
antelope.Struct.field(module_entry, { array: true })
|
|
395
395
|
], cargo_row.prototype, "modules", void 0);
|
|
@@ -653,7 +653,7 @@ var Types;
|
|
|
653
653
|
], deploy.prototype, "packed_item_id", void 0);
|
|
654
654
|
tslib.__decorate([
|
|
655
655
|
antelope.Struct.field(antelope.UInt64)
|
|
656
|
-
], deploy.prototype, "
|
|
656
|
+
], deploy.prototype, "stats", void 0);
|
|
657
657
|
tslib.__decorate([
|
|
658
658
|
antelope.Struct.field('string')
|
|
659
659
|
], deploy.prototype, "entity_name", void 0);
|
|
@@ -668,13 +668,13 @@ var Types;
|
|
|
668
668
|
], descentity.prototype, "item_id", void 0);
|
|
669
669
|
tslib.__decorate([
|
|
670
670
|
antelope.Struct.field(antelope.UInt64)
|
|
671
|
-
], descentity.prototype, "
|
|
671
|
+
], descentity.prototype, "hull_stats", void 0);
|
|
672
672
|
tslib.__decorate([
|
|
673
673
|
antelope.Struct.field(antelope.UInt16, { array: true })
|
|
674
674
|
], descentity.prototype, "module_items", void 0);
|
|
675
675
|
tslib.__decorate([
|
|
676
676
|
antelope.Struct.field(antelope.UInt64, { array: true })
|
|
677
|
-
], descentity.prototype, "
|
|
677
|
+
], descentity.prototype, "module_stats", void 0);
|
|
678
678
|
descentity = tslib.__decorate([
|
|
679
679
|
antelope.Struct.type('descentity')
|
|
680
680
|
], descentity);
|
|
@@ -922,11 +922,11 @@ var Types;
|
|
|
922
922
|
let gather = class gather extends antelope.Struct {
|
|
923
923
|
};
|
|
924
924
|
tslib.__decorate([
|
|
925
|
-
antelope.Struct.field(
|
|
926
|
-
], gather.prototype, "
|
|
925
|
+
antelope.Struct.field(entity_ref)
|
|
926
|
+
], gather.prototype, "source", void 0);
|
|
927
927
|
tslib.__decorate([
|
|
928
|
-
antelope.Struct.field(
|
|
929
|
-
], gather.prototype, "
|
|
928
|
+
antelope.Struct.field(entity_ref)
|
|
929
|
+
], gather.prototype, "destination", void 0);
|
|
930
930
|
tslib.__decorate([
|
|
931
931
|
antelope.Struct.field(antelope.UInt16)
|
|
932
932
|
], gather.prototype, "stratum", void 0);
|
|
@@ -1742,7 +1742,7 @@ var Types;
|
|
|
1742
1742
|
], ship_row.prototype, "name", void 0);
|
|
1743
1743
|
tslib.__decorate([
|
|
1744
1744
|
antelope.Struct.field(antelope.UInt64)
|
|
1745
|
-
], ship_row.prototype, "
|
|
1745
|
+
], ship_row.prototype, "stats", void 0);
|
|
1746
1746
|
tslib.__decorate([
|
|
1747
1747
|
antelope.Struct.field(coordinates)
|
|
1748
1748
|
], ship_row.prototype, "coordinates", void 0);
|
|
@@ -1814,9 +1814,9 @@ var Types;
|
|
|
1814
1814
|
], spawnpacked.prototype, "item_id", void 0);
|
|
1815
1815
|
tslib.__decorate([
|
|
1816
1816
|
antelope.Struct.field(antelope.UInt64)
|
|
1817
|
-
], spawnpacked.prototype, "
|
|
1817
|
+
], spawnpacked.prototype, "hull_stats", void 0);
|
|
1818
1818
|
tslib.__decorate([
|
|
1819
|
-
antelope.Struct.field(
|
|
1819
|
+
antelope.Struct.field(packed_module, { array: true })
|
|
1820
1820
|
], spawnpacked.prototype, "installed", void 0);
|
|
1821
1821
|
spawnpacked = tslib.__decorate([
|
|
1822
1822
|
antelope.Struct.type('spawnpacked')
|
|
@@ -1835,7 +1835,7 @@ var Types;
|
|
|
1835
1835
|
], spawnseeded.prototype, "quantity", void 0);
|
|
1836
1836
|
tslib.__decorate([
|
|
1837
1837
|
antelope.Struct.field(antelope.UInt64)
|
|
1838
|
-
], spawnseeded.prototype, "
|
|
1838
|
+
], spawnseeded.prototype, "stats", void 0);
|
|
1839
1839
|
spawnseeded = tslib.__decorate([
|
|
1840
1840
|
antelope.Struct.type('spawnseeded')
|
|
1841
1841
|
], spawnseeded);
|
|
@@ -1920,6 +1920,9 @@ var Types;
|
|
|
1920
1920
|
tslib.__decorate([
|
|
1921
1921
|
antelope.Struct.field(antelope.UInt16)
|
|
1922
1922
|
], transfer.prototype, "item_id", void 0);
|
|
1923
|
+
tslib.__decorate([
|
|
1924
|
+
antelope.Struct.field(antelope.UInt64)
|
|
1925
|
+
], transfer.prototype, "stats", void 0);
|
|
1923
1926
|
tslib.__decorate([
|
|
1924
1927
|
antelope.Struct.field(antelope.UInt32)
|
|
1925
1928
|
], transfer.prototype, "quantity", void 0);
|
|
@@ -1976,7 +1979,7 @@ var Types;
|
|
|
1976
1979
|
], warehouse_row.prototype, "name", void 0);
|
|
1977
1980
|
tslib.__decorate([
|
|
1978
1981
|
antelope.Struct.field(antelope.UInt64)
|
|
1979
|
-
], warehouse_row.prototype, "
|
|
1982
|
+
], warehouse_row.prototype, "stats", void 0);
|
|
1980
1983
|
tslib.__decorate([
|
|
1981
1984
|
antelope.Struct.field(coordinates)
|
|
1982
1985
|
], warehouse_row.prototype, "coordinates", void 0);
|
|
@@ -5357,13 +5360,13 @@ const moduleRecipes = [
|
|
|
5357
5360
|
{ itemId: ITEM_FOCUSING_ARRAY, quantity: 3 },
|
|
5358
5361
|
],
|
|
5359
5362
|
stats: [
|
|
5360
|
-
{ key: '
|
|
5363
|
+
{ key: 'resonance', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'resonance' },
|
|
5361
5364
|
{
|
|
5362
|
-
key: '
|
|
5365
|
+
key: 'conductivity',
|
|
5363
5366
|
sourceComponentId: ITEM_FOCUSING_ARRAY,
|
|
5364
5367
|
sourceStatKey: 'conductivity',
|
|
5365
5368
|
},
|
|
5366
|
-
{ key: '
|
|
5369
|
+
{ key: 'clarity', sourceComponentId: ITEM_POWER_CELL, sourceStatKey: 'clarity' },
|
|
5367
5370
|
{ key: 'ductility', sourceComponentId: ITEM_FOCUSING_ARRAY, sourceStatKey: 'ductility' },
|
|
5368
5371
|
],
|
|
5369
5372
|
},
|
|
@@ -5676,40 +5679,40 @@ function deriveResourceStats(seed) {
|
|
|
5676
5679
|
}
|
|
5677
5680
|
|
|
5678
5681
|
function encodeStats(values) {
|
|
5679
|
-
let
|
|
5682
|
+
let stats = 0n;
|
|
5680
5683
|
for (let i = 0; i < values.length && i < 6; i++) {
|
|
5681
|
-
|
|
5684
|
+
stats |= BigInt(values[i] & 0x3ff) << BigInt(i * 10);
|
|
5682
5685
|
}
|
|
5683
|
-
return
|
|
5686
|
+
return stats;
|
|
5684
5687
|
}
|
|
5685
|
-
function decodeStat(
|
|
5686
|
-
return Number((
|
|
5688
|
+
function decodeStat(stats, index) {
|
|
5689
|
+
return Number((stats >> BigInt(index * 10)) & 0x3ffn);
|
|
5687
5690
|
}
|
|
5688
|
-
function decodeStats(
|
|
5689
|
-
const
|
|
5691
|
+
function decodeStats(stats, count) {
|
|
5692
|
+
const result = [];
|
|
5690
5693
|
for (let i = 0; i < count; i++) {
|
|
5691
|
-
|
|
5694
|
+
result.push(decodeStat(stats, i));
|
|
5692
5695
|
}
|
|
5693
|
-
return
|
|
5696
|
+
return result;
|
|
5694
5697
|
}
|
|
5695
|
-
function mapStatsToKeys(
|
|
5696
|
-
const values = decodeStats(
|
|
5698
|
+
function mapStatsToKeys(stats, statDefs) {
|
|
5699
|
+
const values = decodeStats(stats, statDefs.length);
|
|
5697
5700
|
const result = {};
|
|
5698
5701
|
for (let i = 0; i < statDefs.length; i++) {
|
|
5699
5702
|
result[statDefs[i].key] = values[i];
|
|
5700
5703
|
}
|
|
5701
5704
|
return result;
|
|
5702
5705
|
}
|
|
5703
|
-
function decodeCraftedItemStats(itemId,
|
|
5706
|
+
function decodeCraftedItemStats(itemId, stats) {
|
|
5704
5707
|
const comp = getComponentById(itemId);
|
|
5705
5708
|
if (comp)
|
|
5706
|
-
return mapStatsToKeys(
|
|
5709
|
+
return mapStatsToKeys(stats, comp.stats);
|
|
5707
5710
|
const entityRecipe = entityRecipes.find((r) => r.packedItemId === itemId);
|
|
5708
5711
|
if (entityRecipe)
|
|
5709
|
-
return mapStatsToKeys(
|
|
5712
|
+
return mapStatsToKeys(stats, entityRecipe.stats);
|
|
5710
5713
|
const moduleRecipe = moduleRecipes.find((r) => r.itemId === itemId);
|
|
5711
5714
|
if (moduleRecipe)
|
|
5712
|
-
return mapStatsToKeys(
|
|
5715
|
+
return mapStatsToKeys(stats, moduleRecipe.stats);
|
|
5713
5716
|
return {};
|
|
5714
5717
|
}
|
|
5715
5718
|
function blendStacks(stacks, statKey) {
|
|
@@ -5762,12 +5765,12 @@ function computeEntityStats(entityRecipeId, componentStacks) {
|
|
|
5762
5765
|
return { key: stat.key, value: Math.max(1, Math.min(999, value)) };
|
|
5763
5766
|
});
|
|
5764
5767
|
}
|
|
5765
|
-
function decodeStackStats(itemId,
|
|
5768
|
+
function decodeStackStats(itemId, stats) {
|
|
5766
5769
|
if (itemId >= 10000) {
|
|
5767
|
-
return decodeCraftedItemStats(itemId, BigInt(
|
|
5770
|
+
return decodeCraftedItemStats(itemId, BigInt(stats.toString()));
|
|
5768
5771
|
}
|
|
5769
|
-
const
|
|
5770
|
-
return { stat1:
|
|
5772
|
+
const s = BigInt(stats.toString());
|
|
5773
|
+
return { stat1: decodeStat(s, 0), stat2: decodeStat(s, 1), stat3: decodeStat(s, 2) };
|
|
5771
5774
|
}
|
|
5772
5775
|
const categoryItemMass = {
|
|
5773
5776
|
metal: 30000,
|
|
@@ -5821,25 +5824,24 @@ function blendCrossGroup(sources) {
|
|
|
5821
5824
|
function blendCargoStacks(itemId, stacks) {
|
|
5822
5825
|
const decoded = stacks.map((s) => ({
|
|
5823
5826
|
quantity: s.quantity,
|
|
5824
|
-
stats: decodeStackStats(itemId, s.
|
|
5827
|
+
stats: decodeStackStats(itemId, s.stats),
|
|
5825
5828
|
}));
|
|
5826
5829
|
const allKeys = Object.keys(decoded[0]?.stats ?? {});
|
|
5827
5830
|
const blended = allKeys.map((key) => Math.max(1, Math.min(999, blendStacks(decoded, key))));
|
|
5828
5831
|
return antelope.UInt64.from(encodeStats(blended));
|
|
5829
5832
|
}
|
|
5830
|
-
function decodeRawStackToCategoryStats(
|
|
5831
|
-
const raw = deriveResourceStats(seed);
|
|
5833
|
+
function decodeRawStackToCategoryStats(stats, category) {
|
|
5832
5834
|
const defs = getStatDefinitions(category);
|
|
5833
5835
|
const result = {};
|
|
5834
5836
|
if (defs[0])
|
|
5835
|
-
result[defs[0].key] =
|
|
5837
|
+
result[defs[0].key] = decodeStat(stats, 0);
|
|
5836
5838
|
if (defs[1])
|
|
5837
|
-
result[defs[1].key] =
|
|
5839
|
+
result[defs[1].key] = decodeStat(stats, 1);
|
|
5838
5840
|
if (defs[2])
|
|
5839
|
-
result[defs[2].key] =
|
|
5841
|
+
result[defs[2].key] = decodeStat(stats, 2);
|
|
5840
5842
|
return result;
|
|
5841
5843
|
}
|
|
5842
|
-
function
|
|
5844
|
+
function computeCraftedOutputStats(outputItemId, slotInputs) {
|
|
5843
5845
|
var _a;
|
|
5844
5846
|
const component = getComponentById(outputItemId);
|
|
5845
5847
|
if (component) {
|
|
@@ -5851,8 +5853,8 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5851
5853
|
const stacks = slot.stacks.map((s) => ({
|
|
5852
5854
|
quantity: s.quantity,
|
|
5853
5855
|
stats: slotIsComponent
|
|
5854
|
-
? decodeCraftedItemStats(slot.itemId, s.
|
|
5855
|
-
: decodeRawStackToCategoryStats(s.
|
|
5856
|
+
? decodeCraftedItemStats(slot.itemId, s.stats)
|
|
5857
|
+
: decodeRawStackToCategoryStats(s.stats, slot.category),
|
|
5856
5858
|
}));
|
|
5857
5859
|
categoryStacks.push({ category: slot.category, stacks });
|
|
5858
5860
|
}
|
|
@@ -5874,7 +5876,7 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5874
5876
|
for (const s of slot.stacks) {
|
|
5875
5877
|
list.push({
|
|
5876
5878
|
quantity: s.quantity,
|
|
5877
|
-
stats: decodeCraftedItemStats(slot.itemId, s.
|
|
5879
|
+
stats: decodeCraftedItemStats(slot.itemId, s.stats),
|
|
5878
5880
|
});
|
|
5879
5881
|
}
|
|
5880
5882
|
}
|
|
@@ -5885,7 +5887,11 @@ function computeCraftedOutputSeed(outputItemId, slotInputs) {
|
|
|
5885
5887
|
});
|
|
5886
5888
|
return antelope.UInt64.from(encodeStats(ordered));
|
|
5887
5889
|
}
|
|
5888
|
-
throw new Error(`
|
|
5890
|
+
throw new Error(`computeCraftedOutputStats: no recipe found for outputItemId=${outputItemId}`);
|
|
5891
|
+
}
|
|
5892
|
+
function encodeGatheredCargoStats(depositSeed) {
|
|
5893
|
+
const raw = deriveResourceStats(depositSeed);
|
|
5894
|
+
return antelope.UInt64.from(encodeStats([raw.stat1, raw.stat2, raw.stat3]));
|
|
5889
5895
|
}
|
|
5890
5896
|
|
|
5891
5897
|
const itemsById = new Map();
|
|
@@ -6259,6 +6265,9 @@ function capsHasGatherer(caps) {
|
|
|
6259
6265
|
function capsHasMass(caps) {
|
|
6260
6266
|
return caps.hullmass !== undefined;
|
|
6261
6267
|
}
|
|
6268
|
+
function capsHasHauler(caps) {
|
|
6269
|
+
return caps.hauler !== undefined;
|
|
6270
|
+
}
|
|
6262
6271
|
|
|
6263
6272
|
function calcCargoItemMass(item) {
|
|
6264
6273
|
const itemDef = getItem(item.item_id);
|
|
@@ -6313,7 +6322,7 @@ function cargoItemToStack(item) {
|
|
|
6313
6322
|
return {
|
|
6314
6323
|
item_id: antelope.UInt16.from(item.item_id),
|
|
6315
6324
|
quantity: antelope.UInt32.from(item.quantity),
|
|
6316
|
-
|
|
6325
|
+
stats: item.stats,
|
|
6317
6326
|
modules: item.modules ?? [],
|
|
6318
6327
|
};
|
|
6319
6328
|
}
|
|
@@ -6321,23 +6330,18 @@ function stackToCargoItem(stack) {
|
|
|
6321
6330
|
return Types.cargo_item.from({
|
|
6322
6331
|
item_id: stack.item_id,
|
|
6323
6332
|
quantity: stack.quantity,
|
|
6324
|
-
|
|
6333
|
+
stats: stack.stats,
|
|
6325
6334
|
modules: stack.modules,
|
|
6326
6335
|
});
|
|
6327
6336
|
}
|
|
6328
|
-
function
|
|
6329
|
-
if (!a && !b)
|
|
6330
|
-
return true;
|
|
6331
|
-
if (!a || !b)
|
|
6332
|
-
return false;
|
|
6337
|
+
function statsEquals(a, b) {
|
|
6333
6338
|
return a.equals(b);
|
|
6334
6339
|
}
|
|
6335
6340
|
function stackIdentityEqual(a, b) {
|
|
6336
|
-
return a.item_id.equals(b.item_id) &&
|
|
6341
|
+
return a.item_id.equals(b.item_id) && statsEquals(a.stats, b.stats);
|
|
6337
6342
|
}
|
|
6338
6343
|
function stackKey(s) {
|
|
6339
|
-
|
|
6340
|
-
return `${s.item_id.toNumber()}:${seedVal}`;
|
|
6344
|
+
return `${s.item_id.toNumber()}:${s.stats.toString()}`;
|
|
6341
6345
|
}
|
|
6342
6346
|
function stacksEqual(a, b) {
|
|
6343
6347
|
return stackIdentityEqual(a, b) && a.quantity.equals(b.quantity);
|
|
@@ -6661,7 +6665,9 @@ function applyGatherTask(projected, task, options) {
|
|
|
6661
6665
|
if (!options.complete)
|
|
6662
6666
|
return;
|
|
6663
6667
|
applyEnergyCost(projected, task);
|
|
6664
|
-
|
|
6668
|
+
if (!task.entitytarget) {
|
|
6669
|
+
applyAddCargoTask(projected, task);
|
|
6670
|
+
}
|
|
6665
6671
|
}
|
|
6666
6672
|
function applyCraftTask(projected, task) {
|
|
6667
6673
|
applyEnergyCost(projected, task);
|
|
@@ -6705,12 +6711,16 @@ function applyTask(projected, task) {
|
|
|
6705
6711
|
break;
|
|
6706
6712
|
}
|
|
6707
6713
|
}
|
|
6708
|
-
function projectEntity(entity) {
|
|
6714
|
+
function projectEntity(entity, options) {
|
|
6709
6715
|
const projected = createProjectedEntity(entity);
|
|
6710
6716
|
if (!entity.schedule || entity.schedule.tasks.length === 0)
|
|
6711
6717
|
return projected;
|
|
6712
|
-
|
|
6713
|
-
|
|
6718
|
+
const tasks = entity.schedule.tasks;
|
|
6719
|
+
const taskCount = options?.upToTaskIndex !== undefined
|
|
6720
|
+
? Math.max(0, Math.min(options.upToTaskIndex, tasks.length))
|
|
6721
|
+
: tasks.length;
|
|
6722
|
+
for (let i = 0; i < taskCount; i++) {
|
|
6723
|
+
applyTask(projected, tasks[i]);
|
|
6714
6724
|
}
|
|
6715
6725
|
return projected;
|
|
6716
6726
|
}
|
|
@@ -6953,9 +6963,19 @@ function needsRecharge(entity) {
|
|
|
6953
6963
|
}
|
|
6954
6964
|
|
|
6955
6965
|
class Ship extends Types.entity_info {
|
|
6966
|
+
constructor() {
|
|
6967
|
+
super(...arguments);
|
|
6968
|
+
this._modules = [];
|
|
6969
|
+
}
|
|
6956
6970
|
get name() {
|
|
6957
6971
|
return this.entity_name;
|
|
6958
6972
|
}
|
|
6973
|
+
get modules() {
|
|
6974
|
+
return this._modules;
|
|
6975
|
+
}
|
|
6976
|
+
setModules(modules) {
|
|
6977
|
+
this._modules = modules;
|
|
6978
|
+
}
|
|
6959
6979
|
get inv() {
|
|
6960
6980
|
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
6961
6981
|
}
|
|
@@ -7074,10 +7094,188 @@ class Ship extends Types.entity_info {
|
|
|
7074
7094
|
}
|
|
7075
7095
|
}
|
|
7076
7096
|
|
|
7097
|
+
function computeShipHullCapabilities(stats) {
|
|
7098
|
+
const density = stats.density ?? 500;
|
|
7099
|
+
const strength = stats.strength ?? 500;
|
|
7100
|
+
const ductility = stats.ductility ?? 500;
|
|
7101
|
+
const purity = stats.purity ?? 500;
|
|
7102
|
+
const hullmass = 25000 + 75 * density;
|
|
7103
|
+
const statSum = strength + ductility + purity;
|
|
7104
|
+
const exponent = statSum / 2997.0;
|
|
7105
|
+
const capacity = Math.floor(1000000 * Math.pow(10, exponent));
|
|
7106
|
+
return { hullmass, capacity };
|
|
7107
|
+
}
|
|
7108
|
+
function computeEngineCapabilities(stats) {
|
|
7109
|
+
const vol = stats.volatility ?? 500;
|
|
7110
|
+
const thm = stats.thermal ?? 500;
|
|
7111
|
+
return {
|
|
7112
|
+
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
7113
|
+
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
7114
|
+
};
|
|
7115
|
+
}
|
|
7116
|
+
function computeGeneratorCapabilities(stats) {
|
|
7117
|
+
const res = stats.resonance ?? 500;
|
|
7118
|
+
const clr = stats.clarity ?? 500;
|
|
7119
|
+
return {
|
|
7120
|
+
capacity: 300 + Math.floor(res / 6),
|
|
7121
|
+
recharge: 1 + Math.floor((clr * 3) / 1000),
|
|
7122
|
+
};
|
|
7123
|
+
}
|
|
7124
|
+
function computeGathererCapabilities(stats) {
|
|
7125
|
+
const str = stats.strength ?? 500;
|
|
7126
|
+
const con = stats.conductivity ?? 500;
|
|
7127
|
+
const ref = stats.reflectivity ?? 500;
|
|
7128
|
+
const tol = stats.tolerance ?? 500;
|
|
7129
|
+
return {
|
|
7130
|
+
yield: 200 + str,
|
|
7131
|
+
drain: Math.max(250, 1250 - Math.floor((con * 25) / 20)),
|
|
7132
|
+
depth: 200 + Math.floor((tol * 3) / 2),
|
|
7133
|
+
speed: 100 + Math.floor((ref * 4) / 5),
|
|
7134
|
+
};
|
|
7135
|
+
}
|
|
7136
|
+
function computeLoaderCapabilities(stats) {
|
|
7137
|
+
const duc = stats.ductility ?? 500;
|
|
7138
|
+
const pla = stats.plasticity ?? 500;
|
|
7139
|
+
return {
|
|
7140
|
+
mass: Math.max(200, 2000 - Math.floor(duc * 2)),
|
|
7141
|
+
thrust: 1 + Math.floor(pla / 500),
|
|
7142
|
+
quantity: 1,
|
|
7143
|
+
};
|
|
7144
|
+
}
|
|
7145
|
+
function computeManufacturingCapabilities(stats) {
|
|
7146
|
+
const rea = stats.reactivity ?? 500;
|
|
7147
|
+
const clr = stats.clarity ?? 500;
|
|
7148
|
+
return {
|
|
7149
|
+
speed: 100 + Math.floor((rea * 4) / 5),
|
|
7150
|
+
drain: Math.max(5, 30 - Math.floor(clr / 33)),
|
|
7151
|
+
};
|
|
7152
|
+
}
|
|
7153
|
+
function computeHaulerCapabilities(stats) {
|
|
7154
|
+
const res = stats.resonance ?? 500;
|
|
7155
|
+
const con = stats.conductivity ?? 500;
|
|
7156
|
+
const clr = stats.clarity ?? 500;
|
|
7157
|
+
return {
|
|
7158
|
+
capacity: Math.max(1, 1 + Math.floor(res / 400)),
|
|
7159
|
+
efficiency: 2000 + con * 6,
|
|
7160
|
+
drain: Math.max(3, 15 - Math.floor(clr / 80)),
|
|
7161
|
+
};
|
|
7162
|
+
}
|
|
7163
|
+
function computeStorageCapabilities(stats, baseCapacity) {
|
|
7164
|
+
const strength = stats.strength ?? 500;
|
|
7165
|
+
const ductility = stats.ductility ?? 500;
|
|
7166
|
+
const purity = stats.purity ?? 500;
|
|
7167
|
+
const statSum = strength + ductility + purity;
|
|
7168
|
+
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
7169
|
+
return { capacityBonus };
|
|
7170
|
+
}
|
|
7171
|
+
function computeWarehouseHullCapabilities(stats) {
|
|
7172
|
+
const density = stats.density ?? 500;
|
|
7173
|
+
const strength = stats.strength ?? 500;
|
|
7174
|
+
const ductility = stats.ductility ?? 500;
|
|
7175
|
+
const purity = stats.purity ?? 500;
|
|
7176
|
+
const hullmass = 25000 + 75 * density;
|
|
7177
|
+
const statSum = strength + ductility + purity;
|
|
7178
|
+
const exponent = statSum / 2997.0;
|
|
7179
|
+
const capacity = Math.floor(20000000 * Math.pow(10, exponent));
|
|
7180
|
+
return { hullmass, capacity };
|
|
7181
|
+
}
|
|
7182
|
+
function computeShipCapabilities(modules) {
|
|
7183
|
+
const ship = {};
|
|
7184
|
+
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
7185
|
+
if (engineModules.length > 0) {
|
|
7186
|
+
let totalThrust = 0;
|
|
7187
|
+
let totalDrain = 0;
|
|
7188
|
+
for (const m of engineModules) {
|
|
7189
|
+
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7190
|
+
totalThrust += caps.thrust;
|
|
7191
|
+
totalDrain += caps.drain;
|
|
7192
|
+
}
|
|
7193
|
+
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
7194
|
+
}
|
|
7195
|
+
const generatorModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
7196
|
+
if (generatorModules.length > 0) {
|
|
7197
|
+
let totalCapacity = 0;
|
|
7198
|
+
let totalRecharge = 0;
|
|
7199
|
+
for (const m of generatorModules) {
|
|
7200
|
+
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7201
|
+
totalCapacity += caps.capacity;
|
|
7202
|
+
totalRecharge += caps.recharge;
|
|
7203
|
+
}
|
|
7204
|
+
ship.generator = { capacity: totalCapacity, recharge: totalRecharge };
|
|
7205
|
+
}
|
|
7206
|
+
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
7207
|
+
if (gathererModules.length > 0) {
|
|
7208
|
+
let totalYield = 0;
|
|
7209
|
+
let totalDrain = 0;
|
|
7210
|
+
let totalDepth = 0;
|
|
7211
|
+
let totalSpeed = 0;
|
|
7212
|
+
for (const m of gathererModules) {
|
|
7213
|
+
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7214
|
+
totalYield += caps.yield;
|
|
7215
|
+
totalDrain += caps.drain;
|
|
7216
|
+
totalDepth += caps.depth;
|
|
7217
|
+
totalSpeed += caps.speed;
|
|
7218
|
+
}
|
|
7219
|
+
ship.gatherer = { yield: totalYield, drain: totalDrain, depth: totalDepth, speed: totalSpeed };
|
|
7220
|
+
}
|
|
7221
|
+
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
7222
|
+
if (haulerModules.length > 0) {
|
|
7223
|
+
let totalCapacity = 0;
|
|
7224
|
+
let weightedEffNum = 0;
|
|
7225
|
+
let totalDrain = 0;
|
|
7226
|
+
for (const m of haulerModules) {
|
|
7227
|
+
const caps = computeHaulerCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7228
|
+
totalCapacity += caps.capacity;
|
|
7229
|
+
weightedEffNum += caps.efficiency * caps.capacity;
|
|
7230
|
+
totalDrain += caps.drain;
|
|
7231
|
+
}
|
|
7232
|
+
ship.hauler = {
|
|
7233
|
+
capacity: totalCapacity,
|
|
7234
|
+
efficiency: totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0,
|
|
7235
|
+
drain: totalDrain,
|
|
7236
|
+
};
|
|
7237
|
+
}
|
|
7238
|
+
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
7239
|
+
if (loaderModules.length > 0) {
|
|
7240
|
+
let totalMass = 0;
|
|
7241
|
+
let totalThrust = 0;
|
|
7242
|
+
let totalQuantity = 0;
|
|
7243
|
+
for (const m of loaderModules) {
|
|
7244
|
+
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7245
|
+
totalMass += caps.mass;
|
|
7246
|
+
totalThrust += caps.thrust;
|
|
7247
|
+
totalQuantity += caps.quantity;
|
|
7248
|
+
}
|
|
7249
|
+
ship.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
7250
|
+
}
|
|
7251
|
+
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
7252
|
+
if (crafterModules.length > 0) {
|
|
7253
|
+
let totalSpeed = 0;
|
|
7254
|
+
let totalDrain = 0;
|
|
7255
|
+
for (const m of crafterModules) {
|
|
7256
|
+
const caps = computeManufacturingCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7257
|
+
totalSpeed += caps.speed;
|
|
7258
|
+
totalDrain += caps.drain;
|
|
7259
|
+
}
|
|
7260
|
+
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
7261
|
+
}
|
|
7262
|
+
return ship;
|
|
7263
|
+
}
|
|
7264
|
+
|
|
7077
7265
|
class Warehouse extends Types.entity_info {
|
|
7266
|
+
constructor() {
|
|
7267
|
+
super(...arguments);
|
|
7268
|
+
this._modules = [];
|
|
7269
|
+
}
|
|
7078
7270
|
get name() {
|
|
7079
7271
|
return this.entity_name;
|
|
7080
7272
|
}
|
|
7273
|
+
get modules() {
|
|
7274
|
+
return this._modules;
|
|
7275
|
+
}
|
|
7276
|
+
setModules(modules) {
|
|
7277
|
+
this._modules = modules;
|
|
7278
|
+
}
|
|
7081
7279
|
get inv() {
|
|
7082
7280
|
return (this._inv ?? (this._inv = new InventoryAccessor(this)));
|
|
7083
7281
|
}
|
|
@@ -7126,6 +7324,23 @@ class Warehouse extends Types.entity_info {
|
|
|
7126
7324
|
return hull.adding(this.totalCargoMass);
|
|
7127
7325
|
}
|
|
7128
7326
|
}
|
|
7327
|
+
function computeWarehouseCapabilities(modules) {
|
|
7328
|
+
const warehouse = {};
|
|
7329
|
+
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
7330
|
+
if (loaderModules.length > 0) {
|
|
7331
|
+
let totalMass = 0;
|
|
7332
|
+
let totalThrust = 0;
|
|
7333
|
+
let totalQuantity = 0;
|
|
7334
|
+
for (const m of loaderModules) {
|
|
7335
|
+
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.stats));
|
|
7336
|
+
totalMass += caps.mass;
|
|
7337
|
+
totalThrust += caps.thrust;
|
|
7338
|
+
totalQuantity += caps.quantity;
|
|
7339
|
+
}
|
|
7340
|
+
warehouse.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
7341
|
+
}
|
|
7342
|
+
return warehouse;
|
|
7343
|
+
}
|
|
7129
7344
|
|
|
7130
7345
|
class Container extends Types.entity_info {
|
|
7131
7346
|
get name() {
|
|
@@ -7386,13 +7601,14 @@ class ActionsManager extends BaseManager {
|
|
|
7386
7601
|
id: antelope.UInt64.from(shipId),
|
|
7387
7602
|
});
|
|
7388
7603
|
}
|
|
7389
|
-
transfer(sourceType, sourceId, destType, destId,
|
|
7604
|
+
transfer(sourceType, sourceId, destType, destId, itemId, stats, quantity) {
|
|
7390
7605
|
return this.server.action('transfer', {
|
|
7391
7606
|
source_type: sourceType,
|
|
7392
7607
|
source_id: antelope.UInt64.from(sourceId),
|
|
7393
7608
|
dest_type: destType,
|
|
7394
7609
|
dest_id: antelope.UInt64.from(destId),
|
|
7395
|
-
item_id: antelope.UInt16.from(
|
|
7610
|
+
item_id: antelope.UInt16.from(itemId),
|
|
7611
|
+
stats: antelope.UInt64.from(stats),
|
|
7396
7612
|
quantity: antelope.UInt32.from(quantity),
|
|
7397
7613
|
});
|
|
7398
7614
|
}
|
|
@@ -7407,10 +7623,16 @@ class ActionsManager extends BaseManager {
|
|
|
7407
7623
|
account: antelope.Name.from(account),
|
|
7408
7624
|
});
|
|
7409
7625
|
}
|
|
7410
|
-
gather(
|
|
7626
|
+
gather(source, destination, stratum, quantity) {
|
|
7411
7627
|
return this.server.action('gather', {
|
|
7412
|
-
|
|
7413
|
-
|
|
7628
|
+
source: Types.entity_ref.from({
|
|
7629
|
+
entity_type: source.entityType,
|
|
7630
|
+
entity_id: antelope.UInt64.from(source.entityId),
|
|
7631
|
+
}),
|
|
7632
|
+
destination: Types.entity_ref.from({
|
|
7633
|
+
entity_type: destination.entityType,
|
|
7634
|
+
entity_id: antelope.UInt64.from(destination.entityId),
|
|
7635
|
+
}),
|
|
7414
7636
|
stratum: antelope.UInt16.from(stratum),
|
|
7415
7637
|
quantity: antelope.UInt32.from(quantity),
|
|
7416
7638
|
});
|
|
@@ -7443,12 +7665,12 @@ class ActionsManager extends BaseManager {
|
|
|
7443
7665
|
inputs: cargoInputs,
|
|
7444
7666
|
});
|
|
7445
7667
|
}
|
|
7446
|
-
deploy(entityType, entityId, packedItemId,
|
|
7668
|
+
deploy(entityType, entityId, packedItemId, stats, entityName) {
|
|
7447
7669
|
return this.server.action('deploy', {
|
|
7448
7670
|
entity_type: entityType,
|
|
7449
7671
|
id: antelope.UInt64.from(entityId),
|
|
7450
7672
|
packed_item_id: antelope.UInt16.from(packedItemId),
|
|
7451
|
-
|
|
7673
|
+
stats: antelope.UInt64.from(stats),
|
|
7452
7674
|
entity_name: entityName,
|
|
7453
7675
|
});
|
|
7454
7676
|
}
|
|
@@ -7469,6 +7691,15 @@ class ActionsManager extends BaseManager {
|
|
|
7469
7691
|
target_cargo_id: antelope.UInt64.from(targetCargoId),
|
|
7470
7692
|
});
|
|
7471
7693
|
}
|
|
7694
|
+
wrap(owner, entityType, entityId, cargoId, quantity) {
|
|
7695
|
+
return this.server.action('wrap', {
|
|
7696
|
+
owner: antelope.Name.from(owner),
|
|
7697
|
+
entity_type: entityType,
|
|
7698
|
+
entity_id: antelope.UInt64.from(entityId),
|
|
7699
|
+
cargo_id: antelope.UInt64.from(cargoId),
|
|
7700
|
+
quantity: antelope.UInt64.from(quantity),
|
|
7701
|
+
});
|
|
7702
|
+
}
|
|
7472
7703
|
joinGame(account, companyName) {
|
|
7473
7704
|
return [this.foundCompany(account, companyName), this.join(account)];
|
|
7474
7705
|
}
|
|
@@ -7608,6 +7839,51 @@ class Shipload {
|
|
|
7608
7839
|
}
|
|
7609
7840
|
}
|
|
7610
7841
|
|
|
7842
|
+
function assignModulesToSlots(packedEntityItemId, modules, entityLabel) {
|
|
7843
|
+
const slots = getEntitySlotLayout(packedEntityItemId);
|
|
7844
|
+
const result = slots.map((s) => ({ type: s.type, installed: undefined }));
|
|
7845
|
+
for (const mod of modules) {
|
|
7846
|
+
const itemId = Number(antelope.UInt16.from(mod.itemId).value.toString());
|
|
7847
|
+
const modType = getModuleCapabilityType(itemId);
|
|
7848
|
+
const slotIdx = result.findIndex((r) => !r.installed && moduleAccepts(r.type, modType));
|
|
7849
|
+
if (slotIdx === -1) {
|
|
7850
|
+
const recipe = getModuleRecipeByItemId(itemId);
|
|
7851
|
+
const modName = recipe?.name ?? `item ${itemId}`;
|
|
7852
|
+
throw new Error(`No compatible slot for module ${modName} (type ${modType}) on ${entityLabel}`);
|
|
7853
|
+
}
|
|
7854
|
+
result[slotIdx].installed = Types.packed_module.from({
|
|
7855
|
+
item_id: antelope.UInt16.from(mod.itemId),
|
|
7856
|
+
stats: antelope.UInt64.from(mod.stats),
|
|
7857
|
+
});
|
|
7858
|
+
}
|
|
7859
|
+
return result.map((r) => Types.module_entry.from({
|
|
7860
|
+
type: antelope.UInt8.from(r.type),
|
|
7861
|
+
installed: r.installed,
|
|
7862
|
+
}));
|
|
7863
|
+
}
|
|
7864
|
+
function decodePackedInput(m) {
|
|
7865
|
+
return {
|
|
7866
|
+
itemId: Number(antelope.UInt16.from(m.itemId).value.toString()),
|
|
7867
|
+
stats: BigInt(antelope.UInt64.from(m.stats).toString()),
|
|
7868
|
+
};
|
|
7869
|
+
}
|
|
7870
|
+
function computeStorageBonus(decoded, baseCapacity) {
|
|
7871
|
+
let totalBonus = 0;
|
|
7872
|
+
for (const m of decoded) {
|
|
7873
|
+
if (getModuleCapabilityType(m.itemId) !== MODULE_STORAGE)
|
|
7874
|
+
continue;
|
|
7875
|
+
const stats = decodeCraftedItemStats(m.itemId, m.stats);
|
|
7876
|
+
const { capacityBonus } = computeStorageCapabilities(stats, baseCapacity);
|
|
7877
|
+
totalBonus += capacityBonus;
|
|
7878
|
+
}
|
|
7879
|
+
return totalBonus;
|
|
7880
|
+
}
|
|
7881
|
+
function deriveShipFromModules(modules, baseCapacity) {
|
|
7882
|
+
const decoded = modules.map(decodePackedInput);
|
|
7883
|
+
const capabilities = computeShipCapabilities(decoded);
|
|
7884
|
+
const totalBonus = computeStorageBonus(decoded, baseCapacity);
|
|
7885
|
+
return { capabilities, finalCapacity: baseCapacity + totalBonus };
|
|
7886
|
+
}
|
|
7611
7887
|
function makeShip(state) {
|
|
7612
7888
|
const info = {
|
|
7613
7889
|
type: antelope.Name.from('ship'),
|
|
@@ -7624,20 +7900,38 @@ function makeShip(state) {
|
|
|
7624
7900
|
};
|
|
7625
7901
|
if (state.hullmass !== undefined)
|
|
7626
7902
|
info.hullmass = antelope.UInt32.from(state.hullmass);
|
|
7627
|
-
if (state.capacity !== undefined)
|
|
7628
|
-
info.capacity = antelope.UInt32.from(state.capacity);
|
|
7629
7903
|
if (state.energy !== undefined)
|
|
7630
7904
|
info.energy = antelope.UInt16.from(state.energy);
|
|
7631
|
-
if (state.engines)
|
|
7632
|
-
info.engines = state.engines;
|
|
7633
|
-
if (state.generator)
|
|
7634
|
-
info.generator = state.generator;
|
|
7635
|
-
if (state.loaders)
|
|
7636
|
-
info.loaders = state.loaders;
|
|
7637
7905
|
if (state.schedule)
|
|
7638
7906
|
info.schedule = state.schedule;
|
|
7907
|
+
let moduleEntries = [];
|
|
7908
|
+
if (state.modules && state.modules.length > 0) {
|
|
7909
|
+
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, state.modules, 'Ship T1');
|
|
7910
|
+
const { capabilities, finalCapacity } = deriveShipFromModules(state.modules, state.capacity ?? 0);
|
|
7911
|
+
if (capabilities.engines)
|
|
7912
|
+
info.engines = capabilities.engines;
|
|
7913
|
+
if (capabilities.generator)
|
|
7914
|
+
info.generator = capabilities.generator;
|
|
7915
|
+
if (capabilities.gatherer)
|
|
7916
|
+
info.gatherer = capabilities.gatherer;
|
|
7917
|
+
if (capabilities.hauler)
|
|
7918
|
+
info.hauler = capabilities.hauler;
|
|
7919
|
+
if (capabilities.loaders)
|
|
7920
|
+
info.loaders = capabilities.loaders;
|
|
7921
|
+
if (capabilities.crafter)
|
|
7922
|
+
info.crafter = capabilities.crafter;
|
|
7923
|
+
if (state.capacity !== undefined)
|
|
7924
|
+
info.capacity = antelope.UInt32.from(finalCapacity);
|
|
7925
|
+
}
|
|
7926
|
+
else {
|
|
7927
|
+
moduleEntries = assignModulesToSlots(ITEM_SHIP_T1_PACKED, [], 'Ship T1');
|
|
7928
|
+
if (state.capacity !== undefined)
|
|
7929
|
+
info.capacity = antelope.UInt32.from(state.capacity);
|
|
7930
|
+
}
|
|
7639
7931
|
const entityInfo = Types.entity_info.from(info);
|
|
7640
|
-
|
|
7932
|
+
const ship = new Ship(entityInfo);
|
|
7933
|
+
ship.setModules(moduleEntries);
|
|
7934
|
+
return ship;
|
|
7641
7935
|
}
|
|
7642
7936
|
function makeWarehouse(state) {
|
|
7643
7937
|
const info = {
|
|
@@ -7656,12 +7950,25 @@ function makeWarehouse(state) {
|
|
|
7656
7950
|
};
|
|
7657
7951
|
if (state.hullmass !== undefined)
|
|
7658
7952
|
info.hullmass = antelope.UInt32.from(state.hullmass);
|
|
7659
|
-
if (state.loaders)
|
|
7660
|
-
info.loaders = state.loaders;
|
|
7661
7953
|
if (state.schedule)
|
|
7662
7954
|
info.schedule = state.schedule;
|
|
7955
|
+
let moduleEntries = [];
|
|
7956
|
+
if (state.modules && state.modules.length > 0) {
|
|
7957
|
+
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, state.modules, 'Warehouse T1');
|
|
7958
|
+
const decoded = state.modules.map(decodePackedInput);
|
|
7959
|
+
const capabilities = computeWarehouseCapabilities(decoded);
|
|
7960
|
+
if (capabilities.loaders)
|
|
7961
|
+
info.loaders = capabilities.loaders;
|
|
7962
|
+
const totalBonus = computeStorageBonus(decoded, state.capacity);
|
|
7963
|
+
info.capacity = antelope.UInt32.from(state.capacity + totalBonus);
|
|
7964
|
+
}
|
|
7965
|
+
else {
|
|
7966
|
+
moduleEntries = assignModulesToSlots(ITEM_WAREHOUSE_T1_PACKED, [], 'Warehouse T1');
|
|
7967
|
+
}
|
|
7663
7968
|
const entityInfo = Types.entity_info.from(info);
|
|
7664
|
-
|
|
7969
|
+
const warehouse = new Warehouse(entityInfo);
|
|
7970
|
+
warehouse.setModules(moduleEntries);
|
|
7971
|
+
return warehouse;
|
|
7665
7972
|
}
|
|
7666
7973
|
function makeContainer(state) {
|
|
7667
7974
|
const entityInfo = Types.entity_info.from({
|
|
@@ -7673,7 +7980,7 @@ function makeContainer(state) {
|
|
|
7673
7980
|
hullmass: antelope.UInt32.from(state.hullmass),
|
|
7674
7981
|
capacity: antelope.UInt32.from(state.capacity),
|
|
7675
7982
|
cargomass: antelope.UInt32.from(state.cargomass || 0),
|
|
7676
|
-
cargo: [],
|
|
7983
|
+
cargo: state.cargo || [],
|
|
7677
7984
|
is_idle: !state.schedule,
|
|
7678
7985
|
current_task_elapsed: antelope.UInt32.from(0),
|
|
7679
7986
|
current_task_remaining: antelope.UInt32.from(0),
|
|
@@ -7833,6 +8140,13 @@ const tierColors = {
|
|
|
7833
8140
|
t4: '#c084fc',
|
|
7834
8141
|
t5: '#fbbf24',
|
|
7835
8142
|
};
|
|
8143
|
+
const tierLabels = {
|
|
8144
|
+
t1: 'Common',
|
|
8145
|
+
t2: 'Uncommon',
|
|
8146
|
+
t3: 'Rare',
|
|
8147
|
+
t4: 'Epic',
|
|
8148
|
+
t5: 'Legendary',
|
|
8149
|
+
};
|
|
7836
8150
|
const categoryIcons = {
|
|
7837
8151
|
metal: '⬡',
|
|
7838
8152
|
precious: '◈',
|
|
@@ -7840,9 +8154,16 @@ const categoryIcons = {
|
|
|
7840
8154
|
mineral: '◇',
|
|
7841
8155
|
organic: '❋',
|
|
7842
8156
|
};
|
|
8157
|
+
const categoryIconShapes = {
|
|
8158
|
+
metal: 'hex',
|
|
8159
|
+
precious: 'diamond',
|
|
8160
|
+
gas: 'circle',
|
|
8161
|
+
mineral: 'square',
|
|
8162
|
+
organic: 'star',
|
|
8163
|
+
};
|
|
7843
8164
|
const componentIcon = '▣';
|
|
7844
8165
|
const moduleIcon = '⬢';
|
|
7845
|
-
const
|
|
8166
|
+
const itemAbbreviations = {
|
|
7846
8167
|
10001: 'HP',
|
|
7847
8168
|
10002: 'CL',
|
|
7848
8169
|
10003: 'TC',
|
|
@@ -8384,194 +8705,21 @@ function getStatMappingsForCapability(capability) {
|
|
|
8384
8705
|
return statMappings.filter((m) => m.capability === capability);
|
|
8385
8706
|
}
|
|
8386
8707
|
|
|
8387
|
-
function computeShipHullCapabilities(stats) {
|
|
8388
|
-
const density = stats.density ?? 500;
|
|
8389
|
-
const strength = stats.strength ?? 500;
|
|
8390
|
-
const ductility = stats.ductility ?? 500;
|
|
8391
|
-
const purity = stats.purity ?? 500;
|
|
8392
|
-
const hullmass = 25000 + 75 * density;
|
|
8393
|
-
const statSum = strength + ductility + purity;
|
|
8394
|
-
const exponent = statSum / 2997.0;
|
|
8395
|
-
const capacity = Math.floor(1000000 * Math.pow(10, exponent));
|
|
8396
|
-
return { hullmass, capacity };
|
|
8397
|
-
}
|
|
8398
|
-
function computeEngineCapabilities(stats) {
|
|
8399
|
-
const vol = stats.volatility ?? 500;
|
|
8400
|
-
const thm = stats.thermal ?? 500;
|
|
8401
|
-
return {
|
|
8402
|
-
thrust: 400 + Math.floor((vol * 3) / 4),
|
|
8403
|
-
drain: Math.max(30, 50 - Math.floor(thm / 70)),
|
|
8404
|
-
};
|
|
8405
|
-
}
|
|
8406
|
-
function computeGeneratorCapabilities(stats) {
|
|
8407
|
-
const res = stats.resonance ?? 500;
|
|
8408
|
-
const clr = stats.clarity ?? 500;
|
|
8409
|
-
return {
|
|
8410
|
-
capacity: 300 + Math.floor(res / 6),
|
|
8411
|
-
recharge: 5 + Math.floor((clr * 15) / 1000),
|
|
8412
|
-
};
|
|
8413
|
-
}
|
|
8414
|
-
function computeGathererCapabilities(stats) {
|
|
8415
|
-
const str = stats.strength ?? 500;
|
|
8416
|
-
const con = stats.conductivity ?? 500;
|
|
8417
|
-
const ref = stats.reflectivity ?? 500;
|
|
8418
|
-
const tol = stats.tolerance ?? 500;
|
|
8419
|
-
return {
|
|
8420
|
-
yield: 200 + str,
|
|
8421
|
-
drain: Math.max(10, 50 - Math.floor(con / 20)),
|
|
8422
|
-
depth: 200 + Math.floor((tol * 3) / 2),
|
|
8423
|
-
speed: 100 + Math.floor((ref * 4) / 5),
|
|
8424
|
-
};
|
|
8425
|
-
}
|
|
8426
|
-
function computeLoaderCapabilities(stats) {
|
|
8427
|
-
const duc = stats.ductility ?? 500;
|
|
8428
|
-
const pla = stats.plasticity ?? 500;
|
|
8429
|
-
return {
|
|
8430
|
-
mass: Math.max(200, 2000 - Math.floor(duc * 2)),
|
|
8431
|
-
thrust: 1 + Math.floor(pla / 500),
|
|
8432
|
-
quantity: 1,
|
|
8433
|
-
};
|
|
8434
|
-
}
|
|
8435
|
-
function computeManufacturingCapabilities(stats) {
|
|
8436
|
-
const rea = stats.reactivity ?? 500;
|
|
8437
|
-
const clr = stats.clarity ?? 500;
|
|
8438
|
-
return {
|
|
8439
|
-
speed: 100 + Math.floor((rea * 4) / 5),
|
|
8440
|
-
drain: Math.max(5, 30 - Math.floor(clr / 33)),
|
|
8441
|
-
};
|
|
8442
|
-
}
|
|
8443
|
-
function computeHaulerCapabilities(stats) {
|
|
8444
|
-
const res = stats.resonance ?? 500;
|
|
8445
|
-
const con = stats.conductivity ?? 500;
|
|
8446
|
-
const clr = stats.clarity ?? 500;
|
|
8447
|
-
return {
|
|
8448
|
-
capacity: Math.max(1, 1 + Math.floor(res / 400)),
|
|
8449
|
-
efficiency: 2000 + con * 6,
|
|
8450
|
-
drain: Math.max(3, 15 - Math.floor(clr / 80)),
|
|
8451
|
-
};
|
|
8452
|
-
}
|
|
8453
|
-
function computeStorageCapabilities(stats, baseCapacity) {
|
|
8454
|
-
const strength = stats.strength ?? 500;
|
|
8455
|
-
const ductility = stats.ductility ?? 500;
|
|
8456
|
-
const purity = stats.purity ?? 500;
|
|
8457
|
-
const statSum = strength + ductility + purity;
|
|
8458
|
-
const capacityBonus = Math.floor((baseCapacity * (10 + Math.floor((statSum * 10) / 2997))) / 100);
|
|
8459
|
-
return { capacityBonus };
|
|
8460
|
-
}
|
|
8461
|
-
function computeWarehouseHullCapabilities(stats) {
|
|
8462
|
-
const density = stats.density ?? 500;
|
|
8463
|
-
const strength = stats.strength ?? 500;
|
|
8464
|
-
const ductility = stats.ductility ?? 500;
|
|
8465
|
-
const purity = stats.purity ?? 500;
|
|
8466
|
-
const hullmass = 25000 + 75 * density;
|
|
8467
|
-
const statSum = strength + ductility + purity;
|
|
8468
|
-
const exponent = statSum / 2997.0;
|
|
8469
|
-
const capacity = Math.floor(20000000 * Math.pow(10, exponent));
|
|
8470
|
-
return { hullmass, capacity };
|
|
8471
|
-
}
|
|
8472
|
-
function computeShipCapabilities(modules) {
|
|
8473
|
-
const ship = {};
|
|
8474
|
-
const engineModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_ENGINE);
|
|
8475
|
-
if (engineModules.length > 0) {
|
|
8476
|
-
let totalThrust = 0;
|
|
8477
|
-
let totalDrain = 0;
|
|
8478
|
-
for (const m of engineModules) {
|
|
8479
|
-
const caps = computeEngineCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8480
|
-
totalThrust += caps.thrust;
|
|
8481
|
-
totalDrain += caps.drain;
|
|
8482
|
-
}
|
|
8483
|
-
ship.engines = { thrust: totalThrust, drain: totalDrain };
|
|
8484
|
-
}
|
|
8485
|
-
const generatorModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GENERATOR);
|
|
8486
|
-
if (generatorModules.length > 0) {
|
|
8487
|
-
let totalCapacity = 0;
|
|
8488
|
-
let totalRecharge = 0;
|
|
8489
|
-
for (const m of generatorModules) {
|
|
8490
|
-
const caps = computeGeneratorCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8491
|
-
totalCapacity += caps.capacity;
|
|
8492
|
-
totalRecharge += caps.recharge;
|
|
8493
|
-
}
|
|
8494
|
-
ship.generator = { capacity: totalCapacity, recharge: totalRecharge };
|
|
8495
|
-
}
|
|
8496
|
-
const gathererModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_GATHERER);
|
|
8497
|
-
if (gathererModules.length > 0) {
|
|
8498
|
-
let totalYield = 0;
|
|
8499
|
-
let totalDrain = 0;
|
|
8500
|
-
let totalDepth = 0;
|
|
8501
|
-
let totalSpeed = 0;
|
|
8502
|
-
for (const m of gathererModules) {
|
|
8503
|
-
const caps = computeGathererCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8504
|
-
totalYield += caps.yield;
|
|
8505
|
-
totalDrain += caps.drain;
|
|
8506
|
-
totalDepth += caps.depth;
|
|
8507
|
-
totalSpeed += caps.speed;
|
|
8508
|
-
}
|
|
8509
|
-
ship.gatherer = { yield: totalYield, drain: totalDrain, depth: totalDepth, speed: totalSpeed };
|
|
8510
|
-
}
|
|
8511
|
-
const haulerModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_HAULER);
|
|
8512
|
-
if (haulerModules.length > 0) {
|
|
8513
|
-
let totalCapacity = 0;
|
|
8514
|
-
let weightedEffNum = 0;
|
|
8515
|
-
let totalDrain = 0;
|
|
8516
|
-
for (const m of haulerModules) {
|
|
8517
|
-
const decoded = decodeCraftedItemStats(m.itemId, m.seed);
|
|
8518
|
-
const caps = computeHaulerCapabilities({
|
|
8519
|
-
resonance: decoded.capacity,
|
|
8520
|
-
conductivity: decoded.efficiency,
|
|
8521
|
-
clarity: decoded.drain,
|
|
8522
|
-
});
|
|
8523
|
-
totalCapacity += caps.capacity;
|
|
8524
|
-
weightedEffNum += caps.efficiency * caps.capacity;
|
|
8525
|
-
totalDrain += caps.drain;
|
|
8526
|
-
}
|
|
8527
|
-
ship.hauler = {
|
|
8528
|
-
capacity: totalCapacity,
|
|
8529
|
-
efficiency: totalCapacity > 0 ? Math.floor(weightedEffNum / totalCapacity) : 0,
|
|
8530
|
-
drain: totalDrain,
|
|
8531
|
-
};
|
|
8532
|
-
}
|
|
8533
|
-
const loaderModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_LOADER);
|
|
8534
|
-
if (loaderModules.length > 0) {
|
|
8535
|
-
let totalMass = 0;
|
|
8536
|
-
let totalThrust = 0;
|
|
8537
|
-
let totalQuantity = 0;
|
|
8538
|
-
for (const m of loaderModules) {
|
|
8539
|
-
const caps = computeLoaderCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8540
|
-
totalMass += caps.mass;
|
|
8541
|
-
totalThrust += caps.thrust;
|
|
8542
|
-
totalQuantity += caps.quantity;
|
|
8543
|
-
}
|
|
8544
|
-
ship.loaders = { mass: totalMass, thrust: totalThrust, quantity: totalQuantity };
|
|
8545
|
-
}
|
|
8546
|
-
const crafterModules = modules.filter((m) => getModuleCapabilityType(m.itemId) === MODULE_CRAFTER);
|
|
8547
|
-
if (crafterModules.length > 0) {
|
|
8548
|
-
let totalSpeed = 0;
|
|
8549
|
-
let totalDrain = 0;
|
|
8550
|
-
for (const m of crafterModules) {
|
|
8551
|
-
const caps = computeManufacturingCapabilities(decodeCraftedItemStats(m.itemId, m.seed));
|
|
8552
|
-
totalSpeed += caps.speed;
|
|
8553
|
-
totalDrain += caps.drain;
|
|
8554
|
-
}
|
|
8555
|
-
ship.crafter = { speed: totalSpeed, drain: totalDrain };
|
|
8556
|
-
}
|
|
8557
|
-
return ship;
|
|
8558
|
-
}
|
|
8559
|
-
|
|
8560
8708
|
function toNum(v) {
|
|
8561
8709
|
return Number(antelope.UInt16.from(v).value.toString());
|
|
8562
8710
|
}
|
|
8563
|
-
function
|
|
8711
|
+
function toBigStats(v) {
|
|
8564
8712
|
return BigInt(antelope.UInt64.from(v).toString());
|
|
8565
8713
|
}
|
|
8566
|
-
function resolveResource(id,
|
|
8714
|
+
function resolveResource(id, stats) {
|
|
8567
8715
|
const item = getItem(id);
|
|
8568
8716
|
const cat = item.category;
|
|
8569
|
-
let
|
|
8570
|
-
if (
|
|
8571
|
-
const
|
|
8717
|
+
let resolvedStats;
|
|
8718
|
+
if (stats !== undefined) {
|
|
8719
|
+
const bigStats = toBigStats(stats);
|
|
8572
8720
|
const defs = getStatDefinitions(cat);
|
|
8573
|
-
const values = [
|
|
8574
|
-
|
|
8721
|
+
const values = [decodeStat(bigStats, 0), decodeStat(bigStats, 1), decodeStat(bigStats, 2)];
|
|
8722
|
+
resolvedStats = defs.map((d, i) => ({
|
|
8575
8723
|
key: d.key,
|
|
8576
8724
|
label: d.label,
|
|
8577
8725
|
abbreviation: d.abbreviation,
|
|
@@ -8585,19 +8733,20 @@ function resolveResource(id, seed) {
|
|
|
8585
8733
|
itemId: id,
|
|
8586
8734
|
name: String(item.name),
|
|
8587
8735
|
icon: categoryIcons[cat] ?? '⬡',
|
|
8736
|
+
abbreviation: null,
|
|
8588
8737
|
category: cat,
|
|
8589
8738
|
tier: item.tier,
|
|
8590
8739
|
mass: Number(item.mass.value.toString()),
|
|
8591
8740
|
itemType: 'resource',
|
|
8592
|
-
stats,
|
|
8741
|
+
stats: resolvedStats,
|
|
8593
8742
|
};
|
|
8594
8743
|
}
|
|
8595
|
-
function resolveComponent(id,
|
|
8744
|
+
function resolveComponent(id, stats) {
|
|
8596
8745
|
const comp = getComponentById(id);
|
|
8597
|
-
let
|
|
8598
|
-
if (
|
|
8599
|
-
const decoded = decodeCraftedItemStats(id,
|
|
8600
|
-
|
|
8746
|
+
let resolvedStats;
|
|
8747
|
+
if (stats !== undefined) {
|
|
8748
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8749
|
+
resolvedStats = Object.entries(decoded).map(([key, value]) => {
|
|
8601
8750
|
const allDefs = getStatDefinitions('metal')
|
|
8602
8751
|
.concat(getStatDefinitions('precious'))
|
|
8603
8752
|
.concat(getStatDefinitions('gas'))
|
|
@@ -8620,11 +8769,12 @@ function resolveComponent(id, seed) {
|
|
|
8620
8769
|
return {
|
|
8621
8770
|
itemId: id,
|
|
8622
8771
|
name: comp.name,
|
|
8623
|
-
icon:
|
|
8772
|
+
icon: itemAbbreviations[id] ?? componentIcon,
|
|
8773
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8624
8774
|
tier: 't1',
|
|
8625
8775
|
mass: comp.mass,
|
|
8626
8776
|
itemType: 'component',
|
|
8627
|
-
stats,
|
|
8777
|
+
stats: resolvedStats,
|
|
8628
8778
|
};
|
|
8629
8779
|
}
|
|
8630
8780
|
function computeCapabilityGroup(moduleType, stats) {
|
|
@@ -8682,6 +8832,17 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
8682
8832
|
],
|
|
8683
8833
|
};
|
|
8684
8834
|
}
|
|
8835
|
+
case MODULE_HAULER: {
|
|
8836
|
+
const caps = computeHaulerCapabilities(stats);
|
|
8837
|
+
return {
|
|
8838
|
+
capability: 'Hauler',
|
|
8839
|
+
attributes: [
|
|
8840
|
+
{ label: 'Capacity', value: caps.capacity },
|
|
8841
|
+
{ label: 'Efficiency', value: caps.efficiency },
|
|
8842
|
+
{ label: 'Drain', value: caps.drain },
|
|
8843
|
+
],
|
|
8844
|
+
};
|
|
8845
|
+
}
|
|
8685
8846
|
case MODULE_STORAGE: {
|
|
8686
8847
|
const str = stats.strength ?? 500;
|
|
8687
8848
|
const duc = stats.ductility ?? 500;
|
|
@@ -8694,36 +8855,37 @@ function computeCapabilityGroup(moduleType, stats) {
|
|
|
8694
8855
|
return undefined;
|
|
8695
8856
|
}
|
|
8696
8857
|
}
|
|
8697
|
-
function resolveModule(id,
|
|
8858
|
+
function resolveModule(id, stats) {
|
|
8698
8859
|
const recipe = getModuleRecipeByItemId(id);
|
|
8699
8860
|
let attributes;
|
|
8700
|
-
if (
|
|
8701
|
-
const
|
|
8861
|
+
if (stats !== undefined) {
|
|
8862
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8702
8863
|
const modType = getModuleCapabilityType(id);
|
|
8703
|
-
const group = computeCapabilityGroup(modType,
|
|
8864
|
+
const group = computeCapabilityGroup(modType, decoded);
|
|
8704
8865
|
if (group)
|
|
8705
8866
|
attributes = [group];
|
|
8706
8867
|
}
|
|
8707
8868
|
return {
|
|
8708
8869
|
itemId: id,
|
|
8709
8870
|
name: recipe.name,
|
|
8710
|
-
icon:
|
|
8871
|
+
icon: itemAbbreviations[id] ?? moduleIcon,
|
|
8872
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8711
8873
|
tier: 't1',
|
|
8712
8874
|
mass: 0,
|
|
8713
8875
|
itemType: 'module',
|
|
8714
8876
|
attributes,
|
|
8715
8877
|
};
|
|
8716
8878
|
}
|
|
8717
|
-
function resolveEntity(id,
|
|
8879
|
+
function resolveEntity(id, stats, modules) {
|
|
8718
8880
|
const recipe = getEntityRecipeByItemId(id);
|
|
8719
8881
|
let attributes;
|
|
8720
8882
|
let moduleSlots;
|
|
8721
|
-
if (
|
|
8722
|
-
const
|
|
8883
|
+
if (stats !== undefined) {
|
|
8884
|
+
const decoded = decodeCraftedItemStats(id, toBigStats(stats));
|
|
8723
8885
|
attributes = [];
|
|
8724
8886
|
const isShip = recipe.id === 'ship-t1';
|
|
8725
8887
|
if (isShip) {
|
|
8726
|
-
const hullCaps = computeShipHullCapabilities(
|
|
8888
|
+
const hullCaps = computeShipHullCapabilities(decoded);
|
|
8727
8889
|
attributes.push({
|
|
8728
8890
|
capability: 'Hull',
|
|
8729
8891
|
attributes: [
|
|
@@ -8733,7 +8895,7 @@ function resolveEntity(id, seed, modules) {
|
|
|
8733
8895
|
});
|
|
8734
8896
|
}
|
|
8735
8897
|
else {
|
|
8736
|
-
const containerCaps = computeContainerCapabilities(
|
|
8898
|
+
const containerCaps = computeContainerCapabilities(decoded);
|
|
8737
8899
|
attributes.push({
|
|
8738
8900
|
capability: 'Hull',
|
|
8739
8901
|
attributes: [
|
|
@@ -8748,10 +8910,10 @@ function resolveEntity(id, seed, modules) {
|
|
|
8748
8910
|
const mod = modules?.[i];
|
|
8749
8911
|
if (mod?.installed) {
|
|
8750
8912
|
const modItemId = Number(mod.installed.item_id.value.toString());
|
|
8751
|
-
const
|
|
8752
|
-
const
|
|
8913
|
+
const modStats = BigInt(mod.installed.stats.toString());
|
|
8914
|
+
const decodedStats = decodeCraftedItemStats(modItemId, modStats);
|
|
8753
8915
|
const modType = getModuleCapabilityType(modItemId);
|
|
8754
|
-
const group = computeCapabilityGroup(modType,
|
|
8916
|
+
const group = computeCapabilityGroup(modType, decodedStats);
|
|
8755
8917
|
const modRecipe = getModuleRecipeByItemId(modItemId);
|
|
8756
8918
|
return {
|
|
8757
8919
|
name: modRecipe?.name ?? 'Module',
|
|
@@ -8765,7 +8927,8 @@ function resolveEntity(id, seed, modules) {
|
|
|
8765
8927
|
return {
|
|
8766
8928
|
itemId: id,
|
|
8767
8929
|
name: recipe.name,
|
|
8768
|
-
icon:
|
|
8930
|
+
icon: itemAbbreviations[id] ?? componentIcon,
|
|
8931
|
+
abbreviation: itemAbbreviations[id] ?? null,
|
|
8769
8932
|
tier: 't1',
|
|
8770
8933
|
mass: 0,
|
|
8771
8934
|
itemType: 'entity',
|
|
@@ -8773,28 +8936,157 @@ function resolveEntity(id, seed, modules) {
|
|
|
8773
8936
|
moduleSlots,
|
|
8774
8937
|
};
|
|
8775
8938
|
}
|
|
8776
|
-
function resolveItem(itemId,
|
|
8939
|
+
function resolveItem(itemId, stats, modules) {
|
|
8777
8940
|
const id = toNum(itemId);
|
|
8778
8941
|
if (isModuleItem(id))
|
|
8779
|
-
return resolveModule(id,
|
|
8942
|
+
return resolveModule(id, stats);
|
|
8780
8943
|
if (getComponentById(id))
|
|
8781
|
-
return resolveComponent(id,
|
|
8944
|
+
return resolveComponent(id, stats);
|
|
8782
8945
|
if (getEntityRecipeByItemId(id))
|
|
8783
|
-
return resolveEntity(id,
|
|
8784
|
-
return resolveResource(id,
|
|
8946
|
+
return resolveEntity(id, stats, modules);
|
|
8947
|
+
return resolveResource(id, stats);
|
|
8948
|
+
}
|
|
8949
|
+
|
|
8950
|
+
const TEMPLATES = {
|
|
8951
|
+
engine: {
|
|
8952
|
+
id: 'module.engine.description',
|
|
8953
|
+
template: 'generates {thrust} thrust for travel while draining {drain} energy per distance travelled',
|
|
8954
|
+
params: [
|
|
8955
|
+
['thrust', 'Thrust'],
|
|
8956
|
+
['drain', 'Drain'],
|
|
8957
|
+
],
|
|
8958
|
+
highlightKeys: ['thrust', 'drain'],
|
|
8959
|
+
},
|
|
8960
|
+
generator: {
|
|
8961
|
+
id: 'module.generator.description',
|
|
8962
|
+
template: 'holds {capacity} maximum energy and restores {recharge} per second while recharging',
|
|
8963
|
+
params: [
|
|
8964
|
+
['capacity', 'Capacity'],
|
|
8965
|
+
['recharge', 'Recharge'],
|
|
8966
|
+
],
|
|
8967
|
+
highlightKeys: ['capacity', 'recharge'],
|
|
8968
|
+
},
|
|
8969
|
+
gatherer: {
|
|
8970
|
+
id: 'module.gatherer.description',
|
|
8971
|
+
template: 'mines resources at {yield} speed to a max depth of {depth} with {speed} gather speed while draining {drain} energy per second',
|
|
8972
|
+
params: [
|
|
8973
|
+
['yield', 'Yield'],
|
|
8974
|
+
['drain', 'Drain'],
|
|
8975
|
+
['depth', 'Depth'],
|
|
8976
|
+
['speed', 'Speed'],
|
|
8977
|
+
],
|
|
8978
|
+
highlightKeys: ['yield', 'depth', 'speed', 'drain'],
|
|
8979
|
+
},
|
|
8980
|
+
loader: {
|
|
8981
|
+
id: 'module.loader.description',
|
|
8982
|
+
template: '{quantity} loader that generates {thrust} thrust with a weight of {mass} per unit',
|
|
8983
|
+
params: [
|
|
8984
|
+
['quantity', 'Quantity'],
|
|
8985
|
+
['thrust', 'Thrust'],
|
|
8986
|
+
['mass', 'Mass'],
|
|
8987
|
+
],
|
|
8988
|
+
highlightKeys: ['quantity', 'thrust', 'mass'],
|
|
8989
|
+
},
|
|
8990
|
+
manufacturing: {
|
|
8991
|
+
id: 'module.manufacturing.description',
|
|
8992
|
+
template: 'manufactures items at {speed} speed while draining {drain} energy per second',
|
|
8993
|
+
params: [
|
|
8994
|
+
['speed', 'Speed'],
|
|
8995
|
+
['drain', 'Drain'],
|
|
8996
|
+
],
|
|
8997
|
+
highlightKeys: ['speed', 'drain'],
|
|
8998
|
+
},
|
|
8999
|
+
storage: {
|
|
9000
|
+
id: 'module.storage.description',
|
|
9001
|
+
template: 'boosts cargo capacity by {bonus}%',
|
|
9002
|
+
params: [['bonus', 'Capacity Bonus']],
|
|
9003
|
+
highlightKeys: ['bonus'],
|
|
9004
|
+
},
|
|
9005
|
+
hauler: {
|
|
9006
|
+
id: 'module.hauler.description',
|
|
9007
|
+
template: 'locks onto up to {capacity} targets at {efficiency} efficiency while draining {drain} energy per distance travelled per target',
|
|
9008
|
+
params: [
|
|
9009
|
+
['capacity', 'Capacity'],
|
|
9010
|
+
['efficiency', 'Efficiency'],
|
|
9011
|
+
['drain', 'Drain'],
|
|
9012
|
+
],
|
|
9013
|
+
highlightKeys: ['capacity', 'efficiency', 'drain'],
|
|
9014
|
+
},
|
|
9015
|
+
};
|
|
9016
|
+
function describeModule(input) {
|
|
9017
|
+
if (!input.attributes || input.attributes.length === 0)
|
|
9018
|
+
return null;
|
|
9019
|
+
const key = input.capability.toLowerCase();
|
|
9020
|
+
const spec = TEMPLATES[key];
|
|
9021
|
+
if (!spec)
|
|
9022
|
+
return null;
|
|
9023
|
+
const params = {};
|
|
9024
|
+
for (const [paramName, attrLabel] of spec.params) {
|
|
9025
|
+
const attr = input.attributes.find((a) => a.label === attrLabel);
|
|
9026
|
+
if (attr)
|
|
9027
|
+
params[paramName] = attr.value;
|
|
9028
|
+
}
|
|
9029
|
+
return {
|
|
9030
|
+
id: spec.id,
|
|
9031
|
+
template: spec.template,
|
|
9032
|
+
params,
|
|
9033
|
+
highlightKeys: spec.highlightKeys,
|
|
9034
|
+
};
|
|
9035
|
+
}
|
|
9036
|
+
function describeModuleForItem(resolved) {
|
|
9037
|
+
if (resolved.itemType !== 'module')
|
|
9038
|
+
return null;
|
|
9039
|
+
const group = resolved.attributes?.[0];
|
|
9040
|
+
if (!group)
|
|
9041
|
+
return null;
|
|
9042
|
+
return describeModule({ capability: group.capability, attributes: group.attributes });
|
|
9043
|
+
}
|
|
9044
|
+
function describeModuleForSlot(slot) {
|
|
9045
|
+
if (!slot.installed || !slot.name || !slot.attributes)
|
|
9046
|
+
return null;
|
|
9047
|
+
return describeModule({ capability: slot.name, attributes: slot.attributes });
|
|
9048
|
+
}
|
|
9049
|
+
function renderDescription(desc, options) {
|
|
9050
|
+
const translate = options?.translate ?? ((_id, fallback) => fallback);
|
|
9051
|
+
const formatNumber = options?.formatNumber ?? ((n) => n.toLocaleString('en-US'));
|
|
9052
|
+
const tpl = translate(desc.id, desc.template);
|
|
9053
|
+
const spans = [];
|
|
9054
|
+
const regex = /\{([A-Za-z_][A-Za-z0-9_]*)\}/g;
|
|
9055
|
+
let lastIndex = 0;
|
|
9056
|
+
let m;
|
|
9057
|
+
while ((m = regex.exec(tpl)) !== null) {
|
|
9058
|
+
if (m.index > lastIndex) {
|
|
9059
|
+
spans.push({ text: tpl.slice(lastIndex, m.index) });
|
|
9060
|
+
}
|
|
9061
|
+
const paramName = m[1] ?? '';
|
|
9062
|
+
const raw = desc.params[paramName];
|
|
9063
|
+
if (raw === undefined) {
|
|
9064
|
+
spans.push({ text: `{${paramName}}` });
|
|
9065
|
+
}
|
|
9066
|
+
else {
|
|
9067
|
+
const formatted = typeof raw === 'number' ? formatNumber(raw) : raw;
|
|
9068
|
+
const highlight = desc.highlightKeys.includes(paramName);
|
|
9069
|
+
spans.push(highlight ? { text: formatted, highlight: true } : { text: formatted });
|
|
9070
|
+
}
|
|
9071
|
+
lastIndex = m.index + m[0].length;
|
|
9072
|
+
}
|
|
9073
|
+
if (lastIndex < tpl.length) {
|
|
9074
|
+
spans.push({ text: tpl.slice(lastIndex) });
|
|
9075
|
+
}
|
|
9076
|
+
return spans;
|
|
8785
9077
|
}
|
|
8786
9078
|
|
|
8787
9079
|
function readCommonBase(data) {
|
|
8788
9080
|
return {
|
|
8789
9081
|
quantity: Number(data.quantity),
|
|
8790
|
-
|
|
9082
|
+
stats: String(data.stats),
|
|
8791
9083
|
origin_x: String(data.origin_x),
|
|
8792
9084
|
origin_y: String(data.origin_y),
|
|
8793
9085
|
};
|
|
8794
9086
|
}
|
|
8795
9087
|
function deserializeScalar(data, itemId) {
|
|
8796
9088
|
const base = readCommonBase(data);
|
|
8797
|
-
return { item_id: itemId, quantity: base.quantity,
|
|
9089
|
+
return { item_id: itemId, quantity: base.quantity, stats: base.stats };
|
|
8798
9090
|
}
|
|
8799
9091
|
const deserializeResource = deserializeScalar;
|
|
8800
9092
|
const deserializeComponent = deserializeScalar;
|
|
@@ -8802,15 +9094,15 @@ const deserializeModule = deserializeScalar;
|
|
|
8802
9094
|
function deserializeEntity(data, itemId) {
|
|
8803
9095
|
const base = readCommonBase(data);
|
|
8804
9096
|
const moduleItems = (data.module_items ?? []).map((v) => Number(v));
|
|
8805
|
-
const
|
|
9097
|
+
const moduleStats = (data.module_stats ?? []).map((v) => String(v));
|
|
8806
9098
|
const layout = getEntitySlotLayout(itemId);
|
|
8807
9099
|
const modules = layout.map((slot, i) => ({
|
|
8808
9100
|
type: slot.type,
|
|
8809
9101
|
installed: moduleItems[i] && moduleItems[i] !== 0
|
|
8810
|
-
? { item_id: moduleItems[i],
|
|
9102
|
+
? { item_id: moduleItems[i], stats: moduleStats[i] }
|
|
8811
9103
|
: undefined,
|
|
8812
9104
|
}));
|
|
8813
|
-
return { item_id: itemId, quantity: base.quantity,
|
|
9105
|
+
return { item_id: itemId, quantity: base.quantity, stats: base.stats, modules };
|
|
8814
9106
|
}
|
|
8815
9107
|
function deserializeAsset(data, itemId) {
|
|
8816
9108
|
const type = itemTypeCode(itemId);
|
|
@@ -8829,24 +9121,24 @@ function deserializeAsset(data, itemId) {
|
|
|
8829
9121
|
function idiv(a, b) {
|
|
8830
9122
|
return Math.floor(a / b);
|
|
8831
9123
|
}
|
|
8832
|
-
function computeBaseHullmass(
|
|
8833
|
-
const density = decodeStat(
|
|
9124
|
+
function computeBaseHullmass(stats) {
|
|
9125
|
+
const density = decodeStat(stats, 1);
|
|
8834
9126
|
return 25000 + 75 * density;
|
|
8835
9127
|
}
|
|
8836
|
-
function computeBaseCapacityShip(
|
|
8837
|
-
const s = decodeStat(
|
|
9128
|
+
function computeBaseCapacityShip(stats) {
|
|
9129
|
+
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
8838
9130
|
return Math.floor(1000000 * Math.pow(10, s / 2997));
|
|
8839
9131
|
}
|
|
8840
|
-
function computeBaseCapacityWarehouse(
|
|
8841
|
-
const s = decodeStat(
|
|
9132
|
+
function computeBaseCapacityWarehouse(stats) {
|
|
9133
|
+
const s = decodeStat(stats, 0) + decodeStat(stats, 2) + decodeStat(stats, 3);
|
|
8842
9134
|
return Math.floor(20000000 * Math.pow(10, s / 2997));
|
|
8843
9135
|
}
|
|
8844
9136
|
const computeEngineThrust = (vol) => 400 + idiv(vol * 3, 4);
|
|
8845
9137
|
const computeEngineDrain = (thm) => Math.max(30, 50 - idiv(thm, 70));
|
|
8846
9138
|
const computeGeneratorCap = (res) => 300 + idiv(res, 6);
|
|
8847
|
-
const computeGeneratorRech = (clr) =>
|
|
9139
|
+
const computeGeneratorRech = (clr) => 1 + idiv(clr * 3, 1000);
|
|
8848
9140
|
const computeGathererYield = (str) => 200 + str;
|
|
8849
|
-
const computeGathererDrain = (con) => Math.max(
|
|
9141
|
+
const computeGathererDrain = (con) => Math.max(250, 1250 - idiv(con * 25, 20));
|
|
8850
9142
|
const computeGathererDepth = (tol) => 200 + idiv(tol * 3, 2);
|
|
8851
9143
|
const computeGathererSpeed = (ref) => 100 + idiv(ref * 4, 5);
|
|
8852
9144
|
const computeLoaderMass = (duc) => Math.max(200, 2000 - duc * 2);
|
|
@@ -8885,7 +9177,7 @@ function moduleDisplayName(itemId) {
|
|
|
8885
9177
|
return 'Module';
|
|
8886
9178
|
}
|
|
8887
9179
|
}
|
|
8888
|
-
function formatModuleLine(slot, itemId,
|
|
9180
|
+
function formatModuleLine(slot, itemId, stats) {
|
|
8889
9181
|
let out = `Slot ${slot} - `;
|
|
8890
9182
|
if (itemId === 0) {
|
|
8891
9183
|
out += '(empty)';
|
|
@@ -8895,41 +9187,41 @@ function formatModuleLine(slot, itemId, seed) {
|
|
|
8895
9187
|
const subtype = getModuleCapabilityType(itemId);
|
|
8896
9188
|
switch (subtype) {
|
|
8897
9189
|
case MODULE_ENGINE: {
|
|
8898
|
-
const vol = decodeStat(
|
|
8899
|
-
const thm = decodeStat(
|
|
9190
|
+
const vol = decodeStat(stats, 0);
|
|
9191
|
+
const thm = decodeStat(stats, 1);
|
|
8900
9192
|
out += ` Thrust ${computeEngineThrust(vol)} Drain ${computeEngineDrain(thm)}`;
|
|
8901
9193
|
break;
|
|
8902
9194
|
}
|
|
8903
9195
|
case MODULE_GENERATOR: {
|
|
8904
|
-
const res = decodeStat(
|
|
8905
|
-
const clr = decodeStat(
|
|
9196
|
+
const res = decodeStat(stats, 0);
|
|
9197
|
+
const clr = decodeStat(stats, 1);
|
|
8906
9198
|
out += ` Capacity ${computeGeneratorCap(res)} Recharge ${computeGeneratorRech(clr)}`;
|
|
8907
9199
|
break;
|
|
8908
9200
|
}
|
|
8909
9201
|
case MODULE_GATHERER: {
|
|
8910
|
-
const str = decodeStat(
|
|
8911
|
-
const tol = decodeStat(
|
|
8912
|
-
const con = decodeStat(
|
|
8913
|
-
const ref = decodeStat(
|
|
9202
|
+
const str = decodeStat(stats, 0);
|
|
9203
|
+
const tol = decodeStat(stats, 1);
|
|
9204
|
+
const con = decodeStat(stats, 3);
|
|
9205
|
+
const ref = decodeStat(stats, 4);
|
|
8914
9206
|
out += ` Yield ${computeGathererYield(str)} Depth ${computeGathererDepth(tol)} Speed ${computeGathererSpeed(ref)} Drain ${computeGathererDrain(con)}`;
|
|
8915
9207
|
break;
|
|
8916
9208
|
}
|
|
8917
9209
|
case MODULE_LOADER: {
|
|
8918
|
-
const duc = decodeStat(
|
|
8919
|
-
const pla = decodeStat(
|
|
9210
|
+
const duc = decodeStat(stats, 0);
|
|
9211
|
+
const pla = decodeStat(stats, 1);
|
|
8920
9212
|
out += ` Mass ${computeLoaderMass(duc)} Thrust ${computeLoaderThrust(pla)}`;
|
|
8921
9213
|
break;
|
|
8922
9214
|
}
|
|
8923
9215
|
case MODULE_CRAFTER: {
|
|
8924
|
-
const rea = decodeStat(
|
|
8925
|
-
const clr = decodeStat(
|
|
9216
|
+
const rea = decodeStat(stats, 0);
|
|
9217
|
+
const clr = decodeStat(stats, 1);
|
|
8926
9218
|
out += ` Speed ${computeCrafterSpeed(rea)} Drain ${computeCrafterDrain(clr)}`;
|
|
8927
9219
|
break;
|
|
8928
9220
|
}
|
|
8929
9221
|
case MODULE_STORAGE: {
|
|
8930
|
-
const str = decodeStat(
|
|
8931
|
-
const duc = decodeStat(
|
|
8932
|
-
const pur = decodeStat(
|
|
9222
|
+
const str = decodeStat(stats, 0);
|
|
9223
|
+
const duc = decodeStat(stats, 1);
|
|
9224
|
+
const pur = decodeStat(stats, 2);
|
|
8933
9225
|
const sum = str + duc + pur;
|
|
8934
9226
|
const pct = 10 + idiv(sum * 10, 2997);
|
|
8935
9227
|
out += ` +${pct}% capacity`;
|
|
@@ -8938,14 +9230,14 @@ function formatModuleLine(slot, itemId, seed) {
|
|
|
8938
9230
|
}
|
|
8939
9231
|
return out;
|
|
8940
9232
|
}
|
|
8941
|
-
function buildEntityDescription(itemId,
|
|
8942
|
-
const hullMass = computeBaseHullmass(
|
|
9233
|
+
function buildEntityDescription(itemId, hullStats, moduleItems, moduleStats) {
|
|
9234
|
+
const hullMass = computeBaseHullmass(hullStats);
|
|
8943
9235
|
let baseCapacity = 0;
|
|
8944
9236
|
if (itemId === ITEM_SHIP_T1_PACKED) {
|
|
8945
|
-
baseCapacity = computeBaseCapacityShip(
|
|
9237
|
+
baseCapacity = computeBaseCapacityShip(hullStats);
|
|
8946
9238
|
}
|
|
8947
9239
|
else if (itemId === ITEM_WAREHOUSE_T1_PACKED) {
|
|
8948
|
-
baseCapacity = computeBaseCapacityWarehouse(
|
|
9240
|
+
baseCapacity = computeBaseCapacityWarehouse(hullStats);
|
|
8949
9241
|
}
|
|
8950
9242
|
let out = entityDisplayName(itemId);
|
|
8951
9243
|
out += ` - Hull ${hullMass} mass`;
|
|
@@ -8954,7 +9246,7 @@ function buildEntityDescription(itemId, hullSeed, moduleItems, moduleSeeds) {
|
|
|
8954
9246
|
}
|
|
8955
9247
|
out += '\n\n';
|
|
8956
9248
|
for (let i = 0; i < moduleItems.length; i++) {
|
|
8957
|
-
out += formatModuleLine(i, moduleItems[i],
|
|
9249
|
+
out += formatModuleLine(i, moduleItems[i], moduleStats[i] ?? 0n);
|
|
8958
9250
|
out += '\n';
|
|
8959
9251
|
}
|
|
8960
9252
|
return out;
|
|
@@ -9158,6 +9450,7 @@ exports.capabilityAttributes = capabilityAttributes;
|
|
|
9158
9450
|
exports.capabilityNames = capabilityNames;
|
|
9159
9451
|
exports.capsHasCrafter = capsHasCrafter;
|
|
9160
9452
|
exports.capsHasGatherer = capsHasGatherer;
|
|
9453
|
+
exports.capsHasHauler = capsHasHauler;
|
|
9161
9454
|
exports.capsHasLoaders = capsHasLoaders;
|
|
9162
9455
|
exports.capsHasMass = capsHasMass;
|
|
9163
9456
|
exports.capsHasMovement = capsHasMovement;
|
|
@@ -9165,6 +9458,7 @@ exports.capsHasStorage = capsHasStorage;
|
|
|
9165
9458
|
exports.cargoItemToStack = cargoItemToStack;
|
|
9166
9459
|
exports.cargoUtils = cargoUtils;
|
|
9167
9460
|
exports.categoryColors = categoryColors;
|
|
9461
|
+
exports.categoryIconShapes = categoryIconShapes;
|
|
9168
9462
|
exports.categoryIcons = categoryIcons;
|
|
9169
9463
|
exports.categoryItemMass = categoryItemMass;
|
|
9170
9464
|
exports.componentIcon = componentIcon;
|
|
@@ -9175,7 +9469,7 @@ exports.computeBaseHullmass = computeBaseHullmass;
|
|
|
9175
9469
|
exports.computeComponentStats = computeComponentStats;
|
|
9176
9470
|
exports.computeContainerCapabilities = computeContainerCapabilities;
|
|
9177
9471
|
exports.computeContainerT2Capabilities = computeContainerT2Capabilities;
|
|
9178
|
-
exports.
|
|
9472
|
+
exports.computeCraftedOutputStats = computeCraftedOutputStats;
|
|
9179
9473
|
exports.computeCrafterDrain = computeCrafterDrain;
|
|
9180
9474
|
exports.computeCrafterSpeed = computeCrafterSpeed;
|
|
9181
9475
|
exports.computeEngineCapabilities = computeEngineCapabilities;
|
|
@@ -9201,6 +9495,7 @@ exports.computeManufacturingCapabilities = computeManufacturingCapabilities;
|
|
|
9201
9495
|
exports.computeShipCapabilities = computeShipCapabilities;
|
|
9202
9496
|
exports.computeShipHullCapabilities = computeShipHullCapabilities;
|
|
9203
9497
|
exports.computeStorageCapabilities = computeStorageCapabilities;
|
|
9498
|
+
exports.computeWarehouseCapabilities = computeWarehouseCapabilities;
|
|
9204
9499
|
exports.computeWarehouseHullCapabilities = computeWarehouseHullCapabilities;
|
|
9205
9500
|
exports.coordsToLocationId = coordsToLocationId;
|
|
9206
9501
|
exports.createInventoryAccessor = createInventoryAccessor;
|
|
@@ -9216,6 +9511,9 @@ exports.deriveLocationSize = deriveLocationSize;
|
|
|
9216
9511
|
exports.deriveLocationStatic = deriveLocationStatic;
|
|
9217
9512
|
exports.deriveResourceStats = deriveResourceStats;
|
|
9218
9513
|
exports.deriveStratum = deriveStratum;
|
|
9514
|
+
exports.describeModule = describeModule;
|
|
9515
|
+
exports.describeModuleForItem = describeModuleForItem;
|
|
9516
|
+
exports.describeModuleForSlot = describeModuleForSlot;
|
|
9219
9517
|
exports.deserializeAsset = deserializeAsset;
|
|
9220
9518
|
exports.deserializeComponent = deserializeComponent;
|
|
9221
9519
|
exports.deserializeEntity = deserializeEntity;
|
|
@@ -9223,6 +9521,7 @@ exports.deserializeModule = deserializeModule;
|
|
|
9223
9521
|
exports.deserializeResource = deserializeResource;
|
|
9224
9522
|
exports.distanceBetweenCoordinates = distanceBetweenCoordinates;
|
|
9225
9523
|
exports.distanceBetweenPoints = distanceBetweenPoints;
|
|
9524
|
+
exports.encodeGatheredCargoStats = encodeGatheredCargoStats;
|
|
9226
9525
|
exports.encodeStats = encodeStats;
|
|
9227
9526
|
exports.energyPercent = energyPercent;
|
|
9228
9527
|
exports.entityDisplayName = entityDisplayName;
|
|
@@ -9284,8 +9583,8 @@ exports.isGatherableLocation = isGatherableLocation;
|
|
|
9284
9583
|
exports.isInvertedAttribute = isInvertedAttribute;
|
|
9285
9584
|
exports.isModuleItem = isModuleItem;
|
|
9286
9585
|
exports.isRelatedItem = isRelatedItem;
|
|
9586
|
+
exports.itemAbbreviations = itemAbbreviations;
|
|
9287
9587
|
exports.itemCategory = itemCategory;
|
|
9288
|
-
exports.itemIcons = itemIcons;
|
|
9289
9588
|
exports.itemIds = itemIds;
|
|
9290
9589
|
exports.itemOffset = itemOffset;
|
|
9291
9590
|
exports.itemTier = itemTier;
|
|
@@ -9305,6 +9604,7 @@ exports.projectEntity = projectEntity;
|
|
|
9305
9604
|
exports.projectEntityAt = projectEntityAt;
|
|
9306
9605
|
exports.readCommonBase = readCommonBase;
|
|
9307
9606
|
exports.removeFromStacks = removeFromStacks;
|
|
9607
|
+
exports.renderDescription = renderDescription;
|
|
9308
9608
|
exports.resolveItem = resolveItem;
|
|
9309
9609
|
exports.resolveStats = resolveStats;
|
|
9310
9610
|
exports.rollTier = rollTier;
|
|
@@ -9316,6 +9616,7 @@ exports.stackToCargoItem = stackToCargoItem;
|
|
|
9316
9616
|
exports.stacksEqual = stacksEqual;
|
|
9317
9617
|
exports.statMappings = statMappings;
|
|
9318
9618
|
exports.tierColors = tierColors;
|
|
9619
|
+
exports.tierLabels = tierLabels;
|
|
9319
9620
|
exports.toLocation = toLocation;
|
|
9320
9621
|
exports.validateSchedule = validateSchedule;
|
|
9321
9622
|
//# sourceMappingURL=shipload.js.map
|