PageSourceSearch

https://language-player.netlify.app/_next/static/chunks/05mrft6cxj79j.js

js language-player.netlify.app collected 2026-10-03 10:59:42 UTC 39,357 bytes, 1 lines download raw bytes

1(globalThis.TURBOPACK||(globalThis.TURBOPACK=[])).push(["object"==typeof document?document.currentScript:void 0,648981,616746,853737,275746,e=>{"use strict";var t=e.i(843476),s=e.i(271645);e.i(156046);let n=[{id:"tblt-hsk4",title:"Tasks for Life in China (HSK 4)",l2:"zh",taskCount:25}],r={"tblt-hsk4":()=>e.A(806853).then(e=>({book:e.tbltHsk4}))};for(let e of n)if(!r[e.id])throw Error(`No loader registered for textbook "${e.id}".`);e.s(["booksForL2",0,function(e){return n.filter(t=>t.l2===e)},"hasTextbookForL2",0,function(e){return n.some(t=>t.l2===e)},"taskHref",0,function(e,t,s){let n,r=(n=s.split(".")).length<4?null:{bookId:n[0],unitId:n[1],lessonId:n[2],taskId:n.slice(3).join(".")};return r?`/${e}/${t}/tasks/${r.bookId}/${r.unitId}/${r.lessonId}/${r.taskId}`:`/${e}/${t}/tasks`}],616746);let a="tblt-hsk4",i=e=>`${a}/u06/${e}`,o=e=>`${a}/u06/${e}`;i("六A ➊ 上海.mp3"),i("六A ➊ 北京.mp3"),i("六A ➊ 哈尔滨.mp3"),i("六A ➊ 成都.mp3"),i("六A ➊ 新疆.mp3"),i("六A ➊ 杭州.mp3"),i("六A ➊ 桂林.mp3"),i("六A ➊ 苏州.mp3"),i("六A ➊ 西安.mp3"),i("六A ➋ ① 就要检票了.mp3"),i("六A ➋ ② 全列禁烟.mp3"),i("六A ➋ ③ 地铁广播.mp3"),i("六A ➋ ④ 行李转盘.mp3"),i("六A ➋ ⑤ 安全白线.mp3"),i("六A ➋ ⑥ 请紧握扶手.mp3"),i("六A ➋ ⑦ 登机口登机.mp3"),i("六A ➌(1)卢沟桥.mp3"),i("六A ➌(2)日本.mp3"),i("六A ➌(3)汉阳陵.mp3"),i("六A ➌(4)河内.mp3"),i("六A ➌(5)爱宝乐园.mp3"),i("六D ➊ 1.mp3"),i("六D ➊ 2.mp3"),i("六D ➊ 3.mp3"),i("六D ➊ 4.mp3"),i("六D ➊ 5.mp3"),i("六D ➊ 6.mp3"),i("六D ➋.mp3"),i("六B ➎ 开票一秒就空了.mp3"),i("六C ➊ ① 下一站,无锡站.mp3"),i("六C ➊ ②.mp3"),i("六C ➊ ③.mp3"),i("六C ➊ ④.mp3"),i("六C ➋ ①.mp3"),i("六C ➋ ②.mp3"),i("六C ➋ ③.mp3"),i("六C ➋ ④.mp3"),i("六C ➌.mp3"),i("六E ➊ ①.mp3"),i("六E ➊ ②.mp3"),i("六E ➊ ③.mp3"),i("六E ➊ ④.mp3"),i("六E ➋ ①.mp3"),i("六E ➋ ②.mp3"),i("六E ➋ ③.mp3"),i("六E ➌.mp3"),o("e1-a.jpg"),o("e1-b.jpg"),o("e1-c.jpg"),o("e1-d.jpg"),o("e1-e.jpg"),o("e2-a.jpg"),o("e2-b.jpg"),o("e2-c.jpg"),o("e2-d.jpg"),i("六D ➍.mp3"),o("b4-fallback.jpg"),o("b3-g41-wuzuo.jpg"),o("b3-g41-erdengzuo.jpg"),o("b3-g41-yidengzuo.jpg"),o("b3-g41-shangwuzuo.jpg"),o("b3-k1275-wuzuo.jpg"),o("b3-k1275-yingzuo.jpg"),o("b3-k1275-yingwo.jpg"),o("b3-k1275-ruanwo.jpg"),o("b5-illustration-a.jpg"),o("b5-illustration-b.jpg"),o("b5-illustration-c.jpg"),o("b5-illustration-d.jpg"),o("b5-illustration-e.jpg"),o("b5-illustration-f.jpg"),o("a1-map.png"),o("a1-sight-a.jpg"),o("a1-sight-b.jpg"),o("a1-sight-c.jpg"),o("a1-sight-d.jpg"),o("a1-sight-e.jpg"),o("a1-sight-f.jpg"),o("a1-sight-g.jpg"),o("a1-sight-h.jpg"),o("a1-sight-i.jpg"),o("a1-sight-j.jpg"),o("a2-a.jpg"),o("a2-b.jpg"),o("a2-c.jpg"),o("a2-d.jpg"),o("a2-e.jpg"),o("a2-f.jpg"),o("a2-g.jpg"),o("a3-transport-a.jpg"),o("a3-transport-b.jpg"),o("a3-transport-c.jpg"),o("a3-transport-d.jpg"),o("a3-transport-e.jpg"),o("a3-place-a.jpg"),o("a3-place-b.jpg"),o("a3-place-c.jpg"),o("a3-place-d.jpg"),o("a3-place-e.jpg"),o("c1-a.jpg"),o("c1-b.jpg"),o("c1-c.jpg"),o("c1-d.jpg"),o("c2-a.jpg"),o("c2-b.jpg"),o("c2-c.jpg"),o("c2-d.jpg"),e.s([],853737);let l=/[\u200B-\u200D\uFEFF]/g,u=/^[\s\p{P}\p{S}]+|[\s\p{P}\p{S}]+$/gu;function c(e){return e?e.normalize("NFC").replace(/[\uFF01-\uFF5E]/g,e=>String.fromCharCode(e.charCodeAt(0)-65248)).replace(/\u3000/g," ").replace(l,"").replace(/\s+/g," ").trim().replace(u,"").trim():""}function p(e){let t=[e.answer,...e.accept??[]],s=new Set,n=[];for(let e of t){let t=c(e);t&&!s.has(t)&&(s.add(t),n.push(t))}return n}function d(e){return"given"!==e.kind&&"free"!==e.kind}function h(e){return e.split(/[、,,]/).map(e=>c(e)).filter(Boolean)}function g(e,t){if("given"===e.kind)return!0;if("free"===e.kind)return(t??"").trim().length>0;let s=c(t??"");if(!s)return!1;if(e.multiple){let t=h(s).sort();return p(e).some(e=>{let s=h(e).sort();return s.length>0&&s.length===t.length&&s.every((e,s)=>e===t[s])})}return p(e).includes(s)}function f(e,t){let s=Array.isArray(t)?Object.fromEntries(t.map(e=>[e.blankId,e.value])):t,n=[],r=0,a=0;for(let t of Object.values(e.blanks??{})){let e=g(t,s[t.id]);d(t)&&(a+=1,e&&(r+=1)),n.push({blankId:t.id,correct:e,answer:t.answer})}return{taskId:e.id,blanks:n,correctCount:r,scoreableCount:a,complete:a>0&&r===a}}function m(e,t){let s=e.blanks;if(!s)return e;let n=Object.entries(s),r=n.map(([,e])=>t(e.answer)),a=r.some(e=>"function"==typeof e?.then),i=t=>{let s={};
1return n.forEach(([e,n],r)=>{let a=t[r],i=[...n.accept??[]];a&&a!==n.answer&&!i.includes(a)&&i.push(a),s[e]=i.length===(n.accept?.length??0)?n:{...n,accept:i}}),{...e,blanks:s}};return a?Promise.all(r).then(i):i(r)}function y(e,t){let s={};for(let n of Object.values(e.blanks??{}))"given"===n.kind?s[n.id]=n.answer:t&&n.id in t?s[n.id]=t[n.id]:s[n.id]="";return s}e.s(["expandAcceptedVariants",0,m,"gradeTask",0,f,"isBlankCorrect",0,g,"isBlankScoreable",0,d],275746);class k{task;contentVersion;responses;responsesSnapshot=null;attempts=[];result=null;submitted=!1;listeners=new Set;save;attemptSeq=0;constructor(e){this.task=e.task,this.contentVersion=e.contentVersion;const t=e.load?.()??null,s=t&&t.contentVersion===this.contentVersion?t:null;this.responses=y(this.task,s?.responses),this.attempts=s?.attempts??[],this.save=e.save}subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e));emit(){for(let e of(this.responsesSnapshot=null,this.listeners))e()}getValue=e=>this.responses[e]??"";getResult=()=>this.result;isSubmitted=()=>this.submitted;getResponses=()=>({...this.responses});getResponsesSnapshot=()=>(this.responsesSnapshot||(this.responsesSnapshot={...this.responses}),this.responsesSnapshot);getAttempts=()=>[...this.attempts];getAnsweredCount=()=>Object.values(this.task.blanks??{}).filter(e=>d(e)&&(this.responses[e.id]??"").trim().length>0).length;getScoreableCount=()=>Object.values(this.task.blanks??{}).filter(d).length;setValue=(e,t)=>{let s=this.task.blanks?.[e];s&&"given"!==s.kind&&this.responses[e]!==t&&(this.responses[e]=t,this.submitted&&(this.submitted=!1,this.result=null),this.persist(),this.emit())};submit=()=>{let e=f(this.task,this.responses);this.result=e,this.submitted=!0;let t=Date.now();for(let e of this.attempts)e.voidedAt||(e.voidedAt=t);return this.attemptSeq+=1,this.attempts.push({id:`${this.task.id}#${this.attemptSeq}`,taskId:this.task.id,contentVersion:this.contentVersion,responses:{...this.responses},result:e,submittedAt:t}),this.persist(),this.emit(),e};reset=()=>{this.responses=y(this.task,null),this.result=null,this.submitted=!1,this.persist(),this.emit()};snapshot=()=>({taskId:this.task.id,contentVersion:this.contentVersion,responses:{...this.responses},attempts:this.attempts.map(e=>({...e}))});persist(){this.save?.(this.snapshot())}}class v{selected=null;listeners=new Set;subscribe=e=>(this.listeners.add(e),()=>this.listeners.delete(e));get=()=>this.selected;set=e=>{this.selected!==e&&(this.selected=e,this.emit())};toggle=e=>{this.set(this.selected===e?null:e)};emit(){for(let e of this.listeners)e()}}var b=e.i(211900),S=e.i(398522);let w=(0,s.createContext)(null),P="lp:textbook:",x=()=>()=>{};function j(e){try{let t=window.localStorage.getItem(P+e);if(!t)return null;let s=JSON.parse(t);if(!s||"object"!=typeof s||s.taskId!==e)return null;return s}catch(t){return(0,S.log)("[LP Web] Textbook: failed to read saved state for",e,t),null}}function C(e){try{window.localStorage.setItem(P+e.taskId,JSON.stringify(e))}catch(t){(0,S.log)("[LP Web] Textbook: failed to save state for",e.taskId,t)}}e.s(["TEXTBOOK_STORAGE_PREFIX",0,P,"TextbookTaskProvider",0,function({task:e,book:n,children:r}){let a=(0,s.useSyncExternalStore)(x,()=>!0,()=>!1),[i,o]=(0,s.useState)(e);(0,s.useEffect)(()=>{let t=!1;return"zh"!==n.l2?void o(e):(m(e,b.toTraditional).then(e=>{t||o(e)}).catch(e=>{(0,S.log)("[LP Web] Textbook: script-variant expansion failed",e)}),()=>{t=!0})},[e,n.l2]);let l=(0,s.useMemo)(()=>{let e=new k({task:i,contentVersion:n.contentVersion,load:()=>a?j(i.id):null,save:a?C:void 0});return{task:i,book:n,store:e,selection:new v}},[i,n.contentVersion,a]);return(0,t.jsx)(w.Provider,{value:l,children:r})},"loadPersistedTask",0,j,"useTextbookTask",0,function(){return(0,s.useContext)(w)}],648981)},337837,e=>{"use strict";var t=e.i(843476),s=e.i(271645),n=e.i(981140),r=e.i(820783),a=e.i(30030),i=e.i(726330),o=e.i(303536),l=e.i(765491),u=e.i(610772),c=e.i(853660),p=e.i(774606),d=e.i(296626),h=e.i(248425),g=e.i(991918),f=e.i(369340),m=e.i(186312),y=e.i(985369),k=Object.defineProperty,v=(e,t)=>k(e,"name",{value:t,configurable:!0}),b="Popover",[S,w]=(0,a.createContextScope)(b,[c.createPopperScope]),P=(0,c.createPopperScope)(),[x,j]=S(b),C=v(e=>{let{__scopePopover:n,children:r,open:a,defaultOpen:i,onOpenChange:o,modal:l=!1}=e,p=P(n),d=s.useRef(null),[h,g]=s.useState(!1),[m,y]=(0,f.useControllableState)({prop:a,defaultProp:i??!1,onChange:o,caller:b});return(0,t.jsx)(c.Root,{...p,children:(0,t.jsx)(x,{scope:n,contentId:(0,u.useId)(),triggerRef:d,open:m,onOpenChange:y,onOpenToggle:s.useCallback(()=>y(e=>!e),[y]),hasCustomAnchor:h,onCustomAnchorAdd:s.useCallback(()=>g(!0),[]),onCustomAnchorRemove:s.useCallback(()=>g(!1),[]),modal:l,children:r})})},"Popover"),I=s.forwardRef(v(function(e,s){let{__scopePopover:a,...i}=e,o=j("PopoverTrigger",a),l=P(a),u=(0,r.useComposedRefs)(s,o.triggerRef),p=(0,t.jsx)(h.Primitive.button,{type:"button","aria-haspopup":"dialog","aria-expanded":o.open,"aria-controls":o.open?o.contentId:void 0,"data-state":$(o.open),...i,ref:u,onClick:(0,n.composeEventHandlers)(e.onClick,o.onOpenToggle)});return o.hasCustomAnchor?p:(0,t.jsx)(c.Anchor,{asChild:!0,...l,children:p})},"PopoverTrigger")),A="PopoverPortal",[O,D]=S(A,{forceMount:void 0}),T=v(e=>{let{__scopePopover:s,forceMount:n,children:r,container:a}
1=e,i=j(A,s);return(0,t.jsx)(O,{scope:s,forceMount:n,children:(0,t.jsx)(d.Presence,{present:n||i.open,children:(0,t.jsx)(p.Portal,{asChild:!0,container:a,children:r})})})},"PopoverPortal"),E="PopoverContent",_=s.forwardRef(v(function(e,s){let n=D(E,e.__scopePopover),{forceMount:r=n.forceMount,...a}=e,i=j(E,e.__scopePopover);return(0,t.jsx)(d.Presence,{present:r||i.open,children:i.modal?(0,t.jsx)(z,{...a,ref:s}):(0,t.jsx)(R,{...a,ref:s})})},"PopoverContent")),L=(0,g.createSlot)("PopoverContent.RemoveScroll"),z=s.forwardRef(v(function(e,a){let i=j(E,e.__scopePopover),o=s.useRef(null),l=(0,r.useComposedRefs)(a,o),u=s.useRef(!1);return s.useEffect(()=>{let e=o.current;if(e)return(0,m.hideOthers)(e)},[]),(0,t.jsx)(y.RemoveScroll,{as:L,allowPinchZoom:!0,children:(0,t.jsx)(M,{...e,ref:l,trapFocus:i.open,disableOutsidePointerEvents:!0,onCloseAutoFocus:(0,n.composeEventHandlers)(e.onCloseAutoFocus,e=>{e.preventDefault(),u.current||i.triggerRef.current?.focus()}),onPointerDownOutside:(0,n.composeEventHandlers)(e.onPointerDownOutside,e=>{let t=e.detail.originalEvent,s=0===t.button&&!0===t.ctrlKey;u.current=2===t.button||s},{checkForDefaultPrevented:!1}),onFocusOutside:(0,n.composeEventHandlers)(e.onFocusOutside,e=>e.preventDefault(),{checkForDefaultPrevented:!1})})})},"PopoverContentModal")),R=s.forwardRef(v(function(e,n){let r=j(E,e.__scopePopover),a=s.useRef(!1),i=s.useRef(!1);return(0,t.jsx)(M,{...e,ref:n,trapFocus:!1,disableOutsidePointerEvents:!1,onCloseAutoFocus:t=>{e.onCloseAutoFocus?.(t),t.defaultPrevented||(a.current||r.triggerRef.current?.focus(),t.preventDefault()),a.current=!1,i.current=!1},onInteractOutside:t=>{e.onInteractOutside?.(t),t.defaultPrevented||(a.current=!0,"pointerdown"===t.detail.originalEvent.type&&(i.current=!0));let s=t.target;r.triggerRef.current?.contains(s)&&t.preventDefault(),"focusin"===t.detail.originalEvent.type&&i.current&&t.preventDefault()}})},"PopoverContentNonModal")),M=s.forwardRef(v(function(e,s){let{__scopePopover:n,trapFocus:r,onOpenAutoFocus:a,onCloseAutoFocus:u,disableOutsidePointerEvents:p,onEscapeKeyDown:d,onPointerDownOutside:h,onFocusOutside:g,onInteractOutside:f,...m}=e,y=j(E,n),k=P(n);return(0,o.useFocusGuards)(),(0,t.jsx)(l.FocusScope,{asChild:!0,loop:!0,trapped:r,onMountAutoFocus:a,onUnmountAutoFocus:u,children:(0,t.jsx)(i.DismissableLayer,{asChild:!0,disableOutsidePointerEvents:p,onInteractOutside:f,onEscapeKeyDown:d,onPointerDownOutside:h,onFocusOutside:g,onDismiss:()=>y.onOpenChange(!1),deferPointerDownOutside:!0,children:(0,t.jsx)(c.Content,{"data-state":$(y.open),role:"dialog",id:y.contentId,...k,...m,ref:s,style:{...m.style,"--radix-popover-content-transform-origin":"var(--radix-popper-transform-origin)","--radix-popover-content-available-width":"var(--radix-popper-available-width)","--radix-popover-content-available-height":"var(--radix-popper-available-height)","--radix-popover-trigger-width":"var(--radix-popper-anchor-width)","--radix-popover-trigger-height":"var(--radix-popper-anchor-height)"}})})})},"PopoverContentImpl"));function $(e){return e?"open":"closed"}v($,"getState");var N=e.i(152088);e.s(["Popover",0,C,"PopoverContent",0,function({className:e,align:s="center",alignOffset:n=0,side:r="bottom",sideOffset:a=4,...i}){return(0,t.jsx)(T,{children:(0,t.jsx)(_,{align:s,alignOffset:n,side:r,sideOffset:a,"data-slot":"popover-content",className:(0,N.cn)("z-50 w-72 rounded-lg bg-popover p-2.5 text-sm text-popover-foreground shadow-md ring-1 ring-foreground/10 outline-none duration-100 data-[side=bottom]:slide-in-from-top-2 data-[side=left]:slide-in-from-right-2 data-[side=right]:slide-in-from-left-2 data-[side=top]:slide-in-from-bottom-2 data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95",e),...i})})},"PopoverTrigger",0,I],337837)},491803,82719,e=>{"use strict";var t=e.i(271645);e.i(924856);let s=["lifetime"],n=2026,r=8,a=21,i=0,o=0,l=0,u=0,c=2026,p=8,d=27,h=23,g=59,f=59,m=999;function y(){return new Date(n,r,a,i,o,l,u)}function k(){return new Date(c,p,d,h,g,f,m)}function v(e=new Date){return e>=y()&&e<=k()}function b(e,t,s){return e.find(e=>e.plan===t&&"sale"===e.type&&!!e.id&&(void 0===s||e.currency===s))}function S(e,t,s){return e.find(e=>e.plan===t&&"regular"===e.type&&e.currency===s&&"current"===e.status)}e.s(["SALE_DISCOUNT",0,.5,"findRegularPrice",0,S,"findSalePrice",0,b,"formatPriceAmount",0,function(e){return Number.isInteger(e)?String(e):e.toFixed(2)},"getSaleDiscount",0,function(e,t,s="usd"){let n=S(e,t,s),r=b(e,t,s);return n&&r&&0!==n.amount?Math.round((1-r.amount/n.amount)*100):null},"isSaleWindowOpen",0,v,"resolvePlanPriceForWindow",0,function(e,t,n,r){if(r&&s.includes(t)){let s=b(e,t,n);if(s)return{price:s,onSale:!0}}return{price:S(e,t,n),onSale:!1}},"saleWindowEnd",0,k,"saleWindowStart",0,y],82719),e.s(["formatSaleDate",0,function(e,t){return e.toLocaleDateString(t,{month:"short",day:"numeric"})},"useSaleWindow",0,function(){let[e,s]=(0,t.useState)(!1);return(0,t.useEffect)(()=>{let e=()=>s(v());e();let t=setInterval(e,6e4);return()=>clearInterval(t)},[]),{open:e,endsAt:k(),startsAt:y()}}],491803)},370935,e=>{"use strict";let t=void 0!==e.i(247167).default&&"https://pythonvps.zerotohero.ca"||"http://127.0.0.1:5001";e.s(["PYTHON_API_URL",0,t])},546085,e=>{"use strict";let t=null,s=null;e.s(["getAuthTokens",0,function(){return{accessToken:t,refreshAccessToken:s}},"setAuthTokens",0,function(e,n){t=e,s=n}])},403908,e=>{"use strict";var t=e.i(546085);function s(e,t){return{...e?.headers??{},...t?{Authorization:`Bearer ${t}`}:{}}}async function n(e,n){let{accessToken:r,refreshAccessToken:a}=(0,t.getAuthTokens)(),i=await fetch(e,{...n,headers:s(n,r)});if(401===i.status&&r&&a){let t=await a();t&&(i=await fetch(e,{...n,headers:s(n,t)}))}return i}e.s(["authenticatedFetch",0,n])},211900,e=>{"use strict";let t=null,s=null;async function n(){return t||(t=e.A(252762).then(({Converter:e})=>e({from:"cn",to:"t"}))),t}async function r(){return s||(s=e.A(252762).then(({Converter:e})=>e({from:"t",to:"cn"}))),s}async function a(e){return(await n())(e)}async function i(e){return(await r())(e)}function o(e,t){let s=Math.min(e.length,t.length),n=Math.abs(e.length-t.length);for(let r=0;r<s;r++)e[r]!==t[r]&&n++;return n}async function l(e){let[t,s]=await Promise.all([n(),r()]),a=t(e),i=s(e),l=o(e,a);return o(e,i)>l?"traditional":"simplified"}e.s(["detectChineseScript",0,l,"toSimplified",0,i,"toTraditional",0,a])},869168,e=>{"use strict";e.i(737378);var t=e.i(237945),s=e.i(370935);let n=new Map,r=new Map,a=[],i=new Map,o=null;async function l(){for(;a.length>0;){let e=a.splice(0,12);if(0===e.length)break;let r=new Map;for(let t of e){let e=r.get(t.l2Code);e?e.push(t):r.set(t.l2Code,[t])}for(let[e,a]of r)try{let r=await fetch(`${s.PYTHON_API_URL}/lemmatize-normalized/batch`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({texts:a.map(e=>e.text),l2:(0,t.baseCode)(e)})});if(!r.ok)throw Error(`HTTP ${r.status}`);let o=await r.json(),l=o?.results??[];a.forEach((e,t)=>{let s=l[t]??[];n.set(e.key,s),e.resolve(s),i.delete(e.key)})}catch(e){await Promise.allSettled(a.map(async e=>{try{let t=await u(e.text,e.l2Code);n.set(e.key,t),e.resolve(t)}catch(t){e.reject(t)}finally{i.delete(e.key)}}))}}}async function u(e,n){let r=await fetch(`${s.PYTHON_API_URL}/lemmatize-normalized`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({text:e,l2:(0,t.baseCode)(n)})});if(!r.ok)throw Error(`HTTP ${r.status}`);return(await r.json()).tokens}e.s(["enqueueLemmatize",0,function(e,t){let s=`${t}:${e}`,n=i.get(s);if(n)return n;let r=new Promise((n,r)=>{a.push({key:s,text:e,l2Code:t,resolve:n,reject:r})});return i.set(s,r),o||(o=setTimeout(()=>{o=null,l()},60)),r},"lemmatizeCache",0,n,"lemmatizeInflight",0,r])},647925,882848,e=>{"use strict";var t=e.i(370935);let s=new Set(["img.youtube.com","i.ytimg.com","commons.wikimedia.org","upload.wikimedia.org"]);function n(e){let t=new URL(e);if("https:"!==t.protocol)throw Error(`asset-proxy: https only, got "${t.protocol}" for ${e}`);if(!s.has(t.hostname))throw Error(`asset-proxy: host not allowlisted: "${t.hostname}"`);if(t.search)throw Error(`asset-proxy: target must not carry a query string: "${t.search}"`);
1let n=t.pathname.split("/").filter(Boolean).map(encodeURIComponent);if(0===n.length)throw Error(`asset-proxy: target has no path: ${e}`);return`/api/asset-proxy/${t.hostname}/${n.join("/")}`}e.s(["assetProxyUrl",0,n],882848),e.i(398522),t.PYTHON_API_URL,e.s(["youtubeThumbnail",0,function(e,t="mqdefault"){return n(`https://img.youtube.com/vi/${encodeURIComponent(e)}/${t}.jpg`)}],647925)},357125,e=>{"use strict";var t=e.i(843476),s=e.i(271645),n=e.i(737378);let r=(0,s.createContext)(null);e.s(["LanguageProvider",0,function({children:e,l1:a,l2:i}){let o=(0,s.useMemo)(()=>(0,n.getLanguageMeta)(a),[a]),l=(0,s.useMemo)(()=>(0,n.getLanguageMeta)(i),[i]),u=(e,t,s)=>{s?window.location.href=`/${e}/${t}/${s}`:window.location.href=`/${e}/${t}`},c=(0,s.useMemo)(()=>({l1:o,l2:l,setLanguagePair:u}),[o,l]);return s.default.useEffect(()=>{document.documentElement.dir=o.direction,document.documentElement.lang=o.code,document.documentElement.dataset.uiLang=o.code},[o]),(0,t.jsx)(r.Provider,{value:c,children:e})},"useLanguage",0,function(){let e=(0,s.useContext)(r);if(!e)throw Error("useLanguage must be used within <LanguageProvider>");return e}])},259821,781609,e=>{"use strict";var t=e.i(843476),s=e.i(271645),n=e.i(526732);e.i(735134);var r=e.i(635698),a=e.i(398522);e.i(156046);var i=e.i(5978);e.i(924856);let o={enabled:!0,zoom:0,typeFace:"default",leading:1.625,mode:"normal",quickGloss:!0,translationSize:.8},l={theme:"dark",translationSplit:.6},u={speed:1,autoPause:!1,karaokeMode:!0,smoothScroll:!1,collapsedVideo:!1,transcriptMode:"transcript"},c={dailyNewLimit:20,dayStartHour:4},p={expandSubsSearch:!1},d={phonetics:{show:"ruby",conditions:"always"},definition:{show:!1}},h={translation:!0,traditional:!1,byeonggi:!0},g={voiceURI:null,rate:1},f={tvShowFilter:null,categoryFilter:null},m={tokenSpan:{...d},display:{...h},speech:{...g},content:{...f}};function y(e){let t={};return e&&(t[e]=v(null)),{v:2,ts:new Date(0).toISOString(),tokenizedText:{...o},display:{...l},playback:{...u},review:{...c},search:{...p},l2:t}}function k(e){let t=y();if(!e)return t;let s=e.display?.translation,n="boolean"==typeof s?s:void 0,r=e.l2??t.l2,a={};for(let[e,t]of Object.entries(r))a[e]=v(t,n);return{...t,...e,v:2,ts:e.ts??t.ts,tokenizedText:{...t.tokenizedText,...e.tokenizedText??{}},display:{...t.display,...e.display??{}},playback:{...t.playback,...e.playback??{}},review:{...t.review,...e.review??{}},search:{...t.search,...e.search??{}},l2:a,languagePair:e.languagePair??t.languagePair}}function v(e,t){let s=e??{},n=s.display??{},r=s.tokenSpan??{},a=r.phonetics??{},i=r.definition??{};return{tokenSpan:{phonetics:{...d.phonetics,...a},definition:{...d.definition,...i}},display:{...h,...n,translation:n.translation??t??h.translation},speech:{...g,...s.speech??{}},content:{...f,...s.content??{}}}}function b(e){return!!e&&(void 0!==e.translation||void 0!==e.phonetics||void 0!==e.traditional||void 0!==e.speech&&(null!=e.speech.voiceURI||null!=e.speech.rate))}function S(e,t){let s={tokenSpan:{phonetics:{...e.tokenSpan.phonetics},definition:{...e.tokenSpan.definition}},display:{...e.display},speech:{...e.speech},content:{...e.content}};return void 0!==t.translation&&(s.display.translation=t.translation),void 0!==t.traditional&&(s.display.traditional=t.traditional),void 0!==t.phonetics&&(s.tokenSpan.phonetics.show=!1!==t.phonetics&&d.phonetics.show),t.speech&&(null!=t.speech.voiceURI&&(s.speech.voiceURI=t.speech.voiceURI),null!=t.speech.rate&&(s.speech.rate=t.speech.rate)),s}e.s(["L2_DEFAULTS",0,m,"SPEECH_DEFAULTS",0,g,"applyLegacySeed",0,S,"createSettingsV2",0,y,"hasLegacySeedValues",0,b,"normalizeSettingsV2",0,k],781609);let w="lp_settings",P={getItem:e=>Promise.resolve(localStorage.getItem(e)),setItem:(e,t)=>(localStorage.setItem(e,t),Promise.resolve())},x=(0,s.createContext)(null);e.s(["SettingsProvider",0,function({children:e}){let o=function(){let{data:e,status:t}=(0,n.useSession)(),{getUserSettings:o,putUserSettings:l}=(0,r.useUserDataColumns)(),[u,c]=(0,s.useState)(()=>y()),[p,d]=(0,s.useState)(!1),[h,g]=(0,s.useState)(!1),f=(0,s.useRef)(null),v=(0,s.useRef)(!1),x=(0,s.useRef)(null),j=(0,s.useRef)(!1),C=(0,s.useRef)(null),I=(0,s.useCallback)(t=>{if(!j.current&&e){(0,a.log)("[settings] persist SKIPPED — settings still pristine defaults (no local blob / hydration pending)",{ts:t.ts,review:t.review}),(0,i.pushSettingsDiag)(P,"persist SKIPPED (pristine defaults)",{ts:t.ts,review:t.review});return}try{localStorage.setItem(w,JSON.stringify(t))}catch{}e&&(f.current&&clearTimeout(f.current),f.current=setTimeout(async()=>
1{if(!v.current){v.current=!0;try{let e=await (0,i.getOrCreateDeviceId)(P);(0,a.log)("[settings] PUT /user-settings",{ts:t.ts,updatedAt:Date.parse(t.ts)||Date.now(),deviceId:e}),(0,i.pushSettingsDiag)(P,"PUT /user-settings",{ts:t.ts,updatedAt:Date.parse(t.ts)||Date.now(),review:t.review,deviceId:e}),await l({settings_v2:t,updatedAt:Date.parse(t.ts)||Date.now(),deviceId:e})}catch(e){(0,a.logwarn)("[settings] Cloud sync failed:",e),(0,i.pushSettingsDiag)(P,"PUT /user-settings FAILED",{error:String(e)})}finally{v.current=!1}}},3e3))},[e,l]),A=(0,s.useCallback)(()=>{try{let e=!1,t=y(),s={},n=localStorage.getItem("lp_show_translation");if(null!==n)try{s.translation=JSON.parse(n),e=!0}catch{}let r=localStorage.getItem("lp_show_phonetics");if(null!==r)try{s.phonetics=JSON.parse(r),e=!0}catch{}let a=localStorage.getItem("lp_use_traditional");if(null!==a)try{s.traditional=JSON.parse(a),e=!0}catch{}let i=localStorage.getItem("zthSrsProgress");if(i)try{let s=JSON.parse(i);s?.settings?.dailyNewLimit!=null&&(t.review.dailyNewLimit=s.settings.dailyNewLimit,e=!0)}catch{}let o=localStorage.getItem("zthSpeechSettings");if(o)try{let t=JSON.parse(o);(t.voiceURI||null!=t.rate)&&(s.speech={voiceURI:t.voiceURI??null,rate:t.rate},e=!0)}catch{}if(!e)return null;return b(s)&&(C.current=s),t.ts=new Date().toISOString(),t}catch{return null}},[]);(0,s.useEffect)(()=>{if(!p&&"loading"!==t){try{let e=localStorage.getItem(w);if(e){let t=JSON.parse(e);if(t&&2===t.v){j.current=!0;let e=k(t);(0,a.log)("[settings] loaded local blob — ts:",e.ts,"review:",JSON.stringify(e.review)),(0,i.pushSettingsDiag)(P,"loaded local blob",{ts:e.ts,review:e.review}),c(e),d(!0);return}}let t=A();t?(j.current=!0,(0,a.log)("[settings] migrated legacy keys — ts:",t.ts),(0,i.pushSettingsDiag)(P,"migrated legacy keys",{ts:t.ts,review:t.review}),c(t),I(t)):((0,a.log)("[settings] no local blob — starting from defaults"),(0,i.pushSettingsDiag)(P,"no local blob — starting from defaults"))}catch{(0,a.logwarn)("[settings] local blob corrupted — starting from defaults"),(0,i.pushSettingsDiag)(P,"local blob corrupted — starting from defaults")}d(!0)}},[t,p,A,I]),(0,s.useEffect)(()=>{(0,i.readSettingsDiag)(P).then(e=>{let t=e.slice(-12);t.length>0&&(0,a.log)("[settings] recent diagnostics:",t)}),window.__settingsDiag=()=>(0,i.readSettingsDiag)(P).then(e=>((0,a.log)("[settings] diag history (window.__settingsDiag):",JSON.stringify(e)),e))},[]),(0,s.useEffect)(()=>{if("authenticated"!==t){x.current=null,g(!0);return}if(!p)return;let s=e?.user?.id;if(!s||x.current===s)return;x.current=s,g(!1);let n=!1;return(async()=>{try{let e=await o();if(n)return;j.current=!0;let t=e.settings_v2;if(!t||2!==t.v){(0,i.pushSettingsDiag)(P,"GET /user-settings ok — no settings_v2 row",{}),g(!0);return}c(e=>{if(t.ts<=e.ts)return(0,a.log)("[settings] hydrate SKIP cloud — cloud.ts <= local.ts",{cloudTs:t.ts,localTs:e.ts}),(0,i.pushSettingsDiag)(P,"hydrate SKIP cloud (cloud.ts <= local.ts)",{cloudTs:t.ts,localTs:e.ts,localReview:e.review}),e;let s=k({...e,...t,v:2,ts:new Date().toISOString()});(0,a.log)("[settings] hydrate APPLY cloud",{cloudTs:t.ts,localTs:e.ts,dailyNewLimit:s.review.dailyNewLimit,dayStartHour:s.review.dayStartHour}),(0,i.pushSettingsDiag)(P,"hydrate APPLY cloud",{cloudTs:t.ts,localTs:e.ts,review:s.review});try{localStorage.setItem(w,JSON.stringify(s))}catch{}return s}),g(!0)}catch(e){(0,a.logwarn)("[settings] Could not load from server:",e),(0,i.pushSettingsDiag)(P,"GET /user-settings FAILED",{error:String(e)}),g(!0)}})(),()=>{n=!0}},[t,p,e?.user?.id,o]);let O=(0,s.useCallback)(e=>{c(t=>{let s={...t,ts:new Date().toISOString(),tokenizedText:{...t.tokenizedText,...e}};return I(s),s})},[I]),D=(0,s.useCallback)(e=>{c(t=>{let s={...t,ts:new Date().toISOString(),display:{...t.display,...e}};return I(s),s})},[I]),T=(0,s.useCallback)(e=>{c(t=>{let s={...t,ts:new Date().toISOString(),playback:{...t.playback,...e}};return I(s),s})},[I]),E=(0,s.useCallback)(e=>{c(t=>{let s={...t,ts:new Date().toISOString(),review:{...t.review,...e}};return I(s),s})},[I]),_=(0,s.useCallback)(e=>{c(t=>{let s={...t,ts:new Date().toISOString(),search:{...t.search,...e}};return I(s),s})},[I]),L=(0,s.useCallback)((e,t)=>{c(s=>{let n=s.l2[e]??m,r={...s,ts:new Date().toISOString(),l2:{...s.l2,[e]:{tokenSpan:{...n.tokenSpan,...t.tokenSpan??{}},display:{...n.display,...t.display??{}},speech:{...n.speech,...t.speech??{}},content:{...n.content,...t.content??{}}}}};return I(r),r})},[I]),z=(0,s.useCallback)(e=>{c(t=>{if(t.l2[e])return t;let s=C.current,n=s&&b(s)?S({...m},s):m;s&&b(s)&&(C.current=null,(0,a.log)("[settings] applied legacy seed to first language entry:",e,JSON.stringify(s)));let r={...t,ts:new Date().toISOString(),l2:{...t.l2,[e]:n}};return I(r),r})},[I]),R=(0,s.useCallback)((t,s)=>{c(n=>{let r={...n,ts:new Date().toISOString(),languagePair:{l1:t,l2:s,updatedAt:new Date().toISOString()}};I(r);try{localStorage.setItem(w,JSON.stringify(r))}catch{}return e&&j.current&&(0,i.getOrCreateDeviceId)(P).then(e=>l({settings_v2:r,updatedAt:Date.parse(r.ts)||Date.now(),deviceId:e}).catch(()=>{})),r})},[I,e,l]);return{settings:u,loaded:p,tokenizedText:u.tokenizedText,updateTokenizedText:O,display:u.display,updateDisplay:D,playback:u.playback,updatePlayback:T,review:u.review,updateReview:E,search:u.search,updateSearch:_,cloudHydrated:h,getL2:e=>u.l2[e]??m,updateL2:L,ensureL2:z,setLanguagePair:R}}();return(0,t.jsx)(x.Provider,{value:o,children:e})},"useSettingsContext",0,function(){let e=(0,s.useContext)(x);if(!e)throw Error("useSettingsContext must be used within <SettingsProvi
1der>");return e}],259821)},810980,e=>{"use strict";let t=(0,e.i(475254).default)("BookOpen",[["path",{d:"M2 3h6a4 4 0 0 1 4 4v14a3 3 0 0 0-3-3H2z",key:"vv98re"}],["path",{d:"M22 3h-6a4 4 0 0 0-4 4v14a3 3 0 0 1 3-3h7z",key:"1cyq3y"}]]);e.s(["BookOpen",0,t],810980)},87316,e=>{"use strict";let t=(0,e.i(475254).default)("Calendar",[["path",{d:"M8 2v4",key:"1cmpym"}],["path",{d:"M16 2v4",key:"4m81vk"}],["rect",{width:"18",height:"18",x:"3",y:"4",rx:"2",key:"1hopcy"}],["path",{d:"M3 10h18",key:"8toen8"}]]);e.s(["Calendar",0,t],87316)},678745,e=>{"use strict";let t=(0,e.i(475254).default)("Check",[["path",{d:"M20 6 9 17l-5-5",key:"1gmf2c"}]]);e.s(["default",0,t])},643531,e=>{"use strict";var t=e.i(678745);e.s(["Check",()=>t.default])},664659,e=>{"use strict";var t=e.i(631171);e.s(["ChevronDown",()=>t.default])},463059,e=>{"use strict";let t=(0,e.i(475254).default)("ChevronRight",[["path",{d:"m9 18 6-6-6-6",key:"mthhwq"}]]);e.s(["ChevronRight",0,t],463059)},63209,e=>{"use strict";let t=(0,e.i(475254).default)("CircleAlert",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["line",{x1:"12",x2:"12",y1:"8",y2:"12",key:"1pkeuh"}],["line",{x1:"12",x2:"12.01",y1:"16",y2:"16",key:"4dfq90"}]]);e.s(["AlertCircle",0,t],63209)},503116,e=>{"use strict";let t=(0,e.i(475254).default)("Clock",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["polyline",{points:"12 6 12 12 16 14",key:"68esgv"}]]);e.s(["Clock",0,t],503116)},323585,e=>{"use strict";let t=(0,e.i(475254).default)("EllipsisVertical",[["circle",{cx:"12",cy:"12",r:"1",key:"41hilf"}],["circle",{cx:"12",cy:"5",r:"1",key:"gxeob9"}],["circle",{cx:"12",cy:"19",r:"1",key:"lyex9k"}]]);e.s(["MoreVertical",0,t],323585)},286536,e=>{"use strict";let t=(0,e.i(475254).default)("Eye",[["path",{d:"M2 12s3-7 10-7 10 7 10 7-3 7-10 7-10-7-10-7Z",key:"rwhkz3"}],["circle",{cx:"12",cy:"12",r:"3",key:"1v7zrd"}]]);e.s(["Eye",0,t],286536)},248256,e=>{"use strict";let t=(0,e.i(475254).default)("Globe",[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]);e.s(["Globe",0,t],248256)},763639,e=>{"use strict";let t=(0,e.i(475254).default)("Languages",[["path",{d:"m5 8 6 6",key:"1wu5hv"}],["path",{d:"m4 14 6-6 2-3",key:"1k1g8d"}],["path",{d:"M2 5h12",key:"or177f"}],["path",{d:"M7 2h1",key:"1t2jsx"}],["path",{d:"m22 22-5-10-5 10",key:"don7ne"}],["path",{d:"M14 18h6",key:"1m8k6r"}]]);e.s(["Languages",0,t],763639)},531278,e=>{"use strict";let t=(0,e.i(475254).default)("LoaderCircle",[["path",{d:"M21 12a9 9 0 1 1-6.219-8.56",key:"13zald"}]]);e.s(["Loader2",0,t],531278)},361555,e=>{"use strict";let t=(0,e.i(475254).default)("PanelRightClose",[["rect",{width:"18",height:"18",x:"3",y:"3",rx:"2",key:"afitv7"}],["path",{d:"M15 3v18",key:"14nvp0"}],["path",{d:"m8 9 3 3-3 3",key:"12hl5m"}]]);e.s(["PanelRightClose",0,t],361555)},431343,e=>{"use strict";let t=(0,e.i(475254).default)("Play",[["polygon",{points:"6 3 20 12 6 21 6 3",key:"1oa8hb"}]]);e.s(["Play",0,t],431343)},16715,e=>{"use strict";let t=(0,e.i(475254).default)("RefreshCw",[["path",{d:"M3 12a9 9 0 0 1 9-9 9.75 9.75 0 0 1 6.74 2.74L21 8",key:"v9h5vc"}],["path",{d:"M21 3v5h-5",key:"1q7to0"}],["path",{d:"M21 12a9 9 0 0 1-9 9 9.75 9.75 0 0 1-6.74-2.74L3 16",key:"3uifl3"}],["path",{d:"M8 16H3v5",key:"1cv678"}]]);e.s(["RefreshCw",0,t],16715)},514764,e=>{"use strict";let t=(0,e.i(475254).default)("Send",[["path",{d:"m22 2-7 20-4-9-9-4Z",key:"1q3vgg"}],["path",{d:"M22 2 11 13",key:"nzbqef"}]]);e.s(["Send",0,t],514764)},283086,e=>{"use strict";let t=(0,e.i(475254).default)("Sparkles",[["path",{d:"M9.937 15.5A2 2 0 0 0 8.5 14.063l-6.135-1.582a.5.5 0 0 1 0-.962L8.5 9.936A2 2 0 0 0 9.937 8.5l1.582-6.135a.5.5 0 0 1 .963 0L14.063 8.5A2 2 0 0 0 15.5 9.937l6.135 1.581a.5.5 0 0 1 0 .964L15.5 14.063a2 2 0 0 0-1.437 1.437l-1.582 6.135a.5.5 0 0 1-.963 0z",key:"4pj2yx"}],["path",{d:"M20 3v4",key:"1olli1"}],["path",{d:"M22 5h-4",key:"1gvqau"}],["path",{d:"M4 17v2",key:"vumght"}],["path",{d:"M5 18H3",key:"zchphs"}]]);e.s(["Sparkles",0,t],283086)},878894,e=>{"use strict";let t=(0,e.i(475254).default)("TriangleAlert",[["path",{d:"m21.73 18-8-14a2 2 0 0 0-3.48 0l-8 14A2 2 0 0 0 4 21h16a2 2 0 0 0 1.73-3",key:"wmoenq"}],["path",{d:"M12 9v4",key:"juzpu7"}],["path",{d:"M12 17h.01",key:"p32p05"}]]);e.s(["AlertTriangle",0,t],878894)},278716,e=>{"use strict";let t=(0,e.i(475254).default)("Video",[["path",{d:"m16 13 5.223 3.482a.5.5 0 0 0 .777-.416V7.87a.5.5 0 0 0-.752-.432L16 10.5",key:"ftymec"}],["rect",{x:"2",y:"6",width:"14",height:"12",rx:"2",key:"158x01"}]]);e.s(["Video",0,t],278716)},37727,e=>{"use strict";var t=e.i(841947);e.s(["X",()=>t.default])},803982,e=>{"use strict";e.s(["ACQUISITION_SOURCES",0,[{value:"word_of_mouth",labelKey:"option.word_of_mouth"},{value:"instagram",labelKey:"option.instagram"},{value:"bilibili",labelKey:"option.bilibili"},{value:"google_ads",labelKey:"option.google_ads"},{value:"hsk_courses",labelKey:"option.hsk_courses"},{value:"app_store",labelKey:"option.app_store"},{value:"google_play",labelKey:"option.google_play"},{value:"google_search",labelKey:"option.google_search"},{value:"youtube",labelKey:"option.youtube"},{value:"other",labelKey:"option.other"}],"ASK_AI_PREAMBLE",0,"You are the Language Player help assistant. Language Player is a language learning platform: authentic videos with interactive dual subtitles, a popup dictionary, a reader for ebooks/PDFs/images, saved words, SRS review, and device sync. Answer the question about how to use the app concisely and practically, in the user’s own language. If you don’t know, say so and point them to the documentation.","LANGS_WITH_LIVE_TV",0,["amh","ara","aze","bak","ben","bos","bul","cat","ces","cmn","cnr","dan","deu","ell","eng","est","fas","fra","fry","glg","heb","hin","hrv","hun","hye","iku","ind","isl","ita","jpn","kan","kat","kaz","kin","kor","kur","lao","lav","lit","ltz","mal","mkd","mlt","mri","nan","nep","nld","nor","pan","pol","por","pus","ron","rus","sin","slk","slv","som","spa","sqi","srp","swe","tam","tel","tgl","tha","tur","ukr","urd","vie","yue","zho"],"LANGS_YOUTUBE_SUPPORTS",0,["aa","ab","af","am","ar","as","ay","az","ba","be","bg","bh","bi","bn","bo","br","bs","ca","co","cs","cy","da","de","dz","el","en","eo","es","et","eu","fa","ff","fi","fj","fo","fr","fy","ga","gd","gl","gn","gu","ha","haw","he","hi","ho","hr","ht","hu","hy","ia","id","ie","ig","ik","is","it","iu","ja","jv","ka","kk","kl","km","kn","ko","ks","ku","ky","la","lb","ln","lo","lt","lus","lv","mai","mas","mg","mi","mk","ml","mn","mni","mo","mr","ms","mt","my","nan","nb","ne","nl","nn","no","nv","oc","om","or","pa","pap","pl","ps","pt","qu","rm","rn","ro","ru","rw","sa","sc","scn","sd","sg","sh","si","sk","sl","sm","sn","
1so","sq","sr","ss","st","su","sv","sw","ta","te","tg","th","ti","tk","tl","tlh","tn","to","tpi","tr","ts","tt","tw","ug","uk","ur","uz","ve","vi","vo","wo","xh","yi","yo","yue","zh","zu"],"SUPPORTED_L1S",0,["en","zh-Hans","zh-Hant","ar","de","es","fr","id","it","ja","ko","nl","pl","pt","ru","th","tr","vi"],"SUPPORTED_L2S",0,["ab","acf","acu","af","aib","ain","akk","am","ami","ang","ar","arc","as","ase","ay","az","ba","be","bg","bho","bn","bo","br","bs","bsk","ca","ceb","cjy","ckb","cnr","cop","cpx","crh","cs","csb","cy","czo","da","de","dsb","dz","el","en","enm","eo","es","eso","et","eu","fa","fi","fo","fr","fsl","fur","fy","ga","gan","gd","gkp","gl","gn","goh","got","grc","gsw","gu","gv","ha","hak","hbo","he","hi","hil","hne","hni","hr","hsh","hsn","hu","hy","ia","id","ig","ii","ik","ins","is","it","ja","jam","jv","ka","kab","kac","kk","kl","km","kn","ko","kok","krl","ksw","ku","kvk","ky","la","lad","lb","ln","lo","lt","ltc","lv","lzh","mai","mg","mhx","mi","min","mk","ml","mn","mni","mnp","mr","ms","mt","mxv","my","nan","nb","ne","nl","nn","no","non","nsl","nv","oc","och","ojp","om","or","osc","pa","pes","pis","pl","pms","prs","ps","pt","qu","rm","ro","ru","ryu","sa","sah","sc","scn","sco","sd","se","sh","si","sjn","sk","sl","sli","sm","so","sq","sr","srm","ss","su","sux","sv","svk","sw","ta","te","tg","th","ti","tl","tlh","tr","tsd","tt","ug","uk","ur","uz","vec","vi","vo","wo","wuu","xh","xpe","yi","yo","yue","za","zh","zu"],"getLevelFromDifficulty",0,function(e,t){if(null!=e&&t&&0!==t.length){for(let s=0;s<t.length;s++)if(e<=t[s])return s+1;return t.length}}])},480122,e=>{"use strict";let t={1:"#f8b51e",2:"#267f94",3:"#fd4f1c",4:"#bb1718",5:"#1b3e76",6:"#6a3669",7:"#10b981"},s={hsk_2010:{id:"hsk_2010",shortPrefix:"HSK",longPrefix:"HSK (2010)",version:"2010",labels:{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6"}},hsk_2025:{id:"hsk_2025",shortPrefix:"HSK",longPrefix:"HSK (2025)",version:"2025",labels:{1:"1",2:"2",3:"3",4:"4",5:"5",6:"6",7:"7-9"}},cefr:{id:"cefr",shortPrefix:"CEFR",longPrefix:"CEFR",labels:{1:"Pre-A1",2:"A1",3:"A2",4:"B1",5:"B2",6:"C1",7:"C2"}},jlpt:{id:"jlpt",shortPrefix:"JLPT",longPrefix:"JLPT",labels:{1:"Pre-N5",2:"N5",3:"N4",4:"N3",5:"N2",6:"N1"}},topik:{id:"topik",shortPrefix:"TOPIK",longPrefix:"TOPIK",labels:{1:"Pre-1",2:"1",3:"2",4:"3",5:"4",6:"5",7:"6"}},ielts:{id:"ielts",shortPrefix:"IELTS",longPrefix:"IELTS",labels:{1:"1",2:"2",3:"3.5",4:"5",5:"6.5",6:"8",7:"9"}}},n=new Map;function r(e,t){let n=s[t],r=n?.labels[e];if(void 0!==r)return{label:r,prefix:n.shortPrefix,sourceScaleId:t};let a=s.cefr,i=a.labels[e];return void 0!==i?{label:i,prefix:a.shortPrefix,sourceScaleId:"cefr"}:{label:String(e),prefix:"Level",sourceScaleId:"cefr"}}e.s(["LEVEL_HEX_COLORS",0,t,"formatNumericLevel",0,function(e,n){let{label:a,prefix:i,sourceScaleId:o}=r(e,n),l=s[o];return{short:`${i} ${a}`,long:`${l?.longPrefix??"CEFR"} ${a}`,numeric:e,hexColor:t[e]??"#6b7280"}},"formatProficiencyLevel",0,function(e,a="cefr"){let i=s[e.scale],o=i?e.scale:a,l=e.numeric??(function(e){let t=n.get(e.id);if(!t){for(let[s,n]of(t=new Map,Object.entries(e.labels)))t.set(n,Number(s));n.set(e.id,t)}return t})(s[o]).get(String(e.value)),{label:u,prefix:c,sourceScaleId:p}=r(l??0,o),d=i?.version;return{short:d?`${c}:${d} ${u}`:`${c} ${u}`,long:`${s[p].longPrefix} ${u}`,numeric:l,hexColor:l?t[l]??"#6b7280":"#6b7280"}},"getLevelLabelWithFallback",0,r,"primaryScale",0,function(e){return"zh"===e?"hsk_2010":"ja"===e?"jlpt":"ko"===e?"topik":"en"===e?"ielts":"cefr"},"shouldShowLevel",0,function(e,t){var s;return"zh"!==t.split("-")[0].toLowerCase()||"hsk_2010"===(s=e.scale)||"hsk_2025"===s}])},5978,e=>{"use strict";let t="lp_settings_diag";async function s(e,s,n){try{let r=[];try{let s=await e.getItem(t);s&&(r=JSON.parse(s))}catch{r=[]}r.push({t:new Date().toISOString(),msg:s,data:n}),await e.setItem(t,JSON.stringify(r.slice(-60)))}catch{}}async function n(e){try{let s=await e.getItem(t);return s?JSON.parse(s):[]}catch{return[]}}let r="lp_device_id";async function a(e){try{let t=await e.getItem(r);if(t)return t;let s=`d_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`;return await e.setItem(r,s),s}catch{return`d_${Date.now().toString(36)}`}}e.s(["getOrCreateDeviceId",0,a,"pushSettingsDiag",0,s,"readSettingsDiag",0,n])}]);

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.