diff --git a/arvo/ames.hoon b/arvo/ames.hoon index 5bcff5082..78ee78188 100644 --- a/arvo/ames.hoon +++ b/arvo/ames.hoon @@ -322,7 +322,7 @@ 0w2g.gLmg4.MtrHQ.A5VmH.WPk6G :: 150, ~ryg, Dan Haffey (fortuna) 0w0 :: 151, ~ryx, Tlon (gleba) 0w0 :: 152, ~fep, Tlon (gleba) - 0w3q.4RDyP.CTcbc.ZX4Hj.BH6Hu :: 153, ~tyr, ~hobmed-hinrym (fidelis) + 0w2j.T1u2s.BfXjV.ldOGR.aiZrQ :: 153, ~tyr, ~hobmed-hinrym (fidelis) 0w0 :: 154, ~tus, Tlon (gleba) 0w0 :: 155, ~tyc, Tlon (gleba) 0w0 :: 156, ~leg, Tlon (gleba) @@ -440,7 +440,7 @@ vix=(bex +((cut 0 [25 2] mag))) :: width of sender tay=(cut 0 [27 5] mag) :: message type == - ?> =(4 vez) + ?> =(0 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 4] + :~ [3 0] [20 (mug bod)] [2 yax] [2 qax] @@ -546,11 +546,6 @@ ?~ dyv ~ [~ u.dyv ..kuch] :: - ++ trox :: trox:lax:as:go - |= [now=@da] :: expire by date - ^+ +> - +> :: XX - :: ++ wasc :: wasc:lax:as:go |= key=code :: hear foreign code ^+ +> @@ -1048,7 +1043,7 @@ ++ gnaw :: gnaw:am |= [kay=cape ryn=lane pac=rock] :: process packet ^- [p=(list boon) q=fort] - ?. =(4 (end 0 3 pac)) [~ fox] + ?. =(0 (end 0 3 pac)) [~ fox] =+ kec=(bite pac) ?: (goop p.p.kec) [~ fox] ?. (~(has by urb.ton.fox) q.p.kec) @@ -1096,7 +1091,8 @@ ++ rack :: rack:am |= [soq=sock cha=path cop=coop] :: e2e ack =+ oh=(ho:(um p.soq) q.soq) - =. oh (cook:oh cop cha ~) + =^ gud oh (cook:oh cop cha ~) + ?. gud oh (cans:oh cha) :: ++ wake :: wake:am @@ -1170,11 +1166,14 @@ :: ++ cook :: cook:ho:um:am |= [cop=coop cha=path ram=(unit ,[ryn=lane dam=flap])] - ^+ +> :: acknowledgment + ^- [gud=? con=_+>] :: acknowledgment :: ~& [%cook cop num cha ram] =+ rum=(need (~(get by raz.bah) cha)) =+ lat=(~(get by mis.rum) did.rum) - ?: &(?=(~ lat) ?=(~ ram)) ~&(%ack-late-or-redundant +>.$) + ?: &(?=(~ lat) ?=(~ ram)) + ~& %ack-late-or-redundant + [%| +>.$] + :- %& =+ ^- [ryn=lane dam=flap] ?^ ram [ryn.u.ram dam.u.ram] ?< ?=(~ lat) @@ -1322,7 +1321,7 @@ +> ?. (gte num did.rum) :: always ack a dup :: ~& [%deer-1 num] - (cook (~(get by bum.rum) num) cha ~ ryn dam) + con:(cook (~(get by bum.rum) num) cha ~ ryn dam) ?: dod.rum :: ~& [%deer-2 num] (coat cha rum(mis (~(put by mis.rum) num [kay ryn dam dut]))) @@ -1701,19 +1700,20 @@ ?> ?=([@ @ *] t.q.q.bon) :_ fox =+ [cak=i.t.q.q.bon ven=i.t.t.q.q.bon] - :~ =+ neh=(claw p.p.bon) - ?> ?=(^ neh) - =+ ton=[%waft p.bon r.bon] - :: ~& [%milk-waft [[ven `path`t.t.t.q.q.bon] t.neh]] - :- ?: =(%c ven) - ?> =(%re cak) - [[%c `path`t.t.t.q.q.bon] hen] - ?: =(%e ven) - ?> |(=(%pr cak) =(%pc cak)) - [[%e `path`t.t.t.q.q.bon] hen] - [[ven `path`t.t.t.q.q.bon] t.neh] - [%sick ton] - == + :_ ~ + =+ neh=(claw p.p.bon) + ?> ?=(^ neh) + ?: ?=(%e ven) + ?> |(=(%pr cak) =(%pc cak)) + :_ [%sick %wart p.bon cak `path`t.t.t.q.q.bon r.bon] + [[%e `path`t.t.t.q.q.bon] hen] + =+ ton=[%waft p.bon r.bon] + :: ~& [%milk-waft [[ven `path`t.t.t.q.q.bon] t.neh]] + :_ [%sick ton] + ?: =(%c ven) + ?> =(%re cak) + [[%c `path`t.t.t.q.q.bon] hen] + [[ven `path`t.t.t.q.q.bon] t.neh] ?> ?=(%q i.q.q.bon) ?> ?=([@ *] t.q.q.bon) ?+ i.t.q.q.bon @@ -1755,7 +1755,7 @@ %+ turn paz |= him=ship :- hen - [%pass /ye %g %mess [him ye/~] p.p.bon [%txt !>(;;(,@t r.bon))]] + [%pass /ye %g %mess [him ye/~] p.p.bon [%txt !>(((hard ,@t) r.bon))]] == :: %mulk @@ -1768,6 +1768,7 @@ :~ :- (claw p.p.bon) [%sick %wart p.bon i.t.q.q.bon t.t.q.q.bon r.bon] == + :: %ge :: %gall request =* imp t.t.q.q.bon ?> (levy imp (sane %ta)) @@ -1776,6 +1777,7 @@ (scot %p q.p.bon) q.q.bon :_ fox [hen %pass pax %g %rote p.bon imp r.bon]~ + :: %gh :: %gall response =* imp t.t.q.q.bon ?> (levy imp (sane %ta)) diff --git a/arvo/clay.hoon b/arvo/clay.hoon index 1e950bed9..ce0c2c163 100644 --- a/arvo/clay.hoon +++ b/arvo/clay.hoon @@ -407,7 +407,7 @@ =+ ^= lum ^- (unit (unit mizu)) %^ ~(construct-merge ze now dom ran) - ?:(=(0 let.dom) %init %mate) + ?:(=(0 let.dom) %init %meld) who :+ syd `saba`[her sud [0 let.der] der] @@ -677,14 +677,16 @@ =+ got=(~(has by fat.ruf) his) =+ luk=?.(?=(%$ -.lot) ~ ((soft case) p.lot)) ?~ luk [~ ~] - =+ une=(un his now ruf) ?: =(%$ ren) [~ ~] =+ run=((soft care) ren) ?~ run [~ ~] %+ bind %. [u.run u.luk tyl] - aver:?.(got (do now [his his] syd ruf) (di:une syd)) + =< aver + ?: got + (di:(un his now ruf) syd) + (do now [his his] syd ruf) |=(a=(unit) (bind a |=(b=* [%noun b]))) :: ++ stay [%0 ruf] diff --git a/arvo/dill.hoon b/arvo/dill.hoon index de4172097..a38c75f88 100644 --- a/arvo/dill.hoon +++ b/arvo/dill.hoon @@ -43,23 +43,15 @@ $: %c :: $% [%warp p=sock q=riff] :: == == :: - ::S $% $: %b :: to %batz - ::S $% [%hail ~] :: - ::S [%harm ~] :: - ::S [%hook ~] :: - ::S [%kill p=~] :: - ::S [%line p=@t] :: - ::S [%ling ~] :: - ::S [%make p=(unit ,@t) q=@ud r=@ s=?] :: - ::S [%sith p=@p q=@uw r=?] :: - ::S == == :: $: %d :: $% [%crud p=@tas q=(list tank)] :: [%text p=tape] :: == == :: $: %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] :: @@ -67,20 +59,6 @@ ++ riff ,[p=desk q=(unit rave)] :: see %clay ++ sign :: in result $<- $? - ::S $: %b :: by %batz - ::S $% [%hail ~] :: - ::S [%helo p=path q=prod] :: - ::S [%logo p=@] :: - ::S [%save p=path q=@] :: - ::S [%sage p=path q=*] :: - ::S [%talk p=tank] :: - ::S [%tell p=(list ,@t)] :: - ::S [%text p=tape] :: - ::S [%verb ~] :: - ::S [%veer p=@ta q=path r=@t] :: - ::S [%vega p=path] :: - ::S [%warn p=tape] :: - ::S == == :: $: %c :: $% [%writ p=riot] :: == == :: @@ -88,21 +66,18 @@ $% [%logo p=@] :: [%mean p=ares] :: [%nice ~] :: - $: %rush :: XX + $: %rush :: $% [%term-line q=term-line] :: [%hymn q=manx] :: - [%json q=json] :: - == == :: - $: %rust :: - $% [%term-line q=term-line] :: - [%hymn q=manx] :: - [%json q=json] :: == == :: [%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] :: @@ -111,12 +86,13 @@ ++ term-in :: $: pax=path :: $= jof :: - $% [%line p=span] :: + $% [%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=tank q=tank]) :: +++ tark ?(tank [%stem p=@da q=tank r=tank]) :: :::::::: :: dill tiles ++ bein :: terminal control $: $: bul=@ud :: buffer length @@ -170,6 +146,13 @@ %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 @@ -177,12 +160,12 @@ -- => |% ++ dy - |= [hen=duct our=ship def=(unit duct) dug=(map duct yard)] + |= [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] ~] + [& [80 ~ *blot] ~ | *@da] =| mos=(list move) |% ++ beep (curb [[%bel ~] ~]) :: send beep @@ -330,58 +313,35 @@ ?~ q.+.sih +>.^$ (fume:$(q.+.sih t.q.+.sih) '!' `tank`i.q.+.sih) :: - ::S %helo :: trigger prompt - ::S %- edit - ::S =| bed=bein - ::S =+ ^= hyt ^- hist - ::S =+ hyt=(~(get by r.yar) p.+.sih) - ::S ?~(hyt *hist u.hyt) - ::S ?: &(?=(^ q.q.yar) =(p.+.sih hux.u.q.q.yar)) - ::S %= u.q.q.yar - ::S hyt [+(p.hyt) [%$ q.hyt]] - ::S pot q.q.+.sih - ::S pol (lent q.q.+.sih) - ::S buy p.q.+.sih - ::S == - ::S =+ zon=(tuba r.q.+.sih) - ::S =+ zow=(lent zon) - ::S %= bed - ::S bul zow - ::S bus zow - ::S but zon - ::S buy p.q.+.sih - ::S hux p.+.sih - ::S hiz 0 - ::S hyt [+(p.hyt) [%$ q.hyt]] - ::S pot q.q.+.sih - ::S pol (lent q.q.+.sih) - ::S == - ::S :: - ::S ?(%hail %make %sith) - ::S +>.$(mos :_(mos [hen %pass ~ %b +.sih])) - ::S :: %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) =. +>.$ - =- (furl (zing (turn (flop r.q.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 ~[~(ram re p.a) ~(ram re p.a)] + ?+ -.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 (met 3 r.p.q.sih) - bus ?~ r.p.q.sih bus.u.q.q.yar (met 3 r.p.q.sih) - but ?~ r.p.q.sih but.u.q.q.yar (rip 3 r.p.q.sih) + 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) @@ -406,10 +366,22 @@ ?(%init %logo %veer %vega %verb) :: drop-throughs +>(mos :_(mos [hen %give +.sih])) %writ :: file exists - %= +>.$ + %_ +>.$ mos :_ mos - [hen %pass / %g %show [our /terminal] our /lines] + [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 %|)) == == :: @@ -420,6 +392,16 @@ %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" @@ -493,6 +475,7 @@ $(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))) @@ -524,6 +507,12 @@ == %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 @@ -536,6 +525,20 @@ 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 @@ -644,6 +647,7 @@ :: %hail :: refresh +>.$ + ::+>.$(mos :_(mos (poke %term-ctrl -:!>(%hail) %hail))) :: %harm :: all terms hung up =+ nug=((map duct yard) [[hen (~(get by dug) hen)] ~ ~]) @@ -674,7 +678,7 @@ ++ poke |= msg=mess ^- move - :^ hen %pass / + :^ hen %pass /term-mess :^ %g %mess [our /terminal] :- our msg :: @@ -684,7 +688,7 @@ (~(put by dug) hen yar) -- -- -=| $: %0 :: +=| $: %1 :: our=ship :: def=(unit duct) :: dug=(map duct yard) :: @@ -710,7 +714,7 @@ :_ ..^$ %+ 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 def dug) q.hic) + =+ res=yerk:(lear:(dy hen our now def dug) q.hic) [-.res ..^$(our +<.res, dug +>+.res, def +>-.res)] :: ++ doze @@ -718,20 +722,32 @@ ^- (unit ,@da) ~ :: -++ load - |= old=[%0 our=ship def=(unit duct) dug=(map duct yard)] +++ 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)] + == ^+ ..^$ - ..^$(our our.old, def def.old, dug dug.old) + ?- -.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 [%0 our def 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 def dug) tea q.hin) + =+ res=yerk:(leap:(dy hen our now def dug) tea q.hin) [-.res ..^$(our +<.res, dug +>+.res, def +>-.res)] -- diff --git a/arvo/eyre.hoon b/arvo/eyre.hoon index 488092ee1..a4267f902 100644 --- a/arvo/eyre.hoon +++ b/arvo/eyre.hoon @@ -1,4 +1,4 @@ -:: :: %eyre, http servant +!: :: %eyre, http servant !? 164 :::: |= pit=vase @@ -46,6 +46,7 @@ $% [%mess p=hapt q=ship r=cage] :: [%nuke p=hapt q=ship] :: [%show p=hapt q=ship r=path] :: + [%took p=hapt q=ship] :: == == :: $: %t :: to %temp $% [%wait p=@da] :: @@ -132,7 +133,6 @@ == :: ++ dual ,[p=@ud q=(each ,[p=ship q=hole] ship)] :: request handle ++ dude ,[p=@tas q=@] :: client identity -++ loco ,[p=? q=(unit ,@tas) r=path] :: logical construct ++ pest :: request in progress $| $? %new :: virgin %way :: waiting @@ -225,7 +225,7 @@ ?~ - ~ =+ ^= pax %+ rush pax.u - ;~(pfix fas (more fas (cook crip (plus ;~(pose low nud hep))))) + ;~(pfix fas (more fas ;~(simu next urs:ab))) ?~ pax ~ `[[his.u app.u] u.pax] :: @@ -401,13 +401,17 @@ ?: ?=(%mess i.mab) (hear:woy ~ %& %json !>(jon)) =+ can=(slav %ud i.t.mab) - =+ sem=(need (~(get by can.sub.siq:beat:u.ouy) can)) - (soon %& sem u.ouy can %show ?.(?=(%show i.mab) jon (wrap sem jon))) + =+ sem=(~(get by can.sub.siq:beat:u.ouy) can) + ?~ sem :: XX shouldn't occur + u.ouy + (soon %& u.sem u.ouy can %show ?.(?=(%show i.mab) jon (wrap u.sem jon))) :: ?(%rust %rush) ?> ?=(%show i.mab) =+ can=(slav %ud i.t.mab) =+ sem=(need (~(get by can.sub.siq:beat:u.ouy) can)) + =. mow.u.ouy + :_(mow.u.ouy [hen %pass tea [%g %took [- + ~]:hap.sem you.u.ouy]]) ?: =(0 can) =< abet =< work =< abet ?~ num.sem @@ -537,6 +541,7 @@ q.ask (~(del by q.ask) sud) kes (~(del by kes) hen) == + :: ~& eyre-them/(earn p.u.p.kyz) %= +>.$ mow :_(mow [ged [%give %thus p.ask p.kyz]]) p.ask +(p.ask) @@ -546,6 +551,7 @@ :: %they :: inbound response =+ kas=(need (~(get by q.ask) p.kyz)) + :: ~& > eyre-they/[p.q.kyz (earn p.q.kas)] %= +>.$ mow :_(mow [p.kas [%give %thou q.kyz]]) q.ask (~(del by q.ask) p.kas) @@ -563,7 +569,7 @@ ?> ?=([~ @ ~] hot) [[sec (rash i.u.hot thor:epur)] p.ryp q.ryp] == - =. p.p.pul |(p.p.pul =([& /localhost] r.p.pul)) + =. p.p.pul |(p.p.pul ?=(hoke r.p.pul)) (hell pul +.kyz [p.heq mah s.heq]) :: %thud :: cancel request @@ -649,12 +655,12 @@ ++ haji :: send %pc login |= [our=ship him=ship ses=hole] ^+ +> - +>.$(mow :_(mow [hen %pass ~ %a [%want [our him] [%r %pc ~] ses]])) + +>.$(mow :_(mow [hen %pass ~ %a [%want [our him] [%r %pc %e ~] ses]])) :: ++ hajj :: send %pr response |= [our=ship him=ship tus=path har=httr] ^+ +> - +>.$(mow :_(mow [hen %pass ~ %a [%want [our him] [%r %pr tus] har]])) + +>.$(mow :_(mow [hen %pass ~ %a [%want [our him] [%r %pr %e tus] har]])) :: ++ hare :: receive request |= [our=ship tus=path him=ship hor=*] @@ -867,14 +873,15 @@ [~ u=~(. ya [our ses] u.suf u.cuz)] :: ++ noon :: login page - |= [our=ship whu=(unit ship) rul=tape ruf=tape] + |= [our=ship ses=hole whu=(unit ship) rul=tape] ^- manx =+ ^= sic ^- manx ;script:''' var seal = { who: goal, url: burl, - pas: null + pas: null, + ses: sesh } var hist = [] var hind = 0 @@ -908,12 +915,13 @@ } if(seal.who !== host) { - var foreign = {oth: host, ses: session}; - var all = $.extend({}, seal, foreign); + var all = $.extend({}, seal, {oth:host}); + delete all.pas; console.log('redirect') - window.location="http://"+seal.who+".urbit.org/gul" - + $.params(all); + window.location= // "http://"+seal.who+".urbit.org/gul?" + "http://0:8445/gul?" + + $.param(all); return false; } @@ -927,12 +935,16 @@ login = function() { seal.pas = $input.val() + var oth = /[&?]oth=[^&]*/.exec(location.search) + if(oth && oth.length) + seal.oth = oth[0].slice(5) output = $output.html() console.log($output.html()) - $output.html(output.replace('sorry. please try again.
','')) + $output.html(output.replace( + 'sorry. please try again.
','')) - $.post(form, seal, function(data,xhr,status) { + $.post("/pul", seal, function(data,xhr,status) { console.log(data); if(data.ok == true) { document.location = data.next; @@ -984,7 +996,7 @@ ; var host = '{(trip (rsh 3 1 (scot %p our)))}'; ; var goal = '{?~(whu ~ (trip (rsh 3 1 (scot %p u.whu))))}'; ; var burl = '{rul}'; - ; var form = '{ruf}'; + ; var sesh = '{(trip ses)}'; == => .(+.sic (weld `marl`cof `marl`+.sic)) =+ jqu="//ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" @@ -1420,9 +1432,7 @@ ++ foal :: url from query |= [nam=@t yaq=(map ,@t ,@t)] ^- (unit purl) - =+ uru=(~(get by yaq) %url) - ?~ uru ~ - (rush u.uru auri:epur) + (biff (~(get by yaq) %url) epur) :: ++ folk :: seal from query |= quy=quay @@ -1586,20 +1596,16 @@ ^- (unit seam) :+ ~ %red - :: :+ [& q.p.pul r.p.pul] - %+ earl our - :+ [p.p.pul q.p.pul r.p.pul] + :: :+ [p.p.pul q.p.pul r.p.pul] + :+ [| q.p.pul r.p.pul] :: XX https [~ /gul] - :- [%url (crip (urle (earn (earl our pul))))] + :- [%url (crip (earn pul(p.p |)))] ?~ whu ~ [%who (rsh 3 1 (scot %p u.whu))]~ :: ++ holy :: structured request |= [pul=purl moh=moth] ^- (unit seam) - ?: &(=(%get p.moh) ?=([~ [@ ~]] q.pul)) :: app shortcut - :: XX use credential to figure out gog/gig - $(q.pul [`%html [%gog i.q.q.pul ~]]) ?~ q.q.pul ~ =* nep i.q.q.pul =+ paw=t.q.q.pul @@ -1641,7 +1647,17 @@ :: !&(=(%c tri) !=(%o two)) =(3 (met 3 nep)) - == + == + ?: &(=(%get p.moh) ?=([~ [@ ~]] q.pul)) :: app shortcut + =- $(q.pul [`%html -]) + =+ ato=(~(tap in (~(get ju aut.ced) %$))) + =+ att=`(list ship)`(murn ato |=(a=span (slaw %p a))) + ?~ att [%geg i.q.q.pul ~] + ?: (~(has in (sa att)) our) + [%gog i.q.q.pul ~] + :+ %gig + (rsh 3 1 (scot %p (snag 0 (sort att lth)))) + /[i.q.q.pul] ~ =^ yun paw ?+ two ~ @@ -1650,10 +1666,10 @@ [(slav %p (cat 3 '~' i.paw)) t.paw] %o [our paw] == - :: ?: &(=(%i two) =(~ aut.ced)) - :: (holt ~ pul) - :: ?: &(=(%o two) !(~(has ju aut.ced) %$ (scot %p our))) - :: (holt [~ our] pul) + ?: &(=(%i two) !(lash yun) !=(yun (shaf %fake ses))) + (holt [~ yun] pul) + ?: &(=(%o two) !(lash our)) + (holt [~ our] pul) ?+ one ~ %g ?+ tri ~ @@ -1723,6 +1739,16 @@ u.pup(pez [%fin %raw cod *mess `*octs]) == :: + ++ erle :: url localize + |= [his=ship pul=purl] ^- purl + =+ pod=(mo (turn (~(tap by dop)) |=([p=host q=ship] [q p]))) + ?: (~(has by pod) his) + pul(p [& ~ (~(got by pod) his)]) + ?: ?=(hoke r.p.pul) + ~| %no-port + pul(q.p [~ ?+(his !! %~zod 8.443)]) :: XX + pul(p [& ~ [~ /org/urbit/(rsh 3 1 (scot %p his))]]) + :: ++ inch :: function built |= [num=@ud mez=(each bead (list tank))] ^+ +> @@ -1764,8 +1790,12 @@ :: ++ lass :: load secret ^- @ta + =+ pax=/(scot %p our)/code/(scot %da now)/(scot %p our) %^ rsh 3 1 - (scot %p (,@ (need (sky %a (scot %p our) %code (scot %da now) ~)))) + (scot %p (,@ (need (sky %a pax)))) + :: + ++ lash :: user is authorized + |=(a=ship (~(has ju aut.ced) %$ (scot %p a))) :: ++ step :: step in work |- ^+ + @@ -1783,6 +1813,7 @@ ++ wink :: advance request |= [num=@ud pip=pimp] ^- [(unit pimp) _+>] + :: ~& wink-do/[?@(pez.pip pez.pip -.pez.pip) -.som.pip] ?- pez.pip %way [[~ pip] +>.$] %new @@ -1853,43 +1884,47 @@ +>.$(..ya (honk our num ses kas)) :: %lon - ?^ pus.p.som.pip - ?. =(lass u.pus.p.som.pip) - :_ +>.$ - :- ~ - %= pip - pez - [%fin %mid /text/json (tact (pojo (jobe [%ok [%b |]]~)))] + ^- [(unit pimp) _+>.$] + ?~ pus.p.som.pip + :_ +>.$ + ?: ?~ whu.p.som.pip | + (lash u.whu.p.som.pip) + [~ pip(som [%red pul.p.som.pip])] + ?: wit.p.som.pip + [~ pip(pez [%who %$ (scot %p (need whu.p.som.pip))])] + =+ rul=(earn pul.p.som.pip) + =+ sus=?~(foy.p.som.pip ses q.u.foy.p.som.pip) + ~& auth-request/secret=`cord`lass + =+ ham=(noon our sus whu.p.som.pip rul) + [~ pip(pez [%fin %ham ham])] + ?. =(lass u.pus.p.som.pip) + :_ +>.$ + :- ~ + %= pip + pez + [%fin %mid /text/json (tact (pojo (jobe [%ok [%b |]]~)))] + == + =. aut.ced (~(put ju aut.ced) %$ (scot %p (need whu.p.som.pip))) + ?~ foy.p.som.pip + =+ ^= jon + %- jobe + :~ [%ok [%b &]] + [%next (jape (earn pul.p.som.pip))] == - =. aut.ced (~(put ju aut.ced) %$ (scot %p (need whu.p.som.pip))) - ?~ foy.p.som.pip - =+ ^= jon - %- jobe - :~ [%ok [%b &]] - [%next (jape (earn pul.p.som.pip))] - == - :_(+>.$ [~ pip(pez [%fin %mid /text/json (tact (pojo jon))])]) - =. ..ya (haji our u.foy.p.som.pip) - =+ ^= lup ^- purl - :+ ^- hart - :+ & ~ - [%& ~[%org %urbit (rsh 3 1 (scot %p p.u.foy.p.som.pip))]] - ^- pork - [~ /gul] - ^- quay - :~ [%who (rsh 3 1 (scot %p (need whu.p.som.pip)))] - [%url (crip (earn pul.p.som.pip))] - [%wit %yes] - == - =+ jon=(jobe ~[[%ok [%b &]] [%next (jape (earn lup))]]) :_(+>.$ [~ pip(pez [%fin %mid /text/json (tact (pojo jon))])]) - :_ +>.$ - ?: wit.p.som.pip - [~ pip(pez [%who %$ (scot %p (need whu.p.som.pip))])] - =+ rul=(earn pul.p.som.pip) - =+ ruf=(earn (earl our pul.p.som.pip(q.q /pul, r ~))) - =+ ham=(noon our whu.p.som.pip rul ruf) - [~ pip(pez [%fin %ham ham])] + =. ..ya (haji our u.foy.p.som.pip) + =+ ^= lup ^- purl + %+ erle p.u.foy.p.som.pip + :+ `hart`p.pul.p.som.pip + ^- pork + [~ /gul] + ^- quay + :~ [%who (rsh 3 1 (scot %p (need whu.p.som.pip)))] + [%url (crip (earn pul.p.som.pip))] + [%wit %yes] + == + =+ jon=(jobe ~[[%ok [%b &]] [%next (jape (earn lup))]]) + :_(+>.$ [~ pip(pez [%fin %mid /text/json (tact (pojo jon))])]) :: %red :_ +>.$ @@ -1898,7 +1933,7 @@ pez :- %fin :- %raw - :+ 301 + :+ 307 [%location (crip (earn p.som.pip))]~ ~ == @@ -2022,7 +2057,7 @@ |= nap=@ud =+ suy=(~(get by sok) nap) ?~ suy ~ - (some ~(. yo nap u.suy)) + (some ~(. yo nap=nap you=p.u.suy siq=q.u.suy)) :: ++ yo :: app instance |_ $: nap=@ud :: instance number @@ -2119,7 +2154,7 @@ =. +>.$ ?. =(cnt num.meg.siq) +>.$ %+ pass(num.meg.siq +(num.meg.siq)) [%| hap] - `note`[%f %exec you ~ %cast for %done ~ %json !>(jon)] + `note`[%f %exec our ~ %cast for %done ~ %json !>(jon)] ?. =(+(cnt) num.meg.siq) +>.$(..yo (bust 204 num)) (hire:(yule %meg) cnt num) @@ -2128,8 +2163,8 @@ |= [num=@ud hap=hasp pax=path] ^- [(unit pimp) _+>] =. +>.$ - %+ ~(rep by can.sub.siq) +>.$ - |= [p=[p=@ud q=stem] q=_+>.$] + %- ~(rep by can.sub.siq) + =+ [*p=[p=@ud q=stem] q=+>.$] |. ?. =([hap pax] [hap.q.p pax.q.p]) q =. q q(can.sub.siq (~(del by can.sub.siq:q) p.p)) ([-(hen +)]:[pass:q hen.q.p] `p.p %g %nuke [- + ~]:hap you) diff --git a/arvo/ford.hoon b/arvo/ford.hoon index b5ebeb90a..5cff17b17 100644 --- a/arvo/ford.hoon +++ b/arvo/ford.hoon @@ -37,9 +37,10 @@ [%dub p=term q=horn] :: /= apply face [%fan p=(list horn)] :: /. list [%for p=path q=horn] :: /, descend + [%hel p=horn] :: /% propogate heel [%hub p=horn] :: /@ list by @ud [%man p=(map span horn)] :: /* hetero map - [%nap p=horn] :: /% homo map + [%nap p=horn] :: /_ homo map [%now p=horn] :: /& list by @da [%saw p=twig q=horn] :: /; operate on [%see p=beam q=horn] :: /: relative to @@ -94,7 +95,7 @@ $: p=cafe :: cache $= q :: $% [%0 p=(set beam) q=a] :: depends/product - [%1 p=(set ,[p=beam q=(list tank)])] :: blocks + [%1 p=(set ,[p=care q=beam r=(list tank)])] :: blocks [%2 p=(list tank)] :: error == :: == :: @@ -114,13 +115,15 @@ == :: ++ calx :: concrete cache line $% [%hood p=calm q=(pair beam cage) r=hood] :: compile + [%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 == :: ++ task :: problem in progress $: nah=duct :: cause kas=silk :: problem - kig=[p=@ud q=(map ,@ud beam)] :: blocks + kig=[p=@ud q=(map ,@ud ,[p=care q=beam])] :: blocks == :: -- :: |% :: @@ -131,6 +134,8 @@ %hood ?>(?=(%hood -.cax) r.cax) %slap ?>(?=(%slap -.cax) r.cax) %slam ?>(?=(%slam -.cax) r.cax) + %slim ?>(?=(%slim -.cax) r.cax) + %slit ?>(?=(%slit -.cax) r.cax) == :: ++ calk :: cache lookup @@ -151,16 +156,6 @@ ^- cafe :: [(grom p.a p.b) (grum q.a q.b)] :: :: :: -++ colt :: reduce to save - |= lex=axle :: - ^- axle - %= lex - pol - %- ~(run by pol.lex) - |= bay=baby - bay(jav ~) - == -:: ++ 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 ++ fest |*([a=cafe b=*] (fine a [~ u=b])) :: bolt to unit @@ -191,7 +186,6 @@ :: ++ za :: per event =| $: $: $: our=ship :: computation owner - tea=wire :: event place hen=duct :: event floor == :: $: now=@da :: event date @@ -224,6 +218,12 @@ == ~(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] ^+ +> @@ -246,7 +246,7 @@ == ++ camo :: stop requests ^+ . - =+ kiz=(~(tap by q.kig) *(list ,[p=@ud q=beam])) + =+ kiz=(~(tap by q.kig) *(list ,[p=@ud q=[p=care q=beam]])) |- ^+ +> ?~ kiz +> %= $ @@ -255,19 +255,19 @@ :- hen :^ %pass [(scot %p our) (scot %ud num) (scot %ud p.i.kiz) ~] %c - [%warp [our p.q.i.kiz] q.q.i.kiz ~] + [%warp [our p.q.q.i.kiz] q.q.q.i.kiz ~] == :: ++ camp :: request a file |= [ren=care bem=beam] ^+ +> %= +> - kig [+(p.kig) (~(put by q.kig) p.kig bem)] + kig [+(p.kig) (~(put by q.kig) p.kig [ren bem])] mow :_ mow :- hen :^ %pass [(scot %p our) (scot %ud num) (scot %ud p.kig) ~] %c - [%warp [our p.bem] q.bem [~ %& ren r.bem s.bem]] + [%warp [our p.bem] q.bem [~ %& ren r.bem (flop s.bem)]] == :: ++ clef :: cache a result @@ -339,22 +339,31 @@ ?- -.ton %2 [%2 p=p.ton] %0 [%0 p=*(set beam) q=(fun p.ton)] - %1 ~& [%coup-need ((list path) p.ton)] + %1 :: ~& [%coup-need ((list path) p.ton)] =- ?- -.faw - & [%1 p=(sa (turn p.faw |=(a=beam [a *(list tank)])))] + & :- %1 + ^= p + %- sa + %+ turn p.faw + |=(a=[care beam] [-.a +.a *(list tank)]) | [%2 p=p.faw] == ^= faw - |- ^- (each (list beam) (list tank)) + |- ^- (each (list (pair care beam)) (list tank)) ?~ p.ton [%& ~] =+ nex=$(p.ton t.p.ton) =+ pax=(path i.p.ton) ?~ pax [%| (smyt pax) ?:(?=(& -.nex) ~ p.nex)] + ?. ?=(%c (end 3 1 i.pax)) + [%| leaf/"blocking not clay" (smyt pax) ?:(?=(& -.nex) ~ p.nex)] + =+ ren=((soft care) (rsh 3 1 i.pax)) + ?~ ren + [%| leaf/"blocking not care" (smyt pax) ?:(?=(& -.nex) ~ p.nex)] =+ zis=(tome t.pax) ?~ zis - [%| (smyt pax) ?:(?=(& -.nex) ~ p.nex)] + [%| leaf/"blocking not beam" (smyt pax) ?:(?=(& -.nex) ~ p.nex)] ?- -.nex - & [%& u.zis p.nex] + & [%& [u.ren u.zis] p.nex] | nex == == @@ -374,10 +383,19 @@ ^+ +> %_(+> jav.bay q.cof) :: + ++ exit :: stateless exec + ^- (unit gift) + =+ bot=(make [~ jav.bay] kas) + :: =. ..exec (dash p.bot) + ?- -.q.bot + %0 `[%made %& p.q.bot q.q.bot] + %2 `[%made %| p.q.bot] + %1 ~ + == + :: ++ exec :: execute app ^+ ..zo ?: !=(~ q.kig) ..zo - |- ^+ ..zo =+ bot=(make [~ jav.bay] kas) =. ..exec (dash p.bot) ?- -.q.bot @@ -387,7 +405,7 @@ =< abet |- ^+ ..exec ?~ zuk ..exec - =+ foo=`_..exec`(camp %x `beam`p.i.zuk) + =+ foo=`_..exec`(camp p.i.zuk q.i.zuk) $(zuk t.zuk, ..exec foo) == :: @@ -418,9 +436,10 @@ =+ pax=/door/[for]/mar =+ ^= bem ^- beam :_ pax - ?: =(p.bek our) bek + ?: &(=(p.bek our) =(q.bek %main)) bek =+ oak=[our %main %da now] - ?. =(~ (ska %cy (tope [oak pax]))) oak + ?: ?=([~ ~ *] (ska %cy (tope [oak pax]))) + oak bek (cope (fade cof %hook bem) abut:(meow bem ~)) :: @@ -500,9 +519,10 @@ (stag %dub ;~(pfix tis dub:read)) (stag %fan ;~(pfix dot fan:read)) (stag %for ;~(pfix com for:read)) + (stag %hel ;~(pfix cen day:read)) (stag %hub ;~(pfix pat day:read)) (stag %man ;~(pfix tar man:read)) - (stag %nap ;~(pfix cen day:read)) + (stag %nap ;~(pfix cab day:read)) (stag %now ;~(pfix pam day:read)) (stag %saw ;~(pfix sem saw:read)) (stag %see ;~(pfix col see:read)) @@ -646,8 +666,9 @@ ++ lamp :: normalize version |= [cof=cafe bem=beam] ^- (bolt beam) + ?: ?=(%ud -.r.bem) (fine cof bem) =+ von=(ska %cw (tope bem(s ~))) - ?~ von [p=cof q=[%1 [bem ~] ~ ~]] + ?~ von [p=cof q=[%1 [%w bem ~] ~ ~]] (fine cof bem(r [%ud ((hard ,@) (need u.von))])) :: ++ lave :: validate @@ -672,7 +693,7 @@ |= [cof=cafe bem=beam] ^- (bolt arch) =+ von=(ska %cy (tope bem)) - ?~ von [p=cof q=[%1 [bem ~] ~ ~]] + ?~ von [p=cof q=[%1 [%y bem ~] ~ ~]] (fine cof ((hard arch) (need u.von))) :: ++ liar :: load vase @@ -680,7 +701,7 @@ ^- (bolt vase) =+ von=(ska %cx (tope bem)) ?~ von - [p=*cafe q=[%1 [[bem ~] ~ ~]]] + [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) @@ -768,11 +789,11 @@ ?. ?=(%0 -.q.rof) [rof +>.$] ?~ q.q.rof [[p.rof [%0 p.q.rof ~]] +>.$] - =^ orf +>.$ (apse cof i.q.q.rof) + =^ orf +>.$ (apse p.rof i.q.q.rof) ?. ?=(%0 -.q.orf) [orf +>.$] ?~ q.q.orf - $(cof p.orf, q.q.rof t.q.q.rof) + $(p.rof p.orf, q.q.rof t.q.q.rof) [[p.orf [%0 (grom p.q.rof p.q.orf) q.q.orf]] +>.$] :: ++ apse @@ -797,18 +818,24 @@ |= [cof=cafe yed=vase] ^$(cof cof, for i.yaw, yaw t.yaw, vax yed) :: + ++ mail :: cached mint + |= [cof=cafe sut=type gen=twig] + ^- (bolt (pair type nock)) + %+ (clef %slim) (fine cof sut gen) + |= [cof=cafe sut=type gen=twig] + =+ puz=(mule |.((~(mint ut sut) [%noun gen]))) + ?- -.puz + | (flaw cof p.puz) + & (fine cof p.puz) + == + :: ++ maim :: slap |= [cof=cafe vax=vase gen=twig] ^- (bolt vase) - %+ (clef %slap) (fine cof vax gen) - |= [cof=cafe vax=vase gen=twig] - =+ puz=(mule |.((~(mint ut p.vax) [%noun gen]))) - ?- -.puz - | (flaw cof p.puz) - & %+ (coup cof) (mock [q.vax q.p.puz] (mole ska)) - |= val=* - `vase`[p.p.puz val] - == + %+ cope (mail cof p.vax gen) + |= [cof=cafe typ=type fol=nock] + %+ (coup cof) (mock [q.vax fol] (mole ska)) + |=(val=* `vase`[typ val]) :: ++ make :: reduce silk |= [cof=cafe kas=silk] @@ -844,7 +871,7 @@ (fine cof `cage`[p.kas vax]) :: %call - %+ cool |.(leaf/"ford: call {<`@p`(mug kas)>}") + :: %+ cool |.(leaf/"ford: call {<`@p`(mug kas)>}") %. [cof p.kas q.kas] ;~ cope ;~ coax @@ -895,18 +922,24 @@ (fine cof `cage`[p.kas vax]) == :: + ++ malt :: cached slit + |= [cof=cafe gat=type sam=type] + ^- (bolt type) + %+ (clef %slit) (fine cof gat sam) + |= [cof=cafe gat=type sam=type] + =+ top=(mule |.((slit gat sam))) + ?- -.top + | (flaw cof p.top) + & (fine cof p.top) + == + :: ++ maul :: slam |= [cof=cafe gat=vase sam=vase] ^- (bolt vase) - %+ (clef %slam) (fine cof gat sam) - |= [cof=cafe gat=vase sam=vase] - =+ top=(mule |.((slit p.gat p.sam))) - ?- -.top - | (flaw cof p.top) - & %+ (coup cof) (mong [q.gat q.sam] (mole ska)) - |= val=* - `vase`[p.top val] - == + %+ cope (malt cof p.gat p.sam) + |= [cof=cafe typ=type] + %+ (coup cof) (mong [q.gat q.sam] (mole ska)) + |=(val=* `vase`[typ val]) :: ++ meow :: assemble |= [how=beam arg=heel] @@ -1051,6 +1084,7 @@ (slop i.tev $(tev t.tev)) :: %for $(hon q.hon, s.how (weld (flop p.hon) s.how)) + %hel $(hon p.hon, arg /, s.how (weld arg s.how)) %hub (chad cof bax %ud p.hon) %man |- ^- (bolt vase) @@ -1085,7 +1119,7 @@ (flaw cof [%leaf "type error: {} {}"]~) (fine cof [p.tug q.vax]) :: - %toy (cope (make cof %bake p.hon how arg) feel) + %toy (cope (make cof %boil p.hon how ~) feel) == :: ++ head :: consume structures @@ -1191,16 +1225,19 @@ ^+ ..zo ?> (~(has by q.kig) tik) ?~ rot - amok:(expo [%made %| (smyt (tope (need (~(get by q.kig) tik)))) ~]) + =+ `[ren=care bem=beam]`(~(got by q.kig) tik) + amok:(expo [%made %| (smyt ren (tope bem)) ~]) exec(q.kig (~(del by q.kig) tik)) -- -- +:: -- . == =| axle =* lex - |= [now=@da eny=@ ski=sled] :: activate ^? :: opaque core +~% %ford-d +>+>+>+>+>+> ~ |% :: ++ call :: request |= [hen=duct hic=(hypo (hobo kiss))] @@ -1215,7 +1252,7 @@ =+ buy=(~(get by pol.lex) our) ?~(buy *baby u.buy) =^ mos bay - abet:(~(apex za [[our ~ hen] [now eny ska] ~] bay) q.q.hic) + abet:(~(apex za [[our hen] [now eny ska] ~] bay) q.q.hic) [mos ..^$(pol (~(put by pol) our bay))] :: ++ doze @@ -1243,7 +1280,7 @@ ++ scry |= [fur=(unit (set monk)) ren=@tas who=ship syd=desk lot=coin tyl=path] ^- (unit (unit (pair mark ,*))) - ~ + [~ ~] :: ++ stay :: save w/o cache `axle`+>-.$(pol (~(run by pol) |=(a=baby [tad.a dym.a ~]))) @@ -1257,8 +1294,8 @@ num=(need (slaw %ud i.t.tea)) tik=(need (slaw %ud i.t.t.tea)) == - =+ bay=(need (~(get by pol.lex) our)) + =+ bay=(~(got by pol.lex) our) =^ mos bay - abet:(~(axon za [[our tea hen] [now eny ska] ~] bay) num tik q.hin) + abet:(~(axon za [[our hen] [now eny ska] ~] bay) num tik q.hin) [mos ..^$(pol (~(put by pol) our bay))] -- diff --git a/arvo/gall.hoon b/arvo/gall.hoon index 6161b0575..430989c61 100644 --- a/arvo/gall.hoon +++ b/arvo/gall.hoon @@ -31,6 +31,7 @@ [%nuke p=hapt q=ship] :: clear duct [%rote p=sack q=path r=*] :: remote request [%roth p=sack q=path r=*] :: remote response + [%took p=hapt q=ship] :: remote acknowledge [%wipe p=hapt] :: forget app == :: ++ knob :: pending action @@ -45,6 +46,8 @@ [%sire p=term q=span] :: spawn subprocess [%nuke p=ship] :: clear duct [%take p=path q=vase] :: user result + [%took p=ship] :: rush queue drained + [%told p=ship] :: rush queue filled == :: ++ mast :: apps by ship $: hun=duct :: control duct @@ -67,11 +70,11 @@ [%sire p=term q=hapt] :: [%mess p=hapt q=ship r=cage] :: [%nuke p=hapt q=ship] :: + [%took p=hapt q=ship] :: == == :: $: @tas :: to any $% [%meta p=vase] :: == == == :: -++ rapt |*(a=$+(* *) (qual path path ,@da a)) :: versioned result ++ rave :: see %clay $% [& p=mood] :: single request [| p=moat] :: change range @@ -88,9 +91,9 @@ r=(map bone duct) :: by bone == :: ++ roon :: foreign response - $% [%d p=mark q=*] :: diff + $% [%d p=mark q=*] :: diff (rush) [%e p=ares] :: error - [%f p=mark q=*] :: full refresh + [%f p=mark q=*] :: full refresh (rust) [%k ~] :: message response == :: ++ rook :: foreign request @@ -100,20 +103,24 @@ == :: ++ seat :: the living app $: app=term :: app name - huv=(unit vase) :: application vase - qic=(unit toil) :: current project - onz=(unit (pair duct path)) :: live fords - vey=(qeu toil) :: pending projects + $: huv=(unit vase) :: application vase + qic=(unit toil) :: current project + onz=(unit (pair duct path)) :: live fords + vey=(qeu toil) :: pending projects + == :: nuc=(set duct) :: nuked ducts - tik=@ud :: build number - act=@ud :: action number - lat=@da :: last change - orm=(unit ,@da) :: build date + $: tik=@ud :: build number + act=@ud :: action number + lat=@da :: last change + orm=(unit ,@da) :: build date + == :: mom=(unit duct) :: parent duct cub=(map span term) :: offspring - sup=(map bone (pair ship path)) :: subscribers - pus=(jug path bone) :: srebircsbus - peq=(map bone ,@uvI) :: peekers + $: sup=(map bone (pair ship path)) :: subscribers + pus=(jug path bone) :: srebircsbus + peq=(map bone ,@uvI) :: peekers + qel=(map bone ,@ud) :: rush queue length + == :: ped=(set (pair ship desk)) :: active depends zam=scar :: opaque ducts == :: @@ -158,16 +165,6 @@ ++ toil (pair duct knob) :: work in progress -- :::::::::::::::::::::::::::::::::::::::::::::::::::::: |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: functions -++ byby :: double bind - |* [a=(unit (unit)) b=$+(* *)] - ?~ a ~ - ?~ u.a [~ u=~] - [~ u=[~ u=(b u.u.a)]] -:: :: -++ colt :: reduce to save - |= all=axle :: - all -:: ++ read :: read permission |= law=(unit cuff) ^- (unit (set monk)) @@ -202,21 +199,14 @@ :- ?~(p.u.a ~ ?~(p.u.b ~ `(grom u.p.u.b u.p.u.a))) (grom q.u.b q.u.a) :: -++ lamp - |= con=(unit coin) - ^- (unit path) - ?. ?=([~ %many *] con) ~ - %- zl:jo - %+ turn p.u.con - |= tem=coin - ?.(?=([%$ %ta @] tem) ~ (some q.p.tem)) -:: ++ lump :: position |= pax=path ^- [p=hapt q=path] - ?> ?=([@ @ *] pax) + ?. ?=([@ @ *] pax) + ~& [%lump-path-bad pax] + !! :- :- (slav %p i.pax) - (need (lamp (slay i.t.pax))) + (need (pick i.t.pax)) t.t.pax -- . == :: end preface @@ -233,17 +223,21 @@ ?- -.q.hic %init [p=~ q=..^$(pol.all (~(put by pol.all) p.q.hic hen ~ ~))] + :: %rote (gawk hen p.q.hic q.q.hic ((hard ,[@ud rook]) r.q.hic)) + :: %roth (gawd hen p.q.hic q.q.hic ((hard ,[@ud roon]) r.q.hic)) + :: %wipe =+ mat=(~(got by pol.all) p.p.q.hic) ~? !(~(has by bum.mat) q.p.q.hic) [%wipe-lost q.p.q.hic] =. bum.mat (~(del by bum.mat) q.p.q.hic) =. pol.all (~(put by pol.all) p.p.q.hic mat) [p=~ q=..^$] - ?(%mess %show %nuke %sire) + :: + ?(%mess %show %nuke %took %sire) |- ^- [p=(list move) q=_..^^$] =+ =| law=(unit cuff) |- ^- $: law=(unit cuff) @@ -256,6 +250,7 @@ %mess [p %mess q r]:q.hic %show [p %show q r]:q.hic %nuke [p %nuke q]:q.hic + %took [p %took q]:q.hic %sire [[p.q +.q.q] %sire p -.q.q]:q.hic == ((goad hen law) p.hap q.hap kon) @@ -265,7 +260,8 @@ |= [pax=path hen=duct hin=(hypo sign)] :: ^- [p=(list move) q=_..^$] ?: ?=(%crud +<.q.hin) - ~& [%gall-crud-error pax hen q.hin] + ~& [%gall-crud-error pax hen] + ~& [%gall-crud-data (,[@tas (list tank)] +>.q.hin)] ?> ?=(%g -.q.hin) ?~ pax ~& %strange-path [~ ..^$] =+ lum=(lump t.pax) @@ -274,7 +270,6 @@ =+ sat=(~(get by bum.u.mat) q.p.lum) ?~ sat ~& %no-app [~ ..^$] :- `(list move)`[hen %give %crud p.q.hin q.q.hin]~ - ~& [%crud-stuff qic=?~(qic.u.sat ~ [p -.q]:u.qic.u.sat) onz=onz.u.sat] %= ..^$ :: XX maybe call work? pol.all %+ ~(put by pol.all) p.p.lum @@ -294,7 +289,9 @@ ?~ mat [~ ..^$] =+ sat=(~(get by bum.u.mat) q.p.lum) ?~ sat [~ ..^$] - ?. (~(has by q.zam.u.sat) hen) ~& %app-lost [~ ..^$] + :: ?. (~(has by q.zam.u.sat) hen) + :: ~& [%app-lost pax hen p.lum q.lum] + :: [~ ..^$] =< abet =< work (more:(bear:(gaff p.lum) hen) q.lum hin) :: @@ -360,7 +357,10 @@ |= [hen=duct law=(unit cuff)] |= [our=@p imp=path kon=knob] ^- [(list move) _..^^$] - ?> ?=(?(%mess %show %nuke) -.kon) + ?> ?=(?(%mess %show %nuke %took) -.kon) + ?: ?=(%took -.kon) + :: ~& [%gape-took our imp hen] + [~ ..^^$] =+ you=`ship`?-(-.kon %mess p.kon, %nuke p.kon, %show p.kon) =+ mat=(~(got by pol.all) you) =+ sad==+(sad=(~(get by sap.mat) our) ?^(sad u.sad [.(p 1)]:*scad)) @@ -395,11 +395,14 @@ ^- [(list move) _..^$] ?+ -.sih !! %a - ?> ?=(%woot +<.sih) + ?. ?=(%woot +<.sih) + ~& [%gall-bad-gasp-a pax=pax lgsih=+<.sih] + ~& [%gall-bad-gasp-b pax=pax sih=sih] `..^$ :_ ..^$ :_ ~ ?~ q.sih [hen %give %nice ~] [hen %give %mean u.q.sih] + :: %f :_ ..^$ :_ ~ @@ -425,6 +428,7 @@ num=(slav %ud i.t.t.t.pax) imp=`path`t.t.t.t.pax == + :: ~& [%gall-gave hen -.pax [our you num imp]] :_ ..^$ =+ rod=|=(ron=roon `note`[%a %wont [our you] [%q %gh imp] num ron]) ?+ -.pax !! @@ -456,7 +460,8 @@ == == %s ?+ -.sih !! - %a ~ + %a :_ ~ :- hen + [%pass [%r pax] %g %took [our imp] you] %g :_ ~ :- hen ?- -.+.sih @@ -465,11 +470,11 @@ %gone !! %init !! %logo !! - %logo !! - %mean [%give %mean p.+.sih] + %mean [%pass [%r pax] (rod %e p.+.sih)] %nice [%give %nice ~] %rush [%pass [%r pax] (rod %d p.+.sih q.+.sih)] - %rust [%pass [%r pax] (rod %f p.+.sih q.+.sih)] + %rust :: ~& [%gave-rust [our you num imp] hen] + [%pass [%r pax] (rod %f p.+.sih q.+.sih)] %sage !! %verb !! %veer !! @@ -539,6 +544,8 @@ ^- [(list move) _..^^$] =+ mut=(~(get by pol.all) our) ?^ mut + ?: &(?=([@ @ *] imp) !(~(has by bum.u.mut) imp)) :: %took for dead imps + [~ ..^^$] abet:work:(quem:(boar:(gent our imp u.mut) hen law) kon) ((gape hen law) our imp kon) :: @@ -562,14 +569,19 @@ == == :: + ++ able :: bone to duct + |= ost=bone ^- duct + ?: =(0 ost) + [(away ~) ~] + (~(got by r.zam.sat) ost) + :: ++ away :: application path |= pax=path ^- path - =+ imc=[%many (turn imp |=(a=span [%$ %ta a]))] - [%a (scot %p our) ~(rent co imc) pax] + [%a (scot %p our) ?~(imp %$ (pack imp)) pax] :: ++ bear :: write backward |= hen=duct - =+ orf=(~(got by q.zam.sat) hen) + =+ orf=(fall (~(get by q.zam.sat) hen) [p=0 q=*(unit cuff)]) ~(apex bo:~(. au (read q.orf)) hen p.orf (rite q.orf) ~) :: ++ beef :: read in @@ -644,7 +656,7 @@ :: ++ bing :: reset to duct |= neh=duct - =+ orf=(~(got by q.zam.sat) neh) + =+ orf=(fall (~(get by q.zam.sat) neh) [p=0 q=*(unit cuff)]) %_ +>.$ hen neh ost p.orf @@ -660,7 +672,8 @@ :: ++ blow ^+ . - => (give %nice ~) + :: ~& [%gall-blow ost] + => (give %mean ~) =+ pax=+:(fall (~(get by sup.sat) ost) *[ship path]) %= + qic.sat ~ @@ -680,6 +693,7 @@ :_ ~ :- [%$ 12]~ (cave !>([[our app.sat imp] cub.sat sup.sat pus.sat [act.sat eny now]])) + :: ++ core |=(vax=vase (cove %core vax)) :: core as silk ++ cove :: cage as silk |= cay=cage @@ -687,24 +701,7 @@ [%done ~ cay] :: ++ deal :: reboot - ^+ . - =. tik.sat +(tik.sat) - =+ pys=(~(tap by sup.sat) ~) - :: ~& [%gall-deal tik.sat pys] - |- ^+ +>.$ - ?~ pys +>.$ - =. +>.$ $(pys t.pys) - %_ +>.$ - mow - :_ mow - [(~(got by r.zam.sat) p.i.pys) %slip [%g %show [our imp] q.i.pys]] - == - :: %= +>.$ - :: vey.sat - :: %- ~(put to vey.sat) - :: :- (~(got by r.zam.sat) p.i.pys) - :: [%show q.i.pys] - :: == + .(tik.sat +(tik.sat)) :: ++ deff |= [wir=wire hon=duct caq=vase] @@ -715,8 +712,8 @@ :: ++ drug :: set dependencies |= pen=(set (pair ship desk)) - :: ~& [%drug %pen pen] - :: ~& [%drug %ped ped.sat] + :: ~& [%drug ped=ped.sat] + :: ~& [%drug pen=pen] ^+ +> =+ ^= new ^- (list move) %+ turn @@ -725,7 +722,7 @@ |= a=(pair ship desk) :- hun.mat :^ %pass (away %w %drug (scot %p p.a) q.a ~) %c - ::~& [%sync-subscribe our p.a q.a] + :: ~& [%sync-subscribe our p.a q.a] [%warp [our p.a] q.a ~ %| [%da +(now)] [%da (add now ~d1000)] /] =+ ^= old ^- (list move) %+ turn @@ -961,6 +958,10 @@ |= vax=vase ^+ +> =+ new=?~(huv.sat & !=(+<+.q.vax +<+.q.u.huv.sat)) + :: ?. ?=(%core -.p.vax) + :: ~| [%morn-not-core -.p.vax app.sat imp] + :: ~> %mean.|.((skol p.vax)) + :: !! =. huv.sat `vax ?. new +>.$ =: act.sat +(act.sat) @@ -969,10 +970,9 @@ =+ pex=(~(tap by peq.sat) ~) |- ^+ +>.^$ ?~ pex +>.^$ - %= $ - pex t.pex - +>.^$ %- quem(hen (~(got by r.zam.sat) p.i.pex)) - [%show (~(got by sup.sat) p.i.pex)] + %= $ + pex t.pex + +>.^$ (quem(hen (able p.i.pex)) [%show (~(got by sup.sat) p.i.pex)]) == :: ++ mort :: failed boot @@ -1004,15 +1004,32 @@ =+ yov=(~(tap by vey.sat) ~) :: XX ++pun +>.$(vey.sat (~(gas to *(qeu toil)) `_yov`[[hen kon] yov])) :: - ++ said + ++ said :: sayz, done wrong |= vud=vase - |- ^- [(list toil) (list move)] - ?: =(~ q.vud) [~ mow] + =- [p.fob (weld (flop q.fob) mow)] + ^= fob + |- ^- (pair (list toil) (list move)) + ?: =(~ q.vud) [~ ~] =+ sud=(sump (slot 2 vud)) =+ res=$(vud (slot 3 vud)) - ?: ?=(%& -.sud) - [-.res [p.sud +.res]] - [[p.sud -.res] +.res] + :- ?~ -.sud + -.res + [u.-.sud -.res] + ?~ +.sud + +.res + [u.+.sud +.res] + :: + ++ sayz :: dissect app moves + |= vud=vase + =| toy=(list toil) + |- ^- [(list toil) (list move)] + ?: =(~ q.vud) [toy mow] + =+ sud=(sump (slot 2 vud)) + %= $ + vud (slot 3 vud) + toy ?~(-.sud toy [u.-.sud toy]) + mow ?~(+.sud mow [u.+.sud mow]) + == :: ++ show :: subscribe |= [you=ship pax=path] :: subscription @@ -1025,24 +1042,33 @@ :: ++ sump |= wec=vase - ^- (each move toil) - =+ hon=(need (~(get by r.zam.sat) ((hard bone) -.q.wec))) + ^- [(unit toil) (unit move)] + =+ ost=((hard bone) -.q.wec) + =+ hon=(able ost) =+ caq=(spec (slot 3 wec)) ?+ q.caq ~&(%sump-bad !!) :: [%pass p=* q=@tas r=[p=@tas q=*]] =+ wir=(away %u ((hard path) p.q.caq)) - ?: ?=(%cide p.r.q.caq) [%| (deff wir hon caq)] - ?: ?=(%sire p.r.q.caq) [%& (birf wir hon caq)] - :+ %& hon + ?: ?=(%cide p.r.q.caq) [`(deff wir hon caq) ~] + ?: ?=(%sire p.r.q.caq) [~ `(birf wir hon caq)] + :^ ~ ~ hon :^ %pass wir (need ((sand %tas) ((hard ,@) q.q.caq))) [%meta (spec (slot 15 caq))] :: [%give p=[p=@tas q=*]] - :+ %& hon + ?: ?=(%mean p.p.q.caq) + :- `[hon %nuke our] + `[hon %give %mean (ares q.p.q.caq)] + :- ?. ?| ?=(?(%rush %rust) p.p.q.caq) + ?& ?=(%meta p.p.q.caq) + ?=([* ?(%rush %rust) *] q.p.q.caq) + == == + ~ + `[hon %told our] + :+ ~ hon :- %give - ?: ?=(%mean p.p.q.caq) [%mean (ares q.p.q.caq)] ?: ?=(%nice p.p.q.caq) [%nice ~] (sumo (spec (slot 3 caq))) == @@ -1054,7 +1080,6 @@ :: ++ work :: eat queue |- ^+ + - :: ~& [%work imp ?~(qic.sat ~ [~ -.q.u.qic.sat (turn (~(tap by vey.sat)) |=(toil -.q))])] ?: |(?=(^ qic.sat) =(~ vey.sat)) +.$ :: nothing to do =^ yev vey.sat [p q]:~(get to vey.sat) ?: (~(has in nuc.sat) p.yev) $ @@ -1084,7 +1109,7 @@ %boot =. orm.sat `now %+ ford /s/park - :+ %dude leaf/"booting" + :: :+ %dude leaf/"booting" ^- silk :- home ?~ huv.sat nile @@ -1119,6 +1144,31 @@ :: %feel +>.$(qic.sat ~) + :: + %took + =+ qol=(~(get by qel.sat) ost) + :: ~& [%yawn-took-has ost qol [our hen]] + %= +>.$ + qic.sat ~ + qel.sat + ?~ qol + :: ~& [%took-underflow our hen] + qel.sat + ?: =(`1 qol) + (~(del by qel.sat) ost) + (~(put by qel.sat) ost (dec u.qol)) + == + :: + %told + =+ qol=(~(get by qel.sat) ost) + :: ~& [%yawn-told-has ost qol [our hen]] + =+ qul=?~(qol 1 +(u.qol)) + =. qel.sat (~(put by qel.sat) ost qul) + :: XX turn me back on! + :: ?: =(10 qul) + :: ~& [%yawn-told-full ost our hen] + :: +>.$(qic.sat ~, vey.sat (~(put to vey.sat) hen %nuke p.kon)) + +>.$(qic.sat ~) :: %load =+ [hom=(slot 2 q.p.kon) old=(slot 3 q.p.kon)] @@ -1143,21 +1193,39 @@ (yawl [%pull ~] leaf/"pulling" u.huv.sat [[%atom %ud] ost]) :: %mess - =+ ^= cog ^- term - ?: =(%$ p.q.kon) %poke - =+ goc=(cat 3 'poke-' p.q.kon) - ?:((warm goc) goc %poke) + =+ ^- cog=term + =- |- ?~ goz ?:((warm %pock) %pock %poke) + ?: (warm i.goz) i.goz + $(goz t.goz) + ^- goz=(list term) + ?: =(%$ p.q.kon) + /pock + =+ ^= goc + |= [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 + (end 3 +(ofs) p.q.kon) + (goc p.q.kon /pock) + :(goc p.q.kon (rsh 3 ofs p.q.kon) /pock) + =+ hyp=?=(%pock (end 3 4 cog)) ?. (warm cog) (give(qic.sat ~) %mean ~ %poke-find-fail ~) ?> ?=(^ huv.sat) - =+ sam=:(slop [[%atom %ud] ost] [[%atom %p] p.kon] q.q.kon) - =+ err=?.(=(%poke cog) "%poke with mark ") + =+ ^= sam + ;: slop + [[%atom %ud] ost] + [[%atom %p] p.kon] + ?.(hyp q.q.kon (slop !>(p.q.q.kon) q.q.kon)) + == + =+ err=?.(?=(?(%poke %pock) cog) "{} with mark ") :: ~& [%mess-poke cog] %+ ford /s/poke :+ %dude leaf/"poking {err}" [%call (harm cog (conf (core u.huv.sat))) (cove %$ sam)] :: %show + :: ~& showing/[app.sat imp q.kon] ?: (warm %peer) =+ sam=!>([ost p.kon q.kon]) ?> ?=(^ huv.sat) @@ -1190,6 +1258,17 @@ (xeno [q.kon imp] %feel ~) :: %take + ?: ?& ?=([%g %rush @ *] q.q.kon) + |((warm %posh) (warm (cat 3 'posh-' &3.q.q.kon))) + == + ?> ?=(^ huv.sat) + =+ [goc gil]=[(cat 3 'posh-' &3.q.q.kon) (spec (slot 7 q.kon))] + =. - ?:((warm goc) [goc (slot 3 gil)] [%posh gil]) + =+ sam=:(slop [[%atom %ud] ost] !>(p.kon) gil) + %+ ford /s/pour + :+ %dude leaf/"pouring" + :+ %dude (skol p.gil) + [%call (harm goc (conf (core u.huv.sat))) (cove %$ sam)] ?: (warm %purr) ?> ?=(^ huv.sat) =+ sam=:(slop [[%atom %ud] ost] !>(p.kon) !>(p.q.kon) q.kon) diff --git a/arvo/hoon.hoon b/arvo/hoon.hoon index 0835b79bb..d89f91aed 100644 --- a/arvo/hoon.hoon +++ b/arvo/hoon.hoon @@ -9,13 +9,13 @@ (make:all cud) :: else simple compile ^= all :: assemble engine =~ :: volume stack -%164 :: version constant +%163 :: version constant :::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::: :::::: volume 0, version stub :::::: :::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::: -~% %k.164 ~ ~ :: +~% %k.163 ~ ~ :: |% :: -++ hoon %164 :: version stub +++ hoon %163 :: version stub -- :: :::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::: :::::: volume 1, Hoon models :::::: @@ -25,6 +25,7 @@ ~ |% :: ++ abel typo :: original sin: type +++ ache |*([a=$+(* *) b=$+(* *)] $%([| p=b] [& p=a])) :: each, b default ++ axis ,@ :: tree address ++ also ,[p=term q=wing r=type] :: alias ++ base ?([%atom p=odor] %noun %cell %bean %null) :: axils, @ * ^ ? ~ @@ -62,9 +63,6 @@ ++ cord ,@t :: text atom (UTF-8) ++ date ,[[a=? y=@ud] m=@ud t=tarp] :: parsed date ++ dime ,[p=@ta q=@] :: -++ dram $% [| p=(map ,@tas dram)] :: simple unix dir - [& p=@ud q=@] :: - == :: ++ each |*([a=$+(* *) b=$+(* *)] $%([& p=a] [| p=b])) :: either a or b ++ edge ,[p=hair q=(unit ,[p=* q=nail])] :: parsing output ++ foot $% [%ash p=twig] :: dry arm, geometric @@ -150,11 +148,11 @@ ++ spot ,[p=path q=pint] :: range in file ++ tang (list tank) :: general error ++ tank $% [%leaf p=tape] :: printing formats - $: %palm :: - p=[p=tape q=tape r=tape s=tape] :: + $: %palm :: backstep list + p=[p=tape q=tape r=tape s=tape] :: q=(list tank) :: == :: - $: %rose :: delimeted list + $: %rose :: flat list p=[p=tape q=tape r=tape] :: mid open close q=(list tank) :: == :: @@ -274,7 +272,7 @@ [%smdt p=twig q=tusk] :: [%smdq p=(list beer)] :: assemble string [%smsg p=twig q=tusk] :: gonads - [%smsm p=twig q=twig] :: make sure q is a p + [%smsm p=tile q=twig] :: make sure q is a p :: :::::: compositions [%tsbr p=tile q=twig] :: push bunt: =+(_p q) [%tscl p=tram q=twig] :: p changes, then q @@ -403,7 +401,7 @@ ++ wall (list tape) :: text lines (no \n) ++ wain (list cord) :: text lines (no \n) ++ wing (list limb) :: -++ wine $| ?(%noun %path %tank %void %wall %wool %yarn) +++ wine $| ?(%noun %path %type %void %wall %wool %yarn) $% [%atom p=term] :: [%core p=(list ,@ta) q=wine] :: [%face p=term q=wine] :: @@ -416,7 +414,11 @@ [%unit p=term q=wine] :: == :: ++ wonk |*(veq=edge ?~(q.veq !! p.u.q.veq)) :: -:: :: +++ worm :: compiler cache + $: nes=(set ,^) :: ++nest + pay=(map (pair type twig) type) :: ++play + mit=(map (pair type twig) (pair type nock)) :: ++mint + == :: :: :: ++ map |* [a=_,* b=_,*] :: associative tree $|(~ [n=[p=a q=b] l=(map a b) r=(map a b)]) :: @@ -1383,9 +1385,6 @@ :: black magic values ++ vl |% - ++ uzer |= [b=@u p=@u] - (szer b p %.y) - ++ szer |= [b=@u p=@u s=?] [s=s e=`@s`(dec (^mul b 2)) a=(lia p 0b1)] @@ -1911,11 +1910,11 @@ [n.a l.a c] [n.c [n.a l.a l.c] r.c] :: - +- rep :: replace by tile - |* [b=* c=_,*] + +- rep :: replace by product + |* b=_|=([* *] +<+) |- - ?~ a b - $(a r.a, b $(a l.a, b (c n.a b))) + ?~ a +<+.b + $(a r.a, +<+.b $(a l.a, +<+.b (b n.a +<+.b))) :: +- tap :: list tiles a set ~/ %tap @@ -1928,6 +1927,7 @@ +- uni :: union ~/ %uni |* b=_a + ?: =(a b) a |- ^+ a ?~ b a @@ -1946,7 +1946,6 @@ $(b [n.b l.b $(b r.b, a [n.a ~ r.a])], a l.a) :: +- wyt :: size of set - .+ |- ^- @ ?~(a 0 +((add $(a l.a) $(a r.a)))) -- @@ -2128,10 +2127,10 @@ [n.d [n.a l.a l.d] r.d] :: +- rep :: replace by product - |* [b=* c=_,*] + |* b=_|=([* *] +<+) |- - ?~ a b - $(a r.a, b $(a l.a, b (c n.a b))) + ?~ a +<+.b + $(a r.a, +<+.b $(a l.a, +<+.b (b n.a +<+.b))) :: +- rib :: transform + product |* [b=* c=_,*] @@ -2184,7 +2183,6 @@ [n=[p=p.n.a q=(b p.n.a q.n.a)] l=$(a l.a) r=$(a r.a)] :: +- wyt :: depth of map - .+ |- ^- @ ?~(a 0 +((add $(a l.a) $(a r.a)))) -- @@ -2239,6 +2237,7 @@ :: +- tap :: adds list to end |= b=(list ,_?>(?=(^ a) n.a)) + =+ z=0 :: XX breaks jet match ^+ b ?~ a b @@ -2708,9 +2707,9 @@ :: ++ plus |*(fel=_rule ;~(plug fel (star fel))) ++ slug - |* [rud=* raq=_|*([a=* b=*] [a b])] + |* raq=_|*([a=* b=*] [a b]) |* [bus=_rule fel=_rule] - ;~((comp raq) fel (stir rud raq ;~(pfix bus fel))) + ;~((comp raq) fel (stir +<+.raq raq ;~(pfix bus fel))) :: ++ star :: 0 or more times |* fel=_rule @@ -3032,16 +3031,20 @@ :: ++ wick :: span format |= a=@ - ^- @ta + ^- (unit ,@ta) =+ b=(rip 3 a) - %+ rap 3 - |- ^- tape - ?~ b - ~ - ?: =('~' i.b) - ?~ t.b !! - [?:(=('~' i.t.b) '~' ?>(=('-' i.t.b) '_')) $(b t.t.b)] - [i.b $(b t.b)] + =- ?^(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 ~] + == :: ++ woad :: cord format |= a=@ta @@ -3095,7 +3098,7 @@ :- '~' =+ e=(met 2 c) |- ^- tape - ?: =(0 c) + ?: =(0 e) ['.' d] =. e (dec e) =+ f=(rsh 2 e c) @@ -3154,14 +3157,14 @@ %rose ?: fit (rig ram) - =+ ^= gyl + =. lug |- ^- wall ?~ q.tac ?:(=(%$ r.p.tac) lug (rig r.p.tac)) ^$(tac i.q.tac, lug $(q.tac t.q.tac), tab din) ?: =(%$ q.p.tac) - gyl - (wig(lug gyl) q.p.tac) + lug + (wig q.p.tac) == :: ++ din (mod (add 2 tab) (mul 2 (div edg 3))) @@ -3314,7 +3317,7 @@ => ^+(. .(rex ?~(f.yug rex ['.' (s-co f.yug)]))) :- '~' ?: &(=(0 d.yug) =(0 m.yug) =(0 h.yug) =(0 s.yug)) - ['.' 's' '0' rex] + ['s' '0' rex] => ^+(. ?:(=(0 s.yug) . .(rex ['.' 's' (a-co s.yug)]))) => ^+(. ?:(=(0 m.yug) . .(rex ['.' 'm' (a-co m.yug)]))) => ^+(. ?:(=(0 h.yug) . .(rex ['.' 'h' (a-co h.yug)]))) @@ -3398,7 +3401,6 @@ %t ?: =('a' hay) ?: =('s' (cut 3 [2 1] p.p.lot)) - (weld (rip 3 q.p.lot) rex) ['~' '.' (weld (rip 3 q.p.lot) rex)] ['~' '~' (weld (rip 3 (wood q.p.lot)) rex)] @@ -3563,7 +3565,7 @@ :- '~' ;~(pfix sig ;~(pose twid (easy [~ %n 0]))) == ++ nusk - (sear |=(a=@ta (rush (wick a) nuck)) urt:ab) + :(sear |=(a=@ta (rush a nuck)) wick urt:ab) ++ perd ;~ pose (stag ~ zust) @@ -3651,9 +3653,9 @@ |= pax=path ^- tape =- ~(ram re %rose ["/" "/" ~] -) (turn pax |=(a=span [%leaf (trip a)])) -++ stab :: parse span to path - |= zep=@ta ^- path - (rash zep ;~(pfix fas (more fas urs:ab))) +++ stab :: parse cord to path + =+ fel=;~(pfix fas (more fas urs:ab)) + |=(zep=@t `path`(rash zep fel)) :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 2eM, regular-expressions :: :: @@ -4196,6 +4198,77 @@ df4d.225e.2d56.7fd6.1395.a3f8.c582 (cut 3 [a 1] b) -- +:: +++ ob + |% + ++ feen :: conceal structure v2 + |= pyn=@ ^- @ + ?: &((gte pyn 0x1.0000) (lte pyn 0xffff.ffff)) + (add 0x1.0000 (fice (sub pyn 0x1.0000))) + ?: &((gte pyn 0x1.0000.0000) (lte pyn 0xffff.ffff.ffff.ffff)) + =+ lo=(dis pyn 0xffff.ffff) + =+ hi=(dis pyn 0xffff.ffff.0000.0000) + %+ con hi + (add 0x1.0000 (fice (sub lo 0x1.0000))) + pyn + :: + ++ fend :: restore structure v2 + |= cry=@ ^- @ + ?: &((gte cry 0x1.0000) (lte cry 0xffff.ffff)) + (add 0x1.0000 (teil (sub cry 0x1.0000))) + ?: &((gte cry 0x1.0000.0000) (lte cry 0xffff.ffff.ffff.ffff)) + =+ lo=(dis cry 0xffff.ffff) + =+ hi=(dis cry 0xffff.ffff.0000.0000) + %+ con hi + (add 0x1.0000 (teil (sub lo 0x1.0000))) + cry + :: + ++ fice :: adapted from + |= nor=@ :: black and rogaway + ^- @ :: "ciphers with + =+ ^= sel :: arbitrary finite + %+ rynd 2 :: domains", 2002 + %+ rynd 1 + %+ rynd 0 + [(mod nor 65.535) (div nor 65.535)] + (add (mul 65.535 -.sel) +.sel) + :: + ++ teil :: reverse ++fice + |= vip=@ + ^- @ + =+ ^= sel + %+ rund 0 + %+ rund 1 + %+ rund 2 + [(mod vip 65.535) (div vip 65.535)] + (add (mul 65.535 -.sel) +.sel) + :: + ++ rynd :: feistel round + |= [n=@ l=@ r=@] + ^- [@ @] + :- r + ?~ (mod n 2) + (~(sum fo 65.535) l (en:aesc (snag n raku) r)) + (~(sum fo 65.536) l (en:aesc (snag n raku) r)) + :: + ++ rund :: reverse round + |= [n=@ l=@ r=@] + ^- [@ @] + :- r + ?~ (mod n 2) + (~(dif fo 65.535) l (en:aesc (snag n raku) r)) + (~(dif fo 65.536) l (en:aesc (snag n raku) r)) + :: + ++ raku + ^- (list ,@ux) + :~ 0x15f6.25e3.083a.eb3e.7a55.d4db.fb99.32a3. + 43af.2750.219e.8a24.e5f8.fac3.6c36.f968 + 0xf2ff.24fe.54d0.1abd.4b2a.d8aa.4402.8e88. + e82f.19ec.948d.b1bb.ed2e.f791.83a3.8133 + 0xa3d8.6a7b.400e.9e91.187d.91a7.6942.f34a. + 6f5f.ab8e.88b9.c089.b2dc.95a6.aed5.e3a4 + == + -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 2eO, virtualization :: :: @@ -4452,22 +4525,6 @@ $(hol t.hol, +> (merg (flop `(list ,@ud)`?~(guy ~ u.guy)))) -- :: -++ locz :: trivial algorithm - |= [hel=tape hev=tape] - ^- tape - =+ [leh=(lent hel) veh=(lent hev)] - =- (flop q.yun) - ^= yun - |- ^- [p=@ud q=tape] - ~+ - ?: |(=(0 leh) =(0 veh)) [0 ~] - =+ [dis=(snag (dec leh) hel) dat=(snag (dec veh) hev)] - ?: =(dis dat) - =+ say=$(leh (dec leh), veh (dec veh)) - [+(p.say) [dis q.say]] - =+ [lef=$(leh (dec leh)) rig=$(veh (dec veh))] - ?:((gth p.lef p.rig) lef rig) -:: ++ lore :: atom to line list ~/ %lore |= lub=@ @@ -5938,19 +5995,6 @@ == ?>(?=([* ~] zet) q.i.zet) :: -++ hoax :: invert ++hoof - |= a=@ta - ?> =(%ho (end 3 2 a)) - %+ add - (mod (add 13 (sub (cut 3 [3 1] a) 'a')) 26) - %+ mul 26 - =+ b=(cut 3 [2 1] a) - ?+(b !! %o 0, %i 1, %u 2, %e 3, %a 4, %y 5, %w 6, %l 7) -:: -++ hoof :: hash of some kind? - |= a=@ ^- @ta - (rap 3 'h' 'o' (snag (div a 26) "oiueaywl") (add 'a' (mod (add a 13) 26)) ~) -:: ++ jock |= rad=? |= lot=coin ^- twig @@ -6031,16 +6075,12 @@ ++ sell :: tank pretty-print |= vax=vase ^- tank ~| %sell - (dish:ut ~(dole ut p.vax) q.vax) + (~(deal ut p.vax) q.vax) :: ++ pave :: tape pretty-print |= vax=vase ^- tape ~(ram re (sell vax)) :: -++ loot :: cord pretty-print - |= vax=vase ^- @ta - (rap 3 (pave vax)) -:: ++ slam :: slam a gate |= [gat=vase sam=vase] ^- vase =+ :- ^= typ ^- type @@ -6113,19 +6153,74 @@ |= [axe=@ vax=vase] ^- vase [(~(peek ut p.vax) %free axe) .*(q.vax [0 axe])] :: -++ slum - |= [vax=vase wad=(map term vase)] ^- vase - ?- wad - ~ vax - [* ~ ~] [[%cell p.vax [%face p.n.wad p.q.n.wad]] [q.vax q.q.n.wad]] - [* ~ *] $(wad [n.wad ~ ~], vax $(wad r.wad)) - [* * ~] $(wad [n.wad ~ ~], vax $(wad l.wad)) - [* * *] $(wad [n.wad ~ r.wad], vax $(wad l.wad)) - == -:: ++ wash :: render tank at width |= [[tab=@ edg=@] tac=tank] ^- wall (~(win re tac) tab edg) +:: +++ wa :: cached compile + !: + |_ worm + ++ nell |=(ref=type (nest [%cell %noun %noun] ref)) :: nest in cell + ++ nest :: nest:ut + |= [sut=type ref=type] + ^- [? worm] + ?: (~(has in nes) [sut ref]) [& +>+<] + ?. (~(nest ut sut) | ref) [| +>+<] + [& +>+<(nes (~(put in nes) [sut ref]))] + :: + ++ nets :: typeless nest + |= [sut=type ref=*] + ^- [? worm] + ?: (~(has in nes) [sut ref]) [& +>+<] + =+ gat=|=([a=type b=type] (~(nest ut a) | b)) + ?. (,? .*(gat(+< [sut ref]) -.gat)) + [| +>+<.$] + [& +>+<.$(nes (~(put in nes) [sut ref]))] + :: + ++ play :: play:ut + |= [sut=type gen=twig] + ^- [type worm] + =+ old=(~(get by pay) [sut gen]) + ?^ old [u.old +>+<.$] + =+ new=(~(play ut sut) gen) + [new +>+<.$(pay (~(put by pay) [sut gen] new))] + :: + ++ mint :: mint:ut to noun + |= [sut=type gen=twig] + ^- [(pair type nock) worm] + =+ old=(~(get by mit) [sut gen]) + ?^ old [u.old +>+<.$] + =+ new=(~(mint ut sut) %noun gen) + [new +>+<.$(mit (~(put by mit) [sut gen] new))] + :: + ++ slap :: ++slap, cached + |= [vax=vase gen=twig] + ^- [vase worm] + =^ gun +>+< (mint p.vax gen) + [[p.gun .*(q.vax q.gun)] +>+<.$] + :: + ++ slot :: ++slot, cached + |= [axe=@ vax=vase] + ^- [vase worm] + =^ gun +>+< (mint p.vax [%$ axe]) + [[p.gun .*(q.vax [0 axe])] +>+<.$] + :: + ++ spec :: specialize vase + |= vax=vase + ^- [vase worm] + =+ ^= gen ^- twig + ?@ q.vax [%wtts [%axil [%atom %$]] [%$ 1]~] + ?@ -.q.vax [%wtts [%leaf %tas -.q.vax] [%$ 2]~] + [%wtts [%axil %cell] [%$ 1]~] + =^ typ +>+<.$ (play p.vax [%wtgr gen [%$ 1]]) + [[typ q.vax] +>+<.$] + :: + ++ spot :: slot and spec + |= [axe=@ vax=vase] + ^- [vase worm] + =^ xav +>+< (slot axe vax) + (spec xav) + -- :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 2fB, macro expansion :: :: @@ -6473,7 +6568,11 @@ r.gen :: [%sgts *] [%sggr [%germ p.gen] q.gen] - [%sgwt *] [%tsgl s.gen %wtdt q.gen [~ 1] %sgpm p.gen r.gen [~ 1]] + [%sgwt *] + :+ %tsls [%wtdt q.gen [%bczp %null] [[%bczp %null] r.gen]] + :^ %wtsg [~ 2]~ + [%tsgr [~ 3] s.gen] + [%sgpm p.gen [~ 5] [%tsgr [~ 3] s.gen]] [%smcl *] ?- q.gen ~ [%zpzp ~] @@ -6564,7 +6663,8 @@ :: [%smsm *] :: ;; :+ %tsgr [%ktts %v ~ 1] :: => v=. - :+ %tsls [%ktts %a [%tsgr [%cnzy %v] p.gen]] :: =+ a==>(v {p.gen}) + :+ %tsls :+ %ktts %a :: =+ ^= a + [%tsgr [%cnzy %v] [%bccm p.gen]] :: =>(v ,{p.gen}) :+ %tsls [%ktts %b [%tsgr [%cnzy %v] q.gen]] :: =+ b==>(v {q.gen}) :+ %tsls :: =+ c=(a b) [%ktts %c [%cnhp [%cnzy %a] [%cnzy %b] ~]] :: @@ -6895,7 +6995,16 @@ == :: ++ dank |=(pax=path ^-(tank (dish [~ %path] pax))) - ++ dart |=(pax=path ^-(tape ~(ram re (dank pax)))) + ++ dash + |= [mil=tape lim=char] ^- tape + :- lim + |- ^- tape + ?~ mil [lim ~] + ?: =(lim i.mil) ['\\' i.mil $(mil t.mil)] + ?: =('\\' i.mil) ['\\' i.mil $(mil t.mil)] + ?: (lte ' ' i.mil) [i.mil $(mil t.mil)] + ['\\' ~(x ne (rsh 2 1 i.mil)) ~(x ne (end 2 1 i.mil)) $(mil t.mil)] + :: ++ deal |=(lum=* (dish dole lum)) ++ dial |= ham=calf @@ -6904,7 +7013,7 @@ ?- q.ham %noun [%leaf '*' ~] %path [%leaf '/' ~] - %tank [%leaf '*' 't' ~] + %type [%leaf '#' 't' ~] %void [%leaf '#' ~] %wool [%leaf '*' '"' '"' ~] %wall [%leaf '*' '\'' '\'' ~] @@ -6982,9 +7091,13 @@ ?> ?=(@ -.lum) [[%leaf (rip 3 -.lum)] $(lum +.lum)] :: - %tank - =+ cis=(tank lum) - ?.(=(lum cis) ~ [~ cis]) + %type + =+ reb=(slap [p:!>(.) .(sut lum)] %cnzy %duck) + =+ cis=(tank q.reb) + ?. =(cis q.reb) ~ + :^ ~ %palm + [~ ~ ~ ~] + [[%leaf '#' 't' '/' ~] cis ~] :: %wall :- ~ @@ -7005,7 +7118,7 @@ [(need ^$(q.ham %yarn, lum -.lum)) $(lum +.lum)] :: %yarn - [~ %leaf '"' (weld (tape lum) `tape`['"' ~])] + [~ %leaf (dash (tape lum) '"')] :: %void ~ @@ -7015,10 +7128,11 @@ ~ :+ ~ %leaf - ?: =(%$ p.q.ham) ~(rend co [~ %ud lum]) - ?: =(%t p.q.ham) ['\'' (weld (rip 3 lum) `tape`['\'' ~])] - ?: =(%tas p.q.ham) ['%' ?.(=(0 lum) (rip 3 lum) ['$' ~])] - ~(rend co [~ p.q.ham lum]) + ?+ p.q.ham ~(rend co [~ p.q.ham lum]) + %$ ~(rend co [~ %ud lum]) + %t (dash (rip 3 lum) '\'') + %tas ['%' ?.(=(0 lum) (rip 3 lum) ['$' ~])] + == :: [%core *] :: XX needs rethinking for core metal @@ -7088,6 +7202,8 @@ [%pear *] ?. =(lum q.q.ham) ~ + ?: ?=([%tas ~] +.q.ham) + [~ %leaf '%' '$' ~] =+ fox=~(rend co [~ p.q.ham q.q.ham]) [~ %leaf ?:(=(['~' ~] fox) fox ['%' fox])] :: @@ -7248,6 +7364,8 @@ [p.yad [%face p.sut q.yad]] :: [%fork *] + ?: =(p.sut fork/[cube/[%noun atom/%tas]]^[cube/[%void atom/%tas]]) + [dex %type] :: XX proper print =+ hin=$(sut p.sut) =+ yon=$(dex p.hin, sut q.sut) :- p.yon @@ -7266,7 +7384,7 @@ ?^ hey [dex [%stop u.hey]] ?: (~(has in gil) sut) - =+ dyr=~(wyt by p.dex) + =+ dyr=+(~(wyt by p.dex)) [[(~(put by p.dex) sut dyr) q.dex] [%stop dyr]] =+ rom=$(gil (~(put in gil) sut), sut repo) =+ rey=(~(get by p.p.rom) sut) @@ -8579,21 +8697,23 @@ ++ hog :: tag head %+ cook |= $: a=twig - b=(unit ,@tas) - c=(unit ,@tas) - d=(unit twig) - e=(list twig) + b=(list ,[@tas @tas]) + c=$|(~ [p=@tas q=twig]) + d=(list twig) == ^- [twig (list twig)] - =. e ?~(b e [[[%dtzz %tas %class] [%smdq (trip u.b)]] e]) - =. e ?~(c e [[[%dtzz %tas %id] [%smdq (trip u.c)]] e]) - =. e ?~(d e [[[%dtzz %tas %href] u.d] e]) - [a e] + =- [a (welp - ?~(c d [[[%dtzz %tas p.c] q.c] d]))] + =- (~(tap by -)) + %. |=(e=(list tank) [%smdq ~(ram re %rose [" " `~] e)]) + =< ~(run by f:(reel b .)) + |= [e=[p=term q=term] f=(jar twig tank)] + (~(add ja f) [[%dtzz %tas p.e] [%leaf (trip q.e)]]) ;~ plug fry - ;~(pose (stag ~ ;~(pfix dot sym)) (easy ~)) - ;~(pose (stag ~ ;~(pfix hax sym)) (easy ~)) - ;~(pose (stag ~ ;~(pfix fas (stag %smdq soil))) (easy ~)) + =- (star ;~(plug - sym)) + ;~(pose (cold %class dot) (cold %id hax)) + =- ;~(pose ;~(plug - (stag %smdq soil)) (easy ~)) + ;~(pose (cold %href fas) (cold %src pat)) ;~ pose %+ ifix [pel per] %+ more ;~(plug com ace) @@ -8834,7 +8954,7 @@ =+ rev=(plex b) ?~ rev ~ %- some - :+ %smsm ~(clam al a) + :+ %smsm a [%dtkt %dtzz %$ %cx u.rev] ;~(plug hill rood) == @@ -9082,7 +9202,7 @@ :~ [':' (rune col %smcl expi)] ['.' (rune dot %smdt expi)] ['~' (rune sig %smsg expi)] - [';' (rune sem %smsm expb)] + [';' (rune sem %smsm expo)] == == :- '=' @@ -9243,7 +9363,7 @@ ++ expq |.(;~(gunk rope loaf loaf)) :: wing and two twigs ++ expr |.(;~(gunk loaf wisp)) :: twig and core tail ++ exps |.((butt hank)) :: closed gapped twigs - ++ expt |.((butt ;~(gunk loaf race))) :: twig, [tile twig]s + :: expt ++ expu |.(;~(gunk lobe wisp)) :: tile, core tail ++ expv |.(lobe) :: tile ++ expw |.(;~(gunk lobe teak)) :: tile and tiki @@ -9251,8 +9371,6 @@ ++ expy |.((butt ;~(gunk teak loaf race))) :: tiki twig [tile twig]s ++ expz |.(loaf(bug &)) :: twig with tracing :: Hint syntaces (nock 10) - ++ hina |. :: unused - ;~(gunk (ifix [sel ser] ;~(gunk dem dem)) loaf) ++ hinb |.(;~(gunk bont loaf)) :: hint and twig ++ hinc |. :: optional =en, twig ;~(pose ;~(gunk bony loaf) ;~(plug (easy ~) loaf)) @@ -9348,15 +9466,13 @@ ++ rope :: wing form %+ knee *wing |. ~+ - %+ (slug `wing`~ |=([a=wing b=wing] (weld a b))) + %+ (slug |=([a=limb b=wing] [a b])) dot ;~ pose %+ cook - |=([a=(list) b=term] [?~(a b [%| (lent a) b]) ~]) + |=([a=(list) b=term] ?~(a b [%| (lent a) b])) ;~(plug (star ket) ;~(pose sym (cold %$ buc))) :: - %+ cook - |=(a=limb [a ~]) %+ cook |=(a=axis [%& a]) ;~ pose @@ -9469,15 +9585,24 @@ :::::: :::::: profiling support; move me :::::: :::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::: ++ doss - $: sap=@ud :: sample count + $: mon=moan :: sample count hit=(map term ,@ud) :: hit points - cut=(map span hump) :: cut points + cut=(map path hump) :: cut points == +++ moan :: sample metric + $: fun=@ud :: samples in C + noc=@ud :: samples in nock + glu=@ud :: samples in glue + mal=@ud :: samples in alloc + far=@ud :: samples in frag + coy=@ud :: samples in copy + euq=@ud :: samples in equal + == :: :: ++ hump - $: sap=@ud :: sample count - inn=(map span ,@ud) :: calls into - out=(map span ,@ud) :: calls out of + $: mon=moan :: sample count + out=(map path ,@ud) :: calls out of + inn=(map path ,@ud) :: calls into == :: ++ pi-heck @@ -9487,32 +9612,80 @@ day(hit (~(put by hit.day) nam ?~(lam 1 +(u.lam)))) :: ++ pi-noon :: sample trace - |= [pax=path day=doss] - =| lax=(unit span) + |= [mot=term paz=(list path) day=doss] + =| lax=(unit path) |- ^- doss - ?~ pax day(sap +(sap.day)) + ?~ paz day(mon (pi-mope mot mon.day)) %= $ - pax t.pax - lax `i.pax + paz t.paz + lax `i.paz cut.day - %+ ~(put by cut.day) i.pax + %+ ~(put by cut.day) i.paz ^- hump - =+ nax=`(unit span)`?~(t.pax ~ `i.t.pax) - =+ hup=`hump`=+(hup=(~(get by cut.day) i.pax) ?^(hup u.hup [0 ~ ~])) - :+ +(sap.hup) - ?~ lax inn.hup - =+ hag=(~(get by inn.hup) u.lax) - (~(put by inn.hup) u.lax ?~(hag 1 +(u.hag))) - ?~ nax out.hup - =+ hag=(~(get by out.hup) u.nax) - (~(put by out.hup) u.nax ?~(hag 1 +(u.hag))) + =+ nax=`(unit path)`?~(t.paz ~ `i.t.paz) + =+ hup=`hump`=+(hup=(~(get by cut.day) i.paz) ?^(hup u.hup [*moan ~ ~])) + :+ (pi-mope mot mon.hup) + ?~ lax out.hup + =+ hag=(~(get by out.hup) u.lax) + (~(put by out.hup) u.lax ?~(hag 1 +(u.hag))) + ?~ nax inn.hup + =+ hag=(~(get by inn.hup) u.nax) + (~(put by inn.hup) u.nax ?~(hag 1 +(u.hag))) + == +++ pi-mope :: add sample + |= [mot=term mon=moan] + ?+ mot mon + %fun mon(fun +(fun.mon)) + %noc mon(noc +(noc.mon)) + %glu mon(glu +(glu.mon)) + %mal mon(mal +(mal.mon)) + %far mon(far +(far.mon)) + %coy mon(coy +(coy.mon)) + %euq mon(euq +(euq.mon)) + == +++ pi-moth :: count sample + |= mon=moan ^- @ud + :(add fun.mon noc.mon glu.mon mal.mon far.mon coy.mon euq.mon) +:: +++ pi-mumm :: print sample + |= mon=moan ^- tape + =+ tot=(pi-moth mon) + ;: welp + ^- tape + ?: =(0 noc.mon) ~ + (welp (scow %ud (div (mul 100 noc.mon) tot)) "n ") + :: + ^- tape + ?: =(0 fun.mon) ~ + (welp (scow %ud (div (mul 100 fun.mon) tot)) "c ") + :: + ^- tape + ?: =(0 glu.mon) ~ + (welp (scow %ud (div (mul 100 glu.mon) tot)) "g ") + :: + ^- tape + ?: =(0 mal.mon) ~ + (welp (scow %ud (div (mul 100 mal.mon) tot)) "m ") + :: + ^- tape + ?: =(0 far.mon) ~ + (welp (scow %ud (div (mul 100 far.mon) tot)) "f ") + :: + ^- tape + ?: =(0 coy.mon) ~ + (welp (scow %ud (div (mul 100 coy.mon) tot)) "y ") + :: + ^- tape + ?: =(0 euq.mon) ~ + (welp (scow %ud (div (mul 100 euq.mon) tot)) "e ") == :: ++ pi-tell :: produce dump |= day=doss ^- (list tape) + =+ tot=(pi-moth mon.day) ;: welp - [(welp "events: " (scow %ud sap.day)) ~] + [(welp "events: " (pi-mumm mon.day)) ~] :: %+ turn (~(tap by hit.day) ~) @@ -9523,32 +9696,42 @@ %- zing ^- (list (list tape)) %+ turn - (~(tap by cut.day) ~) - |= [nam=term hup=hump] + %+ sort (~(tap by cut.day)) + |= [one=(pair path hump) two=(pair path hump)] + (gth (pi-moth mon.q.one) (pi-moth mon.q.two)) + |= [pax=path hup=hump] + =+ ott=(pi-moth mon.hup) ;: welp - [(welp "sector: " (trip nam)) ~] - [(welp "weight: " (scow %ud (div (mul 1.000 sap.hup) sap.day))) ~] - ["inn:" ~] - :: - %+ turn - (~(tap by inn.hup) ~) - |= [nam=term num=@ud] - ^- tape - :(welp " " (trip nam) ": " (scow %ud num)) - :: - ["out:" ~] + [(welp "label: " (spud pax)) ~] + [(welp "price: " (scow %ud (div (mul 100 ott) tot))) ~] + [(welp "shape: " (pi-mumm mon.hup)) ~] :: + ?: =(~ out.hup) ~ + :- "into:" %+ turn (~(tap by out.hup) ~) - |= [nam=term num=@ud] + |= [pax=path num=@ud] ^- tape - :(welp " " (trip nam) ": " (scow %ud num)) + :(welp " " (spud pax) ": " (scow %ud num)) + :: + ?: =(~ inn.hup) ~ + :- "from:" + %+ turn + (~(tap by inn.hup) ~) + |= [pax=path num=@ud] + ^- tape + :(welp " " (spud pax) ": " (scow %ud num)) + :: + ["" ~] + ~ == == -- :::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::: :::::: :::::: volume 3, Arvo models and skeleton :::::: :::::: :::::::::::::::::::::::::::::::::::::::::::::::::::::: +!: +~% %arvo + ~ |% ++ arch ,[p=@uvI q=(unit ,@uvI) r=(map ,@ta ,~)] :: fundamental node ++ arvo (mold ,[p=term q=mill] mill) :: arvo card @@ -9570,7 +9753,6 @@ == :: ++ curd ,[p=@tas q=*] :: typeless card ++ duct (list wire) :: causal history -++ herd (hypo curd) :: typed card ++ hide :: standard app state $: $: our=ship :: owner/operator app=term :: app identity @@ -9583,7 +9765,6 @@ eny=@uvI :: entropy lat=@da :: date of last tick == == :: -++ hilt ?(0 1 2) :: lead iron gold ++ hypo |*(a=$+(* *) (pair type a)) :: type associated ++ hobo |* a=$+(* *) :: kiss wrapper $? $% [%soft p=*] :: @@ -9621,7 +9802,7 @@ ++ sled $+ [(unit (set monk)) term beam] :: namespace function (unit (unit cage)) :: ++ slut $+(* (unit (unit))) :: old namespace -++ vile :: reflexive constants +++ vile :: reflexive constants $: typ=type :: -:!>(*type) duc=type :: -:!>(*duct) pah=type :: -:!>(*path) @@ -9655,34 +9836,30 @@ :::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 3bE, Arvo core :: :: -++ vent !: :: vane core - |= [lal=@tas vil=vile bud=vase ves=vase] +++ vent :: vane core + |= [lal=@tas vil=vile bud=vase sew=(pair worm vase)] + ~% %vent +>+ ~ |% ++ ruck :: update vase |= [pax=path txt=@ta] ^+ +> =+ arg=[~2000.1.1 0 =>(~ |+(* ~))] - =+ rig=(slym ves arg) + =+ rig=(slym q.sew arg) =+ rev=(slym (slap bud (rain pax txt)) bud) =+ syg=(slym rev arg) - +>.$(ves (slam (slap syg [%cnzy %load]) (slap rig [%cnzy %stay]))) + ~| %load-lost + +>.$(q.sew (slam (slap syg [%cnzy %load]) (slap rig [%cnzy %stay]))) :: ++ wink :: deploy |= [now=@da eny=@ ski=sled] - =+ rig=(slym ves +<) :: activate vane + =+ rig=(slym q.sew +<) :: activate vane + ~% %wink +>+> ~ |% ++ doze |= [now=@da hen=duct] ^- (unit ,@da) ((hard (unit ,@da)) q:(slym (slap rig [%cnzy %doze]) +<)) :: - ++ sike :: check metatype - |= [sub=type ref=*] - ^- ? - :: ?: =(~ ~) & - =+ gat=|=([a=type b=type] (~(nest ut a) | b)) - (,? .*(gat(+< [sub ref]) -.gat)) - :: ++ slid |= [hed=mill tal=mill] ^- mill @@ -9698,53 +9875,74 @@ | [%| [%cell typ.vil p.p.hil] p.hil] == :: - ++ slur + ++ slur :: call gate on |= [gat=vase hil=mill] - ^- (unit vase) + ^- (unit (pair vase worm)) =+ sam=(slot 6 gat) - ?. ?- -.hil - & (souk p.sam p.p.hil) - | (sike p.sam p.p.hil) - == ~ - `(slym gat +>.hil) + =+ ^= hig + ?- -.hil + & (~(nest wa p.sew) p.sam p.p.hil) + | (~(nets wa p.sew) p.sam p.p.hil) + == + ?.(-.hig ~ `[(slym gat +>.hil) +.hig]) :: - ++ souk :: check type - |= [sub=type ref=type] - :: ?: =(~ ~) & - (~(nest ut sub) | ref) + ++ slur-a ~/(%slur-a |=([gat=vase hil=mill] (slur gat hil))) + ++ slur-b ~/(%slur-b |=([gat=vase hil=mill] (slur gat hil))) + ++ slur-c ~/(%slur-c |=([gat=vase hil=mill] (slur gat hil))) + ++ slur-d ~/(%slur-d |=([gat=vase hil=mill] (slur gat hil))) + ++ slur-e ~/(%slur-e |=([gat=vase hil=mill] (slur gat hil))) + ++ slur-f ~/(%slur-f |=([gat=vase hil=mill] (slur gat hil))) + ++ slur-g ~/(%slur-g |=([gat=vase hil=mill] (slur gat hil))) + ++ slur-z ~/(%slur-z |=([gat=vase hil=mill] (slur gat hil))) :: - ++ sunk :: type is cell - |= ref=type - :: ?: =(~ ~) & - (souk [%cell %noun %noun] ref) + ++ slur-pro :: profiling slur + ~/ %slur-pro + |= [lal=@tas gat=vase hil=mill] + ?+ lal (slur-z gat hil) + %a (slur-a gat hil) + %b (slur-b gat hil) + %c (slur-c gat hil) + %d (slur-d gat hil) + %e (slur-e gat hil) + %f (slur-f gat hil) + %g (slur-g gat hil) + == :: ++ song :: reduce metacard + ~/ %song :: |= mex=vase :: mex: vase of card - ^- (unit mill) :: - ?. (sunk p.mex) ~ :: a card is a cell - ?. ?=(%meta -.q.mex) `[%& mex] :: ordinary card - =+ tiv=(slot 3 mex) :: tiv: vase of vase - ?. (sunk p.tiv) ~ :: a vase is a cell - ?. (souk typ.vil p:(slot 2 tiv)) ~ :: vase head is type - %- biff :_ |=(a=milt `[%| a]) :: milt to mill + ^- (unit (pair mill worm)) :: + =^ hip p.sew (~(nell wa p.sew) p.mex) :: + ?. hip ~ :: a card is a cell + ?. ?=(%meta -.q.mex) `[[%& mex] p.sew] :: ordinary card + =^ tiv p.sew (~(slot wa p.sew) 3 mex) :: + =^ hip p.sew (~(nell wa p.sew) p.tiv) :: + ?. hip ~ :: a vase is a cell + =^ vax p.sew (~(slot wa p.sew) 2 tiv) :: + =^ hip p.sew (~(nest wa p.sew) typ.vil p.vax) :: + ?. hip ~ :: vase head is type + %- biff :: + :_ |=(a=(pair milt worm) `[[%| p.a] q.a]) :: milt to mill =+ mut=(milt q.tiv) :: card type, value - |- ^- (unit milt) :: - ?. ?=([%meta p=* q=milt] q.mut) `mut :: ordinary metacard - ?. (sike mev.vil p.mut) ~ :: meta-metacard + |- ^- (unit (pair milt worm)) :: + ?. ?=([%meta p=* q=milt] q.mut) `[mut p.sew] :: ordinary metacard + =^ hip p.sew (~(nets wa p.sew) mev.vil p.mut) :: + ?. hip ~ :: meta-metacard $(mut +.q.mut) :: descend into meta :: ++ sump :: vase to move + ~/ %sump |= wec=vase - ^- (unit move) + ^- (unit (pair move worm)) %+ biff ((soft duct) -.q.wec) |= a=duct - %- bind :_ |=(b=arvo `move`[a b]) + %- bind :_ |=(b=(pair arvo worm) [`move`[a p.b] q.b]) =- ?- -.har | ~& [%dead-card p.har] ~ :: XX properly log? & (some p.har) == - ^= har ^- (each arvo term) - =+ caq=(spec (slot 3 wec)) + ^= har ^- (each (pair arvo worm) term) + =^ caq p.sew (~(spot wa p.sew) 3 wec) ?+ q.caq [%| (cat 3 %funk (,@tas q.caq))] :: [%pass p=* q=@tas r=[p=@tas q=*]] @@ -9754,39 +9952,48 @@ ?. ((sane %tas) lal) ~ %+ biff ((soft path) p.q.caq) |= pax=path - %+ bind (song (spec (slot 15 caq))) - |= hil=mill - [%& %pass pax lal hil] + =^ yav p.sew (~(spot wa p.sew) 15 caq) + %+ bind (song yav) + |= [hil=mill vel=worm] + [%& [%pass pax lal hil] vel] :: [%give p=[p=@tas q=*]] %- (bond |.([%| p.p.q.caq])) - %+ bind (song (spec (slot 3 caq))) - |= hil=mill - [%& %give hil] + =^ yav p.sew (~(spot wa p.sew) 3 caq) + %+ bind (song yav) + |= [hil=mill vel=worm] + [%& [%give hil] vel] :: [%sick p=[p=@tas q=*]] %- (bond |.([%| p.p.q.caq])) - %+ bind (song (spec (slot 3 caq))) - |= hil=mill - [%& %sick hil] + =^ yav p.sew (~(spot wa p.sew) 3 caq) + %+ bind (song yav) + |= [hil=mill vel=worm] + [%& [%sick hil] vel] :: [%slip p=@tas q=[p=@tas q=*]] %- (bond |.([%| p.q.q.caq])) %+ biff ((soft ,@) p.q.caq) |= lal=@tas ?. ((sane %tas) lal) ~ - %+ bind (song (spec (slot 7 caq))) - |= hil=mill - [%& %slip lal hil] + =^ yav p.sew (~(spot wa p.sew) 7 caq) + %+ bind (song yav) + |= [hil=mill vel=worm] + [%& [%slip lal hil] vel] == :: ++ said :: vase to (list move) |= vud=vase - |- ^- (list move) - ?: =(~ q.vud) ~ - [(need (sump (slot 2 vud))) $(vud (slot 3 vud))] + |- ^- (pair (list move) worm) + ?: =(~ q.vud) [~ p.sew] + =^ hed p.sew (~(slot wa p.sew) 2 vud) + =^ tal p.sew (~(slot wa p.sew) 3 vud) + =^ mov p.sew (need (sump hed)) + =^ moz p.sew $(vud tal) + [[mov moz] p.sew] :: ++ scry :: read namespace + ~/ %scry |= $: fur=(unit (set monk)) ren=care bed=beam @@ -9797,7 +10004,7 @@ :* fur ren p.bed - q.bed + q.bed `coin`[%$ r.bed] (flop s.bed) == @@ -9811,24 +10018,28 @@ ++ soar :: scrub vane |= sev=vase ^- vase - ?: &(=(-.q.ves -.q.sev) =(+>.q.ves +>.q.sev)) - ves :: unchanged, use old + ?: &(=(-.q.q.sew -.q.sev) =(+>.q.q.sew +>.q.sev)) + q.sew :: unchanged, use old sev(+<.q [*@da *@ =>(~ |+(* ~))]) :: clear to stop leak :: ++ swim + ~/ %swim |= $: org=@tas pux=(unit wire) hen=duct hil=mill == - ^- [p=(list move) q=vase] + ^- [[p=(list move) q=worm] q=vase] + :: ~& [%swim-wyt `@ud`~(wyt in p.sew)] =+ ^= pru ?~ pux ~| [%swim-call-vane lal] - %+ slur (slap rig [%cnzy %call]) + =^ vax p.sew (~(slap wa p.sew) rig [%cnzy %call]) + %^ slur-pro lal vax (slid [%& duc.vil hen] (slix hil)) ~| [%swim-take-vane lal] - %+ slur (slap rig [%cnzy %take]) + =^ vax p.sew (~(slap wa p.sew) rig [%cnzy %take]) + %^ slur-pro lal vax ;: slid [%& pah.vil u.pux] [%& duc.vil hen] @@ -9836,16 +10047,17 @@ == ?~ pru ~& [%swim-lost lal (,@tas +>-.hil)] - [~ ves] - =+ pro=(need pru) - :- (said (slap pro [%cnzy %p])) - (soar (slap pro [%cnzy %q])) + [[~ p.sew] q.sew] + =^ pro p.sew (need pru) + =^ moz p.sew (~(slap wa p.sew) pro [%cnzy %p]) + =^ vem p.sew (~(slap wa p.sew) pro [%cnzy %q]) + [(said moz) (soar vem)] -- -- :: ++ vint :: create vane |= [lal=@tas vil=vile bud=vase pax=path txt=@ta] :: - (vent lal vil bud (slym (slap bud (rain pax txt)) bud)) + (vent lal vil bud *worm (slym (slap bud (rain pax txt)) bud)) :: ++ viol :: vane tools |= but=type @@ -9858,7 +10070,7 @@ == :: ++ is :: operate in time - |= [vil=vile eny=@ bud=vase fan=(list ,[p=@tas q=vase])] + |= [vil=vile eny=@ bud=vase niz=(pair worm (list ,[p=@tas q=vase]))] |_ now=@da ++ beck ^- sled @@ -9868,14 +10080,14 @@ =+ lal=(end 3 1 ron) =+ ren=(care (rsh 3 1 ron)) |- ^- (unit (unit cage)) - ?~ fan ~ - ?. =(lal p.i.fan) $(fan t.fan) - %- scry:(wink:(vent lal vil bud q.i.fan) now (shax now) ..^$) + ?~ 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) ..^$) [fur ren bed] :: ++ dink :: vase by char |= din=@tas ^- vase - ?~(fan !! ?:(=(din p.i.fan) q.i.fan $(fan t.fan))) + ?~(q.niz !! ?:(=(din p.i.q.niz) q.i.q.niz $(q.niz t.q.niz))) :: ++ dint :: input routing |= hap=path ^- @tas @@ -9891,12 +10103,12 @@ ++ doos :: sleep until |= hap=path ^- (unit ,@da) =+ lal=(dint hap) - (doze:(wink:(vent lal vil bud (dink lal)) now 0 beck) now [hap ~]) + (doze:(wink:(vent lal vil bud p.niz (dink lal)) now 0 beck) now [hap ~]) :: ++ hurl :: start loop |= [lac=? ovo=ovum] ~? &(!lac !=(%belt -.q.ovo)) [%unix -.q.ovo p.ovo] - ^- [p=(list ovum) q=(list ,[p=@tas q=vase])] + ^- [p=(list ovum) q=(pair worm (list ,[p=@tas q=vase]))] ?> ?=(^ p.ovo) %+ kick lac :~ :* i.p.ovo @@ -9911,27 +10123,28 @@ :: ++ race :: take |= [org=@tas lal=@tas pux=(unit wire) hen=duct hil=mill ves=vase] - ^- [p=(list move) q=vase] - =+ ven=(vent lal vil bud ves) + ^- [p=[p=(list move) q=worm] q=vase] + =+ ven=(vent lal vil bud [p.niz ves]) =+ win=(wink:ven now (shax now) beck) (swim:win org pux hen hil) :: ++ fire :: execute |= [org=term lal=term pux=(unit wire) hen=duct hil=mill] ?: &(?=(^ pux) ?=(~ hen)) - [[[[lal u.pux] (curd +>.hil)]~ ~] fan] - =+ naf=fan - |- ^- [[p=(list ovum) q=(list muse)] _fan] - ?~ naf [[~ ~] ~] + [[[[lal u.pux] (curd +>.hil)]~ ~] niz] + =+ naf=q.niz + |- ^- [[p=(list ovum) q=(list muse)] _niz] + ?~ naf [[~ ~] [p.niz ~]] ?. =(lal p.i.naf) =+ tuh=$(naf t.naf) - [-.tuh [i.naf +.tuh]] + [-.tuh [+<.tuh [i.naf +>.tuh]]] =+ fiq=(race org lal pux hen hil q.i.naf) - [[~ (turn p.fiq |=(a=move [lal a]))] [[p.i.naf q.fiq] t.naf]] + [[~ (turn p.p.fiq |=(a=move [lal a]))] [q.p.fiq [[p.i.naf q.fiq] t.naf]]] :: ++ jack :: dispatch card |= [lac=? gum=muse] - ^- [[p=(list ovum) q=(list muse)] _fan] + ^- [[p=(list ovum) q=(list muse)] _niz] + :: =. lac |(lac ?=(?(%g %f) p.gum)) %+ fire p.gum ?- -.r.gum @@ -9944,7 +10157,10 @@ :: %give ?> ?=(^ q.gum) - ?> ?=(^ i.q.gum) + ?. ?=(^ i.q.gum) + ~& [%jack-bad-duct q.gum] + ~& [%jack-bad-card +>-.p.r.gum] + !! ~? &(!lac |(!=(%blit +>-.p.r.gum) !=(%d p.gum))) [%give p.gum (,@tas +>-.p.r.gum) `duct`q.gum] [i.i.q.gum [~ t.i.q.gum] t.q.gum p.r.gum] @@ -9963,9 +10179,9 @@ ++ kick :: new main loop |= [lac=? mor=(list muse)] =| ova=(list ovum) - |- ^- [p=(list ovum) q=(list ,[p=@tas q=vase])] - ?~ mor [(flop ova) fan] - =^ nyx fan (jack lac i.mor) + |- ^- [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 q.nyx t.mor)) -- -- @@ -9979,7 +10195,7 @@ =+ vil=(viol p.bud) :: cached reflexives =| $: lac=? :: laconic bit eny=@ :: entropy - fan=(list ,[p=@tas q=vase]) :: modules + niz=(pair worm (list ,[p=@tas q=vase])) :: modules == :: =< |% ++ come |= [@ (list ovum) pone] :: 11 @@ -10023,13 +10239,13 @@ ++ keep :: wakeup delay |= [now=@da hap=path] => .(+< ((hard ,[now=@da hap=path]) +<)) - (~(doos (is vil eny bud fan) now) hap) + (~(doos (is vil eny bud niz) now) hap) :: ++ load :: load compatible |= [yen=@ ova=(list ovum) nyf=pane] ^+ [ova +>] =: eny yen - fan nyf + q.niz nyf == |- ^+ [ova +>.^$] ?~ ova @@ -10044,7 +10260,7 @@ |= [now=@da hap=path] ^- (unit) ?~ hap [~ hoon] - =+ rob=((slod ~(beck (is vil eny bud fan) now)) hap) + =+ rob=((slod ~(beck (is vil eny bud niz) now)) hap) ?~ rob ~ ?~ u.rob ~ [~ u.u.rob] @@ -10054,8 +10270,8 @@ =. eny (mix eny (shax now)) :: ~& [%poke -.q.ovo] ^- [(list ovum) _+>] - =^ zef fan - (~(hurl (is vil eny bud fan) now) lac ovo) + =^ zef niz + (~(hurl (is vil eny bud niz) now) lac ovo) [zef +>.$] :: ++ vega :: reboot kernel @@ -10074,7 +10290,7 @@ ~& [%vega-compiled hoon nex] ?> (lte nex hoon) =+ gat=.*(ken .*(ken [0 ?:(=(nex hoon) 86 11)])) - =+ sam=[eny ova fan] + =+ sam=[eny ova q.niz] =+ raw=.*([-.gat [sam +>.gat]] -.gat) [[[~ %vega hap] ((list ovum) -.raw)] +.raw] :: @@ -10087,15 +10303,17 @@ =+ vax=(slap pit gen) +>.$(bud vax) %_ +> - fan - |- ^+ fan - ?~ fan + q.niz + |- ^+ q.niz + ?~ q.niz ~& [%vane `@tas`lal.fav pax.fav `@p`(mug txt.fav)] - [[lal.fav ves:(vint lal.fav vil bud pax.fav txt.fav)] fan] - ?. =(lal.fav p.i.fan) - [i.fan $(fan t.fan)] + [[lal.fav q.sew:(vint lal.fav vil bud pax.fav txt.fav)] q.niz] + ?. =(lal.fav p.i.q.niz) + [i.q.niz $(q.niz t.q.niz)] ~& [%vane `@tas`lal.fav pax.fav `@p`(mug txt.fav)] - [[p.i.fan ves:(ruck:(vent lal.fav vil bud q.i.fan) pax.fav txt.fav)] t.fan] + :_ t.q.niz + :- p.i.q.niz + q.sew:(ruck:(vent lal.fav vil bud [p.niz q.i.q.niz]) pax.fav txt.fav) == :: ++ wish :: external compute diff --git a/arvo/jael.hoon b/arvo/jael.hoon index 9411a0888..622038b25 100644 --- a/arvo/jael.hoon +++ b/arvo/jael.hoon @@ -7,7 +7,7 @@ :: %jael is logically homogeneous, but please follow these conventions: :: :: /cap :: foreign app keys -:: /service :: service name, eg %face +:: /service :: service name, eg %face for FB :: /appid :: your ship's app-id :: /@uvH :: by hash :: /@ud :: by number @@ -25,7 +25,7 @@ :: structures |% ++ axle :: %jael state - $: %0 :: + $: %0 :: %jael version ent=@ :: entropy sef=safe :: secret tree red=(map duct (set path)) :: reverse subscribers @@ -36,22 +36,69 @@ == :: ++ kiss :: in request ->$ $% [%kill p=path] :: discard secret - [%make p=@uw q=(unit ,@da) r=@ud s=path] :: create secret + [%make p=@uw q=(unit ,@da) r=@ud s=path] :: generate random [%nuke ~] :: erase subscriber - [%prim p=@uw q=(unit ,@da) r=perm s=path] :: forge prime [%tell p=@uw q=(unit ,@da) r=path] :: save secret == :: -++ move ,[p=duct q=[%give p=gift]] :: local move +++ move ,[p=duct q=(mold note gift)] :: typed move +++ note :: out request $-> + $% $: %t :: to %time + $% [%wait p=@da] :: + [%rest p=@da] :: + == == == :: ++ perm (pair ,@ud (list ,@ud)) :: prime definition ++ safe :: - $: nub=@uw :: secret + $: nub=(unit ,@uw) :: secret dex=(unit ,@da) :: expiration sud=(set duct) :: subscribers + kin=(map term safe) :: children == :: -- :: +:: programs +|% +++ bu + |_ $: xap=path + fes=(list safe) + moz=(list move) + == + axle + :: + ++ bu-abet :: resolve + ^- axle + ?~ xap +<+ + %= bu-abet + xap t.xap + fes t.fes + sef %= i.fes + kin + ?: =(*safe sef) + (~(del by kin.i.fes) i.xap) + (~(put by kin.i.fes) i.xap sef) + == + == + :: + ++ bu-kill :: destroy + ^+ . + =+ dus=(~(tap by + + :: + ++ bu-ajar :: descend + |= pax=path + ^+ +> + ?~ pax +>.$ + %= $ + pax t.pax + xap [i.pax xap] + fes [sef fes] + sef (fall (~(get by kin.sef) i.pax) *safe) + == + -- +++ bury + |= [pax=path lex=axle] + (~(bu-ajar bu [~ ~ ~] tof.lex lex) pax) +-- . == =| axle -=* lex - |= [now=@da eny=@ ski=sled] :: activate ^? :: opaque core |% :: @@ -59,7 +106,16 @@ |= [hen=duct hic=(hypo (hobo kiss))] ^- [p=(list move) q=_..^$] => .(q.hic ?.(?=(%soft -.q.hic) q.hic ((hard kiss) p.q.hic))) - !! + =^ moz +>+>- + =< bu-abet + ?- -.p.q.hic + %kill + kill:(bury p.p.q.hic +>+>-) + :: + %make + %nuke + %tell + == :: ++ doze |= [now=@da hen=duct] diff --git a/arvo/kahn.hoon b/arvo/kahn.hoon index 6ab228c51..962f7e8e7 100644 --- a/arvo/kahn.hoon +++ b/arvo/kahn.hoon @@ -62,7 +62,7 @@ =+ lox=((soft axle) old) ^+ ..^$ ?~ lox - ~& %lunt-reset + ~& %khan-reset ..^$ ..^$(+>- u.lox) :: diff --git a/arvo/zuse.hoon b/arvo/zuse.hoon index a267f928c..a3b358efa 100644 --- a/arvo/zuse.hoon +++ b/arvo/zuse.hoon @@ -1,12 +1,19 @@ :: :: zuse (3), standard library (tang) :: +~% %zuse + ~ |% :::::::::::::::::::::::::::::::::::::::::::::::::::::: :: :::: chapter 3b, Arvo libraries :::: :: :::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 3bA, lite number theory :: :: +++ dope + ~/ %dope + |= a=@ + ~& [%dope-zuse (mug +>)] + :(mul a a a) +:: ++ fu :: modulo (mul p q) |= a=[p=@ q=@] =+ b=?:(=([0 0] a) 0 (~(inv fo p.a) (~(sit fo p.a) q.a))) @@ -415,31 +422,46 @@ " " "+0000" == :: -++ stud :: parse UTC format - |= cud=tape - ^- (unit date) - =- ?~ tud ~ - `[[%.y &3.u.tud] &2.u.tud &1.u.tud &4.u.tud &5.u.tud &6.u.tud ~] - ^= tud - %+ rust cud - ;~ plug - ;~(pfix (stun [5 5] next) dim:ag) +++ stud !: :: parse UTC format + =< |= a=cord :: expose parsers + %+ biff (rush a (more sepa elem)) + |= b=(list ,_(wonk *elem)) ^- (unit date) + =- ?.((za:jo -) ~ (some (zp:jo -))) + ^+ =+ [*date u=unit] + *[(u ,_[a y]) (u ,_m) (u ,_d.t) (u ,_+.t) ~] + :~ :: XX types + |-(?~(b ~ ?.(?=(%y -.i.b) $(b t.b) `+.i.b))) + |-(?~(b ~ ?.(?=(%m -.i.b) $(b t.b) `+.i.b))) + |-(?~(b ~ ?.(?=(%d -.i.b) $(b t.b) `+.i.b))) + |-(?~(b ~ ?.(?=(%t -.i.b) $(b t.b) `+.i.b))) + == + |% :: - %+ cook - |= a=tape - =+ b=0 - |- ^- @ - ?: =(a (snag b (turn mon:yu |=(a=tape (scag 3 a))))) - +(b) - $(b +(b)) - (ifix [ace ace] (star alf)) + ++ snug + |= a=wall + |= b=tape + =+ [pos=1 len=(lent b)] + |- ^- (unit ,@u) + ?~ a ~ + ?: =(b (scag len i.a)) + `pos + $(pos +(pos), a t.a) :: - ;~(sfix dim:ag ace) - ;~(sfix dim:ag col) - ;~(sfix dim:ag col) - dim:ag - (cold ~ (star next)) - == + :: + ++ sepa ;~(pose ;~(plug com (star ace)) (plus ace)) + ++ elem + ;~ pose + (stag %t t) (stag %y y) (stag %m m) (stag %d d) + (stag %w w) (stag %z z) + == + :: + ++ y (stag %& (bass 10 (stun 3^4 dit))) + ++ m (sear (snug mon:yu) (plus alf)) + ++ d (bass 10 (stun 1^2 dit)) + ++ t [;~(plug - - + (easy ~))]:[;~(sfix d col) d] + ++ w (sear (snug wik:yu) (plus alf)) + ++ z [;~(plug (mask "-+") . .)]:(bass 10 (stun 2^2 dit)) + -- :: ++ unt :: UGT to UTC time |= a=@ @@ -502,19 +524,18 @@ == :: ++ poja :: parse JSON - =< |=(a=cord (rush a apex)) + =< |=(a=cord `(unit json)`(rush a apex)) |% ++ apex :: JSON value %+ knee *json |. ~+ - ;~ pfix spac - ;~ pose - (cold ~ (jest 'null')) - (stag %b bool) - (stag %s stri) - (cook |=(s=tape [%n p=(rap 3 s)]) numb) - abox - obox - == + %+ ifix [spac spac] + ;~ pose + (cold ~ (jest 'null')) + (stag %b bool) + (stag %s stri) + (cook |=(s=tape [%n p=(rap 3 s)]) numb) + abox + obox == ++ tops ;~(pose abox obox) :: JSON strict :: JSON arrays @@ -619,13 +640,16 @@ =+ man=`mane`n.g.mex =. unq |(unq =(%script man) =(%style man)) =+ tam=(name man) - =. rez :(weld "" rez) =+ att=`mart`a.g.mex :- '<' %+ welp tam - =. rez ['>' (many c.mex rez)] - ?~(att rez [' ' (attr att rez)]) - :: + =- ?~(att rez [' ' (attr att rez)]) + ^- rez=tape + ::?~ c.mex + :: [' ' '/' '>' rez] + :- '>' + (many c.mex :(weld "" rez)) + :: :: ++ attr :: attributes to tape |= [tat=mart rez=tape] ^- tape @@ -670,17 +694,17 @@ :: ++ poxa :: xml parser =< |=(a=cord (rush a apex)) - |% + |_ ent=_`(map term ,@t)`[[%apos '\''] ~ ~] ++ apex =+ spa=;~(pose comt whit) %+ knee *manx |. ~+ %+ ifix [(star spa) (star spa)] ;~ pose %+ sear |=([a=marx b=marl c=mane] ?.(=(c n.a) ~ (some [a b]))) - ;~(plug head (more (star comt) ;~(pose apex chrd)) tail) + ;~(plug head many tail) empt == - :: + :: ++ attr :: attributes %+ knee *mart |. ~+ %- star @@ -696,7 +720,7 @@ :: ++ chrd :: character data %+ cook |=(a=tape ^-(mars :/(a))) - (plus ;~(less soq doq ;~(pose (just `@`10) escp))) + (plus ;~(less doq ;~(pose (just `@`10) escp))) :: ++ comt :: comments =- (ifix [(jest '')] (star -)) @@ -705,16 +729,20 @@ whit ;~(less (jest '-->') hep) == - :: - ++ escp + :: + ++ escp ;~(pose ;~(less gal gar pam prn) enty) + ++ enty :: entity + %+ ifix pam^sem ;~ pose - ;~(less gal gar pam prn) - (cold '>' (jest '>')) - (cold '<' (jest '<')) - (cold '&' (jest '&')) - (cold '"' (jest '"')) - (cold '\'' (jest ''')) + =+ def=`_ent`(mo [%gt '>'] [%lt '<'] [%amp '&'] [%quot '"'] ~) + %+ sear ~(get by (~(uni by def) ent)) + (cook crip ;~(plug alf (stun 1^31 aln))) + %+ cook |=(a=@c ?:((gth a 0x10.ffff) '�' (tuft a))) + =< ;~(pfix hax ;~(pose - +)) + :- (bass 10 (stun 1^8 dit)) + (bass 16 ;~(pfix (mask "xX") (stun 1^8 hit))) == + :: ++ empt :: self-closing tag %+ ifix [gal (jest '/>')] ;~(plug ;~(plug name attr) (cold ~ (star whit))) @@ -722,6 +750,9 @@ ++ head :: opening tag (ifix [gal gar] ;~(plug name attr)) :: + ++ many + (more (star comt) ;~(pose apex chrd)) + :: ++ name :: tag name =+ ^= chx %+ cook crip @@ -769,6 +800,11 @@ ++ bu :: boolean not |=(jon=json ?.(?=([%b *] jon) ~ [~ u=!p.jon])) :: + ++ ci :: maybe transform + |* [poq=$+(* *) wit=fist] + |= jon=json + (biff (wit jon) poq) + :: ++ cu :: transform |* [poq=$+(* *) wit=fist] |= jon=json @@ -777,7 +813,7 @@ ++ da :: UTC date |= jon=json ?. ?=([%s *] jon) ~ - (bind (stud (trip p.jon)) |=(a=date (year a))) + (bind (stud p.jon) |=(a=date (year a))) :: ++ di :: millisecond date %- cu :_ ni @@ -834,6 +870,18 @@ ?. ?=([%o *] jon) ~ (zm (~(run by p.jon) wit)) :: + ++ op :: parse keys of map + |* [fel=_rule wit=fist] + %+ cu mo + %- ci :_ (om wit) + |= a=(map cord ,_(need *wit)) + ^- (unit (list ,_[(wonk *fel) (need *wit)])) + =- (zl (turn (~(tap by a)) -)) + |* [a=cord b=*] + =+ nit=(rush a fel) + ?~ nit ~ + (some [u.nit b]) + :: ++ pe :: prefix |* [pre=* wit=fist] (cu |*(a=* [pre a]) wit) @@ -878,7 +926,7 @@ :: ++ zm :: collapse unit map |* lum=(map term (unit)) - ?: (~(rep by lum) | |=([[@ a=(unit)] b=?] |(b ?=(~ a)))) + ?: (~(rep by lum) |=([[@ a=(unit)] b=_|] |(b ?=(~ a)))) ~ (some (~(run by lum) need)) -- @@ -905,6 +953,11 @@ ?: =(0 a) '0' (crip (flop |-(^-(tape ?:(=(0 a) ~ [(add '0' (mod a 10)) $(a (div a 10))]))))) :: +++ jode :: ms timestamp + |= a=time + =- (jone (div (mul - 1.000) ~s1)) + (add (div ~s1 2.000) (sub a ~1970.1.1)) +:: ++ jesc |= a=@ ^- tape ?+ a [a ~] @@ -961,10 +1014,6 @@ =+ buf=(rap 3 (turn wol |=(a=tape (crip (weld a `tape`[`@`10 ~]))))) [(met 3 buf) buf] :: -:: -++ txml :: string to xml - |= tep=tape ^- mars - [[%$ [%$ tep] ~] ~] :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: :: section 3bE, tree sync :: :: @@ -1968,11 +2017,6 @@ == [p.one [%& [*cart (weld q.q.q.one q.q.q.two)]]] :: -++ meat :: kite to .^ path - |= kit=kite - ^- path - [(cat 3 'c' p.kit) (scot %p r.kit) s.kit (scot `dime`q.kit) t.kit] -:: ++ tame :: parse kite path |= hap=path ^- (unit kite) @@ -2029,16 +2073,6 @@ [~ [i.rax ~]] [q.u.raf [p.u.raf ~]] :: -++ fain :: path restructure - |= [hom=path raw=path] - =+ bem=(need (tome raw)) - =+ [mer=(flop s.bem) moh=(flop hom)] - |- ^- (pair beam path) - ?~ moh - [bem(s hom) (flop mer)] - ?> &(?=(^ mer) =(i.mer i.moh)) - $(mer t.mer, moh t.moh) -:: ++ fuel :: parse fcgi |= [bem=beam but=path] ^- epic @@ -2144,7 +2178,7 @@ |= har=hart ^- tape ;: weld - ?:(&(p.har !=([& /localhost] r.har)) "https://" "http://") + ?:(&(p.har !?=(hoke r.har)) "https://" "http://") :: ?- -.r.har | (trip (rsh 3 1 (scot %if p.r.har))) @@ -2172,7 +2206,7 @@ -- :: ++ epur :: url/header parser - =< |=(a=cord (rush a auri)) + =< |=(a=cord `(unit purl)`(rush a auri)) |% ++ apat :: 2396 abs_path %+ cook deft @@ -2180,7 +2214,7 @@ ++ auri :: 2396 URL %+ cook |= a=purl - ?.(=([& /localhost] r.p.a) a a(p.p &)) + ?.(?=(hoke r.p.a) a a(p.p &)) ;~ plug ;~ plug %+ sear @@ -2615,6 +2649,14 @@ ?: ?=(| -.mud) mud (mule |.((slam p.mud sam))) :: +++ 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 + =+ fel=(most cab (sear wick urt:ab)) + |=(a=span `(unit ,[p=term q=path])`(rush a fel)) ++ saxo :: autocanon |= who=ship ^- (list ship) @@ -2665,7 +2707,6 @@ q=(unit ,[p=cash q=*]) :: file r=(map ,@ta ankh) :: folders == :: -++ ankz ,[p=@ (map ,@ta ankz)] :: trimmed ankh ++ apex ,[p=@uvI q=(map ,@ta ,@uvI) r=(map ,@ta ,~)] :: node report (old) ++ ares (unit ,[p=term q=(list tank)]) :: possible error ++ ball ,@uw :: statement payload @@ -2796,7 +2837,6 @@ ton=town :: security zac=(map ship corn) :: flows by server == :: -++ frog ,[p=@da q=nori] :: time and change ++ gank (each vase (list tank)) :: abstract result ++ gift :: one-way effect $% [%$ p=vase] :: trivial output @@ -2888,6 +2928,8 @@ ++ hoot ,[p=? q=(unit ,@ud) r=host] :: secure/port/host ++ hort ,[p=(unit ,@ud) q=host] :: http port/host ++ host $%([& p=(list ,@t)] [| p=@if]) :: http host +++ hoke %+ each ,[%localhost ~] :: local host + ?(%.0.0.0.0 %.127.0.0.1) :: ++ httq :: raw http request $: p=meth :: method q=@t :: unparsed url @@ -2907,11 +2949,7 @@ [%b p=?] :: boolean [%o p=(map ,@t json)] :: object [%n p=@ta] :: number - [%s p=@ta] :: string - == :: -++ jsot :: strict json top - $% [%a p=(list json)] :: array - [%o p=(map ,@t json)] :: object + [%s p=@t] :: string == :: ++ lamb :: short path $% [& p=@tas] :: auto @@ -2942,10 +2980,8 @@ [%wan p=wain] :: text lines [%zap p=@ud q=(list tank)] :: status/error == :: -++ luge ,[p=mark q=*] :: fully typed content ++ maki ,[p=@ta q=@ta r=@ta s=path] :: ++ mace (list ,[p=life q=ring]) :: private secrets -++ marv ?(%da %tas %ud) :: release form ++ math (map ,@t (list ,@t)) :: semiparsed headers ++ meal :: payload $% [%back p=cape q=flap r=@dr] :: acknowledgment @@ -3107,7 +3143,6 @@ ++ step ,[p=bray q=gens r=pass] :: identity stage ++ tako ,@ :: yaki ref ++ tart $+([@da path note] bowl) :: process core -++ taxi ,[p=lane q=rock] :: routed packet ++ tick ,@ud :: process id ++ toro ,[p=@ta q=nori] :: general change ++ town :: all security state @@ -3132,6 +3167,5 @@ [%chan (list $|(@ud [p=@ud q=@ud]))] :: ++ wund (list ,[p=life q=ring r=acru]) :: mace in action ++ will (list deed) :: certificate -++ worm ,* :: vase of tart -++ zuse %314 :: hoon/zuse kelvin +++ zuse %310 :: hoon/zuse kelvin -- diff --git a/main/app/bang/core.hook b/main/app/bang/core.hook new file mode 100644 index 000000000..ebe91350e --- /dev/null +++ b/main/app/bang/core.hook @@ -0,0 +1,21 @@ +:: Bang: send cards to arvo +:: +:::: /hook/core/bang/app + :: +/+ sh-utils +!: +:::: + :: +|_ [hide ~] +++ lima |*(a=(pole) ?~(a ~ [i t]=a(+ (..$ +.a)))) +++ poke--args + |* [ost=bone @ a=[* (pole)]] + => .(a ^.(lima a)) + :_(+> (turn a |*(b=_i.a [ost %pass / b]))) +:: +++ pour + %- add-exit + |= [@ * sih=*] + ~& bang-resp/(,[term term] [&1 &2]:sih) + `+>.$ +-- diff --git a/main/app/began/core.hook b/main/app/began/core.hook index 18008a23c..cf6174e18 100644 --- a/main/app/began/core.hook +++ b/main/app/began/core.hook @@ -1,16 +1,17 @@ -/- begin-args -:: |% ++ sign $% $: %a $% [%went p=ship q=cape] [%init p=@p] == == == -++ began-args ,[his=@p tic=@p eny=@t ges=gens] +++ began-args ,[his=@p tic=@p eny=@t ges=gens ~] -- :: !: +:::: + :: |_ [hid=hide %0 ust=bone his=@p mac=mace] +++ peer ,_`. ++ poke-began-args |= [ost=bone you=ship began-args] =+ bur=(shax :(mix (jam ges) eny)) @@ -26,9 +27,13 @@ :_ +>.$ ?~ wil [ust %give %mean ~ %rejected ~]~ - :_ :_ ~ - [ust %give %nice ~] - [ust %pass / %a %cash his mac u.wil] + :~ [ust %pass / %a %cash his mac u.wil] + [ust %pass / %c %plug our.hid %main (sein our.hid) %main] + [ust %pass / %c %plug our.hid %arvo (sein our.hid) %arvo] + [ust %pass / %c %plug our.hid %try (sein our.hid) %try] + [ust %give %nice ~] + == + :: ++ pour |= [ost=bone pax=path sih=*] @@ -40,8 +45,4 @@ %went ~ == :: -++ peer - |= - * - `+> -- diff --git a/main/app/begin/core.hook b/main/app/begin/core.hook index 6b5368824..20ddb5ede 100644 --- a/main/app/begin/core.hook +++ b/main/app/begin/core.hook @@ -1,5 +1,3 @@ -/- begin-args -:: |% ++ sign $% $: %g @@ -19,14 +17,17 @@ -- :: !: +:::: + :: |_ [hid=hide sat=state form] +++ peer ,_`. ++ done |= ost=bone :_ +>.$ :* :* ost %pass /to-gan %g %mess [our.hid /began] our.hid - %began-args !>([his tic eny ges]) + %began-args !>([his tic eny ges ~]) == - (spam %rush %prompt "[waiting...]" %text '') + (spam %rush %prompt '[waiting...]' %text '') == :: ++ loon @@ -377,149 +378,17 @@ :_ +>.$(q.ges [%duke wat], sat %done) [`['' %text ''] ~] :: - %done !! + %done !! :: can't actually complete event because vere commits suicide + ::[[`['[waiting...]' %text ''] ~] +>.$] == :: ++ poke-begin-args - |= [ost=bone you=ship arg=(list)] - =^ sot +>.$ - ?~ arg [%begin +>.$] - =+ ((soft ,@p) i.arg) - ?~ - [%begin +>.$] - =. his u.- - ?~ t.arg [%his +>.$] - =+ ((soft ,@p) i.t.arg) - ?~ - [%his +>.$] - =. tic u.- - ?~ t.t.arg [%tic +>.$] - =+ ((soft ,@t) i.t.t.arg) - ?~ - [%tic +>.$] - =. eny u.- - ?~ t.t.t.arg [%eny +>.$] - =+ ((soft lang) i.t.t.t.arg) - ?~ - [%eny +>.$] - ?~ (glon u.-) [%eny +>.$] - =. p.ges u.- - =+ ran=(clan his) - =* sec t.t.t.t.arg - ?~ sec [%lag +>.$] - ?- ran - ?(%czar %pawn) %begin - ?(%king %earl) - =+ ((soft ,@t) i.sec) - ?~ - [%lag +>.$] - =. q.ges - ?- ran - %king [%king u.-] - %earl [%earl u.-] - == - [%done +>.$] - :: - %duke - =+ ((soft ?(%anon %lady %lord %punk)) i.sec) - ?~ - [%lag +>.$] - ?- u.- - %anon - =. q.ges [%duke %anon ~] - [%done +>.$] - :: - %punk - ?~ t.sec [%form +>.$] - =+ ((soft ,@t) i.t.sec) - ?~ - [%form +>.$] - =. q.ges [%duke %punk *sect u.-] - ?~ t.t.sec [%pname +>.$] - =+ ((soft sect) i.t.t.sec) - ?~ - [%pname +>.$] - ?> ?=(%duke -.q.ges) - ?> ?=(%punk -.p.q.ges) - =. q.ges [%duke %punk u.- q.p.q.ges] - [%done +>.$] - :: - ?(%lady %lord) - =. q.ges - ^- gcos - :- %duke - ?- u.- - %lady [%lady *whom] - %lord [%lord *whom] - == - ?~ t.sec [%form +>.$] - =+ ((soft ,@ud) i.t.sec) - ?~ - [%form +>.$] - =+ ^= wat - =+ woh=`whom`[u.- *govt *sect *name] - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lady %lord) -.p.q.ges) - `what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - =. q.ges `gcos`[%duke wat] - ?~ t.t.sec [%year +>.$] - =+ ((soft govt) i.t.t.sec) - ?~ - [%year +>.$] - =+ ^= wat - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lady %lord) -.p.q.ges) - =+ woh=`whom`[p.p.p.q.ges u.- *sect *name] - `what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - =. q.ges [%duke wat] - ?~ t.t.t.sec [%govt +>.$] - =+ ((soft sect) i.t.t.t.sec) - ?~ - [%govt +>.$] - =+ ^= wat - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lady %lord) -.p.q.ges) - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges u.- *name] - `what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - =. q.ges [%duke wat] - =+ nam=((hard (list)) |8.arg) - ?~ nam [%sect +>.$] - =+ ((soft ,@t) i.nam) - ?~ - [%sect +>.$] - =+ ^= wat - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lady %lord) -.p.q.ges) - =+ nym=`name`[u.- *(unit ,@t) *(unit ,@t) *@t] - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges r.p.p.q.ges nym] - `what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - ~! nama=nam - =. q.ges `gcos`[%duke wat] - ~! namb=nam - ?~ t.nam [%fname +>.$] - =+ ((soft (unit ,@t)) i.t.nam) - ?~ - [%fname +>.$] - =+ ^= wat - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lady %lord) -.p.q.ges) - =+ nym=[p.s.p.p.q.ges u.- *(unit ,@t) *@t] - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges r.p.p.q.ges nym] - `what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - =. q.ges [%duke wat] - ?~ t.t.nam [%mname +>.$] - =+ ((soft (unit ,@t)) i.t.t.nam) - ?~ - [%mname +>.$] - =+ ^= wat - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lady %lord) -.p.q.ges) - =+ nym=[p.s.p.p.q.ges q.s.p.p.q.ges u.- *@t] - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges r.p.p.q.ges nym] - `what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - =. q.ges [%duke wat] - ?~ t.t.t.nam [%nname +>.$] - =+ ((soft ,@t) i.t.t.t.nam) - ?~ - [%nname +>.$] - =+ ^= wat - ?> ?=(%duke -.q.ges) - ?> ?=(?(%lady %lord) -.p.q.ges) - =+ nym=[p.s.p.p.q.ges q.s.p.p.q.ges r.s.p.p.q.ges u.-] - =+ woh=`whom`[p.p.p.q.ges q.p.p.q.ges r.p.p.q.ges nym] - `what`?-(-.p.q.ges %lord [%lord woh], %lady [%lady woh]) - =. q.ges [%duke wat] - [%done +>.$] - == - == + |= [ost=bone you=ship arg=$|(~ [his=ship ~])] =^ res +>.$ ^- [[pot=(unit ,[cord prom cord]) tak=(list cord)] _+>.$] - (next(sat sot) '') + ?~ arg + (next(sat %begin) '') + (next(sat %his) (rsh 3 1 (scot %p his.arg))) :_ +>.$ %+ welp :~ [ost %pass /in %g %show [our.hid +.imp.hid] you /in/[-.imp.hid]] @@ -527,8 +396,8 @@ == %+ welp ?~(pot.res ~ (spam %rush %prompt u.pot.res)) - %- zing - (turn (flop tak.res) |=(a=cord (spam %rush %txt a))) + %^ spam %rush %tang + (turn (flop tak.res) |=(a=cord [%leaf (trip a)])) :: ++ pour |= [ost=bone pax=path sih=*] @@ -545,8 +414,8 @@ :_ +>.$ %+ welp ?~(pot.res ~ (spam %rush %prompt u.pot.res)) - %- zing - (turn (flop tak.res) |=(a=cord (spam %rush %txt a))) + %^ spam %rush %tang + (turn (flop tak.res) |=(a=cord [%leaf (trip a)])) :_ +>.$ :- [ost %give +.sih] ?+ +<.sih ~ @@ -564,10 +433,6 @@ [%leaf "begin failed"] == -++ peer - |= - * - `+> :: ++ spam |* git=* diff --git a/main/app/cat/core.hook b/main/app/cat/core.hook index 14025fdaf..86348b2ac 100644 --- a/main/app/cat/core.hook +++ b/main/app/cat/core.hook @@ -1,27 +1,35 @@ +:: ConCATenate file listings +:: +:::: /hook/core/cat/app + :: +/+ sh-utils +// /%%%/ls/subdir !: +:::: + :: |_ [hid=hide ~] -++ poke-cat-args - |= [ost=bone you=ship arg=(list path)] - :_ +>.$ - :* [ost %give %nice ~] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang - %- flop - ^- (list tank) - %- zing - %+ turn arg - |= pax=path - =+ ark=;;(arch .^(%cy pax)) - ?~ q.ark ~[leaf/"file {} not available"] - :- leaf/(spud pax) - %+ turn (lore ;;(,@t .^(%cx pax))) - |= a=cord - leaf/(trip a) +++ peer ,_`. +++ poke--args + %+ args-into-gate . + |= [arg=(list path)] + =- tang/(zing -) + %+ turn arg + |= pax=path + ^- tang + =+ ark=;;(arch .^(%cy pax)) + ?^ q.ark + :- leaf/(spud pax) + %+ turn (lore ;;(@t .^(%cx pax))) + |=(a=cord leaf/(trip a)) + ?- r.ark :: handle ambiguity + ~ + [rose/[" " `~]^~[leaf/"~" (smyt pax)]]~ + [[@t ~] ~ ~] + $(pax (welp pax /[p.n.r.ark])) + * + =- [palm/[": " ``~]^-]~ + :~ rose/[" " `~]^~[leaf/"*" (smyt pax)] + `tank`(subdir pax r.ark) + == == -++ peer - |= - * - `+> -- diff --git a/main/app/chat/core.hook b/main/app/chat/core.hook index e6bb8ca35..11255ed8b 100644 --- a/main/app/chat/core.hook +++ b/main/app/chat/core.hook @@ -8,7 +8,7 @@ $: %0 air=(map path station) pom=(unit ship) - sen=(qeu mess) + sen=(set mess) $= fal $: eth=? qit=? @@ -59,6 +59,7 @@ $% [%mess p=hapt q=ship r=cage] [%nuke p=hapt q=ship] [%show p=hapt q=ship r=path] + [%took p=hapt q=ship] == == == ++ sign $? $: %g @@ -141,12 +142,12 @@ [(send /out %give %rush %tang [%leaf "invalid input"] ~) +>.$] |- ?- -.u.rey - %all =+ ^= mof + %all =+ ^= mof ?~ pom ~ (send /out %give %rush %prompt '& ' %text '') =^ mow +>.^$ (poke-zung(pom ~) ost our.hid %mess sat.fal p.u.rey) - [(welp mof mow) +>.^$(sen (~(put to sen) p.u.rey))] + [(welp mof mow) +>.^$(sen (~(put in sen) p.u.rey))] %back :_ +>.^$ %^ send /out %give :+ %rush %tang @@ -219,9 +220,7 @@ ;title: Radio ;script(type "text/javascript", src "//use.typekit.net/fkv0sjk.js"); ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"); - ;script:''' - try{Typekit.load();}catch(e){} - ''' + ;script:'try{Typekit.load();}catch(e){}' ;link(rel "stylesheet", type "text/css", href "/gen/main/pub/src/chat/main.css"); == ;body @@ -293,11 +292,17 @@ == [~ +>.$] :: +++ pass-took + |= [moz=(list move) ost=bone pax=path imp=path] + :_ +>.$ + :_(moz [ost %pass pax %g %took [our.hid imp] our.hid]) +:: ++ pour |= [ost=bone pax=path sih=*] ^- [(list move) _+>] :: ~& sih=sih =+ sih=((hard sign) sih) + =+ took=|=([imp=path moz=(list move)] (pass-took moz ost pax imp)) ?~ pax ~& %chat-pour-strange-path !! :: ~& [%pour-mess pax] ?+ i.pax ~& %chat-pour-strange-path !! @@ -307,7 +312,8 @@ %mean [(send /out %give +.sih) +>.$] ?(%rush %rust) ?> ?=(%txt -.p.sih) - (exec-cmd ost p.p.sih) + =^ moz +>.$ (exec-cmd ost p.p.sih) + (took +.imp.hid moz) == :: ?(%mesg %priv) @@ -319,14 +325,21 @@ [~ +>.$] ?> ?=(%rush +<.sih) ?> ?=(%zong -.p.sih) - :_ +>.$ - (send /out %give %rush %tang (zong-to-tank & p.p.sih) ~) + (took /chat (send /out %give %rush %tang (zong-to-tank & p.p.sih) ~)) :: ?(%radi-a %radi-m) - ?: ?=(?(%nice %mean) +<.sih) + ?: ?=(%nice +<.sih) :_ +>.$ ?: ?=(%radi-a i.pax) ~ [ost %give +.sih]~ + ?: ?=(%mean +<.sih) + :_ +>.$ :_ ~ + =- ~& [%trying-again -] - + :* ost %pass pax %g %show + [pad.fal /radio] our.hid + ?-(i.pax %radi-a %amigos, %radi-m %mensajes) + sat.fal + == =+ ya=(grab t.pax) =. ya ?- i.pax @@ -357,28 +370,33 @@ =+ ^= pout ?:(=(i.pax %radi-a) %amigos %mensajes) =. air (~(put by air) t.pax ya) =+ mow=(send [pout t.pax] %give +.sih) - =< [mow +>.$] + =< (took /radio mow) + :: =< [mow +>.$] :: XX yes, I just used an inline comment :: XX and multiple XX's. why? because :: XX tmi is incredibly lame. ^+ . ?: =(%zong -.p.sih) =+ zog=((hard zong) p.p.sih) - ?: &(=(our.hid q.zog) =(`r.zog ~(top to sen))) - %_(+ sen ^+(sen ~(nap to sen))) + ?: &(=(our.hid q.zog) (~(has in sen) r.zog)) + + + :: ?: &(=(our.hid q.zog) =(`r.zog ~(top to sen))) + :: %_(+ sen ^+(sen ~(nap to sen))) %_ + mow (welp mow (send /out %give %rush %tang (zong-to-tank | zog) ~)) == ?: =(%zongs -.p.sih) - =+ zos=((hard (list zong)) p.p.sih) + =+ zos=(scag 200 ((hard (list zong)) p.p.sih)) =< +(mow (flop mow)) |- ^+ +.$ ?: =(~ zos) +.$ :: XX tm freakin i =+ zoy=((hard zong) -.zos) =. +.$ $(zos +.zos) - ?: &(=(our.hid &3.zoy) =(`&4.zoy ~(top to sen))) - %_(+.$ sen `(qeu mess)`~(nap to sen)) + ?: &(=(our.hid &3.zoy) (~(has in sen) &4.zoy)) + +.$ + :: ?: &(=(our.hid &3.zoy) =(`&4.zoy ~(top to sen))) + :: %_(+.$ sen `(qeu mess)`~(nap to sen)) %_ +.$ mow (welp mow (send /out %give %rush %tang (zong-to-tank | zoy) ~)) diff --git a/main/app/code/core.hook b/main/app/code/core.hook new file mode 100644 index 000000000..d5b698a4d --- /dev/null +++ b/main/app/code/core.hook @@ -0,0 +1,9 @@ +:: Show passcode +/+ sh-utils +|_ [hide ~] +++ peer ,_`. +++ poke--args + %+ args-into-gate . + =+ pax=/(crip )/code/(crip )/(crip ) + ,_tang/~[leaf/"{<(,@p .^(%a pax))>}"] +-- diff --git a/main/app/cp/core.hook b/main/app/cp/core.hook index 6ee92b70b..adafd219a 100644 --- a/main/app/cp/core.hook +++ b/main/app/cp/core.hook @@ -1,9 +1,13 @@ !: +:::: + :: |_ [hid=hide ~] +++ peer ,_`. ++ poke-cp-args |= [ost=bone you=ship input=path output=path ~] :_ +>.$ :* [ost %pass /cp %c %info our.hid (foal output .^(%cx input))] + [ost %pass / %g %cide %$] [ost %give %nice ~] %+ turn (~(tap by sup.hid)) |= [ost=bone *] @@ -11,8 +15,4 @@ :- %tang :_ ~ leaf/"copied" == -++ peer - |= - * - `+> -- diff --git a/main/app/gnab/core.hook b/main/app/gnab/core.hook new file mode 100644 index 000000000..00797a380 --- /dev/null +++ b/main/app/gnab/core.hook @@ -0,0 +1,21 @@ +:: gnaB: send gift to arvo +:: +:::: /hook/core/gnab/app + :: +/+ sh-utils +!: +:::: + :: +|_ [hide ~] +++ lima |*(a=(pole) ?~(a ~ [i t]=a(+ (..$ +.a)))) +++ poke--args + |* [ost=bone @ a=[* (pole)]] + => .(a ^.(lima a)) + :_(+> (turn a |*(b=_i.a [ost %give b]))) +:: +++ pour + %- add-exit + |= [@ * sih=*] + ~& gnab-resp/(,[term term] [&1 &2]:sih) + `+>.$ +-- diff --git a/main/app/grep/core.hook b/main/app/grep/core.hook index ce4736038..a0260cbae 100644 --- a/main/app/grep/core.hook +++ b/main/app/grep/core.hook @@ -10,6 +10,8 @@ -- :: !: +:::: + :: |_ [hid=hide arg=cord] ++ poke-grep-args |= [ost=bone you=ship arg=cord ~] @@ -29,7 +31,7 @@ %nice [ost %give %nice ~]~ %rush - %+ weld (spam %rush %prompt 'searching for {}...') + %+ weld (spam %rush %prompt 'searching for {}...' %text ~) %- spam ?- &3.sih %txt diff --git a/main/app/hi/core.hook b/main/app/hi/core.hook index 7f6ecd4c8..151f120ec 100644 --- a/main/app/hi/core.hook +++ b/main/app/hi/core.hook @@ -1,6 +1,10 @@ -:: Hi +:: Hi, send optional message to a ship :: -:::: /hook/gate/hi/bin +:::: /hook/core/hi/bin + :: +/+ sh-utils +:: +:::: :: |% ++ sign :: @@ -13,37 +17,30 @@ [%text p=tape] :: == :: -- -:: !: +:::: + :: |_ [hid=hide ~] -++ poke-hi-args - |= [ost=bone you=ship her=ship mes=?(~ [tex=tape ~])] - :_ +>.$ - =+ mez=[%txt !>(?~(mes '' (crip tex.mes)))] - :~ [ost %pass /hi/(scot %p her) %g %mess [her /hi] you mez] - [ost %give %nice ~] - == +++ peer ,_`. +++ poke--args + |= [bone you=ship her=ship mes=?(~ [tex=tape ~])] + %. +< + %+ add-resp + =+ mez=[%txt !>(?~(mes '' (crip tex.mes)))] + [%pass /hi/(scot %p her) %g %mess [her /hi] you mez] + (add-nice ,_`+>.$) :: ++ poke-txt + %- add-nice |= [ost=bone him=ship cor=@t] :_ +>.$ - :~ [ost %pass /di %d %flog %text "< {}: {(trip cor)}"] - [ost %give %nice ~] - == + [ost %pass /di %d %flog %text "< {}: {(trip cor)}"]~ :: ++ pour |= [ost=bone pax=path sih=sign] ?> ?=([%hi @t ~] pax) - :_ +>.$ - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - ?: ?=(%nice +<.sih) - leaf/"hi {(trip i.t.pax)} successful" - leaf/"hi {(trip i.t.pax)} unsuccessful" -++ peer - |= - * - `+> + %. +< + =+ ack=?+(+<.sih "unsuccesful" %nice "succesful") + (add-exit (print +>.$ "hi {(trip i.t.pax)} {ack}")) +:: -- diff --git a/main/app/into/core.hook b/main/app/into/core.hook index 612006361..25f92812d 100644 --- a/main/app/into/core.hook +++ b/main/app/into/core.hook @@ -1,9 +1,13 @@ !: +:::: + :: |_ [hid=hide ~] +++ peer ,_`. ++ poke-into-args |= [ost=bone you=ship pax=path dat=@ ~] :_ +>.$ - :* [ost %pass /cp %c %info our.hid (foal pax dat)] + :* [ost %pass /into %c %info our.hid (foal pax dat)] + [ost %pass / %g %cide %$] [ost %give %nice ~] %+ turn (~(tap by sup.hid)) |= [ost=bone *] @@ -11,8 +15,4 @@ :- %tang :_ ~ leaf/"written" == -++ peer - |= - * - `+> -- diff --git a/main/app/label/core.hook b/main/app/label/core.hook new file mode 100644 index 000000000..63698f2a4 --- /dev/null +++ b/main/app/label/core.hook @@ -0,0 +1,13 @@ +!: +:::: + :: +|_ [hid=hide ~] +++ poke-label-args + |= [ost=bone you=ship syd=@tas lab=@tas ~] + :_ +>.$ + :~ [ost %pass /label %c %info our.hid syd %| lab] + [ost %pass / %g %cide %$] + [ost %give %nice ~] + == +++ peer |=(* `+>) +-- diff --git a/main/app/ls/core.hook b/main/app/ls/core.hook index 86fa54b16..9a47fa0d2 100644 --- a/main/app/ls/core.hook +++ b/main/app/ls/core.hook @@ -1,21 +1,17 @@ +:: LiSt directory subnodes +:: +:::: + :: +/+ sh-utils +// /%%/subdir !: +:::: + :: |_ [hid=hide ~] +++ peer ,_`. ++ poke-ls-args - |= [ost=bone you=ship arg=path ~] + %+ args-into-gate . + |= [arg=path ~] =+ lon=((hard arch) .^(%cy arg)) - :_ +>.$ - :* ::[ost %pass / %g %cide %$] - [ost %give %nice ~] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang - :_ ~ - :+ %rose [" " ~ ~] - (turn (~(tap by r.lon) ~) |=([a=@ta b=*] leaf/(trip a))) - == -++ peer - |= - * - `+> + tang/[?~(r.lon leaf/"~" (subdir arg r.lon))]~ -- diff --git a/main/app/ls/subdir.hoon b/main/app/ls/subdir.hoon new file mode 100644 index 000000000..a665d47ba --- /dev/null +++ b/main/app/ls/subdir.hoon @@ -0,0 +1,20 @@ +|% +++ subdir + |= [pax=path des=(map ,@t ,~)] + ^- tank + :+ %rose [" " `~] + %+ turn (sort (~(tap by des)) aor) + |= [kid=@ta ~] + =+ paf=`path`/[kid] + =- :+ %rose ["/" ~ ?:(dir "/" ~)] + (turn paf |=(a=span leaf/(trip a))) + |- ^- [dir=? paf=path] + =+ arf=;;(arch .^(%cy (weld pax paf))) + ?^ q.arf + [| paf] + ?~ r.arf + [& paf] :: !! + ?. ?=([^ ~ ~] r.arf) + [& paf] + $(paf (welp paf /[p.n.r.arf])) +-- diff --git a/main/app/mv/core.hook b/main/app/mv/core.hook index cfe25c83a..3048d3775 100644 --- a/main/app/mv/core.hook +++ b/main/app/mv/core.hook @@ -1,20 +1,17 @@ +:: MoVe file from one location to another +:: +:::: /hook/core/mv/app + :: +/+ sh-utils !: +:::: + :: |_ [hid=hide ~] -++ poke-mv-args - |= [ost=bone you=ship input=path output=path ~] - :_ +>.$ - :* :^ ost %pass /cp - :^ %c %info our.hid - (furl (foal output .^(%cx input)) (fray input)) - [ost %give %nice ~] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - leaf/"moved" - == -++ peer - |= - * - `+> +++ peer ,_`. +++ poke--args + %+ gate-bang + |= [input=path output=path ~] + :^ %c %info our.hid + (furl (foal output .^(%cx input)) (fray input)) + (args-into-gate . ,_[%txt 'moved']) -- diff --git a/main/app/nop/core.hook b/main/app/nop/core.hook new file mode 100644 index 000000000..93c6b28bc --- /dev/null +++ b/main/app/nop/core.hook @@ -0,0 +1 @@ +|_ ^ ++ poke-nop-args ,_`. -- diff --git a/main/app/peek/core.hook b/main/app/peek/core.hook new file mode 100644 index 000000000..0b9f0ea89 --- /dev/null +++ b/main/app/peek/core.hook @@ -0,0 +1,34 @@ +:: Peek imp path || Poke ship imp path. Subscribe to an app. +!: +:::: + :: +|_ [hide ~] +++ ptah ,[p=path q=path ~] +++ poke-peek-args + |= [ost=bone @ a=?(ptah [her=ship ptah])] + =- :_(+>.$ ~[[ost %give %nice ~] [ost %pass / %g %show -]]) + ^- [p=[ship path] q=ship r=path] + ?^ |2.a [[her p]:a our q.a] + [[our p.a] our q.a] +:: +++ posh + |* [@ * git=[@tas *]] + ~& peek-posh/git + `+> +++ pour + |= [ost=bone * sih=*] + ~& =+ cod=(,[term term] [&1 &2]:sih) + ?+ +.cod peek-resp/cod + %nice %peek-nice + %mean + =+ are=((soft ares) |2.sih) + ?~ are %peek-mean + ?~ u.are %peek-done + ~& > p.u.u.are + |- + ?~ q.u.u.are %peek-mean + ~> %slog.`rose/[~ "! " ~]^[i.q.u.u.are]~ + $(q.u.u.are t.q.u.u.are) + == + :_(+> ?+(&2.sih ~ %mean [ost %pass / %g %cide %$]~)) +-- diff --git a/main/app/poke/core.hook b/main/app/poke/core.hook new file mode 100644 index 000000000..602c6843e --- /dev/null +++ b/main/app/poke/core.hook @@ -0,0 +1,30 @@ +:: Poke path [mark *] || Poke ship path [mark *]. Send message to an app. +!: +:::: + :: +|_ [hide ~] +++ mess ,[p=path q=[@ *] ~] +++ pock-poke-args + |= [ost=bone @ a=type b=?(mess [her=ship mess])] + =- :_(+>.$ [ost %pass / %g %mess -]~) + ^- [p=[ship path] q=ship r=cage] + ?^ |2.b [[her p]:b our -.q.b (slot 29 [a b])] :: +.&3 + [[our p.b] our -.q.b (slot 13 [a b])] :: +.&2 +:: +++ pour + |= [ost=bone * sih=*] + ~& =+ cod=(,[term term] [&1 &2]:sih) + ?+ +.cod poke-resp/cod + %nice %poke-nice + %mean + =+ are=((soft ares) |2.sih) + ?~ are %poke-mean + ?~ u.are %poke-nil-mean + ~& > p.u.u.are + |- + ?~ q.u.u.are %poke-mean + ~> %slog.`rose/[~ "! " ~]^[i.q.u.u.are]~ + $(q.u.u.are t.q.u.u.are) + == + :_(+> [ost %pass / %g %cide %$]~) +-- diff --git a/main/app/pope/core.hook b/main/app/pope/core.hook new file mode 100644 index 000000000..7b129eb51 --- /dev/null +++ b/main/app/pope/core.hook @@ -0,0 +1,47 @@ +:: Pope, generate key for carrier +:: +:::: /hook/core/pope/app + :: +/+ sh-utils +!: +:::: + :: +|% +++ gilt $%([%tang (list tank)] [%prompt @t prom @t]) +++ sign + $% [%t %wake ~] + [%g $%([%nice ~] [%rush %txt p=cord])] + == +-- +!: +:::: + :: +=+ cryp=bruw :: XX change to ec2 ++brew eventually +|_ [hide who=@p fra=@t] +++ peer ,_`. +++ poke--args + |= [@ @ who=ship ~] + ?> ?=(%czar (clan who)) + =. ^who who + =- %.(+<.$ (add-nice (gate-bang ,_noe (return git)))) + :- noe=[%g %show our^+.imp our /in/[-.imp]] :: request input + git=prompt/['passphrase: ' %pass ''] +:: +++ return |=(a=gilt (add-output +> rush/a ,_`+>)) +++ pour + |= [@ * sih=*] + =+ sih=;;(sign sih) + ?- -.sih + %g ?. ?=(%rush +<.sih) `+>.$ + =. fra p.sih + =- %.(+<.$ (gate-bang ,_noe (return tang/~[leaf/msg]))) + :- noe=[%t %wait (add ~s1 lat)] :: set print timeout + msg="generating carrier {(scow %p who)} (#{(scow %ud who)})" + :: + %t =- %.(+<.$ (add-exit (return tang/-))) + =+ bur=(shax (add who (shax fra))) + =+ arc=(cryp 2.048 bur) + :~ leaf/"generator: {(scow %uw bur)}" + leaf/"fingerprint: {(scow %uw fig:ex:arc)}" + == == +-- diff --git a/main/app/radio/core.hook b/main/app/radio/core.hook index 48d0627a6..bdba7c0f6 100644 --- a/main/app/radio/core.hook +++ b/main/app/radio/core.hook @@ -65,16 +65,26 @@ :- [ost %give %nice ~] (send mensajes/p.zig %give %rush %zong zog) :: +++ poke-bit + |= [ost=bone you=ship ~] + ^- [(list move) _+>] + :_ +>.$ + %+ turn (~(tap by sup.hid)) + |= [ost=bone her=ship pax=path] + [ost %give %mean ~ %reload leaf/"please quit chat and re-enter" ~] +:: ++ pull |= ost=bone ^- [(list move) _+>] - =+ ^- [his=ship pax=path] (~(got by sup.hid) ost) - ?. ?=([%mensajes *] pax) + =+ ^- (unit ,[his=ship pax=path]) + (~(get by sup.hid) ost) + ?~ - ~& %strange-pull [~ +>.$] + ?. ?=([%mensajes *] pax.u) [~ +>.$] - =+ sta=(~(got by p.vat) pax) - =. q.sta %+ ~(put by q.sta) his %.n - =. p.vat %+ ~(put by p.vat) pax sta - [(send amigos/pax %give %rush %user %out his (ident his)) +>.$] + =+ sta=(~(got by p.vat) t.pax.u) + =. q.sta %+ ~(put by q.sta) his.u %.n + =. p.vat %+ ~(put by p.vat) t.pax.u sta + [(send amigos/t.pax.u %give %rush %user %out his.u (ident his.u)) +>.$] :: ++ send |= [pax=path msg=(mold note gift)] diff --git a/main/app/reboot/core.hook b/main/app/reboot/core.hook new file mode 100644 index 000000000..0244ff298 --- /dev/null +++ b/main/app/reboot/core.hook @@ -0,0 +1,37 @@ +:: Reboot %zuse and all kernel vanes +:: +:::: /hook/core/reboot/app + :: +/+ sh-utils +!: +:::: + :: +|_ [hid=hide ~] +++ peer ,_`. +++ poke--args + %^ add-output . + rush/tang/[leaf/"done"]~ + %+ args-into-resp . + |= arg=~ + %- turn + :_ |= [tip=@tasD nam=@tas] + =+ pax=[(scot %p our.hid) %arvo (scot %da lat.hid) nam %hoon ~] + [%veer tip pax (,@ .^(%cx pax))] + ^- (list ,[p=@tas q=@tas]) + :~ [%$ %zuse] + [%a %ames] + [%c %clay] + [%d %dill] + [%e %eyre] + [%f %ford] + [%g %gall] + [%t %time] + == +++ pour + %+ gate-bang + =+ pax=/(scot %p our.hid)/=/(scot %da lat.hid)/==count/txt + =+ nuf=(file pax) + =+ num=?~(nuf 0 +((fall (slaw %ud (,@t u.nuf)) 0))) + ,_[%c %info our.hid (foal pax num)] :: touch clay to reload apps + ,_`. +-- diff --git a/main/app/reload/core.hook b/main/app/reload/core.hook index c82c17efa..4f595d330 100644 --- a/main/app/reload/core.hook +++ b/main/app/reload/core.hook @@ -1,22 +1,30 @@ +:: Reload kernel vanes, specified by name or letter +:: +:::: /hook/core/reload/app + :: +/+ sh-utils !: +:::: + :: |_ [hid=hide ~] -++ poke-reload-args - |= [ost=bone you=ship all=(list ,@tas)] - :_ +>.$ - %+ welp - %+ turn all - |= nam=@tas - =+ tip=(end 3 1 nam) - =+ pax=[(scot %p our.hid) %arvo (scot %da lat.hid) nam %hoon ~] - [ost %give %veer ?:(=('z' tip) %$ tip) pax (,@ .^(%cx pax))] - :- [ost %give %nice ~] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - leaf/"done" -++ peer - |= - * - `+> +++ peer ,_`. +++ poke--args + %^ add-output . + rush/tang/[leaf/"done"]~ + %+ args-into-resp . + |= all=(list ,@tas) + %+ 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 ~] + [%veer ?:(=('z' tip) %$ tip) pax (,@ .^(%cx pax))] -- diff --git a/main/app/reset/core.hook b/main/app/reset/core.hook new file mode 100644 index 000000000..cc78b3cf1 --- /dev/null +++ b/main/app/reset/core.hook @@ -0,0 +1,38 @@ +:: Reset: recompile arvo, from hoon/hoon up +!: +:::: + :: +|_ [hid=hide ~] +++ peer ,_`. +++ poke-reset-args + |= [ost=bone you=ship arg=$|(~ [_| ~])] + :_ +>.$ + =+ top=`path`/(scot %p our.hid)/arvo/(scot %da lat.hid) + :^ [ost %give %nice ~] + [ost %pass ?~(arg /refresh /) %t %wait lat.hid] + [ost %give %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 %give %veer p pax txt] +++ pour + |= [ost=bone pax=path *] + :_ +>.$ + ?~ pax ~ + :_ ~ + =+ paf=/(scot %p our.hid)/=/(scot %da lat.hid)/==count/txt + =+ nuf=(file paf) + =+ num=?~(nuf 0 +((fall (slaw %ud (,@t u.nuf)) 0))) + [ost %pass /touch %c %info our.hid (foal paf num)] +-- diff --git a/main/app/rm/core.hook b/main/app/rm/core.hook index 58d318c3a..d706aa111 100644 --- a/main/app/rm/core.hook +++ b/main/app/rm/core.hook @@ -1,9 +1,13 @@ !: +:::: + :: |_ [hid=hide ~] +++ peer ,_`. ++ poke-rm-args |= [ost=bone you=ship pax=path ~] :_ +>.$ - :* [ost %pass /cp %c %info our.hid (fray pax)] + :* [ost %pass /rm %c %info our.hid (fray pax)] + [ost %pass / %g %cide %$] [ost %give %nice ~] %+ turn (~(tap by sup.hid)) |= [ost=bone *] @@ -11,8 +15,4 @@ :- %tang :_ ~ leaf/"removed" == -++ peer - |= - * - `+> -- diff --git a/main/app/rodeo/core.hook b/main/app/rodeo/core.hook new file mode 100644 index 000000000..0a7856cff --- /dev/null +++ b/main/app/rodeo/core.hook @@ -0,0 +1,763 @@ +:: +:::: /hook/core/rodeo/app + :: +/? 314 +/- *rodeo, *twitter +/+ rodeo +:: +:::: + :: +!: +=> |% :: data structures + ++ house ,[%1 house-1] :: full state + ++ house-any :: app history + $% [%1 house-1] :: 1: rodeo + [%0 house-0] :: 0: initial version + == :: + ++ house-1 :: + $: stories=(map span story) :: conversations + general=(set bone) :: meta-subscribe + outbox=(pair ,@ud (map ,@ud thought)) :: urbit outbox + folks=(map ship human) :: human identities + == :: + ++ house-0 :: legacy state + %+ map path :: + ,[p=(list zong) q=(map ship ,?)] :: + :: :: + ++ zong :: legacy messages + $% $: %mess p=@da q=ship :: + $= r :: + $% [%do p=@t] :: + [%exp p=@t q=tank] :: + [%say p=@t] :: + == == == :: + ++ story :: wire content + $: count=@ud :: (lent grams) + grams=(list telegram) :: all history + locals=(map ship (pair ,@da status)) :: local presence + remotes=(map partner atlas) :: remote presence + sequence=(map partner ,@ud) :: partners heard + shape=config :: configuration + known=(map serial ,@ud) :: messages heard + guests=(map bone river) :: message followers + viewers=(set bone) :: presence followers + owners=(set bone) :: config followers + == :: + ++ river (pair point point) :: stream definition + ++ point :: stream endpoint + $% [%ud p=@ud] :: by number + [%da p=@da] :: by date + == :: + ++ gift :: result + $% [%rush %rodeo-report report] :: refresh + [%mean ares] :: cancel + [%nice ~] :: accept + == :: + ++ sign :: response + $% $: %e :: from %eyre + $% [%thou p=httr] :: HTTP response + == == :: + $: %g :: application + $% [%mean p=ares] :: cancel + [%nice ~] :: acknowledge + [%rush p=silt] :: subs data + == == :: + $: %t :: + $% [%wake ~] :: timer wakeup + == == == :: + ++ silt + $% [%rodeo-report p=report] :: refresh + [%twit-stat p=twit-stat] :: tweet reciept + [%twit-feed p=(list twit-stat)] :: tweet reciept + == + ++ move ,[p=bone q=(mold note gift)] :: all actions + ++ hapt ,[p=ship q=path] :: app instance + ++ note :: requests + $% $: %c :: + $% [%info p=@p q=@tas r=nori] :: + == == :: + $: %e :: through %eyre + $% [%them p=(unit hiss)] :: HTTP request + == == :: + $: %g :: network + $% [%mess p=hapt q=ship r=cage] :: message + [%nuke p=hapt q=ship] :: cancel + [%show p=hapt q=ship r=path] :: subscribe + [%took p=hapt q=ship] :: acknowledge + == == :: + $: %t :: + $% [%wait p=@da] :: + == == == :: + -- +|_ [hid=hide house] +++ ra :: transaction core + |_ [ost=bone moves=(list move)] + ++ ra-abet :: resolve core + ^- [(list move) _+>] + [(flop moves) +>] + :: + ++ ra-emil :: ra-emit move list + |= mol=(list move) + %_(+> moves (welp (flop mol) moves)) + :: + ++ ra-emit :: emit a move + |= mov=move + %_(+> moves [mov moves]) + :: + ++ ra-ever :: emit success + (ra-emit ost %give %nice ~) + :: + ++ ra-evil :: emit error + |= msg=cord + ~& [%ra-evil msg] + (ra-emit ost %give %mean ~ msg ~) + :: + ++ ra-hiss :: emit http request + |= [pax=path hiz=hiss] + (ra-emit ost %pass pax %e %them ~ hiz) + :: + ++ ra-house :: emit partners + |= ost=bone + %+ ra-emit ost + :^ %give %rush %rodeo-report + :- %house + %- ~(gas in *(map span (pair posture cord))) + %+ turn (~(tap by stories)) + |=([a=span b=story] [a p.cordon.shape.b caption.shape.b]) + :: + ++ ra-homes :: update partners + =+ gel=general + |- ^+ +> + ?~ gel +> + =. +> $(gel l.gel) + =. +> $(gel r.gel) + (ra-house n.gel) + :: + ++ ra-init :: initialize rodeo + =+ sir=(sein our.hid) + %+ ra-apply our.hid + :+ %design (main our.hid) + :- ~ + :_ [%default ?:((gte our.hid 65.536) %brown %black) ~] + ?:(=(sir our.hid) ~ [[%& sir (main sir)] ~ ~]) + :: + ++ ra-apply :: apply command + |= [her=ship cod=command] + ^+ +> + ~& [%ra-apply cod] + ?- -.cod + %design + ?. =(her our.hid) + (ra-evil %rodeo-no-owner) + ?~ q.cod + ?. (~(has by stories) p.cod) + (ra-evil %rodeo-no-story) + =. +>.$ (ra-config p.cod *config) + ra-ever(stories (~(del by stories) p.cod)) + =. +>.$ (ra-config p.cod u.q.cod) + ra-ever + :: + %review ra-ever:(ra-think | her +.cod) + %publish ra-ever:(ra-think & her +.cod) + == + :: + ++ ra-config :: configure story + |= [man=span con=config] + ^+ +> + =+ :- neu=(~(has by stories) man) + pur=(fall (~(get by stories) man) *story) + =. +>.$ pa-abet:(~(pa-reform pa man pur) con) + ?:(neu +>.$ ra-homes) + :: + ++ ra-friend :: %friend response + |= [man=span tay=partner sih=sign] + ^+ +> + =+ pur=(~(get by stories) man) + ?~ pur ~& [%ra-friend-none man] +>.$ + pa-abet:(~(pa-friend pa man u.pur) tay sih) + :: + ++ ra-twitter :: %twitter response + |= [[num=@ud man=span] sih=sign] + ^+ +> + ?+ sih ~|([%rodeo-bad-twitter sih] !!) + [%g ?(%nice %mean) ~] + +> + [%g %mean ^] + (ra-repeat num [%| %twitter man] sih) + [%g %rush %twit-stat *] + (ra-repeat num [%| %twitter man] [%g %nice ~]) + == + :: + ++ ra-repeat :: %repeat response + |= [num=@ud pan=partner sih=sign] + =+ oot=(~(get by q.outbox) num) + ?~ oot ~& [%ra-repeat-none num] +>.$ + =. q.outbox (~(del by q.outbox) num) + =. q.u.oot + =+ olg=(~(got by q.u.oot) pan) + %+ ~(put by q.u.oot) pan + :- -.olg + ?+ sih !! + [%g %mean *] ~&([%rodeo-repeat-rejected num pan sih] %rejected) + [%g %nice ~] %received + == + (ra-think | our.hid u.oot ~) + :: + ++ ra-cancel :: drop a bone + ^+ . + =+ hep=(~(get by sup.hid) ost) + ?~ hep + + ?. ?=([@ @ *] q.u.hep) + +(general (~(del in general) ost)) + =* man i.t.q.u.hep + =+ pur=(~(get by stories) man) + ?~ pur +> + pa-abet:(pa-notify:~(pa-cancel pa man u.pur) p.u.hep %gone *human) + :: + ++ ra-human :: look up person + |= her=ship + ^- [human _+>] + =^ who folks + =+ who=(~(get by folks) her) + ?^ who [u.who folks] + =+ who=`human`[~ `(scot %p her)] :: XX do right + [who (~(put by folks) her who)] + [who +>.$] + :: + ++ ra-subscribe :: listen to + |= [her=ship pax=path] + ^+ +> + :: ~& [%ra-subscribe her pax] + ?: ?=(~ pax) + (ra-house(general (~(put in general) ost)) ost) + ?. ?=([@ @ *] pax) + (ra-evil %rodeo-bad-path) + =+ ^= vab ^- (set ,@tas) + =| vab=(set ,@tas) + |- ^+ vab + ?: =(0 i.pax) vab + $(i.pax (rsh 3 1 i.pax), vab (~(put in vab) (end 3 1 i.pax))) + =+ pur=(~(get by stories) i.t.pax) + ?~ pur + ~& [%bad-subscribe-story-c i.t.pax] + (ra-evil %rodeo-no-story) + =+ soy=~(. pa i.t.pax u.pur) + =. soy ?.((~(has in vab) %a) soy (pa-watch:soy her)) + =. soy ?.((~(has in vab) %x) soy (pa-master:soy her)) + =. soy ?.((~(has in vab) %f) soy (pa-listen:soy her t.t.pax)) + =^ who +>.$ (ra-human her) + pa-abet:(pa-notify:soy her %hear who) + :: + ++ ra-think :: publish/review + |= [pub=? her=ship tiz=(list thought)] + ^+ +> + ?~ tiz +> + $(tiz t.tiz, +> (ra-consume pub her i.tiz)) + :: + ++ ra-consume :: consume thought + |= [pub=? her=ship tip=thought] + =+ aud=(~(tap by q.tip) ~) + |- ^+ +>.^$ + ?~ aud +>.^$ + $(aud t.aud, +>.^$ (ra-conduct pub her p.i.aud tip)) + :: + ++ ra-conduct :: thought to partner + |= [pub=? her=ship tay=partner tip=thought] + ^+ +> + :: ~& [%ra-conduct pub her tay] + ?- -.tay + %& ?: pub + =. her our.hid :: XX security! + ?: =(her p.p.tay) + (ra-record q.p.tay p.p.tay tip) + (ra-transmit p.tay tip) + ?. =(our.hid p.p.tay) + +> + (ra-record q.p.tay her tip) + %| ?. pub +> + ?- -.p.tay + %twitter + (ra-tweet p.p.tay tip) + == == + :: + ++ ra-record :: add to story + |= [man=span gam=telegram] + ^+ +> + =+ pur=(~(get by stories) man) + ?~ pur + ~& [%no-story man] + +>.$ + pa-abet:(~(pa-learn pa man u.pur) gam) + :: + ++ ra-transmit :: send to neighbor + |= [cuz=station tip=thought] + ^+ +> + =. +> + %+ ra-emit ost + :* %pass + /repeat/(scot %ud p.outbox)/(scot %p p.cuz)/[q.cuz] + %g + %mess + [p.cuz /rodeo] + our.hid + [%rodeo-command !>(`command`[%review tip ~])] + == + +>(p.outbox +(p.outbox), q.outbox (~(put by q.outbox) p.outbox tip)) + :: + ++ ra-tweet :: send to /twit + |= [man=span tip=thought] + =* sta r.tip + ?> ?=(%lin -.r.sta) + =. q.outbox (~(put by q.outbox) p.outbox tip) + %^ ra-emil(p.outbox +(p.outbox)) + :* ost + %pass /twitter/stat/(scot %ud p.outbox)/[man] + %g %mess + [our.hid /twit] our.hid + [%twit-do !>(`twit-do`[man %post p.tip q.r.sta])] + == + :* ost + %pass /twitter/stat/(scot %ud p.outbox)/[man] + [%g %show [our.hid /twit] our.hid /post/(scot %uv p.tip)] + == + ~ + ++ pa :: story core + |_ $: man=span + story + == + ++ pa-abet + ^+ +> + +>(stories (~(put by stories) man `story`+<+)) + :: + ++ pa-admire :: accept from + |= her=ship + ^- ? + ::?- -.cordon.shape + :: %& (~(has in p.cordon.shape) her) + :: %| !(~(has in p.cordon.shape) her) + ::== + & + :: + ++ pa-watch :: watch presence + |= her=ship + ?. (pa-admire her) + (pa-sauce ost [[%mean ~ %rodeo-watch-unauthorized ~] ~]) + =. viewers (~(put in viewers) ost) + (pa-display ost ~ ~) + :: + ++ pa-master :: hear config + |= her=ship + ?. (pa-admire her) + (pa-sauce ost [[%mean ~ %rodeo-master-unauthorized ~] ~]) + =. owners (~(put in owners) ost) + :: ~& [%pa-master her man shape] + (pa-sauce ost [[%rush %rodeo-report %config shape] ~]) + :: + ++ pa-display :: update presence + |= vew=(set bone) + =+ ^= reg + :_ remotes + |- ^- atlas + ?~ locals ~ + [[p.n.locals q.q.n.locals] $(locals l.locals) $(locals r.locals)] + :: ~& [%pa-display man reg] + |- ^+ +>.^$ + ?~ vew +>.^$ + =. +>.^$ $(vew l.vew) + =. +>.^$ $(vew r.vew) + (pa-sauce n.vew [[%rush %rodeo-report %group reg] ~]) + :: + ++ pa-monitor :: update config + =+ owe=owners + |- ^+ +> + ?~ owe +> + =. +> $(owe l.owe) + =. +> $(owe r.owe) + :: ~& [%pa-monitor man shape] + (pa-sauce n.owe [[%rush %rodeo-report %config shape] ~]) + :: + ++ pa-friend :: subscribed update + |= [tay=partner sih=sign] + ^+ +> + ?+ sih ~|([%rodeo-bad-friend sih] !!) + [%g %nice ~] + +>.$ + :: + [%g %mean *] + ?~ +>.sih + (pa-acquire [tay ~]) + ~& [%pa-friend-mean +>.sih] + pa-monitor(sources.shape (~(del in sources.shape) tay)) + :: + [%g %rush %twit-feed *] + %- pa-lesson + %+ turn p.p.sih |= twit-stat + ^- telegram + :^ our.hid :: XX inaccurate + (shas %twit id) + `audience`[[tay [& ~ tay] %received] `~] :: current party? + ^- statement + :+ now + ~ :: XX hashtags + [%lin & txt] + [%g %rush %rodeo-report *] + :: ~& [%pa-friend-report +>+.sih] + ?> ?=(& -.tay) + =. +> %+ pa-scrub ost + :_ ~ + :- /friend/show/[man]/(scot %p p.p.tay)/[q.p.tay] + [%g %took [p.p.tay /rodeo] our.hid] + ?+ -.p.p.sih ~|([%rodeo-odd-friend sih] !!) + %config +>.$ + %group (pa-remind tay +.p.p.sih) + %grams (pa-lesson q.+.p.p.sih) + == + == + :: + ++ pa-scrub :: pass forward + |= [ost=bone bub=(list (pair path note))] + %_ +>.$ + moves + (welp (flop (turn bub |=(a=(pair path note) [ost %pass a]))) moves) + == + :: + ++ pa-sauce :: send backward + |= [ost=bone gub=(list gift)] + %_ +>.$ + moves + (welp (flop (turn gub |=(a=gift [ost %give a]))) moves) + == + :: + ++ pa-abjure :: unsubscribe move + |= tal=(list partner) + %+ pa-scrub 0 + %- zing + %+ turn tal + |= tay=partner + ?- -.tay + %| ~& tweet-abjure/p.p.tay + !! + :: :~ :- /friend/nuke/[man]/twitter/[p.p.tay] + :: [%g %nuke [our.hid /twit] our.hid] + :: == + :: + %& :: ~& [%pa-abjure [our.hid man] [p.p.tay q.p.tay]] + :~ :- /friend/nuke/[man]/(scot %p p.p.tay)/[q.p.tay] + [%g %nuke [p.p.tay /rodeo] our.hid] + == + == + :: + ++ pa-acquire :: subscribe to + |= tal=(list partner) + %+ pa-scrub 0 + %- zing + %+ turn tal + |= tay=partner + ^- (list (pair path note)) + =+ num=(fall (~(get by sequence) tay) 0) + ?- -.tay + %| ~& tweet-acquire/p.p.tay + :~ :- /friend/show/[man]/twitter/[p.p.tay] + [%g %show [our.hid /twit] our.hid /user/[p.p.tay]] + == + :: + %& :: ~& [%pa-acquire [our.hid man] [p.p.tay q.p.tay]] + :~ :- /friend/show/[man]/(scot %p p.p.tay)/[q.p.tay] + [%g %show [p.p.tay /rodeo] our.hid /af/[q.p.tay]/(scot %ud num)] + == + == + :: + ++ pa-reform :: reconfigure, ugly + |= cof=config + =+ ^= dif ^- (pair (list partner) (list partner)) + =+ old=`(list partner)`(~(tap in sources.shape) ~) + =+ new=`(list partner)`(~(tap in sources.cof) ~) + :- (skip new |=(a=partner (~(has in sources.shape) a))) + (skip old |=(a=partner (~(has in sources.cof) a))) + =. +>.$ (pa-acquire p.dif) + =. +>.$ (pa-abjure q.dif) + =. shape cof + pa-monitor + :: + ++ pa-cancel :: unsubscribe from + :: ~& [%pa-cancel ost] + %_ . + guests (~(del by guests) ost) + viewers (~(del in viewers) ost) + owners (~(del in owners) ost) + == + :: + ++ pa-notify :: local presence + |= [her=ship saz=status] + ^+ +> + =+ ^= nol + ?: =(%gone p.saz) + (~(del by locals) her) + (~(put by locals) her lat.hid saz) + ?: =(nol locals) +>.$ + (pa-display(locals nol) viewers) + :: + ++ pa-remind :: remote presence + |= [tay=partner loc=atlas rem=(map partner atlas)] + =+ ^= buk + =+ mer=(turn (~(tap by rem) ~) |=([* a=atlas] a)) + |- ^- atlas + ?~ mer loc + =. loc $(mer t.mer) + =+ dur=`(list (pair ship status))`(~(tap by i.mer) ~) + |- ^- atlas + ?~ dur loc + =. loc $(dur t.dur) + =+ fuy=(~(get by loc) p.i.dur) + ?~ fuy (~(put by loc) p.i.dur q.i.dur) + ?: =(`presence`p.q.i.dur `presence`p.u.fuy) + loc + ?- p.u.fuy + %gone (~(del by loc) p.i.dur q.i.dur) + %talk loc + %hear (~(put by loc) p.i.dur q.i.dur) + == + =+ gub=(~(get by remotes) tay) + :: ~& [%pa-remind tay gub buk] + ?. |(?=(~ gub) !=(buk u.gub)) + +>.$ + =. remotes (~(put by remotes) tay buk) + (pa-display viewers) + :: + ++ pa-start :: start stream + |= riv=river + ^+ +> + =- :: ~& [%pa-start riv lab] + =. +>.$ (pa-sauce ost [[%rush %rodeo-report %grams q.lab r.lab] ~]) + ?: p.lab + (pa-sauce ost [[%mean ~] ~]) + +>.$(guests (~(put by guests) ost riv)) + ^= lab + =+ [end=count gaz=grams dun=| zeg=*(list telegram)] + |- ^- (trel ,? ,@ud (list telegram)) + ?~ gaz [dun end zeg] + ?: ?- -.q.riv :: after the end + %ud (lte p.q.riv end) + %da (lte p.q.riv p.r.q.i.gaz) + == + $(end (dec end), gaz t.gaz) + ?: ?- -.p.riv :: before the start + %ud (lth end p.p.riv) + %da (lth p.r.q.i.gaz p.p.riv) + == + [dun end zeg] + $(end (dec end), gaz t.gaz, zeg [i.gaz zeg]) + :: + ++ pa-listen :: subscribe + |= [her=ship pax=path] + ^+ +> + ?. (pa-admire her) + (pa-sauce ost [[%mean ~ %rodeo-listen-unauthorized ~] ~]) + =+ ^= ruv ^- (unit river) + ?: ?=(~ pax) + `[[%ud count] [%da (dec (bex 128))]] + ?: ?=([@ ~] pax) + =+ say=(slay i.pax) + ?. ?=([~ %$ ?(%ud %da) @] say) ~ + `[(point +>.say) [%da (dec (bex 128))]] + ?. ?=([@ @ ~] pax) ~ + =+ [say=(slay i.pax) den=(slay i.t.pax)] + ?. ?=([~ %$ ?(%ud %da) @] say) ~ + ?. ?=([~ %$ ?(%ud %da) @] den) ~ + `[(point +>.say) (point +>.den)] + :: ~& [%pa-listen her pax ruv] + ?~ ruv + (pa-sauce ost [[%mean ~ %rodeo-malformed ~] ~]) + (pa-start u.ruv) + :: + ++ pa-refresh :: update stream + |= [num=@ud gam=telegram] + ~& [%pa-refresh man num gam guests] + =+ ^= moy + |- ^- (pair (list bone) (list move)) + ?~ guests [~ ~] + :: ~& [%pa-refresh num n.guests] + =+ lef=$(guests l.guests) + =+ rit=$(guests r.guests) + =+ old=[p=(welp p.lef p.rit) q=(welp q.lef q.rit)] + ?: ?- -.q.q.n.guests :: after the end + %ud (lte p.q.q.n.guests num) + %da (lte p.q.q.n.guests p.r.q.gam) + == + [[p.n.guests p.old] [[p.n.guests %give %mean ~] q.old]] + ?: ?- -.p.q.n.guests :: before the start + %ud (gth p.p.q.n.guests num) + %da (gth p.p.q.n.guests p.r.q.gam) + == + old + :- p.old + [[p.n.guests %give %rush %rodeo-report %grams num gam ~] q.old] + =. moves (welp q.moy moves) + |- ^+ +>.^$ + ?~ p.moy +>.^$ + $(p.moy t.p.moy, guests (~(del by guests) i.p.moy)) + :: + ++ pa-lesson :: learn multiple + |= gaz=(list telegram) + ^+ +> + ?~ gaz +> + $(gaz t.gaz, +> (pa-learn i.gaz)) + :: + ++ pa-learn :: learn message + |= gam=telegram + ^+ +> + ?. (pa-admire p.gam) + ~& %pa-admire-rejected + +>.$ + =. q.q.gam + =+ ole=(~(get by q.q.gam) [%& our.hid man]) + ?~ ole q.q.gam + (~(put by q.q.gam) [%& our.hid man] -.u.ole %received) + =+ old=(~(get by known) p.q.gam) + ?~ old + (pa-append gam) + (pa-revise u.old gam) + :: + ++ pa-append :: append new + |= gam=telegram + ^+ +> + %+ %= pa-refresh + grams [gam grams] + count +(count) + known (~(put by known) p.q.gam count) + == + count + gam + :: + ++ pa-revise :: revise existing + |= [num=@ud gam=telegram] + =+ way=(sub count num) + =. grams (welp (scag (dec way) grams) [gam (slag way grams)]) + (pa-refresh num gam) + -- + -- +++ peer + |= [ost=bone her=ship pax=path] + ^- [(list move) _+>] + :: ~& [%rodeo-peer ost her pax] + ra-abet:(~(ra-subscribe ra ost ~) her pax) +:: +++ poke-rodeo-command + |= [ost=bone her=ship cod=command] + ^- [(list move) _+>] + :: ~& [%rodeo-poke-command her cod] + =^ moz +>.$ ra-abet:(~(ra-apply ra ost ~) her cod) + [moz +>.$] +:: +++ pour + |= [ost=bone pax=path sih=*] + ^- [(list move) _+>] + :: ~& sih=sih + =+ sih=((hard sign) sih) + :: ~& [%rodeo-pour ost pax sih] + ?+ pax ~& [%rodeo-strange-path pax] !! + :: + [%twitter *] + =- ra-abet:(~(ra-twitter ra ost ~) met sih) + ^= met + ?+ t.pax ~| [%rodeo-twitter-strange-path pax] !! + :: [%mine @ @ ~] + :: [i.t.pax i.t.t.t.pax] + [%stat @ @ ~] + [(slav %ud i.t.t.pax) i.t.t.t.pax] + == + :: + [%friend *] + ?> ?=([@ @ @ @ ~] t.pax) + ?. =(%show i.t.pax) + ~& [%pour-friend-nuke-nuke pax] + [~ +>.$] + =+ man=i.t.t.pax + =+ ?: ?=(%twitter i.t.t.t.pax) + tay=[%| i.t.t.t.pax i.t.t.t.t.pax] + tay=[%& (slav %p i.t.t.t.pax) i.t.t.t.t.pax] + ra-abet:(~(ra-friend ra ost ~) man tay sih) + :: + [%repeat *] + ?> ?=([@ @ @ ~] t.pax) + =+ [num her man]=[(slav %ud i.t.pax) (slav %p i.t.t.pax) i.t.t.t.pax] + ra-abet:(~(ra-repeat ra ost ~) num [%& her man] sih) + == +:: +++ pull + |= ost=bone + ^- [(list move) _+>] + ~& [%rodeo-pull `*`ost] + ra-abet:~(ra-cancel ra ost ~) +:: +++ poke-bit + |= [ost=bone you=ship ~] + ^- [(list move) _+>] + :_ +>.$ + =+ paf=/(scot %p our.hid)/try/(scot %da lat.hid)/rodeo/backlog/jam + [ost %pass /jamfile %c %info our.hid (foal paf (jam +<+.+>.$))]~ +:: +++ prep + |= old=(unit (unit house-any)) + ^- [(list move) _+>] + ?> ?=(^ old) + =| moz=(list move) + |- + ?~ u.old + =+ paf=/(scot %p our.hid)/try/(scot %da lat.hid)/rodeo/backlog/jam + ?. ?=([%0 %0 %0] [.^(%cy paf)]) + $(u.old (some ((hard house-any) (cue ((hard ,@) .^(%cx paf)))))) + ~& %rodeo-prep-new + ra-abet:~(ra-init ra 0 moz) + ~& %rodeo-prep-old + :- moz + |- + ?- -.u.u.old + %1 %_(+>.^^$ +<+ u.u.old) + %0 $(u.u.old [%1 (house-0-to-house-1 +.u.u.old)]) + == +:: +++ house-0-to-house-1 + |= vat=house-0 + ^- house-1 + =- :* stories=- + general=~ + outbox=[0 ~] + folks=~ + == + ^- (map span story) + =- %- ~(run by -) + |= grams=(list telegram) + ^- story + :* count=(lent grams) + grams=grams + locals=~ + remotes=~ + sequence=~ + shape=[.(cordon [%black ~])]:*config + ^= known %- mo ^- (list ,[serial @]) =< + + (roll grams |=([telegram a=@ b=(list ,[serial @])] [+(a) [a p.q] b])) + guests=~ + viewers=~ + owners=~ + == + ^- (map span (list telegram)) + %- mo %+ turn (~(tap by vat)) + |= [a=path b=(list zong) c=(map ship ,?)] + =+ ^= par + ?: =(/ a) 'hub' + =+ (turn a |=(d=span leaf/(trip d))) + (crip ~(ram re %rose ["_" ~ ~] -)) + :- par + =+ aud=`audience`[[[%& our.hid par] *envelope %received] `~] + =+ ^= spe + |= r=_r:*zong ^- speech + ?- -.r + %say [%lin %& p.r] + %do [%lin %| p.r] + %exp [%fat [%tank q.r ~] [%exp p.r]] + == + %+ turn b + |= d=zong ^- telegram + [q.d (sham eny.hid d) aud p.d ~ (spe r.d)] +-- diff --git a/main/app/shell/core.hook b/main/app/shell/core.hook index cd3b63ba1..4db900f35 100644 --- a/main/app/shell/core.hook +++ b/main/app/shell/core.hook @@ -10,11 +10,14 @@ :: |% :: ++ axle :: - $: pid=@u :: next process id + $: %1 :: version + tiv=? :: typing? + wit=[p=@u q=(map ,@u coma)] :: waiting commands + pid=@u :: next process id pax=_`path`/=try= :: working directory act=(unit span) :: active child - pip=(map span span) :: pipe out->in - pop=(map span span) :: pipe in->out + pip=(jar span span) :: pipe out->in + pop=(jar span span) :: pipe in->out pot=(map span ,[cord prom cord]) :: prompts var=(map term vase) :: variables == :: @@ -33,8 +36,9 @@ ++ gilt :: $% [%term-line p=term-line] :: [%txt p=cord] :: + [%type p=?] :: == :: -++ glas $|(%out [%in p=cord]) :: +++ glas ?(%out [%in p=cord] [%active p=cord]) :: ++ hapt ,[p=ship q=path] :: ++ move ,[p=bone q=(mold note gift)] :: ++ note :: @@ -47,6 +51,8 @@ [%sire p=term q=span] :: [%mess p=hapt q=ship r=cage] :: [%meta p=vase] :: + [%nuke p=hapt q=ship] :: + [%took p=hapt q=ship] :: == == == :: ++ mand ,[p=term q=(list twig)] :: name and arguments ++ coma :: @@ -55,16 +61,18 @@ [%path p=path] :: chdir [%del p=path] :: rm file [%ins p=path q=(unit twig)] :: add file - [%mut p=path q=twig] :: change file + [%mut p=path q=(unit twig)] :: change file [%hoon p=twig] :: eval expression [%comt ~] :: comment [%var p=term q=twig] :: set variable [%rvar p=term] :: unset variable + [%help p=term] :: info about command == :: ++ sign :: $% $: %g :: $% [%gone p=hapt] :: [%init p=@p] :: + [%dumb ~] :: [%mean p=ares] :: [%nice ~] :: [%rush p=mark q=*] :: @@ -108,9 +116,10 @@ ;~ pose (stag %run ;~(plug (star ;~(sfix (task(tol %0) bar) ace)) (task col))) (stag %end ;~(pfix col sem ;~(pose (stag %& dem) (stag %| sym)))) - (stag %del ;~(pfix hep ace loca)) - (stag %mut ;~(pfix col ace ;~(plug loca expg))) - (stag %ins ;~(pfix lus ace ;~(plug loca (opts expg)))) + (stag %del ;~(pfix hep (plus ace) loca)) + (stag %mut ;~(pfix col (plus ace) ;~(plug loca (opts expg)))) + (stag %ins ;~(pfix lus (plus ace) ;~(plug loca (opts expg)))) + (stag %help ;~(pfix wut ace ;~(pfix col sym))) (stag %path (full ;~(sfix loca(pax paf) (star ace)))) (stag %var ;~(plug ;~(pfix tis sym) expg)) (stag %rvar ;~(pfix ;~(plug tis tis) sym)) @@ -149,27 +158,22 @@ :: ++ blab |= mof=(list move) - +>.$(mow (welp mof mow)) + +>.$(mow (welp (flop mof) mow)) :: ++ chew-file - |= [paf=path msg=tape tor=(unit toro)] + |= [paf=path mor=$|(cord toro)] + %- blab ^- (list move) - %+ welp - (print palm/[" " ~ ~ ~]^~[leaf/msg (dank:ut paf)]) - %+ turn (drop tor) - |=(a=toro [ost %pass writ/paf %c %info our.hid a]) + ?@ mor + (print palm/[" " ~ ~ ~]^~[leaf/(trip mor) (dank:ut paf)]) + [ost %pass writ/paf %c %info our.hid mor]~ :: ++ cubs :: tasks with open /in %- sort :_ |=([a=span b=span] (lth (slav %ud a) (slav %ud b))) ^- (list span) - %+ murn (~(tap by sup.hid)) - |= [@ @ a=path] - ?. ?& ?=([%in cord ~] a) - (~(has by cub.hid) i.t.a) - !(~(has by pop) i.t.a) - == - ~ - (some i.t.a) + %+ murn (~(tap by cub.hid)) + |= [a=span @] + ?.(=([~ ~] (~(get by pop) a)) ~ (some a)) :: ++ eat |= [you=ship com=coma] @@ -180,6 +184,7 @@ %hoon (eat-hoon +.com) %ins (eat-ins +.com) %mut (eat-mut +.com) + %help (eat-help +.com) %path (eat-path +.com) %run (eat-run you +.com) %rvar (eat-rvar +.com) @@ -189,11 +194,9 @@ ++ eat-del |= paf=path ^+ +> - =. &3.paf '=' - %- blab %+ chew-file paf - ?^ (file paf) ["! none" ~] - ["deleted" `(fray paf)] + ?~ (file paf) '! none' + (fray paf) :: ++ eat-end :: XX clean up state |= poc=(each ,@u cord) @@ -202,17 +205,18 @@ %& =+ cil=(scot %ud p.poc) =+ cin=(trip (~(got by cub.hid) cil)) - %+ blab - [ost %pass /child/[cil]/fork %g %cide cil] + %- blab + %+ welp + (kill cil) (print leaf/"- :{cin}({(trip cil)})") :: %| =+ ^- moz=(list move) - %+ murn (~(tap by cub.hid)) + %- zing + %+ turn (~(tap by cub.hid)) |= [a=span b=term] ?. =(b p.poc) ~ - %- some - [ost %pass /child/[a]/fork %g %cide a] + (kill a) %- blab %+ welp moz (print leaf/"-{<(lent moz)>} :{(trip p.poc)}") == @@ -220,26 +224,43 @@ ++ eat-hoon |= gen=twig ^+ +> - (blab (print (sell (exec gen)))) + %+ with gen |= rez=vase + (blab (print (sell rez))) :: ++ eat-ins |= [paf=path gen=(unit twig)] ^+ +> - =. &3.paf '=' - %- blab - %+ chew-file paf - ?^ (file paf) ["! exists" ~] - :- "written" - `(foal paf q:(exec (fall gen [%bczp atom/%t]))) + ?^ (file paf) (chew-file paf '! exists') + %+ with (fall gen [%bczp atom/%t]) + |= new=vase + (chew-file paf (foal paf q.new)) :: ++ eat-mut - |= [paf=path gen=twig] + |= [paf=path gen=(unit twig)] ^+ +> - =. &3.paf '=' - %- blab - %+ chew-file paf - ?^ (file paf) ["! none" ~] - ["changed" `(foal paf q:(exec gen))] + =+ fel=(file paf) + ?~ fel + (chew-file paf '! none') + ?^ gen + %+ with u.gen |= new=vase + (chew-file paf (foal paf q.new)) + (blab (stray (crip ": {(spud paf)} {<(,@t u.fel)>}"))) + :: + ++ eat-help + |= app=term + ^+ +> + %- blab %- print + ^- tank + =+ rup=/(scot %p our.hid)/main/(scot %da lat.hid) + =+ paf=`path`(welp rup /app/[app]/core/hook) + =+ src=(file paf) + ?. ?=([~ @t] src) + leaf/"app {} does not exist" + =+ cot=;~(pfix col col (plus ace) (star prn)) + =+ led=(cot 1^1 (trip u.src)) + ?^ q.led + leaf/":: {(wonk led)}" + palm/[" " ``~]^~[leaf/"no leading comment in" >paf<] :: ++ eat-path |= paf=path @@ -251,28 +272,30 @@ |= [you=ship mud=(list mand) mad=mand] ^+ +> :: =. +>.$ (blab (print leaf/"+ :{(trip p.mad)}")) - ?: .= [0 0 0] + ?. =- (~(has by r:(arch -)) %core) .^(%cy /(scot %p our.hid)/main/(scot %da lat.hid)/app/[p.mad]) - (blab (print leaf/"{} does not exist")) - =| inp=(unit span) - =< +>.$ - %+ reel - `(list mand)`(welp mud mad ~) - =+ a=[app=*mand .] - |. - => a + (blab (print leaf/"app {} does not exist")) + =+ liz=`(list mand)`(welp mud mad ~) + %+ with [%clsg (turn liz |=(mand [%clsg q]))] + |= arg=vase + =| inp=(unit span) + |- + ?~ liz ..eat-run =+ cil=(scot %ud pid) - %_ +> + %_ $ + liz t.liz + arg (slot 3 arg) pid +(pid) - pip ?~ inp pip (~(put by pip) cil u.inp) - pop ?~ inp pop (~(put by pop) u.inp cil) + pip ?~ inp pip (~(add ja pip) cil u.inp) + pop ?~ inp pop (~(add ja pop) u.inp cil) inp `cil mow + =< mow :: XX side effects? + %- blab =+ yon=[our.hid cil imp.hid] - =+ mez=[(cat 3 p.app '-args') (exec [%clsg q.app])] - %- welp :_ mow + =+ mez=[(cat 3 p.i.liz '-args') (slot 2 arg)] ^- (list move) - :~ [ost %pass /child/[cil]/fork %g %sire p.app cil] + :~ [ost %pass /child/[cil]/fork %g %sire p.i.liz cil] [ost %pass /child/[cil]/out %g %show yon you /out] [ost %pass /child/[cil]/main %g %meta !>([%mess yon you mez])] == @@ -288,29 +311,47 @@ ++ eat-var |= [vor=term gen=twig] ^+ +> + %+ with gen |= new=vase =+ old=(~(get by var) vor) - =+ new=(exec gen) =+ mod=?~(old "new var" ?:(=(new u.old) "same var" "changed")) =. var (~(put by var) vor new) (blab (print leaf/"{mod} {}")) :: - ++ exec - |= gen=twig + ++ with + |= [gen=twig coz=$+(vase _..with)] + %- coz %- slap :_ gen - =+ tym=!>(lat.hid) - %+ slop [[%face %tym p.tym] q.tym] + %+ slop + %+ slop [[%face %our p] q]:!>(our.hid) + %+ slop [[%face %tym p] q]:!>(lat.hid) + [[%face %eny p] q]:!>(eny.hid) %+ roll (~(tap by var)) =< .(q pit) |= [[n=term v=vase] q=vase] (slop [[%face n p.v] q.v] q) :: + ++ kill + |= cil=span + ^- (list move) + :~ [ost %pass /child/[cil]/fork %g %cide cil] + ::[ost %pass /child/[cil]/out %g %nuke [our.hid cil imp.hid] our.hid] + == + :: ++ next-act :: rotate active task - =+ opt=[i=`(unit span)`~ t=(turn cubs |=(a=span `(unit span)`[~ a]))] - |- - ?~ t.opt ~ - ?: =(act i.opt) - i.t.opt - $(opt t.opt) + =+ ^- nex=(unit span) + =+ opt=[i=`(unit span)`~ t=(turn cubs |=(a=span `(unit span)`[~ a]))] + |- + ?~ t.opt ~ + ?: =(act i.opt) + i.t.opt + $(opt t.opt) + ?. tiv +(act nex) + %- blab(act nex) + %+ weld + ?~ nex ~ + (spam /active/[u.nex] %rush %type %&) + ?~ act ~ + (spam /active/[u.act] %rush %type %|) :: ++ peer |= [you=ship gal=glas] @@ -319,12 +360,16 @@ %_ +>.$ mow :_(mow [ost %give %rush %term-line prompt ~ ~]) == + ?: ?=(%active -.gal) + (blab [ost %give %rush %type %|] ~) ?. (~(has by cub.hid) p.gal) +>.$ ?: (~(has by pop) p.gal) +>.$ - =. act `p.gal + =: act `p.gal + pop (~(put by pop) p.gal ~) :: .=(~ standard-in) + == (blab ping) :: - ++ ping (print-vase !>(*(list tank))) + ++ ping (print-vase !>(*tang)) ++ poke-kyev |= [you=ship key=kyev] ^+ +> @@ -339,13 +384,16 @@ [ost %give %nice ~] [ost %give %logo ~] ~ - (eat-end(act next-act) %& (slav %ud u.act)) - %x =. act next-act + (eat-end:next-act %& (slav %ud u.act)) + %g =+ =- tak=rose/[" " "[" "]"]^(turn (~(tap by cub.hid)) -) + =+ c=(sa cubs) + |= [a=span b=term] + :- %leaf + =+ (trip (rap 3 b '(' a ')' ~)) + ?.((~(has in c) a) - ?.(=([~ a] act) ['+' -] ['*' -])) + (blab [ost %give %nice ~] (print tak)) + %x =. +>.$ next-act (blab [ost %give %nice ~] ping) - %l =+ =- tak=rose/[" " "[" "]"]^(turn cubs -) - |= a=span - leaf/(trip (rap 3 (~(got by cub.hid) a) '(' a ')' ~)) - (blab [ost give/nice/~] (print tak)) == :: ++ poke-txt :: handle command @@ -357,21 +405,32 @@ (spam /in/[u.act] %rush %txt txt) =+ pas=((full ~(parse from pax lat.hid)) [1 1] (trip txt)) ?~ q.pas - (blab (print leaf/"}>")) + =- (blab (weld (stray txt) (print leaf/-))) + "}>" =+ com=(wonk pas) => .(+>.$ (eat you com)) =. +>.$ (blab (stash txt)) +>.$(mow :_(mow [ost %give %nice ~])) :: - ++ print |=(a=tank (print-vase !>(`(list tank)`[a ~]))) + ++ poke-type + |= [you=ship tiv=?] + ^+ +> + =. tiv tiv + ?^ act + %+ blab + [ost %give %nice ~] + (spam /active/[u.act] %rush %type tiv) + (blab [ost %give %nice ~] ~) + :: + ++ print |=(a=tank (print-vase !>(`tang`[a ~]))) ++ print-vase - |= tan=vase :: [p=p:!>(*(list tank)) q=*] + |= tan=vase :: [p=p:!>(*tang) q=*] ^- (list move) %^ spam /out %meta :(slop !>(%rush) !>(%term-line) !>(prompt) !>(~) tan) :: ++ prompt - ^- [cord prom cord] + ^- [p=cord q=prom r=cord] ?^ act =+ por=(~(get by pot) u.act) ?^ por u.por @@ -388,28 +447,37 @@ ?- fom %fork ?> ?=(%gone +<.sih) - %_ +>.$ - mow :_(mow [ost %give %nice ~]) - act ?:(=(act [~ cil]) ~ act) - == + =. mow :_(mow [ost %give %nice ~]) + ?. =(act [~ cil]) +>.$ + =. act ~ + (blab ping) :: %main ?> ?=(?(%nice %mean) +<.sih) - (blab [ost %give +.sih] ping) + %+ blab + [ost %give +.sih] + ?. ?=(%mean +<.sih) + ping + (welp ping (kill cil)) :: %out ?. ?=(?(%rust %rush) +<.sih) +>.$ + => .(+<.sih %rush) ?: ?=(%prompt p.sih) - ?: (~(has by pip) cil) +>.$ + ?^ (~(get ja pip) cil) +>.$ =. pot (~(put by pot) cil (,[cord prom cord] q.sih)) (blab ping) %- blab ?: (~(has by pip) cil) - (spam /in/(~(got by pip) cil) %meta (slot 3 typ sih)) + =+ inp=(~(get ja pip) cil) + |- + ?~ inp ~ + %+ weld $(inp t.inp) + (spam /in/[i.inp] %meta (slot 3 typ sih)) %- print-vase ?+ p.sih !>([(sell (slot 15 [typ sih]))]~) - %tang (slot 15 [typ sih]) + %tang (slam !>(flop) p:!>(*tang) q.sih) %txt ?^ q.sih !! :: move to vase space? !>([leaf/(trip q.sih)]~) @@ -427,6 +495,12 @@ |= a=cord %^ spam /out %meta !>([%rush %term-line `term-line`[prompt [a]~ ~]]) + :: + ++ stray + |= a=cord + %^ spam /out %meta + =+ pro=prompt + !>([%rush %term-line `term-line`[pro(r a) ~ ~]]) -- -- !: @@ -438,10 +512,11 @@ |= [ost=bone you=ship pax=path] ^- [(list move) _+>] ?~ pax `+>.$ - ?. ?=(?(%in %out) i.pax) `+>.$ + ?. ?=(?(%in %out %active) i.pax) `+>.$ =+ ^= gal ?: ?=(%out i.pax) %out - [%in ?<(?=(~ t.pax) i.t.pax)] + ?: ?=(%in i.pax) [%in ?<(?=(~ t.pax) i.t.pax)] + [%active ?<(?=(~ t.pax) i.t.pax)] =+ abet:(peer:(ve hid ost vat) you gal) [-< +>.$(vat ->)] :: @@ -457,11 +532,19 @@ =+ abet:(poke-txt:(ve hid ost vat) you txt) [-< +>.$(vat ->)] :: +++ poke-type :: handle command + |= [ost=bone you=ship tiv=?] + ^- [(list move) _+>] + =+ abet:(poke-type:(ve hid ost vat) you tiv) + [-< +>.$(vat ->)] +:: ++ purr |= [ost=bone pax=path typ=type sih=sign] ^- [(list move) _+>] ?: ?=(%init +<.sih) :: vomit [[ost %give +.sih]~ +>.$] + ?: ?=(%dumb +<.sih) :: sleep + [~ +>.$] ?: ?=(%sage +<.sih) :: vomit [[ost %give +.sih]~ +>.$] ?: ?=(%verb +<.sih) :: vomit @@ -472,6 +555,8 @@ [[ost %give +.sih]~ +>.$] ?~ pax ~& %no-path !! ?> ?=([%child span ?(%fork %out %main) ~] pax) - =+ abet:(purr:(ve hid ost vat) i.t.pax i.t.t.pax typ sih) - [-< +>.$(vat ->)] + =^ moz vat abet:(purr:(ve hid ost vat) i.t.pax i.t.t.pax typ sih) + :_ +>.$ + ?. ?=(%rush +<.sih) moz + [[ost %pass pax %g %took [our.hid i.t.pax imp.hid] our.hid] moz] -- diff --git a/main/app/solid/core.hook b/main/app/solid/core.hook index 380b13621..479ffa897 100644 --- a/main/app/solid/core.hook +++ b/main/app/solid/core.hook @@ -1,5 +1,8 @@ !: +:::: + :: |_ [hid=hide ~] +++ peer ,_`. ++ poke-solid-args |= [ost=bone you=ship ~] :_ +>.$ @@ -32,6 +35,7 @@ =+ nex=+:.*([-.gat [sam +>.gat]] -.gat) $(vay t.vay, all nex) :~ [ost %give %sage [%urbit %pill ~] [ken all]] + [ost %pass / %g %cide %$] [ost %give %nice ~] == :: ~& %solid-jamming @@ -46,8 +50,4 @@ :: :- %tang :_ ~ :: leaf/"done" :: == -++ peer - |= - * - `+> -- diff --git a/main/app/sync/core.hook b/main/app/sync/core.hook index 8616e61c0..fd5e2e5a2 100644 --- a/main/app/sync/core.hook +++ b/main/app/sync/core.hook @@ -1,18 +1,16 @@ +:: Desk sync +:: +:::: /hook/core/sync/app + :: +/+ sh-utils !: +:::: + :: |_ [hid=hide ~] -++ poke-sync-args - |= [ost=bone you=ship syd=@tas her=@p sud=@tas ~] - :_ +>.$ - :* [ost %pass /sync %c %font our.hid syd her sud] - [ost %give %nice ~] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - leaf/"synced" - == -++ peer - |= - * - `+> +++ peer ,_`. +++ poke--args + %+ gate-bang + |= [syd=@tas her=@p sud=@tas ~] + [%c %font our.hid syd her sud] + (print . "synced") -- diff --git a/main/app/talk/core.hook b/main/app/talk/core.hook new file mode 100644 index 000000000..327fd3d1b --- /dev/null +++ b/main/app/talk/core.hook @@ -0,0 +1,672 @@ +:: +:::: /hook/core/talk/app + :: +/? 314 +/- *rodeo +/+ rodeo +:: +:::: + :: +!: +=> |% :: structures + ++ town :: all client state + $: live=(unit span) :: present story + console=terminal :: controlling terminal + stories=(map span story) :: all stories + == :: + ++ grip :: subscription state + |* nub=$+(* *) :: wrapped state + $| $? %warm :: activated + %cool :: activating + %dead :: inoperative + %cold :: inactive + == [%live p=nub] :: operating + ++ terminal :: terminal state + $: present=presence :: presence state + == :: + ++ story :: station content + $: poe=posture :: security posture + desc=@t :: description + link=(grip bridge) :: connection + count=@ud :: message counter + mike=(pair ,? (set partner)) :: passive/voice + quiet=? :: !verbose + past=(list partner) :: past received auds + == :: + ++ bridge :: remote state + $: xm=config :: configuration + am=register :: presence + == :: + ++ work :: general action + $% [%ask (unit work)] :: help (about) + [%exp twig] :: compute + [%mor (list work)] :: sequence + [%rub work-adjust] :: configure story + [%say speech] :: publish in voice + [%who (unit partner)] :: show presence + [%wry work-construct] :: configure system + == :: + ++ work-adjust :: adjust story + $% [%dark p=(set ship)] :: toggle blacklist + [%lite p=(set ship)] :: toggle whitelist + [%love p=(set partner)] :: toggle partners + [%whom p=? q=(set partner)] :: active/voice + [%wind p=@dr] :: rewind by date + == :: + ++ work-construct :: configure system + $% [%make p=span] :: create story + [%raze p=span] :: destroy story + [%tune p=span] :: switch to story + == :: + ++ iron :: terminal output + $% [%prompt p=cord q=prom r=cord] :: prompt + [%tang p=(list tank)] :: prettyprintable + [%txt p=cord] :: simple text + == + ++ gift + $% [%mean ares] + [%nice ~] + [%rush iron] + == + ++ hapt ,[p=ship q=path] + ++ move ,[p=bone q=(mold note gift)] + ++ note + $? $: %g + $% [%mess p=hapt q=ship r=cage] + [%nuke p=hapt q=ship] + [%show p=hapt q=ship r=path] + [%took p=hapt q=ship] + == == + $: %t + $% [%wait p=@da] + == == == + ++ gall-sign :: subscription result + $% [%mean p=ares] + [%nice ~] + $: %rush + $= p + $% [%txt p=cord] :: input text + [%type p=?] :: typing notify + [%rodeo-report p=report] + == == + == + ++ sign + $? [%g gall-sign] :: from %gall + $: %t :: from %time + $% [%wake ~] :: timer wakeup + == == == + -- +!: +:::: + :: +=> |% :: tools + ++ hy :: messenger + |_ [moz=(list move) hide] + ++ hy-abet moz :: resolve core + ++ hy-transmit :: send command + |= cod=command + %_ +> + moz :_ moz + [0 %pass /command %g %mess [our /rodeo] our [%rodeo-command !>(cod)]] + == + :: + ++ hy-render :: return to console + |= rod=iron + %_ +> + moz + =+ oss=(~(tap in (~(get ju pus) /out))) + |- ^- (list move) + ?~ oss moz + [`move`[i.oss %give %rush rod] $(oss t.oss)] + == + :: + ++ hy-subscribe :: send %show + |= [way=path hoc=path] + %_(+> moz :_(moz [0 %pass way %g %show [our /rodeo] our hoc])) + :: + ++ hy-unsubscribe :: send %nuke + |= way=path + %_(+> moz :_(moz [0 %pass way %g %nuke [our /rodeo] our])) + :: + ++ hy-display :: print to console + |=(tay=(list tank) (hy-render %tang tay)) + :: + ++ hy-print :: simple print + |=(tep=tape (hy-display [%leaf tep]~)) + :: + ++ hy-accept :: set prompt + |=(asq=cord (hy-render [%prompt asq %text ''])) + -- + :: + ++ parse :: command parser + |= our=ship + =+ vag=(vang | [&1:% &2:% '0' |3:%]) + |% + ++ come :: keyword command + |* [a=@tas b=_rule] + ;~((glue (plus ace)) (cold a (jest a)) b) + :: + ++ gone :: parse unit + |* a=_rule + ;~(pose (stag ~ a) (easy ~)) + :: + ++ posh :: parse each + |* [a=_rule b=_rule] + ;~(pose (stag %& a) (stag %| b)) + :: + ++ ship ;~(pfix sig fed:ag) :: ship + ++ shiz :: ship set + %+ cook + |=(a=(list ^ship) (~(gas in *(set ^ship)) a)) + (most ;~(plug com (star ace)) ship) + :: + ++ stat :: partner + %+ posh + ;~ plug + ship + ;~(pose ;~(pfix fas urs:ab) (easy (main our))) + == + ;~ pose + ;~(pfix pat (stag %twitter urs:ab)) + == + :: + ++ staz :: partner set + %+ cook + |=(a=(list partner) (~(gas in *(set partner)) a)) + (most ;~(plug com (star ace)) stat) + :: + ++ step :: rollback interval + %+ sear + |= a=coin + ?. ?=([%$ %dr @] a) ~ + (some `@dr`+>.a) + nuck:so + :: + ++ text (boss 256 (star prn)) :: utf8 text + ++ tome + %+ stag %lin + ;~ pose + (stag %| ;~(pfix pat text)) + (stag %& text) + == + :: + ++ work :: all commands + %+ knee *^work |. ~+ + ;~ pose + ;~ pfix zap + %+ stag %wry + ;~ pose + (come %make urs:ab) + (come %raze urs:ab) + (come %tune urs:ab) + == + == + :: + ;~ pfix cen + %+ stag %rub + ;~ pose + (come %dark shiz) + (come %lite shiz) + (come %whom (stag %& staz)) + (come %wind step) + == + == + :: + ;~(pfix wut (stag %ask (gone work))) + ;~(pfix tis (stag %who (gone stat))) + ;~(pfix cen (stag %exp wide:vag)) + :: + %+ cook + |= [a=(set partner) b=(unit ,[%lin p=? q=@t])] + ^- ^work + =. b ?~(b ~ ?:(=(0 q.u.b) ~ b)) + =+ c=[%rub %whom %& a] + ?~(b c [%mor c [%say u.b] ~]) + ;~ plug + staz + (gone ;~(pfix (star ace) tome)) + == + :: + (stag %say tome) + == + -- + :: + ++ swatch :: print partner set + |= [our=ship tou=(set partner)] + =+ tuo=(~(tap in tou)) + |- ^- tape + ?~ tuo ~ + =+ ted=$(tuo t.tuo) + =+ ^= ind ^- tape + ?- -.i.tuo + %& =+ sip=(scow %p p.p.i.tuo) + ?: =((main p.p.i.tuo) q.p.i.tuo) + sip + :(welp sip "/" (trip q.p.i.tuo)) + %| ['@' (trip p.p.i.tuo)] + == + ?~ ted ind + (welp ind `tape`[',' ' ' ted]) + :: + ++ stog :: toggle set + |* [tog=(set) tag=(set)] + =+ got=(~(tap in tog)) + |- ^+ tag + ?~ got tag + %= $ + got t.got + tag ?: (~(has in tag) i.got) + (~(del in tag) i.got) + (~(put in tag) i.got) + == + -- +!: +:::: + :: +|_ [hid=hide town] +++ hype |=(moz=(list move) ~(. hy moz hid)) +++ sy + |_ $: $: man=span :: u.live + moz=(list move) :: pending moves + == :: + story :: current story + == + :: + ++ sy-abet :: resolve core + ^- [(list move) _+>] + [(flop moz) +>(stories (~(put by stories) man +<+))] + :: + ++ sy-subscribe :: story subscribe + ?> =(%cold link) + =+ cub=?.(=(0 count) (scot %ud count) (scot %da (sub lat.hid ~d1))) + =. + (sy-message "subscribe <{(trip cub)}>") + %_ + + link %cool + moz =< hy-abet + %+ hy-subscribe:(hype moz) + /fm/[man] + :~ %afx + man + ?: =(0 count) + :: ~& [%story-init man `@da`(sub lat.hid ~d1)] + (scot %da (sub lat.hid ~d1)) + (scot %ud count) + == + == + :: + ++ sy-unsubscribe :: story unsubscribe + ?: =(& ?=(?(%cold %dead) link)) . + %_ . + link %cold + moz hy-abet:(hy-unsubscribe:(hype moz) /fm/[man]) + == + :: + ++ sy-serial :: make serial no + ^- [serial _.] + [(shaf %serial eny.hid) .(eny.hid (shax eny.hid))] + :: + ++ sy-audience :: speech audience + %- ~(gas by *audience) + %+ turn `(list partner)`[[%& our.hid man] (~(tap in q.mike))] + |=(a=partner [a *envelope %pending]) + :: + ++ sy-message :: print message + |= msg=tape + %_(+> moz hy-abet:(hy-print:(hype moz) ":{(trip man)}: {msg}")) + :: + ++ sy-present + |= [msg=tape tay=(list tank)] + =. tay (welp tay `(list tank)`[%leaf "::"]~) + =. tay :_(tay [%leaf ":{(trip man)}: {msg}:: "]) + %_(+>.$ moz hy-abet:(hy-display:(hype moz) tay)) + :: + ++ sy-prompt + |= tou=(set partner) + ^- tape + ;: welp + (scow %p our.hid) + ?:(=(man (main our.hid)) "" `tape`:(welp "/" (trip man))) + ?~ tou "& " + `tape`:(welp "(" (swatch our.hid tou) ")& ") + == + :: + ++ sy-voice :: set targets + |= [pas=? tou=(set partner)] + ?: &(!p.mike pas) +> + %_ +>.$ + mike [pas tou] + moz hy-abet:(hy-accept:(hype moz) (crip (sy-prompt tou))) + == + :: + ++ sy-rollback + |= lon=@dr + !! + :: + ++ sy-work :: run user command + |= job=work + ^+ +> + ?- -.job + %ask ~|(%sy-work-ask-stub !!) + %exp ~|(%sy-work-exp-stub !!) + %mor + |- ^+ +>.^$ + ?~ +.job +>.^$ + $(+.job t.+.job, +>.^$ ^$(job i.+.job)) + :: + %rub + ?: ?=(%whom +<.job) + (sy-voice +>.job) + ?: ?=(%wind +<.job) + ~& %rub-wind-stub + !! + =+ suz=sy-live + ?~ suz (sy-message "not connected") + ?- +<.job + %lite sz-abet:(sz-cordon:u.suz [%white +>.job]) + %dark sz-abet:(sz-cordon:u.suz [%black +>.job]) + %love sz-abet:(sz-sources:u.suz +>.job) + == + :: + %say + =^ sir +>.$ sy-serial + %= +>.$ + moz + =< hy-abet + %- ~(hy-transmit hy moz hid) + [%publish [[sir sy-audience [lat.hid ~ +.job]] ~]] + == + :: + %wry ~|(%sy-work-wry !!) + %who ~|(%sy-work-who-stub !!) + == + :: + ++ sy-gram :: apply telegram + |= [num=@ud gam=telegram] + ^+ +> + %= +> + moz + =< hy-abet + %- hy-render:(hype moz) + =* sta r.q.gam + ?+ -.r.sta ~|([%strange-gram -.r.sta] !!) + :: + %lin + :- %txt + %+ rap 3 + :~ (scot %ud num) ')' + (scot %p p.gam) ?:(p.r.sta ': ' ' ') + q.r.sta + == + == + == + :: + ++ sy-grams :: apply telegrams + |= [num=@ud gaz=(list telegram)] + ^+ +> + :: ~& [%sy-grams [num count] (lent gaz)] + ?: (gth num count) + (sy-message(count 0) "message gap: {} at {}") + =. . + ?: =(num count) . + .(num count, gaz (slag (sub count num) gaz)) + =+ las=(add count (lent gaz)) + |- ^+ +>.^$ + ?~ gaz +>.^$(count las) + $(gaz t.gaz, count +(count), +>.^$ (sy-gram num i.gaz)) + :: + ++ sy-error :: report error + |= ars=ares + %= +> + moz + =< hy-abet + %- hy-print:(hype moz) + ?~(ars "connection error" "disaster: (trip p.u.ars)") + == + :: + ++ sy-sign :: subscription sign + |= res=gall-sign + ^+ +> + :: ~& [%sy-sign res] + ?- -.res + %mean + =. link %dead + (sy-error p.res) + :: + %nice :: misordered, ignore + :: ?. ?=(%cool link) + :: ~& [%sy-sign-nice-bad link] + :: +>.$ + ::+>(link %warm) + +>.$ + :: + %rush :: direct update + ?: ?=(?(%cold %dead) link) + ~& [%sy-sign-rust-bad `@tas`link] + +>.$ + ?> ?=(%rodeo-report +<.res) + ?: ?=(%cool link) + :: XX workaround for inverted nice + $(link %warm) + =+ suz=sy-live + ?~ suz (sy-message "not connected") + sz-abet:(sz-apply:u.suz +>.res) + == + :: + ++ sy-live :: as connected + ^- (unit ,_sz) + ?: ?=([%live *] link) + `~(. sz p.link) + ?.(?=(%warm link) ~ `~(. sz *bridge)) + :: + ++ sz :: story, connected + |_ big=bridge + ++ sz-abet %_(+> link [%live big]) :: resolve to ++sy + ++ sz-amok + |= why=?(%cold %cool %dead %warm) + %_(+>+> link why) + :: + ++ sz-cordon :: design cordon + |= con=control + ^+ +> + =. cordon.xm.big + ?: =(p.cordon.xm.big p.con) + [p.con (stog q.con q.cordon.xm.big)] + con + +>.$(moz hy-abet:(hy-transmit:(hype moz) [%design man ~ xm.big])) + :: + ++ sz-sources :: design sources + |= src=(set partner) + ^+ +> + =. sources.xm.big (stog src sources.xm.big) + +>.$(moz hy-abet:(hy-transmit:(hype moz) [%design man ~ xm.big])) + :: + ++ sz-config :: apply config + |= cof=config + =. +>+> (sy-present "config" >cof< ~) + :: ~& [%sz-config cof] + %_(+> xm.big cof, +> (sy-voice %& sources.cof)) + :: + ++ sz-group :: apply register + |= rex=register + =. +>+> (sy-present "register" >rex< ~) + %_(+> am.big rex) + :: + ++ sz-apply :: apply report + |= rad=report + ^+ +> + ?- -.rad + %house ~|(%sz-apply-house !!) + %grams +>(+> (sy-grams +.rad)) + %config (sz-config +.rad) + %group (sz-group +.rad) + == + -- + -- +++ ny :: top configuration + |_ moz=(list move) + ++ ny-abet :: resolve core + ^- [(list move) _+>] + [(flop moz) +>] + :: + ++ ny-amid :: integrate story + |= nov=_sy + =^ zom +>+> sy-abet:nov + +>.$(moz (flop zom)) + :: + ++ ny-tune :: connect to story + |= man=span + ^+ +> + ?: =(`man live) + +>(moz hy-abet:(hy-print:(hype moz) "already tuned to {(trip man)}")) + ?. (~(has by stories) man) + +>(moz hy-abet:(hy-print:(hype moz) "no story {(trip man)}")) + =. +> ny-stop + =. live `man + :: ~& [%tune-start man] + (ny-amid sy-subscribe:(need (novel moz))) + :: + ++ ny-stop :: disconnect story + ^+ . + ?~ live . + (ny-amid(live ~) sy-unsubscribe:(need (novel moz))) + :: + ++ ny-tell :: hear from server + |= sap=(map span (pair posture cord)) + ^+ +> + =. +> ?.(&(?=(^ live) !(~(has by sap) u.live)) +> ny-stop) + =. stories + =+ pas=(~(tap by sap)) + =+ ros=(skim (~(tap by stories)) |=([a=span *] (~(has by sap) a))) + %- ~(gas by *(map span story)) + |- ^- (list (pair span story)) + ?~ pas + %+ turn ros + |= [a=span b=story] + =+ hig=(~(get by sap) a) + [a ?~(hig b b(poe p.u.hig, desc q.u.hig))] + =+ sor=$(pas t.pas) + ?: (~(has by stories) i.pas) + sor + =+ soy=*story + [[p.i.pas soy(poe p.q.i.pas, desc q.q.i.pas)] sor] + ?^ live +>.$ + ?~ stories +>.$ + ?: (~(has by `(map span story)`stories) (main our.hid)) + (ny-tune (main our.hid)) + (ny-tune p.n.stories) + :: + ++ ny-work :: user command + |= jaw=work-construct + ^+ +> + ?- -.jaw + %raze +>(moz hy-abet:(hy-transmit:(hype moz) [%design p.jaw ~])) + %tune (ny-tune p.jaw) + %make + %= +> + moz + hy-abet:(hy-transmit:(hype moz) [%design p.jaw [~ ~ %default %black ~]]) + == + == + -- +:: +++ novel :: live story + |= moz=(list move) + ^- (unit ,_sy) + ?~ live ~ + `~(. sy [u.live moz] (~(got by stories) u.live)) +:: +++ peer + |= [ost=bone you=ship pax=path] + ^- [(list move) _+>] + [~ +>.$] +:: +++ pour-shell + |= txt=cord + ^- [(list move) _+>] + =+ jub=(rush txt work:(parse our.hid)) + ?~ jub + [hy-abet:(hy-print:(hype ~) "invalid input") +>.$] + ?: ?=(%wry -.u.jub) + ny-abet:(ny-work:ny +.u.jub) + =+ nuv=(novel ~) + ?~ nuv [hy-abet:(hy-print:(hype ~) "not tuned to any story") +>.$] + sy-abet:(sy-work:u.nuv u.jub) +:: +++ pour + |= [ost=bone pax=path sih=*] + ^- [(list move) _+>] + ~| sign=sih + => .(sih ((hard sign) sih)) + :: ~& talk-pour/sih + ?~ pax ~& talk-pour-strange-path/pax !! + ?+ i.pax ~& talk-pour-strange-path/pax + ~& sign/sih + !! + %command + ?+ +<.sih !! + %nice [~ +>.$] + %mean ~|([%pour-mean-cmd-in +>.sih] !!) + == + %cmd-in + ?+ +<.sih !! + %nice [~ +>.$] + %mean ~|([%pour-mean-cmd-in +>.sih] !!) + %rush + ?> ?=(%txt -.p.sih) + =^ moz +>.$ (pour-shell p.p.sih) + :_ +>.$ + :_(moz [ost %pass pax %g %took [our.hid +.imp.hid] our.hid]) + == + :: + %cmd-ac + ?+ +<.sih !! + %nice [~ +>.$] + %mean ~|([%pour-mean-cmd-ac +>.sih] !!) + %rush + :_ +>.$ + [ost %pass pax %g %took [our.hid +.imp.hid] our.hid]~ + == + :: + %server + ?+ +<.sih !! + %nice [~ +>.$] + %mean ~|(%talk-server-crash !!) + %rush + ?> ?=([%rodeo-report %house *] p.sih) + =^ moz +>.$ ny-abet:(ny-tell:ny +.p.p.sih) + :_ +>.$ + :_(moz [ost %pass pax %g %took [our.hid /rodeo] our.hid]) + == + :: + %time + :_ +>.$ + :: ~& [%talk-pour-time lat.hid `@da`(add ~s10 lat.hid)] + :~ [0 %pass /time %t %wait (add ~s10 lat.hid)] + == + :: + %fm + ?> ?=([@ *] t.pax) + ?. =(& &(?=(^ live) =(u.live i.t.pax))) + ~& [%talk-wrong-story live i.t.pax] + [~ +>.$] + ?> ?=(%g -.sih) + =^ moz +>.$ sy-abet:(sy-sign:(need (novel ~)) +.sih) + :_ +>.$ + :_(moz `move`[ost %pass pax %g %took [our.hid /rodeo] our.hid]) + == +:: +++ poke-talk-args + |= [ost=bone you=ship arg=~] + ^- [(list move) _+>] + :_ +> + :~ [0 %pass /cmd-in %g %show [our.hid +.imp.hid] you /in/[-.imp.hid]] + [0 %pass /time %t %wait (add ~s10 lat.hid)] + [0 %pass /cmd-ac %g %show [our.hid +.imp.hid] you /active/[-.imp.hid]] + ^- move + :* 0 %pass /server + %g %show + [our.hid /rodeo] our.hid + / + == + == +-- diff --git a/main/app/terminal/core.hook b/main/app/terminal/core.hook index 49657b9ed..0bdab4b21 100644 --- a/main/app/terminal/core.hook +++ b/main/app/terminal/core.hook @@ -18,7 +18,6 @@ == :: ++ gift :: $% [%rush gilt] :: - [%rust gilt] :: [%init p=@p] :: [%logo @] :: [%mean p=ares] :: @@ -33,6 +32,7 @@ ++ mess :: $% [%txt p=(hypo cord)] :: [%kyev p=(hypo kyev)] :: + [%type p=(hypo ,?)] :: == :: ++ move ,[p=bone q=(mold note gift)] :: ++ note :: @@ -41,6 +41,7 @@ [%show p=hapt q=ship r=path] :: [%sire p=term q=span] :: [%mess p=hapt q=ship r=mess] :: + [%took p=hapt q=ship] :: == == == :: ++ sign :: $% $: %g :: @@ -49,7 +50,6 @@ [%logo @] :: [%mean p=ares] :: [%nice ~] :: - [%rust p=%term-line q=term-line] :: [%rush p=%term-line q=term-line] :: [%sage p=path q=*] :: [%verb ~] :: @@ -62,11 +62,6 @@ :: |% ++ aut %shell -++ encode - |= [a=term b=path] ^- span - (rap 3 a (turn b |=(c=span (cat 3 '_' c)))) -:: -++ decode |=(a=span `[p=term q=path]`(rash a (most cab sym))) ++ inject |= [a=[i=mane t=(list mane)] b=marl] |= man=manx @@ -78,8 +73,9 @@ :: ++ start-shell |= [our=ship imp=path ost=bone you=ship pax=path] + %- flop ^- (list move) - =+ auc=(encode aut pax) + =+ auc=(pack aut pax) :- [ost %pass [%fork pax] %g %sire [aut auc]] [ost %pass [%resp pax] %g %show [our [auc imp]] you /out]~ -- @@ -90,7 +86,7 @@ ++ se |= [hid=hide ost=bone you=ship hiz=(map path term-line) pax=path] =+ tel=(fall (~(get by hiz) pax) *term-line) - =+ auc=(encode aut pax) + =+ auc=(pack aut pax) =^ mow tel ?: (~(has by cub.hid) auc) [~ tel] @@ -102,18 +98,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 @@ -127,7 +123,7 @@ == :: ++ poke - |= jof=$%([%line p=span] [%res p=span] [%cmd p=char]) + |= jof=$%([%line p=cord] [%res p=span] [%cmd p=char] [%type p=?]) ^+ +> ?- -.jof %res :: restart shell @@ -141,54 +137,61 @@ r.tel :_(r.tel leaf/"+ {(trip auc)}") mow ;: welp - (spam tel) - [ost %give %nice ~]~ (start-shell our.hid imp.hid ost you pax) + [ost %give %nice ~]~ + (spam tel) mow == == :: %line :: command entered + =+ new=stem/[lat.hid leaf/(trip p.p.tel) leaf/(trip p.jof)] =. r.tel :_ r.tel - stem/[leaf/(trip p.p.tel) leaf/(trip p.jof)] - (send %txt -:!>(*cord) p.jof) + stem/[lat.hid leaf/(trip p.p.tel) leaf/(trip p.jof)] + =. +>.$ (send %txt -:!>(*cord) p.jof) + +>.$(mow (welp (spam p.tel q.tel new ~) mow)) :: %cmd :: key command ?+ p.jof (send %kyev -:!>(*kyev) [[%ctrl ~ ~] p.jof]) %r $(jof [%res 'shell']) == + :: + %type + (send %type -:!>(*?) p.jof) == :: ++ poke-ctrl .(mow :_(mow [ost %give %rush %term-line [p q ~]:tel])) :: ++ pour - |= [dis=?(%fork %resp %txt %kyev) sih=sign] + |= [dis=?(%fork %resp %txt %kyev %type) sih=sign] ^+ +> ?- dis %fork ?>(?=(%gone +<.sih) +>.$) :: XX maybe mean? %resp ?+ +<.sih !! %nice +>.$ - ?(%rust %rush) + %rush + :: ~? !=(p.tel p.q.sih) prompt/[p.q.sih ?=(~ q.q.sih)] =. p.q.sih ?^(q.q.sih p.tel p.q.sih) :: XX prompt hack %_ +>.$ - mow (welp (spam q.sih) mow) + mow :- [ost %pass [%resp pax] %g %took [our.hid [auc imp.hid]] you] + (welp (spam q.sih) mow) tel [p.q.sih (weld q.q.sih q.tel) (weld r.q.sih r.tel)] == == :: - ?(%txt %kyev) + ?(%txt %kyev %type) ?+ +<.sih !! %nice +>.$(mow :_(mow [ost %give +.sih])) %mean =+ ^= new =- (turn - |=(a=tank rose/[~ "! " ~]^[a]~)) - ^- (list tank) + %- flop ^- tang ?~ p.sih ~ - (welp q.u.p.sih leaf/(trip p.u.p.sih) ~) + [leaf/(trip p.u.p.sih) q.u.p.sih] %_ +>.$ r.tel (welp new r.tel) mow @@ -196,7 +199,7 @@ [[ost %give +.sih] (spam [p.tel q.tel new])] == == - == + == :: ++ send |= mez=mess @@ -206,7 +209,7 @@ ^- (list move) %+ murn (~(tap by cub.hid)) |= [p=span q=term] - ?. =(pax q:(decode p)) ~ + ?. =(p auc) ~ %- some ^- move :^ ost %pass [-.mez pax] [%g %mess [our.hid p imp.hid] you mez] @@ -256,7 +259,18 @@ ?: ?=(?(%sage %init %logo %verb %veer %vega) &2.sih) :: vomit [[ost %give +.sih]~ +>.$] ?~ pax !! - ?. ?=(?(%fork %resp %txt %kyev) i.pax) !! + ?. ?=(?(%fork %resp %txt %kyev %type) i.pax) !! =+ abet:(pour:(se hid ost our.hid hiz t.pax) i.pax sih) [-< +>.$(hiz ->)] +:: +++ prep + |= old=(unit (unit axle)) + ^- [(list move) _+>] + :- ~ + %_ +>.$ + hiz + ?. ?=([~ ~ *] old) hiz + %- ~(run by hiz.u.u.old) + |=(term-line [p q ~]) + == -- diff --git a/main/app/terminal/hymn.hook b/main/app/terminal/hymn.hook index 0ee7ead6d..f17dc1985 100644 --- a/main/app/terminal/hymn.hook +++ b/main/app/terminal/hymn.hook @@ -12,10 +12,11 @@ ;html ;head ;title: Hi - ;script(src "/gen/main/lib/urb.js"); - ;script(src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"); - ;script(src "//cdnjs.cloudflare.com/ajax/libs/mousetrap/1.4.6/mousetrap.js"); - ;script(src "//use.typekit.net/fkv0sjk.js"); + ;script: window.urb = window.urb || \{}; + ;script@"/gen/main/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"; ;script:'try{Typekit.load();}catch(e){}' :: ;script: urb.appl = "terminal"; urb.term = \{pax: "/"} ;+ styl diff --git a/main/app/test/core.hook b/main/app/test/core.hook index fc6470891..3469b292c 100644 --- a/main/app/test/core.hook +++ b/main/app/test/core.hook @@ -38,8 +38,8 @@ == == == :: ++ test :: test template $_ ^? |% :: - ++ poke |+([bone ship] [_(list move) +>]) :: start test - ++ pour |+([bone path *] [_(list move) +>]) :: system response + ++ poke |+([bone ship] [*(list move) +>]) :: start test + ++ pour |+([bone path *] [*(list move) +>]) :: system response -- :: -- :: !: diff --git a/main/app/test/front/hymn.hook b/main/app/test/front/hymn.hook index 8a20718f0..5e58460b8 100644 --- a/main/app/test/front/hymn.hook +++ b/main/app/test/front/hymn.hook @@ -3,13 +3,14 @@ :::: /hook/hymn/front/twit/app :: /? 314 :: need urbit 314 -/= urbit /:/===/lib/urb:/hymn/ :: urbit library (js) +/= urbit /:/===lib/urb:/hymn/ :: urbit library (js) /= style /:/%%%/style:/hymn/ :: stylesheet (css) /= application /:/%%%/app:/hymn/ :: application (js) !: :::: content :: ^- manx +=- ~! - - ;html ;head ;title: Tests diff --git a/main/app/ticket/core.hook b/main/app/ticket/core.hook index 6bb623da2..db2b76e55 100644 --- a/main/app/ticket/core.hook +++ b/main/app/ticket/core.hook @@ -1,8 +1,12 @@ +/+ sh-utils !: +:::: + :: |_ [hid=hide ~] +++ peer ,_`. ++ poke-ticket-args - |= [ost=bone you=ship her=@p num=?(~ [p=@ud ~])] - :_ +>.$ + %+ args-into-gate . + |= [her=@p num=?(~ [p=@ud ~])] =+ n=?~(num 1 p.num) =+ ^= sep ^- @ =+ mir=(clan her) @@ -11,23 +15,10 @@ %duke (bex 16) %earl (bex 32) == - :- [ost %give %nice ~] - |- + :- %tang + |- ^- tang ?: ?=(0 n) ~ - =+ ^= tic - (,@p .^(%a (scot %p our.hid) %tick (scot %da lat.hid) (scot %p her) ~)) - %+ welp - (spam ost "{}: {}") + =+ tic=/(scot %p our.hid)/tick/(scot %da lat.hid)/(scot %p her) + :- leaf/"{}: {<(,@p .^(%a tic))>}" $(her (add sep her), n (dec n)) -++ spam - |= [ost=bone msg=tape] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - leaf/msg -++ peer - |= - * - `+> -- diff --git a/main/app/tree/core.hook b/main/app/tree/core.hook new file mode 100644 index 000000000..dbd0964da --- /dev/null +++ b/main/app/tree/core.hook @@ -0,0 +1,26 @@ +:: Tree view recursive directory contents +:: +:::: /hook/core/tree/app + :: +/+ sh-utils +!: +:::: + :: +|_ [hid=hide ~] +++ peer ,_`. +++ poke--args + %+ args-into-gate . + |= [pax=path fla=$|(~ [%full ~])] + =+ len=(lent pax) + =+ rend=?^(fla dank:ut |=(a=path (dank:ut (slag len a)))) + :- %tang + |- ^- tang + =+ ark=;;(arch .^(cy/pax)) + =- ?~ q.ark - + [(rend pax) -] + %- zing + %+ turn + (sort (~(tap by r.ark)) aor) + |= [a=@t ~] + ^$(pax (welp pax /[a])) +-- diff --git a/main/app/tweet/core.hook b/main/app/tweet/core.hook new file mode 100644 index 000000000..70ec4de0b --- /dev/null +++ b/main/app/tweet/core.hook @@ -0,0 +1,13 @@ +/+ sh-utils +!: +|_ [hide ~] +++ peer ,_`. +++ poke--args + %+ add-subs [[our /twit] our /post/(scot %uv eny)] + %^ gate-mess . + |=([a=span b=cord ~] [/twit %twit-do !>([a %post eny b])]) + ,_`. +++ posh-twit-stat + (args-into-gate . |=([@ @ a=@da @] tang/~[leaf/"Tweet recieved {}"])) +++ pour |*([ost=@ * sih=[@ ^]] :_(+>.$ [ost %give +.sih]~)) +-- diff --git a/main/app/twit/core.hook b/main/app/twit/core.hook new file mode 100644 index 000000000..72a7e4603 --- /dev/null +++ b/main/app/twit/core.hook @@ -0,0 +1,217 @@ +:: Twitter daemon +:: +:::: /hook/core/twit/app + :: +/- *twitter +/+ twitter +:: +:::: ~fyr + :: +|% +++ twit-path :: valid peer path + $% :: [%home ~] :: home timeline + [%user p=@t ~] :: user's tweets + [%post p=@ta ~] :: status of status + == +:: +++ axle :: app state + $: %0 + kes=(map span keys:twit-do) :: auth + out=(map ,@uvI (each ,[span cord] stat)) :: sent tweets + ran=(map path ,[p=@ud q=@da]) :: polls active + fed=(jar path stat) :: feed cache + == +:: +++ gift :: app response + $% [%nice ~] :: acknowledgement + [%mean p=ares] :: error/termination + [%rush p=gilt] :: subscription data + == +:: +++ gilt + $% [%twit-feed p=(list stat)] :: posts in feed + [%twit-stat p=stat] :: tweet accepted + == +:: +++ move ,[bone (mold note gift)] +++ note :: arvo request + $% [%e %them ~ u=hiss] :: HTTP request + [%t %wait p=@da] :: timeout + == +:: +++ sign :: arvo response + $% [%e %thou p=httr] :: HTTP result + [%t %wake ~] :: timeout ping + == +:: +++ stat twit-stat :: recieved tweet +-- +!: +:::: + :: +|_ [hide axle] +++ any-auth ?~(kes (auth) (auth p.n.kes)) :: use any keys +++ auth :: build API door + |= a=span + ~| [%no-auth a] + ~(. twit (~(got by kes) a) lat `@`eny) +:: +++ cull :: remove seen tweets + |= [pax=path rep=(list stat)] ^+ rep + =+ pev=(sa (turn (~(get ja fed) pax) |=(stat id))) + (skip rep |=(stat (~(has in pev) id))) +:: +++ dely :: next polling timeout + |= pax=path + ^- [(unit time) _ran] + =+ cur=(~(get by ran) pax) + =+ tym=(add lat (mul ~s8 (bex ?~(cur 0 p.u.cur)))) + :: ~& dely/`@dr`(sub tym lat) + ?: &(?=(^ cur) (gte tym q.u.cur) (gth q.u.cur lat)) + [~ ran] + [`tym (~(put by ran) pax ?~(cur 0 (min 5 +(p.u.cur))) tym)] +:: +++ wait :: ensure poll by path + |= [ost=bone pax=path mof=(list move)] + =^ tym ran (dely pax) + :_ +>.$ + ?~ tym + :: ~& no-wait/ran + mof + :: ~& will-wait/u.tym + :- [ost %pass pax %t %wait u.tym] + mof +:: +++ poke-twit-do :: recieve request + |= [ost=bone @ act=twit-do] + ^+ [*(list move) +>] + ?- -.q.act + %auth + :: ~& twit-auth/p.act + =. kes (~(put by kes) p.act p.q.act) + :_(+>.$ [ost %give %nice ~]~) :: XX verify key + %post + =: out (~(put by out) p.q.act %& p.act q.q.act) + ran (~(del by ran) /peer/home) + == + %^ wait ost /peer/home + :- [ost %give %nice ~] + =+ mez=(stat-upda:(auth p.act) [%status q.q.act]~ ~) + [ost %pass /post/(scot %uv p.q.act) %e %them ~ mez]~ + == +:: +++ pour :: recieve response + |= [ost=bone pax=path sig=sign] + ^+ [*(list move) +>] + ?- &2.sig + %wake + ~& wake/[pax sig] + :_ +>.$ + ?. (~(has by ran) pax) :: ignore if retracted + ~ + ?+ pax ~|([%wake-missed pax] !!) + [%peer *] + ?~ (~(get ju pus) t.pax) + ~ + ~& peer-again/[t.pax ran] + (pear | ost our t.pax) + == + %thou + ?+ p.p.sig ~|([%unknown-code p.p.sig] !!) + 429 :: Rate-limit + =. ran (~(put by ran) pax 6 lat) + =+ lim=%.(%x-rate-limit-reset ;~(biff ~(get by (mo q.p.sig)) poja ni:jo)) + =+ tym=?~(lim (add ~m7.s30 lat) (add ~1970.1.1 (mul ~s1 u.lim))) + ~& retrying-in/`@dr`(sub tym lat) + :_(+>.$ [ost %pass pax %t %wait tym]~) + 200 :: OK + =+ jon=(need (poja q:(need r.p.sig))) + :: ~& twit-resp/%.(jon ?+(-.jon !! %o stat:twir, %a (ar:jo stat:twir))) + ?+ pax ~|([%http-missed pax] !!) + [%post @ ~] :: post acknowledged + =+ ^= rep + ~| [%bad-post jon] + (need %.(jon stat:twir)) + =. out (~(put by out) (slav %uv i.t.pax) %| rep) + :_ +>.$ + (weld (spam pax %rush %twit-stat rep) (spam pax %mean ~)) + [%peer *] :: feed data + =+ ^= rep + ~| [%bad-feed jon] + (need %.(jon (ar:jo stat:twir))) + :: ~& got-feed/[(scag 5 (turn rep |=(stat id))) fed] + =+ ren=(cull t.pax rep) :: new messages + ?~ ren + (wait ost pax ~) :: pump polling + ~& spam-feed/ren + =: ran (~(del by ran) pax) :: clear poll delay + fed (~(put by fed) t.pax rep) :: saw last message + == + (wait ost pax (spam t.pax %rush twit-feed/(flop ren))) + == + ?(400 401 403 404) :: Err + =+ ^- git=gift + =+ err=%.(q:(need r.p.sig) ;~(biff poja mean:twir)) + :^ %mean ~ %bad-http + [leaf/"HTTP Code {}" (turn (need err) mean:twip)] + ?+ pax [[ost %give git]~ +>.$] + [%post @ ~] + [(spam pax git) +>.$] + == == + == +:: +++ peer :: accept subscription + |= [ost=bone ship path] + ^+ [*(list move) +>] + :_(+> [[ost %give %nice ~] (pear & +<)]) +:: +++ pear :: poll, possibly returning current data + |= [ver=? ost=bone @ pax=path] + ^- (list move) + ?. ?=(twit-path pax) + ~|([%missed-path pax] !!) + => .(pax `twit-path`pax) + ?: ?=(%post -.pax) + ?. ver ~ + =+ sta=(~(get by out) (slav %uv p.pax)) + ?. ?=([~ %| ^] sta) :: post not received + ~ + :- [ost %give %rush %twit-stat p.u.sta] + [ost %give %mean ~]~ :: subscription end + =+ ole=(~(get ja fed) pax) + :_ ?. ver ~ + ?~ ole ~ + [ost %give %rush %twit-feed (flop ole)]~ + =- [ost %pass [%peer pax] %e %them ~ `hiss`-] + =+ opt=?~(ole ~ ['since_id' (lutt:twit id.i.ole)]~) + =+ aut=any-auth + ?- -.pax + %user (stat-user:aut [(to-sd p.pax)]~ opt) +:: %home (stat-home:auth ~ opt) + == +:: +++ to-sd :: parse user name/numb + |= a=span ^- sd:twit + ~| [%not-user a] + %+ rash a + ;~(pose (stag %user-id dem) (stag %screen-name user:twir)) +:: +++ pull :: release subscription + |= ost=bone + ?. (~(has by sup) ost) `+>.$ :: XX should not occur + =+ [his pax]=(~(got by sup) ost) + ?: (lth 1 ~(wyt in (~(get ju pus) pax))) + `+>.$ + =: ran (~(del by ran) [%peer pax]) + fed (~(del by fed) pax) + == + `+>.$ +:: +++ spam :: send by path + |= [a=path b=gift] ^- (list move) + %+ murn (~(tap by sup)) + |= [ost=bone @ pax=path] + ^- (unit move) + ?. =(pax a) ~ + [~ [ost %give b]] +-- diff --git a/main/app/twit/hoontap-keys.hoon b/main/app/twit/hoontap-keys.hoon new file mode 100644 index 000000000..009589f22 --- /dev/null +++ b/main/app/twit/hoontap-keys.hoon @@ -0,0 +1,4 @@ +:- :- 'AP3G1t8ki6rPzeeAqdWCTw03F' + 'VV784LPwZSaAxtF16RWWTnST4F85BHN8VqQKNyv7MprCkA0xZD' +:- '2821727326-RZGXSeTn7hCFQfJqR0ViivM3YYpu2O1M71gelBl' +'jW9VygFPOTsEK0WmrJDHYSoEnofOPdCE1oQRzueemVTl8' \ No newline at end of file diff --git a/main/app/twitter-auth/core.hook b/main/app/twitter-auth/core.hook new file mode 100644 index 000000000..e1ed5b426 --- /dev/null +++ b/main/app/twitter-auth/core.hook @@ -0,0 +1,34 @@ +:: Input twitter keys +/+ sh-utils +!: +|_ [hide vat=wain] +++ prompts + ^- wain + :~ 'User: ' + 'App token: ' + 'App secret: ' + 'User token: ' + 'User secret: ' + '' + == +++ peek ,_prompt/[(snag (lent vat) prompts) %text ''] +++ posh-txt + |= [@ * p=cord] + =. vat [p vat] + ?. =(5 (lent vat)) `+>.$ + %.(+< (add-exit ,_`+>.$)) +:: +++ part + =. vat (flop vat) :: put into order of entry + ?. ?=([@ @ @ @ @ ~] vat) + ~|([%keys-missing vat] !!) + =+ =< aut=[acc %auth [ctok csec] atok asec] + `[acc=span ctok=cord csec=cord atok=cord asec=cord ~]`vat + |= ost=bone + :_ ~ + :^ ost %pass /out + [%g %mess serv our %twit-do !>(aut)] +:: +++ poke--args (listen-in . (add-nice ,_`.)) +++ serv [our /twit] +-- diff --git a/main/app/twitter-auth/hoontap-keys.txt b/main/app/twitter-auth/hoontap-keys.txt new file mode 100644 index 000000000..7b938bffb --- /dev/null +++ b/main/app/twitter-auth/hoontap-keys.txt @@ -0,0 +1,5 @@ +hoontap +AP3G1t8ki6rPzeeAqdWCTw03F +VV784LPwZSaAxtF16RWWTnST4F85BHN8VqQKNyv7MprCkA0xZD +2821727326-RZGXSeTn7hCFQfJqR0ViivM3YYpu2O1M71gelBl +jW9VygFPOTsEK0WmrJDHYSoEnofOPdCE1oQRzueemVTl8 diff --git a/main/app/twitter-feed/core.hook b/main/app/twitter-feed/core.hook new file mode 100644 index 000000000..85d72c16f --- /dev/null +++ b/main/app/twitter-feed/core.hook @@ -0,0 +1,22 @@ +:: Display twitter feed +:: +:::: /hook/core/twitter-feed/app + :: +/+ sh-utils +!: +:: +:::: ~fyr + :: +|_ [hide ~] +++ stat ,[id=@u who=@ta now=@da txt=@t] +++ rens + |=(stat rose/[": " `~]^~[leaf/"{} @{(trip who)}" leaf/(trip txt)]) +++ peer ,_`. +++ poke--args + |= [ost=bone his=ship who=span ~] + %.(+< (add-subs [[our /twit] our /user/[who]] ,_`+>.$)) +:: +++ posh-twit-feed + (args-into-gate . |=(a=(list stat) tang/(turn a rens))) +:: ++ pour |*([ost=@ * sih=[@ ^]] :_(+>.$ [ost %give +.sih]~)) +-- diff --git a/main/app/type/core.hook b/main/app/type/core.hook new file mode 100644 index 000000000..ec57aebec --- /dev/null +++ b/main/app/type/core.hook @@ -0,0 +1,19 @@ +:: Type, render tpyes of arguments +:: +:::: /hook/core/type/app + :: +/+ sh-utils +!: +:::: + :: +|_ [hide ~] +++ peer ,_`. +++ pock--args + %+ args-into-gate . + |= a=vase + :- %tang + |- ^- tang + =+ nex=(slew 3 a) + ?~ nex ~ + [(skol p:(slot 2 a)) $(a u.nex)] +-- diff --git a/main/app/unsync/core.hook b/main/app/unsync/core.hook index ad506023f..fe05cc46b 100644 --- a/main/app/unsync/core.hook +++ b/main/app/unsync/core.hook @@ -1,18 +1,16 @@ +:: Desk unsync +:: +:::: /hook/core/unsync/app + :: +/+ sh-utils !: +:::: + :: |_ [hid=hide ~] -++ poke-unsync-args - |= [ost=bone you=ship syd=@tas her=@p sud=@tas ~] - :_ +>.$ - :* [ost %pass /sync %c %plug our.hid syd her sud] - [ost %give %nice ~] - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - leaf/"unsynced" - == -++ peer - |= - * - `+> +++ peer ,_`. +++ poke--args + %+ gate-bang + |= [syd=@tas her=@p sud=@tas ~] + [%c %plug our.hid syd her sud] + (print . "unsynced") -- diff --git a/main/app/verb/core.hook b/main/app/verb/core.hook index 4a3151dd6..f1ac71eb8 100644 --- a/main/app/verb/core.hook +++ b/main/app/verb/core.hook @@ -1,13 +1,12 @@ +:: Verb: toggle verbose mode +:: +:::: /hook/core/verb/app + :: +/+ sh-utils !: +:::: + :: |_ [hid=hide ~] -++ poke-verb-args - |= [ost=bone you=ship ~] - :_ +>.$ - :~ [ost %give %verb ~] - [ost %give %nice ~] - == -++ peer - |= - * - `+> +++ peer ,_`. +++ poke--args (add-resp [%give %verb ~] (args-done ,_`.)) -- diff --git a/main/app/wipe/core.hook b/main/app/wipe/core.hook new file mode 100644 index 000000000..91e4f7e76 --- /dev/null +++ b/main/app/wipe/core.hook @@ -0,0 +1,13 @@ +:: Wipe path, retcon app existence +:: +:::: + :: +/+ sh-utils +!: +:::: + :: +|_ [hide ~] +++ poke--args + %+ gate-bang |=([a=path ~] [%g %wipe our a]) + (args-done ,_`.) +-- diff --git a/main/app/ye/core.hook b/main/app/ye/core.hook index 53dc345c6..0c9ca8612 100644 --- a/main/app/ye/core.hook +++ b/main/app/ye/core.hook @@ -2,6 +2,10 @@ :: :::: /hook/gate/ye/bin :: +/+ sh-utils +:: +:::: + :: |% ++ sign :: $% $: %a :: @@ -12,36 +16,27 @@ [%text p=tape] :: == :: -- -:: !: +:::: + :: |_ [hid=hide ~] -++ poke-ye-args - |= [ost=bone you=ship tex=tape ~] - :_ +>.$ - =+ mez=(crip "{}: {tex}") - :~ [ost %pass /ye %a %want [our.hid (sein our.hid)] /q/ye mez] - [ost %give %nice ~] - == +++ peer ,_`. +++ poke--args + %+ gate-bang + |= [tex=tape ~] + =+ mez=(crip "{}: {tex}") + [%a %want [our.hid (sein our.hid)] /q/ye mez] + (add-nice ,_`.) :: ++ poke-txt - |= [ost=bone him=ship cor=@t] - :_ +>.$ - ~[[ost %give %nice ~] [ost %pass /de %d %flog %text "> {(trip cor)}"]] + %+ gate-bang |=(cor=@t [%d %flog `flog`[%text "> {(trip cor)}"]]) + (add-nice ,_`.) :: ++ pour |= [ost=bone pax=path sih=sign] - ?> ?=([%ye ~] pax) - :_ +>.$ - %+ turn (~(tap by sup.hid)) - |= [ost=bone *] - :^ ost %give %rush - :- %tang :_ ~ - ?. ?=(%good q.sih) - leaf/"ye failed" - leaf/"ye received" + ?> ?=([%bang ~] pax) + %. +< + =+ ack=?+(q.sih "failed" %good "recieved") + (add-exit (print +>.$ "ye {ack}")) :: -++ peer - |= - * - `+> -- diff --git a/main/lib/rodeo/core.hook b/main/lib/rodeo/core.hook new file mode 100644 index 000000000..bd8983332 --- /dev/null +++ b/main/lib/rodeo/core.hook @@ -0,0 +1,19 @@ +:: +:::: /hook/core/rodeo/lib + :: + :: This file is in the public domain. + :: +/? 314 +/- *rodeo +:: +:::: + :: +|% +++ main :: main story + |= our=ship ^- cord + =+ can=(clan our) + ?+ can %porch + %czar %court + %king %floor + == +-- diff --git a/main/lib/sh-utils/core.hook b/main/lib/sh-utils/core.hook new file mode 100644 index 000000000..2b9ce5a45 --- /dev/null +++ b/main/lib/sh-utils/core.hook @@ -0,0 +1,109 @@ +:: App construction utilities +:: +:::: /hook/core/sh-utils/lib + :: +|% +++ append + |* a=* + |* b=* + [b a] +:: +++ hapt (pair ship path) +-- +!: +:::: + :: +|% +++ args-done |*(ref=_,[(list) ^] (add-exit (add-nice ref))) :: accept args +:: +++ add-exit :: add "kill self" kiss + |* ref=_,[(list) ^] + %+ add-resp [%pass / %g %cide %$] + ref +:: +++ add-nice :: return "succcess" response + |* ref=_,[(list) ^] + %+ add-resp [%give %nice ~] + ref +:: +++ add-subs :: add gall subscription + |* [hat=[hapt ship path] ref=_,[(list) ^]] + =+ `[hapt ship path]`hat :: typecheck + %+ add-resp [%pass /show %g %show hat] + ref +:: +++ args-into-gate :: poke--args from gate: output and exit + |* [con=[* [hide *] *] gat=_,[@ *]] + %- args-done + %^ gate-outs con + |=(a=_+<.gat [%rush (gat a)]) + ,_`con +:: +++ args-into-resp :: compute gifts with gate and exit + |* [con=[* [hide *] *] gat=_,(pole ,[@ *])] + %- args-done + |* [ost=bone * arg=_+<.gat] + :_ con + %. (gat arg) + |* a=(pole ,[@ *]) + ?~ a ~ + a(- [ost %give -.a], + $(a +.a)) +:: +++ add-output :: send gift to /out + |* [con=[* [hide *] *] ote=[@ *] ref=_,[(list) ^]] + => .(+<- `[* [hid=hide *] *]`con) + =+ sus=(~(tap in `(set bone)`(~(get ju pus.hid) /out))) + =+ mof=(turn sus (append [%give ote])) + |= _+<.ref + =+ neu=(ref +<) + neu(- (welp mof -.neu)) +:: +++ add-resp :: add response move to requesting bone + |* [mof=[@ @ *] ref=_,[(list) ^]] + |* [ost=bone _?@(+<.ref ~ +<+.ref)] + =+ neu=(ref +<) + neu(- [[ost mof] -.neu]) +:: +++ gate-give :: respond with computed gift + |* [gat=_,[@ *] ref=_,[(list) ^]] + (gate-move |*(_+<.gat [%give (gat +<)]) ref) +:: +++ gate-bang :: respond with computed note + |* [gat=_,[@ @ *] ref=_,[(list) ^]] + (gate-move |*(_+<.gat [%pass /bang (gat +<)]) ref) +:: +++ gate-mess :: respond with local message + |* [con=[* [hide *] *] gat=_,[@ @ *] ref=_,[(list) ^]] + => .(+<- `[* [hid=hide *] *]`con) + %- gate-move :_ ref + |* _+<.gat + =+ `[imp=path mez=cage]`(gat +<) + [%pass /poke %g %mess [our.hid imp] our.hid mez] +:: +++ gate-move :: respond with computed move + |* [gat=_,(mold) ref=_,[(list) ^]] + |* [ost=bone * arg=_+<.gat] + ((add-resp (gat arg) ref) +<) +:: +:: +++ gate-outs :: send computed gift to /out + |* [con=[* [hide *] *] gat=_,[@ *] ref=_,[(list) ^]] + |* [ost=bone * arg=_+<.gat] + ((add-output con (gat arg) ref) +<) +:: +++ listen-in :: recieve standard input + |* [con=[* [hide *] *] ref=_,[(list) ^]] + => .(+<- `[* [hid=hide *] *]`con) + (add-subs [[our +.imp] our /in/[-.imp]]:hid ref) +:: +++ print + |* [con=[* [hide *] *] tap=tape] + (add-output con [%rush %tang [%leaf tap] ~] ,_[~ con]) +:: +++ verify :: type-check with context and move + |* [con=^ mof=[@ *]] + |* ref=_,[(list ,_mof) _con] + |* _+<.ref + ^- [(list ,_mof) _con] + (ref +<) +-- diff --git a/main/lib/sqar/core.hook b/main/lib/sqar/core.hook new file mode 100644 index 000000000..2f5d81e1d --- /dev/null +++ b/main/lib/sqar/core.hook @@ -0,0 +1,43 @@ +~% %util +> ~ +|% +++ kids (list inline) +++ inline + =+ ^= inlik + $% [%emph p=?] :: strong? + [%delt ~] :: strikethrough + [%link p=tape q=(unit tape)] + [%blot p=tape q=(unit tape)] :: image + == + =+ ^= inlin + $% [%$ p=tape] + [%line ~] + [%code p=tape] + [%html p=cord] + == + $&([p=inlik q=kids] inlin) +:: +:: +++ elem $&(tops node) +++ tops :: childful block + $: $= p + $% [%bloq ~] + [%list p=? q=$|(char [p=@u q=char])] :: tight, ordered? + [%item ~] + == + q=(list elem) + == +:: ++ mist |*(a=_,* ,[i=a t=$|(~ (mist a))]) :: .=(%mist +(%list)) +++ node :: childless block + $% [%para p=kids] + [%hrul ~] + [%head p=@u q=kids] + [%code p=(unit ,[p=char q=@u r=tape]) q=wain] :: info, contents + [%html p=wain] + [%defn ~] :: empty para + == +:: +++ sqar + ~/ %sqar + |= @t + *(list elem) +-- diff --git a/main/lib/twitter/core.hook b/main/lib/twitter/core.hook new file mode 100644 index 000000000..db903cf58 --- /dev/null +++ b/main/lib/twitter/core.hook @@ -0,0 +1,544 @@ +:: A Twitter API library. +:: +:::: /hook/core/twitter/lib + :: +/? 314 +/- *twitter +=+ twit +!: +:::: functions + :: +|% +++ fass :: rewrite path + |= a=path + %- trip + %^ gsub '-' '_' + %+ reel a + |= [p=@t q=@t] + (cat 3 '/' (cat 3 p q)) +:: +++ gsub :: replace chars + |= [a=@t b=@t t=@t] + ^- @t + ?~ t t + %+ add (lsh 3 1 $(t (rsh 3 1 t))) + =+ c=(mod t (bex 8)) + ?:(=(a c) b c) +:: +++ oauth :: OAuth 1.0 header + |= $: med=meth + url=tape + pas=(list tape) + key=keys + zet=@ + ken=@ + == + ^- @t + =+ non=(turn (rip 2 (shaw zet 128 ken)) |=(a=@ ~(x ne a))) + =+ tim=(slag 2 (scow %ui (unt zet))) + =+ sky=(crip :(weld (urle (trip sec.con.key)) "&" (urle (trip sec.acc.key)))) + =+ ^= bas + ^- tape + =+ ^= hds + %- reel :_ |=([p=tape q=tape] :(weld p "&" q)) + %- sort :_ aor + %- weld :- pas + ^- (list tape) + :~ :(weld "oauth_consumer_key=" (trip tok.con.key)) + :(weld "oauth_nonce=" non) + :(weld "oauth_signature_method=HMAC-SHA1") + :(weld "oauth_timestamp=" tim) + :(weld "oauth_token=" (trip tok.acc.key)) + :(weld "oauth_version=1.0") + == + ;: weld + (trip (cuss (trip `@t`med))) "&" + (urle url) "&" + (urle (scag (dec (lent hds)) `tape`hds)) + == + =+ sig=`tape`(sifo (swap 3 (hmac (swap 3 sky) (crip bas)))) + %- crip + ;: weld "OAuth " + "oauth_consumer_key=" "\"" (trip tok.con.key) "\", " + "oauth_nonce=" "\"" non "\", " + "oauth_signature=" "\"" (urle sig) "\", " + "oauth_signature_method=\"HMAC-SHA1\", " + "oauth_timestamp=" "\"" tim "\", " + "oauth_token=" "\"" (trip tok.acc.key) "\", " + "oauth_version=1.0" + == +:: +++ valve :: produce request + |= $: med=meth + [rus=tape quy=quay] + key=keys + est=time + eny=@ + == + ^- hiss + =+ url="https://api.twitter.com/1.1{rus}.json" + =+ req=|=(a=tape (scan a auri:epur)) + =+ ^= help + |= quy=(list ,[tape tape]) + ^- (list tape) + %+ turn quy + |= a=[p=tape q=tape] + :(weld (urle p.a) "=" (urle q.a)) + =+ tan=(turn quy |=([p=@t q=@t] [(trip p) (trip q)])) + =+ har=(help (turn tan |=(p=[p=tape q=tape] [p.p (urle q.p)]))) + =+ hab=(help tan) + =+ lav=(reel har |=([p=tape q=tape] :(weld p "&" q))) + =+ voy=?:(=(0 (lent lav)) ~ (scag (dec (lent lav)) `tape`lav)) + =+ vab=(reel hab |=([p=tape q=tape] :(weld p "&" q))) + =+ vur=(crip ?:(=(0 (lent vab)) ~ (scag (dec (lent vab)) `tape`vab))) + =+ ^= head + %- ~(gas by *math) + :~ ['authorization' [(oauth med url hab key est eny) ~]] + ['content-type' ['application/x-www-form-urlencoded' ~]] + == + ?: =(%get med) + ?~ voy + [(req url) med head ~] + [(req :(weld url "?" voy)) med head ~] + [(req url) med head (some [(met 3 vur) vur])] +-- +!: +:::: library + :: +|% +++ twip :: response printers + |% + ++ mean + |= [msg=@t num=@ud] ^- tank + rose/[": " `~]^~[leaf/"Error {}" leaf/(trip msg)] + -- +++ twir :: response parsers + |% + ++ fasp |*([a=@tas b=*] [(gsub '-' '_' a) b]) + ++ user (cook crip (plus ;~(pose aln cab))) + ++ mean (ot errors/(ar (ot message/so code/ni ~)) ~):jo + ++ stat + =+ jo + ^- $+(json (unit ,[id=@u who=@ta now=@da txt=@t])) + %- ot + :~ id/ni + user/(ot (fasp screen-name/(su user)) ~) + (fasp created-at/da) + text/so + == + ++ usel + =+ jo + ^- $+(json (unit (list ,who=@ta))) + =- (ot users/(ar -) ~) + (ot (fasp screen-name/(su user)) ~) + -- +++ twit + => |% :: request structures + ++ dev ,@t :: device name + ++ gat ,@t :: grant type + ++ lat ,@t :: latitude + ++ lid (list tid) + ++ lon ,@t :: longitude + ++ lsc (list scr) + ++ lst (list ,@t) + ++ nam ,@t :: location name + ++ pla ,@t :: place-id + ++ scr ,@t :: screen name + ++ slu ,@t :: category name + ++ tid ,@u + ++ tok ,@t :: oauth token + ++ url ,@t :: callback url + :: + ++ at ,[%access-token p=tok] + ++ de ,[%device p=dev] + ++ fo ,[%follow p=lid] + ++ gr ,[%grant-type p=gat] + ++ id ,[%id p=tid] + ++ ii ,[%'!inline' p=@t] + ++ is ,[%id p=lid] + ++ la ,[%lat p=lat] + ++ lo ,[%long p=lon] + ++ na ,[%name p=lid] + ++ oa ,[%oauth-callback p=url] + ++ os ,[%source-screen-name p=scr] + ++ pl ,[%place-id p=pla] + ++ qq ,[%q p=@t] + ++ sc ,[%screen-name p=scr] + ++ sd ?(ui sc) + ++ ss ,[%screen-name p=lsc] + ++ sl ,[%slug p=slu] + ++ si ,[%source-id p=tid] + ++ st ,[%status p=@t] + ++ te ,[%text p=@t] + ++ ti ,[%target-id p=tid] + ++ ts ,[%target-screen-name p=scr] + ++ tr ,[%track p=lst] + ++ ur ,[%url p=url] + ++ ui ,[%user-id p=tid] + ++ us ,[%user-id p=lid] + -- + |_ [key=keys est=time eny=@uw] + ++ lutt |=(@ `@t`(rsh 3 2 (scot %ui +<))) + ++ llsc + |= (list scr) + (roll +< |=([p=scr q=@t] (cat 3 (cat 3 q ',') p))) + :: + ++ llst + |= (list ,@t) + (roll +< |=([p=@t q=@t] (cat 3 (cat 3 q ',') p))) + :: + ++ llid + |= (list tid) + (roll +< |=([p=tid q=@t] (cat 3 (cat 3 q ',') (lutt p)))) + :: + ++ mold :: construct request + |* [med=meth pax=path a=$+(* *)] + |= [args=a quy=quay] + (valve med (cowl pax args quy) key est eny) + :: + ++ cowl :: handle parameters + |= $: pax=path + ban=(list ,[p=@t q=?(@ (list ,@))]) + quy=quay + == + ^- [path quay] + ?~ ban + [(fass pax) quy] + ?: =('!inline' p.i.ban) + ?@ q.i.ban + [(fass (welp pax /[`@t`q.i.ban])) quy] + !! + :- (fass pax) + %+ welp quy + %+ turn `(list ,[p=@t q=?(@ (list ,@))])`ban + |= [p=@t q=?(@ (list ,@))] + ^- [@t @t] + :- (gsub '-' '_' p) + ?@ q + ?- p + ?(%id %source-id %target-id %user-id) (lutt q) + @ `@t`q + == + ?- p + ?(%follow %id %name %user-id) (llid q) + %track (llst q) + %screen-name (llsc q) + * !! + == + :: + ++ stat-ment + (mold %get /statuses/mentions-timeline ,~) + :: + ++ stat-user + (mold %get /statuses/user-timeline ,[sd ~]) + :: + ++ stat-home + (mold %get /statuses/home-timeline ,~) + :: + ++ stat-retw + (mold %get /statuses/retweets-of-me ,~) + :: + ++ stat-rets-iddd + (mold %get /statuses/retweets ,[ii ~]) + :: + ++ stat-show + (mold %get /statuses/show ,[id ~]) + :: + ++ stat-dest-iddd + (mold %post /statuses/destroy ,[ii ~]) + :: + ++ stat-upda + (mold %post /statuses/update ,[st ~]) + :: + ++ stat-retw-iddd + (mold %post /statuses/retweet ,[ii ~]) + :: + ++ stat-oemb-iddd + (mold %get /statuses/oembed ,[id ~]) + :: + ++ stat-oemb-urll + (mold %get /statuses/oembed ,[ur ~]) + :: + ++ stat-retw-idss + (mold %get /statuses/retweeters/ids ,[id ~]) + :: + ++ sear-twee + (mold %get /search/tweets ,[qq ~]) + :: + ++ stat-filt-foll + (mold %post /statuses/filter ,[?(fo tr) ~]) + :: + ++ stat-samp + (mold %get /statuses/sample ,~) + :: + ++ stat-fire + (mold %get /statuses/firehose ,~) + :: + ++ user + (mold %get /user ,~) + :: + ++ site + (mold %get /site ,[fo ~]) + :: + ++ dire + (mold %get /direct-messages ,~) + :: + ++ dire-sent + (mold %get /direct-messages/sent ,~) + :: + ++ dire-show + (mold %get /direct-messages/show ,[id ~]) + :: + ++ dire-dest + (mold %post /direct-messages/destroy ,[id ~]) + :: + ++ dire-neww + (mold %post /direct-messages/new ,[sd te ~]) + :: + ++ frie-nore-idss + (mold %get /friendships/no-retweets/ids ,~) + :: + ++ frie-idss + (mold %get /friends/ids ,[sd ~]) + :: + ++ foll-idss + (mold %get /followers/ids ,[sd ~]) + :: + ++ frie-inco + (mold %get /friendships/incoming ,~) + :: + ++ frie-outg + (mold %get /friendships/outgoing ,~) + :: + ++ frie-crea + (mold %post /friendships/create ,[sd ~]) + :: + ++ frie-dest + (mold %post /friendships/destroy ,[sd ~]) + :: + ++ frie-upda + (mold %post /friendships/update ,[sd ~]) + :: + ++ frie-show + (mold %get /friendships/show ,[?(si os) ?(ti ts) ~]) + :: + ++ frie-list + (mold %get /friends/list ,[sd ~]) + :: + ++ foll-list + (mold %get /followers/list ,[sd ~]) + :: + ++ frie-look + (mold %get /friendships/lookup ,[?(us ss) ~]) + :: + ++ acco-sett-gett + (mold %get /account/settings ,~) + :: + ++ acco-veri + (mold %get /account/verify-credentials ,~) + :: + ++ acco-sett-post + (mold %post /account/settings ,~) + :: + ++ acco-upda-deli + (mold %post /account/update-delivery-device ,[de ~]) + :: + ++ acco-upda-prof + (mold %post /account/update-profile ,~) + :: + ++ acco-upda-prof-back + (mold %post /account/update-profile-background-image ,~) + :: + ++ acco-upda-prof-colo + (mold %post /account/update-profile-colors ,~) + :: + ++ bloc-list + (mold %get /blocks/list ,~) + :: + ++ bloc-idss + (mold %get /blocks/ids ,~) + :: + ++ bloc-crea + (mold %post /blocks/create ,[sd ~]) + :: + ++ bloc-dest + (mold %post /blocks/destroy ,[sd ~]) + :: + ++ user-look + (mold %get /users/lookup ,[?(us ss) ~]) + :: + ++ user-show + (mold %get /users/show ,[sd ~]) + :: + ++ user-sear + (mold %get /users/search ,[qq ~]) + :: + ++ user-cont-tees + (mold %get /users/contributees ,[sd ~]) + :: + ++ user-cont-tors + (mold %get /users/contributors ,[sd ~]) + :: + ++ acco-remo + (mold %post /account/remove-profile-banner ,~) + :: + ++ user-prof + (mold %get /users/profile-banner ,[sd ~]) + :: + ++ mute-user-crea + (mold %post /mutes/users/create ,[sd ~]) + :: + ++ mute-user-dest + (mold %post /mutes/users/destroy ,[sd ~]) + :: + ++ mute-user-idss + (mold %get /mutes/users/ids ,~) + :: + ++ mute-user-list + (mold %get /mutes/users/list ,~) + :: + ++ user-sugg-slug + (mold %get /users/suggestions ,[sl ~]) + :: + ++ user-sugg + (mold %get /users/suggestions ,~) + :: + ++ favo-list + (mold %get /favorites/list ,~) + :: + ++ favo-dest + (mold %post /favorites/destroy ,[id ~]) + :: + ++ favo-crea + (mold %post /favorites/create ,[id ~]) + :: + ++ list-list + (mold %get /lists/list ,~) + :: + ++ list-stat + (mold %get /lists/statuses ,~) + :: + ++ list-memb-dest + (mold %post /lists/members/destroy ,~) + :: + ++ list-memb-hips + (mold %get /lists/memberships ,[sd ~]) + :: + ++ list-subs-bers + (mold %get /lists/subscribers ,~) + :: + ++ list-subs-crea + (mold %post /lists/subscribers/create ,~) + :: + ++ list-subs-show + (mold %get /lists/subscribers/show ,[sd ~]) + :: + ++ list-subs-dest + (mold %post /lists/subscribers/destroy ,~) + :: + ++ list-memb-crea-alll + (mold %post /lists/members/create-all ,[?(us ss) ~]) + :: + ++ list-memb-show + (mold %get /lists/members/show ,[sd ~]) + :: + ++ list-memb-bers + (mold %get /lists/members ,~) + :: + ++ list-memb-crea + (mold %post /lists/members/create ,[sd ~]) + :: + ++ list-dest + (mold %post /lists/destroy ,~) + :: + ++ list-upda + (mold %post /lists/update ,~) + :: + ++ list-crea + (mold %post /lists/create ,[na ~]) + :: + ++ list-show + (mold %get /lists/show ,~) + :: + ++ list-subs-ions + (mold %get /lists/subscriptions ,[sd ~]) + :: + ++ list-memb-dest-alll + (mold %post /lists/members/destroy-all ,[?(us ss) ~]) + :: + ++ list-owne + (mold %get /lists/ownerships ,[sd ~]) + :: + ++ save-list + (mold %get /saved-searches/list ,~) + :: + ++ save-show-iddd + (mold %get /saved-searches/show ,[ii ~]) + :: + ++ save-crea + (mold %post /saved-searches/create ,[qq ~]) + :: + ++ save-dest-iddd + (mold %post /saved-searches/destroy ,[ii ~]) + :: + ++ geoo-iddd-plac + (mold %get /geo/id ,[ii ~]) + :: + ++ geoo-reve + (mold %get /geo/reverse-geocode ,[la lo ~]) + :: + ++ geoo-sear + (mold %get /geo/search ,~) + :: + ++ geoo-simi + (mold %get /geo/similar-places ,[la lo na ~]) + :: + ++ tren-plac + (mold %get /trends/place ,[id ~]) + :: + ++ tren-avai + (mold %get /trends/available ,~) + :: + ++ tren-clos + (mold %get /trends/closest ,[la lo ~]) + :: + ++ user-repo + (mold %post /users/report-spam ,[sd ~]) + :: + ++ oaut-auth-cate + (mold %get /oauth/authenticate ,~) + :: + ++ oaut-auth-rize + (mold %get /oauth/authorize ,~) + :: + ++ oaut-acce + (mold %post /oauth/access-token ,~) + :: + ++ oaut-requ + (mold %post /oauth/request-token ,[oa ~]) + :: + ++ oaut-toke + (mold %post /oauth2/token ,[gr ~]) + :: + ++ oaut-inva + (mold %post /oauth2/invalidate-token ,[at ~]) + :: + ++ help-conf + (mold %get /help/configuration ,~) + :: + ++ help-lang + (mold %get /help/languages ,~) + :: + ++ help-priv + (mold %get /help/privacy ,~) + :: + ++ help-toss + (mold %get /help/tos ,~) + :: + ++ appl-rate + (mold %get /application/rate-limit-status ,~) + :: + ++ stat-look + (mold %get /statuses/lookup ,[us ~]) + -- +-- diff --git a/main/lib/urb.js b/main/lib/urb.js index a35c28926..7fbb4c7f0 100644 --- a/main/lib/urb.js +++ b/main/lib/urb.js @@ -84,7 +84,22 @@ window.urb.unsubscribe = function(params,cb) { var $this = this this.req(method,url,params,true,function(err,data) { - $this.cabs[$this.gsig(params)]('subscription closed') - delete $this.cabs[$this.gsig(params)] + cb(err,data) }) } + +window.urb.util = { + toDate: function (dat){ + var mils = Math.floor((0x10000 * dat.getUTCMilliseconds()) / 1000).toString(16) + function pad(num, str){ + return ((new Array(num + 1)).join('0') + str).substr(-num,num) + } + return '~' + dat.getUTCFullYear() + + '.' + (dat.getUTCMonth() + 1) + + '.' + dat.getUTCDate() + + '..' + pad(2, dat.getUTCHours()) + + '.' + pad(2, dat.getUTCMinutes()) + + '.' + pad(2, dat.getUTCSeconds()) + + '..' + pad(4, mils) + } +} diff --git a/main/mar/begin-args/door.hook b/main/mar/begin-args/door.hook deleted file mode 100644 index cd6cabfae..000000000 --- a/main/mar/begin-args/door.hook +++ /dev/null @@ -1,15 +0,0 @@ -:: -:::: /hoon/core/zing/pro - :: -/? 314 -/- begin-args -|_ arg=begin-args -:: -++ grab :: convert from - |% - ++ noun :: convert from %noun - |= src=* - ^+ +>+ - +>+(arg (begin-args src)) - -- --- diff --git a/main/mar/down/door.hook b/main/mar/down/door.hook index 25c565418..adac3d94d 100644 --- a/main/mar/down/door.hook +++ b/main/mar/down/door.hook @@ -1,327 +1,42 @@ :: :::: /hoon/core/down/mar :: -/? 314 -/- *markdown +/? 314 +/- *markdown :: :::: :: +// /%%/parse :: inli donp parse +// /%%/rend :: sing sung sang flat into-inner +:: ~% %utyl +>+>+> ~ |_ don=down ++ grab :: convert from - |% + |% ++ md :: convert from %md - =< |=(src=@t (mark (trip src))) + =< |=(src=@t (mark src)) + ~% %utyl ..is ~ + ::~% %utyl +>+>+>+> ~ |% ++ mark - |= p=tape - (scan p apex) - :: - ++ apex :: markdown parser - |= tub=nail - ^- (like down) - =+ sep=(sepa tub) - ?~ q.sep [p.sep ~] - :- p.sep - %- some :_ [p.sep ~] - (turn p.u.q.sep |=(a=tape (scan a blos))) - :: - ++ base %+ stag %par - ;~ plug - (stag %tex (plus ;~(pose prn eol))) - (easy ~) - == - :: - ++ blos :: block element - %+ knee *barb |. ~+ - ;~ pose - head quot lasd horz - code codf html para base - == - :: - ++ brek (stag %cut (cold ~ ;~(plug fas fas))) :: line break - ++ chrd ;~(pose escp prn (cold ' ' eol)) :: shin character data - ++ code :: code block - %+ stag %pre - %- full - %- plus - ;~ pfix (stun [4 4] ace) - ;~ pose - %+ cook welp - ;~(plug (plus prn) (cold "\0a" eol)) - (full (plus prn)) - == - == - :: - ++ codf :: fenced code block - %+ stag %pre - %- full - %+ ifix - [;~(plug tec tec tec eol) ;~(plug tec tec tec)] - %- plus - ;~ pose - %+ cook welp - ;~(plug (star prn) (cold "\0a" eol)) - (full (plus ;~(less ;~(plug tec tec tec) prn))) - == - :: - ++ cods :: code shin - %+ stag %cod - =+ chx=;~(pose (cold ' ' eol) prn) - ;~ pose - %+ ifix [(jest '```') (jest '```')] - (plus ;~(less (jest '```') chx)) - %+ ifix [(jest '``') (jest '``')] - (plus ;~(less (jest '``') chx)) - (ifix [tec tec] (plus ;~(less tec chx))) - == - :: - ++ dont :: control chars - ;~ pose tar tec cab sel - ;~(plug sig sig) - ;~(plug fas fas) - == - ++ spas :: all shin elements - |* res=_rule - %- plus - ;~ pose emph stri link - brek cods (text res) - == - :: - ++ eol (just `@`10) :: newline - ++ emph :: emphasis - %+ knee *shin |. ~+ - %+ stag %emp - =+ inn=(plus ;~(pose cods stri link (text fail))) - ;~ pose - (ifix [(jest '***') (jest '***')] (stag %both inn)) - (ifix [(jest '**_') (jest '_**')] (stag %both inn)) - (ifix [(jest '*__') (jest '__*')] (stag %both inn)) - (ifix [(jest '_**') (jest '**_')] (stag %both inn)) - (ifix [(jest '__*') (jest '*__')] (stag %both inn)) - (ifix [(jest '___') (jest '___')] (stag %both inn)) - (ifix [(jest '**') (jest '**')] (stag %bold inn)) - (ifix [(jest '__') (jest '__')] (stag %bold inn)) - (ifix [tar tar] (stag %bent inn)) - (ifix [cab cab] (stag %bent inn)) - == - :: - ++ escp ;~(pfix bas (mask (trip '`*#-.{}[]\\'))) :: escapable chars - :: - ++ head :: header - %+ stag %had - =+ ^= hed - ;~ pose - ;~ plug - ;~(pfix wits (spas hax)) - (cook some (ifix [;~(plug (star hax) sel hax) ser] (plus alp))) - == - (ifix [wits (star hax)] ;~(plug (spas hax) (easy ~))) - == - =+ ^= sed - ;~ pose - ;~ plug - (spas ;~(pose eol sel)) - (cook some (ifix [;~(plug sel hax) ser] (plus alp))) - == - ;~(plug (spas eol) (easy ~)) - == - %- full - ;~ pose - ;~(plug (cook lent (stun [1 6] hax)) hed) - (stag 1 (ifix [wits ;~(plug eol (plus tis))] sed)) - (stag 2 (ifix [wits ;~(plug eol (plus hep))] sed)) - == - :: - ++ horz :: horizontal rule - %+ stag %hot - %+ cold ~ - %- full - ;~ pose - ;~(plug (stun [0 3] ace) hep wits hep wits hep (star ;~(pose hep ace))) - ;~(plug (stun [0 3] ace) tar wits tar wits tar (star ;~(pose tar ace))) - ;~(plug (stun [0 3] ace) cab wits cab wits cab (star ;~(pose cab ace))) - == - :: - ++ html (stag %hem apex:poxa) :: html barb - ++ lasd :: top level list - %+ stag %lit - %- full - ;~ pose - (stag & (lisd ;~(plug (star nud) dot))) - (stag | (lisd hep)) - (stag | (lisd tar)) - (stag | (lisd lus)) - == - :: - ++ lisd :: list funk - |* bus=_rule - |= tub=nail - ^- (like down) - =+ chx=;~(plug (plus prn) (cold "\0a" eol)) - =- ?~ q.pre pre - :- p.pre %- some - [(turn `wall`p.u.q.pre |=(a=tape [%lie (scan a apex)])) [p.pre ~]] - ^= pre %. tub - %+ most ;~(pose ;~(plug wits eol) (easy ~)) - %+ cook |=(a=wall `tape`(zing a)) :: XX core dump w/o cast - ;~ plug - %+ cook zing - ;~ pose - (full ;~(pfix bus ace ;~(plug (plus prn) (easy ~)))) - ;~(pfix bus ace ;~(plug (plus prn) (cold "\0a" eol) (easy ~))) - == - %- star - ;~ pose - ;~(plug ;~(sfix eol ace ace) (cook welp chx)) - ;~(pfix ace ace (cook welp chx)) - (full ;~(pfix ace ace (plus prn))) - == - == - :: - ++ link :: link element - %+ knee *shin |. ~+ - %+ stag %lin - ;~ plug - (ifix [sel ser] (plus ;~(pose emph stri cods (text ser)))) - ;~ pose - %+ ifix [pel per] - ;~ plug - ;~(sfix (cook zing (most eol (plus ;~(less ace prn)))) ace) - (cook some (ifix [doq doq] (plus ;~(less doq ;~(pose prn eol))))) - == - %+ ifix [pel per] - ;~(plug (cook zing (most eol (plus ;~(less per prn)))) (easy ~)) - == - == - :: - ++ para (stag %par (full (spas fail))) :: paragraph - ++ quot :: blockquotes - %+ stag %quo - %- full - |= tub=nail - ^- (like down) - =- ?~ q.pre - [p.pre ~] - (apex [[1 1] (welp p.u.q.pre q.q.u.q.pre)]) - ^= pre %. tub - %+ cook |=(a=wall `tape`(zing a)) - %- plus - ;~ pfix ;~(pose ;~(plug gar ace) gar) - ;~ pose - (cook welp ;~(plug (star prn) (cold "\0a" eol))) - (full (star prn)) - == - == - :: - ++ sepa :: separate barbs - %+ knee *wall |. ~+ - =+ lin=;~(plug eol wits eol) - %- full - %+ ifix [(star whit) (star whit)] - %+ more ;~(plug eol wits (more wits eol)) - ;~ pose - sepc - (sepl (cold "-" hep)) - (sepl (cold "*" tar)) - (sepl (cold "+" lus)) - (sepl (cook welp ;~(plug (star nud) (cold "." dot)))) - (plus ;~(pose prn ;~(less lin eol))) - == - :: - ++ sepc :: separate code block - =+ tecs=(cold "```" (jest '```')) - %+ cook |=(wall `tape`(zing +<)) - ;~ plug - tecs - (cook zing (star ;~(plug eol ;~(less tecs (star prn))))) - (cold "\0a" eol) - tecs - (easy ~) - == - ++ sepl :: separate list - |* bus=_rule - %+ cook zing - %+ most ;~(pose ;~(plug wits eol) (easy ~)) - %+ cook |=(a=wall `tape`(zing a)) - ;~ plug - %+ cook |=(a=wall `tape`(zing a)) - ;~ pose - ;~(plug bus (cold " " ace) (plus prn) (cold "\0a" eol) (easy ~)) - (full ;~(plug bus (cold " " ace) (plus prn) (easy ~))) - == - %- star - ;~ pose - ;~ pfix wits - ;~ plug eol ace ace - (cook welp ;~(plug (plus prn) (cold "\0a" eol))) - == - == - ;~(plug ace ace (cook welp ;~(plug (plus prn) (cold "\0a" eol)))) - (full ;~(plug ace ace (plus prn))) - == - == - :: - ++ stri :: strikethrough text - %+ stag %ike - %+ ifix [(jest '~~') (jest '~~')] - (plus ;~(pose emph cods link (text fail))) - :: - ++ text |*(res=_rule (stag %tex (plus ;~(less ;~(pose res dont) chrd)))) - ++ whit (mask ~[`@`0x20 `@`0xa]) :: whitespace w/nl - ++ wits (star ace) + ~/ %dawn + |= p=@t + (normalize (rash p parse)) -- - :: ++ noun down :: clam from %noun -- :: ++ grow :: convert into - =< |% - ++ hymn :: convert to %hymn - ;html - ;head:title:"Untitled" - ;body - ;* (apex don) - == - == - ++ psal :: convert to %psal - ;div - ;* (apex don) - == - -- |% - ++ apex |=(don=down (turn don |=(bol=barb (blok bol)))) - ++ blok - |= bol=barb - ^- manx - ?- bol - [%had *] - :_ (turn q.bol sank) - [(cat 3 'h' (scot %ud p.bol)) ?~(r.bol ~ [[%id u.r.bol] ~])] - [%par *] [[%p ~] (turn p.bol sank)] - [%hot *] [[%hr ~] ~] - [%pre *] [[%pre ~] ~[[[%$ [[%$ (zing p.bol)] ~]] ~]]] - [%quo *] [[%blockquote ~] (apex p.bol)] - [%lie *] [[%li ~] (apex p.bol)] - [%lit *] ?: =(& p.bol) [[%ol ~] (apex q.bol)] - [[%ul ~] (apex q.bol)] - [%hem *] p.bol - == - :: - ++ sank - |= san=shin - ^- manx - ?- san - [%tex *] [[%$ [[%$ p.san] ~]] ~] - [%cut *] [[%br ~] ~] - [%ike *] [[%del ~] (turn p.san ..$)] - [%cod *] [[%code ~] ~[[[%$ [[%$ p.san] ~]] ~]]] - [%emp *] - ?: =(%bent p.san) [[%em ~] (turn q.san ..$)] - ?: =(%bold p.san) [[%strong ~] (turn q.san ..$)] - [[%em ~] ~[[[%strong ~] (turn q.san ..$)]]] - [%lin *] - ?~ r.san [[%a ~[[%href q.san]]] (turn p.san ..$)] - [[%a ~[[%href q.san] [%title u.r.san]]] (turn p.san ..$)] + ++ hymn :: convert to %hymn + ;html + ;head:title:"Untitled" + ;body + ;* (sing don) + == + == + ++ psal :: convert to %psal + ;div + ;* (sing don) == -- -- diff --git a/main/mar/down/html5-entities.json b/main/mar/down/html5-entities.json new file mode 100644 index 000000000..e681d1bc8 --- /dev/null +++ b/main/mar/down/html5-entities.json @@ -0,0 +1 @@ +{"AAacute":"Á","aacute":"á","Abreve":"Ă","abreve":"ă","ac":"∾","acd":"∿","acE":"∾","Acirc":"Â","acirc":"â","acute":"´","Acy":"А","acy":"а","AElig":"Æ","aelig":"æ","af":"⁡","Afr":"𝔄","afr":"𝔞","Agrave":"À","agrave":"à","alefsym":"ℵ","aleph":"ℵ","Alpha":"Α","alpha":"α","Amacr":"Ā","amacr":"ā","amalg":"⨿","amp":"&","AMP":"&","andand":"⩕","And":"⩓","and":"∧","andd":"⩜","andslope":"⩘","andv":"⩚","ang":"∠","ange":"⦤","angle":"∠","angmsdaa":"⦨","angmsdab":"⦩","angmsdac":"⦪","angmsdad":"⦫","angmsdae":"⦬","angmsdaf":"⦭","angmsdag":"⦮","angmsdah":"⦯","angmsd":"∡","angrt":"∟","angrtvb":"⊾","angrtvbd":"⦝","angsph":"∢","angst":"Å","angzarr":"⍼","Aogon":"Ą","aogon":"ą","Aopf":"𝔸","aopf":"𝕒","apacir":"⩯","ap":"≈","apE":"⩰","ape":"≊","apid":"≋","apos":"'","ApplyFunction":"⁡","approx":"≈","approxeq":"≊","Aring":"Å","aring":"å","Ascr":"𝒜","ascr":"𝒶","Assign":"≔","ast":"*","asymp":"≈","asympeq":"≍","Atilde":"Ã","atilde":"ã","Auml":"Ä","auml":"ä","awconint":"∳","awint":"⨑","backcong":"≌","backepsilon":"϶","backprime":"‵","backsim":"∽","backsimeq":"⋍","Backslash":"∖","Barv":"⫧","barvee":"⊽","barwed":"⌅","Barwed":"⌆","barwedge":"⌅","bbrk":"⎵","bbrktbrk":"⎶","bcong":"≌","Bcy":"Б","bcy":"б","bdquo":"„","becaus":"∵","because":"∵","Because":"∵","bemptyv":"⦰","bepsi":"϶","bernou":"ℬ","Bernoullis":"ℬ","Beta":"Β","beta":"β","beth":"ℶ","between":"≬","Bfr":"𝔅","bfr":"𝔟","bigcap":"⋂","bigcirc":"◯","bigcup":"⋃","bigodot":"⨀","bigoplus":"⨁","bigotimes":"⨂","bigsqcup":"⨆","bigstar":"★","bigtriangledown":"▽","bigtriangleup":"△","biguplus":"⨄","bigvee":"⋁","bigwedge":"⋀","bkarow":"⤍","blacklozenge":"⧫","blacksquare":"▪","blacktriangle":"▴","blacktriangledown":"▾","blacktriangleleft":"◂","blacktriangleright":"▸","blank":"␣","blk12":"▒","blk14":"░","blk34":"▓","block":"█","bne":"=","bnequiv":"≡","bNot":"⫭","bnot":"⌐","Bopf":"𝔹","bopf":"𝕓","bot":"⊥","bottom":"⊥","bowtie":"⋈","boxbox":"⧉","boxdl":"┐","boxdL":"╕","boxDl":"╖","boxDL":"╗","boxdr":"┌","boxdR":"╒","boxDr":"╓","boxDR":"╔","boxh":"─","boxH":"═","boxhd":"┬","boxHd":"╤","boxhD":"╥","boxHD":"╦","boxhu":"┴","boxHu":"╧","boxhU":"╨","boxHU":"╩","boxminus":"⊟","boxplus":"⊞","boxtimes":"⊠","boxul":"┘","boxuL":"╛","boxUl":"╜","boxUL":"╝","boxur":"└","boxuR":"╘","boxUr":"╙","boxUR":"╚","boxv":"│","boxV":"║","boxvh":"┼","boxvH":"╪","boxVh":"╫","boxVH":"╬","boxvl":"┤","boxvL":"╡","boxVl":"╢","boxVL":"╣","boxvr":"├","boxvR":"╞","boxVr":"╟","boxVR":"╠","bprime":"‵","breve":"˘","Breve":"˘","brvbar":"¦","bscr":"𝒷","Bscr":"ℬ","bsemi":"⁏","bsim":"∽","bsime":"⋍","bsolb":"⧅","bsol":"\\","bsolhsub":"⟈","bull":"•","bullet":"•","bump":"≎","bumpE":"⪮","bumpe":"≏","Bumpeq":"≎","bumpeq":"≏","Cacute":"Ć","cacute":"ć","capand":"⩄","capbrcup":"⩉","capcap":"⩋","cap":"∩","Cap":"⋒","capcup":"⩇","capdot":"⩀","CapitalDifferentialD":"ⅅ","caps":"∩","caret":"⁁","caron":"ˇ","Cayleys":"ℭ","ccaps":"⩍","Ccaron":"Č","ccaron":"č","Ccedil":"Ç","ccedil":"ç","Ccirc":"Ĉ","ccirc":"ĉ","Cconint":"∰","ccups":"⩌","ccupssm":"⩐","Cdot":"Ċ","cdot":"ċ","cedil":"¸","Cedilla":"¸","cemptyv":"⦲","cent":"¢","centerdot":"·","CenterDot":"·","cfr":"𝔠","Cfr":"ℭ","CHcy":"Ч","chcy":"ч","check":"✓","checkmark":"✓","Chi":"Χ","chi":"χ","circ":"ˆ","circeq":"≗","circlearrowleft":"↺","circlearrowright":"↻","circledast":"⊛","circledcirc":"⊚","circleddash":"⊝","CircleDot":"⊙","circledR":"®","circledS":"Ⓢ","CircleMinus":"⊖","CirclePlus":"⊕","CircleTimes":"⊗","cir":"○","cirE":"⧃","cire":"≗","cirfnint":"⨐","cirmid":"⫯","cirscir":"⧂","ClockwiseContourIntegral":"∲","CloseCurlyDoubleQuote":"”","CloseCurlyQuote":"’","clubs":"♣","clubsuit":"♣","colon":":","Colon":"∷","Colone":"⩴","colone":"≔","coloneq":"≔","comma":",","commat":"@","comp":"∁","compfn":"∘","complement":"∁","complexes":"ℂ","cong":"≅","congdot":"⩭","Congruent":"≡","conint":"∮","Conint":"∯","ContourIntegral":"∮","copf":"𝕔","Copf":"ℂ","coprod":"∐","Coproduct":"∐","copy":"©","COPY":"©","copysr":"℗","CounterClockwiseContourIntegral":"∳","crarr":"↵","cross":"✗","Cross":"⨯","Cscr":"𝒞","cscr":"𝒸","csub":"⫏","csube":"⫑","csup":"⫐","csupe":"⫒","ctdot":"⋯","cudarrl":"⤸","cudarrr":"⤵","cuepr":"⋞","cuesc":"⋟","cularr":"↶","cularrp":"⤽","cupbrcap":"⩈","cupcap":"⩆","CupCap":"≍","cup":"∪","Cup":"⋓","cupcup":"⩊","cupdot":"⊍","cupor":"⩅","cups":"∪","curarr":"↷","curarrm":"⤼","curlyeqprec":"⋞","curlyeqsucc":"⋟","curlyvee":"⋎","curlywedge":"⋏","curren":"¤","curvearrowleft":"↶","curvearrowright":"↷","cuvee":"⋎","cuwed":"⋏","cwconint":"∲","cwint":"∱","cylcty":"⌭","dagger":"†","Dagger":"‡","daleth":"ℸ","darr":"↓","Darr":"↡","dArr":"⇓","dash":"‐","Dashv":"⫤","dashv":"⊣","dbkarow":"⤏","dblac":"˝","Dcaron":"Ď","dcaron":"ď","Dcy":"Д","dcy":"д","ddagger":"‡","ddarr":"⇊","DD":"ⅅ","dd":"ⅆ","DDotrahd":"⤑","ddotseq":"⩷","deg":"°","Del":"∇","Delta":"Δ","delta":"δ","demptyv":"⦱","dfisht":"⥿","Dfr":"𝔇","dfr":"𝔡","dHar":"⥥","dharl":"⇃","dharr":"⇂","DiacriticalAcute":"´","DiacriticalDot":"˙","DiacriticalDoubleAcute":"˝","DiacriticalGrave":"`","DiacriticalTilde":"˜","diam":"⋄","diamond":"⋄","Diamond":"⋄","diamondsuit":"♦","diams":"♦","die":"¨","DifferentialD":"ⅆ","digamma":"ϝ","disin":"⋲","div":"÷","divide":"÷","divideontimes":"⋇","divonx":"⋇","DJcy":"Ђ","djcy":"ђ","dlcorn":"⌞","dlcrop":"⌍","dollar":"$","Dopf":"𝔻","dopf":"𝕕","Dot":"¨","dot":"˙","DotDot":"⃜","doteq":"≐","doteqdot":"≑","DotEqual":"≐","dotminus":"∸","dotplus":"∔","dotsquare":"⊡","doublebarwedge":"⌆","DoubleContourIntegral":"∯","DoubleDot":"¨","DoubleDownArrow":"⇓","DoubleLeftArrow":"⇐","DoubleLeftRightArrow":"⇔","DoubleLeftTee":"⫤","DoubleLongLeftArrow":"⟸","DoubleLongLeftRightArrow":"⟺","DoubleLongRightArrow":"⟹","DoubleRightArrow":"⇒","DoubleRightTee":"⊨","DoubleUpArrow":"⇑","DoubleUpDownArrow":"⇕","DoubleVerticalBar":"∥","DownArrowBar":"⤓","downarrow":"↓","DownArrow":"↓","Downarrow":"⇓","DownArrowUpArrow":"⇵","DownBreve":"̑","downdownarrows":"⇊","downharpoonleft":"⇃","downharpoonright":"⇂","DownLeftRightVector":"⥐","DownLeftTeeVector":"⥞","DownLeftVectorBar":"⥖","DownLeftVector":"↽","DownRightTeeVector":"⥟","DownRightVectorBar":"⥗","DownRightVector":"⇁","DownTeeArrow":"↧","DownTee":"⊤","drbkarow":"⤐","drcorn":"⌟","drcrop":"⌌","Dscr":"𝒟","dscr":"𝒹","DScy":"Ѕ","dscy":"ѕ","dsol":"⧶","Dstrok":"Đ","dstrok":"đ","dtdot":"⋱","dtri":"▿","dtrif":"▾","duarr":"⇵","duhar":"⥯","dwangle":"⦦","DZcy":"Џ","dzcy":"џ","dzigrarr":"⟿","Eacute":"É","eacute":"é","easter":"⩮","Ecaron":"Ě","ecaron":"ě","Ecirc":"Ê","ecirc":"ê","ecir":"≖","ecolon":"≕","Ecy":"Э","ecy":"э","eDDot":"⩷","Edot":"Ė","edot":"ė","eDot":"≑","ee":"ⅇ","efDot":"≒","Efr":"𝔈","efr":"𝔢","eg":"⪚","Egrave":"È","egrave":"è","egs":"⪖","egsdot":"⪘","el":"⪙","Element":"∈","elinters":"⏧","ell":"ℓ","els":"⪕","elsdot":"⪗","Emacr":"Ē","emacr":"ē","empty":"∅","emptyset":"∅","EmptySmallSquare":"◻","emptyv":"∅","EmptyVerySmallSquare":"▫","emsp13":" ","emsp14":" ","emsp":" ","ENG":"Ŋ","eng":"ŋ","ensp":" ","Eogon":"Ę","eogon":"ę","Eopf":"𝔼","eopf":"𝕖","epar":"⋕","eparsl":"⧣","eplus":"⩱","epsi":"ε","Epsilon":"Ε","epsilon":"ε","epsiv":"ϵ","eqcirc":"≖","eqcolon":"≕","eqsim":"≂","eqslantgtr":"⪖","eqslantless":"⪕","Equal":"⩵","equals":"=","EqualTilde":"≂","equest":"≟","Equilibrium":"⇌","equiv":"≡","equivDD":"⩸","eqvparsl":"⧥","erarr":"⥱","erDot":"≓","escr":"ℯ","Escr":"ℰ","esdot":"≐","Esim":"⩳","esim":"≂","Eta":"Η","eta":"η","ETH":"Ð","eth":"ð","Euml":"Ë","euml":"ë","euro":"€","excl":"!","exist":"∃","Exists":"∃","expectation":"ℰ","exponentiale":"ⅇ","ExponentialE":"ⅇ","fallingdotseq":"≒","Fcy":"Ф","fcy":"ф","female":"♀","ffilig":"ffi","fflig":"ff","ffllig":"ffl","Ffr":"𝔉","ffr":"𝔣","filig":"fi","FilledSmallSquare":"◼","FilledVerySmallSquare":"▪","fjlig":"f","flat":"♭","fllig":"fl","fltns":"▱","fnof":"ƒ","Fopf":"𝔽","fopf":"𝕗","forall":"∀","ForAll":"∀","fork":"⋔","forkv":"⫙","Fouriertrf":"ℱ","fpartint":"⨍","frac12":"½","frac13":"⅓","frac14":"¼","frac15":"⅕","frac16":"⅙","frac18":"⅛","frac23":"⅔","frac25":"⅖","frac34":"¾","frac35":"⅗","frac38":"⅜","frac45":"⅘","frac56":"⅚","frac58":"⅝","frac78":"⅞","frasl":"⁄","frown":"⌢","fscr":"𝒻","Fscr":"ℱ","gacute":"ǵ","Gamma":"Γ","gamma":"γ","Gammad":"Ϝ","gammad":"ϝ","gap":"⪆","Gbreve":"Ğ","gbreve":"ğ","Gcedil":"Ģ","Gcirc":"Ĝ","gcirc":"ĝ","Gcy":"Г","gcy":"г","Gdot":"Ġ","gdot":"ġ","ge":"≥","gE":"≧","gEl":"⪌","gel":"⋛","geq":"≥","geqq":"≧","geqslant":"⩾","gescc":"⪩","ges":"⩾","gesdot":"⪀","gesdoto":"⪂","gesdotol":"⪄","gesl":"⋛","gesles":"⪔","Gfr":"𝔊","gfr":"𝔤","gg":"≫","Gg":"⋙","ggg":"⋙","gimel":"ℷ","GJcy":"Ѓ","gjcy":"ѓ","gla":"⪥","gl":"≷","glE":"⪒","glj":"⪤","gnap":"⪊","gnapprox":"⪊","gne":"⪈","gnE":"≩","gneq":"⪈","gneqq":"≩","gnsim":"⋧","Gopf":"𝔾","gopf":"𝕘","grave":"`","GreaterEqual":"≥","GreaterEqualLess":"⋛","GreaterFullEqual":"≧","GreaterGreater":"⪢","GreaterLess":"≷","GreaterSlantEqual":"⩾","GreaterTilde":"≳","Gscr":"𝒢","gscr":"ℊ","gsim":"≳","gsime":"⪎","gsiml":"⪐","gtcc":"⪧","gtcir":"⩺","gt":">","GT":">","Gt":"≫","gtdot":"⋗","gtlPar":"⦕","gtquest":"⩼","gtrapprox":"⪆","gtrarr":"⥸","gtrdot":"⋗","gtreqless":"⋛","gtreqqless":"⪌","gtrless":"≷","gtrsim":"≳","gvertneqq":"≩","gvnE":"≩","Hacek":"ˇ","hairsp":" ","half":"½","hamilt":"ℋ","HARDcy":"Ъ","hardcy":"ъ","harrcir":"⥈","harr":"↔","hArr":"⇔","harrw":"↭","Hat":"^","hbar":"ℏ","Hcirc":"Ĥ","hcirc":"ĥ","hearts":"♥","heartsuit":"♥","hellip":"…","hercon":"⊹","hfr":"𝔥","Hfr":"ℌ","HilbertSpace":"ℋ","hksearow":"⤥","hkswarow":"⤦","hoarr":"⇿","homtht":"∻","hookleftarrow":"↩","hookrightarrow":"↪","hopf":"𝕙","Hopf":"ℍ","horbar":"―","HorizontalLine":"─","hscr":"𝒽","Hscr":"ℋ","hslash":"ℏ","Hstrok":"Ħ","hstrok":"ħ","HumpDownHump":"≎","HumpEqual":"≏","hybull":"⁃","hyphen":"‐","Iacute":"Í","iacute":"í","ic":"⁣","Icirc":"Î","icirc":"î","Icy":"И","icy":"и","Idot":"İ","IEcy":"Е","iecy":"е","iexcl":"¡","iff":"⇔","ifr":"𝔦","Ifr":"ℑ","Igrave":"Ì","igrave":"ì","ii":"ⅈ","iiiint":"⨌","iiint":"∭","iinfin":"⧜","iiota":"℩","IJlig":"IJ","ijlig":"ij","Imacr":"Ī","imacr":"ī","image":"ℑ","ImaginaryI":"ⅈ","imagline":"ℐ","imagpart":"ℑ","imath":"ı","Im":"ℑ","imof":"⊷","imped":"Ƶ","Implies":"⇒","incare":"℅","in":"∈","infin":"∞","infintie":"⧝","inodot":"ı","intcal":"⊺","int":"∫","Int":"∬","integers":"ℤ","Integral":"∫","intercal":"⊺","Intersection":"⋂","intlarhk":"⨗","intprod":"⨼","InvisibleComma":"⁣","InvisibleTimes":"⁢","IOcy":"Ё","iocy":"ё","Iogon":"Į","iogon":"į","Iopf":"𝕀","iopf":"𝕚","Iota":"Ι","iota":"ι","iprod":"⨼","iquest":"¿","iscr":"𝒾","Iscr":"ℐ","isin":"∈","isindot":"⋵","isinE":"⋹","isins":"⋴","isinsv":"⋳","isinv":"∈","it":"⁢","Itilde":"Ĩ","itilde":"ĩ","Iukcy":"І","iukcy":"і","Iuml":"Ï","iuml":"ï","Jcirc":"Ĵ","jcirc":"ĵ","Jcy":"Й","jcy":"й","Jfr":"𝔍","jfr":"𝔧","jmath":"ȷ","Jopf":"𝕁","jopf":"𝕛","Jscr":"𝒥","jscr":"𝒿","Jsercy":"Ј","jsercy":"ј","Jukcy":"Є","jukcy":"є","Kappa":"Κ","kappa":"κ","kappav":"ϰ","Kcedil":"Ķ","kcedil":"ķ","Kcy":"К","kcy":"к","Kfr":"𝔎","kfr":"𝔨","kgreen":"ĸ","KHcy":"Х","khcy":"х","KJcy":"Ќ","kjcy":"ќ","Kopf":"𝕂","kopf":"𝕜","Kscr":"𝒦","kscr":"𝓀","lAarr":"⇚","Lacute":"Ĺ","lacute":"ĺ","laemptyv":"⦴","lagran":"ℒ","Lambda":"Λ","lambda":"λ","lang":"⟨","Lang":"⟪","langd":"⦑","langle":"⟨","lap":"⪅","Laplacetrf":"ℒ","laquo":"«","larrb":"⇤","larrbfs":"⤟","larr":"←","Larr":"↞","lArr":"⇐","larrfs":"⤝","larrhk":"↩","larrlp":"↫","larrpl":"⤹","larrsim":"⥳","larrtl":"↢","latail":"⤙","lAtail":"⤛","lat":"⪫","late":"⪭","lates":"⪭","lbarr":"⤌","lBarr":"⤎","lbbrk":"❲","lbrace":"{","lbrack":"[","lbrke":"⦋","lbrksld":"⦏","lbrkslu":"⦍","Lcaron":"Ľ","lcaron":"ľ","Lcedil":"Ļ","lcedil":"ļ","lceil":"⌈","lcub":"{","Lcy":"Л","lcy":"л","ldca":"⤶","ldquo":"“","ldquor":"„","ldrdhar":"⥧","ldrushar":"⥋","ldsh":"↲","le":"≤","lE":"≦","LeftAngleBracket":"⟨","LeftArrowBar":"⇤","leftarrow":"←","LeftArrow":"←","Leftarrow":"⇐","LeftArrowRightArrow":"⇆","leftarrowtail":"↢","LeftCeiling":"⌈","LeftDoubleBracket":"⟦","LeftDownTeeVector":"⥡","LeftDownVectorBar":"⥙","LeftDownVector":"⇃","LeftFloor":"⌊","leftharpoondown":"↽","leftharpoonup":"↼","leftleftarrows":"⇇","leftrightarrow":"↔","LeftRightArrow":"↔","Leftrightarrow":"⇔","leftrightarrows":"⇆","leftrightharpoons":"⇋","leftrightsquigarrow":"↭","LeftRightVector":"⥎","LeftTeeArrow":"↤","LeftTee":"⊣","LeftTeeVector":"⥚","leftthreetimes":"⋋","LeftTriangleBar":"⧏","LeftTriangle":"⊲","LeftTriangleEqual":"⊴","LeftUpDownVector":"⥑","LeftUpTeeVector":"⥠","LeftUpVectorBar":"⥘","LeftUpVector":"↿","LeftVectorBar":"⥒","LeftVector":"↼","lEg":"⪋","leg":"⋚","leq":"≤","leqq":"≦","leqslant":"⩽","lescc":"⪨","les":"⩽","lesdot":"⩿","lesdoto":"⪁","lesdotor":"⪃","lesg":"⋚","lesges":"⪓","lessapprox":"⪅","lessdot":"⋖","lesseqgtr":"⋚","lesseqqgtr":"⪋","LessEqualGreater":"⋚","LessFullEqual":"≦","LessGreater":"≶","lessgtr":"≶","LessLess":"⪡","lesssim":"≲","LessSlantEqual":"⩽","LessTilde":"≲","lfisht":"⥼","lfloor":"⌊","Lfr":"𝔏","lfr":"𝔩","lg":"≶","lgE":"⪑","lHar":"⥢","lhard":"↽","lharu":"↼","lharul":"⥪","lhblk":"▄","LJcy":"Љ","ljcy":"љ","llarr":"⇇","ll":"≪","Ll":"⋘","llcorner":"⌞","Lleftarrow":"⇚","llhard":"⥫","lltri":"◺","Lmidot":"Ŀ","lmidot":"ŀ","lmoustache":"⎰","lmoust":"⎰","lnap":"⪉","lnapprox":"⪉","lne":"⪇","lnE":"≨","lneq":"⪇","lneqq":"≨","lnsim":"⋦","loang":"⟬","loarr":"⇽","lobrk":"⟦","longleftarrow":"⟵","LongLeftArrow":"⟵","Longleftarrow":"⟸","longleftrightarrow":"⟷","LongLeftRightArrow":"⟷","Longleftrightarrow":"⟺","longmapsto":"⟼","longrightarrow":"⟶","LongRightArrow":"⟶","Longrightarrow":"⟹","looparrowleft":"↫","looparrowright":"↬","lopar":"⦅","Lopf":"𝕃","lopf":"𝕝","loplus":"⨭","lotimes":"⨴","lowast":"∗","lowbar":"_","LowerLeftArrow":"↙","LowerRightArrow":"↘","loz":"◊","lozenge":"◊","lozf":"⧫","lpar":"(","lparlt":"⦓","lrarr":"⇆","lrcorner":"⌟","lrhar":"⇋","lrhard":"⥭","lrm":"‎","lrtri":"⊿","lsaquo":"‹","lscr":"𝓁","Lscr":"ℒ","lsh":"↰","Lsh":"↰","lsim":"≲","lsime":"⪍","lsimg":"⪏","lsqb":"[","lsquo":"‘","lsquor":"‚","Lstrok":"Ł","lstrok":"ł","ltcc":"⪦","ltcir":"⩹","lt":"<","LT":"<","Lt":"≪","ltdot":"⋖","lthree":"⋋","ltimes":"⋉","ltlarr":"⥶","ltquest":"⩻","ltri":"◃","ltrie":"⊴","ltrif":"◂","ltrPar":"⦖","lurdshar":"⥊","luruhar":"⥦","lvertneqq":"≨","lvnE":"≨","macr":"¯","male":"♂","malt":"✠","maltese":"✠","Map":"⤅","map":"↦","mapsto":"↦","mapstodown":"↧","mapstoleft":"↤","mapstoup":"↥","marker":"▮","mcomma":"⨩","Mcy":"М","mcy":"м","mdash":"—","mDDot":"∺","measuredangle":"∡","MediumSpace":" ","Mellintrf":"ℳ","Mfr":"𝔐","mfr":"𝔪","mho":"℧","micro":"µ","midast":"*","midcir":"⫰","mid":"∣","middot":"·","minusb":"⊟","minus":"−","minusd":"∸","minusdu":"⨪","MinusPlus":"∓","mlcp":"⫛","mldr":"…","mnplus":"∓","models":"⊧","Mopf":"𝕄","mopf":"𝕞","mp":"∓","mscr":"𝓂","Mscr":"ℳ","mstpos":"∾","Mu":"Μ","mu":"μ","multimap":"⊸","mumap":"⊸","nabla":"∇","Nacute":"Ń","nacute":"ń","nang":"∠","nap":"≉","napE":"⩰","napid":"≋","napos":"ʼn","napprox":"≉","natural":"♮","naturals":"ℕ","natur":"♮","nbsp":" ","nbump":"≎","nbumpe":"≏","ncap":"⩃","Ncaron":"Ň","ncaron":"ň","Ncedil":"Ņ","ncedil":"ņ","ncong":"≇","ncongdot":"⩭","ncup":"⩂","Ncy":"Н","ncy":"н","ndash":"–","nearhk":"⤤","nearr":"↗","neArr":"⇗","nearrow":"↗","ne":"≠","nedot":"≐","NegativeMediumSpace":"​","NegativeThickSpace":"​","NegativeThinSpace":"​","NegativeVeryThinSpace":"​","nequiv":"≢","nesear":"⤨","nesim":"≂","NestedGreaterGreater":"≫","NestedLessLess":"≪","NewLine":"\n","nexist":"∄","nexists":"∄","Nfr":"𝔑","nfr":"𝔫","ngE":"≧","nge":"≱","ngeq":"≱","ngeqq":"≧","ngeqslant":"⩾","nges":"⩾","nGg":"⋙","ngsim":"≵","nGt":"≫","ngt":"≯","ngtr":"≯","nGtv":"≫","nharr":"↮","nhArr":"⇎","nhpar":"⫲","ni":"∋","nis":"⋼","nisd":"⋺","niv":"∋","NJcy":"Њ","njcy":"њ","nlarr":"↚","nlArr":"⇍","nldr":"‥","nlE":"≦","nle":"≰","nleftarrow":"↚","nLeftarrow":"⇍","nleftrightarrow":"↮","nLeftrightarrow":"⇎","nleq":"≰","nleqq":"≦","nleqslant":"⩽","nles":"⩽","nless":"≮","nLl":"⋘","nlsim":"≴","nLt":"≪","nlt":"≮","nltri":"⋪","nltrie":"⋬","nLtv":"≪","nmid":"∤","NoBreak":"⁠","NonBreakingSpace":" ","nopf":"𝕟","Nopf":"ℕ","Not":"⫬","not":"¬","NotCongruent":"≢","NotCupCap":"≭","NotDoubleVerticalBar":"∦","NotElement":"∉","NotEqual":"≠","NotEqualTilde":"≂","NotExists":"∄","NotGreater":"≯","NotGreaterEqual":"≱","NotGreaterFullEqual":"≧","NotGreaterGreater":"≫","NotGreaterLess":"≹","NotGreaterSlantEqual":"⩾","NotGreaterTilde":"≵","NotHumpDownHump":"≎","NotHumpEqual":"≏","notin":"∉","notindot":"⋵","notinE":"⋹","notinva":"∉","notinvb":"⋷","notinvc":"⋶","NotLeftTriangleBar":"⧏","NotLeftTriangle":"⋪","NotLeftTriangleEqual":"⋬","NotLess":"≮","NotLessEqual":"≰","NotLessGreater":"≸","NotLessLess":"≪","NotLessSlantEqual":"⩽","NotLessTilde":"≴","NotNestedGreaterGreater":"⪢","NotNestedLessLess":"⪡","notni":"∌","notniva":"∌","notnivb":"⋾","notnivc":"⋽","NotPrecedes":"⊀","NotPrecedesEqual":"⪯","NotPrecedesSlantEqual":"⋠","NotReverseElement":"∌","NotRightTriangleBar":"⧐","NotRightTriangle":"⋫","NotRightTriangleEqual":"⋭","NotSquareSubset":"⊏","NotSquareSubsetEqual":"⋢","NotSquareSuperset":"⊐","NotSquareSupersetEqual":"⋣","NotSubset":"⊂","NotSubsetEqual":"⊈","NotSucceeds":"⊁","NotSucceedsEqual":"⪰","NotSucceedsSlantEqual":"⋡","NotSucceedsTilde":"≿","NotSuperset":"⊃","NotSupersetEqual":"⊉","NotTilde":"≁","NotTildeEqual":"≄","NotTildeFullEqual":"≇","NotTildeTilde":"≉","NotVerticalBar":"∤","nparallel":"∦","npar":"∦","nparsl":"⫽","npart":"∂","npolint":"⨔","npr":"⊀","nprcue":"⋠","nprec":"⊀","npreceq":"⪯","npre":"⪯","nrarrc":"⤳","nrarr":"↛","nrArr":"⇏","nrarrw":"↝","nrightarrow":"↛","nRightarrow":"⇏","nrtri":"⋫","nrtrie":"⋭","nsc":"⊁","nsccue":"⋡","nsce":"⪰","Nscr":"𝒩","nscr":"𝓃","nshortmid":"∤","nshortparallel":"∦","nsim":"≁","nsime":"≄","nsimeq":"≄","nsmid":"∤","nspar":"∦","nsqsube":"⋢","nsqsupe":"⋣","nsub":"⊄","nsubE":"⫅","nsube":"⊈","nsubset":"⊂","nsubseteq":"⊈","nsubseteqq":"⫅","nsucc":"⊁","nsucceq":"⪰","nsup":"⊅","nsupE":"⫆","nsupe":"⊉","nsupset":"⊃","nsupseteq":"⊉","nsupseteqq":"⫆","ntgl":"≹","Ntilde":"Ñ","ntilde":"ñ","ntlg":"≸","ntriangleleft":"⋪","ntrianglelefteq":"⋬","ntriangleright":"⋫","ntrianglerighteq":"⋭","Nu":"Ν","nu":"ν","num":"#","numero":"№","numsp":" ","nvap":"≍","nvdash":"⊬","nvDash":"⊭","nVdash":"⊮","nVDash":"⊯","nvge":"≥","nvgt":">","nvHarr":"⤄","nvinfin":"⧞","nvlArr":"⤂","nvle":"≤","nvlt":">","nvltrie":"⊴","nvrArr":"⤃","nvrtrie":"⊵","nvsim":"∼","nwarhk":"⤣","nwarr":"↖","nwArr":"⇖","nwarrow":"↖","nwnear":"⤧","Oacute":"Ó","oacute":"ó","oast":"⊛","Ocirc":"Ô","ocirc":"ô","ocir":"⊚","Ocy":"О","ocy":"о","odash":"⊝","Odblac":"Ő","odblac":"ő","odiv":"⨸","odot":"⊙","odsold":"⦼","OElig":"Œ","oelig":"œ","ofcir":"⦿","Ofr":"𝔒","ofr":"𝔬","ogon":"˛","Ograve":"Ò","ograve":"ò","ogt":"⧁","ohbar":"⦵","ohm":"Ω","oint":"∮","olarr":"↺","olcir":"⦾","olcross":"⦻","oline":"‾","olt":"⧀","Omacr":"Ō","omacr":"ō","Omega":"Ω","omega":"ω","Omicron":"Ο","omicron":"ο","omid":"⦶","ominus":"⊖","Oopf":"𝕆","oopf":"𝕠","opar":"⦷","OpenCurlyDoubleQuote":"“","OpenCurlyQuote":"‘","operp":"⦹","oplus":"⊕","orarr":"↻","Or":"⩔","or":"∨","ord":"⩝","order":"ℴ","orderof":"ℴ","ordf":"ª","ordm":"º","origof":"⊶","oror":"⩖","orslope":"⩗","orv":"⩛","oS":"Ⓢ","Oscr":"𝒪","oscr":"ℴ","Oslash":"Ø","oslash":"ø","osol":"⊘","Otilde":"Õ","otilde":"õ","otimesas":"⨶","Otimes":"⨷","otimes":"⊗","Ouml":"Ö","ouml":"ö","ovbar":"⌽","OverBar":"‾","OverBrace":"⏞","OverBracket":"⎴","OverParenthesis":"⏜","para":"¶","parallel":"∥","par":"∥","parsim":"⫳","parsl":"⫽","part":"∂","PartialD":"∂","Pcy":"П","pcy":"п","percnt":"%","period":".","permil":"‰","perp":"⊥","pertenk":"‱","Pfr":"𝔓","pfr":"𝔭","Phi":"Φ","phi":"φ","phiv":"ϕ","phmmat":"ℳ","phone":"☎","Pi":"Π","pi":"π","pitchfork":"⋔","piv":"ϖ","planck":"ℏ","planckh":"ℎ","plankv":"ℏ","plusacir":"⨣","plusb":"⊞","pluscir":"⨢","plus":"+","plusdo":"∔","plusdu":"⨥","pluse":"⩲","PlusMinus":"±","plusmn":"±","plussim":"⨦","plustwo":"⨧","pm":"±","Poincareplane":"ℌ","pointint":"⨕","popf":"𝕡","Popf":"ℙ","pound":"£","prap":"⪷","Pr":"⪻","pr":"≺","prcue":"≼","precapprox":"⪷","prec":"≺","preccurlyeq":"≼","Precedes":"≺","PrecedesEqual":"⪯","PrecedesSlantEqual":"≼","PrecedesTilde":"≾","preceq":"⪯","precnapprox":"⪹","precneqq":"⪵","precnsim":"⋨","pre":"⪯","prE":"⪳","precsim":"≾","prime":"′","Prime":"″","primes":"ℙ","prnap":"⪹","prnE":"⪵","prnsim":"⋨","prod":"∏","Product":"∏","profalar":"⌮","profline":"⌒","profsurf":"⌓","prop":"∝","Proportional":"∝","Proportion":"∷","propto":"∝","prsim":"≾","prurel":"⊰","Pscr":"𝒫","pscr":"𝓅","Psi":"Ψ","psi":"ψ","puncsp":" ","Qfr":"𝔔","qfr":"𝔮","qint":"⨌","qopf":"𝕢","Qopf":"ℚ","qprime":"⁗","Qscr":"𝒬","qscr":"𝓆","quaternions":"ℍ","quatint":"⨖","quest":"?","questeq":"≟","quot":"\"","QUOT":"\"","rAarr":"⇛","race":"∽","Racute":"Ŕ","racute":"ŕ","radic":"√","raemptyv":"⦳","rang":"⟩","Rang":"⟫","rangd":"⦒","range":"⦥","rangle":"⟩","raquo":"»","rarrap":"⥵","rarrb":"⇥","rarrbfs":"⤠","rarrc":"⤳","rarr":"→","Rarr":"↠","rArr":"⇒","rarrfs":"⤞","rarrhk":"↪","rarrlp":"↬","rarrpl":"⥅","rarrsim":"⥴","Rarrtl":"⤖","rarrtl":"↣","rarrw":"↝","ratail":"⤚","rAtail":"⤜","ratio":"∶","rationals":"ℚ","rbarr":"⤍","rBarr":"⤏","RBarr":"⤐","rbbrk":"❳","rbrace":"}","rbrack":"]","rbrke":"⦌","rbrksld":"⦎","rbrkslu":"⦐","Rcaron":"Ř","rcaron":"ř","Rcedil":"Ŗ","rcedil":"ŗ","rceil":"⌉","rcub":"}","Rcy":"Р","rcy":"р","rdca":"⤷","rdldhar":"⥩","rdquo":"”","rdquor":"”","rdsh":"↳","real":"ℜ","realine":"ℛ","realpart":"ℜ","reals":"ℝ","Re":"ℜ","rect":"▭","reg":"®","REG":"®","ReverseElement":"∋","ReverseEquilibrium":"⇋","ReverseUpEquilibrium":"⥯","rfisht":"⥽","rfloor":"⌋","rfr":"𝔯","Rfr":"ℜ","rHar":"⥤","rhard":"⇁","rharu":"⇀","rharul":"⥬","Rho":"Ρ","rho":"ρ","rhov":"ϱ","RightAngleBracket":"⟩","RightArrowBar":"⇥","rightarrow":"→","RightArrow":"→","Rightarrow":"⇒","RightArrowLeftArrow":"⇄","rightarrowtail":"↣","RightCeiling":"⌉","RightDoubleBracket":"⟧","RightDownTeeVector":"⥝","RightDownVectorBar":"⥕","RightDownVector":"⇂","RightFloor":"⌋","rightharpoondown":"⇁","rightharpoonup":"⇀","rightleftarrows":"⇄","rightleftharpoons":"⇌","rightrightarrows":"⇉","rightsquigarrow":"↝","RightTeeArrow":"↦","RightTee":"⊢","RightTeeVector":"⥛","rightthreetimes":"⋌","RightTriangleBar":"⧐","RightTriangle":"⊳","RightTriangleEqual":"⊵","RightUpDownVector":"⥏","RightUpTeeVector":"⥜","RightUpVectorBar":"⥔","RightUpVector":"↾","RightVectorBar":"⥓","RightVector":"⇀","ring":"˚","risingdotseq":"≓","rlarr":"⇄","rlhar":"⇌","rlm":"‏","rmoustache":"⎱","rmoust":"⎱","rnmid":"⫮","roang":"⟭","roarr":"⇾","robrk":"⟧","ropar":"⦆","ropf":"𝕣","Ropf":"ℝ","roplus":"⨮","rotimes":"⨵","RoundImplies":"⥰","rpar":")","rpargt":"⦔","rppolint":"⨒","rrarr":"⇉","Rrightarrow":"⇛","rsaquo":"›","rscr":"𝓇","Rscr":"ℛ","rsh":"↱","Rsh":"↱","rsqb":"]","rsquo":"’","rsquor":"’","rthree":"⋌","rtimes":"⋊","rtri":"▹","rtrie":"⊵","rtrif":"▸","rtriltri":"⧎","RuleDelayed":"⧴","ruluhar":"⥨","rx":"℞","Sacute":"Ś","sacute":"ś","sbquo":"‚","scap":"⪸","Scaron":"Š","scaron":"š","Sc":"⪼","sc":"≻","sccue":"≽","sce":"⪰","scE":"⪴","Scedil":"Ş","scedil":"ş","Scirc":"Ŝ","scirc":"ŝ","scnap":"⪺","scnE":"⪶","scnsim":"⋩","scpolint":"⨓","scsim":"≿","Scy":"С","scy":"с","sdotb":"⊡","sdot":"⋅","sdote":"⩦","searhk":"⤥","searr":"↘","seArr":"⇘","searrow":"↘","sect":"§","semi":";","seswar":"⤩","setminus":"∖","setmn":"∖","sext":"✶","Sfr":"𝔖","sfr":"𝔰","sfrown":"⌢","sharp":"♯","SHCHcy":"Щ","shchcy":"щ","SHcy":"Ш","shcy":"ш","ShortDownArrow":"↓","ShortLeftArrow":"←","shortmid":"∣","shortparallel":"∥","ShortRightArrow":"→","ShortUpArrow":"↑","shy":"­","Sigma":"Σ","sigma":"σ","sigmaf":"ς","sigmav":"ς","sim":"∼","simdot":"⩪","sime":"≃","simeq":"≃","simg":"⪞","simgE":"⪠","siml":"⪝","simlE":"⪟","simne":"≆","simplus":"⨤","simrarr":"⥲","slarr":"←","SmallCircle":"∘","smallsetminus":"∖","smashp":"⨳","smeparsl":"⧤","smid":"∣","smile":"⌣","smt":"⪪","smte":"⪬","smtes":"⪬","SOFTcy":"Ь","softcy":"ь","solbar":"⌿","solb":"⧄","sol":"/","Sopf":"𝕊","sopf":"𝕤","spades":"♠","spadesuit":"♠","spar":"∥","sqcap":"⊓","sqcaps":"⊓","sqcup":"⊔","sqcups":"⊔","Sqrt":"√","sqsub":"⊏","sqsube":"⊑","sqsubset":"⊏","sqsubseteq":"⊑","sqsup":"⊐","sqsupe":"⊒","sqsupset":"⊐","sqsupseteq":"⊒","square":"□","Square":"□","SquareIntersection":"⊓","SquareSubset":"⊏","SquareSubsetEqual":"⊑","SquareSuperset":"⊐","SquareSupersetEqual":"⊒","SquareUnion":"⊔","squarf":"▪","squ":"□","squf":"▪","srarr":"→","Sscr":"𝒮","sscr":"𝓈","ssetmn":"∖","ssmile":"⌣","sstarf":"⋆","Star":"⋆","star":"☆","starf":"★","straightepsilon":"ϵ","straightphi":"ϕ","strns":"¯","sub":"⊂","Sub":"⋐","subdot":"⪽","subE":"⫅","sube":"⊆","subedot":"⫃","submult":"⫁","subnE":"⫋","subne":"⊊","subplus":"⪿","subrarr":"⥹","subset":"⊂","Subset":"⋐","subseteq":"⊆","subseteqq":"⫅","SubsetEqual":"⊆","subsetneq":"⊊","subsetneqq":"⫋","subsim":"⫇","subsub":"⫕","subsup":"⫓","succapprox":"⪸","succ":"≻","succcurlyeq":"≽","Succeeds":"≻","SucceedsEqual":"⪰","SucceedsSlantEqual":"≽","SucceedsTilde":"≿","succeq":"⪰","succnapprox":"⪺","succneqq":"⪶","succnsim":"⋩","succsim":"≿","SuchThat":"∋","sum":"∑","Sum":"∑","sung":"♪","sup1":"¹","sup2":"²","sup3":"³","sup":"⊃","Sup":"⋑","supdot":"⪾","supdsub":"⫘","supE":"⫆","supe":"⊇","supedot":"⫄","Superset":"⊃","SupersetEqual":"⊇","suphsol":"⟉","suphsub":"⫗","suplarr":"⥻","supmult":"⫂","supnE":"⫌","supne":"⊋","supplus":"⫀","supset":"⊃","Supset":"⋑","supseteq":"⊇","supseteqq":"⫆","supsetneq":"⊋","supsetneqq":"⫌","supsim":"⫈","supsub":"⫔","supsup":"⫖","swarhk":"⤦","swarr":"↙","swArr":"⇙","swarrow":"↙","swnwar":"⤪","szlig":"ß","Tab":"\t","target":"⌖","Tau":"Τ","tau":"τ","tbrk":"⎴","Tcaron":"Ť","tcaron":"ť","Tcedil":"Ţ","tcedil":"ţ","Tcy":"Т","tcy":"т","tdot":"⃛","telrec":"⌕","Tfr":"𝔗","tfr":"𝔱","there4":"∴","therefore":"∴","Therefore":"∴","Theta":"Θ","theta":"θ","thetasym":"ϑ","thetav":"ϑ","thickapprox":"≈","thicksim":"∼","ThickSpace":" ","ThinSpace":" ","thinsp":" ","thkap":"≈","thksim":"∼","THORN":"Þ","thorn":"þ","tilde":"˜","Tilde":"∼","TildeEqual":"≃","TildeFullEqual":"≅","TildeTilde":"≈","timesbar":"⨱","timesb":"⊠","times":"×","timesd":"⨰","tint":"∭","toea":"⤨","topbot":"⌶","topcir":"⫱","top":"⊤","Topf":"𝕋","topf":"𝕥","topfork":"⫚","tosa":"⤩","tprime":"‴","trade":"™","TRADE":"™","triangle":"▵","triangledown":"▿","triangleleft":"◃","trianglelefteq":"⊴","triangleq":"≜","triangleright":"▹","trianglerighteq":"⊵","tridot":"◬","trie":"≜","triminus":"⨺","TripleDot":"⃛","triplus":"⨹","trisb":"⧍","tritime":"⨻","trpezium":"⏢","Tscr":"𝒯","tscr":"𝓉","TScy":"Ц","tscy":"ц","TSHcy":"Ћ","tshcy":"ћ","Tstrok":"Ŧ","tstrok":"ŧ","twixt":"≬","twoheadleftarrow":"↞","twoheadrightarrow":"↠","Uacute":"Ú","uacute":"ú","uarr":"↑","Uarr":"↟","uArr":"⇑","Uarrocir":"⥉","Ubrcy":"Ў","ubrcy":"ў","Ubreve":"Ŭ","ubreve":"ŭ","Ucirc":"Û","ucirc":"û","Ucy":"У","ucy":"у","udarr":"⇅","Udblac":"Ű","udblac":"ű","udhar":"⥮","ufisht":"⥾","Ufr":"𝔘","ufr":"𝔲","Ugrave":"Ù","ugrave":"ù","uHar":"⥣","uharl":"↿","uharr":"↾","uhblk":"▀","ulcorn":"⌜","ulcorner":"⌜","ulcrop":"⌏","ultri":"◸","Umacr":"Ū","umacr":"ū","uml":"¨","UnderBar":"_","UnderBrace":"⏟","UnderBracket":"⎵","UnderParenthesis":"⏝","Union":"⋃","UnionPlus":"⊎","Uogon":"Ų","uogon":"ų","Uopf":"𝕌","uopf":"𝕦","UpArrowBar":"⤒","uparrow":"↑","UpArrow":"↑","Uparrow":"⇑","UpArrowDownArrow":"⇅","updownarrow":"↕","UpDownArrow":"↕","Updownarrow":"⇕","UpEquilibrium":"⥮","upharpoonleft":"↿","upharpoonright":"↾","uplus":"⊎","UpperLeftArrow":"↖","UpperRightArrow":"↗","upsi":"υ","Upsi":"ϒ","upsih":"ϒ","Upsilon":"Υ","upsilon":"υ","UpTeeArrow":"↥","UpTee":"⊥","upuparrows":"⇈","urcorn":"⌝","urcorner":"⌝","urcrop":"⌎","Uring":"Ů","uring":"ů","urtri":"◹","Uscr":"𝒰","uscr":"𝓊","utdot":"⋰","Utilde":"Ũ","utilde":"ũ","utri":"▵","utrif":"▴","uuarr":"⇈","Uuml":"Ü","uuml":"ü","uwangle":"⦧","vangrt":"⦜","varepsilon":"ϵ","varkappa":"ϰ","varnothing":"∅","varphi":"ϕ","varpi":"ϖ","varpropto":"∝","varr":"↕","vArr":"⇕","varrho":"ϱ","varsigma":"ς","varsubsetneq":"⊊","varsubsetneqq":"⫋","varsupsetneq":"⊋","varsupsetneqq":"⫌","vartheta":"ϑ","vartriangleleft":"⊲","vartriangleright":"⊳","vBar":"⫨","Vbar":"⫫","vBarv":"⫩","Vcy":"В","vcy":"в","vdash":"⊢","vDash":"⊨","Vdash":"⊩","VDash":"⊫","Vdashl":"⫦","veebar":"⊻","vee":"∨","Vee":"⋁","veeeq":"≚","vellip":"⋮","verbar":"|","Verbar":"‖","vert":"|","Vert":"‖","VerticalBar":"∣","VerticalLine":"|","VerticalSeparator":"❘","VerticalTilde":"≀","VeryThinSpace":" ","Vfr":"𝔙","vfr":"𝔳","vltri":"⊲","vnsub":"⊂","vnsup":"⊃","Vopf":"𝕍","vopf":"𝕧","vprop":"∝","vrtri":"⊳","Vscr":"𝒱","vscr":"𝓋","vsubnE":"⫋","vsubne":"⊊","vsupnE":"⫌","vsupne":"⊋","Vvdash":"⊪","vzigzag":"⦚","Wcirc":"Ŵ","wcirc":"ŵ","wedbar":"⩟","wedge":"∧","Wedge":"⋀","wedgeq":"≙","weierp":"℘","Wfr":"𝔚","wfr":"𝔴","Wopf":"𝕎","wopf":"𝕨","wp":"℘","wr":"≀","wreath":"≀","Wscr":"𝒲","wscr":"𝓌","xcap":"⋂","xcirc":"◯","xcup":"⋃","xdtri":"▽","Xfr":"𝔛","xfr":"𝔵","xharr":"⟷","xhArr":"⟺","Xi":"Ξ","xi":"ξ","xlarr":"⟵","xlArr":"⟸","xmap":"⟼","xnis":"⋻","xodot":"⨀","Xopf":"𝕏","xopf":"𝕩","xoplus":"⨁","xotime":"⨂","xrarr":"⟶","xrArr":"⟹","Xscr":"𝒳","xscr":"𝓍","xsqcup":"⨆","xuplus":"⨄","xutri":"△","xvee":"⋁","xwedge":"⋀","Yacute":"Ý","yacute":"ý","YAcy":"Я","yacy":"я","Ycirc":"Ŷ","ycirc":"ŷ","Ycy":"Ы","ycy":"ы","yen":"¥","Yfr":"𝔜","yfr":"𝔶","YIcy":"Ї","yicy":"ї","Yopf":"𝕐","yopf":"𝕪","Yscr":"𝒴","yscr":"𝓎","YUcy":"Ю","yucy":"ю","yuml":"ÿ","Yuml":"Ÿ","Zacute":"Ź","zacute":"ź","Zcaron":"Ž","zcaron":"ž","Zcy":"З","zcy":"з","Zdot":"Ż","zdot":"ż","zeetrf":"ℨ","ZeroWidthSpace":"​","Zeta":"Ζ","zeta":"ζ","zfr":"𝔷","Zfr":"ℨ","ZHcy":"Ж","zhcy":"ж","zigrarr":"⇝","zopf":"𝕫","Zopf":"ℤ","Zscr":"𝒵","zscr":"𝓏","zwj":"‍","zwnj":"‌"} \ No newline at end of file diff --git a/main/mar/down/parse.hoon b/main/mar/down/parse.hoon new file mode 100644 index 000000000..5af275a38 --- /dev/null +++ b/main/mar/down/parse.hoon @@ -0,0 +1,1006 @@ +:: Core markdown parser, exposed as ++parse +:: +:::: + :: +=+ =~ +|% +++ loca |*(a=_,* ,[p=@u q=a]) +++ stack (list (loca tops)) +-- +|% +++ htm-enty :: XX belongs in zuse + ~+ + =- |= tub=nail ^- (like ,@t) %. tub :: export context + =+(poxa enty(ent mapping)) + ^- mapping=(map span ,@tF) + =+ pax=/==1%%/html5-entities/json :: XX %%/ + =+ maf=%.(pax ;~(biff file (soft ,@) poja (om so):jo)) + ?^ maf u.maf + ~& no-enty/pax + (mo amp/'&' quot/'"' apos/'\'' lt/'<' gt/'>' ~) :: fallback +:: +++ skem-symb (star ;~(pose dot alp)) +++ skem-set ~+ ^- (set cord) :: URI schemes + :: (sa `wain`/http/https/javascript) + =- (sa `wain`(rash - (more gah (cook crip skem-symb)))) + ''' + coap doi javascript aaa aaas about acap cap cid crid data dav dict dns file + ftp geo go gopher h323 http https iax icap im imap info ipp iris iris.beep + iris.xpc iris.xpcs iris.lwz ldap mailto mid msrp msrps mtqp mupdate news nfs + ni nih nntp opaquelocktoken pop pres rtsp service session shttp sieve sip sips + sms snmp soap.beep soap.beeps tag tel telnet tftp thismessage tn3270 tip tv + urn vemmi ws wss xcon xcon-userid xmlrpc.beep xmlrpc.beeps xmpp z39.50r + z39.50s adiumxtra afp afs aim apt attachment aw beshare bitcoin bolo callto + chrome chrome-extension content cvs com-eventbrite-attendee dlna-playsingle + dlna-playcontainer dtn dvb ed2k facetime feed finger fish gg git gizmoproject + gtalk hcp icon ipn irc irc6 ircs itms jar jms keyparc lastfm ldaps magnet maps + market message mms ms-help msnim mumble mvn notes oid palm paparazzi platform + proxy psyc query res resource rmi rsync rtmp secondlife sftp sgn skype smb + soldat spotify ssh steam svn teamspeak things udp unreal ut2004 ventrilo + view-source webcal wtai wyciwyg xfire xri ymsgr + ''' +:: +++ uri-skem (sear (flit |=(a=tape (~(has in skem-set) (cass a)))) skem-symb) +-- +:: +:::: + :: +!: |% +++ nal (just `@`10) +++ end (full (easy ~)) +++ eol ;~(pose (cold ~ nal) end) +::++ match |=(a=rege (curr scan (ra a))) +:: +++ tab + |= tub=nail + ^- (like cord) + ?. ?=([%9 *] q.tub) + (fail tub) + =+ sto=+((~(inv fe 1) (dec q.p.tub))) :: virt spaces produced + =+ neu=(weld (reap sto ' ') t.q.tub) + (next tub(q neu)) +:: +++ whif |*(a=_rule ;~(sfix a (star ace))) +++ ahed |*(a=_rule ;~(simu a (easy ~))) +++ opts |*(a=_rule ;~((bend) (easy ~) a)) +++ lots |*([a=@u b=_rule] ;~(pfix (stun [a a] b) (star b))) +++ leas |*(a=_rule ;~(pfix ;~(less (stun 4^4 ace) (stun 0^3 ace)) a)) +++ pech + |* a=_[rule rule] + |= tub=nail + ^- (like (each ,_(wonk (-.a)) ,_(wonk (+.a)))) + %. tub + ;~(pose (stag %& -.a) (stag %| +.a)) +:: +++ lite :: literal matched + |* a=_rule + |= tub=nail ^- (like tape) + =+ vex=(a tub) + ?~ q.vex vex + =+ tap=q.q.u.q.vex + =- vex(p.u.q -) + |- ^+ "" + ?: =(tap q.tub) ~ + ?~ q.tub !! + [i.q.tub $(q.tub t.q.tub)] +:: +++ enrule :: XX + |* a=$+(tape *) + |= tub=nail + ^- (like a) + [[0 0] ~ (a q.tub) [0 0] ~] +:: ++ vary :: XX types +:: |= a=tape +:: ?~ a !! :: XX cast to _(b) +:: |* b=_|=(_rule rule) +:: ?~ t.a (b (just i.a)) +:: ;~(pose (b (just i.a)) $(a t.a)) +:: +-- == + =~ +|% +++ strip + |= [a=$+(nail edge) b=tape] + ^- tape + =+ q:(a 1^1 b) + ?~(- b q.q.u.-) +:: +++ inli :: inline parsers + =+ [bug=| rec="" nol=|] + |_ ref=(map cord ,[p=tape q=(unit tape)]) + ++ unesc + |= a=tape + (scan a (star ;~(pose nore(rec ~) nal))) :: XX + :: + ++ esc + ;~ pfix bas + (mask "!\"#$%&'()*+,-./:;<=>?@[\\]^_`\{|}~") + == + ++ spec (mask rec) + ++ norc ~+ ;~(pose esc ;~(less spec prn)) + ++ nore ~+ ;~(pose htm-enty norc) + :: + ++ trim-sp + |= a=tape + ^- tape + %+ strip (star gah) + (flop (strip (star gah) (flop a))) + :: + ++ child + =< |= tub=nail ^- (like inline) %. tub :: expose parsers + %+ cook |=(a=inline ~?(bug a a)) + ;~(pose code line link blot:link htmt) + |% + ++ fens + |= a=tape + %+ knee *tape |. ~+ + |= tub=nail ^- (like tape) + =+ vex=((plus tec) tub) + ?~ q.vex + (plug (codc tub) ^^$) + ?: =(a p.u.q.vex) + vex(p.u.q ~) + =+ neu=|=(b=tape (weld `tape`p.u.q.vex b)) + ((cook neu ^^$) q.u.q.vex) + :: + ++ codc ;~(pose (cold ' ' (plus gah)) prn) + ++ code + =- ;~(pose - (stag %$ (plus tec))) + %+ stag %code + %+ cook trim-sp + |= tub=nail + ?. ?=([%'`' ^] q.tub) + (fail tub) + =+ vex=((plus tec) tub) + (pfix vex (fens (wonk vex))) + :: + ++ madn + |= a=mane ^- ? + => |=(b=span ?=(^ (rush b ;~(plug alf (star aln))))) + ?@ a (. a) + &((. -.a) (. +.a)) + :: + ++ htmt + %+ stag %htmt + =- (cook crip (lite -)) :: XX + %- sear :_ + ;~(pose empt:poxa (pech [head tail]:poxa)) + %- flit + |= a=$&([marx ~] $%([%& marx] [%| p=mane])) + ?- -.a + ^ (madn n.a) + & (madn n.a) + | (madn p.a) + == + :: + ++ line + %+ cold [%line ~] + ;~(plug ;~(pose (lots 2 ace) bas) nal) + :: + ++ empty + |= a=inline + ^- ? + ?& ?=(%$ -.a) + ?=(~ (strip (star ;~(pose ace nal)) p.a)) + == + :: + ++ link ::=+(blot=fail |=(nail (fail +<))) + =< =- |=(tub=nail (pra tub)) :: expose parsers + ?: nol pra=auto ::;~(pose auto pexp) + =- pra=;~(pose auto (cook - apex)) + |=([a=kids b=[tape (unit tape)]] [[%link b] a]) + |% + ++ apex + =+ ^- rob=$+(nail (like ,[kids $|(cord [tape (unit tape)])])) + ;~(plug text(nol &) labe) + :: + |= tub=nail + ^- (like (pair kids ,[tape (unit tape)])) + :: (fail tub) + =+ vex=(rob tub) + ?~ q.vex + vex + =- ?~(rez vex(q ~) vex(+.p.u.q u.rez)) + ^- rez=(unit ,[tape (unit tape)]) + =+ [~ atr]=(wonk vex) + ?^ atr + `atr + ?. ?=(~ atr) + (~(get by ref) atr) + =+ vux=(text:href tub) + ?~ q.vux ~ + (~(get by ref) (wonk vux)) + :: + ++ text + =. rec ['[' ']' rec] + (ifix sel^ser many) + :: + ++ titl (opts ;~(pfix (plus gah) titl:href)) + ++ labe + =+ wra=[;~(plug pel .) ;~(plug . per)]:(star gah) + ;~ pose + (ifix wra ;~(plug dest:href titl)) + ;~(pfix (star gah) text:href) + (easy '') + == + :: + ++ blot + %- cook :_ ;~(pfix zap [.(rob ;~(plug text labe))]:apex) + |=([a=kids b=[tape (unit tape)]] [[%blot b] a]) + :: + ++ mail + %+ cook |=(_[a="" b='' c="" d=*wall] :(welp a b^c (zing d))) + ;~ plug + (plus ;~(less (mask "\"\\ (),:;<>@[]") prn)) + pat + (plus alp) + (star ;~(plug dot (plus alp))) + == + :: + ++ auto + %+ ifix gal^gar + ;~ pose + (cook |=(a=tape [link/["mailto:{a}" ~] ~[`a]]) mail) + :: + =+ cha=;~(pose htm-enty ;~(less (mask "<> ") prn)) + %+ cook + |= a=_["" ""] + [link/[(weld a) ~] ~[`(weld a)]] + ;~(plug uri-skem col (star cha)) + == + :: + ++ pexp :: XX non-link nested + %- cook :_ (ifix sel^ser many) + |=(a=kids (reso:many "[" (welp a `"]" ~))) + -- + -- + :: + ++ href + =< |= tub=nail %. tub :: expose parsers + ;~ plug + ;~(sfix text col (star gah)) + (sear (flit |=(tape ?=(^ +<))) dest) + ;~(sfix (opts ;~(pfix (plus gah) titl)) (star ace) eol) + == + |% + ++ dest + ;~ pose + (ifix gal^gar (star ;~(pose esc nore(rec "<>")))) + (pexp nore(rec " ")) + == + ++ pexp + |* cha=_rule + =+ chu=;~(less pel per cha) + |- :: XX Chesterton fence + %+ knee *tape |. ~+ + ;~ pose + ;~(plug chu ^$) + ;~(plug pel (cook welp ;~(plug (star chu) per ^$))) + (easy ~) + == + ++ text + =- (ifix sel^ser (cook cass (star -))) + ;~ pose + (cook |=(a=char (cat 3 '\\' a)) esc) + (cold ' ' (plus gah)) + ;~(less sel ser prn) + == + ++ titl + %. ~[soq^soq doq^doq pel^per] + |* a=(pole ,_[rule rule]) + ?~ a fail + ;~ pose + (ifix -.a (star ;~(pose esc htm-enty ;~(less ->.a prn)))) + $(a +.a) + == + -- + ++ consol + |= a=kids + ^- kids + ?~ a ~ + ?+ -.i.a [i.a $(a t.a)] + %$ + ?~ t.a a + ?: ?=(_-.i.a -.i.t.a) + $(a t.a(p.i (weld p.i.a p.i.t.a))) + [i.a $(a t.a)] + == + ++ pars :: XX + => |% + ++ nufh ,[tape kids] + ++ fens ?(%'*' %'_') + ++ nuft ,[nufh ?(tape [tape ?(%| fens)])] + ++ reso + |= a=nufh + ^- kids + ?~ -.a +.a + [[%$ -.a] +.a] + :: + ++ veld + |= [a=$|(char inline) _[b c]=*nuft] + ^- nuft + :_ c + ?@ a + [[a -.b] +.b] + ?~ -.a + [(weld p.a -.b) +.b] + [~ a (reso b)] + :: + ++ rend + |= nuf=nufh + %. (reso nuf) + |= a=kids + ^- tape + ?~ a ~ + %- weld :_ $(a t.a) + ?@ -.i.a + ?+ -.i.a + ~ p.i.a + == + =+ [p q]=i.a + ?+ -.p "[{(trip -.p)}]<{$(a q)}>" + %emph "({$(a q)})" + == + -- + |= tap=tape ^- kids + =. tap (trim-sp tap) + =+ vex=(many 1^1 tap) + ?~ q.vex + ~ + =+ [a ~ b]=u.q.vex + ?~(b a (welp a [`b]~)) + :: + ++ many + => pars :: XX + |= tub=nail ^- (like kids) + =- [[0 0] ~ (reso -<) [0 0] ;;(tape ->)] :: XX + =+ [ins=`?(fens ~)`~ bof=| noz=|] + ?~ q.tub [`~ ~] + =+ [p=*char [i t]=[i t]:q.tub] :: prev current next + =< ?<(&(?=([* @] +) !?=(~ +>)) .) :: XX do type stuff + |^ ^- nuft + ?: ?=(?(%'*' %'_') i) + dlim + =+ elm=(;~(pose child ;~(pfix (star ace) nal) nore) [1 1] i t) + ?~ q.elm + done(t [i t]) :: XX next? + =+ [a ~ b]=u.q.elm + ~? bug [a b] + (push(t b) a) + :: + ++ next (push i) + ++ push :: continue with head + |= a=$|(char inline) + ^- nuft + ~? ?@(a | bug) fon/a + ?~ t (veld a done) + =: noz & + i i ::?+(i i fens p) + == + (veld a ^$(+< [i t])) + :: + ++ done [[~ ~] ?~(ins t [t %|])] + :: + ++ pull :: consume chunk + ^- nuft + ?> ?=(fens i) :: XX do type stuff + =: bof ?~(ins | |(bof !=(ins i))) + ins i + noz | + == + ?~ t + (veld i done) + $(+<+ t) + :: + ++ flome + |= a=_+:*nuft + ^- [(unit ?(%| fens)) tape] + ?. ?=([* ?(%| fens)] a) + [~ a] + [[~ +.a] -.a] + :: + ++ empa + |= a=nufh + ^- inline + [[%emph |] (reso a)] + :: + ++ ends + |= [a=tape b=tape] + ?: &(?=(^ b) =(i i.b)) + $(b t.b) + ?: &(?=(^ a) =(i i.a)) + $(a t.a) + ?> ?=(fens i) :: XX do type stuff + ?& |(?=(~ b) !=(' ' i.b)) + |(=('*' i) [?=(~ q)]:(aln 1^1 a)) + == + :: + ++ dlim + ^- nuft + ~? bug [&3 &2] + =+ clo=&(noz !=(~ ins) (ends t p ~)) :: can close delim + ?: &(clo =(ins i)) :: correct close + [`~ t] + ?: &(bof !=(ins i)) :: outer close + ?> ?=(fens i) :: XX do type stuff + [`~ t i] + ?~ t + (veld i done) + ?. (ends [p]~ t) + next + =+ [a tak]=pull + => .(t `_""`t) :: XX do type stuff + =^ b t (flome tak) + ?~ b + (push (empa a)) + ~? > bug clot/[a i t] + ?: =(i u.b) + (push (empa a)) + ?~ ins :: outermost + [a(- [i -.a]) t] ::(veld i a t) + [a(- [i -.a]) t u.b] ::(veld i a t u.b) + -- + :: + -- +-- +:: +:::: + :: +!: |% +++ nesting $% [%bloq *] :: Used for fishing + [%item *] + [%list [%item ~]] + == +++ accepting ?(%para %code) +++ list-nest :: can add list item? + =+ sam=[?>(?=(%list -.p..) p..)]:(tops [%list ~]~) :: XX do type stuff + |= [a=_sam b=_sam] ^- ? + .= ?@(q.a q.a q.q.a) :: by checking delimiter characters + ?@(q.b q.b q.q.b) + +:: =- =((cha p.a) (cha p.b)) +:: ^= cha +:: |= a=_sam +:: ?@(q.a q.a q.q.a) +:: +++ closes-code + =+ sam=[?>(?=(%code -) p..)]:(node [%code ~]) :: XX do type stuff + |= [a=_sam b=_sam] + ?~ a ?=(~ b) + ?~ b | + ?^ r.u.b | + ?& =(p.u.a p.u.b) + (gte q.u.b q.u.a) + == +:: +++ blank + |= a=tape ^- ? + ?~ a & + &(=(' ' i.a) $(a t.a)) +:: +++ dehax :: strip trailing hax + =+ nobas=;~(sfix (plus hax) ;~(pose ace end)) + |= a=tape + %- flop + :(strip nobas (star ace) (flop a)) +:: +++ scab + |* [a=tape b=_rule] + (wonk (b [1 1] a)) +:: +++ donp + |% + ++ blok + :~ %article %aside %blockquote %body %button %canvas %caption %col + %colgroup %dd %div %dl %dt %embed %fieldset %figcaption %figure + %footer %footer %form %h1 %h2 %h3 %h4 %h5 %h6 %header %hgroup + %hr %iframe %li %map %object %ol %output %p %pre %progress + %script %section %style %table %tbody %td %textarea %tfoot + %th %thead %tr %ul %video + == + ++ htm-head =+ blu=(flit ~(has in (sa `wain`blok))) + =+ blo=(sear blu (cook cass (star aln))) + %+ stag %html + ;~ plug gal + ;~ pose + ;~(plug blo ;~(pose fas gar gah)) + ;~(plug fas blo ;~(pose gar gah)) + (mask "?!") + == + == + ++ leaf (leas ;~(pose head hrul fcode)) :: any node + ++ head + %+ cook |=(a=tape [%head (lent a) ~]) + ;~(sfix (stun 1^6 hax) ;~(pose ace (ahed eol))) + ++ hrul + %+ cold [%hrul ~] + %. ~[tar hep cab] :: (vary "*-_") + |* a=(pole ,_rule) + ?~ a fail + ;~(pose ;~(plug (lots 3 (whif -.a)) (ahed eol)) $(a +.a)) + :: + ++ limar :: list marker + %+ stag %list + %- leas + %+ stag & + =- ;~(sfix - ;~(pose (ahed eol) ;~(sfix ace ;~(pose (leas) (easy))))) + ;~ pose + (mask "*+-") + ;~(plug dem (mask ".)")) + == + :: + ++ line + ;~(sfix (star prn) eol) + :: + ++ blomar + %+ cold [%bloq ~] + %- leas + ;~ pose + ;~(plug gar ace) + gar + == + ++ setext + %- leas + ;~(sfix ;~(pose (cold 2 (plus hep)) (cold 1 (plus tis))) (star ace)) + ++ icode (cold `node`[%code ~ ~] (stun 4^4 ace)) + ++ fcode + %. ~['`' '~'] :: (vary "`~") + |* a=(pole char) + ?~ a fail + =- ;~(pose fel $(a +.a)) + ^= fel + %- cook :_ ;~ plug + (lots 3 (just -.a)) + (star ;~(less tec prn)) + (ahed eol) + == + |= [b=(list) c=tape ~] + ^+ [?>(?=(%code -) .)]:*node :: XX do type stuff + [%code `[-.a (add 3 (lent b)) c] ~] + -- +:: +++ normalize + |= a=down ^- down + %+ turn a |= b=elem + ?^ -.b b(q (turn q.b ..$)) + =- ?+(-.b b %para b(p (- p.b)), %head b(q (- q.b))) + |= c=kids ^- kids + ?~ c ~ + ?: ?& ?=(^ t.c) + ?=(%$ -.i.c) + ?=(%$ -.i.t.c) + == + $(c t.c(p.i (weld p.i.c p.i.t.c))) + =. i.c + ?.(?=(%$ -.i.c) i.c [%$ (trip (crip p.i.c))]) :: XX valid tapes + :_ $(c t.c) + ?@ -.i.c i.c + =* d q.i.c + ?~ d + i.c + ?. ?& ?=([* ~] d) + ?=([%emph %|] -.i.c) + ?=([%emph %|] -.i.d) + == + i.c(q $(c d)) + [[%emph %&] $(c q.i.d)] +:: +++ parseb =>(parse .(bug &)) +++ parse + =+ [bug=| bugi=|] + |= tub=nail + =. q.tub + %+ scan q.tub :: tab hackery :: XX per line + (star ;~(pose prn tab nal)) + =| $: $: top=down :: finished toplevel elements + [sap=@u nod=node] :: spacing, currrent leaf block + cur=stack :: stack of nested current blocks + == + [bun=_| hat=_|] :: prev blank? halt? + ref=(map cord ,[p=tape q=(unit tape)]) :: link references + == + |^ ^- (like ,_top) + ?. hat + $:eat-line + ?^ cur + $:pop + => cull + =- [p.tub `[- tub]] + (flop (turn top (proc-inline [-(bug bugi)]:[~(pars inli ref) .]))) + :: + ++ self . + :: + ++ halt .(hat &) + :: + ++ debu [&2 &2.-]:&2 + :: + ++ proc-inline :: parse inline kids + |= pac=_pars:inli :: cache + |= a=elem + ?^ -.a a(q (flop (turn q.a ..$))) + ?+ -.a a + %code + ?~ p.a a + a(r.u.p (unesc:inli r.u.p.a)) + %para + ?> ?=([[%$ *] ~] p.a) :: XX do type stuff + a(p (pac p.i.p.a)) + %head + ?~ q.a a + ?> ?=([[%$ *] ~] q.a) :: XX do type stuff + a(q (pac p.i.q.a)) + == + :: + ++ snack :: advance by parser + |* a=_rule + ^- [(unit ,_(wonk (a))) nail] + =+ vex=(a tub) + ?~ q.vex [~ tub] + [`p q]:u.q.vex + :: + ++ snake :: advance with trace + |* fel=_rule + =- (snack (here - fel)) + |*([[[@ a=@u] [@ b=@u]] c=*] [p=(sub b a) q=c]) + :: + :: + ++ pop :: resolve container + ^+ self + => cull + ?~ cur self + =- => .(cur t.cur, q.p.tub p.i.cur) + ?~ cur self(top [hed top]) + self(q.q.i.cur [hed q.q.i.cur]) + ^- hed=tops + =+ cub=q.i.cur + ?+ -.p.cub cub + %list + %_ cub + p.p + p.p.cub :: XX set this upon parsing blank-headed block + == + == + :: + ++ bye :: resolution arms + |% + ++ leaf :: resolve node + ^+ self + =^ nol nod + [nod [%defn ~]] + ?: ?=(%defn -.nol) self + ~? > bug clod/[nol tub] + ?~ cur self(top [nol top]) + self(q.q.i.cur [nol q.q.i.cur]) + :: + ++ pop-til :: unwind stack + |= a=stack + ^+ self + ?~ cur self + ?: =(a cur) self + $(self pop) + :: + ++ top-list + =+ laz=cur + |- + ?~ cur laz + =. laz ?:(?=(%list -.p.q.i.cur) cur laz) + $(cur t.cur) + :: + ++ top-bloq + =+ laz=cur + |- + ?~ cur laz + =. laz ?:(?=(%bloq -.p.q.i.cur) cur laz) + $(cur t.cur) + -- + :: + ++ cull :: resolve node block + =< leaf:bye + ^+ self + =. sap 0 + ?+ -.nod self + %html + self(p.nod (flop p.nod)) + %code + =< self(q.nod (flop q.nod)) + |- + ?^ p.nod . + ?~ q.nod . + ?: (blank (trip i.q.nod)) $(q.nod t.q.nod) + . + %para + ?~ p.nod self(nod [%defn ~]) + =+ olt=tub + =. q.tub + =- (trip (role -)) + %+ turn + ;;((list ,[%$ p=tape]) (flop p.nod)) :: XX do type stuff + |=([@ a=tape] (crip a)) + |- ^+ self + =^ ren tub (snack (leas href):inli) + ?^ ren + ?: (~(has by ref) -.u.ren) $ + $(ref (~(put by ref) u.ren)) + =. q.tub (strip (star gah) q.tub) + ?~ q.tub self(nod [%defn ~], tub olt) + self(nod [%para [%$ q.tub]~], tub olt) + == + :: + ++ push :: open block + |= nit=(loca ,_p:*tops) ^+ +> + =. self cull + =+ toz=[q.nit ~] + ?. ?=([%list ^] q.nit) + (shove p.nit toz) + =. self (shove p.nit toz) + (shove p.nit [%item ~]~) + :: + ++ shove + |= a=(loca tops) ^+ +> + ?~ cur +>(cur [a cur]) + :: =* cub q.i.cur + ?. ?=(nesting [-.p.q.i.cur -.q.a]) + $(+> pop) + +>(cur [a cur]) + :: + ++ pump :: push leaf block + |= a=$&([p=node q=@u] node) + ^+ +> + =+ nex=cull + ?@ -.a nex(nod a) + nex(nod p.a, sap q.a) + :: + ++ match :: check top element + |= a=elem ^- ? + ?~ cur | + =(-.a -.q.i.cur) + :: + :: + ++ collapse :: skim elems off top + |= a=(list (pair ,@ tops)) ^+ +> + ?~ a +> + :: ?: ?=([[@ *] ~] a) +> + ~? bug yank/[i.a blos] + ?> (match q.i.a) + :: ~& [%no-match a cur] + :: !! + $(a t.a, +> pop) + :: + ++ offset + ^- @u + ?~ cur 0 + ?: ?=(%bloq -.p.q.i.cur) + p.i.cur + offset(cur t.cur) + :: + ++ delist (pop-til top-list):bye + ++ debloq + |= ruc=_(flop cur) + ^+ self + ?~ ruc self + ?. ?=(%bloq -.p.q.i.ruc) + $(ruc t.ruc) + (collapse (flop ruc)) + :: + ++ nil-li + ?& ?=(%defn -.nod) + ?=(^ cur) + ?=([[%item ~] ~] q.i.cur) + == + ++ widen ^+ cur :: list loosening + =< ?~ cur ~ + ?. ?=(%item -.p.q.i.cur) + (. cur) + [i.cur (. t.cur)] + |= a=_cur ^+ a + ~? > bug naro/[debu nil-li a cur] + ?~ a a + ?: ?=([[%item ~] ~] q.i.a) + a + ?. ?=(%list -.p.q.i.a) + [i.a $(a t.a)] + a(p.p.q.i |) + :: + ++ blos :: extract elem list + (flop (turn cur |*([@ a=tops] a))) + :: + ++ eat-line :: high-level line nom + ^+ . + ~? >> bug line/curlin + :: => [bup=bun sepa:eat] + :: ?: bun:+ + :: blank line nommed + :: =< .(bun |) + :: =. bun bup + ~? bug line-stat/[debu cur] + ?: ?=(%html -.nod) + =+ sep=(sepa:eat) + ?: bun.sep sep + span:eat.+ + => [ruc .]=olds:eat + ?: &(?=(~ ruc) ?=([%code ^ *] nod)) + code:eat + =+ sep=(sepa:eat ruc) + ?: bun.sep + ~? bug nilli/[debu nil-li nod cur]:sep + =. bun.sep + ?^(ruc & ?^(cur | !nil-li:sep)) :: XX Chesterton fence + sep + =< .(bun |) + =~ [ruc=ruc sep(bun bun)] + (lazy:eat ruc) + news:eat + node:eat + span:eat + :: ~? bug seated/[nod blos] . + == + :: + ++ curlin (scab q.tub (star prn)) + ++ eat + |% + ++ sepa :: consume blank line + |= ruc=_(flop cur) ^+ self + ?: ?=([%code ^ *] nod) :: ignore in blocks + self + =^ buf tub (snack ;~(sfix (star ace) nal)) + ?~ buf + self(bun |) + ~? bug seat/cur + =. self + ?: bun + delist + =. bun & + (debloq ruc) + ?+ -.nod self + %para cull + %html cull + %code =- self(q.nod -) + ?~ q.nod q.nod + [(crip (slag 4 u.buf)) q.nod] + == + :: + ++ horz :: horizontal rule + ^+ self + =^ neu tub (snack (leas hrul:donp)) + ?~ neu self + (pump u.neu) + :: + ++ olds :: previous nest levels + =+ [ruc=(flop cur) ovs=0] + |- ^+ [ruc self] + ?: =(~ q.tub) + [~ halt] + ?~ ruc [ruc self] + ~? bug heat/[debu q.i.ruc cur] + ?- -.p.q.i.ruc + %bloq + =^ neu tub (snack blomar:donp) + ?^ neu $(ruc t.ruc, ovs p.i.ruc) + [ruc self] + %list + ?~ t.ruc !! + :: $(t.ruc [p.i.ruc [%item ~] ~]~) :: XX why this + ?> ?=(%item -.p.q.i.t.ruc) + ~? bug leat/[p.i.t.ruc debu] + =^ den tub (snack (stun [p p]:i.t.ruc ace)) + ?^ den $(ruc t.t.ruc) + ?. =(self horz) [ruc self] :: XX efficiency + ?: ?=([%code ^ *] nod) + [~ self] :: XX correct? + =^ neu tub (snake limar:donp) + ?~ neu [ruc self] + => .(q.u.neu ^+(p.q.i.ruc q.u.neu)) :: XX do type stuff + ?. (list-nest p.q.i.ruc q.u.neu) + =. self (collapse (flop ruc)) + [~ (push u.neu)] + =. self (collapse (flop t.ruc)) + [~ (push p.u.neu [%item ~])] + %item + !! + == + :: + ++ aces |=(a=@u ^+(tub +:(snack (stun 0^a ace)))) :: nom optional leading + :: + ++ lazy :: errant prev bloqs + |= ruc=(list (pair ,@ tops)) + ^+ self + ~? bug laze/[debu ruc] + ?. ?=(%para -.nod) + (collapse (flop ruc)) + ?: |([?=(^ -)]:lead [?=(^ -)]:(snack leaf:donp)) :: XX efficiency + (collapse (flop ruc)) + :: =. tub +:(snack (star ace)) + self + ::self(tub (aces p.i.cur)) :: XX correct? + :: =< (collapse (flop ruc)) + :: |- ^+ . + :: ?~ ruc ..$ + :: ?. ?=([%bloq ~] -.q.i.ruc) + :: ..$ + :: $(ruc t.ruc) + :: + ++ lead :: enter into tops + %- snake + => donp + ;~(plug ;~(pose blomar limar)) + :: + ++ news :: enter nest levels + |- ^+ self + ?. =(self horz) self :: XX efficiency + =^ neu tub + lead + ?~ neu + self + =. bun | :: don't wide new lists + $(self (push u.neu)) + :: + ++ node :: consume leaf node + ^+ self + ~? bug neat/curlin + ::=. self ?.(bun self cull) + ?^ [q]:((leas htm-head):donp tub) :: XX efficiency + (pump [%html ~]) + =+ ^= hez + %+ stag %heas + ?. ?=([%para [%$ *] ~] nod) + fail + ;~(plug setext:donp (cold p.nod (ahed eol))) + =+ ico=?:(?=(%para -.nod) fail icode:donp) + =+ saf=q.p.+:(snack (star ace)) :: XX efficiency + =^ neu tub + (snack ;~(pose hez ico leaf:donp)) + ~? bug feat/[bun saf blos neu] + =. cur + ?.(bun cur widen) + ?~ neu + =. tub +:(snack (star ace)) + ?. ?=(%para -.nod) + cull + self + ?+ -.u.neu (pump u.neu) + %heas self(nod u.neu(- %head)) :: replace extant para + %code ?^ p.u.neu + (pump u.neu (dec saf)) + ?: ?=([%code ~ *] nod) + self + (pump u.neu) + == + :: + ++ code + ^+ self + ?> ?=([%code ^ *] nod) :: XX do type stuff + ~? bug ceas/[sap] + =. tub (aces sap) + =+ [neu tup]=(snack ;~(sfix (leas fcode):donp eol)) + ?: &(?=(^ neu) (closes-code p.nod p.u.neu)) + =. q.nod q.nod + cull(tub tup) + =^ buf tub (snack ;~(sfix (star ace) nal)) + ?^ buf + self(q.nod [(crip u.buf) q.nod]) + span + :: + ++ span :: raw text + ^+ self + ?: =(~ q.tub) halt + =^ lin tub + (snack line:donp) + ?~ lin + halt + ~? bug adva/u.lin + |- + ?~ u.lin + ?+ -.nod cull + %code self + %html self(p.nod ['' p.nod]) + == + ?+ -.nod (pump para/~[`u.lin]) + %para self(p.nod :_(p.nod `u.lin)) + %head ?^ q.nod $(self cull) + self(q.nod [`(dehax u.lin)]~) + %code self(q.nod :_(q.nod (crip u.lin))) + %html self(p.nod :_(p.nod (crip u.lin))) + == + :: + -- +-- -- + == diff --git a/main/mar/down/rend.hoon b/main/mar/down/rend.hoon new file mode 100644 index 000000000..2817e4fe3 --- /dev/null +++ b/main/mar/down/rend.hoon @@ -0,0 +1,222 @@ +:: ++down rendering arms +:: +:::: + :: +|% +++ into-inner + |= [a=marl b=manx] + ?~ c.b b(c a) + $(b i.c.b) +:: +++ flat + |= a=marl + ^- tape + ?~ a ~ + %- weld :_ $(a t.a) + ^- tape + ?~ n.g.i.a + ?>(?=(_:/(**) i.a) v.i.a.g.i.a) + ?+ n.g.i.a $(a c.i.a) + %img + %- zing ^- wall + %+ murn a.g.i.a |= [a=mane b=tape] + ^- (unit tape) + ?+ a ~ + %alt [~ b] + == + == +:: +++ sang :: tight item children + |= a=(list elem) + ^- marl + ?~ a ~ + %- weld :_ $(a t.a) + ?. ?=(%para -.i.a) + (sing i.a ~) + (sung p.i.a) +:: +++ sing :: elem to manx + => |% + ++ first-word + |= a=tape + =. a (trip (crip a)) :: XX valid tapes + ^- (unit tape) + =. a q.q:(need q:((star ace) [1 1] a)) + =+ vex=((plus ;~(less ace prn)) [1 1] a) + ?~ q.vex ~ + (some (wonk vex)) + -- + =+ [tig=| had=*(unit mane)] + |= lum=(list elem) + |^ ^- marl + =+ a=apex + ?~ q.a + p.a + (weld p.a $(lum q.a)) + :: + ++ apex + ^- [p=marl q=_lum] + ?~ lum + ?~ had [~ ~] + (lose "unclosed {}") + => [ele=i.lum .(lum t.lum)] + ?. ?=(%html -.ele) + (push (reso ele) ~) + =+ tex=(trip (role p.ele)) + =^ mar tex [p q.q]:(need q:(many:poxa 1^1 tex)) + ?^ mar + (push mar) + =^ hed lum (chomp tex head:poxa) + ?^ hed + =+ max=`marx`u.hed + (push(lum q) [max p] ~):[apex(had `n.max) .] + =^ tal lum (chomp tex tail:poxa) + ?~ tal + (push ;lost:"{tex}" ~) + ?: =(had tal) + [~ lum] + ?^ had + =. lum [ele lum] + (lose "unclosed {}") + (lose "close {}") + :: + ++ lose |=(a=tape [[;lost:"{a}"]~ lum]) + ++ chomp + |* [tap=tape fel=_rule] + ^- [(unit ,_(wonk *fel)) _lum] + =+ vex=(fel 1^1 tap) + ?~ q.vex [~ lum] + :- [~ (wonk vex)] + ?~(q.q.u.q.vex lum [[%html (crip q.q.u.q.vex) ~] lum]) + :: + ++ push + |= a=marl + ^+ apex + ?~ a apex + [[b p] q]:[b=i.a (push t.a)] + :: + ++ reso + |= a=elem + ?^ -.a + =. tig ?.(?=(%list -.p.a) tig p.p.a) + ?: &(tig ?=(%item -.p.a)) + [/li (sang q.a)] + %+ into-inner ^$(lum q.a) + ?- -.p.a + %bloq ;blockquote; + %item ;li; + %list ?@ q.p.a ;ul; + ?: =(1 p.q.p.a) ;ol; + =+ num=(pojo (jone p.q.p.a)) + ;ol(start num); + == + ?- -.a :: :/("unimplemented {}") + %html !! :: handled earlier XX do type stuff + %para [/p (sung p.a)] + %head [/(add %h0 (lsh 3 1 p.a)) (sung q.a)] + %hrul ;hr; + :: %html + ::=+ tex=(role (turn p.a crip)) + ::=+ (poxa tex) + ::?^ - u.- + ::=+ (rush tex (star ;~(pose gah comt:poxa))) + ::?^ - :/(~) + ::;lost: {} + :: :/([(role (turn p.a crip))]~) :: XX haaaaaaack + %defn :/(~) + %code =+ lan=?~(p.a ~ (first-word r.u.p.a)) + =+ tex=(trip (role q.a)) + ?~ lan ;pre:code:"{tex}" + ;pre:code(class "language-{u.lan}"):"{tex}" + + == + -- +:: +++ sung + |= lim=kids + =+ had=*(unit mane) + |^ ^- marl + =+ a=apex + ?~ q.a + p.a + (weld p.a $(lim q.a)) + :: + ++ apex + ^- [p=marl q=_lim] + ?~ lim + ?~ had [~ ~] + (lose "unclosed {}") + => [ele=i.lim .(lim t.lim)] + ?. ?=(%htmt -.ele) + ?: &(?=(%$ -.ele) ?=([[%$ *] *] lim)) + apex(p.i.lim (weld p.ele p.i.lim)) + (push (reso ele) ~) + =+ tex=(trip p.ele) + =^ emo lim (chomp tex empt:poxa) + ?^ emo + =+ man=`manx`u.emo + (push man ~) + =^ hed lim (chomp tex head:poxa) + ?^ hed + =+ max=`marx`u.hed + (push(lim q) [max p] ~):[apex(had `n.max) .] + =^ tal lim (chomp tex tail:poxa) + ?~ tal + (push ;lost:"{tex}" ~) + ?: =(had tal) + [~ lim] + ?^ had + =. lim [ele lim] + (lose "unclosed {}") + (lose "close {}") + :: + ++ lose |=(a=tape [[;lost:"{a}"]~ lim]) + ++ chomp + |* [tap=tape fel=_rule] + ^- [(unit ,_(wonk *fel)) _lim] + =+ vex=(fel 1^1 tap) + ?~ q.vex [~ lim] + :- [~ (wonk vex)] + ?~(q.q.u.q.vex lim [[%htmt (crip q.q.u.q.vex)] lim]) + :: + ++ push + |= a=marl + ^+ apex + ?~ a apex + [[b p] q]:[b=i.a (push t.a)] + :: + ++ urly + |= a=tape ^- tape + ?~ a ~ + :: ?: (gth i.a 0xff) "XX" :: XX + ?: ?| [?=(^ q)]:(alp 1^1 a) + (~(has in (sa "!*'();:@&=+$,/?#%.~_")) i.a) :: XX reparse + == + [i.a $(a t.a)] + (weld (urle (trip i.a)) $(a t.a)) + :: + ++ reso + |= b=inline + ^- manx + ?@ -.b + ?- -.b + %$ :/(p.b) + %line ;br; + %code ;code:"{p.b}" + %htmt !! ::p.b :: handled earlier :: XX do type stuff + == + ?: ?=(%blot -.p.b) + =+ res=`manx`;img(src (urly p.p.b), alt (flat (turn q.b ..$))); + :: ;img@"{p.p.b}"; + ?~ q.p.b res + res(a.g (welp a.g.res title/u.q.p.b ~)) + %+ into-inner (sung q.b) + ?- p.b + [%emph ?] ?.(p.p.b ;em; ;strong;) + [%delt ~] ;del; + [%link ^] =+ url=(urly p.p.b) + ?~ q.p.b ;a/"{url}"; + ;a/"{url}"(title u.q.p.b); + == + -- +-- diff --git a/main/mar/radio-command/door.hook b/main/mar/radio-command/door.hook new file mode 100644 index 000000000..b9101b821 --- /dev/null +++ b/main/mar/radio-command/door.hook @@ -0,0 +1,74 @@ +:: +:::: /hook/door/radio-command/mar + :: +/? 314 +/- *radio +!: +|_ cod=command +:: +++ grab :: convert from + |% + ++ noun command :: clam from %noun + ++ json + => [jo ..command] + |= a=json ^- command + =- (need ((of -) a)) + =< :~ publish/(ar thot) + review/(ar thot) + design/(ot party/so config/(mu conf) ~) + ping/auri + == + |% + ++ as :: array as set + :: |*(a=fist (cu sa (ar a))) :: XX types + |* a=fist + %- cu :_ (ar a) + ~(gas in *(set ,_(need *a))) + :: + ++ lake |*(a=_,* $+(json (unit a))) + ++ peach + |* a=_[rule rule] + |= tub=nail + ^- (like (each ,_(wonk (-.a)) ,_(wonk (+.a)))) + %. tub + ;~(pose (stag %& -.a) (stag %| +.a)) + :: + ++ thot + ^- $+(json (unit thought)) + %- ot :~ + serial/(ci (slat %uv) so) + audience/audi + statement/stam + == + :: + ++ audi (op stati (ci (soft delivery) so)) :: audience + ++ auri (op stati (ci (soft presence) so)) + :: + ++ stati + ^- $+(nail (like station)) + %+ peach + ;~((glue fas) ;~(pfix sig fed:ag) urs:ab) + %+ sear (soft partner) + ;~((glue fas) sym urs:ab) :: XX [a-z0-9_]{1,15} + :: + ++ stam + ^- $+(json (unit statement)) + =- (ot now/di speech/(of -) ~) + :~ own/so + say/so + exp/(cu |=(a=cord [a ~]) so) + inv/(ot ship/(su fed:ag) party/(su urs:ab) ~) + == + :: + :: + ++ conf + ^- $+(json (unit config)) + %- ot :~ + sources/(as (su stati)) + :- %cordon + %+ cu |*(a=^ ?~(-.a a a)) :: XX do type stuff + (ot white/bu list/(as (su fed:ag)) ~) + == + -- +-- -- + diff --git a/main/mar/radio-report/door.hook b/main/mar/radio-report/door.hook new file mode 100644 index 000000000..ca125c550 --- /dev/null +++ b/main/mar/radio-report/door.hook @@ -0,0 +1,92 @@ +:: +:::: /hook/door/radio-report/mar + :: +/? 314 +/- *radio +!: +|_ rep=report +:: +++ grab :: convert from + |% + ++ noun report :: clam from %noun + -- +++ grow + |% + ++ mime [/text/json (taco (crip (pojo json)))] + ++ json + => + + |^ %+ joba -.rep + ?- -.rep + %config ~! rep (conf +.rep) + %house [%a (turn (~(tap by +.rep)) joce)] + %grams (jobe num/(jone p.rep) tele/[%a (turn q.rep gram)] ~) + ::%group (grop +.rep) + %group (jobe local/(grop p.rep) global/%.(q.rep (jome stan grop)) ~) + == + ++ joce |=(a=span [%s a]) + ++ jope |=(a=ship (jape +:)) ::[%s (crip +:(scow %p a))]) + ++ joke |=(a=tank [%s (role (turn (wash 0^80 a) crip))]) + ++ jode |=(a=time (jone (div (mul (sub a ~1970.1.1) 1.000) ~s1))) +:: ++ jase +:: |* a=,json +:: |= b=(set ,_+<.a) ^- json +:: ~! b +:: [%a (turn (~(tap in b)) a)] + :: + ++ jome :: stringify keys + |* [a=_cord b=_json] + |= c=(map ,_+<.a ,_+<.b) + (jobe (turn (~(tap by c)) (both a b))) + :: + ++ both :: cons two gates + |* [a=_,* b=_,*] + |=(c=_[+<.a +<.b] [(a -.c) (b +.c)]) + :: + :: + ++ grop (jome phon stas) :: (map ship status) + ++ phon |=(a=ship (scot %p a)) + ++ stas |=(status (jobe presence/(joce p) human/(huma q) ~)) + ++ gram |=(telegram (jobe ship/(jope p) thought/(thot q) ~)) + ++ thot + |= thought + (jobe serial/(jape

) audience/(audi q) statement/(stam r) ~) + :: + ++ audi (jome stan joce) + ++ stan + |= a=station ^- cord + %- crip + ?~ -.a "{}/{(trip q.p.a)}" + ?- -.p.a + %twitter "{(trip -.p.a)}/{(trip p.p.a)}" + == + :: + ++ stam |=(statement (jobe time/(jode p) speech/(spec q) ~)) + ++ spec + |= a=speech + %+ joba -.a + ?- -.a + ?(%own %say) [%s p.a] + %exp (jobe code/[%s p.a] done/?~(q.a ~ (joke u.q.a)) ~) + %inv (jobe ship/(jope p.a) party/[%s q.a] ~) + == + :: + ++ huma + |= human + %^ jobe + hand/?~(hand ~ [%s u.hand]) + :- %true + ?~ true ~ + =+ u.true + (jobe first/[%s p] middle/?~(q ~ [%s u.q]) last/[%s r] ~) + ~ + :: + ++ conf + |= config + %- jobe :~ + sources/[%a (turn (~(tap in sources)) |=(a=station [%s (stan a)]))] + =- cordon/(jobe white/[%b -.cordon] list/[%a -] ~) + (turn (~(tap in p.cordon)) jope) :: XX jase + == + -- +-- -- + diff --git a/main/mar/rodeo-command/door.hook b/main/mar/rodeo-command/door.hook new file mode 100644 index 000000000..87ee79c0d --- /dev/null +++ b/main/mar/rodeo-command/door.hook @@ -0,0 +1,90 @@ +:: +:::: /hook/door/rodeo-command/mar + :: +/? 314 +/- *rodeo +!: +|_ cod=command +:: +++ grab :: convert from + |% + ++ noun command :: clam from %noun + ++ json + => [jo ..command] + |= a=json ^- command + =- (need ((of -) a)) + =< :~ publish/(ar thot) + review/(ar thot) + design/(ot party/so config/(mu conf) ~) + == + |% + ++ op :: parse keys of map + |* [fel=_rule wit=fist] + %+ cu mo + %- ci :_ (om wit) + |= a=(map cord ,_(need *wit)) + ^- (unit (list ,_[(wonk *fel) (need *wit)])) + (zl (turn (~(tap by a)) (head-rush fel))) + :: + ++ as :: array as set + :: |*(a=fist (cu sa (ar a))) :: XX types + |* a=fist + %- cu :_ (ar a) + ~(gas in *(set ,_(need *a))) + :: + ++ lake |*(a=_,* $+(json (unit a))) + ++ peach + |* a=_[rule rule] + |= tub=nail + ^- (like (each ,_(wonk (-.a)) ,_(wonk (+.a)))) + %. tub + ;~(pose (stag %& -.a) (stag %| +.a)) + :: + ++ head-rush + |* a=_rule + |* [b=cord c=*] + =+ nit=(rush b a) + ?~ nit ~ + (some [u.nit c]) + :: + :: + ++ thot + ^- $+(json (unit thought)) + %- ot :~ + serial/(ci (slat %uv) so) + audience/audi + statement/stam + == + :: + ++ audi (op parn memb) :: audience + ++ auri (op parn (ci (soft presence) so)) + ++ memb (ot envelope/lope delivery/(ci (soft delivery) so) ~) + ++ lope (ot visible/bo sender/(mu (su parn)) ~) + :: + ++ parn + ^- $+(nail (like partner)) + %+ peach + ;~((glue fas) ;~(pfix sig fed:ag) urs:ab) + %+ sear (soft passport) + ;~((glue fas) sym urs:ab) :: XX [a-z0-9_]{1,15} + :: + ++ stam + ^- $+(json (unit statement)) + =- (ot date/di bouquet/(as (ar so)) speech/(of -) ~) + :~ lin/(ot say/bo txt/so ~) + :: exp/(cu |=(a=cord [a ~]) so) + :: inv/(ot ship/(su fed:ag) party/(su urs:ab) ~) + == + :: + :: + ++ conf + ^- $+(json (unit config)) + %- ot :~ + sources/(as (su parn)) + caption/so + :- %cordon + (ot posture/(ci (soft posture) so) list/(as (su fed:ag)) ~) + == + -- +-- -- + diff --git a/main/mar/rodeo-report/door.hook b/main/mar/rodeo-report/door.hook new file mode 100644 index 000000000..e6f06eace --- /dev/null +++ b/main/mar/rodeo-report/door.hook @@ -0,0 +1,109 @@ +:: +:::: /hook/door/rodeo-report/mar + :: +/? 314 +/- *rodeo +!: +|_ rep=report +:: +++ grab :: convert from + |% + ++ noun report :: clam from %noun + -- +++ grow + |% + ++ mime [/text/json (taco (crip (pojo json)))] + ++ json + => + + |^ %+ joba -.rep + ?- -.rep + %config ~! rep (conf +.rep) + %house a/(turn (~(tap by +.rep)) jose) + %grams (jobe num/(jone p.rep) tele/[%a (turn q.rep gram)] ~) + %group (jobe local/(grop p.rep) global/%.(q.rep (jome parn grop)) ~) + == + ++ joce |=(a=span [%s a]) + ++ jose + |= [a=span b=posture c=cord] + (jobe name/[%s a] posture/[%s a] caption/[%s b] ~) + :: + ++ jove + |= [a=envelope b=delivery] + %- jobe :~ + envelope/(jobe visible/[%b p.a] sender/?~(q.a ~ s/(parn u.q.a)) ~) + delivery/[%s b] + == + ++ jope |=(a=ship (jape +:)) ::[%s (crip +:(scow %p a))]) + ++ joke |=(a=tank [%s (role (turn (wash 0^80 a) crip))]) + ++ jode |=(a=time (jone (div (mul (sub a ~1970.1.1) 1.000) ~s1))) +:: ++ jase +:: |* a=,json +:: |= b=(set ,_+<.a) ^- json +:: ~! b +:: [%a (turn (~(tap in b)) a)] + :: + ++ jome :: stringify keys + |* [a=_cord b=_json] + |= c=(map ,_+<.a ,_+<.b) + (jobe (turn (~(tap by c)) (both a b))) + :: + ++ both :: cons two gates + |* [a=_,* b=_,*] + |=(c=_[+<.a +<.b] [(a -.c) (b +.c)]) + :: + :: + ++ grop (jome phon stas) :: (map ship status) + ++ phon |=(a=ship (scot %p a)) + ++ stas |=(status (jobe presence/(joce p) human/(huma q) ~)) + ++ gram |=(telegram (jobe ship/(jope p) thought/(thot q) ~)) + ++ thot + |= thought + (jobe serial/(jape

) audience/(audi q) statement/(stam r) ~) + :: + ++ audi (jome parn jove) + ++ bouq + |= a=bouquet + a/(turn (~(tap in a)) |=(b=path a/(turn b |=(c=span s/c)))) + :: + ++ parn + |= a=partner ^- cord + %- crip + ?~ -.a "{}/{(trip q.p.a)}" + ?- -.p.a + %twitter "{(trip -.p.a)}/{(trip p.p.a)}" + == + :: + ++ stam + |= statement + (jobe date/(jode p) bouquet/(bouq q) speech/(spec r) ~) + :: + ++ spec + |= a=speech + %+ joba -.a + ?+ -.a !! + %lin (jobe say/[%b p.a] txt/[%s q.a] ~) + %exp (jobe code/[%s p.a] ~) + :: %inv (jobe ship/(jope p.a) party/[%s q.a] ~) + == + :: + ++ huma + |= human + %^ jobe + hand/?~(hand ~ [%s u.hand]) + :- %true + ?~ true ~ + =+ u.true + (jobe first/[%s p] middle/?~(q ~ [%s u.q]) last/[%s r] ~) + ~ + :: + ++ conf + |= config + %- jobe :~ + sources/[%a (turn (~(tap in sources)) |=(a=partner [%s (parn a)]))] + caption/[%s caption] + =- cordon/(jobe posture/[%s -.cordon] list/[%a -] ~) + (turn (~(tap in q.cordon)) jope) :: XX jase + == + -- +-- -- + diff --git a/main/mar/term-in/door.hook b/main/mar/term-in/door.hook index 765db215b..9f69f737d 100644 --- a/main/mar/term-in/door.hook +++ b/main/mar/term-in/door.hook @@ -13,7 +13,7 @@ %- need %. jon => jo %^ ot - pax/(su ;~(pfix fas (more fas sym))) + pax/(su ;~(pose (cold ~ (full fas)) (plus ;~(pfix fas urs:ab)))) act/(of line/so res/so cmd/so ~) ~ ++ noun term-in :: clam from %noun diff --git a/main/mar/term-line/door.hook b/main/mar/term-line/door.hook index 76f3c5496..c8fae9035 100644 --- a/main/mar/term-line/door.hook +++ b/main/mar/term-line/door.hook @@ -18,10 +18,10 @@ [%history %a (turn q.tel |=(a=cord [%s a]))] :+ %lines %a %- zing ^- (list (list ^json)) - %+ turn (flop r.tel) |= a=?(tank [%stem p=tank q=tank]) + %+ turn (flop r.tel) |= a=?(tank [%stem p=@da q=tank r=tank]) ?. ?=(%stem -.a) (turn (wash 0^80 a) jape) - [(jobe prompt/(jape ~(ram re p.a)) task/(jape ~(ram re q.a)) ~)]~ + [(jobe prompt/(jape ~(ram re q.a)) task/(jape ~(ram re r.a)) ~)]~ == -- -- diff --git a/main/pub/fab/sqar/hymn.hook b/main/pub/fab/sqar/hymn.hook new file mode 100644 index 000000000..d2c7985a5 --- /dev/null +++ b/main/pub/fab/sqar/hymn.hook @@ -0,0 +1,46 @@ +/+ sqar +// /=try=/daun +!: +=- +;html + ;head + ;title: skuaring + == + ;body + ;p: 15 skwared is *{(sing (sqar -))} + == +== +''' +## Why is a spec needed? + +John Gruber's [canonical description of Markdown's +syntax](http://daringfireball.net/projects/markdown/syntax) +does not specify the syntax unambiguously. Here are some examples of +questions it does not answer: + +1. How much indentation is needed for a sublist? The spec says that + continuation paragraphs need to be indented four spaces, but is + not fully explicit about sublists. It is natural to think that + they, too, must be indented four spaces, but `Markdown.pl` does + not require that. This is hardly a "corner case," and divergences + between implementations on this issue often lead to surprises for + users in real documents. (See [this comment by John + Gruber](http://article.gmane.org/gmane.text.markdown.general/1997).) + +2. Is a blank line needed before a block quote or header? + Most implementations do not require the blank line. However, + this can lead to unexpected results in hard-wrapped text, and + also to ambiguities in parsing (note that some implementations + put the header inside the blockquote, while others do not). + (John Gruber has also spoken [in favor of requiring the blank + lines](http://article.gmane.org/gmane.text.markdown.general/2146).) + +3. Is a blank line needed before an indented code block? + (`Markdown.pl` requires it, but this is not mentioned in the + documentation, and some implementations do not require it.) + + ``` markdown + paragraph + code? + ``` +''' diff --git a/main/pub/radio/fab/hymn.hook b/main/pub/radio/fab/hymn.hook new file mode 100644 index 000000000..578d20280 --- /dev/null +++ b/main/pub/radio/fab/hymn.hook @@ -0,0 +1,26 @@ +:: +:: +:::: /hook/hymn/fab/chat/pub/ + :: +^- manx +;html + ;head + ;meta(charset "utf-8"); + ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.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.1/react.min.js"); + ;meta(name "viewport", content "width=432, initial-scale=1"); + ;script(type "text/javascript", src "//use.typekit.net/fkv0sjk.js"); + ;script:''' + try{Typekit.load();}catch(e){} + ''' + ;link(type "text/css", rel "stylesheet", href "/gen/main/pub/radio/src/main.css"); + ;script(type "text/javascript", src "/gop/hart.js"); + ;title: Radio + == + ;body + ;div#c; + ;script(type "text/javascript", src "/gen/main/lib/urb.js"); + ;script(type "text/javascript", src "/gen/main/pub/radio/src/main.js"); + == +== diff --git a/main/pub/radio/src/main.css b/main/pub/radio/src/main.css new file mode 100644 index 000000000..9989de2a6 --- /dev/null +++ b/main/pub/radio/src/main.css @@ -0,0 +1,327 @@ +@font-face { + font-family: "bau"; + src: url("https://s3-us-west-2.amazonaws.com/urbit/bauregular.otf"); + font-weight: 400; + font-style: normal; +} +@font-face { + font-family: "bau"; + src: url("https://s3-us-west-2.amazonaws.com/urbit/bauregularitalic.otf"); + font-weight: 400; + font-style: italic; +} +@font-face { + font-family: "bau"; + src: url("https://s3-us-west-2.amazonaws.com/urbit/baumedium.otf"); + font-weight: 500; + font-style: normal; +} +@font-face { + font-family: "bau"; + src: url("https://s3-us-west-2.amazonaws.com/urbit/baumediumitalic.otf"); + font-weight: 500; + font-style: italic; +} +@font-face { + font-family: "bau"; + src: url("https://s3-us-west-2.amazonaws.com/urbit/baubold.otf"); + font-weight: 600; + font-style: normal; +} +@font-face { + font-family: "bau"; + src: url("https://s3-us-west-2.amazonaws.com/urbit/baubolditalic.otf"); + font-weight: 600; + font-style: italic; +} +.iden, +.time, +#length, +input.join, +.stations { + font-family: "source-code-pro"; +} +input { + -webkit-appearance: none; + border-radius: 0; +} +html, +body { + height: 100%; + font-family: "bau"; +} +#length, +.time { + font-size: 0.6rem; + letter-spacing: 0; + font-weight: 200; +} +input.join, +.stations, +.iden, +#station { + font-size: 0.7rem; +} +html, +body { + font-size: 18px; +} +body { + background-color: #fefefe; + padding: 0; + margin: 0; +} +.hidden { + display: none; +} +#c { + width: 66rem; + top: 0; + padding: 1rem 1rem 0 1rem; + background-color: #fff; + height: 100%; +} +#stations-container { + position: fixed; + top: 1rem; + left: 1rem; + width: 12rem; +} +#station-container { + position: fixed; + top: 1rem; + left: 54rem; + width: 12rem; +} +#stations-container, +#messages-container { + vertical-align: top; +} +#station { + width: 18rem; +} +#station .iden { + display: block; +} +.stations { + width: 4rem; +} +.station { + display: inline-block; + width: 9rem; + margin-bottom: 0.3rem; + cursor: pointer; +} +.station .name { + border-bottom: 2px solid transparent; +} +.station.selected .name { + font-weight: 600; + border-bottom: 2px solid #000; +} +.station > div { + display: inline; +} +.station .remove { + display: none; + float: right; + font-size: 0.8rem; + line-height: 1rem; +} +.station:hover .remove { + display: inline; +} +.join-ctrl { + margin-top: 1.2rem; +} +.join-ctrl input { + border: none; +} +.join-ctrl input::-webkit-input-placeholder { + font-weight: 200; +} +.join-ctrl input { + font-weight: 400; +} +.message { + margin-bottom: 0.2rem; +} +#messages .message:last-child { + margin-bottom: 2rem; +} +#messages .message .time { + opacity: 0; +} +#messages .message:last-child .time, +#messages .message:hover .time { + opacity: 1; +} +.time { + margin-right: 0.6rem; +} +.member { + width: 12rem; + margin: 0.3rem 0.6rem 0.3rem 0; +} +#messages { + height: auto; +} +.attr { + width: 9rem; + text-align: right; + margin-right: 2rem; +} +.mess, +.attr, +.iden, +.attr > div, +#station .member div, +#writing { + display: inline-block; +} +.iden > div { + display: inline; +} +.mess, +#writing, +#length { + vertical-align: top; +} +.mess { + font-size: 0.8rem; + letter-spacing: 0.03rem; + word-wrap: break-word; + max-width: 31rem; +} +.ship, +.name { + font-weight: 500; +} +.ship.talk:before { + content: "..."; + margin-left: -1.3rem; + margin-right: 0.3rem; + width: 1rem; + margin-top: -0.4rem; + vertical-align: middle; + display: inline-block; + line-height: 0.2rem; + letter-spacing: -0.1rem; +} +#writing-container { + bottom: 4rem; + margin-bottom: 1rem; +} +#messages-container, +#writing-container { + margin-left: 12rem; +} +.writing #length { + display: inline; + margin-left: 1rem; + margin-top: 1.2rem; +} +#writing { + font-size: 0.8rem; +} +#writing, +input.join { + min-height: 1.2rem; + padding: 0.3rem 0.6rem; + margin-left: -0.6rem; + outline: none; + background-color: #f9f9f9; +} +#writing:focus, +input.join:focus { + background-color: #eee; +} +.pending { + color: #ccc; +} +#scrolling { + display: none; +} +.scrolling #scrolling { + position: fixed; + bottom: 3rem; + left: 2rem; + height: 1rem; + padding: 1rem; + height: 2rem; + background-color: #f9f9f9; + font-weight: 500; + font-size: 0.8rem; + text-transform: uppercase; +} +@media (max-width: 40rem) { + #c { + left: 0; + margin-left: 0; + width: 24rem; + } + #messages-container, + #writing-container { + margin-left: 1rem; + } + #stations-container, + #station-container { + position: relative; + float: left; + } + #stations-container { + width: 8rem; + } + #station-container { + left: auto; + } + .station { + width: 5rem; + } + .attr { + display: block; + text-align: left; + width: 2rem; + margin-right: 1rem; + } + .message { + height: 1.6rem; + } + .join-ctrl input, + .stations, + .iden, + #station { + font-size: 0.5rem; + } + .join-ctrl input { + width: 6rem; + } + .station .remove { + display: inline; + font-size: 0.6rem; + line-height: 0.6rem; + } + .ship.talk:before { + margin-left: -0.3rem; + margin-right: 0; + } + .attr { + width: 4rem; + } + .iden > div { + display: block; + } + .attr > .time { + display: none; + } + .mess { + max-width: 12rem; + margin-bottom: 1rem; + } + #writing { + max-width: 12rem; + } + #station { + width: 8rem; + } +} diff --git a/main/pub/radio/src/main.js b/main/pub/radio/src/main.js new file mode 100644 index 000000000..d1c297fab --- /dev/null +++ b/main/pub/radio/src/main.js @@ -0,0 +1,5901 @@ +(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.last, end); + } + }, + componentDidMount: function() { + var checkMore; + MessageStore.addChangeListener(this._onChangeStore); + StationStore.addChangeListener(this._onChangeStore); + checkMore = this.checkMore; + $(window).on('scroll', checkMore); + return window.util.setScroll(); + }, + componentDidUpdate: function() { + var $window, h, st; + $window = $(window); + if (this.lastLength) { + h = $('.message').height() * (this.length - this.lastLength); + st = $window.scrollTop(); + $window.scrollTop(st + h); + return this.lastLength = null; + } else { + return $window.scrollTop($('#writing-container').position().top - $(window).height() + $('#writing-container').outerHeight(true)); + } + }, + componentWillUnmount: function() { + MessageStore.removeChangeListener(this._onChangeStore); + return StationStore.removeChangeListener(this._onChangeStore); + }, + _onChangeStore: function() { + return this.setState(this.stateFromStore()); + }, + render: function() { + var messages, station, _messages; + station = this.state.station; + _messages = _.filter(this.state.messages, function(_message) { + return _.keys(_message.thought.audience).indexOf(station) !== -1; + }); + _messages = _.sortBy(_messages, function(_message) { + _message.pending = _message.thought.audience[station]; + return _message.thought.statement.time; + }); + this.length = _messages.length; + setTimeout((function(_this) { + return function() { + if (length < _this.pageSize) { + return _this.checkMore(); + } + }; + })(this), 1); + messages = _messages.map(function(_message) { + return Message(_message, ""); + }); + return div({ + id: "messages" + }, messages); + } +}); + + + +},{"../actions/MessageActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/MessageActions.coffee","../stores/MessageStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/MessageStore.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee","./MemberComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/MemberComponent.coffee","moment-timezone":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/index.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/StationComponent.coffee":[function(require,module,exports){ +var Member, StationActions, StationStore, div, input, recl, textarea, _ref; + +recl = React.createClass; + +_ref = [React.DOM.div, React.DOM.input, React.DOM.textarea], div = _ref[0], input = _ref[1], textarea = _ref[2]; + +StationStore = require('../stores/StationStore.coffee'); + +StationActions = require('../actions/StationActions.coffee'); + +Member = require('./MemberComponent.coffee'); + +module.exports = recl({ + stateFromStore: function() { + return { + members: StationStore.getMembers(), + station: StationStore.getStation(), + typing: StationStore.getTyping() + }; + }, + getInitialState: function() { + return this.stateFromStore(); + }, + componentDidMount: function() { + StationStore.addChangeListener(this._onChangeStore); + return setInterval(this.ping, 600000); + }, + componentWillUnmount: function() { + return StationStore.removeChangeListener(this._onChangeStore); + }, + _onChangeStore: function() { + this.setState(this.stateFromStore()); + return this.ping(); + }, + ping: function() { + var k, v, _ping, _ref1; + this.typing = this.state.typing; + _ping = {}; + _ref1 = this.state.members; + for (k in _ref1) { + v = _ref1[k]; + _ping[k] = this.state.typing[k] === true ? "talk" : "hear"; + } + return StationActions.ping(_ping); + }, + render: function() { + var members; + if (this.state.station && this.state.members[this.state.station]) { + members = _.map(this.state.members[this.state.station], function(state, member) { + return Member({ + ship: member, + presence: state.presence + }); + }); + } else { + members = ""; + } + return div({ + id: "station" + }, members); + } +}); + + + +},{"../actions/StationActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/StationActions.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee","./MemberComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/MemberComponent.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/StationsComponent.coffee":[function(require,module,exports){ +var StationActions, StationStore, div, input, recl, _ref; + +recl = React.createClass; + +_ref = [React.DOM.div, React.DOM.input], div = _ref[0], input = _ref[1]; + +StationStore = require('../stores/StationStore.coffee'); + +StationActions = require('../actions/StationActions.coffee'); + +module.exports = recl({ + stateFromStore: function() { + return { + stations: StationStore.getStations(), + station: StationStore.getStation() + }; + }, + getInitialState: function() { + return this.stateFromStore(); + }, + componentDidMount: function() { + this.$el = $(this.getDOMNode()); + this.$add = $('#stations .add'); + this.$input = this.$el.find('input'); + return StationStore.addChangeListener(this._onChangeStore); + }, + componentWillUnmount: function() { + return StationStore.removeChangeListener(this._onChangeStore); + }, + _onChangeStore: function() { + return this.setState(this.stateFromStore()); + }, + _click: function(e) { + return StationActions.switchStation($(e.target).text()); + }, + _keyUp: function(e) { + var v; + if (e.keyCode === 13) { + v = this.$input.val(); + if (this.state.stations.indexOf(v) === -1) { + StationActions.joinStation(v, this.state.stations); + return this.$input.val(''); + } + } + }, + _remove: function(e) { + var _station, _stations; + _station = $(e.target).parent().find('.name').text(); + _stations = _.without(this.state.stations, _station); + StationActions.leaveStation(_station, _stations); + e.stopPropagation(); + return e.preventDefault(); + }, + render: function() { + var station, stations, _click, _remove; + station = this.state.station; + _click = this._click; + _remove = this._remove; + stations = this.state.stations.map(function(_station) { + var k; + k = "station"; + if (_station === station) { + k += " selected"; + } + return div({ + className: k, + onClick: _click + }, [ + div({ + className: "name" + }, _station), div({ + className: "remove", + onClick: _remove, + dataStation: _station + }, "×") + ]); + }); + return div({ + id: "stations" + }, [ + div({ + className: "stations" + }, stations), div({ + className: "join-ctrl" + }, [ + input({ + className: "join", + onKeyUp: this._keyUp, + placeholder: "~ship-name/room" + }, "") + ]) + ]); + } +}); + + + +},{"../actions/StationActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/StationActions.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/WritingComponent.coffee":[function(require,module,exports){ +var Member, MessageActions, StationActions, StationStore, div, input, recl, textarea, _ref; + +recl = React.createClass; + +_ref = [React.DOM.div, React.DOM.input, React.DOM.textarea], div = _ref[0], input = _ref[1], textarea = _ref[2]; + +MessageActions = require('../actions/MessageActions.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() { + return { + members: StationStore.getMembers(), + typing: StationStore.getTyping(), + station: StationStore.getStation() + }; + }, + typing: function(state) { + if (this.state.typing[this.state.station] !== state) { + return StationActions.setTyping(this.state.station, state); + } + }, + _blur: function() { + return this.typing(false); + }, + _keyDown: function(e) { + if (e.keyCode === 13) { + MessageActions.sendMessage(this.state.station, this.$writing.text()); + this.$length.text("0/69"); + this.$writing.text(''); + this.set(); + e.preventDefault(); + this.typing(false); + return false; + } else { + this.typing(true); + } + this._input(); + return this.set(); + }, + _input: function(e) { + var geturl, length, text, url, urls, _i, _len; + text = this.$writing.text(); + length = text.length; + geturl = new RegExp("(^|[ \t\r\n])((ftp|http|https|gopher|mailto|news|nntp|telnet|wais|file|prospero|aim|webcal):(([A-Za-z0-9$_.+!*(),;/?:@&~=-])|%[A-Fa-f0-9]{2}){2,}(#([a-zA-Z0-9][a-zA-Z0-9$_.+!*(),;/?:@&~=%-]*))?([A-Za-z0-9$_+!*();/?:~-]))", "g"); + urls = text.match(geturl); + if (urls !== null && urls.length > 0) { + for (_i = 0, _len = urls.length; _i < _len; _i++) { + url = urls[_i]; + length -= url.length; + length += 10; + } + } + this.$length.text("" + length + "/69"); + if (length >= 69) { + this.$writing.text(this.$writing.text().substr(0, 69)); + this.cursorAtEnd(); + if (e) { + e.preventDefault(); + } + return false; + } + }, + 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() { + StationStore.addChangeListener(this._onChangeStore); + this.$length = $('#length'); + this.$writing = $('#writing'); + if (this.get()) { + this.$writing.text(this.get()); + this._input(); + } + return setInterval((function(_this) { + return function() { + var $n; + $n = $(_this.getDOMNode()); + return $n.find('.time').text(_this.getTime()); + }; + })(this), 1000); + }, + componentWillUnmount: function() { + return StationStore.removeChangeListener(this._onChangeStore); + }, + _onChangeStore: function() { + return this.setState(this.stateFromStore()); + }, + render: function() { + var iden, k, name, ship, user, _ref1; + user = "~" + window.urb.user; + iden = StationStore.getMember(user); + ship = iden ? iden.ship : user; + name = iden ? iden.name : ""; + k = "writing"; + if (!((_ref1 = this.state) != null ? _ref1.station : void 0)) { + k += " hidden"; + } + return div({ + className: k + }, [ + div({ + className: "attr" + }, [ + div({ + className: "time" + }, this.getTime()), Member(iden, "") + ]), div({ + id: "writing", + contentEditable: true, + onBlur: this._blur, + onInput: this._input, + onPaste: this._input, + onKeyDown: this._keyDown, + onFocus: this.cursorAtEnd + }, ""), div({ + id: "length" + }, "0/69") + ]); + } +}); + + + +},{"../actions/MessageActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/MessageActions.coffee","../actions/StationActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/StationActions.coffee","../stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee","./MemberComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/MemberComponent.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/dispatcher/Dispatcher.coffee":[function(require,module,exports){ +var Dispatcher, copyProperties; + +Dispatcher = require('flux').Dispatcher; + +copyProperties = require('react/lib/copyProperties'); + +module.exports = copyProperties(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/Projects/urbit.radio/pub/radio/src/node_modules/flux/index.js","react/lib/copyProperties":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/copyProperties.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/main.coffee":[function(require,module,exports){ +$(function() { + var $c, MessagesComponent, StationComponent, StationStore, StationsComponent, WritingComponent, rend; + rend = React.renderComponent; + StationStore = require('./stores/StationStore.coffee'); + window.chat = {}; + window.chat.MessagePersistence = require('./persistence/MessagePersistence.coffee'); + window.chat.StationPersistence = require('./persistence/StationPersistence.coffee'); + window.util = { + 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 i, str, _i, _str; + str = "0v"; + str += Math.ceil(Math.random() * 8) + "."; + for (i = _i = 0; _i <= 5; i = ++_i) { + _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 = $('#writing-container').position().top - $(window).height() + $('#writing-container').outerHeight(true); + }, + setScroll: function() { + window.util.getScroll(); + return $(window).scrollTop(window.util.writingPosition); + }, + checkScroll: function() { + if (!window.util.writingPosition) { + window.util.getScroll(); + } + if ($(window).scrollTop() < window.util.writingPosition) { + return $('body').addClass('scrolling'); + } else { + return $('body').removeClass('scrolling'); + } + } + }; + $(window).on('scroll', window.util.checkScroll); + window.chat.MessagePersistence.listen(window.urb.util.toDate(new Date())); + window.chat.StationPersistence.config(); + window.chat.StationPersistence.rooms(); + window.chat.StationPersistence.members(); + StationComponent = require('./components/StationComponent.coffee'); + StationsComponent = require('./components/StationsComponent.coffee'); + MessagesComponent = require('./components/MessagesComponent.coffee'); + WritingComponent = require('./components/WritingComponent.coffee'); + $c = $('#c'); + $c.append("

"); + $c.append("
"); + $c.append("
"); + $c.append("
"); + $c.append("
BOTTOM
"); + rend(StationComponent({}, ""), $('#station-container')[0]); + rend(StationsComponent({}, ""), $('#stations-container')[0]); + rend(MessagesComponent({}, ""), $('#messages-container')[0]); + return rend(WritingComponent({}, ""), $('#writing-container')[0]); +}); + + + +},{"./components/MessagesComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/MessagesComponent.coffee","./components/StationComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/StationComponent.coffee","./components/StationsComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/StationsComponent.coffee","./components/WritingComponent.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/components/WritingComponent.coffee","./persistence/MessagePersistence.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/persistence/MessagePersistence.coffee","./persistence/StationPersistence.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/persistence/StationPersistence.coffee","./stores/StationStore.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/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/Projects/urbit.radio/pub/radio/src/node_modules/flux/lib/Dispatcher.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/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/Projects/urbit.radio/pub/radio/src/node_modules/flux/lib/invariant.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/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/Projects/urbit.radio/pub/radio/src/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/Projects/urbit.radio/pub/radio/src/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/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/data/packed/latest.json","./moment-timezone":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/moment-timezone.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/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/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/node_modules/moment/moment.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/node_modules/moment/moment.js":[function(require,module,exports){ +(function (global){ +//! moment.js +//! version : 2.8.4 +//! authors : Tim Wood, Iskren Chernev, Moment.js contributors +//! license : MIT +//! momentjs.com + +(function (undefined) { + /************************************ + Constants + ************************************/ + + var moment, + VERSION = '2.8.4', + // the global-scope this is NOT the global object in Node.js + globalScope = typeof global !== 'undefined' ? global : this, + oldGlobalMoment, + round = Math.round, + hasOwnProperty = Object.prototype.hasOwnProperty, + i, + + YEAR = 0, + MONTH = 1, + DATE = 2, + HOUR = 3, + MINUTE = 4, + SECOND = 5, + MILLISECOND = 6, + + // internal storage for locale config files + locales = {}, + + // extra moment internal properties (plugins register props here) + momentProperties = [], + + // check for nodeJS + hasModule = (typeof module !== 'undefined' && module && module.exports), + + // ASP.NET json date format regex + aspNetJsonRegex = /^\/?Date\((\-?\d+)/i, + aspNetTimeSpanJsonRegex = /(\-)?(?:(\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 + isoDurationRegex = /^(-)?P(?:(?:([0-9,.]*)Y)?(?:([0-9,.]*)M)?(?:([0-9,.]*)D)?(?:T(?:([0-9,.]*)H)?(?:([0-9,.]*)M)?(?:([0-9,.]*)S)?)?|([0-9,.]*)W)$/, + + // format tokens + 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, + localFormattingTokens = /(\[[^\[]*\])|(\\)?(LTS|LT|LL?L?L?|l{1,4})/g, + + // parsing token regexes + parseTokenOneOrTwoDigits = /\d\d?/, // 0 - 99 + parseTokenOneToThreeDigits = /\d{1,3}/, // 0 - 999 + parseTokenOneToFourDigits = /\d{1,4}/, // 0 - 9999 + parseTokenOneToSixDigits = /[+\-]?\d{1,6}/, // -999,999 - 999,999 + parseTokenDigits = /\d+/, // nonzero number of digits + parseTokenWord = /[0-9]*['a-z\u00A0-\u05FF\u0700-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]+|[\u0600-\u06FF\/]+(\s*?[\u0600-\u06FF]+){1,2}/i, // any word (or two) characters or numbers including two/three word month in arabic. + parseTokenTimezone = /Z|[\+\-]\d\d:?\d\d/gi, // +00:00 -00:00 +0000 -0000 or Z + parseTokenT = /T/i, // T (ISO separator) + parseTokenOffsetMs = /[\+\-]?\d+/, // 1234567890123 + parseTokenTimestampMs = /[\+\-]?\d+(\.\d{1,3})?/, // 123456789 123456789.123 + + //strict parsing regexes + parseTokenOneDigit = /\d/, // 0 - 9 + parseTokenTwoDigits = /\d\d/, // 00 - 99 + parseTokenThreeDigits = /\d{3}/, // 000 - 999 + parseTokenFourDigits = /\d{4}/, // 0000 - 9999 + parseTokenSixDigits = /[+-]?\d{6}/, // -999,999 - 999,999 + parseTokenSignedNumber = /[+-]?\d+/, // -inf - inf + + // iso 8601 regex + // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00) + 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)?)?$/, + + isoFormat = 'YYYY-MM-DDTHH:mm:ssZ', + + 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 + 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/] + ], + + // timezone chunker '+10:00' > ['10', '00'] or '-1530' > ['-15', '30'] + parseTimezoneChunker = /([\+\-]|\d\d)/gi, + + // getter and setter names + proxyGettersAndSetters = 'Date|Hours|Minutes|Seconds|Milliseconds'.split('|'), + unitMillisecondFactors = { + 'Milliseconds' : 1, + 'Seconds' : 1e3, + 'Minutes' : 6e4, + 'Hours' : 36e5, + 'Days' : 864e5, + 'Months' : 2592e6, + 'Years' : 31536e6 + }, + + unitAliases = { + ms : 'millisecond', + s : 'second', + m : 'minute', + h : 'hour', + d : 'day', + D : 'date', + w : 'week', + W : 'isoWeek', + M : 'month', + Q : 'quarter', + y : 'year', + DDD : 'dayOfYear', + e : 'weekday', + E : 'isoWeekday', + gg: 'weekYear', + GG: 'isoWeekYear' + }, + + camelFunctions = { + dayofyear : 'dayOfYear', + isoweekday : 'isoWeekday', + isoweek : 'isoWeek', + weekyear : 'weekYear', + isoweekyear : 'isoWeekYear' + }, + + // format function strings + formatFunctions = {}, + + // default relative time thresholds + relativeTimeThresholds = { + 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 + }, + + // tokens to ordinalize and pad + ordinalizeTokens = 'DDD w W M D d'.split(' '), + paddedTokens = 'M D H h m s w W'.split(' '), + + formatTokenFunctions = { + M : function () { + return this.month() + 1; + }, + MMM : function (format) { + return this.localeData().monthsShort(this, format); + }, + MMMM : function (format) { + return this.localeData().months(this, format); + }, + D : function () { + return this.date(); + }, + DDD : function () { + return this.dayOfYear(); + }, + d : function () { + return this.day(); + }, + dd : function (format) { + return this.localeData().weekdaysMin(this, format); + }, + ddd : function (format) { + return this.localeData().weekdaysShort(this, format); + }, + dddd : function (format) { + return this.localeData().weekdays(this, format); + }, + w : function () { + return this.week(); + }, + W : function () { + return this.isoWeek(); + }, + YY : function () { + return leftZeroFill(this.year() % 100, 2); + }, + YYYY : function () { + return leftZeroFill(this.year(), 4); + }, + YYYYY : function () { + return leftZeroFill(this.year(), 5); + }, + YYYYYY : function () { + var y = this.year(), sign = y >= 0 ? '+' : '-'; + return sign + leftZeroFill(Math.abs(y), 6); + }, + gg : function () { + return leftZeroFill(this.weekYear() % 100, 2); + }, + gggg : function () { + return leftZeroFill(this.weekYear(), 4); + }, + ggggg : function () { + return leftZeroFill(this.weekYear(), 5); + }, + GG : function () { + return leftZeroFill(this.isoWeekYear() % 100, 2); + }, + GGGG : function () { + return leftZeroFill(this.isoWeekYear(), 4); + }, + GGGGG : function () { + return leftZeroFill(this.isoWeekYear(), 5); + }, + e : function () { + return this.weekday(); + }, + E : function () { + return this.isoWeekday(); + }, + a : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), true); + }, + A : function () { + return this.localeData().meridiem(this.hours(), this.minutes(), false); + }, + H : function () { + return this.hours(); + }, + h : function () { + return this.hours() % 12 || 12; + }, + m : function () { + return this.minutes(); + }, + s : function () { + return this.seconds(); + }, + S : function () { + return toInt(this.milliseconds() / 100); + }, + SS : function () { + return leftZeroFill(toInt(this.milliseconds() / 10), 2); + }, + SSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + SSSS : function () { + return leftZeroFill(this.milliseconds(), 3); + }, + Z : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + ':' + leftZeroFill(toInt(a) % 60, 2); + }, + ZZ : function () { + var a = -this.zone(), + b = '+'; + if (a < 0) { + a = -a; + b = '-'; + } + return b + leftZeroFill(toInt(a / 60), 2) + leftZeroFill(toInt(a) % 60, 2); + }, + z : function () { + return this.zoneAbbr(); + }, + zz : function () { + return this.zoneName(); + }, + x : function () { + return this.valueOf(); + }, + X : function () { + return this.unix(); + }, + Q : function () { + return this.quarter(); + } + }, + + deprecations = {}, + + lists = ['months', 'monthsShort', 'weekdays', 'weekdaysShort', 'weekdaysMin']; + + // Pick the first defined of two or three arguments. dfl comes from + // default. + function dfl(a, b, c) { + switch (arguments.length) { + case 2: return a != null ? a : b; + case 3: return a != null ? a : b != null ? b : c; + default: throw new Error('Implement me'); + } + } + + function hasOwnProp(a, b) { + return hasOwnProperty.call(a, b); + } + + function defaultParsingFlags() { + // We need to deep clone this object, and es5 standard is not very + // helpful. + return { + empty : false, + unusedTokens : [], + unusedInput : [], + overflow : -2, + charsLeftOver : 0, + nullInput : false, + invalidMonth : null, + invalidFormat : false, + userInvalidated : false, + iso: false + }; + } + + function printMsg(msg) { + if (moment.suppressDeprecationWarnings === false && + typeof console !== 'undefined' && console.warn) { + console.warn('Deprecation warning: ' + msg); + } + } + + function deprecate(msg, fn) { + var firstTime = true; + return extend(function () { + if (firstTime) { + printMsg(msg); + firstTime = false; + } + return fn.apply(this, arguments); + }, fn); + } + + function deprecateSimple(name, msg) { + if (!deprecations[name]) { + printMsg(msg); + deprecations[name] = true; + } + } + + function padToken(func, count) { + return function (a) { + return leftZeroFill(func.call(this, a), count); + }; + } + function ordinalizeToken(func, period) { + return function (a) { + return this.localeData().ordinal(func.call(this, a), period); + }; + } + + while (ordinalizeTokens.length) { + i = ordinalizeTokens.pop(); + formatTokenFunctions[i + 'o'] = ordinalizeToken(formatTokenFunctions[i], i); + } + while (paddedTokens.length) { + i = paddedTokens.pop(); + formatTokenFunctions[i + i] = padToken(formatTokenFunctions[i], 2); + } + formatTokenFunctions.DDDD = padToken(formatTokenFunctions.DDD, 3); + + + /************************************ + Constructors + ************************************/ + + function Locale() { + } + + // Moment prototype object + function Moment(config, skipOverflow) { + if (skipOverflow !== false) { + checkOverflow(config); + } + copyConfig(this, config); + this._d = new Date(+config._d); + } + + // Duration Constructor + 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 = moment.localeData(); + + this._bubble(); + } + + /************************************ + Helpers + ************************************/ + + + 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 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; + } + + function absRound(number) { + if (number < 0) { + return Math.ceil(number); + } else { + return Math.floor(number); + } + } + + // left zero fill a number + // see http://jsperf.com/left-zero-filling for performance comparison + function leftZeroFill(number, targetLength, forceSign) { + var output = '' + Math.abs(number), + sign = number >= 0; + + while (output.length < targetLength) { + output = '0' + output; + } + return (sign ? (forceSign ? '+' : '') : '-') + output; + } + + 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 = makeAs(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; + } + + // TODO: remove 'name' arg after deprecation is removed + 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 = moment.duration(val, period); + addOrSubtractDurationFromMoment(this, dur, direction); + return this; + }; + } + + function addOrSubtractDurationFromMoment(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) { + rawSetter(mom, 'Date', rawGetter(mom, 'Date') + days * isAdding); + } + if (months) { + rawMonthSetter(mom, rawGetter(mom, 'Month') + months * isAdding); + } + if (updateOffset) { + moment.updateOffset(mom, days || months); + } + } + + // check if is an array + 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; + } + + // compare two arrays, return the number of differences + 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 normalizeUnits(units) { + if (units) { + var lowered = units.toLowerCase().replace(/(.)s$/, '$1'); + units = unitAliases[units] || camelFunctions[lowered] || lowered; + } + return units; + } + + 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 makeList(field) { + var count, setter; + + if (field.indexOf('week') === 0) { + count = 7; + setter = 'day'; + } + else if (field.indexOf('month') === 0) { + count = 12; + setter = 'month'; + } + else { + return; + } + + moment[field] = function (format, index) { + var i, getter, + method = moment._locale[field], + results = []; + + if (typeof format === 'number') { + index = format; + format = undefined; + } + + getter = function (i) { + var m = moment().utc().set(setter, i); + return method.call(moment._locale, m, format || ''); + }; + + if (index != null) { + return getter(index); + } + else { + for (i = 0; i < count; i++) { + results.push(getter(i)); + } + return results; + } + }; + } + + 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 daysInMonth(year, month) { + return new Date(Date.UTC(year, month + 1, 0)).getUTCDate(); + } + + function weeksInYear(year, dow, doy) { + return weekOfYear(moment([year, 11, 31 + dow - doy]), dow, doy).week; + } + + function daysInYear(year) { + return isLeapYear(year) ? 366 : 365; + } + + function isLeapYear(year) { + return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0; + } + + function checkOverflow(m) { + var overflow; + if (m._a && m._pf.overflow === -2) { + overflow = + m._a[MONTH] < 0 || m._a[MONTH] > 11 ? MONTH : + m._a[DATE] < 1 || m._a[DATE] > daysInMonth(m._a[YEAR], m._a[MONTH]) ? DATE : + m._a[HOUR] < 0 || m._a[HOUR] > 24 || + (m._a[HOUR] === 24 && (m._a[MINUTE] !== 0 || + m._a[SECOND] !== 0 || + m._a[MILLISECOND] !== 0)) ? HOUR : + m._a[MINUTE] < 0 || m._a[MINUTE] > 59 ? MINUTE : + m._a[SECOND] < 0 || m._a[SECOND] > 59 ? SECOND : + m._a[MILLISECOND] < 0 || m._a[MILLISECOND] > 999 ? MILLISECOND : + -1; + + if (m._pf._overflowDayOfYear && (overflow < YEAR || overflow > DATE)) { + overflow = DATE; + } + + m._pf.overflow = overflow; + } + } + + function 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 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; + if (!locales[name] && hasModule) { + try { + oldLocale = moment.locale(); + require('./locale/' + name); + // because defineLocale currently also sets the global locale, we want to undo that for lazy loaded locales + moment.locale(oldLocale); + } catch (e) { } + } + return locales[name]; + } + + // Return a moment from input, that is local/utc/zone equivalent to model. + function makeAs(input, model) { + var res, diff; + if (model._isUTC) { + res = model.clone(); + diff = (moment.isMoment(input) || isDate(input) ? + +input : +moment(input)) - (+res); + // Use low-level api, because this fn is low-level api. + res._d.setTime(+res._d + diff); + moment.updateOffset(res, false); + return res; + } else { + return moment(input).local(); + } + } + + /************************************ + Locale + ************************************/ + + + extend(Locale.prototype, { + + set : function (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); + }, + + _months : 'January_February_March_April_May_June_July_August_September_October_November_December'.split('_'), + months : function (m) { + return this._months[m.month()]; + }, + + _monthsShort : 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'), + monthsShort : function (m) { + return this._monthsShort[m.month()]; + }, + + monthsParse : function (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 = moment.utc([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; + } + } + }, + + _weekdays : 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'), + weekdays : function (m) { + return this._weekdays[m.day()]; + }, + + _weekdaysShort : 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'), + weekdaysShort : function (m) { + return this._weekdaysShort[m.day()]; + }, + + _weekdaysMin : 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'), + weekdaysMin : function (m) { + return this._weekdaysMin[m.day()]; + }, + + weekdaysParse : function (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 = moment([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; + } + } + }, + + _longDateFormat : { + 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' + }, + longDateFormat : function (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; + }, + + isPM : function (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'); + }, + + _meridiemParse : /[ap]\.?m?\.?/i, + meridiem : function (hours, minutes, isLower) { + if (hours > 11) { + return isLower ? 'pm' : 'PM'; + } else { + return isLower ? 'am' : 'AM'; + } + }, + + _calendar : { + sameDay : '[Today at] LT', + nextDay : '[Tomorrow at] LT', + nextWeek : 'dddd [at] LT', + lastDay : '[Yesterday at] LT', + lastWeek : '[Last] dddd [at] LT', + sameElse : 'L' + }, + calendar : function (key, mom, now) { + var output = this._calendar[key]; + return typeof output === 'function' ? output.apply(mom, [now]) : output; + }, + + _relativeTime : { + 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' + }, + + relativeTime : function (number, withoutSuffix, string, isFuture) { + var output = this._relativeTime[string]; + return (typeof output === 'function') ? + output(number, withoutSuffix, string, isFuture) : + output.replace(/%d/i, number); + }, + + pastFuture : function (diff, output) { + var format = this._relativeTime[diff > 0 ? 'future' : 'past']; + return typeof format === 'function' ? format(output) : format.replace(/%s/i, output); + }, + + ordinal : function (number) { + return this._ordinal.replace('%d', number); + }, + _ordinal : '%d', + _ordinalParse : /\d{1,2}/, + + preparse : function (string) { + return string; + }, + + postformat : function (string) { + return string; + }, + + week : function (mom) { + return weekOfYear(mom, this._week.dow, this._week.doy).week; + }, + + _week : { + 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. + }, + + _invalidDate: 'Invalid date', + invalidDate: function () { + return this._invalidDate; + } + }); + + /************************************ + Formatting + ************************************/ + + + 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; + } + + + /************************************ + Parsing + ************************************/ + + + // get the regex to find the next token + function getParseRegexForToken(token, config) { + var a, strict = config._strict; + switch (token) { + case 'Q': + return parseTokenOneDigit; + case 'DDDD': + return parseTokenThreeDigits; + case 'YYYY': + case 'GGGG': + case 'gggg': + return strict ? parseTokenFourDigits : parseTokenOneToFourDigits; + case 'Y': + case 'G': + case 'g': + return parseTokenSignedNumber; + case 'YYYYYY': + case 'YYYYY': + case 'GGGGG': + case 'ggggg': + return strict ? parseTokenSixDigits : parseTokenOneToSixDigits; + case 'S': + if (strict) { + return parseTokenOneDigit; + } + /* falls through */ + case 'SS': + if (strict) { + return parseTokenTwoDigits; + } + /* falls through */ + case 'SSS': + if (strict) { + return parseTokenThreeDigits; + } + /* falls through */ + case 'DDD': + return parseTokenOneToThreeDigits; + case 'MMM': + case 'MMMM': + case 'dd': + case 'ddd': + case 'dddd': + return parseTokenWord; + case 'a': + case 'A': + return config._locale._meridiemParse; + case 'x': + return parseTokenOffsetMs; + case 'X': + return parseTokenTimestampMs; + case 'Z': + case 'ZZ': + return parseTokenTimezone; + case 'T': + return parseTokenT; + case 'SSSS': + return parseTokenDigits; + case 'MM': + case 'DD': + case 'YY': + case 'GG': + case 'gg': + case 'HH': + case 'hh': + case 'mm': + case 'ss': + case 'ww': + case 'WW': + return strict ? parseTokenTwoDigits : parseTokenOneOrTwoDigits; + case 'M': + case 'D': + case 'd': + case 'H': + case 'h': + case 'm': + case 's': + case 'w': + case 'W': + case 'e': + case 'E': + return parseTokenOneOrTwoDigits; + case 'Do': + return strict ? config._locale._ordinalParse : config._locale._ordinalParseLenient; + default : + a = new RegExp(regexpEscape(unescapeFormat(token.replace('\\', '')), 'i')); + return a; + } + } + + function timezoneMinutesFromString(string) { + string = string || ''; + var possibleTzMatches = (string.match(parseTokenTimezone) || []), + tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [], + parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0], + minutes = +(parts[1] * 60) + toInt(parts[2]); + + return parts[0] === '+' ? -minutes : minutes; + } + + // function to convert string input to date + function addTimeToArrayFromToken(token, input, config) { + var a, datePartArray = config._a; + + switch (token) { + // QUARTER + case 'Q': + if (input != null) { + datePartArray[MONTH] = (toInt(input) - 1) * 3; + } + break; + // MONTH + case 'M' : // fall through to MM + case 'MM' : + if (input != null) { + datePartArray[MONTH] = toInt(input) - 1; + } + break; + case 'MMM' : // fall through to MMMM + case 'MMMM' : + a = config._locale.monthsParse(input, token, config._strict); + // if we didn't find a month name, mark the date as invalid. + if (a != null) { + datePartArray[MONTH] = a; + } else { + config._pf.invalidMonth = input; + } + break; + // DAY OF MONTH + case 'D' : // fall through to DD + case 'DD' : + if (input != null) { + datePartArray[DATE] = toInt(input); + } + break; + case 'Do' : + if (input != null) { + datePartArray[DATE] = toInt(parseInt( + input.match(/\d{1,2}/)[0], 10)); + } + break; + // DAY OF YEAR + case 'DDD' : // fall through to DDDD + case 'DDDD' : + if (input != null) { + config._dayOfYear = toInt(input); + } + + break; + // YEAR + case 'YY' : + datePartArray[YEAR] = moment.parseTwoDigitYear(input); + break; + case 'YYYY' : + case 'YYYYY' : + case 'YYYYYY' : + datePartArray[YEAR] = toInt(input); + break; + // AM / PM + case 'a' : // fall through to A + case 'A' : + config._isPm = config._locale.isPM(input); + break; + // HOUR + case 'h' : // fall through to hh + case 'hh' : + config._pf.bigHour = true; + /* falls through */ + case 'H' : // fall through to HH + case 'HH' : + datePartArray[HOUR] = toInt(input); + break; + // MINUTE + case 'm' : // fall through to mm + case 'mm' : + datePartArray[MINUTE] = toInt(input); + break; + // SECOND + case 's' : // fall through to ss + case 'ss' : + datePartArray[SECOND] = toInt(input); + break; + // MILLISECOND + case 'S' : + case 'SS' : + case 'SSS' : + case 'SSSS' : + datePartArray[MILLISECOND] = toInt(('0.' + input) * 1000); + break; + // UNIX OFFSET (MILLISECONDS) + case 'x': + config._d = new Date(toInt(input)); + break; + // UNIX TIMESTAMP WITH MS + case 'X': + config._d = new Date(parseFloat(input) * 1000); + break; + // TIMEZONE + case 'Z' : // fall through to ZZ + case 'ZZ' : + config._useUTC = true; + config._tzm = timezoneMinutesFromString(input); + break; + // WEEKDAY - human + case 'dd': + case 'ddd': + case 'dddd': + a = config._locale.weekdaysParse(input); + // if we didn't get a weekday name, mark the date as invalid + if (a != null) { + config._w = config._w || {}; + config._w['d'] = a; + } else { + config._pf.invalidWeekday = input; + } + break; + // WEEK, WEEK DAY - numeric + case 'w': + case 'ww': + case 'W': + case 'WW': + case 'd': + case 'e': + case 'E': + token = token.substr(0, 1); + /* falls through */ + case 'gggg': + case 'GGGG': + case 'GGGGG': + token = token.substr(0, 2); + if (input) { + config._w = config._w || {}; + config._w[token] = toInt(input); + } + break; + case 'gg': + case 'GG': + config._w = config._w || {}; + config._w[token] = moment.parseTwoDigitYear(input); + } + } + + 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 = dfl(w.GG, config._a[YEAR], weekOfYear(moment(), 1, 4).year); + week = dfl(w.W, 1); + weekday = dfl(w.E, 1); + } else { + dow = config._locale._week.dow; + doy = config._locale._week.doy; + + weekYear = dfl(w.gg, config._a[YEAR], weekOfYear(moment(), dow, doy).year); + week = dfl(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; + } + + // 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 dateFromConfig(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 = dfl(config._a[YEAR], currentDate[YEAR]); + + if (config._dayOfYear > daysInYear(yearToUse)) { + config._pf._overflowDayOfYear = true; + } + + date = makeUTCDate(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 ? makeUTCDate : makeDate).apply(null, input); + // Apply timezone offset from input. The actual zone 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 dateFromObject(config) { + var normalizedInput; + + if (config._d) { + return; + } + + normalizedInput = normalizeObjectUnits(config._i); + config._a = [ + normalizedInput.year, + normalizedInput.month, + normalizedInput.day || normalizedInput.date, + normalizedInput.hour, + normalizedInput.minute, + normalizedInput.second, + normalizedInput.millisecond + ]; + + dateFromConfig(config); + } + + function currentDateArray(config) { + var now = new Date(); + if (config._useUTC) { + return [ + now.getUTCFullYear(), + now.getUTCMonth(), + now.getUTCDate() + ]; + } else { + return [now.getFullYear(), now.getMonth(), now.getDate()]; + } + } + + // date from string and format string + function makeDateFromStringAndFormat(config) { + if (config._f === moment.ISO_8601) { + parseISO(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 am pm + if (config._isPm && config._a[HOUR] < 12) { + config._a[HOUR] += 12; + } + // if is 12 am, change hours to 0 + if (config._isPm === false && config._a[HOUR] === 12) { + config._a[HOUR] = 0; + } + dateFromConfig(config); + checkOverflow(config); + } + + function unescapeFormat(s) { + return s.replace(/\\(\[)|\\(\])|\[([^\]\[]*)\]|\\(.)/g, function (matched, p1, p2, p3, p4) { + return p1 || p2 || p3 || p4; + }); + } + + // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript + function regexpEscape(s) { + return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); + } + + // date from string and array of format strings + function makeDateFromStringAndArray(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]; + makeDateFromStringAndFormat(tempConfig); + + if (!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); + } + + // date from iso format + function parseISO(config) { + var i, l, + string = config._i, + match = 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(parseTokenTimezone)) { + config._f += 'Z'; + } + makeDateFromStringAndFormat(config); + } else { + config._isValid = false; + } + } + + // date from iso format or fallback + function makeDateFromString(config) { + parseISO(config); + if (config._isValid === false) { + delete config._isValid; + moment.createFromInputFallback(config); + } + } + + function map(arr, fn) { + var res = [], i; + for (i = 0; i < arr.length; ++i) { + res.push(fn(arr[i], i)); + } + return res; + } + + function makeDateFromInput(config) { + var input = config._i, matched; + if (input === undefined) { + config._d = new Date(); + } else if (isDate(input)) { + config._d = new Date(+input); + } else if ((matched = aspNetJsonRegex.exec(input)) !== null) { + config._d = new Date(+matched[1]); + } else if (typeof input === 'string') { + makeDateFromString(config); + } else if (isArray(input)) { + config._a = map(input.slice(0), function (obj) { + return parseInt(obj, 10); + }); + dateFromConfig(config); + } else if (typeof(input) === 'object') { + dateFromObject(config); + } else if (typeof(input) === 'number') { + // from milliseconds + config._d = new Date(input); + } else { + moment.createFromInputFallback(config); + } + } + + function makeDate(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 makeUTCDate(y) { + var date = new Date(Date.UTC.apply(null, arguments)); + if (y < 1970) { + date.setUTCFullYear(y); + } + return date; + } + + 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; + } + + /************************************ + Relative Time + ************************************/ + + + // 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 relativeTime(posNegDuration, withoutSuffix, locale) { + var duration = moment.duration(posNegDuration).abs(), + seconds = round(duration.as('s')), + minutes = round(duration.as('m')), + hours = round(duration.as('h')), + days = round(duration.as('d')), + months = round(duration.as('M')), + years = round(duration.as('y')), + + args = seconds < relativeTimeThresholds.s && ['s', seconds] || + minutes === 1 && ['m'] || + minutes < relativeTimeThresholds.m && ['mm', minutes] || + hours === 1 && ['h'] || + hours < relativeTimeThresholds.h && ['hh', hours] || + days === 1 && ['d'] || + days < relativeTimeThresholds.d && ['dd', days] || + months === 1 && ['M'] || + months < relativeTimeThresholds.M && ['MM', months] || + years === 1 && ['y'] || ['yy', years]; + + args[2] = withoutSuffix; + args[3] = +posNegDuration > 0; + args[4] = locale; + return substituteTimeAgo.apply({}, args); + } + + + /************************************ + Week of Year + ************************************/ + + + // 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 = moment(mom).add(daysToDayOfWeek, 'd'); + return { + week: Math.ceil(adjustedMoment.dayOfYear() / 7), + year: adjustedMoment.year() + }; + } + + //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 = makeUTCDate(year, 0, 1).getUTCDay(), daysToAdd, 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 + }; + } + + /************************************ + Top Level Functions + ************************************/ + + function makeMoment(config) { + var input = config._i, + format = config._f, + res; + + config._locale = config._locale || moment.localeData(config._l); + + if (input === null || (format === undefined && input === '')) { + return moment.invalid({nullInput: true}); + } + + if (typeof input === 'string') { + config._i = input = config._locale.preparse(input); + } + + if (moment.isMoment(input)) { + return new Moment(input, true); + } else if (format) { + if (isArray(format)) { + makeDateFromStringAndArray(config); + } else { + makeDateFromStringAndFormat(config); + } + } else { + makeDateFromInput(config); + } + + res = new Moment(config); + if (res._nextDay) { + // Adding is smart enough around DST + res.add(1, 'd'); + res._nextDay = undefined; + } + + return res; + } + + moment = function (input, format, locale, strict) { + 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 = {}; + c._isAMomentObject = true; + c._i = input; + c._f = format; + c._l = locale; + c._strict = strict; + c._isUTC = false; + c._pf = defaultParsingFlags(); + + return makeMoment(c); + }; + + moment.suppressDeprecationWarnings = false; + + moment.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' : '')); + } + ); + + // 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 moment(); + } + res = moments[0]; + for (i = 1; i < moments.length; ++i) { + if (moments[i][fn](res)) { + res = moments[i]; + } + } + return res; + } + + moment.min = function () { + var args = [].slice.call(arguments, 0); + + return pickBy('isBefore', args); + }; + + moment.max = function () { + var args = [].slice.call(arguments, 0); + + return pickBy('isAfter', args); + }; + + // creating with utc + moment.utc = function (input, format, locale, strict) { + 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 = {}; + c._isAMomentObject = true; + c._useUTC = true; + c._isUTC = true; + c._l = locale; + c._i = input; + c._f = format; + c._strict = strict; + c._pf = defaultParsingFlags(); + + return makeMoment(c).utc(); + }; + + // creating with unix timestamp (in seconds) + moment.unix = function (input) { + return moment(input * 1000); + }; + + // duration + moment.duration = function (input, key) { + var duration = input, + // matching against regexp is expensive, do it on demand + match = null, + sign, + ret, + parseIso, + diffRes; + + if (moment.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 = aspNetTimeSpanJsonRegex.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 = isoDurationRegex.exec(input))) { + sign = (match[1] === '-') ? -1 : 1; + parseIso = function (inp) { + // 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; + }; + duration = { + y: parseIso(match[2]), + M: parseIso(match[3]), + d: parseIso(match[4]), + h: parseIso(match[5]), + m: parseIso(match[6]), + s: parseIso(match[7]), + w: parseIso(match[8]) + }; + } else if (typeof duration === 'object' && + ('from' in duration || 'to' in duration)) { + diffRes = momentsDifference(moment(duration.from), moment(duration.to)); + + duration = {}; + duration.ms = diffRes.milliseconds; + duration.M = diffRes.months; + } + + ret = new Duration(duration); + + if (moment.isDuration(input) && hasOwnProp(input, '_locale')) { + ret._locale = input._locale; + } + + return ret; + }; + + // version number + moment.version = VERSION; + + // default format + moment.defaultFormat = isoFormat; + + // constant that refers to the ISO standard + moment.ISO_8601 = function () {}; + + // Plugins that add properties should also add the key here (null value), + // so we can properly clone ourselves. + moment.momentProperties = momentProperties; + + // This function will be called whenever a moment is mutated. + // It is intended to keep the offset in sync with the timezone. + moment.updateOffset = function () {}; + + // This function allows you to set a threshold for relative time strings + moment.relativeTimeThreshold = function (threshold, limit) { + if (relativeTimeThresholds[threshold] === undefined) { + return false; + } + if (limit === undefined) { + return relativeTimeThresholds[threshold]; + } + relativeTimeThresholds[threshold] = limit; + return true; + }; + + moment.lang = deprecate( + 'moment.lang is deprecated. Use moment.locale instead.', + function (key, value) { + return moment.locale(key, value); + } + ); + + // 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. + moment.locale = function (key, values) { + var data; + if (key) { + if (typeof(values) !== 'undefined') { + data = moment.defineLocale(key, values); + } + else { + data = moment.localeData(key); + } + + if (data) { + moment.duration._locale = moment._locale = data; + } + } + + return moment._locale._abbr; + }; + + moment.defineLocale = function (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 + moment.locale(name); + + return locales[name]; + } else { + // useful for testing + delete locales[name]; + return null; + } + }; + + moment.langData = deprecate( + 'moment.langData is deprecated. Use moment.localeData instead.', + function (key) { + return moment.localeData(key); + } + ); + + // returns locale data + moment.localeData = function (key) { + var locale; + + if (key && key._locale && key._locale._abbr) { + key = key._locale._abbr; + } + + if (!key) { + return moment._locale; + } + + if (!isArray(key)) { + //short-circuit everything else + locale = loadLocale(key); + if (locale) { + return locale; + } + key = [key]; + } + + return chooseLocale(key); + }; + + // compare moment object + moment.isMoment = function (obj) { + return obj instanceof Moment || + (obj != null && hasOwnProp(obj, '_isAMomentObject')); + }; + + // for typechecking Duration objects + moment.isDuration = function (obj) { + return obj instanceof Duration; + }; + + for (i = lists.length - 1; i >= 0; --i) { + makeList(lists[i]); + } + + moment.normalizeUnits = function (units) { + return normalizeUnits(units); + }; + + moment.invalid = function (flags) { + var m = moment.utc(NaN); + if (flags != null) { + extend(m._pf, flags); + } + else { + m._pf.userInvalidated = true; + } + + return m; + }; + + moment.parseZone = function () { + return moment.apply(null, arguments).parseZone(); + }; + + moment.parseTwoDigitYear = function (input) { + return toInt(input) + (toInt(input) > 68 ? 1900 : 2000); + }; + + /************************************ + Moment Prototype + ************************************/ + + + extend(moment.fn = Moment.prototype, { + + clone : function () { + return moment(this); + }, + + valueOf : function () { + return +this._d + ((this._offset || 0) * 60000); + }, + + unix : function () { + return Math.floor(+this / 1000); + }, + + toString : function () { + return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ'); + }, + + toDate : function () { + return this._offset ? new Date(+this) : this._d; + }, + + toISOString : function () { + var m = moment(this).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]'); + } + }, + + toArray : function () { + var m = this; + return [ + m.year(), + m.month(), + m.date(), + m.hours(), + m.minutes(), + m.seconds(), + m.milliseconds() + ]; + }, + + isValid : function () { + return isValid(this); + }, + + isDSTShifted : function () { + if (this._a) { + return this.isValid() && compareArrays(this._a, (this._isUTC ? moment.utc(this._a) : moment(this._a)).toArray()) > 0; + } + + return false; + }, + + parsingFlags : function () { + return extend({}, this._pf); + }, + + invalidAt: function () { + return this._pf.overflow; + }, + + utc : function (keepLocalTime) { + return this.zone(0, keepLocalTime); + }, + + local : function (keepLocalTime) { + if (this._isUTC) { + this.zone(0, keepLocalTime); + this._isUTC = false; + + if (keepLocalTime) { + this.add(this._dateTzOffset(), 'm'); + } + } + return this; + }, + + format : function (inputString) { + var output = formatMoment(this, inputString || moment.defaultFormat); + return this.localeData().postformat(output); + }, + + add : createAdder(1, 'add'), + + subtract : createAdder(-1, 'subtract'), + + diff : function (input, units, asFloat) { + var that = makeAs(input, this), + zoneDiff = (this.zone() - that.zone()) * 6e4, + diff, output, daysAdjust; + + units = normalizeUnits(units); + + if (units === 'year' || units === 'month') { + // average number of days in the months in the given dates + diff = (this.daysInMonth() + that.daysInMonth()) * 432e5; // 24 * 60 * 60 * 1000 / 2 + // difference in months + output = ((this.year() - that.year()) * 12) + (this.month() - that.month()); + // adjust by taking difference in days, average number of days + // and dst in the given months. + daysAdjust = (this - moment(this).startOf('month')) - + (that - moment(that).startOf('month')); + // same as above but with zones, to negate all dst + daysAdjust -= ((this.zone() - moment(this).startOf('month').zone()) - + (that.zone() - moment(that).startOf('month').zone())) * 6e4; + output += daysAdjust / diff; + if (units === 'year') { + output = output / 12; + } + } else { + diff = (this - that); + output = units === 'second' ? diff / 1e3 : // 1000 + units === 'minute' ? diff / 6e4 : // 1000 * 60 + units === 'hour' ? diff / 36e5 : // 1000 * 60 * 60 + units === 'day' ? (diff - zoneDiff) / 864e5 : // 1000 * 60 * 60 * 24, negate dst + units === 'week' ? (diff - zoneDiff) / 6048e5 : // 1000 * 60 * 60 * 24 * 7, negate dst + diff; + } + return asFloat ? output : absRound(output); + }, + + from : function (time, withoutSuffix) { + return moment.duration({to: this, from: time}).locale(this.locale()).humanize(!withoutSuffix); + }, + + fromNow : function (withoutSuffix) { + return this.from(moment(), withoutSuffix); + }, + + calendar : function (time) { + // We want to compare the start of today, vs this. + // Getting start-of-today depends on whether we're zone'd or not. + var now = time || moment(), + sod = makeAs(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, moment(now))); + }, + + isLeapYear : function () { + return isLeapYear(this.year()); + }, + + isDST : function () { + return (this.zone() < this.clone().month(0).zone() || + this.zone() < this.clone().month(5).zone()); + }, + + day : function (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; + } + }, + + month : makeAccessor('Month', true), + + startOf : function (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); + /* falls through */ + } + + // weeks are a special case + if (units === 'week') { + this.weekday(0); + } else if (units === 'isoWeek') { + this.isoWeekday(1); + } + + // quarters are also special + if (units === 'quarter') { + this.month(Math.floor(this.month() / 3) * 3); + } + + return this; + }, + + endOf: function (units) { + units = normalizeUnits(units); + if (units === undefined || units === 'millisecond') { + return this; + } + return this.startOf(units).add(1, (units === 'isoWeek' ? 'week' : units)).subtract(1, 'ms'); + }, + + isAfter: function (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = moment.isMoment(input) ? input : moment(input); + return +this > +input; + } else { + inputMs = moment.isMoment(input) ? +input : +moment(input); + return inputMs < +this.clone().startOf(units); + } + }, + + isBefore: function (input, units) { + var inputMs; + units = normalizeUnits(typeof units !== 'undefined' ? units : 'millisecond'); + if (units === 'millisecond') { + input = moment.isMoment(input) ? input : moment(input); + return +this < +input; + } else { + inputMs = moment.isMoment(input) ? +input : +moment(input); + return +this.clone().endOf(units) < inputMs; + } + }, + + isSame: function (input, units) { + var inputMs; + units = normalizeUnits(units || 'millisecond'); + if (units === 'millisecond') { + input = moment.isMoment(input) ? input : moment(input); + return +this === +input; + } else { + inputMs = +moment(input); + return +(this.clone().startOf(units)) <= inputMs && inputMs <= +(this.clone().endOf(units)); + } + }, + + min: deprecate( + 'moment().min is deprecated, use moment.min instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other < this ? this : other; + } + ), + + max: deprecate( + 'moment().max is deprecated, use moment.max instead. https://github.com/moment/moment/issues/1548', + function (other) { + other = moment.apply(null, arguments); + return other > this ? this : other; + } + ), + + // keepLocalTime = true means only change the timezone, without + // affecting the local hour. So 5:31:26 +0300 --[zone(2, true)]--> + // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist int zone + // +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. + zone : function (input, keepLocalTime) { + var offset = this._offset || 0, + localAdjust; + if (input != null) { + if (typeof input === 'string') { + input = timezoneMinutesFromString(input); + } + if (Math.abs(input) < 16) { + input = input * 60; + } + if (!this._isUTC && keepLocalTime) { + localAdjust = this._dateTzOffset(); + } + this._offset = input; + this._isUTC = true; + if (localAdjust != null) { + this.subtract(localAdjust, 'm'); + } + if (offset !== input) { + if (!keepLocalTime || this._changeInProgress) { + addOrSubtractDurationFromMoment(this, + moment.duration(offset - input, 'm'), 1, false); + } else if (!this._changeInProgress) { + this._changeInProgress = true; + moment.updateOffset(this, true); + this._changeInProgress = null; + } + } + } else { + return this._isUTC ? offset : this._dateTzOffset(); + } + return this; + }, + + zoneAbbr : function () { + return this._isUTC ? 'UTC' : ''; + }, + + zoneName : function () { + return this._isUTC ? 'Coordinated Universal Time' : ''; + }, + + parseZone : function () { + if (this._tzm) { + this.zone(this._tzm); + } else if (typeof this._i === 'string') { + this.zone(this._i); + } + return this; + }, + + hasAlignedHourOffset : function (input) { + if (!input) { + input = 0; + } + else { + input = moment(input).zone(); + } + + return (this.zone() - input) % 60 === 0; + }, + + daysInMonth : function () { + return daysInMonth(this.year(), this.month()); + }, + + dayOfYear : function (input) { + var dayOfYear = round((moment(this).startOf('day') - moment(this).startOf('year')) / 864e5) + 1; + return input == null ? dayOfYear : this.add((input - dayOfYear), 'd'); + }, + + quarter : function (input) { + return input == null ? Math.ceil((this.month() + 1) / 3) : this.month((input - 1) * 3 + this.month() % 3); + }, + + weekYear : function (input) { + var year = weekOfYear(this, this.localeData()._week.dow, this.localeData()._week.doy).year; + return input == null ? year : this.add((input - year), 'y'); + }, + + isoWeekYear : function (input) { + var year = weekOfYear(this, 1, 4).year; + return input == null ? year : this.add((input - year), 'y'); + }, + + week : function (input) { + var week = this.localeData().week(this); + return input == null ? week : this.add((input - week) * 7, 'd'); + }, + + isoWeek : function (input) { + var week = weekOfYear(this, 1, 4).week; + return input == null ? week : this.add((input - week) * 7, 'd'); + }, + + weekday : function (input) { + var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7; + return input == null ? weekday : this.add(input - weekday, 'd'); + }, + + isoWeekday : function (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); + }, + + isoWeeksInYear : function () { + return weeksInYear(this.year(), 1, 4); + }, + + weeksInYear : function () { + var weekInfo = this.localeData()._week; + return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy); + }, + + get : function (units) { + units = normalizeUnits(units); + return this[units](); + }, + + set : function (units, value) { + units = normalizeUnits(units); + if (typeof this[units] === 'function') { + this[units](value); + } + return this; + }, + + // If passed a locale key, it will set the locale for this + // instance. Otherwise, it will return the locale configuration + // variables for this instance. + locale : function (key) { + var newLocaleData; + + if (key === undefined) { + return this._locale._abbr; + } else { + newLocaleData = moment.localeData(key); + if (newLocaleData != null) { + this._locale = newLocaleData; + } + return this; + } + }, + + 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); + } + } + ), + + localeData : function () { + return this._locale; + }, + + _dateTzOffset : function () { + // On Firefox.24 Date#getTimezoneOffset returns a floating point. + // https://github.com/moment/moment/pull/1871 + return Math.round(this._d.getTimezoneOffset() / 15) * 15; + } + }); + + function rawMonthSetter(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 rawGetter(mom, unit) { + return mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit](); + } + + function rawSetter(mom, unit, value) { + if (unit === 'Month') { + return rawMonthSetter(mom, value); + } else { + return mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value); + } + } + + function makeAccessor(unit, keepTime) { + return function (value) { + if (value != null) { + rawSetter(this, unit, value); + moment.updateOffset(this, keepTime); + return this; + } else { + return rawGetter(this, unit); + } + }; + } + + moment.fn.millisecond = moment.fn.milliseconds = makeAccessor('Milliseconds', false); + moment.fn.second = moment.fn.seconds = makeAccessor('Seconds', false); + moment.fn.minute = moment.fn.minutes = makeAccessor('Minutes', false); + // 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. + moment.fn.hour = moment.fn.hours = makeAccessor('Hours', true); + // moment.fn.month is defined separately + moment.fn.date = makeAccessor('Date', true); + moment.fn.dates = deprecate('dates accessor is deprecated. Use date instead.', makeAccessor('Date', true)); + moment.fn.year = makeAccessor('FullYear', true); + moment.fn.years = deprecate('years accessor is deprecated. Use year instead.', makeAccessor('FullYear', true)); + + // add plural methods + moment.fn.days = moment.fn.day; + moment.fn.months = moment.fn.month; + moment.fn.weeks = moment.fn.week; + moment.fn.isoWeeks = moment.fn.isoWeek; + moment.fn.quarters = moment.fn.quarter; + + // add aliased format methods + moment.fn.toJSON = moment.fn.toISOString; + + /************************************ + Duration Prototype + ************************************/ + + + function daysToYears (days) { + // 400 years have 146097 days (taking into account leap year rules) + return days * 400 / 146097; + } + + function yearsToDays (years) { + // years * 365 + absRound(years / 4) - + // absRound(years / 100) + absRound(years / 400); + return years * 146097 / 400; + } + + extend(moment.duration.fn = Duration.prototype, { + + _bubble : function () { + var milliseconds = this._milliseconds, + days = this._days, + months = this._months, + data = this._data, + 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 = absRound(milliseconds / 1000); + data.seconds = seconds % 60; + + minutes = absRound(seconds / 60); + data.minutes = minutes % 60; + + hours = absRound(minutes / 60); + data.hours = hours % 24; + + days += absRound(hours / 24); + + // Accurately convert days to years, assume start from year 0. + years = absRound(daysToYears(days)); + days -= absRound(yearsToDays(years)); + + // 30 days to a month + // TODO (iskren): Use anchor date (like 1st Jan) to compute this. + months += absRound(days / 30); + days %= 30; + + // 12 months -> 1 year + years += absRound(months / 12); + months %= 12; + + data.days = days; + data.months = months; + data.years = years; + }, + + abs : function () { + this._milliseconds = Math.abs(this._milliseconds); + this._days = Math.abs(this._days); + this._months = Math.abs(this._months); + + this._data.milliseconds = Math.abs(this._data.milliseconds); + this._data.seconds = Math.abs(this._data.seconds); + this._data.minutes = Math.abs(this._data.minutes); + this._data.hours = Math.abs(this._data.hours); + this._data.months = Math.abs(this._data.months); + this._data.years = Math.abs(this._data.years); + + return this; + }, + + weeks : function () { + return absRound(this.days() / 7); + }, + + valueOf : function () { + return this._milliseconds + + this._days * 864e5 + + (this._months % 12) * 2592e6 + + toInt(this._months / 12) * 31536e6; + }, + + humanize : function (withSuffix) { + var output = relativeTime(this, !withSuffix, this.localeData()); + + if (withSuffix) { + output = this.localeData().pastFuture(+this, output); + } + + return this.localeData().postformat(output); + }, + + add : function (input, val) { + // supports only 2.0-style add(1, 's') or add(moment) + var dur = moment.duration(input, val); + + this._milliseconds += dur._milliseconds; + this._days += dur._days; + this._months += dur._months; + + this._bubble(); + + return this; + }, + + subtract : function (input, val) { + var dur = moment.duration(input, val); + + this._milliseconds -= dur._milliseconds; + this._days -= dur._days; + this._months -= dur._months; + + this._bubble(); + + return this; + }, + + get : function (units) { + units = normalizeUnits(units); + return this[units.toLowerCase() + 's'](); + }, + + as : function (units) { + var days, months; + units = normalizeUnits(units); + + if (units === 'month' || units === 'year') { + days = this._days + this._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 + this._milliseconds / 6048e5; + case 'day': return days + this._milliseconds / 864e5; + case 'hour': return days * 24 + this._milliseconds / 36e5; + case 'minute': return days * 24 * 60 + this._milliseconds / 6e4; + case 'second': return days * 24 * 60 * 60 + this._milliseconds / 1000; + // Math.floor prevents floating point math errors here + case 'millisecond': return Math.floor(days * 24 * 60 * 60 * 1000) + this._milliseconds; + default: throw new Error('Unknown unit ' + units); + } + } + }, + + lang : moment.fn.lang, + locale : moment.fn.locale, + + toIsoString : deprecate( + 'toIsoString() is deprecated. Please use toISOString() instead ' + + '(notice the capitals)', + function () { + return this.toISOString(); + } + ), + + toISOString : function () { + // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js + var years = Math.abs(this.years()), + months = Math.abs(this.months()), + days = Math.abs(this.days()), + hours = Math.abs(this.hours()), + minutes = Math.abs(this.minutes()), + seconds = Math.abs(this.seconds() + this.milliseconds() / 1000); + + if (!this.asSeconds()) { + // this is the same as C#'s (Noda) and python (isodate)... + // but not other JS (goog.date) + return 'P0D'; + } + + return (this.asSeconds() < 0 ? '-' : '') + + 'P' + + (years ? years + 'Y' : '') + + (months ? months + 'M' : '') + + (days ? days + 'D' : '') + + ((hours || minutes || seconds) ? 'T' : '') + + (hours ? hours + 'H' : '') + + (minutes ? minutes + 'M' : '') + + (seconds ? seconds + 'S' : ''); + }, + + localeData : function () { + return this._locale; + } + }); + + moment.duration.fn.toString = moment.duration.fn.toISOString; + + function makeDurationGetter(name) { + moment.duration.fn[name] = function () { + return this._data[name]; + }; + } + + for (i in unitMillisecondFactors) { + if (hasOwnProp(unitMillisecondFactors, i)) { + makeDurationGetter(i.toLowerCase()); + } + } + + moment.duration.fn.asMilliseconds = function () { + return this.as('ms'); + }; + moment.duration.fn.asSeconds = function () { + return this.as('s'); + }; + moment.duration.fn.asMinutes = function () { + return this.as('m'); + }; + moment.duration.fn.asHours = function () { + return this.as('h'); + }; + moment.duration.fn.asDays = function () { + return this.as('d'); + }; + moment.duration.fn.asWeeks = function () { + return this.as('weeks'); + }; + moment.duration.fn.asMonths = function () { + return this.as('M'); + }; + moment.duration.fn.asYears = function () { + return this.as('y'); + }; + + /************************************ + Default Locale + ************************************/ + + + // Set default locale, other locale will inherit from English. + moment.locale('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; + } + }); + + /* EMBED_LOCALES */ + + /************************************ + Exposing Moment + ************************************/ + + function makeGlobal(shouldDeprecate) { + /*global ender:false */ + if (typeof ender !== 'undefined') { + return; + } + oldGlobalMoment = globalScope.moment; + if (shouldDeprecate) { + globalScope.moment = deprecate( + 'Accessing Moment through the global scope is ' + + 'deprecated, and will be removed in an upcoming ' + + 'release.', + moment); + } else { + globalScope.moment = moment; + } + } + + // CommonJS module is defined + if (hasModule) { + module.exports = moment; + } else if (typeof define === 'function' && define.amd) { + define('moment', function (require, exports, module) { + if (module.config && module.config() && module.config().noGlobal === true) { + // release the global variable + globalScope.moment = oldGlobalMoment; + } + + return moment; + }); + makeGlobal(true); + } else { + makeGlobal(); + } +}).call(this); + +}).call(this,typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : {}) +},{}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/Object.assign.js":[function(require,module,exports){ +/** + * Copyright 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 Object.assign + */ + +// https://people.mozilla.org/~jorendorff/es6-draft.html#sec-object.assign + +function assign(target, sources) { + if (target == null) { + throw new TypeError('Object.assign target cannot be null or undefined'); + } + + var to = Object(target); + var hasOwnProperty = Object.prototype.hasOwnProperty; + + for (var nextIndex = 1; nextIndex < arguments.length; nextIndex++) { + var nextSource = arguments[nextIndex]; + if (nextSource == null) { + continue; + } + + var from = Object(nextSource); + + // We don't currently support accessors nor proxies. Therefore this + // copy cannot throw. If we ever supported this then we must handle + // exceptions and side-effects. We don't support symbols so they won't + // be transferred. + + for (var key in from) { + if (hasOwnProperty.call(from, key)) { + to[key] = from[key]; + } + } + } + + return to; +}; + +module.exports = assign; + +},{}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/copyProperties.js":[function(require,module,exports){ +(function (process){ +/** + * Copyright 2013-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 copyProperties + */ + +/** + * Copy properties from one or more objects (up to 5) into the first object. + * This is a shallow copy. It mutates the first object and also returns it. + * + * NOTE: `arguments` has a very significant performance penalty, which is why + * we don't support unlimited arguments. + */ +function copyProperties(obj, a, b, c, d, e, f) { + obj = obj || {}; + + if ("production" !== process.env.NODE_ENV) { + if (f) { + throw new Error('Too many arguments passed to copyProperties'); + } + } + + var args = [a, b, c, d, e]; + var ii = 0, v; + while (args[ii]) { + v = args[ii++]; + for (var k in v) { + obj[k] = v[k]; + } + + // IE ignores toString in object iteration.. See: + // webreflection.blogspot.com/2007/07/quick-fix-internet-explorer-and.html + if (v.hasOwnProperty && v.hasOwnProperty('toString') && + (typeof v.toString != 'undefined') && (obj.toString !== v.toString)) { + obj.toString = v.toString; + } + } + + return obj; +} + +module.exports = copyProperties; + +// deprecation notice +console.warn( + 'react/lib/copyProperties has been deprecated and will be removed in the ' + + 'next version of React. All uses can be replaced with ' + + 'Object.assign(obj, a, b, ...) or _.extend(obj, a, b, ...).' +); + +}).call(this,require('_process')) +},{"_process":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/process/browser.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/merge.js":[function(require,module,exports){ +/** + * Copyright 2013-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 merge + */ + +"use strict"; + +var assign = require("./Object.assign"); + +/** + * Shallow merges two structures into a return value, without mutating either. + * + * @param {?object} one Optional object with properties to merge from. + * @param {?object} two Optional object with properties to merge from. + * @return {object} The shallow extension of one by two. + */ +var merge = function(one, two) { + return assign({}, one, two); +}; + +module.exports = merge; + +// deprecation notice +console.warn( + 'react/lib/merge has been deprecated and will be removed in the ' + + 'next version of React. All uses can be replaced with ' + + 'Object.assign({}, a, b) or _.extend({}, a, b).' +); + +},{"./Object.assign":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/Object.assign.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/persistence/MessagePersistence.coffee":[function(require,module,exports){ +var MessageActions; + +MessageActions = require('../actions/MessageActions.coffee'); + +module.exports = { + listen: function(since) { + return window.urb.subscribe({ + appl: "radio", + path: "/fm/main/" + since + }, function(err, res) { + var _ref, _ref1; + console.log('m subscription updates'); + console.log(res.data); + if ((_ref = res.data) != null ? (_ref1 = _ref.grams) != null ? _ref1.tele : void 0 : void 0) { + return MessageActions.loadMessages(res.data.grams); + } + }); + }, + get: function(start, end) { + return window.urb.subscribe({ + appl: "radio", + path: "/fm/main/" + end + "/" + start + }, function(err, res) { + var _ref, _ref1; + console.log('get'); + console.log(res); + if ((_ref = res.data) != null ? (_ref1 = _ref.grams) != null ? _ref1.tele : void 0 : void 0) { + MessageActions.loadMessages(res.data.grams); + return window.urb.unsubscribe({ + appl: "radio", + path: "/fm/main/" + start + "/" + end + }, function(err, res) { + console.log('done'); + return console.log(res); + }); + } + }); + }, + sendMessage: function(message, cb) { + return window.urb.send({ + appl: "radio", + mark: "radio-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/Projects/urbit.radio/pub/radio/src/actions/MessageActions.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/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: "radio", + mark: "radio-command", + data: { + design: { + party: name, + config: { + sources: [], + cordon: { + white: false, + list: [] + } + } + } + } + }, cb); + }, + addSource: function(party, ship, sources) { + var send; + send = { + appl: "radio", + mark: "radio-command", + data: { + design: { + party: party, + config: { + sources: sources, + cordon: { + white: false, + list: [] + } + } + } + } + }; + return window.urb.send(send, function(err, res) { + console.log('add source updates'); + return console.log(arguments); + }); + }, + ping: function(_ping) { + return window.urb.send({ + appl: "radio", + mark: "radio-command", + data: { + ping: _ping + } + }); + }, + members: function() { + return window.urb.subscribe({ + appl: "radio", + path: "/am/main" + }, function(err, res) { + var _ref, _ref1; + console.log('membership updates'); + 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); + } + }); + }, + config: function() { + return window.urb.subscribe({ + appl: "radio", + path: "/xm/main" + }, function(err, res) { + console.log('config updates'); + console.log(res.data); + if (res.data.config) { + return StationActions.loadConfig("main", res.data.config); + } + }); + }, + rooms: function() { + return window.urb.subscribe({ + appl: "radio", + path: "/" + }, function(err, res) { + console.log('house updates'); + return console.log(res.data); + }); + }, + listen: function(station) { + return window.urb.subscribe({ + appl: "radio", + path: "/am/" + station + }, function(err, res) { + console.log('station subscription updates'); + return console.log(res.data); + }); + } +}; + + + +},{"../actions/StationActions.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/actions/StationActions.coffee"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/MessageStore.coffee":[function(require,module,exports){ +var EventEmitter, MessageDispatcher, MessageStore, merge, moment, _fetching, _last, _messages, _station; + +moment = require('moment-timezone'); + +merge = require('react/lib/merge'); + +EventEmitter = require('events').EventEmitter; + +MessageDispatcher = require('../dispatcher/Dispatcher.coffee'); + +_messages = {}; + +_fetching = false; + +_last = null; + +_station = null; + +MessageStore = merge(EventEmitter.prototype, { + 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; + }, + setStation: function(station) { + return _station = station; + }, + sendMessage: function(message) { + return _messages[message.thought.serial] = message; + }, + loadMessages: function(messages, last) { + 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) { + _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.dispatchToken = MessageDispatcher.register(function(payload) { + var action; + action = payload.action; + switch (action.type) { + case 'station-switch': + return MessageStore.setStation(action.station); + case 'messages-fetch': + MessageStore.setFetching(true); + return MessageStore.emitChange(); + case 'messages-load': + MessageStore.loadMessages(action.messages, action.last); + return MessageStore.emitChange(); + case 'message-load': + MessageStore.loadMessage(action.time, action.message, action.author); + return MessageStore.emitChange(); + case 'message-send': + MessageStore.sendMessage(action.message); + return MessageStore.emitChange(); + } +}); + +module.exports = MessageStore; + + + +},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js","moment-timezone":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/moment-timezone/index.js","react/lib/merge":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/merge.js"}],"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/stores/StationStore.coffee":[function(require,module,exports){ +var EventEmitter, StationDispatcher, StationStore, merge, _config, _members, _station, _stations, _typing; + +merge = require('react/lib/merge'); + +EventEmitter = require('events').EventEmitter; + +StationDispatcher = require('../dispatcher/Dispatcher.coffee'); + +_members = {}; + +_stations = []; + +_station = null; + +_config = {}; + +_typing = {}; + +StationStore = merge(EventEmitter.prototype, { + removeChangeListener: function(cb) { + return this.removeListener("change", cb); + }, + emitChange: function() { + return this.emit('change'); + }, + addChangeListener: function(cb) { + return this.on('change', cb); + }, + loadConfig: function(station, config) { + return _config[station] = config; + }, + getConfig: function(station) { + return _config[station]; + }, + getMember: function(ship) { + return { + ship: ship + }; + }, + changeMember: function(dir, name, ship) { + if (dir === "out") { + _members = _.filter(_members, function(_member) { + return _member.ship !== ship; + }); + } + if (dir === "in") { + return _members.push({ + name: name, + ship: ship + }); + } + }, + loadMembers: function(members) { + return _members = members; + }, + getMembers: function() { + return _members; + }, + createStation: function(station) { + if (_stations.indexOf(station) === -1) { + return _stations.push(station); + } + }, + loadStations: function(stations) { + return _stations = stations; + }, + getStations: function(station) { + if (_config.main) { + return _config.main.sources; + } else { + return []; + } + }, + 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.main) != null ? _ref.sources.indexOf(station) : void 0) === -1) { + return _config.main.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.dispatchToken = StationDispatcher.register(function(payload) { + var action; + action = payload.action; + switch (action.type) { + case 'station-switch': + StationStore.setStation(action.station); + return StationStore.emitChange(); + case "config-load": + StationStore.loadConfig(action.station, action.config); + return StationStore.emitChange(); + case "stations-load": + StationStore.loadStations(action.stations); + return StationStore.emitChange(); + case "stations-leave": + StationStore.loadStations(action.stations); + StationStore.unsetStation(action.station); + return StationStore.emitChange(); + case "station-create": + StationStore.createStation(action.station); + return StationStore.emitChange(); + case "members-load": + StationStore.loadMembers(action.members); + return StationStore.emitChange(); + case "typing-set": + StationStore.setTyping(action.station, action.state); + return StationStore.emitChange(); + } +}); + +module.exports = StationStore; + + + +},{"../dispatcher/Dispatcher.coffee":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/dispatcher/Dispatcher.coffee","events":"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/events/events.js","react/lib/merge":"/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/node_modules/react/lib/merge.js"}],"/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; +} + +},{}],"/usr/local/lib/node_modules/watchify/node_modules/browserify/node_modules/process/browser.js":[function(require,module,exports){ +// shim for using process in browser + +var process = module.exports = {}; + +process.nextTick = (function () { + var canSetImmediate = typeof window !== 'undefined' + && window.setImmediate; + var canPost = typeof window !== 'undefined' + && window.postMessage && window.addEventListener + ; + + if (canSetImmediate) { + return function (f) { return window.setImmediate(f) }; + } + + if (canPost) { + var queue = []; + window.addEventListener('message', function (ev) { + var source = ev.source; + if ((source === window || source === null) && ev.data === 'process-tick') { + ev.stopPropagation(); + if (queue.length > 0) { + var fn = queue.shift(); + fn(); + } + } + }, true); + + return function nextTick(fn) { + queue.push(fn); + window.postMessage('process-tick', '*'); + }; + } + + return function nextTick(fn) { + setTimeout(fn, 0); + }; +})(); + +process.title = 'browser'; +process.browser = true; +process.env = {}; +process.argv = []; + +function noop() {} + +process.on = noop; +process.addListener = noop; +process.once = noop; +process.off = noop; +process.removeListener = noop; +process.removeAllListeners = noop; +process.emit = noop; + +process.binding = function (name) { + throw new Error('process.binding is not supported'); +} + +// TODO(shtylman) +process.cwd = function () { return '/' }; +process.chdir = function (dir) { + throw new Error('process.chdir is not supported'); +}; + +},{}]},{},["/Users/galen/Documents/Projects/urbit.radio/pub/radio/src/main.coffee"]); diff --git a/main/pub/src/radio/hymn.hook b/main/pub/src/radio/hymn.hook new file mode 100644 index 000000000..4cc4ec610 --- /dev/null +++ b/main/pub/src/radio/hymn.hook @@ -0,0 +1,11 @@ +;html + ;head + ;title: Radio Tests + ;script(type "text/javascript", src "//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"); + ;script(type "text/javascript", src "/gep/hart.js"); + == + ;body + ;script(type "text/javascript", src "/gen/main/lib/urb.js"); + ;script(type "text/javascript", src "/gen/main/pub/src/radio/main.js"); + == +== \ No newline at end of file diff --git a/main/pub/src/radio/main.js b/main/pub/src/radio/main.js new file mode 100644 index 000000000..88d82766d --- /dev/null +++ b/main/pub/src/radio/main.js @@ -0,0 +1,14 @@ +(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;oi.indexOf(d,e)||~i.indexOf(c,e)&&!~i.indexOf(d,e)||!~i.indexOf(c,e)&&~i.indexOf(d,e)){f=i.indexOf(c,e),g=i.indexOf(d,e);if(~f&&!~g||!~f&&~g){var j=a.slice(0,(h||1)+1).join(b);a=[j].concat(a.slice((h||1)+1))}e=(g>f?g:f)+1,h=0}else e=0}return a}function j(a,b){var c,d=0,e="";while(c=a.substr(d).match(/[^\w\d\- %@&]*\*[^\w\d\- %@&]*/))d=c.index+c[0].length,c[0]=c[0].replace(/^\*/,"([_.()!\\ %@&a-zA-Z0-9-]+)"),e+=a.substr(0,c.index)+c[0];a=e+=a.substr(d);var f=a.match(/:([^\/]+)/ig),g,h;if(f){h=f.length;for(var j=0;j7))this.history===!0?setTimeout(function(){window.onpopstate=d},500):window.onhashchange=d,this.mode="modern";else{var f=document.createElement("iframe");f.id="state-frame",f.style.display="none",document.body.appendChild(f),this.writeFrame(""),"onpropertychange"in document&&"attachEvent"in document&&document.attachEvent("onpropertychange",function(){event.propertyName==="location"&&c.check()}),window.setInterval(function(){c.check()},50),this.onHashChanged=d,this.mode="legacy"}e.listeners.push(a);return this.mode},destroy:function(a){if(!!e&&!!e.listeners){var b=e.listeners;for(var c=b.length-1;c>=0;c--)b[c]===a&&b.splice(c,1)}},setHash:function(a){this.mode==="legacy"&&this.writeFrame(a),this.history===!0?(window.history.pushState({},document.title,a),this.fire()):b.hash=a[0]==="/"?a:"/"+a;return this},writeFrame:function(a){var b=document.getElementById("state-frame"),c=b.contentDocument||b.contentWindow.document;c.open(),c.write("