1import{n as e}from"./rolldown-runtime-Bh1tDfsg.js";import{_ as t,d as n,h as r,p as i,r as a,t as o,x as s}from"./react-vendor-CsR3vRuk.js";import{n as c,u as l}from"./PageSeo-4DBTIjTv.js";import{A as u,D as d,g as f}from"./podcastsApi-BI3Qs991.js";import{n as p,t as m}from"./localCache-CDS0X5HG.js";import{t as h}from"./useHydrated-HxBLqPlk.js";import{n as g}from"./StationsLiveContext-CaSt7oZc.js";import{n as _,t as v}from"./artwork-CVOGnDkL.js";import{t as y}from"./NotFoundPage-Dw399hQ5.js";import{r as b}from"./PlayerContext-5MtUrUmI.js";import{n as x,t as S}from"./EqualiserBars-DA52Nrm3.js";import{t as C}from"./HydratedImg-CfIUx0-A.js";import{t as w}from"./useRenderTime-B9FyTH-9.js";import{n as T}from"./pageData-CgqHKV0t.js";var E=e(s(),1),D=120*1e3,O=[3e4,12e4];function k(e,t){let n=h(),[r,i]=(0,E.useState)(0),[a,o]=(0,E.useState)(null),s=(0,E.useCallback)(()=>i(e=>e+1),[]),c=e?`${e}#${r}`:void 0,l=(0,E.useMemo)(()=>n&&e&&!t?m(A(e),D):null,[n,e,t]);if((0,E.useEffect)(()=>{if(!e)return;if(t){p(A(e),t);return}let n=`${e}#${r}`,i=!1,a,s=t=>{d(e).then(t=>{i||(p(A(e),t),o({key:n,data:t,error:null}))}).catch(e=>{if(!i){if(!String(e).includes(`NOT_FOUND`)&&t<O.length){a=setTimeout(()=>s(t+1),O[t]);return}o({key:n,data:null,error:String(e)})}})};return s(0),()=>{i=!0,clearTimeout(a)}},[e,r,t]),t)return{data:t,loading:!1,error:null,retry:s};let u=c&&a?.key===c?a:null,f=u?.data??l;return{data:f,loading:!u&&!f,error:f?null:u?.error??null,retry:s}}function A(e){return`litt:station-stats-${e}`}var j=o();function M({stationName:e,stationGenre:t,genreColor:n,artist:r,track:i,cover:a,liveLoading:o}){return(0,j.jsxs)(`div`,{className:`rounded-2xl overflow-hidden`,style:{border:`1px solid ${n}33`},children:[(0,j.jsxs)(`div`,{className:`relative w-full overflow-hidden bg-[#17171d]`,style:{aspectRatio:`16/9`,maxHeight:`420px`},children:[a?(0,j.jsx)(`img`,{src:_(a,600),alt:i||e,fetchPriority:`high`,className:`w-full h-full object-cover`}):(0,j.jsx)(`div`,{className:`w-full h-full flex items-center justify-center`,children:(0,j.jsx)(`span`,{className:`text-6xl opacity-20`,children:`ðµ`})}),(0,j.jsx)(`div`,{className:`absolute inset-0 bg-gradient-to-t from-[#17171d] via-transparent to-transparent opacity-70`}),(0,j.jsx)(`div`,{className:`absolute top-4 left-4`,children:(0,j.jsx)(x,{})}),(0,j.jsx)(`div`,{className:`absolute bottom-3 left-4`,children:(0,j.jsx)(S,{color:n})}),o&&(0,j.jsx)(`div`,{className:`absolute bottom-0 left-0 right-0 h-[3px] bg-white/10`,children:(0,j.jsx)(`div`,{className:`h-full rounded-full animate-pulse`,style:{width:`60%`,backgroundColor:n}})})]}),(0,j.jsxs)(`div`,{className:`px-5 py-4`,style:{backgroundColor:`#17171d`,borderTop:`1px solid ${n}22`},children:[(0,j.jsx)(`p`,{className:`text-xl font-bold text-white`,children:e}),(0,j.jsx)(`p`,{className:`text-xs font-bold tracking-widest mt-0.5`,style:{color:n},children:t}),i||r?(0,j.jsxs)(`p`,{className:`text-sm text-gray-300 mt-2`,children:[(0,j.jsx)(`span`,{className:`font-semibold text-white`,children:i}),i&&r&&(0,j.jsx)(`span`,{className:`text-gray-600 mx-2`,children:`·`}),(0,j.jsx)(`span`,{className:`text-gray-400`,children:r})]}):(0,j.jsx)(`p`,{className:`text-sm text-gray-600 mt-2 italic`,children:`Loading now playingâ¦`})]})]})}function N({initial:e}){let{slug:i}=t(),o=r(),[s,d]=(0,E.useState)(!1),p=w(),{station:m,isPlaying:h,isLoading:x,playStation:S,togglePlay:T}=b(),{stations:D,loaded:O}=g(),A=(0,E.useMemo)(()=>{let e=[...D.values()],t=i?.toLowerCase();return e.find(e=>e.station_slug===i||e.station_id===i)??(t?e.find(e=>e.station_slug?.toLowerCase()===t):void 0)},[D,i]),N=A?.station_id,{data:I,loading:L,retry:R}=k(N,e),z=O&&!A;if(A?.station_slug&&i!==A.station_slug&&i!==A.station_id)return(0,j.jsx)(n,{to:{pathname:f(A.station_slug),search:o.search,hash:o.hash},replace:!0});if(z)return(0,j.jsx)(y,{});if(!A)return(0,j.jsxs)(`div`,{className:`pb-24 md:pb-8`,children:[(0,j.jsx)(c,{}),(0,j.jsxs)(`div`,{className:`max-w-[1280px] mx-auto px-6 pt-6 space-y-8`,children:[(0,j.jsx)(`div`,{className:`h-56 rounded-3xl bg-[#17171d] animate-pulse`}),(0,j.jsxs)(`div`,{className:`flex gap-8`,children:[(0,j.jsxs)(`div`,{className:`flex-1 space-y-6`,children:[(0,j.jsx)(`div`,{className:`h-64 roun
1ded-2xl bg-[#17171d] animate-pulse`}),(0,j.jsx)(`div`,{className:`space-y-2`,children:Array.from({length:6}).map((e,t)=>(0,j.jsx)(`div`,{className:`h-16 rounded-2xl bg-[#17171d] animate-pulse`},t))})]}),(0,j.jsx)(`div`,{className:`hidden lg:block w-80 space-y-4`,children:Array.from({length:6}).map((e,t)=>(0,j.jsx)(`div`,{className:`h-14 rounded-xl bg-[#17171d] animate-pulse`},t))})]})]})]});let B=P(A),{top_artists:V=[],top_tracks:H=[],recent_plays:U=[],similar_stations:W=[]}=I??{},G=B.genre_color,K=m?.id===B.id,q=K&&h,J=K&&x;return(0,j.jsxs)(`div`,{className:`pb-24 md:pb-8`,children:[(0,j.jsx)(l,{station:B}),(0,j.jsx)(`div`,{className:`max-w-[1280px] mx-auto px-6 pt-6`,children:(0,j.jsxs)(`div`,{className:`flex flex-col lg:flex-row gap-8`,children:[(0,j.jsxs)(`div`,{className:`flex-1 min-w-0 space-y-10`,children:[(0,j.jsxs)(`div`,{className:`rounded-3xl p-6 sm:p-8 relative overflow-hidden`,style:{backgroundColor:`#17171d`,border:`1px solid ${G}22`},children:[(0,j.jsx)(`div`,{className:`absolute -top-20 -right-20 w-64 h-64 rounded-full blur-3xl op
1acity-20 pointer-events-none`,style:{backgroundColor:G}}),(0,j.jsxs)(`div`,{className:`relative flex flex-col sm:flex-row gap-6`,children:[(0,j.jsx)(`div`,{className:`flex-shrink-0`,children:(0,j.jsx)(`div`,{className:`w-24 h-24 sm:w-32 sm:h-32 rounded-2xl overflow-hidden bg-white shadow-xl shadow-black/40`,children:(0,j.jsx)(`img`,{src:_(B.logo_url||B.image_url,256),onError:v(B.logo_url||B.image_url),alt:`${B.name} logo`,className:`w-full h-full object-contain p-2`})})}),(0,j.jsxs)(`div`,{className:`flex-1`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-2 text-[11px] font-bold tracking-[0.15em] text-gray-500 uppercase mb-3`,children:[(0,j.jsx)(a,{to:`/stations`,className:`hover:text-gray-300 transition-colors`,children:`ALL STATIONS`}),(0,j.jsx)(`span`,{children:`·`}),(0,j.jsx)(`span`,{style:{color:G},children:B.genre})]}),(0,j.jsxs)(`div`,{className:`flex items-center gap-2 mb-2`,children:[(0,j.jsx)(`h1`,{className:`text-3xl sm:text-4xl font-black text-white`,children:B.name}),B.is_explicit&&(0,j.jsx)(`span`,{className:`flex-shrink-0 w-6 h-6 rounded bg-red-600 text-[11px] font-bold text-white flex items-center justify-center`,children:`E`})]}),B.description&&(0,j.jsx)(`p`,{className:`text-gray-400 text-sm leading-relaxed mb-3 max-w-lg`,children:B.description}),(I||L)&&(0,j.jsx)(`p`,{className:`text-xs text-gray-500 mb-4`,children:I?(0,j.jsxs)(j.Fragment,{children:[I.distinct_artists,` distinct artists`]}):(0,j.jsx)(`span`,{"aria-hidden":`true`,className:`inline-block h-3 w-28 rounded bg-[#1e1e28] animate-pulse align-middle`})}),B.tags.length>0&&(0,j.jsx)(`div`,{className:`flex flex-wrap gap-2 mb-5`,children:B.tags.map((e,t)=>(0,j.jsx)(`span`,{className:`px-3 py-1 rounded-full text-xs font-bold tracking-wide ${t===0?`text-white`:`text-gray-300 border border-white/15 hover:border-white/30 hover:text-white transition-colors cursor-pointer`}`,style:t===0?{backgroundColor:G+`33`,border:`1px solid ${G}55`,color:G}:{},children:e},e))}),(0,j.jsxs)(`div`,{className:`flex items-center gap-3`,children:[B.stream_url&&(0,j.jsxs)(`button`,{onClick:()=>{B.stream_url&&(K?T():S({id:B.id,wpStationId:B.id,name:B.name,slug:B.slug,streamUrl:B.stream_url,premiumStreamUrl:B.premium_stream_url,imageUrl:B.image_url,genre:B.genre,genreColor:G}))},"aria-label":q?`Pause`:`Play`,className:`flex items-center gap-2.5 px-5 py-2.5 rounded-full text-sm font-bold text-white transition-all hover:opacity-90`,style:{background:G||`#8b5cf6`,boxShadow:`0 8px 24px -6px ${G||`#8b5cf6`}88`},children:[J?(0,j.jsx)(`svg`,{className:`w-4 h-4 animate-spin`,viewBox:`0 0 24 24`,"aria-hidden":`true`,children:(0,j.jsx)(`circle`,{cx:`12`,cy:`12`,r:`9`,fill:`none`,stroke:`currentColor`,strokeWidth:`2.5`,strokeLinecap:`round`,strokeDasharray:`40 60`})}):q?(0,j.jsx)(`svg`,{className:`w-4 h-4`,viewBox:`0 0 24 24`,fill:`currentColor`,"aria-hidden":`true`,children:(0,j.jsx)(`path`,{d:`M6 5h4v14H6zM14 5h4v14h-4z`})}):(0,j.jsx)(`svg`,{className:`w-4 h-4`,viewBox:`0 0 24 24`,fill:`currentColor`,"aria-hidden":`true`,children:(0,j.jsx)(`path`,{d:`M8 5v14l11-7z`})}),J?`Loadingâ¦`:q?`Pause`:`Play station`]}),(0,j.jsx)(`button`,{onClick:()=>d(e=>!e),className:`w-10 h-10 rounded-full flex items-center justify-center transition-all border ${s?`bg-[#d946ef]/20 border-[#d946ef]/50 text-[#d946ef]`:`bg-white/5 border-white/10 text-gray-400 hover:text-white hover:border-white/30`}`,"aria-label":s?`Remove from favorites`:`Add to favorites`,children:(0,j.jsx)(`svg`,{className:`w-4 h-4`,fill:s?`currentColor`:`none`,viewBox:`0 0 24 24`,stroke:`currentColor`,strokeWidth:2,children:(0,j.jsx)(`path`,{strokeLinecap:`round`,strokeLinejoin:`round`,d:`M4.318 6.318a4.5 4.5 0 000 6.364L12 20.364l7.682-7.682a4.5 4.5 0 00-6.364-6.364L12 7.636l-1.318-1.318a4.5 4.5 0 00-6.364 0z`})})})]})]})]})]}),(0,j.jsxs)(`section`,{children:[(0,j.jsxs)(`div`,{className:`mb-4`,children:[(0,j.jsx)(`p`,{className:`text-[11px] font-semibold tracking-[0.15em] text-gray-500 uppercase`,children:`ON AIR`}),(0,j.jsx)(`h2`,{className:`text-2xl font-bold text-white`,children:`Now playing`})]}),(0,j.jsx)(M,{stationName:B.name,stationGenre:B.genre,genreColor:G,artist:A.artist??``,track:A.track??``,cover:A.cover??``})]}),L&&(0,j.jsx)(F,{rows:6,rowClassName:`h-16 rounded-2xl`}),U.length>0&&(0,j.jsxs)(`section`,{children:[(0,j.jsxs)(`div`,{className:`mb-4`,children:[(0,j.jsx)(`p`,{className:`text-[11px] font-bold tracking-[0.2em] text-gray-500 uppercase mb-1`,children:`RECENTLY PLAYED`}),(0,j.jsx)(`h2`,{className:`text-xl font-bold text-white`,children:`Play history`})]}),(0,j.jsxs)(`div`,{className:`rounded-2xl overflow-hidden bg-[#17171d]`,children:[(0,j.jsxs)(`div`,{className:`hidden sm:grid sm:grid-cols-[80px_1fr_1fr] gap-4 px-5 py-3 border-b border-white/5`,children:[(0,j.jsx)(`span`,{className:`text-[11px] font-bold tracking-[0.15em] text-gray-500 uppercase`,children:`WHEN`}),(0,j.jsx)(`span`,{className:`text-[11px] font-bold tracking-[0.15em] text-gray-500 uppercase`,children:`TRACK`}),(0,j.jsx)(`span`,{className:`text-[11px] font-bold tracking-[0.15em] text-gray-500 uppercase`,children:`ARTIST`})]}),U.map((e,t)=>(0,j.jsxs)(`div`,{className:`px-4 py-3 ${t<U.length-1?`border-b border-white/5`:``}`,children:[(0,j.jsxs)(`div`,{className:`flex items-center gap-3 sm:hidden`,children:[e.cover?(0,j.jsx)(C,{src:_(e.cover,120),alt:e.title,width:40,height:40,loading:`lazy`,decoding:`async`,className:`w-10 h-10 rounded-xl object-cover flex-shrink-0`}):(0,j.jsx)(`div`,{className:`w-10 h-10 rounded-xl bg-[#1e1e28] flex items-center justify-center text-gray-600 flex-shrink-0`,children:`âª`}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(a,{to:`/tracks/${e.track_slug}`,className:`text-sm font-semibold text-white hover:text-[#a78bfa] transition-colors block truncate`,children:e.title}),(0,j.jsxs)(`p`,{className:`text-xs text-gray-500 truncate`,children:[e.artist,` · `,u(e.played_at,p)]})]})]}),(0,j.jsxs)(`div`,{className:`hidden sm:grid sm:grid-cols-[80px_1fr_1fr] gap-4 items-center`,children:[(0,j.jsx)(`span`,{className:`text-sm text-gray-500`,children:u(e.played_at,p)}),(0,j.jsxs)(`div`,{className:`flex items-center gap-3 min-w-0`,children:[e.cover?(0,j.jsx)(C,{src:_(e.cover,120),alt:e.title,width:32,height:32,loading:`lazy`,decoding:`async`,className:`w-8 h-8 rounded-lg object-cover flex-shrink-0`}):(0,j.jsx)(`div`,{className:`w-8 h-8 rounded-lg bg-[#1e1e28] flex items-center justify-center text-gray-600 flex-shrink-0 text-xs`,children:`âª`}),(0,j.jsx)(a,{to:`/tracks/${e.track_slug}`,className:`text-sm font-semibold text-white hover:text-[#a78bfa] transition-colors truncate block`,children:e.title})]}),e.artist_slug?(0,j.jsx)(a,{to:`/artists/${e.artist_slug}`,className:`text-sm text-[#8b5cf6] hover:text-[#a78bfa] transition-colors truncate block`,children:e.artist}):(0,j.jsx)(`span`,{className:`text-sm text-gray-400 truncate`,children:e.artist})]})]},e.id))]})]})]}),(0,j.jsxs)(`div`,{className:`lg:w-80 xl:w-96 flex-shrink-0 space-y-10`,children:[L&&(0,j.jsxs)(j.Fragment,{children:[(0,j.jsx)(F,{rows:5,rowClassName:`h-16 rounded-xl`}),(0,j.jsx)(F,{rows:5,rowClassName:`h-[60px] rounded-xl`})]}),!L&&!I&&(0,j.jsxs)(`div`,{className:`rounded-2xl bg-[#17171d] p-8 text-center space-y-2`,children:[(0,j.jsx)(`p`,{className:`text-2xl`,children:`ð`}),(0,j.jsx)(`p`,{className:`text-white font-semibold text-sm`,children:`Couldn't load play history and charts`}),(0,j.jsx)(`button`,{onClick:R,className:`text-[#8b5cf6] hover:text-[#a78bfa] text-sm font-semibold transition-colors`,children:`Try again`})]}),V.length>0&&(0,j.jsxs)(`section`,{children:[(0,j.jsxs)(`div`,{className:`mb-4`,children:[(0,j.jsx)(`p`,{className:`text-[11px] font-bold tracking-[0.2em] text-gray-500 uppercase mb-1`,children:`MOST PLAYED`}),(0,j.jsxs)(`h2`,{className:`text-lg font-bold text-white`,children:[`Top artists on `,B.name]})]}),(0,j.jsx)(`div`,{className:`space-y-2`,children:V.map(e=>(0,j.jsxs)(a,{to:`/artists/${e.artist_slug}`,className:`flex items-center gap-3 p-3 rounded-xl bg-[#17171d] hover:bg-[#1e1e28] transition-colors group`,children:[e.cover?(0,j.jsx)(C,{src:_(e.cover,120),alt:e.artist,width:40,height:40,loading:`lazy`,decoding:`async`,className:`w-10 h-10 rounded-lg object-cover flex-shrink-0`}):(0,j.jsx)(`div`,{className:`w-10 h-10 rounded-lg bg-[#1e1e28] flex items-center justify-center text-gray-600 flex-shrink-0 text-lg`,children:`âª`}),(0,j.jsx)(`div`,{className:`flex-1 min-w-0`,children:(0,j.jsx)(`p`,{className:`text-sm font-semibold text-white truncate group-hover:text-[#a78bfa] transition-colors`,children:e.artist})})]},e.artist_slug))})]}),H.length>0&&(0,j.jsxs)(`section`,{children:[(0,j.jsxs)(`div`,{className:`mb-4`,children:[(0,j.jsx)(`p`,{className:`text-[11px] font-bold tracking-[0.2em] text-gray-500 uppercase mb-1`,children:`CHART`}),(0,j.jsx)(`h2`,{className:`text-lg font-bold text-white`,children:`Top tracks this week`})]}),(0,j.jsx)(`div`,{className:`space-y-2`,children:H.map((e,t)=>(0,j.jsxs)(a,{to:`/tracks/${e.track_slug}`,className:`flex items-center gap-3 p-3 rounded-xl bg-[#17171d] hover:bg-[#1e1e28] transition-colors group`,children:[(0,j.jsx)(`span`,{className:`w-5 text-xs font-bold text-gray-600 flex-shrink-0 text-right`,children:t+1}),e.cover?(0,j.jsx)(C,{src:_(e.cover,120),alt:e.title,width:36,height:36,loading:`lazy`,decoding:`async`,className:`w-9 h-9 rounded-lg object-cover flex-shrink-0`}):(0,j.jsx)(`div`,{className:`w-9 h-9 rounded-lg bg-[#1e1e28] flex items-center justify-center text-gray-600 flex-shrink-0 text-xs`,children:`âª`}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(`p`,{className:`text-sm font-semibold text-white truncate group-hover:text-[#a78bfa] transition-colors`,children:e.title}),(0,j.jsx)(`p`,{className:`text-xs text-gray-500 truncate`,children:e.artist})]})]},e.track_slug))})]}),W.length>0&&(0,j.jsxs)(`section`,{children:[(0,j.jsxs)(`div`,{className:`mb-4`,children:[(0,j.jsx)(`p`,{className:`text-[11px] font-bold tracking-[0.2em] text-gray-500 uppercase mb-1`,children:`EXPLORE`}),(0,j.jsx)(`h2`,{className:`text-lg font-bold text-white`,children:`More stations`})]}),(0,j.jsx)(`div`,{className:`space-y-2`,children:W.map(e=>(0,j.jsxs)(a,{to:f(e.station_slug,e.station_id),className:`flex items-center gap-3 p-3 rounded-xl bg-[#17171d] hover:bg-[#1e1e28] transition-colors group`,children:[e.image_url?(0,j.jsx)(C,{src:_(e.image_url,80),onError:v(e.image_url),alt:e.station_name,width:40,height:40,loading:`lazy`,decoding:`async`,className:`w-10 h-10 rounded-lg object-cover flex-shrink-0`}):(0,j.jsx)(`div`,{className:`w-10 h-10 rounded-lg bg-[#1e1e28] flex items-center justify-center text-gray-600 flex-shrink-0 text-xs font-bold`,children:e.station_name.slice(0,2).toUpperCase()}),(0,j.jsxs)(`div`,{className:`flex-1 min-w-0`,children:[(0,j.jsx)(`p`,{className:`text-sm font-semibold text-white truncate group-hover:text-[#a78bfa] transition-colors`,children:e.station_name}),(0,j.jsx)(`p`,{className:`text-[11px] font-bold tracking-wide`,style:{color:e.genre_color},children:e.station_genre})]}),(0,j.jsxs)(`div`,{className:`flex items-center gap-2 flex-shrink-0`,children:[D.get(e.station_id)?.is_explicit&&(0,j.jsx)(`span`,{className:`flex items-center justify-center w-5 h-5 rounded bg-red-600 text-[10px] font-bold text-white`,children:`E`}),(0,j.jsxs)(`div`,{className:`flex items-center gap-1 text-xs text-green-400`,children:[(0,j.jsx)(`span`,{className:`w-1.5 h-1.5 rounded-full bg-green-400 animate-pulse`}),`LIVE`]})]})]},e.station_id))})]}),I&&V.length===0&&H.length===0&&I.total_plays===0&&(0,j.jsxs)(`div`,{className:`rounded-2xl bg-[#17171d] p-8 text-center space-y-2`,children:[(0,j.jsx)(`p`,{className:`text-2xl`,children:`ð`}),(0,j.jsx)(`p`,{className:`text-white font-semibold text-sm`,children:`No plays recorded yet`}),(0,j.jsx)(`p`,{className:`text-gray-500 text-xs`,children:`Analytics will appear after the station has been playing for a bit.`})]})]})]})})]})}function P(e){return{id:e.station_id,name:e.station_name,slug:e.station_slug,genre:e.station_genre,genre_color:e.genre_color,description:e.description,logo_url:e.logo_url,image_url:e.image_url,stream_url:e.stream_url,premium_stream_url:e.premium_stream_url||void 0,is_explicit:e.is_explicit,tags:e.tags}}function F({rows:e,rowClassName:t}){return(0,j.jsxs)(`div`,{"aria-hidden":`true`,children:[(0,j.jsx)(`div`,{className:`h-3 w-24 rounded bg-[#17171d] animate-pulse mb-2`}),(0,j.jsx)(`div`,{className:`h-6 w-44 rounded-lg bg-[#17171d] animate-pulse mb-4`}),(0,j.jsx)(`div`,{className:`space-y-2`,children:Array.from({length:e}).map((e,n)=>(0,j.jsx)(`div`,{className:`bg-[#17171d] animate-pulse ${t}`},n))})]})}var I=i(function({loaderData:e}){return(0,j.jsx)(N,{initial:e})});
1export{I as default,T as shouldRevalidate};
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.