{"version":3,"sources":["webpack:///./src/views/referencecurves/SFOC.vue?503a","webpack:///./src/consts/curveConfigDefaults.ts","webpack:///./src/components/referencecurves/SFOCPowerConfigEditDialog.vue?264e","webpack:///./src/components/VesselSelectSimple.vue?6953","webpack:///./src/components/VesselSelectSimple.vue","webpack:///./src/components/VesselSelectSimple.vue?16ac","webpack:///./src/components/VesselSelectSimple.vue?9b17","webpack:///./src/components/referencecurves/SFOCPowerTierDataCurveEditDialong.vue?9c85","webpack:///./src/components/VesselSelectSimple.vue?28df","webpack:///../../../src/components/VTextarea/VTextarea.ts","webpack:///./src/Scripts/utilities/numericFilter.js","webpack:///./src/types/PowerSpeedCurveConfig.ts","webpack:///./src/views/referencecurves/SFOC.vue?5f26","webpack:///./src/types/SFOCPowerCurveConfig.ts","webpack:///./src/components/referencecurves/SFOCPowerConfigEditDialog.vue?53f1","webpack:///./src/components/referencecurves/SFOCPowerTierDataEditDialog.vue?c488","webpack:///./src/components/referencecurves/SFOCPowerTierDataCurveEditDialong.vue?0eeb","webpack:///./src/components/referencecurves/SFOCPowerTierDataCurveEditDialong.vue","webpack:///./src/components/referencecurves/SFOCPowerTierDataCurveEditDialong.vue?6ebb","webpack:///./src/components/referencecurves/SFOCPowerTierDataCurveEditDialong.vue?4a74","webpack:///./src/components/referencecurves/SFOCPowerTierDataEditDialog.vue","webpack:///./src/components/referencecurves/SFOCPowerTierDataEditDialog.vue?1c49","webpack:///./src/components/referencecurves/SFOCPowerTierDataEditDialog.vue?3967","webpack:///./src/Scripts/clients/sfoc-power-curve-client.js","webpack:///./src/components/referencecurves/SFOCPowerConfigEditDialog.vue","webpack:///./src/components/referencecurves/SFOCPowerConfigEditDialog.vue?4e78","webpack:///./src/components/referencecurves/SFOCPowerConfigEditDialog.vue?d1ca","webpack:///./src/views/referencecurves/SFOC.vue","webpack:///./src/views/referencecurves/SFOC.vue?d476","webpack:///./src/views/referencecurves/SFOC.vue?2c1f"],"names":["curveTypeFormula","CurveFunction","Hoerl","min","max","Rational","Polynomial","Power","render","_vm","this","_h","$createElement","_c","_self","staticClass","_l","vessel","key","id","attrs","name","on","$event","toggleVesselSelection","model","value","selectedVesselIds","callback","$$v","$set","expression","_t","staticRenderFns","VesselSelectSimple","vesselIds","vessels","forEach","isSelected","Object","keys","vesselId","parseInt","find","v","index","selectedVessels","findIndex","push","splice","$emit","some","Vue","__decorate","PropSync","type","Array","default","Prop","required","Component","component","VCheckbox","VList","VListItem","baseMixins","mixins","VTextField","extend","props","autoGrow","Boolean","noResize","rowHeight","Number","String","validator","isNaN","parseFloat","rows","computed","classes","noResizeHandle","options","call","watch","val","$nextTick","calculateInputHeight","$refs","input","_this$$refs$input","style","removeProperty","lazyValue","mounted","setTimeout","methods","height","scrollHeight","minHeight","Math","genInput","tag","data","onInput","e","onKeyDown","isFocused","keyCode","stopPropagation","event","window","expect","target","toString","test","preventDefault","EngineTier","Constant","_v","addConfig","doSearchDebounced","slot","headers","filtredConfigs","debounceLoader","scopedSlots","_u","fn","ref","item","_g","isConfigValid","_s","minSfoc","maxSfoc","minPower","maxPower","getVesselName","openConfigEditDialog","deleteConfig","proxy","editDialog","configToEdit","allVessels","currentCompanyVessels","fetchConfigs","dialogWidth","isOpen","selectedTab","clonedConfig","numericFilter","replaceDecimalPeriod","_n","tiers","curves","length","openTierDataEditModal","deleteTierData","addNewTier","companies","contentClass","onCompanyChanged","selectedCompanyId","filteredVessels","saveConfig","discardChanges","editTierDataDialog","tierToEdit","handleTierDataSave","_e","TierOptions","clonedTierData","fromPower","toPower","openTierDataCurveEditModal","addNewCurve","saveChanges","editCurveSegmentDialog","config","curveSegmentToEdit","handleCurveSegmentSave","curveOptions","clonedCurveData","selectedCurveFunctionFormula","parameter","constant","refInFor","isAvailableToRemove","isRemoveConstantEnabled","removeParameter","isAddConstantEnabled","addParameter","SFOCPowerTierDataCurveEditDialong","parameters","curveFunction","selectedCurveFunction","JSON","parse","stringify","curveData","parametersNeeded","addMissingParameters","slice","missingParameters","filter","p","c","curveDataId","numberHelper","numericWithNegativeFilter","includes","internalValue","replace","curveParameters","showActions","parameterIndex","Watch","VBtn","VCard","VCardActions","VCardText","VCol","VDialog","VDivider","VIcon","VRow","VSelect","VToolbar","VToolbarTitle","VTooltip","SFOCPowerTierDataEditDialog","text","class","width","sortable","tierData","tierCurveData","confirmDelete","open","confirmed","indexOf","newCurve","tierId","updatedCurveData","Ref","components","ConfirmDialog","VDataTable","SfocPowerCurveClient","net","get","post","put","del","Companies","getModule","CompaniesModule","store","User","UserModule","SFOCPowerConfigEditDialog","showAllCompany","searchQuery","_","debounce","updateSearchQueryInput","alreadySelectedVesselIds","i","userCompanyId","toLowerCase","tier","newValue","newTier","configId","Tier2","tierValue","map","SFOCPowerCurveClient","updateConfig","handleConfigChange","VesselsClient","getVesselsByCompanyId","updatedTierData","refreshCompanies","getVessels","unshift","VProgressCircular","VTab","VTabItem","VTabs","VTabsItems","VTextarea","SFOC","configs","isAdmin","vesselInSearch","isVesselInSearch","hasSearchQuery","description","getAllConfigs","postEmptyConfig","minNumberOfConstants","numberOfConstants","tierCount","hasAtLeastOneTier","hasMaxOneOfeachTier","hasMaxOneOfEachTier","hasAtLeastOneCurve","every","t","areCurvesValid","isValidCurveData","areAllPowerSet","areAllConstantsSet","$router","ignoreCompany","VSpacer"],"mappings":"yIAAA,W,oGCkCaA,GAnBmB,sBAC7BC,OAAcC,MAAQ,CACrBC,IAAK,EACLC,IAAK,IAHuB,iBAK7BH,OAAcI,SAAW,CACxBF,IAAK,EACLC,IAAK,IAPuB,iBAS7BH,OAAcK,WAAa,CAC1BH,IAAK,EACLC,IAAK,IAXuB,iBAa7BH,OAAcM,MAAQ,CACrBJ,IAAK,EACLC,IAAK,IAIoB,sBAC1BH,OAAcC,MAAQ,mBADI,iBAE1BD,OAAcI,SAAW,wBAFC,iBAG1BJ,OAAcK,WAAa,uBAHD,iBAI1BL,OAAcM,MAAQ,WAJI,I,2DClC7B,W,6DCAA,IAAIC,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,MAAM,CAACE,YAAY,iBAAiB,CAACF,EAAG,SAAS,CAACE,YAAY,yBAAyB,CAACN,EAAIO,GAAIP,EAAW,SAAE,SAASQ,GAAQ,OAAOJ,EAAG,cAAc,CAACK,IAAID,EAAOE,GAAGC,MAAM,CAAC,MAAQ,oBAAoB,IAAM,KAAK,CAACP,EAAG,aAAa,CAACO,MAAM,CAAC,MAAQH,EAAOI,KAAK,MAAQ,WAAWC,GAAG,CAAC,OAAS,SAASC,GAAQ,OAAOd,EAAIe,sBAAsBP,KAAUQ,MAAM,CAACC,MAAOjB,EAAIkB,kBAAkBV,EAAOE,IAAKS,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAIkB,kBAAmBV,EAAOE,GAAIU,IAAME,WAAW,kCAAkCtB,EAAIuB,GAAG,0BAA0B,KAAK,CAAC,OAASf,KAAU,OAAM,GAAGR,EAAIuB,GAAG,mBAAmB,IAC/rBC,EAAkB,G,sICkCDC,EAAkB,iLAMrC,WAAqB,WACbC,EAAqC,GAI3C,OAHAzB,KAAK0B,QAAQC,SAAQ,SAAApB,GACnBkB,EAAUlB,EAAOE,IAAM,EAAKmB,WAAWrB,EAAOE,OAEzCgB,GAX4B,IAcrC,SAAsBT,GAA8B,WAClDa,OAAOC,KAAKd,GAAOW,SAAQ,SAAAI,GACzB,IAAMtB,EAAKuB,SAASD,EAAU,IACxBxB,EAAS,EAAKmB,QAAQO,MAAK,SAAAC,GAAC,OAAIA,EAAEzB,KAAOA,KAC3CF,GAAUS,EAAMP,KAAQ,EAAKmB,WAAWnB,IAC1C,EAAKK,sBAAsBP,QAnBI,mCAwBrC,SAAsBA,GACpB,IAAM4B,EAAQnC,KAAKoC,gBAAgBC,WAAU,SAAAH,GAAC,OAAIA,EAAEzB,KAAOF,EAAOE,OACnD,IAAX0B,EACFnC,KAAKoC,gBAAgBE,KAAK/B,GAE1BP,KAAKoC,gBAAgBG,OAAOJ,EAAO,GAErCnC,KAAKwC,MAAM,oBAAqBjC,KA/BG,wBAkCrC,SAAWE,GACT,OAAOT,KAAKoC,gBAAgBK,MAAK,SAAAP,GAAC,OAAIA,EAAEzB,KAAOA,SAnCZ,GAASiC,QAE9CC,gBADCC,eAAS,sBAAuB,CAAEC,KAAMC,MAAOC,QAAS,iBAAM,OAC/D,sCAEAJ,gBADCK,eAAK,CAAEH,KAAMC,MAAOC,QAAS,iBAAM,IAAIE,UAAU,KAClD,8BAJmBzB,EAAkB,gBADtC0B,eAAU,KACU1B,WCnCwX,I,iFCQzY2B,EAAY,eACd,EACArD,EACAyB,GACA,EACA,KACA,WACA,MAIa,OAAA4B,EAAiB,QAOhC,IAAkBA,EAAW,CAACC,YAAA,KAAUC,QAAA,KAAMC,YAAA,Q,2DC1B9C,W,kCCAA,W,gGCkBMC,EAAaC,eAGjBC,QAIaF,SAAWG,OAAO,CAC/B/C,KAAM,aAENgD,MAAO,CACLC,SAAUC,QACVC,SAAUD,QACVE,UAAW,CACTlB,KAAM,CAACmB,OAAQC,QACflB,QAAS,GACTmB,UAAY,SAAAhC,GAAD,OAAaiC,MAAMC,WAAWlC,MAE3CmC,KAAM,CACJxB,KAAM,CAACmB,OAAQC,QACflB,QAAS,EACTmB,UAAY,SAAAhC,GAAD,OAAaiC,MAAMnC,SAASE,EAAG,QAI9CoC,SAAU,CACRC,QADQ,WAEN,uBACE,cAAc,EACd,wBAAyBvE,KAAK4D,SAC9B,wBAAyB5D,KAAKwE,gBAC3Bf,OAAWgB,QAAQH,SAASC,QAAQG,KAAK1E,QAGhDwE,eATQ,WAUN,OAAOxE,KAAK8D,UAAY9D,KAAK4D,WAIjCe,MAAO,CACLf,SADK,SACKgB,GAAY,WACpB5E,KAAK6E,WAAU,WAAK,MAClBD,EACI,EAAKE,uBADN,SAEC,EAAKC,MAAMC,QAAXC,EAAkBC,MAAMC,eAAe,cAG/CC,UARK,WASHpF,KAAK4D,UAAY5D,KAAK6E,UAAU7E,KAAK8E,uBAEvCf,UAXK,WAYH/D,KAAK4D,UAAY5D,KAAK6E,UAAU7E,KAAK8E,wBAIzCO,QAhD+B,WAgDxB,WACLC,YAAW,WACT,EAAK1B,UAAY,EAAKkB,yBACrB,IAGLS,QAAS,CACPT,qBADO,WAEL,IAAME,EAAQhF,KAAK+E,MAAMC,MACzB,GAAKA,EAAL,CAEAA,EAAME,MAAMM,OAAS,IACrB,IAAMA,EAASR,EAAMS,aACfC,EAAY1D,SAAShC,KAAKqE,KAAM,IAAMD,WAAWpE,KAAK+D,WAG5DiB,EAAME,MAAMM,OAASG,KAAKjG,IAAIgG,EAAWF,GAAU,OAErDI,SAZO,WAaL,IAAMZ,EAAQvB,OAAWgB,QAAQc,QAAQK,SAASlB,KAAK1E,MAMvD,OAJAgF,EAAMa,IAAM,kBACLb,EAAMc,KAAMpF,MAAOmC,KAC1BmC,EAAMc,KAAMpF,MAAO2D,KAAOrE,KAAKqE,KAExBW,GAETe,QArBO,SAqBEC,GACPvC,OAAWgB,QAAQc,QAAQQ,QAAQrB,KAAK1E,KAAMgG,GAC9ChG,KAAK4D,UAAY5D,KAAK8E,wBAExBmB,UAzBO,SAyBID,GAILhG,KAAKkG,WAA2B,KAAdF,EAAEG,SACtBH,EAAEI,kBAGJpG,KAAKwC,MAAM,UAAWwD,Q,0EChHb,gBAAUK,GACvBA,EAAQA,GAAgBC,OAAOD,MAC/B,IAAME,EAASF,EAAMG,OAAOxF,MAAMyF,WAAaJ,EAAM7F,IAAIiG,WACzD,OAAQ,sBAAsBC,KAAKH,IAAUF,EAAMM,mB,kCCsB9C,IAAKpH,EAAZ,2CAAYA,GACVA,mBACAA,6BACAA,yBACAA,mBAJF,CAAYA,MAAa,M,yCCzBzB,ICsCYqH,EAKAC,ED3CR/G,EAAS,WAAa,IAAIC,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAOE,EAAG,oBAAoB,CAACA,EAAG,KAAK,CAACE,YAAY,oBAAoB,CAACN,EAAI+G,GAAG,gBAAgB3G,EAAG,YAAYA,EAAG,QAAQ,CAACE,YAAY,wBAAwBK,MAAM,CAAC,MAAQ,GAAG,MAAQ,UAAUE,GAAG,CAAC,MAAQb,EAAIgH,YAAY,CAAC5G,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,KAAK,CAACX,EAAI+G,GAAG,cAAc/G,EAAI+G,GAAG,iBAAiB,IAAI,GAAG3G,EAAG,eAAe,CAACE,YAAY,iCAAiCK,MAAM,CAAC,MAAQ,SAAS,cAAc,cAAc,yBAAyB,GAAG,eAAe,GAAG,KAAO,GAAG,SAAW,GAAG,MAAQ,IAAIE,GAAG,CAAC,MAAQb,EAAIiH,oBAAoB,CAAC7G,EAAG,WAAW,CAAC8G,KAAK,UAAU,CAAElH,EAAkB,eAAEI,EAAG,sBAAsB,CAACE,YAAY,gBAAgBK,MAAM,CAAC,cAAgB,GAAG,MAAQ,mBAAmBP,EAAG,SAAS,CAACJ,EAAI+G,GAAG,kBAAkB,IAAI,GAAG3G,EAAG,eAAe,CAACE,YAAY,qBAAqBK,MAAM,CAAC,QAAUX,EAAImH,QAAQ,MAAQnH,EAAIoH,eAAe,QAAUpH,EAAIqH,gBAAgBC,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,eAAe+G,GAAG,SAASC,GACpgC,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAACtH,EAAG,YAAY,CAACO,MAAM,CAAC,IAAM,IAAI2G,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,YAAY+G,GAAG,SAASC,GAC1F,IAAI5G,EAAK4G,EAAI5G,GACb,MAAO,CAACT,EAAG,OAAOJ,EAAI2H,GAAG,GAAG9G,GAAI,CAAEb,EAAI4H,cAAcF,GAAOtH,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,YAAY,CAACX,EAAI+G,GAAG,8BAA8B3G,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,UAAU,CAACX,EAAI+G,GAAG,+BAA+B,OAAO,MAAK,IAAO,CAAE/G,EAAI4H,cAAcF,GAAOtH,EAAG,OAAO,CAACJ,EAAI+G,GAAG,qBAAqB3G,EAAG,OAAO,CAACJ,EAAI+G,GAAG,8BAA8B,CAACtG,IAAI,YAAY+G,GAAG,SAASC,GACxX,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAAC1H,EAAI+G,GAAG,IAAI/G,EAAI6H,GAAGH,EAAKI,SAAS,MAAM9H,EAAI6H,GAAGH,EAAKK,SAAS,QAAQ,CAACtH,IAAI,aAAa+G,GAAG,SAASC,GACzG,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAAC1H,EAAI+G,GAAG,IAAI/G,EAAI6H,GAAGH,EAAKM,UAAU,MAAMhI,EAAI6H,GAAGH,EAAKO,UAAU,QAAQ,CAACxH,IAAI,eAAe+G,GAAG,SAASC,GAC7G,IAAIC,EAAOD,EAAIC,KACf,OAAO1H,EAAIO,GAAImH,EAAc,WAAE,SAAS1F,EAASI,GAAO,OAAOhC,EAAG,YAAY,CAACK,IAAI2B,EAAMzB,MAAM,CAAC,IAAM,IAAI2G,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,YAAY+G,GAAG,SAASC,GAC3J,IAAI5G,EAAK4G,EAAI5G,GACb,MAAO,CAACT,EAAG,OAAOJ,EAAI2H,GAAG,GAAG9G,GAAI,CAACb,EAAI+G,GAAG,IAAI/G,EAAI6H,GAAG7H,EAAIkI,cAAclG,IAAW,YAAY,MAAK,IAAO,CAAC5B,EAAG,OAAO,CAACJ,EAAI+G,GAAG/G,EAAI6H,GAAG7H,EAAIkI,cAAclG,cAAoB,CAACvB,IAAI,YAAY+G,GAAG,SAASC,GACrM,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAACtH,EAAG,YAAY,CAACO,MAAM,CAAC,IAAM,IAAI2G,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,YAAY+G,GAAG,SAASC,GAC1F,IAAI5G,EAAK4G,EAAI5G,GACb,MAAO,CAACT,EAAG,QAAQJ,EAAI2H,GAAG,CAAChH,MAAM,CAAC,MAAQ,GAAG,KAAO,IAAIE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOd,EAAImI,qBAAqBT,MAAS7G,GAAI,CAACT,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,YAAY,CAACX,EAAI+G,GAAG,yBAAyB,OAAO,MAAK,IAAO,CAAC3G,EAAG,OAAO,CAACJ,EAAI+G,GAAG,sBAAsB,CAACtG,IAAI,cAAc+G,GAAG,SAASC,GACvS,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAACtH,EAAG,YAAY,CAACO,MAAM,CAAC,IAAM,IAAI2G,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,YAAY+G,GAAG,SAASC,GAC1F,IAAI5G,EAAK4G,EAAI5G,GACb,MAAO,CAACT,EAAG,QAAQJ,EAAI2H,GAAG,CAAChH,MAAM,CAAC,MAAQ,GAAG,KAAO,IAAIE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOd,EAAIoI,aAAaV,MAAS7G,GAAI,CAACT,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,QAAQ,CAACX,EAAI+G,GAAG,yBAAyB,OAAO,MAAK,IAAO,CAAC3G,EAAG,OAAO,CAACJ,EAAI+G,GAAG,wBAAyB/G,EAAY,SAAE,CAACS,IAAI,UAAU+G,GAAG,WAAW,MAAO,CAACpH,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,KAAK,CAACE,YAAY,WAAW,CAACN,EAAI+G,GAAG,0CAA0CsB,OAAM,GAAM,MAAM,MAAK,KAAQjI,EAAG,4BAA4B,CAACO,MAAM,CAAC,MAAQX,EAAIsI,WAAW,OAAStI,EAAIuI,aAAa,WAAavI,EAAIwI,WAAW,sBAAwBxI,EAAIyI,sBAAsB,YAAY,UAAU5H,GAAG,CAAC,eAAe,SAASC,GAAQd,EAAIsI,WAAWxH,GAAQ,aAAed,EAAI0I,gBAAgBtI,EAAG,gBAAgB,CAACqH,IAAI,mBAAmB,IAC3wBjG,EAAkB,G,gOErBlB,EAAS,WAAa,IAAIxB,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAgB,aAAEI,EAAG,WAAW,CAACO,MAAM,CAAC,YAAYX,EAAI2I,aAAa3H,MAAM,CAACC,MAAOjB,EAAU,OAAEmB,SAAS,SAAUC,GAAMpB,EAAI4I,OAAOxH,GAAKE,WAAW,WAAW,CAAClB,EAAG,SAAS,CAACA,EAAG,YAAY,CAACE,YAAY,mBAAmBK,MAAM,CAAC,KAAO,GAAG,MAAQ,SAAS,MAAQ,GAAG,KAAO,KAAK,CAACP,EAAG,kBAAkB,CAACJ,EAAI+G,GAAG,mBAAmB,GAAG3G,EAAG,cAAc,CAACE,YAAY,aAAa,CAACF,EAAG,MAAM,CAACA,EAAG,SAAS,CAACE,YAAY,OAAOK,MAAM,CAAC,KAAO,IAAIK,MAAM,CAACC,MAAOjB,EAAe,YAAEmB,SAAS,SAAUC,GAAMpB,EAAI6I,YAAYzH,GAAKE,WAAW,gBAAgB,CAAClB,EAAG,QAAQ,CAACK,IAAI,UAAUH,YAAY,oBAAoB,CAACN,EAAI+G,GAAG,aAAa3G,EAAG,QAAQ,CAACK,IAAI,QAAQH,YAAY,oBAAoB,CAACN,EAAI+G,GAAG,WAAW3G,EAAG,QAAQ,CAACK,IAAI,UAAUH,YAAY,oBAAoB,CAACN,EAAI+G,GAAG,uBAAuB,GAAG3G,EAAG,eAAe,CAACE,YAAY,eAAeU,MAAM,CAACC,MAAOjB,EAAe,YAAEmB,SAAS,SAAUC,GAAMpB,EAAI6I,YAAYzH,GAAKE,WAAW,gBAAgB,CAAClB,EAAG,aAAa,CAACK,IAAI,WAAW,CAACL,EAAG,QAAQ,CAACE,YAAY,aAAa,CAACF,EAAG,QAAQ,CAACE,YAAY,OAAOK,MAAM,CAAC,KAAO,MAAM,CAACP,EAAG,eAAe,CAACO,MAAM,CAAC,MAAQ,cAAc,yBAAyB,GAAG,eAAe,GAAG,MAAQ,GAAG,KAAO,GAAG,SAAW,IAAIK,MAAM,CAACC,MAAOjB,EAAI8I,aAAuB,WAAE3H,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI8I,aAAc,aAAc1H,IAAME,WAAW,8BAA8B,GAAGlB,EAAG,QAAQ,CAACE,YAAY,OAAOK,MAAM,CAAC,KAAO,MAAM,CAACP,EAAG,eAAe,CAACO,MAAM,CAAC,MAAQ,oBAAoB,yBAAyB,GAAG,eAAe,GAAG,MAAQ,GAAG,KAAO,GAAG,SAAW,IAAIK,MAAM,CAACC,MAAOjB,EAAI8I,aAA4B,gBAAE3H,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI8I,aAAc,kBAAmB1H,IAAME,WAAW,mCAAmC,IAAI,GAAGlB,EAAG,QAAQ,CAACE,YAAY,aAAa,CAACF,EAAG,QAAQ,CAACE,YAAY,OAAOK,MAAM,CAAC,KAAO,MAAM,CAACP,EAAG,eAAe,CAACqH,IAAI,UAAU9G,MAAM,CAAC,MAAQ,YAAY,OAAS,QAAQ,yBAAyB,GAAG,eAAe,GAAG,MAAQ,GAAG,KAAO,GAAG,SAAW,IAAIE,GAAG,CAAC,SAAWb,EAAI+I,cAAc,MAAQ,SAASjI,GAAQ,OAAOd,EAAIgJ,qBAAqBlI,EAAQ,aAAaE,MAAM,CAACC,MAAOjB,EAAI8I,aAAoB,QAAE3H,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI8I,aAAc,UAAW9I,EAAIiJ,GAAG7H,KAAOE,WAAW,2BAA2B,GAAGlB,EAAG,QAAQ,CAACE,YAAY,OAAOK,MAAM,CAAC,KAAO,MAAM,CAACP,EAAG,eAAe,CAACqH,IAAI,UAAU9G,MAAM,CAAC,MAAQ,YAAY,OAAS,QAAQ,yBAAyB,GAAG,eAAe,GAAG,MAAQ,GAAG,KAAO,GAAG,SAAW,IAAIE,GAAG,CAAC,SAAWb,EAAI+I,cAAc,MAAQ,SAASjI,GAAQ,OAAOd,EAAIgJ,qBAAqBlI,EAAQ,aAAaE,MAAM,CAACC,MAAOjB,EAAI8I,aAAoB,QAAE3H,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI8I,aAAc,UAAW9I,EAAIiJ,GAAG7H,KAAOE,WAAW,2BAA2B,GAAGlB,EAAG,QAAQ,CAACE,YAAY,OAAOK,MAAM,CAAC,KAAO,MAAM,CAACP,EAAG,eAAe,CAACqH,IAAI,WAAW9G,MAAM,CAAC,MAAQ,aAAa,OAAS,KAAK,yBAAyB,GAAG,eAAe,GAAG,MAAQ,GAAG,KAAO,GAAG,SAAW,IAAIE,GAAG,CAAC,SAAWb,EAAI+I,cAAc,MAAQ,SAASjI,GAAQ,OAAOd,EAAIgJ,qBAAqBlI,EAAQ,cAAcE,MAAM,CAACC,MAAOjB,EAAI8I,aAAqB,SAAE3H,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI8I,aAAc,WAAY9I,EAAIiJ,GAAG7H,KAAOE,WAAW,4BAA4B,GAAGlB,EAAG,QAAQ,CAACE,YAAY,OAAOK,MAAM,CAAC,KAAO,MAAM,CAACP,EAAG,eAAe,CAACqH,IAAI,WAAW9G,MAAM,CAAC,MAAQ,aAAa,OAAS,KAAK,yBAAyB,GAAG,eAAe,GAAG,MAAQ,GAAG,KAAO,GAAG,SAAW,IAAIE,GAAG,CAAC,SAAWb,EAAI+I,cAAc,MAAQ,SAASjI,GAAQ,OAAOd,EAAIgJ,qBAAqBlI,EAAQ,cAAcE,MAAM,CAACC,MAAOjB,EAAI8I,aAAqB,SAAE3H,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI8I,aAAc,WAAY9I,EAAIiJ,GAAG7H,KAAOE,WAAW,4BAA4B,IAAI,GAAGlB,EAAG,QAAQ,CAACE,YAAY,QAAQ,CAACF,EAAG,QAAQ,CAACA,EAAG,aAAa,CAACO,MAAM,CAAC,aAAa,mBAAmB,MAAQ,cAAc,aAAa,KAAK,KAAO,IAAI,YAAY,GAAG,yBAAyB,GAAG,UAAY,GAAG,eAAe,GAAG,KAAO,GAAG,SAAW,IAAIK,MAAM,CAACC,MAAOjB,EAAI8I,aAAwB,YAAE3H,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI8I,aAAc,cAAe1H,IAAME,WAAW,+BAA+B,IAAI,IAAI,GAAGlB,EAAG,aAAa,CAACK,IAAI,SAAS,CAACL,EAAG,eAAe,CAACE,YAAY,mBAAmBK,MAAM,CAAC,QAAUX,EAAImH,QAAQ,MAAQnH,EAAI8I,aAAaI,OAAO5B,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,cAAc+G,GAAG,SAASC,GACzyI,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAAC1H,EAAI+G,GAAG,IAAI/G,EAAI6H,GAAGH,EAAKyB,OAAOC,QAAQ,QAAQ,CAAC3I,IAAI,YAAY+G,GAAG,SAASC,GACnF,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAACtH,EAAG,YAAY,CAACO,MAAM,CAAC,IAAM,IAAI2G,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,YAAY+G,GAAG,SAASC,GAC1F,IAAI5G,EAAK4G,EAAI5G,GACb,MAAO,CAACT,EAAG,QAAQJ,EAAI2H,GAAG,CAAChH,MAAM,CAAC,MAAQ,GAAG,KAAO,IAAIE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOd,EAAIqJ,sBAAsB3B,MAAS7G,GAAI,CAACT,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,YAAY,CAACX,EAAI+G,GAAG,yBAAyB,OAAO,MAAK,IAAO,CAAC3G,EAAG,OAAO,CAACJ,EAAI+G,GAAG,sBAAsB,CAACtG,IAAI,cAAc+G,GAAG,SAASC,GACxS,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAACtH,EAAG,YAAY,CAACO,MAAM,CAAC,IAAM,IAAI2G,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,YAAY+G,GAAG,SAASC,GAC1F,IAAI5G,EAAK4G,EAAI5G,GACb,MAAO,CAACT,EAAG,QAAQJ,EAAI2H,GAAG,CAAChH,MAAM,CAAC,MAAQ,GAAG,KAAO,IAAIE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOd,EAAIsJ,eAAe5B,MAAS7G,GAAI,CAACT,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,QAAQ,CAACX,EAAI+G,GAAG,yBAAyB,OAAO,MAAK,IAAO,CAAC3G,EAAG,OAAO,CAACJ,EAAI+G,GAAG,wBAAyB/G,EAAY,SAAE,CAACS,IAAI,UAAU+G,GAAG,WAAW,MAAO,CAACpH,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,KAAK,CAACE,YAAY,gBAAgB,CAACN,EAAI+G,GAAG,wCAAwCsB,OAAM,GAAM,MAAM,MAAK,KAAQjI,EAAG,QAAQ,CAACE,YAAY,sCAAsCK,MAAM,CAAC,MAAQ,oBAAoB,MAAQ,GAAG,KAAO,IAAIE,GAAG,CAAC,MAAQb,EAAIuJ,aAAa,CAACvJ,EAAI+G,GAAG,iBAAiB,GAAG3G,EAAG,aAAa,CAACA,EAAG,MAAM,CAACE,YAAY,qBAAqB,CAACF,EAAG,eAAe,CAACE,YAAY,4BAA4BK,MAAM,CAAC,MAAQ,wBAAwB,cAAc,cAAc,yBAAyB,GAAG,eAAe,GAAG,KAAO,GAAG,SAAW,GAAG,MAAQ,IAAIE,GAAG,CAAC,MAAQb,EAAIiH,oBAAoB,CAAC7G,EAAG,WAAW,CAAC8G,KAAK,UAAU,CAAElH,EAAkB,eAAEI,EAAG,sBAAsB,CAACE,YAAY,gBAAgBK,MAAM,CAAC,cAAgB,GAAG,MAAQ,mBAAmBP,EAAG,SAAS,CAACJ,EAAI+G,GAAG,kBAAkB,IAAI,GAAG3G,EAAG,WAAW,CAACE,YAAY,8BAA8BK,MAAM,CAAC,MAAQX,EAAIwJ,UAAU,aAAa,KAAK,YAAY,OAAO,MAAQ,4BAA4B,aAAa,CAAEC,aAAc,2BAA4B,yBAAyB,GAAG,eAAe,GAAG,MAAQ,GAAG,SAAW,IAAI5I,GAAG,CAAC,OAASb,EAAI0J,kBAAkB1I,MAAM,CAACC,MAAOjB,EAAqB,kBAAEmB,SAAS,SAAUC,GAAMpB,EAAI2J,kBAAkBvI,GAAKE,WAAW,wBAAwB,GAAGlB,EAAG,qBAAqB,CAACO,MAAM,CAAC,QAAUX,EAAI4J,gBAAgB,oBAAsB5J,EAAIqC,iBAAiBxB,GAAG,CAAC,6BAA6B,SAASC,GAAQd,EAAIqC,gBAAgBvB,GAAQ,+BAA+B,SAASA,GAAQd,EAAIqC,gBAAgBvB,OAAY,IAAI,IAAI,KAAKV,EAAG,iBAAiB,CAACE,YAAY,2CAA2C,CAACF,EAAG,QAAQ,CAACE,YAAY,mBAAmBK,MAAM,CAAC,MAAQ,UAAUE,GAAG,CAAC,MAAQb,EAAI6J,aAAa,CAAC7J,EAAI+G,GAAG,UAAU3G,EAAG,QAAQ,CAACE,YAAY,mBAAmBK,MAAM,CAAC,KAAO,IAAIE,GAAG,CAAC,MAAQb,EAAI8J,iBAAiB,CAAC9J,EAAI+G,GAAG,aAAa,IAAI,GAAG3G,EAAG,gBAAgB,CAACqH,IAAI,kBAAkBrH,EAAG,8BAA8B,CAACO,MAAM,CAAC,MAAQX,EAAI+J,mBAAmB,OAAS/J,EAAI8I,aAAa,SAAW9I,EAAIgK,WAAW,YAAY,SAASnJ,GAAG,CAAC,eAAe,SAASC,GAAQd,EAAI+J,mBAAmBjJ,GAAQ,OAASd,EAAIiK,uBAAuB,GAAGjK,EAAIkK,MACl7E,EAAkB,G,kGCXlB,EAAS,WAAa,IAAIlK,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAkB,eAAEI,EAAG,WAAW,CAACO,MAAM,CAAC,YAAYX,EAAI2I,aAAa3H,MAAM,CAACC,MAAOjB,EAAU,OAAEmB,SAAS,SAAUC,GAAMpB,EAAI4I,OAAOxH,GAAKE,WAAW,WAAW,CAAClB,EAAG,SAAS,CAACA,EAAG,YAAY,CAACO,MAAM,CAAC,KAAO,GAAG,MAAQ,SAAS,MAAQ,GAAG,KAAO,KAAK,CAACP,EAAG,kBAAkB,CAACE,YAAY,oBAAoB,CAACN,EAAI+G,GAAG,kBAAkB,GAAG3G,EAAG,cAAc,CAACE,YAAY,aAAa,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,WAAW,CAACO,MAAM,CAAC,MAAQX,EAAImK,YAAY,MAAQ,cAAc,yBAAyB,GAAG,eAAe,GAAG,MAAQ,GAAG,SAAW,IAAInJ,MAAM,CAACC,MAAOjB,EAAIoK,eAAmB,KAAEjJ,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAIoK,eAAgB,OAAQhJ,IAAME,WAAW,0BAA0B,GAAGlB,EAAG,QAAQ,CAACA,EAAG,eAAe,CAACO,MAAM,CAAC,KAAO,SAAS,MAAQ,aAAa,yBAAyB,GAAG,eAAe,GAAG,KAAO,GAAG,SAAW,GAAG,MAAQ,IAAIE,GAAG,CAAC,SAAWb,EAAI+I,eAAe/H,MAAM,CAACC,MAAOjB,EAAIoK,eAAwB,UAAEjJ,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAIoK,eAAgB,YAAapK,EAAIiJ,GAAG7H,KAAOE,WAAW,+BAA+B,IAAI,GAAGlB,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,eAAe,CAACE,YAAY,oBAAoBK,MAAM,CAAC,QAAUX,EAAImH,QAAQ,MAAQnH,EAAIoK,eAAejB,QAAQ7B,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,aAAa+G,GAAG,SAASC,GACzzC,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAAC1H,EAAI+G,GAAG,IAAI/G,EAAI6H,GAAGH,EAAK2C,WAAW,MAAMrK,EAAI6H,GAAGH,EAAK4C,SAAS,QAAQ,CAAC7J,IAAI,YAAY+G,GAAG,SAASC,GAC1G,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAACtH,EAAG,YAAY,CAACO,MAAM,CAAC,IAAM,IAAI2G,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,YAAY+G,GAAG,SAASC,GAC1F,IAAI5G,EAAK4G,EAAI5G,GACb,MAAO,CAACT,EAAG,QAAQJ,EAAI2H,GAAG,CAAChH,MAAM,CAAC,MAAQ,GAAG,KAAO,IAAIE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOd,EAAIuK,2BAA2B7C,MAAS7G,GAAI,CAACT,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,YAAY,CAACX,EAAI+G,GAAG,yBAAyB,OAAO,MAAK,IAAO,CAAC3G,EAAG,OAAO,CAACJ,EAAI+G,GAAG,sBAAsB,CAACtG,IAAI,cAAc+G,GAAG,SAASC,GAC7S,IAAIC,EAAOD,EAAIC,KACf,MAAO,CAACtH,EAAG,YAAY,CAACO,MAAM,CAAC,IAAM,IAAI2G,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,YAAY+G,GAAG,SAASC,GAC1F,IAAI5G,EAAK4G,EAAI5G,GACb,MAAO,CAACT,EAAG,QAAQJ,EAAI2H,GAAG,CAAChH,MAAM,CAAC,MAAQ,GAAG,KAAO,IAAIE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOd,EAAIsJ,eAAe5B,MAAS7G,GAAI,CAACT,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,QAAQ,CAACX,EAAI+G,GAAG,yBAAyB,OAAO,MAAK,IAAO,CAAC3G,EAAG,OAAO,CAACJ,EAAI+G,GAAG,wBAAyB/G,EAAY,SAAE,CAACS,IAAI,UAAU+G,GAAG,WAAW,MAAO,CAACpH,EAAG,MAAM,CAACE,YAAY,gBAAgB,CAACF,EAAG,KAAK,CAACE,YAAY,gBAAgB,CAACN,EAAI+G,GAAG,iDAAiDsB,OAAM,GAAM,MAAM,MAAK,MAAS,IAAI,GAAGjI,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACE,YAAY,sCAAsCK,MAAM,CAAC,MAAQ,oBAAoB,MAAQ,GAAG,KAAO,IAAIE,GAAG,CAAC,MAAQb,EAAIwK,cAAc,CAACxK,EAAI+G,GAAG,0BAA0B,IAAI,IAAI,GAAG3G,EAAG,iBAAiB,CAACE,YAAY,2CAA2C,CAACF,EAAG,QAAQ,CAACE,YAAY,mBAAmBK,MAAM,CAAC,MAAQ,UAAUE,GAAG,CAAC,MAAQb,EAAIyK,cAAc,CAACzK,EAAI+G,GAAG,UAAU3G,EAAG,QAAQ,CAACE,YAAY,mBAAmBK,MAAM,CAAC,KAAO,IAAIE,GAAG,CAAC,MAAQb,EAAI8J,iBAAiB,CAAC9J,EAAI+G,GAAG,aAAa,IAAI,GAAG3G,EAAG,gBAAgB,CAACqH,IAAI,kBAAkBrH,EAAG,oCAAoC,CAACO,MAAM,CAAC,MAAQX,EAAI0K,uBAAuB,OAAS1K,EAAI2K,OAAO,KAAO3K,EAAIoK,eAAe,UAAYpK,EAAI4K,mBAAmB,YAAY,SAAS/J,GAAG,CAAC,eAAe,SAASC,GAAQd,EAAI0K,uBAAuB5J,GAAQ,OAASd,EAAI6K,2BAA2B,GAAG7K,EAAIkK,MACz0C,EAAkB,G,qCF2BtB,SAAYrD,GACVA,mBACAA,oBAFF,CAAYA,MAAU,KAKtB,SAAYC,GACVA,WACAA,WACAA,WACAA,WAJF,CAAYA,MAAQ,KG3CpB,IAAI,EAAS,WAAa,IAAI9G,EAAIC,KAASC,EAAGF,EAAIG,eAAmBC,EAAGJ,EAAIK,MAAMD,IAAIF,EAAG,OAAQF,EAAmB,gBAAEI,EAAG,WAAW,CAACO,MAAM,CAAC,YAAYX,EAAI2I,aAAa3H,MAAM,CAACC,MAAOjB,EAAU,OAAEmB,SAAS,SAAUC,GAAMpB,EAAI4I,OAAOxH,GAAKE,WAAW,WAAW,CAAClB,EAAG,SAAS,CAACA,EAAG,YAAY,CAACO,MAAM,CAAC,KAAO,GAAG,MAAQ,SAAS,MAAQ,GAAG,KAAO,KAAK,CAACP,EAAG,kBAAkB,CAACE,YAAY,oBAAoB,CAACN,EAAI+G,GAAG,uBAAuB,GAAG3G,EAAG,cAAc,CAACE,YAAY,aAAa,CAACF,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACA,EAAG,WAAW,CAACO,MAAM,CAAC,MAAQX,EAAI8K,aAAa,MAAQ,iBAAiB,yBAAyB,GAAG,eAAe,GAAG,MAAQ,GAAG,SAAW,IAAI9J,MAAM,CAACC,MAAOjB,EAAI+K,gBAA6B,cAAE5J,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI+K,gBAAiB,gBAAiB3J,IAAME,WAAW,oCAAoC,GAAGlB,EAAG,QAAQ,CAACA,EAAG,eAAe,CAACO,MAAM,CAAC,MAAQ,WAAW,yBAAyB,GAAG,UAAW,EAAK,eAAe,GAAG,KAAO,GAAG,SAAW,GAAG,MAAQ,IAAIK,MAAM,CAACC,MAAOjB,EAAgC,6BAAEmB,SAAS,SAAUC,GAAMpB,EAAIgL,6BAA6BhL,EAAIiJ,GAAG7H,IAAME,WAAW,mCAAmC,IAAI,GAAGlB,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACO,MAAM,CAAC,KAAO,MAAM,CAACP,EAAG,eAAe,CAACqH,IAAI,YAAY9G,MAAM,CAAC,MAAQ,eAAe,OAAS,KAAK,yBAAyB,GAAG,eAAe,GAAG,KAAO,GAAG,SAAW,GAAG,MAAQ,IAAIE,GAAG,CAAC,SAAWb,EAAI+I,cAAc,MAAQ,SAASjI,GAAQ,OAAOd,EAAIgJ,qBAAqBlI,EAAQ,eAAeE,MAAM,CAACC,MAAOjB,EAAI+K,gBAAyB,UAAE5J,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI+K,gBAAiB,YAAa/K,EAAIiJ,GAAG7H,KAAOE,WAAW,gCAAgC,GAAGlB,EAAG,QAAQ,CAACO,MAAM,CAAC,KAAO,MAAM,CAACP,EAAG,eAAe,CAACqH,IAAI,UAAU9G,MAAM,CAAC,MAAQ,aAAa,OAAS,KAAK,yBAAyB,GAAG,eAAe,GAAG,KAAO,GAAG,SAAW,GAAG,MAAQ,IAAIE,GAAG,CAAC,SAAWb,EAAI+I,cAAc,MAAQ,SAASjI,GAAQ,OAAOd,EAAIgJ,qBAAqBlI,EAAQ,aAAaE,MAAM,CAACC,MAAOjB,EAAI+K,gBAAuB,QAAE5J,SAAS,SAAUC,GAAMpB,EAAIqB,KAAKrB,EAAI+K,gBAAiB,UAAW/K,EAAIiJ,GAAG7H,KAAOE,WAAW,8BAA8B,IAAI,GAAGlB,EAAG,QAAQ,CAACA,EAAG,QAAQ,CAACO,MAAM,CAAC,KAAO,OAAO,CAACP,EAAG,MAAM,CAACE,YAAY,4BAA4B,CAACF,EAAG,MAAM,CAACE,YAAY,2BAA2B,CAACF,EAAG,MAAM,CAACE,YAAY,kDAAkD,CAACN,EAAI+G,GAAG,eAAe3G,EAAG,YAAY,CAACE,YAAY,UAAU,GAAGN,EAAIO,GAAIP,EAAmB,iBAAE,SAASiL,EAAU7I,GAAO,OAAOhC,EAAG,MAAM,CAACK,IAAI2B,EAAM9B,YAAY,uBAAuB,CAACF,EAAG,IAAI,CAACE,YAAY,QAAQ,CAACF,EAAG,OAAO,CAACE,YAAY,mBAAmB,CAACN,EAAI+G,GAAG,YAAY/G,EAAI6H,GAAGoD,EAAUC,UAAU,SAAS9K,EAAG,MAAM,CAACE,YAAY,uBAAuB,CAACF,EAAG,eAAe,CAACqH,IAAK,WAAcwD,EAAkB,SAAGE,UAAS,EAAKxK,MAAM,CAAC,eAAe,GAAG,KAAO,GAAG,SAAW,GAAG,MAAQ,IAAIE,GAAG,CAAC,SAAWb,EAAI+I,cAAc,MAAQ,SAASjI,GAAQ,OAAOd,EAAIgJ,qBAAqBlI,EAAS,WAAcmK,EAAkB,YAAMjK,MAAM,CAACC,MAAOgK,EAAe,MAAE9J,SAAS,SAAUC,GAAMpB,EAAIqB,KAAK4J,EAAW,QAASjL,EAAIiJ,GAAG7H,KAAOE,WAAW,qBAAsBtB,EAAIoL,oBAAoBH,GAAY7K,EAAG,YAAY,CAACO,MAAM,CAAC,IAAM,IAAI2G,YAAYtH,EAAIuH,GAAG,CAAC,CAAC9G,IAAI,YAAY+G,GAAG,SAASC,GACzoG,IAAI5G,EAAK4G,EAAI5G,GACb,MAAO,CAAEb,EAAIqL,0BAA2BjL,EAAG,QAAQJ,EAAI2H,GAAG,CAACrH,YAAY,kBAAkBK,MAAM,CAAC,MAAQ,QAAQ,IAAM,GAAG,KAAO,GAAG,UAAU,IAAIE,GAAG,CAAC,MAAQ,SAASC,GAAQ,OAAOd,EAAIsL,gBAAgBL,MAAcpK,GAAI,CAACT,EAAG,SAAS,CAACO,MAAM,CAAC,KAAO,KAAK,CAACX,EAAI+G,GAAG,gBAAgB,GAAG/G,EAAIkK,SAAS,MAAK,IAAO,CAAC9J,EAAG,OAAO,CAACJ,EAAI+G,GAAG,uBAAuB/G,EAAIkK,MAAM,QAAQlK,EAAe,YAAEI,EAAG,QAAQ,CAACE,YAAY,OAAOK,MAAM,CAAC,UAAYX,EAAIuL,uBAAuB,MAAQ,oBAAoB,MAAQ,IAAI1K,GAAG,CAAC,MAAQb,EAAIwL,eAAe,CAACpL,EAAG,SAAS,CAACO,MAAM,CAAC,MAAQ,KAAK,CAACX,EAAI+G,GAAG,cAAc/G,EAAI+G,GAAG,iBAAiB,GAAG/G,EAAIkK,MAAM,MAAM,IAAI,GAAG9J,EAAG,iBAAiB,CAACE,YAAY,2CAA2C,CAACF,EAAG,QAAQ,CAACE,YAAY,mBAAmBK,MAAM,CAAC,MAAQ,UAAUE,GAAG,CAAC,MAAQb,EAAIyK,cAAc,CAACzK,EAAI+G,GAAG,UAAU3G,EAAG,QAAQ,CAACE,YAAY,mBAAmBK,MAAM,CAAC,KAAO,IAAIE,GAAG,CAAC,MAAQb,EAAI8J,iBAAiB,CAAC9J,EAAI+G,GAAG,aAAa,IAAI,IAAI,GAAG/G,EAAIkK,MAC17B,EAAkB,GC2JDuB,G,oBAAiC,wDAAtD,iD,0BAOE,EAAAV,gBAA6C,KAC7C,EAAAW,WAAuB,CAAC,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KARxD,EAAsD,iDAUpD,WACE,OAAO5J,OAAOC,KAAKvC,UAX+B,uBAcpD,WACE,QAAKS,KAAK8K,iBACH9K,KAAK8K,gBAAgBY,gBAAkBnM,OAAcK,aAhBV,iCAmBpD,WAAyB,MACvB,iBAAOI,KAAK8K,uBAAZ,aAAO,EAAsBY,gBApBqB,wCAuBpD,WACE,OAAK1L,KAAK2L,sBACHrM,OAAiBU,KAAK2L,uBADW,KAxBU,2BA4BpD,WACE,OAAK3L,KAAK8K,iBAAoB9K,KAAK2L,sBAC5B3L,KAAK8K,gBAAgBW,WADqC,KA7Bf,mCAkCpD,WACEzL,KAAK8K,gBAAkBc,KAAKC,MAAMD,KAAKE,UAAU9L,KAAK+L,cAnCJ,uCAuCpD,WAAyB,QACvB,GAAK/L,KAAK8K,gBAAV,CACA,IAAMkB,EAAmB,CAAC,IAAK,IAAK,KACpC,OAAQhM,KAAK2L,uBACX,KAAKpM,OAAcC,MACjBQ,KAAKiM,qBAAqBD,GAC1BhM,KAAK8K,gBAAgBW,WAAazL,KAAK8K,gBAAgBW,WAAWS,MAAM,EAAG,GAC3E,MACF,KAAK3M,OAAcK,WACjBI,KAAKiM,qBAAqBD,GAC1BhM,KAAK8K,gBAAgBW,WAArB,UAAkCzL,KAAK8K,uBAAvC,aAAkC,EAAsBW,WAAWS,MAAM,EAAG,GAC5E,MACF,KAAK3M,OAAcI,SACjBqM,EAAiB1J,KAAK,KACtBtC,KAAKiM,qBAAqBD,GAC1BhM,KAAK8K,gBAAgBW,WAArB,UAAkCzL,KAAK8K,uBAAvC,aAAkC,EAAsBW,WAAWS,MAAM,EAAG,GAC5E,MACF,QACE,UAzD8C,kCA6DpD,SAAqBF,GAA0B,WACvCG,EAAoBH,EAAiBI,QAAO,SAAAC,GAAC,cAAI,UAAC,EAAKvB,uBAAN,OAAC,EAAsBW,WAAWhJ,MAAK,SAAA6J,GAAC,OAAIA,EAAErB,WAAaoB,SAClHF,EAAkBxK,SAAQ,SAAAqJ,GAAY,MACpC,YAAKF,uBAAL,SAAsBW,WAAWnJ,KAAK,CAAE7B,GAAI,EAAG8L,YAAa,EAAGtB,SAAUD,EAAWhK,MAAO,SAhE3C,2BAoEpD,SAAcqF,GACZ,OAAOmG,OAAaC,0BAA0BpG,KArEI,kCAwEpD,SAAqBxF,EAAa2G,GAC3B3G,EAAO6L,SAAS,MAAS7L,IAC1B2G,EAAIkF,SAAS,YAAc1M,KAAK+E,MAAMyC,GAAa,GAAGmF,cAAgB9L,EAAO+L,QAAQ,KAAM,KACzF5M,KAAK+E,MAAMyC,GAAamF,cAAgB9L,EAAO+L,QAAQ,KAAM,QA3EjB,kCA8EpD,WACE,OAAO5M,KAAK6M,gBAAgB1D,OAASnJ,KAAKyL,WAAWtC,SA/EH,qCAkFpD,WACE,OAAOnJ,KAAK6M,gBAAgB1D,OAAS,IAnFa,iCAqFpD,SAAoB6B,GAClB,OAA+B,MAAvBA,EAAUC,UAA2C,MAAvBD,EAAUC,UAA2C,MAAvBD,EAAUC,UAA2C,MAAvBD,EAAUC,WAAqBjL,KAAK8M,cAtFpF,0BAyFpD,WAAY,MACV,GAAK9M,KAAK8K,mBACN9K,KAAK8K,gBAAgBW,WAAWtC,QAAUnJ,KAAKyL,WAAWtC,QAA9D,CACA,IAAM6B,EAAYhL,KAAKyL,WAAWzL,KAAK8K,gBAAgBW,WAAWtC,QAClE,UAAAnJ,KAAK8K,uBAAL,SAAsBW,WAAWnJ,KAAK,CAAE7B,GAAI,EAAG8L,YAAa,EAAGtB,SAAUD,EAAWhK,MAAO,OA7FzC,6BAgGpD,SAAgBgK,GACd,GAAKhL,KAAK8K,mBACN9K,KAAK8K,gBAAgBW,WAAWtC,QAAU,GAA9C,CACA,IAAM4D,EAAiB/M,KAAK8K,gBAAgBW,WAAWpJ,WAAU,SAAAgK,GAAC,OAAIA,EAAEpB,WAAaD,EAAUC,aACvE,IAApB8B,GACF/M,KAAK8K,gBAAgBW,WAAWlJ,OAAOwK,EAAgB,MArGP,yBAyGpD,WACE/M,KAAK2I,QAAS,EACd3I,KAAKwC,MAAM,SAAUxC,KAAK8K,mBA3GwB,4BA8GpD,WACE9K,KAAK2I,QAAS,MA/GoC,GAASjG,SACtBC,gBAAtCC,eAAS,QAAS,CAAEK,UAAU,KAAQ,6BACEN,gBAAxCC,eAAS,WAAY,CAAEG,QAAS,OAAQ,kCACfJ,gBAAzBK,eAAK,CAAEC,UAAU,KAAQ,6BACAN,gBAAzBK,eAAK,CAAEC,UAAU,KAAQ,2BACAN,gBAAzBK,eAAK,CAAEC,UAAU,KAAQ,gCA6B1BN,gBADCqK,eAAM,WACP,0CAKArK,gBADCqK,eAAM,0BACP,8CAvCmBxB,EAAiC,gBADrDtI,eAAU,KACUsI,WC9JyZ,I,yMCQ1arI,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,MAIa,EAAAA,EAAiB,QAkBhC,IAAkBA,EAAW,CAAC8J,OAAA,KAAKC,QAAA,KAAMC,aAAA,OAAaC,UAAA,OAAUC,OAAA,KAAKC,UAAA,KAAQC,WAAA,KAASC,QAAA,KAAMC,OAAA,KAAKC,UAAA,KAAQjK,aAAA,KAAWkK,WAAA,KAASC,cAAA,OAAcC,WAAA,O,gBCuHtHC,EAA2B,wDAAhD,iD,0BAOE,EAAA3D,eAAkC,KAClC,EAAAM,wBAAyB,EACzB,EAAAE,mBAAgD,KAChD,EAAAzD,QAAU,CACR,CACE6G,KAAM,QACN/M,MAAO,gBACPgN,MAAO,6BACPC,MAAO,MACPC,UAAU,GAEZ,CACEH,KAAM,cACN/M,MAAO,QACPgN,MAAO,6BACPC,MAAO,OAET,CACEF,KAAM,OACN/M,MAAO,OACPgN,MAAO,6BACPC,MAAO,KACPC,UAAU,GAEZ,CACEH,KAAM,SACN/M,MAAO,SACPgN,MAAO,6BACPC,MAAO,KACPC,UAAU,IApChB,EAAgD,gDAwC9C,WACE,OAAOrM,OAAOC,KAAK8E,KAzCyB,oBA4C9C,WAAY,MACV,OAAO/C,QAA+C,KAAvC,UAAA7D,KAAKmK,sBAAL,eAAqBjB,OAAOC,WA7CC,mCAiD9C,WACEnJ,KAAKmK,eAAiByB,KAAKC,MAAMD,KAAKE,UAAU9L,KAAKmO,aAlDT,2BAqD9C,SAAc9H,GACZ,OAAOyC,eAAczC,KAtDuB,wCAyD9C,SAA2B+H,GACzBpO,KAAKyK,wBAAyB,EAC9BzK,KAAK2K,mBAAqByD,IA3DkB,qFA8D9C,WAAqBA,GAArB,yGAC0BpO,KAAKqO,cAAcC,KAAK,oBAAqB,yDADvE,UACQC,EADR,QAEMA,EAFN,mBAGSvO,KAAKmK,eAHd,iDAIUhI,EAAQnC,KAAKmK,eAAejB,OAAOsF,QAAQJ,GAC7CjM,GAAS,GAAGnC,KAAKmK,eAAejB,OAAO3G,OAAOJ,EAAO,GAL7D,gDA9D8C,mFAuE9C,WAAW,UACHsM,EAA+B,CACnChO,GAAI,EACJiO,OAAM,oBAAE1O,KAAKmK,sBAAP,aAAE,EAAqB1J,UAAvB,QAA6B,EACnCiL,cAAenM,OAAcK,WAC7BwK,UAAW,EACXC,QAAS,EACToB,WAAY,IAEd,UAAAzL,KAAKmK,sBAAL,SAAqBjB,OAAO5G,KAAKmM,GACjCzO,KAAKsK,2BAA2BmE,KAjFY,oCAoF9C,SAAuBE,GACrB,GAAK3O,KAAKmK,eAAV,CACA,IAAMhI,EAAQnC,KAAKmK,eAAejB,OAAO7G,WAAU,SAAAiK,GAAC,OAAIA,EAAE7L,KAAOkO,EAAiBlO,MAC9E0B,GAAS,IACXnC,KAAKmK,eAAejB,OAAO3G,OAAOJ,EAAO,EAAGwM,GAC5C3O,KAAKmO,SAASjF,OAAO3G,OAAOJ,EAAO,EAAGwM,OAzFI,yBA6F9C,WACE3O,KAAK2I,QAAS,EACd3I,KAAKwC,MAAM,SAAUxC,KAAKmK,kBA/FkB,4BAkG9C,WACEnK,KAAK2I,QAAS,MAnG8B,GAASjG,QAChBC,gBAAtCC,eAAS,QAAS,CAAEK,UAAU,KAAQ,6BACEN,gBAAxCC,eAAS,WAAY,CAAEG,QAAS,OAAQ,kCACfJ,gBAAzBK,eAAK,CAAEC,UAAU,KAAQ,6BACAN,gBAAzBK,eAAK,CAAEC,UAAU,KAAQ,+BACJN,gBAArBiM,eAAI,kBAAiB,oCA4CtBjM,gBADCqK,eAAM,WACP,0CAjDmBc,EAA2B,gBAN/C5K,eAAU,CACT2L,WAAY,CACVrD,oCACAsD,yBAGiBhB,WC5JmZ,I,aCOpa,GAAY,eACd,EACA,EACA,GACA,EACA,KACA,WACA,MAIa,MAAiB,QAkBhC,IAAkB,GAAW,CAACb,OAAA,KAAKC,QAAA,KAAMC,aAAA,OAAaC,UAAA,OAAUC,OAAA,KAAK0B,cAAA,KAAWzB,UAAA,KAAQE,QAAA,KAAMC,OAAA,KAAKC,UAAA,KAAQjK,aAAA,KAAWkK,WAAA,KAASC,cAAA,OAAcC,WAAA,O,wDClCvImB,G,WACJ,aAAc,uB,oDAGd,WACE,OAAOC,QAAIC,IAAI,wC,6BAGjB,WACE,OAAOD,QAAIE,KAAK,wC,wBAGlB,SAAWzE,GACT,OAAOuE,QAAIE,KAAK,qCAAsCzE,K,0BAGxD,SAAaA,GACX,OAAOuE,QAAIG,IAAI,qCAAsC1E,K,0BAGvD,SAAajK,GACX,OAAOwO,QAAII,IAAJ,6CAA8C5O,Q,KAK1C,OAAIuO,GC4SbM,GAAYC,eAAUC,QAAiBC,QACvCC,GAAOH,eAAUI,QAAYF,QASdG,GAAyB,wDAA9C,iD,0BAOE,EAAAhH,YAAc,EACd,EAAAC,aAA4C,KAC5C,EAAAzG,gBAA4B,GAC5B,EAAAsH,kBAAmC,KACnC,EAAAmG,eAAmC,CAAElP,KAAM,mBAAoBF,GAAI,GAEnE,EAAAqJ,oBAAqB,EACrB,EAAAC,WAA8B,KAE9B,EAAA7C,QAAU,CACR,CACE6G,KAAM,YACN/M,MAAO,OACPgN,MAAO,6BACPC,MAAO,MACPC,UAAU,GAEZ,CACEH,KAAM,aACN/M,MAAO,YACPgN,MAAO,6BACPC,MAAO,OAET,CACEF,KAAM,cACN/M,MAAO,SACPgN,MAAO,6BACPC,MAAO,OAET,CACEF,KAAM,OACN/M,MAAO,OACPgN,MAAO,6BACPC,MAAO,KACPC,UAAU,GAEZ,CACEH,KAAM,SACN/M,MAAO,SACPgN,MAAO,6BACPC,MAAO,KACPC,UAAU,IAGd,EAAA4B,YAA6B,KAC7B,EAAA1I,gBAAiB,EACjB,EAAAoB,sBAAkC,GAmDlC,EAAAxB,kBAAoB+I,aAAEC,SAAS,EAAKC,uBAAwB,KAxG9D,EAA8C,yDAwD5C,WAAkB,MAChBjQ,KAAK6I,aAAe+C,KAAKC,MAAMD,KAAKE,UAAU9L,KAAK0K,SACnD,IAAMwF,EAAwB,UAAGlQ,KAAK6I,oBAAR,aAAG,EAAmBpH,UACpDzB,KAAKoC,gBAAkBpC,KAAKuI,WAAW6D,QAAO,SAAAlK,GAAC,cAAIgO,QAAJ,IAAIA,OAAJ,EAAIA,EAA0BzN,MAAK,SAAA0N,GAAC,OAAIA,IAAMjO,EAAEzB,WA3DrD,qBA8D5C,WACE,OAAO6O,GAAU/F,YA/DyB,yBAkE5C,WACE,OAAOmG,GAAKU,gBAnE8B,2BAsE5C,WAAmB,WACjB,GAAwB,MAApBpQ,KAAK8P,YAAqB,OAAkC,IAA3B9P,KAAK0J,kBAA0B1J,KAAKuI,WAAavI,KAAKwI,sBAC3F,IAAM9G,EAAqC,IAA3B1B,KAAK0J,kBAA0B1J,KAAKuI,WAAavI,KAAKwI,sBACtE,OAAO9G,EAAQ0K,QAAO,SAAAlK,GAAC,OAAIA,EAAEvB,KAAK0P,cAAc3D,SAAU,EAAKoD,YAAuBO,oBAzE5C,oBA4E5C,WAAY,MACV,OAAOxM,QAA4C,KAApC,UAAA7D,KAAK6I,oBAAL,eAAmBI,MAAME,WA7EE,2BAgF5C,SAAc9C,GACZ,OAAOmG,OAAaC,0BAA0BpG,KAjFJ,kCAoF5C,SAAqBxF,EAAa2G,GAC3B3G,EAAO6L,SAAS,MAAS7L,IAC7Bb,KAAK+E,MAAMyC,GAAamF,cAAgB9L,EAAO+L,QAAQ,KAAM,QAtFpB,qFAyF5C,WAAqB0D,GAArB,yGAC0BtQ,KAAKqO,cAAcC,KAAK,mBAAoB,oDADtE,UACQC,EADR,QAEMA,EAFN,mBAGSvO,KAAK6I,aAHd,iDAIU1G,EAAQnC,KAAK6I,aAAaI,MAAMuF,QAAQ8B,GAC1CnO,GAAS,GAAGnC,KAAK6I,aAAaI,MAAM1G,OAAOJ,EAAO,GAL1D,gDAzF4C,8FAkG5C,SAAuBoO,GAAgB,WACrCvQ,KAAKoH,gBAAiB,EACtBpH,KAAK8P,YAAcS,EACnBjL,YAAW,kBAAO,EAAK8B,gBAAiB,IAAQ,OArGN,wBA0G5C,WAAU,MACFoJ,EAAoB,CACxB/P,GAAI,EACJgQ,SAAUzQ,KAAK0K,OAAOjK,GACtB6P,KAAM1J,EAAW8J,MACjBC,UAAW,EACXzH,OAAQ,IAEV,UAAAlJ,KAAK6I,oBAAL,SAAmBI,MAAM3G,KAAKkO,GAC9BxQ,KAAKoJ,sBAAsBoH,KAnHe,0BAsH5C,SAAa9E,GACX,OAAOpM,OAAiBoM,KAvHkB,iFA0H5C,kGACM1L,KAAK6I,aADX,uBAEI7I,KAAK6I,aAAapH,UAAYzB,KAAKoC,gBAAgBwO,KAAI,SAAA1O,GAAC,OAAIA,EAAEzB,MAFlE,SAGUoQ,GAAqBC,aAAa9Q,KAAK6I,cAHjD,OAKE7I,KAAK2I,QAAS,EACd3I,KAAKwC,MAAM,gBANb,gDA1H4C,qFAmI5C,WACExC,KAAK+Q,qBACL/Q,KAAK2I,QAAS,IArI4B,mCAwI5C,SAAsB2H,GACpBtQ,KAAK8J,oBAAqB,EAC1B9J,KAAK+J,WAAauG,IA1IwB,uFA6I5C,8GACqCU,QAAcC,sBAAsBjR,KAAK0J,mBAD9E,OACE1J,KAAKwI,sBADP,uDA7I4C,yFAiJ5C,SAAmB0I,GACjB,GAAKlR,KAAK6I,aAAV,CACA,IAAM1G,EAAQnC,KAAK6I,aAAaI,MAAM5G,WAAU,SAAAiK,GAAC,OAAIA,EAAE7L,KAAOyQ,EAAgBzQ,MAC1E0B,GAAS,IACXnC,KAAK6I,aAAaI,MAAM1G,OAAOJ,EAAO,EAAG+O,GACzClR,KAAK0K,OAAOzB,MAAM1G,OAAOJ,EAAO,EAAG+O,OAtJK,8EA0J5C,8GACQ5B,GAAU6B,mBADlB,uBAEqCH,QAAcI,aAFnD,OAEEpR,KAAKwI,sBAFP,OAGExI,KAAKuJ,UAAU8H,QAAQrR,KAAK6P,gBAC5B7P,KAAK0J,kBAAoB1J,KAAKoQ,cAJhC,gDA1J4C,8DAAS1N,QAC/BC,gBAArBiM,eAAI,kBAAiB,qCACiBjM,gBAAtCC,eAAS,QAAS,CAAEK,UAAU,KAAQ,8BACEN,gBAAxCC,eAAS,WAAY,CAAEG,QAAS,OAAQ,mCACfJ,gBAAzBK,eAAK,CAAEC,UAAU,KAAQ,8BACAN,gBAAzBK,eAAK,CAAEC,UAAU,KAAQ,kCAmD1BN,gBADCqK,eAAM,WACP,wCAxDmB4C,GAAyB,gBAP7C1M,eAAU,CACT2L,WAAY,CACVrN,0BACAsM,+BACAgB,yBAGiBc,cClViZ,M,0FCQla,GAAY,eACd,GACA,EACA,GACA,EACA,KACA,WACA,MAIa,MAAiB,QAwBhC,IAAkB,GAAW,CAAC3C,OAAA,KAAKC,QAAA,KAAMC,aAAA,OAAaC,UAAA,OAAUC,OAAA,KAAK0B,cAAA,KAAWzB,UAAA,KAAQE,QAAA,KAAM8D,qBAAA,KAAkB7D,OAAA,KAAKC,UAAA,KAAQ6D,QAAA,KAAKC,YAAA,KAASC,SAAA,KAAMC,cAAA,KAAWjO,aAAA,KAAWkO,aAAA,KAAUhE,WAAA,KAASC,cAAA,OAAcC,WAAA,OCiHxM,IAAM6B,GAAOH,eAAUI,QAAYF,QAQdmC,GAAI,wDAAzB,iD,0BAGE,EAAAvJ,YAAa,EACb,EAAAC,aAA4C,KAC5C,EAAAuJ,QAAkC,GAClC,EAAAtJ,WAAuB,GACvB,EAAAC,sBAAkC,GAClC,EAAAxB,kBAAoB+I,aAAEC,SAAS,EAAKC,uBAAwB,KAC5D,EAAAH,YAA6B,KAC7B,EAAA1I,gBAAiB,EACjB,EAAAF,QAAU,CACR,CACE6G,KAAM,SACN/M,MAAO,UACPgN,MAAO,6BACPC,MAAO,KACPC,UAAU,GAEZ,CACEH,KAAM,KACN/M,MAAO,KACPgN,MAAO,6BACPC,MAAO,MAET,CACEF,KAAM,cACN/M,MAAO,cACPgN,MAAO,6BACPC,MAAO,OAET,CACEF,KAAM,UACN/M,MAAO,UACPgN,MAAO,6BACPC,MAAO,OAET,CACEF,KAAM,OACN/M,MAAO,OACPgN,MAAO,6BACPC,MAAO,KACPC,UAAU,GAEZ,CACEH,KAAM,SACN/M,MAAO,SACPgN,MAAO,6BACPC,MAAO,KACPC,UAAU,IAjDhB,EAAyB,4CAqDvB,WACE,OAAOwB,GAAKoC,UAtDS,oBAyDvB,WACE,OAAOjO,QAAgC,IAAxB7D,KAAK6R,QAAQ1I,UA1DP,0BA6DvB,WAAkB,WAChB,IAAKnJ,KAAK8P,YAAa,OAAO9P,KAAK6R,QAGnC,IAAIE,EAAgC,KAC9BC,EAAmBhS,KAAKuI,WAAW9F,MAAK,SAAAP,GAC5C,GAAIA,EAAEvB,KAAK0P,cAAc3D,SAAU,EAAKoD,YAAuBO,eAE7D,OADA0B,EAAiB7P,GACV,KAGX,OAAI8P,EACKhS,KAAK6R,QAAQzF,QAAO,SAAA1B,GACzB,IAAMuH,EAAiBvH,EAAOjJ,UAAU2K,QAAO,SAAA3L,GAAK,MAClD,GAAIA,KAAE,UAAKsR,SAAL,aAAK,EAAgBtR,IACzB,OAAOA,KAGX,QAAOwR,EAAe9I,QAASuB,KAI1B1K,KAAK6R,QAAQzF,QAAO,SAAAE,GAAC,OAAIA,EAAE4F,aAAe5F,EAAE4F,YAAY7B,cAAc3D,SAAU,EAAKoD,YAAuBO,oBAnFhG,mFAuFvB,8GACuBQ,GAAqBsB,gBAD5C,OACEnS,KAAK6R,QADP,uDAvFuB,6FA2FvB,SAAuBtB,GAAgB,WACrCvQ,KAAKoH,gBAAiB,EACtBpH,KAAK8P,YAAcS,EACnBjL,YAAW,kBAAO,EAAK8B,gBAAiB,IAAQ,OA9F3B,gFAiGvB,8GACQyJ,GAAqBuB,kBAD7B,uBAEuBvB,GAAqBsB,gBAF5C,OAEEnS,KAAK6R,QAFP,OAGE7R,KAAKkI,qBAAqBlI,KAAK6R,QAAQ7R,KAAK6R,QAAQ1I,OAAS,IAH/D,gDAjGuB,4IAuGvB,WAAmBuB,GAAnB,uGAC0B1K,KAAKqO,cAAcC,KAAK,gBAAiB,gDADnE,UACQC,EADR,QAEMA,EAFN,gCAGUsC,GAAqB1I,aAAauC,EAAOjK,IAHnD,uBAIyBoQ,GAAqBsB,gBAJ9C,OAIInS,KAAK6R,QAJT,uDAvGuB,4FA+GvB,SAAqBnH,GACnB1K,KAAKqI,YAAa,EAClBrI,KAAKsI,aAAeoC,IAjHC,2BAoHvB,SAAc3I,GAAgB,MAC5B,iBAAO/B,KAAKuI,WAAWtG,MAAK,SAAAC,GAAC,OAAIA,EAAEzB,KAAOsB,YAA1C,aAAO,EAA8CpB,OArHhC,8BAwHvB,SAAiBoL,GACf,IAAMsG,EAAmD,aAA5BtG,EAAUL,cAA+B,EAAI,EACpE4G,EAAoBvG,EAAUN,WAAWtC,OAC/C,OAAOmJ,GAAqBD,IA3HP,iCA8HvB,SAAoBpJ,GAClB,IADmC,EAC7BsJ,EAAuC,GADV,iBAEhBtJ,GAFgB,IAEnC,2BAA0B,KAAfnD,EAAe,QAClBwK,EAAOxK,EAAKwK,KAClB,GAAIiC,EAAUjC,GACZ,OAAO,EAETiC,EAAUjC,GAAQ,GAPe,8BASnC,OAAO,IAvIc,2BA0IvB,SAAc5F,GAA4B,WAClC8H,EAAoB9H,EAAOzB,MAAME,OAAS,EAC1CsJ,EAAsB/H,EAAOzB,MAAME,OAAS,GAAKnJ,KAAK0S,oBAAoBhI,EAAOzB,OACjF0J,EAAqBjI,EAAOzB,MAAME,OAAS,GAAKuB,EAAOzB,MAAM2J,OAAM,SAAAC,GAAC,OAAIA,EAAE3J,OAAOC,OAAS,KAC1F2J,EAAiBpI,EAAOzB,MAAME,OAAS,GAAKuB,EAAOzB,MAAM2J,OAAM,SAAAC,GAAC,OAAIA,EAAE3J,OAAO0J,OAAM,SAAAtG,GAAC,OAAI,EAAKyG,iBAAiBzG,SAC9G0G,EAAiBtI,EAAOzB,MAAME,OAAS,GAAKuB,EAAOzB,MAAM2J,OAAM,SAAAC,GAAC,OAAIA,EAAE3J,OAAO0J,OAAM,SAAAtG,GAAC,OAAkB,IAAdA,EAAEjC,cAC1F4I,EAAqBvI,EAAOzB,MAAME,OAAS,GAAKuB,EAAOzB,MAAM2J,OAAM,SAAAC,GAAC,OAAIA,EAAE3J,OAAO0J,OAAM,SAAAtG,GAAC,OAAIA,EAAEb,WAAWmH,OAAM,SAAA3H,GAAQ,OAAuB,IAAnBA,EAASjK,eAC1I,OAAOwR,GAAqBC,GAAuBE,GAAsBG,GAAkBE,GAAkBC,IAjJxF,8EAoJvB,2GACOjT,KAAK8R,SAAS9R,KAAKkT,QAAQ5Q,KAAK,KACrCtC,KAAKyI,eACC0K,GAAgB,EAHxB,SAI0BnC,QAAcI,WAAW+B,GAJnD,OAIEnT,KAAKuI,WAJP,uDApJuB,8DAAS7F,QACVC,gBAArBiM,eAAI,kBAAiB,qCADHgD,GAAI,gBANxB1O,eAAU,CACT2L,WAAY,CACVe,6BACAd,yBAGiB8C,cCpK4X,M,yBCQ7Y,GAAY,eACd,GACA9R,EACAyB,GACA,EACA,KACA,WACA,MAIa,gBAAiB,QAWhC,IAAkB,GAAW,CAAC0L,OAAA,KAAK8B,cAAA,KAAWvB,QAAA,KAAM8D,qBAAA,KAAkB8B,WAAA,KAAQ3P,aAAA,KAAWoK,WAAA,Q","file":"js/chunk-220a1f36.3c44c4c9.js","sourcesContent":["export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOC.vue?vue&type=style&index=0&id=11c40568&scoped=true&lang=scss&\"","import { CurveFunction } from \"@/types/PowerSpeedCurveConfig\";\r\n\r\ntype CurveConstantCount = {\r\n // eslint-disable-next-line no-unused-vars\r\n [key in CurveFunction]: {\r\n min: number;\r\n max: number;\r\n };\r\n};\r\n\r\ntype CurveFunctionFormula = {\r\n // eslint-disable-next-line no-unused-vars\r\n [key in CurveFunction]: string;\r\n};\r\n\r\nexport const curveConstantsCount: CurveConstantCount = {\r\n [CurveFunction.Hoerl]: {\r\n min: 3,\r\n max: 3,\r\n },\r\n [CurveFunction.Rational]: {\r\n min: 4,\r\n max: 4,\r\n },\r\n [CurveFunction.Polynomial]: {\r\n min: 3,\r\n max: 7,\r\n },\r\n [CurveFunction.Power]: {\r\n min: 3,\r\n max: 7,\r\n },\r\n};\r\n\r\nexport const curveTypeFormula: CurveFunctionFormula = {\r\n [CurveFunction.Hoerl]: \"y=A*(B^x)*(x^C)\",\r\n [CurveFunction.Rational]: \"y=(A+Bx)/(1+Cx+Dx^2)\",\r\n [CurveFunction.Polynomial]: \"y=A+Bx+Cx^2+Dx^3...\",\r\n [CurveFunction.Power]: \"y=A*x^B\",\r\n};\r\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOCPowerConfigEditDialog.vue?vue&type=style&index=0&id=46b4f1b2&lang=scss&scoped=true&\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"vessel-select\"},[_c('v-list',{staticClass:\"d-flex flex-wrap py-3\"},[_vm._l((_vm.vessels),function(vessel){return _c('v-list-item',{key:vessel.id,attrs:{\"color\":\"primary lighten-2\",\"top\":\"\"}},[_c('v-checkbox',{attrs:{\"label\":vessel.name,\"color\":\"primary\"},on:{\"change\":function($event){return _vm.toggleVesselSelection(vessel)}},model:{value:(_vm.selectedVesselIds[vessel.id]),callback:function ($$v) {_vm.$set(_vm.selectedVesselIds, vessel.id, $$v)},expression:\"selectedVesselIds[vessel.id]\"}}),_vm._t(\"checkbox-append-content\",null,{\"vessel\":vessel})],2)})],2),_vm._t(\"footer-content\")],2)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, PropSync, Prop } from \"vue-property-decorator\";\nimport { Vessel } from \"@/types/Vessel\";\n\n@Component({})\nexport default class VesselSelectSimple extends Vue {\n @PropSync(\"selectedVesselsList\", { type: Array, default: () => [] })\n selectedVessels!: Vessel[];\n @Prop({ type: Array, default: () => [], required: true })\n vessels!: Vessel[];\n\n get selectedVesselIds(): Record {\n const vesselIds: Record = {};\n this.vessels.forEach(vessel => {\n vesselIds[vessel.id] = this.isSelected(vessel.id);\n });\n return vesselIds;\n }\n\n set selectedVesselIds(value: Record) {\n Object.keys(value).forEach(vesselId => {\n const id = parseInt(vesselId, 10);\n const vessel = this.vessels.find(v => v.id === id);\n if (vessel && value[id] !== this.isSelected(id)) {\n this.toggleVesselSelection(vessel);\n }\n });\n }\n\n toggleVesselSelection(vessel: Vessel): void {\n const index = this.selectedVessels.findIndex(v => v.id === vessel.id);\n if (index === -1) {\n this.selectedVessels.push(vessel);\n } else {\n this.selectedVessels.splice(index, 1);\n }\n this.$emit(\"onSelectionChange\", vessel);\n }\n\n isSelected(id: number): boolean {\n return this.selectedVessels.some(v => v.id === id);\n }\n}\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VesselSelectSimple.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/ts-loader/index.js??ref--15-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VesselSelectSimple.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./VesselSelectSimple.vue?vue&type=template&id=7fec328c&scoped=true&\"\nimport script from \"./VesselSelectSimple.vue?vue&type=script&lang=ts&\"\nexport * from \"./VesselSelectSimple.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./VesselSelectSimple.vue?vue&type=style&index=0&id=7fec328c&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7fec328c\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VCheckbox } from 'vuetify/lib/components/VCheckbox';\nimport { VList } from 'vuetify/lib/components/VList';\nimport { VListItem } from 'vuetify/lib/components/VList';\ninstallComponents(component, {VCheckbox,VList,VListItem})\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOCPowerTierDataCurveEditDialong.vue?vue&type=style&index=0&id=60d487bf&lang=scss&scoped=true&\"","export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--9-oneOf-1-0!../../node_modules/css-loader/dist/cjs.js??ref--9-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--9-oneOf-1-2!../../node_modules/sass-loader/dist/cjs.js??ref--9-oneOf-1-3!../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VesselSelectSimple.vue?vue&type=style&index=0&id=7fec328c&scoped=true&lang=scss&\"","// Styles\nimport './VTextarea.sass'\n\n// Extensions\nimport VTextField from '../VTextField/VTextField'\n\n// Utilities\nimport mixins from '../../util/mixins'\n\n// Types\nimport Vue from 'vue'\n\ninterface options extends Vue {\n $refs: {\n input: HTMLTextAreaElement\n }\n}\n\nconst baseMixins = mixins\n>(\n VTextField\n)\n\n/* @vue/component */\nexport default baseMixins.extend({\n name: 'v-textarea',\n\n props: {\n autoGrow: Boolean,\n noResize: Boolean,\n rowHeight: {\n type: [Number, String],\n default: 24,\n validator: (v: any) => !isNaN(parseFloat(v)),\n },\n rows: {\n type: [Number, String],\n default: 5,\n validator: (v: any) => !isNaN(parseInt(v, 10)),\n },\n },\n\n computed: {\n classes (): object {\n return {\n 'v-textarea': true,\n 'v-textarea--auto-grow': this.autoGrow,\n 'v-textarea--no-resize': this.noResizeHandle,\n ...VTextField.options.computed.classes.call(this),\n }\n },\n noResizeHandle (): boolean {\n return this.noResize || this.autoGrow\n },\n },\n\n watch: {\n autoGrow (val: boolean) {\n this.$nextTick(() => {\n val\n ? this.calculateInputHeight()\n : this.$refs.input?.style.removeProperty('height')\n })\n },\n lazyValue () {\n this.autoGrow && this.$nextTick(this.calculateInputHeight)\n },\n rowHeight () {\n this.autoGrow && this.$nextTick(this.calculateInputHeight)\n },\n },\n\n mounted () {\n setTimeout(() => {\n this.autoGrow && this.calculateInputHeight()\n }, 0)\n },\n\n methods: {\n calculateInputHeight () {\n const input = this.$refs.input\n if (!input) return\n\n input.style.height = '0'\n const height = input.scrollHeight\n const minHeight = parseInt(this.rows, 10) * parseFloat(this.rowHeight)\n // This has to be done ASAP, waiting for Vue\n // to update the DOM causes ugly layout jumping\n input.style.height = Math.max(minHeight, height) + 'px'\n },\n genInput () {\n const input = VTextField.options.methods.genInput.call(this)\n\n input.tag = 'textarea'\n delete input.data!.attrs!.type\n input.data!.attrs!.rows = this.rows\n\n return input\n },\n onInput (e: Event) {\n VTextField.options.methods.onInput.call(this, e)\n this.autoGrow && this.calculateInputHeight()\n },\n onKeyDown (e: KeyboardEvent) {\n // Prevents closing of a\n // dialog when pressing\n // enter\n if (this.isFocused && e.keyCode === 13) {\n e.stopPropagation()\n }\n\n this.$emit('keydown', e)\n },\n },\n})\n","export default function (event) {\r\n event = event ? event : window.event;\r\n const expect = event.target.value.toString() + event.key.toString();\r\n return !/^\\d?\\-?\\d*[.,]?\\d*$/.test(expect) ? event.preventDefault() : false;\r\n}\r\n","export interface PowerSpeedCurveConfig {\r\n id: number;\r\n description: string;\r\n powerSpeedCurveData: PowerSpeedCurveData[];\r\n vesselIds: number[];\r\n}\r\n\r\nexport interface PowerSpeedCurveData {\r\n id: number;\r\n curveFunction: CurveFunction;\r\n speedMin: number;\r\n speedMax: number;\r\n draftMin: number;\r\n draftMax: number;\r\n powerSpeedCurveParameters: PowerSpeedCurveParameter[];\r\n}\r\n\r\nexport interface PowerSpeedCurveParameter {\r\n id: number;\r\n constant: string;\r\n a0: number;\r\n a1: number;\r\n a2: number;\r\n}\r\n\r\nexport enum CurveFunction {\r\n Hoerl = \"Hoerl\",\r\n Polynomial = \"Polynomial\",\r\n Rational = \"Rational\",\r\n Power = \"Power\",\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('default-container',[_c('h1',{staticClass:\"d-flex pt-4 px-4\"},[_vm._v(\" SFOC Power \"),_c('v-spacer'),_c('v-btn',{staticClass:\"ml-2 font-weight-bold\",attrs:{\"small\":\"\",\"color\":\"accent\"},on:{\"click\":_vm.addConfig}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-plus\")]),_vm._v(\" Add Config \")],1)],1),_c('v-text-field',{staticClass:\"filter-input search-input px-4\",attrs:{\"label\":\"Search\",\"append-icon\":\"mdi-magnify\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"flat\":\"\",\"outlined\":\"\",\"dense\":\"\"},on:{\"input\":_vm.doSearchDebounced}},[_c('template',{slot:\"append\"},[(_vm.debounceLoader)?_c('v-progress-circular',{staticClass:\"circle-loader\",attrs:{\"indeterminate\":\"\",\"color\":\"neutralDark75\"}}):_c('v-icon',[_vm._v(\"mdi-magnify\")])],1)],2),_c('v-data-table',{staticClass:\"configs-data-table\",attrs:{\"headers\":_vm.headers,\"items\":_vm.filtredConfigs,\"loading\":_vm.debounceLoader},scopedSlots:_vm._u([{key:\"item.isValid\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('span',_vm._g({},on),[(_vm.isConfigValid(item))?_c('v-icon',{attrs:{\"color\":\"success\"}},[_vm._v(\"mdi-check-circle-outline\")]):_c('v-icon',{attrs:{\"color\":\"error\"}},[_vm._v(\"mdi-alert-circle-outline\")])],1)]}}],null,true)},[(_vm.isConfigValid(item))?_c('span',[_vm._v(\"Config is valid\")]):_c('span',[_vm._v(\"Config is NOT valid\")])])]}},{key:\"item.sfoc\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.minSfoc)+\" - \"+_vm._s(item.maxSfoc)+\" \")]}},{key:\"item.power\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.minPower)+\" - \"+_vm._s(item.maxPower)+\" \")]}},{key:\"item.vessels\",fn:function(ref){\nvar item = ref.item;\nreturn _vm._l((item.vesselIds),function(vesselId,index){return _c('v-tooltip',{key:index,attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('span',_vm._g({},on),[_vm._v(\" \"+_vm._s(_vm.getVesselName(vesselId))+\"; \")])]}}],null,true)},[_c('span',[_vm._v(_vm._s(_vm.getVesselName(vesselId)))])])})}},{key:\"item.edit\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.openConfigEditDialog(item)}}},on),[_c('v-icon',{attrs:{\"color\":\"primary\"}},[_vm._v(\"mdi-pencil-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Edit Config\")])])]}},{key:\"item.delete\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.deleteConfig(item)}}},on),[_c('v-icon',{attrs:{\"color\":\"red\"}},[_vm._v(\"mdi-delete-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Delete Config\")])])]}},(_vm.isNoData)?{key:\"no-data\",fn:function(){return [_c('div',{staticClass:\"no-data-slot\"},[_c('h6',{staticClass:\"text-h6\"},[_vm._v(\"There are no configs created yet\")])])]},proxy:true}:null],null,true)}),_c('SFOCPowerConfigEditDialog',{attrs:{\"value\":_vm.editDialog,\"config\":_vm.configToEdit,\"allVessels\":_vm.allVessels,\"currentCompanyVessels\":_vm.currentCompanyVessels,\"max-width\":'1050px'},on:{\"update:value\":function($event){_vm.editDialog=$event},\"onConfigSave\":_vm.fetchConfigs}}),_c('ConfirmDialog',{ref:\"confirmDelete\"})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","import { CurveFunction } from \"@/types/PowerSpeedCurveConfig\";\r\nexport interface SFOCPowerCurveConfig {\r\n id: number;\r\n description: string;\r\n minSfoc: number;\r\n maxSfoc: number;\r\n minPower: number;\r\n maxPower: number;\r\n engineName: string;\r\n engineNameShort: string;\r\n vesselIds: number[];\r\n tiers: TierData[];\r\n}\r\n\r\nexport interface TierData {\r\n id: number;\r\n configId: number;\r\n tier: EngineTier;\r\n tierValue: number;\r\n curves: SFOCPowerCurveData[];\r\n}\r\n\r\nexport interface SFOCPowerCurveData {\r\n id: number;\r\n tierId: number;\r\n curveFunction: CurveFunction;\r\n fromPower: number;\r\n toPower: number;\r\n parameters: SFOCPowerCurveParameter[];\r\n}\r\n\r\nexport interface SFOCPowerCurveParameter {\r\n id: number;\r\n curveDataId: number;\r\n constant: string;\r\n value: number;\r\n}\r\n\r\nexport enum EngineTier {\r\n Tier2 = \"Tier2\",\r\n Tier3 = \"Tier3\",\r\n}\r\n\r\nexport enum Constant {\r\n A = \"A\",\r\n B = \"B\",\r\n C = \"C\",\r\n D = \"D\",\r\n}\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.clonedConfig)?_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth},model:{value:(_vm.isOpen),callback:function ($$v) {_vm.isOpen=$$v},expression:\"isOpen\"}},[_c('v-card',[_c('v-toolbar',{staticClass:\"font-weight-bold\",attrs:{\"dark\":\"\",\"color\":\"accent\",\"dense\":\"\",\"flat\":\"\"}},[_c('v-toolbar-title',[_vm._v(\" Add config \")])],1),_c('v-card-text',{staticClass:\"pb-0 pt-4\"},[_c('div',[_c('v-tabs',{staticClass:\"mb-4\",attrs:{\"grow\":\"\"},model:{value:(_vm.selectedTab),callback:function ($$v) {_vm.selectedTab=$$v},expression:\"selectedTab\"}},[_c('v-tab',{key:\"general\",staticClass:\"font-weight-bold\"},[_vm._v(\"General\")]),_c('v-tab',{key:\"tiers\",staticClass:\"font-weight-bold\"},[_vm._v(\"Tiers\")]),_c('v-tab',{key:\"vessels\",staticClass:\"font-weight-bold\"},[_vm._v(\"Assigned vessels\")])],1),_c('v-tabs-items',{staticClass:\"tabs-content\",model:{value:(_vm.selectedTab),callback:function ($$v) {_vm.selectedTab=$$v},expression:\"selectedTab\"}},[_c('v-tab-item',{key:\"general\"},[_c('v-row',{staticClass:\"mt-2 mb-4\"},[_c('v-col',{staticClass:\"pb-0\",attrs:{\"cols\":\"6\"}},[_c('v-text-field',{attrs:{\"label\":\"Engine name\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"flat\":\"\",\"outlined\":\"\"},model:{value:(_vm.clonedConfig.engineName),callback:function ($$v) {_vm.$set(_vm.clonedConfig, \"engineName\", $$v)},expression:\"clonedConfig.engineName\"}})],1),_c('v-col',{staticClass:\"pb-0\",attrs:{\"cols\":\"6\"}},[_c('v-text-field',{attrs:{\"label\":\"Engine name short\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"flat\":\"\",\"outlined\":\"\"},model:{value:(_vm.clonedConfig.engineNameShort),callback:function ($$v) {_vm.$set(_vm.clonedConfig, \"engineNameShort\", $$v)},expression:\"clonedConfig.engineNameShort\"}})],1)],1),_c('v-row',{staticClass:\"mt-2 mb-6\"},[_c('v-col',{staticClass:\"pb-0\",attrs:{\"cols\":\"3\"}},[_c('v-text-field',{ref:\"minSfoc\",attrs:{\"label\":\"SFOC: Min\",\"suffix\":\"g/kWh\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"flat\":\"\",\"outlined\":\"\"},on:{\"keypress\":_vm.numericFilter,\"input\":function($event){return _vm.replaceDecimalPeriod($event, 'minSfoc')}},model:{value:(_vm.clonedConfig.minSfoc),callback:function ($$v) {_vm.$set(_vm.clonedConfig, \"minSfoc\", _vm._n($$v))},expression:\"clonedConfig.minSfoc\"}})],1),_c('v-col',{staticClass:\"pb-0\",attrs:{\"cols\":\"3\"}},[_c('v-text-field',{ref:\"maxSfoc\",attrs:{\"label\":\"SFOC: Max\",\"suffix\":\"g/kWh\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"flat\":\"\",\"outlined\":\"\"},on:{\"keypress\":_vm.numericFilter,\"input\":function($event){return _vm.replaceDecimalPeriod($event, 'maxSfoc')}},model:{value:(_vm.clonedConfig.maxSfoc),callback:function ($$v) {_vm.$set(_vm.clonedConfig, \"maxSfoc\", _vm._n($$v))},expression:\"clonedConfig.maxSfoc\"}})],1),_c('v-col',{staticClass:\"pb-0\",attrs:{\"cols\":\"3\"}},[_c('v-text-field',{ref:\"minPower\",attrs:{\"label\":\"Power: Min\",\"suffix\":\"kW\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"flat\":\"\",\"outlined\":\"\"},on:{\"keypress\":_vm.numericFilter,\"input\":function($event){return _vm.replaceDecimalPeriod($event, 'minPower')}},model:{value:(_vm.clonedConfig.minPower),callback:function ($$v) {_vm.$set(_vm.clonedConfig, \"minPower\", _vm._n($$v))},expression:\"clonedConfig.minPower\"}})],1),_c('v-col',{staticClass:\"pb-0\",attrs:{\"cols\":\"3\"}},[_c('v-text-field',{ref:\"maxPower\",attrs:{\"label\":\"Power: Max\",\"suffix\":\"kW\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"flat\":\"\",\"outlined\":\"\"},on:{\"keypress\":_vm.numericFilter,\"input\":function($event){return _vm.replaceDecimalPeriod($event, 'maxPower')}},model:{value:(_vm.clonedConfig.maxPower),callback:function ($$v) {_vm.$set(_vm.clonedConfig, \"maxPower\", _vm._n($$v))},expression:\"clonedConfig.maxPower\"}})],1)],1),_c('v-row',{staticClass:\"mb-4\"},[_c('v-col',[_c('v-textarea',{attrs:{\"clear-icon\":\"mdi-close-circle\",\"label\":\"Description\",\"row-height\":\"20\",\"rows\":\"2\",\"auto-grow\":\"\",\"persistent-placeholder\":\"\",\"clearable\":\"\",\"hide-details\":\"\",\"flat\":\"\",\"outlined\":\"\"},model:{value:(_vm.clonedConfig.description),callback:function ($$v) {_vm.$set(_vm.clonedConfig, \"description\", $$v)},expression:\"clonedConfig.description\"}})],1)],1)],1),_c('v-tab-item',{key:\"tiers\"},[_c('v-data-table',{staticClass:\"tiers-data-table\",attrs:{\"headers\":_vm.headers,\"items\":_vm.clonedConfig.tiers},scopedSlots:_vm._u([{key:\"item.curves\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.curves.length)+\" \")]}},{key:\"item.edit\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.openTierDataEditModal(item)}}},on),[_c('v-icon',{attrs:{\"color\":\"primary\"}},[_vm._v(\"mdi-pencil-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Edit Config\")])])]}},{key:\"item.delete\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.deleteTierData(item)}}},on),[_c('v-icon',{attrs:{\"color\":\"red\"}},[_vm._v(\"mdi-delete-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Delete Config\")])])]}},(_vm.isNoData)?{key:\"no-data\",fn:function(){return [_c('div',{staticClass:\"no-data-slot\"},[_c('h6',{staticClass:\"text-h6 mb-0\"},[_vm._v(\"There are no tiers created yet\")])])]},proxy:true}:null],null,true)}),_c('v-btn',{staticClass:\"mb-2 font-weight-bold primary--text\",attrs:{\"color\":\"neutralLighten100\",\"small\":\"\",\"dark\":\"\"},on:{\"click\":_vm.addNewTier}},[_vm._v(\" Add tier \")])],1),_c('v-tab-item',[_c('div',{staticClass:\"filters pt-2 mb-6\"},[_c('v-text-field',{staticClass:\"filter-input search-input\",attrs:{\"label\":\"Search by vessel name\",\"append-icon\":\"mdi-magnify\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"flat\":\"\",\"outlined\":\"\",\"dense\":\"\"},on:{\"input\":_vm.doSearchDebounced}},[_c('template',{slot:\"append\"},[(_vm.debounceLoader)?_c('v-progress-circular',{staticClass:\"circle-loader\",attrs:{\"indeterminate\":\"\",\"color\":\"neutralDark75\"}}):_c('v-icon',[_vm._v(\"mdi-magnify\")])],1)],2),_c('v-select',{staticClass:\"filter-input company-select\",attrs:{\"items\":_vm.companies,\"item-value\":\"id\",\"item-text\":\"name\",\"label\":\"Filter vessels by Company\",\"menu-props\":{ contentClass: 'company-select-dropdown' },\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"outlined\":\"\"},on:{\"change\":_vm.onCompanyChanged},model:{value:(_vm.selectedCompanyId),callback:function ($$v) {_vm.selectedCompanyId=$$v},expression:\"selectedCompanyId\"}})],1),_c('VesselSelectSimple',{attrs:{\"vessels\":_vm.filteredVessels,\"selectedVesselsList\":_vm.selectedVessels},on:{\"update:selectedVesselsList\":function($event){_vm.selectedVessels=$event},\"update:selected-vessels-list\":function($event){_vm.selectedVessels=$event}}})],1)],1)],1)]),_c('v-card-actions',{staticClass:\"justify-end align-center pb-4 pt-1 px-4\"},[_c('v-btn',{staticClass:\"font-weight-bold\",attrs:{\"color\":\"accent\"},on:{\"click\":_vm.saveConfig}},[_vm._v(\"Save\")]),_c('v-btn',{staticClass:\"font-weight-bold\",attrs:{\"text\":\"\"},on:{\"click\":_vm.discardChanges}},[_vm._v(\"Cancel\")])],1)],1),_c('ConfirmDialog',{ref:\"confirmDelete\"}),_c('SFOCPowerTierDataEditDialog',{attrs:{\"value\":_vm.editTierDataDialog,\"config\":_vm.clonedConfig,\"tierData\":_vm.tierToEdit,\"max-width\":'680px'},on:{\"update:value\":function($event){_vm.editTierDataDialog=$event},\"onSave\":_vm.handleTierDataSave}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.clonedTierData)?_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth},model:{value:(_vm.isOpen),callback:function ($$v) {_vm.isOpen=$$v},expression:\"isOpen\"}},[_c('v-card',[_c('v-toolbar',{attrs:{\"dark\":\"\",\"color\":\"accent\",\"dense\":\"\",\"flat\":\"\"}},[_c('v-toolbar-title',{staticClass:\"font-weight-bold\"},[_vm._v(\" Tier Data \")])],1),_c('v-card-text',{staticClass:\"px-4 py-8\"},[_c('v-row',[_c('v-col',[_c('v-select',{attrs:{\"items\":_vm.TierOptions,\"label\":\"Engine Tier\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"outlined\":\"\"},model:{value:(_vm.clonedTierData.tier),callback:function ($$v) {_vm.$set(_vm.clonedTierData, \"tier\", $$v)},expression:\"clonedTierData.tier\"}})],1),_c('v-col',[_c('v-text-field',{attrs:{\"type\":\"number\",\"label\":\"Tier Value\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"flat\":\"\",\"outlined\":\"\",\"dense\":\"\"},on:{\"keypress\":_vm.numericFilter},model:{value:(_vm.clonedTierData.tierValue),callback:function ($$v) {_vm.$set(_vm.clonedTierData, \"tierValue\", _vm._n($$v))},expression:\"clonedTierData.tierValue\"}})],1)],1),_c('v-row',[_c('v-col',[_c('v-data-table',{staticClass:\"curves-data-table\",attrs:{\"headers\":_vm.headers,\"items\":_vm.clonedTierData.curves},scopedSlots:_vm._u([{key:\"item.power\",fn:function(ref){\nvar item = ref.item;\nreturn [_vm._v(\" \"+_vm._s(item.fromPower)+\" - \"+_vm._s(item.toPower)+\" \")]}},{key:\"item.edit\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.openTierDataCurveEditModal(item)}}},on),[_c('v-icon',{attrs:{\"color\":\"primary\"}},[_vm._v(\"mdi-pencil-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Edit Config\")])])]}},{key:\"item.delete\",fn:function(ref){\nvar item = ref.item;\nreturn [_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [_c('v-btn',_vm._g({attrs:{\"small\":\"\",\"icon\":\"\"},on:{\"click\":function($event){return _vm.deleteTierData(item)}}},on),[_c('v-icon',{attrs:{\"color\":\"red\"}},[_vm._v(\"mdi-delete-outline\")])],1)]}}],null,true)},[_c('span',[_vm._v(\"Delete Config\")])])]}},(_vm.isNoData)?{key:\"no-data\",fn:function(){return [_c('div',{staticClass:\"no-data-slot\"},[_c('h6',{staticClass:\"text-h6 mb-0\"},[_vm._v(\"There are no curve segments created yet\")])])]},proxy:true}:null],null,true)})],1)],1),_c('v-row',[_c('v-col',[_c('v-btn',{staticClass:\"mb-2 font-weight-bold primary--text\",attrs:{\"color\":\"neutralLighten100\",\"small\":\"\",\"dark\":\"\"},on:{\"click\":_vm.addNewCurve}},[_vm._v(\" Add curve segment \")])],1)],1)],1),_c('v-card-actions',{staticClass:\"justify-end align-center pb-4 pt-1 px-4\"},[_c('v-btn',{staticClass:\"font-weight-bold\",attrs:{\"color\":\"accent\"},on:{\"click\":_vm.saveChanges}},[_vm._v(\"Save\")]),_c('v-btn',{staticClass:\"font-weight-bold\",attrs:{\"text\":\"\"},on:{\"click\":_vm.discardChanges}},[_vm._v(\"Cancel\")])],1)],1),_c('ConfirmDialog',{ref:\"confirmDelete\"}),_c('SFOCPowerTierDataCurveEditDialong',{attrs:{\"value\":_vm.editCurveSegmentDialog,\"config\":_vm.config,\"tier\":_vm.clonedTierData,\"curveData\":_vm.curveSegmentToEdit,\"max-width\":'680px'},on:{\"update:value\":function($event){_vm.editCurveSegmentDialog=$event},\"onSave\":_vm.handleCurveSegmentSave}})],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.clonedCurveData)?_c('v-dialog',{attrs:{\"max-width\":_vm.dialogWidth},model:{value:(_vm.isOpen),callback:function ($$v) {_vm.isOpen=$$v},expression:\"isOpen\"}},[_c('v-card',[_c('v-toolbar',{attrs:{\"dark\":\"\",\"color\":\"accent\",\"dense\":\"\",\"flat\":\"\"}},[_c('v-toolbar-title',{staticClass:\"font-weight-bold\"},[_vm._v(\" Curve settings \")])],1),_c('v-card-text',{staticClass:\"px-4 py-8\"},[_c('v-row',[_c('v-col',[_c('v-select',{attrs:{\"items\":_vm.curveOptions,\"label\":\"Curve Function\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"dense\":\"\",\"outlined\":\"\"},model:{value:(_vm.clonedCurveData.curveFunction),callback:function ($$v) {_vm.$set(_vm.clonedCurveData, \"curveFunction\", $$v)},expression:\"clonedCurveData.curveFunction\"}})],1),_c('v-col',[_c('v-text-field',{attrs:{\"label\":\"Function\",\"persistent-placeholder\":\"\",\"disabled\":true,\"hide-details\":\"\",\"flat\":\"\",\"outlined\":\"\",\"dense\":\"\"},model:{value:(_vm.selectedCurveFunctionFormula),callback:function ($$v) {_vm.selectedCurveFunctionFormula=_vm._n($$v)},expression:\"selectedCurveFunctionFormula\"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-text-field',{ref:\"fromPower\",attrs:{\"label\":\"From (Power)\",\"suffix\":\"kW\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"flat\":\"\",\"outlined\":\"\",\"dense\":\"\"},on:{\"keypress\":_vm.numericFilter,\"input\":function($event){return _vm.replaceDecimalPeriod($event, 'fromPower')}},model:{value:(_vm.clonedCurveData.fromPower),callback:function ($$v) {_vm.$set(_vm.clonedCurveData, \"fromPower\", _vm._n($$v))},expression:\"clonedCurveData.fromPower\"}})],1),_c('v-col',{attrs:{\"cols\":\"6\"}},[_c('v-text-field',{ref:\"toPower\",attrs:{\"label\":\"To (Power)\",\"suffix\":\"kW\",\"persistent-placeholder\":\"\",\"hide-details\":\"\",\"flat\":\"\",\"outlined\":\"\",\"dense\":\"\"},on:{\"keypress\":_vm.numericFilter,\"input\":function($event){return _vm.replaceDecimalPeriod($event, 'toPower')}},model:{value:(_vm.clonedCurveData.toPower),callback:function ($$v) {_vm.$set(_vm.clonedCurveData, \"toPower\", _vm._n($$v))},expression:\"clonedCurveData.toPower\"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{\"cols\":\"12\"}},[_c('div',{staticClass:\"constants-editor-wrapper\"},[_c('div',{staticClass:\"constants-editor-header\"},[_c('div',{staticClass:\"subtitle-1 font-weight-bold primary--text mb-2\"},[_vm._v(\"Constants\")]),_c('v-divider',{staticClass:\"mb-6\"})],1),_vm._l((_vm.curveParameters),function(parameter,index){return _c('div',{key:index,staticClass:\"constant-field mb-8\"},[_c('p',{staticClass:\"mb-0\"},[_c('span',{staticClass:\"constant-symbol\"},[_vm._v(\"Constant \"+_vm._s(parameter.constant)+\":\")])]),_c('div',{staticClass:\"constant-field-list\"},[_c('v-text-field',{ref:(\"constant\" + (parameter.constant)),refInFor:true,attrs:{\"hide-details\":\"\",\"flat\":\"\",\"outlined\":\"\",\"dense\":\"\"},on:{\"keypress\":_vm.numericFilter,\"input\":function($event){return _vm.replaceDecimalPeriod($event, (\"constant\" + (parameter.constant)))}},model:{value:(parameter.value),callback:function ($$v) {_vm.$set(parameter, \"value\", _vm._n($$v))},expression:\"parameter.value\"}}),(_vm.isAvailableToRemove(parameter))?_c('v-tooltip',{attrs:{\"top\":\"\"},scopedSlots:_vm._u([{key:\"activator\",fn:function(ref){\nvar on = ref.on;\nreturn [(_vm.isRemoveConstantEnabled())?_c('v-btn',_vm._g({staticClass:\"remove-constant\",attrs:{\"color\":\"error\",\"fab\":\"\",\"dark\":\"\",\"x-small\":\"\"},on:{\"click\":function($event){return _vm.removeParameter(parameter)}}},on),[_c('v-icon',{attrs:{\"dark\":\"\"}},[_vm._v(\"mdi-minus\")])],1):_vm._e()]}}],null,true)},[_c('span',[_vm._v(\"Remove constant\")])]):_vm._e()],1)])}),(_vm.showActions)?_c('v-btn',{staticClass:\"ma-2\",attrs:{\"disabled\":!_vm.isAddConstantEnabled(),\"color\":\"neutralLighten100\",\"small\":\"\"},on:{\"click\":_vm.addParameter}},[_c('v-icon',{attrs:{\"small\":\"\"}},[_vm._v(\"mdi-plus\")]),_vm._v(\"Add constant\")],1):_vm._e()],2)])],1)],1),_c('v-card-actions',{staticClass:\"justify-end align-center pb-4 pt-1 px-4\"},[_c('v-btn',{staticClass:\"font-weight-bold\",attrs:{\"color\":\"accent\"},on:{\"click\":_vm.saveChanges}},[_vm._v(\"Save\")]),_c('v-btn',{staticClass:\"font-weight-bold\",attrs:{\"text\":\"\"},on:{\"click\":_vm.discardChanges}},[_vm._v(\"Cancel\")])],1)],1)],1):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, PropSync, Vue, Watch } from \"vue-property-decorator\";\nimport numberHelper from \"Utilities/number-helper\";\n// types\nimport { CurveFunction } from \"@/types/PowerSpeedCurveConfig\";\nimport { curveTypeFormula } from \"@/consts/curveConfigDefaults\";\nimport { SFOCPowerCurveConfig, TierData, SFOCPowerCurveParameter, SFOCPowerCurveData } from \"@/types/SFOCPowerCurveConfig\";\n\n@Component({})\nexport default class SFOCPowerTierDataCurveEditDialong extends Vue {\n @PropSync(\"value\", { required: true }) isOpen!: boolean;\n @PropSync(\"maxWidth\", { default: 1000 }) dialogWidth!: number;\n @Prop({ required: true }) config!: SFOCPowerCurveConfig;\n @Prop({ required: true }) tier!: TierData;\n @Prop({ required: true }) curveData!: SFOCPowerCurveData;\n\n clonedCurveData: SFOCPowerCurveData | null = null;\n parameters: string[] = [\"A\", \"B\", \"C\", \"D\", \"E\", \"F\", \"G\"];\n\n get curveOptions(): string[] {\n return Object.keys(CurveFunction);\n }\n\n get showActions(): boolean {\n if (!this.clonedCurveData) return false;\n return this.clonedCurveData.curveFunction === CurveFunction.Polynomial;\n }\n\n get selectedCurveFunction(): CurveFunction | undefined {\n return this.clonedCurveData?.curveFunction;\n }\n\n get selectedCurveFunctionFormula(): string {\n if (!this.selectedCurveFunction) return \"\";\n return curveTypeFormula[this.selectedCurveFunction];\n }\n\n get curveParameters(): SFOCPowerCurveParameter[] {\n if (!this.clonedCurveData || !this.selectedCurveFunction) return [];\n return this.clonedCurveData.parameters;\n }\n\n @Watch(\"isOpen\")\n handleCurveDataChange(): void {\n this.clonedCurveData = JSON.parse(JSON.stringify(this.curveData));\n }\n\n @Watch(\"selectedCurveFunction\")\n handleCurveFunctionChange(): void {\n if (!this.clonedCurveData) return;\n const parametersNeeded = [\"A\", \"B\", \"C\"];\n switch (this.selectedCurveFunction) {\n case CurveFunction.Hoerl:\n this.addMissingParameters(parametersNeeded);\n this.clonedCurveData.parameters = this.clonedCurveData.parameters.slice(0, 3);\n break;\n case CurveFunction.Polynomial:\n this.addMissingParameters(parametersNeeded);\n this.clonedCurveData.parameters = this.clonedCurveData?.parameters.slice(0, 4);\n break;\n case CurveFunction.Rational:\n parametersNeeded.push(\"D\");\n this.addMissingParameters(parametersNeeded);\n this.clonedCurveData.parameters = this.clonedCurveData?.parameters.slice(0, 4);\n break;\n default:\n break;\n }\n }\n\n addMissingParameters(parametersNeeded: string[]): void {\n const missingParameters = parametersNeeded.filter(p => !this.clonedCurveData?.parameters.some(c => c.constant === p));\n missingParameters.forEach(parameter => {\n this.clonedCurveData?.parameters.push({ id: 0, curveDataId: 0, constant: parameter, value: 0 });\n });\n }\n\n numericFilter(event: any): number {\n return numberHelper.numericWithNegativeFilter(event);\n }\n\n replaceDecimalPeriod($event: any, ref: string): void {\n if (!$event.includes(\",\") || !$event) return;\n if (ref.includes(\"constant\")) (this.$refs[ref] as any)[0].internalValue = $event.replace(/,/g, \".\");\n else (this.$refs[ref] as any).internalValue = $event.replace(/,/g, \".\");\n }\n\n isAddConstantEnabled(): boolean {\n return this.curveParameters.length < this.parameters.length;\n }\n\n isRemoveConstantEnabled(): boolean {\n return this.curveParameters.length > 3;\n }\n isAvailableToRemove(parameter: SFOCPowerCurveParameter): boolean {\n return (parameter.constant === \"D\" || parameter.constant === \"E\" || parameter.constant === \"F\" || parameter.constant === \"G\") && this.showActions;\n }\n\n addParameter(): void {\n if (!this.clonedCurveData) return;\n if (this.clonedCurveData.parameters.length >= this.parameters.length) return;\n const parameter = this.parameters[this.clonedCurveData.parameters.length];\n this.clonedCurveData?.parameters.push({ id: 0, curveDataId: 0, constant: parameter, value: 0 });\n }\n\n removeParameter(parameter: SFOCPowerCurveParameter): void {\n if (!this.clonedCurveData) return;\n if (this.clonedCurveData.parameters.length <= 3) return;\n const parameterIndex = this.clonedCurveData.parameters.findIndex(p => p.constant === parameter.constant);\n if (parameterIndex !== -1) {\n this.clonedCurveData.parameters.splice(parameterIndex, 1);\n }\n }\n\n saveChanges(): void {\n this.isOpen = false;\n this.$emit(\"onSave\", this.clonedCurveData);\n }\n\n discardChanges(): void {\n this.isOpen = false;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOCPowerTierDataCurveEditDialong.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOCPowerTierDataCurveEditDialong.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SFOCPowerTierDataCurveEditDialong.vue?vue&type=template&id=60d487bf&scoped=true&\"\nimport script from \"./SFOCPowerTierDataCurveEditDialong.vue?vue&type=script&lang=ts&\"\nexport * from \"./SFOCPowerTierDataCurveEditDialong.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SFOCPowerTierDataCurveEditDialong.vue?vue&type=style&index=0&id=60d487bf&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"60d487bf\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VDivider } from 'vuetify/lib/components/VDivider';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCol,VDialog,VDivider,VIcon,VRow,VSelect,VTextField,VToolbar,VToolbarTitle,VTooltip})\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, PropSync, Ref, Vue, Watch } from \"vue-property-decorator\";\nimport numericFilter from \"Utilities/numericFilter\";\n// types\nimport { CurveFunction } from \"@/types/PowerSpeedCurveConfig\";\nimport { SFOCPowerCurveConfig, TierData, EngineTier, SFOCPowerCurveData } from \"@/types/SFOCPowerCurveConfig\";\n// components\nimport SFOCPowerTierDataCurveEditDialong from \"@/components/referencecurves/SFOCPowerTierDataCurveEditDialong.vue\";\nimport ConfirmDialog from \"@/components/ConfirmDialog.vue\";\n\n@Component({\n components: {\n SFOCPowerTierDataCurveEditDialong,\n ConfirmDialog,\n },\n})\nexport default class SFOCPowerTierDataEditDialog extends Vue {\n @PropSync(\"value\", { required: true }) isOpen!: boolean;\n @PropSync(\"maxWidth\", { default: 1000 }) dialogWidth!: number;\n @Prop({ required: true }) config!: SFOCPowerCurveConfig;\n @Prop({ required: true }) tierData!: TierData;\n @Ref(\"confirmDelete\") confirmDelete!: any;\n\n clonedTierData: TierData | null = null;\n editCurveSegmentDialog = false;\n curveSegmentToEdit: SFOCPowerCurveData | null = null;\n headers = [\n {\n text: \"Curve\",\n value: \"curveFunction\",\n class: \"v-data-table-column-header\",\n width: \"45%\",\n sortable: true,\n },\n {\n text: \"Power Range\",\n value: \"power\",\n class: \"v-data-table-column-header\",\n width: \"45%\",\n },\n {\n text: \"Edit\",\n value: \"edit\",\n class: \"v-data-table-column-header\",\n width: \"5%\",\n sortable: false,\n },\n {\n text: \"Delete\",\n value: \"delete\",\n class: \"v-data-table-column-header\",\n width: \"5%\",\n sortable: false,\n },\n ];\n\n get TierOptions(): string[] {\n return Object.keys(EngineTier);\n }\n\n get isNoData(): boolean {\n return Boolean(this.clonedTierData?.curves.length === 0);\n }\n\n @Watch(\"isOpen\")\n handleCurveDataChange(): void {\n this.clonedTierData = JSON.parse(JSON.stringify(this.tierData));\n }\n\n numericFilter(event: any): number {\n return numericFilter(event);\n }\n\n openTierDataCurveEditModal(tierCurveData: SFOCPowerCurveData): void {\n this.editCurveSegmentDialog = true;\n this.curveSegmentToEdit = tierCurveData;\n }\n\n async deleteTierData(tierCurveData: SFOCPowerCurveData): Promise {\n const confirmed = await this.confirmDelete.open(\"Delete Tier Curve\", \"Are you sure you want to delete this tier curve data?\");\n if (confirmed) {\n if (!this.clonedTierData) return;\n const index = this.clonedTierData.curves.indexOf(tierCurveData);\n if (index > -1) this.clonedTierData.curves.splice(index, 1);\n }\n }\n\n addNewCurve(): void {\n const newCurve: SFOCPowerCurveData = {\n id: 0,\n tierId: this.clonedTierData?.id ?? 0,\n curveFunction: CurveFunction.Polynomial,\n fromPower: 0,\n toPower: 0,\n parameters: [],\n };\n this.clonedTierData?.curves.push(newCurve);\n this.openTierDataCurveEditModal(newCurve);\n }\n\n handleCurveSegmentSave(updatedCurveData: SFOCPowerCurveData): void {\n if (!this.clonedTierData) return;\n const index = this.clonedTierData.curves.findIndex(c => c.id === updatedCurveData.id);\n if (index > -1) {\n this.clonedTierData.curves.splice(index, 1, updatedCurveData);\n this.tierData.curves.splice(index, 1, updatedCurveData);\n }\n }\n\n saveChanges(): void {\n this.isOpen = false;\n this.$emit(\"onSave\", this.clonedTierData);\n }\n\n discardChanges(): void {\n this.isOpen = false;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOCPowerTierDataEditDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOCPowerTierDataEditDialog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SFOCPowerTierDataEditDialog.vue?vue&type=template&id=35447bc6&scoped=true&\"\nimport script from \"./SFOCPowerTierDataEditDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./SFOCPowerTierDataEditDialog.vue?vue&type=script&lang=ts&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"35447bc6\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCol,VDataTable,VDialog,VIcon,VRow,VSelect,VTextField,VToolbar,VToolbarTitle,VTooltip})\n","import net from \"App/net\";\r\n\r\nclass SfocPowerCurveClient {\r\n constructor() {\r\n }\r\n\r\n getAllConfigs() {\r\n return net.get(\"/ReferenceCurves/SfocPower/Configs\");\r\n }\r\n\r\n postEmptyConfig() {\r\n return net.post(\"/ReferenceCurves/SfocPower/Configs\");\r\n }\r\n\r\n postConfig(config) {\r\n return net.post(\"/ReferenceCurves/SfocPower/Configs\", config);\r\n }\r\n\r\n updateConfig(config) {\r\n return net.put(\"/ReferenceCurves/SfocPower/Configs\", config);\r\n }\r\n\r\n deleteConfig(id) {\r\n return net.del(`/ReferenceCurves/SfocPower/Configs/${id}`);\r\n }\r\n}\r\n\r\n\r\nexport default new SfocPowerCurveClient();\r\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Prop, PropSync, Vue, Watch, Ref } from \"vue-property-decorator\";\nimport store from \"@/store\";\nimport { getModule } from \"vuex-module-decorators\";\nimport { curveTypeFormula } from \"@/consts/curveConfigDefaults\";\nimport numberHelper from \"Utilities/number-helper\";\nimport _ from \"underscore\";\n// components\nimport VesselSelectSimple from \"@/components/VesselSelectSimple.vue\";\nimport SFOCPowerTierDataEditDialog from \"@/components/referencecurves/SFOCPowerTierDataEditDialog.vue\";\nimport ConfirmDialog from \"@/components/ConfirmDialog.vue\";\n// types\nimport { CurveFunction } from \"@/types/PowerSpeedCurveConfig\";\nimport { Vessel } from \"@/types/Vessel\";\nimport { Company } from \"@/types/company\";\nimport { SFOCPowerCurveConfig, TierData, EngineTier } from \"@/types/SFOCPowerCurveConfig\";\n// clients\nimport VesselsClient from \"Clients/vessels-client\";\n// modules\nimport CompaniesModule from \"@/store/clients/Companies.module\";\nimport UserModule from \"@/store/clients/User.module\";\nimport SFOCPowerCurveClient from \"@/Scripts/clients/sfoc-power-curve-client\";\n\nconst Companies = getModule(CompaniesModule, store);\nconst User = getModule(UserModule, store);\n\n@Component({\n components: {\n VesselSelectSimple,\n SFOCPowerTierDataEditDialog,\n ConfirmDialog,\n },\n})\nexport default class SFOCPowerConfigEditDialog extends Vue {\n @Ref(\"confirmDelete\") confirmDelete!: any;\n @PropSync(\"value\", { required: true }) isOpen!: boolean;\n @PropSync(\"maxWidth\", { default: 1000 }) dialogWidth!: number;\n @Prop({ required: true }) config!: SFOCPowerCurveConfig;\n @Prop({ required: true }) allVessels!: Vessel[];\n // @Prop({ required: true }) currentCompanyVessels!: Vessel[];\n selectedTab = 0;\n clonedConfig: SFOCPowerCurveConfig | null = null;\n selectedVessels: Vessel[] = [];\n selectedCompanyId: number | null = null;\n showAllCompany: Partial = { name: \"Show All Vessels\", id: 0 };\n\n editTierDataDialog = false;\n tierToEdit: TierData | null = null;\n\n headers = [\n {\n text: \"Tier Name\",\n value: \"tier\",\n class: \"v-data-table-column-header\",\n width: \"33%\",\n sortable: true,\n },\n {\n text: \"Tier value\",\n value: \"tierValue\",\n class: \"v-data-table-column-header\",\n width: \"33%\",\n },\n {\n text: \"Tier curves\",\n value: \"curves\",\n class: \"v-data-table-column-header\",\n width: \"14%\",\n },\n {\n text: \"Edit\",\n value: \"edit\",\n class: \"v-data-table-column-header\",\n width: \"5%\",\n sortable: false,\n },\n {\n text: \"Delete\",\n value: \"delete\",\n class: \"v-data-table-column-header\",\n width: \"5%\",\n sortable: false,\n },\n ];\n searchQuery: string | null = null;\n debounceLoader = false;\n currentCompanyVessels: Vessel[] = [];\n\n @Watch(\"config\")\n handleConfigChange(): void {\n this.clonedConfig = JSON.parse(JSON.stringify(this.config));\n const alreadySelectedVesselIds = this.clonedConfig?.vesselIds;\n this.selectedVessels = this.allVessels.filter(v => alreadySelectedVesselIds?.some(i => i === v.id));\n }\n\n get companies(): Company[] {\n return Companies.companies;\n }\n\n get userCompanyId(): number | null {\n return User.userCompanyId;\n }\n\n get filteredVessels(): Vessel[] {\n if (this.searchQuery == null) return this.selectedCompanyId === 0 ? this.allVessels : this.currentCompanyVessels;\n const vessels = this.selectedCompanyId === 0 ? this.allVessels : this.currentCompanyVessels;\n return vessels.filter(v => v.name.toLowerCase().includes((this.searchQuery as string).toLowerCase()));\n }\n\n get isNoData(): boolean {\n return Boolean(this.clonedConfig?.tiers.length === 0);\n }\n\n numericFilter(event: any): number {\n return numberHelper.numericWithNegativeFilter(event);\n }\n\n replaceDecimalPeriod($event: any, ref: string): void {\n if (!$event.includes(\",\") || !$event) return;\n (this.$refs[ref] as any).internalValue = $event.replace(/,/g, \".\");\n }\n\n async deleteTierData(tier: TierData): Promise {\n const confirmed = await this.confirmDelete.open(\"Delete Tier Data\", \"Are you sure you want to delete this Tiear Data?\");\n if (confirmed) {\n if (!this.clonedConfig) return;\n const index = this.clonedConfig.tiers.indexOf(tier);\n if (index > -1) this.clonedConfig.tiers.splice(index, 1);\n }\n }\n\n updateSearchQueryInput(newValue: string): void {\n this.debounceLoader = true;\n this.searchQuery = newValue;\n setTimeout(() => (this.debounceLoader = false), 500);\n }\n\n doSearchDebounced = _.debounce(this.updateSearchQueryInput, 1000);\n\n addNewTier(): void {\n const newTier: TierData = {\n id: 0,\n configId: this.config.id,\n tier: EngineTier.Tier2,\n tierValue: 0,\n curves: [],\n };\n this.clonedConfig?.tiers.push(newTier);\n this.openTierDataEditModal(newTier);\n }\n\n curveFormula(curveFunction: CurveFunction): string {\n return curveTypeFormula[curveFunction];\n }\n\n async saveConfig(): Promise {\n if (this.clonedConfig) {\n this.clonedConfig.vesselIds = this.selectedVessels.map(v => v.id);\n await SFOCPowerCurveClient.updateConfig(this.clonedConfig);\n }\n this.isOpen = false;\n this.$emit(\"onConfigSave\");\n }\n\n discardChanges(): void {\n this.handleConfigChange();\n this.isOpen = false;\n }\n\n openTierDataEditModal(tier: TierData): void {\n this.editTierDataDialog = true;\n this.tierToEdit = tier;\n }\n\n async onCompanyChanged(): Promise {\n this.currentCompanyVessels = await VesselsClient.getVesselsByCompanyId(this.selectedCompanyId);\n }\n\n handleTierDataSave(updatedTierData: TierData): void {\n if (!this.clonedConfig) return;\n const index = this.clonedConfig.tiers.findIndex(c => c.id === updatedTierData.id);\n if (index > -1) {\n this.clonedConfig.tiers.splice(index, 1, updatedTierData);\n this.config.tiers.splice(index, 1, updatedTierData);\n }\n }\n\n async created(): Promise {\n await Companies.refreshCompanies();\n this.currentCompanyVessels = await VesselsClient.getVessels();\n this.companies.unshift(this.showAllCompany as Company);\n this.selectedCompanyId = this.userCompanyId;\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOCPowerConfigEditDialog.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOCPowerConfigEditDialog.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SFOCPowerConfigEditDialog.vue?vue&type=template&id=46b4f1b2&scoped=true&\"\nimport script from \"./SFOCPowerConfigEditDialog.vue?vue&type=script&lang=ts&\"\nexport * from \"./SFOCPowerConfigEditDialog.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SFOCPowerConfigEditDialog.vue?vue&type=style&index=0&id=46b4f1b2&lang=scss&scoped=true&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"46b4f1b2\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VCard } from 'vuetify/lib/components/VCard';\nimport { VCardActions } from 'vuetify/lib/components/VCard';\nimport { VCardText } from 'vuetify/lib/components/VCard';\nimport { VCol } from 'vuetify/lib/components/VGrid';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VDialog } from 'vuetify/lib/components/VDialog';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VRow } from 'vuetify/lib/components/VGrid';\nimport { VSelect } from 'vuetify/lib/components/VSelect';\nimport { VTab } from 'vuetify/lib/components/VTabs';\nimport { VTabItem } from 'vuetify/lib/components/VTabs';\nimport { VTabs } from 'vuetify/lib/components/VTabs';\nimport { VTabsItems } from 'vuetify/lib/components/VTabs';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTextarea } from 'vuetify/lib/components/VTextarea';\nimport { VToolbar } from 'vuetify/lib/components/VToolbar';\nimport { VToolbarTitle } from 'vuetify/lib/components/VToolbar';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VCard,VCardActions,VCardText,VCol,VDataTable,VDialog,VIcon,VProgressCircular,VRow,VSelect,VTab,VTabItem,VTabs,VTabsItems,VTextField,VTextarea,VToolbar,VToolbarTitle,VTooltip})\n","\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\nimport { Component, Vue, Ref } from \"vue-property-decorator\";\nimport { getModule } from \"vuex-module-decorators\";\nimport store from \"@/store\";\nimport _ from \"underscore\";\n// components\nimport SFOCPowerConfigEditDialog from \"@/components/referencecurves/SFOCPowerConfigEditDialog.vue\";\nimport ConfirmDialog from \"@/components/ConfirmDialog.vue\";\n// clients\nimport SFOCPowerCurveClient from \"Clients/sfoc-power-curve-client\";\nimport VesselsClient from \"Clients/vessels-client\";\n// types\nimport { SFOCPowerCurveConfig, SFOCPowerCurveData, TierData } from \"@/types/SFOCPowerCurveConfig\";\nimport { Vessel } from \"@/types/Vessel\";\n// modules\nimport UserModule from \"@/store/clients/User.module\";\n\nconst User = getModule(UserModule, store);\n\n@Component({\n components: {\n SFOCPowerConfigEditDialog,\n ConfirmDialog,\n },\n})\nexport default class SFOC extends Vue {\n @Ref(\"confirmDelete\") confirmDelete!: any;\n\n editDialog = false;\n configToEdit: SFOCPowerCurveConfig | null = null;\n configs: SFOCPowerCurveConfig[] = [];\n allVessels: Vessel[] = [];\n currentCompanyVessels: Vessel[] = [];\n doSearchDebounced = _.debounce(this.updateSearchQueryInput, 1000);\n searchQuery: string | null = null;\n debounceLoader = false;\n headers = [\n {\n text: \"Status\",\n value: \"isValid\",\n class: \"v-data-table-column-header\",\n width: \"5%\",\n sortable: false,\n },\n {\n text: \"Id\",\n value: \"id\",\n class: \"v-data-table-column-header\",\n width: \"5%\",\n },\n {\n text: \"Description\",\n value: \"description\",\n class: \"v-data-table-column-header\",\n width: \"20%\",\n },\n {\n text: \"Vessels\",\n value: \"vessels\",\n class: \"v-data-table-column-header\",\n width: \"60%\",\n },\n {\n text: \"Edit\",\n value: \"edit\",\n class: \"v-data-table-column-header\",\n width: \"5%\",\n sortable: false,\n },\n {\n text: \"Delete\",\n value: \"delete\",\n class: \"v-data-table-column-header\",\n width: \"5%\",\n sortable: false,\n },\n ];\n\n get isAdmin(): boolean {\n return User.isAdmin;\n }\n\n get isNoData(): boolean {\n return Boolean(this.configs.length === 0);\n }\n\n get filtredConfigs(): SFOCPowerCurveConfig[] {\n if (!this.searchQuery) return this.configs;\n\n // if searchable item is a vessel < >\n let vesselInSearch: Vessel | null = null;\n const isVesselInSearch = this.allVessels.some(v => {\n if (v.name.toLowerCase().includes((this.searchQuery as string).toLowerCase())) {\n vesselInSearch = v;\n return true;\n }\n });\n if (isVesselInSearch) {\n return this.configs.filter(config => {\n const hasSearchQuery = config.vesselIds.filter(id => {\n if (id === vesselInSearch?.id) {\n return id;\n }\n });\n return hasSearchQuery.length ? config : false;\n });\n // if searchable item is a vessel \n } else {\n return this.configs.filter(c => c.description && c.description.toLowerCase().includes((this.searchQuery as string).toLowerCase()));\n }\n }\n\n async fetchConfigs(): Promise {\n this.configs = await SFOCPowerCurveClient.getAllConfigs();\n }\n\n updateSearchQueryInput(newValue: string): void {\n this.debounceLoader = true;\n this.searchQuery = newValue;\n setTimeout(() => (this.debounceLoader = false), 500);\n }\n\n async addConfig(): Promise {\n await SFOCPowerCurveClient.postEmptyConfig();\n this.configs = await SFOCPowerCurveClient.getAllConfigs();\n this.openConfigEditDialog(this.configs[this.configs.length - 1]);\n }\n\n async deleteConfig(config: SFOCPowerCurveConfig): Promise {\n const confirmed = await this.confirmDelete.open(\"Delete config\", \"Are you sure you want to delete this config?\");\n if (confirmed) {\n await SFOCPowerCurveClient.deleteConfig(config.id);\n this.configs = await SFOCPowerCurveClient.getAllConfigs();\n }\n }\n\n openConfigEditDialog(config: SFOCPowerCurveConfig): void {\n this.editDialog = true;\n this.configToEdit = config;\n }\n\n getVesselName(vesselId: number): string | undefined {\n return this.allVessels.find(v => v.id === vesselId)?.name;\n }\n\n isValidCurveData(curveData: SFOCPowerCurveData): boolean {\n const minNumberOfConstants = curveData.curveFunction === \"Rational\" ? 4 : 3;\n const numberOfConstants = curveData.parameters.length;\n return numberOfConstants >= minNumberOfConstants;\n }\n\n hasMaxOneOfEachTier(tiers: TierData[]): boolean {\n const tierCount: { [key: string]: number } = {};\n for (const data of tiers) {\n const tier = data.tier;\n if (tierCount[tier]) {\n return false;\n }\n tierCount[tier] = 1;\n }\n return true;\n }\n\n isConfigValid(config: SFOCPowerCurveConfig): boolean {\n const hasAtLeastOneTier = config.tiers.length > 0;\n const hasMaxOneOfeachTier = config.tiers.length > 0 && this.hasMaxOneOfEachTier(config.tiers);\n const hasAtLeastOneCurve = config.tiers.length > 0 && config.tiers.every(t => t.curves.length > 0);\n const areCurvesValid = config.tiers.length > 0 && config.tiers.every(t => t.curves.every(c => this.isValidCurveData(c)));\n const areAllPowerSet = config.tiers.length > 0 && config.tiers.every(t => t.curves.every(c => c.toPower !== 0));\n const areAllConstantsSet = config.tiers.length > 0 && config.tiers.every(t => t.curves.every(c => c.parameters.every(constant => constant.value !== 0)));\n return hasAtLeastOneTier && hasMaxOneOfeachTier && hasAtLeastOneCurve && areCurvesValid && areAllPowerSet && areAllConstantsSet;\n }\n\n async created(): Promise {\n if (!this.isAdmin) this.$router.push(\"/\");\n this.fetchConfigs();\n const ignoreCompany = true;\n this.allVessels = await VesselsClient.getVessels(ignoreCompany);\n }\n}\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOC.vue?vue&type=script&lang=ts&\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--15-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/ts-loader/index.js??ref--15-3!../../../node_modules/cache-loader/dist/cjs.js??ref--1-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SFOC.vue?vue&type=script&lang=ts&\"","import { render, staticRenderFns } from \"./SFOC.vue?vue&type=template&id=11c40568&scoped=true&\"\nimport script from \"./SFOC.vue?vue&type=script&lang=ts&\"\nexport * from \"./SFOC.vue?vue&type=script&lang=ts&\"\nimport style0 from \"./SFOC.vue?vue&type=style&index=0&id=11c40568&scoped=true&lang=scss&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"11c40568\",\n null\n \n)\n\nexport default component.exports\n\n/* vuetify-loader */\nimport installComponents from \"!../../../node_modules/vuetify-loader/lib/runtime/installComponents.js\"\nimport { VBtn } from 'vuetify/lib/components/VBtn';\nimport { VDataTable } from 'vuetify/lib/components/VDataTable';\nimport { VIcon } from 'vuetify/lib/components/VIcon';\nimport { VProgressCircular } from 'vuetify/lib/components/VProgressCircular';\nimport { VSpacer } from 'vuetify/lib/components/VGrid';\nimport { VTextField } from 'vuetify/lib/components/VTextField';\nimport { VTooltip } from 'vuetify/lib/components/VTooltip';\ninstallComponents(component, {VBtn,VDataTable,VIcon,VProgressCircular,VSpacer,VTextField,VTooltip})\n"],"sourceRoot":""}