1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,156046,998782,940008,582226,447755,942717,880628,458975,890105,497853,190313,323244,222182,e=>{"use strict";function t(e){if("string"!=typeof e||!/^\d{4}-\d{2}-\d{2}$/.test(e))return!1;let t=Number(e.slice(0,4)),n=Number(e.slice(5,7)),r=Number(e.slice(8,10));return!(t<1)&&!(t>9999)&&!(n<1)&&!(n>12)&&!(r<1)&&r<=i(t,n)}function n(e){if("string"!=typeof e)return!1;let n=/^(\d{4}-\d{2}-\d{2})T([01]\d|2[0-3]):([0-5]\d):([0-5]\d)(?:\.\d{1,6})?(Z|[+-](?:0\d|1[0-4]):[0-5]\d)$/.exec(e);return!(!n||!t(n[1])||"-00:00"===n[5]||/^[+-]14:(?!00)/.test(n[5]))&&Number.isFinite(Date.parse(e))}function r(e,r){if(!n(e)||"string"!=typeof r||""===r.trim())return null;try{let n=new Intl.DateTimeFormat("en-US",{timeZone:r,calendar:"gregory",numberingSystem:"latn",year:"numeric",month:"2-digit",day:"2-digit",era:"short"}).formatToParts(new Date(e)),i=e=>n.find(t=>t.type===e)?.value??"";if("AD"!==i("era"))return null;let a=`${i("year").padStart(4,"0")}-${i("month")}-${i("day")}`;return t(a)?a:null}catch{return null}}function i(e,t){return 2===t?e%4==0&&(e%100!=0||e%400==0)?29:28:[4,6,9,11].includes(t)?30:31}function a(e){if(!t(e))throw RangeError("Expected a real YYYY-MM-DD calendar date (0001â9999)")}function l(e){a(e);let t=new Date(0);return t.setUTCFullYear(Number(e.slice(0,4)),Number(e.slice(5,7))-1,Number(e.slice(8,10))),t}function o(e,t){if(!Number.isSafeInteger(t))throw RangeError("Day offset must be an integer");let n=l(e);n.setUTCDate(n.getUTCDate()+t);let r=n.toISOString().slice(0,10);return a(r),r}function u(e,t){return(l(e).getTime()-l(t).getTime())/864e5}function s(e){let t=`${String(e.getFullYear()).padStart(4,"0")}-${String(e.getMonth()+1).padStart(2,"0")}-${String(e.getDate()).padStart(2,"0")}`;return a(t),t}function c(e,t){let n=d(e),r=d(t);return null===n||null===r?null:Math.max(0,Math.round((r-n)/864e5))}function d(e){let t=/^(\d{4})-(\d{2})-(\d{2})/.exec(e);if(!t)return null;let n=Number(t[2]),r=Number(t[3]);return n<1||n>12||r<1||r>31?null:Date.UTC(Number(t[1]),n-1,r)}e.s(["R_MULTIPLE_LOW_SAMPLE_THRESHOLD",()=>eE,"aggregateTradesByDay",()=>e9,"australianFinancialYearDateRange",()=>eV,"australianFinancialYearFromDay",()=>eJ,"buildExitCaptureChartData",()=>tt,"calculateDayOfWeekStats",()=>tr,"calculateDaysHeld",()=>e$,"calculateDrawdownAnalysis",()=>e2,"calculateGrossPnL",()=>ew,"calculateHoldingDays",()=>eL,"calculateHoldingPeriodWinLoss",()=>e6,"calculateInitialRisk",()=>eT,"calculateMaxDrawdown",()=>e1,"calculatePnL",()=>eC,"calculatePotentialReward",()=>eU,"calculateRMultiple",()=>eA,"calculateRMultipleDistribution",()=>e8,"calculateRMultipleWithMAEFallback",()=>ti,"calculateRiskRewardFromLevels",()=>ta,"calculateRiskRewardRatio",()=>eI,"calculateRunningPnL",()=>e4,"calculateTimeStopStatus",()=>tu,"calculateUnrealizedPnL",()=>eM,"canResolveConvertedPnL",()=>eF,"classifyClosedOutcome",()=>ek,"computeRStatsFromValues",()=>eO,"formatRMultiple",()=>e5,"getAustralianFinancialYear",()=>eY,"getCgtDiscountEligibility",()=>ts,"getCurrentFinancialYear",()=>ej,"getFinancialYearDateRange",()=>eq,"getPlannedRiskPerUnit",()=>eR,"getTradeIdeaLevelErrors",()=>to,"isForeignTrade",()=>eN,"parseStoredTaxDay",()=>eX,"resolveConvertedEntryCost",()=>eS,"resolveConvertedPnL",()=>eP,"storedDayInBounds",()=>eQ],156046),e.s(["calculateBehavioralScore",()=>e_,"calculateDisciplineScore",()=>em,"calculateDispositionEffect",()=>ec,"calculateEmotionalConsistency",()=>eg,"detectOvertrading",()=>ey,"detectRevengeTrades",()=>ef],323244),e.s(["NO_LOSING_TRADES_NOTE",()=>ea,"computeOutcomeStats",()=>el,"headlineRStats",()=>es,"headlineRValue",()=>eu],190313);let f=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],p=/^(\d{4})-(\d{2})-(\d{2})(?:[T ]00:00(?::00(?:\.0+)?)?(?:Z|[+-]00:?(?:00)?)?)?$/;function y(e,t){let i=function(e){if(null==e)return{kind:"invalid"};if("string"==typeof e){let t=p.exec(e);if(t){let[,e,n,r]=t,i=Number(n),a=Number(r);return i<1||i>12||a<1||a>31?{kind:"invalid"}:{kind:"day",day:`${e}-${n}-${r}`}}if(!n(e))return{kind:"invalid"}}let t="string"==typeof e?new Date(e):e;if(Number.isNaN(t.getTime()))return{kind:"invalid"};if(0===t.getUTCHours()&&0===t.getUTCMinutes()&&0===t.getUTCSeconds()&&0===t.getUTCMilliseconds()){let e=e=>String(e).padStart(2,"0");return{kind:"day",day:`${t.getUTCFullYear()}-${e(t.getUTCMonth()+1)}-${e(t.getUTCDate())}`}}return{kind:"instant",instant:t}}(e);return"invalid"===i.kind?null:"day"===i.kind?i.day:null==t?null:r(i.instant.toISOString(),t)}function m(e){let t=e?.trim().toUpperCase();return t&&/^[A-Z]{3}$/.test(t)?t:null}function g(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function h(...e){let t=new Map;for(let n of e)for(let e of n){let n=JSON.stringify([e.kind,e.source,e.subjectId,e.asOf,e.fromCurrency,e.toCurrency,e.rate,e.policy]);t.set(n,e)}return[...t.entries()].sort(([e],[t])=>e.localeCompare(t)).map(([,e])=>e)}function _(e,t){let n=[...new Set(e)].sort();return[n[0]??t,...n.slice(1)]}function b(e,t,n=[]){let r=m(e);return{status:"unavailable",amount:null,currency:r,reasons:_(r?t:[...t,e?"invalid_currency":"missing_currency"],"missing_amount"),provenance:h(n)}}function v(e,t,n=[{kind:"input",source:"explicit_amount"}]){let r=m(t);return r?null==e?b(r,["missing_amount"],n):Number.isFinite(e)?{status:"resolved",amount:e+0,currency:r,reasons:[],provenance:h(n)}:b(r,["nonfinite_amount"],n):b(t,[t?"invalid_currency":"missing_currency"],n)}function x(e,t){let n=D(e);return"unavailable"===n.status?n:{...n,status:"estimated",reasons:_([...n.reasons,t],t),provenance:h(n.provenance,[{kind:"fallback",source:t,policy:t}])}}function D(e){if("unavailable"===e.status)return b(e.currency,e.reasons,e.provenance);let t=v(e.amount,e.currency,e.provenance);return"unavailable"===t.status?t:{...e,amount:t.amount,currency:t.currency}}function w(e,t,n,r){let i=h(...n.map(e=>e.provenance),[{kind:"derived",source:r}]);if(!Number.isFinite(e))return b(t,["computed_overflow"],i);let a=n.filter(e=>"estimated"===e.status);return a.length?{status:"estimated",amount:e+0,currency:t,reasons:_(a.flatMap(e=>[...e.reasons]),"entry_basis_no_quote"),provenance:i}:{status:"resolved",amount:e+0,currency:t,reasons:[],provenance:i}}
1function C(e,t,n){let r=D(e),i=m(t);if(!i)return b(t,["invalid_currency"],r.provenance);if("unavailable"===r.status)return b(i,r.reasons,r.provenance);if(r.currency===i)return{...r,provenance:h(r.provenance,[{kind:"identity",source:i,fromCurrency:i,toCurrency:i,rate:1}])};let a=n(r.currency,i);if(!a||!g(a.rate))return b(i,["missing_conversion_rate"],r.provenance);if(m(a.fromCurrency)!==r.currency||m(a.toCurrency)!==i)return b(i,["currency_mismatch"],r.provenance);let l={kind:"spot_fx",source:a.source,fromCurrency:r.currency,toCurrency:i,rate:a.rate,asOf:a.asOf??null},o=a.estimated?x(r,"last_known_display_rate"):r;return w(r.amount*a.rate,i,[{...o,provenance:h(o.provenance,[l])}],"currency_conversion")}function M(e,t,n=()=>null){let r=e.map(e=>C(e,t,n)),i={count:r.length,resolved:0,estimated:0,unavailable:0};for(let e of r)i[e.status]+=1;let a=r.filter(e=>"unavailable"===e.status),l=m(t);if(!l||a.length)return{...b(t,a.flatMap(e=>[...e.reasons]),h(...r.map(e=>e.provenance))),population:i};let o=0;for(let e of r)"unavailable"!==e.status&&(o+=e.amount);return{...w(o,l,r,"sum"),population:i}}function N(e,t){let n=D(e);return"unavailable"===n.status?n:Number.isFinite(t)?w(n.amount*t,n.currency,[n],"scale"):b(n.currency,["nonfinite_amount"],n.provenance)}function P(e,t){let n=e.currency??t.currency;if(!n)return b(null,["missing_currency"]);let{population:r,...i}=M([e,t],n);return i}function F(e,t){return"number"==typeof e&&Number.isFinite(e)&&("recorded_nonnegative_execution"===t?e>=0:e>0)}function S(e,t,n=!0){let r=Number.isFinite(e)?e:null,i=Number.isFinite(t)?t:null,a=e=>({status:"unavailable",originalUnits:r,exitedUnits:i,remainingUnits:null,reasons:[e]});if(!n)return a("source_not_ready");if(!g(e)||!Number.isFinite(t)||t<0)return a("invalid_quantity");let l=e-t;return l<-(8*Number.EPSILON*Math.max(Math.abs(e),Math.abs(t)))?a("over_exited"):{status:"resolved",originalUnits:e,exitedUnits:t,remainingUnits:l<0?0:l,reasons:[]}}function k(e){return Math.round(100*e)/100}function T(e,t,n={}){if(!F(t,n.exitPricePolicy))return{status:"unavailable",reasons:["invalid_price"]};let r=0,i=0,a=0;for(let t of e){if(!g(t.units))return{status:"unavailable",reasons:["invalid_quantity"]};if(!F(t.exitPrice,n.exitPricePolicy))return{status:"unavailable",reasons:["invalid_price"]};if(!Number.isFinite(t.fees)||t.fees<0)return{status:"unavailable",reasons:["invalid_fee"]};r+=t.units,i+=t.exitPrice*t.units,a+=t.fees}if(![r,i,a].every(Number.isFinite))return{status:"unavailable",reasons:["computed_overflow"]};let l=r>0?i/r:t;return Number.isFinite(l)?{status:"resolved",totalExitedUnits:r,weightedAvgExitPrice:l,totalGrossProceeds:i,totalExitFees:a}:{status:"unavailable",reasons:["computed_overflow"]}}function R(e,r,i=!1,a={}){if("open"===e.status||"planned"===e.status||"cancelled"===e.status)return{status:"absent",reason:"parent_not_closed"};if("closed"!==e.status)return{status:"unavailable",reasons:["invalid_status"]};if(!e.exitDate)return{status:"unavailable",reasons:["missing_exit_date"]};if(!t(e.exitDate)&&!n(e.exitDate)||null!=e.exitDay&&!t(e.exitDay)||null!=e.executedAt&&!n(e.executedAt))return{status:"unavailable",reasons:["invalid_date"]};if(!F(e.exitPrice,a.exitPricePolicy))return{status:"unavailable",reasons:["invalid_price"]};if(!g(e.units))return{status:"unavailable",reasons:["invalid_quantity"]};if(!Number.isFinite(e.exitFees)||e.exitFees<0)return{status:"unavailable",reasons:["invalid_fee"]};if(null!==e.exitFxRate&&!g(e.exitFxRate))return{status:"unavailable",reasons:["invalid_exit_fx"]};if(!r.length){let t=e.exitUnits??e.units;return i?g(t)?{status:"resolved",leg:{isSynthetic:!0,exit_date:e.exitDate,exit_day:e.exitDay,executed_at:e.executedAt,exit_price:e.exitPrice,units:t,fees:e.exitFees,exit_fx_rate:e.exitFxRate}}:{status:"unavailable",reasons:["invalid_quantity"]}:{status:"absent",reason:"single_leg_not_requested"}}let l=T(r,e.exitPrice,a);if("unavailable"===l.status)return l;let o=e.exitFees-l.totalExitFees;if(o<-(8*Number.EPSILON*Math.max(Math.abs(e.exitFees),Math.abs(l.totalExitFees))))return{status:"unavailable",reasons:["invalid_fee"]};let u=S(e.units,l.totalExitedUnits);if("unavailable"===u.status)return{status:"unavailable",reasons:u.reasons};if(0===u.remainingUnits)return{status:"absent",reason:"fully_recorded"};
1if(u.remainingUnits<1e-6)return{status:"unavailable",reasons:["below_synthetic_quantity_cutoff"]};let s=(e.exitPrice*e.units-l.totalGrossProceeds)/u.remainingUnits;return F(s,a.exitPricePolicy)?{status:"resolved",leg:{isSynthetic:!0,exit_date:e.exitDate,exit_day:e.exitDay,executed_at:e.executedAt,exit_price:s,units:u.remainingUnits,fees:o<0?0:o,exit_fx_rate:e.exitFxRate}}:{status:"unavailable",reasons:[Number.isFinite(s)?"invalid_price":"computed_overflow"]}}function A(e){let t=0xdeadbeef,n=0x41c6ce57;for(let r=0;r<e.length;r+=1){let i=e.charCodeAt(r);t=Math.imul(t^i,0x9e3779b1),n=Math.imul(n^i,0x5f356495)}return t=Math.imul(t^t>>>16,0x85ebca6b)^Math.imul(n^n>>>13,0xc2b2ae35),(0x100000000*(2097151&(n=Math.imul(n^n>>>16,0x85ebca6b)^Math.imul(t^t>>>13,0xc2b2ae35)))+(t>>>0)).toString(16).padStart(14,"0")}e.s(["addCalendarDays",0,o,"addCalendarMonthsClamped",0,function(e,t){if(a(e),!Number.isSafeInteger(t))throw RangeError("Month offset must be an integer");let n=12*Number(e.slice(0,4))+Number(e.slice(5,7))-1+t,r=Math.floor(n/12),l=(n%12+12)%12+1,o=Math.min(Number(e.slice(8,10)),i(r,l)),u=`${String(r).padStart(4,"0")}-${String(l).padStart(2,"0")}-${String(o).padStart(2,"0")}`;return a(u),u},"calendarDayFromLocalDate",0,s,"calendarDayInTimeZone",0,r,"calendarDayToPickerDate",0,function(e){if(!t(e))return;let n=new Date(0);return n.setHours(12,0,0,0),n.setFullYear(Number(e.slice(0,4)),Number(e.slice(5,7))-1,Number(e.slice(8,10))),s(n)===e?n:void 0},"differenceCalendarDays",0,u,"formatCalendarDay",0,function(e,n="PP"){if(!t(e))return"-";let r=e.slice(0,4),i=r.slice(2),a=e.slice(5,7),l=e.slice(8,10),o=String(Number(l)),u=f[Number(a)-1];switch(n){case"yyyy-MM-dd":return e;
1case"MM/dd/yyyy":return`${a}/${l}/${r}`;case"dd/MM/yyyy":return`${l}/${a}/${r}`;case"dd/MM/yy":return`${l}/${a}/${i}`;case"dd MMM yyyy":return`${l} ${u} ${r}`;case"dd MMM yy":return`${l} ${u} ${i}`;case"yy-MM-dd":return`${i}-${a}-${l}`;case"d MMM yyyy":return`${o} ${u} ${r}`;case"d MMM":return`${o} ${u}`;case"MMM d, yyyy":case"PP":return`${u} ${o}, ${r}`}},"holdingDaysBetween",0,c,"isCalendarDay",0,t,"isKnownInstant",0,n,"storedDayInTimeZone",0,y],998782),e.s(["addMoneyResults",0,P,"aggregateMoneyResults",0,M,"convertMoneyResult",0,C,"divideMoneyResults",0,function(e,t,n="percent"){let r=D(e),i=D(t),a=h(r.provenance,i.provenance,[{kind:"derived",source:"division"}]),l=[...r.reasons,...i.reasons];if(r.currency!==i.currency&&l.push("currency_mismatch"),"unavailable"!==i.status&&i.amount<=0&&l.push("nonpositive_denominator"),"unavailable"===r.status||"unavailable"===i.status||r.currency!==i.currency||i.amount<=0)return{status:"unavailable",value:null,unit:n,reasons:_(l,"missing_amount"),provenance:a};let o=r.amount/i.amount*("percent"===n?100:1);return Number.isFinite(o)?"estimated"===r.status||"estimated"===i.status?{status:"estimated",value:o+0,unit:n,reasons:_(l,"entry_basis_no_quote"),provenance:a}:{status:"resolved",value:o+0,unit:n,reasons:[],provenance:a}:{status:"unavailable",value:null,unit:n,reasons:["computed_overflow"],provenance:a}},"isFinitePositive",0,g,"isStaleFxAsOf",0,function(e,r=s(new Date)){let i=t(e)?e:n(e)?s(new Date(e)):null;return!(null!==i&&t(r))||i<o(r,-4)},"markMoneyEstimated",0,x,"mergeMoneyProvenance",0,h,"normalizeMoneyCurrency",0,m,"resolvedMoney",0,v,"scaleMoneyResult",0,N,"subtractMoneyResults",0,function(e,t){return P(e,N(t,-1))},"unavailableMoney",0,b],940008),e.s(["aggregateFinancialExitLegs",0,T,"calculateConvertedExitMoney",0,function(e){let t=[e.entryCostConverted,e.entryFees,e.totalGrossProceeds,e.totalGrossProceedsConverted,e.totalExitFees];if("long"!==e.direction&&"short"!==e.direction||!g(e.entryFxRate)||t.some(e=>!Number.isFinite(e)||e<0)||e.entryCostConverted<e.entryFees){let n=b(e.currency,["long"!==e.direction&&"short"!==e.direction?"invalid_direction":g(e.entryFxRate)?t.some(e=>!Number.isFinite(e))?"nonfinite_amount":e.entryFees<0||e.totalExitFees<0?"invalid_fee":"invalid_amount":"invalid_entry_fx"]);return{proceeds:n,profit:n,fxImpact:n}}let n=k(e.totalGrossProceedsConverted-e.totalExitFees),r="short"===e.direction?k(e.entryCostConverted-e.entryFees-e.totalGrossProceedsConverted-e.entryFees-e.totalExitFees):k(n-e.entryCostConverted),i=k(e.totalGrossProceedsConverted-k(e.totalGrossProceeds*e.entryFxRate)),a=t=>Number.isFinite(t)?v(t,e.currency,[{kind:"derived",source:"persisted_per_leg_exit_reconciliation"}]):b(e.currency,["computed_overflow"]);return{proceeds:a(n),profit:a(r),fxImpact:a("short"===e.direction?-i:i)}},"calculateExitLegMoney",0,function(e){let t=m(e.tradeCurrency),n=m(e.portfolioCurrency),r=[];t&&n||r.push("missing_currency"),"long"!==e.direction&&"short"!==e.direction&&r.push("invalid_direction"),F(e.exitPrice,e.exitPricePolicy)||r.push("invalid_price"),g(e.units)||r.push("invalid_quantity");let i=null===e.fees?0:e.fees,a=void 0===i?b(n,["missing_fee"]):!Number.isFinite(i)||i<0?b(n,["invalid_fee"]):v(i,n,[{kind:"input",source:"portfolio_exit_fee",subjectId:e.subjectId}]),l=e.exitPrice*e.units,o=F(e.exitPrice,e.exitPricePolicy)&&g(e.units)?Number.isFinite(l)?v(l,t,[{kind:"derived",source:"exit_price_times_units"}]):b(t,["computed_overflow"]):b(t,[g(e.units)?"invalid_price":"invalid_quantity"]),u=t!==n,s=u?e.entryFxRate:1,c=u?e.exitFxRate:1;g(s)||r.push(null==s?"missing_entry_fx":"invalid_entry_fx"),g(c)||r.push(null==c?"missing_exit_fx":"invalid_exit_fx");let d=[];if(t&&n&&g(s)&&d.push({kind:u?"entry_fx":"identity",source:u?"stored_entry_rate":n,fromCurrency:t,toCurrency:n,rate:s,asOf:e.entryDay??null,subjectId:e.subjectId}),t&&n&&g(c)&&d.push({kind:u?"exit_fx":"identity",source:u?"actual_exit_rate":n,fromCurrency:t,toCurrency:n,rate:c,asOf:e.exitDay??null,subjectId:e.subjectId}),r.length||!g(s)||!g(c)){let e=b(n,r,d);return{grossProceeds:o,fees:a,profit:e,fxImpact:e}}let f=e.entryPrice*e.units*s,p=l*c,y="short"===e.direction?-1:1,h=y*k(l*c-l*s),_=e=>Number.isFinite(e)?v(e,n,d):b(n,["computed_overflow"],d),x=g(e.entryPrice)?"unavailable"===a.status?b(n,a.reasons,d):_(k(y*(p-f)-a.amount)):b(n,["invali
1d_price"],d);return{grossProceeds:o,fees:a,profit:x,fxImpact:_(h)}},"calculateRemainingQuantity",0,S,"reconstructFinalExitLeg",0,R,"roundFinancialMoney",0,k],582226);class U extends Error{status=409;code="IDEMPOTENCY_PAYLOAD_MISMATCH";constructor(e="This was sent more than a day ago and may already be saved. Check your records before saving it again."){super(e),this.name="PendingOperationReviewRequiredError",Object.setPrototypeOf(this,U.prototype)}}class I extends Error{constructor(e="This was not sent because your browser could not save a record to retry it safely. Free up browser storage, then try again."){super(e),this.name="PendingOperationStorageError",Object.setPrototypeOf(this,I.prototype)}}function E(e,t,n){e[t]?.operationKey===n&&delete e[t]}e.s(["PENDING_INTENT_TTL_MS",0,864e5,"PendingOperationStorageError",0,I,"createBrowserPendingOperationStore",0,function(e){if("u"<typeof globalThis)return null;let t=globalThis.localStorage;return t?{read:()=>t.getItem(e),write:n=>t.setItem(e,n),clear:()=>t.removeItem(e)}:null},"createPayloadBoundOperationSession",0,function(e=()=>crypto.randomUUID()){let t="function"==typeof e?{mintKey:e}:e,n=t.mintKey??(()=>crypto.randomUUID()),{store:r,scope:i}=t,a=void 0!==r&&void 0!==i,l=null,o=null,u=()=>a?function(e,t){let n,r;try{n=e.read()}catch{return{}}if(!n)return{};try{r=JSON.parse(n)}catch{return{}}if("object"!=typeof r||null===r)return{};let i=r;if(i.userId!==t.userId||i.operationClass!==t.operationClass)return{};if(2===i.version&&"object"==typeof i.entries&&null!==i.entries){let e={},t=Date.now()-864e5;for(let[n,r]of Object.entries(i.entries))"object"==typeof r&&null!==r&&"string"==typeof r.operationKey&&"number"==typeof r.updatedAt&&(void 0===r.held||!0===r.held)&&(e[n]=r.updatedAt>=t?r:{...r,held:!0});return e}return"string"==typeof i.operationKey&&"string"==typeof i.payloadFingerprint?{[A(i.payloadFingerprint)]:{operationKey:i.operationKey,updatedAt:Date.now()}}:{}}(r,i):{},s=e=>{a&&function(e,t,n){try{if(0===Object.keys(n).length)return void e.clear();e.write(JSON.stringify({version:2,userId:t.userId,operationClass:t.operationClass,entries:n}))}catch{}}(r,i,e)};return{beginAttempt:e=>{if(null!==o)throw new U;if(null!==l&&Date.now()-l.updatedAt>864e5){let e=l,t=u();throw t[e.slot]={operationKey:e.operationKey,updatedAt:e.updatedAt,held:!0},l=null,o={slot:e.slot,operationKey:e.operationKey},s(t),new U}if(null!==l&&l.payloadFingerprint===e)return{operationKey:l.operationKey};let t=u(),r=A(e),i=t[r];if(i?.held===!0)throw l=null,o={slot:r,operationKey:i.operationKey},s(t),new U;let c=i?.operationKey??n(),d=Date.now();if(l={operationKey:c,payloadFingerprint:e,slot:r,updatedAt:d},t[r]={operationKey:c,updatedAt:d},s(t),a&&u()[r]?.operationKey!==c)throw l=null,new I;return{operationKey:c}},markSucceeded:e=>{if(null===l||l.operationKey!==e)return;let t=u();E(t,l.slot,l.operationKey),l=null,s(t)},cancel:()=>{if(null===l)return;let e=u();E(e,l.slot,l.operationKey),l=null,s(e)},reviewAndStartNewOperation:()=>{if(null===o)return;let e=u();E(e,o.slot,o.operationKey),o=null,s(e)}}},"purgeBrowserPendingOperations",0,function(){try{let e=globalThis.localStorage;if(!e)return;try{let t=[];for(let n=0;n<e.length;n+=1)t.push(e.key(n));try{for(let n of t){let t;null!==n&&n.startsWith("swingfolio:pending-operation:")&&(t=n,e.removeItem(t))}}catch{}}catch{}}catch{}}],447755);let O="IDEMPOTENCY_PAYLOAD_MISMATCH";class $ extends Error{status=409;code=O;constructor(e){super(e),this.name="IdempotencyConflictError",Object.setPrototypeOf(this,$.prototype)}}let L=A(" unbound");function K(e){if("object"!=typeof e||null===e||Array.isArray(e))return null;let t={};for(let[n,r]of Object.entries(e)){if("string"!=typeof r)return null;t[n]=r}return t}function V(e,t,n){try{for(let[e,t]of Object.entries(n))"ready"!==t.state||t.attempted||delete n[e];if(0===Object.keys(n).length)return void e.clear();e.write(JSON.stringify({version:2,userId:t.userId,operationClass:t.operationClass,entries:n}))}catch{}}function B(e=()=>crypto.randomUUID()){let t="function"==typeof e?{mintKey:e}:e,n=t.mintKey??(()=>crypto.randomUUID()),{store:r,scope:i}=t,a=t.requiredBoundValueForResume,l=void 0!==r&&void 0!==i,o=n(),u="ready",s=!1,c=null,d=null,f=()=>t.payloadContractVersion?{_payloadContractVersion:t.payloadContractVersion}:{},p=f(),y=!1,m=!1,g=Date.now(),h=()=>l?function(e,t,n){let r,i;try{r=e.read()}catch{return{}}if(!r)return{};try{i=JSON.parse(r)}catch{return{}}if("object"!=typeof i||null===i)return{};let a=i;if(a.userId!==t.userId||a.operationClass!==t.operationClass)return{};if(2===a.version&&"object"==typeof a.entries&&null!==a.entries){let e={},t=Date.now()-864e5;for(let[r,i]of Object.entries(a.entries))if("object"!=typeof i||null===i?1:"string"!=typeof i.key||"ready"!==i.state&&"conflict"!==i.state||"boolean"!=typeof i.attempted||"number"!=typeof i.updatedAt||null===K(i.boundValues))n&&"object"==typeof i&&null!==i&&"operationKey"in i&&"string"==typeof i.operationKey&&(e[r]={key:i.operationKey,state:"conflict",attempted:!0,boundValues:{},updatedAt:Date.now()});else{let a=void 0!==n&&("conflict"===i.state||i.boundValues._payloadContractVersion!==n);i.updatedAt>=t||a?e[r]=i:i.attempted&&(e[r]={...i,state:"conflict",held:!0})}return e}return n&&"operationKey"in a&&"string"==typeof a.operationKey?{["string"==typeof a.payloadFingerprint?A(a.payloadFingerprint):L]:{key:a.operationKey,state:"conflict",attempted:!0,boundValues:{},updatedAt:Date.now()}}:"string"==typeof a.key&&"boolean"==typeof a.attempted&&("ready"===a.state||"conflict"===a.state)?{["string"==typeof a.payloadFingerprint?A(a.payloadFingerprint):L]:{key:a.key,state:a.state,attempted:a.attempted,boundValues:K(a.boundValues)??{},updatedAt:Date.now()}}:{}}(r,i,t.payloadContractVersion):{},_=()=>{if(!l)return;let e=h();g=Date.now(),e[d??L]={key:o,state:u,attempted:s,boundValues:p,updatedAt:g,...m?{held:!0}:{}},V(r,i,e)},b=(e,t)=>{if(!l)return;let n=h();
1n[e]?.key===t&&(delete n[e],V(r,i,n))},v=()=>{o=n(),s=!1,p=f(),m=!1,g=Date.now()},x=e=>{o=e.key,u=e.state,s=e.attempted,p={...e.boundValues},m=!0===e.held,g=e.updatedAt};if(l){let e=h()[L];void 0!==e&&x(e)}return{currentKey:()=>o,state:()=>u,hasAttemptedCurrentOperation:()=>s,bindPayload:e=>{if(!y){if(t.payloadContractVersion||a){let e=Object.entries(h()).find(([,e])=>e.attempted&&(void 0!==t.payloadContractVersion&&e.boundValues._payloadContractVersion!==t.payloadContractVersion||void 0!==a&&void 0===e.boundValues[a]));if(e){d=e[0],x(e[1]),u="conflict",y=!0,_();return}}if((m||!s||"ready"!==u||Date.now()-g<=864e5||(u="conflict",m=!0,_()),c!==e)&&(null===c||!m)){var n;let t,r;null!==c&&(s||b(d??L,o),u="ready",v()),c=e,n=d=A(e),void 0!==(r=(t=h())[n]??t[L])&&(x(r),void 0===t[n]&&b(L,o)),_()}}},boundValue:e=>p[e]??null,setBoundValue:(e,t)=>{p[e]!==t&&(p[e]=t,_())},latestAttemptedBoundValue:e=>{if(!l)return s?p[e]??null:null;let n=Object.values(h()).filter(e=>e.attempted);if(0===n.length)return s?p[e]??null:null;if(void 0!==t.payloadContractVersion&&n.some(e=>e.boundValues._payloadContractVersion!==t.payloadContractVersion)||void 0!==a&&n.some(e=>void 0===e.boundValues[a]))return null;let r=n.sort((e,t)=>t.updatedAt-e.updatedAt)[0];return r?.boundValues[e]??null},markAttempted:e=>{if("ready"===u&&o===e){let e=s;s=!0,_();let t=l?h()[d??L]:void 0;if(l&&(t?.key!==o||!0!==t.attempted))throw s=e,new I}},markSucceeded:e=>{"ready"===u&&o===e&&(b(d??L,o),v(),c=null,d=null)},markConflict:e=>{o===e&&(u="conflict",_())},reviewAndStartNewOperation:()=>{if("conflict"!==u)throw Error("A new idempotency operation can only start after reviewing a conflict.");b(d??L,o),u="ready",y=!1,v(),c=null,d=null}}}e.s(["IDEMPOTENCY_PAYLOAD_MISMATCH_CODE",0,O,"IdempotencyConflictError",0,$,"createIdempotencySubmissionLifecycle",0,B,"getOrCreateIdempotencySubmissionLifecycle",0,function(e,t){return null===e.current&&(e.current=B(t)),e.current},"isIdempotencyConflictError",0,function(e){return e instanceof $||"object"==typeof e&&null!==e&&e.code===O}],942717);let Y="transactionDate";function j(e=()=>crypto.randomUUID(),t=()=>new Date().toISOString()){let n=B(e);return{beginAttempt:(e,r={})=>{for(let e of Object.keys(r))if(e===Y||e.startsWith("_"))throw Error(`Reserved idempotency bound value: ${e}`);if(n.bindPayload(e),"conflict"===n.state())return null;let i=n.currentKey(),a=n.boundValue(Y);for(let[e,i]of(null===a&&(a=t(),n.setBoundValue(Y,a)),Object.entries(r)))null===n.boundValue(e)&&n.setBoundValue(e,i);return n.markAttempted(i),{idempotencyKey:i,transactionDate:a}},state:n.state,hasAttemptedCurrentOperation:n.hasAttemptedCurrentOperation,latestAttemptedBoundValue:n.latestAttemptedBoundValue,markSucceeded:n.markSucceeded,markConflict:n.markConflict,reviewAndStartNewOperation:n.reviewAndStartNewOperation}}e.s(["createDatedIdempotentSubmissionSession",0,j],880628);let q=[{key:"portfolioValue",label:"Portfolio value",description:"The total value of a portfolio, including its cash.",group:"Account totals"},{key:"cashBalance",label:"Cash balance",description:"Uninvested cash held in a portfolio.",group:"Account totals"},{key:"totalPnl",label:"Total profit and loss",description:"Open and closed profit and loss combined.",group:"Account totals"},{key:"dayChange",label:"Today's change",description:"The change in portfolio value since the previous close.",group:"Account totals"},{key:"unrealizedPnl",label:"Open position profit and loss",description:"Profit and loss on positions you still hold.",group:"Account totals"},{key:"realizedPnl",label:"Closed trade profit and loss",description:"Profit and loss booked on trades you have closed.",group:"Account totals"},{key:"positionValue",label:"Position value",description:"The current market value of a single holding.",group:"Positions"},{key:"positionPnl",label:"Per-position profit and loss",description:"Profit and loss on a single holding or trade.",group:"Positions"},{key:"costBasis",label:"Amount invested",description:"What a position cost to open, including any added units.",group:"Positions"},{key:"units",label:"Units held",description:"The number of shares or units in a position.",group:"Positions"},{key:"prices",label:"Entry, exit, stop and target prices",description:"Per-share prices on a trade, including its stop and target levels.",group:"Positions"},{key:"riskAmount",label:"Risk and reward amounts",description:"Dollar risk, dollar reward, portfolio heat and maximum loss on a position.",group:"Positions"},{key:"dividends",label:"Dividend amounts",description:"Dividends received and divi
1dends still pending.",group:"Cash movements"},{key:"fees",label:"Brokerage fees",description:"Brokerage and other fees charged on a trade.",group:"Cash movements"},{key:"cashTransactions",label:"Deposits, withdrawals, interest, tax",description:"Cash moving into or out of a portfolio.",group:"Cash movements"},{key:"chartAxisLabels",label:"Money labels on charts",description:"Dollar values on chart axes and chart tooltips.",group:"Charts"},{key:"percentages",label:"Percentage returns and R-multiples",description:"Percentage returns and R-multiples shown beside money figures. Leave this off to hide the amounts but keep the performance.",group:"Percentages"}],G=q.map(e=>e.key),W=new Set(G),z=["portfolioValue","cashBalance","totalPnl","dayChange","unrealizedPnl","realizedPnl","positionValue","positionPnl","costBasis","units","riskAmount","dividends","cashTransactions","chartAxisLabels"];e.s(["DEFAULT_PRIVATE_FIELDS",0,z,"ESSENTIAL_PRIVATE_FIELDS",0,z,"MASK_TOKEN",0,"***","PRIVACY_FIELDS",0,q,"PRIVACY_FIELD_KEYS",0,G,"sanitizePrivacyFields",0,function(e){if(!Array.isArray(e))return[];let t=new Set,n=[];for(let r of e)!("string"==typeof r&&W.has(r))||t.has(r)||(t.add(r),n.push(r));return n}],458975);let H={AU:"AUD",ASX:"AUD",US:"USD",NYSE:"USD",NASDAQ:"USD",CC:"USD",LSE:"GBX",LON:"GBX",TO:"CAD",TSX:"CAD",XETRA:"EUR",DE:"EUR",PA:"EUR",HK:"HKD",HKEX:"HKD",SG:"SGD",SGX:"SGD",NZ:"NZD",TSE:"JPY"};function Z(e){return"string"!=typeof e?null:H[e.trim().toUpperCase()]??null}function X(e){return"GBX"===e.trim().toUpperCase()?"GBP":e}function J(e){return null===e?null:Number((e/100).toPrecision(12))}function Q(e,t){return"GBP"===e.trim().toUpperCase()&&"GBX"===t.trim().toUpperCase()?100:1}function ee(e,t){return 1===t?e:Number((e*t).toPrecision(12))}function et(e){let t=Z(e);return null===t?null:X(t)}function en(e,t,n){return ee(e,1/Q(t,n))}function er(e,t,n){return"long"===n?(t-e)/e*100:(e-t)/e*100}e.s(["barPriceScale",0,Q,"barsInTradeUnit",0,function(e,t,n){if("UNKNOWN"===n)return null;let r=e=>t&&n?en(e,t,n):e;return e.map(e=>({...e,high:r(e.high),low:r(e.low),close:r(e.close)}))},"companyFigureCurrency",0,X,"feedPriceInTradeUnit",0,en,"ideaPricesForTrade",0,function(e,t){let n=t?.trim().toUpperCase()??"";return/^[A-Z]{3}$/.test(n)&&"UNKNOWN"!==n?"GBX"===n?{entry:J(e.entry),stop:J(e.stop),target:J(e.target),currency:"GBP"}:{...e,currency:n}:null},"listingCurrencyLookupNeeded",0,function(e){return"GBX"===Z(e)},"listingKey",0,function(e,t){return`${e.trim().toUpperCase()}.${(t??"").trim().toUpperCase()}`},"listingQuoteCurrency",0,function(e,t){let n=t?.trim()??"";if("GBp"===n)return"GBX";let r=n.toUpperCase();return/^[A-Z]{3}$/.test(r)&&"UNKNOWN"!==r?r:Z(e)},"quoteCurrencyForExchange",0,Z,"toBarPrice",0,ee,"tradeCurrencyForExchange",0,et,"tradePriceCurrency",0,function(e,t){return e?.trim().toUpperCase()||et(t)||"UNKNOWN"}],890105);function ei(e,n){var r,i,a,l;let o=(r=e.entry_day,i=e.entry_date,t(r)?r:y(i,n)),u=(a=e.exit_day,l=e.exit_date,t(a)?a:y(l,n));return null!==o&&null!==u?{entry_date:o,exit_date:u}:null}e.s(["actualReturnPercent",0,er,"applyExitPriceFloor",0,function(e,t,n,r){if(void 0===n)return e;let i=er(t,n,r);return i>0&&i>e.mfe?{mae:e.mae,mfe:i,capturedPercent:100,mfeFloored:!0}:i<0&&Math.abs(i)>e.mae?{mae:Math.abs(i),mfe:e.mfe,capturedPercent:e.capturedPercent,maeFloored:!0}:e},"computeMAEMFEFromExtremes",0,function(e,t,n,r,i){let a,l;if(null===e||null===t)return null;if(!Number.isFinite(n)||n<=0)return{mae:0,mfe:0,capturedPercent:0};"long"===i?(a=Math.max(0,(n-t)/n*100),l=Math.max(0,(e-n)/n*100)):(a=Math.max(0,(e-n)/n*100),l=Math.max(0,(n-t)/n*100));let o=0;return l>0&&null!=r&&(o=Math.max(0,er(n,r,i)/l*100)),{mae:a,mfe:l,capturedPercent:o}},"excursionExtremesInTradeUnit",0,function(e,t,n,r){if("UNKNOWN"===r)return null;let i=e=>null!==e&&r?en(e,n,r):e;return{maxHigh:i(e),minLow:i(t)}},"excursionWindowDays",0,ei,"excursionWindowNeedsTimeZone",0,function(e){return null===ei(e,null)&&null!==ei(e,"UTC")},"excursionWindowSourceKey",0,function(e){return`${e.entry_day??e.entry_date??""}~${e.exit_day??e.exit_date??""}`}],497853);let ea="No losing trades";function el(e){let t=0,n=0,r=0,i=0,a=0;for(let l of e)Number.isFinite(l)&&(t+=1,l>0?(n+=1,i+=l):l<0&&(r+=1,a-=l));let l=i-a;return{count:t,wins:n,losses:r,breakEvens:t-n-r,grossProfit:i,grossLoss:a,total:l,winRate:t>0?n/t*100:null,avgWin:n>0?i/n:0,avgLoss:r>0?a/r:0,profitFactor:a>0?i/a:null,noLosses:n>0&&0===r,expectancy:t>0?l/t:null}}function eo(e){if(null==e||""===e)return null;let t="number"==typeof e?e:Number(e);return Number.isFinite(t)?t:null}function eu(e,t=null){let n=eo(e.entry_price),r=eo(e.exit_price),i=void 0===e.initial_risk||void 0===e.units;return null===n||null===r||i?eo(e.r_multiple):ti({id:"",direction:"short"===e.direction?"short":"long",status:"closed",entry_price:n,exit_price:r,units:eo(e.units)??0,stop_loss:eo(e.stop_loss),initial_risk:eo(e.initial_risk)},t)}function es(e,t){let n=[];for(let r of e){let e=eu(r,t?t(r):null);null!==e&&Number.isFinite(e)&&n.push(e)}let r=eO(n),i=e=>null!==e&&Number.isFinite(e)?e:null;return{...r,mean:i(r.mean),rawMean:i(r.rawMean)}}function ec(e){let t=e.filter(e=>(!e.status||"closed"===e.status)&&null!=e.realized_pnl).map(e=>({...e,pnl:eP(e),holdDays:function(e){if(null!=e.holding_days)return e.holding_days;let t=eX(e.entry_day??e.entry_date),n=eX(e.exit_day??e.exit_date);return null===t||null===n?null:c(t,n)}(e)})).filter(e=>null!==e.holdDays),n=t.filter(e=>e.pnl>0),r=t.filter(e=>e.pnl<0);if(n.length<5||r.length<5)return null;let i=ed(n.map(e=>e.holdDays)),a=ed(r.map(e=>e.holdDays)),l=2*i,o=r.filter(e=>e.holdDays>l).sort((e,t)=>
1t.holdDays-e.holdDays).slice(0,5).map(e=>({tradeId:e.id,ticker:e.ticker,exchange:e.exchange,holdDays:e.holdDays,pnl:e.pnl,excessDays:Math.round(e.holdDays-i)})),u=function(e){let t=e=>eX(e.exit_day??e.exit_date)??"",n=[...e].sort((e,n)=>t(e).localeCompare(t(n))),r=[];if(n.length<20)return r;for(let e=20;e<=n.length;e+=5){let i=n.slice(e-20,e),a=i.filter(e=>e.pnl>0).map(e=>e.holdDays),l=i.filter(e=>e.pnl<0).map(e=>e.holdDays);if(0===a.length||0===l.length)continue;let o=ed(l)/ed(a),u=i[i.length-1],s=u?t(u):"";s&&r.push({date:s,ratio:Math.round(100*o)/100})}return r}(t),s=function(e){if(e.length<3)return"stable";let t=Math.max(1,Math.floor(e.length/3)),n=ed(e.slice(0,t).map(e=>e.ratio)),r=ed(e.slice(-t).map(e=>e.ratio))-n;return r<-.15?"improving":r>.15?"declining":"stable"}(u);return{avgWinnerHoldDays:Math.round(10*i)/10,avgLoserHoldDays:Math.round(10*a)/10,dispositionRatio:Math.round(100*(i>0?a/i:0))/100,winnerCount:n.length,loserCount:r.length,flaggedTrades:o,trendPoints:u,trend:s}}function ed(e){return 0===e.length?0:e.reduce((e,t)=>e+t,0)/e.length}function ef(e){if(e.length<10)return null;let t=e=>eX(e.entry_day??e.entry_date),n=e=>eX(e.exit_day??e.exit_date),r=[...e].sort((e,n)=>(t(e)??"").localeCompare(t(n)??"")),i=r.filter(e=>0>eP(e)&&e.exit_date).sort((e,t)=>(n(e)??"").localeCompare(n(t)??"")),a=[];for(let e of r){let l=t(e);if(null===l)continue;let o=e.entry_price*e.units,u=i.filter(e=>{let t=n(e);if(null===t||t>l)return!1;let r=c(t,l);return null!==r&&r<=2});if(0!==u.length){for(let t of u){let r=t.entry_price*t.units;if(r<=0)continue;let i=(o-r)/r*100;if(i>50){a.push({tradeId:e.id,ticker:e.ticker,exchange:e.exchange,entryDate:l,pnl:eP(e),triggerTradeId:t.id,triggerTicker:t.ticker,triggerPnL:eP(t),triggerExitDate:n(t)??"",reason:`Position size +${Math.round(i)}% within 48h of loss`,sizeIncreasePercent:Math.round(i)});break}}if(!a.some(t=>t.tradeId===e.id)){let i=r.filter(n=>n.id!==e.id&&t(n)===l);if(u.some(e=>n(e)===l)&&i.length>=2){let t=u[0];a.push({tradeId:e.id,ticker:e.ticker,exchange:e.exchange,entryDate:l,pnl:eP(e),triggerTradeId:t.id,triggerTicker:t.ticker,triggerPnL:eP(t),triggerExitDate:n(t)??"",reason:"Multiple trades entered same day as loss",sizeIncreasePercent:null})}}}}let l=Array.from(new Map(a.map(e=>[e.tradeId,e])).values()),o=l.reduce((e,t)=>e+t.pnl,0),u=e.length>0?l.length/e.length*100:0,s=function(e,t){if(e.length<20||t.length<2)return"stable";let n=Math.floor(e.length/2),r=new Set(e.slice(0,n).map(e=>e.id)),i=new Set(e.slice(n).map(e=>e.id)),a=t.filter(e=>r.has(e.tradeId)).length,l=t.filter(e=>i.has(e.tradeId)).length,o=a/n,u=l/(e.length-n);return u<.7*o?"improving":u>1.3*o?"declining":"stable"}(r,l);return{revengeCount:l.length,revengeFrequency:Math.round(10*u)/10,totalRevengeCost:o,flaggedTrades:l.sort((e,t)=>t.entryDate.localeCompare(e.entryDate)).slice(0,10),trend:s,tradeCount:e.length}}let ep=[{label:"1/week",min:0,max:1.5},{label:"2/week",min:1.5,max:2.5},{label:"3/week",min:2.5,max:3.5},{label:"4-5/week",min:3.5,max:5.5},{label:"6+/week",min:5.5,max:1/0}];function ey(e){if(e.length<20)return null;let t=new Map;for(let n of e){let e=function(e){let t=eX(e);if(null===t)return"unknown";let n=new Date(Date.UTC(Number(t.slice(0,4)),Number(t.slice(5,7))-1,Number(t.slice(8,10)))),r=n.getUTCDay()||7;n.setUTCDate(n.getUTCDate()+4-r);let i=new Date(Date.UTC(n.getUTCFullYear(),0,1)),a=Math.ceil(((n.getTime()-i.getTime())/864e5+1)/7);return`${n.getUTCFullYear()}-W${String(a).padStart(2,"0")}`}(n.entry_day??n.entry_date),r=eP(n),i=t.get(e)??[];i.push({pnl:r,resolvable:eF(n)}),t.set(e,i)}if(t.size<4)return null;let n=ep.map(e=>({...e,weekCount:0,tradeCount:0,winRate:null,totalPnL:0,avgPnL:0,profitFactor:null})),r=[];for(let[,e]of t){let t=e.length;r.push({freq:t,trades:e});let i=n.find(e=>t>=e.min&&t<e.max);if(i)for(let t of(i.weekCount++,i.tradeCount+=e.length,e))i.totalPnL+=t.pnl}for(let e of n){if(0===e.tradeCount)continue;let t=[];for(let n of r)if(n.freq>=e.min&&n.freq<e.max)for(let e of n.trades)e.resolvable&&t.push(e.pnl);let n=el(t);e.winRate=n.winRate,e.avgPnL=t.length>0?e.totalPnL/t.length:0,e.profitFactor=n.profitFactor}let i=n.filter(e=>e.weekCount>=2&&e.tradeCount>=3),a=i.length>0?i.reduce((e,t)=>
1(t.winRate??-1)>(e.winRate??-1)?t:e):null,l=a?{min:a.min,max:a.max,label:a.label}:null,o=t.size,u=o>0?e.length/o:0,s=null!==l&&u>l.max,c=null;if(s&&a){let e=[];for(let t of r)if(t.freq>=(l?.max??1/0))for(let n of t.trades)e.push(n.pnl);if(e.length>0){let t=e.reduce((e,t)=>e+t,0)/e.length;c=Math.max(0,(a.avgPnL-t)*e.length)}}return{frequencyBuckets:n.filter(e=>e.weekCount>0),optimalRange:l,currentWeeklyAvg:Math.round(10*u)/10,isOvertrading:s,costOfOvertrading:null!==c?Math.round(c):null,weeksAnalyzed:o,tradeCount:e.length}}function em(e){let t,n=[...e].filter(e=>"closed"===e.status).sort((e,t)=>(eX(e.exit_day??e.exit_date)??"").localeCompare(eX(t.exit_day??t.exit_date)??"")),r=n.slice(-30),i=n.length>30?n.slice(-60,-30):[];function a(e){return 0===e.length?0:e.filter(e=>!0===e.strategy_rules_followed).length/e.length*100}let l=a(r),o=a(i);return t=l>o+5?"improving":l<o-5?"declining":"stable",{last30Score:l,prior30Score:o,trend:t}}function eg(e,t=["confident","calm","focused","disciplined"]){let n=e.filter(e=>e.entry_emotion&&e.entry_emotion.length>0),r=e.filter(e=>e.exit_emotion&&e.exit_emotion.length>0),i=n.filter(e=>e.entry_emotion.some(e=>t.includes(e))).length,a=n.length>0?i/n.length*100:0,l=new Map;for(let e of n)for(let t of e.entry_emotion)l.set(t,(l.get(t)??0)+1);let o=null,u=0;for(let[e,t]of l)t>u&&(u=t,o=e);let s=new Map;for(let e of r)for(let t of e.exit_emotion)s.set(t,(s.get(t)??0)+1);let c=null,d=0;for(let[e,t]of s)t>d&&(d=t,c=e);let f=new Set;for(let t of e)t.entry_emotion&&t.entry_emotion.forEach(e=>f.add(e)),t.exit_emotion&&t.exit_emotion.forEach(e=>f.add(e));return{consistencyScore:a,dominantEntryEmotion:o,dominantExitEmotion:c,emotionVariability:f.size}}function eh(e){if(!e.rules_followed)return null;let t=Object.values(e.rules_followed);return 0===t.length?null:t.every(e=>e)}function e_(e){if(e.length<15)return null;let t=ec(e),n=t?eb(t.dispositionRatio):50,r=ef(e),i=r?ev(r.revengeFrequency):80,a=ey(e),l=a?ex(a):70,o=eg(e),u=o.consistencyScore,s=em(e.map(e=>({strategy_rules_followed:eh(e),status:"closed",exit_day:e.exit_day??null,exit_date:e.exit_date}))),c=s.last30Score,d=[{name:"Holding Discipline",score:Math.round(n),weight:.25,weightedScore:.25*n,description:t?`Disposition ratio: ${t.dispositionRatio.toFixed(1)}x`:"Insufficient data"},{name:"Revenge Control",score:Math.round(i),weight:.2,weightedScore:.2*i,description:r?`${r.revengeCount} revenge trades (${r.revengeFrequency.toFixed(1)}%)`:"Insufficient data"},{name:"Trade Pacing",score:Math.round(l),weight:.15,weightedScore:.15*l,description:a?`${a.currentWeeklyAvg}/wk (${a.isOvertrading?"overtrading":"on pace"})`:"Insufficient data"},{name:"Emotional Consistency",score:Math.round(u),weight:.2,weightedScore:.2*u,description:`${o.consistencyScore.toFixed(0)}% optimal emotions`},{name:"Rule Compliance",score:Math.round(c),weight:.2,weightedScore:.2*c,description:`${s.last30Score.toFixed(0)}% compliant (last 30)`}],f=eD(n,i,l,u,c),p=d.reduce((e,t)=>t.score<e.score?t:e),{trend:y,delta:m}=function(e){if(e.length<30)return{trend:"stable",delta:0};let t=[...e].sort((e,t)=>(eX(e.exit_day??e.exit_date??e.entry_day??e.entry_date)??"").localeCompare(eX(t.exit_day??t.exit_date??t.entry_day??t.entry_date)??"")),n=Math.floor(t.length/2),r=t.slice(0,n),i=t.slice(n);if(r.length<15||i.length<15)return{trend:"stable",delta:0};let a=e=>{let t=ec(e),n=ef(e),r=ey(e),i=eg(e),a=em(e.map(e=>({strategy_rules_followed:eh(e),status:"closed",exit_day:e.exit_day??null,exit_date:e.exit_date})));return eD(t?eb(t.dispositionRatio):50,n?ev(n.revengeFrequency):80,r?ex(r):70,i.consistencyScore,a.last30Score)},l=a(r),o=a(i)-l;return o>5?{trend:"improving",delta:o}:o<-5?{trend:"declining",delta:o}:{trend:"stable",delta:o}}(e);return{compositeScore:Math.min(100,Math.max(0,f)),components:d,trend:y,trendDelta:m,weakestComponent:p.name,improvementTip:function(e,t,n,r,i){switch(e){case"Holding Discipline":return n?`Cut losers faster -- you hold them ${n.dispositionRatio.toFixed(1)}x longer than winners`:"Track holding periods on trades to measure exit discipline";case"Revenge Control":return r&&r.revengeCount>0?`${r.revengeCount} revenge trades detected. Wait 24h after a loss before entering new positions`
1:"No revenge trades detected -- keep maintaining discipline after losses";case"Trade Pacing":return i?.isOvertrading?`Reduce frequency to ${i.optimalRange?.label??"fewer trades per week"}`:"Your trading frequency is within the optimal range";case"Emotional Consistency":return t<50?"Aim for confident or disciplined emotional state when entering trades":"Maintain your emotional awareness -- log emotions consistently";case"Rule Compliance":return t<50?"Review your strategy rules before each trade entry":"Continue following your strategy rules -- compliance drives profitability";default:return"Continue tracking behavioral data to improve your score"}}(p.name,p.score,t,r,a),isReliable:e.length>=30}}function eb(e){return e<=1?100:e>=3?0:Math.round(100-(e-1)/2*100)}function ev(e){return e<=0?100:e>=20?0:Math.round(100-e/20*100)}function ex(e){if(!e.optimalRange)return 70;if(!e.isOvertrading)return 100;let t=e.currentWeeklyAvg/e.optimalRange.max;return t<=1?100:t>=2?0:Math.round(100-(t-1)/1*100)}function eD(e,t,n,r,i){return Math.min(100,Math.max(0,Math.round(.25*e+.2*t+.15*n+.2*r+.2*i)))}function ew(e){if("closed"!==e.status||null==e.exit_price)return 0;let t=e.exit_units??e.units;return"long"===e.direction?(e.exit_price-e.entry_price)*t:(e.entry_price-e.exit_price)*t}function eC(e){if("closed"!==e.status||null==e.exit_price)return 0;let t=ew(e);return!0===e.is_foreign_trade?t:t-((e.entry_fees??0)+(e.exit_fees??0))}function eM(e,t,n){if("open"!==e.status)return 0;let r=n??e.units;return"long"===e.direction?(t-e.entry_price)*r:(e.entry_price-t)*r}function eN(e){return!0===e.is_foreign_trade||!!e.currency&&!!e.portfolio_currency&&e.currency.toUpperCase()!==e.portfolio_currency.toUpperCase()}function eP(e){return void 0!==e.display_pnl?e.display_pnl??0:null!=e.realized_pnl_converted?e.realized_pnl_converted:eN(e)?0:e.realized_pnl??0}function eF(e){return void 0!==e.display_pnl?null!==e.display_pnl:null!=e.realized_pnl_converted||!eN(e)}function eS(e){return null!=e.entry_cost_converted?e.entry_cost_converted:eN(e)?0:(Number(e.entry_price)||0)*(Number(e.units)||0)}function ek(e){if(void 0===e.display_pnl&&null==e.realized_pnl&&null==e.realized_pnl_converted||!eF(e))return{pnl:null,outcome:"unresolvable"};let t=eP(e);return t>0?{pnl:t,outcome:"win"}:t<0?{pnl:t,outcome:"loss"}:{pnl:0,outcome:"breakeven"}}function eT(e){if(!e.stop_loss)return null;let t="long"===e.direction?e.entry_price-e.stop_loss:e.stop_loss-e.entry_price,n=t*e.units;return t>0&&Number.isFinite(n)&&!(n<=0)?n:null}function eR(e){let t;return null==(t=null!=e.initial_risk&&e.initial_risk>0&&Number.isFinite(e.units)&&e.units>0?e.initial_risk/e.units:null!=e.stop_loss?"long"===e.direction?e.entry_price-e.stop_loss:e.stop_loss-e.entry_price:null)||!Number.isFinite(t)||t<=0?null:t}function eA(e){if("closed"!==e.status||null==e.exit_price||!Number.isFinite(e.entry_price)||e.entry_price<=0||!Number.isFinite(e.exit_price)||e.exit_price<=0)return null;let t=eR(e);if(null===t)return null;let n=("long"===e.direction?e.exit_price-e.entry_price:e.entry_price-e.exit_price)/t;return Number.isFinite(n)?n:null}function eU(e){if(!e.target_price)return null;let t="long"===e.direction?e.target_price-e.entry_price:e.entry_price-e.target_price;return t<=0?null:t*e.units}function eI(e){let t=eT(e),n=eU(e);return t&&n&&!(t<=0)?n/t:null}e.s(["createCallerDatedSubmissionSession",0,function(e,t=()=>new Date().toISOString()){let n=null;return{session:j(e,()=>n??t()),offerTimestamp:e=>{n=e}}}],222182);let eE=20;function eO(e){let t,n=e.filter(e=>Number.isFinite(e));if(0===n.length)return{n:0,mean:null,median:null,rawMean:null,lowSample:!0};let r=n.reduce((e,t)=>e+t,0)/n.length,i=function(e){if(0===e.length)return null;let t=Math.floor(e.length/2);return e.length%2==0?(e[t-1]+e[t])/2:e[t]}([...n].sort((e,t)=>e-t)),a=n.length<eE,l=a?r:(t=function(e,t=.05){if(0===e.length)return[];let n=[...e].sort((e,t)=>e-t),r=Math.floor(n.length*t);if(r<=0)return[...e];let i=n[r],a=n[n.length-1-r];return e.map(e=>Math.max(i,Math.min(a,e)))}(n,.05)).reduce((e,t)=>e+t,0)/t.length;return{n:n.length,mean:l,median:i,rawMean:r,lowSample:a}}function e$(e,n){let i=n||Intl.DateTimeFormat().resolvedOptions().timeZone,a=y(e,i),l=r(new Date().toISOString(),i);return null!==a&&null!==l&&t(a)?Math.max(0,u(l,a)):null}function eL(e){let n=e.entry_day??e.entry_date,r=e.exit_day??e.exit_date;if(!n||!r||null!=e.entry_day&&!t(e.entry_day)||null!=e.exit_day&&!t(e.exit_day))return null;if("string"==typeof n&&t(n)&&"string"==typeof r&&t(r))return Math.max(0,u(r,n));let i=new Date(n);return Math.max(0,Math.ceil((new Date(r).getTime()-i.getTime())/864e5))}function eK(e){if(!e)return null;if(e instanceof Date)return Number.isNaN(e.getTime())?null:{year:e.getUTCFullYear(),month:e.getUTCMonth(),day:e.getUTCDate()};let t=e.match(/^(\d{4})-(\d{2})-(\d{2})/);return t?{year:Number(t[1]),month:Number(t[2])-1,day:Number(t[3])}:null}function eV(e){return{start:new Date(e,6,1),end:new Date(e+1,5,30,23,59,59,999)}}function eB(e){return`${e}-${(e+1).toString().slice(-2)}`}function eY(e){var t;return eB((t=e.getFullYear(),e.getMonth()+1>=7?t:t-1))}function ej(){return eY(new Date)}function eq(e){return eV(parseInt(e.split("-")[0]??"",10))}let eG=/^(\d{4})-(\d{2})-(\d{2})(?:[T ]00:00(?::00(?:\.0+)?)?(?:Z|[+-]00:?(?:00)?)?)?$/;function eW(e){return String(e).padStart(2,"0")}function ez(e){return`${e.getUTCFullYear()}-${eW(e.getUTCMonth()+1)}-${eW(e.getUTCDate())}`}function eH(e){return`${e.getFullYear()}-${eW(e.getMonth()+1)}-${eW(e.getDate())}`}function eZ(e){return 0===e.getUTCHours()&&0===e.getUTCMinutes()&&0===e.getUTCSeconds()&&0===e.getUTCMilliseconds()}function eX(e){if(null==e)return null;if("string"==typeof e){let t=eG.exec(e);if(t){let[,e,n,r]=t,i=Number(n),a=Number(r);return i<1||i>12||a<1||a>31?null:`${e}-${n}-${r}`}let n=new Date(e);return Number.isNaN(n.getTime())?null:eZ(n)?ez(n):eH(n)}return Number.isNaN(e.getTime())?null:eZ(e)?ez(e):eH(e)}function eJ(e){var t;return eB((t=Number(e.slice(0,4)),Number(e.slice(5,7))>=7?t:t-1))}function eQ(e,t){let n=eX(e);return null!==n&&n>=t.startDay&&n<=t.endDay}function e0(e,t,n,r){return!(e<=0)&&(null!==t?null===r||t>r:null===r?e>n:0===n)}function e1(e){if(0===e.length)return{maxDrawdown:0,maxDrawdownPercent:0,peakIndex:0,troughIndex:0};let t=0,n=0,r=e[0],i=0,a=0,l=0;for(let o=1;o<e.length;o++){let u=e[o];u>r&&(r=u,i=o);let s=r-u,c=r>0?s/r*100:s>0?null:0;e0(s,c,t,n)&&(t=s,n=c,a=i,l=o)}return{maxDrawdown:t,maxDrawdownPercent:n,peakIndex:a,troughIndex:l}}function e2(e){let t=e[0];if(void 0===t)return{maxDrawdown:0,maxDrawdownPercent:0,currentDrawdown:0,currentDrawdownPercent:0,peakDate:null,troughDate:null,recoveryDate:null,daysInDrawdown:0,timeline:[]};let n=0,r=0,i=t.equity,a=t.date,l=a,o=a,u=null,s=!1,c=[];for(let t of e){t.equity>i&&(s&&(u=t.date,s=!1),i=t.equity,a=t.date);let e=i-t.equity,d=i>0?e/i*100:e>0?null:0;
1e0(e,d,n,r)&&(n=e,r=d,l=a,o=t.date,s=!0,u=null),c.push({date:t.date,equity:t.equity,peak:i,drawdown:e,drawdownPercent:d})}let d=c[c.length-1],f=d?.drawdown??0,p=d?d.drawdownPercent:0,y=0;if(d&&f>0){let e=new Date(d.date),t=!1;for(let n=c.length-1;n>=0;n--){let r=c[n];if(void 0!==r&&0===r.drawdown){let n=new Date(r.date);y=Math.ceil((e.getTime()-n.getTime())/864e5),t=!0;break}}let n=c[0];if(!t&&c.length>1&&void 0!==n){let t=new Date(n.date);y=Math.ceil((e.getTime()-t.getTime())/864e5)}}return{maxDrawdown:n,maxDrawdownPercent:r,currentDrawdown:f,currentDrawdownPercent:p,peakDate:l,troughDate:o,recoveryDate:u,daysInDrawdown:y,timeline:c}}function e5(e){if(null==e||!Number.isFinite(e))return"-";let t=e>=0?"+":"";return`${t}${e.toFixed(2)}R`}function e4(e,t,n,r,i,a,l,o=[]){if(0===l.length||e<=0||n<=0)return{points:[],mfe:0,mae:0,mfeCapturePercent:null,mfeDate:null,maeDate:null};let u=i.slice(0,10),s=a?a.slice(0,10):null,c=e*n,d="long"===r,f=(t,n)=>d?(t-e)*n:(e-t)*n,p=o.filter(e=>null!=e.exit_date).map(e=>({date:(e.exit_day??e.exit_date).slice(0,10),price:e.exit_price,units:e.units,isSynthetic:!1})).sort((e,t)=>e.date.localeCompare(t.date)),y=p.length>0;if(y){let e=R({status:null!=t&&null!=s?"closed":"open",units:n,exitUnits:n,exitPrice:t,exitFees:0,exitDate:a,exitDay:null,executedAt:null,exitFxRate:null},p.map(e=>({exitPrice:e.price,units:e.units,fees:0})),!1,{exitPricePolicy:"recorded_nonnegative_execution"});if("unavailable"===e.status)return{points:[],mfe:0,mae:0,mfeCapturePercent:null,mfeDate:null,maeDate:null,unavailable:!0};if("resolved"===e.status){let t=e.leg;p.push({date:(t.exit_day??t.exit_date).slice(0,10),price:t.exit_price,units:t.units,isSynthetic:t.isSynthetic}),p.sort((e,t)=>e.date.localeCompare(t.date))}}let m=[...l].filter(e=>null!=e.close).sort((e,t)=>e.date.localeCompare(t.date)).filter(e=>{let t=e.date.slice(0,10);return!(t<u)&&(!s||!(t>s))});if(0===m.length)return{points:[],mfe:0,mae:0,mfeCapturePercent:null,mfeDate:null,maeDate:null};let g=[],h=-1/0,_=1/0,b=null,v=null;for(let e=0;e<m.length;e++){let t,r=m[e],i=r.close;if(y){let e=r.date.slice(0,10),a=0,l=0;for(let t of p)t.date<=e&&(a+=f(t.price,t.units),l+=t.units);let o=S(n,l);if("unavailable"===o.status)return{points:[],mfe:0,mae:0,mfeCapturePercent:null,mfeDate:null,maeDate:null,unavailable:!0};t=a+f(i,o.remainingUnits)}else t=f(i,n);let a=c>0?t/c*100:0;t>h&&(h=t,b=r.date),t<_&&(_=t,v=r.date),g.push({date:r.date,day:e,close:i,pnl:Math.round(100*t)/100,pnlPercent:Math.round(100*a)/100,isMFE:!1,isMAE:!1})}for(let e of g)e.date===b&&(e.isMFE=!0),e.date===v&&(e.isMAE=!0);let x=null==t?null:y?p.reduce((e,t)=>e+f(t.price,t.units),0):f(t,n),D=null!==x&&h>0?Math.round(x/h*100):null;return{points:g,mfe:h===-1/0?0:Math.round(100*h)/100,mae:_===1/0?0:Math.round(100*_)/100,mfeCapturePercent:D,mfeDate:b,maeDate:v}}let e3=[{range:"< -2R",minR:-1/0,maxR:-2},{range:"-2R to -1R",minR:-2,maxR:-1},{range:"-1R to 0R",minR:-1,maxR:0},{range:"0R to 1R",minR:0,maxR:1},{range:"1R to 2R",minR:1,maxR:2},{range:"2R to 3R",minR:2,maxR:3},{range:"> 3R",minR:3,maxR:1/0}];function e8(e){let t=e3.map(e=>({...e,count:0}));return e.filter(e=>"closed"===e.status&&null!==e.r_multiple).forEach(e=>{let n=e.r_multiple;for(let e of t)if(e.maxR===1/0?n>=e.minR:n>=e.minR&&n<e.maxR){e.count++;break}}),t}let e7=[{range:"1-3d",minDays:1,maxDays:3},{range:"4-7d",minDays:4,maxDays:7},{range:"8-14d",minDays:8,maxDays:14},{range:"15d+",minDays:15,maxDays:1/0}];function e6(e){let t=e.filter(e=>"closed"===e.status&&null!=e.holding_days&&e.holding_days>=1);return e7.map(e=>{let n=t.filter(t=>t.holding_days>=e.minDays&&t.holding_days<=e.maxDays),r=n.filter(eF),i=r.filter(e=>eP(e)>0).length,a=r.filter(e=>0>eP(e)).length,l=n.length,o=n.filter(e=>null!=e.r_multiple).map(e=>e.r_multiple),u=o.length>0?o.reduce((e,t)=>e+t,0)/o.length:null,s=n.reduce((e,t)=>e+eP(t),0),c=r.length>0?s/r.length:0;return{range:e.range,minDays:e.minDays,maxDays:e.maxDays,total:l,wins:i,losses:a,winRate:r.length>0?i/r.length*100:0,avgR:u,avgPnL:c,totalPnL:s}})}function e9(e){let t=new Map;for(let n of e){let e=eX(n.exit_day??n.exit_date);if(null===e)continue;let r=t.get(e)??{pnl:0,trades:0,wins:0,losses:0,resolvable:0},i=eP(n),a=eF(n);t.set(e,{pnl:r.pnl+i,trades:r.trades+1,wins:r.wins+(a&&i>0?1:0),losses:r.losses+(a&&i<0?1:0),resolvable:r.resolvable+ +!!a})}let n=new Map;for(let[e,r]of t)n.set(e,{pnl:r.pnl,trades:r.trades,wins:r.wins,losses:r.losses,winRate:r.resolvable>0?r.wins/r.resolvable*100:null});return n}function te(e){return Math.round(Math.max(0,Math.min(100,e)))}function tt(e,t){return e.map(e=>{let n,r,i,a=t[e.id];if(null==a||!eF(e)||null==e.exit_price)return null;let l=eP(e),o="short"===e.direction?"short":"long",u=er(e.entry_price,e.exit_price,o);return Number.isFinite(u)?(u>0?(n="capture",r=te(a.capturedPercent),i=a.mfeFloored??!1):u<0?(n="absorbed",r=-te(Math.abs(u)/a.mae*100),i=a.maeFloored??!1):(n="flat",r=0,i=!1),{ticker:`${e.ticker}.${e.exchange}`,value:r,kind:n,outcome:l>0?"win":l<0?"loss":"flat",pnl:l,dataIncomplete:i}):null}).filter(e=>null!==e).sort((e,t)=>
1t.value-e.value)}let tn=["Mon","Tue","Wed","Thu","Fri"];function tr(e){let t=Array.from({length:5},()=>({totalTrades:0,resolvable:0,wins:0,totalPnl:0}));for(let n of e){let e=n.entry_day??n.entry_date;if(!e)continue;let r=function(e){let t=e.slice(0,10).split("-");if(t.length<3)return NaN;let n=Number(t[0]),r=Number(t[1]),i=Number(t[2]);return!Number.isInteger(n)||!Number.isInteger(r)||!Number.isInteger(i)||r<1||r>12||i<1||i>31?NaN:new Date(Date.UTC(n,r-1,i)).getUTCDay()}(e);if(Number.isNaN(r)||0===r||6===r)continue;let i=r-1,a=eP(n),l=eF(n),o=t[i];o.totalTrades++,o.totalPnl+=a,l&&(o.resolvable++,a>0&&o.wins++)}return tn.map((e,n)=>{let r=t[n];return{day:e,dayIndex:n+1,totalTrades:r.totalTrades,wins:r.wins,winRate:r.resolvable>0?r.wins/r.resolvable*100:0,avgPnl:r.resolvable>0?r.totalPnl/r.resolvable:0}})}function ti(e,t){let n=eA(e);if(null!=n)return n;if("closed"!==e.status||null==e.exit_price||!Number.isFinite(e.entry_price)||e.entry_price<=0||!Number.isFinite(e.exit_price)||e.exit_price<=0||null==t||!Number.isFinite(t)||t<=0)return null;let r=e.entry_price*(t/100);if(!Number.isFinite(r)||r<=0)return null;let i=("long"===e.direction?e.exit_price-e.entry_price:e.entry_price-e.exit_price)/r;return Number.isFinite(i)?i:null}function ta(e,t,n,r){if(!Number.isFinite(e)||null==t||null==n||!Number.isFinite(t)||!Number.isFinite(n))return null;let i="long"===r?e-t:t-e,a="long"===r?n-e:e-n;return i<=0||a<=0?null:a/i}function tl(e){return"number"==typeof e&&Number.isFinite(e)&&e>0}function to(e,t,n,r){if(!tl(e))return{stop:null,profit:null};let i="long"===r,a=tl(t)&&(i?t>=e:t<=e),l=tl(n)&&(i?n<=e:n>=e);return{stop:a?i?"For a long trade, the target stop must be below the target entry.":"For a short trade, the target stop must be above the target entry.":null,profit:l?i?"For a long trade, the target profit must be above the target entry.":"For a short trade, the target profit must be below the target entry.":null}}function tu(e,n,i,a){if(!n||n<=0)return null;let l=e?"calendar_days"===i?e$(e,a):function(e,n){let i=n||Intl.DateTimeFormat().resolvedOptions().timeZone,a=y(e,i),l=r(new Date().toISOString(),i);if(null===a||null===l||!t(a))return null;let o=u(l,a);if(o<=0)return 0;if(o>3650)return null;let s=5*Math.floor(o/7),c=new Date(Date.UTC(Number(a.slice(0,4)),Number(a.slice(5,7))-1,Number(a.slice(8,10)))).getUTCDay();for(let e=0;e<o%7;e++){let t=(c+e+1)%7;0!==t&&6!==t&&s++}return s}(e,a):null;if(null===l)return{available:!1,total:n};let o=Math.max(0,n-l),s=Math.min(100,l/n*100);return{available:!0,elapsed:l,total:n,remaining:o,percent:s,expired:o<=0}}function ts(e,t=new Date){let n,r=(n=eK(e))?Date.UTC(n.year+1,n.month,n.day):null;if(null===r)return null;let i=eK(t);if(!i)return null;let a=Date.UTC(i.year,i.month,i.day),l=r+864e5,o=Math.max(0,Math.round((l-a)/864e5)),u=new Date(l);return{firstEligibleDate:`${u.getUTCFullYear()}-${String(u.getUTCMonth()+1).padStart(2,"0")}-${String(u.getUTCDate()).padStart(2,"0")}`,daysUntilEligible:o,isEligible:a>r}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.