diff --git a/arvo/clay.hoon b/arvo/clay.hoon deleted file mode 100644 index ce0c2c163..000000000 --- a/arvo/clay.hoon +++ /dev/null @@ -1,746 +0,0 @@ -!: -:: clay (4c), revision control -!: -|= pit=vase -=> |% -++ cult (map duct rove) :: subscriptions -++ dojo ,[p=cult q=dome] :: domestic desk state -++ gift :: out result <-$ - $% [%ergo p=@p q=@tas r=@ud] :: version update - [%note p=@tD q=tank] :: debug message - [%writ p=riot] :: response - == :: -++ kiss :: in request ->$ - $% [%font p=@p q=@tas r=@p s=@tas] :: set upstream - [%info p=@p q=@tas r=nori] :: internal edit - [%ingo p=@p q=@tas r=nori] :: internal noun edit - [%init p=@p] :: report install - [%into p=@p q=@tas r=nori] :: external edit - [%invo p=@p q=@tas r=nori] :: external noun edit - [%merg p=@p q=@tas r=mizu] :: internal change - [%plug p=@p q=@tas r=@p s=@tas] :: unset upstream - [%wart p=sock q=@tas r=path s=*] :: network request - [%warp p=sock q=riff] :: file request - == :: -++ moot ,[p=case q=case r=path s=(map path lobe)] :: stored change range -++ move ,[p=duct q=(mold note gift)] :: local move -++ nako $: gar=(map ,@ud tako) :: new ids - let=@ud :: next id - lar=(set yaki) :: new commits - bar=(set blob) :: new content - == :: -++ note :: out request $-> - $% $: %a :: to %ames - $% [%want p=sock q=path r=*] :: - == == :: - $: %c :: to %clay - $% [%font p=@p q=@tas r=@p s=@tas] :: - [%merg p=@p q=@tas r=mizu] :: - [%warp p=sock q=riff] :: - == == :: - $: %d :: - $% [%flog p=[%crud p=@tas q=(list tank)]] :: to %dill - == == :: - $: %t :: - $% [%wait p=@da] :: - [%rest p=@da] :: - == == == :: -++ sign :: in result $<- - $? $: %a :: by %ames - $% [%waft p=sock q=*] :: - [%went p=ship q=cape] :: - == == :: - $: %c :: by %clay - $% [%writ p=riot] :: - == == :: - $: %t :: - $% [%wake ~] :: timer activate - == == :: - $: @tas :: by any - $% [%crud p=@tas q=(list tank)] :: - == == == :: -++ raft :: filesystem - $: fat=(map ship room) :: domestic - hoy=(map ship rung) :: foreign - ran=rang :: hashes - sor=(map ,[p=@p q=@tas r=@p s=@tas] duct) :: upstreams - == :: -++ rave :: general request - $% [& p=mood] :: single request - [| p=moat] :: change range - == :: -++ rede :: universal project - $: lim=@da :: complete to - qyx=cult :: subscribers - ref=(unit rind) :: outgoing requests - dom=dome :: revision state - == :: -++ riff ,[p=desk q=(unit rave)] :: request/desist -++ rind :: request manager - $: nix=@ud :: request index - bom=(map ,@ud ,[p=duct q=rave]) :: outstanding - fod=(map duct ,@ud) :: current requests - haw=(map mood (unit)) :: simple cache - == :: -++ room :: fs per ship - $: hun=duct :: terminal duct - hez=(unit duct) :: sync duct - dos=(map desk dojo) :: native desk - == :: -++ rove (each mood moot) :: stored request -++ rung $: rus=(map desk rede) :: neighbor desks - == :: --- => - :::::::::::::::::::::::::::::::::::::::::::::::::::::::: - :: section 4cA, filesystem logic :: - :: - :: - :: - |% - ++ de :: per desk - |= [now=@da hun=duct hez=(unit duct)] - |= [[who=@p for=@p] syd=@ta rede ran=rang] - =* red +<+>- - =| yel=(list ,[p=duct q=gift]) - =| byn=(list ,[p=duct q=riot]) - =| vag=(list ,[p=duct q=gift]) - =| say=(list ,[p=duct q=path r=ship s=[p=@ud q=riff]]) - =| tag=(list ,[p=duct q=path c=note]) - |% - ++ abet - ^- [(list move) rede] - :_ red - ;: weld - %+ turn (flop yel) - |=([a=duct b=gift] [hun %give b]) - :: - %+ turn (flop byn) - |=([a=duct b=riot] [a %give [%writ b]]) - :: - %+ turn (flop vag) - |=([a=duct b=gift] [a %give b]) - :: - %+ turn (flop say) - |= [a=duct b=path c=ship d=[p=@ud q=riff]] - :- a - [%pass b %a %want [who c] [%q %re p.q.d (scot %ud p.d) ~] q.d] - :: - %+ turn (flop tag) - |=([a=duct b=path c=note] [a %pass b c]) - == - :: - ++ aver :: read - |= mun=mood - ^- (unit (unit ,*)) - ?: &(=(p.mun %u) !=(p.q.mun now)) :: prevent bad things - ~& [%clay-fail p.q.mun %now now] - !! - =+ ezy=?~(ref ~ (~(get by haw.u.ref) mun)) - ?^ ezy ezy - =+ nao=(~(case-to-aeon ze lim dom ran) q.mun) - :: ~& [%aver-mun nao [%from syd lim q.mun]] - ?~(nao ~ [~ (~(read-at-aeon ze lim dom ran) u.nao mun)]) - :: - ++ balk :: read and send - |= [hen=duct yon=@ud mun=mood] - ^+ +> - =+ vid=(~(read-at-aeon ze lim dom ran) yon mun) - ?~ vid (blub hen) (blab hen mun u.vid) - :: - ++ bait - |= [hen=duct tym=@da] - %_(+> tag :_(tag [hen /tyme %t %wait tym])) - :: - ++ best - |= [hen=duct tym=@da] - %_(+> tag :_(tag [hen /tyme %t %rest tym])) - :: - ++ blab :: ship result - |= [hen=duct mun=mood dat=*] - ^+ +> - +>(byn [[hen ~ [p.mun q.mun syd] r.mun dat] byn]) - :: - ++ bleb :: ship sequence - |= [hen=duct ins=@ud hip=nako] - ^+ +> - (blab hen [%w [%ud ins] ~] hip) - :: - ++ blub :: ship stop - |= hen=duct - %_(+> byn [[hen ~] byn]) - :: - ++ duce :: produce request - |= [hen=duct rov=rove] - ^+ +> - =. qyx (~(put by qyx) hen rov) - ?~ ref - (mabe rov (cury bait hen)) - |- ^+ +>+.$ :: XX why? - =+ rav=(reve rov) - =+ ^= vaw ^- rave - ?. ?=([%& %v *] rav) rav - [%| [%ud let.dom] `case`q.p.rav r.p.rav] - =+ inx=nix.u.ref - %= +>+.$ - say [[hen [(scot %ud inx) ~] for [inx syd ~ vaw]] say] - nix.u.ref +(nix.u.ref) - bom.u.ref (~(put by bom.u.ref) inx [hen vaw]) - fod.u.ref (~(put by fod.u.ref) hen inx) - == - :: - ++ ease :: release request - |= hen=duct - ^+ +> - ?~ ref - =+ rov=(~(got by qyx) hen) - =. qyx (~(del by qyx) hen) - (mabe rov (cury best hen)) - =. qyx (~(del by qyx) hen) - |- ^+ +>+.$ - =+ nux=(~(get by fod.u.ref) hen) - ?~ nux +>+.$ - %= +>+.$ - say [[hen [(scot %ud u.nux) ~] for [u.nux syd ~]] say] - fod.u.ref (~(del by fod.u.ref) hen) - bom.u.ref (~(del by bom.u.ref) u.nux) - == - :: - ++ eave :: subscribe - |= [hen=duct rav=rave] - ^+ +> - ?- -.rav - & - ?: &(=(p.p.rav %u) !=(p.q.p.rav now)) - ~& [%clay-fail p.q.p.rav %now now] - !! - =+ ver=(aver p.rav) - ?~ ver - (duce hen rav) - ?~ u.ver - (blub hen) - (blab hen p.rav u.u.ver) - :: - | - =+ nab=(~(case-to-aeon ze lim dom ran) p.p.rav) - ?~ nab - ?> =(~ (~(case-to-aeon ze lim dom ran) q.p.rav)) - (duce hen (rive rav)) - =+ huy=(~(case-to-aeon ze lim dom ran) q.p.rav) - ?: &(?=(^ huy) |((lth u.huy u.nab) &(=(0 u.huy) =(0 u.nab)))) - (blub hen) - =+ top=?~(huy let.dom u.huy) - =+ sar=(~(lobes-at-path ze lim dom ran) u.nab r.p.rav) - =+ ear=(~(lobes-at-path ze lim dom ran) top r.p.rav) - =. +>.$ - ?: =(sar ear) +>.$ - =+ fud=(~(make-nako ze lim dom ran) u.nab top) - (bleb hen u.nab fud) - ?^ huy - (blub hen) - =+ ^= ptr ^- case - [%ud +(let.dom)] - (duce hen `rove`[%| ptr q.p.rav r.p.rav ear]) - == - :: - ++ echa :: announce raw - |= [hen=duct wen=@da mer=mizu] - ^+ +> - %= +> - vag ?~(hez vag :_(vag [u.hez [%ergo who syd let.dom]])) - ::yel [[hen %note '=' %leaf ~] yel] :: XX do better - == - :: - ++ echo :: announce changes - |= [hen=duct wen=@da lem=nori] - ^+ +> - %= +> - vag ?~(hez vag :_(vag [u.hez [%ergo who syd let.dom]])) - yel - =+ pre=`path`~[(scot %p for) syd (scot %ud let.dom)] - ?- -.lem - | :_ yel - [hen %note '=' %leaf :(weld (trip p.lem) " " (spud pre))] - & |- ^+ yel - ?~ q.q.lem yel - :_ $(q.q.lem t.q.q.lem) - :- hen - :+ %note - ?-(-.q.i.q.q.lem %del '-', %ins '+', %mut ':') - [%leaf (spud (weld pre p.i.q.q.lem))] - == - == - :: - ++ edit :: apply changes - |= [wen=@da lem=nori] - ^+ +> - =+ axe=(~(edit ze lim dom ran) wen lem) - =+ `[l=@da d=dome r=rang]`+<.axe - +>.$(dom d, ran r) - :: - ++ edis :: apply subscription - |= nak=nako - ^+ +> - %= +> - hit.dom (~(uni by hit.dom) gar.nak) - let.dom let.nak - lat.ran %+ roll (~(tap in bar.nak) ~) - =< .(yeb lat.ran) - |= [sar=blob yeb=(map lobe blob)] - =+ zax=(blob-to-lobe sar) - %+ ~(put by yeb) zax sar - hut.ran %+ roll (~(tap in lar.nak) ~) - =< .(yeb hut.ran) - |= [sar=yaki yeb=(map tako yaki)] - %+ ~(put by yeb) r.sar sar - == - :: - ++ exec :: change and update - |= [hen=duct wen=@da lem=nori] - ^+ +> - (echo:wake:(edit wen lem) hen wen lem) - :: - ++ exem :: execute merge - |= [hen=duct wen=@da mer=mizu] :: aka direct change - ?. (gte p.mer let.dom) !! :: no - =. +>.$ %= +>.$ - hut.ran (~(uni by hut.r.mer) hut.ran) - lat.ran (~(uni by lat.r.mer) lat.ran) - let.dom p.mer - hit.dom (~(uni by q.mer) hit.dom) - == - =+ ^= hed :: head commit - =< q - %- ~(got by hut.ran) - %- ~(got by hit.dom) - let.dom - =. ank.dom :: real checkout - (~(checkout-ankh ze lim dom ran) hed) - (echa:wake hen wen mer) :: notify or w/e - :: - ++ knit :: external change - |= [inx=@ud rot=riot] - ^+ +> - ?> ?=(^ ref) - |- ^+ +>+.$ - =+ ruv=(~(get by bom.u.ref) inx) - ?~ ruv +>+.$ - => ?. |(?=(~ rot) ?=(& -.q.u.ruv)) . - %_ . - bom.u.ref (~(del by bom.u.ref) inx) - fod.u.ref (~(del by fod.u.ref) p.u.ruv) - == - ?~ rot - =+ rav=`rave`q.u.ruv - %= +>+.$ - lim - ?.(&(?=(| -.rav) ?=(%da -.q.p.rav)) lim `@da`p.q.p.rav) - :: - haw.u.ref - ?. ?=(& -.rav) haw.u.ref - (~(put by haw.u.ref) p.rav ~) - == - ?< ?=(%v p.p.u.rot) - =. haw.u.ref - (~(put by haw.u.ref) [p.p.u.rot q.p.u.rot q.u.rot] ~ r.u.rot) - ?. ?=(%w p.p.u.rot) +>+.$ - |- ^+ +>+.^$ - =+ nez=[%w [%ud let.dom] ~] - =+ nex=(~(get by haw.u.ref) nez) - ?~ nex +>+.^$ - ?~ u.nex +>+.^$ :: should never happen - =. +>+.^$ - =+ roo=(edis ((hard nako) u.u.nex)) - ?>(?=(^ ref.roo) roo) - %= $ - haw.u.ref (~(del by haw.u.ref) nez) - == - :: - ++ mabe :: maybe fire function - |* [rov=rove fun=$+(@da _+>.^$)] - ^+ +>.$ - %- fall :_ +>.$ - %- bind :_ fun - ^- (unit ,@da) - ?- -.rov - %& - ?. ?=(%da -.q.p.rov) ~ - `p.q.p.rov - %| - =* mot p.rov - %+ hunt - ?. ?=(%da -.p.mot) ~ - ?.((lth now p.p.mot) ~ [~ p.p.mot]) - ?. ?=(%da -.q.mot) ~ - ?.((lth now p.q.mot) [~ now] [~ p.q.mot]) - == - :: - ++ reve - |= rov=rove - ^- rave - ?: ?=(%& -.rov) rov - [%| p.p.rov q.p.rov r.p.rov] - :: - ++ rive - |= rav=[%| p=moat] - ^- rove - [%| p.p.rav q.p.rav r.p.rav ~] - :: - ++ sync - |= [hen=duct her=@p sud=@tas rot=riot] - ^+ +>.$ - ?~ rot - ~& "autosync from {} on {} to {} on {} stopped" - +>.$ - ?: ?=(%y p.p.u.rot) - %= +>.$ - yel - [[hen %note ';' %leaf "starting to sync desk {(trip syd)}..."] yel] - tag - :_ tag - :* hen /auto/(scot %p who)/[syd]/(scot %p her)/[sud]/v - %c %warp [who her] sud - `[%& %v q.p.u.rot /] - == - == - ?> ?=(%v p.p.u.rot) - =+ der=((hard dome) r.u.rot) - =+ ^= lum - ^- (unit (unit mizu)) - %^ ~(construct-merge ze now dom ran) - ?:(=(0 let.dom) %init %meld) - who - :+ syd - `saba`[her sud [0 let.der] der] - now - =. tag - :_ tag - :* hen /auto/(scot %p who)/[syd]/(scot %p her)/[sud]/y - %c %warp [who her] sud - `[%& %y [%ud +(let.der)] /] - == - ?~ lum - ~& "autosync from {} on {} to {} on {} failed" - ~& "please merge manually" - +>.$ - ?~ u.lum - ~& "autosync from {} on {} to {} on {} up to date" - +>.$ - %= +>.$ - yel - [[hen %note ';' %leaf "successfully synced desk {(trip syd)}..."] yel] - tag - :_ tag - :* hen /auto/(scot %p who)/[syd]/(scot %p her)/[sud]/merg - %c %merg who syd u.u.lum - == - == - :: - ++ wake :: update subscribers - ^+ . - =+ xiq=(~(tap by qyx) ~) - =| xaq=(list ,[p=duct q=rove]) - |- ^+ ..wake - ?~ xiq - ..wake(qyx (~(gas by *cult) xaq)) - ?- -.q.i.xiq - & - =+ cas=?~(ref ~ (~(get by haw.u.ref) `mood`p.q.i.xiq)) - ?^ cas - %= $ - xiq t.xiq - ..wake ?~ u.cas (blub p.i.xiq) - (blab p.i.xiq p.q.i.xiq u.u.cas) - == - =+ nao=(~(case-to-aeon ze lim dom ran) q.p.q.i.xiq) - ?~ nao $(xiq t.xiq, xaq [i.xiq xaq]) - $(xiq t.xiq, ..wake (balk p.i.xiq u.nao p.q.i.xiq)) - :: - | - =+ mot=`moot`p.q.i.xiq - =+ nab=(~(case-to-aeon ze lim dom ran) p.mot) - ?~ nab - $(xiq t.xiq, xaq [i.xiq xaq]) - =+ huy=(~(case-to-aeon ze lim dom ran) q.mot) - ?~ huy - =+ ptr=[%ud +(let.dom)] - %= $ - xiq t.xiq - xaq [[p.i.xiq [%| ptr q.mot r.mot s.mot]] xaq] - ..wake =+ ^= ear - (~(lobes-at-path ze lim dom ran) let.dom r.p.q.i.xiq) - ?: =(s.p.q.i.xiq ear) ..wake - =+ fud=(~(make-nako ze lim dom ran) u.nab let.dom) - (bleb p.i.xiq let.dom fud) - == - %= $ - xiq t.xiq - ..wake =- (blub:- p.i.xiq) - =+ ^= ear - (~(lobes-at-path ze lim dom ran) u.huy r.p.q.i.xiq) - ?: =(s.p.q.i.xiq ear) (blub p.i.xiq) - =+ fud=(~(make-nako ze lim dom ran) u.nab u.huy) - (bleb p.i.xiq +(u.nab) fud) - == - == - -- - :: - ++ do - |= [now=@da [who=ship him=ship] syd=@tas ruf=raft] - =+ ^= rug ^- rung - =+ rug=(~(get by hoy.ruf) him) - ?^(rug u.rug *rung) - =+ ^= red ^- rede - =+ yit=(~(get by rus.rug) syd) - ?^(yit u.yit `rede`[~2000.1.1 ~ [~ *rind] *dome]) - ((de now ~ ~) [who him] syd red ran.ruf) - :: - ++ posh - |= [him=ship syd=desk red=rede ruf=raft] - ^- raft - =+ ^= rug ^- rung - =+ rug=(~(get by hoy.ruf) him) - ?^(rug u.rug *rung) - ruf(hoy (~(put by hoy.ruf) him rug(rus (~(put by rus.rug) syd red)))) - :: - ++ un :: domestic ship - |= [who=@p now=@da ruf=raft] - =+ ^= yar ^- room - =+ yar=(~(get by fat.ruf) who) - ?~(yar *room u.yar) - |% - ++ abet ruf(fat (~(put by fat.ruf) who yar)) - ++ pish - |= [syd=@ta red=rede run=rang] - %_(+> dos.yar (~(put by dos.yar) syd [qyx.red dom.red]), ran.ruf run) - :: - ++ wake - =+ saz=(turn (~(tap by dos.yar) ~) |=([a=@tas b=*] a)) - =| moz=(list move) - =< [moz ..wake] - |- ^+ + - ?~ saz + - =+ sog=abet:wake:(di i.saz) - $(saz t.saz, moz (weld moz -.sog), ..wake (pish i.saz +.sog ran.ruf)) - :: - ++ di - |= syd=@ta - =+ ^= saq ^- dojo - =+ saq=(~(get by dos.yar) syd) - ?~(saq *dojo u.saq) - ((de now hun.yar hez.yar) [who who] syd [now p.saq ~ q.saq] ran.ruf) - -- - -- - :::::::::::::::::::::::::::::::::::::::::::::::::::::::: - :: section 4cA, filesystem vane :: - :: :: - =| :: instrument state - $: %0 :: vane version - ruf=raft :: revision tree - == :: - |= [now=@da eny=@ ski=sled] :: activate - ^? :: opaque core - |% :: - ++ call :: handle request - |= $: hen=duct - hic=(hypo (hobo kiss)) - == - => %= . :: XX temporary - q.hic - ^- kiss - ?: ?=(%soft -.q.hic) - ((hard kiss) p.q.hic) - ?: (~(nest ut -:!>(*kiss)) | p.hic) q.hic - ~& [%clay-call-flub (,@tas `*`-.q.hic)] - ((hard kiss) q.hic) - == - ^- [p=(list move) q=_..^$] - ?- -.q.hic - %init - :_ ..^$(fat.ruf (~(put by fat.ruf) p.q.hic [hen ~ ~])) - =+ bos=(sein p.q.hic) - ~& [%bos bos p.q.hic] - ?: =(bos p.q.hic) ~ - ^- (list move) - %+ turn (limo ~[%main %arvo %try]) - |= syd=@tas - [hen %pass / %c %font p.q.hic syd bos syd] - :: - %font - ?: (~(has by sor.ruf) +.q.hic) `..^$ - :_ ..^$(sor.ruf (~(put by sor.ruf) +.q.hic hen)) - :~ :* hen %pass - /auto/(scot %p p.q.hic)/[q.q.hic]/(scot %p r.q.hic)/[s.q.hic]/y - %c %warp [p.q.hic r.q.hic] s.q.hic - `[%& %y [%da now] /] - == - == - :: - ?(%info %into) - ?: =(%$ q.q.hic) - ?. ?=(%into -.q.hic) [~ ..^$] - =+ yar=(need (~(get by fat.ruf) p.q.hic)) - [~ ..^$(fat.ruf (~(put by fat.ruf) p.q.hic yar(hez [~ hen])))] - =^ mos ruf - =+ une=(un p.q.hic now ruf) - =+ ^= zat - (exec:(di:wake:une q.q.hic) hen now r.q.hic) - =+ zot=abet.zat - :- -.zot - =. une (pish:une q.q.hic +.zot ran.zat) - abet:une(hez.yar ?.(=(%into -.q.hic) hez.yar.une [~ hen])) - [mos ..^$] - :: - ?(%ingo %invo) :: not yet used - ?: =(%$ q.q.hic) - ?. ?=(%invo -.q.hic) [~ ..^$] - =+ yar=(need (~(get by fat.ruf) p.q.hic)) - [~ ..^$(fat.ruf (~(put by fat.ruf) p.q.hic yar(hez [~ hen])))] - =^ mos ruf - =+ une=(un p.q.hic now ruf) - =+ ^= zat - (exec:(di:wake:une q.q.hic) hen now r.q.hic) - =+ zot=abet:zat - :- -.zot - =. une (pish:une q.q.hic +.zot ran.zat) - abet:une(hez.yar ?.(=(%invo -.q.hic) hez.yar.une [~ hen])) - [mos ..^$] - :: - %merg :: direct state up - =^ mos ruf - =+ une=(un p.q.hic now ruf) - =+ ^= zat - (exem:(di:wake:une q.q.hic) hen now r.q.hic) - =+ zot=abet.zat - :- -.zot - =. une (pish:une q.q.hic +.zot ran.zat) - abet:une(hez.yar ?.(=(%into -.q.hic) hez.yar.une [~ hen])) - [mos ..^$] - :: - %plug - ?. (~(has by sor.ruf) +.q.hic) `..^$ - :_ ..^$(sor.ruf (~(del by sor.ruf) +.q.hic)) - =+ hyn=(~(got by sor.ruf) +.q.hic) - :~ :* hyn %pass - /auto/(scot %p p.q.hic)/[q.q.hic]/(scot %p r.q.hic)/[s.q.hic]/y - %c %warp [p.q.hic r.q.hic] s.q.hic ~ - == - :* hyn %pass - /auto/(scot %p p.q.hic)/[q.q.hic]/(scot %p r.q.hic)/[s.q.hic]/v - %c %warp [p.q.hic r.q.hic] s.q.hic ~ - == - == - :: - %warp - =^ mos ruf - ?: =(p.p.q.hic q.p.q.hic) - =+ une=(un p.p.q.hic now ruf) - =+ wex=(di:une p.q.q.hic) - =+ ^= wao - ?~ q.q.q.hic - (ease:wex hen) - (eave:wex hen u.q.q.q.hic) - =+ ^= woo - abet:wao - [-.woo abet:(pish:une p.q.q.hic +.woo ran.wao)] - =+ wex=(do now p.q.hic p.q.q.hic ruf) - =+ ^= woo - ?~ q.q.q.hic - abet:(ease:wex hen) - abet:(eave:wex hen u.q.q.q.hic) - [-.woo (posh q.p.q.hic p.q.q.hic +.woo ruf)] - [mos ..^$] - :: - %wart - ?> ?=(%re q.q.hic) - =+ ryf=((hard riff) s.q.hic) - :_ ..^$ - :~ :- hen - :^ %pass [(scot %p p.p.q.hic) (scot %p q.p.q.hic) r.q.hic] - %c - [%warp [p.p.q.hic p.p.q.hic] ryf] - == - == - :: - ++ doze - |= [now=@da hen=duct] - ^- (unit ,@da) - ~ - :: - ++ load - |= old=[%0 ruf=raft] - ^+ ..^$ - ..^$(ruf ruf.old) - :: - ++ scry :: inspect - |= [fur=(unit (set monk)) ren=@tas his=ship syd=desk lot=coin tyl=path] - ^- (unit (unit (pair mark ,*))) - =+ got=(~(has by fat.ruf) his) - =+ luk=?.(?=(%$ -.lot) ~ ((soft case) p.lot)) - ?~ luk [~ ~] - ?: =(%$ ren) - [~ ~] - =+ run=((soft care) ren) - ?~ run [~ ~] - %+ bind - %. [u.run u.luk tyl] - =< aver - ?: got - (di:(un his now ruf) syd) - (do now [his his] syd ruf) - |=(a=(unit) (bind a |=(b=* [%noun b]))) - :: - ++ stay [%0 ruf] - ++ take :: accept response - |= [tea=wire hen=duct hin=(hypo sign)] - ^- [p=(list move) q=_..^$] - ?: ?=([%auto @ @ @ @ ?(%y %v) ~] tea) - ?> ?=(%writ -.+.q.hin) - =+ our=(slav %p i.t.tea) - =* sud i.t.t.tea - =+ her=(slav %p i.t.t.t.tea) - =* syd i.t.t.t.t.tea - =+ une=(un our now ruf) - =+ wex=(di:une syd) - =+ wao=(sync:wex hen her sud p.q.hin) - =+ woo=abet:wao - [-.woo ..^$(ruf abet:(pish:une syd +.woo ran.wao))] - ?- -.+.q.hin - %crud - [[[hen %slip %d %flog +.q.hin] ~] ..^$] - :: - %waft - ?> ?=([@ @ ~] tea) - =+ syd=(need (slaw %tas i.tea)) - =+ inx=(need (slaw %ud i.t.tea)) - =+ ^= zat - =< wake - (knit:(do now p.+.q.hin syd ruf) [inx ((hard riot) q.+.q.hin)]) - =^ mos ruf - =+ zot=abet.zat - [-.zot (posh q.p.+.q.hin syd +.zot ruf)] - [mos ..^$(ran.ruf ran.zat)] :: merge in new obj - :: - %wake - =+ dal=(turn (~(tap by fat.ruf) ~) |=([a=@p b=room] a)) - =| mos=(list move) - |- ^- [p=(list move) q=_..^^$] - ?~ dal [mos ..^^$] - =+ une=(un i.dal now ruf) - =^ som une wake:une - $(dal t.dal, ruf abet:une, mos (weld som mos)) - :: - %writ - ?> ?=([@ @ *] tea) - =+ our=(need (slaw %p i.tea)) - =+ him=(need (slaw %p i.t.tea)) - :_ ..^$ - :~ :- hen - [%pass ~ %a [%want [our him] [%r %re %c t.t.tea] p.+.q.hin]] - == - :: - %went - ?: =(%good q.+.q.hin) [~ ..^$] - ~& [%clay-lost p.+.q.hin tea] - [~ ..^$] - == - -- diff --git a/arvo/doll.hoon b/arvo/doll.hoon deleted file mode 100644 index b16fef4b7..000000000 --- a/arvo/doll.hoon +++ /dev/null @@ -1,758 +0,0 @@ -!: -:: dill (4d), terminal handling -:: -|= pit=vase -=> |% :: interface tiles -++ gift :: out result <-$ - $% [%bbye ~] :: reset prompt - [%blit p=(list blit)] :: terminal output - [%init p=@p] :: report install - [%logo @] :: logout - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: - == :: -++ kiss :: in request ->$ - $% [%belt p=belt] :: terminal input - [%blew p=blew] :: terminal config - [%boot p=*] :: weird %dill boot - [%crud p=@tas q=(list tank)] :: error with trace - [%flog p=flog] :: wrapped error - [%flow p=*] :: forward compat - [%hail ~] :: terminal refresh - [%hook ~] :: this term hung up - [%harm ~] :: all terms hung up - [%init p=ship] :: after gall ready - [%noop ~] :: no operation - [%talk p=tank] :: - [%text p=tape] :: - == :: -++ flog :: sent to %dill - $% [%crud p=@tas q=(list tank)] :: - [%text p=tape] :: - == :: -++ mess :: message to terminal - $% [%term-ctrl p=(hypo ,%hail)] :: - [%term-in p=(hypo term-in)] :: - == :: -++ move ,[p=duct q=(mold note gift)] :: local move -++ note :: out request $-> - $% $: %a :: - $% [%make p=(unit ,@t) q=@ud r=@ s=?] :: - [%sith p=@p q=@uw r=?] :: - == == :: - $: %c :: - $% [%warp p=sock q=riff] :: - == == :: - $: %d :: - $% [%crud p=@tas q=(list tank)] :: - [%text p=tape] :: - [%logo ~] :: - == == :: - $: %g :: - $% [%mess p=[p=ship q=path] q=ship r=mess] :: - [%nuke p=[p=ship q=path] q=ship] :: - [%show p=[p=ship q=path] q=ship r=path] :: - [%took p=[p=ship q=path] q=ship] :: - == == :: - $: %t :: - $% [%wait p=@da] :: - == == == :: -++ riff ,[p=desk q=(unit rave)] :: see %clay -++ sign :: in result $<- - $? - $: %c :: - $% [%writ p=riot] :: - == == :: - $: %g :: - $% [%logo p=@] :: - [%mean p=ares] :: - [%nice ~] :: - $: %rush :: - $% [%term-line q=term-line] :: - [%hymn q=manx] :: - == == :: - [%verb ~] :: - [%sage p=path q=*] :: - [%veer p=@ta q=path r=@t] :: - [%vega p=path] :: - == == :: - $: %t :: - $% [%wake ~] :: - == == - $: @tas :: by any - $% [%crud p=@tas q=(list tank)] :: - [%init p=@p] :: - [%note p=@tD q=tank] :: - == == == :: -++ term-in :: - $: pax=path :: - $= jof :: - $% [%line p=cord] :: - [%res p=span] :: - [%cmd p=char] :: - [%type p=?] :: - == == :: -++ term-line ,[p=[p=cord q=prom r=cord] q=(list cord) r=(list tark)] -++ tark ?(tank [%stem p=@da q=tank r=tank]) :: -:::::::: :: dill tiles -++ bein :: terminal control - $: $: bul=@ud :: buffer length - bus=@ud :: cursor in buffer - but=(list ,@c) :: buffer text - buy=prom :: input style - == :: - $: hiz=@ud :: history depth - hux=path :: history path - hym=(map ,@ud (list ,@c)) :: history overlay - hyt=hist :: history object - hyr=(unit (list ,@c)) :: history search - == :: - $: pol=@ud :: length of prompt - pot=tape :: prompt text - == :: - == :: -++ blew ,[p=@ud q=@ud] :: columns rows -++ belt :: raw console input - $% [%aro p=?(%d %l %r %u)] :: arrow key - [%bac ~] :: true backspace - [%ctl p=@ud] :: control-key - [%del ~] :: true delete - [%met p=@ud] :: meta-key - [%ret ~] :: return - [%txt p=(list ,@c)] :: utf32 text - == :: -++ blit :: raw console output - $% [%bel ~] :: make a noise - [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%lin p=(list ,@c)] :: set current line - [%mor ~] :: newline - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - == :: -++ blot :: kill ring - $: p=@ud :: length - q=@ud :: depth - r=(list (list ,@c)) :: kills - == :: -++ blur ,[p=@ud q=(unit bein) r=blot] :: columns, prompt -++ kyev :: - $: p=(set ?(%ctrl %shift %alt %meta)) :: - q=$|(cord [%act speck]) :: - == :: -++ speck :: - $? %ctrl %shift %alt %meta %entr %esc :: - %caps %uncap %pgup %pgdn %home %end :: - %baxp %del %ins %up %down %left :: - %right :: - == :: -++ yard :: terminal state - $: p=? :: verbose - q=blur :: display state - r=(map path hist) :: history - s=[p=? q=@da] :: typing?/last typed - == :: - :: XX LEGACY 12-16-2014 -++ yord :: old terminal state - $: p=? :: verbose - q=blur :: display state - r=(map path hist) :: history - == :: --- => -|% -++ dy - |= [hen=duct our=ship now=@da def=(unit duct) dug=(map duct yard)] - =+ ^= yar ^- yard - =+ yur=(~(get by dug) hen) - ?^ yur u.yur - ?^ def (~(got by dug) u.def) - [& [80 ~ *blot] ~ | *@da] - =| mos=(list move) - |% - ++ beep (curb [[%bel ~] ~]) :: send beep - ++ curb :: send blits - |= wab=(list blit) - ^+ +> - ?~ wab +> - +>(mos [[hen [%give %blit (flop wab)]] mos]) - :: - ++ wod :: word forward - |= bed=bein - ^- @ud - ?: =(bul.bed bus.bed) - bus.bed - ?: =(' ' (snag bus.bed but.bed)) - $(bus.bed +(bus.bed)) - |- - ^- @ud - ?: =(bul.bed bus.bed) - bus.bed - ?: =(' ' (snag bus.bed but.bed)) - bus.bed - $(bus.bed +(bus.bed)) - :: - ++ wob :: word backward - |= bed=bein - ^- @ud - ?: =(0 bus.bed) - bus.bed - ?: =(' ' (snag (dec bus.bed) but.bed)) - $(bus.bed (dec bus.bed)) - |- - ^- @ud - ?: =(0 bus.bed) - bus.bed - ?: =(' ' (snag (dec bus.bed) but.bed)) - bus.bed - $(bus.bed (dec bus.bed)) - :: - ++ edit :: change the bed - |= bed=bein - ^+ +> - =. q.q.yar [~ bed] - ?> ?=(^ q.q.yar) - %- curb - |- ^- (list blit) - ?^ hyr.u.q.q.yar - =+ ris=:(weld "(reverse-i-search)'" (tufa u.hyr.u.q.q.yar) "': ") - %= $ - pot.bed ris - pol.bed (lent ris) - hyr.u.q.q.yar ~ - == - :~ [%hop (add pol.bed bus.bed)] - :- %lin - %+ weld pot.bed - ?- buy.bed - %none but.bed - %text but.bed - %pass `(list ,@)`(runt [(lent but.bed) '*'] ~) - == - == - :: - ++ fume :: print tank, prefix - |= [pef=@tD tac=tank] - ^+ +> - =+ wol=(~(win re tac) 2 p.q.yar) - %- furl - %+ turn wol - |= a=tape ^- tape - ?> ?=([@ @ *] a) - [pef ' ' t.t.a] - :: - ++ furl :: print wall - |= wol=(list tape) - ^+ +> - =. +> - %- curb - %- flop - |- ^- (list blit) - ?~ wol ~ - [[%lin (tuba i.wol)] [%mor ~] $(wol t.wol)] - ?~ q.q.yar +> - (edit(q.q.yar ~) u.q.q.yar) - :: - ++ gore :: move in history - |= hup=@ud - ^+ +> - =+ but=(goth hup) - =+ bul=(lent but) - %- edit - ?> ?=(^ q.q.yar) - %= u.q.q.yar - hiz hup - hym %+ ~(put by hym.u.q.q.yar) - hiz.u.q.q.yar - but.u.q.q.yar - bus bul - bul bul - but but - == - :: - ++ goth :: extract history - |= hup=@ud - ?> ?=(^ q.q.yar) - =+ byt=(~(get by hym.u.q.q.yar) hup) - ?^ byt u.byt - (tuba (rip 3 (snag hup q.hyt.u.q.q.yar))) - :: - ++ kill :: add to kill ring - |= txt=(list ,@c) - ^+ +> - => ?. =(16 p.r.q.yar) . - .(p.r.q.yar 15, r.r.q.yar (scag 15 r.r.q.yar)) - %= +> - p.r.q.yar +(p.r.q.yar) - q.r.q.yar 0 - r.r.q.yar [txt r.r.q.yar] - == - :: - ++ look :: search in history - |= [hup=@ud txt=(list ,@c)] - ^+ +> - =+ ^= beg - |= [a=(list ,@c) b=(list ,@c)] ^- ? - ?~(a & ?~(b | &(=(i.a i.b) $(a t.a, b t.b)))) - =+ ^= mid - |= [a=(list ,@c) b=(list ,@c)] ^- ? - ?~(a & ?~(b | |((beg a b) $(b t.b)))) - ?> ?=(^ q.q.yar) - ?: =(hup p.hyt.u.q.q.yar) - beep - =+ but=(goth hup) - ?: (mid txt but) - (gore(hyr.u.q.q.yar [~ txt]) hup) - $(hup +(hup)) - :: - ++ leap :: accept response - |= [tea=wire sih=sign] - ^+ +> - ?- -.+.sih - %crud :: error trace - =. q.+.sih [[%leaf (trip p.+.sih)] q.+.sih] - |- ^+ +>.^$ - ?~ q.+.sih +>.^$ - (fume:$(q.+.sih t.q.+.sih) '!' `tank`i.q.+.sih) - :: - %mean ~& %dill-mean +>.$ - %nice +>.$ - %note ?.(p.yar +>.$ (fume p.+.sih q.+.sih)) :: debug message - ?(%rush %rust) :: XX reset prompt - =. mos :_(mos [hen %pass tea %g %took [our /terminal] our]) - ?> ?=(%term-line +>-.sih) - =. +>.$ - =+ lis=(scag 1.000 r.q.sih) - =- (furl (zing (turn (flop lis) -))) - |= a=tark - ^- wall - ?+ -.a (~(win re a) 0 p.q.yar) - %stem - ?: =(q.s.yar p.a) ~ - ~[(welp ~(ram re q.a) ~(ram re r.a))] - == - ?. (levy r.q.sih |=(a=tark ?=(%stem -.a))) - +>.$ :: XX separate prompt/history messages - %- edit - =| bed=bein - =+ ^= hyt ^- hist - =+ hyt=(~(get by r.yar) /) - ?~(hyt *hist u.hyt) - ?: &(?=(^ q.q.yar) =(/ hux.u.q.q.yar)) - =+ bun=(rip 5 (turf r.p.q.sih)) - %= u.q.q.yar - bul ?~ r.p.q.sih bul.u.q.q.yar (lent bun) - bus ?~ r.p.q.sih bus.u.q.q.yar (lent bun) - but ?~ r.p.q.sih but.u.q.q.yar bun - hyt [+(p.hyt) [%$ q.hyt]] - pot (trip p.p.q.sih) - pol (met 3 p.p.q.sih) - buy q.p.q.sih - == - %_ bed - bul (met 3 r.p.q.sih) - bus (met 3 r.p.q.sih) - but (rip 3 r.p.q.sih) - buy q.p.q.sih - hux / - hiz 0 - hyt [+(p.hyt) [%$ q.hyt]] - pot (trip p.p.q.sih) - pol (met 3 p.p.q.sih) - == - :: - %sage :: write a jamfile - %= +>.$ - mos :_(mos [hen [%give %blit [%sag p.+.sih q.+.sih] ~]]) - == - ?(%init %logo %veer %vega %verb) :: drop-throughs - +>(mos :_(mos [hen %give +.sih])) - %writ :: file exists - %_ +>.$ - mos - :_ mos - [hen %pass /term-show %g %show [our /terminal] our /lines] - == - :: - %wake - ?: (lte (sub now ~s15) q.s.yar) - %_ +>.$ - mos - :_ mos - [hen %pass /activity %t %wait (add q.s.yar ~s15)] - == - %_ +>.$ - p.s.yar | - mos :_(mos (poke %term-in -:!>(*term-in) / %type %|)) - == - == - :: - ++ lear :: handle request - |= kyz=kiss - ^+ +> - ?- -.kyz - %flog !! - %noop +> - %belt :: terminal input - =. +>.$ - ?. ?=(?(%bac %del %ret %txt) -.p.kyz) +>.$ - ?: p.s.yar +>.$(s.yar [& now]) - %_ +>.$ - s.yar [& now] - mos - :_ :_ mos - [hen %pass /activity %t %wait (add ?:(p.s.yar q.s.yar now) ~s15)] - (poke %term-in -:!>(*term-in) / %type %&) - == - ?~ q.q.yar - %^ furl - "Downloading files from ticketing ship, please wait until" - "a prompt shows up. This could take several minutes." - ~ - ?^ hyr.u.q.q.yar :: live search - ?+ p.kyz $(hiz.u.q.q.yar 0, hyr.u.q.q.yar ~) - [%bac *] - ?: =(~ u.hyr.u.q.q.yar) - (curb [[%bel ~] ~]) - %- edit - %= u.q.q.yar - hyr [~ (scag (dec (lent u.hyr.u.q.q.yar)) u.hyr.u.q.q.yar)] - == - :: - [%txt *] (look hiz.u.q.q.yar (weld u.hyr.u.q.q.yar p.p.kyz)) - [%ctl %g] (edit u.q.q.yar(bul 0, bus 0, but ~, hiz 0, hyr ~)) - [%ctl %r] - ?: =(p.hyt.u.q.q.yar hiz.u.q.q.yar) - beep - (look +(hiz.u.q.q.yar) u.hyr.u.q.q.yar) - == - ?- -.p.kyz - %aro :: arrow - ?- p.p.kyz - %d :: down - ?: =(0 hiz.u.q.q.yar) - beep - (gore (dec hiz.u.q.q.yar)) - :: - %l :: left - ?: =(0 bus.u.q.q.yar) - beep - (edit u.q.q.yar(bus (dec bus.u.q.q.yar))) - :: - %r :: right - ?: =(bul.u.q.q.yar bus.u.q.q.yar) - beep - (edit u.q.q.yar(bus +(bus.u.q.q.yar))) - :: - %u - =+ hup=+(hiz.u.q.q.yar) - ?: =(hup p.hyt.u.q.q.yar) - beep - (gore hup) - == - :: - %bac :: backspace - ^+ +>.$ - ?: =(0 bus.u.q.q.yar) - (curb `(list blit)`[[%bel ~] ~]) - %- edit - %= u.q.q.yar - bus (dec bus.u.q.q.yar) - bul (dec bul.u.q.q.yar) - but - %+ weld - (scag (dec bus.u.q.q.yar) but.u.q.q.yar) - (slag bus.u.q.q.yar but.u.q.q.yar) - == - :: - %ctl :: control - ?+ p.p.kyz - beep - %a (edit u.q.q.yar(bus 0)) - %b $(kyz [%belt %aro %l]) - %d ?: ?& =(0 bul.u.q.q.yar) - =(0 bus.u.q.q.yar) - == - +>.$(mos :_(mos (poke %term-in -:!>(*term-in) / %cmd %d))) - $(kyz [%belt %del ~]) - %e (edit u.q.q.yar(bus bul.u.q.q.yar)) - %f $(kyz [%belt %aro %r]) - %g +>.$(mos :_(mos (poke %term-in -:!>(*term-in) / %cmd %g))) - %k ?: =(bul.u.q.q.yar bus.u.q.q.yar) - beep - => .(+>.$ (kill (slag bus.u.q.q.yar but.u.q.q.yar))) - %- edit - ?> ?=(^ q.q.yar) - %= u.q.q.yar - bul bus.u.q.q.yar - but (scag bus.u.q.q.yar but.u.q.q.yar) - == - %t ?: (lth bul.u.q.q.yar 2) - beep - =+ ^= pos - ?: =(bul.u.q.q.yar bus.u.q.q.yar) - (sub bus.u.q.q.yar 2) - ?: =(0 bus.u.q.q.yar) - bus.u.q.q.yar - (dec bus.u.q.q.yar) - %- edit - %= u.q.q.yar - bus (add 2 pos) - but %+ weld - %+ weld - (scag pos but.u.q.q.yar) - ^- (list ,@c) :+ - (snag +(pos) but.u.q.q.yar) - (snag pos but.u.q.q.yar) - ~ - (slag (add 2 pos) but.u.q.q.yar) - == - %l +>.$(mos :_(mos [hen %give %blit [[%clr ~] ~]])) - %n $(kyz [%belt %aro %d]) - %o %_ +>.$ - mos - :_ :_ mos - [hen %pass /term-show %g %nuke [our /terminal] our] - [hen %pass /term-show %g %show [our /terminal] our /lines] - == - %p $(kyz [%belt %aro %u]) - %u ?: =(0 bus.u.q.q.yar) - beep - => .(+>.$ (kill (scag bus.u.q.q.yar but.u.q.q.yar))) - %- edit - ?> ?=(^ q.q.yar) - %= u.q.q.yar - bus 0 - bul (sub bul.u.q.q.yar bus.u.q.q.yar) - but (slag bus.u.q.q.yar but.u.q.q.yar) - == - %r (edit u.q.q.yar(hyr [~ ~])) - %w ?: =(0 bus.u.q.q.yar) - beep - =+ bow=(wob u.q.q.yar) - =+ sow=(sub bus.u.q.q.yar bow) - => .(+>.$ (kill (swag [bow sow] but.u.q.q.yar))) - %- edit - ?> ?=(^ q.q.yar) - %= u.q.q.yar - bus bow - bul (sub bul.u.q.q.yar sow) - but %+ welp - (scag bow but.u.q.q.yar) - (slag bus.u.q.q.yar but.u.q.q.yar) - == - %x +>.$(mos :_(mos (poke %term-in -:!>(*term-in) / %cmd %x))) - %y ?: =(0 p.r.q.yar) - beep - $(kyz [%belt %txt (snag q.r.q.yar r.r.q.yar)]) - == - :: - %del :: delete - ?: =(bul.u.q.q.yar bus.u.q.q.yar) - beep - %- edit - %= u.q.q.yar - bul (dec bul.u.q.q.yar) - but - %+ weld - (scag bus.u.q.q.yar but.u.q.q.yar) - (slag +(bus.u.q.q.yar) but.u.q.q.yar) - == - :: - %met :: meta - ?+ p.p.kyz - beep - %f - ?: =(bul.u.q.q.yar bus.u.q.q.yar) - beep - (edit u.q.q.yar(bus (wod u.q.q.yar))) - :: - %b - ?: =(0 bus.u.q.q.yar) - beep - (edit u.q.q.yar(bus (wob u.q.q.yar))) - :: - %y - ?: =(0 p.r.q.yar) - beep - =+ dol=(snag q.r.q.yar r.r.q.yar) - =+ leo=(lent dol) - ?. (gte bus.u.q.q.yar leo) - beep - =+ pey=(sub bus.u.q.q.yar leo) - ?. =(dol (swag [pey leo] but.u.q.q.yar)) - beep - =. q.r.q.yar ?:(=(p.r.q.yar +(q.r.q.yar)) 0 +(q.r.q.yar)) - =+ ney=(snag q.r.q.yar r.r.q.yar) - =+ lye=(lent ney) - %- edit - %= u.q.q.yar - bus (sub (add bus.u.q.q.yar lye) leo) - bul (sub (add bul.u.q.q.yar lye) leo) - but %+ weld - (scag pey but.u.q.q.yar) - %+ weld - `(list ,@c)`ney :: XX weird fuse-loop - (slag bus.u.q.q.yar but.u.q.q.yar) - == - == - :: - %ret :: return - ?: =(%none buy.u.q.q.yar) beep - =+ jab=(rap 3 (tufa but.u.q.q.yar)) - %= +>.$ - q.q.yar ~ - r.yar - ?: |(=(%$ jab) =(%pass buy.u.q.q.yar)) - r.yar - %+ ~(put by r.yar) - hux.u.q.q.yar - [p.hyt.u.q.q.yar [jab ?~(q.hyt.u.q.q.yar ~ +.q.hyt.u.q.q.yar)]] - :: - mos - :* (poke %term-ctrl -:!>(%hail) %hail) - [hen %give [%bbye ~]] - (poke %term-in -:!>(*term-in) / %line jab) - [hen %give [%blit [[%mor ~] ~]]] - mos - == - == - :: - %txt :: text keys - ?: =(%none buy.u.q.q.yar) beep - =+ let=(lent p.p.kyz) - %- edit - %= u.q.q.yar - bus (add let bus.u.q.q.yar) - bul (add let bul.u.q.q.yar) - but - ;: weld - (scag bus.u.q.q.yar but.u.q.q.yar) - p.p.kyz - (slag bus.u.q.q.yar but.u.q.q.yar) - == - == - == - :: - %blew +>.$(p.q.yar p.p.kyz) :: window size - %boot - %= +>.$ - mos - :_(mos [hen %pass ~ (note %a p.kyz)]) - == - :: - %crud :: error trace - =. q.kyz [[%leaf (trip p.kyz)] q.kyz] - |- ^+ +>.^$ - ?~ q.kyz +>.^$ - (fume:$(q.kyz t.q.kyz) '!' `tank`i.q.kyz) - :: - %flow - +>.$ - :: - %hail :: refresh - +>.$ - ::+>.$(mos :_(mos (poke %term-ctrl -:!>(%hail) %hail))) - :: - %harm :: all terms hung up - =+ nug=((map duct yard) [[hen (~(get by dug) hen)] ~ ~]) - ^+ +>.$ - %= +>.$ - dug nug - ::S mos :_(mos [hen %pass ~ %b kyz]) - == - :: - %hook :: this term hung up - ~& %dill-hook-not-implemented - +>.$ - ::S +>.$(dug (~(del by dug) hen), mos :_(mos [hen %pass ~ %b kyz])) - :: - %init - =. def `(fall def +.hen) - %= +>.$ - our p.kyz - mos - :_ mos - [(need def) %pass / %c %warp [p.kyz p.kyz] %main `[%& %y [%ud 1] /]] - == - :: - %talk (furl (~(win re p.kyz) 0 p.q.yar)) :: program output - %text $(kyz [%talk %leaf p.kyz]) :: simple message - == - :: - ++ poke - |= msg=mess - ^- move - :^ hen %pass /term-mess - :^ %g %mess [our /terminal] - :- our msg - :: - ++ yerk :: complete core - ^- [p=(list move) q=ship r=(unit duct) s=(map duct yard)] - :^ (flop mos) our def - (~(put by dug) hen yar) - -- --- -=| $: %1 :: - our=ship :: - def=(unit duct) :: - dug=(map duct yard) :: - == :: -|= [now=@da eny=@ ski=sled] :: current invocation -|% :: poke/peek pattern -++ call :: handle request - |= $: hen=duct - hic=(hypo (hobo kiss)) - == - ^- [p=(list move) q=_..^$] - => %= . :: XX temporary - q.hic - ^- kiss - ?: ?=(%soft -.q.hic) - :: ~& [%dill-call-soft (,@tas `*`-.p.q.hic)] - ((hard kiss) p.q.hic) - ?: (~(nest ut -:!>(*kiss)) | p.hic) q.hic - ~& [%dill-call-flub (,@tas `*`-.q.hic)] - ((hard kiss) q.hic) - == - ?: ?=(%flog -.q.hic) - :_ ..^$ - %+ turn (~(tap by dug) *(list ,[p=duct q=yard])) - |=([a=duct b=yard] [a %slip %d p.q.hic]) - =+ res=yerk:(lear:(dy hen our now def dug) q.hic) - [-.res ..^$(our +<.res, dug +>+.res, def +>-.res)] -:: -++ doze - |= [now=@da hen=duct] - ^- (unit ,@da) - ~ -:: -++ load :: XX LEGACY 12-16-2014 - |= $= old - $% [%0 our=ship def=(unit duct) dug=(map duct yord)] - [%1 our=ship def=(unit duct) dug=(map duct yard)] - == - ^+ ..^$ - ?- -.old - %1 %_(..^$ our our.old, def def.old, dug dug.old) - %0 %= $ - old - %= old - - %1 - dug (~(run by dug.old) |=(yor=yord [p q r | *@da]:yor)) - == - == - == -:: -++ scry - |= [fur=(unit (set monk)) ren=@tas his=ship syd=desk lot=coin tyl=path] - ^- (unit (unit (pair mark ,*))) - [~ ~ [%tank >dug<]] -:: -++ stay [%1 our def dug] -++ take :: process move - |= [tea=wire hen=duct hin=(hypo sign)] - ^- [p=(list move) q=_..^$] - =+ res=yerk:(leap:(dy hen our now def dug) tea q.hin) - [-.res ..^$(our +<.res, dug +>+.res, def +>-.res)] --- diff --git a/arvo/dull.hoon b/arvo/dull.hoon deleted file mode 100644 index b0a815b5b..000000000 --- a/arvo/dull.hoon +++ /dev/null @@ -1,345 +0,0 @@ -!: -:: dill (4d), terminal handling -:: -|= pit=vase -=> |% :: interface tiles -++ axle :: all dill state - $: %2 :: - ore=(unit ship) :: identity once set - hey=(unit duct) :: default duct - dug=(map duct axon) :: conversations - == :: -++ axon :: dill per duct - $: ram=term :: console program - wid=_80 :: terminal width - pos=@ud :: cursor position - see=(list ,@c) :: current line - == :: --- :: -=> |% :: console protocol -++ console-action :: console to app - $% [%det console-change] :: edit prompt line - [%inn ~] :: enter session - [%out ~] :: exit session - [%ret ~] :: submit and clear - == :: -++ console-buffer (list ,@c) :: command state -++ console-change :: network change - $: ler=console-clock :: destination clock - haw=@uvH :: source hash - ted=console-edit :: state change - == :: -++ console-clock ,[own=@ud his=@ud] :: vector clock -++ console-edit :: shared state change - $% [%del p=@ud] :: delete one at - [%ins p=@ud q=@c] :: insert at - [%mor p=(list console-edit)] :: combination - [%nop ~] :: no-op - [%set p=console-buffer] :: discontinuity - == :: -++ console-effect :: app to console - $% [%bel ~] :: beep - [%blk p=@ud q=@c] :: blink/match char at - [%clr ~] :: clear screen - [%det console-change] :: edit input - [%nex ~] :: save and clear input - [%tan p=(list tank)] :: classic tank - :: [%taq p=tanq] :: modern tank - [%txt p=tape] :: text line - == :: -++ dill-belt :: console input - $% [%aro p=?(%d %l %r %u)] :: arrow key - [%bac ~] :: true backspace - [%cru p=@tas q=(list tank)] :: echo error - [%ctl p=@ud] :: control-key - [%del ~] :: true delete - [%met p=@ud] :: meta-key - [%ret ~] :: return - [%rez p=@ud q=@ud] :: resize, cols, rows - [%txt p=(list ,@c)] :: utf32 text - [%yow p=gill] :: connect to app - == :: -++ dill-blit :: console output - $% [%bel ~] :: make a noise - [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%pro p=(list ,@c)] :: show as cursor/line - [%out p=(list ,@c)] :: send output line - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - == :: -++ gill ,@tas :: general contact --- => :: -|% :: protocol below -++ blew ,[p=@ud q=@ud] :: columns rows -++ belt :: raw console input - $% [%aro p=?(%d %l %r %u)] :: arrow key - [%bac ~] :: true backspace - [%ctl p=@ud] :: control-key - [%del ~] :: true delete - [%met p=@ud] :: meta-key - [%ret ~] :: return - [%txt p=(list ,@c)] :: utf32 text - == :: -++ blit :: raw console output - $% [%bel ~] :: make a noise - [%clr ~] :: clear the screen - [%hop p=@ud] :: set cursor position - [%lin p=(list ,@c)] :: set current line - [%mor ~] :: newline - [%sag p=path q=*] :: save to jamfile - [%sav p=path q=@] :: save to file - == :: -++ flog :: sent to %dill - $% [%crud p=@tas q=(list tank)] :: - [%text p=tape] :: - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: -++ gift :: out result <-$ - $% [%bbye ~] :: reset prompt - [%blit p=(list blit)] :: terminal output - [%init p=@p] :: set owner - [%logo ~] :: logout - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: -++ kiss :: in request ->$ - $% [%belt p=belt] :: terminal input - [%blew p=blew] :: terminal config - [%boot p=*] :: weird %dill boot - [%crud p=@tas q=(list tank)] :: error with trace - [%flog p=flog] :: wrapped error - [%flow p=@tas q=(list gill)] :: terminal config - [%hail ~] :: terminal refresh - [%hook ~] :: this term hung up - [%harm ~] :: all terms hung up - [%init p=ship] :: after gall ready - [%noop ~] :: no operation - [%talk p=tank] :: - [%text p=tape] :: - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: --- => :: -|% :: protocol outward -++ mess :: - $% [%dill-belt p=(hypo dill-belt)] :: - == :: -++ move ,[p=duct q=(mold note gift)] :: local move -++ note-ames :: weird ames move - $% [%make p=(unit ,@t) q=@ud r=@ s=?] :: - [%sith p=@p q=@uw r=?] :: - == :: -++ note-dill :: note to self, odd - $% [%crud p=@tas q=(list tank)] :: - [%text p=tape] :: - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: -++ note-gall :: outbound message - $% [%mess p=[ship q=path] q=ship r=mess] :: - [%nuke p=[p=ship q=path] q=ship] :: - [%show p=[p=ship q=path] q=ship r=path] :: - [%took p=[p=ship q=path] q=ship] :: - == :: -++ note :: - $% [%a note-ames] :: out request $-> - [%d note-dill] :: - [%g note-gall] :: - == :: -++ riff ,[p=desk q=(unit rave)] :: see %clay -++ sign-ames :: - $% [%nice ~] :: - == :: -++ sign-clay :: - $% [%note p=@tD q=tank] :: - == :: -++ sign-gall :: - $% [%crud p=@tas q=(list tank)] :: - [%mean p=ares] :: - [%nice ~] :: - [%rush %dill-blit dill-blit] :: - == :: -++ sign-time :: - $% [%wake ~] :: - == :: -++ sign :: in result $<- - $% [%a sign-ames] :: - [%c sign-clay] :: - [%g sign-gall] :: - [%t sign-time] :: - == :: -:::::::: :: dill tiles --- -=| all=axle -|= [now=@da eny=@ ski=sled] :: current invocation -=> |% - ++ as :: per cause - |_ $: [moz=(list move) hen=duct our=ship] - axon - == - ++ abet :: resolve - ^- [(list move) axle] - [(flop moz) all(dug (~(put by dug.all) hen +<+))] - :: - ++ call :: receive input - |= kyz=kiss - ^+ +> - ?+ -.kyz ~& [%strange-kiss -.kyz] +> - %flow +> - %belt (send `dill-belt`p.kyz) - %crud (send `dill-belt`[%cru p.kyz q.kyz]) - %blew (send %rez p.p.kyz q.p.kyz) - %veer (dump kyz) - %vega (dump kyz) - %verb (dump kyz) - == - :: - ++ dump :: pass down to hey - |= git=gift - ?> ?=(^ hey.all) - +>(moz [[u.hey.all %give git] moz]) - :: - ++ done :: return gift - |= git=gift - +>(moz :_(moz [hen %give git])) - :: - ++ from :: receive belt - |= bit=dill-blit - ^+ +> - ?: ?=(%out -.bit) - %+ done %blit - :~ [%lin p.bit] - [%mor ~] - [%lin see] - [%hop pos] - == - ?: ?=(%pro -.bit) - (done(see p.bit) %blit [[%lin p.bit] [%hop pos] ~]) - ?: ?=(%hop -.bit) - (done(pos p.bit) %blit [bit ~]) - (done %blit [bit ~]) - :: - ++ init :: initialize - |= gyl=(list gill) - ^+ +> - =. moz :_(moz [hen %pass ~ %g %show [our [ram ~]] our ~]) - |- ^+ +>.^$ - ?~ gyl +>.^$ - $(gyl t.gyl, +>.^$ (send %yow i.gyl)) - :: - ++ send :: send action - |= bet=dill-belt - %_ +> - moz - :_ moz - [hen %pass ~ %g %mess [our [ram ~]] our [%dill-belt -:!>(bet) bet]] - == - :: - ++ take :: receive - |= sih=sign - ^+ +> - ?- sih - [%a %nice *] - :: ~& [%take-nice-ames sih] - +> - :: - [%c %note *] - (from %out (tuba ~(ram re q.+.sih))) - :: - [%g %crud *] - (send %cru p.+.sih q.+.sih) - :: - [%g %mean *] - +>(moz [[hen %give %logo ~] moz]) - :: - [%g %nice *] - :: ~& [%take-nice sih] - +> - :: - [%g %rush %dill-blit *] - =. moz :_(moz `move`[hen %pass ~ %g %took [our [ram ~]] our]) - (from +>+.sih) - :: - [%t %wake *] - :: ~& %dill-wake - +> - == - -- - :: - ++ ax :: make ++as - |= [hen=duct kyz=kiss] :: - ?~ ore.all ~ - =+ nux=(~(get by dug.all) hen) - ?^ nux (some ~(. as [~ hen u.ore.all] u.nux)) - ?. ?=(%flow -.kyz) ~ - %- some - %. q.kyz - ~(init as [~ hen u.ore.all] [p.kyz 80 0 (tuba "<{(trip p.kyz)}>")]) - -- -|% :: poke/peek pattern -++ call :: handle request - |= $: hen=duct - hic=(hypo (hobo kiss)) - == - ^- [p=(list move) q=_..^$] - => %= . :: XX temporary - q.hic - ^- kiss - ?: ?=(%soft -.q.hic) - :: ~& [%dill-call-soft (,@tas `*`-.p.q.hic)] - ((hard kiss) p.q.hic) - ?: (~(nest ut -:!>(*kiss)) | p.hic) q.hic - ~& [%dill-call-flub (,@tas `*`-.q.hic)] - ((hard kiss) q.hic) - == - ?: ?=(%boot -.q.hic) - :_(..^$ [hen %pass ~ (note %a p.q.hic)]~) - ?: ?=(%flog -.q.hic) - :_(..^$ ?~(hey.all ~ [u.hey.all %slip %d p.q.hic]~)) - ?: ?=(%init -.q.hic) - [~ ..^$(ore.all `p.q.hic)] - =. hey.all ?^(hey.all hey.all `hen) - =+ nus=(ax hen q.hic) - ?~ nus - ~& [%dill-no-flow q.hic] - [~ ..^$] - =^ moz all abet:(call:u.nus q.hic) - [moz ..^$] -:: -++ doze - |= [now=@da hen=duct] - ^- (unit ,@da) - ~ -:: -++ load :: totally disabled - |= old=* - ..^$(ore.all `~zod) -:: -++ scry - |= [fur=(unit (set monk)) ren=@tas his=ship syd=desk lot=coin tyl=path] - ^- (unit (unit (pair mark ,*))) - [~ ~] -:: -++ stay all -:: -++ take :: process move - |= [tea=wire hen=duct hin=(hypo sign)] - ^- [p=(list move) q=_..^$] - ?: =(~ ore.all) - ~& [%take-back q.hin] - [~ ..^$] - ?. (~(has by dug.all) hen) - ~& [%take-weird-sign q.hin] - ~& [%take-weird-hen hen] - [~ ..^$] - =+ our=?>(?=(^ ore.all) u.ore.all) - =^ moz all - abet:(~(take as [~ hen our] (~(got by dug.all) hen)) q.hin) - [moz ..^$] --- diff --git a/main/app/bang/core.hook b/base/app/bang/core.hook similarity index 100% rename from main/app/bang/core.hook rename to base/app/bang/core.hook diff --git a/main/app/began/core.hook b/base/app/began/core.hook similarity index 100% rename from main/app/began/core.hook rename to base/app/began/core.hook diff --git a/main/app/begin/core.hook b/base/app/begin/core.hook similarity index 100% rename from main/app/begin/core.hook rename to base/app/begin/core.hook diff --git a/main/app/cat/core.hook b/base/app/cat/core.hook similarity index 100% rename from main/app/cat/core.hook rename to base/app/cat/core.hook diff --git a/main/app/chat/core.hook b/base/app/chat/core.hook similarity index 100% rename from main/app/chat/core.hook rename to base/app/chat/core.hook diff --git a/main/app/code/core.hook b/base/app/code/core.hook similarity index 100% rename from main/app/code/core.hook rename to base/app/code/core.hook diff --git a/main/app/cp/core.hook b/base/app/cp/core.hook similarity index 100% rename from main/app/cp/core.hook rename to base/app/cp/core.hook diff --git a/main/app/curl/core.hook b/base/app/curl/core.hook similarity index 100% rename from main/app/curl/core.hook rename to base/app/curl/core.hook diff --git a/main/app/dojo/core.hook b/base/app/dojo/core.hook similarity index 98% rename from main/app/dojo/core.hook rename to base/app/dojo/core.hook index f3ee5d4f9..344159781 100644 --- a/main/app/dojo/core.hook +++ b/base/app/dojo/core.hook @@ -123,7 +123,7 @@ [%vale p=mark q=ship r=*] :: validate [our his] == :: ++ note-ford :: note to ford - $% [%exec p=@p q=(unit silk)] :: make / kill + $% [%exec p=@p q=beak r=(unit silk)] :: make / kill == :: ++ note-gall :: note to %gall $% [%mess p=[p=ship q=path] q=ship r=cage] :: @@ -133,7 +133,7 @@ [%nice ~] :: == :: ++ sign-ford :: sign from ford - $% [%made p=@uvH q=(each cage tang)] :: computed result + $% [%made p=@uvH q=(each gage tang)] :: computed result == :: ++ note :: out request $-> $% [%f note-ford] :: @@ -270,12 +270,14 @@ |= [pax=path kas=silk] ^+ +>+> ?> ?=(~ pux) - (he-pass(poy `+>+<(pux `pax)) pax %f %exec our.hid `kas) + =+ bek=[our.hid %home %da lat.hid] + (he-pass(poy `+>+<.$(pux `pax)) pax %f %exec our.hid bek `kas) :: ++ dy-stop :: stop work ^+ +> ?~ pux +> - (he-pass(poy ~) u.pux %f %exec our.hid ~) + =+ bek=[our.hid %home %da lat.hid] + (he-pass(poy ~) u.pux %f %exec our.hid bek ~) :: ++ dy-slam :: call by ford |= [pax=path gat=vase sam=vase] @@ -607,12 +609,13 @@ [& %$ "> "] :: ++ he-made :: result from ford - |= [pax=path dep=@uvH rey=(each cage tang)] + |= [pax=path dep=@uvH rey=(each gage tang)] ^+ +> ?> ?=(^ poy) =< he-pine ?- -.rey - %& %. p.rey + %& ?> ?=(@ p.p.rey) + %. p.rey =+ dye=~(. dy u.poy(pux ~)) ?+ pax !! [%hand ~] dy-hand:dye @@ -699,7 +702,7 @@ :- [ost ~] ^- session :* *sole-share :: say=sole-share - %main :: syd=desk + %home :: syd=desk ~ :: luc=(unit case) ~ :: poy=(unit dojo-project) ~ :: var=(map term cage) diff --git a/main/app/gnab/core.hook b/base/app/gnab/core.hook similarity index 100% rename from main/app/gnab/core.hook rename to base/app/gnab/core.hook diff --git a/main/app/grep/core.hook b/base/app/grep/core.hook similarity index 100% rename from main/app/grep/core.hook rename to base/app/grep/core.hook diff --git a/base/app/helm/core.hook b/base/app/helm/core.hook new file mode 100644 index 000000000..910a8441c --- /dev/null +++ b/base/app/helm/core.hook @@ -0,0 +1,492 @@ +:: :: :: +:::: /hook/core/helm/app :: :: + :: :: :: +/? 314 :: zuse version +/- *sole, *talk :: structures +/+ sole, talk :: libraries +:: :: :: +:::: :: :: + !: :: :: +=> |% :: principal structures + ++ helm-house :: all state + $: %0 :: state version + bur=(unit (pair ship mace)) :: requesting ticket + hoc=(map bone helm-session) :: consoles + rem=(map desk merge-state) :: active merges + == :: + ++ helm-session :: + $: say=sole-share :: + mud=(unit (sole-dialog ,@ud)) :: + == :: + ++ merge-state :: merge data + $: auto=? :: escalate on failure + gem=germ :: strategy + her=@p :: from ship + sud=@tas :: from desk + cas=case :: at case + == :: + ++ funk (pair ,@ ,@) :: + ++ begs ,[his=@p tic=@p eny=@t ges=gens] :: begin data + ++ helm-wish :: + $| $? %reset :: reset kernel + %verb :: verbose mode + == :: + $% [%reload p=(list term)] :: reload vanes + [%sync p=@tas q=@p r=@tas ~] :: + == :: + ++ dill-flog :: sent to %dill + $% [%crud p=%hax-init [%leaf p=tape] ~] :: initialize ship + [%veer p=@ta q=path r=@t] :: install vane + [%vega p=path] :: reboot by path + [%verb ~] :: verbose mode + == :: + :: :: + ++ gift :: out result <-$ + $% [%mean p=ares] :: error + [%nice ~] :: acknowledge + [%rush %sole-effect sole-effect] :: effect + == :: + ++ hapt ,[p=ship q=path] :: + ++ milk (trel ship desk silk) :: + ++ silk :: + $& [p=silk q=silk] :: cons + $% [%diff p=silk q=silk] :: diff + [%done p=(set beam) q=gage] :: literal + [%file p=beam] :: from clay + [%mash p=mark q=milk r=milk] :: merge + [%tabl p=(list (pair silk silk))] :: list + == :: + ++ tage :: %tabl gage + ,[[%tabl p=(list (pair marc marc))] q=vase] :: + ++ move ,[p=bone q=(mold note gift)] :: + ++ note-clay :: filesystem command + $% [%font p=@p q=@tas r=@p s=@tas] :: + [%info p=@p q=@tas r=nori] :: + [%lynx p=@p q=@tas r=(unit ,?)] :: + [%merg p=@p q=@tas r=@p s=@tas t=germ] :: + == :: + ++ note-dill :: system command + $% [%flog p=dill-flog] :: + == :: + ++ note-ford :: + $% [%exec p=@p q=beak r=(unit silk)] :: + == :: + ++ note-gall :: note to %gall + $% [%mess p=[p=ship q=path] q=ship r=cage] :: + [%show p=[p=ship q=path] q=ship r=path] :: + [%took p=[p=ship q=path] q=ship] :: + == :: + ++ note :: out request $-> + $% [%c note-clay] :: + [%d note-dill] :: + [%f note-ford] :: + [%g note-gall] :: + == :: + ++ sign-clay :: + $% [%mere are=(each (set path) (pair term tang))]:: + == :: + ++ sign-ford :: + $% [%made p=@uvH q=(each gage tang)] :: + == :: + ++ sign-gall :: + $% [%mean p=ares] :: + [%nice ~] :: + == :: + ++ sign :: + $% [%c sign-clay] :: + [%f sign-ford] :: + [%g sign-gall] :: + == :: + -- :: +:: :: +:::: :: + :: :: +|_ $: hid=hide :: system state + helm-house :: program state + == :: +++ he :: per session + |_ [[ost=bone moz=(list move)] helm-session] :: + ++ he-abet :: resolve + [(flop moz) %_(+> hoc (~(put by hoc) ost +<+))] :: + :: :: + ++ he-give :: emit gift + |= git=gift + %_(+> moz [[ost %give git] moz]) + :: + ++ he-wish-reset + ^+ . + =- %_(+ moz (weld (flop zum) moz)) + ^- zum=(list move) + =+ top=`path`/(scot %p our.hid)/home/(scot %da lat.hid)/arvo + :- [ost %pass /reset %d %flog %vega (weld top `path`/hoon)] + %+ turn + ^- (list ,[p=@tas q=@tas]) + :~ [%$ %zuse] + [%a %ames] + [%c %clay] + [%d %dill] + [%e %eyre] + [%f %ford] + [%g %gall] + [%t %time] + == + |= [p=@tas q=@tas] + =+ pax=`path`(welp top /[q]) + =+ txt=((hard ,@) .^(%cx (welp pax /hoon))) + [ost %pass /reset %d %flog %veer p pax txt] + :: + ++ he-wish-reload + |= all=(list term) + =- %_(+ moz (weld (flop zum) moz)) + ^- zum=(list move) + =+ top=`path`/(scot %p our.hid)/home/(scot %da lat.hid)/arvo + %+ turn all + =+ ark=(arch .^(%cy /(scot %p our.hid)/home/(scot %da lat.hid)/arvo)) + =+ van=(~(tap by r.ark)) + |= nam=@tas + =. nam + ?. =(1 (met 3 nam)) + nam + =+ ^- zaz=(list ,[p=span ~]) + (skim van |=([a=term ~] =(nam (end 3 1 a)))) + ?> ?=([[@ ~] ~] zaz) + `term`p.i.zaz + =+ tip=(end 3 1 nam) + =. tip ?:(=('z' tip) %$ tip) + =+ pax=`path`(welp top /[nam]) + =+ txt=((hard ,@) .^(%cx (welp pax /hoon))) + [ost %pass /reload %d %flog %veer tip pax txt] + :: + ++ he-wish-sync + |= [syd=desk her=ship sud=desk ~] + %_ . + moz + :_ moz + [ost %pass /sync %c %font our.hid syd her sud] + == + :: + ++ he-wish-unix + |= [syd=desk syn=(unit ,?)] + %_ . + moz + :_ moz + [ost %pass /unix %c %lynx our.hid syd syn] + == + :: + ++ he-wish-verb + %_ . + moz + :_ moz + [ost %pass /verb %d %flog %verb ~] + == + :: + ++ he-wish-init + |= him=ship + %_ +>.$ + moz + :_ moz + [ost %pass /init %d %flog %crud %hax-init leaf/(scow %p him) ~] + == + :: + ++ he-wish-merge + |= syd=desk + =+ ^- merge-state + %+ fall (~(get by rem) syd) + =+ *merge-state + %_(- cas [%da lat.hid]) + |% + ++ merge-abet + ..he-wish-merge(rem (~(put by rem) syd auto gem her sud cas)) + :: + ++ blab + |= new=(list move) + ^+ +> + +>.$(moz (welp new moz)) + :: + ++ win (blab [ost %give %nice ~] ~) + ++ lose (blab [ost %give %mean ~] ~) + :: + ++ gage-to-tage + |= res=gage + ^- tage + ?@ p.res + ~|(%bad-marc !!) + res + :: + ++ tage-to-cages + |= tab=tage + ^- (list (pair cage cage)) + ?~ p.tab + ~ + :_ $(p.tab t.p.tab, q.tab (slot 3 q.tab)) + ~| %strange-gage + :- [?^(p.i.p.tab !! p.i.p.tab) (slot 4 q.tab)] + [?^(q.i.p.tab !! q.i.p.tab) (slot 5 q.tab)] + :: + ++ merge + ^+ . + (blab [ost %pass /merge/[syd]/merge %c %merg our.hid syd her sud gem] ~) + :: + ++ fancy-merge :: recurse + |= [syd=desk her=@p sud=desk gem=?(%auto germ)] + ^+ +> + %- blab :_ ~ + :* ost %pass /merge/[^syd]/fancy %g %mess [our.hid imp.hid] + our.hid %helm-merge !>([syd her sud gem]) + == + :: + ++ spam + |= mes=(list tank) + %- blab :_ ~ + :* ost %pass /merge/[syd]/spam %g %mess + [our.hid /talk] our.hid %talk-command -:!>(*command) + %publish + %- flop + =< acc + %+ roll mes + =< .(eny eny.hid) + |= [tan=tank acc=(list thought) eny=@uvI] + ^- [acc=(list thought) eny=@uvI] + =+ (sham eny mes) + :_ - + :_ acc + ^- thought + :+ - + [[[%& our.hid (main our.hid)] [*envelope %pending]] ~ ~] + [lat.hid *bouquet [%app (crip ~(ram re tan))]] + == + ++ start + |= [her=@p sud=@tas gim=?(%auto germ)] + ^+ +> + =. cas [%da lat.hid] + ?. ?=(%auto gim) + merge(auto |, gem gim, her her, sud sud) + ?: =(0 .^(%cw /(scot %p our.hid)/[syd]/(scot %da lat.hid))) + => $(gim %init) + .(auto &) + => $(gim %fine) + .(auto &) + :: + ++ work + |= sih=sign + ^+ +> + ~| [%working auto=auto gem=gem syd=syd her=her sud=sud] + ?: ?=(%meld gem) + ?- -.sih + %g + ?: ?=(%nice +<.sih) + => (spam leaf/"%melding %{(trip sud)} into scratch space" ~) + %- blab :_ ~ + :* ost %pass /merge/[syd]/scratch %c %merg our.hid + (cat 3 syd '-scratch') her sud gem + == + =+ :- "failed to set up conflict resolution scratch space" + "I'm out of ideas" + lose:(spam leaf/-< leaf/-> ~) + :: + %c + ?: ?=(%& -.are.sih) + ?. auto + =+ "successfully merged with strategy {}" + win:(spam leaf/- ?~(p.are.sih ~ [>`(set path)`p.are.sih< ~])) + =+ "mashing conflicts" + => .(+>.$ (spam leaf/- ~)) + =+ tic=(cat 3 syd '-scratch') + %- blab :_ ~ + :* ost %pass /merge/[syd]/mash + %f %exec our.hid [our.hid tic %da lat.hid] ~ %tabl + ^- (list (pair silk silk)) + %+ turn (~(tap in p.are.sih)) + |= pax=path + ^- (pair silk silk) + :- [%done ~ %path -:!>(*path) pax] + =+ base=[%file [our.hid tic %da lat.hid] (flop pax)] + =+ alis=[%file [her sud cas] (flop pax)] + =+ bobs=[%file [our.hid syd %da lat.hid] (flop pax)] + =+ dali=[%diff base alis] + =+ dbob=[%diff base bobs] + =+ ^- for=mark + =+ (slag (dec (lent pax)) pax) + ?~(- %$ i.-) + [%mash for [her sud dali] [our.hid syd dbob]] + == + =+ "failed to merge with strategy {}" + lose:(spam leaf/- q.p.are.sih) + :: + %f + ?: ?=(%| -.q.sih) + =+ "failed to mash" + lose:(spam leaf/- p.q.sih) + =+ ^- can=(list (pair path (unit miso))) + %+ turn (tage-to-cages (gage-to-tage p.q.sih)) + |= [pax=cage dif=cage] + ^- (pair path (unit miso)) + ?. ?=(%path p.pax) + ~| "strange path mark: {}" + !! + [((hard path) q.q.pax) ?:(?=(%null p.dif) ~ `[%dif dif])] + =+ notated=(skid can |=([path a=(unit miso)] ?=(^ a))) + =+ annotated=(turn `(list (pair path ,*))`-.notated head) + =+ unnotated=(turn `(list (pair path ,*))`+.notated head) + =+ (trip (cat 3 syd '-scratch')) + =+ ^- tan=(list tank) + %- zing + ^- (list (list tank)) + :~ :~ leaf/"" + leaf/"done setting up scratch space in %{-}" + leaf/"please resolve the following conflicts and run" + leaf/":helm+merge %{(trip syd)} {} %{-}" + == + ?~ annotated + ~ + :~ leaf/"" + leaf/"annotated conflicts in:" + >`(list path)`annotated< + == + ?~ unnotated + ~ + :~ leaf/"" + leaf/"some conflicts could not be annotated." + leaf/"for these, the scratch space contains" + leaf/"the most recent common ancestor of the" + leaf/"conflicting content." + leaf/"" + leaf/"unannotated conflicts in:" + >`(list path)`unnotated< + == + == + =< win + %- blab:(spam tan) + :_ ~ + :* ost %pass /merge/[syd]/dash %c %info + our.hid (cat 3 syd '-scratch') + %& *cart + %+ murn can + |= [p=path q=(unit miso)] + `(unit (pair path miso))`?~(q ~ `[p u.q]) + == + == + ?> ?=(%c -.sih) + ?: ?=(%& -.are.sih) + =+ "successfully merged with strategy {}" + win:(spam leaf/- ?~(p.are.sih ~ [>`(set path)`p.are.sih< ~])) + ?. auto + =+ "failed to merge with strategy {}" + lose:(spam leaf/- q.p.are.sih) + ?+ gem + (spam leaf/"strange auto" >gem< ~) + :: + %init + =+ :- "auto merge failed on strategy %init" + "I'm out of ideas" + lose:(spam leaf/-< leaf/-> [>p.p.are.sih< q.p.are.sih]) + :: + %fine + ?. ?=(%bad-fine-merge p.p.are.sih) + =+ "auto merge failed on strategy %fine" + lose:(spam leaf/- >p.p.are.sih< q.p.are.sih) + => (spam leaf/"%fine merge failed, trying %meet" ~) + merge(gem %meet) + :: + %meet + ?. ?=(%meet-conflict p.p.are.sih) + =+ "auto merge failed on strategy %meet" + lose:(spam leaf/- >p.p.are.sih< q.p.are.sih) + => (spam leaf/"%meet merge failed, trying %mate" ~) + merge(gem %mate) + :: + %mate + ?. ?=(%mate-conflict p.p.are.sih) + =+ "auto merge failed on strategy %mate" + lose:(spam leaf/- >p.p.are.sih< q.p.are.sih) + => .(gem %meld) + =+ tic=(cat 3 syd '-scratch') + => =+ :- "%mate merge failed with conflicts," + "setting up scratch space at %{(trip tic)}" + [tic=tic (spam leaf/-< leaf/-> ~)] + (fancy-merge tic our.hid syd %auto) + == + -- + -- +:: +++ hake :: poke core + |= [ost=bone her=ship] + ?> =(her our.hid) + ~(. he [ost [ost %give %nice ~]~] (fall (~(get by hoc) ost) *helm-session)) +:: +++ hoke :: poke sans ack + |= [ost=bone her=ship] + ?> =(her our.hid) + ~(. he [ost ~] (fall (~(get by hoc) ost) *helm-session)) +:: +++ poke-helm-reset + |= [ost=bone her=ship ~] + ~& %poke-helm-reset + he-abet:he-wish-reset:(hake ost her) +:: +++ poke-helm-verb + |= [ost=bone her=ship ~] + ~& %poke-helm-verb + he-abet:he-wish-verb:(hake ost her) +:: +++ poke-helm-init + |= [ost=bone her=ship him=ship] + ~& %poke-helm-init + he-abet:(he-wish-init:(hake ost her) him) +:: +++ poke-helm-reload + |= [ost=bone her=ship all=(list term)] + ~& %poke-helm-reload + he-abet:(he-wish-reload:(hake ost her) all) +:: +++ poke-helm-merge + |= [ost=bone her=ship syd=@tas ali=@p sud=@tas gem=?(%auto germ)] + ~& %poke-helm-merge + he-abet:merge-abet:(start:(he-wish-merge:(hoke ost her) syd) ali sud gem) +:: +++ poke-helm-sync + |= [ost=bone her=ship all=[desk ship desk ~]] + ~& %poke-helm-sync + he-abet:(he-wish-sync:(hake ost her) all) +:: +++ poke-helm-unix + |= [ost=bone her=ship all=[desk (unit ,?)]] + ~& %poke-helm-unix + he-abet:(he-wish-unix:(hake ost her) all) +:: +++ poke-helm-begin + |= [ost=bone you=ship begs] + ~& %poke-helm-begin + ?> ?=(~ bur) + =+ buz=(shax :(mix (jam ges) eny)) + =+ loy=(bruw 2.048 buz) + :_ +>.$(bur `[his [0 sec:ex:loy]~]) + :~ :* ost %pass /ticketing %a %want [our.hid (sein his)] /q/ta + his tic ges pub:ex:loy + == + [ost %give %nice ~] + == +:: +++ poke-will + |= [ost=bone you=ship wil=(unit will)] + ?> ?=(^ bur) + :_ +>.$(bur ~) + ?~ wil + [ost %give %mean ~ %rejected ~]~ + :~ [ost %pass / %a %cash p.u.bur q.u.bur u.wil] + [ost %pass / %c %plug our.hid %home (sein our.hid) %kids] + [ost %give %nice ~] + == +:: +++ pour + |= [ost=bone pax=path sih=*] + ^- [(list move) _+>] + =+ sih=((soft sign) sih) + ?~ sih [~ +>.$] + ?+ pax [~ +>.$] + [%merge @tas @ ~] + ?: ?=(%spam i.t.t.pax) + [~ +>.$] + he-abet:merge-abet:(work:(he-wish-merge:(hoke ost our.hid) i.t.pax) u.sih) + == +-- diff --git a/main/app/into/core.hook b/base/app/into/core.hook similarity index 89% rename from main/app/into/core.hook rename to base/app/into/core.hook index f7f93a6f2..637d1bc3f 100644 --- a/main/app/into/core.hook +++ b/base/app/into/core.hook @@ -5,7 +5,7 @@ |_ [hid=hide ~] ++ peer ,_`. ++ poke-into-args - |= [ost=bone you=ship pax=path dat=@ ~] + |= [ost=bone you=ship pax=path dat=cage ~] :_ +>.$ :* [ost %pass /into %c %info our.hid (foal pax dat)] [ost %pass / %g %cide %$] diff --git a/main/app/label/core.hook b/base/app/label/core.hook similarity index 100% rename from main/app/label/core.hook rename to base/app/label/core.hook diff --git a/main/app/ls/core.hook b/base/app/ls/core.hook similarity index 100% rename from main/app/ls/core.hook rename to base/app/ls/core.hook diff --git a/main/app/ls/subdir.hoon b/base/app/ls/subdir.hoon similarity index 100% rename from main/app/ls/subdir.hoon rename to base/app/ls/subdir.hoon diff --git a/main/app/matrix/hymn.hook b/base/app/matrix/hymn.hook similarity index 99% rename from main/app/matrix/hymn.hook rename to base/app/matrix/hymn.hook index 317482d6b..d301f0719 100644 --- a/main/app/matrix/hymn.hook +++ b/base/app/matrix/hymn.hook @@ -18,7 +18,7 @@ "mousetrap/1.4.6/mousetrap.js" "react/0.11.0/react.js" == - ;script(src "/~/at/main/lib/urb.js"); + ;script(src "/~/at/home/lib/urb.js"); ;script: urb.appl = 'sole' ;style:''' #term { diff --git a/main/app/mv/core.hook b/base/app/mv/core.hook similarity index 100% rename from main/app/mv/core.hook rename to base/app/mv/core.hook diff --git a/main/app/nop/core.hook b/base/app/nop/core.hook similarity index 100% rename from main/app/nop/core.hook rename to base/app/nop/core.hook diff --git a/main/app/peek/core.hook b/base/app/peek/core.hook similarity index 100% rename from main/app/peek/core.hook rename to base/app/peek/core.hook diff --git a/main/app/poke/core.hook b/base/app/poke/core.hook similarity index 100% rename from main/app/poke/core.hook rename to base/app/poke/core.hook diff --git a/main/app/pope/core.hook b/base/app/pope/core.hook similarity index 100% rename from main/app/pope/core.hook rename to base/app/pope/core.hook diff --git a/main/app/reboot/core.hook b/base/app/reboot/core.hook similarity index 95% rename from main/app/reboot/core.hook rename to base/app/reboot/core.hook index 0244ff298..49d8c3c92 100644 --- a/main/app/reboot/core.hook +++ b/base/app/reboot/core.hook @@ -16,7 +16,7 @@ %- turn :_ |= [tip=@tasD nam=@tas] =+ pax=[(scot %p our.hid) %arvo (scot %da lat.hid) nam %hoon ~] - [%veer tip pax (,@ .^(%cx pax))] + [%veer tip pax (,@ +:.^(%cx pax))] ^- (list ,[p=@tas q=@tas]) :~ [%$ %zuse] [%a %ames] diff --git a/main/app/reload/core.hook b/base/app/reload/core.hook similarity index 80% rename from main/app/reload/core.hook rename to base/app/reload/core.hook index 3b9cbd7da..6ddca0341 100644 --- a/main/app/reload/core.hook +++ b/base/app/reload/core.hook @@ -14,7 +14,7 @@ %+ args-into-resp . |= all=(list ,@tas) %+ turn all - =+ ark=(arch .^(%cy /(scot %p our.hid)/arvo/(scot %da lat.hid))) + =+ ark=(arch .^(%cy /(scot %p our.hid)/main/(scot %da lat.hid)/arvo)) =+ van=(~(tap by r.ark)) |= nam=@tas =. nam @@ -25,6 +25,6 @@ ?> ?=([[@ ~] ~] zaz) `term`p.i.zaz =+ tip=(end 3 1 nam) - =+ pax=[(scot %p our.hid) %arvo (scot %da lat.hid) nam ~] + =+ pax=[(scot %p our.hid) %main (scot %da lat.hid) %arvo nam ~] [%veer ?:(=('z' tip) %$ tip) pax (,@ .^(%cx (welp pax /hoon)))] -- diff --git a/main/app/reset/core.hook b/base/app/reset/core.hook similarity index 100% rename from main/app/reset/core.hook rename to base/app/reset/core.hook diff --git a/main/app/rm/core.hook b/base/app/rm/core.hook similarity index 100% rename from main/app/rm/core.hook rename to base/app/rm/core.hook diff --git a/main/app/shell/core.hook b/base/app/shell/core.hook similarity index 98% rename from main/app/shell/core.hook rename to base/app/shell/core.hook index 2c2baabcf..03219aa83 100644 --- a/main/app/shell/core.hook +++ b/base/app/shell/core.hook @@ -7,14 +7,14 @@ /= pit /~ !>(+) :: kernel vase :: :::: structures - :: + !: |% :: ++ axle :: $: %1 :: version tiv=? :: typing? wit=[p=@u q=(map ,@u coma)] :: waiting commands pid=@u :: next process id - pax=_`path`/=try= :: working directory + pax=_`path`/=base=/try :: working directory act=(unit span) :: active child pip=(jar span span) :: pipe out->in pop=(jar span span) :: pipe in->out @@ -85,7 +85,7 @@ -- :: :::: parsers - :: + !: |% ++ maybe |*(fel=_rule (cook |*(a=(unit) (fall a ~)) (opts fel))) ++ opts :: parse unit @@ -145,7 +145,7 @@ -- :: :::: per event - :: + !: |% ++ ve |= [hid=hide ost=bone axle] @@ -233,7 +233,8 @@ ?^ (file paf) (chew-file paf '! exists') %+ with (fall gen [%bczp atom/%t]) |= new=vase - (chew-file paf (foal paf q.new)) + =+ for=((hard mark) -:(flop paf)) + (chew-file paf (foal paf for new)) :: ++ eat-mut |= [paf=path gen=(unit twig)] @@ -243,7 +244,8 @@ ?~ gen (blab (stray (crip ": {(spud paf)} {<(,@t u.fel)>}"))) %+ with u.gen |= new=vase - (chew-file paf (foal paf q.new)) + =+ for=((hard mark) -:(flop paf)) + (chew-file paf (foal paf for new)) =+ ark=;;(arch .^(%cy paf)) ?- r.ark ~ (chew-file paf '! none') @@ -510,7 +512,7 @@ -- :: :::: formal interface - :: + !: |_ [hid=hide vat=axle] :: ++ peer :: handle subscription diff --git a/main/app/sole/core.hook b/base/app/sole/core.hook similarity index 98% rename from main/app/sole/core.hook rename to base/app/sole/core.hook index 39b6ed622..cf5248a6b 100644 --- a/main/app/sole/core.hook +++ b/base/app/sole/core.hook @@ -556,6 +556,7 @@ ^+ +> ?^ ris (ta-ser txt) + :: ~& ven.say.inp %- ta-hom(pos.inp (add (lent txt) pos.inp)) :- %mor |- ^- (list sole-edit) @@ -573,18 +574,10 @@ =- [(add pos.inp (lent p.vew)) (weld (tuba p.vew) q.vew)] ^= vew ^- (pair tape (list ,@c)) ?: vis.pom [cad.pom buf.say.inp] - :- ;: welp - cad.pom - ?~ buf.say.inp ~ - ;: welp - "<" - (scow %p (end 4 1 (sham buf.say.inp))) - "> " - == - == - =+ len=(lent buf.say.inp) - |- ^- (list ,@c) - ?:(=(0 len) ~ [`@c`'*' $(len (dec len))]) + :- %+ welp cad.pom + ?~ buf.say.inp ~ + "<{(scow %p (end 4 1 (sham buf.say.inp)))}> " + (turn buf.say.inp ,_`@c`'*') -- -- ++ peer diff --git a/base/app/solid/core.hook b/base/app/solid/core.hook new file mode 100644 index 000000000..6bbac3629 --- /dev/null +++ b/base/app/solid/core.hook @@ -0,0 +1,41 @@ +!: +:::: + :: +|_ [hid=hide ~] +++ peer ,_`. +++ poke-solid-args + |= [ost=bone you=ship ~] + :_ +>.$ + =+ top=`path`/(scot %p our.hid)/main/(scot %da lat.hid)/arvo + =+ pax=`path`(weld top `path`[%hoon ~]) + ~& %solid-start + =+ gen=(reck pax) + ~& %solid-parsed + =+ ken=q:(~(mint ut %noun) %noun gen) + ~& %solid-compiled + =+ ^= all + =+ all=.*(0 ken) + =+ ^= vay ^- (list ,[p=@tas q=@tas]) + :~ [%$ %zuse] + [%g %gall] + [%f %ford] + [%a %ames] + [%c %clay] + [%d %dill] + [%e %eyre] + [%t %time] + == + |- ^+ all + ?~ vay all + =+ pax=(weld top `path`[q.i.vay ~]) + =+ txt=((hard ,@) .^(%cx (weld pax `path`[%hoon ~]))) + =+ sam=[lat.hid `ovum`[[%gold ~] [%veer p.i.vay pax txt]]] + ~& [%solid-veer i.vay] + =+ gat=.*(all .*(all [0 42])) + =+ nex=+:.*([-.gat [sam +>.gat]] -.gat) + $(vay t.vay, all nex) + :~ [ost %give %sage [%urbit %pill ~] [ken all]] + [ost %pass / %g %cide %$] + [ost %give %nice ~] + == +-- diff --git a/main/app/sync/core.hook b/base/app/sync/core.hook similarity index 100% rename from main/app/sync/core.hook rename to base/app/sync/core.hook diff --git a/main/app/talk/core.hook b/base/app/talk/core.hook similarity index 99% rename from main/app/talk/core.hook rename to base/app/talk/core.hook index a91015faf..708cd7d93 100644 --- a/main/app/talk/core.hook +++ b/base/app/talk/core.hook @@ -105,7 +105,7 @@ :: :: ++ work :: interface action $% [%number p=? q=@ud] :: activate by number - [%join p=(set partner)] :: + [%join p=(set partner)] :: [%say p=speech] :: [%invite p=span q=(list partner)] :: [%banish p=span q=(list partner)] :: @@ -1737,7 +1737,13 @@ |= oug=? ^- tape ?+ -.sep "" - %url (weld ": " (scag 62 (earn p.sep))) + %url + =+ txt=(earn p.sep) + %+ weld "/ " + ?: (gte 62 (lent txt)) + txt + (weld (scag 61 (earn p.sep)) "…") + :: %lin =+ txt=(trip q.sep) ?: p.sep @@ -1745,6 +1751,9 @@ ?: oug (weld "@ " txt) (weld " " txt) + :: + %app + [' ' (trip p.sep)] == -- :: @@ -1814,17 +1823,21 @@ |= [ost=bone you=ship ~] ^- [(list move) _+>] :_ +>.$ - =+ paf=/(scot %p our.hid)/try/(scot %da lat.hid)/talk/backlog/jam - [ost %pass /jamfile %c %info our.hid (foal paf (jam +<+.+>.$))]~ + =+ paf=/(scot %p our.hid)/home/(scot %da lat.hid)/talk/backlog/mime + :_ ~ + :* ost %pass /jamfile %c %info our.hid + (foal paf %mime !>([/mime/jam (taco (jam +<+.+>.$))])) + == :: ++ prep |= old=(unit (unit house-any)) ^- [(list move) _+>] + ~& %talk-prep ?> ?=(^ old) =| moz=(list move) |- ?~ u.old - =+ paf=/(scot %p our.hid)/try/(scot %da lat.hid)/talk/backlog/jam + =+ paf=/(scot %p our.hid)/home/(scot %da lat.hid)/talk/backlog/mime ?. ?=([%0 %0 %0] [.^(%cy paf)]) ~& %talk-prep-restore $(u.old (some ((hard house-any) (cue ((hard ,@) .^(%cx paf)))))) diff --git a/main/app/tease/core.hook b/base/app/tease/core.hook similarity index 100% rename from main/app/tease/core.hook rename to base/app/tease/core.hook diff --git a/main/app/terminal/core.hook b/base/app/terminal/core.hook similarity index 87% rename from main/app/terminal/core.hook rename to base/app/terminal/core.hook index 0bdab4b21..f3ad9c99f 100644 --- a/main/app/terminal/core.hook +++ b/base/app/terminal/core.hook @@ -4,7 +4,7 @@ :: /? 314 :: need urbit 314 /- term-line, term-in, term-ctrl, kyev -/= stat /:/%%/:/hymn/ +::/= stat /:/%%/:/hymn/ :: :::: structures :: @@ -57,6 +57,36 @@ [%vega p=path] :: == == == -- +:: +:::: from future import wick, pack, pick XX remove on breach or kelvin bump + :: +|% +++ wick :: span format + |= a=@ + ^- (unit ,@ta) + =+ b=(rip 3 a) + =- ?^(b ~ (some (rap 3 (flop c)))) + =| c=tape + |- ^- [b=tape c=tape] + ?~ b [~ c] + ?. =('~' i.b) + $(b t.b, c [i.b c]) + ?~ t.b [b ~] + ?- i.t.b + %'~' $(b t.t.b, c ['~' c]) + %'-' $(b t.t.b, c ['_' c]) + @ [b ~] + == +:: +++ pack :: light path encoding + |= [a=term b=path] ^- span + %+ rap 3 :- (wack a) + (turn b |=(c=span (cat 3 '_' (wack c)))) +:: +++ pick :: light path decoding + |= a=span ^- (unit ,[p=term q=path]) + (rush a (most cab (sear wick urt:ab))) +-- !: :::: helpers :: @@ -98,18 +128,18 @@ [(flop mow) (~(put by hiz) pax tel)] :: ++ page -:: ;html -:: ;head -:: ;title: Not yet -:: == -:: ;body; -:: == - %. stat - %+ inject - ~[%html %head] - ;= ;script: urb.appl = "{(trip app.hid)}" - ;script: urb.term = \{pax: "{(spud pax)}"} + ;html + ;head + ;title: Not yet + == + ;body; == +:: %. stat +:: %+ inject +:: ~[%html %head] +:: ;= ;script: urb.appl = "{(trip app.hid)}" +:: ;script: urb.term = \{pax: "{(spud pax)}"} +:: == :: ++ peer |= gal=glas @@ -255,7 +285,7 @@ ++ pour |= [ost=bone pax=path sih=*] ^- [(list move) _+>] - =+ sih=((hard sign) sih) + =+ sih=~|([%term-pour (,[term term ~] sih)] ((hard sign) sih)) ?: ?=(?(%sage %init %logo %verb %veer %vega) &2.sih) :: vomit [[ost %give +.sih]~ +>.$] ?~ pax !! diff --git a/main/app/terminal/hymn.hook b/base/app/terminal/hymn.hook similarity index 94% rename from main/app/terminal/hymn.hook rename to base/app/terminal/hymn.hook index 7df1fb846..1f699a0a2 100644 --- a/main/app/terminal/hymn.hook +++ b/base/app/terminal/hymn.hook @@ -13,7 +13,7 @@ ;head ;title: Hi ;script: window.urb = window.urb || \{}; - ;script@"/~/at/main/lib/urb.js"; + ;script@"/~/at/base/lib/urb.js"; ;script@"//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"; ;script@"//cdnjs.cloudflare.com/ajax/libs/mousetrap/1.4.6/mousetrap.js"; ;script@"//use.typekit.net/fkv0sjk.js"; diff --git a/main/app/terminal/hymn/script.js b/base/app/terminal/hymn/script.js similarity index 100% rename from main/app/terminal/hymn/script.js rename to base/app/terminal/hymn/script.js diff --git a/main/app/terminal/hymn/style.css b/base/app/terminal/hymn/style.css similarity index 100% rename from main/app/terminal/hymn/style.css rename to base/app/terminal/hymn/style.css diff --git a/main/app/test/app.js b/base/app/test/app.js similarity index 100% rename from main/app/test/app.js rename to base/app/test/app.js diff --git a/main/app/test/core.hook b/base/app/test/core.hook similarity index 100% rename from main/app/test/core.hook rename to base/app/test/core.hook diff --git a/main/app/test/front/hymn.hook b/base/app/test/front/hymn.hook similarity index 100% rename from main/app/test/front/hymn.hook rename to base/app/test/front/hymn.hook diff --git a/main/app/test/style.css b/base/app/test/style.css similarity index 100% rename from main/app/test/style.css rename to base/app/test/style.css diff --git a/main/app/ticket/core.hook b/base/app/ticket/core.hook similarity index 100% rename from main/app/ticket/core.hook rename to base/app/ticket/core.hook diff --git a/main/app/time/core.hook b/base/app/time/core.hook similarity index 100% rename from main/app/time/core.hook rename to base/app/time/core.hook diff --git a/main/app/tree/core.hook b/base/app/tree/core.hook similarity index 100% rename from main/app/tree/core.hook rename to base/app/tree/core.hook diff --git a/main/app/tweet/core.hook b/base/app/tweet/core.hook similarity index 100% rename from main/app/tweet/core.hook rename to base/app/tweet/core.hook diff --git a/main/app/twit/core.hook b/base/app/twit/core.hook similarity index 100% rename from main/app/twit/core.hook rename to base/app/twit/core.hook diff --git a/main/app/twit/hoontap-keys.hoon b/base/app/twit/hoontap-keys.hoon similarity index 100% rename from main/app/twit/hoontap-keys.hoon rename to base/app/twit/hoontap-keys.hoon diff --git a/main/app/twitter-auth/core.hook b/base/app/twitter-auth/core.hook similarity index 100% rename from main/app/twitter-auth/core.hook rename to base/app/twitter-auth/core.hook diff --git a/main/app/twitter-auth/hoontap-keys.txt b/base/app/twitter-auth/hoontap-keys.txt similarity index 100% rename from main/app/twitter-auth/hoontap-keys.txt rename to base/app/twitter-auth/hoontap-keys.txt diff --git a/main/app/twitter-feed/core.hook b/base/app/twitter-feed/core.hook similarity index 100% rename from main/app/twitter-feed/core.hook rename to base/app/twitter-feed/core.hook diff --git a/main/app/type/core.hook b/base/app/type/core.hook similarity index 100% rename from main/app/type/core.hook rename to base/app/type/core.hook diff --git a/main/app/unsync/core.hook b/base/app/unsync/core.hook similarity index 100% rename from main/app/unsync/core.hook rename to base/app/unsync/core.hook diff --git a/main/app/verb/core.hook b/base/app/verb/core.hook similarity index 100% rename from main/app/verb/core.hook rename to base/app/verb/core.hook diff --git a/main/app/wipe/core.hook b/base/app/wipe/core.hook similarity index 100% rename from main/app/wipe/core.hook rename to base/app/wipe/core.hook diff --git a/main/app/ye/core.hook b/base/app/ye/core.hook similarity index 100% rename from main/app/ye/core.hook rename to base/app/ye/core.hook diff --git a/arvo/ames.hoon b/base/arvo/ames.hoon similarity index 99% rename from arvo/ames.hoon rename to base/arvo/ames.hoon index 7185a2367..564688a90 100644 --- a/arvo/ames.hoon +++ b/base/arvo/ames.hoon @@ -440,7 +440,7 @@ vix=(bex +((cut 0 [25 2] mag))) :: width of sender tay=(cut 0 [27 5] mag) :: message type == - ?> =(2 vez) + ?> =(3 vez) ?> =(chk (end 0 20 (mug bod))) :+ [(end 3 wix bod) (cut 3 [wix vix] bod)] (kins tay) @@ -460,7 +460,7 @@ =+ tay=(ksin q.kec) %+ mix %+ can 0 - :~ [3 2] + :~ [3 3] [20 (mug bod)] [2 yax] [2 qax] @@ -1043,7 +1043,7 @@ ++ gnaw :: gnaw:am |= [kay=cape ryn=lane pac=rock] :: process packet ^- [p=(list boon) q=fort] - ?. =(2 (end 0 3 pac)) [~ fox] + ?. =(3 (end 0 3 pac)) [~ fox] =+ kec=(bite pac) ?: (goop p.p.kec) [~ fox] ?. (~(has by urb.ton.fox) q.p.kec) @@ -1625,7 +1625,7 @@ :: ++ scry |= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path] - ^- (unit (unit (pair mark ,*))) + ^- (unit (unit cage)) ?~ tyl [~ ~] =+ hun=(slaw %p i.tyl) ?~ hun [~ ~] @@ -1637,13 +1637,13 @@ [%$ %ud @] %+ bind (perm who u.hun q.p.lot [syd t.tyl]) - |=(a=* [%noun a]) + |=(a=* [%noun !>(a)]) :: [%$ %da @] ?. =(now q.p.lot) ~ %+ bind (temp who u.hun [syd t.tyl]) - |=(a=* [%noun a]) + |=(a=* [%noun !>(a)]) == :: ++ stay fox diff --git a/base/arvo/clay.hoon b/base/arvo/clay.hoon new file mode 100644 index 000000000..cc1157aaf --- /dev/null +++ b/base/arvo/clay.hoon @@ -0,0 +1,2856 @@ +!: +:: clay (4c), revision control +:: +|= pit=vase +=> |% +++ cane :: change set + $: new=(map path lobe) :: new files + cal=(map path lobe) :: old diffs + can=(map path cage) :: new diffs + old=(map path ,~) :: deleted files + == :: +++ cult (map duct rove) :: subscriptions +++ dojo :: domestic desk state + $: qyx=cult :: subscribers + dom=dome :: desk data + dok=(unit dork) :: outstanding diffs + mer=(map (pair ship desk) mery) :: outstanding merges + syn=? :: sync to unix + == :: +++ gift :: out result <-$ + $% [%ergo p=@p q=@tas r=@ud s=(list ,[path (unit mime)])] + :: version update + [%mere p=(each (set path) (pair term (list tank)))] + :: merge result + [%note p=@tD q=tank] :: debug message + [%writ p=riot] :: response + == :: +++ khan :: + $: fil=(unit (unit cage)) :: XX see khan-to-soba + dir=(map ,@ta khan) :: + == :: +++ kiss :: in request ->$ + $% [%font p=@p q=@tas r=@p s=@tas] :: set upstream + [%info p=@p q=@tas r=nori] :: internal edit + [%init p=@p] :: report install + [%into p=@p q=@tas r=khan] :: external edit + [%lynx p=@p q=@tas r=(unit ,?)] :: sync to unix + [%merg p=@p q=@tas r=@p s=@tas t=germ] :: merge desks + [%plug p=@p q=@tas r=@p s=@tas] :: unset upstream + [%wart p=sock q=@tas r=path s=*] :: network request + [%warp p=sock q=riff] :: file request + == :: +++ mery :: + $: gem=germ :: strategy + cas=case :: ali's case + ali=yaki :: ali's commit + bob=yaki :: bob's commit + bas=yaki :: mergebase + dal=cane :: diff(bas,ali) + dob=cane :: diff(bas,bob) + bof=(map path (unit cage)) :: conflict diffs + bop=(map path cage) :: conflict patches + new=yaki :: merge(dal,dob) + ank=ankh :: new state + erg=(map path ,?) :: ergoable changes + gon=(each (set path) (pair term (list tank))) :: return value + == :: +++ moot ,[p=case q=case r=path s=(map path lobe)] :: stored change range +++ move ,[p=duct q=(mold note gift)] :: local move +++ nako $: gar=(map aeon tako) :: new ids + let=aeon :: next id + lar=(set yaki) :: new commits + bar=(set plop) :: new content + == :: +++ note :: out request $-> + $% $: %a :: to %ames + $% [%want p=sock q=path r=*] :: + == == :: + $: %c :: to %clay + $% [%font p=@p q=@tas r=@p s=@tas] :: + [%info p=@p q=@tas r=nori] :: internal edit + [%merg p=@p q=@tas r=@p s=@tas t=germ] :: merge desks + [%warp p=sock q=riff] :: + == == :: + $: %d :: + $% [%flog p=[%crud p=@tas q=(list tank)]] :: to %dill + == == :: + $: %f :: + $% [%exec p=@p q=beak r=(unit silk)] :: + == == :: + $: %t :: + $% [%wait p=@da] :: + [%rest p=@da] :: + == == == :: +++ sign :: in result $<- + $? $: %a :: by %ames + $% [%waft p=sock q=*] :: + [%went p=ship q=cape] :: + == == :: + $: %c :: by %clay + $% [%note p=@tD q=tank] :: + [%mere p=(each (set path) (pair term tang))] + [%writ p=riot] :: + == == :: + $: %f :: + $% [%made p=@uvH q=(each gage (list tank))] :: + == == :: + $: %t :: + $% [%wake ~] :: timer activate + == == :: + $: @tas :: by any + $% [%crud p=@tas q=(list tank)] :: + == == == :: +++ silk :: construction layer + $& [p=silk q=silk] :: cons + $% [%bake p=mark q=beam r=path] :: local synthesis + [%boil p=mark q=beam r=path] :: general synthesis + [%bunt p=mark] :: example of mark + [%call p=silk q=silk] :: slam + [%cast p=mark q=silk] :: translate + [%diff p=silk q=silk] :: diff + [%done p=(set beam) q=gage] :: literal + [%dude p=tank q=silk] :: error wrap + [%dune p=(set beam) q=(unit gage)] :: unit literal + [%join p=mark q=silk r=silk] :: merge + [%mute p=silk q=(list (pair wing silk))] :: mutant + [%pact p=silk q=silk] :: patch + [%reef ~] :: kernel reef + [%ride p=twig q=silk] :: silk thru twig + [%tabl p=(list (pair silk silk))] :: list + [%vale p=mark q=ship r=*] :: validate [our his] + [%volt p=(set beam) q=(cask ,*)] :: unsafe add type + == :: +++ raft :: filesystem + $: fat=(map ship room) :: domestic + hoy=(map ship rung) :: foreign + ran=rang :: hashes + $= sor :: upstreams + (map ,[p=@p q=@tas r=@p s=@tas] ,[let=@ud hen=duct]) + == :: +++ rede :: universal project + $: lim=@da :: complete to + qyx=cult :: subscribers + ref=(unit rind) :: outgoing requests + dom=dome :: revision state + dok=(unit dork) :: outstanding diffs + mer=(map (pair ship desk) mery) :: outstanding merges + syn=? :: sync to unix + == :: +++ riff ,[p=desk q=(unit rave)] :: request/desist +++ rind :: request manager + $: nix=@ud :: request index + bom=(map ,@ud ,[p=duct q=rave]) :: outstanding + fod=(map duct ,@ud) :: current requests + haw=(map mood (unit cage)) :: simple cache + nak=(unit nako) :: pending validation + == :: +++ room :: fs per ship + $: hun=duct :: terminal duct + hez=(unit duct) :: sync duct + dos=(map desk dojo) :: native desk + == :: +++ rove :: stored request + $% [%sing p=mood] :: single request + [%next p=mood] :: next version + [%many p=? q=moot] :: change range + == :: +++ rung $: rus=(map desk rede) :: neighbor desks + == :: +++ tage ,[[%tabl p=(list (pair marc marc))] q=vase] :: %tabl gage +++ dork :: diff work + $: del=(list (pair path cage)) :: deletes + ink=(list (pair path cage)) :: hoo{n,k} + ins=(unit (list (pair path cage))) :: inserts + dig=(map path cage) :: store diffs + dif=(unit (list (trel path lobe cage))) :: changes + muc=(map path (pair cage cage)) :: store miso + muh=(map path lobe) :: store hashes + mut=(unit (list (trel path lobe cage))) :: mutations + mim=(map path mime) :: mime cache + == :: +-- => +:::::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: section 4cA, filesystem logic :: +:: +:: +:: +|% +++ de :: per desk + |= [now=@da hen=duct hun=duct hez=(unit duct)] + |= [[who=@p for=@p] syd=@ta rede ran=rang] + =* red +<+>- + =| yel=(list ,[p=duct q=gift]) + =| byn=(list ,[p=duct q=riot]) + =| reg=(list ,[p=duct q=gift]) + =| say=(list ,[p=duct q=path r=ship s=[p=@ud q=riff]]) + =| tag=(list move) + |% + ++ abet + ^- [(list move) rede] + :_ red + ;: weld + %+ turn (flop yel) + |=([a=duct b=gift] [hun %give b]) + :: + %+ turn (flop byn) + |=([a=duct b=riot] [a %give [%writ b]]) + :: + %+ turn (flop reg) + |=([a=duct b=gift] [a %give b]) + :: + %+ turn (flop say) + |= [a=duct b=path c=ship d=[p=@ud q=riff]] + :- a + [%pass b %a %want [who c] [%q %re p.q.d (scot %ud p.d) ~] q.d] + :: + tag + == + :: + ++ aver :: read + |= mun=mood + ^- (unit (unit (each cage lobe))) + =+ ezy=?~(ref ~ (~(get by haw.u.ref) mun)) + ?^ ezy + `(bind u.ezy (cury same %&)) + =+ nao=(case-to-aeon:ze q.mun) + :: ~& [%aver-mun nao [%from syd lim q.mun]] + ?~(nao ~ (read-at-aeon:ze u.nao mun)) + :: + ++ made-to-tage + |= res=(each gage tang) + ^- tage + ?: ?=(%| -.res) + ~| %ford-fail + |- + ?~ p.res !! + ~> %mean.|.(i.p.res) :: interpolate ford fail into stack trace + $(p.res t.p.res) + ?@ p.p.res + ~|(%bad-marc !!) + p.res + :: + ++ tage-to-cages + |= tab=tage + ^- (list (pair cage cage)) + ?~ p.tab + ~ + :_ $(p.tab t.p.tab, q.tab (slot 3 q.tab)) + ~| %strange-gage + :- [?^(p.i.p.tab !! p.i.p.tab) (slot 4 q.tab)] + [?^(q.i.p.tab !! q.i.p.tab) (slot 5 q.tab)] + :: + ++ balk :: read and send + |= [hen=duct cay=(unit (each cage lobe)) mun=mood] + ^+ +> + ?~ cay (blub hen) + (blab hen mun u.cay) + :: + ++ bait + |= [hen=duct tym=@da] + %_(+> tag :_(tag [hen %pass /tyme %t %wait tym])) + :: + ++ best + |= [hen=duct tym=@da] + %_(+> tag :_(tag [hen %pass /tyme %t %rest tym])) + :: + ++ blab :: ship result + |= [hen=duct mun=mood dat=(each cage lobe)] + ^+ +> + ?: ?=(%& -.dat) + +>.$(byn [[hen ~ [p.mun q.mun syd] r.mun p.dat] byn]) + =- +>.$(tag [- tag]) + :* hen %pass [%blab p.mun (scot q.mun) syd r.mun] + %f %exec who [who syd q.mun] ~ (lobe-to-silk:ze r.mun p.dat) + == + :: + ++ bleb :: ship sequence + |= [hen=duct ins=@ud hip=(unit (pair aeon aeon))] + ^+ +> + %^ blab hen [%w [%ud ins] ~] + :- %& + ?~ hip + [%null [%atom %n] ~] + [%nako !>((make-nako:ze u.hip))] + :: + ++ blub :: ship stop + |= hen=duct + %_(+> byn [[hen ~] byn]) + :: + ++ duce :: produce request + |= rov=rove + ^+ +> + =. qyx (~(put by qyx) hen rov) + ?~ ref + (mabe rov (cury bait hen)) + |- ^+ +>+.$ :: XX why? + =+ rav=(reve rov) + =+ ^= vaw ^- rave + ?. ?=([%sing %v *] rav) rav + [%many %| [%ud let.dom] `case`q.p.rav r.p.rav] + =+ inx=nix.u.ref + ~? ?=([%sing %x *] vaw) + [%remote-x-ing vaw hen] + %= +>+.$ + say [[hen [(scot %ud inx) ~] for [inx syd ~ vaw]] say] + nix.u.ref +(nix.u.ref) + bom.u.ref (~(put by bom.u.ref) inx [hen vaw]) + fod.u.ref (~(put by fod.u.ref) hen inx) + == + :: + ++ lynx + |= sun=(unit ,?) + ^+ +> + +>.$(syn ?~(sun !syn u.sun)) + :: + ++ ease :: release request + ^+ . + ?~ ref + =+ rov=(~(get by qyx) hen) + ?~ rov + :: XX handle? + =. qyx (~(del by qyx) hen) + (mabe u.rov (cury best hen)) + =. qyx (~(del by qyx) hen) + |- ^+ +.$ + =+ nux=(~(get by fod.u.ref) hen) + ?~ nux +.$ + %= +.$ + say [[hen [(scot %ud u.nux) ~] for [u.nux syd ~]] say] + fod.u.ref (~(del by fod.u.ref) hen) + bom.u.ref (~(del by bom.u.ref) u.nux) + == + :: + ++ eave :: subscribe + |= rav=rave + ^+ +> + ?- -.rav + %sing + =+ ver=(aver p.rav) + ?~ ver + (duce rav) + ?~ u.ver + (blub hen) + (blab hen p.rav u.u.ver) + :: + %next + =+ ver=(aver p.rav) + ?~ ver + (duce rav) + ?~ u.ver + (blub hen) + =+ yon=+((need (case-to-aeon:ze q.p.rav))) + |- ^+ +>.^$ + ?: (gth yon let.dom) + (duce rav) + =+ var=(aver p.rav(q [%ud yon])) + ?~ var + ~& [%oh-no rave=rav aeon=yon letdom=let.dom] + +>.^$ + ?~ u.var + (blab hen p.rav %& %null [%atom %n] ~) :: only for %x + ?: (equivalent-data:ze u.u.ver u.u.var) + $(yon +(yon)) + (blab hen p.rav u.u.var) + :: + %many + =+ nab=(case-to-aeon:ze p.q.rav) + ?~ nab + ?> =(~ (case-to-aeon:ze q.q.rav)) + (duce (rive rav)) + =+ huy=(case-to-aeon:ze q.q.rav) + ?: &(?=(^ huy) |((lth u.huy u.nab) &(=(0 u.huy) =(0 u.nab)))) + (blub hen) + =+ top=?~(huy let.dom u.huy) + =+ sar=(lobes-at-path:ze u.nab r.q.rav) + =+ ear=(lobes-at-path:ze top r.q.rav) + =. +>.$ + ?: =(sar ear) +>.$ + (bleb hen u.nab ?:(p.rav ~ `[u.nab top])) + ?^ huy + (blub hen) + =+ ^= ptr ^- case + [%ud +(let.dom)] + (duce `rove`[%many p.rav ptr q.q.rav r.q.rav ear]) + == + :: + ++ echa :: announce raw + |= [wen=@da mer=mizu] + ^+ +> + %= +> + reg ~& %merge-announce reg + :: ?~(hez reg :_(reg [u.hez [%ergo who syd let.dom]])) + :: yel [[hen %note '=' %leaf ~] yel] :: XX do better + == + :: + ++ echo :: announce changes + |= [wen=@da lem=nuri] + ^+ +> + %_ +>.$ + yel + =+ pre=`path`~[(scot %p for) syd (scot %ud let.dom)] + ?- -.lem + | :_ yel + [hen %note '=' %leaf :(weld (trip p.lem) " " (spud pre))] + & |- ^+ yel + ?~ q.p.lem yel + :_ $(q.p.lem t.q.p.lem) + :- hen + :+ %note + ?-(-.q.i.q.p.lem %del '-', %ins '+', %dif ':') + [%leaf (spud (weld pre p.i.q.p.lem))] + == + == + :: + ++ edit :: apply changes + |= [wen=@da lem=nori] + ^+ +> + ?: ?=(%| -.lem) + =^ hat +>.$ + (edit:ze wen lem) + ?~ hat + +>.$ + (echo:(checkout-ankh u.hat) wen lem) + ?. =(~ dok) + ~& %already-applying-changes +> + =+ del=(skim q.p.lem :(corl (cury test %del) head tail)) + =+ ins=(skim q.p.lem :(corl (cury test %ins) head tail)) + =+ dif=(skim q.p.lem :(corl (cury test %dif) head tail)) + =+ mut=(skim q.p.lem :(corl (cury test %mut) head tail)) + =^ ink ins + ^- [(list (pair path miso)) (list (pair path miso))] + %+ skid `(list (pair path miso))`ins + |= [pax=path mis=miso] + ?> ?=(%ins -.mis) + ?& ?=([?(%hoon %hook) *] (flop pax)) + ?=(%mime p.p.mis) + == + =- %_ +>.$ + tag (welp - tag) + dok + :- ~ + :* %+ turn del + |= [pax=path mis=miso] + ?> ?=(%del -.mis) + [pax p.mis] + :: + %+ turn ink + |= [pax=path mis=miso] + ^- (pair path cage) + ?> ?=(%ins -.mis) + =+ =>((flop pax) ?~(. %$ i)) + [pax - [%atom %t] ((hard ,@t) +>.q.q.p.mis)] + :: + ~ + :: + %- mo + %+ turn dif + |= [pax=path mis=miso] + ?> ?=(%dif -.mis) + [pax p.mis] + :: + ~ + :: + %- mo + %+ turn mut + |= [pax=path mis=miso] + ?> ?=(%mut -.mis) + [pax p.mis q.mis] + :: + ~ + :: + ~ + :: + %- mo ^- (list (pair path mime)) + ;: welp + ^- (list (pair path mime)) + %+ murn ins + |= [pax=path mis=miso] + ^- (unit (pair path mime)) + ?> ?=(%ins -.mis) + ?. ?=(%mime p.p.mis) + ~ + `[pax ((hard mime) q.q.p.mis)] + :: + ^- (list (pair path mime)) + %+ murn ink + |= [pax=path mis=miso] + ^- (unit (pair path mime)) + ?> ?=(%ins -.mis) + ?> ?=(%mime p.p.mis) + `[pax ((hard mime) q.q.p.mis)] + :: + ^- (list (pair path mime)) + %+ murn mut + |= [pax=path mis=miso] + ^- (unit (pair path mime)) + ?> ?=(%mut -.mis) + ?. ?=(%mime p.q.mis) + ~ + `[pax ((hard mime) q.q.q.mis)] + == + == + == + ^- (list move) + :~ :* hen %pass + [%inserting (scot %p who) syd (scot %da wen) ~] + %f %exec who [who syd %da wen] ~ %tabl + ^- (list (pair silk silk)) + %+ turn ins + |= [pax=path mis=miso] + ?> ?=(%ins -.mis) + :- [%done ~ %path -:!>(*path) pax] + =+ =>((flop pax) ?~(. %$ i)) + [%cast - [%done ~ p.mis]] + == + :* hen %pass + [%diffing (scot %p who) syd (scot %da wen) ~] + %f %exec who [who syd %da wen] ~ %tabl + ^- (list (pair silk silk)) + %+ turn dif + |= [pax=path mis=miso] + ?> ?=(%dif -.mis) + =+ (need (need (read-x:ze let.dom pax))) + ?> ?=(%& -<) + :- [%done ~ %path -:!>(*path) pax] + [%pact [%done ~ p.-] [%done ~ p.mis]] + == + :* hen %pass + [%castifying (scot %p who) syd (scot %da wen) ~] + %f %exec who [who syd %da wen] ~ %tabl + ^- (list (pair silk silk)) + %+ turn mut + |= [pax=path mis=miso] + ?> ?=(%mut -.mis) + :- [%done ~ %path -:!>(*path) pax] + [%cast p.p.mis [%done ~ q.mis]] + == + == + :: + ++ silkify + |= [wen=@da pax=path mis=miso] + ^- [duct path note] + ~| [%silkifying pax -.mis] + :- hen + ?+ -.mis !! + %mut + :- [%diffing (scot %p who) syd (scot %da wen) pax] + :^ %f %exec who :+ [who syd %da wen] ~ + ^- silk + =+ =+ (slag (dec (lent pax)) pax) + =+ ?~(- %$ i.-) + [%cast - [%done ~ q.mis]] + [%diff [%done ~ p.mis] -] + :: + %ins + :- [%casting (scot %p who) syd (scot %da wen) pax] + :^ %f %exec who :+ [who syd %da wen] ~ + ^- silk + =+ (slag (dec (lent pax)) pax) + =+ ?~(- %$ i.-) + [%cast - [%done ~ p.mis]] + == + :: + ++ apply-edit + |= wen=@da + ^+ +> + =+ ^- sim=(list (pair path misu)) + ?~ dok + ~|(%no-changes !!) + ?> ?=(^ ins.u.dok) + ?> ?=(^ dif.u.dok) + ?> ?=(^ mut.u.dok) + ;: welp + ^- (list (pair path misu)) + (turn del.u.dok |=([pax=path cay=cage] [pax %del cay])) + :: + ^- (list (pair path misu)) + (turn ink.u.dok |=([pax=path cay=cage] [pax %ins cay])) + :: + ^- (list (pair path misu)) + (turn u.ins.u.dok |=([pax=path cay=cage] [pax %ins cay])) + :: + ^- (list (pair path misu)) + (turn u.dif.u.dok |=([pax=path cal=[lobe cage]] [pax %dif cal])) + :: + ^- (list (pair path misu)) + (turn u.mut.u.dok |=([pax=path cal=[lobe cage]] [pax %dif cal])) + == + =+ hat=(edit:ze wen %& *cart sim) + ?~ dok ~& %no-changes !! + ?~ -.hat + ([echo(dok ~)]:.(+>.$ +.hat) wen %& *cart sim) + (checkout-ankh(lat.ran lat.ran.+.hat) u.-.hat) + :: + ++ take-inserting + |= [wen=@da res=(each gage tang)] + ^+ +> + ?~ dok + ~& %clay-take-inserting-unexpected-made +>.$ + ?. =(~ ins.u.dok) + ~& %clay-take-inserting-redundant-made +>.$ + =- =. ins.u.dok `- + ?: ?& ?=(^ dif.u.dok) + ?=(^ mut.u.dok) + == + (apply-edit wen) + +>.$ + ^- (list (pair path cage)) + %+ turn (tage-to-cages (made-to-tage res)) + |= [pax=cage cay=cage] + ?. ?=(%path p.pax) + ~|(%clay-take-inserting-strange-path-mark !!) + [((hard path) q.q.pax) cay] + :: + ++ take-diffing + |= [wen=@da res=(each gage tang)] + ^+ +> + ?~ dok + ~& %clay-take-diffing-unexpected-made +>.$ + ?. =(~ dif.u.dok) + ~& %clay-take-diffing-redundant-made +>.$ + =- =. dif.u.dok `- + ?: ?& ?=(^ ins.u.dok) + ?=(^ mut.u.dok) + == + (apply-edit wen) + +>.$ + ^- (list (trel path lobe cage)) + %+ turn (tage-to-cages (made-to-tage res)) + |= [pax=cage cay=cage] + ^- (pair path (pair lobe cage)) + ?. ?=(%path p.pax) + ~|(%clay-take-diffing-strange-path-mark !!) + =+ paf=((hard path) q.q.pax) + [paf (page-to-lobe:ze [p q.q]:cay) (~(got by dig.u.dok) paf)] + :: + ++ take-castify + |= [wen=@da res=(each gage tang)] + ^+ +> + ?~ dok + ~& %clay-take-castifying-unexpected-made +>.$ + ?. =(~ muh.u.dok) + ~& %clay-take-castifying-redundant-made +>.$ + =+ ^- cat=(list (pair path cage)) + %+ turn (tage-to-cages (made-to-tage res)) + |= [pax=cage cay=cage] + ?. ?=(%path p.pax) + ~|(%castify-bad-path-mark !!) + [((hard path) q.q.pax) cay] + =. muh.u.dok + %- mo + %+ turn cat + |= [pax=path cay=cage] + [pax (page-to-lobe:ze [p q.q]:cay)] + =- %_(+>.$ tag [- tag]) + ^- move + :* hen %pass + [%mutating (scot %p who) syd (scot %da wen) ~] + %f %exec who [who syd %da wen] ~ %tabl + ^- (list (pair silk silk)) + %+ turn cat + |= [pax=path cay=cage] + :- [%done ~ %path -:!>(*path) pax] + [%diff [%done ~ p:(~(got by muc.u.dok) pax)] [%done ~ cay]] + == + :: + ++ take-mutating + |= [wen=@da res=(each gage tang)] + ^+ +> + ?~ dok + ~& %clay-take-mutating-unexpected-made +>.$ + ?. =(~ mut.u.dok) + ~& %clay-take-mutating-redundant-made +>.$ + =- =. mut.u.dok `- + ?: ?& ?=(^ ins.u.dok) + ?=(^ dif.u.dok) + == + (apply-edit wen) + +>.$ + ^- (list (trel path lobe cage)) + %+ murn (tage-to-cages (made-to-tage res)) + |= [pax=cage cay=cage] + ^- (unit (pair path (pair lobe cage))) + ?. ?=(%path p.pax) + ~|(%clay-take-mutating-strange-path-mark !!) + ?: ?=(%null p.cay) + ~ + =+ paf=((hard path) q.q.pax) + `[paf (~(got by muh.u.dok) paf) cay] + :: + ++ take-patch + |= res=(each gage tang) + ^+ +> + :: ~& %taking-patch + ?: ?=(%| -.res) + %_ +>.$ + dok ~ + yel + [[hen %note '!' %rose [" " "" ""] leaf/"clay patch failed" p.res] yel] + == + :: ~& %editing + =+ ^- sim=(list (pair path misu)) + ?~ dok + ~|(%no-changes !!) + ?> ?=(^ ins.u.dok) + ?> ?=(^ dif.u.dok) + ?> ?=(^ mut.u.dok) + ;: welp + ^- (list (pair path misu)) + (turn del.u.dok |=([pax=path cay=cage] [pax %del cay])) + :: + ^- (list (pair path misu)) + (turn ink.u.dok |=([pax=path cay=cage] [pax %ins cay])) + :: + ^- (list (pair path misu)) + (turn u.ins.u.dok |=([pax=path cay=cage] [pax %ins cay])) + :: + ^- (list (pair path misu)) + (turn u.dif.u.dok |=([pax=path cal=[lobe cage]] [pax %dif cal])) + :: + ^- (list (pair path misu)) + (turn u.mut.u.dok |=([pax=path cal=[lobe cage]] [pax %dif cal])) + == + =^ hat +>.$ (edit:ze now %& *cart sim) :: XX we do same thing in ++apply-edit + :: ~& %edited + =. +>.$ wake + :: ~& %woked + ?~ dok ~& %no-dok +>.$ + => + %= . + +>.$ + ?< ?=(~ hat) :: XX whut? + (echo now %& *cart sim) + == + ?~ dok ~& %no-dok +>.$ + =+ cay=p.res + ?@ p.cay ~| %patch-bad-marc !! + :: ~& %canning + =+ ^= can + |- ^- (list ,[path cage]) + ?~ p.p.cay + ~ + :_ %_($ cay [[%tabl t.p.p.cay] (slot 3 q.cay)]) + ?. ?=(%path p.i.p.p.cay) + ~| %patch-strange-marc-a + !! + ?. ?=(@ q.i.p.p.cay) + ~| %patch-strange-marc-b + !! + =+ coy=(slot 2 q.cay) + ?@ q.coy + ~| %patch-strange-coy + !! + :- ((hard path) -.q.coy) + [q.i.p.p.cay (slot 3 coy)] + :: ~& %canned + :: ~& %checking-out + =. ank.dom (checkout-ankh:ze (mo can)) + :: ~& %checked-out + ?~ hez +>.$(dok ~) + ?. syn +>.$(dok ~) + =+ ^= ceq + |= a=miso + ?| ?=(%del -.a) + &(?=(%ins -.a) ?=(%mime -.+.a)) + &(?=(%mut -.a) ?=(%mime -.+>.a)) + == + :: ~& %forming-ergo + :: =- ~& %formed-ergo - + %_ +>.$ + dok ~ + tag :: ?~(hez reg :_(reg [u.hez [%ergo who syd let.dom]])) + :_ tag + :* hen %pass [%ergoing (scot %p who) syd ~] %f + %exec who [who syd %da now] ~ %tabl + ^- (list (pair silk silk)) + %+ turn sim + |= [a=path b=misu] + ^- (pair silk silk) + :- [%done ~ %path !>(a)] + ?: ?=(%del -.b) + [%done ~ %null !>(~)] + =+ (~(get by mim.u.dok) a) + ?^ - [%done ~ %mime !>(u.-)] + :^ %cast %mime %done :- ~ + (need (read:ze %x [%ud let.dom] a)) + == + == + :: + ++ take-ergo + |= res=(each gage tang) + ^+ +> + ?: ?=(%| -.res) + %_ +>.$ + yel + [[hen %note '!' %rose [" " "" ""] leaf/"clay ergo failed" p.res] yel] + == + ?~ hez ~|(%no-sync-duct !!) + ?. syn ~|(%sync-off !!) + =+ cay=p.res + ?@ p.cay ~| %patch-bad-marc !! + %= +>.$ + reg + :_ reg + :* u.hez %ergo who syd let.dom + |- ^- (list ,[path (unit mime)]) + ?~ p.p.cay + ~ + :_ %_($ cay [[%tabl t.p.p.cay] (slot 3 q.cay)]) + ?. ?=(%path p.i.p.p.cay) + ~| %ergo-strange-marc-a + !! + ?. ?=(@ q.i.p.p.cay) + ~| %ergo-strange-marc-b + !! + =+ coy=(slot 2 q.cay) + ?@ q.coy + ~| %ergo-strange-coy + !! + :- ((hard path) -.q.coy) + ?. ?=(%mime q.i.p.p.cay) + ~ + `((hard mime) q:(slot 3 coy)) + == + == + :: + ++ checkout-ankh + |= hat=(map path lobe) + ^+ +> + %_ +>.$ + tag + :_ tag + :* hen %pass [%patching (scot %p who) syd ~] %f + %exec who [who syd %da now] :+ ~ %tabl + ^- (list (pair silk silk)) + %+ turn (~(tap by hat)) + |= [a=path b=lobe] + ^- (pair silk silk) + :- [%done ~ %path !>(a)] + (lobe-to-silk:ze a b) + == + == + :: + ++ apply-foreign-update :: apply subscription + |= $: gar=(map aeon tako) :: new ids + let=aeon :: next id + lar=(set yaki) :: new commits + bar=(set blob) :: new content + == + ^+ +> + %= +> + hit.dom (~(uni by hit.dom) gar) + let.dom let + hut.ran %- ~(uni by hut.ran) + %- mo ^- (list (pair tako yaki)) + %+ turn (~(tap in lar)) + |= yak=yaki + [r.yak yak] + lat.ran %- ~(uni by lat.ran) + %- mo ^- (list (pair lobe blob)) + %+ turn (~(tap in bar)) + |= bol=blob + [p.bol bol] + == + :: + ++ exec :: change and update + |= [wen=@da lem=nori] + ^+ +> + wake:(edit wen lem) + :: + ++ exem :: execute merge + |= [wen=@da her=@p sud=@tas gem=germ] :: aka direct change + !! + :: ?. (gte p.mer let.dom) !! :: no + :: =. +>.$ %= +>.$ + :: hut.ran (~(uni by hut.r.mer) hut.ran) + :: lat.ran (~(uni by lat.r.mer) lat.ran) + :: let.dom p.mer + :: hit.dom (~(uni by q.mer) hit.dom) + :: == + :: =+ ^= hed :: head commit + :: =< q + :: %- ~(got by hut.ran) + :: %- ~(got by hit.dom) + :: let.dom + :: (echa:wake:(checkout-ankh hed)) + :: + ++ take-foreign-update :: external change + |= [inx=@ud rut=(unit rand)] + ^+ +> + ?> ?=(^ ref) + |- ^+ +>+.$ + =+ ruv=(~(get by bom.u.ref) inx) + ?~ ruv +>+.$ + => ?. |(?=(~ rut) ?=(%sing -.q.u.ruv)) . + %_ . + bom.u.ref (~(del by bom.u.ref) inx) + fod.u.ref (~(del by fod.u.ref) p.u.ruv) + == + ?~ rut + =+ rav=`rave`q.u.ruv + %= +>+.$ + lim + ?.(&(?=(%many -.rav) ?=(%da -.q.q.rav)) lim `@da`p.q.q.rav) + :: + haw.u.ref + ?. ?=(%sing -.rav) haw.u.ref + (~(put by haw.u.ref) p.rav ~) + == + ?- p.p.u.rut + %u + ~| %im-thinkin-its-prolly-a-bad-idea-to-request-rang-over-the-network + !! + :: + %v + ~| %weird-we-shouldnt-get-a-dome-request-over-the-network + !! + :: + %x + =< ?> ?=(^ ref) . + (rand-to-rant u.rut) + :: + %w + =. haw.u.ref + %+ ~(put by haw.u.ref) + [p.p.u.rut q.p.u.rut q.u.rut] + :+ ~ + p.r.u.rut + ?+ p.r.u.rut ~| %strange-w-over-nextwork !! + %aeon !>(((hard aeon) q.r.u.rut)) + %null [[%atom %n] ~] + %nako !>(~|([%harding [&1 &2 &3]:q.r.u.rut] ((hard nako) q.r.u.rut))) + == + ?. ?=(%nako p.r.u.rut) +>+.$ + |- ^+ +>+.^$ + =+ nez=[%w [%ud let.dom] ~] + =+ nex=(~(get by haw.u.ref) nez) + ?~ nex +>+.^$ + ?~ u.nex +>+.^$ :: should never happen + =. nak.u.ref `((hard nako) q.q.u.u.nex) + =. +>+.^$ + ?: =(0 let.dom) + => (apply-foreign-update (need nak.u.ref)) + ?>(?=(^ ref) .) + => (validate-plops [%ud let.dom] bar:(need nak.u.ref)) + ?>(?=(^ ref) .) + %= $ + haw.u.ref (~(del by haw.u.ref) nez) + == + :: + %y + %_ +>+.$ + haw.u.ref + %+ ~(put by haw.u.ref) + [p.p.u.rut q.p.u.rut q.u.rut] + `[p.r.u.rut !>(((hard arch) q.r.u.rut))] + == + :: + %z + ~| %its-prolly-reasonable-to-request-ankh-over-the-network-sorry + !! + == + :: + ++ rand-to-rant + |= rut=rand + ^+ +> + ~| [%x-over-network-not-implemented [p q -.r]:rut hen] !! + :: =- %_(+>.$ tag [- tag]) + :: :* hen + :: [%foreign-plops (scot %p who) (scot %p for) syd ~] + :: %f %exec who ~ %tabl + :: ^- (list (pair silk silk)) + :: %+ turn (~(tap in pop)) + :: |= a=plop + :: ?- -.a + :: %delta + :: :- [%done ~ %blob !>([%delta p.a q.a *cage])] + :: [%vale p.r.a him q.r.a] + :: :: + :: %direct + :: :- [%done ~ %blob !>([%direct p.a *cage])] + :: [%vale p.q.a him q.q.a] + :: :: + :: %indirect ~| %foreign-indirect-not-implemented !! + :: == + :: == + :: + ++ validate-plops + |= [cas=case pop=(set plop)] + ^+ +> + =- %_(+>.$ tag [- tag]) + :* hen %pass + [%foreign-plops (scot %p who) (scot %p for) syd ~] + %f %exec who [for syd cas] ~ %tabl + ^- (list (pair silk silk)) + %+ turn (~(tap in pop)) + |= a=plop + ?- -.a + %delta + :- [%done ~ %blob !>([%delta p.a q.a *page])] + [%vale p.r.a for q.r.a] + :: + %direct + :- [%done ~ %blob !>([%direct p.a *page])] + [%vale p.q.a for q.q.a] + :: + %indirect ~| %foreign-indirect-not-implemented !! + == + == + :: + ++ take-foreign-plops + |= res=(each gage tang) + ^+ +> + ?> ?=(^ ref) + ?> ?=(^ nak.u.ref) + ?: ?=(%| -.res) + ~| "validate foreign plops failed" + ~| [%plop-fail (turn p.res |=(tank ~(ram re +<)))] + !! + =+ cay=p.res + ?@ p.cay ~| %plop-bad-marc !! + =+ |- ^- lat=(list blob) + ?~ p.p.cay + ~ + :_ %_($ cay [[%tabl t.p.p.cay] (slot 3 q.cay)]) + ?. ?=(%blob p.i.p.p.cay) + ~| %plop-strange-marc-a + !! + ?. ?=(@ q.i.p.p.cay) + ~| %plop-strange-marc-b + !! + =+ coy=(slot 2 q.cay) + ?@ q.coy + ~| %plop-strange-coy + !! + =+ bol=((hard blob) -.q.coy) + ?- -.bol + %delta [-.bol p.bol q.bol q.i.p.p.cay +.q.coy] + %direct [-.bol p.bol q.i.p.p.cay +.q.coy] + %indirect ~| %plop-indirect-not-implemented !! + == + %^ apply-foreign-update + gar.u.nak.u.ref + let.u.nak.u.ref + [lar.u.nak.u.ref (sa lat)] + :: + ++ mabe :: maybe fire function + |* [rov=rove fun=$+(@da _+>.^$)] + ^+ +>.$ + %- fall :_ +>.$ + %- bind :_ fun + ^- (unit ,@da) + ?- -.rov + %sing + ?. ?=(%da -.q.p.rov) ~ + `p.q.p.rov + :: + %next ~ + %many + =* mot q.rov + %+ hunt + ?. ?=(%da -.p.mot) ~ + ?.((lth now p.p.mot) ~ [~ p.p.mot]) + ?. ?=(%da -.q.mot) ~ + ?.((lth now p.q.mot) [~ now] [~ p.q.mot]) + == + :: + ++ reve + |= rov=rove + ^- rave + ?. ?=(%many -.rov) rov + [%many p.rov p.q.rov q.q.rov r.q.rov] + :: + ++ rive + |= rav=[%many p=? q=moat] + ^- rove + [%many p.rav p.q.rav q.q.rav r.q.rav ~] + :: + ++ wake :: update subscribers + ^+ . + =+ xiq=(~(tap by qyx) ~) + =| xaq=(list ,[p=duct q=rove]) + |- ^+ ..wake + ?~ xiq + ..wake(qyx (~(gas by *cult) xaq)) + ?- -.q.i.xiq + %sing + =+ cas=?~(ref ~ (~(get by haw.u.ref) `mood`p.q.i.xiq)) + ?^ cas + %= $ + xiq t.xiq + ..wake ?~ u.cas (blub p.i.xiq) + (blab p.i.xiq p.q.i.xiq %& u.u.cas) + == + =+ nao=(case-to-aeon:ze q.p.q.i.xiq) + ?~ nao $(xiq t.xiq, xaq [i.xiq xaq]) + :: ~& %reading-at-aeon + =+ vid=(read-at-aeon:ze u.nao p.q.i.xiq) + :: ~& %red-at-aeon + ?~ vid + ~& [%oh-well mood=p.q.i.xiq aeon=nao] + $(xiq t.xiq, xaq [i.xiq xaq]) + $(xiq t.xiq, ..wake (balk p.i.xiq u.vid p.q.i.xiq)) + :: + %next + =* mun p.q.i.xiq + =+ ver=(aver mun) + ?~ ver + $(xiq t.xiq, xaq [i.xiq xaq]) + ?~ u.ver + $(xiq t.xiq, ..wake (blub p.i.xiq)) + =+ var=(aver mun(q [%ud let.dom])) + ?~ var + ~& [%oh-noes mood=mun letdom=let.dom] + $(xiq t.xiq) + ?~ u.var + $(xiq t.xiq, ..wake (blab p.i.xiq mun %& %null [%atom %n] ~)) + ?: (equivalent-data:ze u.u.ver u.u.var) + $(xiq t.xiq, xaq [i.xiq xaq]) + $(xiq t.xiq, ..wake (blab p.i.xiq mun u.u.var)) + :: + %many + =+ mot=`moot`q.q.i.xiq + =+ nab=(case-to-aeon:ze p.mot) + ?~ nab + $(xiq t.xiq, xaq [i.xiq xaq]) + =+ huy=(case-to-aeon:ze q.mot) + ?~ huy + =+ ptr=[%ud +(let.dom)] + %= $ + xiq t.xiq + xaq [[p.i.xiq [%many p.q.i.xiq ptr q.mot r.mot s.mot]] xaq] + ..wake =+ ^= ear + (lobes-at-path:ze let.dom r.mot) + ?: =(s.mot ear) ..wake + (bleb p.i.xiq let.dom ?:(p.q.i.xiq ~ `[u.nab let.dom])) + == + %= $ + xiq t.xiq + ..wake =- (blub:- p.i.xiq) + =+ ^= ear + (lobes-at-path:ze u.huy r.mot) + ?: =(s.mot ear) (blub p.i.xiq) + (bleb p.i.xiq +(u.nab) ?:(p.q.i.xiq ~ `[u.nab u.huy])) + == + == + ++ ze + |% + ++ aeon-to-tako ~(got by hit.dom) + ++ aeon-to-yaki (cork aeon-to-tako tako-to-yaki) + ++ lobe-to-blob ~(got by lat.ran) + ++ tako-to-yaki ~(got by hut.ran) + ++ lobe-to-mark + |= a=lobe + => (lobe-to-blob a) + ?- - + %delta p.q + %direct p.q + %indirect p.q + == + ++ lobe-to-silk :: XX maybe move hoo{n,k} stuff here + |= [pax=path lob=lobe] + ^- silk + =+ ^- hat=(map path lobe) + ?: =(let.dom 0) + ~ + q:(aeon-to-yaki let.dom) + =+ lol=`(unit lobe)`?.(=(~ ref) `0vsen.tinel (~(get by hat) pax)) + |- ^- silk + ?: =([~ lob] lol) + =+ (need (need (read-x let.dom pax))) + ?> ?=(%& -<) + [%done ~ p.-] + =+ bol=(~(got by lat.ran) lob) + ?- -.bol + %direct [%volt ~ q.bol] + %indirect [%volt ~ q.bol] + %delta [%pact $(lob q.q.bol) [%volt ~ r.bol]] + == + :: + ++ page-to-lobe |=(page (shax (jam +<))) + ++ equivalent-data + |= [one=(each cage lobe) two=(each cage lobe)] + ^- ? + ?: ?=(%& -.one) + ?: ?=(%& -.two) + =([p q.q]:p.one [p q.q]:p.two) + =(p.two (page-to-lobe [p q.q]:p.one)) + ?: ?=(%& -.two) + =(p.one (page-to-lobe [p q.q]:p.two)) + =(p.one p.two) + :: + ++ make-direct :: make blob + |= p=page + ^- blob + [%direct (page-to-lobe p) p] + :: + ++ make-delta :: make blob delta + |= [p=lobe q=[p=mark q=lobe] r=page] + ^- blob + [%delta p q r] + :: + ++ make-yaki :: make yaki + |= [p=(list tako) q=(map path lobe) t=@da] + ^- yaki + =+ ^= has + %^ cat 7 (sham [%yaki (roll p add) q t]) + (sham [%tako (roll p add) q t]) + [p q has t] + :: + ++ apply-changes :: apply-changes:ze + |= lar=(list ,[p=path q=misu]) :: store changes + ^- (map path blob) + =+ ^= hat :: current state + ?: =(let.dom 0) :: initial commit + ~ :: has nothing + =< q + %- aeon-to-yaki + let.dom + =- =+ sar=(sa (turn lar |=([p=path *] p))) :: changed paths + %+ roll (~(tap by hat) ~) :: find unchanged + =< .(bat bar) + |= [[pax=path gar=lobe] bat=(map path blob)] + ?: (~(has in sar) pax) :: has update + bat + %+ ~(put by bat) pax + ~| [pax gar (lent (~(tap by lat.ran)))] + (lobe-to-blob gar) :: use original + ^= bar ^- (map path blob) + %+ roll lar + |= [[pax=path mys=misu] bar=(map path blob)] + ^+ bar + ?- -.mys + %ins :: insert if not exist + ?: (~(has by bar) pax) !! :: + ?: (~(has by hat) pax) !! :: + %+ ~(put by bar) pax + %- make-direct + ?: &(?=(%mime -.p.mys) =([%hook ~] (slag (dec (lent pax)) pax))) + `page`[%hook +.+.q.q.p.mys] + ?: &(?=(%mime -.p.mys) =([%hoon ~] (slag (dec (lent pax)) pax))) + `page`[%hoon +.+.q.q.p.mys] + [p q.q]:p.mys + %del :: delete if exists + ?. |((~(has by hat) pax) (~(has by bar) pax)) !! + (~(del by bar) pax) + %dif :: mutate, must exist + =+ ber=(~(get by bar) pax) :: XX typed + =+ for==>((flop pax) ?~(. %$ i)) + ?~ ber + =+ har=(~(get by hat) pax) + ?~ har !! + %+ ~(put by bar) pax + (make-delta p.mys [(lobe-to-mark u.har) u.har] [p q.q]:q.mys) + :: XX check vase !evil + %+ ~(put by bar) pax + (make-delta p.mys [(lobe-to-mark p.u.ber) p.u.ber] [p q.q]:q.mys) + :: XX check vase !evil + == + :: + ++ as-arch + ^- arch + :+ p.ank.dom + ?~(q.ank.dom ~ [~ p.u.q.ank.dom]) + |- ^- (map ,@ta ,~) + ?~ r.ank.dom ~ + [[p.n.r.ank.dom ~] $(r.ank.dom l.r.ank.dom) $(r.ank.dom r.r.ank.dom)] + :: + ++ case-to-aeon :: case-to-aeon:ze + |= lok=case :: act count through + ^- (unit aeon) + ?- -.lok + %da + ?: (gth p.lok lim) ~ + |- ^- (unit aeon) + ?: =(0 let.dom) [~ 0] :: avoid underflow + ?: %+ gte p.lok + =< t + ~| [%letdom let=let.dom hit=hit.dom hut=(~(run by hut.ran) ,~)] + ~| [%getdom (~(get by hit.dom) let.dom)] + %- aeon-to-yaki + let.dom + [~ let.dom] + $(let.dom (dec let.dom)) + :: + %tas (~(get by lab.dom) p.lok) + %ud ?:((gth p.lok let.dom) ~ [~ p.lok]) + == + :: + ++ checkout-ankh + |= hat=(map path cage) + ^- ankh + %- cosh + %+ roll (~(tap by hat) ~) + |= [[pat=path zar=cage] ank=ankh] + ^- ankh + %- cosh + ?~ pat + ank(q [~ (sham q.q.zar) zar]) + =+ nak=(~(get by r.ank) i.pat) + %= ank + r %+ ~(put by r.ank) i.pat + $(pat t.pat, ank (fall nak *ankh)) + == + :: + ++ cosh + |= ank=ankh + %_ ank + p + ^- cash + %+ mix ?~(q.ank 0 p.u.q.ank) + =+ axe=1 + |- ^- cash + ?~ r.ank *@ + ;: mix + (shaf %dash (mix axe (shaf %dush (mix p.n.r.ank p.q.n.r.ank)))) + $(r.ank l.r.ank, axe (peg axe 2)) + $(r.ank r.r.ank, axe (peg axe 3)) + == + == + :: + ++ edit :: edit:ze + |= [wen=@da lem=nuri] :: edit + ^- [(unit (map path lobe)) _..ze] + ?- -.lem + & =^ yak lat.ran :: merge objects + %+ forge-yaki wen + ?: =(let.dom 0) :: initial import + [~ p.lem] + [(some r:(aeon-to-yaki let.dom)) p.lem] + ?. ?| =(0 let.dom) + !=((lent p.yak) 1) + !(equiv q.yak q:(aeon-to-yaki let.dom)) + == + `..ze :: silently ignore + =: let.dom +(let.dom) + hit.dom (~(put by hit.dom) +(let.dom) r.yak) + hut.ran (~(put by hut.ran) r.yak yak) + == + [`q.yak ..ze] + :: +>.$(ank (checkout-ankh q.yak)) + | ?< (~(has by lab.dom) p.lem) + [~ ..ze(lab.dom (~(put by lab.dom) p.lem let.dom))] + == + :: + ++ equiv :: test paths + |= [p=(map path lobe) q=(map path lobe)] + ^- ? + =- ?. qat %.n + %+ levy (~(tap by q) ~) + |= [pat=path lob=lobe] + (~(has by p) pat) + ^= qat + %+ levy (~(tap by p) ~) + |= [pat=path lob=lobe] + =+ zat=(~(get by q) pat) + ?~ zat %.n + =(u.zat lob) + :: =((lobe-to-cage u.zat) (lobe-to-cage lob)) + :: + ++ forge-nori :: forge-nori:ze + |= yak=yaki :: forge nori + ^- nori + !! + :: ?~ p.yak !! :: no parent, no diff + :: :+ %& *cart :: diff w/ 1st parent + :: (~(tap by (diff-yakis (tako-to-yaki i.p.yak) yak)) ~) + :: + ++ forge-yaki :: forge-yaki:ze + |= [wen=@da par=(unit tako) lem=suba] :: forge yaki + =+ ^= per + ?~ par ~ + ~[u.par] + =+ gar=(update-lat (apply-changes q.lem) lat.ran) + :- (make-yaki per +.gar wen) :: from existing diff + -.gar :: fix lat + :: + ++ lobes-at-path :: lobes-at-path:ze + |= [yon=aeon pax=path] :: data at path + ^- (map path lobe) + ?: =(0 yon) ~ + %- mo + %+ skim + %. ~ + %~ tap by + =< q + %- aeon-to-yaki + yon + |= [p=path q=lobe] + ?| ?=(~ pax) + ?& !?=(~ p) + =(-.pax -.p) + $(p +.p, pax +.pax) + == == + :: + ++ make-nako + |= [a=aeon b=aeon] + ^- nako + :+ hit.dom + let.dom + (data-twixt-takos (~(get by hit.dom) a) (aeon-to-tako b)) + :: + ++ query :: query:ze + |= ren=?(%u %v %x %y %z) :: endpoint query + ^- (unit cage) + ?- ren + %u !! :: [~ %null [%atom %n] ~] + %v [~ %dome !>(dom)] + %x !! :: ?~(q.ank.dom ~ [~ q.u.q.ank.dom]) + %y !! :: [~ %arch !>(as-arch)] + %z [~ %ankh !>(ank.dom)] + == + :: + ++ new-lobes :: object hash set + |= [b=(set lobe) a=(set tako)] :: that aren't in b + ^- (set lobe) + %+ roll (~(tap in a) ~) + |= [tak=tako bar=(set lobe)] + ^- (set lobe) + =+ yak=(tako-to-yaki tak) + %+ roll (~(tap by q.yak) ~) + =< .(far bar) + |= [[path lob=lobe] far=(set lobe)] + ^- (set lobe) + ?~ (~(has in b) lob) :: don't need + far + =+ gar=(lobe-to-blob lob) + ?- -.gar + %direct (~(put in far) lob) + %delta (~(put in $(lob q.q.gar)) lob) + %indirect (~(put in $(lob r.gar)) lob) + == + :: + ++ data-twixt-takos + |= [a=(unit tako) b=tako] + ^- [(set yaki) (set plop)] + =+ old=?~(a ~ (reachable-takos u.a)) + =+ ^- yal=(set tako) + %- sa + %+ skip + (~(tap in (reachable-takos b))) + |=(tak=tako (~(has in old) tak)) + :- (sa (turn (~(tap in yal)) tako-to-yaki)) + (sa (turn (~(tap in (new-lobes (new-lobes ~ old) yal))) lobe-to-blob)) + :: + ++ reachable-takos :: reachable + |= p=tako :: XX slow + ^- (set tako) + =+ y=(tako-to-yaki p) + =+ t=(~(put in *(set tako)) p) + %+ roll p.y + =< .(s t) + |= [q=tako s=(set tako)] + ?: (~(has in s) q) :: already done + s :: hence skip + (~(uni in s) ^$(p q)) :: otherwise traverse + :: + ++ read :: read:ze + |= mun=mood :: read at point + ^- (unit cage) + ?: ?=(%v p.mun) + [~ %dome !>(dom)] + ?: &(?=(%w p.mun) !?=(%ud -.q.mun)) + ?^(r.mun ~ [~ %aeon !>(let.dom)]) + ?: ?=(%w p.mun) + =+ ^= yak + %- aeon-to-yaki + let.dom + ?^(r.mun ~ [~ %w !>([t.yak (forge-nori yak)])]) + (query(ank.dom ank:(descend-path:(zu ank.dom) r.mun)) p.mun) + :: + ++ read-u + |= [yon=aeon pax=path] + ^- (unit (unit (each ,[%null (hypo ,~)] lobe))) + =+ tak=(~(get by hit.dom) yon) + ?~ tak + ~ + ```[%null [%atom %n] ~] + :: + ++ read-x + |= [yon=aeon pax=path] + ^- (unit (unit (each cage lobe))) + =+ tak=(~(get by hit.dom) yon) + ?~ tak + ~ + ?: &(?=(~ ref) =(yon let.dom)) + `(bind q.ank:(descend-path:(zu ank.dom) pax) (corl (cury same %&) tail)) + =+ yak=(tako-to-yaki u.tak) + =+ lob=(~(get by q.yak) pax) + ?~ lob + [~ ~] + =+ mar=(lobe-to-mark u.lob) + ?. ?=(?(%hoon %hook) mar) + [~ ~ %| u.lob] + :^ ~ ~ %& + :+ mar [%atom %t] + |- ^- @t :: (urge cord) would be faster + =+ bol=(lobe-to-blob u.lob) + ?: ?=(%direct -.bol) + ((hard ,@t) q.q.bol) + ?: ?=(%indirect -.bol) + ((hard ,@t) q.q.bol) + ?> ?=(%delta -.bol) + =+ txt=$(u.lob q.q.bol) + ?> ?=(%txt-diff p.r.bol) + =+ dif=((hard (urge cord)) q.r.bol) + =+ pac=(role (lurk (lore (cat 3 txt '\0a')) dif)) + (end 3 (dec (met 3 pac)) pac) + :: + ++ read-y + |= [yon=aeon pax=path] + ^- (unit (unit ,[%arch (hypo arch)])) + =+ tak=(~(get by hit.dom) yon) + ?~ tak + ~ + =+ yak=(tako-to-yaki u.tak) + =+ len=(lent pax) + :^ ~ ~ %arch + :- -:!>(*arch) + ^- arch + =+ ^- descendants=(list (pair path lobe)) + %+ turn + %+ skim (~(tap by (~(del by q.yak) pax))) + |= [paf=path lob=lobe] + =(pax (scag len paf)) + |= [paf=path lob=lobe] + [(slag len paf) lob] + =+ us=(~(get by q.yak) pax) + :+ ?: &(?=(~ descendants) ?=(~ us)) + *@uvI + %+ roll + ^- (list (pair path lobe)) + [[~ ?~(us *lobe u.us)] descendants] + |=([[path lobe] @uvI] (shax (jam +<))) + us + ^- (map span ,~) + %- mo ^- (list (pair span ,~)) + %+ turn descendants + |= [paf=path lob=lobe] + [?>(?=(^ paf) i.paf) ~] + :: + ++ read-at-aeon :: read-at-aeon:ze + |= [yon=aeon mun=mood] :: seek and read + ^- (unit (unit (each cage lobe))) + ?: &(?=(%w p.mun) !?=(%ud -.q.mun)) :: NB only for speed + ?^(r.mun [~ ~] [~ ~ %& %aeon !>(yon)]) + ?: ?=(%u p.mun) + (read-u yon r.mun) + ?: ?=(%x p.mun) + (read-x yon r.mun) + ?: ?=(%y p.mun) + (bind (read-y yon r.mun) (curr bind (cury same %&))) + %+ bind + (rewind yon) + |= a=(unit ,_+>.$) + ^- (unit (each cage lobe)) + ?~ a + ~ + `(unit (each cage lobe))`(bind (read:u.a mun) (cury same %&)) + :: + ++ rewind :: rewind:ze + |= yon=aeon :: rewind to aeon + ^- (unit (unit ,_+>)) + ?: =(let.dom yon) ``+> + ?: (gth yon let.dom) !! :: don't have version + =+ hat=q:(aeon-to-yaki yon) + ?: (~(any by hat) |=(a=lobe ?=(%delta [-:(lobe-to-blob a)]))) + ~ + ~ + ::=+ ^- (map path cage) + :: %- ~(run by hat) + :: |= a=lobe + :: =+ (lobe-to-blob a) + :: ?-(-.- %direct q.-, %indirect q.-, %delta !!) + ::`+>.$(ank.dom (checkout-ankh -), let.dom yon) + :: + ++ update-lat :: update-lat:ze + |= [lag=(map path blob) sta=(map lobe blob)] :: fix lat + ^- [(map lobe blob) (map path lobe)] + %+ roll (~(tap by lag) ~) + =< .(lut sta) + |= [[pat=path bar=blob] [lut=(map lobe blob) gar=(map path lobe)]] + ?~ (~(has by lut) p.bar) + [lut (~(put by gar) pat p.bar)] + :- (~(put by lut) p.bar bar) + (~(put by gar) pat p.bar) + :: + ++ zu :: filesystem + |= ank=ankh :: filesystem state + =| ram=path :: reverse path into + |% + ++ descend :: descend + |= lol=@ta + ^+ +> + =+ you=(~(get by r.ank) lol) + +>.$(ram [lol ram], ank ?~(you [*cash ~ ~] u.you)) + :: + ++ descend-path :: descend recursively + |= way=path + ^+ +> + ?~(way +> $(way t.way, +> (descend i.way))) + -- + :: + ++ me :: merge ali into bob + |= [ali=(pair ship desk) alh=(unit ankh)] :: from + =+ bob=`(pair ship desk)`[who syd] :: to + =+ dat=(fall (~(get by mer) ali) *mery) :: merge data + =| don=? :: keep going + |% + ++ abet + ^+ ..me + ?: don + ..me(mer (~(put by mer) ali dat)) + ..me(mer (~(del by mer) ali), reg :_(reg [hen %mere gon.dat])) + :: + ++ route + |= [sat=term res=(each riot (each gage tang))] + ^+ +>.$ + ?+ sat ~|((crip <[%bad-stage sat]>) !!) + %ali %- fetched-ali ?> ?=(%& -.res) p.res + %diff-ali %- diffed-ali ?> ?=(%| -.res) p.res + %diff-bob %- diffed-bob ?> ?=(%| -.res) p.res + %merge %- merged ?> ?=(%| -.res) p.res + %build %- built ?> ?=(%| -.res) p.res + %checkout %- checked-out ?> ?=(%| -.res) p.res + %ergo %- ergoed ?> ?=(%| -.res) p.res + == + :: + ++ start + |= gem=germ + ^+ +> + ?: (~(has by mer) ali) + (error:he %already-merging ~) + ?: &(=(0 let.dom) !?=(?(%init %that) gem)) + (error:he %no-bob-desk ~) + =. gem.dat gem + =. cas.dat [%da now] + ?: =(0 let.dom) + fetch-ali(gem.dat %init) + =+ (~(get by hit.dom) let.dom) + ?~ - + (error:he %no-bob--version ~) + =+ (~(get by hut.ran) u.-) + ?~ - + (error:he %no-bob-commit ~) + fetch-ali(bob.dat u.-) + :: + ++ fetch-ali + ^+ . + =- %_(+ tag [- tag]) + :* hen %pass + [%merge (scot %p p.bob) q.bob (scot %p p.ali) q.ali %ali ~] + %c %warp [p.bob p.ali] q.ali + `[%sing %v cas.dat /] + == + :: + ++ fetched-ali + |= rot=riot + ^+ +> + ?~ rot + (error:he %bad-fetch-ali ~) + =+ ^= dum + %- (hard ,[ank=* let=@ud hit=(map ,@ud tako) lab=(map ,@tas ,@ud)]) + q.q.r.u.rot + ?: =(0 let.dum) + (error:he %no-ali-desk ~) + =+ (~(get by hit.dum) let.dum) + ?~ - + (error:he %no-ali-version ~) + =+ (~(get by hut.ran) u.-) + ?~ - + (error:he %no-ali-commit ~) + =. ali.dat u.- + |- + ?- gem.dat + %init + ?. =(let.dom 0) + (error:he %bad-init-merge ~) + :: skim hook/hoon files/ + =. new.dat ali.dat + =. hut.ran (~(put by hut.ran) r.new.dat new.dat) + =. erg.dat (~(run by q.ali.dat) |=(lobe %&)) + checkout + :: + %fine + ?: =(r.ali.dat r.bob.dat) + :: ~& [%fine-trivial ali= bob= r.ali.dat r.bob.dat] + (done:he ~) + ?: (~(has in (reachable-takos r.bob.dat)) r.ali.dat) + :: ~& [%fine-mostly-trivial ali= bob=] + (done:he ~) + ?. (~(has in (reachable-takos r.ali.dat)) r.bob.dat) + :: ~& [%fine-not-so-trivial ali= bob=] + (error:he %bad-fine-merge ~) + :: ~& [%fine-lets-go ali= bob=] + =. new.dat ali.dat + =. erg.dat + %- mo ^- (list ,[path ?]) + %+ murn (~(tap by (~(uni by q.bob.dat) q.ali.dat))) + |= [pax=path lob=lobe] + ^- (unit ,[path ?]) + =+ a=(~(get by q.ali.dat) pax) + =+ b=(~(get by q.bob.dat) pax) + ?: =(a b) + ~ + `[pax !=(~ a)] + checkout + :: + %this + ?: =(r.ali.dat r.bob.dat) + (done:he ~) + ?: (~(has in (reachable-takos r.bob.dat)) r.ali.dat) + (done:he ~) + =. new.dat (make-yaki [r.ali.dat r.bob.dat ~] q.bob.dat now) + =. hut.ran (~(put by hut.ran) r.new.dat new.dat) + =. erg.dat ~ + checkout + :: + %that + ?: =(r.ali.dat r.bob.dat) + (done:he ~) + ?: (~(has in (reachable-takos r.bob.dat)) r.ali.dat) + (done:he ~) + =. new.dat (make-yaki [r.ali.dat r.bob.dat ~] q.ali.dat now) + =. hut.ran (~(put by hut.ran) r.new.dat new.dat) + =. erg.dat + %- mo ^- (list ,[path ?]) + %+ murn (~(tap by (~(uni by q.bob.dat) q.ali.dat))) + |= [pax=path lob=lobe] + ^- (unit ,[path ?]) + =+ a=(~(get by q.ali.dat) pax) + =+ b=(~(get by q.bob.dat) pax) + ?: =(a b) + ~ + `[pax !=(~ a)] + checkout + :: + ?(%meet %mate %meld) + ?: =(r.ali.dat r.bob.dat) + (done:he ~) + ?: (~(has in (reachable-takos r.bob.dat)) r.ali.dat) + (done:he ~) + ?: (~(has in (reachable-takos r.ali.dat)) r.bob.dat) + $(gem.dat %fine) + =+ r=(find-merge-points:he ali.dat bob.dat) + ?~ r + (error:he %merge-no-merge-base ~) + ?. ?=([* ~ ~] r) + =+ (lent (~(tap in `(set yaki)`r))) + (error:he %merge-criss-cross >[-]< ~) + =. bas.dat n.r + ?: ?=(?(%mate %meld) gem.dat) + diff-ali + =. new.dal.dat + %- mo + %+ skip (~(tap by q.ali.dat)) + |= [pax=path lob=lobe] + (~(has by q.bas.dat) pax) + =. cal.dal.dat + %- mo + %+ skip (~(tap by q.ali.dat)) + |= [pax=path lob=lobe] + =+ (~(get by q.bas.dat) pax) + |(=(~ -) =([~ lob] -)) + =. can.dal.dat + ~ + =. old.dal.dat + %- mo ^- (list ,[path ~]) + %+ murn (~(tap by q.bas.dat)) + |= [pax=path lob=lobe] + ^- (unit (pair path ,~)) + ?. =(~ (~(get by q.ali.dat) pax)) + ~ + `[pax ~] + =. new.dob.dat + %- mo + %+ skip (~(tap by q.bob.dat)) + |= [pax=path lob=lobe] + (~(has by q.bas.dat) pax) + =. cal.dob.dat + %- mo + %+ skip (~(tap by q.bob.dat)) + |= [pax=path lob=lobe] + =+ (~(get by q.bas.dat) pax) + |(=(~ -) =([~ lob] -)) + =. can.dob.dat + ~ + =. old.dob.dat + %- mo ^- (list ,[path ~]) + %+ murn (~(tap by q.bas.dat)) + |= [pax=path lob=lobe] + ^- (unit (pair path ,~)) + ?. =(~ (~(get by q.bob.dat) pax)) + ~ + `[pax ~] + =+ ^= bof + %- %~ int by + %- ~(uni by `(map path ,*)`new.dal.dat) + %- ~(uni by `(map path ,*)`cal.dal.dat) + %- ~(uni by `(map path ,*)`can.dal.dat) + `(map path ,*)`old.dal.dat + %- ~(uni by `(map path ,*)`new.dob.dat) + %- ~(uni by `(map path ,*)`cal.dob.dat) + %- ~(uni by `(map path ,*)`can.dob.dat) + `(map path ,*)`old.dob.dat + ?^ bof + (error:he %meet-conflict >(~(run by `(map path ,*)`bof) ,_~)< ~) + =+ ^- old=(map path lobe) + %+ roll (~(tap by (~(uni by old.dal.dat) old.dob.dat))) + =< .(old q.bas.dat) + |= [[pax=path ~] old=(map path lobe)] + (~(del by old) pax) + =+ ^= hat + %- ~(uni by old) + %- ~(uni by new.dal.dat) + %- ~(uni by new.dob.dat) + %- ~(uni by cal.dal.dat) + cal.dob.dat + =+ ^- del=(map path ,?) + (~(run by (~(uni by old.dal.dat) old.dob.dat)) |=(~ %|)) + =. new.dat + (make-yaki [r.ali.dat r.bob.dat ~] hat now) + =. hut.ran (~(put by hut.ran) r.new.dat new.dat) + =. erg.dat %- ~(uni by del) + ^- (map path ,?) + %. |=(lobe %&) + ~(run by (~(uni by new.dal.dat) cal.dal.dat)) + checkout + == + :: + ++ diff-bas + |= [nam=term yak=yaki oth=(pair ship desk) yuk=yaki] + ^+ +> + =- %_(+>.$ tag [- tag]) + :* hen %pass + =+ (cat 3 %diff- nam) + [%merge (scot %p p.bob) q.bob (scot %p p.ali) q.ali - ~] + %f %exec p.bob [p.oth q.oth cas.dat] ~ %tabl + ^- (list (pair silk silk)) + %+ murn (~(tap by q.bas.dat)) + |= [pax=path lob=lobe] + ^- (unit (pair silk silk)) + =+ a=(~(get by q.yak) pax) + ?~ a + ~ + ?: =(lob u.a) + ~ + =+ (~(get by q.yuk) pax) + ?~ - + ~ + ?: =(u.a u.-) + ~ + :- ~ + :- [%done ~ %path !>(pax)] + [%diff (lobe-to-silk pax lob) (lobe-to-silk pax u.a)] + == + :: + ++ diff-ali + ^+ . + (diff-bas %ali ali.dat ali bob.dat) + :: + ++ diffed-ali + |= res=(each gage tang) + ^+ +> + ?: ?=(%| -.res) + (error:he %diff-ali-bad-made leaf/"merge diff ali failed" p.res) + =+ cay=p.res + ?@ p.cay + (error:he %diff-ali-bad-marc >p.cay< ~) + =| can=(map path cage) + => + |- ^+ + + ?~ p.p.cay + +.$(can ~) + =+ tal=%_($ cay [[%tabl t.p.p.cay] (slot 3 q.cay)]) + ?: ?=(%| -.gon.dat.tal) + tal + ?. ?=(%path p.i.p.p.cay) + +.$(+>.$ (error:he %diff-ali-strange-marc-a >p.i.p.p.cay< ~)) + ?. ?=(@ q.i.p.p.cay) + +.$(+>.$ (error:he %diff-ali-strange-marc-b >q.i.p.p.cay< ~)) + =+ coy=(slot 2 q.cay) + ?@ q.coy + +.$(+>.$ (error:he %diff-ali-strange-coy ~)) + %_ +.$ + can + %+ ~(put by can:tal) + ((hard path) -.q.coy) + [q.i.p.p.cay (slot 3 coy)] + == + ?: ?=(%| -.gon.dat) + +>.$ + =. new.dal.dat + %- mo + %+ skip (~(tap by q.ali.dat)) + |= [pax=path lob=lobe] + (~(has by q.bas.dat) pax) + =. cal.dal.dat + %- mo + %+ skim (~(tap by q.bas.dat)) + |= [pax=path lob=lobe] + =+ a=(~(get by q.ali.dat) pax) + =+ b=(~(get by q.bob.dat) pax) + ?& ?=(^ a) + !=([~ lob] a) + =([~ lob] b) + == + =. can.dal.dat can + =. old.dal.dat + %- mo ^- (list ,[path ~]) + %+ murn (~(tap by q.bas.dat)) + |= [pax=path lob=lobe] + ?. =(~ (~(get by q.ali.dat) pax)) + ~ + (some pax ~) + diff-bob + :: + ++ diff-bob + ^+ . + (diff-bas %bob bob.dat bob ali.dat) + :: + ++ diffed-bob + |= res=(each gage tang) + ^+ +> + ?: ?=(%| -.res) + (error:he %diff-bob-bad-made leaf/"merge diff bob failed" p.res) + =+ cay=p.res + ?@ p.cay + (error:he %diff-bob-bad-marc >p.cay< ~) + =| can=(map path cage) + => + |- ^+ + + ?~ p.p.cay + +.$(can ~) + =+ tal=%_($ cay [[%tabl t.p.p.cay] (slot 3 q.cay)]) + ?: ?=(%| -.gon.dat.tal) + tal + ?. ?=(%path p.i.p.p.cay) + +.$(+>.$ (error:he %diff-bob-strange-marc-a >p.i.p.p.cay< ~)) + ?. ?=(@ q.i.p.p.cay) + +.$(+>.$ (error:he %diff-bob-strange-marc-b >q.i.p.p.cay< ~)) + =+ coy=(slot 2 q.cay) + ?@ q.coy + +.$(+>.$ (error:he %diff-bob-strange-coy ~)) + %_ +.$ + can + %+ ~(put by can:tal) + ((hard path) -.q.coy) + [q.i.p.p.cay (slot 3 coy)] + == + ?: ?=(%| -.gon.dat) + +>.$ + =. new.dob.dat + %- mo + %+ skip (~(tap by q.bob.dat)) + |= [pax=path lob=lobe] + (~(has by q.bas.dat) pax) + =. cal.dob.dat + %- mo + %+ skim (~(tap by q.bas.dat)) + |= [pax=path lob=lobe] + =+ a=(~(get by q.ali.dat) pax) + =+ b=(~(get by q.bob.dat) pax) + ?& ?=(^ b) + !=([~ lob] b) + =([~ lob] a) + == + =. can.dob.dat can + =. old.dob.dat + %- mo ^- (list ,[path ~]) + %+ murn (~(tap by q.bas.dat)) + |= [pax=path lob=lobe] + ?. =(~ (~(get by q.bob.dat) pax)) + ~ + (some pax ~) + merge + :: + ++ merge + ^+ . + |- ^+ +.$ + ?+ gem.dat ~| [%merge-weird-gem gem.dat] !! + ?(%mate %meld) + =- %_(+.$ tag [- tag]) + :* hen %pass + [%merge (scot %p p.bob) q.bob (scot %p p.ali) q.ali %merge ~] + %f %exec p.bob [p.bob q.bob cas.dat] ~ %tabl + ^- (list (pair silk silk)) + %+ turn (~(tap by (~(int by can.dal.dat) can.dob.dat))) + |= [pax=path *] + ^- (pair silk silk) + =+ cal=(~(got by can.dal.dat) pax) + =+ cob=(~(got by can.dob.dat) pax) + =+ ^= for + =+ (slag (dec (lent pax)) pax) + ?~(- %$ i.-) + :- [%done ~ %path !>(pax)] + [%join for [%done ~ cal] [%done ~ cob]] + == + == + :: + ++ merged + |= res=(each gage tang) + ?: ?=(%| -.res) + (error:he %merge-bad-made leaf/"merging failed" p.res) + =+ cay=p.res + ?@ p.cay + (error:he %merge-bad-marc >p.cay< ~) + =| bof=(map path (unit cage)) + => + |- ^+ + + ?~ p.p.cay + +.$(bof ~) + =+ tal=%_($ cay [[%tabl t.p.p.cay] (slot 3 q.cay)]) + ?: ?=(%| -.gon.dat.tal) + tal + ?. ?=(%path p.i.p.p.cay) + +.$(+>.$ (error:he %merge-strange-marc-a >p.i.p.p.cay< ~)) + ?. ?=(@ q.i.p.p.cay) + +.$(+>.$ (error:he %merge-strange-marc-b >q.i.p.p.cay< ~)) + =+ coy=(slot 2 q.cay) + ?@ q.coy + +.$(+>.$ (error:he %merge-strange-coy ~)) + %_ +.$ + bof + %+ ~(put by bof:tal) + ((hard path) -.q.coy) + ?: ?=(%null q.i.p.p.cay) + ~ + `[q.i.p.p.cay (slot 3 coy)] + == + ?: ?=(%| -.gon.dat) + +>.$ + =. bof.dat bof + build + :: + ++ build + ^+ . + =- %_(+ tag [- tag]) + :* hen %pass + [%merge (scot %p p.bob) q.bob (scot %p p.ali) q.ali %build ~] + %f %exec p.bob [p.bob q.bob cas.dat] ~ %tabl + ^- (list (pair silk silk)) + %+ murn (~(tap by bof.dat)) + |= [pax=path cay=(unit cage)] + ^- (unit (pair silk silk)) + ?~ cay + ~ + :- ~ + :- [%done ~ %path !>(pax)] + =+ (~(get by q.bas.dat) pax) + ?~ - + ~| %mate-strange-diff-no-base + !! + [%pact (lobe-to-silk pax u.-) [%done ~ u.cay]] + == + + :: + ++ built + |= res=(each gage tang) + ^+ +> + ?: ?=(%| -.res) + (error:he %build-bad-made leaf/"delta building failed" p.res) + =+ cay=p.res + ?@ p.cay + (error:he %build-bad-marc >p.cay< ~) + =| bop=(map path cage) + => + |- ^+ + + ?~ p.p.cay + +.$(bop ~) + =+ tal=%_($ cay [[%tabl t.p.p.cay] (slot 3 q.cay)]) + ?: ?=(%| -.gon.dat.tal) + tal + ?. ?=(%path p.i.p.p.cay) + +.$(+>.$ (error:he %build-strange-marc-a >p.i.p.p.cay< ~)) + ?. ?=(@ q.i.p.p.cay) + +.$(+>.$ (error:he %build-strange-marc-b >q.i.p.p.cay< ~)) + =+ coy=(slot 2 q.cay) + ?@ q.coy + +.$(+>.$ (error:he %build-strange-coy ~)) + %_ +.$ + bop + %+ ~(put by bop:tal) + ((hard path) -.q.coy) + [q.i.p.p.cay (slot 3 coy)] + == + ?: ?=(%| -.gon.dat) + +>.$ + =. bop.dat bop + =+ ^- con=(map path ,*) :: 2-change conflict + %- mo + %+ skim (~(tap by bof.dat)) + |=([pax=path cay=(unit cage)] ?=(~ cay)) + =+ ^- cas=(map path lobe) :: conflict base + %- ~(urn by con) + |= [pax=path *] + (~(got by q.bas.dat) pax) + =. con :: add/del conflict + %- ~(uni by con) + %- mo ^- (list ,[path *]) + %+ skim (~(tap by old.dal.dat)) + |= [pax=path ~] + ?: (~(has by new.dob.dat) pax) + ~| %strange-add-and-del + !! + (~(has by can.dob.dat) pax) + =. con :: add/del conflict + %- ~(uni by con) + %- mo ^- (list ,[path *]) + %+ skim (~(tap by old.dob.dat)) + |= [pax=path ~] + ?: (~(has by new.dal.dat) pax) + ~| %strange-del-and-add + !! + (~(has by can.dal.dat) pax) + =. con :: add/add conflict + %- ~(uni by con) + %- mo ^- (list ,[path *]) + %+ skip (~(tap by (~(int by new.dal.dat) new.dob.dat))) + |= [pax=path *] + =((~(got by new.dal.dat) pax) (~(got by new.dob.dat) pax)) + ?: &(?=(%mate gem.dat) ?=(^ con)) + =+ (turn (~(tap by `(map path ,*)`con)) |=([path *] >[+<-]<)) + (error:he %mate-conflict -) + =+ ^- old=(map path lobe) :: oldies but goodies + %+ roll (~(tap by (~(uni by old.dal.dat) old.dob.dat))) + =< .(old q.bas.dat) + |= [[pax=path ~] old=(map path lobe)] + (~(del by old) pax) + =+ ^- can=(map path cage) :: content changes + %- mo + ^- (list (pair path cage)) + %+ murn (~(tap by bof.dat)) + |= [pax=path cay=(unit cage)] + ^- (unit (pair path cage)) + ?~ cay + ~ + `[pax u.cay] + =^ hat lat.ran :: new content + ^- [(map path lobe) (map lobe blob)] + %+ roll (~(tap by can)) + =< .(lat lat.ran) + |= [[pax=path cay=cage] hat=(map path lobe) lat=(map lobe blob)] + =+ ^= bol + =+ (~(get by q.bas.dat) pax) + ?~ - + ~| %mate-strange-diff-no-base + !! + %^ make-delta + (page-to-lobe [p q.q]:(~(got by bop.dat) pax)) + [(lobe-to-mark u.-) u.-] + [p q.q]:cay + [(~(put by hat) pax p.bol) (~(put by lat) p.bol bol)] + =. hat :: all the content + %- ~(uni by old) + %- ~(uni by new.dal.dat) + %- ~(uni by new.dob.dat) + %- ~(uni by cal.dal.dat) + %- ~(uni by cal.dob.dat) + %- ~(uni by hat) + cas + =+ ^- del=(map path ,?) + (~(run by (~(uni by old.dal.dat) old.dob.dat)) |=(~ %|)) + =. gon.dat [%& (sa (turn (~(tap by con)) |=([path *] +<-)))] + =. new.dat + (make-yaki [r.ali.dat r.bob.dat ~] hat now) + =. hut.ran (~(put by hut.ran) r.new.dat new.dat) + =. erg.dat %- ~(uni by del) + `(map path ,?)`(~(run by hat) |=(lobe %&)) + checkout + :: + ++ checkout + ^+ . + =- %_(+ tag [- tag]) + =+ val=?:(?=(%init gem.dat) ali bob) + :* hen %pass + [%merge (scot %p p.bob) q.bob (scot %p p.ali) q.ali %checkout ~] + %f %exec p.bob [p.val q.val cas.dat] ~ %tabl + ^- (list (pair silk silk)) + %+ murn (~(tap by q.new.dat)) + |= [pax=path lob=lobe] + ^- (unit (pair silk silk)) + ?: (~(has by bop.dat) pax) + ~ + `[[%done ~ %path !>(pax)] (merge-lobe-to-silk:he pax lob)] + == + :: + ++ checked-out + |= res=(each gage tang) + ^+ +> + ?: ?=(%| -.res) + (error:he %checkout-bad-made leaf/"merge checkout failed" p.res) + =+ cay=p.res + ?@ p.cay + (error:he %patch-bad-marc >p.cay< ~) + =| can=(list ,[path cage]) + => + |- ^+ + + ?~ p.p.cay + +.$(can ~) + =+ tal=%_($ cay [[%tabl t.p.p.cay] (slot 3 q.cay)]) + ?: ?=(%| -.gon.dat.tal) + tal + ?. ?=(%path p.i.p.p.cay) + +.$(+>.$ (error:he %patch-strange-marc-a >p.i.p.p.cay< ~)) + ?. ?=(@ q.i.p.p.cay) + +.$(+>.$ (error:he %patch-strange-marc-b >q.i.p.p.cay< ~)) + =+ coy=(slot 2 q.cay) + ?@ q.coy + +.$(+>.$ (error:he %patch-strange-coy ~)) + %_ +.$ + can + :_ can:tal + :- ((hard path) -.q.coy) + [q.i.p.p.cay (slot 3 coy)] + == + ?: ?=(%| -.gon.dat) + +>.$ + =. let.dom +(let.dom) + =. hit.dom (~(put by hit.dom) let.dom r.new.dat) + =. ank.dat (checkout-ankh:ze (~(uni by bop.dat) (mo can))) + =. ank.dom ank.dat + ?~ hez + (done:he ~) + ?. syn + (done:he ~) + ergo + :: + ++ ergo + ^+ . + =- %_(+ tag [- tag]) + =+ zez=ze(ank.dom ank.dat) + =+ val=?:(?=(%init gem.dat) ali bob) + :* hen %pass + [%merge (scot %p p.bob) q.bob (scot %p p.ali) q.ali %ergo ~] + %f %exec p.bob [p.val q.val cas.dat] ~ %tabl + ^- (list (pair silk silk)) + %+ turn (~(tap by erg.dat)) + |= [a=path b=?] + ^- (pair silk silk) + :- [%done ~ %path !>(a)] + ?. b + [%done ~ %null !>(~)] + :+ %cast %mime + (lobe-to-silk:zez a (~(got by q.new.dat) a)) + == + :: + ++ ergoed + |= res=(each gage tang) + ^+ +> + ?: ?=(%| -.res) + (error:he %ergo-bad-made leaf/"merge ergo failed" p.res) + =+ cay=p.res + ?@ p.cay ~| %patch-bad-marc !! + =| can=(list ,[path (unit mime)]) + => + |- ^+ + + ?~ p.p.cay + +.$(can ~) + =+ tal=%_($ cay [[%tabl t.p.p.cay] (slot 3 q.cay)]) + ?: ?=(%| -.gon.dat.tal) + tal + ?. ?=(%path p.i.p.p.cay) + +.$(+>.$ (error:he %patch-strange-marc-a >p.i.p.p.cay< ~)) + ?. ?=(@ q.i.p.p.cay) + +.$(+>.$ (error:he %patch-strange-marc-b >p.i.p.p.cay< ~)) + =+ coy=(slot 2 q.cay) + ?@ q.coy + +.$(+>.$ (error:he %patch-strange-coy ~)) + %_ +.$ + can + :_ can:tal + :- ((hard path) -.q.coy) + ?. ?=(%mime q.i.p.p.cay) + ~ + `((hard mime) q:(slot 3 coy)) + == + ?~ hez + (error:he %ergo-no-hez ~) + ?. syn + (error:he %ergo-sync-off ~) + ?: ?=(%| -.gon.dat) + +>.$ + %= +>.$ + don %| + reg [[u.hez %ergo who syd let.dom can] reg] + == + :: + ++ he + |% + ++ done + |= con=(set path) + ^+ ..he + ..he(don |, gon.dat [%& con]) + ++ error + |= [err=term tan=(list tank)] + ^+ ..he + ..he(don |, gon.dat [%| err >ali< >bob< tan]) + :: + ++ find-merge-points + |= [p=yaki q=yaki] :: maybe need jet + ^- (set yaki) + %- reduce-merge-points + =+ r=(reachable-takos r.p) + |- ^- (set yaki) + ?: (~(has in r) r.q) (~(put in *(set yaki)) q) + %+ roll p.q + |= [t=tako s=(set yaki)] + ?: (~(has in r) t) + (~(put in s) (tako-to-yaki t)) :: found + (~(uni in s) ^$(q (tako-to-yaki t))) :: traverse + :: + ++ merge-lobe-to-silk + |= [pax=path lob=lobe] + ^- silk + =+ hat=q.ali.dat + =+ hot=q.bob.dat + =+ ^= lal + %+ biff alh + |= hal=ankh + (~(get by hat) pax) + =+ lol=(~(get by hot) pax) + |- ^- silk + ?: =([~ lob] lol) + =+ (need (need (read-x let.dom pax))) + ?> ?=(%& -<) + [%done ~ p.-] + ?: =([~ lob] lal) + :+ %done ~ + (need (bind q.ank:(descend-path:(zu (need alh)) pax) tail)) + =+ bol=(~(got by lat.ran) lob) + ?- -.bol + %direct [%volt ~ q.bol] + %indirect [%volt ~ q.bol] + %delta [%pact $(lob q.q.bol) [%volt ~ r.bol]] + == + :: + ++ reduce-merge-points + |= unk=(set yaki) :: maybe need jet + =| gud=(set yaki) + =+ ^= zar + ^- (map tako (set tako)) + %+ roll (~(tap in unk)) + |= [yak=yaki qar=(map tako (set tako))] + (~(put by qar) r.yak (reachable-takos r.yak)) + |- + ^- (set yaki) + ?~ unk gud + =+ bun=(~(del in `(set yaki)`unk) n.unk) + ?: %+ levy (~(tap by (~(uni in gud) bun)) ~) + |= yak=yaki + !(~(has in (~(got by zar) r.yak)) r.n.unk) + $(gud (~(put in gud) n.unk), unk bun) + $(unk bun) + -- + -- + -- + -- +:: +++ do + |= [now=@da hen=duct [who=ship him=ship] syd=@tas ruf=raft] + =+ ^= rug ^- rung + =+ rug=(~(get by hoy.ruf) him) + ?^(rug u.rug *rung) + =+ ^= red ^- rede + =+ yit=(~(get by rus.rug) syd) + ?^(yit u.yit `rede`[~2000.1.1 ~ [~ *rind] *dome ~ ~ %|]) + ((de now hen ~ ~) [who him] syd red ran.ruf) +:: +++ posh + |= [him=ship syd=desk red=rede ruf=raft] + ^- raft + =+ ^= rug ^- rung + =+ rug=(~(get by hoy.ruf) him) + ?^(rug u.rug *rung) + ruf(hoy (~(put by hoy.ruf) him rug(rus (~(put by rus.rug) syd red)))) +:: +++ un :: domestic ship + |= [who=@p now=@da hen=duct ruf=raft] + =+ ^= yar ^- room + =+ yar=(~(get by fat.ruf) who) + ?~(yar *room u.yar) + |% + ++ abet ruf(fat (~(put by fat.ruf) who yar)) + ++ pish + |= [syd=@ta red=rede run=rang] + %_ +> + ran.ruf run + dos.yar + (~(put by dos.yar) syd [qyx.red dom.red dok.red mer.red syn.red]) + == + :: + ++ wake + =+ saz=(turn (~(tap by dos.yar) ~) |=([a=@tas b=*] a)) + =| moz=(list move) + =< [moz ..wake] + |- ^+ + + ?~ saz + + =+ sog=abet:wake:(di i.saz) + $(saz t.saz, moz (weld moz -.sog), ..wake (pish i.saz +.sog ran.ruf)) + :: + ++ di + |= syd=@ta + =+ ^= saq ^- dojo + =+ saq=(~(get by dos.yar) syd) + ?~(saq *dojo u.saq) + %^ (de now hen hun.yar hez.yar) + [who who] + syd + [[now qyx.saq ~ dom.saq dok.saq mer.saq syn.saq] ran.ruf] + -- +-- +:::::::::::::::::::::::::::::::::::::::::::::::::::::::: +:: section 4cA, filesystem vane :: +:: :: +=| :: instrument state + $: %0 :: vane version + ruf=raft :: revision tree + == :: +|= [now=@da eny=@ ski=sled] :: activate +^? :: opaque core +|% :: +++ call :: handle request + |= $: hen=duct + hic=(hypo (hobo kiss)) + == + => %= . :: XX temporary + q.hic + ^- kiss + ?: ?=(%soft -.q.hic) + =+ + ~|([%bad-soft (,@t -.p.q.hic)] ((soft kiss) p.q.hic)) + ?~ - + ~& [%bad-softing (,@t -.p.q.hic)] !! + u.- + ?: (~(nest ut -:!>(*kiss)) | p.hic) q.hic + ~& [%clay-call-flub (,@tas `*`-.q.hic)] + ((hard kiss) q.hic) + == + ^- [p=(list move) q=_..^$] + ?- -.q.hic + %font + ?: (~(has by sor.ruf) +.q.hic) `..^$ + :_ ..^$(sor.ruf (~(put by sor.ruf) +.q.hic [0 hen])) + :~ ^- move + :* hen %pass + /auto/(scot %p p.q.hic)/[q.q.hic]/(scot %p r.q.hic)/[s.q.hic] + %c %merg [p q r s %init]:q.hic + == + == + :: + %init + :_ ..^$(fat.ruf (~(put by fat.ruf) p.q.hic [hen ~ ~])) + =+ bos=(sein p.q.hic) + ~& [%bos bos p.q.hic] + ?: =(bos p.q.hic) ~ + [hen %pass / %c %font p.q.hic %base bos %kids]~ + :: + %info + ?: =(%$ q.q.hic) + [~ ..^$] + =^ mos ruf + =+ une=(un p.q.hic now hen ruf) + =+ ^= zat + (exec:(di:wake:une q.q.hic) now r.q.hic) + =+ zot=abet.zat + :- -.zot + =. une (pish:une q.q.hic +.zot ran.zat) + abet:une + :: ~& :+ %infoed + :: len=(lent mos) + :: %+ turn mos + :: |= move + :: ^- [duct (unit path) term term] + :: :- p + :: ^- [(unit path) term term] + :: ?+ -.q [~ *term *term] + :: %pass + :: ^- [(unit path) term term] + :: [`p.q [- +<]:q.q] + :: %give + :: ^- [(unit path) term term] + :: [~ %give -.p.q] + :: == + [mos ..^$] + :: + %into + =+ yar=(~(got by fat.ruf) p.q.hic) + :_ ..^$(fat.ruf (~(put by fat.ruf) p.q.hic yar(hez [~ hen]))) + ^- (list move) + ?: =(%$ q.q.hic) + ~ + =+ dos=(~(get by dos.yar) q.q.hic) + ?: &(?=(^ dos) !=(0 +>-.+<.+.dos)) :: ank.s.u.dos + ?: =(ank.dom.u.dos q.q.hic) + ~ + :_ ~ + :* hen %pass / %c %info p.q.hic q.q.hic %& + (khan-to-soba `ank.dom.u.dos `r.q.hic) + == + =+ cos=(khan-to-soba ~ `r.q.hic) + =+ ^- [one=(list ,[path miso]) two=(list ,[path miso])] + %+ skid q.cos + |= [a=path b=miso] + ?& ?=(%ins -.b) + ?=(%mime p.p.b) + =+ (slag (dec (lent a)) a) + ?| =([%hook ~] -) + =([%hoon ~] -) + == == + :~ [hen %pass /one %c %info p.q.hic q.q.hic %& p.cos one] + [hen %pass /two %c %info p.q.hic q.q.hic %& p.cos two] + == + :: + %lynx + ?: =(%$ q.q.hic) + [~ ..^$] + =^ mos ruf + =+ une=(un p.q.hic now hen ruf) + =+ ^= zat + (lynx:(di:wake:une q.q.hic) r.q.hic) + =+ zot=abet.zat + :- -.zot + =. une (pish:une q.q.hic +.zot ran.zat) + abet:une + [mos ..^$] + :: + %merg :: direct state up + ?: =(%$ q.q.hic) + [~ ..^$] + =^ mos ruf + =+ une=(un p.q.hic now hen ruf) + =+ ^= zat + abet:(start:(me:ze:(di:wake:une q.q.hic) [r.q.hic s.q.hic] ~) t.q.hic) + =+ zot=abet.zat + :- -.zot + =. une (pish:une q.q.hic +.zot ran.zat) + abet:une + [mos ..^$] + :: + %plug + ?. (~(has by sor.ruf) +.q.hic) `..^$ + :_ ..^$(sor.ruf (~(del by sor.ruf) +.q.hic)) + =+ hyn=hen:(~(got by sor.ruf) +.q.hic) + :~ :* hyn %pass + /auto/(scot %p p.q.hic)/[q.q.hic]/(scot %p r.q.hic)/[s.q.hic] + %c %warp [p.q.hic r.q.hic] s.q.hic ~ + == + == + :: + %warp + =^ mos ruf + ?: =(p.p.q.hic q.p.q.hic) + =+ une=(un p.p.q.hic now hen ruf) + =+ wex=(di:une p.q.q.hic) + =+ ^= wao + ?~ q.q.q.hic + ease:wex + (eave:wex u.q.q.q.hic) + =+ ^= woo + abet:wao + [-.woo abet:(pish:une p.q.q.hic +.woo ran.wao)] + =+ wex=(do now hen p.q.hic p.q.q.hic ruf) + =+ ^= woo + ?~ q.q.q.hic + abet:ease:wex + abet:(eave:wex u.q.q.q.hic) + [-.woo (posh q.p.q.hic p.q.q.hic +.woo ruf)] + [mos ..^$] + :: + %wart + ?> ?=(%re q.q.hic) + =+ ryf=((hard riff) s.q.hic) + :_ ..^$ + :~ :- hen + :^ %pass [(scot %p p.p.q.hic) (scot %p q.p.q.hic) r.q.hic] + %c + [%warp [p.p.q.hic p.p.q.hic] ryf] + == + == +:: +++ doze + |= [now=@da hen=duct] + ^- (unit ,@da) + ~ +:: +++ load + |= old=[%0 ruf=raft] + ^+ ..^$ + ..^$(ruf ruf.old) +:: +++ scry :: inspect + |= [fur=(unit (set monk)) ren=@tas his=ship syd=desk lot=coin tyl=path] + ^- (unit (unit cage)) + =+ got=(~(has by fat.ruf) his) + =+ luk=?.(?=(%$ -.lot) ~ ((soft case) p.lot)) + ?~ luk [~ ~] + ?: =(%$ ren) + [~ ~] + =+ run=((soft care) ren) + ?~ run [~ ~] + =+ %. [u.run u.luk tyl] + =< aver + ?: got + (di:(un his now ~ ruf) syd) + (do now ~ [his his] syd ruf) + ?~ - - + ?~ u.- - + ?: ?=(%& -.u.u.-) ``p.u.u.- + ~ +:: +++ stay [%0 ruf] +++ take :: accept response + |= [tea=wire hen=duct hin=(hypo sign)] + ^- [p=(list move) q=_..^$] + ?: ?=([%merge @ @ @ @ @ ~] tea) + ?> ?=(?(%writ %made) +<.q.hin) + =+ our=(slav %p i.t.tea) + =* syd i.t.t.tea + =+ her=(slav %p i.t.t.t.tea) + =* sud i.t.t.t.t.tea + =* sat i.t.t.t.t.t.tea + =+ une=(un our now hen ruf) + =+ wak=wake:une + =+ wex=(di:wak syd) + =+ dat=?-(+<.q.hin %writ [%& p.q.hin], %made [%| q.q.hin]) + =+ ^- kan=(unit ankh) + %+ biff (~(get by fat.ruf) her) + |= room + %+ bind (~(get by dos) sud) + |= dojo + ank.dom + =+ wao=abet:(route:(me:ze:wex [her sud] kan) sat dat) + =+ woo=abet:wao + [(weld -.wak -.woo) ..^$(ruf abet:(pish:une syd +.woo ran.wao))] + ?: ?=([%auto @ @ @ @ ~] tea) + =+ our=(slav %p i.t.tea) + =* syd i.t.t.tea + =+ her=(slav %p i.t.t.t.tea) + =* sud i.t.t.t.t.tea + ?+ +<.q.hin ~|(%weird-auto !!) + %mere + =+ nex=+(let:(~(got by sor.ruf) our syd her sud)) + =. sor.ruf (~(put by sor.ruf) [our syd her sud] [nex hen]) + =+ `move`[hen %pass tea %c %warp [our her] sud ~ %sing %y [%ud nex] /] + ?: ?=(%& -.p.+.q.hin) + ~& ['merge succeeded' p.p.+.q.hin] + [[- ~] ..^$] + ~& :^ "merge failed" + "please manually merge the desks with" + ":helm+merge %{(trip syd)} {(scow %p her)} %{(trip sud)}" + :- p.p.p.+.q.hin + (turn q.p.p.+.q.hin |=(tank ~(ram re +<))) + [[- ~] ..^$] + :: + %writ + =+ nex=let:(~(got by sor.ruf) our syd her sud) + [[hen %pass tea %c %merg our syd her sud %mate]~ ..^$] + == + ?: ?=([%blab care @ @ *] tea) + ?> ?=(%made +<.q.hin) + ?: ?=(%| -.q.q.hin) + ~| %blab-fail + ~> %mean.|.(p.q.q.hin) :: interpolate ford fail into stack trace + !! + ?^ p.p.q.q.hin + ~|(%bad-marc !!) + :_ ..^$ :_ ~ + :* hen %give %writ ~ + `[care case @tas]`[i.t.tea ((hard case) +>:(slay i.t.t.tea)) i.t.t.t.tea] + `path`t.t.t.t.tea `cage`p.q.q.hin + == + ?- -.+.q.hin + %crud + [[[hen %slip %d %flog +.q.hin] ~] ..^$] + :: + %made + ?~ tea !! + ?+ -.tea !! + %inserting + ?> ?=([@ @ @ ~] t.tea) + =+ who=(slav %p i.t.tea) + =+ syd=(slav %tas i.t.t.tea) + =+ wen=(slav %da i.t.t.t.tea) + =^ mos ruf + =+ une=(un who now hen ruf) + =+ ^= zat + (take-inserting:(di:wake:une syd) wen q.q.hin) + =+ zot=abet.zat + [-.zot abet:(pish:une syd +.zot ran.zat)] + [mos ..^$] + :: + %diffing + ?> ?=([@ @ @ ~] t.tea) + =+ who=(slav %p i.t.tea) + =+ syd=(slav %tas i.t.t.tea) + =+ wen=(slav %da i.t.t.t.tea) + =^ mos ruf + =+ une=(un who now hen ruf) + =+ ^= zat + (take-diffing:(di:wake:une syd) wen q.q.hin) + =+ zot=abet.zat + [-.zot abet:(pish:une syd +.zot ran.zat)] + [mos ..^$] + :: + %castifying + ?> ?=([@ @ @ ~] t.tea) + =+ who=(slav %p i.t.tea) + =+ syd=(slav %tas i.t.t.tea) + =+ wen=(slav %da i.t.t.t.tea) + =^ mos ruf + =+ une=(un who now hen ruf) + =+ ^= zat + (take-castify:(di:wake:une syd) wen q.q.hin) + =+ zot=abet.zat + [-.zot abet:(pish:une syd +.zot ran.zat)] + [mos ..^$] + :: + %mutating + ?> ?=([@ @ @ ~] t.tea) + =+ who=(slav %p i.t.tea) + =+ syd=(slav %tas i.t.t.tea) + =+ wen=(slav %da i.t.t.t.tea) + =^ mos ruf + =+ une=(un who now hen ruf) + =+ ^= zat + (take-mutating:(di:wake:une syd) wen q.q.hin) + =+ zot=abet.zat + [-.zot abet:(pish:une syd +.zot ran.zat)] + [mos ..^$] + :: + %patching + ?> ?=([@ @ ~] t.tea) + =+ who=(slav %p i.t.tea) + =+ syd=(slav %tas i.t.t.tea) + =^ mos ruf + ?: (~(has by fat.ruf) who) + =+ une=(un who now hen ruf) + =+ zat=(take-patch:(di:wake:une syd) q.q.hin) + =+ zot=abet.zat + [-.zot abet:(pish:une syd +.zot ran.zat)] + =+ zax=(do now hen [who who] syd ruf) + =+ zat=(take-patch:zax q.q.hin) + =+ zot=abet.zat + [-.zot (posh who syd +.zot ruf)] + [mos ..^$] + :: + %ergoing + ?> ?=([@ @ ~] t.tea) + =+ who=(slav %p i.t.tea) + =+ syd=(slav %tas i.t.t.tea) + =^ mos ruf + =+ une=(un who now hen ruf) + =+ ^= zat + (take-ergo:(di:wake:une syd) q.q.hin) + =+ zot=abet.zat + [-.zot abet:(pish:une syd +.zot ran.zat)] + [mos ..^$] + :: + %foreign-plops + ?> ?=([@ @ @ ~] t.tea) + =+ our=(slav %p i.t.tea) + =+ her=(slav %p i.t.t.tea) + =* syd i.t.t.t.tea + =+ zax=(do now hen [our her] syd ruf) + =+ zat=(take-foreign-plops:zax q.q.hin) + =^ mos ruf + =+ zot=abet.zat + [-.zot (posh her syd +.zot ruf)] + [mos ..^$(ran.ruf ran.zat)] + == + :: + %mere !! + %note [[hen %give +.q.hin]~ ..^$] + %waft + ?> ?=([@ @ ~] tea) + =+ syd=(slav %tas i.tea) + =+ inx=(slav %ud i.t.tea) + =+ ^= zat + =< wake + %- take-foreign-update:(do now hen p.+.q.hin syd ruf) + [inx ((hard (unit rand)) q.+.q.hin)] + =^ mos ruf + =+ zot=abet.zat + [-.zot (posh q.p.+.q.hin syd +.zot ruf)] + [mos ..^$(ran.ruf ran.zat)] :: merge in new obj + :: + %wake + =+ dal=(turn (~(tap by fat.ruf) ~) |=([a=@p b=room] a)) + =| mos=(list move) + |- ^- [p=(list move) q=_..^^$] + ?~ dal [mos ..^^$] + =+ une=(un i.dal now hen ruf) + =^ som une wake:une + $(dal t.dal, ruf abet:une, mos (weld som mos)) + :: + %writ + ?> ?=([@ @ *] tea) + ~| i=i.tea + ~| it=i.t.tea + =+ our=(slav %p i.tea) + =+ him=(slav %p i.t.tea) + :_ ..^$ + :~ :* hen %pass ~ %a + %want [our him] [%r %re %c t.t.tea] + (bind p.+.q.hin rant-to-rand) + == + == + :: + %went + ?: =(%good q.+.q.hin) [~ ..^$] + ~& [%clay-lost p.+.q.hin tea] + [~ ..^$] + == +:: +++ rant-to-rand + |= rant + ^- rand + [p q [p q.q]:r] +:: +:: XX perhaps fil.khan should be (unit (unit mime)) and !> +++ khan-to-soba + |= [ank=(unit ankh) kan=(unit khan)] + ^- soba + :- *cart + =| pax=path + |- ^- (list ,[p=path q=miso]) + ?~ ank + ?~ kan + ~ + =+ =+ (~(tap by dir.u.kan)) + |-(?~(+< ~ (weld ^$(pax [p.i pax], kan `q.i) $(+< t)))) + ?~ fil.u.kan + - + ?~ u.fil.u.kan + - + [[(flop pax) %ins u.u.fil.u.kan] -] + ?~ kan + =+ =+ (~(tap by r.u.ank)) + |-(?~(+< ~ (weld ^$(pax [p.i pax], ank `q.i) $(+< t)))) + ?~ q.u.ank + - + [[(flop pax) %del q.u.q.u.ank] -] + =+ %+ weld + =+ (~(tap by r.u.ank)) + |- ^- (list ,[p=path q=miso]) + ?~ +< ~ + %- weld :_ $(+< t) + ^$(pax [p.i pax], ank `q.i, kan (~(get by dir.u.kan) p.i)) + =+ (~(tap by dir.u.kan)) + |- ^- (list ,[p=path q=miso]) + ?~ +< ~ + ?: (~(has by r.u.ank) p.i) $(+< t) + %- weld :_ $(+< t) + ^$(pax [p.i pax], kan `q.i, ank ~) + ?~ q.u.ank + ?~ fil.u.kan + - + ?~ u.fil.u.kan + - + [[(flop pax) %ins u.u.fil.u.kan] -] + ?~ fil.u.kan + - + ?~ u.fil.u.kan + [[(flop pax) %del q.u.q.u.ank] -] + [[(flop pax) %mut q.u.q.u.ank u.u.fil.u.kan] -] +-- diff --git a/arvo/dill.hoon b/base/arvo/dill.hoon similarity index 95% rename from arvo/dill.hoon rename to base/arvo/dill.hoon index e695fb5dc..57d47abba 100644 --- a/arvo/dill.hoon +++ b/base/arvo/dill.hoon @@ -137,8 +137,9 @@ $% [%make p=(unit ,@t) q=@ud r=@ s=?] :: [%sith p=@p q=@uw r=?] :: == :: -++ note-clay :: wait for clay, hack - $% [%warp p=sock q=riff] :: +++ note-clay :: + $% [%font p=@p q=@tas r=@p s=@tas] :: + [%warp p=sock q=riff] :: wait for clay, hack == :: ++ note-dill :: note to self, odd $% [%crud p=@tas q=(list tank)] :: @@ -166,7 +167,8 @@ [%init p=ship] :: == :: ++ sign-clay :: - $% [%note p=@tD q=tank] :: + $% [%mere p=(each (set path) (pair term tang))] :: + [%note p=@tD q=tank] :: [%writ p=riot] :: == :: ++ sign-dill :: @@ -262,7 +264,8 @@ ~& [%dill-init our] =+ myt=(flop (need tem)) =. tem ~ - =. moz :_(moz [hen %pass ~ %g %show [our [ram ~]] our ~]) + =. moz :_(moz [hen %pass / %c %font our %home our %base]) + =. moz :_(moz [hen %pass / %g %show [our [ram ~]] our ~]) |- ^+ +> ?~ myt +> $(myt t.myt, +> (send i.myt)) @@ -274,10 +277,10 @@ moz :_ moz :* hen - %pass - / - %c - [%warp [our our] %main `[%& %y [%ud 1] /]] + %pass + / + %c + [%warp [our our] %base `[%sing %y [%ud 1] /]] == == :: @@ -307,6 +310,16 @@ :: [%a %init *] +>(moz :_(moz [hen %give +.sih])) + :: + [%c %mere *] + ?: ?=(%& -.p.sih) + +>.$ + ~| %dill-mere-fail + ~| p.p.p.sih + |- + ?~ q.p.p.sih !! + ~> %mean.|.(i.q.p.p.sih) :: interpolate ford fail into stack trace + $(q.p.p.sih t.q.p.p.sih) :: [%c %note *] (from %out (tuba ~(ram re q.+.sih))) @@ -419,7 +432,7 @@ :: ++ scry |= [fur=(unit (set monk)) ren=@tas his=ship syd=desk lot=coin tyl=path] - ^- (unit (unit (pair mark ,*))) + ^- (unit (unit cage)) [~ ~] :: ++ stay all diff --git a/arvo/eyre.hoon b/base/arvo/eyre.hoon similarity index 96% rename from arvo/eyre.hoon rename to base/arvo/eyre.hoon index 77beab5c8..df5048efb 100644 --- a/arvo/eyre.hoon +++ b/base/arvo/eyre.hoon @@ -41,7 +41,7 @@ $% [%this p=? q=clip r=httq] :: proxied request == == :: $: %f :: to %ford - $% [%exec p=@p q=(unit silk)] :: + $% [%exec p=@p q=beak r=(unit silk)] :: [%wasp p=@p q=@uvH] :: == == :: $: %g :: to %gall @@ -74,7 +74,7 @@ $% [%thou p=httr] :: response for proxy == == :: $: %f :: by %ford - $% [%made p=@uvH q=(each cage tang)] :: + $% [%made p=@uvH q=(each gage tang)] :: [%news ~] :: == == :: $: %g :: by %gall @@ -102,10 +102,11 @@ -- :: |% :: models ++ bolo :: eyre state - $: %0 :: version + $: %1 :: version gub=@t :: random identity hov=(unit ship) :: master for remote ged=duct :: client interface + ded=(set duct) :: killed requests pox=(map ,@uvH duct) :: proxied sessions ask=[p=@ud q=(map ,@ud ,[p=duct q=hiss])] :: outgoing by number kes=(map duct ,@ud) :: outgoing by duct @@ -251,7 +252,7 @@ ;html ;head ;meta(charset "utf-8"); - ;link(rel "stylesheet", href "/main/lib/base.css"); + ;link(rel "stylesheet", href "/home/lib/base.css"); ;title: server error == ;body:div#c.err:pre:code:"{(wush 80 tan)}" @@ -333,7 +334,7 @@ ;pre:code#err; ;script@"/~/at/~/auth.js"; == - ;link(rel "stylesheet", href "/main/lib/base.css"); + ;link(rel "stylesheet", href "/home/lib/base.css"); == :: ++ logout-page @@ -344,7 +345,7 @@ ;pre:code#err; ;script@"/~/at/~/auth.js"; == - ;link(rel "stylesheet", href "/main/lib/base.css"); + ;link(rel "stylesheet", href "/home/lib/base.css"); == :: ++ poke-test @@ -443,7 +444,7 @@ :: %thud :: cancel request :: ford-kill :: XX discriminate - +>.$ + +>.$(ded (~(put in ded) hen)) :: %wart :: remote request =+ mez=((soft gram) r.kyz) @@ -520,6 +521,7 @@ == :: %made + ?> ?=(?([%| *] [%& @ *]) q.sih) =. our (need hov) :: XX |- ^+ ..axon ?- tee @@ -566,6 +568,7 @@ == == :: + ++ root-beak `beak`[our %home da/now] :: XX ++ emule |= a=_|?(..emule) ^+ ..emule =+ mul=(mule a) @@ -596,10 +599,10 @@ :: ++ back :: %ford bounce |= [tea=whir dep=@uvH mar=mark cay=cage] - (pass-note tea (ford-req [%cast mar %done ~ cay])) :: XX deps + (pass-note tea (ford-req root-beak [%cast mar %done ~ cay])) :: XX deps :: - ++ ford-kill (pass-note ~ %f [%exec our ~]) :: XX unused - ++ ford-req |=(kas=silk [%f [%exec our `kas]]) + ++ ford-kill (pass-note ~ %f [%exec our *beak ~]) :: XX unused + ++ ford-req |=([bek=beak kas=silk] [%f [%exec our bek `kas]]) :: ++ fail |= [sas=@ud dep=@uvH mez=tang] @@ -621,6 +624,8 @@ :: ++ give-thou :: done request |= hit=httr + ?: (~(has in ded) hen) :: request closed + +>(ded (~(del in ded) hen)) +>(mow :_(mow [hen %give %thou hit])) :: ++ mean-json |=([sas=@uG err=ares] (give-json sas ~ (ares-to-json err))) @@ -665,7 +670,7 @@ =: s.bem [%web ~(rent co (fcgi quy fcgi-cred:for-client)) s.bem] r.bem ?+(r.bem r.bem [%ud %0] da/now) == - (ford-req [%boil ext bem ~]) + (ford-req -.bem [%boil ext bem ~]) :: :: ++ apex @@ -714,7 +719,6 @@ %.(q.u.bod ;~(biff poja a)) :: ++ need-body |*(a=fist:jo (need (grab-body a))) - ++ root-beak `beak`[our %main ud/0] :: XX ++ to-oryx (ot oryx/so ~):jo :: :: @@ -894,7 +898,7 @@ ?: ?=(%json q.hem) [%| ((teba new-mess:for-view) p.hem r.hem cay)] :^ %& %| [%to need-ixor (scot %p p.p.hem) q.p.hem r.hem] - (ford-req [%cast q.hem %done ~ cay]) + (ford-req root-beak [%cast q.hem %done ~ cay]) :: %poll ?. ?=([~ %js] p.pok) :: XX treat non-json cases? @@ -1139,8 +1143,9 @@ =. eve (add-even ven) =< abet ?~ ude done - :: ~& got-even/ude - (give-even(hen p.u.ude, ude ~) q.u.ude num ven) + =. hen p.u.ude + =. ..ix (pass-note of//[ire] [%t %rest era]) + (give-even(ude ~) q.u.ude num ven) :: ++ give-even |= [pol=? num=@u ven=even] ^+ done @@ -1164,7 +1169,7 @@ ++ poll |= a=@u ^+ ..ix ?: =(a p.eve) - ?^ ude ~&(e/ix/wait/%replaced abet(u.ude [hen &])) + ?^ ude ~&(e/ix/wait/replaced=p.u.ude abet(u.ude [hen &])) =. era (add ~s30 now) (pass-note:abet(ude [~ hen &]) of//[ire] [%t %wait era]) ?: (gth a p.eve) ~|(seq-high/cur=p.eve !!) @@ -1218,10 +1223,15 @@ ^- (unit ,@da) ~ :: -++ load :: clam previous state - |= old=bolo ::_[.(wix **)]:*bolo +++ load :: take previous state + =+ bol0=*bolo + => .(-.bol0 %0, |4.bol0 |5.bol0) :: missing ded + |= old=?(bolo _bol0) ^+ ..^$ - ..^$(+>- old) ::(wix ~)) + ?- -.old + %1 ..^$(+>- old) + %0 $(-.old %1, |4.old [*(set duct) |4.old]) + == :: ++ scry |= [our=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path] diff --git a/arvo/ford.hoon b/base/arvo/ford.hoon similarity index 74% rename from arvo/ford.hoon rename to base/arvo/ford.hoon index 956b9af3c..321f811ef 100644 --- a/arvo/ford.hoon +++ b/base/arvo/ford.hoon @@ -1,5 +1,5 @@ !::::: -:: :: %ford, new execution control +:: :: %ford, new execution control !? 164 :::: |= pit=vase @@ -7,10 +7,10 @@ :: structures |% :: -++ bead ,[p=(set beam) q=cage] :: computed result +++ bead ,[p=(set beam) q=gage] :: computed result ++ gift :: out result <-$ - $% [%made p=@uvH q=(each cage tang)] :: computed result - [%news ~] :: fresh depends + $% [%made p=@uvH q=(each gage tang)] :: computed result + [%news ~] :: fresh depends == :: ++ heel path :: functional ending ++ hock :: standard label @@ -49,18 +49,15 @@ [%toy p=mark] :: /mark/ static == :: ++ kiss :: in request ->$ - $% [%exec p=@p q=(unit silk)] :: make / kill + $% [%exec p=@p q=beak r=(unit silk)] :: make / kill [%wasp p=@p q=@uvH] :: depends query == :: +++ milk (trel ship desk silk) :: sourced silk ++ move ,[p=duct q=(mold note gift)] :: local move ++ note :: out request $-> $% $: %c :: to %clay $% [%warp p=sock q=riff] :: == == == :: -++ rave :: see %clay - $% [& p=mood] :: single request - [| p=moat] :: change range - == :: ++ riff ,[p=desk q=(unit rave)] :: see %clay ++ sign :: in result $<- $% $: %c :: by %clay @@ -70,16 +67,24 @@ $& [p=silk q=silk] :: cons $% [%bake p=mark q=beam r=path] :: local synthesis [%boil p=mark q=beam r=path] :: general synthesis + [%bunt p=mark] :: example of mark [%call p=silk q=silk] :: slam [%cast p=mark q=silk] :: translate - [%done p=(set beam) q=cage] :: literal + [%diff p=silk q=silk] :: diff + [%done p=(set beam) q=gage] :: literal [%dude p=tank q=silk] :: error wrap - [%dune p=(set beam) q=(unit cage)] :: unit literal + [%dune p=(set beam) q=(unit gage)] :: unit literal + [%file p=beam] :: from clay + [%join p=mark q=silk r=silk] :: merge + [%mash p=mark q=milk r=milk] :: annotate [%mute p=silk q=(list (pair wing silk))] :: mutant + [%pact p=silk q=silk] :: patch [%plan p=beam q=spur r=hood] :: structured assembly [%reef ~] :: kernel reef [%ride p=twig q=silk] :: silk thru twig + [%tabl p=(list (pair silk silk))] :: list [%vale p=mark q=ship r=*] :: validate [our his] + [%volt p=(set beam) q=(cask ,*)] :: unsafe add type == :: -- :: |% :: structures @@ -90,7 +95,7 @@ ++ baby :: state by ship $: tad=[p=@ud q=(map ,@ud task)] :: tasks by number dym=(map duct ,@ud) :: duct to task number - deh=deps :: depends by hash + deh=(map ,@uvH deps) :: depends by hash jav=(map ,* calx) :: cache == :: ++ bolt :: gonadic edge @@ -110,7 +115,6 @@ ++ cafe :: live cache $: p=(set calx) :: used q=(map ,* calx) :: cache - r=deps :: dependencies == :: :: :: ++ calm :: cache metadata @@ -118,17 +122,22 @@ dep=(set beam) :: dependencies == :: ++ calx :: concrete cache line - $% [%hood p=calm q=(pair beam cage) r=hood] :: compile + $% [%hood p=calm q=(pair beam gage) r=hood] :: compile [%bake p=calm q=(trel mark beam heel) r=(unit vase)]:: load [%slit p=calm q=[p=type q=type] r=type] :: slam type [%slim p=calm q=[p=type q=twig] r=(pair type nock)]:: mint [%slap p=calm q=[p=vase q=twig] r=vase] :: compute [%slam p=calm q=[p=vase q=vase] r=vase] :: compute == :: -++ deps (map ,@uvH (set beam)) :: hashed depends +++ deps :: depend state + $% [%init p=(set beam)] :: given out + [%sent p=(set duct) q=(set beam)] :: listener exists + [%done ~] :: change seen + == :: ++ task :: problem in progress $: nah=duct :: cause kas=silk :: problem + keg=(map (pair term beam) cage) :: block results kig=[p=@ud q=(map ,@ud ,[p=care q=beam])] :: blocks == :: -- :: @@ -161,17 +170,16 @@ ++ chub :: cache merge |= [a=cafe b=cafe] :: ^- cafe :: - [(grom p.a p.b) (grum q.a q.b) (grum r.a r.b)] :: + [(grom p.a p.b) (grum q.a q.b)] :: :: :: -++ faun |=([a=cafe b=vase] (fine a `cage`noun/b)) :: vase to cage -++ feel |=([a=cafe b=cage] (fine a q.b)) :: cage to vase +++ faun |=([a=cafe b=vase] (fine a `gage`[%noun b])) :: vase to cage +++ feel |=([a=cafe b=gage] (fine a q.b)) :: cage to vase ++ fest :: bolt to success |= a=beam :: |*([b=cafe c=*] (flag a (fine b [~ u=c]))) :: :: :: ++ fine |* [a=cafe b=*] :: bolt from data [p=`cafe`a q=[%0 p=*(set beam) q=b]] :: -:: :: ++ flaw |= [a=cafe b=tang] :: bolt from error [p=a q=[%2 p=*(set beam) q=b]] :: ++ flag :: beam into deps @@ -208,11 +216,12 @@ :: ++ za :: per event =| $: $: $: our=ship :: computation owner + bek=beak :: desk context hen=duct :: event floor == :: $: now=@da :: event date eny=@ :: unique entropy - ska=$+(* (unit (unit))) :: system namespace + ska=sled :: system namespace == :: mow=(list move) :: pending actions == :: @@ -238,14 +247,8 @@ =: p.tad.bay +(p.tad.bay) dym.bay (~(put by dym.bay) hen num) == - ~(exec zo [num `task`[hen u.kus 0 ~]]) + ~(exec zo [num `task`[hen u.kus ~ 0 ~]]) :: - ::++ apel :: stateless - :: |= [hen=duct kus=silk] - :: ^- (unit gift) - :: =+ num=0 :: XX - :: ~(exit zo [num `task`[hen kus 0 ~]]) - :::: ++ axon :: take |= [num=@ud tik=@ud sih=sign] ^+ +> @@ -259,32 +262,54 @@ == :: ++ axun :: take rev update - |= [dep=@uvH sih=sign] + |= [tea=wire dep=@uvH sup=spur sih=sign] ^+ +> ?- -.+.sih %writ - +>.$(mow :_(mow [hen %give %news ~])) + ?~ p.sih +>.$ + =+ [dap=(~(got by deh.bay) dep) bem=`beam`[bek sup]] + =- ?~(dop con con(deh.bay (~(put by deh.bay) dep dop))) + ^- [dop=$|(~ _dap) con=_+>.$] + ?- -.dap + %done `+>.$ :: writ redundant + %init ~|(never-subscribed/dep !!) + %sent + =- [[%done ~] +>.$(mow (weld - mow))] + ^- (list move) + %+ weld (turn (~(tap in p.dap)) |=(hen=duct [hen %give %news ~])) + =. q.dap (~(del in q.dap) bem) + %+ turn (~(tap in q.dap)) :: cancel outstanding + |= bem=beam + =. tea [(scot %p our) (scot %uv dep) (tope bem)] + [hen %pass tea %c %warp [our p.bem] q.bem ~] + == == :: ++ awap :: get next revision ~% %ford-w ..is ~ |= dep=@uvH - %_ +>.$ - mow - %- welp :_ mow - %+ turn ~|(dep-missed/dep (~(tap in (~(got by deh.bay) dep)))) - |= a=beam - :^ hen %pass [(scot %p our) (scot %uv dep) ~] - =- [%c [%warp [our p.a] q.a ~ [%& %y ud/+(`@ud`-) s.a]]] - ?. ?=(%ud -.r.a) - ;;(@ (need (need (ska %cw (tope -.a /))))) - ?: =(0 p.r.a) - ;;(@ (need (need (ska %cw (tope -.a(r da/now) /))))) - p.r.a - == + ?~ dep + ~&(dep-empty/hen +>.$) + =+ dap=~|(dep-missed/dep (~(got by deh.bay) dep)) + ?- -.dap + %done +>.$(mow :_(mow [hen %give %news ~])) + %sent + =. p.dap (~(put in p.dap) hen) + +>.$(deh.bay (~(put by deh.bay) dep dap)) + %init + %_ +>.$ + deh.bay + (~(put by deh.bay) dep [%sent [hen ~ ~] p.dap]) + :: + mow + =< (welp :_(mow (turn (~(tap in p.dap)) .))) + |= bem=beam + :^ hen %pass [(scot %p our) (scot %uv dep) (tope bem)] + [%c [%warp [our p.bem] q.bem ~ [%next %y r.bem (flop s.bem)]]] + == == :: ++ zo - ~% %ford-z + ~% %ford-z ..is == %fade fade @@ -311,9 +336,11 @@ ?~ kiz +> %= $ kiz t.kiz - mow :_ mow + mow + :_ mow :- hen - :^ %pass [(scot %p our) (scot %ud num) (scot %ud p.i.kiz) ~] + :^ %pass + [(scot %p our) (scot %ud num) (scot %ud p.i.kiz) (tope bek ~)] %c [%warp [our p.q.q.i.kiz] q.q.q.i.kiz ~] == @@ -323,11 +350,14 @@ ^+ +> %= +> kig [+(p.kig) (~(put by q.kig) p.kig [ren bem])] - mow :_ mow + mow + :_ mow :- hen - :^ %pass [(scot %p our) (scot %ud num) (scot %ud p.kig) ~] + :^ %pass + [(scot %p our) (scot %ud num) (scot %ud p.kig) (tope bek ~)] %c - [%warp [our p.bem] q.bem [~ %& ren r.bem (flop s.bem)]] + :: ~& >> [%camping bem] + [%warp [our p.bem] q.bem [~ %sing ren r.bem (flop s.bem)]] == :: ++ clef :: cache a result @@ -442,28 +472,67 @@ ++ dash :: process cache |= cof=cafe ^+ +> - %_(+> jav.bay q.cof, deh.bay r.cof) + %_(+> jav.bay q.cof) + :: + ++ diff :: diff + |= [cof=cafe kas=silk kos=silk] + ^- (bolt gage) + %. [cof kas kos] + ;~ cope + ;~ coax + |=([cof=cafe p=silk q=silk] (make cof p)) + |=([cof=cafe p=silk q=silk] (make cof q)) + == + |= [cof=cafe cay=gage coy=gage] + ?. &(?=(@ p.cay) ?=(@ p.coy)) + (flaw cof leaf/"bad diff marc" ~) + ?. =(p.cay p.coy) + %+ flaw cof :_ ~ + leaf/"diff on data of different marks: {(trip p.cay)} {(trip p.coy)}" + ?: =(q.q.cay q.q.coy) + (fine cof %null [%atom %n] ~) + %+ cope (fang cof p.cay) + |= [cof=cafe pro=vase] + ?. (slab %grad p.pro) + (flaw cof leaf/"no ++grad" ~) + =+ gar=(slap pro [%cnzy %grad]) + ?. (slab %form p.gar) + ?. (slab %sted p.gar) + (flaw cof leaf/"no ++form:grad nor ++sted:grad" ~) + =+ for=((soft ,@tas) q:(slap gar [%cnzy %sted])) + ?~ for + (flaw cof leaf/"bad ++sted:grad" ~) + %^ make cof %diff + :- [%cast u.for [%done ~ cay]] + [%cast u.for [%done ~ coy]] + ?. (slab %diff p.gar) + (flaw cof leaf/"no ++diff:grad" ~) + %+ cope (keel cof pro [[%& 6]~ q.cay]~) + |= [cof=cafe pox=vase] + %+ cope + %^ maul cof + (slap (slap pox [%cnzy %grad]) [%cnzy %diff]) + q.coy + |= [cof=cafe dif=vase] + =+ for=((soft ,@tas) q:(slap gar [%cnzy %form])) + ?~ for + (flaw cof leaf/"bad ++form:grad" ~) + (fine cof u.for dif) + == :: ++ daze :: remember depends |= dep=(set beam) ^+ [*@uvH deh.bay] ?~ dep [0v0 deh.bay] =+ hap=(sham dep) - [hap (~(put by deh.bay) hap dep)] - ::++ exit :: stateless exec - :: ^- (unit gift) - :: =+ bot=(make [~ jav.bay deh.bay] kas) - :: :: =. ..exec (dash p.bot) - :: ?- -.q.bot - :: %0 `[%made p.q.bot %& q.q.bot] - :: %2 `[%made p.q.bot %| q.q.bot] - :: %1 ~ - :: == - :::: + ?: (~(has by deh.bay) hap) + [hap deh.bay] + [hap (~(put by deh.bay) hap [%init dep])] + :: ++ exec :: execute app ^+ ..zo ?: !=(~ q.kig) ..zo - =+ bot=(make [~ jav.bay deh.bay] kas) + =+ bot=(make [~ jav.bay] kas) =. ..exec (dash p.bot) ?- -.q.bot %0 =^ dep deh.bay (daze p.q.bot) @@ -487,11 +556,11 @@ ^- (bolt hood) %+ cool |.(leaf/"ford: fade {<[(tope bem)]>}") %+ cope (make cof [%bake for bem ~]) - |= [cof=cafe cay=cage] + |= [cof=cafe cay=gage] %+ (clef %hood) (fine cof bem cay) - ^- (burg (pair beam cage) hood) - |= [cof=cafe bum=beam cay=cage] - :: ~& fade/clef-miss/bem + ^- (burg (pair beam gage) hood) + |= [cof=cafe bum=beam cay=gage] + :: ~& fade/clef-miss/bem =+ rul=(fair bem) ?. ?=(@ q.q.cay) (flaw cof ~) @@ -501,18 +570,10 @@ (fine cof p.u.q.vex) :: ++ fang :: protocol door - |= [cof=cafe for=mark bek=beak] + |= [cof=cafe for=mark] ^- (bolt vase) =+ pax=/door/[for]/mar - =+ ^= bem ^- beam - :_ pax - ?: &(=(p.bek our) =(q.bek %main) !=(r.bek [%da now])) - bek - =+ oak=-:(norm [our %main %da now] ~) :: XX at requested one - ?: ?=([~ ~ *] (ska %cy (tope [oak pax]))) - oak - bek - (cope (fade cof %hook bem) abut:(meow bem ~)) + (cope (fade cof %hook [bek pax]) abut:(meow [bek pax] ~)) :: ++ fair :: hood parsing rule |= bem=beam @@ -666,20 +727,114 @@ -- -- :: + ++ join + |= [cof=cafe for=mark kas=silk kos=silk] + ^- (bolt gage) + %. [cof kas kos] + ;~ cope + ;~ coax + |=([cof=cafe p=silk q=silk] (make cof p)) + |=([cof=cafe p=silk q=silk] (make cof q)) + == + |= [cof=cafe cay=gage coy=gage] + ?. &(?=(@ p.cay) ?=(@ p.coy)) + (flaw cof leaf/"bad join marc: {} {}" ~) + %+ cope (fang cof for) + |= [cof=cafe pro=vase] + ?. (slab %grad p.pro) + (flaw cof leaf/"no ++grad" ~) + =+ gar=(slap pro [%cnzy %grad]) + ?. (slab %form p.gar) + ?. (slab %sted p.gar) + (flaw cof leaf/"no ++form:grad nor ++sted:grad" ~) + =+ too=((soft ,@tas) q:(slap gar [%cnzy %sted])) + ?~ too + (flaw cof leaf/"bad ++sted:grad" ~) + (make cof %join u.too [%done ~ cay] [%done ~ coy]) + =+ fom=((soft ,@tas) q:(slap gar [%cnzy %form])) + ?~ fom + (flaw cof leaf/"bad ++form:grad" ~) + ?. &(=(u.fom p.cay) =(u.fom p.coy)) + %+ flaw cof :_ :_ ~ + leaf/"join on data of bad marks: {(trip p.cay)} {(trip p.coy)}" + leaf/"expected mark {(trip u.fom)}" + ?: =(q.q.cay q.q.coy) + (fine cof cay) + ?. (slab %join p.gar) + (flaw cof leaf/"no ++join:grad" ~) + %+ cope + %^ maul cof + (slap (slap pro [%cnzy %grad]) [%cnzy %join]) + (slop q.cay q.coy) + |= [cof=cafe dif=vase] + ?@ q.dif + (fine cof %null dif) + (fine cof u.fom (slot 3 dif)) + == + :: + ++ mash + |= [cof=cafe for=mark mas=milk mos=milk] + ^- (bolt gage) + %. [cof r.mas r.mos] + ;~ cope + ;~ coax + |=([cof=cafe p=silk q=silk] (make cof p)) + |=([cof=cafe p=silk q=silk] (make cof q)) + == + |= [cof=cafe cay=gage coy=gage] + ?. &(?=(@ p.cay) ?=(@ p.coy)) + (flaw cof leaf/"bad mash marc: {} {}" ~) + %+ cope (fang cof for) + |= [cof=cafe pro=vase] + ?. (slab %grad p.pro) + (flaw cof leaf/"no ++grad" ~) + =+ gar=(slap pro [%cnzy %grad]) + ?. (slab %form p.gar) + ?. (slab %sted p.gar) + (flaw cof leaf/"no ++form:grad nor ++sted:grad" ~) + =+ too=((soft ,@tas) q:(slap gar [%cnzy %sted])) + ?~ too + (flaw cof leaf/"bad ++sted:grad" ~) + %+ make cof + [%mash u.too [p.mas q.mas [%done ~ cay]] [p.mos q.mos [%done ~ coy]]] + =+ fom=((soft ,@tas) q:(slap gar [%cnzy %form])) + ?~ fom + (flaw cof leaf/"bad ++form:grad" ~) + ?. &(=(u.fom p.cay) =(u.fom p.coy)) + %+ flaw cof :_ :_ ~ + leaf/"mash on data of bad marks: {(trip p.cay)} {(trip p.coy)}" + leaf/"expected mark {(trip u.fom)}" + ?: =(q.q.cay q.q.coy) + (fine cof cay) + ?. (slab %mash p.gar) + (fine cof %null [%atom %n] ~) + %+ cope + %^ maul cof + (slap (slap pro [%cnzy %grad]) [%cnzy %mash]) + ;: slop + (slop [[%atom %p] p.mas] [[%atom %tas] q.mas]) + (slop [[%atom %p] p.mos] [[%atom %tas] q.mos]) + q.cay + q.coy + == + |= [cof=cafe dif=vase] + (fine cof u.fom dif) + == + :: ++ kale :: mutate |= [cof=cafe kas=silk muy=(list (pair wing silk))] - ^- (bolt cage) + ^- (bolt gage) %+ cope |- ^- (bolt (list (pair wing vase))) ?~ muy (flue cof) %+ cope (make cof q.i.muy) - |= [cof=cafe cay=cage] + |= [cof=cafe cay=gage] %+ cope ^$(muy t.muy) |= [cof=cafe rex=(list (pair wing vase))] (fine cof [[p.i.muy q.cay] rex]) |= [cof=cafe yom=(list (pair wing vase))] %+ cope (make cof kas) - |= [cof=cafe cay=cage] + |= [cof=cafe cay=gage] %+ cope (keel cof q.cay yom) |= [cof=cafe vax=vase] (fine cof p.cay vax) @@ -703,27 +858,31 @@ ++ lace :: load and check |= [cof=cafe for=mark bem=beam arg=heel] ^- (bolt (unit vase)) - =+ bek=`beak`[p.bem q.bem r.bem] %+ cope (lend cof bem) |= [cof=cafe arc=arch] ?^ q.arc - (cope (cope (liar cof bem) (lake for bek)) (fest (norm bem))) + (cope (cope (liar cof bem) (lake for)) (fest (norm bem))) ?: (~(has by r.arc) %hook) %+ cope (fade cof %hook bem) |= [cof=cafe hyd=hood] - %+ cope (cope (abut:(meow bem arg) cof hyd) (lake for bek)) + %+ cope (cope (abut:(meow bem arg) cof hyd) (lake for)) (fest (norm bem)) (flue cof) :: ++ lake :: check/coerce - |= [for=mark bek=beak] + |= for=mark |= [cof=cafe sam=vase] ^- (bolt vase) %+ cool |.(leaf/"ford: check {<[for bek `@p`(mug q.sam)]>}") - ?: ?=(?(%gate %core %door %hoon %hook) for) + ?: ?=(?(%gate %core %door) for) :: ~& [%lake-easy for bek] (fine cof sam) - %+ cope (fang cof for bek) + ?: ?=(?(%hoon %hook) for) + =+ mas=((soft ,@t) q.sam) + ?~ mas + (flaw cof [leaf/"ford: bad hoon or hook: {<[for bek]>}"]~) + (fine cof [%atom %t] u.mas) + %+ cope (fang cof for) |= [cof=cafe tux=vase] =+ bob=(slot 6 tux) ?: (~(nest ut p.bob) | p.sam) @@ -744,14 +903,14 @@ |= [cof=cafe bem=beam] ^- (bolt beam) ?: ?=(%ud -.r.bem) (fine cof bem) - =+ von=(ska %cw (tope bem(s ~))) + =+ von=(save ~ %cw bem(s ~)) ?~ von [p=cof q=[%1 [%w bem ~] ~ ~]] - (fine cof bem(r [%ud ((hard ,@) (need u.von))])) + (fine cof bem(r [%ud ((hard ,@) +.+:(need u.von))])) :: ++ lave :: validate |= [cof=cafe for=mark his=ship som=*] ^- (bolt vase) - ((lake for [our %main [%da now]]) cof [%noun som]) + ((lake for) cof [%noun som]) :: ++ lane :: type infer |= [cof=cafe typ=type gen=twig] @@ -766,27 +925,37 @@ |= [cof=cafe arc=arch] (fine cof (lark wox arc)) :: + ++ lear :: load vase + |= [cof=cafe bem=beam] + ^- (bolt cage) + =+ von=(save ~ %cx bem) + ?~ von + [p=*cafe q=[%1 [[%x bem ~] ~ ~]]] + ?~ u.von + (flaw cof leaf/"lear: file unavailable" (smyt (tope bem)) ~) + (fine cof u.u.von) + :: ++ lend :: load arch |= [cof=cafe bem=beam] ^- (bolt arch) - =+ von=(ska %cy (tope bem)) + =+ von=(save ~ %cy bem) ?~ von [p=cof q=[%1 [%y bem ~] ~ ~]] - (fine cof ((hard arch) (need u.von))) + (fine cof ((hard arch) q.q:(need u.von))) :: ++ liar :: load vase |= [cof=cafe bem=beam] ^- (bolt vase) - =+ von=(ska %cx (tope bem)) + =+ von=(save ~ %cx bem) ?~ von [p=*cafe q=[%1 [[%x bem ~] ~ ~]]] ?~ u.von - (flaw cof (smyt (tope bem)) ~) - (fine cof ?^(u.u.von [%cell %noun %noun] [%atom %$]) u.u.von) + (flaw cof leaf/"liar: file unavailable" (smyt (tope bem)) ~) + (fine cof q.u.u.von) :: ++ lily :: translation targets - |= [cof=cafe for=mark bek=beak] + |= [cof=cafe for=mark] ^- (bolt (list ,@tas)) - =+ raf=(fang cof for bek) + =+ raf=(fang cof for) ?: =(%2 -.q.raf) (fine p.raf ~) %+ cope raf |= [cof=cafe vax=vase] @@ -812,12 +981,12 @@ (lace cof for bem(s [for s.bem]) arg) =+ haz=(turn (~(tap by r.arc) ~) |=([a=@tas b=~] a)) ?~ haz (flue cof) - %+ cope (lion cof for -.bem haz) + %+ cope (lion cof for haz) |= [cof=cafe wuy=(list ,@tas)] ?~ wuy (flue cof) %+ cope (make cof %bake i.wuy bem arg) - |= [cof=cafe hoc=cage] - %+ cope (lope cof i.wuy t.wuy -.bem q.hoc) + |= [cof=cafe hoc=gage] + %+ cope (lope cof i.wuy t.wuy q.hoc) |= [cof=cafe vax=vase] ((fest bem) cof vax) :: @@ -829,22 +998,24 @@ |= [cof=cafe vux=(unit vase)] ?^ vux (fine cof u.vux) ?~ s.mob - (flag (norm mob) (flaw cof (smyt (tope bem)) ~)) + %+ flag + (norm mob) + (flaw cof leaf/"beam unavailable" (smyt (tope bem)) ~) ^$(s.mob t.s.mob, mer [i.s.mob mer]) :: ++ link :: translate - |= [cof=cafe too=mark for=mark bek=beak vax=vase] + |= [cof=cafe too=mark for=mark vax=vase] ^- (bolt vase) ?: =(too for) (fine cof vax) ?: |(=(%noun for) =(%$ for)) - ((lake too bek) cof vax) - %+ cope (fang cof for bek) + ((lake too) cof vax) + %+ cope (fang cof for) |= [cof=cafe pro=vase] ?: &((slob %grow p.pro) (slob too p:(slap pro [%cnzy %grow]))) %+ cope (keel cof pro [[%& 6]~ vax]~) |= [cof=cafe pox=vase] (maim cof pox [%tsgr [%cnzy %grow] [%cnzy too]]) - %+ cope (fang cof too bek) + %+ cope (fang cof too) |= [cof=cafe pro=vase] =+ ^= zat ^- (unit vase) ?. (slob %grab p.pro) ~ @@ -856,7 +1027,7 @@ (maul cof u.zat vax) :: ++ lion :: translation search - |= [cof=cafe too=@tas bek=beak fro=(list ,@tas)] + |= [cof=cafe too=@tas fro=(list ,@tas)] ^- (bolt (list ,@tas)) =| war=(set ,@tas) =< -:(apex (fine cof fro)) @@ -881,7 +1052,7 @@ [(fine cof [too ~]) +>.$] ?: (~(has in war) for) [(flue cof) +>] =. war (~(put in war) for) - =^ hoc +>.$ (apex (lily cof for bek)) + =^ hoc +>.$ (apex (lily cof for)) :_ +>.$ %+ cope hoc |= [cof=cafe ked=(list ,@tas)] @@ -889,10 +1060,10 @@ -- :: ++ lope :: translation pipe - |= [cof=cafe for=mark yaw=(list mark) bek=beak vax=vase] + |= [cof=cafe for=mark yaw=(list mark) vax=vase] ^- (bolt vase) ?~ yaw (fine cof vax) - %+ cope (link cof i.yaw for bek vax) + %+ cope (link cof i.yaw for vax) |= [cof=cafe yed=vase] ^$(cof cof, for i.yaw, yaw t.yaw, vax yed) :: @@ -912,12 +1083,12 @@ ^- (bolt vase) %+ cope (mail cof p.vax gen) |= [cof=cafe typ=type fol=nock] - %+ (coup cof) (mock [q.vax fol] (mole ska)) + %+ (coup cof) (mock [q.vax fol] (mole (slod save))) |=(val=* `vase`[typ val]) :: ++ make :: reduce silk |= [cof=cafe kas=silk] - ^- (bolt cage) + ^- (bolt gage) :: ~& [%make (,@tas -.kas)] ?- -.kas ^ @@ -928,7 +1099,7 @@ |=([cof=cafe p=silk q=silk] ^$(cof cof, kas q.kas)) == :: - |= [cof=cafe bor=cage heg=cage] ^- (bolt cage) + |= [cof=cafe bor=gage heg=gage] ^- (bolt gage) [p=cof q=[%0 ~ [%$ (slop q.bor q.heg)]]] == :: @@ -938,7 +1109,7 @@ %+ cope (lima cof p.kas q.kas r.kas) |= [cof=cafe vux=(unit vase)] ?~ vux - (flaw cof (smyt (tope q.kas)) ~) + (flaw cof leaf/"bake failed" (smyt (tope q.kas)) ~) (fine cof [p.kas u.vux]) :: %boil @@ -947,7 +1118,15 @@ |= [cof=cafe bem=beam] %+ cope (lime cof p.kas bem r.kas) |= [cof=cafe vax=vase] - (fine cof `cage`[p.kas vax]) + (fine cof `gage`[p.kas vax]) + :: + %bunt + %+ cool |.(leaf/"ford: bunt {}") + ?: ?=(?(%hoon %hook) p.kas) + (fine cof p.kas [%atom %t] '') + %+ cope (fang cof p.kas) + |= [cof=cafe tux=vase] + (fine cof [p.kas (slot 6 tux)]) :: %call :: %+ cool |.(leaf/"ford: call {<`@p`(mug kas)>}") @@ -958,7 +1137,7 @@ |=([cof=cafe p=silk q=silk] ^$(cof cof, kas q)) == :: - |= [cof=cafe gat=cage sam=cage] + |= [cof=cafe gat=gage sam=gage] (maul cof q.gat q.sam) :: |= [cof=cafe vax=vase] @@ -968,27 +1147,47 @@ %cast %+ cool |.(leaf/"ford: cast {}") %+ cope $(kas q.kas) - |= [cof=cafe cay=cage] - =+ bek=[our %main %da now] :: XX - :: VV :: - %+ cope (link cof p.kas p.cay bek q.cay) + |= [cof=cafe cay=gage] + ^- (bolt gage) + %+ cool |.(leaf/"ford: casting {} to {}") + ?. ?=(@ p.cay) + (flaw cof leaf/"bad cast marc" ~) + %+ cope (link cof p.kas p.cay q.cay) |= [cof=cafe vax=vase] (fine cof [p.kas vax]) - :: - :: %+ cope (lion cof p.kas bek [p.cay]~) - :: |= [cof=cafe wuy=(list ,@tas)] - :: ?~ wuy (flaw cof [%leaf "ford: no path: {<[p.cay p.kas]>}"]~) - :: %+ cope (lope cof i.wuy t.wuy bek q.cay) - :: |= [cof=cafe vax=vase] - :: (fine cof [p.kas vax]) + :: + %diff + %+ cool |.(leaf/"ford: diff {<`@p`(mug p.kas)>} {<`@p`(mug q.kas)>}") + (diff cof p.kas q.kas) :: %done [cof %0 p.kas q.kas] %dude (cool |.(p.kas) $(kas q.kas)) %dune ?~ q.kas [cof [%2 p.kas [%leaf "no data"]~]] $(kas [%done p.kas u.q.kas]) + :: + %file + + %+ cool |.(leaf/"ford: file {}") + (lear cof p.kas) + :: + %join + %+ cool + |. + leaf/"ford: join {} {<`@p`(mug q.kas)>} {<`@p`(mug r.kas)>}" + (join cof p.kas q.kas r.kas) + :: + %mash + %+ cool + |. + leaf/"ford: mash {} {<`@p`(mug q.kas)>} {<`@p`(mug r.kas)>}" + (mash cof p.kas q.kas r.kas) :: %mute (kale cof p.kas q.kas) + %pact + %+ cool |.(leaf/"ford: pact {<`@p`(mug p.kas)>} {<`@p`(mug q.kas)>}") + (pact cof p.kas q.kas) + :: %plan %+ cope (abut:(meow p.kas q.kas) cof r.kas) |= [cof=cafe vax=vase] @@ -998,16 +1197,37 @@ %ride %+ cool |.(leaf/"ford: ride {<`@p`(mug kas)>}") %+ cope $(kas q.kas) - |= [cof=cafe cay=cage] + |= [cof=cafe cay=gage] %+ cope (maim cof q.cay p.kas) |= [cof=cafe vax=vase] (fine cof %noun vax) + :: + %tabl + %+ cope + |- ^- (bolt (pair (list (pair marc marc)) vase)) + ?~ p.kas (fine cof ~ *vase) + %+ cope (make cof p.i.p.kas) + |= [cof=cafe key=gage] + %+ cope (make cof q.i.p.kas) + |= [cof=cafe val=gage] + %+ cope ^^$(p.kas t.p.kas) + |= [cof=cafe rex=(list (pair marc marc)) rey=vase] + (fine cof [[p.key p.val] rex] (slop (slop q.key q.val) rey)) + |= [cof=cafe rex=(list (pair marc marc)) rey=vase] + (fine cof [%tabl rex] rey) :: %vale %+ cool |.(leaf/"ford: vale {} {} {<`@p`(mug r.kas)>}") %+ cope (lave cof p.kas q.kas r.kas) |= [cof=cafe vax=vase] (fine cof `cage`[p.kas vax]) + :: + %volt + %+ cool |.(leaf/"ford: volt {}") + %+ cope $(kas [%bunt p.q.kas]) + |= [cof=cafe cay=gage] + ^- (bolt gage) + [cof %0 p.kas p.q.kas p.q.cay q.q.kas] == :: ++ malt :: cached slit @@ -1026,7 +1246,7 @@ ^- (bolt vase) %+ cope (malt cof p.gat p.sam) |= [cof=cafe typ=type] - %+ (coup cof) (mong [q.gat q.sam] (mole ska)) + %+ (coup cof) (mong [q.gat q.sam] (mole (slod save))) |=(val=* `vase`[typ val]) :: ++ meow :: assemble @@ -1262,7 +1482,7 @@ ^- beam ?~ q.huf how(s ~[for p.huf way]) - [[q.u.q.huf %main p.u.q.huf] ~[for p.huf way]] + [[q.u.q.huf q.how p.u.q.huf] ~[for p.huf way]] :: ++ neck :: consume libraries |= [cof=cafe bir=(list hoof)] @@ -1332,20 +1552,85 @@ |= bem=beam %_ bem r ?: ?=(%ud -.r.bem) r.bem - =+ num=(ska %cw (tope bem(s ~))) - ?. ?=([~ ~ @u] num) r.bem :: XX - [%ud u.u.num] + =+ num=(ska ~ %cw bem(s ~)) + ?. ?=([~ ~ * * @u] num) r.bem :: XX + [%ud q.q.u.u.num] + == + :: + ++ pact :: patch + |= [cof=cafe kas=silk kos=silk] + ^- (bolt gage) + %. [cof kas kos] + ;~ cope + ;~ coax + |=([cof=cafe p=silk q=silk] (make cof p)) + |=([cof=cafe p=silk q=silk] (make cof q)) + == + |= [cof=cafe cay=gage coy=gage] + ?. &(?=(@ p.cay) ?=(@ p.coy)) + (flaw cof leaf/"bad pact marc" ~) + ?: ?=(?(%hoon %hook) p.cay) + ?. ?=(%txt-diff p.coy) + (flaw cof leaf/"{} mark with bad diff type: {}" ~) + =+ txt=((soft ,@t) q.q.cay) + ?~ txt + (flaw cof leaf/"{} mark on bad data" ~) + =+ dif=((soft (urge cord)) q.q.coy) + ?~ dif + =- (flaw cof leaf/"{} data with bad diff" -) + [>type=p.q.coy< >shouldbe=-:!>(*(urge cord))< ~] + =+ pac=(role (lurk (lore (cat 3 u.txt '\0a')) u.dif)) + (fine cof p.cay [%atom %t] (end 3 (dec (met 3 pac)) pac)) + %+ cope (fang cof p.cay) + |= [cof=cafe pro=vase] + ?. (slab %grad p.pro) + (flaw cof leaf/"no ++grad" ~) + =+ gar=(slap pro [%cnzy %grad]) + ?. (slab %form p.gar) + ?. (slab %sted p.gar) + (flaw cof leaf/"no ++form:grad nor ++sted:grad" ~) + =+ for=((soft ,@tas) q:(slap gar [%cnzy %sted])) + ?~ for + (flaw cof leaf/"bad ++sted:grad" ~) + (make cof %cast p.cay %pact [%cast u.for [%done ~ cay]] [%done ~ coy]) + =+ for=((soft ,@tas) q:(slap gar [%cnzy %form])) + ?~ for + (flaw cof leaf/"bad ++form:grad" ~) + ?. =(u.for p.coy) + %+ flaw cof :_ ~ + =< leaf/"pact on data with wrong form: {-} {+<} {+>}" + [(trip p.cay) (trip u.for) (trip p.coy)] + ?. (slab %pact p.gar) + (flaw cof leaf/"no ++pact:grad" ~) + %+ cope (keel cof pro [[%& 6]~ q.cay]~) + |= [cof=cafe pox=vase] + %+ cope + %^ maul cof + (slap (slap pox [%cnzy %grad]) [%cnzy %pact]) + q.coy + |= [cof=cafe pat=vase] + (fine cof p.cay pat) == :: ++ resp |= [tik=@ud rot=riot] ^+ ..zo ?> (~(has by q.kig) tik) + =+ `[ren=care bem=beam]`(~(got by q.kig) tik) ?~ rot - =+ `[ren=care bem=beam]`(~(got by q.kig) tik) - =^ dep deh.bay (daze ~) :: dependencies? + =^ dep deh.bay (daze ~) :: dependencies? amok:(expo [%made dep %| (smyt ren (tope bem)) ~]) - exec(q.kig (~(del by q.kig) tik)) + =+ (cat 3 'c' ren) + exec(q.kig (~(del by q.kig) tik), keg (~(put by keg) [- bem] r.u.rot)) + :: + ++ save + ^- sled + |= [(unit (set monk)) tem=term bem=beam] + ^- (unit (unit cage)) + =+ (~(get by keg) tem bem) + ?^ - + ``u.- + (ska +<.$) -- -- :: @@ -1361,7 +1646,6 @@ |= [hen=duct hic=(hypo (hobo kiss))] ^- [p=(list move) q=_..^$] => .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss) p.q.hic))) - =+ ska=(slod ski) :: XX depends =+ ^= our ^- @p ?- -.q.hic %exec p.q.hic @@ -1372,8 +1656,9 @@ ?~(buy *baby u.buy) =^ mos bay ?: ?=(%wasp -.q.hic) - abet:(~(awap za [[our hen] [now eny ska] ~] bay) q.q.hic) - abet:(~(apex za [[our hen] [now eny ska] ~] bay) q.q.hic) + abet:(~(awap za [[our *beak hen] [now eny ski] ~] bay) q.q.hic) + =* bek q.q.hic + abet:(~(apex za [[our bek hen] [now eny ski] ~] bay) r.q.hic) [mos ..^$(pol (~(put by pol) our bay))] :: ++ doze @@ -1400,7 +1685,7 @@ :: ++ scry |= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path] - ^- (unit (unit (pair mark ,*))) + ^- (unit (unit cage)) [~ ~] :: ++ stay :: save w/o cache @@ -1409,17 +1694,19 @@ ++ take :: response |= [tea=wire hen=duct hin=(hypo sign)] ^- [p=(list move) q=_..^$] - =+ ska=(slod ski) - ?. ?=([@ @ $|(~ [@ ~])] tea) - [~ ..^$] :: XX remove on breach - =+ our=(need (slaw %p i.tea)) + ?> ?=([@ @ *] tea) + =+ our=(slav %p i.tea) =+ bay=(~(got by pol.lex) our) =^ mos bay - ?~ t.t.tea - abet:(~(axun za [[our hen] [now eny ska] ~] bay) (slav %uv i.t.tea) q.hin) - =+ :* num=(need (slaw %ud i.t.tea)) - tik=(need (slaw %ud i.t.t.tea)) + =+ dep=(slaw %uv i.t.tea) + ?^ dep + =+ [bek sup]=(need (tome t.t.tea)) + abet:(~(axun za [[our bek hen] [now eny ski] ~] bay) tea u.dep sup q.hin) + ?> ?=([@ @ @ @ ~] t.t.tea) + =+ :* num=(slav %ud i.t.tea) + tik=(slav %ud i.t.t.tea) + bek=-:(need (tome t.t.t.tea)) == - abet:(~(axon za [[our hen] [now eny ska] ~] bay) num tik q.hin) + abet:(~(axon za [[our bek hen] [now eny ski] ~] bay) num tik q.hin) [mos ..^$(pol (~(put by pol) our bay))] -- diff --git a/arvo/gall.hoon b/base/arvo/gall.hoon similarity index 92% rename from arvo/gall.hoon rename to base/arvo/gall.hoon index 223bf032d..e237849d8 100644 --- a/arvo/gall.hoon +++ b/base/arvo/gall.hoon @@ -8,7 +8,7 @@ $: %0 :: state version pol=(map ship mast) :: apps by ship == :: -++ bead ,[p=(set beam) q=cage] :: computed result +++ bead ,[p=(set beam) q=gage] :: computed result ++ bone ,@ud :: opaque duct ++ gift :: out result <-$ $% [%back p=?] :: %mess ack good/bad @@ -57,12 +57,10 @@ ++ note :: out request $-> $? $: %a :: to %ames $% [%wont p=sock q=path r=*] :: - == == :: - $: %c :: to %clay - $% [%warp p=sock q=riff] :: == == :: $: %f :: to %ford - $% [%exec p=@p q=(unit silk)] :: + $% [%exec p=@p q=beak r=(unit silk)] :: + [%wasp p=@p q=@uvH] :: == == :: $: %g :: to %gall $% [%show p=hapt q=ship r=path] :: @@ -74,10 +72,6 @@ $: @tas :: to any $% [%meta p=vase] :: == == == :: -++ rave :: see %clay - $% [& p=mood] :: single request - [| p=moat] :: change range - == :: ++ riff ,[p=desk q=(unit rave)] :: see %clay ++ scad :: opaque for foreign $: p=@ud :: index @@ -120,7 +114,7 @@ peq=(map bone ,@uvI) :: peekers qel=(map bone ,@ud) :: rush queue length == :: - ped=(set (pair ship desk)) :: active depends + ped=@uvH :: active depends zam=scar :: opaque ducts == :: ++ silk :: see %ford @@ -159,7 +153,8 @@ [%vega p=path] :: == == :: $: %f :: by %ford - $% [%made p=@uvH q=(each cage tang)] :: + $% [%made p=@uvH q=(each gage tang)] :: + [%news ~] :: == == == :: ++ toil (pair duct knob) :: work in progress -- :::::::::::::::::::::::::::::::::::::::::::::::::::::: @@ -302,7 +297,7 @@ lot=coin tyl=path == - ^- (unit (unit (pair mark ,*))) + ^- (unit (unit cage)) =+ ^= vew ^- lens :: XX future scry %. :- use :- [who syd ((hard case) p.lot)] @@ -320,7 +315,7 @@ %y y.vew %z z.vew == - |=(a=(unit) (bind a |=(b=* [%noun b]))) + |=(a=(unit) (bind a |=(b=* [%noun !>(b)]))) :: ++ doze |= [now=@da hen=duct] @@ -337,6 +332,7 @@ -- |% :: inner core :: +++ leak |=(our=ship `beak`[our %home %da now]) :: default beak ++ best :: cage to gift |= [sem=?(%rush %rust) cay=cage] ^- gift @@ -407,6 +403,8 @@ [hen %give %mean u.q.sih] :: %f + ?. ?=(%made +<.sih) + ~& [%gall-bad-gasp +<.sih] `..^$ :_ ..^$ :_ ~ :- hen @@ -415,6 +413,7 @@ [%give %crud %gasp-crud p.q.+.sih] :: %& + ?. ?=(@ p.p.q.+.sih) ~| %bad-marc !! =+ cay=`cage`p.q.+.sih ?+ -.pax !! %d [%give (best %rush cay)] @@ -440,10 +439,12 @@ [%pass [%r pax] %g %took [our imp] you] :: %f + ?< ?=(%news -.+.sih) :_ ~ :- hen ?- -.q.+.sih %| [%give %mean ~ %ford-fail p.q.+.sih] - %& [%pass [%r pax] %g %mess [our imp] you `cage`p.q.+.sih] + %& ?. ?=(@ p.p.q.+.sih) ~| %bad-marc !! + [%pass [%r pax] %g %mess [our imp] you `cage`p.q.+.sih] == :: %g @@ -479,9 +480,9 @@ :- [hen %give %nice ~] :_ ~ ^- move :- neh ?- -.ron - %d [%pass /x/d `note`[%f %exec p.saq ~ %vale p.ron q.saq q.ron]] + %d [%pass /x/d %f %exec p.saq (leak p.saq) ~ %vale p.ron q.saq q.ron] %e [%give %mean p.ron] - %f [%pass /x/f `note`[%f %exec p.saq ~ %vale p.ron q.saq q.ron]] + %f [%pass /x/f %f %exec p.saq (leak p.saq) ~ %vale p.ron q.saq q.ron] %k [%give %nice ~] == :: @@ -501,7 +502,7 @@ == ^- note ?- -.rok - %m [%f %exec p.saq ~ %vale p.rok q.saq q.rok] + %m [%f %exec p.saq (leak p.saq) ~ %vale p.rok q.saq q.rok] %s [%g %show [p.saq imp] q.saq p.rok] %u [%g %nuke [p.saq imp] q.saq] == @@ -695,44 +696,16 @@ :: ~& [%deff imp cub.sat] [hon r.q.caq] :: - ++ drug :: set dependencies - |= pen=(set (pair ship desk)) - :: ~& [%drug ped=ped.sat] - :: ~& [%drug pen=pen] - ^+ +> - =+ ^= new ^- (list move) - %+ turn - %+ skip (~(tap in pen) ~) - |=(a=(pair ship desk) (~(has in ped.sat) a)) - |= a=(pair ship desk) - :- hun.mat - :^ %pass (away %w %drug (scot %p p.a) q.a ~) %c - :: ~& [%sync-subscribe our p.a q.a] - [%warp [our p.a] q.a ~ %| [%da +(now)] [%da (add now ~d1000)] /] - =+ ^= old ^- (list move) - %+ turn - %+ skip (~(tap in ped.sat) ~) - |=(a=(pair ship desk) (~(has in pen) a)) - |= a=(pair ship desk) - :- hun.mat - :^ %pass (away %w %drug (scot %p p.a) q.a ~) %c - ~& [%sync-unsubscribe our p.a q.a] - [%warp [our p.a] q.a ~] - %_(+>.$ ped.sat pen, mow :(weld new old mow)) - :: - ++ drum :: raw dependencies + ++ drum :: set dependencies |= dep=@uvH ^+ +> - ?> ?=(^ orm.sat) - %- drug - =+ ped=`(set (pair ship desk))`[[our %main] ~ ~] - ped - ::=+ mav=(~(tap by dep) ~) - ::|- ^+ ped - ::?~ mav ped - ::?: =(r.i.mav [%da u.orm.sat]) - :: $(mav t.mav, ped (~(put in ped) p.i.mav q.i.mav)) - ::$(mav t.mav) + ?~ dep ~&(%drum-none +>.$) + ?: =(dep ped.sat) +>.$ + =+ pax=(away %w %drum (scot %uv dep) ~) + %_ +>.$ + ped.sat dep + mow :_(mow [hun.mat %pass pax %f %wasp our dep]) :: XX cancel old + == :: ++ ford :: exec to ford |= [pax=path kas=silk] @@ -741,9 +714,9 @@ :+ %dude leaf/"error in app {} on {} at instance {}" kas - %_ +> - mow :_(mow [hen %pass (away pax) %f [%exec our `kas]]) - onz.sat `[hen pax] + %_ +> + mow :_(mow [hen %pass (away pax) %f [%exec our (leak our) `kas]]) + onz.sat `[hen pax] == :: ++ give :: give a gift @@ -757,7 +730,8 @@ :: ++ home :: load application ^- silk - [%boil %core [[our %main [%da now]] app.sat %app ~] ~] + =+ let=((hard ,@) q.q:(need (need (ska ~ %cw [our %home %da now] /)))) + [%boil %core [[our %home %ud ?:(=(let 0) 1 let)] app.sat %app ~] ~] :: ++ leav %_ . @@ -774,7 +748,7 @@ :: ++ mack :: apply standard |= sih=sign - ?> ?=(%f -.sih) + ?> ?=([%f %made *] sih) ^- [(unit (list tank)) _+>] ?- -.q.+.sih & :- ~ @@ -786,7 +760,7 @@ ++ meek :: apply peek |= sih=sign ^- [(unit cage) _+>] - ?> ?=(%f -.sih) + ?> ?=([%f %made *] sih) ?- -.q.+.sih & =+ vax=`vase`q.p.q.+.sih ?. &(?=(^ q.vax) ?=(@ -.q.vax)) @@ -799,9 +773,9 @@ :: ++ mick :: apply w/depends |= sih=sign - ?> ?=(%f -.sih) - ^- [[p=? q=@uvH] _+>] - :- [-.q.+.sih p.+.sih] + ?> ?=([%f %made *] sih) + ^- [? _+>] + :- -.q.+.sih ?- -.q.+.sih & %- obey:(morn (slot 3 q.p.q.+.sih)) (slot 2 q.p.q.+.sih) @@ -811,7 +785,7 @@ ++ muck :: apply part |= sih=sign ^- [(unit (list tank)) _+>] - ?> ?=(%f -.sih) + ?> ?=([%f %made *] sih) ?- -.q.+.sih & [~ (obey q.p.q.+.sih)] | [`p.q.+.sih (give %crud %muck-made p.q.+.sih)] @@ -819,11 +793,12 @@ :: ++ murk :: apply park |= sih=sign - ^- [(unit cage) _+>] - ?> ?=(%f -.sih) + ^- [[p=@uvH q=(unit cage)] _+>] + ?> ?=([%f %made *] sih) ?- -.q.+.sih - & [`p.q.+.sih +>.$] - | [~ (give %crud %murk-made p.q.+.sih)] + & ?. ?=(@ p.p.q.+.sih) ~| %bad-marc !! + [[p.+.sih `p.q.+.sih] +>.$] + | [[p.+.sih ~] (give %crud %murk-made p.q.+.sih)] == :: ++ more :: domestic take @@ -850,9 +825,9 @@ :: %park =^ gyd +>.$ (murk q.hin) - ?~ gyd - +>.$ - (quen %load u.gyd) + ?~ q.gyd (drum p.gyd) + =. +>.$ (drum p.gyd) + (quen %load u.q.gyd) :: %part =^ gud +>.$ (muck q.hin) @@ -905,8 +880,8 @@ :: %prep =^ gad +>.$ (mick q.hin) - ?. p.gad (drum q.gad) - deal:(drum q.gad) + ?. gad +>.$ + deal :: %pull =^ gud +>.$ (mack q.hin) @@ -921,15 +896,15 @@ == :: %w :: autoboot - ?> ?=([%drug @ @ ~] t.pax) - =+ :* sin=((hard ,[%c %writ p=riot]) q.hin) - our=(need (slaw %p i.t.t.pax)) - syd=(need ((sand %tas) i.t.t.t.pax)) - == - ::~& [%sync-notified `@p`our `@ta`syd] - =. ped.sat (~(del by ped.sat) [our syd]) - ?~ p.+.sin - +>.$ + ?> ?=([%drum @ ~] t.pax) + ?> ?=([%f %news ~] q.hin) + :: ?> ?=([%drug @ @ ~] t.pax) + :: =+ :- sin=((hard ,[%c %writ p=(unit)]) q.hin) + :: [our syd]=(raid t.t.pax %p %tas ~) + :: ::~& [%sync-notified `@p`our `@ta`syd] + :: =. ped.sat (~(del by ped.sat) [our syd]) + :: ?~ p.+.sin + :: +>.$ +>.$(vey.sat (~(put to vey.sat) hen %boot ~)) == :: @@ -973,7 +948,7 @@ %= +> onz.sat ~ mow - :_(mow [hen %pass (away q.u.onz.sat) %f [%exec our ~]]) + :_(mow [hen %pass (away q.u.onz.sat) %f [%exec our (leak our) ~]]) == +>.$(vey.sat (~(put to vey.sat) hen kon)) :: @@ -1059,6 +1034,14 @@ :: ++ work :: eat queue |- ^+ + + :: ~& > :* %workeando + :: our=our + :: vey==(~ vey.sat) + :: ^= qic + :: ?: ?=(^ qic.sat) + :: [p -.q]:u.qic.sat + :: ~ + :: == ?: |(?=(^ qic.sat) =(~ vey.sat)) +.$ :: nothing to do =^ yev vey.sat [p q]:~(get to vey.sat) ?: (~(has in nuc.sat) p.yev) $ @@ -1182,7 +1165,7 @@ |= [a=term b=(list term)] [(cat 3 'pock-' a) (cat 3 'poke-' a) b] =+ ofs=(met 3 app.sat) - ?. .= (cat 3 app.sat '-') :: XX temporary, until /=main=/bin + ?. .= (cat 3 app.sat '-') :: XX temporary, until /=home=/bin (end 3 +(ofs) p.q.kon) (goc p.q.kon /pock) :(goc p.q.kon (rsh 3 ofs p.q.kon) /pock) diff --git a/arvo/hoon.hoon b/base/arvo/hoon.hoon similarity index 99% rename from arvo/hoon.hoon rename to base/arvo/hoon.hoon index b531b8ea1..2d38911a6 100644 --- a/arvo/hoon.hoon +++ b/base/arvo/hoon.hoon @@ -50,7 +50,7 @@ [std=term kel=@] :: kelvin version [ven=term pro=term kel=@] :: vendor and product [ven=term pro=term ver=@ kel=@] :: all of the above - == + == :: ++ clue ,[p=chum q=nock r=(list (pair term nock))] :: battery definition ++ coil $: p=?(%gold %iron %lead %zinc) :: core type q=type :: @@ -649,8 +649,7 @@ :: ++ need :: demand |* a=(unit) - ~| %need - ?~ a !! + ?~ a ~|(%need !!) u.a :: ++ some :: lift (pure) @@ -1799,6 +1798,17 @@ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 2cI, almost macros :: :: +++ same |*(* +<) :: identity +++ head |*(^ +<-) :: get head +++ tail |*(^ +<+) :: get head +++ test |=(^ =(+<- +<+)) :: equality +++ cork |*([a=_,* b=gate] (corl b a)) :: compose forward +++ corl :: compose backwards + |* [a=gate b=_,*] + =< +:|.((a (b))) :: type check + |* c=_+<.b + (a (b c)) +:: ++ cury :: curry left |* [a=_|=(^ **) b=*] |* c=_+<+.a @@ -1809,14 +1819,6 @@ |* b=_+<+.a (a b c) :: -++ cork |*([a=_,* b=gate] (corl b a)) :: compose forward -:: -++ corl :: compose backwards - |* [a=gate b=_,*] - =< +:|.((a (b))) :: type check - |* c=_+<.b - (a (b c)) -:: ++ hard :: force coerce to type |* han=$+(* *) |= fud=* ^- han @@ -1885,7 +1887,7 @@ |- ^- (unit ,@) ?~ a ~ ?: =(b n.a) [~ u=(peg c 2)] - ?: (gor b n.a) + ?: (hor b n.a) $(a l.a, c (peg c 6)) $(a r.a, c (peg c 7)) :: @@ -1991,8 +1993,8 @@ |= a=(tree ,[p=* q=*]) ?~ a & - ?& ?~(l.a & ?&((vor p.n.a p.n.l.a) (hor p.n.l.a p.n.a))) - ?~(r.a & ?&((vor p.n.a p.n.r.a) (hor p.n.a p.n.r.a))) + ?& ?~(l.a & ?&((vor p.n.a p.n.l.a) (gor p.n.l.a p.n.a))) + ?~(r.a & ?&((vor p.n.a p.n.r.a) (gor p.n.a p.n.r.a))) == :: ++ ja :: jar engine @@ -2124,12 +2126,12 @@ ?: (vor p.n.a p.n.b) ?: =(p.n.b p.n.a) [n.b $(a l.a, b l.b) $(a r.a, b r.b)] - ?: (hor p.n.b p.n.a) + ?: (gor p.n.b p.n.a) %- uni(+< $(a l.a, b [n.b l.b ~])) $(b r.b) %- uni(+< $(a r.a, b [n.b ~ r.b])) $(b l.b) ?: =(p.n.a p.n.b) [n.b $(b l.b, a l.a) $(b r.b, a r.a)] - ?: (hor p.n.a p.n.b) + ?: (gor p.n.a p.n.b) %- uni(+< $(b l.b, a [n.a l.a ~])) $(a r.a) %- uni(+< $(b r.b, a [n.a ~ r.a])) $(a l.a) :: @@ -2202,12 +2204,12 @@ ?: (vor p.n.a p.n.b) ?: =(p.n.b p.n.a) [n.b $(a l.a, b l.b) $(a r.a, b r.b)] - ?: (hor p.n.b p.n.a) + ?: (gor p.n.b p.n.a) $(a [n.a $(a l.a, b [n.b l.b ~]) r.a], b r.b) $(a [n.a l.a $(a r.a, b [n.b ~ r.b])], b l.b) ?: =(p.n.a p.n.b) [n.b $(b l.b, a l.a) $(b r.b, a r.a)] - ?: (hor p.n.a p.n.b) + ?: (gor p.n.a p.n.b) $(b [n.b $(b l.b, a [n.a l.a ~]) r.b], a r.a) $(b [n.b l.b $(b r.b, a [n.a ~ r.a])], a l.a) :: @@ -9393,13 +9395,14 @@ == :: ++ desk ,@tas :: ship desk case spur ++ cage (cask vase) :: global metadata -++ cask |*(a=$+(* *) (pair mark a)) :: global data +++ cask |*(a=_,* (pair mark a)) :: global data ++ cuff :: permissions $: p=kirk :: readers q=(set monk) :: authors == :: ++ curd ,[p=@tas q=*] :: typeless card ++ duct (list wire) :: causal history +++ gage (pair marc vase) :: structured cage ++ hide :: standard app state $: $: our=ship :: owner/operator app=term :: app identity @@ -9429,6 +9432,10 @@ ++ y *(unit (unit arch)) :: directory ++ z *(unit (unit cage)) :: current subtree -- :: +++ marc :: structured mark + $| mark :: plain mark + $% [%tabl p=(list (pair marc marc))] :: map + == :: ++ mark ,@tas :: content type ++ mill (each vase milt) :: vase/metavase ++ milt ,[p=* q=*] :: metavase @@ -9448,6 +9455,8 @@ ++ ship ,@p :: network identity ++ sled $+ [(unit (set monk)) term beam] :: namespace function (unit (unit cage)) :: +++ slad $+ [(unit (set monk)) term beam] :: undertyped + (unit (unit (cask))) :: ++ slut $+(* (unit (unit))) :: old namespace ++ vile :: reflexive constants $: typ=type :: -:!>(*type) @@ -9458,7 +9467,7 @@ ++ wire path :: event pretext ::::: hacks ++ slod - |= sed=sled + |= sed=slad ^- slut |= raw=* =+ pux=((soft path) raw) @@ -9479,7 +9488,7 @@ =+ bop=(sed ~ ron bed) ?~ bop ~ ?~ u.bop [~ ~] - [~ ~ q.q.u.u.bop] + [~ ~ +.q.u.u.bop] :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 3bE, Arvo core :: :: @@ -9498,7 +9507,7 @@ +>.$(q.sew (slam (slap syg [%cnzy %load]) (slap rig [%cnzy %stay]))) :: ++ wink :: deploy - |= [now=@da eny=@ ski=sled] + |= [now=@da eny=@ ski=slad] =+ rig=(slym q.sew +<) :: activate vane ~% %wink +>+> ~ |% @@ -9645,7 +9654,7 @@ ren=care bed=beam == - ^- (unit (unit cage)) + ^- (unit (unit (cask))) :: ~& [%arvo-scry ren bed] =+ ^= old :* fur @@ -9655,12 +9664,12 @@ `coin`[%$ r.bed] (flop s.bed) == - ^- (unit (unit cage)) + ^- (unit (unit (cask))) =+ pro=(slym (slap rig [%cnzy %scry]) old) ?~ q.pro ~ ?~ +.q.pro [~ ~] =+ dat=(slot 7 pro) - [~ ~ (mark q.dat) (slot 3 dat)] + [~ ~ (mark -.q.dat) +.q.dat] :: ++ soar :: scrub vane |= sev=vase @@ -9720,13 +9729,13 @@ |= [vil=vile eny=@ bud=vase niz=(pair worm (list ,[p=@tas q=vase]))] |_ now=@da ++ beck - ^- sled + ^- slad |= [fur=(unit (set monk)) ron=term bed=beam] - ^- (unit (unit cage)) + ^- (unit (unit (cask))) => .(fur ?^(fur fur `[[%& p.bed] ~ ~])) :: XX heinous =+ lal=(end 3 1 ron) =+ ren=(care (rsh 3 1 ron)) - |- ^- (unit (unit cage)) + |- ^- (unit (unit (cask))) ?~ q.niz ~ ?. =(lal p.i.q.niz) $(q.niz t.q.niz) %- scry:(wink:(vent lal vil bud p.niz q.i.q.niz) now (shax now) ..^$) @@ -9829,7 +9838,7 @@ |- ^- [p=(list ovum) q=(pair worm (list ,[p=@tas q=vase]))] ?~ mor [(flop ova) niz] =^ nyx niz (jack lac i.mor) - $(ova (weld p.nyx ova), mor (weld t.mor q.nyx)) + $(ova (weld p.nyx ova), mor (weld q.nyx t.mor)) -- -- :::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::: diff --git a/arvo/jael.hoon b/base/arvo/jael.hoon similarity index 100% rename from arvo/jael.hoon rename to base/arvo/jael.hoon diff --git a/arvo/kahn.hoon b/base/arvo/kahn.hoon similarity index 100% rename from arvo/kahn.hoon rename to base/arvo/kahn.hoon diff --git a/arvo/lunt.hoon b/base/arvo/lunt.hoon similarity index 100% rename from arvo/lunt.hoon rename to base/arvo/lunt.hoon diff --git a/arvo/musk.hoon b/base/arvo/musk.hoon similarity index 100% rename from arvo/musk.hoon rename to base/arvo/musk.hoon diff --git a/arvo/time.hoon b/base/arvo/time.hoon similarity index 100% rename from arvo/time.hoon rename to base/arvo/time.hoon diff --git a/arvo/zuse.hoon b/base/arvo/zuse.hoon similarity index 70% rename from arvo/zuse.hoon rename to base/arvo/zuse.hoon index eda940dc2..baecf03bd 100644 --- a/arvo/zuse.hoon +++ b/base/arvo/zuse.hoon @@ -2,6 +2,7 @@ :: zuse (3), standard library (tang) :: ~% %zuse + ~ +!: |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :::: chapter 3b, Arvo libraries :::: @@ -965,8 +966,9 @@ (add (div ~s1 2.000) (sub a ~1970.1.1)) :: ++ jesc + =+ utf=|=(a=@ ['\\' 'u' ((x-co 4):co a)]) |= a=@ ^- tape - ?+ a [a ~] + ?+ a ?:((gth a 0x1f) [a ~] (utf a)) 10 "\\n" 34 "\\\"" 92 "\\\\" @@ -1019,982 +1021,16 @@ |= wol=wall ^- octs =+ buf=(rap 3 (turn wol |=(a=tape (crip (weld a `tape`[`@`10 ~]))))) [(met 3 buf) buf] -:: -:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: -:: section 3bE, tree sync :: -:: -:: -++ invert-miso :: invert miso - |= mis=miso - ?- -.mis - %del [%ins p.mis] - %ins [%del p.mis] - %mut [%mut (limp p.mis)] - == -:: -++ cosh :: locally rehash - |= ank=ankh :: NB v/unix.c - ank(p rehash:(zu ank)) -:: -++ cost :: new external patch - |= [bus=ankh ank=ankh] :: NB v/unix.c - ^- soba - :- [p.ank p.bus] - %- flop - myz:(change-tree:(zu ank) %c bus) -:: -++ loth - |= pat=(map path ,*) - ^- (set path) - %+ roll (~(tap by pat) ~) - |= [[p=path *] q=(set path)] - %. p %~ put in q -:: -++ luth - |= [p=(map path ,*) q=(map path ,*)] :: merge keysets - ^- (set path) - (~(uni in (loth p)) (loth q)) -:: -++ blob-to-lobe :: p.blob - |= p=blob - ^- lobe - ?- -.p - %delta p.p - %direct p.p - %indirect p.p - == -:: -++ ze !: - |_ [lim=@da dome rang] - ++ aeon-to-tako ~(got by hit) - ++ aeon-to-yaki (cork aeon-to-tako tako-to-yaki) - ++ make-yaki :: make yaki - |= [p=(list tako) q=(map path lobe) t=@da] - ^- yaki - =+ ^= has - %^ cat 7 (sham [%yaki (roll p add) q t]) - (sham [%tako (roll p add) q t]) - [p q has t] - :: - ++ tako-to-yaki ~(got by hut) :: grab yaki - ++ lobe-to-blob ~(got by lat) :: grab blob - ++ lobe-to-noun :: grab blob - |= p=lobe :: ^- * - %- blob-to-noun - (lobe-to-blob p) - :: - ++ make-direct :: make blob - |= [p=* q=umph] - ^- blob - [%direct (mug p) p q] - :: - ++ make-delta :: make blob delta - |= [p=lobe q=udon] - ^- blob - =+ t=[%delta 0 p q] - =+ z=(blob-to-noun t) - =+ ^= has - %^ cat 7 (sham [%blob z]) - (sham [%lobe z]) - [%delta has p q] - :: - ++ blob-to-umph :: blob umph [prep] - |= p=blob :: used in merge - ^- umph - ?- -.p - %delta p.r.p - %direct r.p - %indirect p.r.p - == - :: - ++ blob-to-noun :: grab blob - |= p=blob - ?- -.p - %delta (lump r.p (lobe-to-noun q.p)) - %direct q.p - %indirect q.p - == - :: - :: - :: - ++ diff-yakis :: fundamental diff - |= [p=yaki q=yaki] - ^- (map path miso) - %+ roll (~(tap in (luth q.p q.q)) ~) - |= [pat=path yeb=(map path miso)] - =+ leb=(~(get by q.p) pat) - =+ lob=(~(get by q.q) pat) - ?~ leb (~(put by yeb) pat [%ins (lobe-to-noun (need lob))]) - ?~ lob (~(put by yeb) pat [%del (lobe-to-noun (need leb))]) - ?: =(u.leb u.lob) yeb - =+ veq=(lobe-to-blob u.leb) - =+ voq=(lobe-to-blob u.lob) - %+ ~(put by yeb) pat - :- %mut - ?: &(?=(%delta -.voq) =(u.leb q.voq)) :: avoid diff - r.voq - =+ zeq=(blob-to-noun veq) - =+ zoq=(blob-to-noun voq) - ((diff (blob-to-umph (lobe-to-blob u.leb))) zeq zoq) - :: - ++ lobes-at-path :: lobes-at-path:ze - |= [yon=aeon pax=path] :: data at path - ^- (map path lobe) - ?: =(0 yon) ~ - %- mo - %+ skim - %. ~ - %~ tap by - =< q - %- aeon-to-yaki - yon - |= [p=path q=lobe] - ?| ?=(~ pax) - ?& !?=(~ p) - =(-.pax -.p) - $(p +.p, pax +.pax) - == == - :: - ++ case-to-aeon :: case-to-aeon:ze - |= lok=case :: act count through - ^- (unit aeon) - ?- -.lok - %da - ?: (gth p.lok lim) ~ - |- ^- (unit aeon) - ?: =(0 let) [~ 0] :: avoid underflow - ?: %+ gte p.lok - =< t - %- aeon-to-yaki - let - [~ let] - $(let (dec let)) - :: - %tas (~(get by lab) p.lok) - %ud ?:((gth p.lok let) ~ [~ p.lok]) - == - :: - ++ as-arch :: as-arch:ze - ^- arch :: arch report - :+ p.ank - ?~(q.ank ~ [~ p.u.q.ank]) - |- ^- (map ,@ta ,~) - ?~ r.ank ~ - [[p.n.r.ank ~] $(r.ank l.r.ank) $(r.ank r.r.ank)] - :: - ++ reachable-takos :: reachable - |= p=tako :: XX slow - ^- (set tako) - =+ y=(tako-to-yaki p) - =+ t=(~(put in *(set tako)) p) - %+ roll p.y - |= [q=tako s=_t] - ?: (~(has in s) q) :: already done - s :: hence skip - (~(uni in s) ^$(p q)) :: otherwise traverse - :: - ++ new-lobes :: object hash set - |= [b=(set lobe) a=(set tako)] :: that aren't in b - ^- (set lobe) - %+ roll (~(tap in a) ~) - |= [tak=tako bar=(set lobe)] - ^- (set lobe) - =+ yak=(tako-to-yaki tak) - %+ roll (~(tap by q.yak) ~) - |= [[path lob=lobe] far=_bar] - ^- (set lobe) - ?~ (~(has in b) lob) :: don't need - far - =+ gar=(lobe-to-blob lob) - ?- -.gar - %direct (~(put in far) lob) - %delta (~(put in $(lob q.gar)) lob) - %indirect (~(put in $(lob s.gar)) lob) - == - :: - ++ new-lobes-takos :: garg & repack - |= [b=(set lobe) a=(set tako)] - ^- [(set tako) (set lobe)] - [a (new-lobes b a)] - :: - ++ reachable-between-takos - |= [a=(unit tako) b=tako] :: pack a through b - ^- [(set tako) (set lobe)] - =+ ^= sar - ?~ a ~ - (reachable-takos r:(tako-to-yaki u.a)) - =+ yak=`yaki`(tako-to-yaki b) - %+ new-lobes-takos (new-lobes ~ sar) :: get lobes - |- ^- (set tako) :: walk onto sar - ?: (~(has in sar) r.yak) - ~ - =+ ber=`(set tako)`(~(put in `(set tako)`~) `tako`r.yak) - %- ~(uni in ber) - ^- (set tako) - %+ roll p.yak - |= [yek=tako bar=(set tako)] - ^- (set tako) - ?: (~(has in bar) yek) :: save some time - bar - %- ~(uni in bar) - ^$(yak (tako-to-yaki yek)) - :: - ++ takos-to-yakis :: trivial - |= a=(set tako) - ^- (set yaki) - (sa (turn (~(tap by a)) tako-to-yaki)) - :: - ++ lobes-to-blobs :: trivial - |= a=(set lobe) - ^- (set blob) - (sa (turn (~(tap by a)) lobe-to-blob)) - :: - ++ make-nako :: gack a through b - |= [a=aeon b=aeon] - ^- [(map aeon tako) aeon (set yaki) (set blob)] - :_ :- b - =- [(takos-to-yakis -<) (lobes-to-blobs ->)] - %+ reachable-between-takos - (~(get by hit) a) :: if a not found, a=0 - (aeon-to-tako b) - ^- (map aeon tako) - %- mo %+ skim (~(tap by hit) ~) - |= [p=aeon *] - &((gth p a) (lte p b)) - :: - :::::::::::::::::::::::::::::::::::::::::::::::::::::::: - ++ query :: query:ze - |= ren=?(%u %v %x %y %z) :: endpoint query - ^- (unit ,*) - ?- ren - %u [~ `rang`+<+>.query] - %v [~ `dome`+<+<.query] - %x ?~(q.ank ~ [~ q.u.q.ank]) - %y [~ as-arch] - %z [~ ank] - == - :: - ++ rewind :: rewind:ze - |= yon=aeon :: rewind to aeon - ^+ +> - ?: =(let yon) +> - ?: (gth yon let) !! :: don't have version - +>(ank (checkout-ankh q:(aeon-to-yaki yon)), let yon) - :: - :::: - ++ update-lat :: update-lat:ze - |= [lag=(map path blob) sta=(map lobe blob)] :: fix lat - ^- [(map lobe blob) (map path lobe)] - %+ roll (~(tap by lag) ~) - |= [[pat=path bar=blob] [lut=_sta gar=(map path lobe)]] - ?~ (~(has by lut) p.bar) - [lut (~(put by gar) pat p.bar)] - :- (~(put by lut) p.bar bar) - (~(put by gar) pat p.bar) - :: - ++ apply-changes :: apply-changes:ze - |= lar=(list ,[p=path q=miso]) :: store changes - ^- (map path blob) - =+ ^= hat :: current state - ?: =(let 0) :: initial commit - ~ :: has nothing - =< q - %- aeon-to-yaki - let - =- =+ sar=(sa (turn lar |=([p=path *] p))) :: changed paths - %+ roll (~(tap by hat) ~) :: find unchanged - |= [[pat=path gar=lobe] bat=_bar] - ?: (~(has in sar) pat) :: has update - bat - (~(put by bat) pat (lobe-to-blob gar)) :: use original - ^= bar ^- (map path blob) - %+ roll lar - |= [[pat=path mys=miso] bar=(map path blob)] - ^+ bar - ?- -.mys - %ins :: insert if not exist - ?: (~(has by bar) pat) !! :: - ?: (~(has by hat) pat) !! :: - (~(put by bar) pat (make-direct p.mys %c)) :: TODO content type? - %del :: delete if exists - ?. |((~(has by hat) pat) (~(has by bar) pat)) !! - (~(del by bar) pat) - %mut :: mutate, must exist - =+ ber=(~(get by bar) pat) - ?~ ber - =+ har=(~(get by hat) pat) - ?~ har !! - %+ ~(put by bar) pat - (make-delta u.har p.mys) - %+ ~(put by bar) pat - (make-delta p.u.ber p.mys) - == - ++ checkout-ankh :: checkout-ankh:ze - |= hat=(map path lobe) :: checkout commit - ^- ankh - %- cosh - %+ roll (~(tap by hat) ~) - |= [[pat=path bar=lobe] ank=ankh] - ^- ankh - %- cosh - ?~ pat - =+ zar=(lobe-to-noun bar) - ank(q [~ (sham zar) zar]) - =+ nak=(~(get by r.ank) i.pat) - %= ank - r %+ ~(put by r.ank) i.pat - $(pat t.pat, ank (fall nak *ankh)) - == - :: - ++ forge-yaki :: forge-yaki:ze - |= [wen=@da par=(unit tako) lem=soba] :: forge yaki - =+ ^= per - ?~ par ~ - ~[u.par] - =+ gar=(update-lat (apply-changes q.lem) lat) - :- %^ make-yaki per +.gar wen :: from existing diff - -.gar :: fix lat - :: - ++ forge-nori :: forge-nori:ze - |= yak=yaki :: forge nori (ugly op) - ^- nori :: basically zerg w/ nori - ?~ p.yak !! :: no parent -> can't diff - :+ %& *cart :: diff w/ 1st parent - (~(tap by (diff-yakis (tako-to-yaki i.p.yak) yak)) ~) - :: - :: graph algorithms (bottleneck) - :: - ++ reduce-merge-points :: reduce merge points - |= unk=(set yaki) :: maybe need jet - =| gud=(set yaki) - =+ ^= zar - ^- (map tako (set tako)) - %+ roll (~(tap in unk) ~) - |= [yak=yaki qar=(map tako (set tako))] - (~(put by qar) r.yak (reachable-takos r.yak)) - |- - ^- (set yaki) - ?~ unk gud - =+ tek=`yaki`n.unk - =+ bun=(~(del in `(set yaki)`unk) tek) - ?: %+ roll (~(tap by (~(uni in gud) bun)) ~) :: only good + unknown - |= [tak=yaki god=?] - ^- ? - ?. god god - (~(has in (~(got by zar) r.tak)) tek) - $(gud (~(put in gud) tek), unk bun) - $(unk bun) - :: - ++ future-find-merge-points :: merge points fast - |= [p=yaki q=yaki] :: (future zeal) - ^- (set yaki) :: zear still uses zule - %- reduce-merge-points :: this is test-only - =+ s=(~(put in *(set tako)) r.p) :: not actually used - =+ t=(~(put in *(set tako)) t.p) :: but might be active - =| u=(set yaki) :: eventually - |- ^- (set yaki) - =+ v=(~(int in s) t) :: found common - =+ ^= qez :: drop common - ^- [s=(set tako) t=(set tako)] - %+ roll (~(tap in v) ~) - |= [tak=tako bar=_s zar=_t] - [(~(del in bar) tak) (~(del in zar) tak)] - ?: &(=(~ s.qez) =(~ s.qez)) - (~(uni in u) (takos-to-yakis v)) - %= $ - u (~(uni in u) (takos-to-yakis v)) - s (add-parents s.qez) - t (add-parents t.qez) - == - :: - ++ add-parents :: expand set - |= qez=(set tako) - ^- (set tako) - %+ roll (~(tap in qez) ~) - |= [tak=tako zar=(set tako)] - %- ~(uni in (~(put in zar) tak)) - (sa p:(tako-to-yaki tak)) - :: - ++ find-merge-points :: merge points - |= [p=yaki q=yaki] :: maybe need jet - ^- (set yaki) - %- reduce-merge-points - =+ r=(reachable-takos r.p) - |- ^- (set yaki) - ?: (~(has in r) q) (~(put in *(set yaki)) q) :: done - %+ roll p.q - |= [t=tako s=(set yaki)] - ?: (~(has in r) t) - (~(put in s) (tako-to-yaki t)) :: found - (~(uni in s) ^$(q (tako-to-yaki t))) :: traverse - :: - :: merge logic - :: - ++ clean :: clean - |= wig=(urge) - ^- (urge) - ?~ wig ~ - ?~ t.wig wig - ?: ?=(%& -.i.wig) - ?: ?=(%& -.i.t.wig) - $(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig]) - [i.wig $(wig t.wig)] - ?: ?=(%| -.i.t.wig) - $(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig]) - [i.wig $(wig t.wig)] - :: - ++ match-conflict :: match conflict - |= [us=[ship desk] th=[ship desk] p=(urge) q=(urge) r=(list)] - ^- [p=[p=(list) q=(list)] q=[p=(urge) q=(urge) r=(list)]] - =+ cas=(hard (list ,@t)) - =+ cat=(hard (urge ,@t)) - =+ mar=(match-merge (cat p) (cat q) (cas r)) - :- :- s.q.mar - (annotate us th p.p.mar q.p.mar s.q.mar) :: annotation - :- p.q.mar - :- q.q.mar - r.q.mar - :: - ++ annotate :: annotate conflict - |= [us=[ship desk] th=[ship desk] p=(list ,@t) q=(list ,@t) r=(list ,@t)] - ^- (list ,@t) - %- zing - ^- (list (list ,@t)) - %- flop - ^- (list (list ,@t)) - :- :_ ~ - %^ cat 3 '<<<<<<<<<<<<' - %^ cat 3 ' ' - %^ cat 3 `@t`(scot %p -.us) - %^ cat 3 '/' - +.us - :- p - :- ~['------------'] - :- r - :- ~['++++++++++++'] - :- q - :- :_ ~ - %^ cat 3 '>>>>>>>>>>>>' - %^ cat 3 ' ' - %^ cat 3 `@t`(scot %p -.th) - %^ cat 3 '/' - +.th - ~ - :: - ++ match-merge :: match merge - |= [p=(urge ,@t) q=(urge ,@t) r=(list ,@t)] :: resolve conflict - =| s=[p=(list ,@t) q=(list ,@t)] :: p chunk - =| t=[p=(list ,@t) q=(list ,@t)] :: q chunk - |- ^- $: p=[p=(list ,@t) q=(list ,@t)] - $= q - $: p=(urge ,@t) - q=(urge ,@t) - r=(list ,@t) - s=(list ,@t) - == == - ?~ p [[q.s q.t] p q r p.s] :: can't be conflict - ?~ q [[q.s q.t] p q r p.s] :: can't be conflict - ?- -.i.p - %& ?> ?=(%| -.i.q) :: is possibly conflict - ?: (gte p.i.p (lent p.i.q)) :: trivial resolve - :::- (weld p.s p.i.q) :: extend to q - :- :- (welp (flop (scag (lent p.i.q) r)) q.s) - (welp q.i.q q.t) - :- ?: =(p.i.p (lent p.i.q)) t.p - [[%& (sub p.i.p (lent p.i.q))] t.p] - :- t.q - :- (flop (slag (lent p.i.q) r)) - (welp (flop (scag (lent p.i.q) r)) p.s) - =+ tex=(flop (scag p.i.p r)) - ?~ t.p :: extend to end - %= $ - ::s [(welp p.s tex) (welp q.s tex)] - p ~[[%| [tex tex]]] - ::r (slag p.i.p r) - == - ?> ?=(%| -.i.t.p) :: fake skip - %= $ - ::s [(welp p.s tex) (welp q.s tex)] - p [[%| [(welp p.i.t.p tex) (welp q.i.t.p tex)]] t.t.p] - ::r (slag p.i.p r) - == - %| ?- -.i.q - %& =+ mar=$(p q, q p, s t, t s) :: swap recursion - [[q.p.mar p.p.mar] q.q.mar p.q.mar r.q.mar s.q.mar] - %| ?: =((lent p.i.p) (lent p.i.q)) :: perfect conflict - ?> =(p.i.p p.i.q) :: sane conflict - :- :- (welp q.i.p q.s) - (welp q.i.q q.t) - :- t.p - :- t.q - :- (scag (lent p.i.p) r) - (welp (flop (scag (lent p.i.p) r)) p.s) - ?. (lth (lent p.i.p) (lent p.i.q)) - =+ mar=$(p q, q p, s t, t s) :: swap recursion - [[q.p.mar p.p.mar] q.q.mar p.q.mar r.q.mar s.q.mar] - ?> .= p.i.p :: sane conflict - (slag (sub (lent p.i.q) (lent p.i.p)) p.i.q) - %= $ :: extend p - p t.p - p.s (welp p.i.p p.s) - q.s (welp q.i.p q.s) - p.t (welp p.i.p p.s) :: subset of q - q.t (welp q.i.q q.s) :: just consume all out - q [[%| (scag (sub (lent p.i.q) (lent p.i.p)) p.i.q) ~] t.q] - r (slag (lent p.i.p) r) - == - == - == - ++ qeal :: merge p,q - |* [us=[ship desk] th=[ship desk] pat=path p=miso q=miso r=(list) con=?] - ^- miso :: in case of conflict - ~| %qeal-fail - ?> ?=(%mut -.p) - ?> ?=(%mut -.q) - ?> ?=(%c -.q.p.p) - ?> ?=(%c -.q.p.q) - =+ s=(clean p.q.p.p) - =+ t=(clean p.q.p.q) - :- %mut - :- %c :: todo is this p.p.p? - :- %c - |- ^- (urge) - ::?~ s ?: (qual t) t - :: ~| %qail-conflict !! - ::?~ t ?: (qual s) s - :: ~| %qail-conflict !! - ?~ s t - ?~ t s - ?- -.i.s - %& - ?- -.i.t - %& - ?: =(p.i.s p.i.t) - [i.s $(s t.s, t t.t, r (slag p.i.s r))] - ?: (gth p.i.s p.i.t) - [i.t $(t t.t, p.i.s (sub p.i.s p.i.t), r (slag p.i.t r))] - [i.s $(s t.s, p.i.t (sub p.i.t p.i.s), r (slag p.i.s r))] - %| - ?: =(p.i.s (lent p.i.t)) - [i.t $(s t.s, t t.t, r (slag p.i.s r))] - ?: (gth p.i.s (lent p.i.t)) - :- i.t - $(t t.t, p.i.s (sub p.i.s (lent p.i.t)), r (slag (lent p.i.t) r)) - ?. con ~| %quil-conflict !! :: conflict - ~& [%quil-conflict-soft pat] - =+ mar=(match-conflict us th s t r) - [[%| p.mar] $(s p.q.mar, t q.q.mar, r r.q.mar)] - == - %| - ?- -.i.t - %| - ?. con ~| %quil-conflict !! - ~& [%quil-conflict-soft pat] - =+ mar=(match-conflict us th s t r) - [[%| p.mar] $(s p.q.mar, t q.q.mar, r r.q.mar)] - %& - ?: =(p.i.t (lent p.i.s)) - [i.s $(s t.s, t t.t, r (slag p.i.t r))] - ?: (gth p.i.t (lent p.i.s)) - :- i.s - $(s t.s, p.i.t (sub p.i.t (lent p.i.s)), r (slag (lent p.i.s) r)) - ?. con ~| %quil-conflict !! - ~& [%quil-conflict-soft pat] - =+ mar=(match-conflict us th s t r) - [[%| p.mar] $(s p.q.mar, t q.q.mar, r r.q.mar)] - == - == - ++ quil :: merge p,q - |= $: us=[ship desk] - th=[ship desk] - pat=path - p=(unit miso) - q=(unit miso) - r=(unit (list)) - con=? - == - ^- (unit miso) - ?~ p q :: trivial - ?~ q p :: trivial - ?- -.u.p - %ins ?> ?=(%ins -.u.q) - ?. con !! - %- some - :- %ins - %- role - %- annotate - :- us - :- th - :- (lore ((hard ,@) p.u.p)) - :- (lore ((hard ,@) p.u.q)) - ~ - %del p - %mut ?> ?=(%mut -.u.q) - %- some - %^ qeal us th - :^ pat u.p u.q :: merge p,q - :- %- need r - con - == - :: - ++ meld :: merge p,q from r - |= [p=yaki q=yaki r=yaki con=? us=[ship desk] th=[ship desk]] - ^- (map path blob) - =+ s=(diff-yakis r p) - =+ t=(diff-yakis r q) - =+ lut=(luth s t) - %- |= res=(map path blob) :: add old - ^- (map path blob) - %- ~(uni by res) - %- mo - %+ turn - %+ skip (~(tap by q.r) ~) :: loop through old - |= [pat=path bar=lobe] ^- ? - (~(has in lut) pat) :: skip updated - |= [pat=path bar=lobe] ^- [path blob] - [pat (lobe-to-blob bar)] :: lookup objects - %+ roll (~(tap in (luth s t)) ~) - |= [pat=path res=(map path blob)] - =+ ^= v - %- need - %^ quil us th - :- pat - :+ (~(get by s) pat) - (~(get by t) pat) - :_ con - %- %- lift lore - %- %- lift %- hard ,@ :: for %c - %- %- lift lobe-to-noun - %- ~(get by q.r) - pat - ?- -.v - %del res :: no longer exists - %ins :: new file - %+ ~(put by res) pat - %+ make-direct p.v %c :: TODO content type? - %mut :: patch from r - %+ ~(put by res) pat - %- make-direct - :_ %c - %+ lump p.v - %- lobe-to-noun - %- ~(got by q.r) pat - == - :: - :: merge types - :: - ++ mate :: merge p,q - |= con=? :: %mate, %meld - |= [p=yaki q=yaki us=[ship desk] th=[ship desk]] - ^- (map path blob) - =+ r=(~(tap in (find-merge-points p q)) ~) - ?~ r - ~|(%mate-no-ancestor !!) - ?: =(1 (lent r)) - (meld p q i.r con us th) - ~|(%mate-criss-cross !!) - :: - ++ keep :: %this - |= [p=yaki q=yaki [ship desk] [ship desk]] - ^- (map path blob) - %+ roll (~(tap by q.p) ~) - |= [[pat=path lob=lobe] zar=(map path blob)] - ^- (map path blob) - (~(put by zar) pat (lobe-to-blob lob)) - :: - ++ drop :: %that - |= [p=yaki q=yaki r=[ship desk] s=[ship desk]] - ^- (map path blob) - (keep q p r s) - :: - ++ forge :: %forge - |= [p=yaki q=yaki s=[ship desk] t=[ship desk]] - ^- (map path blob) - =+ r=(~(tap in (find-merge-points p q)) ~) - ?~ r - ~|(%forge-no-ancestor !!) - %- |= [r=yaki lut=(map lobe blob) hat=(map tako yaki)] - =. lat lut - =. hut hat - (meld p q r & s t) :: fake merge - %+ roll t.r :: fake ancestor - |= [par=yaki [for=_i.r lut=_lat hat=_hut]] - =. lat lut - =+ ^= far - ^- (map path lobe) - %- ~(urn by (forge par for s t)) - |= [k=path v=blob] (blob-to-lobe v) - =+ u=(make-yaki [r.par r.for ~] far `@da`0) :: fake yaki - :- u - :_ (~(put by hat) r.u u) - =< - - %- update-lat - :_ ~ - %- ~(urn by q.u) - |= [path k=lobe] - (lobe-to-blob k) - :: - :: actual merge - :: - ++ merge - |= [us=[ship desk] th=[ship desk]] - |= [p=yaki q=yaki r=@da s=$+([yaki yaki [ship desk] [ship desk]] (map path blob))] - ^- [yaki (map path blob)] - =+ u=(s p q us th) - =+ ^= t - ^- (map path lobe) - %+ roll (~(tap by u) ~) - |= [[pat=path bar=blob] yeb=(map path lobe)] - (~(put by yeb) pat (blob-to-lobe bar)) - :_ u - (make-yaki [r.p r.q ~] t r) - :: - ++ strategy :: merge strategy - |= gem=?(%meld %mate %that %this) - ?- gem - %meld (mate %.y) - %mate (mate %.n) - %this keep - %that drop - == - :: - ++ construct-merge :: construct-merge:ze - |= [gem=germ who=ship des=desk sab=saba now=@da] :: construct merge - ^- (unit (unit mizu)) :::::: - =+ for=s.sab :: foreign dome - =+ mer=(merge [who des] [p.sab q.sab]) - ?- gem - %init :: force fine - ?. =(let 0) :: hell no - !! - =+ hot=(~(put by *(map aeon tako)) 1 (~(got by hit.for) let.for)) - [~ [~ [1 hot hut lat]]] :: trivial - %fine - =+ der=(~(got by hit.for) let.for) - =+ owr=(~(got by hit) let) - ?: =(der owr) - [~ ~] - ?: (~(has in (reachable-takos owr)) der) - [~ ~] - ?. (~(has in (reachable-takos der)) owr) - ~ :: not a fast forward - ~& [%merge-fine p.sab q.sab] - [~ [~ [+(let) (~(put by hit) +(let) der) hut lat]]] - ?(%mate %that %this %meld) - =+ foreign-head=(tako-to-yaki (~(got by hit.for) let.for)) - =+ our-head=(tako-to-yaki (~(got by hit) let)) - ?: =(r.foreign-head r.our-head) - [~ ~] :: up to date - ?: (~(has in (reachable-takos r.our-head)) r.foreign-head) - [~ ~] :: up to date - ?: ?& |(=(gem %mate) =(gem %meld)) - (~(has in (reachable-takos r.foreign-head)) r.our-head) - == - $(gem %fine) :: use fast forward - =+ gar=(mer our-head foreign-head now (strategy gem)) - =+ yak=-.gar - =+ hek=+.gar - =. lat -:(update-lat hek ~) :: add new blobs - =. hut (~(put by *(map tako yaki)) r.yak yak) - =. let +(let) - =. hit (~(put by *(map aeon tako)) let r.yak) - [~ [~ [let hit hut lat]]] - == - :: - ++ read :: read:ze - |= mun=mood :: read at point - ^- (unit) - ?: ?=(%v p.mun) - [~ `dome`+<+<.read] - ?: &(?=(%w p.mun) !?=(%ud -.q.mun)) - ?^(r.mun ~ [~ let]) - ?: ?=(%w p.mun) - =+ ^= yak - %- aeon-to-yaki - let - ?^(r.mun ~ [~ [t.yak (forge-nori yak)]]) - ::?> ?=(^ hit) ?^(r.mun ~ [~ i.hit]) :: what do?? need [@da nori] - (query(ank ank:(descend-path:(zu ank) r.mun)) p.mun) - :: - ++ read-at-aeon :: read-at-aeon:ze - |= [yon=aeon mun=mood] :: seek and read - ^- (unit) - ?: &(?=(%w p.mun) !?=(%ud -.q.mun)) :: NB only for speed - ?^(r.mun ~ [~ yon]) - (read:(rewind yon) mun) - :: - ++ equiv :: test paths - |= [p=(map path lobe) q=(map path lobe)] - ^- ? - =- ?. qat %.n - %+ levy (~(tap by q) ~) - |= [pat=path lob=lobe] - (~(has by p) pat) - ^= qat - %+ levy (~(tap by p) ~) - |= [pat=path lob=lobe] - =+ zat=(~(get by q) pat) - ?~ zat %.n - =((lobe-to-noun u.zat) (lobe-to-noun lob)) - :: - ++ edit :: edit:ze - |= [wen=@da lem=nori] :: edit - ^+ +> - ?- -.lem - & =^ yak lat :: merge objects - %+ forge-yaki wen - ?: =(let 0) :: initial import - [~ q.lem] - [(some r:(aeon-to-yaki let)) q.lem] - ?. ?| =(0 let) - !=((lent p.yak) 1) - !(equiv q.yak q:(aeon-to-yaki let)) - == - +>.$ :: silently ignore - =: let +(let) - hit (~(put by hit) +(let) r.yak) - hut (~(put by hut) r.yak yak) - == - +>.$(ank (checkout-ankh q.yak)) - | +>.$(lab ?<((~(has by lab) p.lem) (~(put by lab) p.lem let))) - == - -- -:: -++ zu !: :: filesystem - |= ank=ankh :: filesystem state - =| myz=(list ,[p=path q=miso]) :: changes in reverse - =| ram=path :: reverse path into - |% - ++ rehash :: local rehash - ^- cash - %+ mix ?~(q.ank 0 p.u.q.ank) - =+ axe=1 - |- ^- cash - ?~ r.ank *@ - ;: mix - (shaf %dash (mix axe (shaf %dush (mix p.n.r.ank p.q.n.r.ank)))) - $(r.ank l.r.ank, axe (peg axe 2)) - $(r.ank r.r.ank, axe (peg axe 3)) - == - :: - ++ update-hash %_(. p.ank rehash) :: rehash and save - ++ ascend :: ascend - |= [lol=@ta kan=ankh] - ^+ +> - ?> &(?=(^ ram) =(lol i.ram)) - %= +> - ram t.ram - ank - ?: =([0 ~ ~] ank) - ?. (~(has by r.kan) lol) kan - kan(r (~(del by r.kan) lol)) - kan(r (~(put by r.kan) lol ank)) - == - :: - ++ push-change :: add change - |= mis=miso - ^+ +> - +>(myz [[(flop ram) mis] myz]) - :: - ++ descend :: descend - |= lol=@ta - ^+ +> - =+ you=(~(get by r.ank) lol) - +>.$(ram [lol ram], ank ?~(you [*cash ~ ~] u.you)) - :: - ++ descend-path :: descend recursively - |= way=path - ^+ +> - ?~(way +> $(way t.way, +> (descend i.way))) - :: - ++ overwrite :: write over - |= [pum=umph val=(unit ,[p=cash q=*])] - ^+ +> - ?~ q.ank - ?~ val +> - (push-change %ins q.u.val) - ?~ val - (push-change %del q.u.q.ank) - ?: =(q.u.val q.u.q.ank) +> - (push-change %mut ((diff pum) q.u.q.ank q.u.val)) - :: - ++ change-tree :: modify tree - |= [pum=umph bus=ankh] - ^+ +> - =. +> (overwrite pum q.bus) - =+ [yeg=(~(tap by r.ank) ~) gey=(~(tap by r.bus) ~)] - =. +>.$ - |- ^+ +>.^$ - ?~ yeg +>.^$ - ?: (~(has by r.bus) p.i.yeg) $(yeg t.yeg) - $(yeg t.yeg, myz myz:rm-r(ank q.i.yeg, ram [p.i.yeg ram])) - |- ^+ +>.^$ - ?~ gey +>.^$ - $(gey t.gey, myz myz:^$(bus q.i.gey, +> (descend p.i.gey))) - :: - ++ rm-r :: rm -r - |- ^+ + - =. + ?~(q.ank + (push-change %del q.u.q.ank)) - =+ dyr=(~(tap by r.ank) ~) - |- ^+ +.^$ - ?~ dyr +.^$ - =. +.^$ rm-r:(descend p.i.dyr) - $(dyr t.dyr) - :: - ++ drum :: apply effect - |= [pax=path mis=miso] :: XX unused (++dune) - ^+ +> - ?^ pax - update-hash:(ascend:$(pax t.pax, +> (descend i.pax)) i.pax ank) - ~| %clay-fail - ?- -.mis - %del - ?> &(?=(^ q.ank) =(q.u.q.ank p.mis)) - +>.$(p.ank (mix p.u.q.ank p.ank), q.ank ~) - :: - %ins - ?> ?=(~ q.ank) - =+ sam=(sham p.mis) - +>.$(p.ank (mix sam p.ank), q.ank [~ sam p.mis]) - :: - %mut - ?> ?=(^ q.ank) - =+ nex=(lump p.mis q.u.q.ank) - =+ sam=(sham nex) - +>.$(p.ank :(mix sam p.u.q.ank p.ank), q.ank [~ sam nex]) - == - :: - ++ dune :: apply - |- ^+ + :: XX unused (++durn) - ?~ myz + - => .(+ (drum p.i.myz q.i.myz)) - $(myz ?>(?=(^ myz) t.myz)) - :: - ++ durn :: apply forward - |= nyp=soba :: XX unused - ^+ +> - ?: =([0 0] p.nyp) - dune(myz q.nyp) - => ?: =(p.ank p.p.nyp) . - ~& [%durn-in-wrong p.ank p.p.nyp] - . - =. +> dune(myz q.nyp) - => ?: =(p.ank q.p.nyp) . - ~& [%durn-out-wrong p.ank q.p.nyp] - . - +> - -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 3bF, filesystem interface :: :: ++ feel :: simple file write - |= [pax=path val=*] + |= [pax=path val=cage] ^- miso =+ dir=((hard arch) .^(%cy pax)) ?~ q.dir [%ins val] - :- %mut - ^- udon - [%a %a .^(%cx pax) val] + =+ for=((hard mark) -:(flop pax)) + [%mut [for [%atom %$] .^(%cx pax)] val] :: ++ file :: simple file load |= pax=path @@ -2003,7 +1039,7 @@ ?~(q.dir ~ [~ .^(%cx pax)]) :: ++ foal :: high-level write - |= [pax=path val=*] + |= [pax=path val=cage] ^- toro ?> ?=([* * * *] pax) [i.t.pax [%& [*cart [[t.t.t.pax (feel pax val)] ~]]]] @@ -2012,7 +1048,7 @@ |= pax=path ^- toro ?> ?=([* * * *] pax) - [i.t.pax [%& [*cart [[t.t.t.pax [%del .^(%cx pax)]] ~]]]] + [i.t.pax [%& [*cart [[t.t.t.pax [%del %$ !>(.^(%cx pax))]] ~]]]] :: ++ furl :: unify changes |= [one=toro two=toro] @@ -2021,7 +1057,7 @@ ?> ?& =(p.one p.two) :: same path &(?=(& -.q.one) ?=(& -.q.two)) :: both deltas == - [p.one [%& [*cart (weld q.q.q.one q.q.q.two)]]] + [p.one [%& [*cart (weld q.p.q.one q.p.q.two)]]] :: ++ tame :: parse kite path |= hap=path @@ -2713,6 +1749,7 @@ ++ pick :: light path decoding =+ fel=(most cab (sear wick urt:ab)) |=(a=span `(unit ,[p=term q=path])`(rush a fel)) +:: ++ saxo :: autocanon |= who=ship ^- (list ship) @@ -2760,7 +1797,7 @@ ++ agon (map ,[p=ship q=desk] ,[p=@ud q=@ud r=waks]) :: mergepts ++ ankh :: fs node (new) $: p=cash :: recursive hash - q=(unit ,[p=cash q=*]) :: file + q=(unit ,[p=cash q=cage]) :: file r=(map ,@ta ankh) :: folders == :: ++ apex ,[p=@uvI q=(map ,@ta ,@uvI) r=(map ,@ta ,~)] :: node report (old) @@ -2781,9 +1818,10 @@ lys=@da :: last sent pac=rock :: packet data == :: -++ blob $% [%delta p=lobe q=lobe r=udon] :: delta on q - [%direct p=lobe q=* r=umph] :: - [%indirect p=lobe q=* r=udon s=lobe] :: +++ blob :: fs blob + $% [%delta p=lobe q=[p=mark q=lobe] r=page] :: delta on q + [%direct p=lobe q=page] :: immediate + [%indirect p=lobe q=page r=lobe s=page] :: both == :: ++ boat ,[(list slip) tart] :: user stage ++ boon :: fort output @@ -2862,8 +1900,7 @@ == :: ++ deed ,[p=@ q=step r=?] :: sig, stage, fake? ++ dome :: project state - $: ang=agon :: pedigree - ank=ankh :: state + $: ank=ankh :: state let=@ud :: top id hit=(map ,@ud tako) :: changes by id lab=(map ,@tas ,@ud) :: labels @@ -2921,23 +1958,11 @@ [%va p=@tas q=(unit vase)] :: set/clear variable [%xx p=curd] :: return card [%xy p=path q=curd] :: push card - [%xz p=[p=ship q=path] q=ship r=mark s=zang] [%zz p=path q=path r=curd] :: == :: -++ zang :: XX evil hack - $% [%backlog p=path q=?(%da %dr %ud) r=@] :: - [%hola p=path] :: - $: %mess p=path :: - $= q :: - $% [%do p=@t] :: act - [%exp p=@t q=tank] :: code - [%say p=@t] :: speak - == == :: - [%tint p=ship] :: - == :: ++ gilt ,[@tas *] :: presumed gift ++ gens ,[p=lang q=gcos] :: general identity -++ germ ?(%init %fine %that %this %mate %meld) :: merge style +++ germ ?(%init %fine %that %this %mate %meet %meld) :: merge style ++ gcos :: id description $% [%czar ~] :: 8-bit ship [%duke p=what] :: 32-bit ship @@ -3027,7 +2052,7 @@ ++ lice ,[p=ship q=buck] :: full license ++ life ,@ud :: regime number ++ lint (list rock) :: fragment array -++ lobe ,@ :: blob ref +++ lobe ,@uvI :: blob ref ++ love $% :: http response [%ham p=manx] :: html node [%mid p=mite q=octs] :: mime-typed data @@ -3061,11 +2086,18 @@ %put :: PUT %trac :: TRACE == :: +++ mime ,[p=mite q=octs] :: mimetyped data ++ mite (list ,@ta) :: mime type ++ miso :: ankh delta - $% [%del p=*] :: delete - [%ins p=*] :: insert - [%mut p=udon] :: mutate + $% [%del p=cage] :: delete + [%ins p=cage] :: insert + [%dif p=cage] :: mutate from diff + [%mut p=cage q=cage] :: mutate from raw + == :: +++ misu :: computed delta + $% [%del p=cage] :: delete + [%ins p=cage] :: insert + [%dif p=lobe q=cage] :: mutate from diff == :: ++ mizu ,[p=@u q=(map ,@ud tako) r=rang] :: new state ++ moar ,[p=@ud q=@ud] :: normal change range @@ -3084,15 +2116,20 @@ goad :: == :: ++ nori :: repository action - $% [& q=soba] :: delta + $% [& p=soba] :: delta + [| p=@tas] :: label + == :: +++ nuri :: repository action + $% [& p=suba] :: delta [| p=@tas] :: label == :: ++ octs ,[p=@ud q=@t] :: octet-stream ++ oryx ,@t :: CSRF secret -++ pact path :: routed path +++ page (cask) :: untyped cage ++ pail ?(%none %warm %cold) :: connection status ++ plan (trel view (pair ,@da (unit ,@dr)) path) :: subscription ++ plea ,[p=@ud q=[p=? q=@t]] :: live prompt +++ plop blob :: unvalidated blob ++ pork ,[p=(unit ,@ta) q=(list ,@t)] :: fully parsed url ++ pred ,[p=@ta q=@tas r=@ta ~] :: proto-path ++ prod ,[p=prom q=tape r=tape] :: prompt @@ -3122,14 +2159,20 @@ ++ rang $: hut=(map tako yaki) :: lat=(map lobe blob) :: == :: +++ rand :: unvalidated rant + $: p=[p=care q=case r=@tas] :: clade release book + q=path :: spur + r=page :: data + == :: ++ rant :: namespace binding $: p=[p=care q=case r=@tas] :: clade release book q=path :: spur - r=* :: data + r=cage :: data == :: ++ rave :: general request - $% [& p=mood] :: single request - [| p=moat] :: change range + $% [%sing p=mood] :: single request + [%next p=mood] :: next version + [%many p=? q=moat] :: change range == :: ++ rill :: outbound stream $: sed=@ud :: sent @@ -3196,6 +2239,7 @@ ++ sock ,[p=ship q=ship] :: outgoing [from to] ++ spur path :: ship desk case spur ++ step ,[p=bray q=gens r=pass] :: identity stage +++ suba ,[p=cart q=(list ,[p=path q=misu])] :: delta ++ tako ,@ :: yaki ref ++ tart $+([@da path note] bowl) :: process core ++ tick ,@ud :: process id diff --git a/main/cat/hello/gate.hook b/base/cat/hello/gate.hook similarity index 100% rename from main/cat/hello/gate.hook rename to base/cat/hello/gate.hook diff --git a/main/cat/helm/init/gate.hook b/base/cat/helm/init/gate.hook similarity index 100% rename from main/cat/helm/init/gate.hook rename to base/cat/helm/init/gate.hook diff --git a/base/cat/helm/merge/gate.hook b/base/cat/helm/merge/gate.hook new file mode 100644 index 000000000..0049f2e80 --- /dev/null +++ b/base/cat/helm/merge/gate.hook @@ -0,0 +1,12 @@ +:: +:::: /hook/gate/merge/helm/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [[syd=@tas her=@p sud=@tas gem=?([?(%auto germ) ~] ~)] ~] + == +:- %helm-merge +[syd her sud ?~(gem %auto -.gem)] diff --git a/main/cat/helm/reload/gate.hook b/base/cat/helm/reload/gate.hook similarity index 100% rename from main/cat/helm/reload/gate.hook rename to base/cat/helm/reload/gate.hook diff --git a/main/cat/helm/sync/gate.hook b/base/cat/helm/sync/gate.hook similarity index 100% rename from main/cat/helm/sync/gate.hook rename to base/cat/helm/sync/gate.hook diff --git a/base/cat/helm/unix/gate.hook b/base/cat/helm/unix/gate.hook new file mode 100644 index 000000000..6bca0773a --- /dev/null +++ b/base/cat/helm/unix/gate.hook @@ -0,0 +1,15 @@ +:: +:::: /hook/gate/unix/helm/cat + :: +/? 314 +:: +:::: + !: +|= $: [now=@da eny=@uvI bec=beak] + [[syd=@tas syn=?(~ [? ~])] ~] + == +:+ %helm-unix + syd +?~ syn + ~ +`-.syn diff --git a/main/cat/ticket/gate.hook b/base/cat/ticket/gate.hook similarity index 100% rename from main/cat/ticket/gate.hook rename to base/cat/ticket/gate.hook diff --git a/main/dog/helm/begin/gate.hook b/base/dog/helm/begin/gate.hook similarity index 100% rename from main/dog/helm/begin/gate.hook rename to base/dog/helm/begin/gate.hook diff --git a/main/dog/helm/reload/gate.hook b/base/dog/helm/reload/gate.hook similarity index 100% rename from main/dog/helm/reload/gate.hook rename to base/dog/helm/reload/gate.hook diff --git a/main/dog/helm/reset/gate.hook b/base/dog/helm/reset/gate.hook similarity index 74% rename from main/dog/helm/reset/gate.hook rename to base/dog/helm/reset/gate.hook index cbf0c61c0..3f0806495 100644 --- a/main/dog/helm/reset/gate.hook +++ b/base/dog/helm/reset/gate.hook @@ -2,11 +2,11 @@ :::: /hook/gate/reset/helm/gun :: /? 314 -/- *console +/- *sole :: :::: !: |= $: [now=@da eny=@uvI bec=beak] [~ ~] == -(console-so %helm-reset ~) +(sole-so %helm-reset ~) diff --git a/main/dog/helm/verb/gate.hook b/base/dog/helm/verb/gate.hook similarity index 100% rename from main/dog/helm/verb/gate.hook rename to base/dog/helm/verb/gate.hook diff --git a/main/dog/solid/gate.hook b/base/dog/solid/gate.hook similarity index 93% rename from main/dog/solid/gate.hook rename to base/dog/solid/gate.hook index f28fce82f..37f65e490 100644 --- a/main/dog/solid/gate.hook +++ b/base/dog/solid/gate.hook @@ -10,7 +10,7 @@ [~ ~] == %+ sole-so %noun -=+ top=`path`/(scot %p p.bec)/arvo/(scot %da now) +=+ top=`path`/(scot %p p.bec)/home/(scot %da now)/arvo =+ pax=`path`(weld top `path`[%hoon ~]) ~& %solid-start =+ gen=(reck pax) diff --git a/main/lib/base.css b/base/lib/base.css similarity index 99% rename from main/lib/base.css rename to base/lib/base.css index a22b9065b..69c5bb780 100644 --- a/main/lib/base.css +++ b/base/lib/base.css @@ -144,4 +144,4 @@ input { #ship:focus, input:focus { background-color: #eee; -} \ No newline at end of file +} diff --git a/main/lib/sh-utils/core.hook b/base/lib/sh-utils/core.hook similarity index 100% rename from main/lib/sh-utils/core.hook rename to base/lib/sh-utils/core.hook diff --git a/main/lib/shu/core.hook b/base/lib/shu/core.hook similarity index 100% rename from main/lib/shu/core.hook rename to base/lib/shu/core.hook diff --git a/main/lib/sole/core.hook b/base/lib/sole/core.hook similarity index 92% rename from main/lib/sole/core.hook rename to base/lib/sole/core.hook index f7a54b233..dcbc30bfd 100644 --- a/main/lib/sole/core.hook +++ b/base/lib/sole/core.hook @@ -32,8 +32,8 @@ :: for any sole state +>, obeys :: :: =+ [x=(transmute a b) y=(transmute b a)] - :: .= (apply:(apply b) x) - :: (apply:(apply a) y) + :: .= (apply:(apply a) x) + :: (apply:(apply b) y) :: ++ transmute :: dex as after sin |= [sin=sole-edit dex=sole-edit] @@ -65,7 +65,7 @@ ?- -.dex %del ?:((lte p.sin p.dex) dex(p +(p.dex)) dex) %ins ?: =(p.sin p.dex) - ?:((gth q.sin q.dex) dex dex(p +(p.dex))) + ?:((lth q.sin q.dex) dex dex(p +(p.dex))) ?:((lte p.sin p.dex) dex(p +(p.dex)) dex) == == @@ -85,7 +85,8 @@ ++ inverse :: relative inverse |= ted=sole-edit ^- sole-edit - =. ted ?.(?=([%mor * ~] ted) ted i.p.ted) + :: =. ted ?.(?=([%mor * ~] ted) ted i.p.ted) :: XX why? + ~| [ted abet] ?- -.ted %del [%ins p.ted (snag p.ted buf)] %ins [%del p.ted] @@ -102,13 +103,14 @@ ++ receive :: naturalize event |= sole-change ^- [sole-edit sole-share] - ?> &(=(his.ler his.ven) (lte own.ler own.ven)) + ~| [ler ven] ?> &(=(his.ler his.ven) (lte own.ler own.ven)) ?> |(!=(own.ler own.ven) =(haw (sham buf)) =(haw 0)) :: trust the clock =. leg (scag (sub own.ven own.ler) leg) :: ~? !=(own.ler own.ven) [%miss-leg leg] - =+ dat=(transmute [%mor leg] ted) + =+ dat=(transmute [%mor (flop leg)] ted) :: ~? !=(~ leg) [%transmute from/ted to/dat ~] + :: =- ~& (tufa buf) - [dat abet:(apply(his.ven +(his.ven)) dat)] :: ++ remit :: conditional accept @@ -124,6 +126,7 @@ ++ transmit :: outgoing change |= ted=sole-edit ^- [sole-change sole-share] + :: =- ~& (tufa buf) - [[[his.ven own.ven] (sham buf) ted] (commit ted)] :: ++ transceive :: receive and invert diff --git a/main/lib/sqar/core.hook b/base/lib/sqar/core.hook similarity index 100% rename from main/lib/sqar/core.hook rename to base/lib/sqar/core.hook diff --git a/main/lib/talk/core.hook b/base/lib/talk/core.hook similarity index 100% rename from main/lib/talk/core.hook rename to base/lib/talk/core.hook diff --git a/main/lib/twitter/core.hook b/base/lib/twitter/core.hook similarity index 100% rename from main/lib/twitter/core.hook rename to base/lib/twitter/core.hook diff --git a/main/lib/urb.js b/base/lib/urb.js similarity index 99% rename from main/lib/urb.js rename to base/lib/urb.js index 6561707d4..bd528dc6f 100644 --- a/main/lib/urb.js +++ b/base/lib/urb.js @@ -33,7 +33,7 @@ window.urb.req = function(method,url,params,json,cb) { if(res.data.reload) res.reload = res.data.reload } catch(e) { - if(urb.wall || true) document.write(this.responseText) // XX + if(urb.wall !== false) document.write(this.responseText) // XX err = { message:"Failed to parse JSON", raw:this.responseText diff --git a/main/mar/cat-args/door.hook b/base/mar/cat-args/door.hook similarity index 100% rename from main/mar/cat-args/door.hook rename to base/mar/cat-args/door.hook diff --git a/base/mar/coffee/door.hook b/base/mar/coffee/door.hook new file mode 100644 index 000000000..967912c78 --- /dev/null +++ b/base/mar/coffee/door.hook @@ -0,0 +1,20 @@ +:: +:::: /hoon/core/md/pro + :: +/? 314 +|_ mud=@t +++ garb [%down ~] +++ grow + |% + ++ mime [/text/coffeescript (taco mud)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] (,@t q.q)) + ++ noun ,@t + -- +++ grad + |% + ++ sted %mime + -- +-- diff --git a/main/mar/console-action/door.hook b/base/mar/console-action/door.hook similarity index 100% rename from main/mar/console-action/door.hook rename to base/mar/console-action/door.hook diff --git a/main/mar/console-effect/door.hook b/base/mar/console-effect/door.hook similarity index 100% rename from main/mar/console-effect/door.hook rename to base/mar/console-effect/door.hook diff --git a/main/mar/cp-args/door.hook b/base/mar/cp-args/door.hook similarity index 100% rename from main/mar/cp-args/door.hook rename to base/mar/cp-args/door.hook diff --git a/main/mar/css/door.hook b/base/mar/css/door.hook similarity index 63% rename from main/mar/css/door.hook rename to base/mar/css/door.hook index 149e621ba..ecf3f0fb0 100644 --- a/main/mar/css/door.hook +++ b/base/mar/css/door.hook @@ -9,6 +9,13 @@ == ++ hymn ;html:(head:"{psal}" body) -- -++ grab |% :: convert from - ++ noun ,@t :: clam from %noun --- -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (,@t q.q)) + ++ noun ,@t :: clam from %noun + -- +++ grad + |% + ++ sted %mime + -- +-- diff --git a/main/mar/demo-args/door.hook b/base/mar/demo-args/door.hook similarity index 100% rename from main/mar/demo-args/door.hook rename to base/mar/demo-args/door.hook diff --git a/main/mar/dill-belt/door.hook b/base/mar/dill-belt/door.hook similarity index 100% rename from main/mar/dill-belt/door.hook rename to base/mar/dill-belt/door.hook diff --git a/main/mar/dill-blit/door.hook b/base/mar/dill-blit/door.hook similarity index 100% rename from main/mar/dill-blit/door.hook rename to base/mar/dill-blit/door.hook diff --git a/main/mar/down/door.hook b/base/mar/down/door.hook similarity index 100% rename from main/mar/down/door.hook rename to base/mar/down/door.hook diff --git a/main/mar/down/html5-entities.json b/base/mar/down/html5-entities.json similarity index 100% rename from main/mar/down/html5-entities.json rename to base/mar/down/html5-entities.json diff --git a/main/mar/down/parse.hoon b/base/mar/down/parse.hoon similarity index 100% rename from main/mar/down/parse.hoon rename to base/mar/down/parse.hoon diff --git a/main/mar/down/rend.hoon b/base/mar/down/rend.hoon similarity index 100% rename from main/mar/down/rend.hoon rename to base/mar/down/rend.hoon diff --git a/base/mar/eot/door.hook b/base/mar/eot/door.hook new file mode 100644 index 000000000..dac090e86 --- /dev/null +++ b/base/mar/eot/door.hook @@ -0,0 +1,24 @@ +:: probly +:::: /hoon/core/eot/pro + :: +/? 314 + :: +:::: compute + :: +|_ otf=@ +:: +++ grow :: convert to + |% + ++ mime :: convert to %mime + [/font/eot (taco otf)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun ,@ + -- +++ grad + |% + ++ sted %mime + -- +-- diff --git a/main/mar/grep-args/door.hook b/base/mar/grep-args/door.hook similarity index 100% rename from main/mar/grep-args/door.hook rename to base/mar/grep-args/door.hook diff --git a/main/mar/hi-args/door.hook b/base/mar/hi-args/door.hook similarity index 100% rename from main/mar/hi-args/door.hook rename to base/mar/hi-args/door.hook diff --git a/main/mar/hook/door.hook b/base/mar/hook/door.hook similarity index 50% rename from main/mar/hook/door.hook rename to base/mar/hook/door.hook index af29a81de..7e2659b08 100644 --- a/main/mar/hook/door.hook +++ b/base/mar/hook/door.hook @@ -2,6 +2,7 @@ :::: /hook/door/hook/mar :: /? 314 +!: |_ own=@t :: ++ grow :: convert to @@ -9,7 +10,19 @@ ++ mime [/text/hoon (taco own)] :: convert to %mime ++ psal ;div:(pre:"{(trip own)}") :: convert to %html ++ hymn ;html:(head:title:"Source" "+{psal}") + ++ txt (lore (cat 3 own '\0a')) -- -++ grab |% :: convert from - ++ noun ,@t :: clam from %noun --- -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] q.q) + ++ noun ,@t :: clam from %noun + ++ txt + |= wan=wain + =+ (role wan) + (end 3 (dec (met 3 -)) -) + -- +++ grad + |% + ++ sted %txt + -- +-- diff --git a/base/mar/hoon/door.hook b/base/mar/hoon/door.hook new file mode 100644 index 000000000..da512bffe --- /dev/null +++ b/base/mar/hoon/door.hook @@ -0,0 +1,30 @@ +:: +:::: /hook/door/hook/mar + :: +/? 314 +!: +|_ own=@t +:: +++ grow :: convert to + |% + ++ mime `^mime`[/text/hoon (taco own)] :: convert to %mime + ++ psal ;div:(pre:"{(trip own)}") :: convert to %html + ++ hymn ;html:(head:title:"Source" "+{psal}") + ++ txt + (lore (cat 3 own '\0a')) + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] q.q) + ++ noun ,@t :: clam from %noun + ++ txt + |= wan=wain + ^- @t + =+ (role wan) + (end 3 (dec (met 3 -)) -) + -- +++ grad + |% + ++ sted %txt + -- +-- diff --git a/main/mar/html/door.hook b/base/mar/html/door.hook similarity index 100% rename from main/mar/html/door.hook rename to base/mar/html/door.hook diff --git a/main/mar/hymn/door.hook b/base/mar/hymn/door.hook similarity index 100% rename from main/mar/hymn/door.hook rename to base/mar/hymn/door.hook diff --git a/main/mar/into-args/door.hook b/base/mar/into-args/door.hook similarity index 100% rename from main/mar/into-args/door.hook rename to base/mar/into-args/door.hook diff --git a/base/mar/js/door.hook b/base/mar/js/door.hook new file mode 100644 index 000000000..9a49f2dcb --- /dev/null +++ b/base/mar/js/door.hook @@ -0,0 +1,23 @@ +:: +:::: /hoon/core/js/mar + :: +!: +|_ mud=@ +++ grow + |% + ++ mime [/application/javascript (taco (,@t mud))] + ++ psal ;script + ;- (trip (,@t mud)) + == + ++ hymn ;html:(head:"+{psal}" body) + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (,@t q.q)) + ++ noun cord :: clam from %noun + -- +++ grad + |% + ++ sted %mime + -- +-- diff --git a/base/mar/json/door.hook b/base/mar/json/door.hook new file mode 100644 index 000000000..6e05be4c6 --- /dev/null +++ b/base/mar/json/door.hook @@ -0,0 +1,26 @@ +:: +:::: /hoon/core/json/mar + :: +/? 314 + :: +:::: compute + :: +|_ jon=json +:: +++ grow :: convert to + |% + ++ mime [/text/json (taco txt)] :: convert to %mime + ++ txt (crip (pojo jon)) + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] *json) ::(fall (rush (,@t q.q) apex:poja) *json)) + ++ noun json :: clam from %noun + ++ numb jone + ++ time jode + -- +++ grad + |% + ++ sted %mime + -- +-- diff --git a/main/mar/ls-args/door.hook b/base/mar/ls-args/door.hook similarity index 100% rename from main/mar/ls-args/door.hook rename to base/mar/ls-args/door.hook diff --git a/base/mar/md/door.hook b/base/mar/md/door.hook new file mode 100644 index 000000000..27b89f898 --- /dev/null +++ b/base/mar/md/door.hook @@ -0,0 +1,27 @@ +:: +:::: /hoon/core/md/pro + :: +/? 314 +!: +|_ mud=@t +++ garb [%down ~] +++ grow + |% + ++ mime [/text/x-markdown (taco mud)] + ++ txt + (lore (cat 3 mud '\0a')) + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun ,@t + ++ txt + |= wan=wain + =+ (role wan) + (end 3 (dec (met 3 -)) -) + -- +++ grad + |% + ++ sted %txt + -- +-- diff --git a/main/mar/mess/door.hook b/base/mar/mess/door.hook similarity index 100% rename from main/mar/mess/door.hook rename to base/mar/mess/door.hook diff --git a/base/mar/mime/door.hook b/base/mar/mime/door.hook new file mode 100644 index 000000000..7c699f828 --- /dev/null +++ b/base/mar/mime/door.hook @@ -0,0 +1,18 @@ +:: +:::: /hoon/core/mime/mar + :: +/? 314 +!: +|_ own=mime +++ grab :: convert from + |% + ++ noun mime :: clam from %noun + -- +++ grad + |% + ++ form %mime + ++ diff |=(mime +<) + ++ pact |=(mime +<) + ++ join |=([mime mime] `(unit mime)`~) + -- +-- diff --git a/main/mar/mv-args/door.hook b/base/mar/mv-args/door.hook similarity index 100% rename from main/mar/mv-args/door.hook rename to base/mar/mv-args/door.hook diff --git a/base/mar/otf/door.hook b/base/mar/otf/door.hook new file mode 100644 index 000000000..202f49b67 --- /dev/null +++ b/base/mar/otf/door.hook @@ -0,0 +1,24 @@ +:: +:::: /hoon/core/otf/pro + :: +/? 314 + :: +:::: compute + :: +|_ otf=@ +:: +++ grow :: convert to + |% + ++ mime :: convert to %mime + [/font/otf (taco otf)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun ,@ + -- +++ grad + |% + ++ sted %mime + -- +-- diff --git a/main/mar/psal/door.hook b/base/mar/psal/door.hook similarity index 100% rename from main/mar/psal/door.hook rename to base/mar/psal/door.hook diff --git a/main/mar/react-snip/door.hook b/base/mar/react-snip/door.hook similarity index 92% rename from main/mar/react-snip/door.hook rename to base/mar/react-snip/door.hook index 360368cba..561e3c881 100644 --- a/main/mar/react-snip/door.hook +++ b/base/mar/react-snip/door.hook @@ -53,6 +53,12 @@ ")" == ++ react-snip-js (crip tape) + ++ react-snip-json + ::?> ?=([[%div ~] [[%h1 ~] *] [[%div ~] *] ~]] own) :: xx mystery fish-loop + %^ jobe + head/(jape tape(own &2.own)) + body/(jape tape(own &3.own)) + ~ :: ++ js react-snip-js :: convert to %js ++ mime [/text/javascript (taco react-snip-js)] :: convert to %mime -- diff --git a/main/mar/react/door.hook b/base/mar/react/door.hook similarity index 100% rename from main/mar/react/door.hook rename to base/mar/react/door.hook diff --git a/main/mar/reload-args/door.hook b/base/mar/reload-args/door.hook similarity index 100% rename from main/mar/reload-args/door.hook rename to base/mar/reload-args/door.hook diff --git a/main/mar/rm-args/door.hook b/base/mar/rm-args/door.hook similarity index 100% rename from main/mar/rm-args/door.hook rename to base/mar/rm-args/door.hook diff --git a/main/mar/snip/door.hook b/base/mar/snip/door.hook similarity index 100% rename from main/mar/snip/door.hook rename to base/mar/snip/door.hook diff --git a/main/mar/sole-action/door.hook b/base/mar/sole-action/door.hook similarity index 85% rename from main/mar/sole-action/door.hook rename to base/mar/sole-action/door.hook index 286d33ffb..4325e2a04 100644 --- a/main/mar/sole-action/door.hook +++ b/base/mar/sole-action/door.hook @@ -14,8 +14,7 @@ |= jon=^json ^- sole-action %- need %. jon => [jo ..sole-action] - |^ =- ~! (-) - - (fo %ret (of det/change ~)) + |^ (fo %ret (of det/change ~)) ++ fo |* [a=term b=fist] |=(c=json ?.(=([%s a] c) (b c) (some [a ~]))) @@ -30,7 +29,7 @@ ++ edit %+ fo %nop %+ ra mor/|=(json (edit +<)) - (of del/ni set/(cu tuba sa) ins/(ot at/ni new/char ~) ~) + (of del/ni set/(cu tuba sa) ins/(ot at/ni cha/char ~) ~) -- :: ++ noun sole-action :: clam from %noun diff --git a/main/mar/sole-effect/door.hook b/base/mar/sole-effect/door.hook similarity index 68% rename from main/mar/sole-effect/door.hook rename to base/mar/sole-effect/door.hook index 36c706836..dab460159 100644 --- a/main/mar/sole-effect/door.hook +++ b/base/mar/sole-effect/door.hook @@ -14,20 +14,20 @@ ^- ^json =+ cha =< (jobe ted/(. ted) ler/a/~[(jone own.ler) (jone his.ler)] ~) - |= ted=sole-edit - ?- -.ted + |= det=sole-edit + ?- -.det %nop [%s 'nop'] - %mor [%a (turn p.ted ..$)] - %del (joba %del (jone p.ted)) - %set (joba %set (jape (tufa p.ted))) - %ins (joba %ins (jobe at/(jone p.ted) new/s/(tuft q.ted) ~)) + %mor [%a (turn p.det ..$)] + %del (joba %del (jone p.det)) + %set (joba %set (jape (tufa p.det))) + %ins (joba %ins (jobe at/(jone p.det) cha/s/(tuft q.det) ~)) == -- -- ++ wush |= [wid=@u tan=tang] ^- tape - =+ rolt=|=(a=wall `tape`?~(a ~ :(weld i.a "\0a" $(a t.a)))) + =+ rolt=|=(a=wall `tape`?~(a ~ ?~(t.a i.a :(weld i.a "\0a" $(a t.a))))) (rolt (turn tan |=(a=tank (rolt (wash 0^wid a))))) :: -- @@ -47,8 +47,8 @@ %err (joba %hop (jone p.sef)) %txt (joba %txt (jape p.sef)) %tan (joba %tan (jape (wush 160 p.sef))) - %det json:~(grow mar-sole-change +.sef) - %pro (jobe vis/b/vis.sef tag/s/tag.sef cad/(jape cad.sef) ~) + %det (joba %det json:~(grow mar-sole-change +.sef)) + %pro (joba %pro (jobe vis/b/vis.sef tag/s/tag.sef cad/(jape cad.sef) ~)) ?(%bel %clr %nex) (joba %act %s -.sef) == -- diff --git a/main/mar/solid-args/door.hook b/base/mar/solid-args/door.hook similarity index 100% rename from main/mar/solid-args/door.hook rename to base/mar/solid-args/door.hook diff --git a/base/mar/styl/door.hook b/base/mar/styl/door.hook new file mode 100644 index 000000000..34d7ac51d --- /dev/null +++ b/base/mar/styl/door.hook @@ -0,0 +1,20 @@ +:: +:::: /hoon/core/md/pro + :: +/? 314 +|_ mud=@t +++ garb [%down ~] +++ grow + |% + ++ mime [/text/styl (taco mud)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun ,@t + -- +++ grad + |% + ++ sted %mime + -- +-- diff --git a/main/mar/sync-args/door.hook b/base/mar/sync-args/door.hook similarity index 100% rename from main/mar/sync-args/door.hook rename to base/mar/sync-args/door.hook diff --git a/main/mar/talk-command/door.hook b/base/mar/talk-command/door.hook similarity index 100% rename from main/mar/talk-command/door.hook rename to base/mar/talk-command/door.hook diff --git a/main/mar/talk-report/door.hook b/base/mar/talk-report/door.hook similarity index 100% rename from main/mar/talk-report/door.hook rename to base/mar/talk-report/door.hook diff --git a/main/mar/tang/door.hook b/base/mar/tang/door.hook similarity index 100% rename from main/mar/tang/door.hook rename to base/mar/tang/door.hook diff --git a/main/mar/term-in/door.hook b/base/mar/term-in/door.hook similarity index 100% rename from main/mar/term-in/door.hook rename to base/mar/term-in/door.hook diff --git a/main/mar/term-line/door.hook b/base/mar/term-line/door.hook similarity index 100% rename from main/mar/term-line/door.hook rename to base/mar/term-line/door.hook diff --git a/main/mar/ticket-args/door.hook b/base/mar/ticket-args/door.hook similarity index 100% rename from main/mar/ticket-args/door.hook rename to base/mar/ticket-args/door.hook diff --git a/base/mar/txt-diff/door.hook b/base/mar/txt-diff/door.hook new file mode 100644 index 000000000..b9172e2d6 --- /dev/null +++ b/base/mar/txt-diff/door.hook @@ -0,0 +1,11 @@ +:: +:::: /hook/door/term-line/mar + :: +/? 314 +|_ txt-diff=(urge cord) +:: +++ grab :: convert from + |% + ++ noun (urge cord) :: clam from %noun + -- +-- diff --git a/base/mar/txt/door.hook b/base/mar/txt/door.hook new file mode 100644 index 000000000..2cf7285eb --- /dev/null +++ b/base/mar/txt/door.hook @@ -0,0 +1,255 @@ +:: +:::: /hook/door/term-line/mar + :: +/? 314 +!: +|_ txt=wain +:: +++ grab :: convert from + |% + ++ mime |=([p=mite q=octs] (lore q.q)) + ++ noun wain :: clam from %noun + ++ json :(corl lore need so:jo) + -- +++ grow + => v=. + |% + ++ mime => v [/text/plain (taco (role txt))] + ++ psal => v ;div: {(trip (role txt))} + -- +++ grad + |% + ++ form %txt-diff + ++ diff + |= tyt=wain + ^- (urge cord) + (lusk txt tyt (loss txt tyt)) + :: + ++ pact + |= dif=(urge cord) + ~| [%pacting dif] + ^- wain + (lurk txt dif) + :: + ++ join + |= [ali=(urge cord) bob=(urge cord)] + ^- (unit (urge cord)) + |^ + =. ali (clean ali) + =. bob (clean bob) + |- ^- (unit (urge cord)) + ?~ ali `bob + ?~ bob `ali + ?- -.i.ali + %& + ?- -.i.bob + %& + ?: =(p.i.ali p.i.bob) + %+ bind $(ali t.ali, bob t.bob) + |=(cud=(urge cord) [i.ali cud]) + ?: (gth p.i.ali p.i.bob) + %+ bind $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob) + |=(cud=(urge cord) [i.bob cud]) + %+ bind $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali)) + |=(cud=(urge cord) [i.ali cud]) + %| + ?: =(p.i.ali (lent p.i.bob)) + %+ bind $(ali t.ali, bob t.bob) + |=(cud=(urge cord) [i.bob cud]) + ?: (gth p.i.ali (lent p.i.bob)) + %+ bind $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob) + |=(cud=(urge cord) [i.bob cud]) + ~ + == + :: + %| + ?- -.i.bob + %| ~ + %& + ?: =(p.i.bob (lent p.i.ali)) + %+ bind $(ali t.ali, bob t.bob) + |=(cud=(urge cord) [i.ali cud]) + ?: (gth p.i.bob (lent p.i.ali)) + %+ bind $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali))) + |=(cud=(urge cord) [i.ali cud]) + ~ + == + == + ++ clean :: clean + |= wig=(urge cord) + ^- (urge cord) + ?~ wig ~ + ?~ t.wig wig + ?: ?=(%& -.i.wig) + ?: ?=(%& -.i.t.wig) + $(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig]) + [i.wig $(wig t.wig)] + ?: ?=(%| -.i.t.wig) + $(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig]) + [i.wig $(wig t.wig)] + -- + :: + ++ mash + |= [als=[ship desk] bos=[ship desk] ali=(urge cord) bob=(urge cord)] + ^- (urge cord) + |^ + =. ali (clean ali) + =. bob (clean bob) + |- ^- (urge cord) + ?~ ali bob + ?~ bob ali + ?- -.i.ali + %& + ?- -.i.bob + %& + ?: =(p.i.ali p.i.bob) + [i.ali $(ali t.ali, bob t.bob)] + ?: (gth p.i.ali p.i.bob) + [i.bob $(p.i.ali (sub p.i.ali p.i.bob), bob t.bob)] + [i.ali $(ali t.ali, p.i.bob (sub p.i.bob p.i.ali))] + :: + %| + ?: =(p.i.ali (lent p.i.bob)) + [i.bob $(ali t.ali, bob t.bob)] + ?: (gth p.i.ali (lent p.i.bob)) + [i.bob $(p.i.ali (sub p.i.ali (lent p.i.bob)), bob t.bob)] + =+ ^- [fic=(unce cord) ali=(urge cord) bob=(urge cord)] + (resolve ali bob) + [fic $(ali ali, bob bob)] + :: ~ :: here, alice is good for a while, but not for the whole + == :: length of bob's changes + :: + %| + ?- -.i.bob + %| + =+ ^- [fic=(unce cord) ali=(urge cord) bob=(urge cord)] + (resolve ali bob) + [fic $(ali ali, bob bob)] + :: + %& + ?: =(p.i.bob (lent p.i.ali)) + [i.ali $(ali t.ali, bob t.bob)] + ?: (gth p.i.bob (lent p.i.ali)) + [i.ali $(ali t.ali, p.i.bob (sub p.i.bob (lent p.i.ali)))] + =+ ^- [fic=(unce cord) ali=(urge cord) bob=(urge cord)] + (resolve ali bob) + [fic $(ali ali, bob bob)] + == + == + :: + ++ annotate :: annotate conflict + |= $: ali=(list ,@t) + bob=(list ,@t) + bas=(list ,@t) + == + ^- (list ,@t) + %- zing + ^- (list (list ,@t)) + %- flop + ^- (list (list ,@t)) + :- :_ ~ + %^ cat 3 '<<<<<<<<<<<<' + %^ cat 3 ' ' + %^ cat 3 `@t`(scot %p -.bos) + %^ cat 3 '/' + +.bos + :- bob + :- ~['------------'] + :- bas + :- ~['++++++++++++'] + :- ali + :- :_ ~ + %^ cat 3 '>>>>>>>>>>>>' + %^ cat 3 ' ' + %^ cat 3 `@t`(scot %p -.als) + %^ cat 3 '/' + +.als + ~ + :: + ++ clean :: clean + |= wig=(urge cord) + ^- (urge cord) + ?~ wig ~ + ?~ t.wig wig + ?: ?=(%& -.i.wig) + ?: ?=(%& -.i.t.wig) + $(wig [[%& (add p.i.wig p.i.t.wig)] t.t.wig]) + [i.wig $(wig t.wig)] + ?: ?=(%| -.i.t.wig) + $(wig [[%| (welp p.i.wig p.i.t.wig) (welp q.i.wig q.i.t.wig)] t.t.wig]) + [i.wig $(wig t.wig)] + :: + ++ resolve + |= [ali=(urge cord) bob=(urge cord)] + ^- [fic=[%| p=(list cord) q=(list cord)] ali=(urge cord) bob=(urge cord)] + =- [[%| bac (annotate alc boc bac)] ali bob] + |- ^- $: $: bac=(list cord) + alc=(list cord) + boc=(list cord) + == + ali=(urge cord) + bob=(urge cord) + == + ?~ ali [[~ ~ ~] ali bob] + ?~ bob [[~ ~ ~] ali bob] + ?- -.i.ali + %& + ?- -.i.bob + %& [[~ ~ ~] ali bob] :: no conflict + %| + =+ lob=(lent p.i.bob) + ?: =(lob p.i.ali) + [[p.i.bob p.i.bob q.i.bob] t.ali t.bob] + ?: (lth lob p.i.ali) + [[p.i.bob p.i.bob q.i.bob] [[%& (sub p.i.ali lob)] t.ali] t.bob] + =+ wat=(scag (sub lob p.i.ali) p.i.bob) + =+ res=$(ali t.ali, bob [[%| (scag (sub lob p.i.ali) p.i.bob) ~] t.bob]) + :* :* (welp bac.res wat) + (welp alc.res wat) + (welp boc.res q.i.bob) + == + ali.res + bob.res + == + == + :: + %| + ?- -.i.bob + %& + =+ loa=(lent p.i.ali) + ?: =(loa p.i.bob) + [[p.i.ali q.i.ali p.i.ali] t.ali t.bob] + ?: (lth loa p.i.bob) + [[p.i.ali q.i.ali p.i.ali] t.ali [[%& (sub p.i.bob loa)] t.bob]] + =+ wat=(slag (sub loa p.i.bob) p.i.ali) + =+ res=$(ali [[%| (scag (sub loa p.i.bob) p.i.ali) ~] t.ali], bob t.bob) + :* :* (welp bac.res wat) + (welp alc.res q.i.ali) + (welp boc.res wat) + == + ali.res + bob.res + == + :: + %| + =+ loa=(lent p.i.ali) + =+ lob=(lent p.i.bob) + ?: =(loa lob) + [[p.i.ali q.i.ali q.i.bob] t.ali t.bob] + =+ ^= res + ?: (gth loa lob) + $(ali [[%| (scag (sub loa lob) p.i.ali) ~] t.ali], bob t.bob) + ~& [%scagging loa=loa pibob=p.i.bob slag=(scag loa p.i.bob)] + $(ali t.ali, bob [[%| (scag (sub lob loa) p.i.bob) ~] t.bob]) + :* :* (welp bac.res ?:((gth loa lob) p.i.bob p.i.ali)) + (welp alc.res q.i.ali) + (welp boc.res q.i.bob) + == + ali.res + bob.res + == + == + == + -- + -- +-- diff --git a/main/mar/unsync-args/door.hook b/base/mar/unsync-args/door.hook similarity index 100% rename from main/mar/unsync-args/door.hook rename to base/mar/unsync-args/door.hook diff --git a/main/mar/urb/door.hook b/base/mar/urb/door.hook similarity index 100% rename from main/mar/urb/door.hook rename to base/mar/urb/door.hook diff --git a/main/mar/user/door.hook b/base/mar/user/door.hook similarity index 100% rename from main/mar/user/door.hook rename to base/mar/user/door.hook diff --git a/main/mar/users/door.hook b/base/mar/users/door.hook similarity index 100% rename from main/mar/users/door.hook rename to base/mar/users/door.hook diff --git a/main/mar/verb-args/door.hook b/base/mar/verb-args/door.hook similarity index 100% rename from main/mar/verb-args/door.hook rename to base/mar/verb-args/door.hook diff --git a/main/mar/will/door.hook b/base/mar/will/door.hook similarity index 100% rename from main/mar/will/door.hook rename to base/mar/will/door.hook diff --git a/base/mar/woff/door.hook b/base/mar/woff/door.hook new file mode 100644 index 000000000..627e20641 --- /dev/null +++ b/base/mar/woff/door.hook @@ -0,0 +1,24 @@ +:: +:::: /hoon/core/otf/pro + :: +/? 314 + :: +:::: compute + :: +|_ otf=@ +:: +++ grow :: convert to + |% + ++ mime :: convert to %mime + [/application/font-woff (taco otf)] + -- +++ grab + |% + ++ mime |=([p=mite q=octs] q.q) + ++ noun ,@ + -- +++ grad + |% + ++ sted %mime + -- +-- diff --git a/main/mar/write-args/door.hook b/base/mar/write-args/door.hook similarity index 100% rename from main/mar/write-args/door.hook rename to base/mar/write-args/door.hook diff --git a/main/mar/zing/door.hook b/base/mar/zing/door.hook similarity index 100% rename from main/mar/zing/door.hook rename to base/mar/zing/door.hook diff --git a/main/mar/zong/door.hook b/base/mar/zong/door.hook similarity index 100% rename from main/mar/zong/door.hook rename to base/mar/zong/door.hook diff --git a/main/mar/zongs/door.hook b/base/mar/zongs/door.hook similarity index 100% rename from main/mar/zongs/door.hook rename to base/mar/zongs/door.hook diff --git a/main/mar/zung/door.hook b/base/mar/zung/door.hook similarity index 100% rename from main/mar/zung/door.hook rename to base/mar/zung/door.hook diff --git a/docs/psal.hook b/base/psal.hook similarity index 100% rename from docs/psal.hook rename to base/psal.hook diff --git a/docs/pub/doc.md b/base/pub/doc.md similarity index 100% rename from docs/pub/doc.md rename to base/pub/doc.md diff --git a/docs/pub/doc/arvo.md b/base/pub/doc/arvo.md similarity index 99% rename from docs/pub/doc/arvo.md rename to base/pub/doc/arvo.md index acbbc9287..961231efc 100644 --- a/docs/pub/doc/arvo.md +++ b/base/pub/doc/arvo.md @@ -1,7 +1,7 @@ arvo ==== -arvo is our operating system. +Our operating system. arvo is composed of modules called vanes: diff --git a/docs/pub/doc/arvo/ames.md b/base/pub/doc/arvo/ames.md similarity index 96% rename from docs/pub/doc/arvo/ames.md rename to base/pub/doc/arvo/ames.md index 37a656ca1..68557ef27 100644 --- a/docs/pub/doc/arvo/ames.md +++ b/base/pub/doc/arvo/ames.md @@ -3,7 +3,7 @@ `%ames` ======= -`%ames` is our networking protocol. +Our networking protocol. `%ames` is the name of both our network and the vane that communicates over it. When Unix receives a packet over the correct UDP port, it pipes diff --git a/docs/pub/doc/arvo/ames/commentary.md b/base/pub/doc/arvo/ames/commentary.md similarity index 100% rename from docs/pub/doc/arvo/ames/commentary.md rename to base/pub/doc/arvo/ames/commentary.md diff --git a/docs/pub/doc/arvo/arvo.md b/base/pub/doc/arvo/arvo.md similarity index 58% rename from docs/pub/doc/arvo/arvo.md rename to base/pub/doc/arvo/arvo.md index fd614d556..263c88572 100644 --- a/docs/pub/doc/arvo/arvo.md +++ b/base/pub/doc/arvo/arvo.md @@ -3,6 +3,6 @@ `%arvo` ======= -`%arvo` is our operating system. +Our operating system. diff --git a/docs/pub/doc/arvo/arvo/commentary.md b/base/pub/doc/arvo/arvo/commentary.md similarity index 100% rename from docs/pub/doc/arvo/arvo/commentary.md rename to base/pub/doc/arvo/arvo/commentary.md diff --git a/docs/pub/doc/arvo/clay.md b/base/pub/doc/arvo/clay.md similarity index 97% rename from docs/pub/doc/arvo/clay.md rename to base/pub/doc/arvo/clay.md index 6efd69e3c..a80fb1c7f 100644 --- a/docs/pub/doc/arvo/clay.md +++ b/base/pub/doc/arvo/clay.md @@ -3,7 +3,7 @@ `%clay` ======= -`%clay` is our filesystem. +Our filesystem. `%clay` is version-controlled, referentially-transparent, and global. While this filesystem is stored in `%clay`, it is mirrored to Unix for diff --git a/docs/pub/doc/arvo/clay/commentary.md b/base/pub/doc/arvo/clay/commentary.md similarity index 100% rename from docs/pub/doc/arvo/clay/commentary.md rename to base/pub/doc/arvo/clay/commentary.md diff --git a/docs/pub/doc/arvo/dill.md b/base/pub/doc/arvo/dill.md similarity index 97% rename from docs/pub/doc/arvo/dill.md rename to base/pub/doc/arvo/dill.md index b386d744d..01c915a19 100644 --- a/docs/pub/doc/arvo/dill.md +++ b/base/pub/doc/arvo/dill.md @@ -3,7 +3,7 @@ `%dill` ======= -`%dill` is our terminal driver. +Our terminal driver. Unix sends keyboard events to `%dill` from either the console or telnet, and `%dill` produces terminal output. The only app that should directly diff --git a/docs/pub/doc/arvo/dill/commentary.md b/base/pub/doc/arvo/dill/commentary.md similarity index 100% rename from docs/pub/doc/arvo/dill/commentary.md rename to base/pub/doc/arvo/dill/commentary.md diff --git a/docs/pub/doc/arvo/eyre.md b/base/pub/doc/arvo/eyre.md similarity index 98% rename from docs/pub/doc/arvo/eyre.md rename to base/pub/doc/arvo/eyre.md index 2a1b9d9b3..ec11c90d7 100644 --- a/docs/pub/doc/arvo/eyre.md +++ b/base/pub/doc/arvo/eyre.md @@ -3,7 +3,7 @@ `%eyre` ======= -`%eyre` is our http server. +Our http server. Unix sends http messages to `%eyre`, and `%eyre` produces http messages in response. In general, apps and vanes do not call `%eyre`; rather, diff --git a/docs/pub/doc/arvo/eyre/commentary.md b/base/pub/doc/arvo/eyre/commentary.md similarity index 100% rename from docs/pub/doc/arvo/eyre/commentary.md rename to base/pub/doc/arvo/eyre/commentary.md diff --git a/docs/pub/doc/arvo/ford.md b/base/pub/doc/arvo/ford.md similarity index 98% rename from docs/pub/doc/arvo/ford.md rename to base/pub/doc/arvo/ford.md index be96820e0..75cf839a5 100644 --- a/docs/pub/doc/arvo/ford.md +++ b/base/pub/doc/arvo/ford.md @@ -3,7 +3,7 @@ `%ford` ======= -`%ford` is our typed and marked computation engine. +Our typed and marked computation engine. A variety of different services are provided by `%ford`, but they mostly involve compiling hook files, slapping/slammming code with marked data, diff --git a/docs/pub/doc/arvo/ford/commentary.md b/base/pub/doc/arvo/ford/commentary.md similarity index 100% rename from docs/pub/doc/arvo/ford/commentary.md rename to base/pub/doc/arvo/ford/commentary.md diff --git a/docs/pub/doc/arvo/gall.md b/base/pub/doc/arvo/gall.md similarity index 99% rename from docs/pub/doc/arvo/gall.md rename to base/pub/doc/arvo/gall.md index 523cf2fd6..87c99a6ff 100644 --- a/docs/pub/doc/arvo/gall.md +++ b/base/pub/doc/arvo/gall.md @@ -3,7 +3,7 @@ `%gall` ======= -`%gall` manages our userspace applications. +Our application server manager. It allows applications and vanes to send messages to applications and subscribe to data streams. This requires `%gall` to be a sort of a diff --git a/docs/pub/doc/arvo/gall/gall.md b/base/pub/doc/arvo/gall/gall.md similarity index 100% rename from docs/pub/doc/arvo/gall/gall.md rename to base/pub/doc/arvo/gall/gall.md diff --git a/docs/pub/doc/arvo/ives.md b/base/pub/doc/arvo/ives.md similarity index 62% rename from docs/pub/doc/arvo/ives.md rename to base/pub/doc/arvo/ives.md index b2249dc79..5eb8907d9 100644 --- a/docs/pub/doc/arvo/ives.md +++ b/base/pub/doc/arvo/ives.md @@ -3,6 +3,6 @@ `%ives` ======= -`%ives` isn't finished yet. +Isn't finished yet. diff --git a/docs/pub/doc/arvo/ives/ives.md b/base/pub/doc/arvo/ives/ives.md similarity index 100% rename from docs/pub/doc/arvo/ives/ives.md rename to base/pub/doc/arvo/ives/ives.md diff --git a/docs/pub/doc/arvo/jael.md b/base/pub/doc/arvo/jael.md similarity index 62% rename from docs/pub/doc/arvo/jael.md rename to base/pub/doc/arvo/jael.md index ad497b1d4..ab06b5373 100644 --- a/docs/pub/doc/arvo/jael.md +++ b/base/pub/doc/arvo/jael.md @@ -3,6 +3,6 @@ `%jael` ======= -`%jael` isn't finished yet. +Isn't finished yet. diff --git a/docs/pub/doc/arvo/jael/jael.md b/base/pub/doc/arvo/jael/jael.md similarity index 100% rename from docs/pub/doc/arvo/jael/jael.md rename to base/pub/doc/arvo/jael/jael.md diff --git a/docs/pub/doc/arvo/kahn.md b/base/pub/doc/arvo/kahn.md similarity index 62% rename from docs/pub/doc/arvo/kahn.md rename to base/pub/doc/arvo/kahn.md index b728fa02f..744ffae6d 100644 --- a/docs/pub/doc/arvo/kahn.md +++ b/base/pub/doc/arvo/kahn.md @@ -3,6 +3,6 @@ `%kahn` ======= -`%kahn` isn't finished yet. +Isn't finished yet. diff --git a/docs/pub/doc/arvo/kahn/kahn.md b/base/pub/doc/arvo/kahn/kahn.md similarity index 100% rename from docs/pub/doc/arvo/kahn/kahn.md rename to base/pub/doc/arvo/kahn/kahn.md diff --git a/docs/pub/doc/arvo/lunt.md b/base/pub/doc/arvo/lunt.md similarity index 62% rename from docs/pub/doc/arvo/lunt.md rename to base/pub/doc/arvo/lunt.md index 45693ad06..46f6f60dc 100644 --- a/docs/pub/doc/arvo/lunt.md +++ b/base/pub/doc/arvo/lunt.md @@ -3,6 +3,6 @@ `%lunt` ======= -`%lunt` isn't finished yet. +Isn't finished yet. diff --git a/docs/pub/doc/arvo/lunt/lunt.md b/base/pub/doc/arvo/lunt/lunt.md similarity index 100% rename from docs/pub/doc/arvo/lunt/lunt.md rename to base/pub/doc/arvo/lunt/lunt.md diff --git a/docs/pub/doc/arvo/time.md b/base/pub/doc/arvo/time.md similarity index 96% rename from docs/pub/doc/arvo/time.md rename to base/pub/doc/arvo/time.md index f0f6ffbf2..40c016c5e 100644 --- a/docs/pub/doc/arvo/time.md +++ b/base/pub/doc/arvo/time.md @@ -3,7 +3,7 @@ `%time` ======= -`%time` is a simple timer. +Our simple timer. It allows vanes and applications to set and timer events, which are managed in a simple priority queue. `%time` produces effects to start diff --git a/docs/pub/doc/arvo/util.md b/base/pub/doc/arvo/util.md similarity index 99% rename from docs/pub/doc/arvo/util.md rename to base/pub/doc/arvo/util.md index 0ee75bb1c..2e4f764f3 100644 --- a/docs/pub/doc/arvo/util.md +++ b/base/pub/doc/arvo/util.md @@ -3,7 +3,7 @@ CLI Apps ======== -These are our simple command-line applications. +Our simple command-line applications. You can find them in `/main/app`. diff --git a/docs/pub/doc/guide.md b/base/pub/doc/guide.md similarity index 100% rename from docs/pub/doc/guide.md rename to base/pub/doc/guide.md diff --git a/docs/pub/doc/guide/a-ford.md b/base/pub/doc/guide/a-ford.md similarity index 100% rename from docs/pub/doc/guide/a-ford.md rename to base/pub/doc/guide/a-ford.md diff --git a/docs/pub/doc/guide/b-cli.md b/base/pub/doc/guide/b-cli.md similarity index 100% rename from docs/pub/doc/guide/b-cli.md rename to base/pub/doc/guide/b-cli.md diff --git a/docs/pub/doc/guide/c-gall.md b/base/pub/doc/guide/c-gall.md similarity index 100% rename from docs/pub/doc/guide/c-gall.md rename to base/pub/doc/guide/c-gall.md diff --git a/docs/pub/doc/guide/d-app.md b/base/pub/doc/guide/d-app.md similarity index 100% rename from docs/pub/doc/guide/d-app.md rename to base/pub/doc/guide/d-app.md diff --git a/docs/pub/doc/guide/e-dev.md b/base/pub/doc/guide/e-dev.md similarity index 100% rename from docs/pub/doc/guide/e-dev.md rename to base/pub/doc/guide/e-dev.md diff --git a/docs/pub/doc/hoon.md b/base/pub/doc/hoon.md similarity index 100% rename from docs/pub/doc/hoon.md rename to base/pub/doc/hoon.md diff --git a/base/pub/doc/hoon/library.md b/base/pub/doc/hoon/library.md new file mode 100644 index 000000000..128db6dad --- /dev/null +++ b/base/pub/doc/hoon/library.md @@ -0,0 +1,4 @@ +Library +======== + + diff --git a/docs/pub/doc/hoon/library/0.md b/base/pub/doc/hoon/library/0.md similarity index 95% rename from docs/pub/doc/hoon/library/0.md rename to base/pub/doc/hoon/library/0.md index 0345065d2..082e0a734 100644 --- a/docs/pub/doc/hoon/library/0.md +++ b/base/pub/doc/hoon/library/0.md @@ -1,7 +1,7 @@ -volume 0, Kelvin Versioning +volume 0, Kelvin Versioning. =========================== -### ++hoon +

++hoon

++ hoon %164 :: version stub diff --git a/docs/pub/doc/hoon/library/1.md b/base/pub/doc/hoon/library/1.md similarity index 92% rename from docs/pub/doc/hoon/library/1.md rename to base/pub/doc/hoon/library/1.md index db01c434f..c94962f70 100644 --- a/docs/pub/doc/hoon/library/1.md +++ b/base/pub/doc/hoon/library/1.md @@ -3,7 +3,7 @@ volume 1, Hoon Structures ------------------------------------------------------------------------ -### ++abel +

++abel

++ abel typo :: original sin: type @@ -16,7 +16,7 @@ See also: `++typo` ------------------------------------------------------------------------ -### ++axis +

++axis

++ axis ,@ :: tree address @@ -36,7 +36,7 @@ See also: `++clue`, `++limb`, `++slot`, `++peg`, and Section 2fC ------------------------------------------------------------------------ -### ++also +

++also

++ also ,[p=term q=wing r=type] :: alias @@ -44,7 +44,7 @@ XX unused? ------------------------------------------------------------------------ -### ++base +

++base

++ base ?([%atom p=odor] %noun %cell %bean %null) :: axils, @ * ^ ? ~ @@ -66,7 +66,7 @@ See also: `++tile`, `++twig` ------------------------------------------------------------------------ -### ++bean +

++bean

++ bean ,? :: 0=&=yes, 1=|=no @@ -83,7 +83,7 @@ The Urbit version of a boolean, which we call a loobean. 0 or & is ------------------------------------------------------------------------ -### ++beer +

++beer

++ beer $|(@ [~ p=twig]) :: simple embed @@ -98,7 +98,7 @@ See also: `++phax`, `++scat`, section 2fD ------------------------------------------------------------------------ -### ++beet +

++beet

++ beet $| @ :: advanced embed $% [%a p=twig] :: take tape @@ -114,7 +114,7 @@ See also: `++sail`, section 2fD ------------------------------------------------------------------------ -### ++bloq +

++bloq

++ bloq ,@ :: blockclass @@ -129,7 +129,7 @@ See also: section 2cA ------------------------------------------------------------------------ -### ++calf +

++calf

++ calf ,[p=(map ,@ud wine) q=wine] :: @@ -150,7 +150,7 @@ See also: `++wine`, `++dole`, `++doge`, `++dish`, section 2fC ------------------------------------------------------------------------ -### ++char +

++char

++ char ,@tD :: UTF-8 byte @@ -167,7 +167,7 @@ See also: `++tape`, `++lust`, `++just`, `++mask`, chapter 2f ------------------------------------------------------------------------ -### ++chub +

++chub

++ chub :: registered battery $: p=(pair chum tyre) :: definition @@ -181,7 +181,7 @@ See also: Section 2fB. ------------------------------------------------------------------------ -### ++chum +

++chum

++ chum $? lef=term :: jet name [std=term kel=@] :: kelvin version @@ -205,7 +205,7 @@ See also: `++twig`, `++clue` ------------------------------------------------------------------------ -### ++clue +

++clue

++ clue ,[p=axis q=chum r=tyre] :: battery definition @@ -217,7 +217,7 @@ See also: section 2fB ------------------------------------------------------------------------ -### ++coil +

++coil

++ coil $: p=?(%gold %iron %lead %zinc) :: core type q=type :: @@ -232,7 +232,7 @@ See also: `++core`, Section 2fB ------------------------------------------------------------------------ -### ++coin +

++coin

++ coin $% [%$ p=dime] :: [%blob p=*] :: @@ -264,7 +264,7 @@ See also: `++so`, `++co`, Section 2eL, `++dime` ------------------------------------------------------------------------ -### ++cord +

++cord

++ cord ,@t :: text atom (UTF-8) @@ -287,7 +287,7 @@ See also: `++trip`, `++crip`, Section 2eJ ------------------------------------------------------------------------ -### ++date +

++date

++ date ,[[a=? y=@ud] m=@ud t=tarp] :: parsed date @@ -302,7 +302,7 @@ See also: `++year`, `++yore`, Section 2cH, `++stud`, `++dust`, Section ------------------------------------------------------------------------ -### ++dime +

++dime

++ dime ,[p=@ta q=@] :: @@ -319,7 +319,7 @@ See also: `++so`, `++co`, Section 2eL, `++coin` ------------------------------------------------------------------------ -### ++dram +

++dram

++ dram $% [| p=(map ,@tas dram)] :: simple unix dir [& p=@ud q=@] :: @@ -333,7 +333,7 @@ XX Unused ------------------------------------------------------------------------ -### ++each +

++each

++ each |*([a=$+(* *) b=$+(* *)] $%([& p=a] [| p=b])) :: either a or b @@ -345,7 +345,7 @@ Tile generator: produces a dicriminated fork between two types. ------------------------------------------------------------------------ -### ++edge +

++edge

++ edge ,[p=hair q=(unit ,[p=* q=nail])] :: parsing output @@ -360,7 +360,7 @@ See also: Section 2eD, `++rule` ------------------------------------------------------------------------ -### ++foot +

++foot

++ foot $% [%ash p=twig] :: dry arm, geometric [%elm p=twig] :: wet arm, generic @@ -386,7 +386,7 @@ See also: `++ap`, `++ut`, Section 2fB, Section 2fC ------------------------------------------------------------------------ -### ++gate +

++gate

++ gate $+(* *) :: general gate @@ -407,7 +407,7 @@ See also: `++lift`, `++cork`, Core Language Doc ------------------------------------------------------------------------ -### ++hair +

++hair

++ hair ,[p=@ud q=@ud] :: parsing trace @@ -427,7 +427,7 @@ See also: `++last`, Section 2eB ------------------------------------------------------------------------ -### ++like +

++like

++ like |* a=_,* :: generic edge |= b=_`*`[(hair) ~] :: @@ -455,7 +455,7 @@ See also: `++easy`, `++just`/`++jest`, `++knee`, `++mask`, `++shim`, ------------------------------------------------------------------------ -### ++limb +

++limb

++ limb $|(term $%([%& p=axis] [%| p=@ud q=term])) :: @@ -474,7 +474,7 @@ See also: section 2fC-2fD ------------------------------------------------------------------------ -### ++line +

++line

++ line ,[p=[%leaf p=odor q=@] q=tile] :: %kelp case @@ -501,7 +501,7 @@ Used in compilation and grammar, section 2fC-2fD ------------------------------------------------------------------------ -### ++list +

++list

++ list |* a=_,* :: null-term list $|(~ [i=a t=(list a)]) :: @@ -520,7 +520,7 @@ See also: `++turn`, `++snag`, section 2bB. ------------------------------------------------------------------------ -### ++lone +

++lone

++ lone |*(a=$+(* *) ,p=a) :: just one thing @@ -530,7 +530,7 @@ Tile generator. `++lone` puts face of `p` on something. ------------------------------------------------------------------------ -### ++mane +

++mane

++ mane $|(@tas [@tas @tas]) :: XML name/space @@ -549,7 +549,7 @@ See also: `++sail` doc, Section 3bD ------------------------------------------------------------------------ -### ++manx +

++manx

++ manx ,[g=marx c=marl] :: XML node @@ -561,7 +561,7 @@ See also: `++sail` doc, Section 3bD ------------------------------------------------------------------------ -### ++marl +

++marl

++ marl (list manx) :: XML node list @@ -573,7 +573,7 @@ See also: `++sail` doc ------------------------------------------------------------------------ -### ++mars +

++mars

++ mars ,[t=[n=%$ a=[i=[n=%$ v=tape] t=~]] c=~] :: XML cdata @@ -583,7 +583,7 @@ See also: `++sail` doc ------------------------------------------------------------------------ -### ++mart +

++mart

++ mart (list ,[n=mane v=tape]) :: XML attributes @@ -596,7 +596,7 @@ See also: `++sail` doc ------------------------------------------------------------------------ -### ++marx +

++marx

++ marx ,[n=mane a=mart] :: XML tag @@ -609,7 +609,7 @@ See also: `++sail` doc ------------------------------------------------------------------------ -### ++metl +

++metl

++ metl ?(%gold %iron %zinc %lead) :: core variance @@ -619,7 +619,7 @@ See also: `++coil` ------------------------------------------------------------------------ -### ++noun +

++noun

++ noun ,* :: any noun @@ -630,7 +630,7 @@ Used nowhere XX ------------------------------------------------------------------------ -### ++null +

++null

++ null ,~ :: null, nil, etc @@ -642,7 +642,7 @@ Used nowhere XX ------------------------------------------------------------------------ -### ++odor +

++odor

++ odor ,@ta :: atom format @@ -657,7 +657,7 @@ See also: `++base`, odor reference ------------------------------------------------------------------------ -### ++tarp +

++tarp

++ tarp ,[d=@ud h=@ud m=@ud s=@ud f=(list ,@ux)] :: parsed time @@ -677,7 +677,7 @@ See also: `++date`, `++yell`/`++yule`, Section 2cH ------------------------------------------------------------------------ -### ++time +

++time

++ time ,@da :: galactic time @@ -693,7 +693,7 @@ See also: `++date`, odor reference ------------------------------------------------------------------------ -### ++tree +

++tree

++ tree |* a=_,* :: binary tree $|(~ [n=a l=(tree a) r=(tree a)]) :: @@ -706,7 +706,7 @@ left/right sub `++tree`s of the same type. Pretty-printed with `{}`. ------------------------------------------------------------------------ -### ++nail +

++nail

++ nail ,[p=hair q=tape] :: parsing input @@ -721,7 +721,7 @@ See also: `++roll` ------------------------------------------------------------------------ -### ++numb +

++numb

++ numb ,@ :: just a number @@ -729,7 +729,7 @@ Used nowhere XX ------------------------------------------------------------------------ -### ++pair +

++pair

++ pair |*([a=$+(* *) b=$+(* *)] ,[p=a q=b]) :: just a pair @@ -740,7 +740,7 @@ Tile generator. Produces a tuple of two of the types passed in. ------------------------------------------------------------------------ -### ++pass +

++pass

++ pass ,@ :: public key @@ -750,7 +750,7 @@ See also: `++acru`, `++crua`, `++crub` ------------------------------------------------------------------------ -### ++path +

++path

++ path (list span) :: filesys location @@ -762,7 +762,7 @@ A filesystem path. A `++path` is a list of `++span`, `@ta`. Used in ------------------------------------------------------------------------ -### ++pint +

++pint

++ pint ,[p=[p=@ q=@] q=[p=@ q=@]] :: line/column range @@ -777,7 +777,7 @@ hairs indicating from - to. ------------------------------------------------------------------------ -### ++pole +

++pole

++ pole |* a=_,* :: nameless list $|(~ [a (pole a)]) :: @@ -790,7 +790,7 @@ without the `i=` and `t=`. ------------------------------------------------------------------------ -### ++port +

++port

++ port $: p=axis :: $= q :: @@ -808,7 +808,7 @@ Type and location of core-shaped thing? XX Compiler Internals ------------------------------------------------------------------------ -### ++post +

++post

++ post $: p=axis :: $= q :: @@ -827,7 +827,7 @@ Type and location of possibly core-shaped thing? XX Compiler Internals ------------------------------------------------------------------------ -### ++prop +

++prop

++ prop $: p=axis :: $= q :: @@ -843,7 +843,7 @@ Verified core-shaped thing? XX Compiler Internals ------------------------------------------------------------------------ -### ++qual +

++qual

++ qual |* [a=$+(* *) b=$+(* *) c=$+(* *) d=$+(* *)] :: just a quadruple ,[p=a q=b r=c s=d] :: @@ -855,7 +855,7 @@ Tile generator. A `++qual` is a tuple of four of the types passed in.. ------------------------------------------------------------------------ -### ++rege +

++rege

++ rege $| ?(%dote %ende %sart %empt %boun %bout) :: parsed regex $% [%lite p=char] :: literal @@ -885,7 +885,7 @@ See also: `++rexp`, `++repg`, `++pars` ------------------------------------------------------------------------ -### ++ring +

++ring

++ ring ,@ :: private key @@ -895,7 +895,7 @@ See also: `++acru`, `++crua`, `++crub`. ------------------------------------------------------------------------ -### ++rule +

++rule

++ rule |=(tub=nail `edge`[p.tub ~ ~ tub]) :: parsing rule @@ -916,7 +916,7 @@ See also: `++cold`, Section 2eC ------------------------------------------------------------------------ -### ++span +

++span

++ span ,@ta :: text-atom (ASCII) @@ -941,7 +941,7 @@ besides numbers and lowercase letters are permitted. ------------------------------------------------------------------------ -### ++spot +

++spot

++ spot ,[p=path q=pint] :: range in file @@ -957,7 +957,7 @@ See also: `++pint` ------------------------------------------------------------------------ -### ++tang +

++tang

++ tang (list tank) :: general error @@ -965,7 +965,7 @@ Unused XX ------------------------------------------------------------------------ -### ++tank +

++tank

++ tank $% [%leaf p=tape] :: printing formats $: %palm :: @@ -996,7 +996,7 @@ list of `++tank` delimted by the strings in `p`. ------------------------------------------------------------------------ -### ++tape +

++tape

++ tape (list char) :: like a string @@ -1010,7 +1010,7 @@ list of chars. ------------------------------------------------------------------------ -### ++term +

++term

++ term ,@tas :: Hoon ASCII subset @@ -1030,7 +1030,7 @@ always preceded by `%`. This means a term is always cubical. The empty ------------------------------------------------------------------------ -### ++tiki +

++tiki

++ tiki :: test case $% [& p=(unit term) q=wing] :: simple wing @@ -1062,13 +1062,13 @@ A `++wing` or `++twig`. ------------------------------------------------------------------------ -### ++tile +

++tile

See the Tile section of the Hoon Reference. ------------------------------------------------------------------------ -### ++toga +

++toga

++ toga :: face control $| p=term :: two togas @@ -1104,7 +1104,7 @@ using `^=`. ------------------------------------------------------------------------ -### ++trap +

++trap

++ trap ,_|.(_*) :: makes perfect sense @@ -1121,7 +1121,7 @@ See also: `|.` ------------------------------------------------------------------------ -### ++trel +

++trel

++ trel |* [a=$+(* *) b=$+(* *) c=$+(* *)] :: just a triple ,[p=a q=b r=c] :: @@ -1133,7 +1133,7 @@ Tile generator. `++trel` is a tuple of three of the types passed in. ------------------------------------------------------------------------ -### ++tuna +

++tuna

++ tuna :: tagflow $% [%a p=twig] :: plain text @@ -1154,13 +1154,13 @@ See also: `++sail` ------------------------------------------------------------------------ -### ++twig +

++twig

See Twig section of Hoon reference ------------------------------------------------------------------------ -### ++tine +

++tine

++ tine (list ,[p=tile q=twig]) :: @@ -1186,7 +1186,7 @@ See also: `++twig` ------------------------------------------------------------------------ -### ++tusk +

++tusk

++ tusk (list twig) :: @@ -1202,7 +1202,7 @@ See also: `++twig` ------------------------------------------------------------------------ -### ++tyre +

++tyre

++ tyre (list ,[p=term q=twig]) :: @@ -1212,7 +1212,7 @@ See also: `++twig` ------------------------------------------------------------------------ -### ++tyke +

++tyke

++ tyke (list (unit twig)) :: @@ -1227,7 +1227,7 @@ where the `=` are inferred from your current path. ------------------------------------------------------------------------ -### ++tram +

++tram

++ tram (list ,[p=wing q=twig]) :: @@ -1246,7 +1246,7 @@ See also: `++twig` ------------------------------------------------------------------------ -### ++nock +

++nock

++ nock $& [p=nock q=nock] :: autocons $% [%0 p=@] :: axis select @@ -1272,7 +1272,7 @@ See Nock doc ------------------------------------------------------------------------ -### ++tone +

++tone

++ tone $% [%0 p=*] :: success [%1 p=(list)] :: blocks @@ -1314,7 +1314,7 @@ trace is not yet rendered. ------------------------------------------------------------------------ -### ++toon +

++toon

++ toon $% [%0 p=*] :: success [%1 p=(list)] :: blocks @@ -1337,7 +1337,7 @@ requests blocked on (`%1`), or failure with stack trace (`%2`). ------------------------------------------------------------------------ -### ++tune +

++tune

++ tune $% [%0 p=vase] :: [%1 p=(list)] :: @@ -1350,7 +1350,7 @@ Probably typed `tone`? ------------------------------------------------------------------------ -### ++twin +

++twin

++ twin ,[p=term q=wing r=axis s=type] :: alias info @@ -1368,13 +1368,13 @@ Aliasing. Used in `%bull` `++type` to typecheck aliased faces. ------------------------------------------------------------------------ -### ++type +

++type

See Type section of Hoon reference ------------------------------------------------------------------------ -### ++typo +

++typo

++ typo type :: old type @@ -1385,7 +1385,7 @@ See also: `++seem`, `++vise`, `++type` ------------------------------------------------------------------------ -### ++udal +

++udal

++ udal :: atomic change (%b) $: p=@ud :: blockwidth @@ -1396,7 +1396,7 @@ XX Unused ------------------------------------------------------------------------ -### ++udon +

++udon

++ udon :: abstract delta $: p=umph :: preprocessor @@ -1412,7 +1412,7 @@ See `%clay` doc ------------------------------------------------------------------------ -### ++umph +

++umph

++ umph :: change filter $| $? %a :: no filter @@ -1426,7 +1426,7 @@ See `%clay` doc ------------------------------------------------------------------------ -### ++unce +

++unce

++ unce |* a=_,* :: change part $% [%& p=@ud] :: skip[copy] @@ -1437,7 +1437,7 @@ See `%clay` doc ------------------------------------------------------------------------ -### ++unit +

++unit

++ unit |* a=_,* :: maybe $|(~ [~ u=a]) :: @@ -1455,7 +1455,7 @@ See also: `++bind`, Section 2bA ------------------------------------------------------------------------ -### ++upas +

++upas

++ upas :: tree change (%d) $& [p=upas q=upas] :: cell @@ -1468,7 +1468,7 @@ See `%clay` doc ------------------------------------------------------------------------ -### ++urge +

++urge

++ urge |*(a=_,* (list (unce a))) :: list change @@ -1476,7 +1476,7 @@ See `%clay` doc ------------------------------------------------------------------------ -### ++vase +

++vase

++ vase ,[p=type q=*] :: type-value pair @@ -1490,7 +1490,7 @@ See `%arvo` doc ------------------------------------------------------------------------ -### ++vise +

++vise

++ vise ,[p=typo q=*] :: old vase @@ -1500,7 +1500,7 @@ See `++typo`, `++seer` ------------------------------------------------------------------------ -### ++wall +

++wall

++ wall (list tape) :: text lines (no \n) @@ -1523,7 +1523,7 @@ See also: `++wash` ------------------------------------------------------------------------ -### ++wain +

++wain

++ wain (list cord) :: text lines (no \n) @@ -1556,7 +1556,7 @@ See also: `++lore`, `++role` ------------------------------------------------------------------------ -### ++wing +

++wing

++ wing (list limb) :: @@ -1572,7 +1572,7 @@ See also: `++twig` ------------------------------------------------------------------------ -### ++wine +

++wine

++ wine $| ?(%noun %path %tank %void %wall %wool %yarn) $% [%atom p=term] :: @@ -1654,7 +1654,7 @@ See also: `++calf` ------------------------------------------------------------------------ -### ++wonk +

++wonk

++ wonk |*(veq=edge ?~(q.veq !! p.u.q.veq)) :: :: :: @@ -1682,7 +1682,7 @@ See also: `++edge`, Section 2eC ------------------------------------------------------------------------ -### ++map +

++map

++ map |* [a=_,* b=_,*] :: associative tree $|(~ [n=[p=a q=b] l=(map a b) r=(map a b)]) :: @@ -1700,7 +1700,7 @@ See also: `++by` ------------------------------------------------------------------------ -### ++qeu +

++qeu

++ qeu |* a=_,* :: queue $|(~ [n=a l=(qeu a) r=(qeu a)]) :: @@ -1717,7 +1717,7 @@ See also: `++to` ------------------------------------------------------------------------ -### ++set +

++set

++ set |* a=_,* :: set $|(~ [n=a l=(set a) r=(set a)]) :: @@ -1736,7 +1736,7 @@ See also: `++in` ------------------------------------------------------------------------ -### ++jar +

++jar

++ jar |*([a=_,* b=_,*] (map a (list b))) :: map of lists @@ -1760,7 +1760,7 @@ See also: `++ja`, `++by`, `++map`, `++list` ------------------------------------------------------------------------ -### ++jug +

++jug

++ jug |*([a=_,* b=_,*] (map a (set b))) :: map of sets diff --git a/docs/pub/doc/hoon/library/2a.md b/base/pub/doc/hoon/library/2a.md similarity index 92% rename from docs/pub/doc/hoon/library/2a.md rename to base/pub/doc/hoon/library/2a.md index ec9bdd859..c49ba7c68 100644 --- a/docs/pub/doc/hoon/library/2a.md +++ b/base/pub/doc/hoon/library/2a.md @@ -1,7 +1,7 @@ chapter 2a, basic unsigned math =============================== -### ++add +

++add

Add @@ -28,7 +28,7 @@ Produces the sum of `a` and `b` as an atom. ------------------------------------------------------------------------ -### ++cap +

++cap

Tree head @@ -59,7 +59,7 @@ within the tail. ------------------------------------------------------------------------ -### ++dec +

++dec

Decrement @@ -86,7 +86,7 @@ Produces `a-1` as an atom. ------------------------------------------------------------------------ -### ++div +

++div

Divide @@ -117,7 +117,7 @@ Computes `a` divided by `b`, producing an atom. ------------------------------------------------------------------------ -### ++fac +

++fac

Factorial @@ -142,7 +142,7 @@ Computes the factorial of `a`, producing an atom. ------------------------------------------------------------------------ -### ++gte +

++gte

Greater-than/equal @@ -168,7 +168,7 @@ Tests whether `a` is greater than a number `b`, producing a loobean. ------------------------------------------------------------------------ -### ++gth +

++gth

Greater-than @@ -192,7 +192,7 @@ Tests whether `a` is greater than `b`, producing a loobean. ------------------------------------------------------------------------ -### ++lte +

++lte

Less-than/equal @@ -219,7 +219,7 @@ Tests whether `a` is less than or equal to `b`, producing a loobean. ------------------------------------------------------------------------ -### ++lth +

++lth

Less-than @@ -252,7 +252,7 @@ Tests whether `a` is less than `b`, producing a loobean. ------------------------------------------------------------------------ -### ++mas +

++mas

Axis within head/tail @@ -287,7 +287,7 @@ Computes the axis of `a` within the head or the tail, producing an atom. ~zod/try=> (mas 1) ! exit -### ++max +

++max

Maximum @@ -314,7 +314,7 @@ Computes the maximum of `a` and `b`, producing an atom. ------------------------------------------------------------------------ -### ++min +

++min

Minimum @@ -341,7 +341,7 @@ Computes the minimum of `a` and `b`, producing an atom. ------------------------------------------------------------------------ -### ++mod +

++mod

Modulus @@ -361,7 +361,7 @@ Computes the remainder of dividing `a` by `b`, producing an atom. ------------------------------------------------------------------------ -### ++mul +

++mul

Multiply @@ -388,7 +388,7 @@ Multiplies `a` by `b`, producing an atom. ------------------------------------------------------------------------ -### ++peg +

++peg

Axis within axis @@ -419,7 +419,7 @@ Computes the axis of `b` within axis `a`, producing an atom. ------------------------------------------------------------------------ -### ++sub +

++sub

Subtract diff --git a/docs/pub/doc/hoon/library/2b.md b/base/pub/doc/hoon/library/2b.md similarity index 93% rename from docs/pub/doc/hoon/library/2b.md rename to base/pub/doc/hoon/library/2b.md index 5e68f3d27..dfa3637a2 100644 --- a/docs/pub/doc/hoon/library/2b.md +++ b/base/pub/doc/hoon/library/2b.md @@ -4,7 +4,7 @@ chapter 2b, basic containers Section 2bA, units ------------------ -### ++biff +

++biff

Unit as argument @@ -27,7 +27,7 @@ Applies a gate that produces a unit, `b`, to the value (`u.a`) of a unit ------------------------------------------------------------------------ -### ++bind +

++bind

Bind @@ -51,7 +51,7 @@ unit. ------------------------------------------------------------------------ -### ++bond +

++bond

Replace null @@ -77,7 +77,7 @@ unit is not empty, then the original unit is produced. ------------------------------------------------------------------------ -### ++both +

++both

Group unit values @@ -101,7 +101,7 @@ Produces a unit whose value is a cell of the values of two input units ------------------------------------------------------------------------ -### ++clap +

++clap

Apply gate to two units @@ -133,7 +133,7 @@ two units `a` and `b`. ------------------------------------------------------------------------ -### ++drop +

++drop

Unit list @@ -155,7 +155,7 @@ Produces a [list]() of the value from a unit `a`. ------------------------------------------------------------------------ -### ++fall +

++fall

Default unit @@ -177,7 +177,7 @@ null. ------------------------------------------------------------------------ -### ++lift +

++lift

Fmap @@ -201,7 +201,7 @@ produces a unit value. ------------------------------------------------------------------------ -### ++mate +

++mate

Choose @@ -237,7 +237,7 @@ produces that value. If the assertion fails, `++mate` crashes with ------------------------------------------------------------------------ -### ++need +

++need

Unwrap @@ -262,7 +262,7 @@ Retrieve the value from a unit and crash if the unit is null. ------------------------------------------------------------------------ -### ++some +

++some

Unify @@ -286,7 +286,7 @@ section 2bB, lists Reverse -### ++flop +

++flop

++ flop :: reverse ~/ %flop @@ -306,7 +306,7 @@ Produces the list `a` in reverse order. ~zod/try=> (flop a) ~[3 2 1] -### ++homo +

++homo

Homogenize @@ -332,7 +332,7 @@ list `a`. ~zod/try=> (homo a) ~[1 2 3] -### ++limo +

++limo

List Constructor @@ -350,7 +350,7 @@ Turns a null-terminated tuple into a list. ~zod/try=> (limo [1 2 3 ~]) [i=1 t=[i=2 t=[i=3 t=~]]] -### ++lent +

++lent

List length @@ -374,7 +374,7 @@ Produces the length of any list `a` as an atom. ------------------------------------------------------------------------ -### ++levy +

++levy

"and" to list @@ -402,7 +402,7 @@ passed to gate `b`. ------------------------------------------------------------------------ -### ++lien +

++lien

"or" to list @@ -430,7 +430,7 @@ passed to gate `b`. ------------------------------------------------------------------------ -### ++murn +

++murn

Maybe transform @@ -454,7 +454,7 @@ Produces a new list with all the results that do not produce `~`. ~zod/try=> (murn (limo [0 1 2 3 ~]) a) [i=12 t=[i=13 t=~]] -### ++reap +

++reap

Replicate @@ -479,7 +479,7 @@ Replicate: produces a list containing `a` copies of `b`. ------------------------------------------------------------------------ -### ++reel +

++reel

Right fold @@ -511,7 +511,7 @@ the final value of the accumulator. ------------------------------------------------------------------------ -### ++roll +

++roll

Left fold @@ -543,7 +543,7 @@ producing the final value of the accumulator. ------------------------------------------------------------------------ -### ++skid +

++skid

Separate @@ -567,7 +567,7 @@ true when slammed to gate `b` and those who produce `%.n`. ------------------------------------------------------------------------ -### ++skim +

++skim

Suffix @@ -593,7 +593,7 @@ producing a list of all of the members that produce `%.y`. Inverse of ------------------------------------------------------------------------ -### ++skip +

++skip

Except @@ -619,7 +619,7 @@ producing a list of all of the members that produce `%.n`. Inverse of ------------------------------------------------------------------------ -### ++scag +

++scag

Prefix @@ -644,7 +644,7 @@ the front of the list. ------------------------------------------------------------------------ -### ++slag +

++slag

Suffix @@ -670,7 +670,7 @@ Accepts an atom `a` and list `b`, producing the remaining elements from ------------------------------------------------------------------------ -### ++snag +

++snag

Index @@ -697,7 +697,7 @@ of `a`and failing if the list is null. Lists are 0-indexed. ------------------------------------------------------------------------ -### ++sort +

++sort

Quicksort @@ -726,7 +726,7 @@ sorted according to `b`. ------------------------------------------------------------------------ -### ++swag +

++swag

Infix @@ -748,7 +748,7 @@ inclusive index `a`, producing `b` number of characters. ------------------------------------------------------------------------ -### ++turn +

++turn

Gate to list @@ -774,7 +774,7 @@ to each element of the original list. ------------------------------------------------------------------------ -### ++weld +

++weld

Concatenate @@ -797,7 +797,7 @@ Concatenate two lists `a` and `b`. ------------------------------------------------------------------------ -### ++welp +

++welp

Perfect weld @@ -827,7 +827,7 @@ to homogenization. ------------------------------------------------------------------------ -### ++wild +

++wild

XXDELETE @@ -873,7 +873,7 @@ individually. ------------------------------------------------------------------------ -### ++zing +

++zing

Cons diff --git a/docs/pub/doc/hoon/library/2c.md b/base/pub/doc/hoon/library/2c.md similarity index 93% rename from docs/pub/doc/hoon/library/2c.md rename to base/pub/doc/hoon/library/2c.md index 41e86be44..5f2fa43bf 100644 --- a/docs/pub/doc/hoon/library/2c.md +++ b/base/pub/doc/hoon/library/2c.md @@ -4,7 +4,7 @@ chapter 2c, simple noun surgery section 2cA, bit surgery ------------------------ -### ++bex +

++bex

Binary exponent @@ -28,7 +28,7 @@ Computes the result of `2^a`, producing an atom. ------------------------------------------------------------------------ -### ++xeb +

++xeb

Binary logarithm @@ -57,7 +57,7 @@ Computes the base-2 logarithm of `a`, producing an atom. ------------------------------------------------------------------------ -### ++can +

++can

Assemble @@ -91,7 +91,7 @@ value. ------------------------------------------------------------------------ -### ++cat +

++cat

Concatenate @@ -130,7 +130,7 @@ atom. ------------------------------------------------------------------------ -### ++cut +

++cut

Slice @@ -167,7 +167,7 @@ Produces an atom. ------------------------------------------------------------------------ -### ++end +

++end

Tail @@ -203,7 +203,7 @@ Produces an atom by taking the last `b` blocks of size `a` from `c`. ------------------------------------------------------------------------ -### ++fil +

++fil

Fill bloqstream @@ -235,7 +235,7 @@ Produces an atom by repeating `c` for `b` blocks of size `a`. ------------------------------------------------------------------------ -### ++lsh +

++lsh

Left-shift @@ -267,7 +267,7 @@ Produces an atom by left-shifting `c` by `b` blocks of size `a`. ------------------------------------------------------------------------ -### ++met +

++met

Measure @@ -299,7 +299,7 @@ Computes the number of blocks of size `a` in `b`, producing an atom. ------------------------------------------------------------------------ -### ++rap +

++rap

Assemble non-zero @@ -327,7 +327,7 @@ Concatenate a list of atoms `b` using blocksize `a`, producing an atom. ------------------------------------------------------------------------ -### ++rep +

++rep

Assemble single @@ -363,7 +363,7 @@ Produces an atom by assembling a list of atoms `b` using block size `a`. ------------------------------------------------------------------------ -### ++rip +

++rip

Disassemble @@ -399,7 +399,7 @@ Produces a list of atoms from the bits of `b` using block size `a`. ------------------------------------------------------------------------ -### ++rsh +

++rsh

Right-shift @@ -441,7 +441,7 @@ Right-shifts `c` by `b` blocks of size `a`, producing an atom. ------------------------------------------------------------------------ -### ++swap +

++swap

Reverse block order @@ -470,7 +470,7 @@ reversing the block order of `b` using block size `a`. section 2cB, bit logic ---------------------- -### ++con +

++con

Binary OR @@ -513,7 +513,7 @@ atom. ------------------------------------------------------------------------ -### ++dis +

++dis

Binary AND @@ -560,7 +560,7 @@ atom. ------------------------------------------------------------------------ -### ++mix +

++mix

Binary XOR @@ -599,7 +599,7 @@ Produces the bit-wise logical XOR of `a` and `b`, producing an atom. ------------------------------------------------------------------------ -### ++not +

++not

Binary NOT @@ -633,7 +633,7 @@ of `c`. section 2cC, noun orders ------------------------ -### ++aor +

++aor

Alphabetic order @@ -680,7 +680,7 @@ loobean. ------------------------------------------------------------------------ -### ++dor +

++dor

Numeric order @@ -719,7 +719,7 @@ loobean. ------------------------------------------------------------------------ -### ++gor +

++gor

Hash order @@ -758,7 +758,7 @@ XX revisit ------------------------------------------------------------------------ -### ++hor +

++hor

Hash order @@ -789,7 +789,7 @@ Recursive hash comparator gate. ------------------------------------------------------------------------ -### ++vor +

++vor

++ vor :: v-order ~/ %vor @@ -814,7 +814,7 @@ Double hash comparator gate. section 2cD, insecure hashing ----------------------------- -### ++fnv +

++fnv

++ fnv |=(a=@ (end 5 1 (mul 16.777.619 a))) :: FNV scrambler @@ -833,7 +833,7 @@ of size 5 off the product's end, producing atom. ------------------------------------------------------------------------ -### ++mum +

++mum

++ mum :: mug with murmur3 ~/ %mum @@ -889,7 +889,7 @@ XX document ~zod/try=> (mum ~[1 2 3 4 5]) 1.517.902.092 -### ++mug +

++mug

++ mug :: 31bit nonzero FNV1a ~/ %mug @@ -929,7 +929,7 @@ algorithm, producing an atom. section 2cE, phonetic base -------------------------- -### ++po +

++po

++ po ~/ %po @@ -975,7 +975,7 @@ contained in this section. ------------------------------------------------------------------------ -### ++ind +

++ind

Parse prefix @@ -998,7 +998,7 @@ Produces the byte of the right-hand syllable `a`. ------------------------------------------------------------------------ -### ++ins +

++ins

Parse suffix @@ -1023,7 +1023,7 @@ Produces the byte of the left-hand phonetic syllable `b`. ------------------------------------------------------------------------ -### ++tod +

++tod

Fetch prefix @@ -1050,7 +1050,7 @@ atom. ------------------------------------------------------------------------ -### ++tos +

++tos

Fetch suffix @@ -1074,7 +1074,7 @@ atom. section 2cF, signed and modular ints ------------------------------------ -### ++si +

++si

++ si !: :: signed integer |% @@ -1083,7 +1083,7 @@ Container for the signed integer functions. ------------------------------------------------------------------------ -### ++abs +

++abs

++ abs |=(a=@s (add (end 0 1 a) (rsh 0 1 a))) :: absolute value @@ -1100,7 +1100,7 @@ Produces the absolute value of a signed integer. ------------------------------------------------------------------------ -### ++dif +

++dif

++ dif |= [a=@s b=@s] :: subtraction (sum a (new !(syn b) (abs b))) @@ -1122,7 +1122,7 @@ Produces the difference between two signed integers `b` and `c`. ------------------------------------------------------------------------ -### ++dul +

++dul

++ dul |= [a=@s b=@] :: modulus =+(c=(old a) ?:(-.c (mod +.c b) (sub b +.c))) @@ -1146,7 +1146,7 @@ Produces the modulus of two signed integers. ------------------------------------------------------------------------ -### ++fra +

++fra

++ fra |= [a=@s b=@s] :: divide (new =(0 (mix (syn a) (syn b))) (div (abs a) (abs b))) @@ -1164,7 +1164,7 @@ Produces the quotient of two signed integers. ------------------------------------------------------------------------ -### ++new +

++new

++ new |= [a=? b=@] :: [sign value] to @s `@s`?:(a (mul 2 b) ?:(=(0 b) 0 +((mul 2 (dec b))))) @@ -1184,7 +1184,7 @@ Produces a signed integer from a loobean sign value `a` and an atom `b`. ------------------------------------------------------------------------ -### ++old +

++old

++ old |=(a=@s [(syn a) (abs a)]) :: [sign value] @@ -1206,7 +1206,7 @@ Produces the cell `[sign value]` representations of a signed integer. ------------------------------------------------------------------------ -### ++pro +

++pro

++ pro |= [a=@s b=@s] :: multiplication (new =(0 (mix (syn a) (syn b))) (mul (abs a) (abs b))) @@ -1228,7 +1228,7 @@ Produces the product of two signed integers. ------------------------------------------------------------------------ -### ++rem +

++rem

++ rem |=([a=@s b=@s] (dif a (pro b (fra a b)))) :: remainder @@ -1251,7 +1251,7 @@ Produces the remainder from a division of two signed integers. ------------------------------------------------------------------------ -### ++sum +

++sum

++ sum |= [a=@s b=@s] :: addition ~| %si-sum @@ -1285,7 +1285,7 @@ Sum two signed integers. ------------------------------------------------------------------------ -### ++sun +

++sun

++ sun |=(a=@u (mul 2 a)) :: @u to @s @@ -1309,7 +1309,7 @@ inferred as an unsigned integer in the type system. ------------------------------------------------------------------------ -### ++syn +

++syn

++ syn |=(a=@s =(0 (end 0 1 a))) :: sign test @@ -1326,7 +1326,7 @@ Produce the sign of a signed integer, `&` being posiitve, `|` negative. ------------------------------------------------------------------------ -### ++cmp +

++cmp

++ cmp |= [a=@s b=@s] :: compare ^- @s @@ -1359,7 +1359,7 @@ Compare two signed integers. ~zod/try=> (cmp:si -10 --7) -1 -### ++dif +

++dif

++ dif |=([b=@ c=@] (sit (sub (add out (sit b)) (sit c)))) @@ -1389,7 +1389,7 @@ representation. ------------------------------------------------------------------------ -### ++inv +

++inv

++ inv |=(b=@ (sub (dec out) (sit b))) @@ -1412,7 +1412,7 @@ Inverts the order of the modular field. ------------------------------------------------------------------------ -### ++net +

++net

++ net |= b=@ ^- @ => .(b (sit b)) @@ -1476,7 +1476,7 @@ Reverse bytes within block. ------------------------------------------------------------------------ -### ++out +

++out

++ out (bex (bex a)) @@ -1503,7 +1503,7 @@ The maximum integer value that the current block can store. ------------------------------------------------------------------------ -### ++rol +

++rol

++ rol |= [b=bloq c=@ d=@] ^- @ :: roll left =+ e=(sit d) @@ -1532,7 +1532,7 @@ Roll `d` to the left by `c` `b`-sized blocks. ------------------------------------------------------------------------ -### ++ror +

++ror

++ ror |= [b=bloq c=@ d=@] ^- @ :: roll right =+ e=(sit d) @@ -1563,7 +1563,7 @@ Roll `d` to the right by `c` `b`-sized blocks. ------------------------------------------------------------------------ -### ++sum +

++sum

++ sum |=([b=@ c=@] (sit (add b c))) :: wrapping add @@ -1588,7 +1588,7 @@ Sum two numbers in this modular field. ~zod/try=> (~(sum fe 4) 10.000 100.000) 44.464 -### ++sit +

++sit

++ sit |=(b=@ (end a 1 b)) :: enforce modulo @@ -1635,7 +1635,7 @@ format. We use this for many of our examples. ~zod/try=> -<- ~2014.8.4..19.39.59..9288 -### ++year +

++year

++ year :: date to @d |= det=date @@ -1657,7 +1657,7 @@ its `@d`representation. ------------------------------------------------------------------------ -### ++yore +

++yore

++ yore :: @d to date |= now=@d @@ -1678,7 +1678,7 @@ Produces a `++date` from a `@d` ~zod/try=> (yore -<-) [[a=%.y y=2.014] m=8 t=[d=4 h=20 m=28 s=53 f=~[0x7b82]]] -### ++yell +

++yell

++ yell :: tarp from @d |= now=@d @@ -1712,7 +1712,7 @@ Produce a parsed daily time format from an atomic date. ------------------------------------------------------------------------ -### ++yule +

++yule

++ yule :: time atom |= rip=tarp @@ -1731,10 +1731,10 @@ Produce a parsed daily time format from an atomic date. (add (lsh 4 muc i.f.rip) $(f.rip t.f.rip)) (con (lsh 6 1 sec) fac) -Accept a [`++tarp`](), a parsed daily time, and produces a time atom, +Accept a [`++tarp`](/doc/hoon/library/1#++tarp), a parsed daily time, and produces a time atom, `@d`. -`rip` is a [`++tarp`](). +`rip` is a [`++tarp`](/doc/hoon/library/1#++tarp). ~zod/try=> =murica (yell ~1776.7.4) ~zod/try=> murica @@ -1752,7 +1752,7 @@ Accept a [`++tarp`](), a parsed daily time, and produces a time atom, ------------------------------------------------------------------------ -### ++yall +

++yall

++ yall :: day # to day of year |= day=@ud @@ -1792,7 +1792,7 @@ day from a number of days from the beginning of time. ------------------------------------------------------------------------ -### ++yawn +

++yawn

++ yawn :: days since Jesus |= [yer=@ud mot=@ud day=@ud] @@ -1837,7 +1837,7 @@ tuple `[yer=@ud mot=@ud day=@ud]`. ------------------------------------------------------------------------ -### ++yelp +

++yelp

++ yelp :: leap year |= yer=@ud ^- ? @@ -1859,14 +1859,14 @@ loobean. ------------------------------------------------------------------------ -### ++yo +

++yo

++ yo :: time constants Useful constants for interacting with earth time. -### ++cet +

++cet

|% ++ cet 36.524 :: (add 24 (mul 100 365)) @@ -1883,7 +1883,7 @@ days from leap years in a century (24). ------------------------------------------------------------------------ -### ++day +

++day

++ day 86.400 :: (mul 24 hor) @@ -1896,7 +1896,7 @@ Number of seconds in a day. ------------------------------------------------------------------------ -### ++era +

++era

++ era 146.097 :: (add 1 (mul 4 cet)) @@ -1904,7 +1904,7 @@ XX Revisit ------------------------------------------------------------------------ -### ++hor +

++hor

++ hor 3.600 :: (mul 60 mit) @@ -1918,7 +1918,7 @@ seconds in a minute by the minutes in an hour. ------------------------------------------------------------------------ -### ++jes +

++jes

++ jes 106.751.991.084.417 :: (mul 730.692.561 era) @@ -1929,7 +1929,7 @@ XX Revisit ------------------------------------------------------------------------ -### ++mit +

++mit

++ mit 60 @@ -1940,7 +1940,7 @@ The number of seconds in a minute. ------------------------------------------------------------------------ -### ++moh +

++moh

++ moh `(list ,@ud)`[31 28 31 30 31 30 31 31 30 31 30 31 ~] @@ -1955,7 +1955,7 @@ month at the year at that index. ------------------------------------------------------------------------ -### ++moy +

++moy

++ moy `(list ,@ud)`[31 29 31 30 31 30 31 31 30 31 30 31 ~] @@ -1970,7 +1970,7 @@ month at the leap-year at that index. ------------------------------------------------------------------------ -### ++qad +

++qad

++ qad 126.144.001 :: (add 1 (mul 4 yer)) @@ -1982,7 +1982,7 @@ number of seconds in four years. ------------------------------------------------------------------------ -### ++yer +

++yer

++ yer 31.536.000 :: (mul 365 day) @@ -1997,7 +1997,7 @@ seconds in a day by 365. section 2cI, almost macros -------------------------- -### ++cury +

++cury

++ cury |* [a=_|=(^ _*) b=*] @@ -2018,7 +2018,7 @@ Curry a gate, binding the head of its sample ------------------------------------------------------------------------ -### ++curr +

++curr

++ curr |* [a=_|=(^ _*) c=*] @@ -2039,7 +2039,7 @@ Right curry a gate, binding the tail of its sample ------------------------------------------------------------------------ -### ++cork +

++cork

++ cork |*([a=_,* b=gate] (corl b a)) :: compose forward @@ -2059,7 +2059,7 @@ Build `f` such that `(f x) .= (b (a x))`. ------------------------------------------------------------------------ -### ++corl +

++corl

++ corl :: compose backwards |* [a=gate b=_,*] @@ -2079,7 +2079,7 @@ XX Revisit ------------------------------------------------------------------------ -### ++hard +

++hard

++ hard |* han=$+(* *) @@ -2103,7 +2103,7 @@ not. ------------------------------------------------------------------------ -### ++soft +

++soft

++ soft |* han=$+(* *) diff --git a/docs/pub/doc/hoon/library/2da.md b/base/pub/doc/hoon/library/2da.md similarity index 94% rename from docs/pub/doc/hoon/library/2da.md rename to base/pub/doc/hoon/library/2da.md index e094f6344..811e1e0c7 100644 --- a/docs/pub/doc/hoon/library/2da.md +++ b/base/pub/doc/hoon/library/2da.md @@ -1,7 +1,7 @@ section 2dA, sets ================= -### ++apt +

++apt

Set verification @@ -29,7 +29,7 @@ Produces a loobean indicating whether `a` is a set or not. ------------------------------------------------------------------------ -### ++in +

++in

Set operations @@ -44,7 +44,7 @@ Input arm. `a` is a [set]() -### +-all:in +

+-all:in

Logical AND @@ -73,7 +73,7 @@ producing a loobean. ------------------------------------------------------------------------ -### +-any:in +

+-any:in

Logical OR @@ -101,7 +101,7 @@ Computes the logical OR on every element of `a` slammed with `b`. ------------------------------------------------------------------------ -### +-del:in +

+-del:in

Remove noun @@ -140,7 +140,7 @@ Removes `b` from the set `a`. ------------------------------------------------------------------------ -### +-dig:in +

+-dig:in

Axis a in b @@ -175,7 +175,7 @@ Produce the axis of `b` within `a`. ------------------------------------------------------------------------ -### +-gas:in +

+-gas:in

Concatenate @@ -203,7 +203,7 @@ Insert the elements of a list `b` into a set `a`. ------------------------------------------------------------------------ -### +-has:in +

+-has:in

b in a? @@ -234,7 +234,7 @@ Checks if `b` is an element of `a`, producing a loobean. ------------------------------------------------------------------------ -### +-int:in +

+-int:in

Intersection @@ -272,7 +272,7 @@ Produces a set of the intersection between two sets of the same type, ------------------------------------------------------------------------ -### +-put:in +

+-put:in

Put b in a @@ -312,7 +312,7 @@ Add an element `b` to the set `a`. ------------------------------------------------------------------------ -### +-rep:in +

+-rep:in

Accumulate @@ -339,7 +339,7 @@ Accumulate the elements of `a` using a gate `c` and an accumulator `b`. ------------------------------------------------------------------------ -### +-tap:in +

+-tap:in

Set to list @@ -372,7 +372,7 @@ Flatten the set `a` into a list. ------------------------------------------------------------------------ -### +-uni:in +

+-uni:in

Union @@ -414,7 +414,7 @@ Produces a set of the union between two sets of the same type, `a` and ------------------------------------------------------------------------ -### +-wyt:in +

+-wyt:in

Set size diff --git a/docs/pub/doc/hoon/library/2db.md b/base/pub/doc/hoon/library/2db.md similarity index 94% rename from docs/pub/doc/hoon/library/2db.md rename to base/pub/doc/hoon/library/2db.md index 189eb213f..696d130b8 100644 --- a/docs/pub/doc/hoon/library/2db.md +++ b/base/pub/doc/hoon/library/2db.md @@ -1,7 +1,7 @@ section 2dB, maps ================= -### ++ept +

++ept

Map invariant. @@ -29,7 +29,7 @@ Computes whether `a` is a [map](), producing a loobean. ------------------------------------------------------------------------ -### ++ja +

++ja

Jar engine @@ -46,7 +46,7 @@ A container arm for `++jar` operation arms. A `++jar` is a `++map` of ------------------------------------------------------------------------ -### +-get:ja +

+-get:ja

Grab value by key @@ -57,7 +57,7 @@ Grab value by key Produces a list retrieved from jar `a` using the key `b`. -`a` is a [`++jar`](). +`a` is a [`++jar`](/doc/hoon/library/1#++jar). `b` is a key of the same type as the keys in `a`. @@ -73,7 +73,7 @@ Produces a list retrieved from jar `a` using the key `b`. ------------------------------------------------------------------------ -### +-add:ja +

+-add:ja

Prepend to list @@ -106,7 +106,7 @@ Produces jar `a` with value `c` prepended to the list located at key ------------------------------------------------------------------------ -### ++ju +

++ju

Jug operations @@ -121,7 +121,7 @@ Container arm for jug operation arms. A `++jug` is a `++map` of ~zod/try=> ~(. ju (mo (limo a/(sa "ho") b/(sa "he") ~))) <2.dgz [nlr([p={%a %b} q={nlr(^$1{@tD $1}) nlr(^$3{@tD $3})}]) <414.fvk 101.jzo 1.ypj %164>]> -### +-del:ju +

+-del:ju

Remove @@ -152,7 +152,7 @@ removed. ------------------------------------------------------------------------ -### +-get:ju +

+-get:ju

Retrieve set @@ -178,7 +178,7 @@ Produces a set retrieved from jar `a` using key `b`. ------------------------------------------------------------------------ -### +-has:ju +

+-has:ju

Check contents @@ -213,7 +213,7 @@ with jar `a`. Produces a loobean. ------------------------------------------------------------------------ -### +-put:ju +

+-put:ju

Add key-set pair @@ -242,7 +242,7 @@ Produces jar `a` with `c` added to the set value located at key `b`. ------------------------------------------------------------------------ -### ++by +

++by

Map operations @@ -260,7 +260,7 @@ pairs. The contained arms inherit it's [sample]() [map](), `a`. ------------------------------------------------------------------------ -### +-all:by +

+-all:by

Logical AND @@ -290,7 +290,7 @@ Computes the logical AND on the results of slamming every element in map ------------------------------------------------------------------------ -### +-any:by +

+-any:by

Logical OR @@ -318,7 +318,7 @@ gate `b`. Produces a loobean. ------------------------------------------------------------------------ -### +-del:by +

+-del:by

Delete @@ -351,7 +351,7 @@ Produces map `a` with the element located at key `b` removed. ------------------------------------------------------------------------ -### +-dig:by +

+-dig:by

Axis of key @@ -377,7 +377,7 @@ Produce the axis of key `b` within map `a`. ------------------------------------------------------------------------ -### +-gas:by +

+-gas:by

Concatenate @@ -403,7 +403,7 @@ Insert a list of key-value pairs `b` into map `a`. ------------------------------------------------------------------------ -### +-get:by +

+-get:by

Grab unit value @@ -431,7 +431,7 @@ Produce the unit value of the value located at key `b` within map `a`. ------------------------------------------------------------------------ -### +-got:by +

+-got:by

Assert @@ -459,7 +459,7 @@ does not exist. ------------------------------------------------------------------------ -### +-has:by +

+-has:by

Key existence check @@ -483,7 +483,7 @@ loobean. ------------------------------------------------------------------------ -### +-int:by +

+-int:by

Intersection @@ -539,7 +539,7 @@ different values, the element from map `b` is used. ------------------------------------------------------------------------ -### +-mar:by +

+-mar:by

Assert and Add @@ -575,7 +575,7 @@ XX This arm is broken, asana task 15186618346453 ------------------------------------------------------------------------ -### +-put:by +

+-put:by

Add key-value pair @@ -621,7 +621,7 @@ Produces `a` with the addition of the key-value pair of `b` and `c`. ------------------------------------------------------------------------ -### +-rep:by +

+-rep:by

+- rep :: replace by product |* [b=* c=_,*] @@ -635,7 +635,7 @@ XX interface changing. ------------------------------------------------------------------------ -### +-rib:by +

+-rib:by

+- rib :: transform + product |* [b=* c=_,*] @@ -653,7 +653,7 @@ XX interface changing, possibly disappearing ------------------------------------------------------------------------ -### +-run:by +

+-run:by

Transform values @@ -678,7 +678,7 @@ Iterates over every value in set `a` using gate `b`. Produces a map. ------------------------------------------------------------------------ -### +-tap:by +

+-tap:by

Listify pairs @@ -707,7 +707,7 @@ Produces the list of all elements in map `a` that is prepended to list ------------------------------------------------------------------------ -### +-uni:by +

+-uni:by

Union @@ -758,7 +758,7 @@ shares a key with `a`, the tuple from `a` is preserved. ------------------------------------------------------------------------ -### +-urn:by +

+-urn:by

Turn (with key) @@ -787,7 +787,7 @@ produces a noun (the new value). ------------------------------------------------------------------------ -### +-wyt:by +

+-wyt:by

Depth diff --git a/docs/pub/doc/hoon/library/2dc.md b/base/pub/doc/hoon/library/2dc.md similarity index 93% rename from docs/pub/doc/hoon/library/2dc.md rename to base/pub/doc/hoon/library/2dc.md index 78f3f64f8..653e159f6 100644 --- a/docs/pub/doc/hoon/library/2dc.md +++ b/base/pub/doc/hoon/library/2dc.md @@ -1,7 +1,7 @@ section 2dC, queues =================== -### ++to +

++to

Queue engine @@ -13,7 +13,7 @@ Container arm for queue operation arms. The contained arms inherit its `a` is a queue, [++qeu](). -### +-bal:to +

+-bal:to

Balance @@ -42,7 +42,7 @@ Vertically rebalances queue `a`. ------------------------------------------------------------------------ -### +-dep:to +

+-dep:to

Maximum Depth @@ -72,7 +72,7 @@ Produces the maximum depth of leaves (r.a and l.a) in queue `a`. ------------------------------------------------------------------------ -### +-gas +

+-gas

Push list @@ -97,7 +97,7 @@ Push all elements of list `b` into the queue. ------------------------------------------------------------------------ -### +-get:to +

+-get:to

Pop @@ -126,7 +126,7 @@ Produces the head and tail queue of `a`. ------------------------------------------------------------------------ -### +-nap:to +

+-nap:to

Remove last in @@ -154,7 +154,7 @@ Removes the head of queue `a`, producing the resulting queue. ------------------------------------------------------------------------ -### +-put:to +

+-put:to

Insert @@ -179,7 +179,7 @@ resulting queue. ------------------------------------------------------------------------ -### +-tap:to +

+-tap:to

Queue to list @@ -203,7 +203,7 @@ Produces queue `a` as a list from front to back. ------------------------------------------------------------------------ -### +-top:to +

+-top:to

+- top :: produces head |- ^- (unit ,_?>(?=(^ a) n.a)) diff --git a/docs/pub/doc/hoon/library/2dd.md b/base/pub/doc/hoon/library/2dd.md similarity index 93% rename from docs/pub/doc/hoon/library/2dd.md rename to base/pub/doc/hoon/library/2dd.md index e60f84c2c..0b49e99ec 100644 --- a/docs/pub/doc/hoon/library/2dd.md +++ b/base/pub/doc/hoon/library/2dd.md @@ -1,7 +1,7 @@ section 2dD, casual containers ============================== -### ++mo +

++mo

Map from list @@ -23,7 +23,7 @@ Produces a map of key-value pairs from the left-right cell pairs of list ------------------------------------------------------------------------ -### ++sa +

++sa

Set from list @@ -45,7 +45,7 @@ Produces a set of the elements in list `a`. ------------------------------------------------------------------------ -### ++qu +

++qu

Queue from list diff --git a/docs/pub/doc/hoon/library/2ea.md b/base/pub/doc/hoon/library/2ea.md similarity index 96% rename from docs/pub/doc/hoon/library/2ea.md rename to base/pub/doc/hoon/library/2ea.md index 31fd555df..31f5641e6 100644 --- a/docs/pub/doc/hoon/library/2ea.md +++ b/base/pub/doc/hoon/library/2ea.md @@ -1,7 +1,7 @@ section 2eA, packing ==================== -### ++cue +

++cue

Unpack atom to noun @@ -41,7 +41,7 @@ Produces a noun unpacked from atom `a`. The inverse of jam. ------------------------------------------------------------------------ -### ++jam +

++jam

++ jam :: pack ~/ %jam @@ -83,7 +83,7 @@ Produces an atom unpacked from noun `a`. The inverse of cue. ------------------------------------------------------------------------ -### ++mat +

++mat

Length-encode @@ -123,7 +123,7 @@ is the length of `q` in bits. ------------------------------------------------------------------------ -### ++rub +

++rub

Length-decode diff --git a/docs/pub/doc/hoon/library/2eb.md b/base/pub/doc/hoon/library/2eb.md similarity index 94% rename from docs/pub/doc/hoon/library/2eb.md rename to base/pub/doc/hoon/library/2eb.md index 67609aa37..333700928 100644 --- a/docs/pub/doc/hoon/library/2eb.md +++ b/base/pub/doc/hoon/library/2eb.md @@ -1,7 +1,7 @@ section 2eB, parsing (tracing) ============================== -### ++last +

++last

Farther trace @@ -30,7 +30,7 @@ Compares two line-column pairs, `zyc` and `naz`, and produces whichever ------------------------------------------------------------------------ -### ++lust +

++lust

Detect newline diff --git a/docs/pub/doc/hoon/library/2ec.md b/base/pub/doc/hoon/library/2ec.md similarity index 95% rename from docs/pub/doc/hoon/library/2ec.md rename to base/pub/doc/hoon/library/2ec.md index aed4f419a..9e5cfdedb 100644 --- a/docs/pub/doc/hoon/library/2ec.md +++ b/base/pub/doc/hoon/library/2ec.md @@ -1,7 +1,7 @@ section 2eC, parsing (custom rules) =================================== -### ++cold +

++cold

Replace with constant @@ -30,7 +30,7 @@ produces a constant `cus`, if `sef` is successful. ------------------------------------------------------------------------ -### ++cook +

++cook

Apply gate @@ -63,7 +63,7 @@ rule `sef` and slams it through `poq`. ------------------------------------------------------------------------ -### ++easy +

++easy

Always parse @@ -88,7 +88,7 @@ without consuming any text. ------------------------------------------------------------------------ -### ++fail +

++fail

Never parse @@ -106,7 +106,7 @@ result (`q=~`). ------------------------------------------------------------------------ -### ++full +

++full

Parse to end @@ -131,7 +131,7 @@ when a `tub` success consumes the remainder of the [tape](). ------------------------------------------------------------------------ -### ++funk +

++funk

Add to tape @@ -154,7 +154,7 @@ Parser modifier: prepend text to tape before applying parser. ------------------------------------------------------------------------ -### ++here +

++here

Place-based apply @@ -186,7 +186,7 @@ Parser modifier. Similar to [`++cook`](), produces a parser that takes a ------------------------------------------------------------------------ -### ++inde +

++inde

Indentation block @@ -231,7 +231,7 @@ the leading whitespace. ------------------------------------------------------------------------ -### ++jest +

++jest

Match a cord @@ -266,7 +266,7 @@ Match and consume a cord. ------------------------------------------------------------------------ -### ++just +

++just

Match a char @@ -300,7 +300,7 @@ Match and consume a single character. ------------------------------------------------------------------------ -### ++knee +

++knee

Recursive parsers @@ -341,7 +341,7 @@ compiled. ------------------------------------------------------------------------ -### ++mask +

++mask

Match char @@ -374,7 +374,7 @@ characters. ------------------------------------------------------------------------ -### ++next +

++next

Consume char @@ -398,7 +398,7 @@ Consume any character, producing it as a result. ------------------------------------------------------------------------ -### ++sear +

++sear

Conditional `++cook` @@ -417,7 +417,7 @@ Conditional `++cook` Conditional [`++cook`](). Slams the result through a gate that produces a unit; if that unit is empty, fail. -`tub` is a [`++nail`]() +`tub` is a [`++nail`](/doc/hoon/library/1#++nail) ~zod/try=> ((sear |=(a=* ?@(a (some a) ~)) (just `a`)) [[1 1] "abc"]) [p=[p=1 q=2] q=[~ u=[p=97 q=[p=[p=1 q=2] q="bc"]]]] @@ -426,7 +426,7 @@ a unit; if that unit is empty, fail. ------------------------------------------------------------------------ -### ++shim +

++shim

Char in range @@ -456,7 +456,7 @@ Match characters within a range. ------------------------------------------------------------------------ -### ++stag +

++stag

Add label @@ -486,7 +486,7 @@ Add a label to an edge parsed by a rule. ------------------------------------------------------------------------ -### ++stet +

++stet

Add faces @@ -523,7 +523,7 @@ Add `[p q]` faces to range-parser pairs in a list. ------------------------------------------------------------------------ -### ++stew +

++stew

Switch by first @@ -578,7 +578,7 @@ associated with a range the tape's first character falls in. ------------------------------------------------------------------------ -### ++stir +

++stir

Parse repeatedly @@ -612,7 +612,7 @@ binary gate. ------------------------------------------------------------------------ -### ++stun +

++stun

Parse several times diff --git a/docs/pub/doc/hoon/library/2ed.md b/base/pub/doc/hoon/library/2ed.md similarity index 95% rename from docs/pub/doc/hoon/library/2ed.md rename to base/pub/doc/hoon/library/2ed.md index c31280f24..63671e04e 100644 --- a/docs/pub/doc/hoon/library/2ed.md +++ b/base/pub/doc/hoon/library/2ed.md @@ -1,7 +1,7 @@ section 2eD =========== -### ++bend +

++bend

Conditional composer @@ -50,7 +50,7 @@ group of rules to a specified output. ------------------------------------------------------------------------ -### ++comp +

++comp

Arbitrary compose @@ -87,7 +87,7 @@ produces a cell of two nouns. ------------------------------------------------------------------------ -### ++glue +

++glue

Skip delimiter @@ -120,7 +120,7 @@ result. ------------------------------------------------------------------------ -### ++less +

++less

Parse unless @@ -150,7 +150,7 @@ connect `vex` with the following rule. ------------------------------------------------------------------------ -### ++pfix +

++pfix

Discard first rule @@ -171,7 +171,7 @@ ignoring the result of the first and producing the result of the second. ------------------------------------------------------------------------ -### ++plug +

++plug

Parse to tuple @@ -204,7 +204,7 @@ more detailed explanation. ------------------------------------------------------------------------ -### ++pose +

++pose

Parse options @@ -235,7 +235,7 @@ following rule `sab`. See also: the monad applicator [;\~]() ------------------------------------------------------------------------ -### ++simu +

++simu

First and second @@ -266,7 +266,7 @@ connect `vex` with the following rule. ------------------------------------------------------------------------ -### ++sfix +

++sfix

Discard second rule diff --git a/docs/pub/doc/hoon/library/2ee.md b/base/pub/doc/hoon/library/2ee.md similarity index 93% rename from docs/pub/doc/hoon/library/2ee.md rename to base/pub/doc/hoon/library/2ee.md index 9ad969783..b98d3c2fc 100644 --- a/docs/pub/doc/hoon/library/2ee.md +++ b/base/pub/doc/hoon/library/2ee.md @@ -1,7 +1,7 @@ section 2eE, parsing (composers) ================================ -### ++bass +

++bass

++ bass |* [wuc=@ tyd=_rule] @@ -30,7 +30,7 @@ as atom of a base. ------------------------------------------------------------------------ -### ++boss +

++boss

++ boss |* [wuc=@ tyd=_rule] @@ -59,7 +59,7 @@ as atom of a base. ------------------------------------------------------------------------ -### ++ifix +

++ifix

++ ifix |* [fel=[p=_rule q=_rule] hof=_rule] @@ -80,7 +80,7 @@ discarded. ------------------------------------------------------------------------ -### ++more +

++more

++ more |* [bus=_rule fel=_rule] @@ -102,7 +102,7 @@ Parser modifier: using a delimiter rule, parse a list of matches. ------------------------------------------------------------------------ -### ++most +

++most

++ most |* [bus=_rule fel=_rule] @@ -126,7 +126,7 @@ match. ------------------------------------------------------------------------ -### ++plus +

++plus

++ plus |*(fel=_rule ;~(plug fel (star fel))) @@ -145,7 +145,7 @@ Parser modifier: parse list of at least one match ------------------------------------------------------------------------ -### ++slug +

++slug

++ slug |* raq=_|*([a=* b=*] [a b]) @@ -167,7 +167,7 @@ matches. ------------------------------------------------------------------------ -### ++star +

++star

++ star :: 0 or more times |* fel=_rule diff --git a/docs/pub/doc/hoon/library/2ef.md b/base/pub/doc/hoon/library/2ef.md similarity index 90% rename from docs/pub/doc/hoon/library/2ef.md rename to base/pub/doc/hoon/library/2ef.md index f0f1bef94..59185d3e4 100644 --- a/docs/pub/doc/hoon/library/2ef.md +++ b/base/pub/doc/hoon/library/2ef.md @@ -1,7 +1,7 @@ section 2eF, parsing (ascii) ============================ -### ++ace +

++ace

Parse space @@ -20,7 +20,7 @@ Parses ASCII character 32, space. ------------------------------------------------------------------------ -### ++bar +

++bar

Parse vertical bar @@ -39,14 +39,14 @@ Parses ASCII character 124, the vertical bar. ------------------------------------------------------------------------ -### ++bas +

++bas

Parse backslash ++ bas (just '\\') Parses ASCII character 92, the backslash. Note the extra `\` in the slam -of `bas` with [`++just`]() is to escape the escape character, `\`. +of `bas` with [`++just`](/doc/hoon/library/2ec#++just) is to escape the escape character, `\`. ~zod/try=> (scan "\\" bas) ~~~5c. @@ -61,7 +61,7 @@ of `bas` with [`++just`]() is to escape the escape character, `\`. ------------------------------------------------------------------------ -### ++buc +

++buc

Parse dollar sign @@ -80,7 +80,7 @@ Parses ASCII character 36, the dollar sign. ------------------------------------------------------------------------ -### ++cab +

++cab

Parse underscore @@ -99,7 +99,7 @@ Parses ASCII character 95, the underscore. ------------------------------------------------------------------------ -### ++cen +

++cen

Parses percent sign @@ -118,7 +118,7 @@ Parses ASCII character 37, the percent sign. ------------------------------------------------------------------------ -### ++col +

++col

Parse colon @@ -137,7 +137,7 @@ Parses ASCII character 58, the colon ------------------------------------------------------------------------ -### ++com +

++com

Parse comma @@ -156,7 +156,7 @@ Parses ASCII character 44, the comma. ------------------------------------------------------------------------ -### ++doq +

++doq

Parse double quote @@ -179,7 +179,7 @@ Parses ASCII character 34, the double quote. ------------------------------------------------------------------------ -### ++dot +

++dot

Parse period @@ -198,7 +198,7 @@ Parses ASCII character 46, the period. ------------------------------------------------------------------------ -### ++fas +

++fas

Parse forward slash @@ -217,7 +217,7 @@ Parses ASCII character 47, the forward slash. ------------------------------------------------------------------------ -### ++gal +

++gal

Parse less-than sign @@ -238,7 +238,7 @@ Parses ASCII character 60, the less-than sign. ------------------------------------------------------------------------ -### ++gar +

++gar

Parse greater-than sign @@ -257,7 +257,7 @@ Parses ASCII character 62, the greater-than sign. ------------------------------------------------------------------------ -### ++hax +

++hax

Parse number sign @@ -276,7 +276,7 @@ Parses ASCII character 35, the number sign. ------------------------------------------------------------------------ -### ++kel +

++kel

Parse left curley bracket @@ -297,7 +297,7 @@ interpolation. To parse either of them, they must be escaped. ------------------------------------------------------------------------ -### ++ker +

++ker

Parse right curley bracket @@ -318,7 +318,7 @@ interpolation. To parse either of them, they must be escaped. ------------------------------------------------------------------------ -### ++ket +

++ket

Parse caret @@ -337,7 +337,7 @@ Parses ASCII character 94, the caret. ------------------------------------------------------------------------ -### ++lus +

++lus

Parse plus sign @@ -356,7 +356,7 @@ Parses ASCII character 43, the plus sign. ------------------------------------------------------------------------ -### ++hep +

++hep

Parse hyphen @@ -375,7 +375,7 @@ Parses ASCII character 45, the hyphen. ------------------------------------------------------------------------ -### ++pel +

++pel

Parse left parenthesis @@ -394,7 +394,7 @@ Parses ASCII character 40, the left parenthesis. ------------------------------------------------------------------------ -### ++pam +

++pam

Parse ampersand @@ -413,7 +413,7 @@ Parses ASCII character 38, the ampersand. ------------------------------------------------------------------------ -### ++per +

++per

Parse right parenthesis @@ -432,7 +432,7 @@ Parses ASCII character 41, the right parenthesis. ------------------------------------------------------------------------ -### ++pat +

++pat

Parse "at" sign @@ -451,7 +451,7 @@ Parses ASCII character 64, the "at" sign. ------------------------------------------------------------------------ -### ++sel +

++sel

Parse left square bracket @@ -472,7 +472,7 @@ Parses ASCII character 91, the left square bracket. ------------------------------------------------------------------------ -### ++sem +

++sem

Parse semicolon @@ -480,7 +480,7 @@ Parse semicolon Parses ASCII character 59, the semicolon. -### Examples +

Examples

~zod/try=> (scan ";" sem) ~~~3b. @@ -493,7 +493,7 @@ Parses ASCII character 59, the semicolon. ------------------------------------------------------------------------ -### ++ser +

++ser

Parse right square bracket @@ -512,7 +512,7 @@ Parses ASCII character 93, the right square bracket. ------------------------------------------------------------------------ -### ++sig +

++sig

Parse tilde @@ -531,7 +531,7 @@ Parses ASCII character 126, the tilde. ------------------------------------------------------------------------ -### ++soq +

++soq

Parse single quote @@ -551,7 +551,7 @@ Parses ASCII character 39, soq. Note the extra '' is to escape the first ------------------------------------------------------------------------ -### ++tar +

++tar

Parse asterisk @@ -570,7 +570,7 @@ Parses ASCII character 42, the asterisk. ------------------------------------------------------------------------ -### ++tec +

++tec

Parse backtick @@ -590,7 +590,7 @@ accent". ------------------------------------------------------------------------ -### ++tis +

++tis

Parse equals sign @@ -609,7 +609,7 @@ Parses ASCII character 61, the equals sign. ------------------------------------------------------------------------ -### ++wut +

++wut

Parses question mark @@ -628,7 +628,7 @@ Parses ASCII character 63, wut. ------------------------------------------------------------------------ -### ++zap +

++zap

Exclamation point diff --git a/docs/pub/doc/hoon/library/2eg.md b/base/pub/doc/hoon/library/2eg.md similarity index 90% rename from docs/pub/doc/hoon/library/2eg.md rename to base/pub/doc/hoon/library/2eg.md index 73289c668..b889896c4 100644 --- a/docs/pub/doc/hoon/library/2eg.md +++ b/base/pub/doc/hoon/library/2eg.md @@ -1,7 +1,7 @@ section 2eG, parsing (whitespace) ================================= -### ++dog +

++dog

`.` optional gap @@ -17,7 +17,7 @@ Dot followed by an optional gap, used in numbers. ------------------------------------------------------------------------ -### ++doh +

++doh

`@p` separator @@ -37,7 +37,7 @@ Phonetic base phrase separator ------------------------------------------------------------------------ -### ++dun +

++dun

`--` to `~` @@ -52,7 +52,7 @@ Parse phep, `--`, to null, `~`. ------------------------------------------------------------------------ -### ++duz +

++duz

`==` to `~` @@ -67,7 +67,7 @@ Parse stet, `==`, to null `~`. ------------------------------------------------------------------------ -### ++gah +

++gah

Newline or ' ' @@ -96,7 +96,7 @@ Whitespace component, either newline or space. ------------------------------------------------------------------------ -### ++gap +

++gap

Plural whitespace @@ -106,7 +106,7 @@ Separates tall runes ------------------------------------------------------------------------ -### ++gaq +

++gaq

End of line @@ -120,7 +120,7 @@ Two spaces, a newline, or comment. ------------------------------------------------------------------------ -### ++gaw +

++gaw

Classic whitespace @@ -130,7 +130,7 @@ Terran whitespace ------------------------------------------------------------------------ -### ++gay +

++gay

Optional gap. @@ -140,7 +140,7 @@ Optional gap. ------------------------------------------------------------------------ -### ++vul +

++vul

++ vul %- cold :- ~ :: comments ;~ plug col col diff --git a/docs/pub/doc/hoon/library/2eh.md b/base/pub/doc/hoon/library/2eh.md similarity index 92% rename from docs/pub/doc/hoon/library/2eh.md rename to base/pub/doc/hoon/library/2eh.md index 3fff19596..6c5fbdae2 100644 --- a/docs/pub/doc/hoon/library/2eh.md +++ b/base/pub/doc/hoon/library/2eh.md @@ -1,7 +1,7 @@ section 2eH, parsing (idioms) ============================= -### ++alf +

++alf

Alphabetic characters @@ -18,7 +18,7 @@ Parse alphabetic characters, both upper and lowercase. ------------------------------------------------------------------------ -### ++aln +

++aln

Alphanumeric characters @@ -35,7 +35,7 @@ Parse alphanumeric characters - both alphabetic characters and numbers. ------------------------------------------------------------------------ -### ++alp +

++alp

Alphanumeric and `-` @@ -52,7 +52,7 @@ Parse alphanumeric strings and hep, "-". ------------------------------------------------------------------------ -### ++bet +

++bet

Axis syntax `-`, `+` @@ -67,7 +67,7 @@ Parse the hep and lus axis syntax. ------------------------------------------------------------------------ -### ++bin +

++bin

Binary to atom @@ -87,7 +87,7 @@ representation. ------------------------------------------------------------------------ -### ++but +

++but

Binary digit @@ -108,7 +108,7 @@ Parse a single binary digit. ------------------------------------------------------------------------ -### ++cit +

++cit

Octal digit @@ -129,7 +129,7 @@ Parse a single octal digit. ------------------------------------------------------------------------ -### ++dem +

++dem

Decimal to atom @@ -148,7 +148,7 @@ Parse a decimal number to an atom. ------------------------------------------------------------------------ -### ++dit +

++dit

Decimal digit @@ -165,7 +165,7 @@ Parse a single decimal digit. ------------------------------------------------------------------------ -### ++gul +

++gul

Axis syntax `<` or `>` @@ -180,7 +180,7 @@ Parse the axis gal and gar axis syntax. ------------------------------------------------------------------------ -### ++gon +

++gon

Long numbers @@ -196,7 +196,7 @@ break characters bas and fas. ------------------------------------------------------------------------ -### ++hex +

++hex

Hex to atom @@ -221,7 +221,7 @@ Parse any hexadecimal number to an atom. ------------------------------------------------------------------------ -### ++hig +

++hig

Uppercase @@ -240,7 +240,7 @@ Parse a single uppercase letter. ------------------------------------------------------------------------ -### ++hit +

++hit

Hex digits @@ -263,7 +263,7 @@ Parse a single hexadecimal digit. ------------------------------------------------------------------------ -### ++low +

++low

Lowercase @@ -282,7 +282,7 @@ Parse a single lowercase letter. ------------------------------------------------------------------------ -### ++mes +

++mes

Hexbyte @@ -301,7 +301,7 @@ Parse a hexbyte. ------------------------------------------------------------------------ -### ++nix +

++nix

Letters, `-`, and `_` @@ -316,7 +316,7 @@ Letters, `-`, and `_` ------------------------------------------------------------------------ -### ++nud +

++nud

Numeric @@ -335,7 +335,7 @@ Parse a numeric character - A number. ------------------------------------------------------------------------ -### ++prn +

++prn

Printable character @@ -353,7 +353,7 @@ Parse any printable character ------------------------------------------------------------------------ -### ++qat +

++qat

Chars in blockcord @@ -376,7 +376,7 @@ Parse character in cord block. ------------------------------------------------------------------------ -### ++qit +

++qit

Chars in cord @@ -406,7 +406,7 @@ Parse an individual character to its cord atom representation. ------------------------------------------------------------------------ -### ++qut +

++qut

Cord @@ -439,7 +439,7 @@ triple-soq cord which must be in an indented block. ------------------------------------------------------------------------ -### ++soqs +

++soqs

Delimiting `'''` @@ -455,7 +455,7 @@ Triple single quote ------------------------------------------------------------------------ -### ++sym +

++sym

Term @@ -476,7 +476,7 @@ A term: a letter(lowercase), followed by letters, numbers, or `-`. ------------------------------------------------------------------------ -### ++ven +

++ven

`+>-` axis syntax @@ -506,7 +506,7 @@ Axis syntax parser ------------------------------------------------------------------------ -### ++vit +

++vit

Base64 digit diff --git a/docs/pub/doc/hoon/library/2ei.md b/base/pub/doc/hoon/library/2ei.md similarity index 94% rename from docs/pub/doc/hoon/library/2ei.md rename to base/pub/doc/hoon/library/2ei.md index c5c304c5b..acb609c8f 100644 --- a/docs/pub/doc/hoon/library/2ei.md +++ b/base/pub/doc/hoon/library/2ei.md @@ -1,7 +1,7 @@ section 2eI, parsing (external) =============================== -### ++rash +

++rash

Parse or crash @@ -29,7 +29,7 @@ parsed. ------------------------------------------------------------------------ -### ++rush +

++rush

Parse or null @@ -55,7 +55,7 @@ entirely parsed. ------------------------------------------------------------------------ -### ++rust +

++rust

Parse tape or null @@ -79,7 +79,7 @@ entirely parsed. ------------------------------------------------------------------------ -### ++scan +

++scan

Parse tape or crash diff --git a/docs/pub/doc/hoon/library/2ej.md b/base/pub/doc/hoon/library/2ej.md similarity index 93% rename from docs/pub/doc/hoon/library/2ej.md rename to base/pub/doc/hoon/library/2ej.md index a445efefc..d07dd4a5e 100644 --- a/docs/pub/doc/hoon/library/2ej.md +++ b/base/pub/doc/hoon/library/2ej.md @@ -1,7 +1,7 @@ section 2eJ, formatting (basic text) ==================================== -### ++cass +

++cass

To lowercase @@ -26,7 +26,7 @@ Produce the case insensitive (all lowercase) cord of a tape. ------------------------------------------------------------------------ -### ++cuss +

++cuss

To uppercase @@ -53,7 +53,7 @@ letters, as a cord. ------------------------------------------------------------------------ -### ++crip +

++crip

Tape to cord @@ -72,7 +72,7 @@ Produce cord from a tape. ------------------------------------------------------------------------ -### ++mesc +

++mesc

Escape special chars @@ -88,7 +88,7 @@ Escape special chars [i.vib $(vib t.vib)] :: -Escape special characters, used in [`++show`]() +Escape special characters, used in [`++show`](/doc/hoon/library/2ez#++show) `vib` is a [tape](). @@ -101,7 +101,7 @@ Escape special characters, used in [`++show`]() ------------------------------------------------------------------------ -### ++runt +

++runt

Prepend `n` times @@ -126,7 +126,7 @@ Add `a` repetitions of character `b` to the head of `c` ------------------------------------------------------------------------ -### ++sand +

++sand

Soft-cast by odor @@ -149,7 +149,7 @@ Soft-cast validity by odor. ------------------------------------------------------------------------ -### ++sane +

++sane

Check odor validity @@ -204,7 +204,7 @@ Check validity by odor. Produces a gate. ------------------------------------------------------------------------ -### ++trim +

++trim

Tape split @@ -232,7 +232,7 @@ Split first `a` characters off tape. ------------------------------------------------------------------------ -### ++trip +

++trip

Cord to tape @@ -257,7 +257,7 @@ Produce tape from cord. ------------------------------------------------------------------------ -### ++teff +

++teff

UTF8 Length @@ -281,7 +281,7 @@ Number of utf8 bytes. ------------------------------------------------------------------------ -### ++turf +

++turf

UTF8 to UTF32 cord @@ -322,7 +322,7 @@ Convert utf8 ([cord]()) to utf32 codepoints. ------------------------------------------------------------------------ -### ++tuba +

++tuba

UTF8 to UTF32 tape @@ -343,7 +343,7 @@ Convert tape to list of codepoints. ------------------------------------------------------------------------ -### ++tufa +

++tufa

UTF32 to UTF8 tape @@ -365,7 +365,7 @@ Wrap list of utf32 codepoints to utf8 [tape](). ------------------------------------------------------------------------ -### ++tuft +

++tuft

UTF32 to UTF8 text @@ -411,7 +411,7 @@ Convert utf32 glyph to ------------------------------------------------------------------------ -### ++wack +

++wack

Coin format encode @@ -443,7 +443,7 @@ Escape span `~` as `~~` and `_` as `~-`. Used for printing. ------------------------------------------------------------------------ -### ++wick +

++wick

Coin format decode @@ -472,7 +472,7 @@ Unescape span `~~` as `~` and `~-` as `_`. ------------------------------------------------------------------------ -### ++woad +

++woad

Unescape cord @@ -519,7 +519,7 @@ Unescape cord codepoints. ------------------------------------------------------------------------ -### ++wood +

++wood

Escape cord diff --git a/docs/pub/doc/hoon/library/2ek.md b/base/pub/doc/hoon/library/2ek.md similarity index 92% rename from docs/pub/doc/hoon/library/2ek.md rename to base/pub/doc/hoon/library/2ek.md index a0d4372f7..57c9a3168 100644 --- a/docs/pub/doc/hoon/library/2ek.md +++ b/base/pub/doc/hoon/library/2ek.md @@ -1,7 +1,7 @@ section 2eK, formatting (layout) ================================ -### ++re +

++re

Pretty-printing engine @@ -10,12 +10,12 @@ Pretty-printing engine Pretty-printing engine. -`tac` is a [`++tank`](). +`tac` is a [`++tank`](/doc/hoon/library/1#++tank). /~zod/try=> ~(. re leaf/"ham") <2.ghl [[%leaf ""] <414.gly 100.xkc 1.ypj %164>]> -### ++ram +

++ram

Flatten to tape @@ -42,7 +42,7 @@ Flatten tank out into a tape. /~zod/try=> ~(ram re rose/["." "(" ")"]^~[leaf/"bar" leaf/"baz" leaf/"bam"]) "(bar.baz.bam)" -### ++win +

++win

Render at indent @@ -99,13 +99,13 @@ Render at indent level `tab` and width `edg`. /~zod/try=> (~(win re rose/["--" "[" "]"]^~[leaf/"1423" leaf/"2316"]) 0 10) <<"[ 1423" " 2316" "]">> -### ++din +

++din

++ din (mod (add 2 tab) (mul 2 (div edg 3))) XX document -### ++fit +

++fit

Fit on one line test @@ -113,7 +113,7 @@ Fit on one line test Determine whether `tac` fits on one line. Internal to `++win` -### ++rig +

++rig

Wrap in `\/` @@ -139,7 +139,7 @@ Wrap in `\/` Wrap tape in `\/` if it doesn't fit at current indentation. Internal to `++win` -### ++wig +

++wig

`++win` render tape diff --git a/docs/pub/doc/hoon/library/2el.md b/base/pub/doc/hoon/library/2el.md similarity index 93% rename from docs/pub/doc/hoon/library/2el.md rename to base/pub/doc/hoon/library/2el.md index 243889127..77f165867 100644 --- a/docs/pub/doc/hoon/library/2el.md +++ b/base/pub/doc/hoon/library/2el.md @@ -1,7 +1,7 @@ section 2eL, formatting (path) ============================== -### ++ab +

++ab

Primitive parser engine @@ -15,7 +15,7 @@ A core containing numeric parser primitives. ------------------------------------------------------------------------ -### ++bix +

++bix

Parse hex pair @@ -32,7 +32,7 @@ Parsing rule. Parses a pair of base-16 digits. Used in escapes. ------------------------------------------------------------------------ -### ++hif +

++hif

Parse phonetic pair @@ -48,7 +48,7 @@ encoded phonetically. ------------------------------------------------------------------------ -### ++huf +

++huf

Parse two phonetic pairs @@ -68,7 +68,7 @@ of two two-byte pairs that are encoded (and scrambled) phonetically. ------------------------------------------------------------------------ -### ++hyf +

++hyf

Parse 8 phonetic bytes @@ -84,7 +84,7 @@ phonetic bytes. ------------------------------------------------------------------------ -### ++pev +

++pev

Parse \<= 5 base-32 @@ -104,7 +104,7 @@ Parsing rule. Parses up to five base-32 digits without a leading zero. ------------------------------------------------------------------------ -### ++pew +

++pew

Parse \<= 5 base-64 @@ -127,7 +127,7 @@ Parsing rule. Parses up to five base-64 digits without a leading zero. ------------------------------------------------------------------------ -### ++piv +

++piv

Parse 5 base-32 @@ -143,7 +143,7 @@ Parsing rule. Parses exactly five base-32 digits. ------------------------------------------------------------------------ -### ++piw +

++piw

Parse 5 base-64 @@ -159,7 +159,7 @@ Parsing rule. Parses exactly five base-64 digits. ------------------------------------------------------------------------ -### ++qeb +

++qeb

Parse \<= 4 binary @@ -183,7 +183,7 @@ a leading zero. ------------------------------------------------------------------------ -### ++qex +

++qex

Parse \<= 4 hex @@ -205,7 +205,7 @@ without a leading zero. ------------------------------------------------------------------------ -### ++qib +

++qib

Parse 4 binary @@ -223,7 +223,7 @@ Parsing rule. Parses exactly four binary digits. ------------------------------------------------------------------------ -### ++qix +

++qix

Parse 4 hex @@ -241,7 +241,7 @@ Parsing rule. Parses exactly four hexadecimal digits. ------------------------------------------------------------------------ -### ++seb +

++seb

Parse 1 @@ -260,7 +260,7 @@ Parsing rule. Parses the number 1. ------------------------------------------------------------------------ -### ++sed +

++sed

Parse decimal @@ -276,7 +276,7 @@ Parsing rule. Parses a nonzero decimal digit. ------------------------------------------------------------------------ -### ++sev +

++sev

Parse base-32 @@ -292,7 +292,7 @@ Parsing rule. Parses a nonzero base-32 digit ------------------------------------------------------------------------ -### ++sew +

++sew

Parse base-64 @@ -308,7 +308,7 @@ Parsing rule. Parses a nonzero base-64 digit ------------------------------------------------------------------------ -### ++sex +

++sex

Parse hex @@ -324,7 +324,7 @@ Parsing rule. Parses a nonzero hexadecimal digit. ------------------------------------------------------------------------ -### ++sib +

++sib

Parse binary @@ -339,7 +339,7 @@ Parsing rule. Parses a binary digit. ------------------------------------------------------------------------ -### ++sid +

++sid

Parse decimal @@ -352,7 +352,7 @@ Parsing rule. Parses a decimal digit. ------------------------------------------------------------------------ -### ++siv +

++siv

Parse base-32 @@ -365,7 +365,7 @@ Parsing rule. Parses a base-32 digit. ------------------------------------------------------------------------ -### ++siw +

++siw

Parse base-64 @@ -378,7 +378,7 @@ Parsing rule. Parses a base-64 digit. ------------------------------------------------------------------------ -### ++six +

++six

Parse hex @@ -391,7 +391,7 @@ Parsing rule. Parses a hexadecimal digit. ------------------------------------------------------------------------ -### ++sov +

++sov

Parse base-32 @@ -404,7 +404,7 @@ Parsing rule. Parses a base-32 letter. ------------------------------------------------------------------------ -### ++sow +

++sow

Parse base-64 @@ -422,7 +422,7 @@ Parsing rule. Parses a base-64 letter/symbol. ------------------------------------------------------------------------ -### ++sox +

++sox

Parse hex letter @@ -435,7 +435,7 @@ Parsing rule. Parses a hexadecimal letter. ------------------------------------------------------------------------ -### ++ted +

++ted

Parse \<= 3 decimal @@ -456,7 +456,7 @@ leading zero. ------------------------------------------------------------------------ -### ++tip +

++tip

Leading phonetic byte @@ -472,7 +472,7 @@ syllable. ------------------------------------------------------------------------ -### ++tiq +

++tiq

Trailing phonetic syllable @@ -488,7 +488,7 @@ syllable. ------------------------------------------------------------------------ -### ++tid +

++tid

Parse 3 decimal digits @@ -504,7 +504,7 @@ Parsing rule. Parses exactly three decimal digits. ------------------------------------------------------------------------ -### ++til +

++til

Parse 3 lowercase @@ -522,7 +522,7 @@ Parsing rule. Parses exactly three lowercase letters. ------------------------------------------------------------------------ -### ++urs +

++urs

Parse span characters @@ -539,7 +539,7 @@ Parsing rule. Parses characters from an atom of the span odor [`@ta`](). ------------------------------------------------------------------------ -### ++urt +

++urt

Parse non-`_` span @@ -555,7 +555,7 @@ for cab, `_`. ------------------------------------------------------------------------ -### ++voy +

++voy

Parse bas, soq, or bix @@ -571,7 +571,7 @@ byte. ------------------------------------------------------------------------ -### ++ag +

++ag

Top-level atom parser engine @@ -585,7 +585,7 @@ A core containing top-level atom parsers. ------------------------------------------------------------------------ -### ++ape +

++ape

Parse 0 or rule @@ -600,7 +600,7 @@ Parser modifier. Parses 0 or the sample rule `fel`. ------------------------------------------------------------------------ -### ++bay +

++bay

Parses binary number @@ -613,7 +613,7 @@ Parsing rule. Parses a binary number without a leading zero. ------------------------------------------------------------------------ -### ++bip +

++bip

Parse IPv6 @@ -629,7 +629,7 @@ Parsing rule. Parses a [`@is`](), an IPv6 address. ------------------------------------------------------------------------ -### ++dem +

++dem

Parse decimal with dots @@ -644,7 +644,7 @@ Parsing rule. Parses a decimal number that includes dot separators. ------------------------------------------------------------------------ -### ++dim +

++dim

Parse decimal number @@ -660,7 +660,7 @@ Parsing rule. Parses a decimal number without a leading zero. ------------------------------------------------------------------------ -### ++dum +

++dum

Parse decimal with leading `0` @@ -677,7 +677,7 @@ Parsing rule. Parses a decmial number with leading zeroes. ------------------------------------------------------------------------ -### ++fed +

++fed

Parse phonetic base @@ -707,7 +707,7 @@ Parsing rule. Parses an atom of odor [`@p`](), the phonetic base. ------------------------------------------------------------------------ -### ++hex +

++hex

Parse hex @@ -726,7 +726,7 @@ Parsing rule. Parses a hexadecimal number ------------------------------------------------------------------------ -### ++lip +

++lip

Parse IPv4 address @@ -744,7 +744,7 @@ Parsing rule. Parses an IPv4 address. ------------------------------------------------------------------------ -### ++viz +

++viz

Parse Base-32 with dots @@ -757,7 +757,7 @@ Parsing rule. Parses a Base-32 number with dot separators. ------------------------------------------------------------------------ -### ++vum +

++vum

Parse base-32 string @@ -770,7 +770,7 @@ Parsing rule. Parses a raw base-32 string. ------------------------------------------------------------------------ -### ++wiz +

++wiz

Parse base-64 @@ -785,7 +785,7 @@ Parsing rule. Parses a base-64 number. ------------------------------------------------------------------------ -### ++co +

++co

Literal rendering engine @@ -809,7 +809,7 @@ A [door]() that contains arms that operate on the sample coin `lot`. ------------------------------------------------------------------------ -### ++rear +

++rear

Prepend & render as tape @@ -826,7 +826,7 @@ Renders a coin `lot` as a [tape]() prepended to the sample tape `rom`. ------------------------------------------------------------------------ -### ++rent +

++rent

Render as span @@ -843,7 +843,7 @@ Renders a coin `lot` as a span. ------------------------------------------------------------------------ -### ++rend +

++rend

Render as tape @@ -1073,7 +1073,7 @@ Renders a coin `lot` as a tape. ------------------------------------------------------------------------ -### ++ne +

++ne

Digit rendering engine @@ -1090,7 +1090,7 @@ A [door]() containing arms that render digits at bases 10, 16, 32, and ------------------------------------------------------------------------ -### ++d +

++d

Render decimal @@ -1105,7 +1105,7 @@ Renders a decimal digit as an atom of an ACII byte value. ------------------------------------------------------------------------ -### ++x +

++x

Render hex @@ -1122,7 +1122,7 @@ Renders a hexadecimal digit as an atom of an ASCII byte value. ------------------------------------------------------------------------ -### ++v +

++v

Render base-32 @@ -1139,7 +1139,7 @@ Renders a base-32 digit as an atom of an ASCII byte value. ------------------------------------------------------------------------ -### ++w +

++w

Render base-64 @@ -1168,7 +1168,7 @@ Renders a base-64 digit as an atom of an ASCII byte value. ------------------------------------------------------------------------ -### ++mu +

++mu

Core used to scramble 16-bit atoms @@ -1188,7 +1188,7 @@ relationship between a destroyer and its cruiser. ------------------------------------------------------------------------ -### ++zag +

++zag

Add bottom into top @@ -1207,7 +1207,7 @@ destroyer. ------------------------------------------------------------------------ -### ++zig +

++zig

Subtract bottom from top @@ -1227,7 +1227,7 @@ destroyer. ------------------------------------------------------------------------ -### ++zug +

++zug

Concatenate into atom @@ -1245,7 +1245,7 @@ destroyer name. ------------------------------------------------------------------------ -### ++so +

++so

Coin parser engine @@ -1259,7 +1259,7 @@ Core containing arms that parse [`++coin`]s. ------------------------------------------------------------------------ -### ++bisk +

++bisk

Parse odor-atom pair @@ -1287,7 +1287,7 @@ producing a [`++dime`](). ------------------------------------------------------------------------ -### ++crub +

++crub

Parse `@da`, `@dr`, `@p`, `@t` @@ -1364,7 +1364,7 @@ and [`@t`](), producing a [`++dime`](). ------------------------------------------------------------------------ -### ++nuck +

++nuck

Top-level coin parser @@ -1406,7 +1406,7 @@ corresponding [`++coin`]() parser. ------------------------------------------------------------------------ -### ++nusk +

++nusk

Parse coin literal with escapes @@ -1427,7 +1427,7 @@ formatting). ------------------------------------------------------------------------ -### ++perd +

++perd

Parsing rule. @@ -1451,7 +1451,7 @@ prefixes. ------------------------------------------------------------------------ -### ++royl +

++royl

Parse dime float @@ -1487,7 +1487,7 @@ Parsing rule. Parses a number into a [`++dime`]() float. ------------------------------------------------------------------------ -### ++royl-cell +

++royl-cell

XX still not fully functional @@ -1504,7 +1504,7 @@ Intermediate parsed float convereter ------------------------------------------------------------------------ -### ++tash +

++tash

Parse signed dime @@ -1533,7 +1533,7 @@ Parsing rule. Parses a signed number into a [`++dime`](). ------------------------------------------------------------------------ -### ++twid +

++twid

Parse coins without `~` prefix @@ -1559,7 +1559,7 @@ Parsing rule. Parses coins after a leading sig, `~`. ------------------------------------------------------------------------ -### ++zust +

++zust

Parse prefixed dimes from `@if`, `@f`, `@rd` @@ -1590,7 +1590,7 @@ Parsing rule. Parses an atom of either [`@if`]() (IP address), [`@f`]() ------------------------------------------------------------------------ -### ++scot +

++scot

Render dime as cord @@ -1619,7 +1619,7 @@ Renders a dime `mol` as a cord. ------------------------------------------------------------------------ -### ++scow +

++scow

Render dime as tape @@ -1640,7 +1640,7 @@ Renders `mol` as a tape. ------------------------------------------------------------------------ -### ++slat +

++slat

Curried slaw @@ -1664,7 +1664,7 @@ odor specified by `mod`. ------------------------------------------------------------------------ -### ++slav +

++slav

Demand: parse span with input odor @@ -1696,7 +1696,7 @@ if it failes to parse. ------------------------------------------------------------------------ -### ++slaw +

++slaw

Parse span to input odor @@ -1732,7 +1732,7 @@ Parses a span `txt` to an atom of the odor specified by `mod`. ------------------------------------------------------------------------ -### ++slay +

++slay

Parse span to coin @@ -1777,7 +1777,7 @@ Parses a span `txt` to the unit of a [`++coin`](). ------------------------------------------------------------------------ -### ++smyt +

++smyt

Render path as tank @@ -1809,7 +1809,7 @@ pretty-printing. ------------------------------------------------------------------------ -### ++spat +

++spat

Render path as cord @@ -1828,7 +1828,7 @@ Renders a path `pax` as cord. ------------------------------------------------------------------------ -### ++spud +

++spud

Render path as tape @@ -1847,7 +1847,7 @@ Renders a path `pax` as [tape](). ------------------------------------------------------------------------ -### ++stab +

++stab

Parse span to path @@ -1855,7 +1855,7 @@ Parse span to path |= zep=@ta ^- path (rash zep ;~(pfix fas ;~(sfix (more fas urs:ab) fas))) -Parsing rule. Parses a span `zep` to a static [`++path`](). +Parsing rule. Parses a span `zep` to a static [`++path`](/doc/hoon/library/1#++path). ~zod/try=> (stab '/as/lek/tor') /as/lek/tor diff --git a/docs/pub/doc/hoon/library/2em.md b/base/pub/doc/hoon/library/2em.md similarity index 90% rename from docs/pub/doc/hoon/library/2em.md rename to base/pub/doc/hoon/library/2em.md index caec667ac..a50b9aa3f 100644 --- a/docs/pub/doc/hoon/library/2em.md +++ b/base/pub/doc/hoon/library/2em.md @@ -1,7 +1,7 @@ section 2eM, regular-expressions ================================ -### ++pars +

++pars

++ pars |= [a=tape] :: parse tape to rege @@ -66,44 +66,44 @@ Parse regular expression ~zod/try=> (pars "a\{1,20}") [~ [%betw p=[%lite p=~~a] q=1 r=20]] -### ++rags +

++rags

++ rags :: rege parsers => |% Regex parser arms -### ++nor +

++nor

++ nor ;~(less (mask "^$()|*?+.[\\") (shim 1 127)) :: non-control char XX document -### ++les +

++les

++ les ;~(less bas asp) :: not backslash XX document -### ++lep +

++lep

++ lep ;~(less (mask "^[]\\") asp) :: charset non-control XX document -### ++asp +

++asp

++ asp (shim 32 126) :: printable ascii XX document -### ++alb +

++alb

++ alb ;~(less ser asp) :: charset literal char XX document -### ++mis +

++mis

++ mis ;~(less aln asp) :: non alphanumeric -- @@ -111,7 +111,7 @@ XX document XX document -### ++apex +

++apex

++ apex :: top level %+ knee *rege |. ~+ @@ -124,7 +124,7 @@ XX document XX document -### ++mall +

++mall

++ mall %+ knee *rege |. ~+ @@ -133,7 +133,7 @@ XX document XX document -### ++bets +

++bets

++ bets %+ knee *rege |. ~+ @@ -162,7 +162,7 @@ XX document XX document -### ++ranc +

++ranc

++ ranc |= [a=@ b=@] @@ -172,14 +172,14 @@ XX document XX document -### ++flap +

++flap

++ flap |=(a=@ (mix a (dec (bex 256)))) :: XX document -### ++rang +

++rang

++ rang %+ sear |=([a=@ b=@] ?:((lte a b) (some [a b]) ~)) @@ -188,7 +188,7 @@ XX document XX document -### ++chun +

++chun

++ chun %+ knee *rege |. ~+ @@ -212,7 +212,7 @@ XX document XX document -### ++seac +

++seac

++ seac |= tub=nail @@ -225,7 +225,7 @@ XX document XX document -### ++sead +

++sead

++ sead %+ knee *@ |. ~+ @@ -264,7 +264,7 @@ XX document XX document -### ++sade +

++sade

++ sade %+ knee *@ |. ~+ @@ -277,7 +277,7 @@ XX document XX document -### ++seap +

++seap

++ seap %+ knee *@ |. ~+ @@ -305,7 +305,7 @@ XX document XX document -### ++cape +

++cape

++ cape %+ knee *tape |. ~+ @@ -318,7 +318,7 @@ XX document XX document -### ++chas +

++chas

++ chas :: ascii character set =- (sear ~(get by -) sym) @@ -350,37 +350,37 @@ XX document XX document -### ++cntrl +

++cntrl

++ cntrl :(con (ranc 0 31) (bex 127)) XX document -### ++digit +

++digit

++ digit (ranc '0' '9') XX document -### ++graph +

++graph

++ graph (ranc 33 126) XX document -### ++lower +

++lower

++ lower (ranc 'a' 'z') XX document -### ++print +

++print

++ print (ranc 32 126) XX document -### ++punct +

++punct

++ punct ;: con (ranc '!' '/') @@ -391,38 +391,38 @@ XX document XX document -### ++space +

++space

++ space :(con (ranc 9 13) (bex ' ')) XX document -### ++upper +

++upper

++ upper (ranc 'A' 'Z') XX document -### ++white +

++white

++ white :(con (bex ' ') (ranc 9 10) (ranc 12 13)) XX document -### ++wordc +

++wordc

++ wordc :(con digit lower upper (bex '_')) XX document -### ++xdigit +

++xdigit

++ xdigit :(con (ranc 'a' 'f') (ranc 'A' 'F') digit) :: XX document -### ++chad +

++chad

++ chad %+ knee *rege |. ~+ @@ -431,7 +431,7 @@ XX document XX document -### ++escd +

++escd

++ escd %+ knee *@ |. ~+ @@ -452,7 +452,7 @@ XX document XX document -### ++escp +

++escp

++ escp %+ knee *rege |. ~+ @@ -481,7 +481,7 @@ XX document XX document -### ++unid +

++unid

++ unid %+ knee *@ |. ~+ @@ -498,14 +498,14 @@ XX document XX document -### ++ra +

++ra

++ ra :: regex engine |_ a=rege XX document -### ++proc +

++proc

++ proc :: capture numbering |= b=@ @@ -544,7 +544,7 @@ XX document XX document -### ++cont +

++cont

++ cont |= [a=(map ,@u tape) b=(map ,@u tape)] @@ -553,7 +553,7 @@ XX document XX document -### ++abor +

++abor

++ abor |= [a=char b=(unit ,[tape (map ,@u tape)])] @@ -565,7 +565,7 @@ XX document XX document -### ++matc +

++matc

++ matc |= [b=tape c=tape] @@ -576,7 +576,7 @@ XX document XX document -### ++chet +

++chet

++ chet |= [b=(unit ,[tape (map ,@u tape)]) c=tape d=tape] @@ -592,19 +592,19 @@ XX document XX document -### ++blak +

++blak

++ blak (some ["" _(map ,@u tape)]) XX document -### ++word +

++word

++ word |=(a=char =((dis wordc:rags (bex a)) 0)) XX document -### ++deep +

++deep

++ deep |= [b=tape c=rege d=tape] @@ -704,7 +704,7 @@ XX document XX document -### ++rexp +

++rexp

++ rexp :: Regex match ~/ %rexp @@ -733,7 +733,7 @@ XX document XX document -### ++repg +

++repg

++ repg :: Global regex replace ~/ %repg diff --git a/docs/pub/doc/hoon/library/2en.md b/base/pub/doc/hoon/library/2en.md similarity index 93% rename from docs/pub/doc/hoon/library/2en.md rename to base/pub/doc/hoon/library/2en.md index c9c9445ac..14ce8bf2f 100644 --- a/docs/pub/doc/hoon/library/2en.md +++ b/base/pub/doc/hoon/library/2en.md @@ -1,7 +1,7 @@ section 2eN, pseudo-cryptography ================================ -### ++un +

++un

Reversible scrambling core @@ -13,7 +13,7 @@ Used in the `@p` phonetic base. ------------------------------------------------------------------------ -### ++wren +

++wren

Conceal structure @@ -50,7 +50,7 @@ on the result, pushing it forward. Produces an atom. ------------------------------------------------------------------------ -### ++wred +

++wred

Restore structure @@ -87,7 +87,7 @@ on the result, pushing it forward. Produces an atom. ------------------------------------------------------------------------ -### ++xafo +

++xafo

Add modulo 255 @@ -102,7 +102,7 @@ Produces the sum of two atoms modulo 255, encoded as a nonzero byte. ------------------------------------------------------------------------ -### ++xaro +

++xaro

Subtract modulo 255 @@ -118,7 +118,7 @@ nonzero byte. ------------------------------------------------------------------------ -### ++zaft +

++zaft

Look up in 255 sub box @@ -139,7 +139,7 @@ Look up in 255 sub box (cut 3 [(dec a) 1] b) :: -The inverse of [`++zaft](). Looks up a nonzero byte`a\` in a substiution +The inverse of [`++zart`](). Looks up a nonzero byte`a\` in a substiution box with 255 values, producing a unique nonzero byte. `a` is an [atom]() of one byte in length. @@ -154,7 +154,7 @@ box with 255 values, producing a unique nonzero byte. ------------------------------------------------------------------------ -### ++zart +

++zart

Reverse look up in 255 sub box @@ -187,7 +187,7 @@ the substitution box with 255 values, producing a unique nonzero byte. ------------------------------------------------------------------------ -### ++zyft +

++zyft

Lookup byte in 256 sub box @@ -223,7 +223,7 @@ with 256 values, producing a byte. ------------------------------------------------------------------------ -### ++zyrt +

++zyrt

Reverse lookup byte in 256 sub box @@ -244,7 +244,7 @@ Reverse lookup byte in 256 sub box df4d.225e.2d56.7fd6.1395.a3f8.c582 (cut 3 [a 1] b) -The inverse of [`++zyft`](). Looks up a byte `a` in a substituion box +The inverse of [`++zyft`](/doc/hoon/library/2en#++zyft). Looks up a byte `a` in a substituion box with 256 values, producing a byte. `a` is an [atom]() of one byte in length. diff --git a/docs/pub/doc/hoon/library/2eo.md b/base/pub/doc/hoon/library/2eo.md similarity index 96% rename from docs/pub/doc/hoon/library/2eo.md rename to base/pub/doc/hoon/library/2eo.md index ca9a54f45..9148be762 100644 --- a/docs/pub/doc/hoon/library/2eo.md +++ b/base/pub/doc/hoon/library/2eo.md @@ -1,7 +1,7 @@ section 2eO, virtualization =========================== -### ++mack +

++mack

Nock subject to unit @@ -33,7 +33,7 @@ producing a `~`. ------------------------------------------------------------------------ -### ++mink +

++mink

Mock interpreter @@ -143,7 +143,7 @@ result becomes a `%1` `++tone`, indicating a block. ------------------------------------------------------------------------ -### ++mock +

++mock

Compute formula on subject with hint @@ -180,7 +180,7 @@ indicating a block. ------------------------------------------------------------------------ -### ++mook +

++mook

Intelligently render crash annotation @@ -250,7 +250,7 @@ Each may be a tank, cord, [`++spot`](), or trapped tank. Produces a ------------------------------------------------------------------------ -### ++mang +

++mang

Unit: Slam gate with sample @@ -292,7 +292,7 @@ Similar to [`++mong`](). ------------------------------------------------------------------------ -### ++mong +

++mong

Slam gate with sample @@ -334,7 +334,7 @@ Produces a [`++toon`]() computation result from slamming `gat` with ------------------------------------------------------------------------ -### ++mung +

++mung

Virtualize slamming gate @@ -376,7 +376,7 @@ Produces a [`++tone`]() computation result from slamming `gat` with ------------------------------------------------------------------------ -### ++mule +

++mule

Typed virtual @@ -415,7 +415,7 @@ the way. Used to lazily compute stack traces. ------------------------------------------------------------------------ -### ++mute +

++mute

Untyped virtual @@ -433,7 +433,7 @@ Kicks a `++trap`, producing its result as a noun or the tanks of any error that occurs. Similar to [`++mule`](), but preserves no type information. -`taq` is a [`++trap`](). +`taq` is a [`++trap`](/doc/hoon/library/1#++trap). ~zod/try=> (mute |.(leaf/"hello")) [%.y p=[1.717.658.988 104 101 108 108 111 0]] diff --git a/docs/pub/doc/hoon/library/2ep.md b/base/pub/doc/hoon/library/2ep.md similarity index 96% rename from docs/pub/doc/hoon/library/2ep.md rename to base/pub/doc/hoon/library/2ep.md index c1c2e491b..44ca0e2dc 100644 --- a/docs/pub/doc/hoon/library/2ep.md +++ b/base/pub/doc/hoon/library/2ep.md @@ -8,7 +8,7 @@ anyway. ------------------------------------------------------------------------ -### ++berk +

++berk

Invert diff patches @@ -39,7 +39,7 @@ swapped. Produces a `bur`. ------------------------------------------------------------------------ -### ++diff +

++diff

Generate patch @@ -84,7 +84,7 @@ Produces a patch between two nouns, by change type ------------------------------------------------------------------------ -### ++loss +

++loss

Longest subsequence @@ -173,7 +173,7 @@ several internal helper arms. Produces a [`++tape`](). ------------------------------------------------------------------------ -### ++locz +

++locz

Find common @@ -194,7 +194,7 @@ Find common ?:((gth p.lef p.rig) lef rig) :: -Finds a subsequence of repeated elements within two [`++list`]()s, +Finds a subsequence of repeated elements within two [`++list`](/doc/hoon/library/1#++list)s, producing a [\`++tape](). ~zod/try=> (locz "samukot" "semelkot") @@ -204,7 +204,7 @@ producing a [\`++tape](). ------------------------------------------------------------------------ -### ++lore +

++lore

Split on `\n` @@ -240,7 +240,7 @@ Split on newlines, ascii `10` ------------------------------------------------------------------------ -### ++role +

++role

Join with `\n` @@ -262,7 +262,7 @@ Join line list with newlines. ------------------------------------------------------------------------ -### ++lump +

++lump

Change with `++udon` @@ -309,7 +309,7 @@ Use udon to change noun ------------------------------------------------------------------------ -### ++lure +

++lure

Patch `a` @@ -332,7 +332,7 @@ Patch a by references to axis and literal. ------------------------------------------------------------------------ -### ++limp +

++limp

Reverse patch @@ -357,7 +357,7 @@ Reverse a patch (preprocessor unchanged) ------------------------------------------------------------------------ -### ++hump +

++hump

Prep for diff @@ -387,7 +387,7 @@ Prep atom for diff: leave alone, cue, or split by newlines. ------------------------------------------------------------------------ -### ++husk +

++husk

Atomize post diff @@ -434,7 +434,7 @@ Re-atomize after diff: leave alone, jam, or join with newlines. ------------------------------------------------------------------------ -### ++lurk +

++lurk

Apply list patch @@ -474,7 +474,7 @@ Amend list using an urge: list of `[%& {number skipped}]` and ------------------------------------------------------------------------ -### ++lusk +

++lusk

`lcs` to list patch @@ -535,7 +535,7 @@ Using a common sequence, generate urge from two lists ------------------------------------------------------------------------ -### ++nude +

++nude

Tree change diff --git a/docs/pub/doc/hoon/library/2ew.md b/base/pub/doc/hoon/library/2ew.md similarity index 91% rename from docs/pub/doc/hoon/library/2ew.md rename to base/pub/doc/hoon/library/2ew.md index 7440b7636..188241114 100644 --- a/docs/pub/doc/hoon/library/2ew.md +++ b/base/pub/doc/hoon/library/2ew.md @@ -1,7 +1,7 @@ section 2eW, lite number theory =============================== -### ++egcd +

++egcd

GCD @@ -41,7 +41,7 @@ Greatest common denominator ------------------------------------------------------------------------ -### ++pram +

++pram

Probable prime @@ -97,7 +97,7 @@ Probable prime test ------------------------------------------------------------------------ -### ++ramp +

++ramp

`r-m` prime @@ -132,7 +132,7 @@ using salt `c`. ------------------------------------------------------------------------ -### ++fo +

++fo

Prime engine @@ -148,7 +148,7 @@ Core for performing arithmetic modulo a prime number ------------------------------------------------------------------------ -### ++dif +

++dif

Difference @@ -166,7 +166,7 @@ Subtract ------------------------------------------------------------------------ -### ++exp +

++exp

Exponent @@ -186,7 +186,7 @@ Exponent ------------------------------------------------------------------------ -### ++fra +

++fra

Divide @@ -204,7 +204,7 @@ Divide ------------------------------------------------------------------------ -### ++inv +

++inv

Inverse @@ -225,7 +225,7 @@ Multiplicative inverse ------------------------------------------------------------------------ -### ++pro +

++pro

Product @@ -243,7 +243,7 @@ Product ------------------------------------------------------------------------ -### ++sit +

++sit

Bounds @@ -261,7 +261,7 @@ Bounds check ------------------------------------------------------------------------ -### ++sum +

++sum

Sum @@ -279,7 +279,7 @@ Add ------------------------------------------------------------------------ -### ++ga +

++ga

++ ga :: GF (bex p.a) |= a=[p=@ q=@ r=@] :: dim poly gen @@ -293,7 +293,7 @@ XX document ------------------------------------------------------------------------ -### ++dif +

++dif

++ dif :: add and sub |= [b=@ c=@] @@ -306,7 +306,7 @@ XX document ------------------------------------------------------------------------ -### ++dub +

++dub

++ dub :: mul by x |= b=@ @@ -321,7 +321,7 @@ XX document ------------------------------------------------------------------------ -### ++pro +

++pro

++ pro :: slow multiply |= [b=@ c=@] @@ -336,7 +336,7 @@ XX document ------------------------------------------------------------------------ -### ++toe +

++toe

++ toe :: exp/log tables =+ ^= nu @@ -367,7 +367,7 @@ XX document ------------------------------------------------------------------------ -### ++sit +

++sit

++ sit :: reduce |= b=@ @@ -378,7 +378,7 @@ XX document ------------------------------------------------------------------------ -### ++fra +

++fra

++ fra :: divide |= [b=@ c=@] @@ -389,7 +389,7 @@ XX document ------------------------------------------------------------------------ -### ++inv +

++inv

++ inv :: invert |= b=@ @@ -404,7 +404,7 @@ XX document ------------------------------------------------------------------------ -### ++pow +

++pow

++ pow :: exponent |= [b=@ c=@] @@ -421,7 +421,7 @@ XX document ------------------------------------------------------------------------ -### ++pro +

++pro

++ pro :: multiply |= [b=@ c=@] diff --git a/docs/pub/doc/hoon/library/2ex.md b/base/pub/doc/hoon/library/2ex.md similarity index 90% rename from docs/pub/doc/hoon/library/2ex.md rename to base/pub/doc/hoon/library/2ex.md index bb30f121d..adf4cc33e 100644 --- a/docs/pub/doc/hoon/library/2ex.md +++ b/base/pub/doc/hoon/library/2ex.md @@ -3,7 +3,7 @@ section 2eX, jetted crypto ------------------------------------------------------------------------ -### ++aesc +

++aesc

++ aesc :: AES-256 ~% %aesc + ~ @@ -11,7 +11,7 @@ section 2eX, jetted crypto XX document -### ++en +

++en

++ en :: ECB enc ~/ %en @@ -21,7 +21,7 @@ XX document XX document -### ++de +

++de

++ de :: ECB dec ~/ %de @@ -32,7 +32,7 @@ XX document XX document -### ++ahem +

++ahem

++ ahem :: AES helpers :: XX should be in aesc, isn't for performance reasons @@ -44,20 +44,20 @@ XX document XX document -### ++cipa +

++cipa

++ cipa :: AES params $_ ^? |% XX document -### ++co +

++co

++ co [0xe 0xb 0xd 0x9] XX document -### ++ix +

++ix

++ ix :: key expand, inv |= a=@ ^- @ @@ -82,13 +82,13 @@ XX document XX document -### ++ro +

++ro

++ ro [0 3 2 1] XX document -### ++su +

++su

++ su 0x7d0c.2155.6314.69e1.26d6.77ba.7e04.2b17. 6199.5383.3cbb.ebc8.b0f5.2aae.4d3b.e0a0. @@ -111,7 +111,7 @@ XX document XX document -### ++pen +

++pen

++ pen :: encrypt ^- cipa @@ -119,13 +119,13 @@ XX document XX document -### ++co +

++co

++ co [0xe 0xb 0xd 0x9] XX document -### ++ix +

++ix

++ ix :: key expand, inv |= a=@ ^- @ @@ -150,13 +150,13 @@ XX document XX document -### ++ro +

++ro

++ ro [0 3 2 1] XX document -### ++su +

++su

++ su 0x7d0c.2155.6314.69e1.26d6.77ba.7e04.2b17. 6199.5383.3cbb.ebc8.b0f5.2aae.4d3b.e0a0. @@ -179,7 +179,7 @@ XX document XX document -### ++pin +

++pin

++ pin :: decrypt ^- cipa @@ -187,13 +187,13 @@ XX document XX document -### ++co +

++co

++ co [0xe 0xb 0xd 0x9] XX document -### ++ix +

++ix

++ ix :: key expand, inv |= a=@ ^- @ @@ -218,13 +218,13 @@ XX document XX document -### ++ro +

++ro

++ ro [0 3 2 1] XX document -### ++su +

++su

++ su 0x7d0c.2155.6314.69e1.26d6.77ba.7e04.2b17. 6199.5383.3cbb.ebc8.b0f5.2aae.4d3b.e0a0. @@ -247,7 +247,7 @@ XX document XX document -### ++mcol +

++mcol

++ mcol |= [a=(list ,@) b=[p=@ q=@ r=@ s=@]] ^- (list ,@) @@ -273,7 +273,7 @@ XX document XX document -### ++pode +

++pode

++ pode :: explode to block |= [a=bloq b=@ c=@] ^- (list ,@) @@ -286,7 +286,7 @@ XX document XX document -### ++sube +

++sube

++ sube :: s-box word |= [a=@ b=@] ^- @ @@ -296,7 +296,7 @@ XX document XX document -### ++be +

++be

++ be :: block cipher |= [a=? b=@ c=@H] ^- @uxH @@ -308,7 +308,7 @@ XX document XX document -### ++ankh +

++ankh

++ ankh |= [a=cipa b=@ c=@] @@ -316,7 +316,7 @@ XX document XX document -### ++sark +

++sark

++ sark |= [c=(list ,@) d=(list ,@)] ^- (list ,@) @@ -326,7 +326,7 @@ XX document XX document -### ++srow +

++srow

++ srow |= [a=cipa b=(list ,@)] ^- (list ,@) @@ -343,7 +343,7 @@ XX document XX document -### ++subs +

++subs

++ subs |= [a=cipa b=(list ,@)] ^- (list ,@) @@ -367,7 +367,7 @@ XX document XX document -### ++ex +

++ex

++ ex :: key expand |= a=@I ^- @ @@ -389,7 +389,7 @@ XX document XX document -### ++ix +

++ix

++ ix :: key expand, inv |= a=@ ^- @ @@ -414,7 +414,7 @@ XX document XX document -### ++curt +

++curt

++ curt :: curve25519 |= [a=@ b=@] @@ -428,7 +428,7 @@ XX document XX document -### ++cla +

++cla

++ cla |= raw=@ @@ -439,19 +439,19 @@ XX document XX document -### ++sqr +

++sqr

++ sqr |=(a=@ (mul a a)) XX document -### ++inv +

++inv

++ inv |=(a=@ (~(exp fo q) (sub q 2) a)) XX document -### ++cad +

++cad

++ cad |= [n=[x=@ z=@] m=[x=@ z=@] d=[x=@ z=@]] @@ -473,7 +473,7 @@ XX document XX document -### ++cub +

++cub

++ cub |= [x=@ z=@] @@ -505,7 +505,7 @@ XX document XX document -### ++ed +

++ed

++ ed :: ed25519 => @@ -521,14 +521,14 @@ XX document ~% %coed +> ~ |% -### ++norm +

++norm

++ norm |=(x=@ ?:(=(0 (mod x 2)) x (sub q x))) :: XX document -### ++xrec +

++xrec

++ xrec :: recover x-coord |= y=@ ^- @ @@ -543,7 +543,7 @@ XX document XX document -### ++ward +

++ward

++ ward :: edwards multiply |= [pp=[@ @] qq=[@ @]] ^- [@ @] @@ -565,7 +565,7 @@ XX document XX document -### ++scam +

++scam

++ scam :: scalar multiply |= [pp=[@ @] e=@] ^- [@ @] @@ -580,7 +580,7 @@ XX document XX document -### ++etch +

++etch

++ etch :: encode point |= pp=[@ @] ^- @ @@ -589,7 +589,7 @@ XX document XX document -### ++curv +

++curv

++ curv :: point on curve? |= [x=@ y=@] ^- ? @@ -603,7 +603,7 @@ XX document XX document -### ++deco +

++deco

++ deco :: decode point |= s=@ ^- (unit ,[@ @]) @@ -619,7 +619,7 @@ XX document XX document -### ++bb +

++bb

++ bb =+ bby=(pro.fq 4 (inv.fq 5)) @@ -631,7 +631,7 @@ XX document XX document -### ++puck +

++puck

++ puck :: public key ~/ %puck @@ -647,7 +647,7 @@ XX document XX document -### ++suck +

++suck

++ suck :: keypair from seed |= se=@I ^- @uJ @@ -657,7 +657,7 @@ XX document XX document -### ++sign +

++sign

++ sign :: certify ~/ %sign @@ -692,7 +692,7 @@ XX document XX document -### ++veri +

++veri

++ veri :: validate ~/ %veri diff --git a/docs/pub/doc/hoon/library/2ey.md b/base/pub/doc/hoon/library/2ey.md similarity index 95% rename from docs/pub/doc/hoon/library/2ey.md rename to base/pub/doc/hoon/library/2ey.md index 3a9485d56..750b1298a 100644 --- a/docs/pub/doc/hoon/library/2ey.md +++ b/base/pub/doc/hoon/library/2ey.md @@ -1,13 +1,13 @@ section 2eY, SHA-256 ==================== -### ++shad +

++shad

++ shad |=(ruz=@ (shax (shax ruz))) :: double sha-256 XX document -### ++shaf +

++shaf

++ shaf :: half sha-256 |= [sal=@ ruz=@] @@ -17,7 +17,7 @@ XX document XX document -### ++shak +

++shak

++ shak :: XX shd be PBKDF |= [who=@p wud=@] @@ -26,7 +26,7 @@ XX document XX document -### ++sham +

++sham

++ sham :: noun hash |= yux=* ^- @uvH ^- @ @@ -37,7 +37,7 @@ XX document XX document -### ++shas +

++shas

++ shas :: salted hash |= [sal=@ ruz=@] @@ -46,7 +46,7 @@ XX document XX document -### ++shax +

++shax

++ shax :: sha-256 ~/ %shax @@ -137,7 +137,7 @@ XX document XX document -### ++shaw +

++shaw

++ shaw :: hash to nbits |= [sal=@ len=@ ruz=@] @@ -146,7 +146,7 @@ XX document XX document -### ++og +

++og

++ og :: shax-powered rng ~/ %og @@ -154,7 +154,7 @@ XX document XX document -### ++rad +

++rad

++ rad :: random in range |= b=@ ^- @ @@ -164,7 +164,7 @@ XX document XX document -### ++rads +

++rads

++ rads :: random continuation |= b=@ @@ -173,7 +173,7 @@ XX document XX document -### ++raw +

++raw

++ raw :: random bits ~/ %raw @@ -191,7 +191,7 @@ XX document XX document -### ++raws +

++raws

++ raws :: random bits continuation |= b=@ @@ -201,7 +201,7 @@ XX document XX document -### ++shaz +

++shaz

++ shaz :: sha-512 |= ruz=@ ^- @ @@ -209,7 +209,7 @@ XX document XX document -### ++shal +

++shal

++ shal :: sha-512 with length ~/ %shal @@ -326,7 +326,7 @@ XX document XX document -### ++shan +

++shan

++ shan :: sha-1 (deprecated) |= ruz=@ diff --git a/docs/pub/doc/hoon/library/2ez.md b/base/pub/doc/hoon/library/2ez.md similarity index 89% rename from docs/pub/doc/hoon/library/2ez.md rename to base/pub/doc/hoon/library/2ez.md index 93f2a68c6..b37aa52bc 100644 --- a/docs/pub/doc/hoon/library/2ez.md +++ b/base/pub/doc/hoon/library/2ez.md @@ -1,9 +1,7 @@ section 2eZ, OLD rendering --------------------------- +========================== ------------------------------------------------------------------------- - -### ++show +

++show

++ show :: XX deprecated, use type |= vem=* @@ -65,7 +63,7 @@ section 2eZ, OLD rendering XX document -### ++shep +

++shep

++ shep |= [fom=@ gar=*] @@ -87,7 +85,7 @@ XX document XX document -### ++shop +

++shop

++ shop |= [aug=* vel=$+(a=@ tape)] @@ -105,14 +103,14 @@ XX document XX document -### ++at +

++at

++ at |_ a=@ XX document -### ++r +

++r

++ r ?: ?& (gte (met 3 a) 2) @@ -132,49 +130,49 @@ XX document XX document -### ++rf +

++rf

++ rf `tape`[?-(a & '&', | '|', * !!) ~] XX document -### ++rn +

++rn

++ rn `tape`[?>(=(0 a) '~') ~] XX document -### ++rt +

++rt

++ rt `tape`['\'' (weld (mesc (trip a)) `tape`['\'' ~])] XX document -### ++rta +

++rta

++ rta rt XX document -### ++rtam +

++rtam

++ rtam `tape`['%' (trip a)] XX document -### ++rub +

++rub

++ rub `tape`['0' 'b' (rum 2 ~ |=(b=@ (add '0' b)))] XX document -### ++rud +

++rud

++ rud (rum 10 ~ |=(b=@ (add '0' b))) XX document -### ++rum +

++rum

++ rum |= [b=@ c=tape d=$+(@ @)] @@ -195,7 +193,7 @@ XX document XX document -### ++rup +

++rup

++ rup =+ b=(met 3 a) @@ -222,7 +220,7 @@ XX document XX document -### ++ruv +

++ruv

++ ruv ^- tape @@ -241,7 +239,7 @@ XX document XX document -### ++rux +

++rux

++ rux `tape`['0' 'x' (rum 16 ~ |=(b=@ (add b ?:((lth b 10) 48 87))))] -- diff --git a/docs/pub/doc/hoon/library/3ba.md b/base/pub/doc/hoon/library/3ba.md similarity index 80% rename from docs/pub/doc/hoon/library/3ba.md rename to base/pub/doc/hoon/library/3ba.md index 8917c642c..238255ea2 100644 --- a/docs/pub/doc/hoon/library/3ba.md +++ b/base/pub/doc/hoon/library/3ba.md @@ -1,7 +1,7 @@ section 3bA, lite number theory =============================== -### ++fu +

++fu

++ fu :: modulo (mul p q) |= a=[p=@ q=@] @@ -10,7 +10,7 @@ section 3bA, lite number theory XX document -### ++dif +

++dif

++ dif |= [c=[@ @] d=[@ @]] @@ -19,7 +19,7 @@ XX document XX document -### ++exp +

++exp

++ exp |= [c=@ d=[@ @]] @@ -29,7 +29,7 @@ XX document XX document -### ++out +

++out

++ out :: garner's formula |= c=[@ @] @@ -40,7 +40,7 @@ XX document XX document -### ++pro +

++pro

++ pro |= [c=[@ @] d=[@ @]] @@ -49,7 +49,7 @@ XX document XX document -### ++sum +

++sum

++ sum |= [c=[@ @] d=[@ @]] @@ -58,7 +58,7 @@ XX document XX document -### ++sit +

++sit

++ sit |= c=@ diff --git a/docs/pub/doc/hoon/library/3bb.md b/base/pub/doc/hoon/library/3bb.md similarity index 87% rename from docs/pub/doc/hoon/library/3bb.md rename to base/pub/doc/hoon/library/3bb.md index d73b5fb29..628859579 100644 --- a/docs/pub/doc/hoon/library/3bb.md +++ b/base/pub/doc/hoon/library/3bb.md @@ -1,7 +1,7 @@ section 3bB, cryptosuites ========================= -### ++crua +

++crua

++ crua !: :: cryptosuite A (RSA) ^- acru @@ -10,13 +10,13 @@ section 3bB, cryptosuites XX document -### ++mx +

++mx

++ mx (dec (met 0 mos)) :: bit length XX document -### ++dap +

++dap

++ dap :: OEAP decode |= [wid=@ xar=@ dog=@] ^- [p=@ q=@] @@ -28,7 +28,7 @@ XX document XX document -### ++pad +

++pad

++ pad :: OEAP encode |= [wid=@ rax=[p=@ q=@] meg=@] ^- @ @@ -42,19 +42,19 @@ XX document XX document -### ++pull +

++pull

++ pull |=(a=@ (~(exp fo mos) 3 a)) XX document -### ++push +

++push

++ push |=(a=@ (~(exp fo mos) 5 a)) XX document -### ++pump +

++pump

++ pump |= a=@ ^- @ @@ -64,7 +64,7 @@ XX document XX document -### ++punt +

++punt

++ punt |= a=@ ^- @ @@ -74,14 +74,14 @@ XX document XX document -### ++as +

++as

++ as => |% XX document -### ++haul +

++haul

++ haul :: revealing haul |= a=pass @@ -94,7 +94,7 @@ XX document XX document -### ++seal +

++seal

XX document @@ -177,26 +177,26 @@ XX document XX document -### ++pac +

++pac

++ pac ^- @uvG (end 6 1 (shaf %acod sec)) XX document -### ++pub +

++pub

++ pub ^- pass (cat 3 'b' puc) XX document -### ++sec +

++sec

++ sec ^- ring sed :: XX document -### ++nu +

++nu

++ nu ^? @@ -208,7 +208,7 @@ XX document XX document -### ++elcm +

++elcm

++ elcm |= [a=@ b=@] @@ -217,7 +217,7 @@ XX document XX document -### ++eldm +

++eldm

++ eldm |= [a=@ b=@ c=@] @@ -226,7 +226,7 @@ XX document XX document -### ++ersa +

++ersa

++ ersa |= [a=@ b=@] @@ -240,7 +240,7 @@ XX document XX document -### ++com +

++com

XX document @@ -401,7 +401,7 @@ XX document XX document -### ++sign +

++sign

++ sign |= [a=@ b=@] ^- @ @@ -409,7 +409,7 @@ XX document XX document -### ++sure +

++sure

++ sure |= [a=@ b=@] @@ -418,7 +418,7 @@ XX document XX document -### ++tear +

++tear

++ tear |= [a=pass b=@] @@ -428,7 +428,7 @@ XX document XX document -### ++de +

++de

++ de |+ [key=@ cep=@] ^- (unit ,@) @@ -437,7 +437,7 @@ XX document XX document -### ++dy +

++dy

++ dy |+ [a=@ b=@] ^- @ @@ -445,7 +445,7 @@ XX document XX document -### ++en +

++en

++ en |+ [key=@ msg=@] ^- @ux @@ -454,14 +454,14 @@ XX document XX document -### ++ex +

++ex

++ ex ^? |% ++ fig ^- @uvH (shaf %bfig puc) XX document -### ++fig +

++fig

XX document @@ -509,7 +509,7 @@ XX document XX document -### ++pit +

++pit

++ pit |= [a=@ b=@] @@ -519,7 +519,7 @@ XX document XX document -### ++nol +

++nol

++ nol |= a=@ @@ -528,7 +528,7 @@ XX document XX document -### ++brew +

++brew

++ brew :: create keypair |= [a=@ b=@] :: width seed @@ -538,7 +538,7 @@ XX document XX document -### ++hail +

++hail

++ hail :: activate public key |= a=pass @@ -550,7 +550,7 @@ XX document XX document -### ++wear +

++wear

++ wear :: activate secret key |= a=ring @@ -562,7 +562,7 @@ XX document XX document -### ++trub +

++trub

++ trub :: test ed |= msg=@tas @@ -583,7 +583,7 @@ XX document XX document -### ++hmac +

++hmac

++ hmac :: HMAC-SHA1 |= [key=@ mes=@] diff --git a/docs/pub/doc/hoon/library/3bc.md b/base/pub/doc/hoon/library/3bc.md similarity index 95% rename from docs/pub/doc/hoon/library/3bc.md rename to base/pub/doc/hoon/library/3bc.md index d2f89b8c1..2923576f4 100644 --- a/docs/pub/doc/hoon/library/3bc.md +++ b/base/pub/doc/hoon/library/3bc.md @@ -1,7 +1,7 @@ section 3bC, Gregorian UTC ========================== -### ++dawn +

++dawn

Weekday of Jan 1 @@ -27,7 +27,7 @@ producing an atom. Weeks are zero-indexed beginning on Sunday. ------------------------------------------------------------------------ -### ++daws +

++daws

Weekday of date @@ -51,7 +51,7 @@ zero-indexed beginning on Sunday. ------------------------------------------------------------------------ -### ++deal +

++deal

Add leap seconds @@ -82,7 +82,7 @@ Produces a [`date`]() with the 25 leap seconds added. ------------------------------------------------------------------------ -### ++lead +

++lead

Subtract leap seconds @@ -117,7 +117,7 @@ subtracted. ------------------------------------------------------------------------ -### ++dust +

++dust

Print UTC format @@ -146,7 +146,7 @@ Produces a [tape]() of the date in UTC format. ------------------------------------------------------------------------ -### ++stud +

++stud

Parse UTC format @@ -189,7 +189,7 @@ Accepts a [tape]() containing a date in UTC format and produces the ------------------------------------------------------------------------ -### ++unt +

++unt

UGT to UTC time @@ -211,7 +211,7 @@ Transforms Urbit Galactic Time to UTC time, producing an atom. ------------------------------------------------------------------------ -### ++yu +

++yu

UTC format constants @@ -223,7 +223,7 @@ UTC format constants ------------------------------------------------------------------------ -### ++mon +

++mon

Months @@ -255,7 +255,7 @@ Produces a list of [tapes]() containing the 12 months of the year. ------------------------------------------------------------------------ -### ++wik +

++wik

Weeks @@ -277,7 +277,7 @@ beginning with Sunday. ------------------------------------------------------------------------ -### ++les +

++les

Leap second dates @@ -324,7 +324,7 @@ Produces a list of the (absolute) dates ([`@da`]) of the 25 leap seconds ------------------------------------------------------------------------ -### ++lef +

++lef

Back-shifted leap second dates @@ -346,7 +346,7 @@ Back-shifted leap second dates :: Produces a list of absolute dates ([`@da`]()) that represent the Urbit -Galactc Time equivalents of the UTC leap second dates in [`++les`](). +Galactc Time equivalents of the UTC leap second dates in [`++les`](/doc/hoon/library/3bc#++les). ~zod/try=/hom> lef:yu ~[ diff --git a/docs/pub/doc/hoon/library/3bd.md b/base/pub/doc/hoon/library/3bd.md similarity index 92% rename from docs/pub/doc/hoon/library/3bd.md rename to base/pub/doc/hoon/library/3bd.md index eba82eec0..c67390af1 100644 --- a/docs/pub/doc/hoon/library/3bd.md +++ b/base/pub/doc/hoon/library/3bd.md @@ -1,7 +1,7 @@ section 3bD, JSON and XML ========================= -### ++moon +

++moon

Mime type to `++cord` @@ -27,7 +27,7 @@ Renders a [mime](http://en.wikipedia.org/wiki/MIME) type path with infix ~zod/try=> `@t`(moon /application/x-pnacl) 'application/x-pnacl' -### ++perk +

++perk

Parse cube with fork @@ -61,7 +61,7 @@ needlessly unwieldy. ! {1 1} ! exit -### ++poja +

++poja

JSON parser core @@ -81,7 +81,7 @@ a [`++json`](). ~zod/try=> (poja 'invalid{json') ~ -### ++apex +

++apex

Parse object @@ -103,7 +103,7 @@ with current test:urbit.git ! {1 1} ! exit -### ++valu +

++valu

Parse value @@ -135,7 +135,7 @@ Parsing rule. Parses JSON values to [`++json`](). ~zod/try=> (rash 'true' valu:poja) [%b p=%.y] -### ++abox +

++abox

Parse array @@ -150,7 +150,7 @@ delimited by a `,`. JSON Objects ------------ -### ++pair +

++pair

Parse key value pair @@ -162,7 +162,7 @@ string and value delimited by `:`. ~zod/try=> (rash '"ham": 2' pair:poja) ['ham' [%n p=~.2]] -### ++obje +

++obje

Parse array of objects @@ -174,7 +174,7 @@ key-value pairs that are enclosed within `{}` and separated by `,`. ~zod/try=> (rash '{"ham": 2, "lam":true}' obje:poja) [['ham' [%n p=~.2]] ~[['lam' [%b p=%.y]]]] -### ++obox +

++obox

Parse boxed object @@ -189,7 +189,7 @@ a tag of `%o`. See also: [`++json`](). JSON Booleans ------------- -### ++bool +

++bool

Parse boolean @@ -209,7 +209,7 @@ Parsing rule. Parses a string of either `true` or `false` to a JSON strings ------------ -### ++stri +

++stri

Parse string @@ -228,7 +228,7 @@ of characters enclosed in double quotes along with escaping `\`s, to a ~zod/try=> (rash '"This be \\"quoted\\""' stri:poja) 'This be "quoted"' -### ++jcha +

++jcha

Parse char from string @@ -249,7 +249,7 @@ string to a [`++cord`](). ' ' -### ++esca +

++esca

Parse escaped char @@ -286,7 +286,7 @@ A- JSON numbers are stored as cords internally in lieu of full float support, so ++numb and subarms are really more *validators* than parsers per se. -### ++numb +

++numb

Parse number @@ -318,7 +318,7 @@ part, or exponent part, to a [`++cord`](). ! {1 2} ! exit -### ++digs +

++digs

Parse 1-9 @@ -335,7 +335,7 @@ Parsing rule. Parses digits `0` through `9` to a [`++tape`](). ~zod/try=> (rash '7' digs:poja) "7" -### ++expo +

++expo

Parse exponent part @@ -356,7 +356,7 @@ Parsing rule. Parses an exponent to a [`++cord`](). An exponent is an ~zod/try=> `tape`(rash 'E-4' expo:poja) "E-4" -### ++frac +

++frac

Fractional part @@ -374,7 +374,7 @@ Parsing rule. Parses a dot followed by digits to a [`++cord`](). whitespace ---------- -### ++spac +

++spac

Parse whitespace @@ -392,7 +392,7 @@ Parsing rule. Parses a whitespace to a [`++tape`](). ! {1 4} ! exit -### ++ws +

++ws

Allow prefix whitespace @@ -417,7 +417,7 @@ applying `sef`. Plumbing -------- -### ++mayb +

++mayb

Maybe parse @@ -430,7 +430,7 @@ Parser modifier. Need to document, an example showing failure. ~zod/try=> ((mayb abox):poja 1^1 "not-an-array") [p=[p=1 q=1] q=[~ [p="" q=[p=[p=1 q=1] q="not-an-array"]]]] -### ++twel +

++twel

Weld two tapes @@ -438,16 +438,16 @@ Weld two tapes Concatenates two tapes, `a` and `b`, producing a `++tape`. -`a` is a [++tape](). +`a` is a [`++tape`](). -`b` is a [++tape](). +`b` is a [`++tape`](). ~zod/try=> (twel "sam" "hok"):poja ~[~~s ~~a ~~m ~~h ~~o ~~k] ~zod/try=> (twel "kre" ""):poja ~[~~k ~~r ~~e] -### ++piec +

++piec

Parse char to list @@ -464,7 +464,7 @@ Parser modifer. Parses an atom with `bus` and then wraps it in a ~zod/try=> (scan "4" (piec:poja dem:ag)) [4 ~] -### ++pojo +

++pojo

Print JSON @@ -510,7 +510,7 @@ Print JSON == :: -Renders a `++json` `val` as a [++tape](). +Renders a `++json` `val` as a [`++tape`](). `val` is a [`json`](). @@ -527,7 +527,7 @@ Renders a `++json` `val` as a [++tape](). ~zod/try=> (crip (pojo %o (mo sale/(jone 12) same/b/| ~))) '{"same":false,"sale":12}' -### ++poxo +

++poxo

Print XML @@ -546,7 +546,7 @@ Renders a `++manx` `a` as a [`++tape`](). ~zod/try=> (poxo ;div:(p:"tree > text" a)) "

tree > text

" -### ++apex +

++apex

Inner XML printer @@ -566,7 +566,7 @@ Inner XML printer ?~(att rez [' ' (attr att rez)]) :: -Renders a `++manx` as a [`++tape](), appending a suffix`rez\`. +Renders a `++manx` as a [`++tape`](), appending a suffix `rez\`. `rez` is a [`++tape`](). @@ -581,7 +581,7 @@ Renders a `++manx` as a [`++tape](), appending a suffix`rez\`. ~zod/try=> (~(apex poxo &) ;div:(p:"tree > text" a) "") "

tree > text

" -### ++attr +

++attr

Print attributes @@ -609,7 +609,7 @@ Render XML attributes as a [`++tape`](). ~zod/try=> (crip (attr:poxo ~[sam/"hem" [%tok %ns]^"reptor"] "|appen")) 'sam="hem" tok:ns="reptor"|appen' -### ++escp +

++escp

Escape XML @@ -648,7 +648,7 @@ Escapes the XML special characters `"`, `&`, `'`, `<`, `>`. ~zod/try=> `tape`(~(escp poxo &) "x > y" ~) "x > y" -### ++name +

++name

Print name @@ -669,7 +669,7 @@ Renders a `++mane` as a `++tape`. ~zod/try=> (name:poxo %ham^%tor) "ham:tor" -### ++many +

++many

Print node list @@ -697,7 +697,7 @@ Renders multiple XML nodes as a [`++tape`]() ------------------------------------------------------------------------ -### ++poxa +

++poxa

Parse XML @@ -718,7 +718,7 @@ Parses an XML node from a [`++cord`](), producing a unit [`++manx`](). ~zod/try=> (poxa '<<<<') ~ -### ++apex +

++apex

Top level parser @@ -745,7 +745,7 @@ Parses a node of XML, type [`++manx`](). ! {1 2} ! exit -### ++attr +

++attr

Parse XML attributes @@ -781,7 +781,7 @@ or more space-prefixed name to string values. Result type [`++mart`]() ! {1 23} ! exit -### ++chrd +

++chrd

Parse character data @@ -800,7 +800,7 @@ Parsing rule. Parses XML character data. Result type [`++mars`]() ! {1 6} ! exit -### ++comt +

++comt

Parses comments @@ -823,7 +823,7 @@ Parsing rule. Parses XML comment blocks. ! {1 18} ! exit -### ++escp +

++escp

Parse (possibly) escaped char @@ -857,7 +857,7 @@ Parsing rule. Parses a nonspecial or escaped character. Result type ~zod/try=> (rash '"' escp:xmlp) '"' -### ++empt +

++empt

Parse self-closing tag @@ -876,7 +876,7 @@ Parsing rule. Parses self-closing XML tags that end in `/>`. ! {1 21} ! exit -### ++head +

++head

Parse opening tag @@ -895,7 +895,7 @@ Parsing rule. Parses the opening tag of an XML node. Result type ! {1 16} ! exit -### ++name +

++name

Parse tag name @@ -922,7 +922,7 @@ Parsing rule. Parses the name of an XML tag. Result type [`++mane`]() ! {1 4} ! exit -### ++tail +

++tail

Parse closing tag @@ -938,7 +938,7 @@ Parsing rule. Parses an XML closing tag. ! {1 3} ! exit -### ++whit +

++whit

Parse whitespace, etc. @@ -960,7 +960,7 @@ Parsing rule. Parses newlines, tabs, and spaces. ! {1 1} ! exit -### ++jo +

++jo

JSON reparsing core @@ -975,7 +975,7 @@ A `fist` is a gate that produces a `grub`. A `grub` is a unit of some JSON value. -### ++ar +

++ar

Parse array to list @@ -998,7 +998,7 @@ Reparser modifier. Reparses an array to the [`++unit`]() of a homogenous [~ u=~[1 2]] {[%~ u=it(@)] %~} -### ++at +

++at

Reparse array as tuple @@ -1023,7 +1023,7 @@ Reparser generator. Reparses an array as a fixed-length tuple of ~zod/try=> ((at ni so ni ~):jo a/~[n/'3' s/'to' n/'']) ~ -### ++at-raw +

++at-raw

Reparse array to tuple @@ -1043,7 +1043,7 @@ Reparser generator. Reparses a list of [`++json`]() to a tuple of ~zod/try=> ((at-raw ni ni bo ~):jo ~[s/'hi' n/'1' b/&]) [~ [~ 1] [~ u=%.y] ~] -### ++bo +

++bo

Reparse boolean @@ -1061,7 +1061,7 @@ Reparser modifier. Reparses a boolean to the [`++unit`]() of a ~zod/try=> (bo:jo [%s 'hi']) ~ -### ++bu +

++bu

Reparse boolean not @@ -1079,7 +1079,7 @@ of a loobean. ~zod/try=> (bu:jo [%s 'hi']) ~ -### ++cu +

++cu

Reparse and transform @@ -1101,7 +1101,7 @@ producing a [`++unit`](). ~zod/try=> ((cu dec ni):jo [%b &]) ~ -### ++da +

++da

Reparse UTC date @@ -1120,7 +1120,7 @@ Reparser modifier. Reparses a UTC date string to a [`++unit`](). ~zod/try=> (da:jo [%n '20']) ~ -### ++di +

++di

Reparse millisecond date @@ -1143,7 +1143,7 @@ Reparser modifier. Reparses the javascript millisecond date integer to a ~zod/try=> (di:jo [%n '25000']) [~ ~1970.1.1..00.00.25] -### ++mu +

++mu

Reparse unit @@ -1169,7 +1169,7 @@ value, and are reparsed to results of \~ or (some {value}) respectively ~zod/try=> ((mu ni):jo [%s 'ma']) ~ -### ++ne +

++ne

Reparse number as real @@ -1184,7 +1184,7 @@ XX Currently unimplemented A- yup, this will eventually reparse a floating point atom, but interfaces for the latter are not currently stable. -### ++ni +

++ni

Reparse number as integer @@ -1211,7 +1211,7 @@ Reparser modifier. Reparses an integer representation to a [\`++unit](). ~zod/try=> (ni:jo [%a ~[b/& b/& b/& b/&]]) ~ -### ++no +

++no

Reparse number as text @@ -1238,7 +1238,7 @@ Reparser modifier. Reparses a numeric representation to a [++cord](). ~zod/try=> (no:jo [%a ~[b/& b/& b/& b/&]]) ~ -### ++of +

++of

Reparse object to frond @@ -1278,7 +1278,7 @@ one of the key-value pairs in `wer`. ~zod/try=> ((of sem/sa som/ni ~):jo %o [%sem s/'hey'] ~ [%sam s/'other value'] ~ ~) ~ -### ++ot +

++ot

Reparse object as tuple @@ -1301,7 +1301,7 @@ the [`++edge`](), the results of which are produced in a tuple. ~zod/try=> ((ot sem/sa som/ni sem/sa ~):jo (jobe [%sem s/'ha'] [%som n/'20'] ~)) [~ u=["ha" q=20 "ha"]] -### ++ot-raw +

++ot-raw

++ ot-raw :: object as tuple |* wer=(pole ,[cord fist]) @@ -1321,7 +1321,7 @@ in a tuple. ~zod/try=> ((ot-raw sem/sa som/ni sem/sa ~):jo (mo [%sem s/'ha'] [%som b/|] ~)) [[~ u="ha"] ~ [~ u="ha"] ~] -### ++om +

++om

Parse object to map @@ -1342,7 +1342,7 @@ using `wit`. ~zod/try=> ((om ni):jo (jobe [%sap n/'20'] [%sup n/'0x5'] [%sop n/'177'] ~)) ~ -### ++pe +

++pe

Add prefix @@ -1365,7 +1365,7 @@ Reparser modifier. Adds a static prefix `pre` to the parse result of ~zod/try=> ((pe %hi ni):jo b/|) ~ -### ++sa +

++sa

Reparse string to tape @@ -1383,7 +1383,7 @@ Reparser modifier. Reparses a [`++json`]() string to a [`++tape`](). ~zod/try=> (sa:jo a/~[s/'val 2']) ~ -### ++so +

++so

Reparse string to cord @@ -1401,7 +1401,7 @@ Reparser modifier. Reparses a string to a [`++cord`](). ~zod/try=> (so:jo a/~[s/'val 2']) ~ -### ++su +

++su

Reparse string @@ -1425,7 +1425,7 @@ Reparser generator. Produces a reparser that applies `sab` to a string. ~zod/try=> ((su:jo fed:ag) n/'20') ~ -### ++ul +

++ul

Reparse null @@ -1442,7 +1442,7 @@ Reparser modifier. Reparses a null value. ~zod/try=> (ul:jo b/&) ~ -### ++za +

++za

Pole of nonempty units @@ -1456,14 +1456,14 @@ Pole of nonempty units Determines if `pod` contains no empty units, producing a loobean. Used internally. -`pod` is a [`++pole`]() of [`++units`](). +`pod` is a [`++pole`]() of [`++unit`](). ~zod/try=> (za:jo ~[`1 `2 `3]) %.y ~zod/try=> (za:jo ~[`1 ~ `3]) %.n -### ++zl +

++zl

Collapse unit list @@ -1491,7 +1491,7 @@ empty, produces null. ~zod/try=> (zl:jo `(list (unit))`~[`1 ~ `3]) ~ -### ++zp +

++zp

Parses a @@ -1514,7 +1514,7 @@ Collapses a `++pole` of `++unit`s `but`, producing a tuple. ~zod/try=> (zp:jo `(pole (unit))`~[`1 ~ `3]) ! exit -### ++zm +

++zm

Collapse unit map @@ -1545,7 +1545,7 @@ See also: [`++zp`](), [`++zl`](). ~zod/try=> (~(run by `(map ,@t ,@u)`(mo a/1 b/7 c/3 ~)) (flit |=(a=@ (lth a 5)))) {[p='a' q=[~ u=1]] [p='c' q=[~ u=3]] [p='b' q=~]} -### ++joba +

++joba

`++json` from key-value pair @@ -1570,7 +1570,7 @@ Produces a ++json object with one key. ~zod/try=> (crip (pojo (joba %hi (jone 2.130)))) '{"hi":2130}' -### ++jobe +

++jobe

Object from key-value list @@ -1589,7 +1589,7 @@ Produces a `++json` object from a list `a` of key to `++json` values. ~zod/try=> (crip (pojo (jobe a/n/'20' b/~ c/a/~[s/'mol'] ~))) '{"b":null,"c":["mol"],"a":20}' -### ++jape +

++jape

`++json` string from tape @@ -1610,7 +1610,7 @@ Produces a [`++json`]() string from a [`++tape`](). ~zod/try=> (crip (pojo (jape "semtek som? zeplo!"))) '"semtek som? zeplo!"' -### ++jone +

++jone

`++json` number from unigned @@ -1635,7 +1635,7 @@ Produces a `++json` number from an unsigned atom. ~zod/try=> (pojo (jone 1.203.196)) "1203196" -### ++jesc +

++jesc

Escape JSON character @@ -1648,9 +1648,9 @@ Escape JSON character == :: -Produces a `++tape` of an escaped [`++json`]() character `a`. +Produces a `++tape` of an escaped [`++json`](/doc/hoon/library/3bi#++json) character `a`. -`a` is an [`++atom`]() +`a` is an atom ~zod/try=> (jesc 'a') "a" @@ -1661,7 +1661,7 @@ Produces a `++tape` of an escaped [`++json`]() character `a`. ~zod/try=> (jesc '"') "\"" -### ++scanf +

++scanf

Formatted scan @@ -1693,7 +1693,7 @@ collapses the result list to a tuple, such that (scanf "foo 1 2 bar" ~zod/try=> `@da`(year `date`dat(- [%& -.dat], |6 ~[(div (mul |6.dat (bex 16)) 1.000)])) ~2014.8.12..23.10.58..ee56 -### ++parsf +

++parsf

++ parsf :: make parser from: |^ |* a=(pole ,_:/(*$&(_rule tape))) :: ;"chars{rule}chars" @@ -1745,7 +1745,7 @@ more convenient list of discriminated tapes and rules. `bill` builds a parser out of rules and tapes, ignoring the literal sections and producing a list of the rules' results. -### ++taco +

++taco

++ taco :: atom to octstream |= tam=@ ^- octs @@ -1759,7 +1759,7 @@ An [octs] contains a length, to encode trailing zeroes. ~zod/try=> `@t`6.513.249 'abc' -### ++tact +

++tact

++ tact :: tape to octstream |= tep=tape ^- octs @@ -1773,7 +1773,7 @@ octs from tape ~zod/try=> `@t`6.513.249 'abc' -### ++tell +

++tell

++ tell :: wall to octstream |= wol=wall ^- octs @@ -1792,7 +1792,7 @@ octs from wall 3 ''' -### ++txml +

++txml

++ txml :: string to xml |= tep=tape ^- manx diff --git a/docs/pub/doc/hoon/library/3be.md b/base/pub/doc/hoon/library/3be.md similarity index 91% rename from docs/pub/doc/hoon/library/3be.md rename to base/pub/doc/hoon/library/3be.md index 77b618c5b..c2326362c 100644 --- a/docs/pub/doc/hoon/library/3be.md +++ b/base/pub/doc/hoon/library/3be.md @@ -1,7 +1,7 @@ section 3bE, tree sync ====================== -### ++invert-miso +

++invert-miso

++ invert-miso :: invert miso |= mis=miso @@ -14,7 +14,7 @@ section 3bE, tree sync XX document -### ++cosh +

++cosh

++ cosh :: locally rehash |= ank=ankh :: NB v/unix.c @@ -23,7 +23,7 @@ XX document XX document -### ++cost +

++cost

++ cost :: new external patch |= [bus=ankh ank=ankh] :: NB v/unix.c @@ -35,7 +35,7 @@ XX document XX document -### ++loth +

++loth

++ loth |= pat=(map path ,*) @@ -47,7 +47,7 @@ XX document XX document -### ++luth +

++luth

++ luth |= [p=(map path ,*) q=(map path ,*)] :: merge keysets @@ -57,7 +57,7 @@ XX document XX document -### ++blob-to-lobe +

++blob-to-lobe

++ blob-to-lobe :: p.blob |= p=blob @@ -71,20 +71,20 @@ XX document XX document -### ++ze +

++ze

++ ze |_ [lim=@da dome rang] XX document -### ++aeon-to-tako +

++aeon-to-tako

++ aeon-to-tako ~(got by hit) XX document -### ++make-yaki +

++make-yaki

++ make-yaki :: make yaki |= [p=(list tako) q=(map path lobe) t=@da] @@ -97,19 +97,19 @@ XX document XX document -### ++tako-to-yaki +

++tako-to-yaki

++ tako-to-yaki ~(got by hut) :: grab yaki XX document -### ++lobe-to-blob +

++lobe-to-blob

++ lobe-to-blob ~(got by lat) :: grab blob XX document -### ++lobe-to-noun +

++lobe-to-noun

++ lobe-to-noun :: grab blob |= p=lobe :: ^- * @@ -119,7 +119,7 @@ XX document XX document -### ++make-direct +

++make-direct

++ make-direct :: make blob |= [p=* q=umph] @@ -129,7 +129,7 @@ XX document XX document -### ++make-delta +

++make-delta

++ make-delta :: make blob delta |= [p=lobe q=udon] @@ -144,7 +144,7 @@ XX document XX document -### ++blob-to-umph +

++blob-to-umph

++ blob-to-umph :: blob umph [prep] |= p=blob :: used in merge @@ -158,7 +158,7 @@ XX document XX document -### ++blob-to-noun +

++blob-to-noun

++ blob-to-noun :: grab blob |= p=blob @@ -173,7 +173,7 @@ XX document XX document -### ++diff-yakis +

++diff-yakis

++ diff-yakis :: fundamental diff |= [p=yaki q=yaki] @@ -198,7 +198,7 @@ XX document XX document -### ++lobes-at-path +

++lobes-at-path

++ lobes-at-path :: lobes-at-path:ze |= [oan=aeon pax=path] :: data at path @@ -222,7 +222,7 @@ XX document XX document -### ++case-to-aeon +

++case-to-aeon

++ case-to-aeon :: case-to-aeon:ze |= lok=case :: act count through @@ -247,7 +247,7 @@ XX document XX document -### ++as-arch +

++as-arch

++ as-arch :: as-arch:ze ^- arch :: arch report @@ -260,7 +260,7 @@ XX document XX document -### ++reachable-takos +

++reachable-takos

++ reachable-takos :: reachable |= p=tako :: XX slow @@ -276,7 +276,7 @@ XX document XX document -### ++new-lobes +

++new-lobes

++ new-lobes :: object hash set |= [b=(set lobe) a=(set tako)] :: that aren't in b @@ -300,7 +300,7 @@ XX document XX document -### ++new-lobes-takos +

++new-lobes-takos

++ new-lobes-takos :: garg & repack |= [b=(set lobe) a=(set tako)] @@ -310,7 +310,7 @@ XX document XX document -### ++reachable-between-takos +

++reachable-between-takos

++ reachable-between-takos |= [a=(unit tako) b=tako] :: pack a through b @@ -337,7 +337,7 @@ XX document XX document -### ++takos-to-yakis +

++takos-to-yakis

++ takos-to-yakis :: trivial |= a=(set tako) @@ -347,7 +347,7 @@ XX document XX document -### ++lobes-to-blobs +

++lobes-to-blobs

++ lobes-to-blobs :: trivial |= a=(set lobe) @@ -357,7 +357,7 @@ XX document XX document -### ++make-nako +

++make-nako

++ make-nako :: gack a through b |= [a=aeon b=aeon] @@ -376,7 +376,7 @@ XX document XX document -### ++query +

++query

++ query :: query:ze |= ren=?(%u %v %x %y %z) :: endpoint query @@ -392,7 +392,7 @@ XX document XX document -### ++rewind +

++rewind

++ rewind :: rewind:ze |= oan=aeon :: rewind to aeon @@ -405,7 +405,7 @@ XX document XX document -### ++update-lat +

++update-lat

++ update-lat :: update-lat:ze |= [lag=(map path blob) sta=(map lobe blob)] :: fix lat @@ -420,7 +420,7 @@ XX document XX document -### ++apply-changes +

++apply-changes

++ apply-changes :: apply-changes:ze |= lar=(list ,[p=path q=miso]) :: store changes @@ -463,7 +463,7 @@ XX document XX document -### ++checkout-ankh +

++checkout-ankh

++ checkout-ankh :: checkout-ankh:ze |= hat=(map path lobe) :: checkout commit @@ -485,7 +485,7 @@ XX document XX document -### ++forge-yaki +

++forge-yaki

++ forge-yaki :: forge-yaki:ze |= [wen=@da par=(unit tako) lem=soba] :: forge yaki @@ -499,7 +499,7 @@ XX document XX document -### ++forge-nori +

++forge-nori

++ forge-nori :: forge-nori:ze |= yak=yaki :: forge nori (ugly op) @@ -513,7 +513,7 @@ XX document XX document -### ++reduce-merge-points +

++reduce-merge-points

++ reduce-merge-points :: reduce merge points |= unk=(set yaki) :: maybe need jet @@ -539,7 +539,7 @@ XX document XX document -### ++future-find-merge-points +

++future-find-merge-points

++ future-find-merge-points :: merge points fast |= [p=yaki q=yaki] :: (future zeal) @@ -566,7 +566,7 @@ XX document XX document -### ++add-parents +

++add-parents

++ add-parents :: expand set |= qez=(set tako) @@ -579,7 +579,7 @@ XX document XX document -### ++find-merge-points +

++find-merge-points

++ find-merge-points :: merge points |= [p=yaki q=yaki] :: maybe need jet @@ -599,7 +599,7 @@ XX document XX document -### ++clean +

++clean

++ clean :: clean |= wig=(urge) @@ -617,7 +617,7 @@ XX document XX document -### ++match-conflict +

++match-conflict

++ match-conflict :: match conflict |= [us=[ship desk] th=[ship desk] p=(urge) q=(urge) r=(list)] @@ -634,7 +634,7 @@ XX document XX document -### ++annotate +

++annotate

++ annotate :: annotate conflict |= [us=[ship desk] th=[ship desk] p=(list ,@t) q=(list ,@t) r=(list ,@t)] @@ -665,7 +665,7 @@ XX document XX document -### ++match-merge +

++match-merge

++ match-merge :: match merge |= [p=(urge ,@t) q=(urge ,@t) r=(list ,@t)] :: resolve conflict @@ -734,7 +734,7 @@ XX document XX document -### ++qeal +

++qeal

++ qeal :: merge p,q |* [us=[ship desk] th=[ship desk] pat=path p=miso q=miso r=(list) con=?] @@ -798,7 +798,7 @@ XX document XX document -### ++quil +

++quil

++ quil :: merge p,q |= $: us=[ship desk] @@ -836,7 +836,7 @@ XX document XX document -### ++meld +

++meld

++ meld :: merge p,q from r |= [p=yaki q=yaki r=yaki con=? us=[ship desk] th=[ship desk]] @@ -887,7 +887,7 @@ XX document XX document -### ++mate +

++mate

++ mate :: merge p,q |= con=? :: %mate, %meld @@ -903,7 +903,7 @@ XX document XX document -### ++keep +

++keep

++ keep :: %this |= [p=yaki q=yaki [ship desk] [ship desk]] @@ -916,7 +916,7 @@ XX document XX document -### ++drop +

++drop

++ drop :: %that |= [p=yaki q=yaki r=[ship desk] s=[ship desk]] @@ -926,7 +926,7 @@ XX document XX document -### ++forge +

++forge

++ forge :: %forge |= [p=yaki q=yaki s=[ship desk] t=[ship desk]] @@ -960,7 +960,7 @@ XX document XX document -### ++merge +

++merge

++ merge |= [us=[ship desk] th=[ship desk]] @@ -978,7 +978,7 @@ XX document XX document -### ++strategy +

++strategy

++ strategy :: merge strategy |= gem=?(%meld %mate %that %this) @@ -992,7 +992,7 @@ XX document XX document -### ++construct-merge +

++construct-merge

++ construct-merge :: construct-merge:ze |= [gem=germ who=ship des=desk sab=saba now=@da] :: construct merge @@ -1040,7 +1040,7 @@ XX document XX document -### ++read +

++read

++ read :: read:ze |= mun=mood :: read at point @@ -1061,7 +1061,7 @@ XX document XX document -### ++read-at-aeon +

++read-at-aeon

++ read-at-aeon :: read-at-aeon:ze |= [oan=aeon mun=mood] :: seek and read @@ -1073,7 +1073,7 @@ XX document XX document -### ++equiv +

++equiv

++ equiv :: test paths |= [p=(map path lobe) q=(map path lobe)] @@ -1096,7 +1096,7 @@ XX document XX document -### ++edit +

++edit

++ edit :: edit:ze |= [wen=@da lem=nori] :: edit @@ -1126,7 +1126,7 @@ XX document XX document -### ++zu +

++zu

++ zu :: filesystem |= ank=ankh :: filesystem state @@ -1136,7 +1136,7 @@ XX document XX document -### ++rehash +

++rehash

++ rehash :: local rehash ^- cash @@ -1153,13 +1153,13 @@ XX document XX document -### ++update-hash +

++update-hash

++ update-hash %_(. p.ank rehash) :: rehash and save XX document -### ++ascend +

++ascend

++ ascend :: ascend |= [lol=@ta kan=ankh] @@ -1177,7 +1177,7 @@ XX document XX document -### ++push-change +

++push-change

++ push-change :: add change |= mis=miso @@ -1187,7 +1187,7 @@ XX document XX document -### ++descend +

++descend

++ descend :: descend |= lol=@ta @@ -1198,7 +1198,7 @@ XX document XX document -### ++descend-path +

++descend-path

++ descend-path :: descend recursively |= way=path @@ -1208,7 +1208,7 @@ XX document XX document -### ++overwrite +

++overwrite

++ overwrite :: write over |= [pum=umph val=(unit ,[p=cash q=*])] @@ -1224,7 +1224,7 @@ XX document XX document -### ++change-tree +

++change-tree

++ change-tree :: modify tree |= [pum=umph bus=ankh] @@ -1243,7 +1243,7 @@ XX document XX document -### ++rm-r +

++rm-r

++ rm-r :: rm -r |- ^+ + @@ -1257,7 +1257,7 @@ XX document XX document -### ++drum +

++drum

++ drum :: apply effect |= [pax=path mis=miso] :: XX unused (++dune) @@ -1285,7 +1285,7 @@ XX document XX document -### ++dune +

++dune

++ dune :: apply |- ^+ + :: XX unused (++durn) @@ -1296,7 +1296,7 @@ XX document XX document -### ++durn +

++durn

++ durn :: apply forward |= nyp=soba :: XX unused diff --git a/docs/pub/doc/hoon/library/3bf.md b/base/pub/doc/hoon/library/3bf.md similarity index 92% rename from docs/pub/doc/hoon/library/3bf.md rename to base/pub/doc/hoon/library/3bf.md index 08dc32e5f..472aa26ac 100644 --- a/docs/pub/doc/hoon/library/3bf.md +++ b/base/pub/doc/hoon/library/3bf.md @@ -1,7 +1,7 @@ section 3bF, filesystem interface ================================= -### ++feel +

++feel

Generate file diff @@ -33,7 +33,7 @@ Generates a diff between a file located at `pax` and an input value ~zod/try=> `@t`272.335.332.724 'tesh?' -### ++file +

++file

Simple file load @@ -62,7 +62,7 @@ Reads the value of a file located at `pax` and renders it as a ~zod/try=/zak> (file /==2%/mop) ~ -### ++foal +

++foal

Write high-level change @@ -90,7 +90,7 @@ at `pax`. Handled by `%clay`. ~zod/try=> (feel %/mek 'b') [%mut p=[p=%a q=[%a p=97 q=98]]] -### ++fray +

++fray

High-level delete @@ -113,7 +113,7 @@ Handled by `%clay`. ~zod/try=> `@t`97 'a' -### ++furl +

++furl

Unify changes @@ -148,7 +148,7 @@ and pointed at the same [`++path`](). ] ] -### ++meat +

++meat

Kite to .\^ path @@ -181,7 +181,7 @@ Converts a type request name to a [`++path`](). ''' -### ++tame +

++tame

Parse kite path @@ -209,7 +209,7 @@ Parse kite path :: Parses a clay [.\^]() -[`++path]()to request details. Produces the [`++unit`]() of a [`++kite\`](). +[`++path` ]()to request details. Produces the [`++unit`]() of a [`++kite`](). `hap` is a [`++path`](). @@ -220,7 +220,7 @@ Parses a clay [.\^]() ~zod/try=/zop> (tame /~zod/main/0x12/sur/down/gate/hook) ~ -### ++tome +

++tome

Parse path to beam @@ -249,7 +249,7 @@ Parses a [`++path`]() `pax` to a [\`++beam](), a well-typed location. ~zod/try=/zop> (tome /~zod/main/0x12) ~ -### ++tope :: beam to path +

++tope :: beam to path

Parse beam to path @@ -257,7 +257,7 @@ Parse beam to path ^- path [(scot %p p.bem) q.bem (scot r.bem) (flop s.bem)] -Parses a [`++beam`]() to a [`++path`](). +Parses a [`++beam`]() to a [`++path`](/doc/hoon/library/1#++path). ~zod/try=/zop> (tope [~zod %main ud/1] /hook/down/sur) /~zod/main/1/sur/down/hook diff --git a/docs/pub/doc/hoon/library/3bg.md b/base/pub/doc/hoon/library/3bg.md similarity index 93% rename from docs/pub/doc/hoon/library/3bg.md rename to base/pub/doc/hoon/library/3bg.md index 04f56fc2c..b2f808a88 100644 --- a/docs/pub/doc/hoon/library/3bg.md +++ b/base/pub/doc/hoon/library/3bg.md @@ -1,7 +1,7 @@ section 3bG, URL handling ========================= -### ++deft +

++deft

Import URL path @@ -34,7 +34,7 @@ either by a `.` or a `/`. ~zod/try=> (deft /foo/bar/baz) [p=~ q=<|foo bar baz|>] -### ++fain +

++fain

Restructure path @@ -50,7 +50,7 @@ Restructure path :: Splits a concrete -[`++spur]() out of a full`++path`, producing a location [`++beam`]() and a remainder [`++path\`](). +[`++spur`]() out of a full `++path`, producing a location [`++beam`]() and a remainder [`++path`](). `hom` is a [`++path`]() @@ -73,7 +73,7 @@ Splits a concrete q=/._req_1234__ ] -### ++fuel +

++fuel

Parse fcgi @@ -135,7 +135,7 @@ Retrieieves the %eyre FCGI, producing a [`++epic`](). Used primarily in nyp=/gen ] -### ++sifo +

++sifo

64-bit encode @@ -164,7 +164,7 @@ Encodes an atom to MIME base64, producing a [`++tape`](). ~zod/main=> (sifo (shax %hi)) "j0NDRmSPa5bfid2pAcUXaxCm2Dlh3TwayItZstwyeqQ=" -### ++urle +

++urle

Encode URL @@ -198,7 +198,7 @@ escape sequences. ~zod/main=> (urle "hello-my?=me !") "hello-my%3F%3Dme%20%20%21" -### ++urld +

++urld

Decode URL @@ -231,7 +231,7 @@ The inverse of [`++urle`](). Parses a URL escaped tape to the ~zod/main=> (urld "hello-my%3F%3Dme%20%2%21") ~ -### ++earl +

++earl

Localize purl @@ -256,7 +256,7 @@ Prepends a ship name to the spur of a [`++purl`](). ~zod/main=> (earn (earl ~pittyp (need (epur 'http://123.1.1.1/me.ham')))) "http://123.1.1.1/pittyp/me" -### ++earn +

++earn

Purl to tape @@ -287,7 +287,7 @@ Parses a `++purl` `pul` to a [`++tape`](). ~zod/main=> (earn [& ~ `/com/google/www] [~ /search] [%q 'urbit escaping?'] ~) "https://www.google.com/search?q=urbit%20escaping%3F" -### ++body +

++body

Render URL path @@ -311,7 +311,7 @@ Renders URL path `pok` as a [`++tape`](). ~zod/main=> (body:earn `%htm /) "" -### ++head +

++head

Render URL beginning @@ -344,7 +344,7 @@ of a traditional URL. ~zod/main=> (head:earn & [~ 8.080] %& /com/google/www) "https://www.google.com:8080" -### ++tail +

++tail

Render query string @@ -376,7 +376,7 @@ traditional query string. ~zod/main=> (tail:earn [%ask 'bid'] [%make 'well'] ~) "?ask=bid&make=well" -### ++epur +

++epur

Top-level URL parser @@ -386,7 +386,7 @@ Top-level URL parser Toplevel URL parser. -`a` is a [`++cord`](). +`a` is a [`++cord`](/doc/hoon/library/1#++cord). ~zod/main=> (epur 'http://127.0.0.1/') [~ [p=[p=%.n q=~ r=[%.n p=.127.0.0.1]] q=[p=~ q=<||>] r=~]] @@ -428,7 +428,7 @@ Toplevel URL parser. ] ] -### ++apat +

++apat

++ apat :: 2396 abs_path %+ cook deft @@ -441,7 +441,7 @@ URL path as ++pork ~zod/try=> (scan "/foo/mol/lok.htm" apat:epur) [p=[~ ~.htm] q=<|foo mol lok|>] -### ++auri +

++auri

++ auri %+ cook @@ -546,7 +546,7 @@ URL parsing rule ] ] -### ++cock +

++cock

++ cock :: cookie (most ;~(plug sem ace) ;~(plug toke ;~(pfix tis tosk))) @@ -561,7 +561,7 @@ HTTP cookies, results in associative list of cord to cord. ! {1 34} ! exit -### ++dlab +

++dlab

++ dlab :: 2396 domainlabel %+ sear @@ -583,7 +583,7 @@ Domain label: alphanumeric, with `-` allowed in middle. ! {1 8} ! exit -### ++fque +

++fque

++ fque (cook crip (plus pquo)) :: normal query field @@ -601,7 +601,7 @@ One or more query string characters ! {1 1} ! exit -### ++fquu +

++fquu

++ fquu (cook crip (star pquo)) :: optional field @@ -618,7 +618,7 @@ Zero or more query string characters ~zod/try=> (scan "" fquu:epur) '' -### ++pcar +

++pcar

++ pcar ;~(pose pure pesc psub col pat) :: 2396 path char @@ -639,7 +639,7 @@ or `@` ~zod/try=> (scan "!" pcar:epur) ~~~21. -### ++pcok +

++pcok

++ pcok ;~(less bas sem com doq prn) :: cookie char @@ -656,7 +656,7 @@ Cookie character ! {1 2} ! exit -### ++pesc +

++pesc

++ pesc ;~(pfix cen mes) :: 2396 escaped @@ -667,7 +667,7 @@ URL `%` escape, by two hex characters. ~zod/try=> `@t`(scan "%20" pesc:epur) ' ' -### ++pold +

++pold

++ pold (cold ' ' (just '+')) :: old space code @@ -679,7 +679,7 @@ Old URL `' '` escape ! {1 1} ! exit -### ++pque +

++pque

++ pque ;~(pose pcar fas wut) :: 3986 query char @@ -694,7 +694,7 @@ Irregular query string character. ~zod/try=> `@t`(scan "+" pque:epur) '+' -### ++pquo +

++pquo

++ pquo ;~(pose pure pesc pold) :: normal query char @@ -712,7 +712,7 @@ Character in query string key/value ~zod/try=> (scan "+" pquo:epur) ' ' -### ++pure +

++pure

++ pure ;~(pose aln hep dot cab sig) :: 2396 unreserved @@ -728,7 +728,7 @@ URL-safe character ~zod/try=> (scan "-" pure:epur) ~~- -### ++psub +

++psub

++ psub ;~ pose :: 3986 sub-delims zap buc pam soq pel per @@ -747,7 +747,7 @@ URL path subdelimeter ! {1 1} ! exit -### ++ptok +

++ptok

++ ptok ;~ pose :: 2616 token aln zap hax buc cen pam soq tar lus @@ -761,7 +761,7 @@ Character valid in HTTP token ~zod/try=> `tape`(skim =+(a=' ' |-(`tape`?:(=(0x7f a) ~ [a $(a +(a))]))) |=(a=char ?=(~ (rush a ptok:epur)))) " "(),/:;<=>?@[\]{}" -### ++scem +

++scem

++ scem :: 2396 scheme %+ cook cass @@ -778,7 +778,7 @@ alphanumeric, `+` `-` or `.` ~zod/try=> `@t`(scan "chrome-extension" scem:epur) 'chrome-extension' -### ++smeg +

++smeg

++ smeg (cook crip (plus pcar)) :: 2396 segment @@ -789,7 +789,7 @@ URL path segment ~zod/try=> (scan "bar%20baz-bam" smeg:epur) 'bar baz-bam' -### ++tock +

++tock

++ tock (cook crip (plus pcok)) :: 6265 cookie-value @@ -804,7 +804,7 @@ HTTP cookie value ~zod/try=> (rush '"zemug"' tock:epur) ~ -### ++tosk +

++tosk

++ tosk ;~(pose tock (ifix [doq doq] tock)) :: 6265 cookie-value @@ -819,7 +819,7 @@ Possibly quoted HTTP cookie value ~zod/try=> (rush '"zemug"' tosk:epur) [~ 'zemug'] -### ++toke +

++toke

++ toke (cook crip (plus ptok)) :: 2616 token @@ -834,7 +834,7 @@ HTTP cookie name ~zod/try=> (rush '"zemug"' toke:epur) ~ -### ++thor +

++thor

++ thor :: 2396 host/port %+ cook |*(a=[* *] [+.a -.a]) @@ -854,7 +854,7 @@ Parse ++host and unit `@ui` port. ~zod/try=> (scan "www.google.com" thor:epur) [~ [%.y i='com' t=~['google' 'www']]] -### ++thos +

++thos

++ thos :: 2396 host, no local ;~ plug @@ -887,7 +887,7 @@ URI host: dot-separated segments, or IP address. ~zod/try=> (scan "www.google.com" thos:epur) [%.y i='com' t=~['google' 'www']] -### ++yque +

++yque

++ yque :: query ending ;~ pose @@ -904,7 +904,7 @@ Parses query string, or lack thereof. Result type ++quay ~zod/try=> (scan "" yque:epur) ~ -### ++yquy +

++yquy

++ yquy :: query ;~ pose :: proper query @@ -926,7 +926,7 @@ Parse query string after `?` ~zod/try=> (scan "" yquy:epur) ~ -### ++zest +

++zest

++ zest :: 2616 request-uri ;~ pose diff --git a/docs/pub/doc/hoon/library/3bh.md b/base/pub/doc/hoon/library/3bh.md similarity index 96% rename from docs/pub/doc/hoon/library/3bh.md rename to base/pub/doc/hoon/library/3bh.md index e338e6746..c8a10547b 100644 --- a/docs/pub/doc/hoon/library/3bh.md +++ b/base/pub/doc/hoon/library/3bh.md @@ -1,7 +1,7 @@ section 3bH, names etc ====================== -### ++clan +

++clan

++ clan :: ship to rank |= who=ship ^- rank @@ -24,7 +24,7 @@ Ship class ~zod/main=> (clan ~tasfyn-partyv) %duke -### ++glam +

++glam

++ glam |= zar=@pD ^- tape @@ -94,7 +94,7 @@ Retrieve carrier name. ~zod/main=> (glam ~fyr) "Bolivar" -### ++glon +

++glon

++ glon |= lag=lang @@ -296,7 +296,7 @@ ISO language code ~zod/main=> (glon %mz) ~ -### ++gnom +

++gnom

++ gnom :: ship display name |= [[our=@p now=@da] him=@p] ^- @t @@ -316,7 +316,7 @@ Fetch display name from %ames ~zod/main=> (gnom [->-< -<-] ~tug) '~tug |Go-Daigo|' -### ++gnow +

++gnow

++ gnow |= [who=@p gos=gcos] ^- @t @@ -348,7 +348,7 @@ Fetch display name from %ames XX Document -### ++hunt +

++hunt

++ hunt :: first of unit dates |= [one=(unit ,@da) two=(unit ,@da)] @@ -360,7 +360,7 @@ XX Document XX Document -### ++mojo +

++mojo

++ mojo :: compiling load |= [pax=path src=*] @@ -381,7 +381,7 @@ XX Document XX Document -### ++mole +

++mole

++ mole :: new to old sky |= ska=$+(* (unit (unit))) @@ -395,7 +395,7 @@ XX Document XX Document -### ++much +

++much

++ much :: constructing load |= [pax=path src=*] @@ -407,7 +407,7 @@ XX Document XX Document -### ++musk +

++musk

++ musk :: compiling apply |= [pax=path src=* sam=vase] @@ -419,7 +419,7 @@ XX Document XX Document -### ++saxo +

++saxo

++ saxo :: autocanon |= who=ship @@ -437,7 +437,7 @@ Compute list of ancestors ~zod/main=> (saxo ~ractul-fodsug-sibryg-modsyl--difrun-mirfun-filrec-patmet) ~[~ractul-fodsug-sibryg-modsyl--difrun-mirfun-filrec-patmet ~zod] -### ++sein +

++sein

++ sein :: autoboss |= who=ship ^- ship diff --git a/docs/pub/doc/hoon/library/3bi.md b/base/pub/doc/hoon/library/3bi.md similarity index 84% rename from docs/pub/doc/hoon/library/3bi.md rename to base/pub/doc/hoon/library/3bi.md index 2164d0a4a..fc9f628b3 100644 --- a/docs/pub/doc/hoon/library/3bi.md +++ b/base/pub/doc/hoon/library/3bi.md @@ -1,7 +1,7 @@ section 3bI, Arvo models ======================== -### ++acru +

++acru

++ acru :: asym cryptosuite $_ ^? |% :: opaque object @@ -15,14 +15,14 @@ Cryptosuite interface, see %ames documentation ~zod/main=> *acru <6?guc 243.nxm 41.spz 374.iqw 100.rip 1.ypj %164> -### ++as +

++as

++ as ^? :: asym ops |% ++ seal |=([a=pass b=@ c=@] _@) :: encrypt to a XX document -### ++seal +

++seal

++ seal :: auth conversation $: whu=(unit ship) :: client identity @@ -34,51 +34,51 @@ XX document XX document -### ++sign +

++sign

++ sign |=([a=@ b=@] _@) :: certify as us XX document -### ++sure +

++sure

++ sure |=([a=@ b=@] *(unit ,@)) :: authenticate from us XX document -### ++tear +

++tear

++ tear |= [a=pass b=@] :: accept from a *(unit ,[p=@ q=@]) :: XX document -### ++de +

++de

++ de |+([a=@ b=@] *(unit ,@)) :: symmetric de, soft XX document -### ++dy +

++dy

++ dy |+([a=@ b=@] _@) :: symmetric de, hard XX document -### ++en +

++en

++ en |+([a=@ b=@] _@) :: symmetric en XX document -### ++ex +

++ex

++ ex ^? :: export |% ++ fig _@uvH :: fingerprint XX document -### ++fig +

++fig

XX document @@ -120,25 +120,25 @@ XX document XX document -### ++nol +

++nol

++ nol |=(a=@ ^?(..nu)) :: from naked ring XX document -### ++com +

++com

++ com |=(a=@ ^?(..nu)) :: from naked pass XX document -### ++aeon +

++aeon

++ aeon ,@ud :: Clay revision number -### ++agon +

++agon

++ agon (map ,[p=ship q=desk] ,[p=@ud q=@ud r=waks]) :: mergepts @@ -147,7 +147,7 @@ See %clay doc ~zod/main=> *agon {} -### ++ankh +

++ankh

++ ankh :: fs node (new) $: p=cash :: recursive hash @@ -159,19 +159,19 @@ State at path See also ++ze, %clay documentation -### ++ankz +

++ankz

++ ankz ,[p=@ (map ,@ta ankz)] :: trimmed ankh XX document -### ++apex +

++apex

++ apex ,[p=@uvI q=(map ,@ta ,@uvI) r=(map ,@ta ,~)] :: node report (old) XX document -### ++ares +

++ares

++ ares (unit ,[p=term q=(list tank)]) :: possible error @@ -183,19 +183,19 @@ Failure cause: unknown, or machine-readable term and stack trace. [~ [p=%syntax-error q=~[[%leaf p="[1 27]"]]]] ~zod/main=> -### ++ball +

++ball

++ ball ,@uw :: statement payload XX document -### ++bait +

++bait

++ bait ,[p=skin q=@ud r=dove] :: fmt nrecvd spec XX document -### ++bath +

++bath

++ bath :: convo per client $: sop=shed :: not stalled @@ -205,7 +205,7 @@ XX document XX document -### ++beam +

++beam

++ beam ,[[p=ship q=desk r=case] s=path] :: global name @@ -214,13 +214,13 @@ See section 2dF, %clay documentation ~zod/try=> (need (tome %/bin)) [[p=~zod q=%try r=[%da p=~2014.11.3..17.30.07..ca8f]] s=/bin] -### ++beak +

++beak

++ beak ,[p=ship q=desk r=case] :: garnish with beak Global root -### ++bird +

++bird

++ bird :: packet in travel $: gom=soap :: message identity @@ -232,7 +232,7 @@ Global root XX document -### ++blob +

++blob

++ blob $% [%delta p=lobe q=lobe r=udon] :: delta on q [%direct p=lobe q=* r=umph] :: @@ -241,13 +241,13 @@ XX document Stored data, see ++ze -### ++boat +

++boat

++ boat ,[(list slip) tart] :: user stage XX deprecated -### ++boon +

++boon

++ boon :: fort output $% [%beer p=ship q=@uvG] :: gained ownership @@ -262,37 +262,37 @@ XX deprecated See %ford documentation -### ++bowl +

++bowl

++ bowl ,[p=(list gift) q=(unit boat)] :: app product XX deprecated -### ++bray +

++bray

++ bray ,[p=life q=(unit life) r=ship s=@da] :: our parent us now Ship identity. See %ames documentation -### ++brow +

++brow

++ brow ,[p=@da q=@tas] :: browser version XX unused? -### ++buck +

++buck

++ buck ,[p=mace q=will] :: all security data XX document -### ++cake +

++cake

++ cake ,[p=sock q=skin r=@] :: top level packet XX document -### ++cape +

++cape

++ cape :: end-to-end result $? %good :: delivered @@ -301,19 +301,19 @@ XX document XX document -### ++cart +

++cart

++ cart ,[p=cash q=cash] :: hash change XX document -### ++care +

++care

++ care ?(%u %v %w %x %y %z) :: clay submode XX document -### ++case +

++case

++ case :: ship desk case spur $% [%da p=@da] :: date @@ -324,19 +324,19 @@ XX document Access by absolute date, term label, or revision number. See %clay documentation -### ++cash +

++cash

++ cash ,@uvH :: ankh hash XX document -### ++chum +

++chum

++ chum ,@uvI :: hashed passcode XX document -### ++clot +

++clot

++ clot :: symmetric record $: yed=(unit ,[p=hand q=code]) :: outbound @@ -346,19 +346,19 @@ XX document XX document -### ++coal +

++coal

++ coal ,* :: untyped vase XX document -### ++code +

++code

++ code ,@uvI :: symmetric key XX document -### ++cone +

++cone

++ cone :: reconfiguration $% [& p=twig] :: transform @@ -367,13 +367,13 @@ XX document XX document -### ++chum +

++chum

++ chum ,@uvI :: hashed passcode XX document -### ++claw +

++claw

++ claw :: startup chain $: joy=(unit coal) :: local context @@ -386,7 +386,7 @@ XX document XX document -### ++clip +

++clip

++ clip (each ,@if ,@is) :: client IP @@ -400,19 +400,19 @@ See %eyre documentation. ! type-fail ! exit -### ++coal +

++coal

++ coal ,* :: untyped vase XX document -### ++code +

++code

++ code ,@uvI :: symmetric key XX document -### ++cone +

++cone

++ cone :: reconfiguration $% [& p=twig] :: transform @@ -421,13 +421,13 @@ XX document XX document -### ++coop +

++coop

++ coop (unit ares) :: e2e ack XX document -### ++corn +

++corn

++ corn :: flow by server $: hen=duct :: admin channel @@ -438,7 +438,7 @@ XX document XX document -### ++cred +

++cred

++ cred :: credential $: hut=hoot :: client host @@ -451,7 +451,7 @@ XX document XX document -### ++cuff +

++cuff

++ cuff :: permissions $: p=(unit (set monk)) :: readers @@ -460,13 +460,13 @@ XX document XX document -### ++deed +

++deed

++ deed ,[p=@ q=step r=?] :: sig, stage, fake? XX document -### ++dome +

++dome

++ dome :: project state $: ang=agon :: pedigree @@ -478,7 +478,7 @@ XX document XX document -### ++dore +

++dore

++ dore :: foreign contact $: wod=road :: connection to @@ -488,13 +488,13 @@ XX document XX document -### ++dove +

++dove

++ dove ,[p=@ud q=(map ,@ud ,@)] :: count hash 13-blocks XX document -### ++epic +

++epic

++ epic :: FCGI parameters $: qix=(map ,@t ,@t) :: query @@ -506,13 +506,13 @@ XX document XX document -### ++flap +

++flap

++ flap ,@uvH :: network packet id XX document -### ++flow +

++flow

++ flow :: packet connection $: rtt=@dr :: decaying avg rtt @@ -521,7 +521,7 @@ XX document XX document -### ++fort +

++fort

++ fort :: formal state $: %0 :: version @@ -533,19 +533,19 @@ XX document XX document -### ++frog +

++frog

++ frog ,[p=@da q=nori] :: time and change XX document -### ++gank +

++gank

++ gank (each vase (list tank)) :: abstract result XX document -### ++gift +

++gift

++ gift :: one-way effect $% [%$ p=vase] :: trivial output @@ -581,7 +581,7 @@ XX document XX document -### ++zang +

++zang

++ zang :: XX evil hack $% [%backlog p=path q=?(%da %dr %ud) r=@] :: @@ -597,25 +597,25 @@ XX document XX document -### ++gilt +

++gilt

++ gilt ,[@tas *] :: presumed gift XX document -### ++gens +

++gens

++ gens ,[p=lang q=gcos] :: general identity XX document -### ++germ +

++germ

++ germ ?(%init %fine %that %this %mate %meld) :: merge style XX document -### ++gcos +

++gcos

++ gcos :: id description $% [%czar ~] :: 8-bit ship @@ -627,7 +627,7 @@ XX document XX document -### ++goad +

++goad

++ goad :: common note $% [%eg p=riot] :: simple result @@ -645,7 +645,7 @@ XX document XX document -### ++goal +

++goal

++ goal :: app request $% [%$ p=type] :: open for input @@ -664,73 +664,73 @@ XX document XX document -### ++govt +

++govt

++ govt path :: country/postcode XX document -### ++hand +

++hand

++ hand ,@uvH :: hash of code XX document -### ++hart +

++hart

++ hart ,[p=? q=(unit ,@ud) r=host] :: http sec/port/host XX document -### ++hate +

++hate

++ hate ,[p=purl q=@p r=moth] :: semi-cooked request XX document -### ++heir +

++heir

++ heir ,[p=@ud q=mess r=(unit love)] :: status/headers/data XX document -### ++hiss +

++hiss

++ hiss ,[p=purl q=moth] :: outbound request XX document -### ++hist +

++hist

++ hist ,[p=@ud q=(list ,@t)] :: depth texts XX document -### ++hole +

++hole

++ hole ,@t :: session identity XX document -### ++hoot +

++hoot

++ hoot ,[p=? q=(unit ,@ud) r=host] :: secure/port/host XX document -### ++hort +

++hort

++ hort ,[p=(unit ,@ud) q=host] :: http port/host XX document -### ++host +

++host

++ host $%([& p=(list ,@t)] [| p=@if]) :: http host XX document -### ++httq +

++httq

++ httq :: raw http request $: p=meth :: method @@ -741,13 +741,13 @@ XX document XX document -### ++httr +

++httr

++ httr ,[p=@ud q=mess r=(unit octs)] :: raw http response XX document -### ++httx +

++httx

++ httx :: encapsulated http $: p=? :: https? @@ -757,13 +757,13 @@ XX document XX document -### ++kite +

++kite

++ kite ,[p=care q=case r=ship s=desk t=spur] :: parsed global name XX document -### ++json +

++json

++ json :: normal json value $| ~ :: null @@ -776,7 +776,7 @@ XX document XX document -### ++jsot +

++jsot

++ jsot :: strict json top $% [%a p=(list json)] :: array @@ -785,7 +785,7 @@ XX document XX document -### ++lamb +

++lamb

++ lamb :: short path $% [& p=@tas] :: auto @@ -794,7 +794,7 @@ XX document XX document -### ++lane +

++lane

++ lane :: packet route $% [%if p=@da q=@ud r=@if] :: IP4/public UDP/addr @@ -804,25 +804,25 @@ XX document XX document -### ++lang +

++lang

++ lang ,@ta :: IETF lang as code XX document -### ++lark +

++lark

++ lark ,[p=(unit ,@tas) q=lawn] :: parsed command XX document -### ++lass +

++lass

++ lass ?(%0 %1 %2) :: power increment XX document -### ++lath +

++lath

++ lath $% :: pipeline stage [%0 p=lass q=lamb r=(list cone) s=twig] :: command @@ -832,37 +832,37 @@ XX document XX document -### ++lawn +

++lawn

++ lawn (list lath) :: XX document -### ++lice +

++lice

++ lice ,[p=ship q=buck] :: full license XX document -### ++life +

++life

++ life ,@ud :: regime number XX document -### ++lint +

++lint

++ lint (list rock) :: fragment array XX document -### ++lobe +

++lobe

++ lobe ,@ :: blob ref XX document -### ++love +

++love

++ love $% :: http response [%ham p=manx] :: html node @@ -874,37 +874,37 @@ XX document XX document -### ++luge +

++luge

++ luge ,[p=mark q=*] :: fully typed content XX document -### ++maki +

++maki

++ maki ,[p=@ta q=@ta r=@ta s=path] :: XX document -### ++mace +

++mace

++ mace (list ,[p=life q=ring]) :: private secrets XX document -### ++marv +

++marv

++ marv ?(%da %tas %ud) :: release form XX document -### ++math +

++math

++ math (map ,@t (list ,@t)) :: semiparsed headers XX document -### ++meal +

++meal

++ meal :: payload $% [%back p=cape q=flap r=@dr] :: acknowledgment @@ -917,13 +917,13 @@ XX document XX document -### ++mess +

++mess

++ mess (list ,[p=@t q=@t]) :: raw http headers XX document -### ++meta +

++meta

++ meta :: path metadata $% [& q=@uvI] :: hash @@ -932,7 +932,7 @@ XX document XX document -### ++meth +

++meth

++ meth :: http methods $? %conn :: CONNECT @@ -947,13 +947,13 @@ XX document XX document -### ++mite +

++mite

++ mite (list ,@ta) :: mime type XX document -### ++miso +

++miso

++ miso :: ankh delta $% [%del p=*] :: delete @@ -963,49 +963,49 @@ XX document XX document -### ++mizu +

++mizu

++ mizu ,[p=@u q=(map ,@ud tako) r=rang] :: new state XX document -### ++moar +

++moar

++ moar ,[p=@ud q=@ud] :: normal change range XX document -### ++moat +

++moat

++ moat ,[p=case q=case r=path] :: change range XX document -### ++mood +

++mood

++ mood ,[p=care q=case r=path] :: request in desk XX document -### ++moth +

++moth

++ moth ,[p=meth q=math r=(unit octs)] :: http operation XX document -### ++name +

++name

++ name ,[p=@t q=(unit ,@t) r=(unit ,@t) s=@t] :: first mid/nick last XX document -### ++newt +

++newt

++ newt ?(%boot %kick %mess %slay %wake) :: lifecycle events XX document -### ++nose +

++nose

++ nose :: response, kernel $? [%$ p=(unit ,[p=tutu q=(list)])] :: standard input @@ -1014,7 +1014,7 @@ XX document XX document -### ++note +

++note

++ note :: response, user $? [%$ p=(unit ,[p=type q=(list)])] :: standard input @@ -1024,7 +1024,7 @@ XX document XX document -### ++nori +

++nori

++ nori :: repository action $% [& q=soba] :: delta @@ -1033,73 +1033,73 @@ XX document XX document -### ++octs +

++octs

++ octs ,[p=@ud q=@] :: octet-stream XX document -### ++oryx +

++oryx

++ oryx ,@t :: CSRF secret XX document -### ++pact +

++pact

++ pact path :: routed path XX document -### ++pail +

++pail

++ pail ?(%none %warm %cold) :: connection status XX document -### ++plan +

++plan

++ plan (trel view (pair ,@da (unit ,@dr)) path) :: subscription XX document -### ++plea +

++plea

++ plea ,[p=@ud q=[p=? q=@t]] :: live prompt XX document -### ++pork +

++pork

++ pork ,[p=(unit ,@ta) q=(list ,@t)] :: fully parsed url XX document -### ++pred +

++pred

++ pred ,[p=@ta q=@tas r=@ta ~] :: proto-path XX document -### ++prod +

++prod

++ prod ,[p=prom q=tape r=tape] :: prompt XX document -### ++prom +

++prom

++ prom ?(%text %pass %none) :: format type XX document -### ++purl +

++purl

++ purl ,[p=hart q=pork r=quay] :: parsed url XX document -### ++putt +

++putt

++ putt :: outgoing message $: ski=snow :: sequence acked/sent @@ -1108,7 +1108,7 @@ XX document XX document -### ++pyre +

++pyre

++ pyre :: cascade stash $: p=(map ,[p=path q=path r=coal] coal) :: by path @@ -1118,13 +1118,13 @@ XX document XX document -### ++quay +

++quay

++ quay (list ,[p=@t q=@t]) :: parsed url query XX document -### ++quri +

++quri

++ quri :: request-uri $% [& p=purl] :: absolute @@ -1133,7 +1133,7 @@ XX document XX document -### ++race +

++race

++ race :: inbound stream $: did=@ud :: filled sequence @@ -1144,13 +1144,13 @@ XX document XX document -### ++rank +

++rank

++ rank ?(%czar %king %duke %earl %pawn) :: ship width class XX document -### ++rang +

++rang

++ rang $: hut=(map tako yaki) :: lat=(map lobe blob) :: @@ -1158,7 +1158,7 @@ XX document XX document -### ++rant +

++rant

++ rant :: namespace binding $: p=[p=care q=case r=@tas] :: clade release book @@ -1168,7 +1168,7 @@ XX document XX document -### ++rave +

++rave

++ rave :: general request $% [& p=mood] :: single request @@ -1177,7 +1177,7 @@ XX document XX document -### ++rill +

++rill

++ rill :: outbound stream $: sed=@ud :: sent @@ -1186,13 +1186,13 @@ XX document XX document -### ++riot +

++riot

++ riot (unit rant) :: response/complete XX document -### ++road +

++road

++ road :: secured oneway route $: exp=@da :: expiration date @@ -1202,37 +1202,37 @@ XX document XX document -### ++rock +

++rock

++ rock ,@uvO :: packet XX document -### ++rout +

++rout

++ rout ,[p=(list host) q=path r=oryx s=path] :: http route (new) XX document -### ++rump +

++rump

++ rump ,[p=care q=case r=@tas s=path] :: relative path XX document -### ++saba +

++saba

++ saba ,[p=ship q=@tas r=moar s=dome] :: patch/merge XX document -### ++sack +

++sack

++ sack ,[p=ship q=ship] :: incoming [our his] XX document -### ++sufi +

++sufi

++ sufi :: domestic host $: hoy=(list ship) :: hierarchy @@ -1244,13 +1244,13 @@ XX document XX document -### ++salt +

++salt

++ salt ,@uv :: entropy XX document -### ++seal +

++seal

++ seal :: auth conversation $: whu=(unit ship) :: client identity @@ -1262,13 +1262,13 @@ XX document XX document -### ++sect +

++sect

++ sect ?(%black %blue %red %orange %white) :: banner XX document -### ++shed +

++shed

++ shed :: packet flow $: $: rtt=@dr :: smoothed rtt @@ -1290,43 +1290,43 @@ XX document XX document -### ++skit +

++skit

++ skit ,[p=(unit ,@ta) q=(list ,@ta) r=(list ,@ta)] :: tracking path XX document -### ++skin +

++skin

++ skin ?(%none %open %fast %full) :: encoding stem XX document -### ++slip +

++slip

++ slip ,[p=path q=goal] :: traceable request XX document -### ++snow +

++snow

++ snow ,[p=@ud q=@ud r=(set ,@ud)] :: window exceptions XX document -### ++soap +

++soap

++ soap ,[p=[p=life q=life] q=path r=@ud] :: statement id XX document -### ++soup +

++soup

++ soup ,[p=path q=@ud] :: new statement id XX document -### ++soul +

++soul

++ soul :: packet in travel $: gom=soup :: message identity @@ -1338,61 +1338,61 @@ XX document XX document -### ++soba +

++soba

++ soba ,[p=cart q=(list ,[p=path q=miso])] :: delta XX document -### ++sock +

++sock

++ sock ,[p=ship q=ship] :: outgoing [from to] XX document -### ++spur +

++spur

++ spur path :: ship desk case spur XX document -### ++step +

++step

++ step ,[p=bray q=gens r=pass] :: identity stage XX document -### ++tako +

++tako

++ tako ,@ :: yaki ref XX document -### ++tart +

++tart

++ tart $+([@da path note] bowl) :: process core XX document -### ++taxi +

++taxi

++ taxi ,[p=lane q=rock] :: routed packet XX document -### ++tick +

++tick

++ tick ,@ud :: process id XX document -### ++toro +

++toro

++ toro ,[p=@ta q=nori] :: general change XX document -### ++town +

++town

++ town :: all security state $: lit=@ud :: imperial modulus @@ -1403,37 +1403,37 @@ XX document XX document -### ++tube +

++tube

++ tube ,[p=@ta q=@ta r=@ta s=path] :: canonical path XX document -### ++tutu +

++tutu

++ tutu ,* :: presumed type XX document -### ++yaki +

++yaki

++ yaki ,[p=(list tako) q=(map path lobe) r=tako t=@da] :: commit XX document -### ++view +

++view

++ view ?(%u %v %w %x %y %z) :: view mode XX document -### ++waks +

++waks

++ waks (map path woof) :: list file states XX document -### ++what +

++what

++ what :: logical identity $% [%anon ~] :: anonymous @@ -1444,38 +1444,38 @@ XX document XX document -### ++whom +

++whom

++ whom ,[p=@ud q=govt r=sect s=name] :: year/govt/id XX document -### ++woof +

++woof

++ woof $| %know :: udon transform [%chan (list $|(@ud [p=@ud q=@ud]))] :: XX document -### ++wund +

++wund

++ wund (list ,[p=life q=ring r=acru]) :: mace in action XX document -### ++will +

++will

++ will (list deed) :: certificate XX document -### ++worm +

++worm

++ worm ,* :: vase of tart XX document -### ++zuse +

++zuse

++ zuse %314 :: hoon/zuse kelvin -- diff --git a/docs/pub/doc/hoon/reference.md b/base/pub/doc/hoon/reference.md similarity index 100% rename from docs/pub/doc/hoon/reference.md rename to base/pub/doc/hoon/reference.md diff --git a/docs/pub/doc/hoon/reference/odors.md b/base/pub/doc/hoon/reference/odors.md similarity index 100% rename from docs/pub/doc/hoon/reference/odors.md rename to base/pub/doc/hoon/reference/odors.md diff --git a/docs/pub/doc/hoon/runes.md b/base/pub/doc/hoon/runes.md similarity index 100% rename from docs/pub/doc/hoon/runes.md rename to base/pub/doc/hoon/runes.md diff --git a/docs/pub/doc/hoon/runes/bc.md b/base/pub/doc/hoon/runes/bc.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc.md rename to base/pub/doc/hoon/runes/bc.md diff --git a/docs/pub/doc/hoon/runes/bc/bcbr.md b/base/pub/doc/hoon/runes/bc/bcbr.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bcbr.md rename to base/pub/doc/hoon/runes/bc/bcbr.md diff --git a/docs/pub/doc/hoon/runes/bc/bccb.md b/base/pub/doc/hoon/runes/bc/bccb.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bccb.md rename to base/pub/doc/hoon/runes/bc/bccb.md diff --git a/docs/pub/doc/hoon/runes/bc/bccl.md b/base/pub/doc/hoon/runes/bc/bccl.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bccl.md rename to base/pub/doc/hoon/runes/bc/bccl.md diff --git a/docs/pub/doc/hoon/runes/bc/bccm.md b/base/pub/doc/hoon/runes/bc/bccm.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bccm.md rename to base/pub/doc/hoon/runes/bc/bccm.md diff --git a/docs/pub/doc/hoon/runes/bc/bccn.md b/base/pub/doc/hoon/runes/bc/bccn.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bccn.md rename to base/pub/doc/hoon/runes/bc/bccn.md diff --git a/docs/pub/doc/hoon/runes/bc/bckt.md b/base/pub/doc/hoon/runes/bc/bckt.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bckt.md rename to base/pub/doc/hoon/runes/bc/bckt.md diff --git a/docs/pub/doc/hoon/runes/bc/bcls.md b/base/pub/doc/hoon/runes/bc/bcls.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bcls.md rename to base/pub/doc/hoon/runes/bc/bcls.md diff --git a/docs/pub/doc/hoon/runes/bc/bcpm.md b/base/pub/doc/hoon/runes/bc/bcpm.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bcpm.md rename to base/pub/doc/hoon/runes/bc/bcpm.md diff --git a/docs/pub/doc/hoon/runes/bc/bcpt.md b/base/pub/doc/hoon/runes/bc/bcpt.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bcpt.md rename to base/pub/doc/hoon/runes/bc/bcpt.md diff --git a/docs/pub/doc/hoon/runes/bc/bctr.md b/base/pub/doc/hoon/runes/bc/bctr.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bctr.md rename to base/pub/doc/hoon/runes/bc/bctr.md diff --git a/docs/pub/doc/hoon/runes/bc/bcts.md b/base/pub/doc/hoon/runes/bc/bcts.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bcts.md rename to base/pub/doc/hoon/runes/bc/bcts.md diff --git a/docs/pub/doc/hoon/runes/bc/bcwt.md b/base/pub/doc/hoon/runes/bc/bcwt.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bcwt.md rename to base/pub/doc/hoon/runes/bc/bcwt.md diff --git a/docs/pub/doc/hoon/runes/bc/bczp.md b/base/pub/doc/hoon/runes/bc/bczp.md similarity index 100% rename from docs/pub/doc/hoon/runes/bc/bczp.md rename to base/pub/doc/hoon/runes/bc/bczp.md diff --git a/docs/pub/doc/hoon/runes/br.md b/base/pub/doc/hoon/runes/br.md similarity index 100% rename from docs/pub/doc/hoon/runes/br.md rename to base/pub/doc/hoon/runes/br.md diff --git a/docs/pub/doc/hoon/runes/br/brcb.md b/base/pub/doc/hoon/runes/br/brcb.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brcb.md rename to base/pub/doc/hoon/runes/br/brcb.md diff --git a/docs/pub/doc/hoon/runes/br/brcn.md b/base/pub/doc/hoon/runes/br/brcn.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brcn.md rename to base/pub/doc/hoon/runes/br/brcn.md diff --git a/docs/pub/doc/hoon/runes/br/brdt.md b/base/pub/doc/hoon/runes/br/brdt.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brdt.md rename to base/pub/doc/hoon/runes/br/brdt.md diff --git a/docs/pub/doc/hoon/runes/br/brfs.md b/base/pub/doc/hoon/runes/br/brfs.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brfs.md rename to base/pub/doc/hoon/runes/br/brfs.md diff --git a/docs/pub/doc/hoon/runes/br/brhp.md b/base/pub/doc/hoon/runes/br/brhp.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brhp.md rename to base/pub/doc/hoon/runes/br/brhp.md diff --git a/docs/pub/doc/hoon/runes/br/brkt.md b/base/pub/doc/hoon/runes/br/brkt.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brkt.md rename to base/pub/doc/hoon/runes/br/brkt.md diff --git a/docs/pub/doc/hoon/runes/br/brls.md b/base/pub/doc/hoon/runes/br/brls.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brls.md rename to base/pub/doc/hoon/runes/br/brls.md diff --git a/docs/pub/doc/hoon/runes/br/brtr.md b/base/pub/doc/hoon/runes/br/brtr.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brtr.md rename to base/pub/doc/hoon/runes/br/brtr.md diff --git a/docs/pub/doc/hoon/runes/br/brts.md b/base/pub/doc/hoon/runes/br/brts.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brts.md rename to base/pub/doc/hoon/runes/br/brts.md diff --git a/docs/pub/doc/hoon/runes/br/brwt.md b/base/pub/doc/hoon/runes/br/brwt.md similarity index 100% rename from docs/pub/doc/hoon/runes/br/brwt.md rename to base/pub/doc/hoon/runes/br/brwt.md diff --git a/docs/pub/doc/hoon/runes/cl.md b/base/pub/doc/hoon/runes/cl.md similarity index 100% rename from docs/pub/doc/hoon/runes/cl.md rename to base/pub/doc/hoon/runes/cl.md diff --git a/docs/pub/doc/hoon/runes/cl/clcb.md b/base/pub/doc/hoon/runes/cl/clcb.md similarity index 100% rename from docs/pub/doc/hoon/runes/cl/clcb.md rename to base/pub/doc/hoon/runes/cl/clcb.md diff --git a/docs/pub/doc/hoon/runes/cl/clfs.md b/base/pub/doc/hoon/runes/cl/clfs.md similarity index 100% rename from docs/pub/doc/hoon/runes/cl/clfs.md rename to base/pub/doc/hoon/runes/cl/clfs.md diff --git a/docs/pub/doc/hoon/runes/cl/clhp.md b/base/pub/doc/hoon/runes/cl/clhp.md similarity index 100% rename from docs/pub/doc/hoon/runes/cl/clhp.md rename to base/pub/doc/hoon/runes/cl/clhp.md diff --git a/docs/pub/doc/hoon/runes/cl/clkt.md b/base/pub/doc/hoon/runes/cl/clkt.md similarity index 100% rename from docs/pub/doc/hoon/runes/cl/clkt.md rename to base/pub/doc/hoon/runes/cl/clkt.md diff --git a/docs/pub/doc/hoon/runes/cl/clls.md b/base/pub/doc/hoon/runes/cl/clls.md similarity index 100% rename from docs/pub/doc/hoon/runes/cl/clls.md rename to base/pub/doc/hoon/runes/cl/clls.md diff --git a/docs/pub/doc/hoon/runes/cl/clsg.md b/base/pub/doc/hoon/runes/cl/clsg.md similarity index 100% rename from docs/pub/doc/hoon/runes/cl/clsg.md rename to base/pub/doc/hoon/runes/cl/clsg.md diff --git a/docs/pub/doc/hoon/runes/cl/cltr.md b/base/pub/doc/hoon/runes/cl/cltr.md similarity index 100% rename from docs/pub/doc/hoon/runes/cl/cltr.md rename to base/pub/doc/hoon/runes/cl/cltr.md diff --git a/docs/pub/doc/hoon/runes/cn.md b/base/pub/doc/hoon/runes/cn.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn.md rename to base/pub/doc/hoon/runes/cn.md diff --git a/docs/pub/doc/hoon/runes/cn/cncb.md b/base/pub/doc/hoon/runes/cn/cncb.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cncb.md rename to base/pub/doc/hoon/runes/cn/cncb.md diff --git a/docs/pub/doc/hoon/runes/cn/cncl.md b/base/pub/doc/hoon/runes/cn/cncl.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cncl.md rename to base/pub/doc/hoon/runes/cn/cncl.md diff --git a/docs/pub/doc/hoon/runes/cn/cndt.md b/base/pub/doc/hoon/runes/cn/cndt.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cndt.md rename to base/pub/doc/hoon/runes/cn/cndt.md diff --git a/docs/pub/doc/hoon/runes/cn/cnhp.md b/base/pub/doc/hoon/runes/cn/cnhp.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cnhp.md rename to base/pub/doc/hoon/runes/cn/cnhp.md diff --git a/docs/pub/doc/hoon/runes/cn/cnkt.md b/base/pub/doc/hoon/runes/cn/cnkt.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cnkt.md rename to base/pub/doc/hoon/runes/cn/cnkt.md diff --git a/docs/pub/doc/hoon/runes/cn/cnls.md b/base/pub/doc/hoon/runes/cn/cnls.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cnls.md rename to base/pub/doc/hoon/runes/cn/cnls.md diff --git a/docs/pub/doc/hoon/runes/cn/cnsg.md b/base/pub/doc/hoon/runes/cn/cnsg.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cnsg.md rename to base/pub/doc/hoon/runes/cn/cnsg.md diff --git a/docs/pub/doc/hoon/runes/cn/cntr.md b/base/pub/doc/hoon/runes/cn/cntr.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cntr.md rename to base/pub/doc/hoon/runes/cn/cntr.md diff --git a/docs/pub/doc/hoon/runes/cn/cnts.md b/base/pub/doc/hoon/runes/cn/cnts.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cnts.md rename to base/pub/doc/hoon/runes/cn/cnts.md diff --git a/docs/pub/doc/hoon/runes/cn/cnzy.md b/base/pub/doc/hoon/runes/cn/cnzy.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cnzy.md rename to base/pub/doc/hoon/runes/cn/cnzy.md diff --git a/docs/pub/doc/hoon/runes/cn/cnzz.md b/base/pub/doc/hoon/runes/cn/cnzz.md similarity index 100% rename from docs/pub/doc/hoon/runes/cn/cnzz.md rename to base/pub/doc/hoon/runes/cn/cnzz.md diff --git a/docs/pub/doc/hoon/runes/dt.md b/base/pub/doc/hoon/runes/dt.md similarity index 100% rename from docs/pub/doc/hoon/runes/dt.md rename to base/pub/doc/hoon/runes/dt.md diff --git a/docs/pub/doc/hoon/runes/dt/dtkt.md b/base/pub/doc/hoon/runes/dt/dtkt.md similarity index 100% rename from docs/pub/doc/hoon/runes/dt/dtkt.md rename to base/pub/doc/hoon/runes/dt/dtkt.md diff --git a/docs/pub/doc/hoon/runes/dt/dtls.md b/base/pub/doc/hoon/runes/dt/dtls.md similarity index 100% rename from docs/pub/doc/hoon/runes/dt/dtls.md rename to base/pub/doc/hoon/runes/dt/dtls.md diff --git a/docs/pub/doc/hoon/runes/dt/dttr.md b/base/pub/doc/hoon/runes/dt/dttr.md similarity index 100% rename from docs/pub/doc/hoon/runes/dt/dttr.md rename to base/pub/doc/hoon/runes/dt/dttr.md diff --git a/docs/pub/doc/hoon/runes/dt/dtts.md b/base/pub/doc/hoon/runes/dt/dtts.md similarity index 100% rename from docs/pub/doc/hoon/runes/dt/dtts.md rename to base/pub/doc/hoon/runes/dt/dtts.md diff --git a/docs/pub/doc/hoon/runes/dt/dtwt.md b/base/pub/doc/hoon/runes/dt/dtwt.md similarity index 100% rename from docs/pub/doc/hoon/runes/dt/dtwt.md rename to base/pub/doc/hoon/runes/dt/dtwt.md diff --git a/docs/pub/doc/hoon/runes/dt/dtzy.md b/base/pub/doc/hoon/runes/dt/dtzy.md similarity index 100% rename from docs/pub/doc/hoon/runes/dt/dtzy.md rename to base/pub/doc/hoon/runes/dt/dtzy.md diff --git a/docs/pub/doc/hoon/runes/dt/dtzz.md b/base/pub/doc/hoon/runes/dt/dtzz.md similarity index 100% rename from docs/pub/doc/hoon/runes/dt/dtzz.md rename to base/pub/doc/hoon/runes/dt/dtzz.md diff --git a/docs/pub/doc/hoon/runes/hx.md b/base/pub/doc/hoon/runes/hx.md similarity index 100% rename from docs/pub/doc/hoon/runes/hx.md rename to base/pub/doc/hoon/runes/hx.md diff --git a/docs/pub/doc/hoon/runes/hx/hxgl.md b/base/pub/doc/hoon/runes/hx/hxgl.md similarity index 100% rename from docs/pub/doc/hoon/runes/hx/hxgl.md rename to base/pub/doc/hoon/runes/hx/hxgl.md diff --git a/docs/pub/doc/hoon/runes/hx/hxgr.md b/base/pub/doc/hoon/runes/hx/hxgr.md similarity index 100% rename from docs/pub/doc/hoon/runes/hx/hxgr.md rename to base/pub/doc/hoon/runes/hx/hxgr.md diff --git a/docs/pub/doc/hoon/runes/kt.md b/base/pub/doc/hoon/runes/kt.md similarity index 100% rename from docs/pub/doc/hoon/runes/kt.md rename to base/pub/doc/hoon/runes/kt.md diff --git a/docs/pub/doc/hoon/runes/kt/ktbr.md b/base/pub/doc/hoon/runes/kt/ktbr.md similarity index 100% rename from docs/pub/doc/hoon/runes/kt/ktbr.md rename to base/pub/doc/hoon/runes/kt/ktbr.md diff --git a/docs/pub/doc/hoon/runes/kt/ktdt.md b/base/pub/doc/hoon/runes/kt/ktdt.md similarity index 100% rename from docs/pub/doc/hoon/runes/kt/ktdt.md rename to base/pub/doc/hoon/runes/kt/ktdt.md diff --git a/docs/pub/doc/hoon/runes/kt/kthp.md b/base/pub/doc/hoon/runes/kt/kthp.md similarity index 100% rename from docs/pub/doc/hoon/runes/kt/kthp.md rename to base/pub/doc/hoon/runes/kt/kthp.md diff --git a/docs/pub/doc/hoon/runes/kt/ktls.md b/base/pub/doc/hoon/runes/kt/ktls.md similarity index 100% rename from docs/pub/doc/hoon/runes/kt/ktls.md rename to base/pub/doc/hoon/runes/kt/ktls.md diff --git a/docs/pub/doc/hoon/runes/kt/ktpm.md b/base/pub/doc/hoon/runes/kt/ktpm.md similarity index 100% rename from docs/pub/doc/hoon/runes/kt/ktpm.md rename to base/pub/doc/hoon/runes/kt/ktpm.md diff --git a/docs/pub/doc/hoon/runes/kt/ktsg.md b/base/pub/doc/hoon/runes/kt/ktsg.md similarity index 100% rename from docs/pub/doc/hoon/runes/kt/ktsg.md rename to base/pub/doc/hoon/runes/kt/ktsg.md diff --git a/docs/pub/doc/hoon/runes/kt/ktts.md b/base/pub/doc/hoon/runes/kt/ktts.md similarity index 100% rename from docs/pub/doc/hoon/runes/kt/ktts.md rename to base/pub/doc/hoon/runes/kt/ktts.md diff --git a/docs/pub/doc/hoon/runes/kt/ktwt.md b/base/pub/doc/hoon/runes/kt/ktwt.md similarity index 100% rename from docs/pub/doc/hoon/runes/kt/ktwt.md rename to base/pub/doc/hoon/runes/kt/ktwt.md diff --git a/docs/pub/doc/hoon/runes/sg.md b/base/pub/doc/hoon/runes/sg.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg.md rename to base/pub/doc/hoon/runes/sg.md diff --git a/docs/pub/doc/hoon/runes/sg/sgbc.md b/base/pub/doc/hoon/runes/sg/sgbc.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgbc.md rename to base/pub/doc/hoon/runes/sg/sgbc.md diff --git a/docs/pub/doc/hoon/runes/sg/sgbr.md b/base/pub/doc/hoon/runes/sg/sgbr.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgbr.md rename to base/pub/doc/hoon/runes/sg/sgbr.md diff --git a/docs/pub/doc/hoon/runes/sg/sgcb.md b/base/pub/doc/hoon/runes/sg/sgcb.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgcb.md rename to base/pub/doc/hoon/runes/sg/sgcb.md diff --git a/docs/pub/doc/hoon/runes/sg/sgcn.md b/base/pub/doc/hoon/runes/sg/sgcn.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgcn.md rename to base/pub/doc/hoon/runes/sg/sgcn.md diff --git a/docs/pub/doc/hoon/runes/sg/sgfs.md b/base/pub/doc/hoon/runes/sg/sgfs.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgfs.md rename to base/pub/doc/hoon/runes/sg/sgfs.md diff --git a/docs/pub/doc/hoon/runes/sg/sggl.md b/base/pub/doc/hoon/runes/sg/sggl.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sggl.md rename to base/pub/doc/hoon/runes/sg/sggl.md diff --git a/docs/pub/doc/hoon/runes/sg/sggr.md b/base/pub/doc/hoon/runes/sg/sggr.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sggr.md rename to base/pub/doc/hoon/runes/sg/sggr.md diff --git a/docs/pub/doc/hoon/runes/sg/sgls.md b/base/pub/doc/hoon/runes/sg/sgls.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgls.md rename to base/pub/doc/hoon/runes/sg/sgls.md diff --git a/docs/pub/doc/hoon/runes/sg/sgpm.md b/base/pub/doc/hoon/runes/sg/sgpm.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgpm.md rename to base/pub/doc/hoon/runes/sg/sgpm.md diff --git a/docs/pub/doc/hoon/runes/sg/sgts.md b/base/pub/doc/hoon/runes/sg/sgts.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgts.md rename to base/pub/doc/hoon/runes/sg/sgts.md diff --git a/docs/pub/doc/hoon/runes/sg/sgwt.md b/base/pub/doc/hoon/runes/sg/sgwt.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgwt.md rename to base/pub/doc/hoon/runes/sg/sgwt.md diff --git a/docs/pub/doc/hoon/runes/sg/sgzp.md b/base/pub/doc/hoon/runes/sg/sgzp.md similarity index 100% rename from docs/pub/doc/hoon/runes/sg/sgzp.md rename to base/pub/doc/hoon/runes/sg/sgzp.md diff --git a/docs/pub/doc/hoon/runes/sm.md b/base/pub/doc/hoon/runes/sm.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm.md rename to base/pub/doc/hoon/runes/sm.md diff --git a/docs/pub/doc/hoon/runes/sm/smcl.md b/base/pub/doc/hoon/runes/sm/smcl.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm/smcl.md rename to base/pub/doc/hoon/runes/sm/smcl.md diff --git a/docs/pub/doc/hoon/runes/sm/smcn.md b/base/pub/doc/hoon/runes/sm/smcn.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm/smcn.md rename to base/pub/doc/hoon/runes/sm/smcn.md diff --git a/docs/pub/doc/hoon/runes/sm/smdq.md b/base/pub/doc/hoon/runes/sm/smdq.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm/smdq.md rename to base/pub/doc/hoon/runes/sm/smdq.md diff --git a/docs/pub/doc/hoon/runes/sm/smhp.md b/base/pub/doc/hoon/runes/sm/smhp.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm/smhp.md rename to base/pub/doc/hoon/runes/sm/smhp.md diff --git a/docs/pub/doc/hoon/runes/sm/smls.md b/base/pub/doc/hoon/runes/sm/smls.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm/smls.md rename to base/pub/doc/hoon/runes/sm/smls.md diff --git a/docs/pub/doc/hoon/runes/sm/smsg.md b/base/pub/doc/hoon/runes/sm/smsg.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm/smsg.md rename to base/pub/doc/hoon/runes/sm/smsg.md diff --git a/docs/pub/doc/hoon/runes/sm/smsm.md b/base/pub/doc/hoon/runes/sm/smsm.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm/smsm.md rename to base/pub/doc/hoon/runes/sm/smsm.md diff --git a/docs/pub/doc/hoon/runes/sm/smtr.md b/base/pub/doc/hoon/runes/sm/smtr.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm/smtr.md rename to base/pub/doc/hoon/runes/sm/smtr.md diff --git a/docs/pub/doc/hoon/runes/sm/smzz.md b/base/pub/doc/hoon/runes/sm/smzz.md similarity index 100% rename from docs/pub/doc/hoon/runes/sm/smzz.md rename to base/pub/doc/hoon/runes/sm/smzz.md diff --git a/docs/pub/doc/hoon/runes/ts.md b/base/pub/doc/hoon/runes/ts.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts.md rename to base/pub/doc/hoon/runes/ts.md diff --git a/docs/pub/doc/hoon/runes/ts/tsbr.md b/base/pub/doc/hoon/runes/ts/tsbr.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tsbr.md rename to base/pub/doc/hoon/runes/ts/tsbr.md diff --git a/docs/pub/doc/hoon/runes/ts/tscl.md b/base/pub/doc/hoon/runes/ts/tscl.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tscl.md rename to base/pub/doc/hoon/runes/ts/tscl.md diff --git a/docs/pub/doc/hoon/runes/ts/tsdt.md b/base/pub/doc/hoon/runes/ts/tsdt.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tsdt.md rename to base/pub/doc/hoon/runes/ts/tsdt.md diff --git a/docs/pub/doc/hoon/runes/ts/tsgl.md b/base/pub/doc/hoon/runes/ts/tsgl.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tsgl.md rename to base/pub/doc/hoon/runes/ts/tsgl.md diff --git a/docs/pub/doc/hoon/runes/ts/tsgr.md b/base/pub/doc/hoon/runes/ts/tsgr.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tsgr.md rename to base/pub/doc/hoon/runes/ts/tsgr.md diff --git a/docs/pub/doc/hoon/runes/ts/tshp.md b/base/pub/doc/hoon/runes/ts/tshp.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tshp.md rename to base/pub/doc/hoon/runes/ts/tshp.md diff --git a/docs/pub/doc/hoon/runes/ts/tskt.md b/base/pub/doc/hoon/runes/ts/tskt.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tskt.md rename to base/pub/doc/hoon/runes/ts/tskt.md diff --git a/docs/pub/doc/hoon/runes/ts/tsls.md b/base/pub/doc/hoon/runes/ts/tsls.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tsls.md rename to base/pub/doc/hoon/runes/ts/tsls.md diff --git a/docs/pub/doc/hoon/runes/ts/tssg.md b/base/pub/doc/hoon/runes/ts/tssg.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tssg.md rename to base/pub/doc/hoon/runes/ts/tssg.md diff --git a/docs/pub/doc/hoon/runes/ts/tstr.md b/base/pub/doc/hoon/runes/ts/tstr.md similarity index 100% rename from docs/pub/doc/hoon/runes/ts/tstr.md rename to base/pub/doc/hoon/runes/ts/tstr.md diff --git a/docs/pub/doc/hoon/runes/wt.md b/base/pub/doc/hoon/runes/wt.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt.md rename to base/pub/doc/hoon/runes/wt.md diff --git a/docs/pub/doc/hoon/runes/wt/wtbr.md b/base/pub/doc/hoon/runes/wt/wtbr.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtbr.md rename to base/pub/doc/hoon/runes/wt/wtbr.md diff --git a/docs/pub/doc/hoon/runes/wt/wtcl.md b/base/pub/doc/hoon/runes/wt/wtcl.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtcl.md rename to base/pub/doc/hoon/runes/wt/wtcl.md diff --git a/docs/pub/doc/hoon/runes/wt/wtdt.md b/base/pub/doc/hoon/runes/wt/wtdt.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtdt.md rename to base/pub/doc/hoon/runes/wt/wtdt.md diff --git a/docs/pub/doc/hoon/runes/wt/wtgl.md b/base/pub/doc/hoon/runes/wt/wtgl.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtgl.md rename to base/pub/doc/hoon/runes/wt/wtgl.md diff --git a/docs/pub/doc/hoon/runes/wt/wtgr.md b/base/pub/doc/hoon/runes/wt/wtgr.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtgr.md rename to base/pub/doc/hoon/runes/wt/wtgr.md diff --git a/docs/pub/doc/hoon/runes/wt/wthp.md b/base/pub/doc/hoon/runes/wt/wthp.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wthp.md rename to base/pub/doc/hoon/runes/wt/wthp.md diff --git a/docs/pub/doc/hoon/runes/wt/wthz.md b/base/pub/doc/hoon/runes/wt/wthz.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wthz.md rename to base/pub/doc/hoon/runes/wt/wthz.md diff --git a/docs/pub/doc/hoon/runes/wt/wtkt.md b/base/pub/doc/hoon/runes/wt/wtkt.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtkt.md rename to base/pub/doc/hoon/runes/wt/wtkt.md diff --git a/docs/pub/doc/hoon/runes/wt/wtkz.md b/base/pub/doc/hoon/runes/wt/wtkz.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtkz.md rename to base/pub/doc/hoon/runes/wt/wtkz.md diff --git a/docs/pub/doc/hoon/runes/wt/wtls.md b/base/pub/doc/hoon/runes/wt/wtls.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtls.md rename to base/pub/doc/hoon/runes/wt/wtls.md diff --git a/docs/pub/doc/hoon/runes/wt/wtlz.md b/base/pub/doc/hoon/runes/wt/wtlz.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtlz.md rename to base/pub/doc/hoon/runes/wt/wtlz.md diff --git a/docs/pub/doc/hoon/runes/wt/wtpm.md b/base/pub/doc/hoon/runes/wt/wtpm.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtpm.md rename to base/pub/doc/hoon/runes/wt/wtpm.md diff --git a/docs/pub/doc/hoon/runes/wt/wtpt.md b/base/pub/doc/hoon/runes/wt/wtpt.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtpt.md rename to base/pub/doc/hoon/runes/wt/wtpt.md diff --git a/docs/pub/doc/hoon/runes/wt/wtpz.md b/base/pub/doc/hoon/runes/wt/wtpz.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtpz.md rename to base/pub/doc/hoon/runes/wt/wtpz.md diff --git a/docs/pub/doc/hoon/runes/wt/wtsg.md b/base/pub/doc/hoon/runes/wt/wtsg.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtsg.md rename to base/pub/doc/hoon/runes/wt/wtsg.md diff --git a/docs/pub/doc/hoon/runes/wt/wtsz.md b/base/pub/doc/hoon/runes/wt/wtsz.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtsz.md rename to base/pub/doc/hoon/runes/wt/wtsz.md diff --git a/docs/pub/doc/hoon/runes/wt/wtts.md b/base/pub/doc/hoon/runes/wt/wtts.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtts.md rename to base/pub/doc/hoon/runes/wt/wtts.md diff --git a/docs/pub/doc/hoon/runes/wt/wttz.md b/base/pub/doc/hoon/runes/wt/wttz.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wttz.md rename to base/pub/doc/hoon/runes/wt/wttz.md diff --git a/docs/pub/doc/hoon/runes/wt/wtzp.md b/base/pub/doc/hoon/runes/wt/wtzp.md similarity index 100% rename from docs/pub/doc/hoon/runes/wt/wtzp.md rename to base/pub/doc/hoon/runes/wt/wtzp.md diff --git a/docs/pub/doc/hoon/runes/zp.md b/base/pub/doc/hoon/runes/zp.md similarity index 100% rename from docs/pub/doc/hoon/runes/zp.md rename to base/pub/doc/hoon/runes/zp.md diff --git a/docs/pub/doc/hoon/runes/zp/zpcb.md b/base/pub/doc/hoon/runes/zp/zpcb.md similarity index 100% rename from docs/pub/doc/hoon/runes/zp/zpcb.md rename to base/pub/doc/hoon/runes/zp/zpcb.md diff --git a/docs/pub/doc/hoon/runes/zp/zpcm.md b/base/pub/doc/hoon/runes/zp/zpcm.md similarity index 100% rename from docs/pub/doc/hoon/runes/zp/zpcm.md rename to base/pub/doc/hoon/runes/zp/zpcm.md diff --git a/docs/pub/doc/hoon/runes/zp/zpfs.md b/base/pub/doc/hoon/runes/zp/zpfs.md similarity index 100% rename from docs/pub/doc/hoon/runes/zp/zpfs.md rename to base/pub/doc/hoon/runes/zp/zpfs.md diff --git a/docs/pub/doc/hoon/runes/zp/zpgr.md b/base/pub/doc/hoon/runes/zp/zpgr.md similarity index 100% rename from docs/pub/doc/hoon/runes/zp/zpgr.md rename to base/pub/doc/hoon/runes/zp/zpgr.md diff --git a/docs/pub/doc/hoon/runes/zp/zpsm.md b/base/pub/doc/hoon/runes/zp/zpsm.md similarity index 100% rename from docs/pub/doc/hoon/runes/zp/zpsm.md rename to base/pub/doc/hoon/runes/zp/zpsm.md diff --git a/docs/pub/doc/hoon/runes/zp/zpts.md b/base/pub/doc/hoon/runes/zp/zpts.md similarity index 100% rename from docs/pub/doc/hoon/runes/zp/zpts.md rename to base/pub/doc/hoon/runes/zp/zpts.md diff --git a/docs/pub/doc/hoon/runes/zp/zpwt.md b/base/pub/doc/hoon/runes/zp/zpwt.md similarity index 100% rename from docs/pub/doc/hoon/runes/zp/zpwt.md rename to base/pub/doc/hoon/runes/zp/zpwt.md diff --git a/docs/pub/doc/hoon/runes/zp/zpzp.md b/base/pub/doc/hoon/runes/zp/zpzp.md similarity index 100% rename from docs/pub/doc/hoon/runes/zp/zpzp.md rename to base/pub/doc/hoon/runes/zp/zpzp.md diff --git a/docs/pub/doc/nock.md b/base/pub/doc/nock.md similarity index 100% rename from docs/pub/doc/nock.md rename to base/pub/doc/nock.md diff --git a/docs/pub/doc/nock/reference.md b/base/pub/doc/nock/reference.md similarity index 100% rename from docs/pub/doc/nock/reference.md rename to base/pub/doc/nock/reference.md diff --git a/docs/pub/doc/reference.md b/base/pub/doc/reference.md similarity index 100% rename from docs/pub/doc/reference.md rename to base/pub/doc/reference.md diff --git a/docs/pub/doc/reference/glossary.md b/base/pub/doc/reference/glossary.md similarity index 100% rename from docs/pub/doc/reference/glossary.md rename to base/pub/doc/reference/glossary.md diff --git a/docs/pub/doc/reference/vere.md b/base/pub/doc/reference/vere.md similarity index 100% rename from docs/pub/doc/reference/vere.md rename to base/pub/doc/reference/vere.md diff --git a/main/pub/fab/readme.md b/base/pub/fab/readme.md similarity index 100% rename from main/pub/fab/readme.md rename to base/pub/fab/readme.md diff --git a/main/pub/fab/sqar/hymn.hook b/base/pub/fab/sqar/hymn.hook similarity index 100% rename from main/pub/fab/sqar/hymn.hook rename to base/pub/fab/sqar/hymn.hook diff --git a/main/pub/radio/fab/hymn.hook b/base/pub/radio/fab/hymn.hook similarity index 79% rename from main/pub/radio/fab/hymn.hook rename to base/pub/radio/fab/hymn.hook index e308a31d3..86369c103 100644 --- a/main/pub/radio/fab/hymn.hook +++ b/base/pub/radio/fab/hymn.hook @@ -14,13 +14,13 @@ ;script:''' try{Typekit.load();}catch(e){} ''' - ;link(type "text/css", rel "stylesheet", href "/main/pub/radio/src/main.css"); + ;link(type "text/css", rel "stylesheet", href "/base/pub/radio/src/main.css"); ;script(type "text/javascript", src "/gop/hart.js"); ;title: Radio == ;body ;div#c; - ;script(type "text/javascript", src "/main/lib/urb.js"); - ;script(type "text/javascript", src "/main/pub/radio/src/main.js"); + ;script(type "text/javascript", src "/base/lib/urb.js"); + ;script(type "text/javascript", src "/base/pub/radio/src/main.js"); == == diff --git a/main/pub/radio/src/main.css b/base/pub/radio/src/main.css similarity index 100% rename from main/pub/radio/src/main.css rename to base/pub/radio/src/main.css diff --git a/main/pub/radio/src/main.js b/base/pub/radio/src/main.js similarity index 100% rename from main/pub/radio/src/main.js rename to base/pub/radio/src/main.js diff --git a/base/pub/sole/fab/hymn.hook b/base/pub/sole/fab/hymn.hook new file mode 100644 index 000000000..90e69afc4 --- /dev/null +++ b/base/pub/sole/fab/hymn.hook @@ -0,0 +1,39 @@ +:: Console front-end +:: +:::: /hook/hymn/fab/sole/pub + :: +/? 310 +|% +++ cdnj |=(a=tape ;script(src "//cdnjs.cloudflare.com/ajax/libs/{a}");) +-- +:: +:::: + :: +^- manx +;html + ;head + ;title: Sole + ;* %- turn :_ cdnj ^- wall + :~ "jquery/2.1.1/jquery.min.js" + "mousetrap/1.4.6/mousetrap.js" + "react/0.11.0/react.js" + == + ;script(src "/~/at/base/lib/urb.js"); + ;script: urb.appl = 'dojo' + ;style:''' + #term { + width: 100%; + } + #term * { + margin: 0px; + } + ''' + == + ;body + ;div#err; + ;div#term:"" + ;script@"src/share.coffee"(type "text/coffeescript"); + ;script@"src/main.coffee"(type "text/coffeescript"); + ;+ (cdnj "coffee-script/1.7.1/coffee-script.min.js") + == +== diff --git a/base/pub/sole/src/main.coffee b/base/pub/sole/src/main.coffee new file mode 100644 index 000000000..3533418c7 --- /dev/null +++ b/base/pub/sole/src/main.coffee @@ -0,0 +1,252 @@ +[DOM,recl,rend] = [React.DOM, React.createClass, React.renderComponent] +[div, pre, span] = [DOM.div, DOM.pre, DOM.span] +str = JSON.stringify + +Prompt = recl render: -> + [pro,cur,buf] = [@props.prompt, @props.cursor, @props.input + " "] + pre {}, pro, + span {style: background: 'lightgray'}, buf.slice(0,cur), "\u0332", buf.slice(cur) + +Matr = recl render: -> + lines = @props.rows.map (lin)-> pre {}, lin, " " + lines.push Prompt {prompt:@props.prompt, input:@props.input, cursor:@props.cursor} + div {}, lines + +$ -> + + met = $('
').text('m').css(display: 'none').appendTo(term).width()
+  subs = ""
+  # $(window).resize -> 
+  #   window.termWif = ($(term).width() / met).toFixed()
+  #   path =  "/new/#{termWif}"
+  #   if path is subs
+  #     return
+  #   if subs
+  #     urb.unsubscribe path: subs
+  #   subs = path
+  #   urb.subscribe {path}, (err,dat)->
+  #       if err or dat.data.ok
+  #         return;
+  #       syncRev = dat.data.rev
+  #       unless termRev > syncRev
+  #         termRev = syncRev
+  #         matr.setProps rows: dat.data.stak
+  #         document.title = "Matrix"  # XX  debug
+  # $(window).resize()
+
+  flash = ($el, background)->
+    $el.css {background}
+    if background
+      setTimeout (-> flash $el,''), 50
+  bell = -> flash ($ 'body'), 'black'
+
+  matr = rend (Matr
+    rows:[]
+    prompt:""
+    input:""
+    cursor:0
+    history:[]
+    offset:0  ), term
+  window.matr = matr
+  update = (a) -> matr.setProps a
+  buffer = new Share ""
+  window.buffer = buffer
+  sync = (ted)-> 
+    update input: buffer.buf, cursor: buffer.transpose ted, matr.props.cursor
+
+  peer = (ruh) ->
+    if ruh.map then return ruh.map peer
+    mapr = matr.props
+    switch Object.keys(ruh)[0]
+      when 'txt' then update rows: [mapr.rows..., ruh.txt]
+      when 'tan' then ruh.tan.split("\n").reverse().map (txt)-> peer {txt}
+      when 'hop' then update cursor: ruh.hop; bell() # XX buffer.transpose?
+      when 'pro' then update prompt: ruh.pro.cad
+      when 'blk' then console.log "Stub #{str ruh}"
+      when 'det' then buffer.receive ruh.det; sync ruh.det.ted
+      when 'act' then switch ruh.act
+        when 'clr' then update rows:[]
+        when 'bel' then bell()
+        when 'nex' then update
+          input: ""
+          cursor: 0
+          history: 
+            if !mapr.input then mapr.history
+            else [mapr.input, mapr.history...]
+          offset: 0
+      #   else throw "Unknown "+(JSON.stringify ruh)
+      else v = Object.keys(ruh); console.log v, ruh[v[0]]
+
+  urb.bind "/sole", {wire:"/"}, (err,d)->
+    if err then console.log err
+    else if d.data then peer d.data
+
+
+  pressed = []
+  deltim = null
+  #later = (data)->
+  #  if data
+  #    pressed.push data
+  #  clearTimeout deltim
+  #  setTimeout (->
+  #    if urb.reqq.length > 0 
+  #      return deltim = later()
+  #    urb.send data: pressed
+  #    pressed = []
+  #  ), 500
+
+  sendAction = (data)->
+    urb.send {mark: 'sole-action', data}, (e,res)->
+      if res.status isnt 200 then $('#err')[0].innerText = res.data.mess
+
+  doEdit = (ted)->
+    det = buffer.transmit ted
+    sync ted
+    sendAction {det}
+
+  yank = ''
+  eatKyev= (mod, key)->
+    mapr = matr.props
+    switch mod.sort().join '-'
+      when '', 'shift'
+        if key.str
+          doEdit ins: cha: key.str, at: mapr.cursor
+          update cursor: mapr.cursor+1
+        switch key.act
+          when 'entr' then sendAction 'ret'
+          when 'up'
+            history = mapr.history.slice(); offset = mapr.offset
+            if history[offset] == undefined
+              return
+            [input, history[offset]] = [history[offset], mapr.input]
+            offset++
+            doEdit set: input
+            update {offset, history, cursor: input.length}
+          when 'down'
+            history = mapr.history.slice(); offset = mapr.offset
+            offset--
+            if history[offset] == undefined
+              return
+            [input, history[offset]] = [history[offset], mapr.input]
+            doEdit set: input
+            update {offset, history, cursor: input.length}
+          when 'left' then if mapr.cursor > 0 
+            update cursor: mapr.cursor-1
+          when 'right' then if mapr.cursor < mapr.input.length
+            update cursor: mapr.cursor+1
+          when 'baxp' then if mapr.cursor > 0
+            doEdit del: mapr.cursor-1
+          #else (if key.act then console.log key.act)
+      when 'ctrl' then switch key.str || key.act
+        when 'a','left'  then update cursor: 0
+        when 'e','right' then update cursor: mapr.input.length
+        when 'l' then update rows: []
+        when 'entr' then peer act: 'bel'
+        when 'w' then eatKyev ['alt'], act:'baxp'
+        when 'p' then eatKyev [], act: 'up'
+        when 'n' then eatKyev [], act: 'down'
+        when 'b' then eatKyev [], act: 'left'
+        when 'f' then eatKyev [], act: 'right'
+        when 'g' then bell()
+        when 't'
+          if mapr.cursor is 0 or mapr.input.length < 2
+            return bell()
+          cursor = mapr.cursor
+          if cursor < mapr.input.length
+            cursor++
+          doEdit [{del:cursor-1},ins:{at:cursor-2,cha:mapr.input[cursor-1]}]
+          update {cursor}
+        when 'u' 
+          yank = mapr.input.slice(0,mapr.cursor)
+          doEdit (del:mapr.cursor - n for n in [1..mapr.cursor])
+        when 'k'
+          yank = mapr.input.slice(mapr.cursor)
+          doEdit (del:mapr.cursor for _ in [mapr.cursor...mapr.input.length])
+        when 'y'
+          doEdit (ins: {cha, at: mapr.cursor + n} for cha,n in yank)
+        else console.log mod, str key
+      when 'alt' then switch key.str || key.act
+        when 'f','right'
+          rest = mapr.input.slice(mapr.cursor)
+          rest = rest.match(/\W*\w*/)[0] # XX unicode
+          update cursor: mapr.cursor + rest.length
+        when 'b','left'
+          prev = mapr.input.slice(0,mapr.cursor)
+          prev = prev.split('').reverse().join('')  # XX
+          prev = prev.match(/\W*\w*/)[0] # XX unicode
+          update cursor: mapr.cursor - prev.length
+        when 'baxp'
+          prev = mapr.input.slice(0,mapr.cursor)
+          prev = prev.split('').reverse().join('')  # XX
+          prev = prev.match(/\W*\w*/)[0] # XX unicode
+          yank = prev
+          doEdit (del: mapr.cursor-1 - n for _,n in prev)
+      else console.log mod, str key
+
+  Mousetrap.handleKey = (char, mod, e)->
+    norm = {
+      capslock:  'caps'
+      pageup:    'pgup'
+      pagedown:  'pgdn'
+      backspace: 'baxp'
+      enter:     'entr'
+    }
+
+    key = switch
+      when char.length is 1
+        if e.type is 'keypress'
+          chac = char.charCodeAt(0)
+          if chac < 32          # normalize ctrl keys
+            char = String.fromCharCode chac | 96
+          str: char
+      when e.type is 'keydown'
+        if char isnt 'space'
+          act: norm[char] ? char
+      when e.type is 'keyup' and norm[key] is 'caps'
+        act: 'uncap'
+    if !key then return
+    if key.act and key.act in mod
+      return
+    e.preventDefault()
+    #[fore, aft] = (
+    #  [sli,cur] = [mapr.input.slice, mapr.cursor]
+    #  [sli(0, cur), sli(cur)]
+    #)
+    eatKyev mod, key
+
+    #amod = (arr)->
+    #  for i in arr
+    #    unless mod.indexOf(i) < 0
+    #      return yes
+    #  no
+    # if key.str or key.act is 'baxp' or key.act is 'entr'
+    #   termRev++
+    #   [bot, rest...] = old = matr.props.rows
+    #   matr.setProps rows:(
+    #     switch  key.act 
+    #       when 'baxp'
+    #         if amod ['ctrl', 'meta']
+    #           ['', rest...]
+    #         else if amod ['alt']
+    #           [(bot.replace /\ *[^ ]*$/, ''), rest...]
+    #         else if bot and bot.length 
+    #           [bot.slice(0, -1), rest...]
+    #         else if rest[0] and rest[0].length
+    #           res = rest.slice()
+    #           res[0] = res[0].slice(0, -1)
+    #           res
+    #         else rest
+    #       when 'entr'
+    #         ['', old...]
+    #       when undefined
+    #         if mod.length > 1 or (mod.length and !amod ['shift'])
+    #           old
+    #         else unless old and bot isnt null
+    #           [key.str]
+    #         #else if bot.length is termWif
+    #         #  [key.str, old...]
+    #         else [bot + key.str, rest...]
+    #   )
+    #   document.title = "Matri"  # XX  debug
+    # later {mod, key}
+
diff --git a/base/pub/sole/src/share.coffee b/base/pub/sole/src/share.coffee
new file mode 100644
index 000000000..67679b4fe
--- /dev/null
+++ b/base/pub/sole/src/share.coffee
@@ -0,0 +1,83 @@
+# See /hook/core/sole/lib
+str = JSON.stringify
+clog = (a)-> console.log a
+class window.Share
+  constructor: (@buf = "", @ven = [0, 0], @leg = []) ->
+  #
+  abet: -> buf:@buf, leg:@leg.slice(), ven:@ven.slice()
+  apply: (ted)->
+    switch
+      when 'nop' == ted then return
+      when ted.map then ted.map @apply, @
+      else switch Object.keys(ted)[0]
+        when 'set' then @buf = ted.set
+        when 'del' then @buf = @buf.slice(0,ted.del) + @buf.slice(ted.del + 1)
+        when 'ins'
+          {at,cha} = ted.ins
+          @buf = @buf.slice(0,at) + cha + @buf.slice(at)
+        else throw "%sole-edit -lost.#{str ted}"
+  #
+  transmute: (sin,dex)->
+    switch
+      when sin == 'nop' or dex == 'nop' then dex
+      when sin.reduce
+        sin.reduce ((dex,syn) => @transmute(syn,dex)), dex
+      when dex.map then dex.map (dax) => @transmute(sin,dax)
+      when dex.set != undefined then dex
+      else switch Object.keys(sin)[0]
+        when 'set' then 'nop'
+        when 'del'
+          if sin.del is dex.del then return 'nop'
+          dex = $.extend true, {}, dex  # clone
+          switch Object.keys(dex)[0]
+            when 'del' then if sin.del < dex.del    then dex.del--
+            when 'ins' then if sin.del < dex.ins.at then dex.ins.at--
+          return dex
+        when 'ins'
+          dex = $.extend true, {}, dex  # clone
+          {at,cha} = sin.ins
+          switch Object.keys(dex)[0]
+            when 'del' then if at < dex.del then dex.del++
+            when 'ins' then if at < dex.ins.at or
+                              (at == dex.ins.at and !(cha <= dex.ins.cha))
+                dex.ins.at++
+          return dex
+        else throw "%sole-edit -lost.#{str sin}"
+  #
+  commit: (ted)->
+    @ven[0]++
+    @leg.push ted
+    @apply ted
+  #
+  inverse: (ted)->
+    switch
+      when 'nop' == ted then ted
+      when ted.map
+        ted.map( (tad)=> res=@inverse tad; @apply tad; res).reverse()
+      else switch Object.keys(ted)[0]
+        when 'set' then set: @buf
+        when 'ins' then del: ted.ins
+        when 'del' then ins: at: ted.del, cha: @buf[ted.del]
+        else throw "%sole-edit -lost.#{str ted}"
+  #
+  receive: ({ler,ted})->
+    if !(ler[1] is @ven[1]) 
+      throw "-out-of-sync.[#{str ler} #{str @ven}]"
+    @leg = @leg.slice @leg.length + ler[0] - @ven[0] 
+    dat = @transmute @leg, ted
+    @ven[1]++; @apply dat; dat
+  #
+  remit: -> throw 'stub'
+  transmit: (ted)->
+    act = {ted, ler:[@ven[1], @ven[0]]}
+    @commit ted
+    return act
+  #
+  transceive: ({ler,ted})->
+    old = new Share @buf
+    dat = @receive {ler, ted}
+    old.inverse dat
+  #
+  transpose: (ted,pos)->
+    if pos == undefined then @transpose @leg, ted
+    else ((@transmute ted, ins: at: pos).ins ? at:0).at
diff --git a/main/pub/src/doc/chat/help.txt b/base/pub/src/doc/chat/help.txt
similarity index 100%
rename from main/pub/src/doc/chat/help.txt
rename to base/pub/src/doc/chat/help.txt
diff --git a/main/pub/src/radio/hymn.hook b/base/pub/src/radio/hymn.hook
similarity index 64%
rename from main/pub/src/radio/hymn.hook
rename to base/pub/src/radio/hymn.hook
index 5fc100790..8d0bae426 100644
--- a/main/pub/src/radio/hymn.hook
+++ b/base/pub/src/radio/hymn.hook
@@ -5,7 +5,7 @@
     ;script(type "text/javascript", src "/gep/hart.js");
   ==
   ;body
-    ;script(type "text/javascript", src "/main/lib/urb.js");
-    ;script(type "text/javascript", src "/main/pub/src/radio/main.js");
+    ;script(type "text/javascript", src "/base/lib/urb.js");
+    ;script(type "text/javascript", src "/base/pub/src/radio/main.js");
   ==
 ==
\ No newline at end of file
diff --git a/main/pub/src/radio/main.js b/base/pub/src/radio/main.js
similarity index 100%
rename from main/pub/src/radio/main.js
rename to base/pub/src/radio/main.js
diff --git a/main/pub/src/readme.md b/base/pub/src/readme.md
similarity index 100%
rename from main/pub/src/readme.md
rename to base/pub/src/readme.md
diff --git a/main/pub/talk/fab/hymn.hook b/base/pub/talk/fab/hymn.hook
similarity index 74%
rename from main/pub/talk/fab/hymn.hook
rename to base/pub/talk/fab/hymn.hook
index 1dc12a217..d8c1cdebd 100644
--- a/main/pub/talk/fab/hymn.hook
+++ b/base/pub/talk/fab/hymn.hook
@@ -22,14 +22,14 @@
       "react/0.13.1/react.js"
     ==
     :: remove /~~ for anon
-    ;script(type "text/javascript", src "/~~/~/at/main/lib/urb.js");
+    ;script(type "text/javascript", src "/~~/~/at/base/lib/urb.js");
     ;meta(name "viewport", content "width=device-width, height=device-height, ".
      "initial-scale=1.0, user-scalable=0, minimum-scale=1.0, maximum-scale=1.0");
-    ;link(type "text/css", rel "stylesheet", href "/main/pub/talk/src/css/main.css");
-    ;title: Radio
+    ;link(type "text/css", rel "stylesheet", href "/base/pub/talk/src/css/main.css");
+    ;title: urbit talk
   ==
   ;body
     ;div#c;
-    ;script(type "text/javascript", src "/main/pub/talk/src/js/main.js");
+    ;script(type "text/javascript", src "/base/pub/talk/src/js/main.js");
   ==
 ==
diff --git a/main/pub/talk/src/css/fonts.styl b/base/pub/talk/src/css/fonts.styl
similarity index 100%
rename from main/pub/talk/src/css/fonts.styl
rename to base/pub/talk/src/css/fonts.styl
diff --git a/main/pub/talk/src/css/main.css b/base/pub/talk/src/css/main.css
similarity index 99%
rename from main/pub/talk/src/css/main.css
rename to base/pub/talk/src/css/main.css
index 981bbaf75..61b020ada 100644
--- a/main/pub/talk/src/css/main.css
+++ b/base/pub/talk/src/css/main.css
@@ -296,6 +296,9 @@ body {
 #messages .message .audi > div {
   cursor: pointer;
 }
+#messages .message.new {
+  border-top: 1px solid #e5e5e5;
+}
 .member {
   width: 12rem;
   margin: 0.3rem 0.6rem 0.3rem 0;
diff --git a/main/pub/talk/src/css/main.styl b/base/pub/talk/src/css/main.styl
similarity index 98%
rename from main/pub/talk/src/css/main.styl
rename to base/pub/talk/src/css/main.styl
index e4d543c91..658e0de36 100644
--- a/main/pub/talk/src/css/main.styl
+++ b/base/pub/talk/src/css/main.styl
@@ -235,6 +235,9 @@ body
 #messages .message .audi > div
   cursor pointer
 
+#messages .message.new
+  border-top 1px solid #e5e5e5
+
 .member
   width 12rem
   margin .3rem .6rem .3rem 0
diff --git a/main/pub/talk/src/css/mobile.styl b/base/pub/talk/src/css/mobile.styl
similarity index 100%
rename from main/pub/talk/src/css/mobile.styl
rename to base/pub/talk/src/css/mobile.styl
diff --git a/main/pub/talk/src/js/actions/MessageActions.coffee b/base/pub/talk/src/js/actions/MessageActions.coffee
similarity index 89%
rename from main/pub/talk/src/js/actions/MessageActions.coffee
rename to base/pub/talk/src/js/actions/MessageActions.coffee
index 5fa44077f..78c66564a 100644
--- a/main/pub/talk/src/js/actions/MessageActions.coffee
+++ b/base/pub/talk/src/js/actions/MessageActions.coffee
@@ -10,7 +10,7 @@ module.exports =
 
   listenStation: (station,date) ->
     if not date then date = window.urb.util.toDate(new Date())
-    window.chat.MessagePersistence.listenStation station,date
+    window.talk.MessagePersistence.listenStation station,date
 
   listeningStation: (station) ->
     MessageDispatcher.handleViewAction
@@ -25,7 +25,7 @@ module.exports =
   getMore: (station,start,end) ->
     MessageDispatcher.handleViewAction
       type:"messages-fetch"
-    window.chat.MessagePersistence.get station,start,end
+    window.talk.MessagePersistence.get station,start,end
 
   sendMessage: (message,audience) ->
     serial = window.util.uuid32()
@@ -64,4 +64,4 @@ module.exports =
     MessageDispatcher.handleViewAction
       type:"message-send"
       message:_message
-    window.chat.MessagePersistence.sendMessage _message.thought
\ No newline at end of file
+    window.talk.MessagePersistence.sendMessage _message.thought
diff --git a/main/pub/talk/src/js/actions/StationActions.coffee b/base/pub/talk/src/js/actions/StationActions.coffee
similarity index 81%
rename from main/pub/talk/src/js/actions/StationActions.coffee
rename to base/pub/talk/src/js/actions/StationActions.coffee
index f7bac708d..8d16d7276 100644
--- a/main/pub/talk/src/js/actions/StationActions.coffee
+++ b/base/pub/talk/src/js/actions/StationActions.coffee
@@ -28,16 +28,16 @@ module.exports =
       station:station    
 
   removeStation: (station) ->
-    window.chat.StationPersistence.removeStation station
+    window.talk.StationPersistence.removeStation station
 
   setSources: (station,sources) ->
-    window.chat.StationPersistence.setSources station,window.urb.ship,sources
+    window.talk.StationPersistence.setSources station,window.urb.ship,sources
 
   createStation: (name) ->
-    window.chat.StationPersistence.createStation name
+    window.talk.StationPersistence.createStation name
 
   listenStation: (station) ->
-    window.chat.StationPersistence.listenStation station
+    window.talk.StationPersistence.listenStation station
 
   listeningStation: (station) ->
     StationDispatcher.handleViewAction
@@ -51,7 +51,7 @@ module.exports =
       state:state
 
   ping: (_ping) ->
-    window.chat.StationPersistence.ping _ping
+    window.talk.StationPersistence.ping _ping
 
   loadStations: (stations) ->
     StationDispatcher.handleServerAction
@@ -67,4 +67,4 @@ module.exports =
     StationDispatcher.handleViewAction
       type: "station-create"
       station: station
-    window.chat.StationPersistence.createStation station
\ No newline at end of file
+    window.talk.StationPersistence.createStation station
\ No newline at end of file
diff --git a/main/pub/talk/src/js/components/MemberComponent.coffee b/base/pub/talk/src/js/components/MemberComponent.coffee
similarity index 100%
rename from main/pub/talk/src/js/components/MemberComponent.coffee
rename to base/pub/talk/src/js/components/MemberComponent.coffee
diff --git a/main/pub/talk/src/js/components/MessagesComponent.coffee b/base/pub/talk/src/js/components/MessagesComponent.coffee
similarity index 79%
rename from main/pub/talk/src/js/components/MessagesComponent.coffee
rename to base/pub/talk/src/js/components/MessagesComponent.coffee
index 23c622a18..a52898a68 100644
--- a/main/pub/talk/src/js/components/MessagesComponent.coffee
+++ b/base/pub/talk/src/js/components/MessagesComponent.coffee
@@ -34,6 +34,7 @@ Message = recl
     klass = if delivery.indexOf("received") isnt -1 then " received" else " pending"
     if @props.thought.statement.speech?.lin?.say is false then klass += " say"
     if @props.thought.statement.speech?.url then klass += " url"
+    if @props.unseen is true then klass += " new"
 
     name = if @props.name then @props.name else ""
     audi = _.keys @props.thought.audience
@@ -46,7 +47,7 @@ Message = recl
       url = @props.thought.statement.speech.url.url
       txt = (a {href:url,target:"_blank"}, url)
 
-    div {className:"message #{klass}"}, [
+    div {className:"message#{klass}"}, [
         (div {className:"attr"}, [
           div {onClick:@_handleAudi,className:"audi"}, audi
           (div {onClick:@_handlePm}, (React.createElement Member,{ship:@props.ship}))
@@ -72,6 +73,16 @@ module.exports = recl
 
   getInitialState: -> @stateFromStore()
 
+  _blur: ->
+    @focussed = false
+    @lastSeen = @last
+
+  _focus: ->
+    @focussed = true
+    @lastSeen = null
+    $('.message.new').removeClass 'new'
+    document.title = document.title.replace /\ \([0-9]*\)/, ""
+
   checkMore: ->
     if $(window).scrollTop() < @paddingTop &&
     @state.fetching is false &&
@@ -88,6 +99,11 @@ module.exports = recl
     _.difference(_.keys(@last.thought.audience),@state.audi).length is 0
       StationActions.setAudience _.keys(@last.thought.audience)
 
+  sortedMessages: (messages) ->
+    _.sortBy messages, (_message) -> 
+          _message.pending = _message.thought.audience[station]
+          _message.thought.statement.date
+
   componentDidMount: ->
     MessageStore.addChangeListener @_onChangeStore
     StationStore.addChangeListener @_onChangeStore
@@ -96,6 +112,9 @@ module.exports = recl
       MessageActions.listenStation @state.station
     checkMore = @checkMore
     $(window).on 'scroll', checkMore
+    @focussed = true
+    $(window).on 'blur', @_blur
+    $(window).on 'focus', @_focus
     window.util.setScroll()
 
   componentDidUpdate: ->
@@ -105,8 +124,17 @@ module.exports = recl
       $window.scrollTop st
       @lastLength = null
     else
-      if $('#writing-container').length > 0
+      if not window.util.isScrolling()
         window.util.setScroll()
+
+    if @focussed is false and @last isnt @lastSeen
+      _messages = @sortedMessages @state.messages
+      d = _messages.length-_messages.indexOf(@lastSeen)-1
+      t = document.title
+      if document.title.match(/\([0-9]*\)/)
+        document.title = document.title.replace /\([0-9]*\)/, "(#{d})"
+      else
+        document.title = document.title + " (#{d})" 
       
   componentWillUnmount: ->
     MessageStore.removeChangeListener @_onChangeStore
@@ -129,10 +157,7 @@ module.exports = recl
     _station = "~"+window.urb.ship+"/"+station
     sources = _.clone @state.configs[@state.station]?.sources ? []
     sources.push _station
-    _messages = @state.messages
-    _messages = _.sortBy _messages, (_message) -> 
-      _message.pending = _message.thought.audience[station]
-      _message.thought.statement.date
+    _messages = @sortedMessages @state.messages
 
     @last = _messages[_messages.length-1]
     @length = _messages.length
@@ -141,7 +166,11 @@ module.exports = recl
         @checkMore() if length < @pageSize
       , 1
 
-    messages = _messages.map (_message) => 
+    lastIndex = if @lastSeen then _messages.indexOf(@lastSeen) else null
+
+    messages = _messages.map (_message,k) => 
+      if lastIndex and lastIndex is k
+        _message.unseen = true
       _message.station = @state.station
       _message._handlePm = @_handlePm
       _message._handleAudi = @_handleAudi
diff --git a/main/pub/talk/src/js/components/StationComponent.coffee b/base/pub/talk/src/js/components/StationComponent.coffee
similarity index 100%
rename from main/pub/talk/src/js/components/StationComponent.coffee
rename to base/pub/talk/src/js/components/StationComponent.coffee
diff --git a/main/pub/talk/src/js/components/StationsComponent.coffee b/base/pub/talk/src/js/components/StationsComponent.coffee
similarity index 100%
rename from main/pub/talk/src/js/components/StationsComponent.coffee
rename to base/pub/talk/src/js/components/StationsComponent.coffee
diff --git a/base/pub/talk/src/js/components/TalkComponent.coffee b/base/pub/talk/src/js/components/TalkComponent.coffee
new file mode 100644
index 000000000..d9191c9b5
--- /dev/null
+++ b/base/pub/talk/src/js/components/TalkComponent.coffee
@@ -0,0 +1,15 @@
+recl = React.createClass
+recf = React.createFactory
+[div] = [React.DOM.div]
+
+StationComponent    = recf require './StationComponent.coffee'
+MessagesComponent   = recf require './MessagesComponent.coffee'
+WritingComponent    = recf require './WritingComponent.coffee'
+
+module.exports = recl
+  render: ->
+    (div {}, [
+      (div {id:"station-container"}, (StationComponent {}))
+      (div {id:"messages-container"}, (MessagesComponent {}))
+      (div {id:"writing-container"}, (WritingComponent {}))
+    ])
\ No newline at end of file
diff --git a/main/pub/talk/src/js/components/WritingComponent.coffee b/base/pub/talk/src/js/components/WritingComponent.coffee
similarity index 100%
rename from main/pub/talk/src/js/components/WritingComponent.coffee
rename to base/pub/talk/src/js/components/WritingComponent.coffee
diff --git a/main/pub/talk/src/js/dep/director.js b/base/pub/talk/src/js/dep/director.js
similarity index 100%
rename from main/pub/talk/src/js/dep/director.js
rename to base/pub/talk/src/js/dep/director.js
diff --git a/main/pub/talk/src/js/dispatcher/Dispatcher.coffee b/base/pub/talk/src/js/dispatcher/Dispatcher.coffee
similarity index 100%
rename from main/pub/talk/src/js/dispatcher/Dispatcher.coffee
rename to base/pub/talk/src/js/dispatcher/Dispatcher.coffee
diff --git a/base/pub/talk/src/js/main.coffee b/base/pub/talk/src/js/main.coffee
new file mode 100644
index 000000000..39316573d
--- /dev/null
+++ b/base/pub/talk/src/js/main.coffee
@@ -0,0 +1,40 @@
+$(() ->
+  StationActions = require './actions/StationActions.coffee'
+
+  rend = React.render
+  
+  window.talk = {}
+  window.talk.MessagePersistence = require './persistence/MessagePersistence.coffee'
+  window.talk.StationPersistence = require './persistence/StationPersistence.coffee'
+
+  require './util.coffee'
+  require './move.coffee'
+
+  # checkScroll = ->
+  #   if $(window).scrollTop() > 20
+  #     $('#nav').addClass 'scrolling'
+  #   else
+  #     $('#nav').removeClass 'scrolling'
+  # setInterval checkScroll, 500
+
+  window.talk.StationPersistence.listen()
+
+  StationComponent    = require './components/StationComponent.coffee'
+  MessagesComponent   = require './components/MessagesComponent.coffee'
+  WritingComponent    = require './components/WritingComponent.coffee'
+
+  $c = $('#c')
+
+  clean = ->
+    React.unmountComponentAtNode $('#station-container')[0]
+    React.unmountComponentAtNode $('#messages-container')[0]
+    React.unmountComponentAtNode $('#writing-container')[0]
+
+  $c.append "
" + $c.append "
" + $c.append "
" + $c.append "
BOTTOM
" + rend (React.createElement(StationComponent, {})),$('#station-container')[0] + rend (React.createElement(MessagesComponent, {})),$('#messages-container')[0] + rend (React.createElement(WritingComponent, {})),$('#writing-container')[0] +) \ No newline at end of file diff --git a/main/pub/talk/src/js/main.js b/base/pub/talk/src/js/main.js similarity index 97% rename from main/pub/talk/src/js/main.js rename to base/pub/talk/src/js/main.js index 161c22649..5c617d886 100644 --- a/main/pub/talk/src/js/main.js +++ b/base/pub/talk/src/js/main.js @@ -16,7 +16,7 @@ module.exports = { if (!date) { date = window.urb.util.toDate(new Date()); } - return window.chat.MessagePersistence.listenStation(station, date); + return window.talk.MessagePersistence.listenStation(station, date); }, listeningStation: function(station) { return MessageDispatcher.handleViewAction({ @@ -34,7 +34,7 @@ module.exports = { MessageDispatcher.handleViewAction({ type: "messages-fetch" }); - return window.chat.MessagePersistence.get(station, start, end); + return window.talk.MessagePersistence.get(station, start, end); }, sendMessage: function(message, audience) { var _audi, _message, k, serial, v; @@ -82,7 +82,7 @@ module.exports = { type: "message-send", message: _message }); - return window.chat.MessagePersistence.sendMessage(_message.thought); + return window.talk.MessagePersistence.sendMessage(_message.thought); } }; @@ -126,16 +126,16 @@ module.exports = { }); }, removeStation: function(station) { - return window.chat.StationPersistence.removeStation(station); + return window.talk.StationPersistence.removeStation(station); }, setSources: function(station, sources) { - return window.chat.StationPersistence.setSources(station, window.urb.ship, sources); + return window.talk.StationPersistence.setSources(station, window.urb.ship, sources); }, createStation: function(name) { - return window.chat.StationPersistence.createStation(name); + return window.talk.StationPersistence.createStation(name); }, listenStation: function(station) { - return window.chat.StationPersistence.listenStation(station); + return window.talk.StationPersistence.listenStation(station); }, listeningStation: function(station) { return StationDispatcher.handleViewAction({ @@ -151,7 +151,7 @@ module.exports = { }); }, ping: function(_ping) { - return window.chat.StationPersistence.ping(_ping); + return window.talk.StationPersistence.ping(_ping); }, loadStations: function(stations) { return StationDispatcher.handleServerAction({ @@ -170,7 +170,7 @@ module.exports = { type: "station-create", station: station }); - return window.chat.StationPersistence.createStation(station); + return window.talk.StationPersistence.createStation(station); } }; @@ -265,6 +265,9 @@ Message = recl({ if ((ref3 = this.props.thought.statement.speech) != null ? ref3.url : void 0) { klass += " url"; } + if (this.props.unseen === true) { + klass += " new"; + } name = this.props.name ? this.props.name : ""; audi = _.keys(this.props.thought.audience); audi = _.without(audi, window.util.mainStationPath(window.urb.user)); @@ -283,7 +286,7 @@ Message = recl({ }, url); } return div({ - className: "message " + klass + className: "message" + klass }, [ div({ className: "attr" @@ -323,6 +326,16 @@ module.exports = recl({ getInitialState: function() { return this.stateFromStore(); }, + _blur: function() { + this.focussed = false; + return this.lastSeen = this.last; + }, + _focus: function() { + this.focussed = true; + this.lastSeen = null; + $('.message.new').removeClass('new'); + return document.title = document.title.replace(/\ \([0-9]*\)/, ""); + }, checkMore: function() { var end; if ($(window).scrollTop() < this.paddingTop && this.state.fetching === false && this.state.last && this.state.last > 0) { @@ -342,6 +355,12 @@ module.exports = recl({ return StationActions.setAudience(_.keys(this.last.thought.audience)); } }, + sortedMessages: function(messages) { + return _.sortBy(messages, function(_message) { + _message.pending = _message.thought.audience[station]; + return _message.thought.statement.date; + }); + }, componentDidMount: function() { var checkMore; MessageStore.addChangeListener(this._onChangeStore); @@ -351,18 +370,31 @@ module.exports = recl({ } checkMore = this.checkMore; $(window).on('scroll', checkMore); + this.focussed = true; + $(window).on('blur', this._blur); + $(window).on('focus', this._focus); return window.util.setScroll(); }, componentDidUpdate: function() { - var $window, st; + var $window, _messages, d, st, t; $window = $(window); if (this.lastLength) { st = $window.height(); $window.scrollTop(st); - return this.lastLength = null; + this.lastLength = null; } else { - if ($('#writing-container').length > 0) { - return window.util.setScroll(); + if (!window.util.isScrolling()) { + window.util.setScroll(); + } + } + if (this.focussed === false && this.last !== this.lastSeen) { + _messages = this.sortedMessages(this.state.messages); + d = _messages.length - _messages.indexOf(this.lastSeen) - 1; + t = document.title; + if (document.title.match(/\([0-9]*\)/)) { + return document.title = document.title.replace(/\([0-9]*\)/, "(" + d + ")"); + } else { + return document.title = document.title + (" (" + d + ")"); } } }, @@ -385,16 +417,12 @@ module.exports = recl({ return StationActions.setAudience(audi); }, render: function() { - var _messages, _station, messages, ref1, ref2, sources, station; + var _messages, _station, lastIndex, messages, ref1, ref2, sources, station; station = this.state.station; _station = "~" + window.urb.ship + "/" + station; sources = _.clone((ref1 = (ref2 = this.state.configs[this.state.station]) != null ? ref2.sources : void 0) != null ? ref1 : []); sources.push(_station); - _messages = this.state.messages; - _messages = _.sortBy(_messages, function(_message) { - _message.pending = _message.thought.audience[station]; - return _message.thought.statement.date; - }); + _messages = this.sortedMessages(this.state.messages); this.last = _messages[_messages.length - 1]; this.length = _messages.length; setTimeout((function(_this) { @@ -404,8 +432,12 @@ module.exports = recl({ } }; })(this), 1); + lastIndex = this.lastSeen ? _messages.indexOf(this.lastSeen) : null; messages = _messages.map((function(_this) { - return function(_message) { + return function(_message, k) { + if (lastIndex && lastIndex === k) { + _message.unseen = true; + } _message.station = _this.state.station; _message._handlePm = _this._handlePm; _message._handleAudi = _this._handleAudi; @@ -847,198 +879,15 @@ module.exports = _.merge(new Dispatcher(), { },{"flux":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/flux/index.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/main.coffee":[function(require,module,exports){ $(function() { - var $c, MessagesComponent, StationActions, StationComponent, WritingComponent, clean, ldy, rend, setSo, so; + var $c, MessagesComponent, StationActions, StationComponent, WritingComponent, clean, rend; StationActions = require('./actions/StationActions.coffee'); rend = React.render; - window.chat = {}; - window.chat.MessagePersistence = require('./persistence/MessagePersistence.coffee'); - window.chat.StationPersistence = require('./persistence/StationPersistence.coffee'); - window.util = { - mainStations: ["court", "floor", "porch"], - mainStationPath: function(user) { - return "~" + user + "/" + (window.util.mainStation(user)); - }, - mainStation: function(user) { - if (!user) { - user = window.urb.user; - } - switch (user.length) { - case 3: - return "court"; - case 6: - return "floor"; - case 13: - return "porch"; - } - }, - clipAudi: function(audi) { - var ms, regx; - audi = audi.join(" "); - ms = window.util.mainStationPath(window.urb.user); - regx = new RegExp("/" + ms, "g"); - audi = audi.replace(regx, ""); - return audi.split(" "); - }, - expandAudi: function(audi) { - var ms; - audi = audi.join(" "); - ms = window.util.mainStationPath(window.urb.user); - if (audi.indexOf(ms) === -1) { - if (audi.length > 0) { - audi += " "; - } - audi += "" + ms; - } - return audi.split(" "); - }, - create: function(name) { - return window.chat.StationPersistence.createStation(name, function(err, res) {}); - }, - subscribe: function(name) { - return window.chat.StationPersistence.addSource("main", window.urb.ship, ["~zod/" + name]); - }, - uuid32: function() { - var _str, i, j, str; - str = "0v"; - str += Math.ceil(Math.random() * 8) + "."; - for (i = j = 0; j <= 5; i = ++j) { - _str = Math.ceil(Math.random() * 10000000).toString(32); - _str = ("00000" + _str).substr(-5, 5); - str += _str + "."; - } - return str.slice(0, -1); - }, - populate: function(station, number) { - var c, send; - c = 0; - send = function() { - var _audi, _message; - if (c < number) { - c++; - } else { - console.log('done'); - return true; - } - _audi = {}; - _audi[station] = "pending"; - _message = { - serial: window.util.uuid32(), - audience: _audi, - statement: { - speech: { - say: "Message " + c - }, - time: Date.now(), - now: Date.now() - } - }; - return window.chat.MessagePersistence.sendMessage(_message, send); - }; - return send(); - }, - getScroll: function() { - return this.writingPosition = $('#c').outerHeight(true) + $('#c').offset().top - $(window).height(); - }, - setScroll: function() { - window.util.getScroll(); - return $(window).scrollTop($("#c").height()); - }, - checkScroll: function() { - if (!window.util.writingPosition) { - window.util.getScroll(); - } - if ($(window).scrollTop() < window.util.writingPosition) { - return $('body').addClass('scrolling'); - } else { - return $('body').removeClass('scrolling'); - } - } - }; - so = {}; - so.ls = $(window).scrollTop(); - so.cs = $(window).scrollTop(); - so.w = null; - so.$d = $('#nav > div'); - setSo = function() { - so.$n = $('#station-container'); - so.w = $(window).width(); - so.h = $(window).height(); - so.dh = $("#c").height(); - return so.nh = so.$n.outerHeight(true); - }; - setSo(); - setInterval(setSo, 200); - $(window).on('resize', function(e) { - if (so.w > 1170) { - return so.$n.removeClass('m-up m-down m-fixed'); - } - }); - ldy = 0; - $(window).on('scroll', function(e) { - var dy, sto, top; - so.cs = $(window).scrollTop(); - if (so.w > 1170) { - so.$n.removeClass('m-up m-down m-fixed'); - } - if (so.w < 1170) { - dy = so.ls - so.cs; - if (so.cs <= 0) { - so.$n.removeClass('m-up'); - so.$n.addClass('m-down m-fixed'); - return; - } - if (so.cs + so.h > so.dh) { - return; - } - if (so.$n.hasClass('m-fixed' && so.w < 1024)) { - so.$n.css({ - left: -1 * $(window).scrollLeft() - }); - } - if (dy > 0 && ldy > 0) { - if (!so.$n.hasClass('m-down')) { - so.$n.removeClass('m-up').addClass('m-down'); - top = so.cs - so.nh; - if (top < 0) { - top = 0; - } - so.$n.offset({ - top: top - }); - } - if (so.$n.hasClass('m-down') && !so.$n.hasClass('m-fixed') && so.$n.offset().top >= so.cs) { - so.$n.addClass('m-fixed'); - so.$n.attr({ - style: '' - }); - } - } - if (dy < 0 && ldy < 0) { - if (!so.$n.hasClass('m-up')) { - so.$n.removeClass('open'); - so.$n.removeClass('m-down m-fixed').addClass('m-up'); - so.$n.attr({ - style: '' - }); - top = so.cs; - sto = so.$n.offset().top; - if (top < 0) { - top = 0; - } - if (top > sto && top < sto + so.nh) { - top = sto; - } - so.$n.offset({ - top: top - }); - } - } - } - ldy = dy; - return so.ls = so.cs; - }); - $(window).on('scroll', window.util.checkScroll); - window.chat.StationPersistence.listen(); + window.talk = {}; + window.talk.MessagePersistence = require('./persistence/MessagePersistence.coffee'); + window.talk.StationPersistence = require('./persistence/StationPersistence.coffee'); + require('./util.coffee'); + require('./move.coffee'); + window.talk.StationPersistence.listen(); StationComponent = require('./components/StationComponent.coffee'); MessagesComponent = require('./components/MessagesComponent.coffee'); WritingComponent = require('./components/WritingComponent.coffee'); @@ -1059,9 +908,110 @@ $(function() { -},{"./actions/StationActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/actions/StationActions.coffee","./components/MessagesComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/MessagesComponent.coffee","./components/StationComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/StationComponent.coffee","./components/WritingComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/WritingComponent.coffee","./persistence/MessagePersistence.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/persistence/MessagePersistence.coffee","./persistence/StationPersistence.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/persistence/StationPersistence.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/flux/index.js":[function(require,module,exports){ +},{"./actions/StationActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/actions/StationActions.coffee","./components/MessagesComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/MessagesComponent.coffee","./components/StationComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/StationComponent.coffee","./components/WritingComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/WritingComponent.coffee","./move.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/move.coffee","./persistence/MessagePersistence.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/persistence/MessagePersistence.coffee","./persistence/StationPersistence.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/persistence/StationPersistence.coffee","./util.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/util.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/move.coffee":[function(require,module,exports){ +var ldy, setSo, so; + +so = {}; + +so.ls = $(window).scrollTop(); + +so.cs = $(window).scrollTop(); + +so.w = null; + +so.$d = $('#nav > div'); + +setSo = function() { + so.$n = $('#station-container'); + so.w = $(window).width(); + so.h = $(window).height(); + so.dh = $("#c").height(); + return so.nh = so.$n.outerHeight(true); +}; + +setSo(); + +setInterval(setSo, 200); + +$(window).on('resize', function(e) { + if (so.w > 1170) { + return so.$n.removeClass('m-up m-down m-fixed'); + } +}); + +ldy = 0; + +$(window).on('scroll', function(e) { + var dy, sto, top; + so.cs = $(window).scrollTop(); + if (so.w > 1170) { + so.$n.removeClass('m-up m-down m-fixed'); + } + if (so.w < 1170) { + dy = so.ls - so.cs; + if (so.cs <= 0) { + so.$n.removeClass('m-up'); + so.$n.addClass('m-down m-fixed'); + return; + } + if (so.cs + so.h > so.dh) { + return; + } + if (so.$n.hasClass('m-fixed' && so.w < 1024)) { + so.$n.css({ + left: -1 * $(window).scrollLeft() + }); + } + if (dy > 0 && ldy > 0) { + if (!so.$n.hasClass('m-down')) { + so.$n.removeClass('m-up').addClass('m-down'); + top = so.cs - so.nh; + if (top < 0) { + top = 0; + } + so.$n.offset({ + top: top + }); + } + if (so.$n.hasClass('m-down') && !so.$n.hasClass('m-fixed') && so.$n.offset().top >= so.cs) { + so.$n.addClass('m-fixed'); + so.$n.attr({ + style: '' + }); + } + } + if (dy < 0 && ldy < 0) { + if (!so.$n.hasClass('m-up')) { + so.$n.removeClass('open'); + so.$n.removeClass('m-down m-fixed').addClass('m-up'); + so.$n.attr({ + style: '' + }); + top = so.cs; + sto = so.$n.offset().top; + if (top < 0) { + top = 0; + } + if (top > sto && top < sto + so.nh) { + top = sto; + } + so.$n.offset({ + top: top + }); + } + } + } + ldy = dy; + return so.ls = so.cs; +}); + +$(window).on('scroll', window.util.checkScroll); + + + +},{}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/flux/index.js":[function(require,module,exports){ /** - * Copyright (c) 2014, Facebook, Inc. + * Copyright (c) 2014-2015, Facebook, Inc. * All rights reserved. * * This source code is licensed under the BSD-style license found in the @@ -6009,7 +5959,119 @@ module.exports = StationStore; -},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js"}],"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js":[function(require,module,exports){ +},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/util.coffee":[function(require,module,exports){ +if (!window.util) { + window.util = {}; +} + +_.merge(window.util, { + mainStations: ["court", "floor", "porch"], + mainStationPath: function(user) { + return "~" + user + "/" + (window.util.mainStation(user)); + }, + mainStation: function(user) { + if (!user) { + user = window.urb.user; + } + switch (user.length) { + case 3: + return "court"; + case 6: + return "floor"; + case 13: + return "porch"; + } + }, + clipAudi: function(audi) { + var ms, regx; + audi = audi.join(" "); + ms = window.util.mainStationPath(window.urb.user); + regx = new RegExp("/" + ms, "g"); + audi = audi.replace(regx, ""); + return audi.split(" "); + }, + expandAudi: function(audi) { + var ms; + audi = audi.join(" "); + ms = window.util.mainStationPath(window.urb.user); + if (audi.indexOf(ms) === -1) { + if (audi.length > 0) { + audi += " "; + } + audi += "" + ms; + } + return audi.split(" "); + }, + create: function(name) { + return window.talk.StationPersistence.createStation(name, function(err, res) {}); + }, + subscribe: function(name) { + return window.talk.StationPersistence.addSource("main", window.urb.ship, ["~zod/" + name]); + }, + uuid32: function() { + var _str, i, j, str; + str = "0v"; + str += Math.ceil(Math.random() * 8) + "."; + for (i = j = 0; j <= 5; i = ++j) { + _str = Math.ceil(Math.random() * 10000000).toString(32); + _str = ("00000" + _str).substr(-5, 5); + str += _str + "."; + } + return str.slice(0, -1); + }, + populate: function(station, number) { + var c, send; + c = 0; + send = function() { + var _audi, _message; + if (c < number) { + c++; + } else { + console.log('done'); + return true; + } + _audi = {}; + _audi[station] = "pending"; + _message = { + serial: window.util.uuid32(), + audience: _audi, + statement: { + speech: { + say: "Message " + c + }, + time: Date.now(), + now: Date.now() + } + }; + return window.talk.MessagePersistence.sendMessage(_message, send); + }; + return send(); + }, + getScroll: function() { + return this.writingPosition = $('#c').outerHeight(true) + $('#c').offset().top - $(window).height(); + }, + setScroll: function() { + window.util.getScroll(); + return $(window).scrollTop($("#c").height()); + }, + isScrolling: function() { + if (!window.util.writingPosition) { + window.util.getScroll(); + } + return $(window).scrollTop() < window.util.writingPosition; + }, + checkScroll: function() { + if (this.isScrolling()) { + return $('body').addClass('scrolling'); + } else { + return $('body').removeClass('scrolling'); + } + } +}); + + + +},{}],"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js":[function(require,module,exports){ // Copyright Joyent, Inc. and other Node contributors. // // Permission is hereby granted, free of charge, to any person obtaining a diff --git a/base/pub/talk/src/js/module.coffee b/base/pub/talk/src/js/module.coffee new file mode 100644 index 000000000..15f3f72d8 --- /dev/null +++ b/base/pub/talk/src/js/module.coffee @@ -0,0 +1,9 @@ +require './util.coffee' +require './move.coffee' + +window.talk = + Component: require './components/TalkComponent.coffee' + MessagePersistence: require './persistence/MessagePersistence.coffee' + StationPersistence: require './persistence/StationPersistence.coffee' + init: (el) -> + @StationPersistence.listen() \ No newline at end of file diff --git a/base/pub/talk/src/js/module.js b/base/pub/talk/src/js/module.js new file mode 100644 index 000000000..5bc8efd07 --- /dev/null +++ b/base/pub/talk/src/js/module.js @@ -0,0 +1,6360 @@ +(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o 0) { + end = this.state.last - this.pageSize; + if (end < 0) { + end = 0; + } + this.lastLength = this.length; + return MessageActions.getMore(this.state.station, this.state.last + 1, end); + } + }, + setAudience: function() { + if (!this.last) { + return; + } + if (_.keys(this.last.thought.audience).length > 0 && this.state.typing === false && _.difference(_.keys(this.last.thought.audience), this.state.audi).length === 0) { + return StationActions.setAudience(_.keys(this.last.thought.audience)); + } + }, + componentDidMount: function() { + var checkMore; + MessageStore.addChangeListener(this._onChangeStore); + StationStore.addChangeListener(this._onChangeStore); + if (this.state.station && this.state.listening.indexOf(this.state.station) === -1) { + MessageActions.listenStation(this.state.station); + } + checkMore = this.checkMore; + $(window).on('scroll', checkMore); + return window.util.setScroll(); + }, + componentDidUpdate: function() { + var $window, st; + $window = $(window); + if (this.lastLength) { + st = $window.height(); + $window.scrollTop(st); + return this.lastLength = null; + } else { + if ($('#writing-container').length > 0) { + return window.util.setScroll(); + } + } + }, + componentWillUnmount: function() { + MessageStore.removeChangeListener(this._onChangeStore); + return StationStore.removeChangeListener(this._onChangeStore); + }, + _onChangeStore: function() { + return this.setState(this.stateFromStore()); + }, + _handlePm: function(user) { + var audi; + audi = [window.util.mainStationPath(user), window.util.mainStationPath(window.urb.user)]; + if (user === window.urb.user) { + audi.pop(); + } + return StationActions.setAudience(audi); + }, + _handleAudi: function(audi) { + return StationActions.setAudience(audi); + }, + render: function() { + var _messages, _station, messages, ref1, ref2, sources, station; + station = this.state.station; + _station = "~" + window.urb.ship + "/" + station; + sources = _.clone((ref1 = (ref2 = this.state.configs[this.state.station]) != null ? ref2.sources : void 0) != null ? ref1 : []); + sources.push(_station); + _messages = this.state.messages; + _messages = _.sortBy(_messages, function(_message) { + _message.pending = _message.thought.audience[station]; + return _message.thought.statement.date; + }); + this.last = _messages[_messages.length - 1]; + this.length = _messages.length; + setTimeout((function(_this) { + return function() { + if (length < _this.pageSize) { + return _this.checkMore(); + } + }; + })(this), 1); + messages = _messages.map((function(_this) { + return function(_message) { + _message.station = _this.state.station; + _message._handlePm = _this._handlePm; + _message._handleAudi = _this._handleAudi; + return React.createElement(Message, _message); + }; + })(this)); + return div({ + id: "messages" + }, messages); + } +}); + + + +},{"../actions/MessageActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/actions/MessageActions.coffee","../actions/StationActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/actions/StationActions.coffee","../stores/MessageStore.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/stores/MessageStore.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/stores/StationStore.coffee","./MemberComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/MemberComponent.coffee","moment-timezone":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/moment-timezone/index.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/StationComponent.coffee":[function(require,module,exports){ +var Member, StationActions, StationStore, a, div, h1, input, recl, ref, textarea; + +recl = React.createClass; + +ref = [React.DOM.div, React.DOM.input, React.DOM.textarea, React.DOM.h1, React.DOM.a], div = ref[0], input = ref[1], textarea = ref[2], h1 = ref[3], a = ref[4]; + +StationStore = require('../stores/StationStore.coffee'); + +StationActions = require('../actions/StationActions.coffee'); + +Member = require('./MemberComponent.coffee'); + +module.exports = recl({ + stateFromStore: function() { + return { + audi: StationStore.getAudience(), + members: StationStore.getMembers(), + station: window.util.mainStation(), + stations: StationStore.getStations(), + configs: StationStore.getConfigs(), + typing: StationStore.getTyping(), + listening: StationStore.getListening() + }; + }, + getInitialState: function() { + return this.stateFromStore(); + }, + componentDidMount: function() { + this.$el = $(this.getDOMNode()); + this.$input = this.$el.find('input'); + StationStore.addChangeListener(this._onChangeStore); + if (this.state.listening.indexOf(this.state.station) === -1) { + return StationActions.listenStation(this.state.station); + } + }, + componentWillUnmount: function() { + return StationStore.removeChangeListener(this._onChangeStore); + }, + _onChangeStore: function() { + return this.setState(this.stateFromStore()); + }, + _toggleOpen: function(e) { + if ($(e.target).closest('.sour-ctrl').length > 0) { + return; + } + return $("#station-container").toggleClass('open'); + }, + _keyUp: function(e) { + var _sources, v; + if (e.keyCode === 13) { + v = this.$input.val(); + if (this.state.configs[this.state.station].sources.indexOf(v) === -1) { + _sources = _.clone(this.state.configs[this.state.station].sources); + _sources.push(v); + StationActions.setSources(this.state.station, _sources); + this.$input.val(''); + return this.$input.blur(); + } + } + }, + _remove: function(e) { + var _sources, _station; + e.stopPropagation(); + e.preventDefault(); + _station = $(e.target).attr("data-station"); + _sources = _.clone(this.state.configs[this.state.station].sources); + _sources.splice(_sources.indexOf(_station), 1); + return StationActions.setSources(this.state.station, _sources); + }, + render: function() { + var _remove, _sources, head, members, parts, sourceCtrl, sourceInput, sources; + parts = []; + members = []; + if (this.state.station && this.state.members) { + members = _.map(this.state.members, function(stations, member) { + var audi; + audi = _.map(stations, function(presence, station) { + return div({ + className: "audi" + }, station); + }); + return div({}, [ + audi, React.createElement(Member, { + ship: member + }) + ]); + }); + } else { + members = ""; + } + sourceInput = [ + input({ + className: "join", + onKeyUp: this._keyUp, + placeholder: "+" + }, "") + ]; + sourceCtrl = div({ + className: "sour-ctrl" + }, sourceInput); + sources = []; + if (this.state.station && this.state.configs[this.state.station]) { + _remove = this._remove; + _sources = _.clone(this.state.configs[this.state.station].sources); + sources = _.map(_sources, (function(_this) { + return function(source) { + return div({ + className: "station" + }, [ + div({ + className: "remove", + onClick: _remove, + "data-station": source + }, "×"), div({ + className: "path" + }, source) + ]); + }; + })(this)); + } else { + sources = ""; + } + head = div({ + id: "head" + }, [ + div({ + id: "where" + }, [ + "/talk", div({ + className: "caret" + }, "") + ]), div({ + id: "who" + }, [ + div({ + className: "circle" + }, ""), "~" + window.urb.user + ]) + ]); + parts.push(head); + parts.push(div({ + id: "stations" + }, [h1({}, "Listening to"), div({}, sources), sourceCtrl])); + parts.push(div({ + id: "audience" + }, div({}, [ + h1({}, "Talking to"), div({ + id: "members" + }, members) + ]))); + return div({ + id: "station", + onClick: this._toggleOpen + }, parts); + } +}); + + + +},{"../actions/StationActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/actions/StationActions.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/stores/StationStore.coffee","./MemberComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/MemberComponent.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/TalkComponent.coffee":[function(require,module,exports){ +var MessagesComponent, StationComponent, WritingComponent, div, recf, recl; + +recl = React.createClass; + +recf = React.createFactory; + +div = [React.DOM.div][0]; + +StationComponent = recf(require('./StationComponent.coffee')); + +MessagesComponent = recf(require('./MessagesComponent.coffee')); + +WritingComponent = recf(require('./WritingComponent.coffee')); + +module.exports = recl({ + render: function() { + return div({}, [ + div({ + id: "station-container" + }, StationComponent({})), div({ + id: "messages-container" + }, MessagesComponent({})), div({ + id: "writing-container" + }, WritingComponent({})) + ]); + } +}); + + + +},{"./MessagesComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/MessagesComponent.coffee","./StationComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/StationComponent.coffee","./WritingComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/WritingComponent.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/WritingComponent.coffee":[function(require,module,exports){ +var Member, MessageActions, MessageStore, StationActions, StationStore, br, div, input, recl, ref, textarea; + +recl = React.createClass; + +ref = [React.DOM.div, React.DOM.br, React.DOM.input, React.DOM.textarea], div = ref[0], br = ref[1], input = ref[2], textarea = ref[3]; + +MessageActions = require('../actions/MessageActions.coffee'); + +MessageStore = require('../stores/MessageStore.coffee'); + +StationActions = require('../actions/StationActions.coffee'); + +StationStore = require('../stores/StationStore.coffee'); + +Member = require('./MemberComponent.coffee'); + +module.exports = recl({ + set: function() { + if (window.localStorage && this.$writing) { + return window.localStorage.setItem('writing', this.$writing.text()); + } + }, + get: function() { + if (window.localStorage) { + return window.localStorage.getItem('writing'); + } + }, + stateFromStore: function() { + var s; + s = { + audi: StationStore.getAudience(), + ludi: MessageStore.getLastAudience(), + members: StationStore.getMembers(), + typing: StationStore.getTyping(), + valid: StationStore.getValidAudience() + }; + s.audi = _.without(s.audi, window.util.mainStationPath(window.urb.user)); + s.ludi = _.without(s.ludi, window.util.mainStationPath(window.urb.user)); + return s; + }, + getInitialState: function() { + return this.stateFromStore(); + }, + typing: function(state) { + if (this.state.typing[this.state.station] !== state) { + return StationActions.setTyping(this.state.station, state); + } + }, + _blur: function() { + MessageActions.setTyping(false); + return this.typing(false); + }, + _focus: function() { + MessageActions.setTyping(true); + return this.typing(true); + }, + sendMessage: function() { + var audi; + if (this._validateAudi() === false) { + $('#audi').focus(); + return; + } + if (this.state.audi.length === 0 && $('#audi').text().trim().length > 0) { + audi = this.state.ludi; + this._setAudi(); + } else { + audi = this.state.audi; + } + audi = window.util.expandAudi(audi); + MessageActions.sendMessage(this.$writing.text().trim(), audi); + this.$length.text("0/69"); + this.$writing.text(''); + this.set(); + return this.typing(false); + }, + _audiKeyDown: function(e) { + if (e.keyCode === 13) { + e.preventDefault(); + setTimeout(function() { + return $('#writing').focus(); + }, 0); + return false; + } + }, + _writingKeyUp: function(e) { + if (!window.urb.util.isURL(this.$writing.text())) { + return this.$length.toggleClass('valid-false', this.$writing.text().length > 62); + } + }, + _writingKeyDown: function(e) { + var txt; + if (e.keyCode === 13) { + txt = this.$writing.text(); + e.preventDefault(); + if ((txt.length > 0 && txt.length < 63) || window.urb.util.isURL(this.$writing.text())) { + this.sendMessage(); + } + return false; + } + this._input(); + return this.set(); + }, + _input: function(e) { + var length, text; + text = this.$writing.text(); + length = text.length; + return this.$length.text(length + "/62"); + }, + _setFocus: function() { + return this.$writing.focus(); + }, + _validateAudiPart: function(a) { + var _a, ship; + if (a[0] !== "~") { + return false; + } + if (a.indexOf("/") !== -1) { + _a = a.split("/"); + if (_a[1].length === 0) { + return false; + } + ship = _a[0]; + } else { + ship = a; + } + if (ship.length < 3) { + return false; + } + return true; + }, + _validateAudi: function() { + var a, i, len, v, valid; + v = $('#audi').text(); + v = v.trim(); + if (v.length === 0) { + return true; + } + v = v.split(" "); + for (i = 0, len = v.length; i < len; i++) { + a = v[i]; + a = a.trim(); + valid = this._validateAudiPart(a); + } + return valid; + }, + _setAudi: function() { + var v, valid; + valid = this._validateAudi(); + StationActions.setValidAudience(valid); + if (valid === true) { + v = $('#audi').text(); + v = v.split(" "); + v = window.util.expandAudi(v); + return StationActions.setAudience(v); + } + }, + getTime: function() { + var d, seconds; + d = new Date(); + seconds = d.getSeconds(); + if (seconds < 10) { + seconds = "0" + seconds; + } + return "~" + d.getHours() + "." + d.getMinutes() + "." + seconds; + }, + cursorAtEnd: function() { + var range, selection; + range = document.createRange(); + range.selectNodeContents(this.$writing[0]); + range.collapse(false); + selection = window.getSelection(); + selection.removeAllRanges(); + return selection.addRange(range); + }, + componentDidMount: function() { + window.util.sendMessage = this.sendMessage; + StationStore.addChangeListener(this._onChangeStore); + MessageStore.addChangeListener(this._onChangeStore); + this.$el = $(this.getDOMNode()); + this.$length = $('#length'); + this.$writing = $('#writing'); + this.$writing.focus(); + if (this.get()) { + this.$writing.text(this.get()); + this._input(); + } + return this.interval = setInterval((function(_this) { + return function() { + return _this.$el.find('.time').text(_this.getTime()); + }; + })(this), 1000); + }, + componentWillUnmount: function() { + StationStore.removeChangeListener(this._onChangeStore); + return clearInterval(this.interval); + }, + _onChangeStore: function() { + return this.setState(this.stateFromStore()); + }, + render: function() { + var audi, iden, k, name, ship, user; + user = "~" + window.urb.user; + iden = StationStore.getMember(user); + ship = iden ? iden.ship : user; + name = iden ? iden.name : ""; + audi = this.state.audi.length === 0 ? this.state.ludi : this.state.audi; + audi = window.util.clipAudi(audi); + k = "writing"; + return div({ + className: k + }, [ + div({ + className: "attr" + }, [ + div({ + id: "audi", + className: "audi valid-" + this.state.valid, + contentEditable: true, + onKeyDown: this._audiKeyDown, + onBlur: this._setAudi + }, audi.join(" ")), React.createElement(Member, iden), div({ + className: "time" + }, this.getTime()) + ]), div({ + id: "writing", + contentEditable: true, + onFocus: this._focus, + onBlur: this._blur, + onInput: this._input, + onPaste: this._input, + onKeyDown: this._writingKeyDown, + onKeyUp: this._writingKeyUp, + onFocus: this.cursorAtEnd + }, ""), div({ + id: "length" + }, "0/62") + ]); + } +}); + + + +},{"../actions/MessageActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/actions/MessageActions.coffee","../actions/StationActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/actions/StationActions.coffee","../stores/MessageStore.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/stores/MessageStore.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/stores/StationStore.coffee","./MemberComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/MemberComponent.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/dispatcher/Dispatcher.coffee":[function(require,module,exports){ +var Dispatcher; + +Dispatcher = require('flux').Dispatcher; + +module.exports = _.merge(new Dispatcher(), { + handleServerAction: function(action) { + return this.dispatch({ + source: 'server', + action: action + }); + }, + handleViewAction: function(action) { + return this.dispatch({ + source: 'view', + action: action + }); + } +}); + + + +},{"flux":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/flux/index.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/module.coffee":[function(require,module,exports){ +require('./util.coffee'); + +require('./move.coffee'); + +window.talk = { + Component: require('./components/TalkComponent.coffee'), + MessagePersistence: require('./persistence/MessagePersistence.coffee'), + StationPersistence: require('./persistence/StationPersistence.coffee'), + init: function(el) { + return this.StationPersistence.listen(); + } +}; + + + +},{"./components/TalkComponent.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/components/TalkComponent.coffee","./move.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/move.coffee","./persistence/MessagePersistence.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/persistence/MessagePersistence.coffee","./persistence/StationPersistence.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/persistence/StationPersistence.coffee","./util.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/util.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/move.coffee":[function(require,module,exports){ +var ldy, setSo, so; + +so = {}; + +so.ls = $(window).scrollTop(); + +so.cs = $(window).scrollTop(); + +so.w = null; + +so.$d = $('#nav > div'); + +setSo = function() { + so.$n = $('#station-container'); + so.w = $(window).width(); + so.h = $(window).height(); + so.dh = $("#c").height(); + return so.nh = so.$n.outerHeight(true); +}; + +setSo(); + +setInterval(setSo, 200); + +$(window).on('resize', function(e) { + if (so.w > 1170) { + return so.$n.removeClass('m-up m-down m-fixed'); + } +}); + +ldy = 0; + +$(window).on('scroll', function(e) { + var dy, sto, top; + so.cs = $(window).scrollTop(); + if (so.w > 1170) { + so.$n.removeClass('m-up m-down m-fixed'); + } + if (so.w < 1170) { + dy = so.ls - so.cs; + if (so.cs <= 0) { + so.$n.removeClass('m-up'); + so.$n.addClass('m-down m-fixed'); + return; + } + if (so.cs + so.h > so.dh) { + return; + } + if (so.$n.hasClass('m-fixed' && so.w < 1024)) { + so.$n.css({ + left: -1 * $(window).scrollLeft() + }); + } + if (dy > 0 && ldy > 0) { + if (!so.$n.hasClass('m-down')) { + so.$n.removeClass('m-up').addClass('m-down'); + top = so.cs - so.nh; + if (top < 0) { + top = 0; + } + so.$n.offset({ + top: top + }); + } + if (so.$n.hasClass('m-down') && !so.$n.hasClass('m-fixed') && so.$n.offset().top >= so.cs) { + so.$n.addClass('m-fixed'); + so.$n.attr({ + style: '' + }); + } + } + if (dy < 0 && ldy < 0) { + if (!so.$n.hasClass('m-up')) { + so.$n.removeClass('open'); + so.$n.removeClass('m-down m-fixed').addClass('m-up'); + so.$n.attr({ + style: '' + }); + top = so.cs; + sto = so.$n.offset().top; + if (top < 0) { + top = 0; + } + if (top > sto && top < sto + so.nh) { + top = sto; + } + so.$n.offset({ + top: top + }); + } + } + } + ldy = dy; + return so.ls = so.cs; +}); + +$(window).on('scroll', window.util.checkScroll); + + + +},{}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/flux/index.js":[function(require,module,exports){ +/** + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + */ + +module.exports.Dispatcher = require('./lib/Dispatcher') + +},{"./lib/Dispatcher":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/flux/lib/Dispatcher.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/flux/lib/Dispatcher.js":[function(require,module,exports){ +/* + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule Dispatcher + * @typechecks + */ + +"use strict"; + +var invariant = require('./invariant'); + +var _lastID = 1; +var _prefix = 'ID_'; + +/** + * Dispatcher is used to broadcast payloads to registered callbacks. This is + * different from generic pub-sub systems in two ways: + * + * 1) Callbacks are not subscribed to particular events. Every payload is + * dispatched to every registered callback. + * 2) Callbacks can be deferred in whole or part until other callbacks have + * been executed. + * + * For example, consider this hypothetical flight destination form, which + * selects a default city when a country is selected: + * + * var flightDispatcher = new Dispatcher(); + * + * // Keeps track of which country is selected + * var CountryStore = {country: null}; + * + * // Keeps track of which city is selected + * var CityStore = {city: null}; + * + * // Keeps track of the base flight price of the selected city + * var FlightPriceStore = {price: null} + * + * When a user changes the selected city, we dispatch the payload: + * + * flightDispatcher.dispatch({ + * actionType: 'city-update', + * selectedCity: 'paris' + * }); + * + * This payload is digested by `CityStore`: + * + * flightDispatcher.register(function(payload) { + * if (payload.actionType === 'city-update') { + * CityStore.city = payload.selectedCity; + * } + * }); + * + * When the user selects a country, we dispatch the payload: + * + * flightDispatcher.dispatch({ + * actionType: 'country-update', + * selectedCountry: 'australia' + * }); + * + * This payload is digested by both stores: + * + * CountryStore.dispatchToken = flightDispatcher.register(function(payload) { + * if (payload.actionType === 'country-update') { + * CountryStore.country = payload.selectedCountry; + * } + * }); + * + * When the callback to update `CountryStore` is registered, we save a reference + * to the returned token. Using this token with `waitFor()`, we can guarantee + * that `CountryStore` is updated before the callback that updates `CityStore` + * needs to query its data. + * + * CityStore.dispatchToken = flightDispatcher.register(function(payload) { + * if (payload.actionType === 'country-update') { + * // `CountryStore.country` may not be updated. + * flightDispatcher.waitFor([CountryStore.dispatchToken]); + * // `CountryStore.country` is now guaranteed to be updated. + * + * // Select the default city for the new country + * CityStore.city = getDefaultCityForCountry(CountryStore.country); + * } + * }); + * + * The usage of `waitFor()` can be chained, for example: + * + * FlightPriceStore.dispatchToken = + * flightDispatcher.register(function(payload) { + * switch (payload.actionType) { + * case 'country-update': + * flightDispatcher.waitFor([CityStore.dispatchToken]); + * FlightPriceStore.price = + * getFlightPriceStore(CountryStore.country, CityStore.city); + * break; + * + * case 'city-update': + * FlightPriceStore.price = + * FlightPriceStore(CountryStore.country, CityStore.city); + * break; + * } + * }); + * + * The `country-update` payload will be guaranteed to invoke the stores' + * registered callbacks in order: `CountryStore`, `CityStore`, then + * `FlightPriceStore`. + */ + + function Dispatcher() { + this.$Dispatcher_callbacks = {}; + this.$Dispatcher_isPending = {}; + this.$Dispatcher_isHandled = {}; + this.$Dispatcher_isDispatching = false; + this.$Dispatcher_pendingPayload = null; + } + + /** + * Registers a callback to be invoked with every dispatched payload. Returns + * a token that can be used with `waitFor()`. + * + * @param {function} callback + * @return {string} + */ + Dispatcher.prototype.register=function(callback) { + var id = _prefix + _lastID++; + this.$Dispatcher_callbacks[id] = callback; + return id; + }; + + /** + * Removes a callback based on its token. + * + * @param {string} id + */ + Dispatcher.prototype.unregister=function(id) { + invariant( + this.$Dispatcher_callbacks[id], + 'Dispatcher.unregister(...): `%s` does not map to a registered callback.', + id + ); + delete this.$Dispatcher_callbacks[id]; + }; + + /** + * Waits for the callbacks specified to be invoked before continuing execution + * of the current callback. This method should only be used by a callback in + * response to a dispatched payload. + * + * @param {array} ids + */ + Dispatcher.prototype.waitFor=function(ids) { + invariant( + this.$Dispatcher_isDispatching, + 'Dispatcher.waitFor(...): Must be invoked while dispatching.' + ); + for (var ii = 0; ii < ids.length; ii++) { + var id = ids[ii]; + if (this.$Dispatcher_isPending[id]) { + invariant( + this.$Dispatcher_isHandled[id], + 'Dispatcher.waitFor(...): Circular dependency detected while ' + + 'waiting for `%s`.', + id + ); + continue; + } + invariant( + this.$Dispatcher_callbacks[id], + 'Dispatcher.waitFor(...): `%s` does not map to a registered callback.', + id + ); + this.$Dispatcher_invokeCallback(id); + } + }; + + /** + * Dispatches a payload to all registered callbacks. + * + * @param {object} payload + */ + Dispatcher.prototype.dispatch=function(payload) { + invariant( + !this.$Dispatcher_isDispatching, + 'Dispatch.dispatch(...): Cannot dispatch in the middle of a dispatch.' + ); + this.$Dispatcher_startDispatching(payload); + try { + for (var id in this.$Dispatcher_callbacks) { + if (this.$Dispatcher_isPending[id]) { + continue; + } + this.$Dispatcher_invokeCallback(id); + } + } finally { + this.$Dispatcher_stopDispatching(); + } + }; + + /** + * Is this Dispatcher currently dispatching. + * + * @return {boolean} + */ + Dispatcher.prototype.isDispatching=function() { + return this.$Dispatcher_isDispatching; + }; + + /** + * Call the callback stored with the given id. Also do some internal + * bookkeeping. + * + * @param {string} id + * @internal + */ + Dispatcher.prototype.$Dispatcher_invokeCallback=function(id) { + this.$Dispatcher_isPending[id] = true; + this.$Dispatcher_callbacks[id](this.$Dispatcher_pendingPayload); + this.$Dispatcher_isHandled[id] = true; + }; + + /** + * Set up bookkeeping needed when dispatching. + * + * @param {object} payload + * @internal + */ + Dispatcher.prototype.$Dispatcher_startDispatching=function(payload) { + for (var id in this.$Dispatcher_callbacks) { + this.$Dispatcher_isPending[id] = false; + this.$Dispatcher_isHandled[id] = false; + } + this.$Dispatcher_pendingPayload = payload; + this.$Dispatcher_isDispatching = true; + }; + + /** + * Clear bookkeeping used for dispatching. + * + * @internal + */ + Dispatcher.prototype.$Dispatcher_stopDispatching=function() { + this.$Dispatcher_pendingPayload = null; + this.$Dispatcher_isDispatching = false; + }; + + +module.exports = Dispatcher; + +},{"./invariant":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/flux/lib/invariant.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/flux/lib/invariant.js":[function(require,module,exports){ +/** + * Copyright (c) 2014, Facebook, Inc. + * All rights reserved. + * + * This source code is licensed under the BSD-style license found in the + * LICENSE file in the root directory of this source tree. An additional grant + * of patent rights can be found in the PATENTS file in the same directory. + * + * @providesModule invariant + */ + +"use strict"; + +/** + * Use invariant() to assert state which your program assumes to be true. + * + * Provide sprintf-style format (only %s is supported) and arguments + * to provide information about what broke and what you were + * expecting. + * + * The invariant message will be stripped in production, but the invariant + * will remain to ensure logic does not differ in production. + */ + +var invariant = function(condition, format, a, b, c, d, e, f) { + if (false) { + if (format === undefined) { + throw new Error('invariant requires an error message argument'); + } + } + + if (!condition) { + var error; + if (format === undefined) { + error = new Error( + 'Minified exception occurred; use the non-minified dev environment ' + + 'for the full error message and additional helpful warnings.' + ); + } else { + var args = [a, b, c, d, e, f]; + var argIndex = 0; + error = new Error( + 'Invariant Violation: ' + + format.replace(/%s/g, function() { return args[argIndex++]; }) + ); + } + + error.framesToPop = 1; // we don't care about invariant's own frame + throw error; + } +}; + +module.exports = invariant; + +},{}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/moment-timezone/data/packed/latest.json":[function(require,module,exports){ +module.exports={ + "version": "2014j", + "zones": [ + "Africa/Abidjan|LMT GMT|g.8 0|01|-2ldXH.Q", + "Africa/Accra|LMT GMT GHST|.Q 0 -k|012121212121212121212121212121212121212121212121|-26BbX.8 6tzX.8 MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE 1BAk MnE 1C0k MnE 1BAk MnE 1BAk MnE", + "Africa/Addis_Ababa|LMT EAT BEAT BEAUT|-2r.g -30 -2u -2J|01231|-1F3Cr.g 3Dzr.g okMu MFXJ", + "Africa/Algiers|PMT WET WEST CET CEST|-9.l 0 -10 -10 -20|0121212121212121343431312123431213|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 DA0 Imo0 rd0 De0 9Xz0 1fb0 1ap0 16K0 2yo0 mEp0 hwL0 jxA0 11A0 dDd0 17b0 11B0 1cN0 2Dy0 1cN0 1fB0 1cL0", + "Africa/Bangui|LMT WAT|-d.A -10|01|-22y0d.A", + "Africa/Bissau|LMT WAT GMT|12.k 10 0|012|-2ldWV.E 2xonV.E", + "Africa/Blantyre|LMT CAT|-2a.k -20|01|-2GJea.k", + "Africa/Cairo|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-1bIO0 vb0 1ip0 11z0 1iN0 1nz0 12p0 1pz0 10N0 1pz0 16p0 1jz0 s3d0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1WL0 rd0 1Rz0 wp0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1qL0 Xd0 1oL0 11d0 1oL0 11d0 1pb0 11d0 1oL0 11d0 1oL0 11d0 1ny0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 WL0 1qN0 Rb0 1wp0 On0 1zd0 Lz0 1EN0 Fb0 c10 8n0 8Nd0 gL0 e10 mn0 1o10 jz0 gN0 pb0 1qN0 dX0 e10 xz0 1o10 bb0 e10 An0 1o10 5z0 e10 FX0 1o10 2L0 e10 IL0 1C10 Lz0 1wp0 TX0 1qN0 WL0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0", + "Africa/Casablanca|LMT WET WEST CET|u.k 0 -10 -10|012121212121212121312121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2gMnt.E 130Lt.E rb0 Dd0 dVb0 b6p0 TX0 EoB0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4mn0 SyN0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uo0 e00 DA0 11A0 rA0 e00 Jc0 WM0 m00 gM0 M00 WM0 jc0 e00 RA0 11A0 dA0 e00 Uo0 11A0 800 gM0 Xc0 11A0 5c0 e00 17A0 WM0 2o0 e00 1ao0 19A0 1g00 16M0 1iM0 1400 1lA0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qo0 1200 1kM0 14M0 1i00", + "Africa/Ceuta|WET WEST CET CEST|0 -10 -10 -20|010101010101010101010232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-25KN0 11z0 drd0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1y7p0 LL0 gnd0 rz0 43d0 AL0 1Nd0 XX0 1Cp0 pz0 dEp0 4VB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Africa/El_Aaiun|LMT WAT WET WEST|Q.M 10 0 -10|0123232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1rDz7.c 1GVA7.c 6L0 AL0 1Nd0 XX0 1Cp0 pz0 1cBB0 AL0 1Nd0 wn0 1FB0 Db0 1zd0 Lz0 1Nf0 wM0 co0 go0 1o00 s00 dA0 vc0 11A0 A00 e00 y00 11A0 uo0 e00 DA0 11A0 rA0 e00 Jc0 WM0 m00 gM0 M00 WM0 jc0 e00 RA0 11A0 dA0 e00 Uo0 11A0 800 gM0 Xc0 11A0 5c0 e00 17A0 WM0 2o0 e00 1ao0 19A0 1g00 16M0 1iM0 1400 1lA0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qo0 1200 1kM0 14M0 1i00", + "Africa/Johannesburg|SAST SAST SAST|-1u -20 -30|012121|-2GJdu 1Ajdu 1cL0 1cN0 1cL0", + "Africa/Juba|LMT CAT CAST EAT|-2a.8 -20 -30 -30|01212121212121212121212121212121213|-1yW2a.8 1zK0a.8 16L0 1iN0 17b0 1jd0 17b0 1ip0 17z0 1i10 17X0 1hB0 18n0 1hd0 19b0 1gp0 19z0 1iN0 17b0 1ip0 17z0 1i10 18n0 1hd0 18L0 1gN0 19b0 1gp0 19z0 1iN0 17z0 1i10 17X0 yGd0", + "Africa/Monrovia|MMT LRT GMT|H.8 I.u 0|012|-23Lzg.Q 29s01.m", + "Africa/Ndjamena|LMT WAT WAST|-10.c -10 -20|0121|-2le10.c 2J3c0.c Wn0", + "Africa/Tripoli|LMT CET CEST EET|-Q.I -10 -20 -20|012121213121212121212121213123123|-21JcQ.I 1hnBQ.I vx0 4iP0 xx0 4eN0 Bb0 7ip0 U0n0 A10 1db0 1cN0 1db0 1dd0 1db0 1eN0 1bb0 1e10 1cL0 1c10 1db0 1dd0 1db0 1cN0 1db0 1q10 fAn0 1ep0 1db0 AKq0 TA0 1o00", + "Africa/Tunis|PMT CET CEST|-9.l -10 -20|0121212121212121212121212121212121|-2nco9.l 18pa9.l 1qM0 DA0 3Tc0 11B0 1ze0 WM0 7z0 3d0 14L0 1cN0 1f90 1ar0 16J0 1gXB0 WM0 1rA0 11c0 nwo0 Ko0 1cM0 1cM0 1rA0 10M0 zuM0 10N0 1aN0 1qM0 WM0 1qM0 11A0 1o00", + "Africa/Windhoek|SWAT SAST SAST CAT WAT WAST|-1u -20 -30 -20 -10 -20|012134545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2GJdu 1Ajdu 1cL0 1SqL0 9NA0 11D0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 11B0 1nX0 11B0", + "America/Adak|NST NWT NPT BST BDT AHST HAST HADT|b0 a0 a0 b0 a0 a0 a0 90|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Anchorage|CAT CAWT CAPT AHST AHDT YST AKST AKDT|a0 90 90 a0 90 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T00 8wX0 iA0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cm0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Anguilla|LMT AST|46.4 40|01|-2kNvR.U", + "America/Antigua|LMT EST AST|47.c 50 40|012|-2kNvQ.M 1yxAQ.M", + "America/Araguaina|LMT BRT BRST|3c.M 30 20|0121212121212121212121212121212121212121212121212121|-2glwL.c HdKL.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 ny10 Lz0", + "America/Argentina/Buenos_Aires|CMT ART ARST ART ARST|4g.M 40 30 30 20|0121212121212121212121212121212121212121213434343434343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0", + "America/Argentina/Catamarca|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", + "America/Argentina/Cordoba|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343454343234343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0 1qN0 WL0", + "America/Argentina/Jujuy|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1ze0 TX0 1ld0 WK0 1wp0 TX0 g0p0 10M0 j3c0 uL0", + "America/Argentina/La_Rioja|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", + "America/Argentina/Mendoza|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|0121212121212121212121212121212121212121213434345656543235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1u20 SL0 1vd0 Tb0 1wp0 TW0 g0p0 10M0 agM0 Op0 7TX0 uL0", + "America/Argentina/Rio_Gallegos|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ako0 7B0 8zb0 uL0", + "America/Argentina/Salta|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434543432343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 j3c0 uL0", + "America/Argentina/San_Juan|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|01212121212121212121212121212121212121212134343434534343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Qn0 qO0 16n0 Rb0 1wp0 TX0 g0p0 10M0 ak00 m10 8lb0 uL0", + "America/Argentina/San_Luis|CMT ART ARST ART ARST WART WARST|4g.M 40 30 30 20 40 30|01212121212121212121212121212121212121212134343456536353465653|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 XX0 1q20 SL0 AN0 kin0 10M0 ak00 m10 8lb0 8L0 jd0 1qN0 WL0 1qN0", + "America/Argentina/Tucuman|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|012121212121212121212121212121212121212121343434345434323534343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wq0 Ra0 1wp0 TX0 g0p0 10M0 ako0 4N0 8BX0 uL0 1qN0 WL0", + "America/Argentina/Ushuaia|CMT ART ARST ART ARST WART|4g.M 40 30 30 20 40|0121212121212121212121212121212121212121213434343434343235343|-20UHH.c pKnH.c Mn0 1iN0 Tb0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 1C10 LX0 1C10 LX0 1C10 LX0 1C10 Mn0 MN0 2jz0 MN0 4lX0 u10 5Lb0 1pB0 Fnz0 u10 uL0 1vd0 SL0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 zvd0 Bz0 1tB0 TX0 1wp0 Rb0 1wp0 Rb0 1wp0 TX0 g0p0 10M0 ajA0 8p0 8zb0 uL0", + "America/Aruba|LMT ANT AST|4z.L 4u 40|012|-2kV7o.d 28KLS.d", + "America/Asuncion|AMT PYT PYT PYST|3O.E 40 30 30|012131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|-1x589.k 1DKM9.k 3CL0 3Dd0 10L0 1pB0 10n0 1pB0 10n0 1pB0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1dd0 1cL0 1dd0 1cL0 1dd0 1db0 1dd0 1cL0 1lB0 14n0 1dd0 1cL0 1fd0 WL0 1rd0 1aL0 1dB0 Xz0 1qp0 Xb0 1qN0 10L0 1rB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 WN0 1qL0 11B0 1nX0 1ip0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 TX0 1tB0 19X0 1a10 1fz0 1a10 1fz0 1cN0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1ip0 17b0 1ip0 17b0 1ip0", + "America/Atikokan|CST CDT CWT CPT EST|60 50 50 50 50|0101234|-25TQ0 1in0 Rnb0 3je0 8x30 iw0", + "America/Bahia|LMT BRT BRST|2y.4 30 20|01212121212121212121212121212121212121212121212121212121212121|-2glxp.U HdLp.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 l5B0 Rb0", + "America/Bahia_Banderas|LMT MST CST PST MDT CDT|71 70 60 80 60 50|0121212131414141414141414141414141414152525252525252525252525252525252525252525252525252525252|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nW0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", + "America/Barbados|LMT BMT AST ADT|3W.t 3W.t 40 30|01232323232|-1Q0I1.v jsM0 1ODC1.v IL0 1ip0 17b0 1ip0 17b0 1ld0 13b0", + "America/Belem|LMT BRT BRST|3d.U 30 20|012121212121212121212121212121|-2glwK.4 HdKK.4 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0", + "America/Belize|LMT CST CHDT CDT|5Q.M 60 5u 50|01212121212121212121212121212121212121212121212121213131|-2kBu7.c fPA7.c Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1wou Rbu 1zcu Onu 1zcu Onu 1zcu Rbu 1wou Rbu 1f0Mu qn0 lxB0 mn0", + "America/Blanc-Sablon|AST ADT AWT APT|40 30 30 30|010230|-25TS0 1in0 UGp0 8x50 iu0", + "America/Boa_Vista|LMT AMT AMST|42.E 40 30|0121212121212121212121212121212121|-2glvV.k HdKV.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 smp0 WL0 1tB0 2L0", + "America/Bogota|BMT COT COST|4U.g 50 40|0121|-2eb73.I 38yo3.I 2en0", + "America/Boise|PST PDT MST MWT MPT MDT|80 70 70 60 60 60|0101023425252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-261q0 1nX0 11B0 1nX0 8C10 JCL0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 Dd0 1Kn0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Cambridge_Bay|zzz MST MWT MPT MDDT MDT CST CDT EST|0 70 60 60 50 60 60 50 50|0123141515151515151515151515151515151515151515678651515151515151515151515151515151515151515151515151515151515151515151515151|-21Jc0 RO90 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11A0 1nX0 2K0 WQ0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Campo_Grande|LMT AMT AMST|3C.s 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwl.w HdLl.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0", + "America/Cancun|LMT CST EST EDT CDT|5L.4 60 50 40 50|0123232341414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQG0 2q2o0 yLB0 1lb0 14p0 1lb0 14p0 Lz0 xB0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", + "America/Caracas|CMT VET VET|4r.E 4u 40|0121|-2kV7w.k 28KM2.k 1IwOu", + "America/Cayenne|LMT GFT GFT|3t.k 40 30|012|-2mrwu.E 2gWou.E", + "America/Cayman|KMT EST|57.b 50|01|-2l1uQ.N", + "America/Chicago|CST CDT EST CWT CPT|60 50 50 50 50|01010101010101010101010101010101010102010101010103401010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 1wp0 TX0 WN0 1qL0 1cN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 11B0 1Hz0 14p0 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Chihuahua|LMT MST CST CDT MDT|74.k 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", + "America/Costa_Rica|SJMT CST CDT|5A.d 60 50|0121212121|-1Xd6n.L 2lu0n.L Db0 1Kp0 Db0 pRB0 15b0 1kp0 mL0", + "America/Creston|MST PST|70 80|010|-29DR0 43B0", + "America/Cuiaba|LMT AMT AMST|3I.k 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwf.E HdLf.E 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 4a10 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0", + "America/Danmarkshavn|LMT WGT WGST GMT|1e.E 30 20 0|01212121212121212121212121212121213|-2a5WJ.k 2z5fJ.k 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 DC0", + "America/Dawson|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 jrA0 fNd0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Dawson_Creek|PST PDT PWT PPT MST|80 70 70 70 70|0102301010101010101010101010101010101010101010101010101014|-25TO0 1in0 UGp0 8x10 iy0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 ML0", + "America/Denver|MST MDT MWT MPT|70 60 60 60|01010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 11B0 1qL0 WN0 mn0 Ord0 8x20 ix0 LCN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Detroit|LMT CST EST EWT EPT EDT|5w.b 60 50 40 40 40|01234252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2Cgir.N peqr.N 156L0 8x40 iv0 6fd0 11z0 Jy10 SL0 dnB0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Edmonton|LMT MST MDT MWT MPT|7x.Q 70 60 60 60|01212121212121341212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2yd4q.8 shdq.8 1in0 17d0 hz0 2dB0 1fz0 1a10 11z0 1qN0 WL0 1qN0 11z0 IGN0 8x20 ix0 3NB0 11z0 LFB0 1cL0 3Cp0 1cL0 66N0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Eirunepe|LMT ACT ACST AMT|4D.s 50 40 40|0121212121212121212121212121212131|-2glvk.w HdLk.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0 yTd0 d5X0", + "America/El_Salvador|LMT CST CDT|5U.M 60 50|012121|-1XiG3.c 2Fvc3.c WL0 1qN0 WL0", + "America/Ensenada|LMT MST PST PDT PWT PPT|7M.4 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOP0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Fort_Wayne|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010101023010101010101010101040454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 QI10 Db0 RB0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 5Tz0 1o10 qLb0 1cL0 1cN0 1cL0 1qhd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Fortaleza|LMT BRT BRST|2y 30 20|0121212121212121212121212121212121212121|-2glxq HdLq 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 5z0 2mN0 On0", + "America/Glace_Bay|LMT AST ADT AWT APT|3X.M 40 30 30 30|012134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsI0.c CwO0.c 1in0 UGp0 8x50 iu0 iq10 11z0 Jg10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Godthab|LMT WGT WGST|3q.U 30 20|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5Ux.4 2z5dx.4 19U0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "America/Goose_Bay|NST NDT NST NDT NWT NPT AST ADT ADDT|3u.Q 2u.Q 3u 2u 2u 2u 40 30 20|010232323232323245232323232323232323232323232323232323232326767676767676767676767676767676767676767676768676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-25TSt.8 1in0 DXb0 2HbX.8 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 S10 g0u 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Grand_Turk|KMT EST EDT AST|57.b 50 40 40|0121212121212121212121212121212121212121212121212121212121212121212121212123|-2l1uQ.N 2HHBQ.N 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Guatemala|LMT CST CDT|62.4 60 50|0121212121|-24KhV.U 2efXV.U An0 mtd0 Nz0 ifB0 17b0 zDB0 11z0", + "America/Guayaquil|QMT ECT|5e 50|01|-1yVSK", + "America/Guyana|LMT GBGT GYT GYT GYT|3Q.E 3J 3J 30 40|01234|-2dvU7.k 24JzQ.k mlc0 Bxbf", + "America/Halifax|LMT AST ADT AWT APT|4e.o 40 30 30 30|0121212121212121212121212121212121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsHJ.A xzzJ.A 1db0 3I30 1in0 3HX0 IL0 1E10 ML0 1yN0 Pb0 1Bd0 Mn0 1Bd0 Rz0 1w10 Xb0 1w10 LX0 1w10 Xb0 1w10 Lz0 1C10 Jz0 1E10 OL0 1yN0 Un0 1qp0 Xb0 1qp0 11X0 1w10 Lz0 1HB0 LX0 1C10 FX0 1w10 Xb0 1qp0 Xb0 1BB0 LX0 1td0 Xb0 1qp0 Xb0 Rf0 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 3Qp0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 6i10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Havana|HMT CST CDT|5t.A 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Meuu.o 72zu.o ML0 sld0 An0 1Nd0 Db0 1Nd0 An0 6Ep0 An0 1Nd0 An0 JDd0 Mn0 1Ap0 On0 1fd0 11X0 1qN0 WL0 1wp0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 14n0 1ld0 14L0 1kN0 15b0 1kp0 1cL0 1cN0 1fz0 1a10 1fz0 1fB0 11z0 14p0 1nX0 11B0 1nX0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 1a10 1in0 1a10 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 17c0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 11A0 6i00 Rc0 1wo0 U00 1tA0 Rc0 1wo0 U00 1wo0 U00 1zc0 U00 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0", + "America/Hermosillo|LMT MST CST PST MDT|7n.Q 70 60 80 60|0121212131414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0", + "America/Indiana/Knox|CST CDT CWT CPT EST|60 50 50 50 50|0101023010101010101010101010101010101040101010101010101010101010101010101010101010101010141010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 3NB0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 3Cn0 8wp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 z8o0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Marengo|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010104545454545414545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 dyN0 11z0 6fd0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1e6p0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Petersburg|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010104010101010101010101010141014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 njX0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 3Fb0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 19co0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Tell_City|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Vevay|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|010102304545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 kPB0 Awn0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1lnd0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Vincennes|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010454541014545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 g0p0 11z0 1o10 11z0 1qL0 WN0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 caL0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Indiana/Winamac|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|01010230101010101010101010101010101010454541054545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 jrz0 1cL0 1cN0 1cL0 1qhd0 1o00 Rd0 1za0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Inuvik|zzz PST PDDT MST MDT|0 80 60 70 60|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-FnA0 tWU0 1fA0 wPe0 2pz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Iqaluit|zzz EWT EPT EST EDDT EDT CST CDT|0 40 40 50 30 40 60 50|01234353535353535353535353535353535353535353567353535353535353535353535353535353535353535353535353535353535353535353535353|-16K00 7nX0 iv0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Jamaica|KMT EST EDT|57.b 50 40|0121212121212121212121|-2l1uQ.N 2uM1Q.N 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0", + "America/Juneau|PST PWT PPT PDT YDT YST AKST AKDT|80 70 70 70 80 90 90 80|01203030303030303030303030403030356767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cM0 1cM0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Kentucky/Louisville|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101010102301010101010101010101010101454545454545414545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 3Fd0 Nb0 LPd0 11z0 RB0 8x30 iw0 Bb0 10N0 2bB0 8in0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 xz0 gso0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1VA0 LA0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Kentucky/Monticello|CST CDT CWT CPT EST EDT|60 50 50 50 50 40|0101023010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454545454|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 SWp0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/La_Paz|CMT BOST BOT|4w.A 3w.A 40|012|-1x37r.o 13b0", + "America/Lima|LMT PET PEST|58.A 50 40|0121212121212121|-2tyGP.o 1bDzP.o zX0 1aN0 1cL0 1cN0 1cL0 1PrB0 zX0 1O10 zX0 6Gp0 zX0 98p0 zX0", + "America/Los_Angeles|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 5Wp0 1Vb0 3dB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Maceio|LMT BRT BRST|2m.Q 30 20|012121212121212121212121212121212121212121|-2glxB.8 HdLB.8 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 dMN0 Lz0 8Q10 WL0 1tB0 5z0 2mN0 On0", + "America/Managua|MMT CST EST CDT|5J.c 60 50 50|0121313121213131|-1quie.M 1yAMe.M 4mn0 9Up0 Dz0 1K10 Dz0 s3F0 1KH0 DB0 9In0 k8p0 19X0 1o30 11y0", + "America/Manaus|LMT AMT AMST|40.4 40 30|01212121212121212121212121212121|-2glvX.U HdKX.U 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 dPB0 On0", + "America/Martinique|FFMT AST ADT|44.k 40 30|0121|-2mPTT.E 2LPbT.E 19X0", + "America/Matamoros|LMT CST CDT|6E 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Mazatlan|LMT MST CST PST MDT|75.E 70 60 80 60|0121212131414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 otX0 gmN0 P2N0 13Vd0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", + "America/Menominee|CST CDT CWT CPT EST|60 50 50 50 50|01010230101041010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 1o10 11z0 LCN0 1fz0 6410 9Jb0 1cM0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Merida|LMT CST EST CDT|5W.s 60 50 50|0121313131313131313131313131313131313131313131313131313131313131313131313131313131313131|-1UQG0 2q2o0 2hz0 wu30 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", + "America/Metlakatla|PST PWT PPT PDT|80 70 70 70|0120303030303030303030303030303030|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0", + "America/Mexico_City|LMT MST CST CDT CWT|6A.A 70 60 50 50|012121232324232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 gEn0 TX0 3xd0 Jb0 6zB0 SL0 e5d0 17b0 1Pff0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", + "America/Miquelon|LMT AST PMST PMDT|3I.E 40 30 20|012323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-2mKkf.k 2LTAf.k gQ10 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Moncton|EST AST ADT AWT APT|50 40 30 30 30|012121212121212121212134121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2IsH0 CwN0 1in0 zAo0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1Nd0 An0 1K10 Lz0 1zB0 NX0 1u10 Wn0 S20 8x50 iu0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14n1 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 ReX 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Monterrey|LMT CST CDT|6F.g 60 50|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1UQG0 2FjC0 1nX0 i6p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", + "America/Montevideo|MMT UYT UYHST UYST UYT UYHST|3I.I 3u 30 20 30 2u|012121212121212121212121213434343434345454543453434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-20UIf.g 8jzJ.g 1cLu 1dcu 1cLu 1dcu 1cLu ircu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu WLu 1qMu WLu 1qMu 11zu 1o0u 11zu NAu 11bu 2iMu zWu Dq10 19X0 pd0 jz0 cm10 19X0 1fB0 1on0 11d0 1oL0 1nB0 1fzu 1aou 1fzu 1aou 1fzu 3nAu Jb0 3MN0 1SLu 4jzu 2PB0 Lb0 3Dd0 1pb0 ixd0 An0 1MN0 An0 1wp0 On0 1wp0 Rb0 1zd0 On0 1wp0 Rb0 s8p0 1fB0 1ip0 11z0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10 14n0 1ld0 14n0 1ld0 14n0 1ld0 14n0 1o10 11z0 1o10 11z0 1o10", + "America/Montreal|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-28tR0 bV0 2m30 1in0 121u 1nb0 1g10 11z0 1o0u 11zu 1o0u 11zu 3VAu Rzu 1qMu WLu 1qMu WLu 1qKu WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kO0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Nassau|LMT EST EDT|59.u 50 40|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2kNuO.u 26XdO.u 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/New_York|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 11B0 1qL0 1a10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 RB0 8x40 iv0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Nipigon|EST EDT EWT EPT|50 40 40 40|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 Rnb0 3je0 8x40 iv0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Nome|NST NWT NPT BST BDT YST AKST AKDT|b0 a0 a0 b0 a0 90 90 80|012034343434343434343434343434343456767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676767676|-17SX0 8wW0 iB0 Qlb0 52O0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cl0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Noronha|LMT FNT FNST|29.E 20 10|0121212121212121212121212121212121212121|-2glxO.k HdKO.k 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0", + "America/North_Dakota/Beulah|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Oo0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/North_Dakota/Center|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101014545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/North_Dakota/New_Salem|MST MDT MWT MPT CST CDT|70 60 60 60 60 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101454545454545454545454545454545454545454545454545454545454545454545454|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14o0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Ojinaga|LMT MST CST CDT MDT|6V.E 70 60 50 60|0121212323241414141414141414141414141414141414141414141414141414141414141414141414141414141|-1UQF0 deL0 8lc0 17c0 10M0 1dd0 2zQN0 1lb0 14p0 1lb0 14q0 1lb0 14p0 1nX0 11B0 1nX0 1fB0 WL0 1fB0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 U10 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Panama|CMT EST|5j.A 50|01|-2uduE.o", + "America/Pangnirtung|zzz AST AWT APT ADDT ADT EDT EST CST CDT|0 40 30 30 20 30 40 50 60 50|012314151515151515151515151515151515167676767689767676767676767676767676767676767676767676767676767676767676767676767676767|-1XiM0 PnG0 8x50 iu0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1o00 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11C0 1nX0 11A0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Paramaribo|LMT PMT PMT NEGT SRT SRT|3E.E 3E.Q 3E.A 3u 3u 30|012345|-2nDUj.k Wqo0.c qanX.I 1dmLN.o lzc0", + "America/Phoenix|MST MDT MWT|70 60 60|01010202010|-261r0 1nX0 11B0 1nX0 SgN0 4Al1 Ap0 1db0 SWqX 1cL0", + "America/Port-au-Prince|PPMT EST EDT|4N 50 40|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-28RHb 2FnMb 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14q0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 i6n0 1nX0 11B0 1nX0 d430 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Porto_Acre|LMT ACT ACST AMT|4v.c 50 40 40|01212121212121212121212121212131|-2glvs.M HdLs.M 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0 d5X0", + "America/Porto_Velho|LMT AMT AMST|4f.A 40 30|012121212121212121212121212121|-2glvI.o HdKI.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0", + "America/Puerto_Rico|AST AWT APT|40 30 30|0120|-17lU0 7XT0 iu0", + "America/Rainy_River|CST CDT CWT CPT|60 50 50 50|010123010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TQ0 1in0 Rnb0 3je0 8x30 iw0 19yN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Rankin_Inlet|zzz CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313131313131313131313131313131313131313131313131313131313131313131|-vDc0 keu0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Recife|LMT BRT BRST|2j.A 30 20|0121212121212121212121212121212121212121|-2glxE.o HdLE.o 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 nsp0 WL0 1tB0 2L0 2pB0 On0", + "America/Regina|LMT MST MDT MWT MPT CST|6W.A 70 60 60 60 60|012121212121212121212121341212121212121212121212121215|-2AD51.o uHe1.o 1in0 s2L0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 66N0 1cL0 1cN0 19X0 1fB0 1cL0 1fB0 1cL0 1cN0 1cL0 M30 8x20 ix0 1ip0 1cL0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 3NB0 1cL0 1cN0", + "America/Resolute|zzz CST CDDT CDT EST|0 60 40 50 50|012131313131313131313131313131313131313131313431313131313431313131313131313131313131313131313131313131313131313131313131|-SnA0 GWS0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Santa_Isabel|LMT MST PST PDT PWT PPT|7D.s 70 80 70 70 70|012123245232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UQE0 4PX0 8mM0 8lc0 SN0 1cL0 pHB0 83r0 zI0 5O10 1Rz0 cOP0 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 BUp0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0", + "America/Santarem|LMT AMT AMST BRT|3C.M 40 30 30|0121212121212121212121212121213|-2glwl.c HdLl.c 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 qe10 xb0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 NBd0", + "America/Santiago|SMT CLT CLT CLST CLST|4G.K 50 40 40 30|010203131313131313124242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424|-2q5Th.e fNch.e 5gLG.K 21bh.e jRAG.K 1pbh.e 11d0 1oL0 11d0 1oL0 11d0 1oL0 11d0 1pb0 11d0 nHX0 op0 9UK0 1Je0 Qen0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1ld0 14n0 1qN0 11z0 1cN0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0", + "America/Santo_Domingo|SDMT EST EDT EHDT AST|4E 50 40 4u 40|01213131313131414|-1ttjk 1lJMk Mn0 6sp0 Lbu 1Cou yLu 1RAu wLu 1QMu xzu 1Q0u xXu 1PAu 13jB0 e00", + "America/Sao_Paulo|LMT BRT BRST|36.s 30 20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-2glwR.w HdKR.w 1cc0 1e10 1bX0 Ezd0 So0 1vA0 Mn0 1BB0 ML0 1BB0 zX0 pTd0 PX0 2ep0 nz0 1C10 zX0 1C10 LX0 1C10 Mn0 H210 Rb0 1tB0 IL0 1Fd0 FX0 1EN0 FX0 1HB0 Lz0 1EN0 Lz0 1C10 IL0 1HB0 Db0 1HB0 On0 1zd0 On0 1zd0 Lz0 1zd0 Rb0 1wN0 Wn0 1tB0 Rb0 1tB0 WL0 1tB0 Rb0 1zd0 On0 1HB0 FX0 1C10 Lz0 1Ip0 HX0 1zd0 On0 1HB0 IL0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1zd0 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0 On0 1zd0 On0 1zd0 On0 1C10 Lz0 1C10 Lz0 1C10 Lz0 1C10 On0 1zd0 Rb0 1wp0 On0 1C10 Lz0 1C10 On0 1zd0", + "America/Scoresbysund|LMT CGT CGST EGST EGT|1r.Q 20 10 0 10|0121343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2a5Ww.8 2z5ew.8 1a00 1cK0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "America/Sitka|PST PWT PPT PDT YST AKST AKDT|80 70 70 70 90 90 80|01203030303030303030303030303030345656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-17T20 8x10 iy0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 co0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/St_Johns|NST NDT NST NDT NWT NPT NDDT|3u.Q 2u.Q 3u 2u 2u 2u 1u|01010101010101010101010101010101010102323232323232324523232323232323232323232323232323232323232323232323232323232323232323232323232323232326232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-28oit.8 14L0 1nB0 1in0 1gm0 Dz0 1JB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1fB0 19X0 1fB0 19X0 10O0 eKX.8 19X0 1iq0 WL0 1qN0 WL0 1qN0 WL0 1tB0 TX0 1tB0 WL0 1qN0 WL0 1qN0 7UHu itu 1tB0 WL0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1tB0 WL0 1ld0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14n1 1lb0 14p0 1nW0 11C0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zcX Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Swift_Current|LMT MST MDT MWT MPT CST|7b.k 70 60 60 60 60|012134121212121212121215|-2AD4M.E uHdM.E 1in0 UGp0 8x20 ix0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 isN0 1cL0 3Cp0 1cL0 1cN0 11z0 1qN0 WL0 pMp0", + "America/Tegucigalpa|LMT CST CDT|5M.Q 60 50|01212121|-1WGGb.8 2ETcb.8 WL0 1qN0 WL0 GRd0 AL0", + "America/Thule|LMT AST ADT|4z.8 40 30|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a5To.Q 31NBo.Q 1cL0 1cN0 1cL0 1fB0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Thunder_Bay|CST EST EWT EPT EDT|60 50 40 40 40|0123141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141414141|-2q5S0 1iaN0 8x40 iv0 XNB0 1cL0 1cN0 1fz0 1cN0 1cL0 3Cp0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Toronto|EST EDT EWT EPT|50 40 40 40|01010101010101010101010101010101010101010101012301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TR0 1in0 11Wu 1nzu 1fD0 WJ0 1wr0 Nb0 1Ap0 On0 1zd0 On0 1wp0 TX0 1tB0 TX0 1tB0 TX0 1tB0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 4kM0 8x40 iv0 1o10 11z0 1nX0 11z0 1o10 11z0 1o10 1qL0 11D0 1nX0 11B0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Vancouver|PST PDT PWT PPT|80 70 70 70|0102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-25TO0 1in0 UGp0 8x10 iy0 1o10 17b0 1ip0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Whitehorse|YST YDT YWT YPT YDDT PST PDT|90 80 80 80 70 80 70|0101023040565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565|-25TN0 1in0 1o10 13V0 Ser0 8x00 iz0 LCL0 1fA0 1Be0 xDz0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Winnipeg|CST CDT CWT CPT|60 50 50 50|010101023010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aIi0 WL0 3ND0 1in0 Jap0 Rb0 aCN0 8x30 iw0 1tB0 11z0 1ip0 11z0 1o10 11z0 1o10 11z0 1rd0 10L0 1op0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 1cL0 1cN0 11z0 6i10 WL0 6i10 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1o00 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1o00 11A0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Yakutat|YST YWT YPT YDT AKST AKDT|90 80 80 80 90 80|01203030303030303030303030303030304545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-17T10 8x00 iz0 Vo10 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 cn0 10q0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "America/Yellowknife|zzz MST MWT MPT MDDT MDT|0 70 60 60 50 60|012314151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151515151|-1pdA0 hix0 8x20 ix0 LCL0 1fA0 zgO0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Antarctica/Casey|zzz AWST CAST|0 -80 -b0|012121|-2q00 1DjS0 T90 40P0 KL0", + "Antarctica/Davis|zzz DAVT DAVT|0 -70 -50|01012121|-vyo0 iXt0 alj0 1D7v0 VB0 3Wn0 KN0", + "Antarctica/DumontDUrville|zzz PMT DDUT|0 -a0 -a0|0102|-U0o0 cfq0 bFm0", + "Antarctica/Macquarie|AEST AEDT zzz MIST|-a0 -b0 0 -b0|0102010101010101010101010101010101010101010101010101010101010101010101010101010101010101013|-29E80 19X0 4SL0 1ayy0 Lvs0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0", + "Antarctica/Mawson|zzz MAWT MAWT|0 -60 -50|012|-CEo0 2fyk0", + "Antarctica/McMurdo|NZMT NZST NZST NZDT|-bu -cu -c0 -d0|01020202020202020202020202023232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323|-1GCVu Lz0 1tB0 11zu 1o0u 11zu 1o0u 11zu 1o0u 14nu 1lcu 14nu 1lcu 1lbu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1nXu 11Au 1qLu WMu 1qLu 11Au 1n1bu IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00", + "Antarctica/Palmer|zzz ARST ART ART ARST CLT CLST|0 30 40 30 20 40 30|012121212123435656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656565656|-cao0 nD0 1vd0 SL0 1vd0 17z0 1cN0 1fz0 1cN0 1cL0 1cN0 asn0 Db0 jsN0 14N0 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1ld0 14n0 1qN0 11z0 1cN0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0", + "Antarctica/Rothera|zzz ROTT|0 30|01|gOo0", + "Antarctica/Syowa|zzz SYOT|0 -30|01|-vs00", + "Antarctica/Troll|zzz UTC CEST|0 0 -20|01212121212121212121212121212121212121212121212121212121212121212121|1puo0 hd0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Antarctica/Vostok|zzz VOST|0 -60|01|-tjA0", + "Arctic/Longyearbyen|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2awM0 Qm0 W6o0 5pf0 WM0 1fA0 1cM0 1cM0 1cM0 1cM0 wJc0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1qM0 WM0 zpc0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Asia/Aden|LMT AST|-2X.S -30|01|-MG2X.S", + "Asia/Almaty|LMT ALMT ALMT ALMST|-57.M -50 -60 -70|0123232323232323232323232323232323232323232323232|-1Pc57.M eUo7.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 3Cl0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0", + "Asia/Amman|LMT EET EEST|-2n.I -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1yW2n.I 1HiMn.I KL0 1oN0 11b0 1oN0 11b0 1pd0 1dz0 1cp0 11b0 1op0 11b0 fO10 1db0 1e10 1cL0 1cN0 1cL0 1cN0 1fz0 1pd0 10n0 1ld0 14n0 1hB0 15b0 1ip0 19X0 1cN0 1cL0 1cN0 17b0 1ld0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1So0 y00 1fc0 1dc0 1co0 1dc0 1cM0 1cM0 1cM0 1o00 11A0 1lc0 17c0 1cM0 1cM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 4bX0 Dd0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0", + "Asia/Anadyr|LMT ANAT ANAT ANAST ANAST ANAST ANAT|-bN.U -c0 -d0 -e0 -d0 -c0 -b0|01232414141414141414141561414141414141414141414141414141414141561|-1PcbN.U eUnN.U 23CL0 1db0 1cN0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qN0 WM0", + "Asia/Aqtau|LMT FORT FORT SHET SHET SHEST AQTT AQTST AQTST AQTT|-3l.4 -40 -50 -50 -60 -60 -50 -60 -50 -40|012345353535353535353536767676898989898989898989896|-1Pc3l.4 eUnl.4 1jcL0 JDc0 1cL0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2UK0 Fz0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cN0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 RW0", + "Asia/Aqtobe|LMT AKTT AKTT AKTST AKTT AQTT AQTST|-3M.E -40 -50 -60 -60 -50 -60|01234323232323232323232565656565656565656565656565|-1Pc3M.E eUnM.E 23CL0 1db0 1cM0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2UK0 Fz0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0", + "Asia/Ashgabat|LMT ASHT ASHT ASHST ASHST TMT TMT|-3R.w -40 -50 -60 -50 -40 -50|012323232323232323232324156|-1Pc3R.w eUnR.w 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 ba0 xC0", + "Asia/Baghdad|BMT AST ADT|-2V.A -30 -40|012121212121212121212121212121212121212121212121212121|-26BeV.A 2ACnV.A 11b0 1cp0 1dz0 1dd0 1db0 1cN0 1cp0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1de0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0 1dc0 1dc0 1cM0 1dc0 1cM0 1dc0 1cM0 1dc0", + "Asia/Bahrain|LMT GST AST|-3m.k -40 -30|012|-21Jfm.k 27BXm.k", + "Asia/Baku|LMT BAKT BAKT BAKST BAKST AZST AZT AZT AZST|-3j.o -30 -40 -50 -40 -40 -30 -40 -50|0123232323232323232323245657878787878787878787878787878787878787878787878787878787878787878787878787878787878787|-1Pc3j.o 1jUoj.o WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 10K0 c30 1cJ0 1cL0 8wu0 1o00 11z0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Asia/Bangkok|BMT ICT|-6G.4 -70|01|-218SG.4", + "Asia/Beirut|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-21aq0 1on0 1410 1db0 19B0 1in0 1ip0 WL0 1lQp0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 q6N0 En0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1op0 11b0 dA10 17b0 1iN0 17b0 1iN0 17b0 1iN0 17b0 1vB0 SL0 1mp0 13z0 1iN0 17b0 1iN0 17b0 1jd0 12n0 1a10 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0", + "Asia/Bishkek|LMT FRUT FRUT FRUST FRUST KGT KGST KGT|-4W.o -50 -60 -70 -60 -50 -60 -60|01232323232323232323232456565656565656565656565656567|-1Pc4W.o eUnW.o 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 11c0 1tX0 17b0 1ip0 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1cPu 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 T8u", + "Asia/Brunei|LMT BNT BNT|-7D.E -7u -80|012|-1KITD.E gDc9.E", + "Asia/Calcutta|HMT BURT IST IST|-5R.k -6u -5u -6u|01232|-18LFR.k 1unn.k HB0 7zX0", + "Asia/Chita|LMT YAKT YAKT YAKST YAKST YAKT IRKT|-7x.Q -80 -90 -a0 -90 -a0 -80|012323232323232323232324123232323232323232323232323232323232323256|-21Q7x.Q pAnx.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Choibalsan|LMT ULAT ULAT CHOST CHOT CHOT|-7C -70 -80 -a0 -90 -80|012343434343434343434343434343434343434343434345|-2APHC 2UkoC cKn0 1da0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 3Db0", + "Asia/Chongqing|CST CDT|-80 -90|01010101010101010|-1c1I0 LX0 16p0 1jz0 1Myp0 Rb0 1o10 11z0 1o10 11z0 1qN0 11z0 1o10 11z0 1o10 11z0", + "Asia/Colombo|MMT IST IHST IST LKT LKT|-5j.w -5u -60 -6u -6u -60|01231451|-2zOtj.w 1rFbN.w 1zzu 7Apu 23dz0 11zu n3cu", + "Asia/Dacca|HMT BURT IST DACT BDT BDST|-5R.k -6u -5u -60 -60 -70|01213454|-18LFR.k 1unn.k HB0 m6n0 LqMu 1x6n0 1i00", + "Asia/Damascus|LMT EET EEST|-2p.c -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-21Jep.c Hep.c 17b0 1ip0 17b0 1ip0 17b0 1ip0 19X0 1xRB0 11X0 1oN0 10L0 1pB0 11b0 1oN0 10L0 1mp0 13X0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 1pd0 11b0 1oN0 Nb0 1AN0 Nb0 bcp0 19X0 1gp0 19X0 3ld0 1xX0 Vd0 1Bz0 Sp0 1vX0 10p0 1dz0 1cN0 1cL0 1db0 1db0 1g10 1an0 1ap0 1db0 1fd0 1db0 1cN0 1db0 1dd0 1db0 1cp0 1dz0 1c10 1dX0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1db0 1cN0 1db0 1cN0 19z0 1fB0 1qL0 11B0 1on0 Wp0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 1qL0 WN0 1qL0", + "Asia/Dili|LMT TLT JST TLT WITA|-8m.k -80 -90 -90 -80|012343|-2le8m.k 1dnXm.k 8HA0 1ew00 Xld0", + "Asia/Dubai|LMT GST|-3F.c -40|01|-21JfF.c", + "Asia/Dushanbe|LMT DUST DUST DUSST DUSST TJT|-4z.c -50 -60 -70 -60 -50|0123232323232323232323245|-1Pc4z.c eUnz.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 14N0", + "Asia/Gaza|EET EET EEST IST IDT|-20 -30 -30 -20 -30|010101010102020202020202020202023434343434343434343434343430202020202020202020202020202020202020202020202020202020202020202020202020202020202020|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 11z0 1o10 14o0 1lA1 SKX 1xd1 MKX 1AN0 1a00 1fA0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0", + "Asia/Hebron|EET EET EEST IST IDT|-20 -30 -30 -20 -30|01010101010202020202020202020202343434343434343434343434343020202020202020202020202020202020202020202020202020202020202020202020202020202020202020|-1c2q0 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 pBd0 Vz0 1oN0 11b0 1oO0 10N0 1pz0 10N0 1pb0 10N0 1pb0 10N0 1pb0 10N0 1pz0 10N0 1pb0 10N0 1pb0 11d0 1oL0 dW0 hfB0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 M10 C00 17c0 1io0 17c0 1io0 17c0 1o00 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 17c0 1io0 18N0 1bz0 19z0 1gp0 1610 1iL0 12L0 1mN0 14o0 1lc0 Tb0 1xd1 MKX bB0 cn0 1cN0 1a00 1fA0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 19X0 1fB0 19X0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0", + "Asia/Ho_Chi_Minh|LMT PLMT ICT IDT JST|-76.E -76.u -70 -80 -90|0123423232|-2yC76.E bK00.a 1h7b6.u 5lz0 18o0 3Oq0 k5b0 aW00 BAM0", + "Asia/Hong_Kong|LMT HKT HKST JST|-7A.G -80 -90 -90|0121312121212121212121212121212121212121212121212121212121212121212121|-2CFHA.G 1sEP6.G 1cL0 ylu 93X0 1qQu 1tX0 Rd0 1In0 NB0 1cL0 11B0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1kL0 14N0 1nX0 U10 1tz0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 Rd0 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 17d0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 s10 1Vz0 1cN0 1cL0 1cN0 1cL0 6fd0 14n0", + "Asia/Hovd|LMT HOVT HOVT HOVST|-66.A -60 -70 -80|01232323232323232323232323232323232323232323232|-2APG6.A 2Uko6.A cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0", + "Asia/Irkutsk|IMT IRKT IRKT IRKST IRKST IRKT|-6V.5 -70 -80 -90 -80 -90|012323232323232323232324123232323232323232323232323232323232323252|-21zGV.5 pjXV.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Istanbul|IMT EET EEST TRST TRT|-1U.U -20 -30 -40 -30|012121212121212121212121212121212121212121212121212121234343434342121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ogNU.U dzzU.U 11b0 8tB0 1on0 1410 1db0 19B0 1in0 3Rd0 Un0 1oN0 11b0 zSp0 CL0 mN0 1Vz0 1gN0 1pz0 5Rd0 1fz0 1yp0 ML0 1kp0 17b0 1ip0 17b0 1fB0 19X0 1jB0 18L0 1ip0 17z0 qdd0 xX0 3S10 Tz0 dA10 11z0 1o10 11z0 1qN0 11z0 1ze0 11B0 WM0 1qO0 WI0 1nX0 1rB0 10L0 11B0 1in0 17d0 1in0 2pX0 19E0 1fU0 16Q0 1iI0 16Q0 1iI0 1Vd0 pb0 3Kp0 14o0 1df0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WO0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 Xc0 1qo0 WM0 1qM0 11A0 1o00 1200 1nA0 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Asia/Jakarta|BMT JAVT WIB JST WIB WIB|-77.c -7k -7u -90 -80 -70|01232425|-1Q0Tk luM0 mPzO 8vWu 6kpu 4PXu xhcu", + "Asia/Jayapura|LMT WIT ACST|-9m.M -90 -9u|0121|-1uu9m.M sMMm.M L4nu", + "Asia/Jerusalem|JMT IST IDT IDDT|-2k.E -20 -30 -40|01212121212132121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-26Bek.E SyMk.E 5Rb0 10r0 1px0 10N0 1pz0 16p0 1jB0 16p0 1jx0 3LB0 Em0 or0 1cn0 1dB0 16n0 10O0 1ja0 1tC0 14o0 1cM0 1a00 11A0 1Na0 An0 1MP0 AJ0 1Kp0 LC0 1oo0 Wl0 EQN0 Db0 1fB0 Rb0 npB0 11z0 1C10 IL0 1s10 10n0 1o10 WL0 1zd0 On0 1ld0 11z0 1o10 14n0 1o10 14n0 1nd0 12n0 1nd0 Xz0 1q10 12n0 1hB0 1dX0 1ep0 1aL0 1eN0 17X0 1nf0 11z0 1tB0 19W0 1e10 17b0 1ep0 1gL0 18N0 1fz0 1eN0 17b0 1gq0 1gn0 19d0 1dz0 1c10 17X0 1hB0 1gn0 19d0 1dz0 1c10 17X0 1kp0 1dz0 1c10 1aL0 1eN0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0 10N0 1rz0 W10 1rz0 W10 1rz0 W10 1rz0 10N0 1oL0 10N0 1oL0", + "Asia/Kabul|AFT AFT|-40 -4u|01|-10Qs0", + "Asia/Kamchatka|LMT PETT PETT PETST PETST|-ay.A -b0 -c0 -d0 -c0|01232323232323232323232412323232323232323232323232323232323232412|-1SLKy.A ivXy.A 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qN0 WM0", + "Asia/Karachi|LMT IST IST KART PKT PKST|-4s.c -5u -6u -50 -50 -60|012134545454|-2xoss.c 1qOKW.c 7zX0 eup0 LqMu 1fy01 1cL0 dK0X 11b0 1610 1jX0", + "Asia/Kashgar|LMT XJT|-5O.k -60|01|-1GgtO.k", + "Asia/Kathmandu|LMT IST NPT|-5F.g -5u -5J|012|-21JhF.g 2EGMb.g", + "Asia/Khandyga|LMT YAKT YAKT YAKST YAKST VLAT VLAST VLAT YAKT|-92.d -80 -90 -a0 -90 -a0 -b0 -b0 -a0|01232323232323232323232412323232323232323232323232565656565656565782|-21Q92.d pAp2.d 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 qK0 yN0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0", + "Asia/Krasnoyarsk|LMT KRAT KRAT KRAST KRAST KRAT|-6b.q -60 -70 -80 -70 -80|012323232323232323232324123232323232323232323232323232323232323252|-21Hib.q prAb.q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Kuala_Lumpur|SMT MALT MALST MALT MALT JST MYT|-6T.p -70 -7k -7k -7u -90 -80|01234546|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu 1so1u", + "Asia/Kuching|LMT BORT BORT BORTST JST MYT|-7l.k -7u -80 -8k -90 -80|01232323232323232425|-1KITl.k gDbP.k 6ynu AnE 1O0k AnE 1NAk AnE 1NAk AnE 1NAk AnE 1O0k AnE 1NAk AnE pAk 8Fz0 1so10", + "Asia/Kuwait|LMT AST|-3b.U -30|01|-MG3b.U", + "Asia/Macao|LMT MOT MOST CST|-7y.k -80 -90 -80|0121212121212121212121212121212121212121213|-2le7y.k 1XO34.k 1wn0 Rd0 1wn0 R9u 1wqu U10 1tz0 TVu 1tz0 17gu 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cOu 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cJu 1cL0 1cN0 1fz0 1cN0 1cL0 KEp0", + "Asia/Magadan|LMT MAGT MAGT MAGST MAGST MAGT|-a3.c -a0 -b0 -c0 -b0 -c0|012323232323232323232324123232323232323232323232323232323232323251|-1Pca3.c eUo3.c 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Makassar|LMT MMT WITA JST|-7V.A -7V.A -80 -90|01232|-21JjV.A vfc0 myLV.A 8ML0", + "Asia/Manila|PHT PHST JST|-80 -90 -90|010201010|-1kJI0 AL0 cK10 65X0 mXB0 vX0 VK10 1db0", + "Asia/Muscat|LMT GST|-3S.o -40|01|-21JfS.o", + "Asia/Nicosia|LMT EET EEST|-2d.s -20 -30|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1Vc2d.s 2a3cd.s 1cL0 1qp0 Xz0 19B0 19X0 1fB0 1db0 1cp0 1cL0 1fB0 19X0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1o30 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Asia/Novokuznetsk|LMT KRAT KRAT KRAST KRAST NOVST NOVT NOVT|-5M.M -60 -70 -80 -70 -70 -60 -70|012323232323232323232324123232323232323232323232323232323232325672|-1PctM.M eULM.M 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qN0 WM0 8Hz0", + "Asia/Novosibirsk|LMT NOVT NOVT NOVST NOVST|-5v.E -60 -70 -80 -70|0123232323232323232323241232341414141414141414141414141414141414121|-21Qnv.E pAFv.E 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 ml0 Os0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Omsk|LMT OMST OMST OMSST OMSST OMST|-4R.u -50 -60 -70 -60 -70|012323232323232323232324123232323232323232323232323232323232323252|-224sR.u pMLR.u 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Oral|LMT URAT URAT URAST URAT URAST ORAT ORAST ORAT|-3p.o -40 -50 -60 -60 -50 -40 -50 -50|012343232323232323251516767676767676767676767676768|-1Pc3p.o eUnp.o 23CL0 1db0 1cM0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 2UK0 Fz0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 RW0", + "Asia/Pontianak|LMT PMT WIB JST WIB WITA WIB|-7h.k -7h.k -7u -90 -80 -80 -70|012324256|-2ua7h.k XE00 munL.k 8Rau 6kpu 4PXu xhcu Wqnu", + "Asia/Pyongyang|LMT KST JCST JST KST|-8n -8u -90 -90 -90|01234|-2um8n 97XR 12FXu jdA0", + "Asia/Qatar|LMT GST AST|-3q.8 -40 -30|012|-21Jfq.8 27BXq.8", + "Asia/Qyzylorda|LMT KIZT KIZT KIZST KIZT QYZT QYZT QYZST|-4l.Q -40 -50 -60 -60 -50 -60 -70|012343232323232323232325676767676767676767676767676|-1Pc4l.Q eUol.Q 23CL0 1db0 1cM0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 2UK0 dC0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0", + "Asia/Rangoon|RMT BURT JST MMT|-6o.E -6u -90 -6u|0123|-21Jio.E SmnS.E 7j9u", + "Asia/Riyadh|LMT AST|-36.Q -30|01|-TvD6.Q", + "Asia/Sakhalin|LMT JCST JST SAKT SAKST SAKST SAKT|-9u.M -90 -90 -b0 -c0 -b0 -a0|0123434343434343434343435634343434343565656565656565656565656565636|-2AGVu.M 1iaMu.M je00 1qFa0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o10 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Samarkand|LMT SAMT SAMT SAMST TAST UZST UZT|-4r.R -40 -50 -60 -60 -60 -50|01234323232323232323232356|-1Pc4r.R eUor.R 23CL0 1db0 1cM0 1dc0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 11x0 bf0", + "Asia/Seoul|LMT KST JCST JST KST KDT KDT|-8r.Q -8u -90 -90 -90 -9u -a0|01234151515151515146464|-2um8r.Q 97XV.Q 12FXu jjA0 kKo0 2I0u OL0 1FB0 Rb0 1qN0 TX0 1tB0 TX0 1tB0 TX0 1tB0 TX0 2ap0 12FBu 11A0 1o00 11A0", + "Asia/Singapore|SMT MALT MALST MALT MALT JST SGT SGT|-6T.p -70 -7k -7k -7u -90 -7u -80|012345467|-2Bg6T.p 17anT.p 7hXE dM00 17bO 8Fyu Mspu DTA0", + "Asia/Srednekolymsk|LMT MAGT MAGT MAGST MAGST MAGT SRET|-ae.Q -a0 -b0 -c0 -b0 -c0 -b0|012323232323232323232324123232323232323232323232323232323232323256|-1Pcae.Q eUoe.Q 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Taipei|JWST JST CST CDT|-80 -90 -80 -90|01232323232323232323232323232323232323232|-1iw80 joM0 1yo0 Tz0 1ip0 1jX0 1cN0 11b0 1oN0 11b0 1oN0 11b0 1oN0 11b0 10N0 1BX0 10p0 1pz0 10p0 1pz0 10p0 1db0 1dd0 1db0 1cN0 1db0 1cN0 1db0 1cN0 1db0 1BB0 ML0 1Bd0 ML0 uq10 1db0 1cN0 1db0 97B0 AL0", + "Asia/Tashkent|LMT TAST TAST TASST TASST UZST UZT|-4B.b -50 -60 -70 -60 -60 -50|01232323232323232323232456|-1Pc4B.b eUnB.b 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 11y0 bf0", + "Asia/Tbilisi|TBMT TBIT TBIT TBIST TBIST GEST GET GET GEST|-2X.b -30 -40 -50 -40 -40 -30 -40 -50|0123232323232323232323245656565787878787878787878567|-1Pc2X.b 1jUnX.b WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 3y0 19f0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cM0 1cL0 1fB0 3Nz0 11B0 1nX0 11B0 1qL0 WN0 1qL0 WN0 1qL0 11B0 1nX0 11B0 1nX0 11B0 An0 Os0 WM0", + "Asia/Tehran|LMT TMT IRST IRST IRDT IRDT|-3p.I -3p.I -3u -40 -50 -4u|01234325252525252525252525252525252525252525252525252525252525252525252525252525252525252525252525252|-2btDp.I 1d3c0 1huLT.I TXu 1pz0 sN0 vAu 1cL0 1dB0 1en0 pNB0 UL0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 64p0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0 1cN0 1dz0 1cp0 1dz0 1cp0 1dz0 1cp0 1dz0", + "Asia/Thimbu|LMT IST BTT|-5W.A -5u -60|012|-Su5W.A 1BGMs.A", + "Asia/Tokyo|JCST JST JDT|-90 -90 -a0|0121212121|-1iw90 pKq0 QL0 1lB0 13X0 1zB0 NX0 1zB0 NX0", + "Asia/Ulaanbaatar|LMT ULAT ULAT ULAST|-77.w -70 -80 -90|01232323232323232323232323232323232323232323232|-2APH7.w 2Uko7.w cKn0 1db0 1dd0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 6hD0 11z0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0", + "Asia/Ust-Nera|LMT YAKT YAKT MAGST MAGT MAGST MAGT MAGT VLAT VLAT|-9w.S -80 -90 -c0 -b0 -b0 -a0 -c0 -b0 -a0|0123434343434343434343456434343434343434343434343434343434343434789|-21Q9w.S pApw.S 23CL0 1d90 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 17V0 7zD0", + "Asia/Vladivostok|LMT VLAT VLAT VLAST VLAST VLAT|-8L.v -90 -a0 -b0 -a0 -b0|012323232323232323232324123232323232323232323232323232323232323252|-1SJIL.v itXL.v 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Yakutsk|LMT YAKT YAKT YAKST YAKST YAKT|-8C.W -80 -90 -a0 -90 -a0|012323232323232323232324123232323232323232323232323232323232323252|-21Q8C.W pAoC.W 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Yekaterinburg|LMT PMT SVET SVET SVEST SVEST YEKT YEKST YEKT|-42.x -3J.5 -40 -50 -60 -50 -50 -60 -60|0123434343434343434343435267676767676767676767676767676767676767686|-2ag42.x 7mQh.s qBvJ.5 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Asia/Yerevan|LMT YERT YERT YERST YERST AMST AMT AMT AMST|-2W -30 -40 -50 -40 -40 -30 -40 -50|0123232323232323232323245656565657878787878787878787878787878787|-1Pc2W 1jUnW WCL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1am0 2r0 1cJ0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fb0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0", + "Atlantic/Azores|HMT AZOT AZOST AZOMT AZOT AZOST WET|1S.w 20 10 0 10 0 0|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545456545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldW5.s aPX5.s Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cL0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Atlantic/Bermuda|LMT AST ADT|4j.i 40 30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1BnRE.G 1LTbE.G 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Atlantic/Canary|LMT CANT WET WEST|11.A 10 0 -10|01232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-1UtaW.o XPAW.o 1lAK0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Atlantic/Cape_Verde|LMT CVT CVST CVT|1y.4 20 10 10|01213|-2xomp.U 1qOMp.U 7zX0 1djf0", + "Atlantic/Faeroe|LMT WET WEST|r.4 0 -10|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2uSnw.U 2Wgow.U 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Atlantic/Madeira|FMT MADT MADST MADMT WET WEST|17.A 10 0 -10 0 -10|01212121212121212121212121212121212121212121232123212321232121212121212121212121212121212121212121454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2ldWQ.o aPWQ.o Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 qIl0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Atlantic/Reykjavik|RMT IST ISST GMT|1r.M 10 0 0|01212121212121212121212121212121212121212121212121212121212121213|-2uWmw.c mfaw.c 1Bd0 ML0 1LB0 NLX0 1pe0 zd0 1EL0 LA0 1C00 Oo0 1wo0 Rc0 1wo0 Rc0 1wo0 Rc0 1zc0 Oo0 1zc0 14o0 1lc0 14o0 1lc0 14o0 1o00 11A0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1lc0 14o0 1o00 14o0", + "Atlantic/South_Georgia|GST|20|0|", + "Atlantic/Stanley|SMT FKT FKST FKT FKST|3P.o 40 30 30 20|0121212121212134343212121212121212121212121212121212121212121212121212|-2kJw8.A 12bA8.A 19X0 1fB0 19X0 1ip0 19X0 1fB0 19X0 1fB0 19X0 1fB0 Cn0 1Cc10 WL0 1qL0 U10 1tz0 U10 1qM0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 U10 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1tz0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qL0 WN0 1qN0 U10 1wn0 Rd0 1wn0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1tz0 U10 1wn0 U10 1tz0 U10 1tz0 U10", + "Australia/ACT|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", + "Australia/Adelaide|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 WM0 1qM0 Rc0 1zc0 U00 1tA0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", + "Australia/Brisbane|AEST AEDT|-a0 -b0|01010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0", + "Australia/Broken_Hill|ACST ACDT|-9u -au|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 14o0 1o00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1tA0 WM0 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", + "Australia/Currie|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", + "Australia/Darwin|ACST ACDT|-9u -au|010101010|-293lt xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0", + "Australia/Eucla|ACWST ACWDT|-8J -9J|0101010101010101010|-293kI xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0", + "Australia/Hobart|AEST AEDT|-a0 -b0|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-29E80 19X0 10jd0 yL0 1cN0 1cL0 1fB0 19X0 VfB0 1cM0 1o00 Rc0 1wo0 Rc0 1wo0 U00 1wo0 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 11A0 1qM0 WM0 1qM0 Oo0 1zc0 Oo0 1zc0 Oo0 1wo0 WM0 1tA0 WM0 1tA0 U00 1tA0 U00 1tA0 11A0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 11A0 1o00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", + "Australia/LHI|AEST LHST LHDT LHDT|-a0 -au -bu -b0|0121212121313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313131313|raC0 1zdu Rb0 1zd0 On0 1zd0 On0 1zd0 On0 1zd0 TXu 1qMu WLu 1tAu WLu 1tAu TXu 1tAu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu 11zu 1o0u 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 11Au 1nXu 1qMu 11zu 1o0u 11zu 1o0u 11zu 1qMu WLu 1qMu 11zu 1o0u WLu 1qMu 14nu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1fzu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1cMu 1cLu 1fAu 1cLu 1cMu 1cLu 1cMu", + "Australia/Lindeman|AEST AEDT|-a0 -b0|010101010101010101010|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 H1A0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0", + "Australia/Melbourne|AEST AEDT|-a0 -b0|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101|-293lX xcX 10jd0 yL0 1cN0 1cL0 1fB0 19X0 17c10 LA0 1C00 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 U00 1qM0 WM0 1qM0 11A0 1tA0 U00 1tA0 U00 1tA0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 11A0 1o00 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 14o0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0", + "Australia/Perth|AWST AWDT|-80 -90|0101010101010101010|-293jX xcX 10jd0 yL0 1cN0 1cL0 1gSp0 Oo0 l5A0 Oo0 iJA0 G00 zU00 IM0 1qM0 11A0 1o00 11A0", + "CET|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "CST6CDT|CST CDT CWT CPT|60 50 50 50|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261s0 1nX0 11B0 1nX0 SgN0 8x30 iw0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Chile/EasterIsland|EMT EASST EAST EAST EASST|7h.s 60 70 60 50|012121212121212121212121212121213434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-1uSgG.w nHUG.w op0 9UK0 RXB0 WL0 1zd0 On0 1ip0 11z0 1o10 11z0 1qN0 WL0 1ld0 14n0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 WL0 1qN0 1cL0 1cN0 11z0 1ld0 14n0 1qN0 11z0 1cN0 19X0 1qN0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1ip0 1fz0 1fB0 11z0 1qN0 WL0 1qN0 WL0 1qN0 WL0 1qN0 11z0 1o10 11z0 1o10 11z0 1qN0 WL0 1qN0 17b0 1ip0 11z0 1o10 19X0 1fB0 1nX0 G10 1EL0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1wn0 Rd0 1zb0 Op0 1zb0 Rd0 1wn0 Rd0", + "EET|EET EEST|-20 -30|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "EST|EST|50|0|", + "EST5EDT|EST EDT EWT EPT|50 40 40 40|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261t0 1nX0 11B0 1nX0 SgN0 8x40 iv0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Eire|DMT IST GMT BST IST|p.l -y.D 0 -10 -10|01232323232324242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242424242|-2ax9y.D Rc0 1fzy.D 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 g5X0 14p0 1wn0 17d0 1io0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Etc/GMT+0|GMT|0|0|", + "Etc/GMT+1|GMT+1|10|0|", + "Etc/GMT+10|GMT+10|a0|0|", + "Etc/GMT+11|GMT+11|b0|0|", + "Etc/GMT+12|GMT+12|c0|0|", + "Etc/GMT+2|GMT+2|20|0|", + "Etc/GMT+3|GMT+3|30|0|", + "Etc/GMT+4|GMT+4|40|0|", + "Etc/GMT+5|GMT+5|50|0|", + "Etc/GMT+6|GMT+6|60|0|", + "Etc/GMT+7|GMT+7|70|0|", + "Etc/GMT+8|GMT+8|80|0|", + "Etc/GMT+9|GMT+9|90|0|", + "Etc/GMT-1|GMT-1|-10|0|", + "Etc/GMT-10|GMT-10|-a0|0|", + "Etc/GMT-11|GMT-11|-b0|0|", + "Etc/GMT-12|GMT-12|-c0|0|", + "Etc/GMT-13|GMT-13|-d0|0|", + "Etc/GMT-14|GMT-14|-e0|0|", + "Etc/GMT-2|GMT-2|-20|0|", + "Etc/GMT-3|GMT-3|-30|0|", + "Etc/GMT-4|GMT-4|-40|0|", + "Etc/GMT-5|GMT-5|-50|0|", + "Etc/GMT-6|GMT-6|-60|0|", + "Etc/GMT-7|GMT-7|-70|0|", + "Etc/GMT-8|GMT-8|-80|0|", + "Etc/GMT-9|GMT-9|-90|0|", + "Etc/UCT|UCT|0|0|", + "Etc/UTC|UTC|0|0|", + "Europe/Amsterdam|AMT NST NEST NET CEST CET|-j.w -1j.w -1k -k -20 -10|010101010101010101010101010101010101010101012323234545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545|-2aFcj.w 11b0 1iP0 11A0 1io0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1co0 1io0 1yo0 Pc0 1a00 1fA0 1Bc0 Mo0 1tc0 Uo0 1tA0 U00 1uo0 W00 1s00 VA0 1so0 Vc0 1sM0 UM0 1wo0 Rc0 1u00 Wo0 1rA0 W00 1s00 VA0 1sM0 UM0 1w00 fV0 BCX.w 1tA0 U00 1u00 Wo0 1sm0 601k WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Andorra|WET CET CEST|0 -10 -20|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-UBA0 1xIN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Athens|AMT EET EEST CEST CET|-1y.Q -20 -30 -20 -10|012123434121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2a61x.Q CNbx.Q mn0 kU10 9b0 3Es0 Xa0 1fb0 1dd0 k3X0 Nz0 SCp0 1vc0 SO0 1cM0 1a00 1ao0 1fc0 1a10 1fG0 1cg0 1dX0 1bX0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Belfast|GMT BST BDST|0 -10 -20|0101010101010101010101010101010101010101010101010121212121210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1a00 1qM0 WM0 1qM0 11A0 1o00 WM0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1tA0 IM0 90o0 U00 1tA0 U00 1tA0 U00 1tA0 U00 1tA0 WM0 1qM0 WM0 1qM0 WM0 1tA0 U00 1tA0 U00 1tA0 11z0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1o00 14o0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Belgrade|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19RC0 3IP0 WM0 1fA0 1cM0 1cM0 1rc0 Qo0 1vmo0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Berlin|CET CEST CEMT|-10 -20 -30|01010101010101210101210101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 kL0 Nc0 m10 WM0 1ao0 1cp0 dX0 jz0 Dd0 1io0 17c0 1fA0 1a00 1ehA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Bratislava|CET CEST|-10 -20|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 16M0 1lc0 1tA0 17A0 11c0 1io0 17c0 1io0 17c0 1fc0 1ao0 1bNc0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Brussels|WET CET CEST WEST|0 -10 -20 -10|0121212103030303030303030303030303030303030303030303212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ehc0 3zX0 11c0 1iO0 11A0 1o00 11A0 my0 Ic0 1qM0 Rc0 1EM0 UM0 1u00 10o0 1io0 1io0 17c0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a30 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 y00 5Wn0 WM0 1fA0 1cM0 16M0 1iM0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Bucharest|BMT EET EEST|-1I.o -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1xApI.o 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Axc0 On0 1fA0 1a10 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Budapest|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1ip0 17b0 1op0 1tb0 Q2m0 3Ne0 WM0 1fA0 1cM0 1cM0 1oJ0 1dc0 1030 1fA0 1cM0 1cM0 1cM0 1cM0 1fA0 1a00 1iM0 1fA0 8Ha0 Rb0 1wN0 Rb0 1BB0 Lz0 1C20 LB0 SNX0 1a10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Busingen|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-19Lc0 11A0 1o00 11A0 1xG10 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Chisinau|CMT BMT EET EEST CEST CET MSK MSD|-1T -1I.o -20 -30 -20 -10 -30 -40|0123232323232323232345454676767676767676767623232323232323232323232323232323232323232323232323232323232323232323232323232323232323232323232|-26jdT wGMa.A 20LI.o RA0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 27A0 2en0 39g0 WM0 1fA0 1cM0 V90 1t7z0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1ty0 2bD0 1cM0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Copenhagen|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 Tz0 VuO0 60q0 WM0 1fA0 1cM0 1cM0 1cM0 S00 1HA0 Nc0 1C00 Dc0 1Nc0 Ao0 1h5A0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Gibraltar|GMT BST BDST CET CEST|0 -10 -20 -10 -20|010101010101010101010101010101010101010101010101012121212121010121010101010101010101034343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-2axa0 Rc0 1fA0 14M0 1fc0 1g00 1co0 1dc0 1co0 1oo0 1400 1dc0 19A0 1io0 1io0 WM0 1o00 14o0 1o00 17c0 1io0 17c0 1fA0 1a00 1lc0 17c0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1cM0 1io0 17c0 1fA0 1a00 1io0 17c0 1io0 17c0 1fA0 1a00 1io0 1qM0 Dc0 2Rz0 Dc0 1zc0 Oo0 1zc0 Rc0 1wo0 17c0 1iM0 FA0 xB0 1fA0 1a00 14o0 bb0 LA0 xB0 Rc0 1wo0 11A0 1o00 17c0 1fA0 1a00 1fA0 1cM0 1fA0 1a00 17c0 1fA0 1a00 1io0 17c0 1lc0 17c0 1fA0 10Jz0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Helsinki|HMT EET EEST|-1D.N -20 -30|0121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-1WuND.N OULD.N 1dA0 1xGq0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Kaliningrad|CET CEST CET CEST MSK MSD EEST EET FET|-10 -20 -20 -30 -30 -40 -30 -20 -30|0101010101010232454545454545454545454676767676767676767676767676767676767676787|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 Am0 Lb0 1en0 op0 1pNz0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1cJ0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Europe/Kiev|KMT EET MSK CEST CET MSD EEST|-22.4 -20 -30 -20 -10 -40 -30|0123434252525252525252525256161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc22.4 eUo2.4 rnz0 2Hg0 WM0 1fA0 da0 1v4m0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 Db0 3220 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Lisbon|LMT WET WEST WEMT CET CEST|A.J 0 -10 -20 -10 -20|012121212121212121212121212121212121212121212321232123212321212121212121212121212121212121212121214121212121212121212121212121212124545454212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ldXn.f aPWn.f Sp0 LX0 1vc0 Tc0 1uM0 SM0 1vc0 Tc0 1vc0 SM0 1vc0 6600 1co0 3E00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 3I00 17c0 1cM0 1cM0 3Fc0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 1tA0 1cM0 1dc0 1400 gL0 IM0 s10 U00 dX0 Rc0 pd0 Rc0 gL0 Oo0 pd0 Rc0 gL0 Oo0 pd0 14o0 1cM0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 3Co0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 pvy0 1cM0 1cM0 1fA0 1cM0 1cM0 1cN0 1cL0 1cN0 1cM0 1cM0 1cM0 1cM0 1cN0 1cL0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Luxembourg|LMT CET CEST WET WEST WEST WET|-o.A -10 -20 0 -10 -20 -10|0121212134343434343434343434343434343434343434343434565651212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2DG0o.A t6mo.A TB0 1nX0 Up0 1o20 11A0 rW0 CM0 1qP0 R90 1EO0 UK0 1u20 10m0 1ip0 1in0 17e0 19W0 1fB0 1db0 1cp0 1in0 17d0 1fz0 1a10 1in0 1a10 1in0 17f0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Dc0 vA0 60L0 WM0 1fA0 1cM0 17c0 1io0 16M0 1C00 Uo0 1eeo0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Madrid|WET WEST WEMT CET CEST|0 -10 -20 -10 -20|01010101010101010101010121212121234343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343|-28dd0 11A0 1go0 19A0 1co0 1dA0 b1A0 18o0 3I00 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 iyo0 Rc0 18o0 1hc0 1io0 1a00 14o0 5aL0 MM0 1vc0 17A0 1i00 1bc0 1eo0 17d0 1in0 17A0 6hA0 10N0 XIL0 1a10 1in0 17d0 19X0 1cN0 1fz0 1a10 1fX0 1cp0 1cO0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Malta|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2as10 M00 1cM0 1cM0 14o0 1o00 WM0 1qM0 17c0 1cM0 M3A0 5M20 WM0 1fA0 1cM0 1cM0 1cM0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 Lz0 1C10 Lz0 1EN0 Lz0 1C10 Lz0 1zd0 Oo0 1C00 On0 1cp0 1cM0 1lA0 Xc0 1qq0 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1o10 11z0 1iN0 19z0 1fB0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Minsk|MMT EET MSK CEST CET MSD EEST FET|-1O -20 -30 -20 -10 -40 -30 -30|012343432525252525252525252616161616161616161616161616161616161616172|-1Pc1O eUnO qNX0 3gQ0 WM0 1fA0 1cM0 Al0 1tsn0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 3Fc0 1cN0 1cK0 1cM0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hy0", + "Europe/Monaco|PMT WET WEST WEMT CET CEST|-9.l 0 -10 -20 -10 -20|01212121212121212121212121212121212121212121212121232323232345454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-2nco9.l cNb9.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 2RV0 11z0 11B0 1ze0 WM0 1fA0 1cM0 1fa0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Moscow|MMT MMT MST MDST MSD MSK MSM EET EEST MSK|-2u.h -2v.j -3v.j -4v.j -40 -30 -50 -20 -30 -40|012132345464575454545454545454545458754545454545454545454545454545454545454595|-2ag2u.h 2pyW.W 1bA0 11X0 GN0 1Hb0 c20 imv.j 3DA0 dz0 15A0 c10 2q10 iM10 23CL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 IM0 rU0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Europe/Paris|PMT WET WEST CEST CET WEMT|-9.l 0 -10 -20 -10 -20|0121212121212121212121212121212121212121212121212123434352543434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434343434|-2nco8.l cNb8.l HA0 19A0 1iM0 11c0 1oo0 Wo0 1rc0 QM0 1EM0 UM0 1u00 10o0 1io0 1wo0 Rc0 1a00 1fA0 1cM0 1cM0 1io0 17c0 1fA0 1a00 1io0 1a00 1io0 17c0 1fA0 1a00 1io0 17c0 1cM0 1cM0 1a00 1io0 1cM0 1cM0 1a00 1fA0 1io0 17c0 1cM0 1cM0 1a00 1fA0 1io0 1qM0 Df0 Ik0 5M30 WM0 1fA0 1cM0 Vx0 hB0 1aq0 16M0 1ekn0 1cL0 1fC0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Riga|RMT LST EET MSK CEST CET MSD EEST|-1A.y -2A.y -20 -30 -20 -10 -40 -30|010102345454536363636363636363727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272727272|-25TzA.y 11A0 1iM0 ko0 gWm0 yDXA.y 2bX0 3fE0 WM0 1fA0 1cM0 1cM0 4m0 1sLy0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1o00 11A0 1o00 11A0 1qM0 3oo0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Rome|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2as10 M00 1cM0 1cM0 14o0 1o00 WM0 1qM0 17c0 1cM0 M3A0 5M20 WM0 1fA0 1cM0 16K0 1iO0 16m0 1de0 1lc0 14m0 1lc0 WO0 1qM0 GTW0 On0 1C10 Lz0 1C10 Lz0 1EN0 Lz0 1C10 Lz0 1zd0 Oo0 1C00 On0 1C10 Lz0 1zd0 On0 1C10 LA0 1C00 LA0 1zc0 Oo0 1C00 Oo0 1zc0 Oo0 1fC0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Samara|LMT SAMT SAMT KUYT KUYST MSD MSK EEST KUYT SAMST SAMST|-3k.k -30 -40 -40 -50 -40 -30 -30 -30 -50 -40|012343434343434343435656782929292929292929292929292929292929292a12|-22WNk.k qHak.k bcn0 1Qqo0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cN0 8o0 14j0 1cL0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qN0 WM0", + "Europe/Simferopol|SMT EET MSK CEST CET MSD EEST MSK|-2g -20 -30 -20 -10 -40 -30 -40|012343432525252525252525252161616525252616161616161616161616161616161616172|-1Pc2g eUog rEn0 2qs0 WM0 1fA0 1cM0 3V0 1u0L0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 4eL0 1cL0 1cN0 1cL0 1cN0 dX0 WL0 1cN0 1cL0 1fB0 1o30 11B0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11z0 1nW0", + "Europe/Sofia|EET CET CEST EEST|-20 -10 -20 -30|01212103030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030303030|-168L0 WM0 1fA0 1cM0 1cM0 1cN0 1mKH0 1dd0 1fb0 1ap0 1fb0 1a20 1fy0 1a30 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cK0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 1nX0 11E0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Stockholm|CET CEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2azC0 TB0 2yDe0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Tallinn|TMT CET CEST EET MSK MSD EEST|-1D -10 -20 -20 -30 -40 -30|012103421212454545454545454546363636363636363636363636363636363636363636363636363636363636363636363636363636363636363636363|-26oND teD 11A0 1Ta0 4rXl KSLD 2FX0 2Jg0 WM0 1fA0 1cM0 18J0 1sTX0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o10 11A0 1qM0 5QM0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Tirane|LMT CET CEST|-1j.k -10 -20|01212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2glBj.k 14pcj.k 5LC0 WM0 4M0 1fCK0 10n0 1op0 11z0 1pd0 11z0 1qN0 WL0 1qp0 Xb0 1qp0 Xb0 1qp0 11z0 1lB0 11z0 1qN0 11z0 1iN0 16n0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Uzhgorod|CET CEST MSK MSD EET EEST|-10 -20 -30 -40 -20 -30|010101023232323232323232320454545454545454545454545454545454545454545454545454545454545454545454545454545454545454545454|-1cqL0 6i00 WM0 1fA0 1cM0 1ml0 1Cp0 1r3W0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1Q00 1Nf0 2pw0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Vienna|CET CEST|-10 -20|0101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 3KM0 14o0 LA00 6i00 WM0 1fA0 1cM0 1cM0 1cM0 400 2qM0 1a00 1cM0 1cM0 1io0 17c0 1gHa0 19X0 1cP0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Vilnius|WMT KMT CET EET MSK CEST MSD EEST|-1o -1z.A -10 -20 -30 -20 -40 -30|012324525254646464646464646464647373737373737352537373737373737373737373737373737373737373737373737373737373737373737373|-293do 6ILM.o 1Ooz.A zz0 Mfd0 29W0 3is0 WM0 1fA0 1cM0 LV0 1tgL0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11B0 1o00 11A0 1qM0 8io0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Volgograd|LMT TSAT STAT STAT VOLT VOLST VOLST VOLT MSK MSK|-2V.E -30 -30 -40 -40 -50 -40 -30 -40 -30|012345454545454545454676748989898989898989898989898989898989898989|-21IqV.E cLXV.E cEM0 1gqn0 Lco0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1fA0 1cM0 2pz0 1cJ0 1cQ0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 8Hz0", + "Europe/Warsaw|WMT CET CEST EET EEST|-1o -10 -20 -20 -30|012121234312121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121|-2ctdo 1LXo 11d0 1iO0 11A0 1o00 11A0 1on0 11A0 6zy0 HWP0 5IM0 WM0 1fA0 1cM0 1dz0 1mL0 1en0 15B0 1aq0 1nA0 11A0 1io0 17c0 1fA0 1a00 iDX0 LA0 1cM0 1cM0 1C00 Oo0 1cM0 1cM0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1C00 LA0 uso0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cN0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "Europe/Zaporozhye|CUT EET MSK CEST CET MSD EEST|-2k -20 -30 -20 -10 -40 -30|01234342525252525252525252526161616161616161616161616161616161616161616161616161616161616161616161616161616161616161616161|-1Pc2k eUok rdb0 2RE0 WM0 1fA0 8m0 1v9a0 1db0 1cN0 1db0 1cN0 1db0 1dd0 1cO0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cK0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cQ0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "HST|HST|a0|0|", + "Indian/Chagos|LMT IOT IOT|-4N.E -50 -60|012|-2xosN.E 3AGLN.E", + "Indian/Christmas|CXT|-70|0|", + "Indian/Cocos|CCT|-6u|0|", + "Indian/Kerguelen|zzz TFT|0 -50|01|-MG00", + "Indian/Mahe|LMT SCT|-3F.M -40|01|-2yO3F.M", + "Indian/Maldives|MMT MVT|-4S -50|01|-olgS", + "Indian/Mauritius|LMT MUT MUST|-3O -40 -50|012121|-2xorO 34unO 14L0 12kr0 11z0", + "Indian/Reunion|LMT RET|-3F.Q -40|01|-2mDDF.Q", + "Kwajalein|MHT KWAT MHT|-b0 c0 -c0|012|-AX0 W9X0", + "MET|MET MEST|-10 -20|01010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-2aFe0 11d0 1iO0 11A0 1o00 11A0 Qrc0 6i00 WM0 1fA0 1cM0 1cM0 1cM0 16M0 1gMM0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00", + "MST|MST|70|0|", + "MST7MDT|MST MDT MWT MPT|70 60 60 60|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261r0 1nX0 11B0 1nX0 SgN0 8x20 ix0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "NZ-CHAT|CHAST CHAST CHADT|-cf -cJ -dJ|012121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212121212|-WqAf 1adef IM0 1C00 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Oo0 1zc0 Rc0 1zc0 Oo0 1qM0 14o0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1lc0 14o0 1lc0 14o0 1lc0 17c0 1io0 17c0 1io0 17c0 1io0 17c0 1io0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00", + "PST8PDT|PST PDT PWT PPT|80 70 70 70|010102301010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|-261q0 1nX0 11B0 1nX0 SgN0 8x10 iy0 QwN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1cN0 1cL0 1cN0 1cL0 s10 1Vz0 LB0 1BX0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1fz0 1a10 1fz0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 14p0 1lb0 14p0 1lb0 14p0 1nX0 11B0 1nX0 11B0 1nX0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0", + "Pacific/Apia|LMT WSST SST SDT WSDT WSST|bq.U bu b0 a0 -e0 -d0|01232345454545454545454545454545454545454545454545454545454|-2nDMx.4 1yW03.4 2rRbu 1ff0 1a00 CI0 AQ0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1io0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1a00 1fA0 1cM0 1fA0 1a00 1fA0 1a00", + "Pacific/Bougainville|PGT JST BST|-a0 -90 -b0|0102|-16Wy0 7CN0 2MQp0", + "Pacific/Chuuk|CHUT|-a0|0|", + "Pacific/Efate|LMT VUT VUST|-bd.g -b0 -c0|0121212121212121212121|-2l9nd.g 2Szcd.g 1cL0 1oN0 10L0 1fB0 19X0 1fB0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1cN0 1cL0 1fB0 Lz0 1Nd0 An0", + "Pacific/Enderbury|PHOT PHOT PHOT|c0 b0 -d0|012|nIc0 B8n0", + "Pacific/Fakaofo|TKT TKT|b0 -d0|01|1Gfn0", + "Pacific/Fiji|LMT FJT FJST|-bT.I -c0 -d0|012121212121212121212121212121212121212121212121212121212121212|-2bUzT.I 3m8NT.I LA0 1EM0 IM0 nJc0 LA0 1o00 Rc0 1wo0 Ao0 1Nc0 Ao0 1Q00 xz0 1SN0 uM0 1SM0 xA0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 xA0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 xA0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1VA0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0 uM0 1SM0", + "Pacific/Funafuti|TVT|-c0|0|", + "Pacific/Galapagos|LMT ECT GALT|5W.o 50 60|012|-1yVS1.A 2dTz1.A", + "Pacific/Gambier|LMT GAMT|8X.M 90|01|-2jof0.c", + "Pacific/Guadalcanal|LMT SBT|-aD.M -b0|01|-2joyD.M", + "Pacific/Guam|GST ChST|-a0 -a0|01|1fpq0", + "Pacific/Honolulu|HST HDT HST|au 9u a0|010102|-1thLu 8x0 lef0 8Pz0 46p0", + "Pacific/Kiritimati|LINT LINT LINT|aE a0 -e0|012|nIaE B8nk", + "Pacific/Kosrae|KOST KOST|-b0 -c0|010|-AX0 1bdz0", + "Pacific/Majuro|MHT MHT|-b0 -c0|01|-AX0", + "Pacific/Marquesas|LMT MART|9i 9u|01|-2joeG", + "Pacific/Midway|NST NDT BST SST|b0 a0 b0 b0|01023|-x3N0 An0 pJd0 EyM0", + "Pacific/Nauru|LMT NRT JST NRT|-b7.E -bu -90 -c0|01213|-1Xdn7.E PvzB.E 5RCu 1ouJu", + "Pacific/Niue|NUT NUT NUT|bk bu b0|012|-KfME 17y0a", + "Pacific/Norfolk|NMT NFT|-bc -bu|01|-Kgbc", + "Pacific/Noumea|LMT NCT NCST|-b5.M -b0 -c0|01212121|-2l9n5.M 2EqM5.M xX0 1PB0 yn0 HeP0 Ao0", + "Pacific/Pago_Pago|LMT NST BST SST|bm.M b0 b0 b0|0123|-2nDMB.c 2gVzB.c EyM0", + "Pacific/Palau|PWT|-90|0|", + "Pacific/Pitcairn|PNT PST|8u 80|01|18Vku", + "Pacific/Pohnpei|PONT|-b0|0|", + "Pacific/Port_Moresby|PGT|-a0|0|", + "Pacific/Rarotonga|CKT CKHST CKT|au 9u a0|012121212121212121212121212|lyWu IL0 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Onu 1zcu Rbu 1zcu Onu 1zcu Onu 1zcu Onu", + "Pacific/Saipan|MPT MPT ChST|-90 -a0 -a0|012|-AV0 1g2n0", + "Pacific/Tahiti|LMT TAHT|9W.g a0|01|-2joe1.I", + "Pacific/Tarawa|GILT|-c0|0|", + "Pacific/Tongatapu|TOT TOT TOST|-ck -d0 -e0|01212121|-1aB0k 2n5dk 15A0 1wo0 xz0 1Q10 xz0", + "Pacific/Wake|WAKT|-c0|0|", + "Pacific/Wallis|WFT|-c0|0|", + "WET|WET WEST|0 -10|010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010101010|hDB0 1a00 1fA0 1cM0 1cM0 1cM0 1fA0 1a00 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1cM0 1fA0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00 11A0 1qM0 WM0 1qM0 WM0 1qM0 WM0 1qM0 11A0 1o00 11A0 1o00" + ], + "links": [ + "Africa/Abidjan|Africa/Bamako", + "Africa/Abidjan|Africa/Banjul", + "Africa/Abidjan|Africa/Conakry", + "Africa/Abidjan|Africa/Dakar", + "Africa/Abidjan|Africa/Freetown", + "Africa/Abidjan|Africa/Lome", + "Africa/Abidjan|Africa/Nouakchott", + "Africa/Abidjan|Africa/Ouagadougou", + "Africa/Abidjan|Africa/Sao_Tome", + "Africa/Abidjan|Africa/Timbuktu", + "Africa/Abidjan|Atlantic/St_Helena", + "Africa/Addis_Ababa|Africa/Asmara", + "Africa/Addis_Ababa|Africa/Asmera", + "Africa/Addis_Ababa|Africa/Dar_es_Salaam", + "Africa/Addis_Ababa|Africa/Djibouti", + "Africa/Addis_Ababa|Africa/Kampala", + "Africa/Addis_Ababa|Africa/Mogadishu", + "Africa/Addis_Ababa|Africa/Nairobi", + "Africa/Addis_Ababa|Indian/Antananarivo", + "Africa/Addis_Ababa|Indian/Comoro", + "Africa/Addis_Ababa|Indian/Mayotte", + "Africa/Bangui|Africa/Brazzaville", + "Africa/Bangui|Africa/Douala", + "Africa/Bangui|Africa/Kinshasa", + "Africa/Bangui|Africa/Lagos", + "Africa/Bangui|Africa/Libreville", + "Africa/Bangui|Africa/Luanda", + "Africa/Bangui|Africa/Malabo", + "Africa/Bangui|Africa/Niamey", + "Africa/Bangui|Africa/Porto-Novo", + "Africa/Blantyre|Africa/Bujumbura", + "Africa/Blantyre|Africa/Gaborone", + "Africa/Blantyre|Africa/Harare", + "Africa/Blantyre|Africa/Kigali", + "Africa/Blantyre|Africa/Lubumbashi", + "Africa/Blantyre|Africa/Lusaka", + "Africa/Blantyre|Africa/Maputo", + "Africa/Cairo|Egypt", + "Africa/Johannesburg|Africa/Maseru", + "Africa/Johannesburg|Africa/Mbabane", + "Africa/Juba|Africa/Khartoum", + "Africa/Tripoli|Libya", + "America/Adak|America/Atka", + "America/Adak|US/Aleutian", + "America/Anchorage|US/Alaska", + "America/Anguilla|America/Dominica", + "America/Anguilla|America/Grenada", + "America/Anguilla|America/Guadeloupe", + "America/Anguilla|America/Marigot", + "America/Anguilla|America/Montserrat", + "America/Anguilla|America/Port_of_Spain", + "America/Anguilla|America/St_Barthelemy", + "America/Anguilla|America/St_Kitts", + "America/Anguilla|America/St_Lucia", + "America/Anguilla|America/St_Thomas", + "America/Anguilla|America/St_Vincent", + "America/Anguilla|America/Tortola", + "America/Anguilla|America/Virgin", + "America/Argentina/Buenos_Aires|America/Buenos_Aires", + "America/Argentina/Catamarca|America/Argentina/ComodRivadavia", + "America/Argentina/Catamarca|America/Catamarca", + "America/Argentina/Cordoba|America/Cordoba", + "America/Argentina/Cordoba|America/Rosario", + "America/Argentina/Jujuy|America/Jujuy", + "America/Argentina/Mendoza|America/Mendoza", + "America/Aruba|America/Curacao", + "America/Aruba|America/Kralendijk", + "America/Aruba|America/Lower_Princes", + "America/Atikokan|America/Coral_Harbour", + "America/Chicago|US/Central", + "America/Denver|America/Shiprock", + "America/Denver|Navajo", + "America/Denver|US/Mountain", + "America/Detroit|US/Michigan", + "America/Edmonton|Canada/Mountain", + "America/Ensenada|America/Tijuana", + "America/Ensenada|Mexico/BajaNorte", + "America/Fort_Wayne|America/Indiana/Indianapolis", + "America/Fort_Wayne|America/Indianapolis", + "America/Fort_Wayne|US/East-Indiana", + "America/Halifax|Canada/Atlantic", + "America/Havana|Cuba", + "America/Indiana/Knox|America/Knox_IN", + "America/Indiana/Knox|US/Indiana-Starke", + "America/Jamaica|Jamaica", + "America/Kentucky/Louisville|America/Louisville", + "America/Los_Angeles|US/Pacific", + "America/Los_Angeles|US/Pacific-New", + "America/Manaus|Brazil/West", + "America/Mazatlan|Mexico/BajaSur", + "America/Mexico_City|Mexico/General", + "America/New_York|US/Eastern", + "America/Noronha|Brazil/DeNoronha", + "America/Phoenix|US/Arizona", + "America/Porto_Acre|America/Rio_Branco", + "America/Porto_Acre|Brazil/Acre", + "America/Regina|Canada/East-Saskatchewan", + "America/Regina|Canada/Saskatchewan", + "America/Santiago|Chile/Continental", + "America/Sao_Paulo|Brazil/East", + "America/St_Johns|Canada/Newfoundland", + "America/Toronto|Canada/Eastern", + "America/Vancouver|Canada/Pacific", + "America/Whitehorse|Canada/Yukon", + "America/Winnipeg|Canada/Central", + "Antarctica/McMurdo|Antarctica/South_Pole", + "Antarctica/McMurdo|NZ", + "Antarctica/McMurdo|Pacific/Auckland", + "Arctic/Longyearbyen|Atlantic/Jan_Mayen", + "Arctic/Longyearbyen|Europe/Oslo", + "Asia/Ashgabat|Asia/Ashkhabad", + "Asia/Bangkok|Asia/Phnom_Penh", + "Asia/Bangkok|Asia/Vientiane", + "Asia/Calcutta|Asia/Kolkata", + "Asia/Chongqing|Asia/Chungking", + "Asia/Chongqing|Asia/Harbin", + "Asia/Chongqing|Asia/Shanghai", + "Asia/Chongqing|PRC", + "Asia/Dacca|Asia/Dhaka", + "Asia/Ho_Chi_Minh|Asia/Saigon", + "Asia/Hong_Kong|Hongkong", + "Asia/Istanbul|Europe/Istanbul", + "Asia/Istanbul|Turkey", + "Asia/Jerusalem|Asia/Tel_Aviv", + "Asia/Jerusalem|Israel", + "Asia/Kashgar|Asia/Urumqi", + "Asia/Kathmandu|Asia/Katmandu", + "Asia/Macao|Asia/Macau", + "Asia/Makassar|Asia/Ujung_Pandang", + "Asia/Nicosia|Europe/Nicosia", + "Asia/Seoul|ROK", + "Asia/Singapore|Singapore", + "Asia/Taipei|ROC", + "Asia/Tehran|Iran", + "Asia/Thimbu|Asia/Thimphu", + "Asia/Tokyo|Japan", + "Asia/Ulaanbaatar|Asia/Ulan_Bator", + "Atlantic/Faeroe|Atlantic/Faroe", + "Atlantic/Reykjavik|Iceland", + "Australia/ACT|Australia/Canberra", + "Australia/ACT|Australia/NSW", + "Australia/ACT|Australia/Sydney", + "Australia/Adelaide|Australia/South", + "Australia/Brisbane|Australia/Queensland", + "Australia/Broken_Hill|Australia/Yancowinna", + "Australia/Darwin|Australia/North", + "Australia/Hobart|Australia/Tasmania", + "Australia/LHI|Australia/Lord_Howe", + "Australia/Melbourne|Australia/Victoria", + "Australia/Perth|Australia/West", + "Chile/EasterIsland|Pacific/Easter", + "Eire|Europe/Dublin", + "Etc/GMT+0|Etc/GMT", + "Etc/GMT+0|Etc/GMT-0", + "Etc/GMT+0|Etc/GMT0", + "Etc/GMT+0|Etc/Greenwich", + "Etc/GMT+0|GMT", + "Etc/GMT+0|GMT+0", + "Etc/GMT+0|GMT-0", + "Etc/GMT+0|GMT0", + "Etc/GMT+0|Greenwich", + "Etc/UCT|UCT", + "Etc/UTC|Etc/Universal", + "Etc/UTC|Etc/Zulu", + "Etc/UTC|UTC", + "Etc/UTC|Universal", + "Etc/UTC|Zulu", + "Europe/Belfast|Europe/Guernsey", + "Europe/Belfast|Europe/Isle_of_Man", + "Europe/Belfast|Europe/Jersey", + "Europe/Belfast|Europe/London", + "Europe/Belfast|GB", + "Europe/Belfast|GB-Eire", + "Europe/Belgrade|Europe/Ljubljana", + "Europe/Belgrade|Europe/Podgorica", + "Europe/Belgrade|Europe/Sarajevo", + "Europe/Belgrade|Europe/Skopje", + "Europe/Belgrade|Europe/Zagreb", + "Europe/Bratislava|Europe/Prague", + "Europe/Busingen|Europe/Vaduz", + "Europe/Busingen|Europe/Zurich", + "Europe/Chisinau|Europe/Tiraspol", + "Europe/Helsinki|Europe/Mariehamn", + "Europe/Lisbon|Portugal", + "Europe/Moscow|W-SU", + "Europe/Rome|Europe/San_Marino", + "Europe/Rome|Europe/Vatican", + "Europe/Warsaw|Poland", + "Kwajalein|Pacific/Kwajalein", + "NZ-CHAT|Pacific/Chatham", + "Pacific/Chuuk|Pacific/Truk", + "Pacific/Chuuk|Pacific/Yap", + "Pacific/Honolulu|Pacific/Johnston", + "Pacific/Honolulu|US/Hawaii", + "Pacific/Pago_Pago|Pacific/Samoa", + "Pacific/Pago_Pago|US/Samoa", + "Pacific/Pohnpei|Pacific/Ponape" + ] +} +},{}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/moment-timezone/index.js":[function(require,module,exports){ +var moment = module.exports = require("./moment-timezone"); +moment.tz.load(require('./data/packed/latest.json')); + +},{"./data/packed/latest.json":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/moment-timezone/data/packed/latest.json","./moment-timezone":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/moment-timezone/moment-timezone.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/moment-timezone/moment-timezone.js":[function(require,module,exports){ +//! moment-timezone.js +//! version : 0.2.5 +//! author : Tim Wood +//! license : MIT +//! github.com/moment/moment-timezone + +(function (root, factory) { + "use strict"; + + /*global define*/ + if (typeof define === 'function' && define.amd) { + define(['moment'], factory); // AMD + } else if (typeof exports === 'object') { + module.exports = factory(require('moment')); // Node + } else { + factory(root.moment); // Browser + } +}(this, function (moment) { + "use strict"; + + // Do not load moment-timezone a second time. + if (moment.tz !== undefined) { return moment; } + + var VERSION = "0.2.5", + zones = {}, + links = {}, + + momentVersion = moment.version.split('.'), + major = +momentVersion[0], + minor = +momentVersion[1]; + + // Moment.js version check + if (major < 2 || (major === 2 && minor < 6)) { + logError('Moment Timezone requires Moment.js >= 2.6.0. You are using Moment.js ' + moment.version + '. See momentjs.com'); + } + + /************************************ + Unpacking + ************************************/ + + function charCodeToInt(charCode) { + if (charCode > 96) { + return charCode - 87; + } else if (charCode > 64) { + return charCode - 29; + } + return charCode - 48; + } + + function unpackBase60(string) { + var i = 0, + parts = string.split('.'), + whole = parts[0], + fractional = parts[1] || '', + multiplier = 1, + num, + out = 0, + sign = 1; + + // handle negative numbers + if (string.charCodeAt(0) === 45) { + i = 1; + sign = -1; + } + + // handle digits before the decimal + for (i; i < whole.length; i++) { + num = charCodeToInt(whole.charCodeAt(i)); + out = 60 * out + num; + } + + // handle digits after the decimal + for (i = 0; i < fractional.length; i++) { + multiplier = multiplier / 60; + num = charCodeToInt(fractional.charCodeAt(i)); + out += num * multiplier; + } + + return out * sign; + } + + function arrayToInt (array) { + for (var i = 0; i < array.length; i++) { + array[i] = unpackBase60(array[i]); + } + } + + function intToUntil (array, length) { + for (var i = 0; i < length; i++) { + array[i] = Math.round((array[i - 1] || 0) + (array[i] * 60000)); // minutes to milliseconds + } + + array[length - 1] = Infinity; + } + + function mapIndices (source, indices) { + var out = [], i; + + for (i = 0; i < indices.length; i++) { + out[i] = source[indices[i]]; + } + + return out; + } + + function unpack (string) { + var data = string.split('|'), + offsets = data[2].split(' '), + indices = data[3].split(''), + untils = data[4].split(' '); + + arrayToInt(offsets); + arrayToInt(indices); + arrayToInt(untils); + + intToUntil(untils, indices.length); + + return { + name : data[0], + abbrs : mapIndices(data[1].split(' '), indices), + offsets : mapIndices(offsets, indices), + untils : untils + }; + } + + /************************************ + Zone object + ************************************/ + + function Zone (packedString) { + if (packedString) { + this._set(unpack(packedString)); + } + } + + Zone.prototype = { + _set : function (unpacked) { + this.name = unpacked.name; + this.abbrs = unpacked.abbrs; + this.untils = unpacked.untils; + this.offsets = unpacked.offsets; + }, + + _index : function (timestamp) { + var target = +timestamp, + untils = this.untils, + i; + + for (i = 0; i < untils.length; i++) { + if (target < untils[i]) { + return i; + } + } + }, + + parse : function (timestamp) { + var target = +timestamp, + offsets = this.offsets, + untils = this.untils, + max = untils.length - 1, + offset, offsetNext, offsetPrev, i; + + for (i = 0; i < max; i++) { + offset = offsets[i]; + offsetNext = offsets[i + 1]; + offsetPrev = offsets[i ? i - 1 : i]; + + if (offset < offsetNext && tz.moveAmbiguousForward) { + offset = offsetNext; + } else if (offset > offsetPrev && tz.moveInvalidForward) { + offset = offsetPrev; + } + + if (target < untils[i] - (offset * 60000)) { + return offsets[i]; + } + } + + return offsets[max]; + }, + + abbr : function (mom) { + return this.abbrs[this._index(mom)]; + }, + + offset : function (mom) { + return this.offsets[this._index(mom)]; + } + }; + + /************************************ + Global Methods + ************************************/ + + function normalizeName (name) { + return (name || '').toLowerCase().replace(/\//g, '_'); + } + + function addZone (packed) { + var i, zone, zoneName; + + if (typeof packed === "string") { + packed = [packed]; + } + + for (i = 0; i < packed.length; i++) { + zone = new Zone(packed[i]); + zoneName = normalizeName(zone.name); + zones[zoneName] = zone; + upgradeLinksToZones(zoneName); + } + } + + function getZone (name) { + return zones[normalizeName(name)] || null; + } + + function getNames () { + var i, out = []; + + for (i in zones) { + if (zones.hasOwnProperty(i) && zones[i]) { + out.push(zones[i].name); + } + } + + return out.sort(); + } + + function addLink (aliases) { + var i, alias; + + if (typeof aliases === "string") { + aliases = [aliases]; + } + + for (i = 0; i < aliases.length; i++) { + alias = aliases[i].split('|'); + pushLink(alias[0], alias[1]); + pushLink(alias[1], alias[0]); + } + } + + function upgradeLinksToZones (zoneName) { + if (!links[zoneName]) { + return; + } + + var i, + zone = zones[zoneName], + linkNames = links[zoneName]; + + for (i = 0; i < linkNames.length; i++) { + copyZoneWithName(zone, linkNames[i]); + } + + links[zoneName] = null; + } + + function copyZoneWithName (zone, name) { + var linkZone = zones[normalizeName(name)] = new Zone(); + linkZone._set(zone); + linkZone.name = name; + } + + function pushLink (zoneName, linkName) { + zoneName = normalizeName(zoneName); + + if (zones[zoneName]) { + copyZoneWithName(zones[zoneName], linkName); + } else { + links[zoneName] = links[zoneName] || []; + links[zoneName].push(linkName); + } + } + + function loadData (data) { + addZone(data.zones); + addLink(data.links); + tz.dataVersion = data.version; + } + + function zoneExists (name) { + if (!zoneExists.didShowError) { + zoneExists.didShowError = true; + logError("moment.tz.zoneExists('" + name + "') has been deprecated in favor of !moment.tz.zone('" + name + "')"); + } + return !!getZone(name); + } + + function needsOffset (m) { + return !!(m._a && (m._tzm === undefined)); + } + + function logError (message) { + if (typeof console !== 'undefined' && typeof console.error === 'function') { + console.error(message); + } + } + + /************************************ + moment.tz namespace + ************************************/ + + function tz () { + var args = Array.prototype.slice.call(arguments, 0, -1), + name = arguments[arguments.length - 1], + zone = getZone(name), + out = moment.utc.apply(null, args); + + if (zone && needsOffset(out)) { + out.add(zone.parse(out), 'minutes'); + } + + out.tz(name); + + return out; + } + + tz.version = VERSION; + tz.dataVersion = ''; + tz._zones = zones; + tz._links = links; + tz.add = addZone; + tz.link = addLink; + tz.load = loadData; + tz.zone = getZone; + tz.zoneExists = zoneExists; // deprecated in 0.1.0 + tz.names = getNames; + tz.Zone = Zone; + tz.unpack = unpack; + tz.unpackBase60 = unpackBase60; + tz.needsOffset = needsOffset; + tz.moveInvalidForward = true; + tz.moveAmbiguousForward = false; + + /************************************ + Interface with Moment.js + ************************************/ + + var fn = moment.fn; + + moment.tz = tz; + + moment.updateOffset = function (mom, keepTime) { + var offset; + if (mom._z) { + offset = mom._z.offset(mom); + if (Math.abs(offset) < 16) { + offset = offset / 60; + } + mom.zone(offset, keepTime); + } + }; + + fn.tz = function (name) { + if (name) { + this._z = getZone(name); + if (this._z) { + moment.updateOffset(this); + } else { + logError("Moment Timezone has no data for " + name + ". See http://momentjs.com/timezone/docs/#/data-loading/."); + } + return this; + } + if (this._z) { return this._z.name; } + }; + + function abbrWrap (old) { + return function () { + if (this._z) { return this._z.abbr(this); } + return old.call(this); + }; + } + + function resetZoneWrap (old) { + return function () { + this._z = null; + return old.apply(this, arguments); + }; + } + + fn.zoneName = abbrWrap(fn.zoneName); + fn.zoneAbbr = abbrWrap(fn.zoneAbbr); + fn.utc = resetZoneWrap(fn.utc); + + // Cloning a moment should include the _z property. + var momentProperties = moment.momentProperties; + if (Object.prototype.toString.call(momentProperties) === '[object Array]') { + // moment 2.8.1+ + momentProperties.push('_z'); + momentProperties.push('_a'); + } else if (momentProperties) { + // moment 2.7.0 + momentProperties._z = null; + } + + // INJECT DATA + + return moment; +})); + +},{"moment":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/moment-timezone/node_modules/moment/moment.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/moment-timezone/node_modules/moment/moment.js":[function(require,module,exports){ +//! moment.js +//! version : 2.10.2 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +(function (global, factory) { + typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() : + typeof define === 'function' && define.amd ? define(factory) : + global.moment = factory() +}(this, function () { 'use strict'; + + var hookCallback; + + function utils_hooks__hooks () { + return hookCallback.apply(null, arguments); + } + + // This is done to register the method called with moment() + // without creating circular dependencies. + function setHookCallback (callback) { + hookCallback = callback; + } + + function defaultParsingFlags() { + // We need to deep clone this object. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso : false + }; + } + + function isArray(input) { + return Object.prototype.toString.call(input) === '[object Array]'; + } + + function isDate(input) { + return Object.prototype.toString.call(input) === '[object Date]' || input instanceof Date; + } + + function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } + + function hasOwnProp(a, b) { + return Object.prototype.hasOwnProperty.call(a, b); + } + + function extend(a, b) { + for (var i in b) { + if (hasOwnProp(b, i)) { + a[i] = b[i]; + } + } + + if (hasOwnProp(b, 'toString')) { + a.toString = b.toString; + } + + if (hasOwnProp(b, 'valueOf')) { + a.valueOf = b.valueOf; + } + + return a; + } + + function create_utc__createUTC (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, true).utc(); + } + + function valid__isValid(m) { + if (m._isValid == null) { + m._isValid = !isNaN(m._d.getTime()) && + m._pf.overflow < 0 && + !m._pf.empty && + !m._pf.invalidMonth && + !m._pf.nullInput && + !m._pf.invalidFormat && + !m._pf.userInvalidated; + + if (m._strict) { + m._isValid = m._isValid && + m._pf.charsLeftOver === 0 && + m._pf.unusedTokens.length === 0 && + m._pf.bigHour === undefined; + } + } + return m._isValid; + } + + function valid__createInvalid (flags) { + var m = create_utc__createUTC(NaN); + if (flags != null) { + extend(m._pf, flags); + } + else { + m._pf.userInvalidated = true; + } + + return m; + } + + var momentProperties = utils_hooks__hooks.momentProperties = []; + + function copyConfig(to, from) { + var i, prop, val; + + if (typeof from._isAMomentObject !== 'undefined') { + to._isAMomentObject = from._isAMomentObject; + } + if (typeof from._i !== 'undefined') { + to._i = from._i; + } + if (typeof from._f !== 'undefined') { + to._f = from._f; + } + if (typeof from._l !== 'undefined') { + to._l = from._l; + } + if (typeof from._strict !== 'undefined') { + to._strict = from._strict; + } + if (typeof from._tzm !== 'undefined') { + to._tzm = from._tzm; + } + if (typeof from._isUTC !== 'undefined') { + to._isUTC = from._isUTC; + } + if (typeof from._offset !== 'undefined') { + to._offset = from._offset; + } + if (typeof from._pf !== 'undefined') { + to._pf = from._pf; + } + if (typeof from._locale !== 'undefined') { + to._locale = from._locale; + } + + if (momentProperties.length > 0) { + for (i in momentProperties) { + prop = momentProperties[i]; + val = from[prop]; + if (typeof val !== 'undefined') { + to[prop] = val; + } + } + } + + return to; + } + + var updateInProgress = false; + + // Moment prototype object + function Moment(config) { + copyConfig(this, config); + this._d = new Date(+config._d); + // Prevent infinite loop in case updateOffset creates new moment + // objects. + if (updateInProgress === false) { + updateInProgress = true; + utils_hooks__hooks.updateOffset(this); + updateInProgress = false; + } + } + + function isMoment (obj) { + return obj instanceof Moment || (obj != null && hasOwnProp(obj, '_isAMomentObject')); + } + + function toInt(argumentForCoercion) { + var coercedNumber = +argumentForCoercion, + value = 0; + + if (coercedNumber !== 0 && isFinite(coercedNumber)) { + if (coercedNumber >= 0) { + value = Math.floor(coercedNumber); + } else { + value = Math.ceil(coercedNumber); + } + } + + return value; + } + + function compareArrays(array1, array2, dontConvert) { + var len = Math.min(array1.length, array2.length), + lengthDiff = Math.abs(array1.length - array2.length), + diffs = 0, + i; + for (i = 0; i < len; i++) { + if ((dontConvert && array1[i] !== array2[i]) || + (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))) { + diffs++; + } + } + return diffs + lengthDiff; + } + + function Locale() { + } + + var locales = {}; + var globalLocale; + + function normalizeLocale(key) { + return key ? key.toLowerCase().replace('_', '-') : key; + } + + // pick the locale from the array + // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each + // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root + function chooseLocale(names) { + var i = 0, j, next, locale, split; + + while (i < names.length) { + split = normalizeLocale(names[i]).split('-'); + j = split.length; + next = normalizeLocale(names[i + 1]); + next = next ? next.split('-') : null; + while (j > 0) { + locale = loadLocale(split.slice(0, j).join('-')); + if (locale) { + return locale; + } + if (next && next.length >= j && compareArrays(split, next, true) >= j - 1) { + //the next array item is better than a shallower substring of this one + break; + } + j--; + } + i++; + } + return null; + } + + function loadLocale(name) { + var oldLocale = null; + // TODO: Find a better way to register and load all the locales in Node + if (!locales[name] && typeof module !== 'undefined' && + module && module.exports) { + try { + oldLocale = globalLocale._abbr; + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we + // want to undo that for lazy loaded locales + locale_locales__getSetGlobalLocale(oldLocale); + } catch (e) { } + } + return locales[name]; + } + + // This function will load locale and then set the global locale. If + // no arguments are passed in, it will simply return the current global + // locale key. + function locale_locales__getSetGlobalLocale (key, values) { + var data; + if (key) { + if (typeof values === 'undefined') { + data = locale_locales__getLocale(key); + } + else { + data = defineLocale(key, values); + } + + if (data) { + // moment.duration._locale = moment._locale = data; + globalLocale = data; + } + } + + return globalLocale._abbr; + } + + function defineLocale (name, values) { + if (values !== null) { + values.abbr = name; + if (!locales[name]) { + locales[name] = new Locale(); + } + locales[name].set(values); + + // backwards compat for now: also set the locale + locale_locales__getSetGlobalLocale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + } + + // returns locale data + function locale_locales__getLocale (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return globalLocale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + } + + var aliases = {}; + + function addUnitAlias (unit, shorthand) { + var lowerCase = unit.toLowerCase(); + aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit; + } + + function normalizeUnits(units) { + return typeof units === 'string' ? aliases[units] || aliases[units.toLowerCase()] : undefined; + } + + function normalizeObjectUnits(inputObject) { + var normalizedInput = {}, + normalizedProp, + prop; + + for (prop in inputObject) { + if (hasOwnProp(inputObject, prop)) { + normalizedProp = normalizeUnits(prop); + if (normalizedProp) { + normalizedInput[normalizedProp] = inputObject[prop]; + } + } + } + + return normalizedInput; + } + + function makeGetSet (unit, keepTime) { + return function (value) { + if (value != null) { + get_set__set(this, unit, value); + utils_hooks__hooks.updateOffset(this, keepTime); + return this; + } else { + return get_set__get(this, unit); + } + }; + } + + function get_set__get (mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } + + function get_set__set (mom, unit, value) { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + + // MOMENTS + + function getSet (units, value) { + var unit; + if (typeof units === 'object') { + for (unit in units) { + this.set(unit, units[unit]); + } + } else { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + return this[units](value); + } + } + return this; + } + + function zeroFill(number, targetLength, forceSign) { + var output = '' + Math.abs(number), + sign = number >= 0; + + while (output.length < targetLength) { + output = '0' + output; + } + return (sign ? (forceSign ? '+' : '') : '-') + output; + } + + var formattingTokens = /(\[[^\[]*\])|(\\)?(Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Q|YYYYYY|YYYYY|YYYY|YY|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|mm?|ss?|S{1,4}|x|X|zz?|ZZ?|.)/g; + + var localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g; + + var formatFunctions = {}; + + var formatTokenFunctions = {}; + + // token: 'M' + // padded: ['MM', 2] + // ordinal: 'Mo' + // callback: function () { this.month() + 1 } + function addFormatToken (token, padded, ordinal, callback) { + var func = callback; + if (typeof callback === 'string') { + func = function () { + return this[callback](); + }; + } + if (token) { + formatTokenFunctions[token] = func; + } + if (padded) { + formatTokenFunctions[padded[0]] = function () { + return zeroFill(func.apply(this, arguments), padded[1], padded[2]); + }; + } + if (ordinal) { + formatTokenFunctions[ordinal] = function () { + return this.localeData().ordinal(func.apply(this, arguments), token); + }; + } + } + + function removeFormattingTokens(input) { + if (input.match(/\[[\s\S]/)) { + return input.replace(/^\[|\]$/g, ''); + } + return input.replace(/\\/g, ''); + } + + function makeFormatFunction(format) { + var array = format.match(formattingTokens), i, length; + + for (i = 0, length = array.length; i < length; i++) { + if (formatTokenFunctions[array[i]]) { + array[i] = formatTokenFunctions[array[i]]; + } else { + array[i] = removeFormattingTokens(array[i]); + } + } + + return function (mom) { + var output = ''; + for (i = 0; i < length; i++) { + output += array[i] instanceof Function ? array[i].call(mom, format) : array[i]; + } + return output; + }; + } + + // format date using native date object + function formatMoment(m, format) { + if (!m.isValid()) { + return m.localeData().invalidDate(); + } + + format = expandFormat(format, m.localeData()); + + if (!formatFunctions[format]) { + formatFunctions[format] = makeFormatFunction(format); + } + + return formatFunctions[format](m); + } + + function expandFormat(format, locale) { + var i = 5; + + function replaceLongDateFormatTokens(input) { + return locale.longDateFormat(input) || input; + } + + localFormattingTokens.lastIndex = 0; + while (i >= 0 && localFormattingTokens.test(format)) { + format = format.replace(localFormattingTokens, replaceLongDateFormatTokens); + localFormattingTokens.lastIndex = 0; + i -= 1; + } + + return format; + } + + var match1 = /\d/; // 0 - 9 + var match2 = /\d\d/; // 00 - 99 + var match3 = /\d{3}/; // 000 - 999 + var match4 = /\d{4}/; // 0000 - 9999 + var match6 = /[+-]?\d{6}/; // -999999 - 999999 + var match1to2 = /\d\d?/; // 0 - 99 + var match1to3 = /\d{1,3}/; // 0 - 999 + var match1to4 = /\d{1,4}/; // 0 - 9999 + var match1to6 = /[+-]?\d{1,6}/; // -999999 - 999999 + + var matchUnsigned = /\d+/; // 0 - inf + var matchSigned = /[+-]?\d+/; // -inf - inf + + var matchOffset = /Z|[+-]\d\d:?\d\d/gi; // +00:00 -00:00 +0000 -0000 or Z + + var matchTimestamp = /[+-]?\d+(\.\d{1,3})?/; // 123456789 123456789.123 + + // any word (or two) characters or numbers including two/three word month in arabic. + var matchWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i; + + var regexes = {}; + + function addRegexToken (token, regex, strictRegex) { + regexes[token] = typeof regex === 'function' ? regex : function (isStrict) { + return (isStrict && strictRegex) ? strictRegex : regex; + }; + } + + function getParseRegexForToken (token, config) { + if (!hasOwnProp(regexes, token)) { + return new RegExp(unescapeFormat(token)); + } + + return regexes[token](config._strict, config._locale); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function unescapeFormat(s) { + return s.replace('\\', '').replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }).replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + var tokens = {}; + + function addParseToken (token, callback) { + var i, func = callback; + if (typeof token === 'string') { + token = [token]; + } + if (typeof callback === 'number') { + func = function (input, array) { + array[callback] = toInt(input); + }; + } + for (i = 0; i < token.length; i++) { + tokens[token[i]] = func; + } + } + + function addWeekParseToken (token, callback) { + addParseToken(token, function (input, array, config, token) { + config._w = config._w || {}; + callback(input, config._w, config, token); + }); + } + + function addTimeToArrayFromToken(token, input, config) { + if (input != null && hasOwnProp(tokens, token)) { + tokens[token](input, config._a, config, token); + } + } + + var YEAR = 0; + var MONTH = 1; + var DATE = 2; + var HOUR = 3; + var MINUTE = 4; + var SECOND = 5; + var MILLISECOND = 6; + + function daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } + + // FORMATTING + + addFormatToken('M', ['MM', 2], 'Mo', function () { + return this.month() + 1; + }); + + addFormatToken('MMM', 0, 0, function (format) { + return this.localeData().monthsShort(this, format); + }); + + addFormatToken('MMMM', 0, 0, function (format) { + return this.localeData().months(this, format); + }); + + // ALIASES + + addUnitAlias('month', 'M'); + + // PARSING + + addRegexToken('M', match1to2); + addRegexToken('MM', match1to2, match2); + addRegexToken('MMM', matchWord); + addRegexToken('MMMM', matchWord); + + addParseToken(['M', 'MM'], function (input, array) { + array[MONTH] = toInt(input) - 1; + }); + + addParseToken(['MMM', 'MMMM'], function (input, array, config, token) { + var month = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (month != null) { + array[MONTH] = month; + } else { + config._pf.invalidMonth = input; + } + }); + + // LOCALES + + var defaultLocaleMonths = 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'); + function localeMonths (m) { + return this._months[m.month()]; + } + + var defaultLocaleMonthsShort = 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'); + function localeMonthsShort (m) { + return this._monthsShort[m.month()]; + } + + function localeMonthsParse (monthName, format, strict) { + var i, mom, regex; + + if (!this._monthsParse) { + this._monthsParse = []; + this._longMonthsParse = []; + this._shortMonthsParse = []; + } + + for (i = 0; i < 12; i++) { + // make the regex if we don't have it already + mom = create_utc__createUTC([2000, i]); + if (strict && !this._longMonthsParse[i]) { + this._longMonthsParse[i] = new RegExp('^' + this.months(mom, '').replace('.', '') + '$', 'i'); + this._shortMonthsParse[i] = new RegExp('^' + this.monthsShort(mom, '').replace('.', '') + '$', 'i'); + } + if (!strict && !this._monthsParse[i]) { + regex = '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, ''); + this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (strict && format === 'MMMM' && this._longMonthsParse[i].test(monthName)) { + return i; + } else if (strict && format === 'MMM' && this._shortMonthsParse[i].test(monthName)) { + return i; + } else if (!strict && this._monthsParse[i].test(monthName)) { + return i; + } + } + } + + // MOMENTS + + function setMonth (mom, value) { + var dayOfMonth; + + // TODO: Move this out of here! + if (typeof value === 'string') { + value = mom.localeData().monthsParse(value); + // TODO: Another silent failure? + if (typeof value !== 'number') { + return mom; + } + } + + dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value)); + mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth); + return mom; + } + + function getSetMonth (value) { + if (value != null) { + setMonth(this, value); + utils_hooks__hooks.updateOffset(this, true); + return this; + } else { + return get_set__get(this, 'Month'); + } + } + + function getDaysInMonth () { + return daysInMonth(this.year(), this.month()); + } + + function checkOverflow (m) { + var overflow; + var a = m._a; + + if (a && m._pf.overflow === -2) { + overflow = + a[MONTH] < 0 || a[MONTH] > 11 ? MONTH : + a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH]) ? DATE : + a[HOUR] < 0 || a[HOUR] > 24 || (a[HOUR] === 24 && (a[MINUTE] !== 0 || a[SECOND] !== 0 || a[MILLISECOND] !== 0)) ? HOUR : + a[MINUTE] < 0 || a[MINUTE] > 59 ? MINUTE : + a[SECOND] < 0 || a[SECOND] > 59 ? SECOND : + a[MILLISECOND] < 0 || a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + + m._pf.overflow = overflow; + } + + return m; + } + + function warn(msg) { + if (utils_hooks__hooks.suppressDeprecationWarnings === false && typeof console !== 'undefined' && console.warn) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + return extend(function () { + if (firstTime) { + warn(msg); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + var deprecations = {}; + + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + warn(msg); + deprecations[name] = true; + } + } + + utils_hooks__hooks.suppressDeprecationWarnings = false; + + var from_string__isoRegex = /^\s*(?:[+-]\d{6}|\d{4})-(?:(\d\d-\d\d)|(W\d\d$)|(W\d\d-\d)|(\d\d\d))((T| )(\d\d(:\d\d(:\d\d(\.\d+)?)?)?)?([\+\-]\d\d(?::?\d\d)?|\s*Z)?)?$/; + + var isoDates = [ + ['YYYYYY-MM-DD', /[+-]\d{6}-\d{2}-\d{2}/], + ['YYYY-MM-DD', /\d{4}-\d{2}-\d{2}/], + ['GGGG-[W]WW-E', /\d{4}-W\d{2}-\d/], + ['GGGG-[W]WW', /\d{4}-W\d{2}/], + ['YYYY-DDD', /\d{4}-\d{3}/] + ]; + + // iso time formats and regexes + var isoTimes = [ + ['HH:mm:ss.SSSS', /(T| )\d\d:\d\d:\d\d\.\d+/], + ['HH:mm:ss', /(T| )\d\d:\d\d:\d\d/], + ['HH:mm', /(T| )\d\d:\d\d/], + ['HH', /(T| )\d\d/] + ]; + + var aspNetJsonRegex = /^\/?Date\((\-?\d+)/i; + + // date from iso format + function configFromISO(config) { + var i, l, + string = config._i, + match = from_string__isoRegex.exec(string); + + if (match) { + config._pf.iso = true; + for (i = 0, l = isoDates.length; i < l; i++) { + if (isoDates[i][1].exec(string)) { + // match[5] should be 'T' or undefined + config._f = isoDates[i][0] + (match[6] || ' '); + break; + } + } + for (i = 0, l = isoTimes.length; i < l; i++) { + if (isoTimes[i][1].exec(string)) { + config._f += isoTimes[i][0]; + break; + } + } + if (string.match(matchOffset)) { + config._f += 'Z'; + } + configFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + // date from iso format or fallback + function configFromString(config) { + var matched = aspNetJsonRegex.exec(config._i); + + if (matched !== null) { + config._d = new Date(+matched[1]); + return; + } + + configFromISO(config); + if (config._isValid === false) { + delete config._isValid; + utils_hooks__hooks.createFromInputFallback(config); + } + } + + utils_hooks__hooks.createFromInputFallback = deprecate( + 'moment construction falls back to js Date. This is ' + + 'discouraged and will be removed in upcoming major ' + + 'release. Please refer to ' + + 'https://github.com/moment/moment/issues/1407 for more info.', + function (config) { + config._d = new Date(config._i + (config._useUTC ? ' UTC' : '')); + } + ); + + function createDate (y, m, d, h, M, s, ms) { + //can't just apply() to create a date: + //http://stackoverflow.com/questions/181348/instantiating-a-javascript-object-by-calling-prototype-constructor-apply + var date = new Date(y, m, d, h, M, s, ms); + + //the date constructor doesn't accept years < 1970 + if (y < 1970) { + date.setFullYear(y); + } + return date; + } + + function createUTCDate (y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; + } + + addFormatToken(0, ['YY', 2], 0, function () { + return this.year() % 100; + }); + + addFormatToken(0, ['YYYY', 4], 0, 'year'); + addFormatToken(0, ['YYYYY', 5], 0, 'year'); + addFormatToken(0, ['YYYYYY', 6, true], 0, 'year'); + + // ALIASES + + addUnitAlias('year', 'y'); + + // PARSING + + addRegexToken('Y', matchSigned); + addRegexToken('YY', match1to2, match2); + addRegexToken('YYYY', match1to4, match4); + addRegexToken('YYYYY', match1to6, match6); + addRegexToken('YYYYYY', match1to6, match6); + + addParseToken(['YYYY', 'YYYYY', 'YYYYYY'], YEAR); + addParseToken('YY', function (input, array) { + array[YEAR] = utils_hooks__hooks.parseTwoDigitYear(input); + }); + + // HELPERS + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + // HOOKS + + utils_hooks__hooks.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + // MOMENTS + + var getSetYear = makeGetSet('FullYear', false); + + function getIsLeapYear () { + return isLeapYear(this.year()); + } + + addFormatToken('w', ['ww', 2], 'wo', 'week'); + addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek'); + + // ALIASES + + addUnitAlias('week', 'w'); + addUnitAlias('isoWeek', 'W'); + + // PARSING + + addRegexToken('w', match1to2); + addRegexToken('ww', match1to2, match2); + addRegexToken('W', match1to2); + addRegexToken('WW', match1to2, match2); + + addWeekParseToken(['w', 'ww', 'W', 'WW'], function (input, week, config, token) { + week[token.substr(0, 1)] = toInt(input); + }); + + // HELPERS + + // firstDayOfWeek 0 = sun, 6 = sat + // the day of the week that starts the week + // (usually sunday or monday) + // firstDayOfWeekOfYear 0 = sun, 6 = sat + // the first week is the week that contains the first + // of this day of the week + // (eg. ISO weeks use thursday (4)) + function weekOfYear(mom, firstDayOfWeek, firstDayOfWeekOfYear) { + var end = firstDayOfWeekOfYear - firstDayOfWeek, + daysToDayOfWeek = firstDayOfWeekOfYear - mom.day(), + adjustedMoment; + + + if (daysToDayOfWeek > end) { + daysToDayOfWeek -= 7; + } + + if (daysToDayOfWeek < end - 7) { + daysToDayOfWeek += 7; + } + + adjustedMoment = local__createLocal(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } + + // LOCALES + + function localeWeek (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + } + + var defaultLocaleWeek = { + dow : 0, // Sunday is the first day of the week. + doy : 6 // The week that contains Jan 1st is the first week of the year. + }; + + function localeFirstDayOfWeek () { + return this._week.dow; + } + + function localeFirstDayOfYear () { + return this._week.doy; + } + + // MOMENTS + + function getSetWeek (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + function getSetISOWeek (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + } + + addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear'); + + // ALIASES + + addUnitAlias('dayOfYear', 'DDD'); + + // PARSING + + addRegexToken('DDD', match1to3); + addRegexToken('DDDD', match3); + addParseToken(['DDD', 'DDDD'], function (input, array, config) { + config._dayOfYear = toInt(input); + }); + + // HELPERS + + //http://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday + function dayOfYearFromWeeks(year, week, weekday, firstDayOfWeekOfYear, firstDayOfWeek) { + var d = createUTCDate(year, 0, 1).getUTCDay(); + var daysToAdd; + var dayOfYear; + + d = d === 0 ? 7 : d; + weekday = weekday != null ? weekday : firstDayOfWeek; + daysToAdd = firstDayOfWeek - d + (d > firstDayOfWeekOfYear ? 7 : 0) - (d < firstDayOfWeek ? 7 : 0); + dayOfYear = 7 * (week - 1) + (weekday - firstDayOfWeek) + daysToAdd + 1; + + return { + year : dayOfYear > 0 ? year : year - 1, + dayOfYear : dayOfYear > 0 ? dayOfYear : daysInYear(year - 1) + dayOfYear + }; + } + + // MOMENTS + + function getSetDayOfYear (input) { + var dayOfYear = Math.round((this.clone().startOf('day') - this.clone().startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + } + + // Pick the first defined of two or three arguments. + function defaults(a, b, c) { + if (a != null) { + return a; + } + if (b != null) { + return b; + } + return c; + } + + function currentDateArray(config) { + var now = new Date(); + if (config._useUTC) { + return [now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate()]; + } + return [now.getFullYear(), now.getMonth(), now.getDate()]; + } + + // convert an array to a date. + // the array should mirror the parameters below + // note: all values past the year are optional and will default to the lowest possible value. + // [year, month, day , hour, minute, second, millisecond] + function configFromArray (config) { + var i, date, input = [], currentDate, yearToUse; + + if (config._d) { + return; + } + + currentDate = currentDateArray(config); + + //compute day of the year from weeks and weekdays + if (config._w && config._a[DATE] == null && config._a[MONTH] == null) { + dayOfYearFromWeekInfo(config); + } + + //if the day of the year is set, figure out what it is + if (config._dayOfYear) { + yearToUse = defaults(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse)) { + config._pf._overflowDayOfYear = true; + } + + date = createUTCDate(yearToUse, 0, config._dayOfYear); + config._a[MONTH] = date.getUTCMonth(); + config._a[DATE] = date.getUTCDate(); + } + + // Default to current date. + // * if no year, month, day of month are given, default to today + // * if day of month is given, default month and year + // * if month is given, default only year + // * if year is given, don't default anything + for (i = 0; i < 3 && config._a[i] == null; ++i) { + config._a[i] = input[i] = currentDate[i]; + } + + // Zero out whatever was not defaulted, including time + for (; i < 7; i++) { + config._a[i] = input[i] = (config._a[i] == null) ? (i === 2 ? 1 : 0) : config._a[i]; + } + + // Check for 24:00:00.000 + if (config._a[HOUR] === 24 && + config._a[MINUTE] === 0 && + config._a[SECOND] === 0 && + config._a[MILLISECOND] === 0) { + config._nextDay = true; + config._a[HOUR] = 0; + } + + config._d = (config._useUTC ? createUTCDate : createDate).apply(null, input); + // Apply timezone offset from input. The actual utcOffset can be changed + // with parseZone. + if (config._tzm != null) { + config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm); + } + + if (config._nextDay) { + config._a[HOUR] = 24; + } + } + + function dayOfYearFromWeekInfo(config) { + var w, weekYear, week, weekday, dow, doy, temp; + + w = config._w; + if (w.GG != null || w.W != null || w.E != null) { + dow = 1; + doy = 4; + + // TODO: We need to take the current isoWeekYear, but that depends on + // how we interpret now (local, utc, fixed offset). So create + // a now version of current config (take local/utc/offset flags, and + // create now). + weekYear = defaults(w.GG, config._a[YEAR], weekOfYear(local__createLocal(), 1, 4).year); + week = defaults(w.W, 1); + weekday = defaults(w.E, 1); + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + weekYear = defaults(w.gg, config._a[YEAR], weekOfYear(local__createLocal(), dow, doy).year); + week = defaults(w.w, 1); + + if (w.d != null) { + // weekday -- low day numbers are considered next week + weekday = w.d; + if (weekday < dow) { + ++week; + } + } else if (w.e != null) { + // local weekday -- counting starts from begining of week + weekday = w.e + dow; + } else { + // default to begining of week + weekday = dow; + } + } + temp = dayOfYearFromWeeks(weekYear, week, weekday, doy, dow); + + config._a[YEAR] = temp.year; + config._dayOfYear = temp.dayOfYear; + } + + utils_hooks__hooks.ISO_8601 = function () {}; + + // date from string and format string + function configFromStringAndFormat(config) { + // TODO: Move this to another part of the creation flow to prevent circular deps + if (config._f === utils_hooks__hooks.ISO_8601) { + configFromISO(config); + return; + } + + config._a = []; + config._pf.empty = true; + + // This array is used to make a Date, either with `new Date` or `Date.UTC` + var string = '' + config._i, + i, parsedInput, tokens, token, skipped, + stringLength = string.length, + totalParsedInputLength = 0; + + tokens = expandFormat(config._f, config._locale).match(formattingTokens) || []; + + for (i = 0; i < tokens.length; i++) { + token = tokens[i]; + parsedInput = (string.match(getParseRegexForToken(token, config)) || [])[0]; + if (parsedInput) { + skipped = string.substr(0, string.indexOf(parsedInput)); + if (skipped.length > 0) { + config._pf.unusedInput.push(skipped); + } + string = string.slice(string.indexOf(parsedInput) + parsedInput.length); + totalParsedInputLength += parsedInput.length; + } + // don't parse if it's not a known token + if (formatTokenFunctions[token]) { + if (parsedInput) { + config._pf.empty = false; + } + else { + config._pf.unusedTokens.push(token); + } + addTimeToArrayFromToken(token, parsedInput, config); + } + else if (config._strict && !parsedInput) { + config._pf.unusedTokens.push(token); + } + } + + // add remaining unparsed input length to the string + config._pf.charsLeftOver = stringLength - totalParsedInputLength; + if (string.length > 0) { + config._pf.unusedInput.push(string); + } + + // clear _12h flag if hour is <= 12 + if (config._pf.bigHour === true && config._a[HOUR] <= 12) { + config._pf.bigHour = undefined; + } + // handle meridiem + config._a[HOUR] = meridiemFixWrap(config._locale, config._a[HOUR], config._meridiem); + + configFromArray(config); + checkOverflow(config); + } + + + function meridiemFixWrap (locale, hour, meridiem) { + var isPm; + + if (meridiem == null) { + // nothing to do + return hour; + } + if (locale.meridiemHour != null) { + return locale.meridiemHour(hour, meridiem); + } else if (locale.isPM != null) { + // Fallback + isPm = locale.isPM(meridiem); + if (isPm && hour < 12) { + hour += 12; + } + if (!isPm && hour === 12) { + hour = 0; + } + return hour; + } else { + // this is not supposed to happen + return hour; + } + } + + function configFromStringAndArray(config) { + var tempConfig, + bestMoment, + + scoreToBeat, + i, + currentScore; + + if (config._f.length === 0) { + config._pf.invalidFormat = true; + config._d = new Date(NaN); + return; + } + + for (i = 0; i < config._f.length; i++) { + currentScore = 0; + tempConfig = copyConfig({}, config); + if (config._useUTC != null) { + tempConfig._useUTC = config._useUTC; + } + tempConfig._pf = defaultParsingFlags(); + tempConfig._f = config._f[i]; + configFromStringAndFormat(tempConfig); + + if (!valid__isValid(tempConfig)) { + continue; + } + + // if there is any input that was not parsed add a penalty for that format + currentScore += tempConfig._pf.charsLeftOver; + + //or tokens + currentScore += tempConfig._pf.unusedTokens.length * 10; + + tempConfig._pf.score = currentScore; + + if (scoreToBeat == null || currentScore < scoreToBeat) { + scoreToBeat = currentScore; + bestMoment = tempConfig; + } + } + + extend(config, bestMoment || tempConfig); + } + + function configFromObject(config) { + if (config._d) { + return; + } + + var i = normalizeObjectUnits(config._i); + config._a = [i.year, i.month, i.day || i.date, i.hour, i.minute, i.second, i.millisecond]; + + configFromArray(config); + } + + function createFromConfig (config) { + var input = config._i, + format = config._f, + res; + + config._locale = config._locale || locale_locales__getLocale(config._l); + + if (input === null || (format === undefined && input === '')) { + return valid__createInvalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (isMoment(input)) { + return new Moment(checkOverflow(input)); + } else if (isArray(format)) { + configFromStringAndArray(config); + } else if (format) { + configFromStringAndFormat(config); + } else { + configFromInput(config); + } + + res = new Moment(checkOverflow(config)); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + function configFromInput(config) { + var input = config._i; + if (input === undefined) { + config._d = new Date(); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if (typeof input === 'string') { + configFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + configFromArray(config); + } else if (typeof(input) === 'object') { + configFromObject(config); + } else if (typeof(input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + utils_hooks__hooks.createFromInputFallback(config); + } + } + + function createLocalOrUTC (input, format, locale, strict, isUTC) { + var c = {}; + + if (typeof(locale) === 'boolean') { + strict = locale; + locale = undefined; + } + // object construction must be done this way. + // https://github.com/moment/moment/issues/1423 + c._isAMomentObject = true; + c._useUTC = c._isUTC = isUTC; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + c._pf = defaultParsingFlags(); + + return createFromConfig(c); + } + + function local__createLocal (input, format, locale, strict) { + return createLocalOrUTC(input, format, locale, strict, false); + } + + var prototypeMin = deprecate( + 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + function () { + var other = local__createLocal.apply(null, arguments); + return other < this ? this : other; + } + ); + + var prototypeMax = deprecate( + 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + function () { + var other = local__createLocal.apply(null, arguments); + return other > this ? this : other; + } + ); + + // Pick a moment m from moments so that m[fn](other) is true for all + // other. This relies on the function fn to be transitive. + // + // moments should either be an array of moment objects or an array, whose + // first element is an array of moment objects. + function pickBy(fn, moments) { + var res, i; + if (moments.length === 1 && isArray(moments[0])) { + moments = moments[0]; + } + if (!moments.length) { + return local__createLocal(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + // TODO: Use [].sort instead? + function min () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + } + + function max () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + } + + function Duration (duration) { + var normalizedInput = normalizeObjectUnits(duration), + years = normalizedInput.year || 0, + quarters = normalizedInput.quarter || 0, + months = normalizedInput.month || 0, + weeks = normalizedInput.week || 0, + days = normalizedInput.day || 0, + hours = normalizedInput.hour || 0, + minutes = normalizedInput.minute || 0, + seconds = normalizedInput.second || 0, + milliseconds = normalizedInput.millisecond || 0; + + // representation for dateAddRemove + this._milliseconds = +milliseconds + + seconds * 1e3 + // 1000 + minutes * 6e4 + // 1000 * 60 + hours * 36e5; // 1000 * 60 * 60 + // Because of dateAddRemove treats 24 hours as different from a + // day when working around DST, we need to store them separately + this._days = +days + + weeks * 7; + // It is impossible translate months into days without knowing + // which months you are are talking about, so we have to store + // it separately. + this._months = +months + + quarters * 3 + + years * 12; + + this._data = {}; + + this._locale = locale_locales__getLocale(); + + this._bubble(); + } + + function isDuration (obj) { + return obj instanceof Duration; + } + + function offset (token, separator) { + addFormatToken(token, 0, 0, function () { + var offset = this.utcOffset(); + var sign = '+'; + if (offset < 0) { + offset = -offset; + sign = '-'; + } + return sign + zeroFill(~~(offset / 60), 2) + separator + zeroFill(~~(offset) % 60, 2); + }); + } + + offset('Z', ':'); + offset('ZZ', ''); + + // PARSING + + addRegexToken('Z', matchOffset); + addRegexToken('ZZ', matchOffset); + addParseToken(['Z', 'ZZ'], function (input, array, config) { + config._useUTC = true; + config._tzm = offsetFromString(input); + }); + + // HELPERS + + // timezone chunker + // '+10:00' > ['10', '00'] + // '-1530' > ['-15', '30'] + var chunkOffset = /([\+\-]|\d\d)/gi; + + function offsetFromString(string) { + var matches = ((string || '').match(matchOffset) || []); + var chunk = matches[matches.length - 1] || []; + var parts = (chunk + '').match(chunkOffset) || ['-', 0, 0]; + var minutes = +(parts[1] * 60) + toInt(parts[2]); + + return parts[0] === '+' ? minutes : -minutes; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function cloneWithOffset(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (isMoment(input) || isDate(input) ? +input : +local__createLocal(input)) - (+res); + // Use low-level api, because this fn is low-level api. + res._d.setTime(+res._d + diff); + utils_hooks__hooks.updateOffset(res, false); + return res; + } else { + return local__createLocal(input).local(); + } + return model._isUTC ? local__createLocal(input).zone(model._offset || 0) : local__createLocal(input).local(); + } + + function getDateOffset (m) { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return -Math.round(m._d.getTimezoneOffset() / 15) * 15; + } + + // HOOKS + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + utils_hooks__hooks.updateOffset = function () {}; + + // MOMENTS + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset + // +0200, so we adjust the time as needed, to be valid. + // + // Keeping the time actually adds/subtracts (one hour) + // from the actual represented time. That is why we call updateOffset + // a second time. In case it wants us to change the offset again + // _changeInProgress == true case, then we have to adjust, because + // there is no such time in the given timezone. + function getSetOffset (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (input != null) { + if (typeof input === 'string') { + input = offsetFromString(input); + } + if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = getDateOffset(this); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.add(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + add_subtract__addSubtract(this, create__createDuration(input - offset, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + utils_hooks__hooks.updateOffset(this, true); + this._changeInProgress = null; + } + } + return this; + } else { + return this._isUTC ? offset : getDateOffset(this); + } + } + + function getSetZone (input, keepLocalTime) { + if (input != null) { + if (typeof input !== 'string') { + input = -input; + } + + this.utcOffset(input, keepLocalTime); + + return this; + } else { + return -this.utcOffset(); + } + } + + function setOffsetToUTC (keepLocalTime) { + return this.utcOffset(0, keepLocalTime); + } + + function setOffsetToLocal (keepLocalTime) { + if (this._isUTC) { + this.utcOffset(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.subtract(getDateOffset(this), 'm'); + } + } + return this; + } + + function setOffsetToParsedOffset () { + if (this._tzm) { + this.utcOffset(this._tzm); + } else if (typeof this._i === 'string') { + this.utcOffset(offsetFromString(this._i)); + } + return this; + } + + function hasAlignedHourOffset (input) { + if (!input) { + input = 0; + } + else { + input = local__createLocal(input).utcOffset(); + } + + return (this.utcOffset() - input) % 60 === 0; + } + + function isDaylightSavingTime () { + return ( + this.utcOffset() > this.clone().month(0).utcOffset() || + this.utcOffset() > this.clone().month(5).utcOffset() + ); + } + + function isDaylightSavingTimeShifted () { + if (this._a) { + var other = this._isUTC ? create_utc__createUTC(this._a) : local__createLocal(this._a); + return this.isValid() && compareArrays(this._a, other.toArray()) > 0; + } + + return false; + } + + function isLocal () { + return !this._isUTC; + } + + function isUtcOffset () { + return this._isUTC; + } + + function isUtc () { + return this._isUTC && this._offset === 0; + } + + var aspNetRegex = /(\-)?(?:(\d*)\.)?(\d+)\:(\d+)(?:\:(\d+)\.?(\d{3})?)?/; + + // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html + // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere + var create__isoRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/; + + function create__createDuration (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + diffRes; + + if (isDuration(input)) { + duration = { + ms : input._milliseconds, + d : input._days, + M : input._months + }; + } else if (typeof input === 'number') { + duration = {}; + if (key) { + duration[key] = input; + } else { + duration.milliseconds = input; + } + } else if (!!(match = aspNetRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : 0, + d : toInt(match[DATE]) * sign, + h : toInt(match[HOUR]) * sign, + m : toInt(match[MINUTE]) * sign, + s : toInt(match[SECOND]) * sign, + ms : toInt(match[MILLISECOND]) * sign + }; + } else if (!!(match = create__isoRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + duration = { + y : parseIso(match[2], sign), + M : parseIso(match[3], sign), + d : parseIso(match[4], sign), + h : parseIso(match[5], sign), + m : parseIso(match[6], sign), + s : parseIso(match[7], sign), + w : parseIso(match[8], sign) + }; + } else if (duration == null) {// checks for null or undefined + duration = {}; + } else if (typeof duration === 'object' && ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(local__createLocal(duration.from), local__createLocal(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; + } + + create__createDuration.fn = Duration.prototype; + + function parseIso (inp, sign) { + // We'd normally use ~~inp for this, but unfortunately it also + // converts floats to ints. + // inp may be undefined, so careful calling replace on it. + var res = inp && parseFloat(inp.replace(',', '.')); + // apply sign while we're at it + return (isNaN(res) ? 0 : res) * sign; + } + + function positiveMomentsDifference(base, other) { + var res = {milliseconds: 0, months: 0}; + + res.months = other.month() - base.month() + + (other.year() - base.year()) * 12; + if (base.clone().add(res.months, 'M').isAfter(other)) { + --res.months; + } + + res.milliseconds = +other - +(base.clone().add(res.months, 'M')); + + return res; + } + + function momentsDifference(base, other) { + var res; + other = cloneWithOffset(other, base); + if (base.isBefore(other)) { + res = positiveMomentsDifference(base, other); + } else { + res = positiveMomentsDifference(other, base); + res.milliseconds = -res.milliseconds; + res.months = -res.months; + } + + return res; + } + + function createAdder(direction, name) { + return function (val, period) { + var dur, tmp; + //invert the arguments, but complain about it + if (period !== null && !isNaN(+period)) { + deprecateSimple(name, 'moment().' + name + '(period, number) is deprecated. Please use moment().' + name + '(number, period).'); + tmp = val; val = period; period = tmp; + } + + val = typeof val === 'string' ? +val : val; + dur = create__createDuration(val, period); + add_subtract__addSubtract(this, dur, direction); + return this; + }; + } + + function add_subtract__addSubtract (mom, duration, isAdding, updateOffset) { + var milliseconds = duration._milliseconds, + days = duration._days, + months = duration._months; + updateOffset = updateOffset == null ? true : updateOffset; + + if (milliseconds) { + mom._d.setTime(+mom._d + milliseconds * isAdding); + } + if (days) { + get_set__set(mom, 'Date', get_set__get(mom, 'Date') + days * isAdding); + } + if (months) { + setMonth(mom, get_set__get(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + utils_hooks__hooks.updateOffset(mom, days || months); + } + } + + var add_subtract__add = createAdder(1, 'add'); + var add_subtract__subtract = createAdder(-1, 'subtract'); + + function moment_calendar__calendar (time) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're local/utc/offset or not. + var now = time || local__createLocal(), + sod = cloneWithOffset(now, this).startOf('day'), + diff = this.diff(sod, 'days', true), + format = diff < -6 ? 'sameElse' : + diff < -1 ? 'lastWeek' : + diff < 0 ? 'lastDay' : + diff < 1 ? 'sameDay' : + diff < 2 ? 'nextDay' : + diff < 7 ? 'nextWeek' : 'sameElse'; + return this.format(this.localeData().calendar(format, this, local__createLocal(now))); + } + + function clone () { + return new Moment(this); + } + + function isAfter (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = isMoment(input) ? input : local__createLocal(input); + return +this > +input; + } else { + inputMs = isMoment(input) ? +input : +local__createLocal(input); + return inputMs < +this.clone().startOf(units); + } + } + + function isBefore (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = isMoment(input) ? input : local__createLocal(input); + return +this < +input; + } else { + inputMs = isMoment(input) ? +input : +local__createLocal(input); + return +this.clone().endOf(units) < inputMs; + } + } + + function isBetween (from, to, units) { + return this.isAfter(from, units) && this.isBefore(to, units); + } + + function isSame (input, units) { + var inputMs; + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + input = isMoment(input) ? input : local__createLocal(input); + return +this === +input; + } else { + inputMs = +local__createLocal(input); + return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); + } + } + + function absFloor (number) { + if (number < 0) { + return Math.ceil(number); + } else { + return Math.floor(number); + } + } + + function diff (input, units, asFloat) { + var that = cloneWithOffset(input, this), + zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4, + delta, output; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month' || units === 'quarter') { + output = monthDiff(this, that); + if (units === 'quarter') { + output = output / 3; + } else if (units === 'year') { + output = output / 12; + } + } else { + delta = this - that; + output = units === 'second' ? delta / 1e3 : // 1000 + units === 'minute' ? delta / 6e4 : // 1000 * 60 + units === 'hour' ? delta / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (delta - zoneDelta) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (delta - zoneDelta) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + delta; + } + return asFloat ? output : absFloor(output); + } + + function monthDiff (a, b) { + // difference in months + var wholeMonthDiff = ((b.year() - a.year()) * 12) + (b.month() - a.month()), + // b is in (anchor - 1 month, anchor + 1 month) + anchor = a.clone().add(wholeMonthDiff, 'months'), + anchor2, adjust; + + if (b - anchor < 0) { + anchor2 = a.clone().add(wholeMonthDiff - 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor - anchor2); + } else { + anchor2 = a.clone().add(wholeMonthDiff + 1, 'months'); + // linear across the month + adjust = (b - anchor) / (anchor2 - anchor); + } + + return -(wholeMonthDiff + adjust); + } + + utils_hooks__hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ'; + + function toString () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + } + + function moment_format__toISOString () { + var m = this.clone().utc(); + if (0 < m.year() && m.year() <= 9999) { + if ('function' === typeof Date.prototype.toISOString) { + // native implementation is ~50x faster, use it when we can + return this.toDate().toISOString(); + } else { + return formatMoment(m, 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } else { + return formatMoment(m, 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'); + } + } + + function format (inputString) { + var output = formatMoment(this, inputString || utils_hooks__hooks.defaultFormat); + return this.localeData().postformat(output); + } + + function from (time, withoutSuffix) { + return create__createDuration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + } + + function fromNow (withoutSuffix) { + return this.from(local__createLocal(), withoutSuffix); + } + + function locale (key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = locale_locales__getLocale(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + } + + var lang = deprecate( + 'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.', + function (key) { + if (key === undefined) { + return this.localeData(); + } else { + return this.locale(key); + } + } + ); + + function localeData () { + return this._locale; + } + + function startOf (units) { + units = normalizeUnits(units); + // the following switch intentionally omits break keywords + // to utilize falling through the cases. + switch (units) { + case 'year': + this.month(0); + /* falls through */ + case 'quarter': + case 'month': + this.date(1); + /* falls through */ + case 'week': + case 'isoWeek': + case 'day': + this.hours(0); + /* falls through */ + case 'hour': + this.minutes(0); + /* falls through */ + case 'minute': + this.seconds(0); + /* falls through */ + case 'second': + this.milliseconds(0); + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } + if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; + } + + function endOf (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + } + + function to_type__valueOf () { + return +this._d - ((this._offset || 0) * 60000); + } + + function unix () { + return Math.floor(+this / 1000); + } + + function toDate () { + return this._offset ? new Date(+this) : this._d; + } + + function toArray () { + var m = this; + return [m.year(), m.month(), m.date(), m.hour(), m.minute(), m.second(), m.millisecond()]; + } + + function moment_valid__isValid () { + return valid__isValid(this); + } + + function parsingFlags () { + return extend({}, this._pf); + } + + function invalidAt () { + return this._pf.overflow; + } + + addFormatToken(0, ['gg', 2], 0, function () { + return this.weekYear() % 100; + }); + + addFormatToken(0, ['GG', 2], 0, function () { + return this.isoWeekYear() % 100; + }); + + function addWeekYearFormatToken (token, getter) { + addFormatToken(0, [token, token.length], 0, getter); + } + + addWeekYearFormatToken('gggg', 'weekYear'); + addWeekYearFormatToken('ggggg', 'weekYear'); + addWeekYearFormatToken('GGGG', 'isoWeekYear'); + addWeekYearFormatToken('GGGGG', 'isoWeekYear'); + + // ALIASES + + addUnitAlias('weekYear', 'gg'); + addUnitAlias('isoWeekYear', 'GG'); + + // PARSING + + addRegexToken('G', matchSigned); + addRegexToken('g', matchSigned); + addRegexToken('GG', match1to2, match2); + addRegexToken('gg', match1to2, match2); + addRegexToken('GGGG', match1to4, match4); + addRegexToken('gggg', match1to4, match4); + addRegexToken('GGGGG', match1to6, match6); + addRegexToken('ggggg', match1to6, match6); + + addWeekParseToken(['gggg', 'ggggg', 'GGGG', 'GGGGG'], function (input, week, config, token) { + week[token.substr(0, 2)] = toInt(input); + }); + + addWeekParseToken(['gg', 'GG'], function (input, week, config, token) { + week[token] = utils_hooks__hooks.parseTwoDigitYear(input); + }); + + // HELPERS + + function weeksInYear(year, dow, doy) { + return weekOfYear(local__createLocal([year, 11, 31 + dow - doy]), dow, doy).week; + } + + // MOMENTS + + function getSetWeekYear (input) { + var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; + return input == null ? year : this.add((input - year), 'y'); + } + + function getSetISOWeekYear (input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + } + + function getISOWeeksInYear () { + return weeksInYear(this.year(), 1, 4); + } + + function getWeeksInYear () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + } + + addFormatToken('Q', 0, 0, 'quarter'); + + // ALIASES + + addUnitAlias('quarter', 'Q'); + + // PARSING + + addRegexToken('Q', match1); + addParseToken('Q', function (input, array) { + array[MONTH] = (toInt(input) - 1) * 3; + }); + + // MOMENTS + + function getSetQuarter (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + } + + addFormatToken('D', ['DD', 2], 'Do', 'date'); + + // ALIASES + + addUnitAlias('date', 'D'); + + // PARSING + + addRegexToken('D', match1to2); + addRegexToken('DD', match1to2, match2); + addRegexToken('Do', function (isStrict, locale) { + return isStrict ? locale._ordinalParse : locale._ordinalParseLenient; + }); + + addParseToken(['D', 'DD'], DATE); + addParseToken('Do', function (input, array) { + array[DATE] = toInt(input.match(match1to2)[0], 10); + }); + + // MOMENTS + + var getSetDayOfMonth = makeGetSet('Date', true); + + addFormatToken('d', 0, 'do', 'day'); + + addFormatToken('dd', 0, 0, function (format) { + return this.localeData().weekdaysMin(this, format); + }); + + addFormatToken('ddd', 0, 0, function (format) { + return this.localeData().weekdaysShort(this, format); + }); + + addFormatToken('dddd', 0, 0, function (format) { + return this.localeData().weekdays(this, format); + }); + + addFormatToken('e', 0, 0, 'weekday'); + addFormatToken('E', 0, 0, 'isoWeekday'); + + // ALIASES + + addUnitAlias('day', 'd'); + addUnitAlias('weekday', 'e'); + addUnitAlias('isoWeekday', 'E'); + + // PARSING + + addRegexToken('d', match1to2); + addRegexToken('e', match1to2); + addRegexToken('E', match1to2); + addRegexToken('dd', matchWord); + addRegexToken('ddd', matchWord); + addRegexToken('dddd', matchWord); + + addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config) { + var weekday = config._locale.weekdaysParse(input); + // if we didn't get a weekday name, mark the date as invalid + if (weekday != null) { + week.d = weekday; + } else { + config._pf.invalidWeekday = input; + } + }); + + addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) { + week[token] = toInt(input); + }); + + // HELPERS + + function parseWeekday(input, locale) { + if (typeof input === 'string') { + if (!isNaN(input)) { + input = parseInt(input, 10); + } + else { + input = locale.weekdaysParse(input); + if (typeof input !== 'number') { + return null; + } + } + } + return input; + } + + // LOCALES + + var defaultLocaleWeekdays = 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'); + function localeWeekdays (m) { + return this._weekdays[m.day()]; + } + + var defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'); + function localeWeekdaysShort (m) { + return this._weekdaysShort[m.day()]; + } + + var defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'); + function localeWeekdaysMin (m) { + return this._weekdaysMin[m.day()]; + } + + function localeWeekdaysParse (weekdayName) { + var i, mom, regex; + + if (!this._weekdaysParse) { + this._weekdaysParse = []; + } + + for (i = 0; i < 7; i++) { + // make the regex if we don't have it already + if (!this._weekdaysParse[i]) { + mom = local__createLocal([2000, 1]).day(i); + regex = '^' + this.weekdays(mom, '') + '|^' + this.weekdaysShort(mom, '') + '|^' + this.weekdaysMin(mom, ''); + this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i'); + } + // test the regex + if (this._weekdaysParse[i].test(weekdayName)) { + return i; + } + } + } + + // MOMENTS + + function getSetDayOfWeek (input) { + var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay(); + if (input != null) { + input = parseWeekday(input, this.localeData()); + return this.add(input - day, 'd'); + } else { + return day; + } + } + + function getSetLocaleDayOfWeek (input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + } + + function getSetISODayOfWeek (input) { + // behaves the same as moment#day except + // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6) + // as a setter, sunday should belong to the previous week. + return input == null ? this.day() || 7 : this.day(this.day() % 7 ? input : input - 7); + } + + addFormatToken('H', ['HH', 2], 0, 'hour'); + addFormatToken('h', ['hh', 2], 0, function () { + return this.hours() % 12 || 12; + }); + + function meridiem (token, lowercase) { + addFormatToken(token, 0, 0, function () { + return this.localeData().meridiem(this.hours(), this.minutes(), lowercase); + }); + } + + meridiem('a', true); + meridiem('A', false); + + // ALIASES + + addUnitAlias('hour', 'h'); + + // PARSING + + function matchMeridiem (isStrict, locale) { + return locale._meridiemParse; + } + + addRegexToken('a', matchMeridiem); + addRegexToken('A', matchMeridiem); + addRegexToken('H', match1to2); + addRegexToken('h', match1to2); + addRegexToken('HH', match1to2, match2); + addRegexToken('hh', match1to2, match2); + + addParseToken(['H', 'HH'], HOUR); + addParseToken(['a', 'A'], function (input, array, config) { + config._isPm = config._locale.isPM(input); + config._meridiem = input; + }); + addParseToken(['h', 'hh'], function (input, array, config) { + array[HOUR] = toInt(input); + config._pf.bigHour = true; + }); + + // LOCALES + + function localeIsPM (input) { + // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays + // Using charAt should be more compatible. + return ((input + '').toLowerCase().charAt(0) === 'p'); + } + + var defaultLocaleMeridiemParse = /[ap]\.?m?\.?/i; + function localeMeridiem (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + } + + + // MOMENTS + + // Setting the hour should keep the time, because the user explicitly + // specified which hour he wants. So trying to maintain the same hour (in + // a new timezone) makes sense. Adding/subtracting hours does not follow + // this rule. + var getSetHour = makeGetSet('Hours', true); + + addFormatToken('m', ['mm', 2], 0, 'minute'); + + // ALIASES + + addUnitAlias('minute', 'm'); + + // PARSING + + addRegexToken('m', match1to2); + addRegexToken('mm', match1to2, match2); + addParseToken(['m', 'mm'], MINUTE); + + // MOMENTS + + var getSetMinute = makeGetSet('Minutes', false); + + addFormatToken('s', ['ss', 2], 0, 'second'); + + // ALIASES + + addUnitAlias('second', 's'); + + // PARSING + + addRegexToken('s', match1to2); + addRegexToken('ss', match1to2, match2); + addParseToken(['s', 'ss'], SECOND); + + // MOMENTS + + var getSetSecond = makeGetSet('Seconds', false); + + addFormatToken('S', 0, 0, function () { + return ~~(this.millisecond() / 100); + }); + + addFormatToken(0, ['SS', 2], 0, function () { + return ~~(this.millisecond() / 10); + }); + + function millisecond__milliseconds (token) { + addFormatToken(0, [token, 3], 0, 'millisecond'); + } + + millisecond__milliseconds('SSS'); + millisecond__milliseconds('SSSS'); + + // ALIASES + + addUnitAlias('millisecond', 'ms'); + + // PARSING + + addRegexToken('S', match1to3, match1); + addRegexToken('SS', match1to3, match2); + addRegexToken('SSS', match1to3, match3); + addRegexToken('SSSS', matchUnsigned); + addParseToken(['S', 'SS', 'SSS', 'SSSS'], function (input, array) { + array[MILLISECOND] = toInt(('0.' + input) * 1000); + }); + + // MOMENTS + + var getSetMillisecond = makeGetSet('Milliseconds', false); + + addFormatToken('z', 0, 0, 'zoneAbbr'); + addFormatToken('zz', 0, 0, 'zoneName'); + + // MOMENTS + + function getZoneAbbr () { + return this._isUTC ? 'UTC' : ''; + } + + function getZoneName () { + return this._isUTC ? 'Coordinated Universal Time' : ''; + } + + var momentPrototype__proto = Moment.prototype; + + momentPrototype__proto.add = add_subtract__add; + momentPrototype__proto.calendar = moment_calendar__calendar; + momentPrototype__proto.clone = clone; + momentPrototype__proto.diff = diff; + momentPrototype__proto.endOf = endOf; + momentPrototype__proto.format = format; + momentPrototype__proto.from = from; + momentPrototype__proto.fromNow = fromNow; + momentPrototype__proto.get = getSet; + momentPrototype__proto.invalidAt = invalidAt; + momentPrototype__proto.isAfter = isAfter; + momentPrototype__proto.isBefore = isBefore; + momentPrototype__proto.isBetween = isBetween; + momentPrototype__proto.isSame = isSame; + momentPrototype__proto.isValid = moment_valid__isValid; + momentPrototype__proto.lang = lang; + momentPrototype__proto.locale = locale; + momentPrototype__proto.localeData = localeData; + momentPrototype__proto.max = prototypeMax; + momentPrototype__proto.min = prototypeMin; + momentPrototype__proto.parsingFlags = parsingFlags; + momentPrototype__proto.set = getSet; + momentPrototype__proto.startOf = startOf; + momentPrototype__proto.subtract = add_subtract__subtract; + momentPrototype__proto.toArray = toArray; + momentPrototype__proto.toDate = toDate; + momentPrototype__proto.toISOString = moment_format__toISOString; + momentPrototype__proto.toJSON = moment_format__toISOString; + momentPrototype__proto.toString = toString; + momentPrototype__proto.unix = unix; + momentPrototype__proto.valueOf = to_type__valueOf; + + // Year + momentPrototype__proto.year = getSetYear; + momentPrototype__proto.isLeapYear = getIsLeapYear; + + // Week Year + momentPrototype__proto.weekYear = getSetWeekYear; + momentPrototype__proto.isoWeekYear = getSetISOWeekYear; + + // Quarter + momentPrototype__proto.quarter = momentPrototype__proto.quarters = getSetQuarter; + + // Month + momentPrototype__proto.month = getSetMonth; + momentPrototype__proto.daysInMonth = getDaysInMonth; + + // Week + momentPrototype__proto.week = momentPrototype__proto.weeks = getSetWeek; + momentPrototype__proto.isoWeek = momentPrototype__proto.isoWeeks = getSetISOWeek; + momentPrototype__proto.weeksInYear = getWeeksInYear; + momentPrototype__proto.isoWeeksInYear = getISOWeeksInYear; + + // Day + momentPrototype__proto.date = getSetDayOfMonth; + momentPrototype__proto.day = momentPrototype__proto.days = getSetDayOfWeek; + momentPrototype__proto.weekday = getSetLocaleDayOfWeek; + momentPrototype__proto.isoWeekday = getSetISODayOfWeek; + momentPrototype__proto.dayOfYear = getSetDayOfYear; + + // Hour + momentPrototype__proto.hour = momentPrototype__proto.hours = getSetHour; + + // Minute + momentPrototype__proto.minute = momentPrototype__proto.minutes = getSetMinute; + + // Second + momentPrototype__proto.second = momentPrototype__proto.seconds = getSetSecond; + + // Millisecond + momentPrototype__proto.millisecond = momentPrototype__proto.milliseconds = getSetMillisecond; + + // Offset + momentPrototype__proto.utcOffset = getSetOffset; + momentPrototype__proto.utc = setOffsetToUTC; + momentPrototype__proto.local = setOffsetToLocal; + momentPrototype__proto.parseZone = setOffsetToParsedOffset; + momentPrototype__proto.hasAlignedHourOffset = hasAlignedHourOffset; + momentPrototype__proto.isDST = isDaylightSavingTime; + momentPrototype__proto.isDSTShifted = isDaylightSavingTimeShifted; + momentPrototype__proto.isLocal = isLocal; + momentPrototype__proto.isUtcOffset = isUtcOffset; + momentPrototype__proto.isUtc = isUtc; + momentPrototype__proto.isUTC = isUtc; + + // Timezone + momentPrototype__proto.zoneAbbr = getZoneAbbr; + momentPrototype__proto.zoneName = getZoneName; + + // Deprecations + momentPrototype__proto.dates = deprecate('dates accessor is deprecated. Use date instead.', getSetDayOfMonth); + momentPrototype__proto.months = deprecate('months accessor is deprecated. Use month instead', getSetMonth); + momentPrototype__proto.years = deprecate('years accessor is deprecated. Use year instead', getSetYear); + momentPrototype__proto.zone = deprecate('moment().zone is deprecated, use moment().utcOffset instead. https://github.com/moment/moment/issues/1779', getSetZone); + + var momentPrototype = momentPrototype__proto; + + function moment__createUnix (input) { + return local__createLocal(input * 1000); + } + + function moment__createInZone () { + return local__createLocal.apply(null, arguments).parseZone(); + } + + var defaultCalendar = { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }; + + function locale_calendar__calendar (key, mom, now) { + var output = this._calendar[key]; + return typeof output === 'function' ? output.call(mom, now) : output; + } + + var defaultLongDateFormat = { + LTS : 'h:mm:ss A', + LT : 'h:mm A', + L : 'MM/DD/YYYY', + LL : 'MMMM D, YYYY', + LLL : 'MMMM D, YYYY LT', + LLLL : 'dddd, MMMM D, YYYY LT' + }; + + function longDateFormat (key) { + var output = this._longDateFormat[key]; + if (!output && this._longDateFormat[key.toUpperCase()]) { + output = this._longDateFormat[key.toUpperCase()].replace(/MMMM|MM|DD|dddd/g, function (val) { + return val.slice(1); + }); + this._longDateFormat[key] = output; + } + return output; + } + + var defaultInvalidDate = 'Invalid date'; + + function invalidDate () { + return this._invalidDate; + } + + var defaultOrdinal = '%d'; + var defaultOrdinalParse = /\d{1,2}/; + + function ordinal (number) { + return this._ordinal.replace('%d', number); + } + + function preParsePostFormat (string) { + return string; + } + + var defaultRelativeTime = { + future : 'in %s', + past : '%s ago', + s : 'a few seconds', + m : 'a minute', + mm : '%d minutes', + h : 'an hour', + hh : '%d hours', + d : 'a day', + dd : '%d days', + M : 'a month', + MM : '%d months', + y : 'a year', + yy : '%d years' + }; + + function relative__relativeTime (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (typeof output === 'function') ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); + } + + function pastFuture (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + } + + function locale_set__set (config) { + var prop, i; + for (i in config) { + prop = config[i]; + if (typeof prop === 'function') { + this[i] = prop; + } else { + this['_' + i] = prop; + } + } + // Lenient ordinal parsing accepts just a number in addition to + // number + (possibly) stuff coming from _ordinalParseLenient. + this._ordinalParseLenient = new RegExp(this._ordinalParse.source + '|' + /\d{1,2}/.source); + } + + var prototype__proto = Locale.prototype; + + prototype__proto._calendar = defaultCalendar; + prototype__proto.calendar = locale_calendar__calendar; + prototype__proto._longDateFormat = defaultLongDateFormat; + prototype__proto.longDateFormat = longDateFormat; + prototype__proto._invalidDate = defaultInvalidDate; + prototype__proto.invalidDate = invalidDate; + prototype__proto._ordinal = defaultOrdinal; + prototype__proto.ordinal = ordinal; + prototype__proto._ordinalParse = defaultOrdinalParse; + prototype__proto.preparse = preParsePostFormat; + prototype__proto.postformat = preParsePostFormat; + prototype__proto._relativeTime = defaultRelativeTime; + prototype__proto.relativeTime = relative__relativeTime; + prototype__proto.pastFuture = pastFuture; + prototype__proto.set = locale_set__set; + + // Month + prototype__proto.months = localeMonths; + prototype__proto._months = defaultLocaleMonths; + prototype__proto.monthsShort = localeMonthsShort; + prototype__proto._monthsShort = defaultLocaleMonthsShort; + prototype__proto.monthsParse = localeMonthsParse; + + // Week + prototype__proto.week = localeWeek; + prototype__proto._week = defaultLocaleWeek; + prototype__proto.firstDayOfYear = localeFirstDayOfYear; + prototype__proto.firstDayOfWeek = localeFirstDayOfWeek; + + // Day of Week + prototype__proto.weekdays = localeWeekdays; + prototype__proto._weekdays = defaultLocaleWeekdays; + prototype__proto.weekdaysMin = localeWeekdaysMin; + prototype__proto._weekdaysMin = defaultLocaleWeekdaysMin; + prototype__proto.weekdaysShort = localeWeekdaysShort; + prototype__proto._weekdaysShort = defaultLocaleWeekdaysShort; + prototype__proto.weekdaysParse = localeWeekdaysParse; + + // Hours + prototype__proto.isPM = localeIsPM; + prototype__proto._meridiemParse = defaultLocaleMeridiemParse; + prototype__proto.meridiem = localeMeridiem; + + function lists__get (format, index, field, setter) { + var locale = locale_locales__getLocale(); + var utc = create_utc__createUTC().set(setter, index); + return locale[field](utc, format); + } + + function list (format, index, field, count, setter) { + if (typeof format === 'number') { + index = format; + format = undefined; + } + + format = format || ''; + + if (index != null) { + return lists__get(format, index, field, setter); + } + + var i; + var out = []; + for (i = 0; i < count; i++) { + out[i] = lists__get(format, i, field, setter); + } + return out; + } + + function lists__listMonths (format, index) { + return list(format, index, 'months', 12, 'month'); + } + + function lists__listMonthsShort (format, index) { + return list(format, index, 'monthsShort', 12, 'month'); + } + + function lists__listWeekdays (format, index) { + return list(format, index, 'weekdays', 7, 'day'); + } + + function lists__listWeekdaysShort (format, index) { + return list(format, index, 'weekdaysShort', 7, 'day'); + } + + function lists__listWeekdaysMin (format, index) { + return list(format, index, 'weekdaysMin', 7, 'day'); + } + + locale_locales__getSetGlobalLocale('en', { + ordinalParse: /\d{1,2}(th|st|nd|rd)/, + ordinal : function (number) { + var b = number % 10, + output = (toInt(number % 100 / 10) === 1) ? 'th' : + (b === 1) ? 'st' : + (b === 2) ? 'nd' : + (b === 3) ? 'rd' : 'th'; + return number + output; + } + }); + + // Side effect imports + utils_hooks__hooks.lang = deprecate('moment.lang is deprecated. Use moment.locale instead.', locale_locales__getSetGlobalLocale); + utils_hooks__hooks.langData = deprecate('moment.langData is deprecated. Use moment.localeData instead.', locale_locales__getLocale); + + var mathAbs = Math.abs; + + function duration_abs__abs () { + var data = this._data; + + this._milliseconds = mathAbs(this._milliseconds); + this._days = mathAbs(this._days); + this._months = mathAbs(this._months); + + data.milliseconds = mathAbs(data.milliseconds); + data.seconds = mathAbs(data.seconds); + data.minutes = mathAbs(data.minutes); + data.hours = mathAbs(data.hours); + data.months = mathAbs(data.months); + data.years = mathAbs(data.years); + + return this; + } + + function duration_add_subtract__addSubtract (duration, input, value, direction) { + var other = create__createDuration(input, value); + + duration._milliseconds += direction * other._milliseconds; + duration._days += direction * other._days; + duration._months += direction * other._months; + + return duration._bubble(); + } + + // supports only 2.0-style add(1, 's') or add(duration) + function duration_add_subtract__add (input, value) { + return duration_add_subtract__addSubtract(this, input, value, 1); + } + + // supports only 2.0-style subtract(1, 's') or subtract(duration) + function duration_add_subtract__subtract (input, value) { + return duration_add_subtract__addSubtract(this, input, value, -1); + } + + function bubble () { + var milliseconds = this._milliseconds; + var days = this._days; + var months = this._months; + var data = this._data; + var seconds, minutes, hours, years = 0; + + // The following code bubbles up values, see the tests for + // examples of what that means. + data.milliseconds = milliseconds % 1000; + + seconds = absFloor(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absFloor(seconds / 60); + data.minutes = minutes % 60; + + hours = absFloor(minutes / 60); + data.hours = hours % 24; + + days += absFloor(hours / 24); + + // Accurately convert days to years, assume start from year 0. + years = absFloor(daysToYears(days)); + days -= absFloor(yearsToDays(years)); + + // 30 days to a month + // TODO (iskren): Use anchor date (like 1st Jan) to compute this. + months += absFloor(days / 30); + days %= 30; + + // 12 months -> 1 year + years += absFloor(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + + return this; + } + + function daysToYears (days) { + // 400 years have 146097 days (taking into account leap year rules) + return days * 400 / 146097; + } + + function yearsToDays (years) { + // years * 365 + absFloor(years / 4) - + // absFloor(years / 100) + absFloor(years / 400); + return years * 146097 / 400; + } + + function as (units) { + var days; + var months; + var milliseconds = this._milliseconds; + + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + milliseconds / 864e5; + months = this._months + daysToYears(days) * 12; + return units === 'month' ? months : months / 12; + } else { + // handle milliseconds separately because of floating point math errors (issue #1867) + days = this._days + Math.round(yearsToDays(this._months / 12)); + switch (units) { + case 'week' : return days / 7 + milliseconds / 6048e5; + case 'day' : return days + milliseconds / 864e5; + case 'hour' : return days * 24 + milliseconds / 36e5; + case 'minute' : return days * 24 * 60 + milliseconds / 6e4; + case 'second' : return days * 24 * 60 * 60 + milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } + } + + // TODO: Use this.as('ms')? + function duration_as__valueOf () { + return ( + this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6 + ); + } + + function makeAs (alias) { + return function () { + return this.as(alias); + }; + } + + var asMilliseconds = makeAs('ms'); + var asSeconds = makeAs('s'); + var asMinutes = makeAs('m'); + var asHours = makeAs('h'); + var asDays = makeAs('d'); + var asWeeks = makeAs('w'); + var asMonths = makeAs('M'); + var asYears = makeAs('y'); + + function duration_get__get (units) { + units = normalizeUnits(units); + return this[units + 's'](); + } + + function makeGetter(name) { + return function () { + return this._data[name]; + }; + } + + var duration_get__milliseconds = makeGetter('milliseconds'); + var seconds = makeGetter('seconds'); + var minutes = makeGetter('minutes'); + var hours = makeGetter('hours'); + var days = makeGetter('days'); + var months = makeGetter('months'); + var years = makeGetter('years'); + + function weeks () { + return absFloor(this.days() / 7); + } + + var round = Math.round; + var thresholds = { + s: 45, // seconds to minute + m: 45, // minutes to hour + h: 22, // hours to day + d: 26, // days to month + M: 11 // months to year + }; + + // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize + function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) { + return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture); + } + + function duration_humanize__relativeTime (posNegDuration, withoutSuffix, locale) { + var duration = create__createDuration(posNegDuration).abs(); + var seconds = round(duration.as('s')); + var minutes = round(duration.as('m')); + var hours = round(duration.as('h')); + var days = round(duration.as('d')); + var months = round(duration.as('M')); + var years = round(duration.as('y')); + + var a = seconds < thresholds.s && ['s', seconds] || + minutes === 1 && ['m'] || + minutes < thresholds.m && ['mm', minutes] || + hours === 1 && ['h'] || + hours < thresholds.h && ['hh', hours] || + days === 1 && ['d'] || + days < thresholds.d && ['dd', days] || + months === 1 && ['M'] || + months < thresholds.M && ['MM', months] || + years === 1 && ['y'] || ['yy', years]; + + a[2] = withoutSuffix; + a[3] = +posNegDuration > 0; + a[4] = locale; + return substituteTimeAgo.apply(null, a); + } + + // This function allows you to set a threshold for relative time strings + function duration_humanize__getSetRelativeTimeThreshold (threshold, limit) { + if (thresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return thresholds[threshold]; + } + thresholds[threshold] = limit; + return true; + } + + function humanize (withSuffix) { + var locale = this.localeData(); + var output = duration_humanize__relativeTime(this, !withSuffix, locale); + + if (withSuffix) { + output = locale.pastFuture(+this, output); + } + + return locale.postformat(output); + } + + var iso_string__abs = Math.abs; + + function iso_string__toISOString() { + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var Y = iso_string__abs(this.years()); + var M = iso_string__abs(this.months()); + var D = iso_string__abs(this.days()); + var h = iso_string__abs(this.hours()); + var m = iso_string__abs(this.minutes()); + var s = iso_string__abs(this.seconds() + this.milliseconds() / 1000); + var total = this.asSeconds(); + + if (!total) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (total < 0 ? '-' : '') + + 'P' + + (Y ? Y + 'Y' : '') + + (M ? M + 'M' : '') + + (D ? D + 'D' : '') + + ((h || m || s) ? 'T' : '') + + (h ? h + 'H' : '') + + (m ? m + 'M' : '') + + (s ? s + 'S' : ''); + } + + var duration_prototype__proto = Duration.prototype; + + duration_prototype__proto.abs = duration_abs__abs; + duration_prototype__proto.add = duration_add_subtract__add; + duration_prototype__proto.subtract = duration_add_subtract__subtract; + duration_prototype__proto.as = as; + duration_prototype__proto.asMilliseconds = asMilliseconds; + duration_prototype__proto.asSeconds = asSeconds; + duration_prototype__proto.asMinutes = asMinutes; + duration_prototype__proto.asHours = asHours; + duration_prototype__proto.asDays = asDays; + duration_prototype__proto.asWeeks = asWeeks; + duration_prototype__proto.asMonths = asMonths; + duration_prototype__proto.asYears = asYears; + duration_prototype__proto.valueOf = duration_as__valueOf; + duration_prototype__proto._bubble = bubble; + duration_prototype__proto.get = duration_get__get; + duration_prototype__proto.milliseconds = duration_get__milliseconds; + duration_prototype__proto.seconds = seconds; + duration_prototype__proto.minutes = minutes; + duration_prototype__proto.hours = hours; + duration_prototype__proto.days = days; + duration_prototype__proto.weeks = weeks; + duration_prototype__proto.months = months; + duration_prototype__proto.years = years; + duration_prototype__proto.humanize = humanize; + duration_prototype__proto.toISOString = iso_string__toISOString; + duration_prototype__proto.toString = iso_string__toISOString; + duration_prototype__proto.toJSON = iso_string__toISOString; + duration_prototype__proto.locale = locale; + duration_prototype__proto.localeData = localeData; + + // Deprecations + duration_prototype__proto.toIsoString = deprecate('toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)', iso_string__toISOString); + duration_prototype__proto.lang = lang; + + // Side effect imports + + addFormatToken('X', 0, 0, 'unix'); + addFormatToken('x', 0, 0, 'valueOf'); + + // PARSING + + addRegexToken('x', matchSigned); + addRegexToken('X', matchTimestamp); + addParseToken('X', function (input, array, config) { + config._d = new Date(parseFloat(input, 10) * 1000); + }); + addParseToken('x', function (input, array, config) { + config._d = new Date(toInt(input)); + }); + + // Side effect imports + + + utils_hooks__hooks.version = '2.10.2'; + + setHookCallback(local__createLocal); + + utils_hooks__hooks.fn = momentPrototype; + utils_hooks__hooks.min = min; + utils_hooks__hooks.max = max; + utils_hooks__hooks.utc = create_utc__createUTC; + utils_hooks__hooks.unix = moment__createUnix; + utils_hooks__hooks.months = lists__listMonths; + utils_hooks__hooks.isDate = isDate; + utils_hooks__hooks.locale = locale_locales__getSetGlobalLocale; + utils_hooks__hooks.invalid = valid__createInvalid; + utils_hooks__hooks.duration = create__createDuration; + utils_hooks__hooks.isMoment = isMoment; + utils_hooks__hooks.weekdays = lists__listWeekdays; + utils_hooks__hooks.parseZone = moment__createInZone; + utils_hooks__hooks.localeData = locale_locales__getLocale; + utils_hooks__hooks.isDuration = isDuration; + utils_hooks__hooks.monthsShort = lists__listMonthsShort; + utils_hooks__hooks.weekdaysMin = lists__listWeekdaysMin; + utils_hooks__hooks.defineLocale = defineLocale; + utils_hooks__hooks.weekdaysShort = lists__listWeekdaysShort; + utils_hooks__hooks.normalizeUnits = normalizeUnits; + utils_hooks__hooks.relativeTimeThreshold = duration_humanize__getSetRelativeTimeThreshold; + + var _moment = utils_hooks__hooks; + + return _moment; + +})); +},{}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/persistence/MessagePersistence.coffee":[function(require,module,exports){ +var MessageActions; + +MessageActions = require('../actions/MessageActions.coffee'); + +module.exports = { + listenStation: function(station, since) { + var $this; + console.log('listen station'); + console.log(arguments); + $this = this; + return window.urb.subscribe({ + appl: "talk", + path: "/f/" + station + "/" + since + }, function(err, res) { + var ref, ref1; + if (err || !res.data) { + console.log('/f/ err!'); + console.log(err); + console.log(res); + $this.listenStation(station, since); + return; + } + console.log('/f/'); + console.log(res.data); + if (res.data.ok === true) { + MessageActions.listeningStation(station); + } + if ((ref = res.data) != null ? (ref1 = ref.grams) != null ? ref1.tele : void 0 : void 0) { + return MessageActions.loadMessages(res.data.grams); + } + }); + }, + get: function(station, start, end) { + end = window.urb.util.numDot(end); + start = window.urb.util.numDot(start); + return window.urb.subscribe({ + appl: "talk", + path: "/f/" + station + "/" + end + "/" + start + }, function(err, res) { + var ref, ref1; + if (err || !res.data) { + console.log('/f/ /e/s err'); + console.log(err); + return; + } + console.log('/f/ /e/s'); + console.log(res); + if ((ref = res.data) != null ? (ref1 = ref.grams) != null ? ref1.tele : void 0 : void 0) { + MessageActions.loadMessages(res.data.grams, true); + return window.urb.unsubscribe({ + appl: "talk", + path: "/f/" + station + "/" + end + "/" + start + }, function(err, res) { + console.log('done'); + return console.log(res); + }); + } + }); + }, + sendMessage: function(message, cb) { + return window.urb.send({ + appl: "talk", + mark: "talk-command", + data: { + publish: [message] + } + }, function(err, res) { + console.log('sent'); + console.log(arguments); + if (cb) { + return cb(err, res); + } + }); + } +}; + + + +},{"../actions/MessageActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/actions/MessageActions.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/persistence/StationPersistence.coffee":[function(require,module,exports){ +var StationActions; + +StationActions = require('../actions/StationActions.coffee'); + +module.exports = { + createStation: function(name, cb) { + return window.urb.send({ + appl: "talk", + mark: "talk-command", + data: { + design: { + party: name, + config: { + sources: [], + caption: "", + cordon: { + posture: "white", + list: [] + } + } + } + } + }, cb); + }, + removeStation: function(name, cb) { + return window.urb.send({ + appl: "talk", + mark: "talk-command", + data: { + design: { + party: name, + config: null + } + } + }, cb); + }, + setSources: function(station, ship, sources) { + var send; + send = { + appl: "talk", + mark: "talk-command", + data: { + design: { + party: station, + config: { + sources: sources, + caption: "", + cordon: { + posture: "white", + list: [] + } + } + } + } + }; + return window.urb.send(send, function(err, res) { + console.log('talk-command'); + return console.log(arguments); + }); + }, + members: function() { + return window.urb.subscribe({ + appl: "talk", + path: "/a/court" + }, function(err, res) { + var ref, ref1; + if (err || !res) { + console.log('/a/ err'); + console.log(err); + return; + } + console.log('/a/'); + console.log(res.data); + if ((ref = res.data) != null ? (ref1 = ref.group) != null ? ref1.global : void 0 : void 0) { + return StationActions.loadMembers(res.data.group.global); + } + }); + }, + listen: function() { + return window.urb.subscribe({ + appl: "talk", + path: "/" + }, function(err, res) { + if (err || !res.data) { + console.log('/ err'); + console.log(err); + return; + } + console.log('/'); + console.log(res.data); + if (res.data.house) { + return StationActions.loadStations(res.data.house); + } + }); + }, + listenStation: function(station) { + return window.urb.subscribe({ + appl: "talk", + path: "/ax/" + station + }, function(err, res) { + var ref; + if (err || !res) { + console.log('/ax/ err'); + console.log(err); + return; + } + console.log('/ax/'); + console.log(res.data); + if (res.data.ok === true) { + StationActions.listeningStation(station); + } + if (res.data.group) { + res.data.group.global[window.util.mainStationPath(window.urb.user)] = res.data.group.local; + StationActions.loadMembers(res.data.group.global); + } + if ((ref = res.data.cabal) != null ? ref.loc : void 0) { + return StationActions.loadConfig(station, res.data.cabal.loc); + } + }); + } +}; + + + +},{"../actions/StationActions.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/actions/StationActions.coffee"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/stores/MessageStore.coffee":[function(require,module,exports){ +var EventEmitter, MessageDispatcher, MessageStore, _fetching, _last, _listening, _messages, _station, _typing, moment; + +moment = require('moment-timezone'); + +EventEmitter = require('events').EventEmitter; + +MessageDispatcher = require('../dispatcher/Dispatcher.coffee'); + +_messages = {}; + +_fetching = false; + +_last = null; + +_station = null; + +_listening = []; + +_typing = false; + +MessageStore = _.merge(new EventEmitter, { + removeChangeListener: function(cb) { + return this.removeListener("change", cb); + }, + emitChange: function() { + return this.emit('change'); + }, + addChangeListener: function(cb) { + return this.on('change', cb); + }, + leadingZero: function(str) { + if (Number(str) < 10) { + return "0" + str; + } else { + return str; + } + }, + convertDate: function(time) { + var d; + time = time.substr(1).split("."); + time[1] = this.leadingZero(time[1]); + time[2] = this.leadingZero(time[2]); + d = new moment(time[0] + "-" + time[1] + "-" + time[2] + "T" + time[4] + ":" + time[5] + ":" + time[6] + "Z"); + d.tz("Europe/London"); + return d; + }, + getListening: function() { + return _listening; + }, + getTyping: function() { + return _typing; + }, + getLastAudience: function() { + var messages; + if (_.keys(_messages).length === 0) { + return []; + } + messages = _.sortBy(_messages, function(_message) { + return _message.thought.statement.time; + }); + return _.keys(messages[messages.length - 1].thought.audience); + }, + setTyping: function(state) { + return _typing = state; + }, + setListening: function(station) { + if (_listening.indexOf(station) !== -1) { + return console.log('already listening on that station (somehow).'); + } else { + return _listening.push(station); + } + }, + setStation: function(station) { + return _station = station; + }, + sendMessage: function(message) { + return _messages[message.thought.serial] = message; + }, + loadMessages: function(messages, last, get) { + var k, serial, v; + for (k in messages) { + v = messages[k]; + serial = v.thought.serial; + v.key = serial; + _messages[serial] = v; + } + if (last < _last || _last === null || get === true) { + _last = last; + } + return _fetching = false; + }, + getAll: function() { + return _.values(_messages); + }, + getFetching: function() { + return _fetching; + }, + setFetching: function(state) { + return _fetching = state; + }, + getLast: function() { + return _last; + } +}); + +MessageStore.setMaxListeners(100); + +MessageStore.dispatchToken = MessageDispatcher.register(function(payload) { + var action; + action = payload.action; + switch (action.type) { + case 'station-switch': + MessageStore.setStation(action.station); + break; + case 'messages-listen': + MessageStore.setListening(action.station); + MessageStore.emitChange(); + break; + case 'messages-typing': + MessageStore.setTyping(action.state); + MessageStore.emitChange(); + break; + case 'messages-fetch': + MessageStore.setFetching(true); + MessageStore.emitChange(); + break; + case 'messages-load': + MessageStore.loadMessages(action.messages, action.last, action.get); + MessageStore.emitChange(); + break; + case 'message-load': + MessageStore.loadMessage(action.time, action.message, action.author); + MessageStore.emitChange(); + break; + case 'message-send': + MessageStore.sendMessage(action.message); + MessageStore.emitChange(); + break; + } +}); + +module.exports = MessageStore; + + + +},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js","moment-timezone":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/node_modules/moment-timezone/index.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/stores/StationStore.coffee":[function(require,module,exports){ +var EventEmitter, StationDispatcher, StationStore, _audience, _config, _listening, _members, _station, _stations, _typing, _validAudience; + +EventEmitter = require('events').EventEmitter; + +StationDispatcher = require('../dispatcher/Dispatcher.coffee'); + +_audience = []; + +_members = {}; + +_stations = []; + +_listening = []; + +_station = null; + +_config = {}; + +_typing = {}; + +_validAudience = true; + +StationStore = _.merge(new EventEmitter, { + removeChangeListener: function(cb) { + return this.removeListener("change", cb); + }, + emitChange: function() { + return this.emit('change'); + }, + addChangeListener: function(cb) { + return this.on('change', cb); + }, + getAudience: function() { + return _audience; + }, + setAudience: function(audience) { + return _audience = audience; + }, + getValidAudience: function() { + return _validAudience; + }, + setValidAudience: function(valid) { + return _validAudience = valid; + }, + toggleAudience: function(station) { + if (_audience.indexOf(station) !== -1) { + return _audience.splice(_audience.indexOf(station), 1); + } else { + return _audience.push(station); + } + }, + loadConfig: function(station, config) { + return _config[station] = config; + }, + getConfigs: function() { + return _config; + }, + getConfig: function(station) { + return _config[station]; + }, + getMember: function(ship) { + return { + ship: ship + }; + }, + loadMembers: function(members) { + var list, member, presence, results, station; + _members = {}; + results = []; + for (station in members) { + list = members[station]; + results.push((function() { + var results1; + results1 = []; + for (member in list) { + presence = list[member]; + if (!_members[member]) { + _members[member] = {}; + } + results1.push(_members[member][station] = presence); + } + return results1; + })()); + } + return results; + }, + getMembers: function() { + return _members; + }, + getListening: function() { + return _listening; + }, + setListening: function(station) { + if (_listening.indexOf(station) !== -1) { + return console.log('already listening on that station (somehow).'); + } else { + return _listening.push(station); + } + }, + createStation: function(station) { + if (_stations.indexOf(station) === -1) { + return _stations.push(station); + } + }, + loadStations: function(stations) { + return _stations = stations; + }, + getStations: function() { + return _stations; + }, + setStation: function(station) { + return _station = station; + }, + unsetStation: function(station) { + if (_station === station) { + return _station = null; + } + }, + getStation: function() { + return _station; + }, + joinStation: function(station) { + var ref; + if (((ref = _config.court) != null ? ref.sources.indexOf(station) : void 0) === -1) { + return _config.court.sources.push(station); + } + }, + getTyping: function() { + return _typing; + }, + setTyping: function(station, state) { + var k, v; + for (k in _typing) { + v = _typing[k]; + _typing[k] = k === station; + } + return _typing[station] = state; + } +}); + +StationStore.setMaxListeners(100); + +StationStore.dispatchToken = StationDispatcher.register(function(payload) { + var action; + action = payload.action; + switch (action.type) { + case 'station-audience-toggle': + StationStore.toggleAudience(action.station); + StationStore.emitChange(); + break; + case 'station-set-audience': + StationStore.setAudience(action.audience); + StationStore.emitChange(); + break; + case 'station-set-valid-audience': + StationStore.setValidAudience(action.valid); + StationStore.emitChange(); + break; + case 'station-switch': + StationStore.setAudience([]); + StationStore.setStation(action.station); + StationStore.emitChange(); + break; + case 'station-listen': + StationStore.setListening(action.station); + StationStore.emitChange(); + break; + case "config-load": + StationStore.loadConfig(action.station, action.config); + StationStore.emitChange(); + break; + case "stations-load": + StationStore.loadStations(action.stations); + StationStore.emitChange(); + break; + case "stations-leave": + StationStore.loadStations(action.stations); + StationStore.unsetStation(action.station); + StationStore.emitChange(); + break; + case "station-create": + StationStore.createStation(action.station); + StationStore.emitChange(); + break; + case "members-load": + StationStore.loadMembers(action.members); + StationStore.emitChange(); + break; + case "typing-set": + StationStore.setTyping(action.station, action.state); + StationStore.emitChange(); + break; + } +}); + +module.exports = StationStore; + + + +},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js"}],"/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/util.coffee":[function(require,module,exports){ +if (!window.util) { + window.util = {}; +} + +_.merge(window.util, { + mainStations: ["court", "floor", "porch"], + mainStationPath: function(user) { + return "~" + user + "/" + (window.util.mainStation(user)); + }, + mainStation: function(user) { + if (!user) { + user = window.urb.user; + } + switch (user.length) { + case 3: + return "court"; + case 6: + return "floor"; + case 13: + return "porch"; + } + }, + clipAudi: function(audi) { + var ms, regx; + audi = audi.join(" "); + ms = window.util.mainStationPath(window.urb.user); + regx = new RegExp("/" + ms, "g"); + audi = audi.replace(regx, ""); + return audi.split(" "); + }, + expandAudi: function(audi) { + var ms; + audi = audi.join(" "); + ms = window.util.mainStationPath(window.urb.user); + if (audi.indexOf(ms) === -1) { + if (audi.length > 0) { + audi += " "; + } + audi += "" + ms; + } + return audi.split(" "); + }, + create: function(name) { + return window.talk.StationPersistence.createStation(name, function(err, res) {}); + }, + subscribe: function(name) { + return window.talk.StationPersistence.addSource("main", window.urb.ship, ["~zod/" + name]); + }, + uuid32: function() { + var _str, i, j, str; + str = "0v"; + str += Math.ceil(Math.random() * 8) + "."; + for (i = j = 0; j <= 5; i = ++j) { + _str = Math.ceil(Math.random() * 10000000).toString(32); + _str = ("00000" + _str).substr(-5, 5); + str += _str + "."; + } + return str.slice(0, -1); + }, + populate: function(station, number) { + var c, send; + c = 0; + send = function() { + var _audi, _message; + if (c < number) { + c++; + } else { + console.log('done'); + return true; + } + _audi = {}; + _audi[station] = "pending"; + _message = { + serial: window.util.uuid32(), + audience: _audi, + statement: { + speech: { + say: "Message " + c + }, + time: Date.now(), + now: Date.now() + } + }; + return window.talk.MessagePersistence.sendMessage(_message, send); + }; + return send(); + }, + getScroll: function() { + return this.writingPosition = $('#c').outerHeight(true) + $('#c').offset().top - $(window).height(); + }, + setScroll: function() { + window.util.getScroll(); + return $(window).scrollTop($("#c").height()); + }, + checkScroll: function() { + if (!window.util.writingPosition) { + window.util.getScroll(); + } + if ($(window).scrollTop() < window.util.writingPosition) { + return $('body').addClass('scrolling'); + } else { + return $('body').removeClass('scrolling'); + } + } +}); + + + +},{}],"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js":[function(require,module,exports){ +// Copyright Joyent, Inc. and other Node contributors. +// +// Permission is hereby granted, free of charge, to any person obtaining a +// copy of this software and associated documentation files (the +// "Software"), to deal in the Software without restriction, including +// without limitation the rights to use, copy, modify, merge, publish, +// distribute, sublicense, and/or sell copies of the Software, and to permit +// persons to whom the Software is furnished to do so, subject to the +// following conditions: +// +// The above copyright notice and this permission notice shall be included +// in all copies or substantial portions of the Software. +// +// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS +// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN +// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, +// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR +// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE +// USE OR OTHER DEALINGS IN THE SOFTWARE. + +function EventEmitter() { + this._events = this._events || {}; + this._maxListeners = this._maxListeners || undefined; +} +module.exports = EventEmitter; + +// Backwards-compat with node 0.10.x +EventEmitter.EventEmitter = EventEmitter; + +EventEmitter.prototype._events = undefined; +EventEmitter.prototype._maxListeners = undefined; + +// By default EventEmitters will print a warning if more than 10 listeners are +// added to it. This is a useful default which helps finding memory leaks. +EventEmitter.defaultMaxListeners = 10; + +// Obviously not all Emitters should be limited to 10. This function allows +// that to be increased. Set to zero for unlimited. +EventEmitter.prototype.setMaxListeners = function(n) { + if (!isNumber(n) || n < 0 || isNaN(n)) + throw TypeError('n must be a positive number'); + this._maxListeners = n; + return this; +}; + +EventEmitter.prototype.emit = function(type) { + var er, handler, len, args, i, listeners; + + if (!this._events) + this._events = {}; + + // If there is no 'error' event listener then throw. + if (type === 'error') { + if (!this._events.error || + (isObject(this._events.error) && !this._events.error.length)) { + er = arguments[1]; + if (er instanceof Error) { + throw er; // Unhandled 'error' event + } else { + throw TypeError('Uncaught, unspecified "error" event.'); + } + return false; + } + } + + handler = this._events[type]; + + if (isUndefined(handler)) + return false; + + if (isFunction(handler)) { + switch (arguments.length) { + // fast cases + case 1: + handler.call(this); + break; + case 2: + handler.call(this, arguments[1]); + break; + case 3: + handler.call(this, arguments[1], arguments[2]); + break; + // slower + default: + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + handler.apply(this, args); + } + } else if (isObject(handler)) { + len = arguments.length; + args = new Array(len - 1); + for (i = 1; i < len; i++) + args[i - 1] = arguments[i]; + + listeners = handler.slice(); + len = listeners.length; + for (i = 0; i < len; i++) + listeners[i].apply(this, args); + } + + return true; +}; + +EventEmitter.prototype.addListener = function(type, listener) { + var m; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events) + this._events = {}; + + // To avoid recursion in the case that type === "newListener"! Before + // adding it to the listeners, first emit "newListener". + if (this._events.newListener) + this.emit('newListener', type, + isFunction(listener.listener) ? + listener.listener : listener); + + if (!this._events[type]) + // Optimize the case of one listener. Don't need the extra array object. + this._events[type] = listener; + else if (isObject(this._events[type])) + // If we've already got an array, just append. + this._events[type].push(listener); + else + // Adding the second element, need to change to array. + this._events[type] = [this._events[type], listener]; + + // Check for listener leak + if (isObject(this._events[type]) && !this._events[type].warned) { + var m; + if (!isUndefined(this._maxListeners)) { + m = this._maxListeners; + } else { + m = EventEmitter.defaultMaxListeners; + } + + if (m && m > 0 && this._events[type].length > m) { + this._events[type].warned = true; + console.error('(node) warning: possible EventEmitter memory ' + + 'leak detected. %d listeners added. ' + + 'Use emitter.setMaxListeners() to increase limit.', + this._events[type].length); + if (typeof console.trace === 'function') { + // not supported in IE 10 + console.trace(); + } + } + } + + return this; +}; + +EventEmitter.prototype.on = EventEmitter.prototype.addListener; + +EventEmitter.prototype.once = function(type, listener) { + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + var fired = false; + + function g() { + this.removeListener(type, g); + + if (!fired) { + fired = true; + listener.apply(this, arguments); + } + } + + g.listener = listener; + this.on(type, g); + + return this; +}; + +// emits a 'removeListener' event iff the listener was removed +EventEmitter.prototype.removeListener = function(type, listener) { + var list, position, length, i; + + if (!isFunction(listener)) + throw TypeError('listener must be a function'); + + if (!this._events || !this._events[type]) + return this; + + list = this._events[type]; + length = list.length; + position = -1; + + if (list === listener || + (isFunction(list.listener) && list.listener === listener)) { + delete this._events[type]; + if (this._events.removeListener) + this.emit('removeListener', type, listener); + + } else if (isObject(list)) { + for (i = length; i-- > 0;) { + if (list[i] === listener || + (list[i].listener && list[i].listener === listener)) { + position = i; + break; + } + } + + if (position < 0) + return this; + + if (list.length === 1) { + list.length = 0; + delete this._events[type]; + } else { + list.splice(position, 1); + } + + if (this._events.removeListener) + this.emit('removeListener', type, listener); + } + + return this; +}; + +EventEmitter.prototype.removeAllListeners = function(type) { + var key, listeners; + + if (!this._events) + return this; + + // not listening for removeListener, no need to emit + if (!this._events.removeListener) { + if (arguments.length === 0) + this._events = {}; + else if (this._events[type]) + delete this._events[type]; + return this; + } + + // emit removeListener for all listeners on all events + if (arguments.length === 0) { + for (key in this._events) { + if (key === 'removeListener') continue; + this.removeAllListeners(key); + } + this.removeAllListeners('removeListener'); + this._events = {}; + return this; + } + + listeners = this._events[type]; + + if (isFunction(listeners)) { + this.removeListener(type, listeners); + } else { + // LIFO order + while (listeners.length) + this.removeListener(type, listeners[listeners.length - 1]); + } + delete this._events[type]; + + return this; +}; + +EventEmitter.prototype.listeners = function(type) { + var ret; + if (!this._events || !this._events[type]) + ret = []; + else if (isFunction(this._events[type])) + ret = [this._events[type]]; + else + ret = this._events[type].slice(); + return ret; +}; + +EventEmitter.listenerCount = function(emitter, type) { + var ret; + if (!emitter._events || !emitter._events[type]) + ret = 0; + else if (isFunction(emitter._events[type])) + ret = 1; + else + ret = emitter._events[type].length; + return ret; +}; + +function isFunction(arg) { + return typeof arg === 'function'; +} + +function isNumber(arg) { + return typeof arg === 'number'; +} + +function isObject(arg) { + return typeof arg === 'object' && arg !== null; +} + +function isUndefined(arg) { + return arg === void 0; +} + +},{}]},{},["/Users/galen/Documents/src/urbit-test/urb/zod/main/pub/talk/src/js/module.coffee"]); diff --git a/base/pub/talk/src/js/move.coffee b/base/pub/talk/src/js/move.coffee new file mode 100644 index 000000000..9443881cc --- /dev/null +++ b/base/pub/talk/src/js/move.coffee @@ -0,0 +1,66 @@ +so = {} +so.ls = $(window).scrollTop() +so.cs = $(window).scrollTop() +so.w = null +so.$d = $('#nav > div') +setSo = -> + so.$n = $('#station-container') + so.w = $(window).width() + so.h = $(window).height() + so.dh = $("#c").height() + so.nh = so.$n.outerHeight(true) +setSo() +setInterval setSo,200 + +$(window).on 'resize', (e) -> + if so.w > 1170 + so.$n.removeClass 'm-up m-down m-fixed' + +ldy = 0 + +$(window).on 'scroll', (e) -> + so.cs = $(window).scrollTop() + + if so.w > 1170 + so.$n.removeClass 'm-up m-down m-fixed' + if so.w < 1170 + dy = so.ls-so.cs + + if so.cs <= 0 + so.$n.removeClass 'm-up' + so.$n.addClass 'm-down m-fixed' + return + + if so.cs+so.h > so.dh then return + + if so.$n.hasClass 'm-fixed' and + so.w < 1024 + so.$n.css left:-1*$(window).scrollLeft() + + if dy > 0 and ldy > 0 + if not so.$n.hasClass 'm-down' + so.$n.removeClass('m-up').addClass 'm-down' + top = so.cs-so.nh + if top < 0 then top = 0 + so.$n.offset top:top + if so.$n.hasClass('m-down') and + not so.$n.hasClass('m-fixed') and + so.$n.offset().top >= so.cs + so.$n.addClass 'm-fixed' + so.$n.attr {style:''} + + if dy < 0 and ldy < 0 + if not so.$n.hasClass 'm-up' + so.$n.removeClass 'open' + so.$n.removeClass('m-down m-fixed').addClass 'm-up' + so.$n.attr {style:''} + top = so.cs + sto = so.$n.offset().top + if top < 0 then top = 0 + if top > sto and top < sto+so.nh then top = sto + so.$n.offset top:top + + ldy = dy + so.ls = so.cs + +$(window).on 'scroll', window.util.checkScroll \ No newline at end of file diff --git a/main/pub/talk/src/js/package.json b/base/pub/talk/src/js/package.json similarity index 100% rename from main/pub/talk/src/js/package.json rename to base/pub/talk/src/js/package.json diff --git a/main/pub/talk/src/js/persistence/MessagePersistence.coffee b/base/pub/talk/src/js/persistence/MessagePersistence.coffee similarity index 98% rename from main/pub/talk/src/js/persistence/MessagePersistence.coffee rename to base/pub/talk/src/js/persistence/MessagePersistence.coffee index 9c509d6c6..e6ac71f49 100644 --- a/main/pub/talk/src/js/persistence/MessagePersistence.coffee +++ b/base/pub/talk/src/js/persistence/MessagePersistence.coffee @@ -55,4 +55,4 @@ module.exports = }, (err,res) -> console.log 'sent' console.log arguments - cb(err,res) if cb \ No newline at end of file + cb(err,res) if cb diff --git a/main/pub/talk/src/js/persistence/StationPersistence.coffee b/base/pub/talk/src/js/persistence/StationPersistence.coffee similarity index 100% rename from main/pub/talk/src/js/persistence/StationPersistence.coffee rename to base/pub/talk/src/js/persistence/StationPersistence.coffee diff --git a/main/pub/talk/src/js/stores/MessageStore.coffee b/base/pub/talk/src/js/stores/MessageStore.coffee similarity index 100% rename from main/pub/talk/src/js/stores/MessageStore.coffee rename to base/pub/talk/src/js/stores/MessageStore.coffee diff --git a/main/pub/talk/src/js/stores/StationStore.coffee b/base/pub/talk/src/js/stores/StationStore.coffee similarity index 100% rename from main/pub/talk/src/js/stores/StationStore.coffee rename to base/pub/talk/src/js/stores/StationStore.coffee diff --git a/main/pub/talk/src/js/test.js b/base/pub/talk/src/js/test.js similarity index 100% rename from main/pub/talk/src/js/test.js rename to base/pub/talk/src/js/test.js diff --git a/base/pub/talk/src/js/util.coffee b/base/pub/talk/src/js/util.coffee new file mode 100644 index 000000000..0016e24a1 --- /dev/null +++ b/base/pub/talk/src/js/util.coffee @@ -0,0 +1,85 @@ +if not window.util then window.util = {} +_.merge window.util, + mainStations: ["court","floor","porch"] + + mainStationPath: (user) -> "~#{user}/#{window.util.mainStation(user)}" + + mainStation: (user) -> + if not user then user = window.urb.user + switch user.length + when 3 + return "court" + when 6 + return "floor" + when 13 + return "porch" + + clipAudi: (audi) -> + audi = audi.join " " + ms = window.util.mainStationPath window.urb.user + regx = new RegExp "/#{ms}","g" + audi = audi.replace regx,"" + audi.split " " + + expandAudi: (audi) -> + audi = audi.join " " + ms = window.util.mainStationPath window.urb.user + if audi.indexOf(ms) is -1 + if audi.length > 0 + audi += " " + audi += "#{ms}" + audi.split " " + + create: (name) -> + window.talk.StationPersistence.createStation name, (err,res) -> + + subscribe: (name) -> + window.talk.StationPersistence.addSource "main",window.urb.ship,["~zod/#{name}"] + + uuid32: -> + str = "0v" + str += Math.ceil(Math.random()*8)+"." + for i in [0..5] + _str = Math.ceil(Math.random()*10000000).toString(32) + _str = ("00000"+_str).substr(-5,5) + str += _str+"." + str.slice(0,-1) + + populate: (station,number) -> + c = 0 + send = -> + if c < number + c++ + else + console.log 'done' + return true + _audi = {} + _audi[station] = "pending" + _message = + serial:window.util.uuid32() + audience:_audi + statement: + speech: + say:"Message "+c + time: Date.now() + now: Date.now() + window.talk.MessagePersistence.sendMessage _message,send + send() + + getScroll: -> + @writingPosition = $('#c').outerHeight(true)+$('#c').offset().top-$(window).height() + + setScroll: -> + window.util.getScroll() + $(window).scrollTop($("#c").height()) + + isScrolling: -> + if not window.util.writingPosition + window.util.getScroll() + return ($(window).scrollTop() < window.util.writingPosition) + + checkScroll: -> + if @isScrolling() + $('body').addClass 'scrolling' + else + $('body').removeClass 'scrolling' \ No newline at end of file diff --git a/docs/pub/tree/src/css/fonts.styl b/base/pub/tree/src/css/fonts.styl similarity index 100% rename from docs/pub/tree/src/css/fonts.styl rename to base/pub/tree/src/css/fonts.styl diff --git a/docs/pub/tree/src/css/main.css b/base/pub/tree/src/css/main.css similarity index 98% rename from docs/pub/tree/src/css/main.css rename to base/pub/tree/src/css/main.css index cbab27c16..91c7739b1 100644 --- a/docs/pub/tree/src/css/main.css +++ b/base/pub/tree/src/css/main.css @@ -132,7 +132,8 @@ pre { margin-left: -0.3rem; } code { - font-size: 0.9rem; + font-size: 0.8rem; + line-height: 1.2rem; background-color: #f4f4f4; margin-top: -0.05rem; padding: 0.2rem; @@ -317,8 +318,11 @@ li:before { .list li a > div p { margin: 0; } +.list li a > div, .list li a > div p { display: inline; +} +.list li a > div p { margin-left: 0.3rem; } .list li a > div p:first-child { diff --git a/docs/pub/tree/src/css/main.styl b/base/pub/tree/src/css/main.styl similarity index 97% rename from docs/pub/tree/src/css/main.styl rename to base/pub/tree/src/css/main.styl index 1c6906b25..0295d5605 100644 --- a/docs/pub/tree/src/css/main.styl +++ b/base/pub/tree/src/css/main.styl @@ -62,7 +62,8 @@ pre margin-left -.3rem code - font-size .9rem + font-size .8rem + line-height 1.2rem background-color #f4f4f4 margin-top -.05rem padding .2rem @@ -242,8 +243,11 @@ li:before .list li a > div p margin 0 +.list li a > div .list li a > div p display inline + +.list li a > div p margin-left .3rem .list li a > div p:first-child diff --git a/docs/pub/tree/src/css/mobile.styl b/base/pub/tree/src/css/mobile.styl similarity index 100% rename from docs/pub/tree/src/css/mobile.styl rename to base/pub/tree/src/css/mobile.styl diff --git a/docs/pub/tree/src/js/actions/TreeActions.coffee b/base/pub/tree/src/js/actions/TreeActions.coffee similarity index 100% rename from docs/pub/tree/src/js/actions/TreeActions.coffee rename to base/pub/tree/src/js/actions/TreeActions.coffee diff --git a/docs/pub/tree/src/js/components/AnchorComponent.coffee b/base/pub/tree/src/js/components/AnchorComponent.coffee similarity index 96% rename from docs/pub/tree/src/js/components/AnchorComponent.coffee rename to base/pub/tree/src/js/components/AnchorComponent.coffee index c385450d2..5d598dfa6 100644 --- a/docs/pub/tree/src/js/components/AnchorComponent.coffee +++ b/base/pub/tree/src/js/components/AnchorComponent.coffee @@ -36,14 +36,15 @@ module.exports = recl setPath: (href,hist) -> if hist isnt false then history.pushState {}, "", window.tree.basepath href - TreeActions.setCurr href + TreeActions.setCurr href.split("#")[0] goTo: (path) -> @toggleFocus false $("html,body").animate {scrollTop:0} + frag = path.split("#")[0] @setPath path - if not @checkPath path - TreeActions.getPath path + if not @checkPath frag + TreeActions.getPath frag checkURL: -> if @state.url isnt window.location.pathname diff --git a/docs/pub/tree/src/js/components/BodyComponent.coffee b/base/pub/tree/src/js/components/BodyComponent.coffee similarity index 100% rename from docs/pub/tree/src/js/components/BodyComponent.coffee rename to base/pub/tree/src/js/components/BodyComponent.coffee diff --git a/docs/pub/tree/src/js/components/KidsComponent.coffee b/base/pub/tree/src/js/components/KidsComponent.coffee similarity index 100% rename from docs/pub/tree/src/js/components/KidsComponent.coffee rename to base/pub/tree/src/js/components/KidsComponent.coffee diff --git a/docs/pub/tree/src/js/components/ListComponent.coffee b/base/pub/tree/src/js/components/ListComponent.coffee similarity index 92% rename from docs/pub/tree/src/js/components/ListComponent.coffee rename to base/pub/tree/src/js/components/ListComponent.coffee index 3456bab77..d4ddbad11 100644 --- a/docs/pub/tree/src/js/components/ListComponent.coffee +++ b/base/pub/tree/src/js/components/ListComponent.coffee @@ -45,7 +45,10 @@ module.exports = recl _path = @state.path+"/"+v if @props.dataPreview? c = "preview" - prev = @state.snip[_path] + if @props.titlesOnly + prev = @state.snip[_path].head + else + prev = @state.snip[_path] else c = "" prev = (h1 {},v) diff --git a/docs/pub/tree/src/js/components/LoadComponent.coffee b/base/pub/tree/src/js/components/LoadComponent.coffee similarity index 100% rename from docs/pub/tree/src/js/components/LoadComponent.coffee rename to base/pub/tree/src/js/components/LoadComponent.coffee diff --git a/docs/pub/tree/src/js/dispatcher/Dispatcher.coffee b/base/pub/tree/src/js/dispatcher/Dispatcher.coffee similarity index 100% rename from docs/pub/tree/src/js/dispatcher/Dispatcher.coffee rename to base/pub/tree/src/js/dispatcher/Dispatcher.coffee diff --git a/docs/pub/tree/src/js/main.coffee b/base/pub/tree/src/js/main.coffee similarity index 100% rename from docs/pub/tree/src/js/main.coffee rename to base/pub/tree/src/js/main.coffee diff --git a/docs/pub/tree/src/js/main.js b/base/pub/tree/src/js/main.js similarity index 87% rename from docs/pub/tree/src/js/main.js rename to base/pub/tree/src/js/main.js index 0f6a4d410..dc54a3b3c 100644 --- a/docs/pub/tree/src/js/main.js +++ b/base/pub/tree/src/js/main.js @@ -1,4 +1,4 @@ -(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o @mergePathToTree path,_.pluck(snip,"name") for k,v of snip - _snip[path+"/"+v.name] = window.tree.reactify v.body + _snip[path+"/"+v.name] = + head: window.tree.reactify v.body.head + body: window.tree.reactify v.body.body loadKids: (path,kids) -> @mergePathToTree path,_.pluck(kids,"name") diff --git a/docs/pub/tree/src/readme.md b/base/pub/tree/src/readme.md similarity index 100% rename from docs/pub/tree/src/readme.md rename to base/pub/tree/src/readme.md diff --git a/spec/nock/5.txt b/base/spec/nock/5.txt similarity index 100% rename from spec/nock/5.txt rename to base/spec/nock/5.txt diff --git a/main/sur/bang-args/gate.hook b/base/sur/bang-args/gate.hook similarity index 100% rename from main/sur/bang-args/gate.hook rename to base/sur/bang-args/gate.hook diff --git a/main/sur/cp-args/gate.hook b/base/sur/cp-args/gate.hook similarity index 100% rename from main/sur/cp-args/gate.hook rename to base/sur/cp-args/gate.hook diff --git a/main/sur/demo-args/gate.hook b/base/sur/demo-args/gate.hook similarity index 100% rename from main/sur/demo-args/gate.hook rename to base/sur/demo-args/gate.hook diff --git a/main/sur/down/gate.hook b/base/sur/down/gate.hook similarity index 100% rename from main/sur/down/gate.hook rename to base/sur/down/gate.hook diff --git a/main/sur/foobar/gate.hook b/base/sur/foobar/gate.hook similarity index 100% rename from main/sur/foobar/gate.hook rename to base/sur/foobar/gate.hook diff --git a/main/sur/hi-args/gate.hook b/base/sur/hi-args/gate.hook similarity index 100% rename from main/sur/hi-args/gate.hook rename to base/sur/hi-args/gate.hook diff --git a/main/sur/into-args/gate.hook b/base/sur/into-args/gate.hook similarity index 100% rename from main/sur/into-args/gate.hook rename to base/sur/into-args/gate.hook diff --git a/main/sur/kyev/gate.hook b/base/sur/kyev/gate.hook similarity index 100% rename from main/sur/kyev/gate.hook rename to base/sur/kyev/gate.hook diff --git a/main/sur/markdown/core.hook b/base/sur/markdown/core.hook similarity index 100% rename from main/sur/markdown/core.hook rename to base/sur/markdown/core.hook diff --git a/main/sur/mess/gate.hook b/base/sur/mess/gate.hook similarity index 100% rename from main/sur/mess/gate.hook rename to base/sur/mess/gate.hook diff --git a/main/sur/mv-args/gate.hook b/base/sur/mv-args/gate.hook similarity index 100% rename from main/sur/mv-args/gate.hook rename to base/sur/mv-args/gate.hook diff --git a/main/sur/reload-args/gate.hook b/base/sur/reload-args/gate.hook similarity index 100% rename from main/sur/reload-args/gate.hook rename to base/sur/reload-args/gate.hook diff --git a/main/sur/rm-args/gate.hook b/base/sur/rm-args/gate.hook similarity index 100% rename from main/sur/rm-args/gate.hook rename to base/sur/rm-args/gate.hook diff --git a/main/sur/sole/core.hook b/base/sur/sole/core.hook similarity index 100% rename from main/sur/sole/core.hook rename to base/sur/sole/core.hook diff --git a/main/sur/sync-args/gate.hook b/base/sur/sync-args/gate.hook similarity index 100% rename from main/sur/sync-args/gate.hook rename to base/sur/sync-args/gate.hook diff --git a/main/sur/talk/core.hook b/base/sur/talk/core.hook similarity index 98% rename from main/sur/talk/core.hook rename to base/sur/talk/core.hook index 987125efb..98ce2596c 100644 --- a/main/sur/talk/core.hook +++ b/base/sur/talk/core.hook @@ -63,6 +63,7 @@ [%ire p=serial q=speech] :: in-reply-to [%lin p=? q=@t] :: no=@, text line [%mor p=(list speech)] :: multiplex + [%app p=@t] :: app message == :: ++ serial ,@uvH :: unique identity ++ partner (each station passport) :: interlocutor diff --git a/main/sur/term-ctrl/gate.hook b/base/sur/term-ctrl/gate.hook similarity index 100% rename from main/sur/term-ctrl/gate.hook rename to base/sur/term-ctrl/gate.hook diff --git a/main/sur/term-in/gate.hook b/base/sur/term-in/gate.hook similarity index 100% rename from main/sur/term-in/gate.hook rename to base/sur/term-in/gate.hook diff --git a/main/sur/term-line/gate.hook b/base/sur/term-line/gate.hook similarity index 100% rename from main/sur/term-line/gate.hook rename to base/sur/term-line/gate.hook diff --git a/main/sur/ticket-args/gate.hook b/base/sur/ticket-args/gate.hook similarity index 100% rename from main/sur/ticket-args/gate.hook rename to base/sur/ticket-args/gate.hook diff --git a/main/sur/twitter/core.hook b/base/sur/twitter/core.hook similarity index 100% rename from main/sur/twitter/core.hook rename to base/sur/twitter/core.hook diff --git a/main/sur/unsync-args/gate.hook b/base/sur/unsync-args/gate.hook similarity index 100% rename from main/sur/unsync-args/gate.hook rename to base/sur/unsync-args/gate.hook diff --git a/main/sur/user/gate.hook b/base/sur/user/gate.hook similarity index 100% rename from main/sur/user/gate.hook rename to base/sur/user/gate.hook diff --git a/main/sur/users/gate.hook b/base/sur/users/gate.hook similarity index 100% rename from main/sur/users/gate.hook rename to base/sur/users/gate.hook diff --git a/main/sur/verb-args/gate.hook b/base/sur/verb-args/gate.hook similarity index 100% rename from main/sur/verb-args/gate.hook rename to base/sur/verb-args/gate.hook diff --git a/main/sur/wand/gate.hook b/base/sur/wand/gate.hook similarity index 100% rename from main/sur/wand/gate.hook rename to base/sur/wand/gate.hook diff --git a/main/sur/zing/gate.hook b/base/sur/zing/gate.hook similarity index 100% rename from main/sur/zing/gate.hook rename to base/sur/zing/gate.hook diff --git a/main/sur/zong/gate.hook b/base/sur/zong/gate.hook similarity index 100% rename from main/sur/zong/gate.hook rename to base/sur/zong/gate.hook diff --git a/main/sur/zung/gate.hook b/base/sur/zung/gate.hook similarity index 100% rename from main/sur/zung/gate.hook rename to base/sur/zung/gate.hook diff --git a/docs/tree/hymn.hook b/base/tree/hymn.hook similarity index 77% rename from docs/tree/hymn.hook rename to base/tree/hymn.hook index 66d785d8b..84ee42e3c 100644 --- a/docs/tree/hymn.hook +++ b/base/tree/hymn.hook @@ -1,7 +1,7 @@ :: /? 314 /= gas /$ fuel -/= ral /: /=docs=/pub /% /react-js/ +/= ral /: /=base=/pub /% /react-js/ :: :::: :: @@ -17,11 +17,13 @@ ;head ;title: urbit Tree ;meta(name "viewport", content "width=device-width, initial-scale=1"); - ;link(type "text/css", rel "stylesheet", href "/docs/pub/tree/src/css/main.css"); + ;link(type "text/css", rel "stylesheet", href "/base/pub/tree/src/css/main.css"); + ::;link(type "text/css", rel "stylesheet", href "http://localhost:8000/docs/pub/tree/src/css/main.css"); ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"); ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"); ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/react/0.12.2/react.js"); - ;script(type "text/javascript", src "/docs/pub/tree/src/js/main.js"); + ;script(type "text/javascript", src "/base/pub/tree/src/js/main.js"); + ::;script(type "text/javascript", src "http://localhost:8000/docs/pub/tree/src/js/main.js"); == ;body ;script(type "text/javascript"):""" diff --git a/docs/tree/json.hook b/base/tree/json.hook similarity index 73% rename from docs/tree/json.hook rename to base/tree/json.hook index d5abda64f..a8330d918 100644 --- a/docs/tree/json.hook +++ b/base/tree/json.hook @@ -1,16 +1,16 @@ :: /? 314 /= gas /$ fuel -/= ral /: /=docs=/pub /% /react-js/ -/= pal /: /=docs=/pub +/= ral /: /=base=/pub /% /react-js/ +/= pal /: /=base=/pub /; |= a=(map ,@ta cord) a /% 2 /_ /react-js/ :: -/= sal /: /=docs=/pub - /; |= a=(map ,@ta cord) a +/= sal /: /=base=/pub + /; |= a=(map ,@ta json) a /% 2 - /_ /react-snip-js/ + /_ /react-snip-json/ :: :::: :: @@ -23,6 +23,7 @@ :: ^- json =+ ~(. util gas) +:: .json?kids ?: (~(has by qix.gas) %kids) %+ joba %kids =. pal (~(del by pal) %md) :: XX haxor @@ -32,15 +33,17 @@ name/s/a body/s/b == +:: .json?snip ?: (~(has by qix.gas) %snip) %+ joba %snip =. sal (~(del by sal) %md) :: XX haxor =- [%a (turn (~(tap by sal)) -)] - |= [a=span b=cord] + |= [a=span b=json] %- jobe :~ name/s/a - body/s/b + body/b == +:: .json %- jobe :~ kids/[%a (turn get-kids |=(a=span s/a))] body/[%s ral] diff --git a/docs/tree/util.hoon b/base/tree/util.hoon similarity index 100% rename from docs/tree/util.hoon rename to base/tree/util.hoon diff --git a/try/readme.md b/base/try/readme.md similarity index 100% rename from try/readme.md rename to base/try/readme.md diff --git a/docs/pub/doc/hoon/library.md b/docs/pub/doc/hoon/library.md deleted file mode 100644 index 2820a2843..000000000 --- a/docs/pub/doc/hoon/library.md +++ /dev/null @@ -1,4 +0,0 @@ -Library -======= - - diff --git a/main/app/helm/core.hook b/main/app/helm/core.hook deleted file mode 100644 index 1e381faf2..000000000 --- a/main/app/helm/core.hook +++ /dev/null @@ -1,203 +0,0 @@ -:: :: :: -:::: /hook/core/helm/app :: :: - :: :: :: -/? 314 :: zuse version -/- *sole :: structures -/+ sole :: libraries -:: :: :: -:::: :: :: - !: :: :: -=> |% :: principal structures - ++ helm-house :: all state - $: %0 :: state version - bur=(unit (pair ship mace)) :: requesting ticket - hoc=(map bone helm-session) :: consoles - == :: - ++ helm-session :: - $: say=sole-share :: - mud=(unit (sole-dialog ,@ud)) :: - == :: - ++ funk (pair ,@ ,@) :: - ++ begs ,[his=@p tic=@p eny=@t ges=gens] :: begin data - ++ helm-wish :: - $| $? %reset :: reset kernel - %verb :: verbose mode - == :: - $% [%reload p=(list term)] :: reload vanes - [%sync p=@tas q=@p r=@tas ~] :: - == :: - ++ dill-flog :: sent to %dill - $% [%crud p=%hax-init [%leaf p=tape] ~] :: initialize ship - [%veer p=@ta q=path r=@t] :: install vane - [%vega p=path] :: reboot by path - [%verb ~] :: verbose mode - == :: - :: :: - ++ gift :: out result <-$ - $% [%mean p=ares] :: error - [%nice ~] :: acknowledge - [%rush %sole-effect sole-effect] :: effect - == :: - ++ hapt ,[p=ship q=path] :: - ++ move ,[p=bone q=(mold note gift)] :: - ++ note-gall :: note to %gall - $% [%mess p=[p=ship q=path] q=ship r=cage] :: - [%show p=[p=ship q=path] q=ship r=path] :: - [%took p=[p=ship q=path] q=ship] :: - == :: - ++ note-dill :: system command - $% [%flog p=dill-flog] :: - == :: - ++ note-clay :: filesystem command - $% [%font p=@p q=@tas r=@p s=@tas] :: - == :: - ++ note :: out request $-> - $% [%c note-clay] :: - [%d note-dill] :: - [%g note-gall] :: - == :: - -- :: -:: :: -:::: :: - :: :: -|_ $: hid=hide :: system state - helm-house :: program state - == :: -++ he :: per session - |_ [[ost=bone moz=(list move)] helm-session] :: - ++ he-abet :: resolve - [(flop moz) %_(+> hoc (~(put by hoc) ost +<+))] :: - :: :: - ++ he-give :: emit gift - |= git=gift - %_(+> moz [[ost %give git] moz]) - :: - ++ he-wish-reset - ^+ . - =- %_(+ moz (weld zum moz)) - ^= zum %- flop ^- (list move) - =+ top=`path`/(scot %p our.hid)/arvo/(scot %da lat.hid) - :- [ost %pass /reset %d %flog %vega (weld top `path`/hoon)] - %+ turn - ^- (list ,[p=@tas q=@tas]) - :~ [%$ %zuse] - [%a %ames] - [%c %clay] - [%d %dill] - [%e %eyre] - [%f %ford] - [%g %gall] - [%t %time] - == - |= [p=@tas q=@tas] - =+ pax=`path`(welp top /[q]) - =+ txt=((hard ,@) .^(%cx (welp pax /hoon))) - [ost %pass /reset %d %flog %veer p pax txt] - :: - ++ he-wish-reload - |= all=(list term) - %_ +>.$ - moz - %- weld - :_ moz - %+ turn all - =+ ark=(arch .^(%cy /(scot %p our.hid)/arvo/(scot %da lat.hid))) - =+ van=(~(tap by r.ark)) - |= nam=@tas - =. nam - ?. =(1 (met 3 nam)) - nam - =+ ^- zaz=(list ,[p=span ~]) - (skim van |=([a=term ~] =(nam (end 3 1 a)))) - ?> ?=([[@ ~] ~] zaz) - `term`p.i.zaz - =+ tip=(end 3 1 nam) - =+ pax=[(scot %p our.hid) %arvo (scot %da lat.hid) nam %hoon ~] - :* ost - %pass - /reload - %d - %flog - [%veer ?:(=('z' tip) %$ tip) pax (,@ .^(%cx pax))] - == - == - :: - ++ he-wish-sync - |= [syd=@tas her=@p sud=@tas ~] - %_ . - moz - :_ moz - [ost %pass /sync %c %font our.hid syd her sud] - == - :: - ++ he-wish-verb - %_ . - moz - :_ moz - [ost %pass /verb %d %flog %verb ~] - == - ++ he-wish-init - |= him=ship - %_ +>.$ - moz - :_ moz - [ost %pass /init %d %flog %crud %hax-init leaf/(scow %p him) ~] - == - -- -:: -++ hake :: poke core - |= [ost=bone her=ship] - ?> =(her our.hid) - ~(. he [ost [ost %give %nice ~]~] (fall (~(get by hoc) ost) *helm-session)) -:: -++ poke-helm-reset - |= [ost=bone her=ship ~] - ~& %poke-helm-reset - he-abet:he-wish-reset:(hake ost her) -:: -++ poke-helm-verb - |= [ost=bone her=ship ~] - ~& %poke-helm-verb - he-abet:he-wish-verb:(hake ost her) -:: -++ poke-helm-init - |= [ost=bone her=ship him=ship] - ~& %poke-helm-init - he-abet:(he-wish-init:(hake ost her) him) -:: -++ poke-helm-reload - |= [ost=bone her=ship all=(list term)] - ~& %poke-helm-reload - he-abet:(he-wish-reload:(hake ost her) all) -:: -++ poke-helm-sync - |= [ost=bone her=ship all=[@tas @p @tas ~]] - ~& %poke-helm-sync - he-abet:(he-wish-sync:(hake ost her) all) -:: -++ poke-helm-begin - |= [ost=bone you=ship begs] - ~& %poke-helm-begin - ?> ?=(~ bur) - =+ buz=(shax :(mix (jam ges) eny)) - =+ loy=(bruw 2.048 buz) - :_ +>.$(bur `[his [0 sec:ex:loy]~]) - :~ :* ost %pass /ticketing %a %want [our.hid (sein his)] /q/ta - his tic ges pub:ex:loy - == - [ost %give %nice ~] - == -:: -++ poke-will - |= [ost=bone you=ship wil=(unit will)] - ?> ?=(^ bur) - :_ +>.$(bur ~) - ?~ wil - [ost %give %mean ~ %rejected ~]~ - :~ [ost %pass / %a %cash p.u.bur q.u.bur u.wil] - [ost %pass / %c %plug our.hid %main (sein our.hid) %main] - [ost %pass / %c %plug our.hid %arvo (sein our.hid) %arvo] - [ost %pass / %c %plug our.hid %try (sein our.hid) %try] - [ost %give %nice ~] - == --- diff --git a/main/cat/helm/reload/.gate.hook.swp b/main/cat/helm/reload/.gate.hook.swp deleted file mode 100644 index 20ba47562..000000000 Binary files a/main/cat/helm/reload/.gate.hook.swp and /dev/null differ diff --git a/main/mar/js/door.hook b/main/mar/js/door.hook deleted file mode 100644 index 1b9c8f19f..000000000 --- a/main/mar/js/door.hook +++ /dev/null @@ -1,14 +0,0 @@ -:: -:::: /hoon/core/js/mar - :: -|_ mud=@t -++ grow - |% ++ mime [/application/javascript (taco mud)] - ++ psal ;script - ;- (trip mud) - == - ++ hymn ;html:(head:"+{psal}" body) - -- -++ grab |% :: convert from - ++ noun cord :: clam from %noun --- -- diff --git a/main/mar/json/door.hook b/main/mar/json/door.hook deleted file mode 100644 index ce7ae8014..000000000 --- a/main/mar/json/door.hook +++ /dev/null @@ -1,20 +0,0 @@ -:: -:::: /hoon/core/json/mar - :: -/? 314 - :: -:::: compute - :: -|_ jon=json -:: -++ grow :: convert to - |% - ++ mime [/text/json (taco txt)] :: convert to %mime - ++ txt (crip (pojo jon)) - -- -++ grab |% :: convert from - ++ noun json :: clam from %noun - ++ numb jone - ++ time jode --- -- - diff --git a/main/mar/md/door.hook b/main/mar/md/door.hook deleted file mode 100644 index 829cc14f4..000000000 --- a/main/mar/md/door.hook +++ /dev/null @@ -1,11 +0,0 @@ -:: -:::: /hoon/core/md/pro - :: -/? 314 -|_ mud=@t -++ garb [%down ~] -++ grow - |% - ++ mime [text//x-markdown (taco mud)] - -- --- diff --git a/main/mar/mime/door.hook b/main/mar/mime/door.hook deleted file mode 100644 index 10bbc1b63..000000000 --- a/main/mar/mime/door.hook +++ /dev/null @@ -1,10 +0,0 @@ -:: -:::: /hoon/core/mime/mar - :: -/? 314 -|_ own=[p=mite q=octs] -++ grab :: convert from - |% - ++ noun ,[mite octs] :: clam from %noun - -- --- diff --git a/main/mar/txt/door.hook b/main/mar/txt/door.hook deleted file mode 100644 index ed031a948..000000000 --- a/main/mar/txt/door.hook +++ /dev/null @@ -1,17 +0,0 @@ -:: -:::: /hook/door/term-line/mar - :: -/? 314 -|_ txt=cord -:: -++ grab :: convert from - |% - ++ noun ,@t :: clam from %noun - ++ json (cork so:jo need) - -- -++ grow - |% - ++ psal ;div: {(trip txt)} - ++ mime [text//plain (taco txt)] - -- --- diff --git a/main/pub/sole/fab/hymn.hook b/main/pub/sole/fab/hymn.hook deleted file mode 100644 index 7de72abd8..000000000 --- a/main/pub/sole/fab/hymn.hook +++ /dev/null @@ -1,165 +0,0 @@ -:: Console front-end -:: -:::: /hook/hymn/fab/sole/pub - :: -/? 310 -|% -++ cdnj |=(a=tape ;script(src "//cdnjs.cloudflare.com/ajax/libs/{a}");) --- -:: -:::: - :: -^- manx -;html - ;head - ;title: Sole - ;* %- turn :_ cdnj ^- wall - :~ "jquery/2.1.1/jquery.min.js" - "mousetrap/1.4.6/mousetrap.js" - "react/0.11.0/react.js" - == - ;script(src "/~/at/main/lib/urb.js"); - ;script: urb.appl = 'dojo' - ;style:''' - #term { - width: 100%; - } - #term * { - margin: 0px; - } - ''' - == - ;body - ;div#err; - ;div#term:"" - ;script(type "text/coffeescript") ;- %- trip - ''' - [DOM,recl,rend] = [React.DOM, React.createClass, React.renderComponent] - [div, pre] = [DOM.div, DOM.pre] - Matr = recl render: -> - [pro,cur] = [@props.prompt + " ", @props.cursor + 1] - prompt = "#{pro.slice(0,cur)}\u0332#{pro.slice(cur)}" - lines = [prompt, @props.rows...] - div {}, lines.slice().reverse().map (lin)-> - pre {}, lin - - $ -> - termRev = 0 - pressed = [] - deltim = null - - met = $('
').text('m').css(display: 'none').appendTo(term).width()
-        subs = ""
-        # $(window).resize -> 
-        #   window.termWif = ($(term).width() / met).toFixed()
-        #   path =  "/new/#{termWif}"
-        #   if path is subs
-        #     return
-        #   if subs
-        #     urb.unsubscribe {path:subs}
-        #   subs = path
-        #   urb.subscribe {path}, (err,dat)->
-        #       if err or dat.data.ok
-        #         return;
-        #       syncRev = dat.data.rev
-        #       unless termRev > syncRev
-        #         termRev = syncRev
-        #         matr.setProps rows: dat.data.stak
-        #         document.title = "Matrix"  # XX  debug
-        # $(window).resize()
-
-        matr = rend (Matr rows:[], prompt:"", cursor:1), term
-        flash = ($el, background)->
-          $el.css {background}
-          if background
-            setTimeout (()-> flash $el,''), 50
-        
-        peer = (ruh) ->
-          switch false
-            when !ruh.map then ruh.map peer
-            # when !ruh.pro then matr.setProps prompt: ruh.pro
-            # when !ruh.hop then matr.setProps cursor: ruh.hop
-            # when !ruh.out 
-            #   matr.setProps rows: [ruh.out, matr.props.rows...]
-            # when !ruh.act then switch ruh.act
-            #   when 'clr' then matr.setProps rows:[]
-            #   when 'bel' then flash ($ 'body'), 'black'
-            #   else throw "Unknown "+(JSON.stringify ruh)
-            else console.log ruh
-        
-        urb.bind "/sole", {wire:"/"}, (err,d)->
-          if d.data then peer d.data
-
-        #later = (data)->
-        #  if data
-        #    pressed.push data
-        #  clearTimeout deltim
-        #  setTimeout (->
-        #    if urb.reqq.length > 0 
-        #      return deltim = later()
-        #    urb.send data: pressed
-        #    pressed = []
-        #  ), 500
-
-        Mousetrap.handleKey = (char, mod, e)->
-          norm = {
-            capslock:  'caps'
-            pageup:    'pgup'
-            pagedown:  'pgdn'
-            backspace: 'baxp'
-            enter:     'entr'
-          }
-          key = 
-            if char.length is 1
-              if e.type is 'keypress'
-                str: char
-            else if e.type is 'keydown'
-              if char isnt 'space'
-                act: norm[char] ? char
-            else if e.type is 'keyup' and norm[key] is 'caps'
-              act: 'uncap'
-          if key
-            e.preventDefault()
-            urb.send mark: 'dill-belt', data: {mod,key}
-            
-            # amod = (arr)->
-            #   for i in arr
-            #     unless mod.indexOf(i) < 0
-            #       return yes
-            #   no
-            # if key.str or key.act is 'baxp' or key.act is 'entr'
-            #   termRev++
-            #   [bot, rest...] = old = matr.props.rows
-            #   matr.setProps rows:(
-            #     switch  key.act 
-            #       when 'baxp'
-            #         if amod ['ctrl', 'meta']
-            #           ['', rest...]
-            #         else if amod ['alt']
-            #           [(bot.replace /\ *[^ ]*$/, ''), rest...]
-            #         else if bot and bot.length 
-            #           [bot.slice(0, -1), rest...]
-            #         else if rest[0] and rest[0].length
-            #           res = rest.slice()
-            #           res[0] = res[0].slice(0, -1)
-            #           res
-            #         else rest
-            #       when 'entr'
-            #         ['', old...]
-            #       when undefined
-            #         if mod.length > 1 or (mod.length and !amod ['shift'])
-            #           old
-            #         else unless old and bot isnt null
-            #           [key.str]
-            #         #else if bot.length is termWif
-            #         #  [key.str, old...]
-            #         else [bot + key.str, rest...]
-            #   )
-            #   document.title = "Matri"  # XX  debug
-            # later {mod, key}
-
-
-      '''
-    ==
-    ;+  (cdnj "coffee-script/1.7.1/coffee-script.min.js")
-==  ==
diff --git a/main/pub/talk/src/js/main.coffee b/main/pub/talk/src/js/main.coffee
deleted file mode 100644
index 5e9fe89c2..000000000
--- a/main/pub/talk/src/js/main.coffee
+++ /dev/null
@@ -1,186 +0,0 @@
-$(() ->
-  StationActions = require './actions/StationActions.coffee'
-
-  rend = React.render
-  
-  window.chat = {}
-  window.chat.MessagePersistence = require './persistence/MessagePersistence.coffee'
-  window.chat.StationPersistence = require './persistence/StationPersistence.coffee'
-
-  window.util =
-    mainStations: ["court","floor","porch"]
-    
-    mainStationPath: (user) -> "~#{user}/#{window.util.mainStation(user)}"
-
-    mainStation: (user) ->
-      if not user then user = window.urb.user
-      switch user.length
-        when 3
-          return "court"
-        when 6
-          return "floor"
-        when 13
-          return "porch"
-
-    clipAudi: (audi) ->
-      audi = audi.join " "
-      ms = window.util.mainStationPath window.urb.user
-      regx = new RegExp "/#{ms}","g"
-      audi = audi.replace regx,""
-      audi.split " "
-
-    expandAudi: (audi) ->
-      audi = audi.join " "
-      ms = window.util.mainStationPath window.urb.user
-      if audi.indexOf(ms) is -1 
-        if audi.length > 0
-          audi += " "
-        audi += "#{ms}"
-      audi.split " "
-
-    create: (name) ->
-      window.chat.StationPersistence.createStation name, (err,res) ->
-    
-    subscribe: (name) ->
-      window.chat.StationPersistence.addSource "main",window.urb.ship,["~zod/#{name}"]
-    
-    uuid32: ->
-      str = "0v"
-      str += Math.ceil(Math.random()*8)+"."
-      for i in [0..5]
-        _str = Math.ceil(Math.random()*10000000).toString(32)
-        _str = ("00000"+_str).substr(-5,5)
-        str += _str+"."
-      str.slice(0,-1)
-
-    populate: (station,number) ->
-      c = 0
-      send = ->
-        if c < number
-          c++
-        else
-          console.log 'done'
-          return true
-        _audi = {}
-        _audi[station] = "pending"
-        _message =
-          serial:window.util.uuid32()
-          audience:_audi
-          statement:
-            speech:
-              say:"Message "+c
-            time: Date.now()
-            now: Date.now()
-        window.chat.MessagePersistence.sendMessage _message,send
-      send()
-
-    getScroll: ->
-      @writingPosition = $('#c').outerHeight(true)+$('#c').offset().top-$(window).height()
-
-    setScroll: ->
-      window.util.getScroll()
-      $(window).scrollTop($("#c").height())
-
-    checkScroll: ->
-      if not window.util.writingPosition
-        window.util.getScroll()
-      if $(window).scrollTop() < window.util.writingPosition
-        $('body').addClass 'scrolling'
-      else
-        $('body').removeClass 'scrolling'
-
-  # checkScroll = ->
-  #   if $(window).scrollTop() > 20
-  #     $('#nav').addClass 'scrolling'
-  #   else
-  #     $('#nav').removeClass 'scrolling'
-  # setInterval checkScroll, 500
-
-  so = {}
-  so.ls = $(window).scrollTop()
-  so.cs = $(window).scrollTop()
-  so.w = null
-  so.$d = $('#nav > div')
-  setSo = -> 
-    so.$n = $('#station-container')
-    so.w = $(window).width()
-    so.h = $(window).height()
-    so.dh = $("#c").height()
-    so.nh = so.$n.outerHeight(true)
-  setSo()
-  setInterval setSo,200
-
-  $(window).on 'resize', (e) ->
-    if so.w > 1170
-      so.$n.removeClass 'm-up m-down m-fixed'
-
-  ldy = 0
-
-  $(window).on 'scroll', (e) -> 
-    so.cs = $(window).scrollTop()
-
-    if so.w > 1170
-      so.$n.removeClass 'm-up m-down m-fixed'
-    if so.w < 1170
-      dy = so.ls-so.cs
-
-      if so.cs <= 0
-        so.$n.removeClass 'm-up'
-        so.$n.addClass 'm-down m-fixed'
-        return
-
-      if so.cs+so.h > so.dh then return
-
-      if so.$n.hasClass 'm-fixed' and
-      so.w < 1024
-        so.$n.css left:-1*$(window).scrollLeft()
-
-      if dy > 0 and ldy > 0
-        if not so.$n.hasClass 'm-down'
-          so.$n.removeClass('m-up').addClass 'm-down'
-          top = so.cs-so.nh
-          if top < 0 then top = 0
-          so.$n.offset top:top
-        if so.$n.hasClass('m-down') and 
-        not so.$n.hasClass('m-fixed') and 
-        so.$n.offset().top >= so.cs
-          so.$n.addClass 'm-fixed'
-          so.$n.attr {style:''}
-
-      if dy < 0 and ldy < 0
-        if not so.$n.hasClass 'm-up'
-          so.$n.removeClass 'open'
-          so.$n.removeClass('m-down m-fixed').addClass 'm-up'
-          so.$n.attr {style:''}
-          top = so.cs
-          sto = so.$n.offset().top
-          if top < 0 then top = 0
-          if top > sto and top < sto+so.nh then top = sto
-          so.$n.offset top:top
-
-    ldy = dy
-    so.ls = so.cs
-
-  $(window).on 'scroll', window.util.checkScroll
-
-  window.chat.StationPersistence.listen()
-
-  StationComponent    = require './components/StationComponent.coffee'
-  MessagesComponent   = require './components/MessagesComponent.coffee'
-  WritingComponent    = require './components/WritingComponent.coffee'
-
-  $c = $('#c')
-
-  clean = ->
-    React.unmountComponentAtNode $('#station-container')[0]
-    React.unmountComponentAtNode $('#messages-container')[0]
-    React.unmountComponentAtNode $('#writing-container')[0]
-
-  $c.append "
" - $c.append "
" - $c.append "
" - $c.append "
BOTTOM
" - rend (React.createElement(StationComponent, {})),$('#station-container')[0] - rend (React.createElement(MessagesComponent, {})),$('#messages-container')[0] - rend (React.createElement(WritingComponent, {})),$('#writing-container')[0] -)