diff --git a/README.md b/README.md index adfd3ba..c5afbd1 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,10 @@ A tree-shaped manager for stateful long-running processes on Urbit. +- **Grub-based Shrubbery** - Active, bug-like processes inspired by %spider in a file system inspired by Shrubbery. Emphasis on **doing** over **being**. +- **Grug-brained Shrubbery** - Aims at a simple, mechanical feel with few moving parts. +- **Groundwire Shrubbery** - Asynchronous monadic processes allow easy expression of complex blockchain operations. Sandboxing provides security. + ## Core Concepts **Grub** — a file and its running process. Files are the leaves of the tree. Each file has content (a cage) and a long-running fiber that operates on it. When a grub's process completes, the grub is deleted. When it fails, it restarts. @@ -16,4 +20,4 @@ A tree-shaped manager for stateful long-running processes on Urbit. **Dart** — an effect yielded by a fiber. Darts are the fiber's way of interacting with the world: making new grubs, poking files, peeking at state, subscribing to directories, sending gall cards, and so on. -**Intake** — an event received by a fiber. Intakes are responses to darts (peek results, poke acks), external inputs (incoming pokes, subscription updates), or lifecycle events (process start, restart after failure). \ No newline at end of file +**Intake** — an event received by a fiber. Intakes are responses to darts (peek results, poke acks), external inputs (incoming pokes, subscription updates), or lifecycle events (process start, restart after failure). diff --git a/desk/app/grubbery.hoon b/desk/app/grubbery.hoon index b59b4d6..7db08c5 100644 --- a/desk/app/grubbery.hoon +++ b/desk/app/grubbery.hoon @@ -1,6 +1,7 @@ /- spider -/+ default-agent, dbug, tarball, nexus, server, - nex-tools, marks, build +/+ default-agent, dbug, tarball, nexus, + server, multipart, http-utils, html-utils, json-utils, + marks, build, fiberio, loader, cram, pretty-file, zlib, bytestream, root /= t- /tests/nexus /= t- /tests/tarball /= t- /tests/build @@ -11,21 +12,8 @@ /= m- /mar/born /= m- /mar/subs /= m- /mar/gain -/= m- /mar/keys -/= m- /mar/ships -/= m- /mar/dill-told -/= m- /mar/dill-blit -/= m- /mar/jael-private-keys -/= m- /mar/jael-public-keys-result -/= m- /mar/claude-action -/= m- /mar/claude-messages -/= m- /mar/claude-registry -/= n- /nex/build -/= n- /nex/mcp -/= n- /nex/claude -/= n- /nex/counter -/= n- /nex/server -/= n- /nex/root +/= m- /mar/grubbery-load +/= m- /mar/grubbery-intake :: |% +$ versioned-state @@ -41,7 +29,32 @@ =subs:nexus =silo:nexus =gain:nexus + =code:nexus + =bins:nexus + jael-source=(unit rail:tarball) == +++ kel 21.000.000 :: start big; burn many at once +++ sut + :: Need to determine how much actually needs to be in here... + :: + %+ slop + !> :* tarball=tarball + nexus=nexus + marks=marks + build=build + loader=loader + server=server + multipart=multipart + http-utils=http-utils + html-utils=html-utils + json-utils=json-utils + pretty-file=pretty-file + bytestream=bytestream + zlib=zlib + io=fiberio + cram=cram + == + !>(..zuse) -- :: =| state-0 @@ -57,18 +70,46 @@ :: ++ on-init ^- (quip card _this) -:: Create empty ball with %root nexus at root - =/ init-ball=ball:tarball [`[~ `%root ~] ~] :: lump with neck=%root - =^ cards state - abet:(reload:hc *pool:nexus init-ball *sand:nexus *born:nexus *subs:nexus *silo:nexus *gain:nexus) - =^ dill-cards state - abet:sync-dill:hc - =^ clay-cards state - abet:sync-clay:hc - =^ jael-cards state - abet:sync-jael:hc + :: Ensure root lump with hardcoded neck (root nexus from lib, not code) + =/ lmp=lump:tarball (fall fil.ball *lump:tarball) + =. ball ball(fil `lmp(neck `[/ %root])) + :: Compile code from Clay + ~& >> "on-init: sync-gub" + =^ gub-cards state abet:sync-gub:hc + :: Reload root nexus (hardcoded — after code compile so child nexuses build) + ~& >> "on-init: reload-nexus-at" + =^ root-cards state abet:(reload-nexus-at:hc / root) + :: Purge stale code namespaces, then register new ones + =^ code bins purge-stale-code:hc + =^ code-cards state abet:(build-new-code-namespaces:hc / ball) + =^ spawn-cards state abet:(spawn-all-files:hc / ball) + ~& >> "on-init: sync-dill" + =^ dill-cards state abet:sync-dill:hc + ~& >> "on-init: sync-clay" + =^ clay-cards state abet:sync-clay:hc + ~& >> "on-init: sync-jael" + =^ jael-cards state abet:sync-jael:hc + ~& >> "on-init: sync-peer" + =^ peer-cards state abet:sync-peer:hc + ~& >> "on-init: sync-gall" + =^ gall-cards state abet:sync-gall:hc + ~& >> "on-init: sync-eyre" + =^ eyre-cards state abet:sync-eyre:hc + ~& >> "on-init: done" :_ this - :(weld jael-cards clay-cards dill-cards cards) + ;: weld + root-cards + code-cards + spawn-cards + gub-cards + dill-cards + clay-cards + jael-cards + peer-cards + gall-cards + eyre-cards + cards + == :: ++ on-save ^- vase @@ -80,85 +121,103 @@ =/ old !<(versioned-state old-state) ?- -.old %0 - :: Ensure neck at root is %root (nexus on-load will create main.sig) - =/ new-ball=ball:tarball - =/ lmp=lump:tarball (fall fil.ball.old [~ ~ ~]) - ball.old(fil `lmp(neck `%root)) - =^ cards state - abet:(reload:hc pool.old new-ball sand.old born.old subs.old silo.old gain.old) - =^ dill-cards state - abet:sync-dill:hc - =^ clay-cards state - abet:sync-clay:hc - =^ jael-cards state - abet:sync-jael:hc + :: Restore all state + =. state old + :: Compile code from Clay (cascades nexus on-loads) + ~& >> "on-load: sync-gub" + =^ gub-cards state abet:sync-gub:hc + :: Reload root nexus (hardcoded — runs on every app reload, after code compile) + ~& >> "on-load: reload-nexus-at" + =^ root-cards state abet:(reload-nexus-at:hc / root) + :: Purge stale code namespaces, then register new ones + =^ code bins purge-stale-code:hc + =^ code-cards state abet:(build-new-code-namespaces:hc / ball) + =^ spawn-cards state abet:(spawn-all-files:hc / ball) + ~& >> "on-load: sync-dill" + =^ dill-cards state abet:sync-dill:hc + ~& >> "on-load: sync-clay" + =^ clay-cards state abet:sync-clay:hc + ~& >> "on-load: sync-jael" + =^ jael-cards state abet:sync-jael:hc + ~& >> "on-load: sync-peer" + =^ peer-cards state abet:sync-peer:hc + ~& >> "on-load: sync-gall" + =^ gall-cards state abet:sync-gall:hc + ~& >> "on-load: sync-eyre" + =^ eyre-cards state abet:sync-eyre:hc + ~& >> "on-load: done" :_ this - :(weld jael-cards clay-cards dill-cards cards) + ;: weld + root-cards + code-cards + spawn-cards + gub-cards + dill-cards + clay-cards + jael-cards + peer-cards + gall-cards + eyre-cards + cards + == == :: ++ on-poke |= [mak=mark vas=vase] ^- (quip card _this) ?+ mak (on-poke:def mak vas) - %grubbery-action - =+ !<(=action:nexus vas) - ?- +<.action - %poke - :: All pokes route through /peers.peers/main.sig gateway - ?> ?=(%& -.dest.action) - =/ =give:nexus [|+[src sap]:bowl wire.action] - =^ cards state - abet:(poke:hc give [/'peers.peers' %'main.sig'] poke-in+!>([p.dest.action page.action])) - [cards this] - :: - %make - ?> =(src our):bowl - =^ cards state - abet:(make:hc [dest make]:action) - [cards this] - :: - %cull - ?> =(src our):bowl - =^ cards state - abet:(cull:hc dest.action) - [cards this] - :: - %sand - ?> =(src our):bowl - :: Sand destination must be a directory - ?> ?=(%| -.dest.action) - =^ cards state - abet:(set-weir:hc [p.dest.action weir.action]) - [cards this] - :: - %load - ?> =(src our):bowl - :: Load destination must be a directory - ?> ?=(%| -.dest.action) - =^ cards state - abet:(reload-nexus:hc p.dest.action) - [cards this] - == - :: HTTP request from eyre: forward to /server.server/main.server-state - :: - :: NOTE: HTTP requests go directly to /server.server/main.server-state, bypassing /peers.peers. - :: Eyre gestures at treating them as "from a ship" via src.bowl — - :: this feels misleading. + %grubbery-load + =+ !<(req=load:remote:nexus vas) + :: All actions route through /sys/ames/ships/[src]/ as a dart + :: from ship.sig. Our ship has no weir (full access); foreign + :: ships get weir from usergroups. + =/ ship-ta=@ta (scot %p src.bowl) + =^ peer-cards state + abet:(ensure-peer-ship:hc src.bowl) + =/ ship-rail=rail:tarball [/sys/ames/ships/[ship-ta] %'ship.sig'] + =/ =load:nexus + ?- +<.req + %poke [%poke p.bask.req !>(q.bask.req)] + %make + =/ m=make:nexus + ?: ?=(%& -.make.req) + &+[sand.p.make.req gain.p.make.req ball.p.make.req] + |+[gain.p.make.req [p.bask.p.make.req !>(`*`q.bask.p.make.req)] blot.p.make.req] + [%make m] + %cull [%cull ~] + %sand [%sand weir.req] + %load [%load ~] + %peek [%peek blot.req ~ %.y] + == + =/ =dart:nexus [%node /peer [%& dest.req] load] + =^ dart-cards state + abet:(process-dart:hc ship-rail dart) + [(weld peer-cards dart-cards) this] + :: HTTP request from eyre: route directly :: %handle-http-request =+ !<([eyre-id=@ta req=inbound-request:eyre] vas) - =/ =give:nexus [|+[src sap]:bowl /[eyre-id]] + =/ [site=path args=quay:eyre] (parse-url:http-utils url.request.req) + :: Ball API: spawn request fiber at /sys/eyre/requests/{eyre-id} + ?: ?=([%grubbery %api *] site) + ~& > [%eyre-api eyre-id url.request.req] + =^ cards state + abet:(make:hc [%& /sys/eyre/requests eyre-id] [%| %.n [[/ %http-request] !>([src.bowl req])] ~]) + [cards this] + :: Binding match: find handler, forward request + =/ st=server-state:nexus get-server-state:hc + =/ match=(unit [=binding:eyre handler=rail:tarball]) + (find-eyre-binding:hc bindings.st site) + ?~ match + ~& > [%eyre-no-binding site] + :_ this + (give-simple-payload:app:server eyre-id [[404 ~] `(as-octs:mimes:html 'Not Found')]) + ~& > [%eyre-dispatch binding.u.match handler.u.match] + =/ =give:nexus [|+[src.bowl /eyre] /[eyre-id]] + =/ new-st st(conns (~(put by conns.st) eyre-id binding.u.match)) =^ cards state - abet:(poke:hc give [/'server.server' %'main.server-state'] handle-http-request+!>([eyre-id src.bowl req])) + abet:(poke:(save-server-state:hc new-st) give handler.u.match [[/ %handle-http-request] !>([eyre-id src.bowl req])]) [cards this] - :: - %rebuild-caches - :: Rebuild all mark tube, dais, and nexus caches. - ?> =(src our):bowl - =. ball (~(pub ba:tarball ball) /sys/tubes (rebuild-tubes:marks our.bowl q.byk.bowl now.bowl)) - =. ball (~(pub ba:tarball ball) /sys/daises (rebuild-daises:marks our.bowl q.byk.bowl now.bowl)) - =. ball (~(pub ba:tarball ball) /sys/nexuses (rebuild-nexuses:marks our.bowl q.byk.bowl now.bowl)) - [~ this] :: %refresh-sessions :: Scry for dill sessions, sync subscriptions and grubs @@ -167,24 +226,33 @@ abet:sync-dill:hc [cards this] :: - %mount-desk - :: Mount a Clay desk into /sys/clay/[desk] + :: + %set-jael-source + :: Set the rail whose file backs jael PKI subscriptions. + :: Jael subscribes on / and /(scot %p ship); grubbery gives + :: %azimuth-udiffs facts when the file at this rail changes. ?> =(src our):bowl - =/ dek=desk !<(desk vas) - =? ball =(~ (~(get of ball) /sys/clay/[dek])) - (~(put of ball) /sys/clay/[dek] [~ ~ ~]) + =/ rl=rail:tarball !<(rail:tarball vas) + ~& > [%grubbery %set-jael-source rl] + =. jael-source `rl + :: Tell jael to listen to us + :- [%pass /jael-listen %arvo %j %listen ~ [%| %grubbery]]~ + this + :: + %gall-watch + :: Subscribe to a gall agent, materialize at /sys/gall/ + ?> =(src our):bowl + =+ !<([=ship agent=dude:gall =path] vas) =^ cards state - abet:(sync-clay-desk:hc dek) + abet:(gall-sub:hc ship agent path) [cards this] :: - %unmount-desk - :: Unmount a Clay desk from /sys/clay/[desk] + %gall-leave + :: Unsubscribe from a materialized gall subscription ?> =(src our):bowl - =/ dek=desk !<(desk vas) - ?> !=(dek %grubbery) - ?> !=(dek %base) + =+ !<([=ship agent=dude:gall =path] vas) =^ cards state - abet:(unmount-clay-desk:hc dek) + abet:(gall-unsub:hc ship agent path) [cards this] == :: @@ -197,10 +265,28 @@ [~ this] [%http-response *] [~ this] - [%proc @ *] - =^ cards state - abet:(take-watch:hc path) - [cards this] + :: Jael subscribes on / for all udiffs + ~ + ?~ jael-source (on-watch:def path) + =/ content=(unit content:tarball) + (~(get ba:tarball ball) u.jael-source) + ?~ content `this + :_ this + [%give %fact ~ %azimuth-udiffs q.sage.u.content]~ + :: Jael subscribes on /(scot %p ship) for per-ship udiffs + [@ ~] + ?~ jael-source (on-watch:def path) + =/ who=(unit @p) (slaw %p i.path) + ?~ who (on-watch:def path) + =/ content=(unit content:tarball) + (~(get ba:tarball ball) u.jael-source) + ?~ content `this + =+ !<(uds=udiffs:point:jael q.sage.u.content) + =/ filtered=udiffs:point:jael + %+ skim uds + |=([=ship *] =(ship u.who)) + :_ this + [%give %fact ~ %azimuth-udiffs !>(filtered)]~ == :: ++ on-leave @@ -211,13 +297,20 @@ [~ this] [%http-response @ ~] =/ eyre-id=@ta i.t.path - =/ =give:nexus [|+[src sap]:bowl /cancel/[eyre-id]] - =^ cards state - abet:(poke:hc give [/'server.server' %'main.server-state'] handle-http-cancel+!>(eyre-id)) - [cards this] - [%proc ^] + =/ st=server-state:nexus get-server-state:hc + =/ conn-binding=(unit binding:eyre) (~(get by conns.st) eyre-id) + :: No binding = ball API request — cull request fiber + ?~ conn-binding + =^ cards state + abet:(cull-if-exists:hc [%& /sys/eyre/requests eyre-id]) + [cards this] + :: Bound request — update conns, forward cancel to handler + =/ new-st st(conns (~(del by conns.st) eyre-id)) + =/ handler=rail:tarball + (fall (~(get by bindings.new-st) u.conn-binding) *rail:tarball) + =/ =give:nexus [|+[our.bowl /eyre] /cancel/[eyre-id]] =^ cards state - abet:(take-leave:hc path) + abet:(poke:(save-server-state:hc new-st) give handler [[/ %handle-http-cancel] !>(eyre-id)]) [cards this] == :: @@ -226,7 +319,7 @@ ^- (unit (unit cage)) ?+ path (on-peek:def path) [%x %peek %file *] - :: Single file's cage with its actual mark + :: Single file's sage, converted to cage for scry =/ here=^path t.t.t.path ?~ here ~ =/ dir=^path (snip `^path`here) @@ -235,7 +328,7 @@ (~(get ba:tarball ball) dir name) ?~ content [~ ~] - ``cage.u.content + ``[name.p.sage.u.content q.sage.u.content] :: [%x %peek %kids *] :: File names at path @@ -269,11 +362,11 @@ ``gain+!>((~(dip of gain) here)) :: [%x %peek %silo %lobe @ ~] - :: Look up cage in silo by lobe hash + :: Look up page in silo by lobe hash =/ =lobe:clay (slav %uv i.t.t.t.t.path) - =/ got=(unit cage) (~(get si:nexus silo) lobe) + =/ got=(unit bask:tarball) (~(get si:nexus silo) lobe) ?~ got [~ ~] - ``u.got + ``name.p.u.got^!>(q.u.got) :: [%x %peek %subs ~] :: Internal subscriptions @@ -283,9 +376,17 @@ ++ on-agent |= [=wire =sign:agent:gall] ^- (quip card _this) - =^ cards state - abet:(take-agent:hc wire sign) - [cards this] + ?: ?=([%gall-poke *] wire) + ?> ?=(%poke-ack -.sign) + =^ cards state + abet:(take-gall-poke:hc t.wire sign) + [cards this] + ?: ?=([%gall-sub *] wire) + =^ cards state + abet:(take-gall-sub:hc t.wire sign) + [cards this] + ~& >>> "on-agent: unhandled wire {}" + `this :: ++ on-arvo |= [=wire sign=sign-arvo] @@ -293,15 +394,16 @@ ?: ?=([%dill %logs ~] wire) ?> ?=([%dill %logs *] sign) =^ cards state - abet:(save-file:hc [/sys/dill %'logs.dill-told'] [~ %dill-told !>(told.sign)]) + abet:(save-file:hc [/sys/dill %'logs.dill-told'] [~ [/ %dill-told] !>(told.sign)]) [cards this] ?: ?=([%dill %session @ ~] wire) ?> ?=([%dill %blit *] sign) =/ ses=@tas i.t.t.wire =^ cards state - abet:(save-file:hc [/sys/dill/sessions ses] [~ %dill-blit !>(p.sign)]) + abet:(save-file:hc [/sys/dill/sessions ses] [~ [/ %dill-blit] !>(p.sign)]) [cards this] ?: ?=([%clay-desk @ ~] wire) + ~& >> "on-arvo: clay writ on wire {}" ?> ?=([%clay %writ *] sign) =/ dek=desk (slav %tas i.t.wire) =^ cards state @@ -315,11 +417,22 @@ ?: ?=([%jael %private ~] wire) ?> ?=([%jael %private-keys *] sign) =^ cards state - abet:(save-file:hc [/sys/jael %'private-keys.jael-private-keys'] [~ %jael-private-keys !>([life.sign vein.sign])]) + abet:(save-file:hc [/sys/jael %'private-keys.jael-private-keys'] [~ [/ %jael-private-keys] !>([life.sign vein.sign])]) + [cards this] + ?: ?=([%behn %timer @ *] wire) + ?> ?=([%behn %wake *] sign) + =^ cards state + abet:(handle-timer-wake:hc t.t.wire error.sign) + [cards this] + ?: ?=([%iris %request @ *] wire) + ?> ?=([%iris %http-response *] sign) + =^ cards state + abet:(handle-iris-response:hc t.t.wire client-response.sign) [cards this] - =^ cards state - abet:(take-arvo:hc wire sign) - [cards this] + ?: ?=(?([%eyre ~] [%eyre-bind ~] [%eyre-api ~]) wire) + `this + ~& >>> "on-arvo: unhandled wire {}" + `this :: ++ on-fail on-fail:def -- @@ -337,6 +450,20 @@ =^ [here=rail:tarball =take:fiber:nexus] takes ~(get to takes) =. this (process-take here take) $(this this) +:: Purge code map entries whose paths no longer exist as code nexuses. +:: +++ purge-stale-code + ^- [code:nexus bins:nexus] + =/ keys=(list path) ~(tap in ~(key by code)) + |- + ?~ keys [code bins] + =/ node=(unit lump:tarball) (~(get of ball) i.keys) + ?: ?&(?=(^ node) ?=(^ neck.u.node) =([/ %code] u.neck.u.node)) + $(keys t.keys) + ~& > "purge-stale-code: {(spud i.keys)}" + =/ old-lode=lode:nexus (~(got by code) i.keys) + =. bins (refs-dec refs.old-lode) + $(keys t.keys, code (~(del by code) i.keys)) :: Put subtree into sand at path :: ++ put-sub-sand @@ -490,18 +617,17 @@ |= =wire ^- give:nexus [|+[our.bowl /gall/grubbery] wire] -:: Validate a vase according to a mark, checking nest or scrying for dais -:: Pure vase validation given a dais +:: Validate a vase using a vale gate $-(* vase) :: :: Assumes old vase was part of a chain of +validate-vase uses where the :: original was clammed :: Nest optimization: if old vase exists and types nest, reuse old type. -:: Otherwise run vale to get canonical type from dais. +:: Otherwise run vale to get canonical type. :: :: force=%.y skips nest optimization (for reload when types may have changed) :: ++ validate-vase - |= [=dais:clay old=(unit vase) new=vase force=?] + |= [vale=$-(* vase) old=(unit vase) new=vase force=?] ^- (each vase tang) ?: ?& !force ?=(^ old) @@ -509,7 +635,7 @@ == &+[p.u.old q.new] =/ vale-result=(each vase tang) - (mule |.((vale:dais q.new))) + (mule |.((vale q.new))) ?: ?=(%| -.vale-result) =/ err=tang :~ leaf+"vale failed" @@ -518,54 +644,162 @@ == |+(weld err p.vale-result) &+p.vale-result -:: Get a cached tube from /sys/tubes/[from]/[to] +:: Find the code nexus governing a given path. +:: Walks up ancestors, checking if any immediate child is in the code map. +:: Walk up the tree looking for a compiled artifact in code nexuses. +:: At each ancestor, checks for a child named %code in the code map. +:: A %tang counts as found; only true absence walks to the next. +:: +:: +seek-built: find a compiled artifact by walking up the tree +:: +find-built: namespace + source rail (no artifact) +:: +get-built: just the artifact +:: Code namespace governance +:: +:: Every path in the tarball is governed by exactly one /code namespace: +:: the nearest /code sibling found by walking up from the path. +:: Governance is hermetic — if the governing namespace doesn't have an +:: artifact, we return ~ rather than falling back to a parent. Lower +:: namespaces must include marks/libs they need. A ford-style refcounted +:: cache (TODO) will make this redundancy free via content-addressed dedup. +:: +:: +find-code-ns: find the /code namespace governing a path +:: +++ find-code-ns + |= pax=path + ^- (unit fold:tarball) + |- + =/ cod=path + ?~ pax /code + (snoc (snip `(list @ta)`pax) %code) + ?^ (~(get by code) cod) `cod + ?~ pax ~ + $(pax (snip `(list @ta)`pax)) +:: +seek-built: find a compiled artifact in the governing namespace +:: +++ seek-built + |= [pax=path =path name=@ta] + ^- (unit [namespace=fold:tarball source=rail:tarball =built:nexus]) + =/ ns=(unit fold:tarball) (find-code-ns pax) + ?~ ns ~ + =/ lod=lode:nexus (~(got by code) u.ns) + =/ node=(unit (map @ta @uv)) + (~(get of refs.lod) path) + =/ ckey=(unit @uv) + ?~ node ~ + (~(get by u.node) name) + ?~ ckey ~ + =/ entry=(unit [refs=@ud =built:nexus]) (~(get by bins) u.ckey) + ?~ entry ~ + `[u.ns [path name] built.u.entry] +:: +++ find-built + |= [pax=path =path name=@ta] + ^- (unit [namespace=fold:tarball source=rail:tarball]) + =/ res (seek-built pax path name) + ?~ res ~ + `[namespace.u.res source.u.res] +:: +++ get-built + |= [pax=path =path name=@ta] + ^- (unit built:nexus) + =/ res (seek-built pax path name) + ?~ res ~ + `built.u.res +:: +:: Get a compiled marc from bins +:: +++ get-marc + |= [pax=path =blot:tarball] + ^- marc:tarball + =/ res=(unit built:nexus) (get-built pax (weld /mar path.blot) name.blot) + ?~ res + =/ nam=@tas (rail-to-arm:tarball blot) + ~& >>> "get-marc: %{(trip nam)} not found, searched from {(spud pax)}" + ~|([%marc-not-found nam pax] !!) + ?. ?=(%vase -.u.res) + =/ nam=@tas (rail-to-arm:tarball blot) + ~& >>> "get-marc: %{(trip nam)} failed (tang), searched from {(spud pax)}" + ~|([%marc-failed nam pax] !!) + !<(marc:tarball vase.u.res) +:: +++ get-vale + |= [pax=path =blot:tarball] + ^- $-(* vase) + vale:(get-marc pax blot) :: ++ get-tube - |= [from=mark to=mark] + |= [pax=path =bars:tarball] ^- tube:clay - =/ c=(unit content:tarball) - (~(get ba:tarball ball) /sys/tubes/[from] to) - ?~ c ~|([%tube-not-cached from to] !!) - !<(tube:clay q.cage.u.c) -:: Get a cached dais from /sys/daises/[mark] -:: -++ get-dais - |= =mark - ^- dais:clay - =/ c=(unit content:tarball) - (~(get ba:tarball ball) /sys/daises mark) - ?~ c ~|([%dais-not-cached mark] !!) - !<(dais:clay q.cage.u.c) -:: Validate file content: handles %temp, empty-mime, looks up cached dais -:: -++ validate-new-cage - |= [=mark old=(unit vase) new=vase force=?] + =/ via-grow=(each tube:clay tang) + (mule |.((grow:(get-marc pax a.bars) b.bars))) + ?: ?=(%& -.via-grow) p.via-grow + (grab:(get-marc pax b.bars) a.bars) +:: Validate file content, looks up cached dais +:: +++ validate-new-sage + |= [pax=path =blot:tarball old=(unit vase) new=vase force=?] ^- (each vase tang) - :: Skip validation for %temp mark - ephemeral - ?: =(%temp mark) - &+new - :: Reject empty mime files - ?: ?& =(%mime mark) - =(0 p.q:!<(mime new)) - == - |+~[leaf+"empty mime file"] - =/ =dais:clay (get-dais mark) - (validate-vase dais old new force) -:: Clam a cage at sandbox boundary + :: Bootstrap marks — hardcoded like Clay's page-to-cage + ?: =([/ %boom] blot) + (mule |.(!>(;;([tang bask:tarball] q.new)))) + ?: =([/ %hoon] blot) + (mule |.(!>(;;(@t q.new)))) + ?: =([/ %tang] blot) + (mule |.(!>(;;(tang q.new)))) + ?: =([/ %mime] blot) + (mule |.(!>(;;(mime q.new)))) + ?: =([/ %kelvin] blot) + (mule |.(!>(;;(waft:clay q.new)))) + =/ res=(unit built:nexus) (get-built pax (weld /mar path.blot) name.blot) + ?~ res + =/ nam=@tas (rail-to-arm:tarball blot) + |+~[leaf+"validate-new-sage: no marc for %{(trip nam)} at {(spud pax)}"] + ?. ?=(%vase -.u.res) + =/ nam=@tas (rail-to-arm:tarball blot) + |+~[leaf+"validate-new-sage: marc for %{(trip nam)} failed at {(spud pax)}"] + =/ nam=@tas (rail-to-arm:tarball blot) + =/ vale-res=(each $-(* vase) tang) + ~| [%validate-new-sage %marc-extract-failed nam pax] + %- mule |. + vale:!<(marc:tarball vase.u.res) + ?: ?=(%| -.vale-res) + |+[leaf+"validate-new-sage: marc for %{(trip nam)} broke at {(spud pax)}" p.vale-res] + (validate-vase p.vale-res old new force) +:: Clam a sage at sandbox boundary :: Used when data crosses a weir filter from untrusted source. :: Always forces full validation (no nest optimization). :: -++ clam-cage - |= =cage - ^- (each ^cage tang) - :: Reject %temp mark - can't validate from untrusted source - ?: =(%temp p.cage) - |+~[leaf+"clam: cannot validate %temp mark from untrusted source"] +++ clam-sage + |= [pax=path =sage:tarball] + ^- (each sage:tarball tang) =/ result=(each vase tang) - (validate-new-cage p.cage ~ q.cage %.y) + (validate-new-sage pax p.sage ~ q.sage %.y) ?: ?=(%| -.result) result - &+[p.cage p.result] + &+[p.sage p.result] +:: Clam a bask (blot + noun) into a sage. +:: Used when reading historical data from the silo. +:: +++ clam-bask + |= [pax=path =bask:tarball] + ^- (each sage:tarball tang) + :: boom: unwrap inner bask and retry its mark + :: if it heals, return the real sage; otherwise re-boom + ?: =([/ %boom] p.bask) + =/ [err=tang inner=bask:tarball] ;;([tang bask:tarball] q.bask) + =/ res $(bask inner) + ?: ?=(%& -.res) res + &+[[/ %boom] !>([p.res inner])] + ?: =([/ %hoon] p.bask) + (mule |.([[/ %hoon] !>(;;(@t q.bask))])) + ?: =([/ %tang] p.bask) + (mule |.([[/ %tang] !>(;;(tang q.bask))])) + ?: =([/ %mime] p.bask) + (mule |.([[/ %mime] !>(;;(mime q.bask))])) + =/ vale=$-(* vase) (get-vale pax p.bask) + =/ res=(each vase tang) (mule |.((vale q.bask))) + ?: ?=(%| -.res) res + &+[p.bask p.res] :: Validate all cages in a ball subtree, crash on failure :: :: Always forces full dais validation (no nest optimization) because @@ -573,12 +807,14 @@ :: the nest optimization wouldn't help anyway. :: ++ validate-ball - |= =ball:tarball + |= [cod=path =ball:tarball] ^- ball:tarball :: validate files at this level - :: for each file, run validate-new-cage and crash if it fails + :: for each file, run validate-new-sage and crash if it fails :: rebuild contents map with validated vases :: + =| here=path + |- =/ validated-contents=(map @ta content:tarball) ?~ fil.ball ~ =/ files=(list [@ta content:tarball]) ~(tap by contents.u.fil.ball) @@ -587,9 +823,12 @@ ?~ files out =/ [name=@ta =content:tarball] i.files =/ res=(each vase tang) - (validate-new-cage p.cage.content ~ q.cage.content %.y) - ?. ?=(%& -.res) ~|(p.res !!) - $(files t.files, out (~(put by out) name content(cage [p.cage.content p.res]))) + ~| [%validate-ball name (weld cod here) p.sage.content] + (validate-new-sage cod p.sage.content ~ q.sage.content %.y) + ?. ?=(%& -.res) + ~& >> "validate-ball: boom {(trip name)} (mark %{(trip name.p.sage.content)}) at {(spud (weld cod here))}" + $(files t.files, out (~(put by out) name content(sage [[/ %boom] !>([p.res [p.sage.content q.q.sage.content]])]))) + $(files t.files, out (~(put by out) name content(sage [p.sage.content p.res]))) :: recurse into subdirectories :: validate each child ball and rebuild dir map :: @@ -599,7 +838,7 @@ |- ?~ kids out =/ [name=@ta kid=ball:tarball] i.kids - $(kids t.kids, out (~(put by out) name ^$(ball kid))) + $(kids t.kids, out (~(put by out) name ^$(here (snoc here name), ball kid))) :: build validated ball :: preserve fil metadata, swap in validated contents :: @@ -610,8 +849,103 @@ ++ store-proc |= [here=rail:tarball =proc:fiber:nexus] ^+ this - =/ =pipe:nexus (~(put by (fall (~(get of pool) path.here) ~)) name.here proc) + =/ old=pipe:nexus (fall (~(get of pool) path.here) *pipe:nexus) + =/ =pipe:nexus old(proc (~(put by proc.old) name.here proc)) this(pool (~(put of pool) path.here pipe)) +:: Bang a nexus directory — store tang, +stay all processes under it +:: TODO: bang subscriptions via born. Add proc=cass:clay to $tote that bumps +:: on any proc change (spawn, crash, bang, heal) under that directory. +:: Nexus bangs bump it too since they stay all procs. File-level healing is +:: implicit (successful spawn overwrites |+tang with &+process). Nexus-level +:: healing is explicit via clear-bangs-under before reload. +:: +++ bang-nexus + |= [dest=fold:tarball err=tang] + ^+ this + ~& >>> "BANG nexus {(spud dest)}" + %- (slog err) + :: Set bang on the pipe at dest + =/ old=pipe:nexus (fall (~(get of pool) dest) *pipe:nexus) + =. pool (~(put of pool) dest old(bang `err)) + :: Bang every file under dest (set process to |+err) + =/ sub=ball:tarball (~(dip ba:tarball ball) dest) + =. this + %+ roll ~(tap ba:tarball sub) + |= [[=rail:tarball *] acc=_this] + (bang-file:acc [(weld dest path.rail) name.rail] err) + :: Replace all processes under dest with +stay + (stay-all-procs dest) +:: Bang a file — store tang on its process +:: +++ bang-file + |= [here=rail:tarball err=tang] + ^+ this + ~& >>> "BANG file {(spud (snoc path.here name.here))}" + :: %- (slog err) often too big + =/ =pipe:nexus (fall (~(get of pool) path.here) *pipe:nexus) + =/ old=(unit proc:fiber:nexus) (~(get by proc.pipe) name.here) + =/ =proc:fiber:nexus + ?~ old [|+err ~ ~] + [|+err next.u.old skip.u.old] + (store-proc here proc) +:: Replace all processes under a directory with +stay +:: +++ stay-all-procs + |= dest=fold:tarball + ^+ this + =/ sub-pool=pool:nexus (~(dip of pool) dest) + (stay-pipe dest sub-pool) +:: +++ stay-pipe + |= [here=fold:tarball sub=pool:nexus] + ^+ this + :: Stay all files in this directory's pipe + =. this + ?~ fil.sub this + =/ files=(list [@ta proc:fiber:nexus]) ~(tap by proc.u.fil.sub) + |- + ?~ files this + =/ old=proc:fiber:nexus +.i.files + =/ stay-proc=proc:fiber:nexus + [&+stay:(fiber:fiber:nexus ,~) next.old skip.old] + =. this (store-proc [here -.i.files] stay-proc) + $(files t.files) + :: Recurse into subdirectories + =/ kids=(list [@ta pool:nexus]) ~(tap by dir.sub) + |- + ?~ kids this + =. this (stay-pipe (snoc here -.i.kids) +.i.kids) + $(kids t.kids) +:: Clear all bangs (nexus and file) under a directory +:: +++ clear-bangs-under + |= dest=fold:tarball + ^- pool:nexus + ?~ dest (clear-pool-bangs pool) + =/ kid=pool:nexus (~(gut by dir.pool) i.dest ^+(pool [~ ~])) + pool(dir (~(put by dir.pool) i.dest $(pool kid, dest t.dest))) +:: +++ clear-pool-bangs + |= pol=pool:nexus + ^- pool:nexus + =. fil.pol + ?~ fil.pol ~ + `[~ proc.u.fil.pol] + %= pol + dir %- ~(run by dir.pol) + |=(sub=pool:nexus ^-(pool:nexus (clear-pool-bangs sub))) + == +:: Check if a file's nexus is banged (any ancestor directory has bang) +:: +++ is-nexus-banged + |= here=rail:tarball + ^- ? + =/ pax=path path.here + |- + =/ pip=pipe:nexus (fall (~(get of pool) pax) *pipe:nexus) + ?: ?=(^ bang.pip) & + ?~ pax | + $(pax (snip `path`pax)) :: Delete a file from pool and ball (NOT born - it's a high-water mark) :: ++ delete @@ -628,8 +962,18 @@ :: Remove from ball BEFORE notify so subscribers see deletion =. ball (~(del ba:tarball ball) dir name) =. this (bump-file [dir name]) - =/ =pipe:nexus (~(del by (fall (~(get of pool) dir) ~)) name) - this(pool (~(put of pool) dir pipe)) + =/ old=pipe:nexus (fall (~(get of pool) dir) *pipe:nexus) + =/ =pipe:nexus old(proc (~(del by proc.old) name)) + =. pool (~(put of pool) dir pipe) + :: Rebuild if deletion is inside a code nexus + =/ cod=(unit path) + =+ pax=dir + |- ?: (~(has by code) pax) `pax + ?~ pax ~ + $(pax (snip `path`pax)) + ?~ cod this + ~& >>> "delete: triggering build-code from {(spud dir)}" + (build-code u.cod) :: Send ack/nack back to poke source :: - Internal (%&): enqueue %pack intake to source path :: - External (%|): emit gall card @@ -687,7 +1031,7 @@ :: Nack pokes in procs at this level =. this ?~ fil.pool this - =/ procs=(list [name=@ta =proc:fiber:nexus]) ~(tap by u.fil.pool) + =/ procs=(list [name=@ta =proc:fiber:nexus]) ~(tap by proc.u.fil.pool) |- ?~ procs this =/ proc-rail=rail:tarball [here name.i.procs] @@ -705,11 +1049,14 @@ ++ run-on-loads |= [here=fold:tarball sub-sand=sand:nexus sub-gain=gain:nexus sub-ball=ball:tarball] ^- [sand:nexus gain:nexus ball:tarball] - :: Check if this node has a nexus + :: Check if this node has a nexus (skip on compile failure during boot) =/ nex=(unit nexus:nexus) ?~ fil.sub-ball ~ ?~ neck.u.fil.sub-ball ~ - (build-nexus u.neck.u.fil.sub-ball) + =/ res (build-nexus here u.neck.u.fil.sub-ball) + ?: ?=(%& -.res) `p.res + ~& >> "run-on-loads: nexus build error at {(spud here)}" + ~ :: Run on-load if nexus exists :: :: IMPORTANT: The weir at the root of sub-sand is preserved from the parent. @@ -751,39 +1098,84 @@ ++ reload-nexus |= dest=fold:tarball ^+ this - :: Get the nexus for this directory =/ sub-ball=ball:tarball (~(dip ba:tarball ball) dest) - =/ nex=(unit nexus:nexus) - ?~ fil.sub-ball ~ - ?~ neck.u.fil.sub-ball ~ - (build-nexus u.neck.u.fil.sub-ball) - ?~ nex - ~|("no nexus at destination" !!) - :: Get current sand subtree (preserve parent weir) + ?~ fil.sub-ball ~|("no nexus at destination" !!) + ?~ neck.u.fil.sub-ball ~|("no nexus at destination" !!) + =/ nex=(each nexus:nexus tang) + (build-nexus dest u.neck.u.fil.sub-ball) + ?: ?=(%| -.nex) + ~& >> "reload-nexus: build error at {(spud dest)}" + (bang-nexus dest p.nex) + =. this (reload-nexus-at dest p.nex) + (spawn-all-files dest (~(dip ba:tarball ball) dest)) +:: Run on-load for a nexus at dest and apply results +:: +:: Reload a nexus: run on-load, write ball, recurse into child nexuses. +:: Does NOT spawn processes — callers spawn after the full tree is settled. +:: +++ reload-nexus-at + |= [dest=fold:tarball nex=nexus:nexus] + ^+ this + =/ old-sub=ball:tarball (~(dip ba:tarball ball) dest) + =/ sub-ball=ball:tarball old-sub =/ sub-sand=sand:nexus (~(dip of sand) dest) =/ sub-gain=gain:nexus (~(dip of gain) dest) =/ parent-weir=(unit weir:nexus) fil.sub-sand - =/ parent-neck=(unit neck:tarball) - ?~(fil.sub-ball ~ neck.u.fil.sub-ball) - :: Run on-load + =/ parent-neck=(unit neck:tarball) ?~(fil.sub-ball ~ neck.u.fil.sub-ball) + :: Clear all bangs under this nexus before reloading + :: (reload will re-bang anything that still fails) + =. pool (clear-bangs-under dest) + :: Run on-load (may crash) + =/ load-res=(each [sand:nexus gain:nexus ball:tarball] tang) + (mule |.((on-load:nex sub-sand sub-gain sub-ball))) + ?: ?=(%| -.load-res) + :: on-load crashed — bang this nexus, stay all processes + ~& >> "reload-nexus-at: bang at {(spud dest)}" + (bang-nexus dest p.load-res) =/ [upd-sand=sand:nexus upd-gain=gain:nexus upd-ball=ball:tarball] - (on-load:u.nex sub-sand sub-gain sub-ball) + p.load-res :: Enforce parent weir on sand and parent neck on ball - =/ restored-lump=lump:tarball - (fall fil.upd-ball *lump:tarball) + =/ restored-lump=lump:tarball (fall fil.upd-ball *lump:tarball) =/ new-sand=sand:nexus upd-sand(fil parent-weir) =/ new-gain=gain:nexus upd-gain =/ new-ball=ball:tarball upd-ball(fil `restored-lump(neck parent-neck)) - :: Put results back - =/ old-born=born:nexus born + :: Validate marks in the new ball — failures become /boom blots so + :: bad marks surface as inspectable files rather than downstream bangs. + =. new-ball ~|([%validate-ball-reload dest] (validate-ball dest new-ball)) + :: Put results back — load-ball-changes writes ball and does bookkeeping =. sand (put-sub-sand sand dest new-sand) - =. ball (~(pub ba:tarball ball) dest new-ball) =. gain (put-sub-gain gain dest new-gain) - :: Bump weir cass in born for any directories where weir changed + =. this (load-ball-changes dest old-sub new-ball) =. this (bump-weir-changes dest sub-sand new-sand) - =. this (notify old-born) - :: Re-check subscriptions against potentially changed weirs in subtree - (audit-weir dest) + =. this (audit-weir dest) + (reload-child-nexuses dest) +:: Recursively reload all child nexuses top-to-bottom. +:: Every directory with a neck loads state and recurses into its children. +:: +++ reload-child-nexuses + |= dest=fold:tarball + ^+ this + =/ sub=ball:tarball (~(dip ba:tarball ball) dest) + =/ kids=(list [@ta ball:tarball]) ~(tap by dir.sub) + |- + ?~ kids this + =/ [kid-name=@ta kid-ball=ball:tarball] i.kids + =/ kid-path=fold:tarball (snoc dest kid-name) + =. this + :: Directory with a neck — reload it (recurses into its children) + :: Skip /code — it has a neck but is the code compiler, not a nexus + ?: ?& ?=(^ fil.kid-ball) + ?=(^ neck.u.fil.kid-ball) + !=([/ %code] u.neck.u.fil.kid-ball) + == + =/ kid-nex=(each nexus:nexus tang) + (build-nexus kid-path u.neck.u.fil.kid-ball) + ?: ?=(%| -.kid-nex) + (bang-nexus kid-path p.kid-nex) + (reload-nexus-at kid-path p.kid-nex) + :: Non-nexus directory — recurse deeper + $(kids ~(tap by dir.kid-ball), dest kid-path) + $(kids t.kids) :: Spawn processes for files in new ball, bump if content changed from old :: ++ spawn-new-files @@ -797,7 +1189,6 @@ =/ file-rail=rail:tarball [here file-name] =. this ?^((get-born file-rail) this (init-born file-rail)) =. this (spawn-proc file-rail [%load ~]) - =. this (enqu-take file-rail (sys-give /load) ~) $(files t.files) :: Spawn processes for all files in new ball recursively. :: @@ -812,90 +1203,6 @@ =. this ^$(here (snoc here kid-name), new +.i.kids) $(kids t.kids) :: -++ reload - |= $: old-pool=pool:nexus - old-ball=ball:tarball - old-sand=sand:nexus - old-born=born:nexus - old-subs=subs:nexus - old-silo=silo:nexus - old-gain=gain:nexus - == - ^+ this - :: Nack pokes in old proc queues - =. this (nack-pool / old-pool ~[leaf+"agent [re]loaded"]) - :: Restore state (pool will be rebuilt) - =. ball old-ball - =. sand old-sand - =. born old-born - =. subs old-subs - =. silo old-silo - =. gain old-gain - :: Capture ball before modifications (for change detection) - =/ pre-ball=ball:tarball ball - :: Clear ephemeral %temp cages - they shouldn't survive reload - =. ball ~(clear-temp ba:tarball ball) - :: Build tube, dais, and nexus caches synchronously as %temp grubs. - =. ball (~(pub ba:tarball ball) /sys/tubes (rebuild-tubes:marks our.bowl q.byk.bowl now.bowl)) - =. ball (~(pub ba:tarball ball) /sys/daises (rebuild-daises:marks our.bowl q.byk.bowl now.bowl)) - =. ball (~(pub ba:tarball ball) /sys/nexuses (rebuild-nexuses:marks our.bowl q.byk.bowl now.bowl)) - :: Run nexus on-loads top-down (may modify ball, sand, and gain) - =/ pre-sand=sand:nexus sand - =/ [new-sand=sand:nexus new-gain=gain:nexus new-ball=ball:tarball] - (run-on-loads / sand gain ball) - =: sand new-sand - gain new-gain - ball new-ball - == - :: Bump weir cass in born for any directories where weir changed - =. this (bump-weir-changes / pre-sand sand) - :: Force-validate entire ball (type of $type may have changed since state was saved) - =. ball ~|(%validate-ball-reload (validate-ball ball)) - :: Validate name uniqueness (no file/dir collisions) - ?> ~(validate-names ba:tarball ball) - :: Re-check all subscriptions against potentially changed weirs - =. this (audit-weir /) - :: Spawn processes and sync all changes - =. this (load-ball-changes / pre-ball ball) - this -:: TODO: handle outgoing keens -:: -:: Clean up subscriptions for a file (%file) or subtree (%tree) -:: -++ clean - |= [=path mode=?(%file %tree)] - ^+ this - :: Leave outgoing subscriptions (wex) - :: - =. this - %- emit-cards - %+ murn ~(tap by wex.bowl) - |= [[=wire =ship =term] *] - ^- (unit card) - ?. ?=([%proc @ *] wire) ~ - =/ [proc-rail=rail:tarball @ ^path] (unwrap-wire wire) - =/ proc-path=^path (snoc path.proc-rail name.proc-rail) - ?. ?- mode - %file =(proc-path path) - %tree =((scag (lent path) proc-path) path) - == - ~ - [~ %pass wire %agent [ship term] %leave ~] - :: Kick incoming subscribers (sup) - :: - %- emit-cards - %+ murn ~(tap by sup.bowl) - |= [=duct =ship pat=^path] - ^- (unit card) - ?. ?=([%proc @ *] pat) ~ - =/ [proc-rail=rail:tarball sub=^path] (unwrap-watch-path pat) - =/ proc-path=^path (snoc path.proc-rail name.proc-rail) - ?. ?- mode - %file =(proc-path path) - %tree =((scag (lent path) proc-path) path) - == - ~ - [~ %give %kick ~[pat] ~] :: =subs: Subscription management :: :: Axal helpers for fwd/rev indices @@ -979,11 +1286,11 @@ :: Add subscription: watcher subscribes to target with wire :: ++ sub-put - |= [target=lane:tarball watcher=rail:tarball =wire mark=(unit mark)] + |= [target=lane:tarball watcher=rail:tarball =wire blot=(unit blot:tarball)] ^+ this - :: Add to forward index: target → (watcher → [wire mark]) + :: Add to forward index: target → (watcher → [wire blot]) =/ watchers=subscribers:nexus (fwd-get target) - =. fwd.subs (fwd-set target (~(put by watchers) watcher [wire mark])) + =. fwd.subs (fwd-set target (~(put by watchers) watcher [wire blot])) :: Add to reverse index: watcher → targets =/ targets=subscriptions:nexus (rev-get watcher) =. rev.subs (rev-set watcher (~(put in targets) target)) @@ -1016,14 +1323,16 @@ ++ notify |= old-born=born:nexus ^+ this - =/ changed=(set lane:tarball) (diff-born:nexus old-born born) + =/ changed=(set lane:tarball) (diff-born-state:nexus old-born born) ?: =(~ changed) this + :: If the jael-source file changed, give udiffs to gall subscribers + =. this (maybe-give-jael changed) :: For each watched lane, find subscribers and send news - =/ watched=(list [target=lane:tarball watchers=(map rail:tarball [=wire mark=(unit mark)])]) + =/ watched=(list [target=lane:tarball watchers=(map rail:tarball [=wire blot=(unit blot:tarball)])]) tap-fwd |- ?~ watched this - =/ [target=lane:tarball watchers=(map rail:tarball [=wire mark=(unit mark)])] i.watched + =/ [target=lane:tarball watchers=(map rail:tarball [=wire blot=(unit blot:tarball)])] i.watched :: Find all changed lanes that are inside this target (or equal to target) =/ relevant=(set lane:tarball) %- ~(gas in *(set lane:tarball)) @@ -1058,30 +1367,58 @@ =/ sk=sack:nexus ?~ node *sack:nexus (fall (~(get by bags.u.node) name.p.target) *sack:nexus) - [%file sk (lookup-gain p.target) cage.u.content] + [%file sk (lookup-gain p.target) sage.u.content] %| =/ sub-ball=(unit ball:tarball) (~(dap ba:tarball ball) p.target) ?~ sub-ball [%none ~] [%ball (~(dip of sand) p.target) (~(dip of gain) p.target) (~(dip of born) p.target) u.sub-ball] == - :: Send to each watcher, converting file view if mark is set + :: Send to each watcher, converting file view if blot is set =. this %- ~(rep by watchers) - |= [[watcher=rail:tarball =wire mark=(unit mark)] acc=_this] + |= [[watcher=rail:tarball =wire blot=(unit blot:tarball)] acc=_this] =/ watcher-view=view:nexus - ?~ mark view + ?~ blot view ?. ?=(%file -.view) view - ?: =(p.cage.view u.mark) view :: already correct mark - =/ =tube:clay (get-tube p.cage.view u.mark) - view(cage [u.mark (tube q.cage.view)]) + ?: =(p.sage.view u.blot) view :: already correct blot + =/ =tube:clay (get-tube path.watcher [p.sage.view u.blot]) + view(sage [u.blot (tube q.sage.view)]) (enqu-take:acc watcher (sys-give:acc /news) ~ %news wire watcher-view) $(watched t.watched) +:: If the jael-source rail changed, give %azimuth-udiffs to gall subs. +:: Sends on / (all udiffs) and on /(scot %p ship) (filtered per ship). +:: +++ maybe-give-jael + |= changed=(set lane:tarball) + ^+ this + ?~ jael-source this + =/ src-lane=lane:tarball [%& u.jael-source] + ?. (~(has in changed) src-lane) this + =/ content=(unit content:tarball) + (~(get ba:tarball ball) u.jael-source) + ?~ content this + =+ !<(uds=udiffs:point:jael q.sage.u.content) + ?: =(~ uds) this + :: Give full batch on / + =. cards + [[%give %fact ~[/] %azimuth-udiffs !>(uds)] cards] + :: Give per-ship filtered batches on /(scot %p ship) + =/ remaining=(list @p) + %+ turn uds + |=([=ship *] ship) + |- + ?~ remaining this + =/ filtered=udiffs:point:jael + (skim uds |=([s=^ship *] =(s i.remaining))) + =. cards + [[%give %fact ~[/(scot %p i.remaining)] %azimuth-udiffs !>(filtered)] cards] + $(remaining t.remaining) :: Fell a single subscription: remove from indices, send %fell to watcher :: ++ fell-sub |= [target=lane:tarball watcher=rail:tarball] ^+ this - =/ val=[=wire mark=(unit mark)] (~(got by (fwd-get target)) watcher) + =/ val=[=wire blot=(unit blot:tarball)] (~(got by (fwd-get target)) watcher) =. this (sub-del target watcher) (enqu-take watcher (sys-give /fell) ~ %fell wire.val) :: Re-check subscriptions after weir change: fell any that are now blocked @@ -1114,12 +1451,19 @@ $(darts t.darts) :: ++ build-nexus - |= neck=@tas - ^- (unit nexus:nexus) - =/ c=(unit content:tarball) - (~(get ba:tarball ball) /sys/nexuses neck) - ?~ c ~ - (mole |.(!<(nexus:nexus q.cage.u.c))) + |= [pax=path =neck:tarball] + ^- (each nexus:nexus tang) + ?: =([/ %root] neck) &+root + =/ res=(unit built:nexus) (get-built pax (weld /nex path.neck) name.neck) + ?~ res |+~[leaf+"build-nexus: {(trip (rail-to-arm:tarball [path.neck name.neck]))} not found in code"] + ?+ -.u.res + |+~[leaf+"build-nexus: unexpected artifact type {<-.u.res>}"] + %tang |+tang.u.res + %vase + =/ nex=(unit nexus:nexus) (mole |.(!<(nexus:nexus vase.u.res))) + ?~ nex |+~[leaf+"build-nexus: failed to extract nexus from vase"] + &+u.nex + == :: ++ find-nearest-nexus |= here=rail:tarball @@ -1134,93 +1478,105 @@ ?~ here-path ~ $(here-path (snip `path`here-path)) :: +:: ++ build-spool |= here=rail:tarball ^- (unit spool:fiber:nexus) :: Get the file from the ball - must exist =/ file-data=(unit content:tarball) (~(get ba:tarball ball) path.here name.here) ?~ file-data ~ - :: Extract mark from the cage - =/ =mark p.cage.u.file-data + :: Extract blot from the sage + =/ =blot:tarball p.sage.u.file-data :: Find the nearest parent nexus =/ nex-info=(unit (pair path neck:tarball)) (find-nearest-nexus here) ?~ nex-info ~ :: Build the nexus from the neck - =/ nex=(unit nexus:nexus) (build-nexus q.u.nex-info) - ?~ nex ~ + =/ nex-res=(each nexus:nexus tang) (build-nexus path.here q.u.nex-info) + ?: ?=(%| -.nex-res) ~ :: Call on-file with rail relative to nexus location - `(on-file:u.nex (relativize-rail:tarball p.u.nex-info here) mark) + =/ rel=rail:tarball (relativize-rail:tarball p.u.nex-info here) + `(on-file:p.nex-res rel blot) :: ++ process-dart |= [here=rail:tarball =dart:nexus] ^+ this + :: %here does its own permission checks — skip weir pre-check + ?: ?=(%here -.dart) + (handle-dart here dart ~) =/ [=jump:nexus dest=(unit lane:tarball)] (dart-to-dest here dart) =/ =filt:nexus (allowed jump here dest) ?+ filt (handle-dart here dart filt) [~ %|] - :: Vetoed - send %veto intake back to source + :: Vetoed — crash for foreign ship darts (gall nacks the sender), + :: send %veto intake back to source for internal darts. + ?: ?=([%sys %ames %ships @ ~] path.here) + ~| [%peer-vetoed name.here dest] + !! (enqu-take here (sys-give /veto) ~ %veto dart) :: [~ %&] - :: Allowed but should clam vases crossing sandbox boundary - :: (make darts don't need clamming - they go through validate-cage anyway) - :: Peek results are clammed inside handle-dart (data flows back) - ?. ?=([%node * * ?(%poke %over %diff) *] dart) + :: Clam vases crossing sandbox boundary. + :: TODO: clam ALL incoming vases, not just at weir boundaries. + :: Clamming is cheap (cached vale gate), kills evil vases, and lets + :: all downstream code trust the data unconditionally. + :: Peek results are clammed inside handle-dart (data flows back). + ?. ?=(%node -.dart) (handle-dart here dart filt) - =/ clammed=(each cage tang) (clam-cage cage.load.dart) - ?: ?=(%| -.clammed) - (enqu-take here (sys-give /veto) ~ %veto dart) - (handle-dart here dart(cage.load p.clammed) filt) + =/ clam-pax=path + ?~ dest path.here + ?- -.u.dest + %& path.p.u.dest + %| p.u.dest + == + ?+ -.load.dart (handle-dart here dart filt) + ?(%poke %over) + =/ clammed=(each sage:tarball tang) (clam-sage clam-pax sage.load.dart) + ?: ?=(%| -.clammed) + ?: ?=([%sys %ames %ships @ ~] path.here) + ~| [%peer-clam-failed name.here dest] !! + (enqu-take here (sys-give /veto) ~ %veto dart) + (handle-dart here dart(sage.load p.clammed) filt) + %make + ?. ?=(%| -.make.load.dart) + (handle-dart here dart filt) + =/ clammed=(each sage:tarball tang) (clam-sage clam-pax sage.p.make.load.dart) + ?: ?=(%| -.clammed) + ?: ?=([%sys %ames %ships @ ~] path.here) + ~| [%peer-clam-failed name.here dest] !! + (enqu-take here (sys-give /veto) ~ %veto dart) + (handle-dart here dart(sage.p.make.load p.clammed) filt) + == == :: Extract jump category and destination from a dart for weir filtering. :: Returns [jump dest] where: -:: - jump: the filter category (%sysc, %make, %poke, %peek) -:: - dest: absolute destination path, or ~ for syscalls +:: - jump: the filter category (%make, %poke, %peek) +:: - dest: absolute destination lane, or ~ for system darts :: ++ dart-to-dest |= [here=rail:tarball =dart:nexus] ^- [jump:nexus (unit lane:tarball)] - ?+ -.dart [%sysc ~] :: %sysc, %scry, %bowl target system + ?+ -.dart [%peek ~] :: system darts: no dest, always allowed %node :: %node darts target a file/dir =/ dest-lane=(unit lane:tarball) (lane-from-road:tarball [%& here] road.dart) :_ dest-lane ?- -.load.dart - ?(%peek %keep %drop %seek %peep) %peek :: read operations + ?(%peek %keep %drop %seek %peep %manu %bang %code %font) %peek :: read operations %poke %poke $? %make %cull %sand %load - %over %diff %gain %lose + %over %gain %lose == %make :: all modify tree structure == :: %manu - ?- -.target.dart - %& [%sysc ~] :: explicit: caller knows the nexus, no filtering - %| :: by road: requires peek permission - [%peek (lane-from-road:tarball [%& here] p.target.dart)] - == + [%peek ~] :: direct: no dest, bypasses weir == :: ++ handle-dart |= [here=rail:tarball =dart:nexus =filt:nexus] ^+ this + =/ cod=path path.here ?- -.dart - %sysc - :: Emit gall card directly (with wrapped wire/paths) - :: Exception: /http-response/ paths go to eyre unwrapped - =/ =card card.dart - ?+ card (emit-card card) - [%pass *] - (emit-card card(p (wrap-wire here p.card))) - [%give ?(%fact %kick) *] - =/ wrapped=(list path) - %+ turn paths.p.card - |= p=path - ?: ?=([%http-response *] p) - p :: don't wrap http-response paths - (wrap-watch-path here p) - (emit-card card(paths.p wrapped)) - == :: %node :: Send load to another path @@ -1233,27 +1589,49 @@ :: Poke destination must be a file ?> ?=(%& -.u.dest-lane) =/ dest=rail:tarball p.u.dest-lane + :: /sys/behn/ timer service: intercept timer-set pokes + ?: ?& =([/sys/behn %'main.timer-state'] dest) + =([/ %timer-set] p.sage.load.dart) + == + =. this (handle-timer-set here wire.dart q.sage.load.dart) + (enqu-take here (sys-give /behn) ~ %pack wire.dart ~) + :: /sys/eyre/ HTTP service: intercept eyre-action pokes + ?: ?& =([/sys/eyre %'main.server-state'] dest) + =([/ %eyre-action] p.sage.load.dart) + == + =. this (handle-eyre-action here wire.dart q.sage.load.dart) + (enqu-take here (sys-give /eyre) ~ %pack wire.dart ~) + :: /sys/ namespace services: general dispatch + =/ sys=(unit _this) + (handle-sys-poke dest here wire.dart sage.load.dart) + ?^ sys u.sys :: Poke with return address (relativize source for fiber intake) =/ rel=from:fiber:nexus (relativize-from:nexus dest &+here) - (enqu-take dest [&+here wire.dart] ~ %poke rel cage.load.dart) + (enqu-take dest [&+here wire.dart] ~ %poke rel sage.load.dart) :: %make :: Create file or directory. :: If mark is set on a file make, convert the cage to the :: destination mark via cached tube before storing. - =/ =make:nexus - ?. ?=(%| -.make.load.dart) - make.load.dart - ?~ mark.p.make.load.dart - make.load.dart - ?: =(p.cage.p.make.load.dart u.mark.p.make.load.dart) - make.load.dart - =/ =tube:clay (get-tube p.cage.p.make.load.dart u.mark.p.make.load.dart) - make.load.dart(cage.p [u.mark.p.make.load.dart (tube q.cage.p.make.load.dart)]) - =/ res=(each _this tang) (mule |.((^make u.dest-lane make))) + =/ res=(each _this tang) + %- mule |. + =/ =make:nexus + ?. ?=(%| -.make.load.dart) + make.load.dart + ?~ blot.p.make.load.dart + make.load.dart + ?: =(p.sage.p.make.load.dart u.blot.p.make.load.dart) + make.load.dart + =/ =tube:clay (get-tube cod [p.sage.p.make.load.dart u.blot.p.make.load.dart]) + make.load.dart(sage.p [u.blot.p.make.load.dart (tube q.sage.p.make.load.dart)]) + (^make u.dest-lane make) ?- -.res %& (enqu-take:p.res here (sys-give /made) ~ %made wire.dart ~) - %| (enqu-take here (sys-give /made) ~ %made wire.dart `p.res) + %| + :: Runtime services (/sys/) crash on make failure + ?: =(/sys (scag 1 path.here)) + (mean p.res) + (enqu-take here (sys-give /made) ~ %made wire.dart `p.res) == :: %cull @@ -1261,7 +1639,10 @@ =/ res=(each _this tang) (mule |.((cull u.dest-lane))) ?- -.res %& (enqu-take:p.res here (sys-give /gone) ~ %gone wire.dart ~) - %| (enqu-take here (sys-give /gone) ~ %gone wire.dart `p.res) + %| + ?: =(/sys (scag 1 path.here)) + (mean p.res) + (enqu-take here (sys-give /gone) ~ %gone wire.dart `p.res) == :: %sand @@ -1292,43 +1673,55 @@ (~(get ba:tarball ball) path.dest name.dest) ?~ old (enqu-take here (sys-give /over) ~ %over wire.dart `~[leaf+"file not found: {(spud (snoc path.dest name.dest))}"]) - =/ old-mark=@tas p.cage.u.old - =/ new-mark=@tas p.cage.load.dart - =/ converted=cage - ?: =(old-mark new-mark) - cage.load.dart - =/ =tube:clay (get-tube new-mark old-mark) - [old-mark (tube q.cage.load.dart)] + =/ old-blot=blot:tarball p.sage.u.old + =/ new-blot=blot:tarball p.sage.load.dart + ?: =([/ %boom] old-blot) + ~& >>> "over: target file is boomed: {(spud (snoc path.dest name.dest))}" + (enqu-take here (sys-give /over) ~ %over wire.dart `~[leaf+"over: target file is boomed, fix the mark and reload: {(spud (snoc path.dest name.dest))}"]) + =/ converted=sage:tarball + ?: =(old-blot new-blot) + sage.load.dart + =/ =tube:clay (get-tube cod [[/ name.new-blot] [/ name.old-blot]]) + [old-blot (tube q.sage.load.dart)] =/ val=(each vase tang) - (validate-new-cage p.converted `q.cage.u.old q.converted %.n) + (validate-new-sage cod p.converted `q.sage.u.old q.converted %.n) ?: ?=(%| -.val) (enqu-take here (sys-give /over) ~ %over wire.dart `p.val) - =/ new-content=content:tarball u.old(cage [p.converted p.val]) + =/ new-content=content:tarball u.old(sage [p.converted p.val]) =. this (save-file dest new-content) - =. this (enqu-take dest (sys-give /writ) ~ %writ %over) + =. this (enqu-take dest (sys-give /writ) ~ %writ ~) (enqu-take here (sys-give /over) ~ %over wire.dart ~) - :: - %diff - :: Replace grub content with same-mark cage, notify process - ?> ?=(%& -.u.dest-lane) - =/ dest=rail:tarball p.u.dest-lane - =/ old=(unit content:tarball) - (~(get ba:tarball ball) path.dest name.dest) - ?~ old - (enqu-take here (sys-give /diff) ~ %diff wire.dart `~[leaf+"file not found: {(spud (snoc path.dest name.dest))}"]) - =/ old-mark=@tas p.cage.u.old - ?. =(old-mark p.cage.load.dart) - (enqu-take here (sys-give /diff) ~ %diff wire.dart `~[leaf+"mark mismatch: expected %{(trip old-mark)}, got %{(trip p.cage.load.dart)}"]) - =/ val=(each vase tang) - (validate-new-cage old-mark `q.cage.u.old q.cage.load.dart %.n) - ?: ?=(%| -.val) - (enqu-take here (sys-give /diff) ~ %diff wire.dart `p.val) - =/ new-content=content:tarball u.old(cage [old-mark p.val]) - =. this (save-file dest new-content) - =. this (enqu-take dest (sys-give /writ) ~ %writ %diff) - (enqu-take here (sys-give /diff) ~ %diff wire.dart ~) :: %peek + :: Refresh /sys/bowl/ virtual files on every peek + :: NOTE: these use raw ball puts intentionally — save-file would + :: bump born, notifying watchers, which peek again → infinite loop. + =. ball + (~(put ba:tarball ball) [/sys/bowl %our] [~ [/ %ship] !>(our.bowl)]) + =/ now-existing=(unit content:tarball) + (~(get ba:tarball ball) /sys/bowl %now) + =/ now-val=@da + ?~ now-existing now.bowl + =/ prev=@da !<(@da q.sage.u.now-existing) + ?: (gte prev now.bowl) + (add prev (div ~s1 1.000)) + now.bowl + =. ball + (~(put ba:tarball ball) [/sys/bowl %now] [~ [/ %time] !>(now-val)]) + =/ eny-existing=(unit content:tarball) + (~(get ba:tarball ball) /sys/bowl %eny) + =/ eny-val=@uvJ + ?~ eny-existing eny.bowl + (shaz (cat 3 eny.bowl !<(@uvJ q.sage.u.eny-existing))) + =. ball + (~(put ba:tarball ball) [/sys/bowl %eny] [~ [/ %entropy] !>(eny-val)]) + :: Ensure born entries exist for bowl files (no bump, no notify) + =? born =(~ (~(get bo:nexus now.bowl [born ball]) /sys/bowl %our)) + (~(init bo:nexus now.bowl [born ball]) /sys/bowl %our) + =? born =(~ (~(get bo:nexus now.bowl [born ball]) /sys/bowl %now)) + (~(init bo:nexus now.bowl [born ball]) /sys/bowl %now) + =? born =(~ (~(get bo:nexus now.bowl [born ball]) /sys/bowl %eny)) + (~(init bo:nexus now.bowl [born ball]) /sys/bowl %eny) :: Peek at dest - directory returns ball+sand, file returns cage :: Returns %none if directory doesn't exist or has no lump :: ver: if set, read historical version from hist via silo @@ -1341,7 +1734,7 @@ =/ sub-sand=sand:nexus (~(dip of sand) dest) =/ sub-born=born:nexus (~(dip of born) dest) =? u.sub-ball |(?=([~ %&] filt) clam.load.dart) - (validate-ball u.sub-ball) + (validate-ball cod u.sub-ball) =/ sub-gain=gain:nexus (~(dip of gain) dest) (enqu-take here (sys-give /peek) ~ %peek wire.dart %& %ball sub-sand sub-gain sub-born u.sub-ball) :: @@ -1356,38 +1749,131 @@ =/ sk=sack:nexus ?~ node *sack:nexus (fall (~(get by bags.u.node) name.dest) *sack:nexus) - :: Resolve source cage: historical from silo or current from ball - =/ source=(unit cage) + :: Resolve source: historical bask from silo or current sage from ball + =/ source=(unit sage:tarball) ?^ case.load.dart =/ =lobe:clay (resolve-case:nexus u.case.load.dart hist.sk) - (~(get si:nexus silo) lobe) - `cage.u.content + =/ got=(unit bask:tarball) (~(get si:nexus silo) lobe) + ?~ got ~ + :: Clam bask back to sage + =/ res=(each sage:tarball tang) (clam-bask cod u.got) + ?: ?=(%| -.res) ~ + `p.res + `sage.u.content ?~ source (enqu-take here (sys-give /peek) ~ %peek wire.dart &+[%none ~]) :: Clam at weir boundary or by request - =/ clammed=cage + =/ clammed=sage:tarball ?. |(?=([~ %&] filt) clam.load.dart) u.source - =/ res=(each cage tang) (clam-cage u.source) + =/ res=(each sage:tarball tang) (clam-sage cod u.source) ?: ?=(%| -.res) ~|(%peek-clam-failed !!) p.res - :: Update silo entry with refreshed type if from hist - =? silo ?=(^ case.load.dart) - =/ =lobe:clay (resolve-case:nexus u.case.load.dart hist.sk) - (~(put by silo) lobe [refs:(~(got by silo) lobe) clammed]) :: Apply mark conversion if requested - =/ result=cage - ?~ mark.load.dart clammed - ?: =(p.clammed u.mark.load.dart) clammed - =/ =tube:clay (get-tube p.clammed u.mark.load.dart) - [u.mark.load.dart (tube q.clammed)] + =/ result=sage:tarball + ?~ blot.load.dart clammed + ?: =(p.clammed u.blot.load.dart) clammed + =/ =tube:clay (get-tube cod [p.clammed u.blot.load.dart]) + [p.clammed (tube q.clammed)] (enqu-take here (sys-give /peek) ~ %peek wire.dart %& %file sk (lookup-gain dest) result) == + :: + %bang + :: Query error state at dest: directory bangs or file error + ?- -.u.dest-lane + %| + =/ dest=fold:tarball p.u.dest-lane + =/ pip=pipe:nexus (fall (~(get of pool) dest) *pipe:nexus) + =/ err=(map @ta (unit tang)) + %- ~(run by proc.pip) + |=(=proc:fiber:nexus ?:(?=(%| -.process.proc) `p.process.proc ~)) + (enqu-take here (sys-give /bang) ~ %bang wire.dart &+[bang.pip err]) + :: + %& + =/ dest=rail:tarball p.u.dest-lane + =/ pip=pipe:nexus (fall (~(get of pool) path.dest) *pipe:nexus) + =/ prc=(unit proc:fiber:nexus) (~(get by proc.pip) name.dest) + =/ err=(unit tang) ?~(prc ~ ?:(?=(%| -.process.u.prc) `p.process.u.prc ~)) + (enqu-take here (sys-give /bang) ~ %bang wire.dart |+err) + == + :: + %code + :: Peek the bins slice at dest + :: + ?- -.u.dest-lane + %| + =/ dest=fold:tarball p.u.dest-lane + =/ nex=(unit fold:tarball) + =+ pax=dest + |- ?: (~(has by code) pax) `pax + ?~ pax ~ + $(pax (snip `path`pax)) + ?~ nex + (enqu-take here (sys-give /code) ~ %code wire.dart |+[%tang ~[leaf+"code: no code nexus at {(spud dest)}"]]) + =/ =lode:nexus (~(got by code) u.nex) + =/ inner=fold:tarball (slag (lent u.nex) dest) + =/ sub-refs=refs:nexus (~(dip of refs.lode) inner) + =/ materialized=(axal (map @ta built:nexus)) + %+ roll ~(tap of sub-refs) + |= [[pax=path node=(map @ta @uv)] acc=(axal (map @ta built:nexus))] + =/ resolved=(map @ta built:nexus) + %- ~(gas by *(map @ta built:nexus)) + %+ murn ~(tap by node) + |= [nam=@ta key=@uv] + =/ entry=(unit [refs=@ud =built:nexus]) (~(get by bins) key) + ?~ entry ~ + `[nam built.u.entry] + (~(put of acc) pax resolved) + (enqu-take here (sys-give /code) ~ %code wire.dart &+materialized) + :: + %& + =/ dest=rail:tarball p.u.dest-lane + =/ nex=(unit fold:tarball) + =+ pax=path.dest + |- ?: (~(has by code) pax) `pax + ?~ pax ~ + $(pax (snip `path`pax)) + ?~ nex + (enqu-take here (sys-give /code) ~ %code wire.dart |+[%tang ~[leaf+"code: no code nexus at {(spud path.dest)}"]]) + =/ =lode:nexus (~(got by code) u.nex) + =/ inner=path (slag (lent u.nex) path.dest) + =/ node=(unit (map @ta @uv)) (~(get of refs.lode) inner) + =/ hit=(unit built:nexus) + ?~ node ~ + =/ ckey=(unit @uv) (~(get by u.node) name.dest) + ?~ ckey ~ + =/ entry=(unit [refs=@ud =built:nexus]) (~(get by bins) u.ckey) + ?~ entry ~ + `built.u.entry + ?^ hit + (enqu-take here (sys-give /code) ~ %code wire.dart |+u.hit) + :: Tube requests: /tub/from/to — resolve via marc grow gate + ?. ?=([%tub @ ~] inner) + (enqu-take here (sys-give /code) ~ %code wire.dart |+[%tang ~[leaf+"code: {(trip name.dest)} not found at {(spud path.dest)}"]]) + =/ from=blot:tarball [/ i.t.inner] + =/ to=blot:tarball [/ name.dest] + =/ tube-res=(each tube:clay tang) + (mule |.((grow:(get-marc (snip `path`u.nex) from) to))) + ?: ?=(%| -.tube-res) + (enqu-take here (sys-give /code) ~ %code wire.dart |+[%tang p.tube-res]) + (enqu-take here (sys-give /code) ~ %code wire.dart |+[%vase !>(p.tube-res)]) + == + :: + %font + :: Find the /code namespace governing this node. + :: Walks up from dest to the nearest /code lode. + =/ pax=path + ?-(-.u.dest-lane %| p.u.dest-lane, %& path.p.u.dest-lane) + =/ ns=(unit fold:tarball) (find-code-ns pax) + ?~ ns + (enqu-take here (sys-give /font) ~ %font wire.dart ~) + =/ =bend:tarball (make-bend:tarball here [%| u.ns]) + (enqu-take here (sys-give /font) ~ %font wire.dart `bend) :: %keep :: Subscribe to changes at dest (uses peek permission) - =. this (sub-put u.dest-lane here wire.dart mark.load.dart) + =. this (sub-put u.dest-lane here wire.dart blot.load.dart) :: Construct initial view of the watched lane =/ =view:nexus ?- -.u.dest-lane @@ -1401,7 +1887,7 @@ =/ sk=sack:nexus ?~ node *sack:nexus (fall (~(get by bags.u.node) name.dest) *sack:nexus) - [%file sk (lookup-gain dest) cage.u.content] + [%file sk (lookup-gain dest) sage.u.content] %| =/ dest=fold:tarball p.u.dest-lane =/ sub-ball=(unit ball:tarball) (~(dap ba:tarball ball) dest) @@ -1409,10 +1895,10 @@ [%ball (~(dip of sand) dest) (~(dip of gain) dest) (~(dip of born) dest) u.sub-ball] == :: Apply mark conversion if requested - =? view &(?=(^ mark.load.dart) ?=(%file -.view)) - ?: =(p.cage.view u.mark.load.dart) view - =/ =tube:clay (get-tube p.cage.view u.mark.load.dart) - view(cage [u.mark.load.dart (tube q.cage.view)]) + =? view &(?=(^ blot.load.dart) ?=(%file -.view)) + ?: =(p.sage.view u.blot.load.dart) view + =/ =tube:clay (get-tube cod [p.sage.view u.blot.load.dart]) + view(sage [u.blot.load.dart (tube q.sage.view)]) (enqu-take here (sys-give /bond) ~ %bond wire.dart &+view) :: %drop @@ -1427,7 +1913,7 @@ (enqu-take here (sys-give /found) ~ %seek wire.dart res) :: %peep - :: Query hist entries matching find spec, return cages + :: Query hist entries matching find spec, clam pages to cages ?> ?=(%& -.u.dest-lane) =/ dest=rail:tarball p.u.dest-lane =/ sk=(unit sack:nexus) (get-born dest) @@ -1435,10 +1921,10 @@ (enqu-take here (sys-give /peep) ~ %peep wire.dart |+~[leaf+"no history for {(spud (snoc path.dest name.dest))}"]) =/ entries=(list [key=cass:clay val=lobe:clay]) (tap:on-hist:nexus hist.u.sk) - =/ hits=(list [cass:clay cage]) + =/ hits=(list [cass:clay sage:tarball]) %+ murn entries |= [key=cass:clay val=lobe:clay] - ^- (unit [cass:clay cage]) + ^- (unit [cass:clay sage:tarball]) =/ match=? ?- -.find.load.dart %pick @@ -1453,9 +1939,11 @@ == == ?. match ~ - =/ got=(unit cage) (~(get si:nexus silo) val) + =/ got=(unit bask:tarball) (~(get si:nexus silo) val) ?~ got ~ - `[key u.got] + =/ res=(each sage:tarball tang) (clam-bask cod u.got) + ?: ?=(%| -.res) ~ + `[key p.res] (enqu-take here (sys-give /peep) ~ %peep wire.dart &+hits) :: %gain @@ -1477,24 +1965,9 @@ %& (enqu-take:p.res here (sys-give /lost) ~ %lost wire.dart ~) %| (enqu-take here (sys-give /lost) ~ %lost wire.dart `p.res) == - == - :: - %manu - ?- -.target.dart - %& - :: Explicit: build nexus from neck, call on-manu directly - =/ nex=(unit nexus:nexus) (build-nexus neck.p.target.dart) - ?~ nex - (enqu-take here (sys-give /manu) ~ %manu wire.dart |+~[leaf+"nexus not found: {(trip neck.p.target.dart)}"]) - =/ text=@t (on-manu:u.nex mana.p.target.dart) - (enqu-take here (sys-give /manu) ~ %manu wire.dart &+text) :: - %| + %manu :: By road: resolve, find nearest nexus, relativize, call on-manu - =/ dest-lane=(unit lane:tarball) (lane-from-road:tarball [%& here] p.target.dart) - ?~ dest-lane - (enqu-take here (sys-give /manu) ~ %manu wire.dart |+~[leaf+"bad road"]) - :: Full path from lane =/ target-path=path ?-(-.u.dest-lane %& (snoc path.p.u.dest-lane name.p.u.dest-lane), %| p.u.dest-lane) :: Walk up tree to find nearest covering nexus @@ -1509,9 +1982,10 @@ $(target-path (snip `path`target-path)) ?~ nex-info (enqu-take here (sys-give /manu) ~ %manu wire.dart |+~[leaf+"no nexus covers this path"]) - =/ nex=(unit nexus:nexus) (build-nexus q.u.nex-info) - ?~ nex - (enqu-take here (sys-give /manu) ~ %manu wire.dart |+~[leaf+"nexus build failed: {(trip q.u.nex-info)}"]) + :: ~& > "process-manu-search: build-nexus {(trip q.u.nex-info)} at {(spud (snoc path.here name.here))}" + =/ nex-res=(each nexus:nexus tang) (build-nexus cod q.u.nex-info) + ?: ?=(%| -.nex-res) + (enqu-take here (sys-give /manu) ~ %manu wire.dart |+~[leaf+"nexus build failed: {(trip (rail-to-arm:tarball q.u.nex-info))}"]) :: Relativize target path to nexus location =/ rel-path=path (slag (lent p.u.nex-info) target-path) :: Build query from relative path + lane type @@ -1519,31 +1993,35 @@ ?- -.u.dest-lane %| [%& rel-path] %& - =/ =mark + ?~ rel-path + [%& ~] + =/ =blot:tarball =/ content=(unit content:tarball) (~(get ba:tarball ball) path.p.u.dest-lane name.p.u.dest-lane) - (fall (bind content |=(c=content:tarball p.cage.c)) %$) - [%| [(snip rel-path) (rear rel-path)] mark] + (fall (bind content |=(c=content:tarball p.sage.c)) *blot:tarball) + [%| [(snip `path`rel-path) (rear rel-path)] blot] == - =/ text=@t (on-manu:u.nex mana) - (enqu-take here (sys-give /manu) ~ %manu wire.dart &+text) + =/ manu-res=(each @t tang) + (mule |.((on-manu:p.nex-res mana))) + (enqu-take here (sys-give /manu) ~ %manu wire.dart manu-res) == :: - %scry - ?~ scry.dart - :: Null scry returns agent state - (enqu-take here (sys-give /scry) ~ %scry wire.dart !>(state)) - :: Do the scry and enqueue result - :: Path format: /vane/desk/rest... -> /vane/~ship/desk/~date/rest... - =/ pat=path path.u.scry.dart - ?> ?=([@ @ *] pat) - =/ res=vase - !>(.^(mold.u.scry.dart i.pat (scot %p our.bowl) i.t.pat (scot %da now.bowl) t.t.pat)) - (enqu-take here (sys-give /scry) ~ %scry wire.dart res) + %manu + :: Direct: build nexus from neck, call on-manu directly + :: ~& > "process-manu-direct: build-nexus {(trip neck.dart)} at {(spud (snoc path.here name.here))}" + =/ nex-res=(each nexus:nexus tang) (build-nexus cod neck.dart) + ?: ?=(%| -.nex-res) + (enqu-take here (sys-give /manu) ~ %manu wire.dart |+~[leaf+"nexus not found: {(trip (rail-to-arm:tarball neck.dart))}"]) + =/ manu-res=(each @t tang) + (mule |.((on-manu:p.nex-res mana.dart))) + (enqu-take here (sys-give /manu) ~ %manu wire.dart manu-res) + :: + :: + %here + :: Request location — walk up, reveal as much as allowed + =/ loc=here:nexus (walk-here here) + (enqu-take here (sys-give /here) ~ %here wire.dart loc) :: - %bowl - :: Request bowl - build and enqueue - (enqu-take here (sys-give /bowl) ~ %bowl wire.dart (make-bowl here)) :: %kept :: Return this grub's outgoing subscriptions, relativized @@ -1558,13 +2036,34 @@ ++ spawn-proc |= [here=rail:tarball =prod:fiber:nexus] ^+ this - :: Bump proc cass (born must already exist from save-file) - =. this (bump-proc here) - :: Build and store proc - use default spool if no nexus - =/ =spool:fiber:nexus - (fall (build-spool here) default-spool) - =/ =process:fiber:nexus (spool prod) - (store-proc here [process ~ ~]) + :: Skip if nexus is banged — don't try to build processes + ?: (is-nexus-banged here) + this + :: Bump proc cass quietly (caller batches notify) + =. this (bump-proc here %.n) + :: Build spool and process — bang file on crash + =/ spool-res=(each spool:fiber:nexus tang) + (mule |.((fall (build-spool here) default-spool))) + ?: ?=(%| -.spool-res) + ~& >> "spawn-proc: bang {(spud (snoc path.here name.here))} — on-file crash" + (bang-file here p.spool-res) + =/ proc-res=(each process:fiber:nexus tang) + (mule |.((p.spool-res prod))) + ?: ?=(%| -.proc-res) + ~& >> "spawn-proc: bang {(spud (snoc path.here name.here))} — spool crash" + (bang-file here p.proc-res) + :: Success — process is live. Move existing next into skip so the + :: fresh process doesn't consume stale takes meant for the old one. + :: They merge back on %cont when the process is ready. + =/ =process:fiber:nexus p.proc-res + =/ =pipe:nexus (fall (~(get of pool) path.here) *pipe:nexus) + =/ old=(unit proc:fiber:nexus) (~(get by proc.pipe) name.here) + =/ old-next=(qeu take:fiber:nexus) ?~(old ~ next.u.old) + =/ old-skip=(qeu take:fiber:nexus) ?~(old ~ skip.u.old) + =/ merged-skip=(qeu take:fiber:nexus) + (~(gas to old-skip) ~(tap to old-next)) + =. this (store-proc here [&+process ~ merged-skip]) + (enqu-take here (sys-give /start) ~) :: ++ default-spool ^- spool:fiber:nexus @@ -1574,13 +2073,19 @@ ++ process-take |= [here=rail:tarball =take:fiber:nexus] ^+ this - :: Get pipe at directory, or empty map - =/ =pipe:nexus (fall (~(get of pool) path.here) ~) + :: Get pipe at directory + =/ =pipe:nexus (fall (~(get of pool) path.here) *pipe:nexus) :: Get proc for this file - must exist - =/ prc=(unit proc:fiber:nexus) (~(get by pipe) name.here) + =/ prc=(unit proc:fiber:nexus) (~(get by proc.pipe) name.here) ?~ prc this - :: Add take to queue, store, and run =/ =proc:fiber:nexus u.prc + :: Crashed process — nack pokes immediately, queue everything else + ?: ?=(%| -.process.proc) + ?: ?=([* ~ %poke *] take) + (give-poke-sign here [take `p.process.proc]) + =. proc proc(next (~(put to next.proc) take)) + (store-proc here proc) + :: Add take to queue, store, and run =. proc proc(next (~(put to next.proc) take)) =. this (store-proc here proc) (process-do-next here) @@ -1589,58 +2094,75 @@ |= here=rail:tarball ^+ this :: Get proc from pool - =/ =pipe:nexus (fall (~(get of pool) path.here) ~) - =/ =proc:fiber:nexus (~(got by pipe) name.here) + =/ =pipe:nexus (fall (~(get of pool) path.here) *pipe:nexus) + =/ =proc:fiber:nexus (~(got by proc.pipe) name.here) + :: Crashed process — takes accumulate in next, don't evaluate + ?: ?=(%| -.process.proc) this :: Get file state from ball =/ file-data=(unit content:tarball) (~(get ba:tarball ball) path.here name.here) ?~ file-data this :: file doesn't exist - =/ fil-state=vase q.cage.u.file-data + =/ fil-state=vase q.sage.u.file-data :: Build bowl for this process (with filtered wex/sup) - =/ =bowl:nexus (make-bowl here) - :: Run the evaluator - =/ [darts=(list dart:nexus) done=(list took:eval:fiber:nexus) new-state=vase new-proc=_proc res=result:eval:fiber:nexus] - (take:eval:fiber:nexus bowl fil-state proc) + :: Run the evaluator (mule to catch hard crashes like !< mismatches) + =/ eval-res=(each [darts=(list dart:nexus) done=(list took:eval:fiber:nexus) new-state=vase new-proc=proc:fiber:nexus res=result:eval:fiber:nexus] tang) + (mule |.((take:eval:fiber:nexus fil-state proc))) + ?: ?=(%| -.eval-res) + (bang-file here p.eval-res) + =/ [darts=(list dart:nexus) done=(list took:eval:fiber:nexus) new-state=vase new-proc=proc:fiber:nexus res=result:eval:fiber:nexus] + p.eval-res :: Process darts (emit cards or enqueue takes) =. this (process-darts here darts) :: Ack consumed pokes =. this (give-poke-signs here done) :: Validate new state before handling result (runtime, no force) + :: ~& > "process-result: validate-new-sage for %{(trip p.sage.u.file-data)} at {(spud (snoc path.here name.here))}" =/ validated=(each vase tang) - (validate-new-cage p.cage.u.file-data `fil-state new-state %.n) + (validate-new-sage path.here p.sage.u.file-data `fil-state new-state %.n) ?: ?=(%| -.validated) - :: Validation failed - treat as crash - =. this (nack-poke-takes here next.new-proc p.validated) - =. this (nack-poke-takes here skip.new-proc p.validated) - =. this (spawn-proc here [%rise p.validated]) - (enqu-take here (sys-give /rise) ~) + :: Validation failed - bang the file (don't restart, infra is broken) + ~& >> "process-take: validation failed, bang {(spud (snoc path.here name.here))}" + (bang-file here p.validated) :: Validation passed - handle result normally ?- -.res %next :: Save state (bumps aeon only if content changed) - =. this (save-file here [metadata.u.file-data p.cage.u.file-data p.validated]) + =. this (save-file here [metadata.u.file-data p.sage.u.file-data p.validated]) (store-proc here new-proc) %done :: Save final state so subscribers see it, then delete - =. this (save-file here [metadata.u.file-data p.cage.u.file-data p.validated]) + =. this (save-file here [metadata.u.file-data p.sage.u.file-data p.validated]) =/ err=tang ~[leaf+"process completed"] + :: only nack-pokes when we're done + :: =. this (nack-poke-takes here next.new-proc err) =. this (nack-poke-takes here skip.new-proc err) - =. this (clean (snoc path.here name.here) %file) (delete path.here name.here) %fail :: Process failed - don't save state, restart. Subs survive (wires still route). - =. this (nack-poke-takes here next.new-proc err.res) - =. this (nack-poke-takes here skip.new-proc err.res) - =. this (spawn-proc here [%rise err.res]) + :: Sync queues (consumed takes removed), rebuild process, enqueue + :: rise via abet. Same pattern as spawn-proc. + ?: (is-nexus-banged here) this + =. this (bump-proc here %.y) + =/ spool-res=(each spool:fiber:nexus tang) + (mule |.((fall (build-spool here) default-spool))) + ?: ?=(%| -.spool-res) + (bang-file here p.spool-res) + =/ proc-res=(each process:fiber:nexus tang) + (mule |.((p.spool-res [%rise err.res]))) + ?: ?=(%| -.proc-res) + (bang-file here p.proc-res) + =/ merged-skip=(qeu take:fiber:nexus) + (~(gas to skip.new-proc) ~(tap to next.new-proc)) + =. this (store-proc here [&+p.proc-res ~ merged-skip]) (enqu-take here (sys-give /rise) ~) == :: ++ poke - |= [=give:nexus here=rail:tarball =cage] + |= [=give:nexus here=rail:tarball =sage:tarball] ^+ this =/ rel-from=from:fiber:nexus (relativize-from:nexus here from.give) - (enqu-take here give ~ %poke rel-from cage) + (enqu-take here give ~ %poke rel-from sage) :: ++ make |= [dest=lane:tarball =make:nexus] @@ -1669,13 +2191,15 @@ new-ball rol-ball == :: Validate all cages in loaded ball - =/ validated=ball:tarball ~|(%validate-ball-make (validate-ball new-ball)) + =/ validated=ball:tarball ~|(%validate-ball-make (validate-ball dest-path new-ball)) :: Put the final sand, gain, and ball back =. sand (put-sub-sand sand dest-path new-sand) =. gain (put-sub-gain gain dest-path new-gain) - =. ball (~(pub ba:tarball ball) dest-path validated) - :: Spawn processes and sync all changes (old is empty) - (load-ball-changes dest-path *ball:tarball validated) + :: Sync all changes (old is empty) and spawn processes + =. this (load-ball-changes dest-path *ball:tarball validated) + :: Register and build any code namespaces in the new ball + =. this (build-new-code-namespaces dest-path validated) + (spawn-all-files dest-path validated) :: %& :: Make file - payload must be cage @@ -1687,8 +2211,9 @@ ?^ existing-file ~|("file already exists at path" !!) :: Validate the cage before storing (new file, no old content) + :: ~& > "process-make: validate-new-sage for %{(trip p.sage.p.make)} at {(spud (snoc path.dest-rail name.dest-rail))}" =/ validated=(each vase tang) - (validate-new-cage p.cage.p.make ~ q.cage.p.make %.n) + (validate-new-sage path.dest-rail p.sage.p.make ~ q.sage.p.make %.n) ?: ?=(%| -.validated) ~|("make failed: validation error" (mean p.validated)) :: Record gain flag if set @@ -1696,10 +2221,11 @@ =. gain (set-gain dest-rail %.y) this :: Save initial state (bumps file aeon since old content is ~) - =. this (save-file dest-rail [~ p.cage.p.make p.validated]) + =. this (save-file dest-rail [~ p.sage.p.make p.validated]) :: Spawn process (needs file in ball for build-spool) + :: bump-proc for immediate notify (spawn-proc is quiet) =. this (spawn-proc dest-rail [%make ~]) - (enqu-take dest-rail (sys-give /make) ~) + (bump-proc dest-rail %.y) == :: ++ cull @@ -1710,15 +2236,15 @@ :: Cull directory - delete entire subtree =/ dest-path=fold:tarball p.dest =/ sub=ball:tarball (~(dip ba:tarball ball) dest-path) - :: Bump all changes before deletion + :: Remove from ball BEFORE notify so subscribers see deletion + =. ball (~(lop ba:tarball ball) dest-path) + :: Bump all changes and notify =. this (cull-ball-changes dest-path sub) :: Nack all queued pokes in subtree =. this (nack-pool dest-path (~(dip of pool) dest-path) ~[leaf+"culled"]) - :: Clean gall subscriptions for subtree - =. this (clean dest-path %tree) - :: Remove from pool and ball (NOT born - it's a high-water mark) + :: Remove from pool =. pool (~(lop of pool) dest-path) - this(ball (~(lop ba:tarball ball) dest-path)) + this :: %& :: Cull file - delete single file @@ -1726,8 +2252,6 @@ =/ dest-path=path (rail-to-path:tarball dest-rail) :: Nack queued pokes for this file =. this (nack-pool dest-path (~(dip of pool) dest-path) ~[leaf+"culled"]) - :: Clean subscriptions for this file - =. this (clean dest-path %file) :: Bump and remove from pool and ball (delete path.dest-rail name.dest-rail) == @@ -1762,32 +2286,34 @@ =. this (notify old-born) :: Re-check subscriptions from watchers under this weir (audit-weir dest) +:: Walk up from a grub's rail, revealing path segments while allowed. +:: Pant is in path order (outermost-first). :: -++ make-bowl +++ walk-here |= here=rail:tarball - ^- bowl:nexus - :: Filter wex to only include outgoing subscriptions for this process - =/ here-path=path (snoc path.here name.here) - =/ filtered-wex=boat:gall - %- ~(gas by *boat:gall) - %+ murn ~(tap by wex.bowl) - |= [[=wire =ship =term] acked=? =path] - ?. ?=([%proc @ *] wire) ~ - =/ [proc-rail=rail:tarball @ orig-wire=^wire] (unwrap-wire wire) - =/ proc-path=^path (snoc path.proc-rail name.proc-rail) - ?. =(proc-path here-path) ~ - [~ [orig-wire ship term] acked path] - :: Filter sup to only include incoming subscriptions for this process - =/ filtered-sup=bitt:gall - %- ~(gas by *bitt:gall) - %+ murn ~(tap by sup.bowl) - |= [=duct =ship =path] - ?. ?=([%proc @ *] path) ~ - =/ [proc-rail=rail:tarball sub=^path] (unwrap-watch-path path) - =/ proc-path=^path (snoc path.proc-rail name.proc-rail) - ?. =(proc-path here-path) ~ - [~ duct ship sub] - [now our eny filtered-wex filtered-sup here dap byk]:[bowl .] + ^- here:nexus + =/ remaining=path path.here + =| =pant:nexus + |- + ?~ remaining + :: At root — check if allowed to peek root + =/ =filt:nexus (allowed %peek here `[%| /]) + [pant name.here !?=([~ %|] filt)] + =/ ancestor=path (snip `path`remaining) + =/ dir=@ta (rear remaining) + :: Can this grub peek this ancestor directory? + =/ =filt:nexus (allowed %peek here `[%| remaining]) + ?: ?=([~ %|] filt) + :: Blocked — return what we have so far + [pant name.here %.n] + :: Allowed — look up neck from ball's lump at this path + =/ sub=(unit ball:tarball) (~(dap ba:tarball ball) remaining) + =/ neck=(unit neck:tarball) + ?~ sub ~ + ?~ fil.u.sub ~ + neck.u.fil.u.sub + $(remaining ancestor, pant [[dir neck] pant]) +:: :: Sandboxing / weir filtering :: :: The "governor" is the nearest directory strictly ABOVE both source @@ -1821,7 +2347,7 @@ |= [=jump:nexus here=rail:tarball dest=(unit lane:tarball)] ^- filt:nexus =/ gov=(unit fold:tarball) (nearest-governor here dest) - :: For syscalls, use root as dummy dest (syscalls get blocked by any weir anyway) + :: System darts have dest=~; use root as dummy dest (no weir match = pass) =/ dest-lane=lane:tarball (fall dest [%| /]) =| =filt:nexus |- @@ -1857,10 +2383,11 @@ this(born (~(init bo:nexus now.bowl [born ball]) here)) :: ++ bump-proc - |= here=rail:tarball + |= [here=rail:tarball loud=?] ^+ this =/ old-born=born:nexus born =. born (~(bump-proc bo:nexus now.bowl [born ball]) here) + ?. loud this (notify old-born) :: ++ bump-file @@ -1869,20 +2396,19 @@ =/ old-born=born:nexus born =. born (~(bump-file bo:nexus now.bowl [born ball]) here) (notify old-born) -:: Record cage in silo and append to hist on sack. +:: Record bask in silo and append to hist on sack. :: ++ record-hist - |= [here=rail:tarball =cage cas=(unit cass:clay)] + |= [here=rail:tarball =sage:tarball cas=(unit cass:clay)] ^+ this - :: Skip silo/hist for ephemeral %temp marks - ?: =(%temp p.cage) this =/ sok=sack:nexus (need (get-born here)) :: Use provided cass or compute next from current file cass =/ new-cass=cass:clay (fall cas (~(next-cass bo:nexus now.bowl [born ball]) file.sok)) =/ gaining=? (lookup-gain here) + =/ =bask:tarball [p q.q]:sage =/ [=lobe:clay new-silo=silo:nexus new-hist=_hist.sok] - (~(record si:nexus silo) cage new-cass gaining file.sok hist.sok) + (~(record si:nexus silo) bask new-cass gaining file.sok hist.sok) =. silo new-silo =. born (~(put bo:nexus now.bowl [born ball]) here sok(hist new-hist)) this @@ -1891,15 +2417,15 @@ ++ diff-balls |= [here=fold:tarball old-ball=ball:tarball new-ball=ball:tarball] ^+ this - =. born (~(diff-balls bo:nexus now.bowl [born ball]) here old-ball new-ball) - this + this(born (~(diff-balls bo:nexus now.bowl [born ball]) here old-ball new-ball)) :: Spawn processes and sync all changes when a ball is created/reloaded. :: Handles spawning files and bumping all changes (new, changed, deleted files, empty dirs). :: ++ load-ball-changes |= [here=fold:tarball old-ball=ball:tarball new-ball=ball:tarball] ^+ this - =. this (spawn-all-files here new-ball) + :: Write new sub-ball into main ball + =. ball (~(pub ba:tarball ball) here new-ball) =/ old-born=born:nexus born :: diff-balls (inits/bumps born), record silo/hist, then notify =. this (diff-balls here old-ball new-ball) @@ -1936,9 +2462,11 @@ =/ in-new=? (~(has in new-names) name) =. this ?: &(in-new !in-old) - :: New file: record in silo/hist (born already init'd by diff-balls) + :: New file: stamp mtime, record in silo/hist + =/ content=content:tarball (~(got by new-files) name) + =. ball (~(put ba:tarball ball) [here name] content(metadata (~(put by metadata.content) 'mtime' (da-oct:tarball now.bowl)))) =/ sok=sack:nexus (need (get-born [here name])) - (record-hist [here name] cage:(~(got by new-files) name) `file.sok) + (record-hist [here name] sage.content `file.sok) ?: &(in-old !in-new) :: Deleted file: drop silo refs =/ sok=(unit sack:nexus) (get-born [here name]) @@ -1948,9 +2476,11 @@ :: Both: record if changed =/ old-content=content:tarball (~(got by old-files) name) =/ new-content=content:tarball (~(got by new-files) name) - ?. =(cage.old-content cage.new-content) + ?. =(sage.old-content sage.new-content) + :: Changed file: stamp mtime + =. ball (~(put ba:tarball ball) [here name] new-content(metadata (~(put by metadata.new-content) 'mtime' (da-oct:tarball now.bowl)))) =/ sok=sack:nexus (need (get-born [here name])) - (record-hist [here name] cage.new-content `file.sok) + (record-hist [here name] sage.new-content `file.sok) this $(all-names t.all-names) :: Recurse into subdirs @@ -1963,20 +2493,25 @@ =/ new-kid=ball:tarball (fall (~(get by dir.new-ball) i.kids) *ball:tarball) =. this ^$(here (snoc here i.kids), old-ball old-kid, new-ball new-kid) $(kids t.kids) -:: Mirror Clay desks to /sys/clay/[desk]/ +:: Mirror Clay desks to /sys/clay/desks/[desk]/ :: ++ sync-clay ^+ this - :: Ensure /sys/clay directory exists - =? ball =(~ (~(get of ball) /sys/clay)) - (~(put of ball) /sys/clay [~ ~ ~]) - :: Ensure default desks have directories - =? ball =(~ (~(get of ball) /sys/clay/base)) - (~(put of ball) /sys/clay/base [~ ~ ~]) - =? ball =(~ (~(get of ball) /sys/clay/grubbery)) - (~(put of ball) /sys/clay/grubbery [~ ~ ~]) - :: Sync all desks listed as kids of /sys/clay/ - =/ dek=(list desk) (~(lss ba:tarball ball) /sys/clay) + ~& >> "sync-clay: start" + :: Ensure /sys/clay/desks directory structure exists (properly tracked) + =/ old=ball:tarball (~(dip ba:tarball ball) /sys/clay/desks) + =/ new=ball:tarball old(fil `(fall fil.old *lump:tarball)) + =? new =(~ (~(get of new) /base)) + (~(put of new) /base [~ ~ ~]) + =? new =(~ (~(get of new) /grubbery)) + (~(put of new) /grubbery [~ ~ ~]) + =. this (load-ball-changes /sys/clay/desks old new) + :: Sync all desks listed as kids of /sys/clay/desks/ + =/ dek=(list desk) (~(lss ba:tarball ball) /sys/clay/desks) + :: Update clay-state with synced desks + =/ clay-rail=rail:tarball [/sys/clay %'main.clay-state'] + =/ st=clay-state:nexus [%0 (silt dek)] + =. this (save-file clay-rail [~ [/ %clay-state] !>(st)]) |- ^+ this ?~ dek this $(dek t.dek, this (sync-clay-desk i.dek)) @@ -1984,7 +2519,7 @@ ++ sync-clay-desk |= dek=desk ^+ this - =/ base=path /sys/clay/[dek] + =/ base=path /sys/clay/desks/[dek] =/ pax=path /(scot %p our.bowl)/[dek]/(scot %da now.bowl) :: Scry for all file paths in desk :: Each path is like /app/foo/hoon where last element is mark @@ -2007,24 +2542,30 @@ =/ stem=@ta (rear sans) =/ dir=path (weld base (snip `(list @ta)`sans)) =/ name=@ta (cat 3 stem (cat 3 '.' mar)) - =/ =vase .^(vase %cr (weld pax fyl)) + =/ new-vase=vase .^(vase %cr (weld pax fyl)) =/ old=(unit content:tarball) (~(get ba:tarball ball.acc) [dir name]) - =/ dais=(unit dais:clay) - =/ c=(unit content:tarball) - (~(get ba:tarball ball.acc) /sys/daises mar) - ?~ c ~ - `!<(dais:clay q.cage.u.c) - ?~ dais + =/ vale=(unit $-(* vase)) + ?: ?=(?(%hoon %mime %kelvin) mar) + =/ dais=(unit dais:clay) + (mole |.(.^(dais:clay %cb (weld pax `path`/[mar])))) + ?~ dais ~ + `vale:u.dais + =/ =blot:tarball [/ mar] + =/ res=(unit built:nexus) (get-built / (weld /mar path.blot) name.blot) + ?~ res ~ + ?. ?=(%vase -.u.res) ~ + (mole |.(vale:!<(marc:tarball vase.u.res))) + ?~ vale ~& [%sync-clay-skip-no-mark mar fyl] acc - =/ old-vase=(unit ^vase) ?~(old ~ `q.cage.u.old) - =/ res=(each ^vase tang) - (validate-vase:acc u.dais old-vase vase %.n) + =/ old-vase=(unit vase) ?~(old ~ `q.sage.u.old) + =/ res=(each vase tang) + (validate-vase:acc u.vale old-vase new-vase %.n) ?. ?=(%& -.res) ~& [%sync-clay-vale-failed mar fyl] acc - (save-file:acc [dir name] [~ mar p.res]) + (save-file:acc [dir name] [~ [/ mar] p.res]) :: Delete files that no longer exist in Clay =/ removed=(list path) %+ skim ~(tap in old-files) @@ -2039,145 +2580,407 @@ =/ dir=path (weld base (snip `(list @ta)`sans)) =/ name=@ta (cat 3 stem (cat 3 '.' mar)) (delete:acc dir name) - :: For grubbery desk: incrementally rebuild changed mark/nexus caches - =? this =(dek %grubbery) - (rebuild-changed-caches pre-born) :: Subscribe to %next %z on desk root + ~& >> "sync-clay-desk: subscribing to {}" %- emit-card [%pass /clay-desk/[dek] %arvo %c %warp our.bowl dek `[%next %z da+now.bowl /]] -:: Incrementally rebuild mark/nexus caches for files that changed -:: during a grubbery desk sync. Diffs born before/after to detect -:: which /mar/ and /nex/ files actually had content changes. -:: -++ rebuild-changed-caches - |= pre-born=born:nexus - ^+ this - =/ clay-base=path /sys/clay/grubbery - :: Diff born for /mar subtree to find changed marks - =/ old-mar=born:nexus (~(dip of pre-born) (weld clay-base /mar)) - =/ new-mar=born:nexus (~(dip of born) (weld clay-base /mar)) - =/ mar-changed=(set lane:tarball) - (diff-born-state:nexus old-mar new-mar) - =/ changed-marks=(list mark) - %+ murn ~(tap in mar-changed) - |= =lane:tarball - ?. ?=([%& *] lane) ~ - =/ nom=tape (trip name.p.lane) - =/ len=@ud (lent nom) - ?. (gth len 5) ~ - ?. =(".hoon" (slag (sub len 5) nom)) ~ - `(crip (scag (sub len 5) nom)) - :: Diff born for /nex subtree to find changed nexuses - =/ old-nex=born:nexus (~(dip of pre-born) (weld clay-base /nex)) - =/ new-nex=born:nexus (~(dip of born) (weld clay-base /nex)) - =/ nex-changed=(set lane:tarball) - (diff-born-state:nexus old-nex new-nex) - =/ changed-necks=(list neck:tarball) - %+ murn ~(tap in nex-changed) - |= =lane:tarball - ?. ?=([%& *] lane) ~ - =/ nom=tape (trip name.p.lane) - =/ len=@ud (lent nom) - ?. (gth len 5) ~ - ?. =(".hoon" (slag (sub len 5) nom)) ~ - =/ stem=@ta (crip (scag (sub len 5) nom)) - =/ segs=path (snoc path.p.lane stem) - `(rap 3 (join '-' segs)) - :: Rebuild marks if any changed - =? this ?=(^ changed-marks) - ~& > [%sync-marks %rebuilding (lent changed-marks)] - (rebuild-marks-incremental changed-marks) - :: Rebuild nexuses if any changed - =? this ?=(^ changed-necks) - ~& > [%sync-nexuses %rebuilding (lent changed-necks)] - (rebuild-nexuses-incremental changed-necks) +:: React to any change under a code nexus. +:: Enforces: src/ is hoon-only, bin/ is build-managed. +:: Triggers rebuild when src/ changes. +:: Walk a newly created ball and build-code for any %code neck directories. +:: +++ build-new-code-namespaces + |= [here=fold:tarball bol=ball:tarball] + ^+ this + :: check if this directory has a %code neck + ?: ?& ?=(^ fil.bol) + ?=(^ neck.u.fil.bol) + =([/ %code] u.neck.u.fil.bol) + == + :: skip if already registered and built + ?: (~(has by code) here) this + :: register and build + ~& > "register-code-namespace: {(spud here)}" + (build-code here) + :: recurse into children + =/ kids=(list [@ta ball:tarball]) ~(tap by dir.bol) + |- + ?~ kids this + =. this ^$(here (snoc here -.i.kids), bol +.i.kids) + $(kids t.kids) +:: +:: +refs-inc: increment refcounts for all ckeys in a refs axal +:: For new ckeys, stores the built value from the provided map. +:: +++ refs-inc + |= [=refs:nexus builds=(map @uv built:nexus)] + ^- bins:nexus + %+ roll ~(tap of refs) + |= [[* node=(map @ta @uv)] acc=_bins] + %+ roll ~(tap by node) + |= [[* ckey=@uv] inner-acc=_acc] + =/ existing=(unit [refs=@ud =built:nexus]) (~(get by inner-acc) ckey) + ?^ existing + (~(put by inner-acc) ckey u.existing(refs +(refs.u.existing))) + =/ =built:nexus (~(got by builds) ckey) + (~(put by inner-acc) ckey [1 built]) +:: +refs-dec: decrement refcounts for all entries in a refs axal +:: +++ refs-dec + |= =refs:nexus + ^- bins:nexus + %+ roll ~(tap of refs) + |= [[* node=(map @ta @uv)] acc=_bins] + %+ roll ~(tap by node) + |= [[* ckey=@uv] inner-acc=_acc] + =/ entry=(unit [refs=@ud =built:nexus]) (~(get by inner-acc) ckey) + ?~ entry inner-acc + ?: (lte refs.u.entry 1) + (~(del by inner-acc) ckey) + (~(put by inner-acc) ckey u.entry(refs (dec refs.u.entry))) +:: Compile a code nexus into its lode in the code map. +:: Purges non-hoon files from the code nexus. +:: +++ build-code + |= cod=path + ^+ this + ~& > "build-code: start {(spud cod)}" + =/ src-ball=ball:tarball (~(dip ba:tarball ball) cod) + :: Separate hoon and non-hoon files + =/ all-files=(list [=rail:tarball =content:tarball]) + ~(tap ba:tarball src-ball) + ~& > "build-code: {<(lent all-files)>} files" + =/ hoon-ball=ball:tarball + %+ roll all-files + |= [[=rail:tarball =content:tarball] acc=_src-ball] + ?. =(p.sage.content %hoon) + (~(del ba:tarball acc) path.rail name.rail) + acc + =/ mime-files=(list [=rail:tarball =content:tarball]) + (skim all-files |=([* =content:tarball] =([/ %mime] p.sage.content))) + :: Ensure %code neck on code nexus directory + =/ code-lump=lump:tarball + (fall (~(get of ball) cod) *lump:tarball) + =. ball (~(put of ball) cod code-lump(neck `[/ %code])) + :: Get or create lode for this code nexus + =/ =lode:nexus (fall (~(get by code) cod) *lode:nexus) + =/ old-refs=refs:nexus refs.lode + :: Reconstruct cache: join keys→refs→bins + ~& > %bins-to-cache + =/ old-cache=build-cache:build + ~> %bout + (bins-to-cache:build keys.lode bins) + ~& > "build-code: compiling..." + :: Single compilation pass: marks, libs, nexuses (hoon only) + ~& > %build-all + =/ res=build-out:build + ~> %bout + (build-all:build sut src-ball old-cache) + ~& > "build-code: compiled {<~(wyt by results.res)>} results" + ~& > %sham-and-refs + :: Build refs + builds map, keyed by input ckey + :: Seed with mime files + =/ [new-refs=refs:nexus builds=(map @uv built:nexus)] + ~> %bout + %+ roll mime-files + |= [[=rail:tarball =content:tarball] [acc=refs:nexus bld=(map @uv built:nexus)]] + =/ =mime !<(mime q.sage.content) + =/ =built:nexus [%mime mime] + =/ ckey=@uv (sham built) + =/ node=(map @ta @uv) + (fall (~(get of acc) path.rail) *(map @ta @uv)) + [(~(put of acc) path.rail (~(put by node) name.rail ckey)) (~(put by bld) ckey built)] + :: Add compiled hoon results + ~& > %sham-hoon-results + =^ new-refs builds + ~> %bout + %+ roll ~(tap by results.res) + |= [[=rail:tarball =build-result:build] [acc=_new-refs bld=_builds]] + =/ stem=@ta (strip-hoon:build name.rail) + =/ =built:nexus + ?: ?=(%| -.build-result) + ~& >>> "build-code: FAILED {(spud (snoc path.rail name.rail))}" + %- (slog (flop p.build-result)) + [%tang p.build-result] + =/ val-err=(unit tang) (validate-build rail p.build-result) + ?^ val-err + ~& >> "validate-build failed: {(spud (snoc path.rail name.rail))}" + [%tang u.val-err] + [%vase p.build-result] + =/ ckey=@uv (~(got by keys.res) rail) + =/ node=(map @ta @uv) + (fall (~(get of acc) path.rail) *(map @ta @uv)) + [(~(put of acc) path.rail (~(put by node) stem ckey)) (~(put by bld) ckey built)] + :: Update global bins: increment new, decrement old + ~& > %refs-inc + =. bins ~>(%bout (refs-inc new-refs builds)) + :: Decrement old refs, update lode + ~& > %refs-dec + =. bins ~>(%bout (refs-dec old-refs)) + =. lode [keys.res deps.res new-refs] + =. code (~(put by code) cod lode) + :: Validate marks: clam existing grubs through changed marks + ~& > %validate-marks + =^ new-refs this + ~> %bout + (validate-marks cod old-refs new-refs) + =/ upd-lode=lode:nexus (fall (~(get by code) cod) *lode:nexus) + =. code (~(put by code) cod upd-lode(refs new-refs)) + :: Reload nexuses whose compiled code changed + ~& > %reload-changed-nexuses + =. this + ~> %bout + (reload-changed-nexuses cod old-refs new-refs) + ~& > "build-code: done" this -:: Rebuild daises and tubes for a list of changed marks -:: -++ rebuild-marks-incremental - |= changed=(list mark) - ^+ this - =/ cores=(map mark vase) (build-mark-cores:marks our.bowl q.byk.bowl now.bowl) - =/ all-marks=(set mark) ~(key by cores) - =/ changed-set=(set mark) (silt changed) - :: Rebuild daises for changed marks - =. ball - %+ roll changed - |= [mak=mark acc=_ball] - =/ core=(unit vase) (~(get by cores) mak) - ?~ core - (~(del ba:tarball acc) [/sys/daises mak]) - =/ res=(each dais:clay tang) - (mule |.((build-dais:marks cores mak u.core))) - ?: ?=(%| -.res) - %- (%*(. slog pri 3) leaf+"{}: dais build failed" (flop p.res)) - acc - (~(put ba:tarball acc) [/sys/daises mak] [~ %temp !>(p.res)]) - :: Discover all tube pairs and rebuild those involving changed marks - =/ pairs=(list mars:clay) +:: Validate marks: for each changed mark in bin/mar/, build a vale gate +:: Walk ball under a code namespace, pruning at child code namespaces. +:: Returns all [fold lump] pairs governed by this code namespace — +:: i.e. under scope but not under a deeper code namespace. +:: +++ governed-dirs + |= cod=path + ^- (list [=fold:tarball =lump:tarball]) + =/ scope=path (snip `(list @ta)`cod) + =/ sub=ball:tarball (~(dip ba:tarball ball) scope) + =/ out=(list [=fold:tarball =lump:tarball]) ~ + =| here=path + |- + :: Check if any child is a code namespace — if so, this directory + :: is another code namespace's scope, not ours. Prune entirely. + :: Exception: here=~ is our own scope (we expect our own /code child). + =/ has-child-code=? + %+ lien ~(tap by dir.sub) + |= [name=@ta kid=ball:tarball] + ?&(=(%code name) ?=(^ fil.kid) ?=(^ neck.u.fil.kid) =([/ %code] u.neck.u.fil.kid)) + :: Collect this node if it has a lump + =? out ?=(^ fil.sub) + [[(weld scope here) u.fil.sub] out] + :: Child code namespace means everything below is governed by it, not us. + :: Collect the node but don't descend. Exception: here=~ is our own scope. + ?: ?&(has-child-code !=(here ~)) + out + :: Descend into children, skipping the code directory itself + =/ kids=(list [@ta ball:tarball]) ~(tap by dir.sub) + |- + ?~ kids out + =/ [name=@ta kid=ball:tarball] i.kids + =? out !=(name %code) + ^$(here (snoc here name), sub kid) + $(kids t.kids) +:: Walk ball under a code namespace, collecting all files governed by it. +:: Prunes at child code namespaces. +:: +++ governed-files + |= cod=path + ^- (list [=rail:tarball =content:tarball]) + =/ dirs=(list [=fold:tarball =lump:tarball]) (governed-dirs cod) + %- zing + %+ turn dirs + |= [=fold:tarball =lump:tarball] + %+ turn ~(tap by contents.lump) + |= [name=@ta =content:tarball] + [[fold name] content] +:: and clam all grubs with that mark through validate-vase. +:: On success, updates grubs in ball with clammed vases. +:: On failure, downgrades the mark to .tang in new-bin. +:: +++ validate-marks + |= [cod=path old-refs=refs:nexus new-refs=refs:nexus] + ^+ [new-refs this] + :: Walk /mar subtree to find changed marks by comparing ckeys + =/ mar-sub=refs:nexus (~(dip of new-refs) /mar) + =/ old-sub=refs:nexus (~(dip of old-refs) /mar) + =/ all-new=(list [pax=path node=(map @ta @uv)]) + ~(tap of mar-sub) + :: Find changed blots (ckey differs or newly added) + =/ changed=(list [=blot:tarball =built:nexus]) %- zing - %+ turn ~(tap by cores) - |= [mak=mark vas=vase] - ^- (list mars:clay) - =/ [grab=(list mark) grow=(list mark)] - :- ?. (slob %grab -:vas) ~ - (sloe -:(slap vas [%limb %grab])) - ?. (slob %grow -:vas) ~ - (sloe -:(slap vas [%limb %grow])) - ;: weld - (murn grab |=(m=mark ?.((~(has in all-marks) m) ~ `[m mak]))) - (murn grow |=(m=mark ?.((~(has in all-marks) m) ~ `[mak m]))) + %+ turn all-new + |= [pax=path node=(map @ta @uv)] + %+ murn ~(tap by node) + |= [nam=@ta ckey=@uv] + =/ old-node=(map @ta @uv) + (fall (~(get of old-sub) pax) *(map @ta @uv)) + =/ old-key=(unit @uv) (~(get by old-node) nam) + ?: =(old-key `ckey) ~ + =/ entry=(unit [refs=@ud =built:nexus]) (~(get by bins) ckey) + ?~ entry ~ + `[[pax nam] built.u.entry] + :: Process each changed mark + =/ remaining=_changed changed + |- + ?~ remaining [new-refs this] + =/ [=blot:tarball =built:nexus] i.remaining + =/ nam=@tas (rail-to-arm:tarball blot) + :: Find all grubs with this mark, including booms with matching inner mark + =/ grubs=(list [=rail:tarball =content:tarball]) + %+ skim (governed-files cod) + |= [=rail:tarball =content:tarball] + ?: =(name.blot name.p.sage.content) & + ?. =([/ %boom] p.sage.content) | + =/ [* inner=bask:tarball] ;;([tang bask:tarball] q.q.sage.content) + =(name.blot name.p.inner) + ?~ grubs $(remaining t.remaining) + :: Get vale gate, or a crash gate if mark failed to compile + =/ vale=$-(* vase) + ?. ?=(%vase -.built) + |=(* (mean ?:(?=(%tang -.built) tang.built ~[leaf+"validate-marks: {(trip nam)} failed"]))) + =/ marc-res=(each marc:tarball tang) + (mule |.(!<(marc:tarball vase.built))) + ?:(?=(%| -.marc-res) |=(* (mean p.marc-res)) vale.p.marc-res) + :: Clam each grub; success restores cage, failure booms + =/ results=(list [=rail:tarball =content:tarball res=(each vase tang)]) + %+ turn grubs + |= [=rail:tarball =content:tarball] + =/ noun=* + ?: =([/ %boom] p.sage.content) + =/ [* =bask:tarball] ;;([tang bask:tarball] q.q.sage.content) + q.bask + q.q.sage.content + =/ new=(each vase tang) (mule |.((vale noun))) + ?: ?=(%| -.new) [rail content new] + [rail content (validate-vase vale `q.sage.content p.new %.n)] + =. this + %+ roll results + |= [[=rail:tarball =content:tarball res=(each vase tang)] acc=_this] + ?: ?=(%& -.res) + (save-file:acc rail content(sage [p.sage.content p.res])) + ~& >> "validate-marks: boom {(spud (snoc path.rail name.rail))}" + =/ noun=* + ?: =([/ %boom] p.sage.content) + =/ [* =bask:tarball] ;;([tang bask:tarball] q.q.sage.content) + q.bask + q.q.sage.content + (save-file:acc rail content(sage [[/ %boom] !>([p.res [blot noun]])])) + =/ n-boom=@ud + (lent (skim results |=([* * res=(each vase tang)] ?=(%| -.res)))) + ~& > "validate-marks: {(trip nam)} — {<(sub (lent grubs) n-boom)>} ok, {} boom" + $(remaining t.remaining) +:: Reload nexuses: for each changed nexus in bin/nex/, find all +:: directories using that neck, run on-load with the new code, and +:: apply the results (like reload-nexus). Crashes if any on-load fails. +:: +++ reload-changed-nexuses + |= [cod=path old-refs=refs:nexus new-refs=refs:nexus] + ^+ this + :: Find nexuses in /nex whose ckey changed + =/ nex-sub=refs:nexus (~(dip of new-refs) /nex) + =/ old-sub=refs:nexus (~(dip of old-refs) /nex) + =/ all-new=(list [pax=path node=(map @ta @uv)]) + ~(tap of nex-sub) + =/ changed=(list [=neck:tarball =built:nexus]) + %- zing + %+ turn all-new + |= [pax=path node=(map @ta @uv)] + %+ murn ~(tap by node) + |= [nam=@ta ckey=@uv] + =/ old-node=(map @ta @uv) + (fall (~(get of old-sub) pax) *(map @ta @uv)) + =/ old-ckey=(unit @uv) (~(get by old-node) nam) + ?: =(old-ckey `ckey) ~ + =/ entry=(unit [refs=@ud =built:nexus]) (~(get by bins) ckey) + ?~ entry ~ + `[[pax nam] built.u.entry] + :: Process each changed nexus + =/ remaining=_changed changed + |- + ?~ remaining this + =/ [=neck:tarball =built:nexus] i.remaining + :: Extract nexus or propagate error + =/ nex-res=(each nexus:nexus tang) + ?+ -.built |+~[leaf+"reload-changed-nexuses: unexpected built type {<-.built>}"] + %tang |+tang.built + %vase (mule |.(!<(nexus:nexus vase.built))) == - =/ affected=(list mars:clay) - %+ skim pairs - |= =mars:clay - |((~(has in changed-set) a.mars) (~(has in changed-set) b.mars)) - =. ball - %+ roll affected - |= [=mars:clay acc=_ball] - =/ tub=(unit tube:clay) (try-build-tube:marks cores mars) - ?~ tub - (~(del ba:tarball acc) [/sys/tubes/[a.mars] b.mars]) - (~(put ba:tarball acc) [/sys/tubes/[a.mars] b.mars] [~ %temp !>(u.tub)]) - :: Delete all tubes for deleted marks - =/ deleted=(list mark) - (skip changed |=(mak=mark (~(has by cores) mak))) - =. ball - %+ roll deleted - |= [mak=mark acc=_ball] - =. acc (~(lop ba:tarball acc) /sys/tubes/[mak]) - =/ sources=(list @ta) (~(lss ba:tarball acc) /sys/tubes) - %+ roll sources - |= [src=@ta inner=_acc] - (~(del ba:tarball inner) [/sys/tubes/[src] mak]) - ~& > [%marks-rebuilt (lent changed) %tubes (lent affected)] - this -:: Rebuild nexus cores for a list of changed necks -:: -++ rebuild-nexuses-incremental - |= changed=(list neck:tarball) - ^+ this - =/ base=path /(scot %p our.bowl)/[q.byk.bowl]/(scot %da now.bowl) - =. ball - %+ roll changed - |= [=neck:tarball acc=_ball] - =/ exists=? .^(? %cu (weld base /nex/[neck]/hoon)) - ?. exists - (~(del ba:tarball acc) [/sys/nexuses neck]) - =/ res=(each vase tang) - (mule |.(.^(vase %ca (weld base /nex/[neck]/hoon)))) - ?: ?=(%| -.res) - %- (%*(. slog pri 3) leaf+"{}: nexus build failed" (flop p.res)) - acc - =/ nex-res=(each nexus:nexus tang) - (mule |.(!<(nexus:nexus p.res))) - ?: ?=(%| -.nex-res) - %- (%*(. slog pri 3) leaf+"{}: nexus type mismatch" (flop p.nex-res)) - acc - (~(put ba:tarball acc) [/sys/nexuses neck] [~ %temp !>(p.nex-res)]) - ~& > [%nexuses-rebuilt (lent changed)] - this -:: List all files mirrored under a /sys/clay/[desk] path + :: Find all directories using this neck, governed by this code namespace + =/ dirs=(list fold:tarball) + %+ murn (governed-dirs cod) + |= [=fold:tarball =lump:tarball] + ?. ?&(?=(^ neck.lump) =(u.neck.lump neck)) ~ + `fold + ?~ dirs $(remaining t.remaining) + :: Run on-load and apply results for each directory + :: (reload-nexus-at handles bang/clear internally) + =/ dir-remaining=(list fold:tarball) dirs + |- + ?~ dir-remaining ^$(remaining t.remaining) + =/ dest=fold:tarball i.dir-remaining + ?: ?=(%| -.nex-res) + ~& >> "reload-changed-nexuses: bang {(spud (weld path.neck ~[name.neck]))} at {(spud dest)}" + =. this (bang-nexus dest p.nex-res) + $(dir-remaining t.dir-remaining) + ~& > "reload-changed-nexuses: reloading {(spud (weld path.neck ~[name.neck]))} at {(spud dest)}" + =. this (reload-nexus-at dest p.nex-res) + =/ reload-ball=ball:tarball (~(dip ba:tarball ball) dest) + =. this (spawn-all-files dest reload-ball) + $(dir-remaining t.dir-remaining) +:: Validate a compiled artifact based on its source path. +:: +:: Returns ~ if valid, (unit tang) if the artifact doesn't match +:: the expected type for its location: +:: mar/* — mark door (has +grab, +grow) +:: nex/* — nexus:nexus +:: +++ validate-build + |= [=rail:tarball =vase] + ^- (unit tang) + =/ dir=path path.rail + :: Marks: validated by build-marc after compilation, not here. + :: Cached entries are marcs (not raw doors), so slob won't find arms. + ?: =(/mar (scag 1 dir)) ~ + ?: =(/nex (scag 1 dir)) + =/ res=(each nexus:nexus tang) + (mule |.(!<(nexus:nexus vase))) + ?:(?=(%& -.res) ~ `(weld ~[leaf+"nexus {(trip name.rail)}: type mismatch"] p.res)) + :: No validation for other paths (e.g. lib/*.hoon) + ~ +:: Mirror /gub/ from Clay into /code/, then build. +:: +++ sync-gub + ^+ this + ~& > "sync-gub: start" + =/ pax=path /(scot %p our.bowl)/grubbery/(scot %da now.bowl) + :: Build the target ball for /code/ + =/ files=(list path) .^((list path) %ct (weld pax /gub)) + =/ new-src=ball:tarball + %+ roll files + |= [fyl=path acc=ball:tarball] + ?. ?=([@ @ @ *] fyl) acc + =/ mar=@tas (rear fyl) + =/ sans=path (snip `(list @ta)`fyl) + =/ stem=@ta (rear sans) + =/ rel-dir=path (slag 1 (snip `(list @ta)`sans)) + =/ name=@ta (cat 3 stem (cat 3 '.' mar)) + :: sys.kelvin: store as kelvin mark at root + ?: =(%'sys.kelvin' name) + =/ =vase .^(vase %cr (weld pax fyl)) + =/ =waft:clay ;;(waft:clay q.vase) + (~(put ba:tarball acc) [/ %'sys.kelvin'] [~ [/ %kelvin] !>(waft)]) + ?: =(mar %hoon) + =/ =vase .^(vase %cr (weld pax fyl)) + =/ val=(each ^vase tang) (validate-new-sage /code [/ mar] ~ vase %.y) + ?. ?=(%& -.val) + ~& >>> "sync-gub: validation failed for {(trip name)}: {(trip (render-tang:build p.val))}" + acc + (~(put ba:tarball acc) [rel-dir name] [~ [/ mar] p.val]) + :: Non-hoon: convert to mime via tube, store as %mime grub + =/ =vase .^(vase %cr (weld pax fyl)) + =/ tub=tube:clay .^(tube:clay %cc (weld pax /[mar]/mime)) + =/ =mime !<(mime (tub vase)) + (~(put ba:tarball acc) [rel-dir name] [~ [/ %mime] !>(mime)]) + :: Get old ball at /code/ + =/ old-src=ball:tarball (~(dip ba:tarball ball) /code) + :: Diff and bump src changes (born, silo, hist, notify) + ~& > "sync-gub: load-ball-changes start" + =. this (load-ball-changes /code old-src new-src) + ~& > "sync-gub: load-ball-changes done" + :: Compile + ~& > "sync-gub: build-code start" + =/ res=_this (build-code /code) + ~& > "sync-gub: build-code done" + res +:: List all files mirrored under a /sys/clay/desks/[desk] path :: Returns Clay-style paths (like /app/foo/hoon) with mark as last element :: ++ list-clay-files @@ -2228,23 +3031,27 @@ ^+ this ?~ riot :: Desk was deleted — unsub, remove mirror - ~& > [%clay-desk-deleted dek] + ~& >> "on-clay-writ: desk deleted {}" (unmount-clay-desk dek) :: Desk changed — re-sync files and re-subscribe - ~& > [%clay-desk-changed dek] - (sync-clay-desk dek) + ~& >> "on-clay-writ: desk changed {}" + =. this (sync-clay-desk dek) + =? this =(dek %grubbery) + ~& >> "on-clay-writ: triggering sync-gub" + sync-gub + this :: ++ unmount-clay-desk |= dek=desk ^+ this =. this (emit-card [%pass /clay-desk/[dek] %arvo %c %warp our.bowl dek ~]) - (cull [%| /sys/clay/[dek]]) + (cull [%| /sys/clay/desks/[dek]]) :: Subscribe to dill logs and sessions, create grubs for both. :: ++ sync-dill ^+ this :: Create dill/logs grub and subscribe - =. this (save-file [/sys/dill %'logs.dill-told'] [~ %dill-told !>(*told:dill)]) + =. this (save-file [/sys/dill %'logs.dill-told'] [~ [/ %dill-told] !>(*told:dill)]) =. gain (set-gain [/sys/dill %'logs.dill-told'] %.y) =. this (emit-card [%pass /dill/logs %arvo %d %logs `~]) :: Scry for sessions @@ -2264,22 +3071,23 @@ %+ roll sessions |= [ses=@tas acc=_this] =. gain.acc (set-gain:acc [/sys/dill/sessions ses] %.y) - (save-file:acc [/sys/dill/sessions ses] [~ %dill-blit !>(*(list blit:dill))]) + (save-file:acc [/sys/dill/sessions ses] [~ [/ %dill-blit] !>(*(list blit:dill))]) %- emit-cards %+ turn sessions |=(ses=@tas [%pass /dill/session/[ses] %arvo %d %shot ses %view ~]) :: ++ sync-jael ^+ this - :: Create jael directory - =? ball =(~ (~(get of ball) /sys/jael)) - (~(put of ball) /sys/jael [~ ~ ~]) + :: Ensure jael directory exists (properly tracked via load-ball-changes) + =/ old=ball:tarball (~(dip ba:tarball ball) /sys/jael) + =/ new=ball:tarball old(fil `(fall fil.old *lump:tarball)) + =. this (load-ball-changes /sys/jael old new) :: Create grubs and subscribe =. this - (save-file [/sys/jael %'private-keys.jael-private-keys'] [~ %jael-private-keys !>(*[life (map life ring)])]) + (save-file [/sys/jael %'private-keys.jael-private-keys'] [~ [/ %jael-private-keys] !>(*[life (map life ring)])]) =. gain (set-gain [/sys/jael %'private-keys.jael-private-keys'] %.y) =. this - (save-file [/sys/jael %'public-keys.jael-public-keys-result'] [~ %jael-public-keys-result !>(*public-keys-result:jael)]) + (save-file [/sys/jael %'public-keys.jael-public-keys-result'] [~ [/ %jael-public-keys-result] !>(*public-keys-result:jael)]) =. gain (set-gain [/sys/jael %'public-keys.jael-public-keys-result'] %.y) :: Subscribe to private keys =. this @@ -2291,7 +3099,378 @@ ++ on-jael-public |= =public-keys-result:jael ^+ this - (save-file [/sys/jael %'public-keys.jael-public-keys-result'] [~ %jael-public-keys-result !>(public-keys-result)]) + (save-file [/sys/jael %'public-keys.jael-public-keys-result'] [~ [/ %jael-public-keys-result] !>(public-keys-result)]) +:: /sys/gall: materialized gall subscriptions +:: +:: Poke %grubbery with %gall-watch to subscribe to a gall agent. +:: Incoming facts are validated via marc and materialized as files. +:: Any grub can peek or watch the materialized data. +:: +:: Poke format: +:: %gall-watch [ship=@p agent=dude:gall path=path] +:: %gall-leave [ship=@p agent=dude:gall path=path] +:: +:: Directory structure per subscription: +:: /sys/gall/[ship]/[agent]/[path...]/ +:: data latest fact (blot from incoming cage mark) +:: live loob: %.y when subscribed, %.n on kick/nack +:: +:: Behavior: +:: - On %fact: look up marc for cage mark in /code/mar, validate, +:: save-file to data. Skip if no marc found. +:: - On %kick: set live to %.n, auto-resubscribe, set live to +:: %.y on successful %watch-ack. +:: - On %watch-ack with error: set live to %.n, don't retry. +:: - All files are gained (history retained in silo). +:: - Wire format: /gall-sub/{ship}/{agent}/{path...} +:: +:: +++ gall-sub-dir + |= [=ship agent=dude:gall =path] + ^- ^path + (weld /sys/gall/subs/[(scot %p ship)]/[agent] path) +:: +++ gall-sub-wire + |= [=ship agent=dude:gall =path] + ^- wire + (weld /gall-sub/[(scot %p ship)]/[agent] path) +:: Subscribe to a gall agent, materialize at /sys/gall/ +:: +++ gall-sub + |= [=ship agent=dude:gall =path] + ^+ this + =/ dir=^path (gall-sub-dir ship agent path) + =/ wir=wire (gall-sub-wire ship agent path) + :: Ensure directory exists + =/ old=ball:tarball (~(dip ba:tarball ball) dir) + =/ new=ball:tarball old(fil `(fall fil.old *lump:tarball)) + =. this (load-ball-changes dir old new) + :: Create live file (%.y = subscribing) + =. this (save-file [dir %live] [~ [/ %loob] !>(%.y)]) + =. gain (set-gain [dir %live] %.y) + :: Subscribe + ~& > "gall-sub: subscribing to {}/{(trip agent)}/{(spud path)}" + (emit-card [%pass wir %agent [ship agent] %watch path]) +:: Unsubscribe from a materialized gall subscription +:: +++ gall-unsub + |= [=ship agent=dude:gall =path] + ^+ this + =/ dir=^path (gall-sub-dir ship agent path) + =/ wir=wire (gall-sub-wire ship agent path) + ~& > "gall-unsub: leaving {}/{(trip agent)}/{(spud path)}" + =. this (emit-card [%pass wir %agent [ship agent] %leave ~]) + :: Delete the subscription tree + (cull-ball-changes dir (~(dip ba:tarball ball) dir)) +:: Handle signs from materialized gall subscriptions +:: +++ take-gall-sub + |= [wir=wire =sign:agent:gall] + ^+ this + :: Parse wire: /[ship]/[agent]/[path...] + ?> ?=([@ @ *] wir) + =/ =ship (slav %p i.wir) + =/ agent=dude:gall i.t.wir + =/ =path t.t.wir + =/ dir=^path (gall-sub-dir ship agent path) + ?- -.sign + %poke-ack + ~& >>> "gall-sub: unexpected poke-ack on sub wire" + this + :: + %watch-ack + ?~ p.sign + :: Success — set live to %.y + ~& > "gall-sub: watch-ack ok {}/{(trip agent)}/{(spud path)}" + (save-file [dir %live] [~ [/ %loob] !>(%.y)]) + :: Failed — set live to %.n, don't retry + ~& >>> "gall-sub: watch-ack failed {}/{(trip agent)}/{(spud path)}" + %- (slog u.p.sign) + (save-file [dir %live] [~ [/ %loob] !>(%.n)]) + :: + %fact + :: Validate via marc, save to data + =/ mar=@tas p.cage.sign + =/ =blot:tarball [/ mar] + =/ vale=(unit $-(* vase)) + =/ res=(unit built:nexus) (get-built / (weld /mar path.blot) name.blot) + ?~ res ~ + ?. ?=(%vase -.u.res) ~ + (mole |.(vale:!<(marc:tarball vase.u.res))) + ?~ vale + :: No marc — fall back to page (original mark + raw noun) + ~& > "gall-sub: no marc for {}, storing as page" + =. this (save-file [dir %data] [~ [/ %page] !>(`[p=@tas q=*]`[mar q.q.cage.sign])]) + =. gain (set-gain [dir %data] %.y) + this + =/ old=(unit content:tarball) + (~(get ba:tarball ball) [dir %data]) + =/ old-vase=(unit vase) ?~(old ~ `q.sage.u.old) + =/ res=(each vase tang) + (validate-vase u.vale old-vase q.cage.sign %.n) + ?. ?=(%& -.res) + ~& >>> "gall-sub: vale failed for {}" + this + =. this (save-file [dir %data] [~ [/ mar] p.res]) + =. gain (set-gain [dir %data] %.y) + this + :: + %kick + :: Set live to %.n, auto-resubscribe + ~& > "gall-sub: kicked from {}/{(trip agent)}/{(spud path)}, resubscribing" + =. this (save-file [dir %live] [~ [/ %loob] !>(%.n)]) + (emit-card [%pass (gall-sub-wire ship agent path) %agent [ship agent] %watch path]) + == +:: Resubscribe all existing gall subs on reload +:: +++ sync-gall + ^+ this + =/ old=ball:tarball (~(dip ba:tarball ball) /sys/gall) + =/ new=ball:tarball old(fil `(fall fil.old *lump:tarball)) + =. this (load-ball-changes /sys/gall old new) + :: Walk existing subscriptions under /sys/gall/subs/ + =/ subs=ball:tarball (~(gut by dir.old) %subs *ball:tarball) + =/ ships=(list [@ta ball:tarball]) ~(tap by dir.subs) + |- + ?~ ships this + =/ [ship-ta=@ta ship-ball=ball:tarball] i.ships + =/ agents=(list [@ta ball:tarball]) ~(tap by dir.ship-ball) + =. this + |- + ?~ agents this + =/ [agent-ta=@ta agent-ball=ball:tarball] i.agents + =. this (resub-gall-tree ship-ta agent-ta / agent-ball) + $(agents t.agents) + $(ships t.ships) +:: Recursively find subscription leaves (dirs with a 'live' file) +:: and resubscribe them. +:: +++ resub-gall-tree + |= [ship-ta=@ta agent-ta=@ta pax=path sub=ball:tarball] + ^+ this + :: If this dir has a live file, it's a subscription leaf — resubscribe + =/ has-live=? + ?& ?=(^ fil.sub) + (~(has by contents.u.fil.sub) %live) + == + =. this + ?. has-live this + =/ =ship (slav %p ship-ta) + =/ agent=dude:gall agent-ta + =/ wir=wire (gall-sub-wire ship agent pax) + ~& > "sync-gall: resubscribing {}/{(trip agent)}/{(spud pax)}" + (emit-card [%pass wir %agent [ship agent] %watch pax]) + :: Recurse into subdirectories + =/ kids=(list [@ta ball:tarball]) ~(tap by dir.sub) + |- + ?~ kids this + =. this ^$(pax (snoc pax -.i.kids), sub +.i.kids) + $(kids t.kids) +:: +:: /sys/ames: runtime-owned peer infrastructure +:: +:: Creates /sys/ames/ directory structure for foreign ship management. +:: Usergroups are per-group directories with who.ships and how.weir files. +:: Ship directories are created lazily on first foreign poke. +:: Weirs recompute atomically on any usergroup change. +:: +++ sync-peer + ^+ this + =/ old=ball:tarball (~(dip ba:tarball ball) /sys/ames) + =/ new=ball:tarball old(fil `(fall fil.old *lump:tarball)) + =? new =(~ (~(get of new) /usergroups)) + (~(put of new) /usergroups [~ ~ ~]) + =? new =(~ (~(get of new) /ships)) + (~(put of new) /ships [~ ~ ~]) + =. this (load-ball-changes /sys/ames old new) + (ensure-peer-ship our.bowl) +:: Ensure /sys/ames/ships/~ship/ exists with ship.sig and computed weir. +:: Our ship gets no weir (full access). Foreign ships get weir from usergroups. +:: +++ ensure-peer-ship + |= src=@p + ^+ this + =/ ship-ta=@ta (scot %p src) + =/ ship-dir=path /sys/ames/ships/[ship-ta] + :: Already exists? + ?. =(~ (~(get of ball) ship-dir)) + this + :: Create directory + ship.sig grub (properly tracked) + =/ old=ball:tarball (~(dip ba:tarball ball) ship-dir) + =/ new=ball:tarball old(fil `(fall fil.old *lump:tarball)) + =. new (~(put ba:tarball new) [/ %'ship.sig'] [~ [/ %sig] !>(~)]) + =. this (load-ball-changes ship-dir old new) + =/ ship-rail=rail:tarball [ship-dir %'ship.sig'] + =. this (spawn-proc ship-rail [%load ~]) + :: Set weir (our ship gets none — full access) + ?: =(src our.bowl) this + =/ =weir:nexus (compute-peer-weir src) + (set-weir ship-dir `weir) +:: Compute weir for a ship from usergroup data. +:: Union of all group weirs the ship belongs to, plus public weir. +:: +++ read-peer-who + ^- (map @ta (set @p)) + =/ ug=ball:tarball + (~(dip ba:tarball ball) /sys/ames/usergroups) + %- ~(gas by *(map @ta (set @p))) + %+ murn ~(tap in ~(key by dir.ug)) + |= name=@ta + ^- (unit [@ta (set @p)]) + =/ grp=ball:tarball (~(dip ba:tarball ug) /[name]) + =/ c=(unit content:tarball) (~(get ba:tarball grp) [/ %'who.ships']) + ?~ c ~ + =/ res (mule |.(!<((set @p) q.sage.u.c))) + ?:(?=(%| -.res) ~ `[name p.res]) +:: +++ read-peer-how + ^- (map @ta weir:nexus) + =/ ug=ball:tarball + (~(dip ba:tarball ball) /sys/ames/usergroups) + %- ~(gas by *(map @ta weir:nexus)) + %+ murn ~(tap in ~(key by dir.ug)) + |= name=@ta + ^- (unit [@ta weir:nexus]) + =/ grp=ball:tarball (~(dip ba:tarball ug) /[name]) + =/ c=(unit content:tarball) (~(get ba:tarball grp) [/ %'how.weir']) + ?~ c ~ + =/ res (mule |.(!<(weir:nexus q.sage.u.c))) + ?:(?=(%| -.res) ~ `[name p.res]) +:: Build reverse index: ship → group names +:: +++ build-peer-src + |= who=(map @ta (set @p)) + ^- (map @p (set @ta)) + =/ groups=(list [@ta (set @p)]) ~(tap by who) + =| acc=(map @p (set @ta)) + |- + ?~ groups acc + =/ [name=@ta members=(set @p)] i.groups + =/ ships=(list @p) ~(tap in members) + =. acc + |- + ?~ ships acc + =/ existing=(set @ta) (fall (~(get by acc) i.ships) ~) + $(ships t.ships, acc (~(put by acc) i.ships (~(put in existing) name))) + $(groups t.groups) +:: Union two weirs +:: +++ union-weirs + |= [a=weir:nexus b=weir:nexus] + ^- weir:nexus + :+ (~(uni in make.a) make.b) + (~(uni in poke.a) poke.b) + (~(uni in peek.a) peek.b) +:: Compute weir for a ship from usergroup data. +:: Union of all group weirs the ship belongs to, plus public weir. +:: +++ compute-peer-weir + |= =ship + ^- weir:nexus + =/ who=(map @ta (set @p)) read-peer-who + =/ how=(map @ta weir:nexus) read-peer-how + (compute-peer-weir-from ship (build-peer-src who) how) +:: +++ compute-peer-weir-from + |= [=ship src=(map @p (set @ta)) how=(map @ta weir:nexus)] + ^- weir:nexus + =/ public-weir=weir:nexus + (fall (~(get by how) %public) *weir:nexus) + =/ ship-groups=(set @ta) + (fall (~(get by src) ship) ~) + =/ ship-weir=weir:nexus + %+ roll ~(tap in ship-groups) + |= [name=@ta acc=weir:nexus] + (union-weirs acc (fall (~(get by how) name) *weir:nexus)) + (union-weirs ship-weir public-weir) +:: Recompute weirs for all foreign ship directories. +:: Called when usergroup data changes. Lazily creates ship dirs +:: for ships in usergroups that don't have dirs yet. +:: +++ recompute-peer-weirs + ^+ this + =/ who=(map @ta (set @p)) read-peer-who + =/ how=(map @ta weir:nexus) read-peer-how + =/ src=(map @p (set @ta)) (build-peer-src who) + :: Collect all ships from usergroups + existing ship dirs + =/ all-members=(set @p) + %- ~(gas in *(set @p)) + %- zing + %+ turn ~(val by who) + |= members=(set @p) + ~(tap in members) + =/ ships-ball=ball:tarball + (~(dip ba:tarball ball) /sys/ames/ships) + =/ existing=(set @p) + %- ~(gas in *(set @p)) + %+ murn ~(tap in ~(key by dir.ships-ball)) + |=(name=@ta (slaw %p name)) + =/ all-ships=(list @p) ~(tap in (~(uni in all-members) existing)) + |- + ?~ all-ships this + =/ =ship i.all-ships + ?: =(ship our.bowl) + $(all-ships t.all-ships) + =. this (ensure-peer-ship ship) + =/ =weir:nexus (compute-peer-weir-from ship src how) + =. this (set-weir /sys/ames/ships/[(scot %p ship)] `weir) + $(all-ships t.all-ships) +:: /sys/eyre: ensure directory structure + register /grubbery/api +:: +++ sync-eyre + ^+ this + :: Ensure /sys/eyre directory structure exists + =/ old=ball:tarball (~(dip ba:tarball ball) /sys/eyre) + =/ new=ball:tarball old(fil `(fall fil.old *lump:tarball)) + =? new =(~ (~(get of new) /requests)) + (~(put of new) /requests [~ ~ ~]) + =. this (load-ball-changes /sys/eyre old new) + :: Register /grubbery/api with eyre + (emit-card [%pass /eyre-api %arvo %e %connect [~ /grubbery/api] dap.bowl]) +:: +:: /sys/eyre: read/write server state, find bindings +:: +++ get-server-state + ^- server-state:nexus + =/ eyre-rail=rail:tarball [/sys/eyre %'main.server-state'] + =/ old=(unit content:tarball) (~(get ba:tarball ball) eyre-rail) + ?~ old *server-state:nexus + !<(server-state:nexus q.sage.u.old) +:: +++ save-server-state + |= st=server-state:nexus + ^+ this + (save-file [/sys/eyre %'main.server-state'] [~ [/ %server-state] !>(st)]) +:: +++ find-eyre-binding + |= [bindings=(map binding:eyre rail:tarball) site=path] + ^- (unit [=binding:eyre handler=rail:tarball]) + =| best=(unit [=binding:eyre handler=rail:tarball]) + =/ entries=(list [=binding:eyre handler=rail:tarball]) + ~(tap by bindings) + |- + ?~ entries best + =/ suffix=(unit path) + =+ [prefix=path.binding.i.entries full=site] + |- ^- (unit path) + ?~ prefix `full + ?~ full ~ + ?. =(i.prefix i.full) ~ + $(prefix t.prefix, full t.full) + ?~ suffix + $(entries t.entries) + ?~ best $(best `i.entries, entries t.entries) + ?: (gth (lent path.binding.i.entries) (lent path.binding.u.best)) + $(best `i.entries, entries t.entries) + $(entries t.entries) +:: +++ cull-if-exists + |= dest=lane:tarball + ^+ this + ?> ?=(%& -.dest) + ?~ (~(get ba:tarball ball) p.dest) this + (cull dest) +:: :: Save file state and bump ONLY if content actually changed. :: This is the ONLY correct way to update file state. :: Invariant: file aeon changes iff file content changes. @@ -2303,82 +3482,401 @@ =. this ?^((get-born here) this (init-born here)) :: Only bump if content actually changed =/ old=(unit content:tarball) (~(get ba:tarball ball) here) - =. ball (~(put ba:tarball ball) here new-content) ?: ?& ?=(^ old) - =(cage.u.old cage.new-content) + =(sage.u.old sage.new-content) == + :: same content — write metadata-only update (no bump) + =. ball (~(put ba:tarball ball) here new-content) this + :: content changed — stamp mtime and write + =. new-content + new-content(metadata (~(put by metadata.new-content) 'mtime' (da-oct:tarball now.bowl))) + =. ball (~(put ba:tarball ball) here new-content) :: Record content in silo and hist - =. this (record-hist here cage.new-content ~) - (bump-file here) -:: -++ wrap-wire - |= [here=rail:tarball =wire] - ^+ wire - =/ =sack:nexus (need (get-born here)) - =/ here-path=path (snoc path.here name.here) - ;: weld - /proc/(scot %ud (lent here-path)) - here-path - /(scot %ud ud.life.sack) - wire + =. this (record-hist here sage.new-content ~) + =. this (bump-file here) + :: Rebuild if change is inside a code nexus + =/ cod=(unit path) + =+ pax=path.here + |- ?: (~(has by code) pax) `pax + ?~ pax ~ + $(pax (snip `path`pax)) + =. this + ?~ cod this + ~& >>> "save-file: triggering build-code from {(spud (snoc path.here name.here))}" + (build-code u.cod) + :: Recompute peer weirs if usergroup data changed + ?. ?=([%sys %ames %usergroups *] path.here) + this + ~& >> "save-file: usergroup changed, recomputing peer weirs" + recompute-peer-weirs +:: +:: /sys/ namespace services +:: Grubs interact with vanes through /sys/ namespace pokes. +:: The agent intercepts these pokes, translates them to arvo +:: cards, and routes responses back to the sender. +:: +:: /sys/ service dispatch +:: Intercepts pokes to /sys/ rails before they reach fibers. +:: Returns ~ to fall through to normal poke handling. +:: +++ handle-sys-poke + |= [dest=rail:tarball here=rail:tarball wir=path =sage:tarball] + ^- (unit _this) + ?. ?=([%sys @ *] path.dest) ~ + =/ service=@tas i.t.path.dest + ?+ service ~ + %clay + ?: =([/ %mount-desk] p.sage) + =/ dek=desk !<(desk q.sage) + =. this (handle-clay-mount dek) + `(enqu-take here (sys-give /clay) ~ %pack wir ~) + ?: =([/ %unmount-desk] p.sage) + =/ dek=desk !<(desk q.sage) + =. this (handle-clay-unmount dek) + `(enqu-take here (sys-give /clay) ~ %pack wir ~) + ?: =([/ %new-desk] p.sage) + =/ dek=desk !<(desk q.sage) + =. this (handle-clay-new-desk dek) + `(enqu-take here (sys-give /clay) ~ %pack wir ~) + ?: =([/ %clay-info] p.sage) + =/ [dek=desk changes=(list [path ?([%ins @tas *] [%del ~])])] + !<([desk (list [path ?([%ins @tas *] [%del ~])])] q.sage) + =. this (handle-clay-info dek changes) + `(enqu-take here (sys-give /clay) ~ %pack wir ~) + ~ :: unknown clay poke, fall through + :: + %dill + ?. =([/ %dill-belt] p.sage) ~ + =/ [session=@tas =belt:dill] !<([@tas belt:dill] q.sage) + =. this (emit-card [%pass /dill/belt %arvo %d %shot session %belt belt]) + `(enqu-take here (sys-give /dill) ~ %pack wir ~) + :: + %gall + ?. =([/ %gall-poke] p.sage) ~ + =. this (handle-gall-poke here wir q.sage) + `(enqu-take here (sys-give /gall) ~ %pack wir ~) + :: + %iris + ?. =([/ %http-request] p.sage) ~ + =. this (handle-iris-request here wir q.sage) + `(enqu-take here (sys-give /iris) ~ %pack wir ~) + :: + %scry + ?. =([/ %scry-request] p.sage) ~ + =. this (handle-scry-request here wir q.sage) + `(enqu-take here (sys-give /scry) ~ %pack wir ~) == :: -++ unwrap-wire - |= =wire - ^- [rail:tarball @ud ^wire] - ?> ?=([%proc @ *] wire) - =/ len=@ud (slav %ud i.t.wire) - =/ here-path=path (scag len t.t.wire) - ?> ?=(^ here-path) - =/ here=rail:tarball [(snip `path`here-path) (rear here-path)] - =/ rest=^wire (slag len t.t.wire) +:: /sys/behn/ timer service +:: +++ handle-timer-set + |= [sender=rail:tarball =wire vaz=vase] + ^+ this + =/ req=[=^wire when=@da] !<([^wire @da] vaz) + =/ timer-rail=rail:tarball [/sys/behn %'main.timer-state'] + :: Read current state + =/ old=(unit content:tarball) (~(get ba:tarball ball) timer-rail) + =/ st=timer-state:nexus + ?~ old [%0 ~] + !<(timer-state:nexus q.sage.u.old) + :: Update state + =. timers.st (~(put by timers.st) [sender wire.req] when.req) + =. this (save-file timer-rail [~ [/ %timer-state] !>(st)]) + :: Build behn wire: /behn/timer/{da}/{path-len}/{path...}/{name}/{wire...} + =/ timer-wire=^wire + :- %behn + :- %timer + :- (scot %da when.req) + :- (scot %ud (lent path.sender)) + (weld path.sender [name.sender wire.req]) + (emit-card [%pass timer-wire %arvo %b %wait when.req]) +:: +++ handle-timer-wake + |= [segs=wire error=(unit tang)] + ^+ this + ?^ error + ~& >>> ["%behn: timer error" u.error] + this + :: Decode wire: {da}/{path-len}/{path...}/{name}/{wire...} + ?> ?=(^ segs) + =/ when=@da (slav %da i.segs) + =/ rest=wire t.segs ?> ?=(^ rest) - =/ lif=@ud (slav %ud i.rest) - [here lif t.rest] + =/ path-len=@ud (slav %ud i.rest) + =/ from-path=path (scag path-len t.rest) + =/ rest2=wire (slag path-len t.rest) + ?> ?=(^ rest2) + =/ from-name=@ta i.rest2 + =/ req-wire=wire t.rest2 + =/ sender=rail:tarball [from-path from-name] + :: Remove from state + =/ timer-rail=rail:tarball [/sys/behn %'main.timer-state'] + =/ old=(unit content:tarball) (~(get ba:tarball ball) timer-rail) + =/ st=timer-state:nexus + ?~ old [%0 ~] + !<(timer-state:nexus q.sage.u.old) + =. timers.st (~(del by timers.st) [sender req-wire]) + =. this (save-file timer-rail [~ [/ %timer-state] !>(st)]) + :: Poke sender back with timer-wake + =/ rel=from:fiber:nexus (relativize-from:nexus sender &+timer-rail) + (enqu-take sender (sys-give /behn) ~ %poke rel [[/ %timer-wake] !>(req-wire)]) +:: +:: /sys/clay/ desk sync service +:: +++ handle-clay-mount + |= dek=desk + ^+ this + =/ clay-rail=rail:tarball [/sys/clay %'main.clay-state'] + =/ old=(unit content:tarball) (~(get ba:tarball ball) clay-rail) + =/ st=clay-state:nexus + ?~ old [%0 ~] + !<(clay-state:nexus q.sage.u.old) + =. desks.st (~(put in desks.st) dek) + =. this (save-file clay-rail [~ [/ %clay-state] !>(st)]) + :: Ensure directory exists + =/ old-ball=ball:tarball (~(dip ba:tarball ball) /sys/clay/desks/[dek]) + =/ new-ball=ball:tarball old-ball(fil `(fall fil.old-ball *lump:tarball)) + =. this (load-ball-changes /sys/clay/desks/[dek] old-ball new-ball) + (sync-clay-desk dek) :: -++ take-arvo - |= [wir=wire sign=sign-arvo] +++ handle-clay-unmount + |= dek=desk + ^+ this + ?> !=(dek %grubbery) + ?> !=(dek %base) + =/ clay-rail=rail:tarball [/sys/clay %'main.clay-state'] + =/ old=(unit content:tarball) (~(get ba:tarball ball) clay-rail) + =/ st=clay-state:nexus + ?~ old [%0 ~] + !<(clay-state:nexus q.sage.u.old) + =. desks.st (~(del in desks.st) dek) + =. this (save-file clay-rail [~ [/ %clay-state] !>(st)]) + (unmount-clay-desk dek) +:: +++ handle-clay-new-desk + |= dek=desk ^+ this - =/ [here=rail:tarball lif=@ud =wire] (unwrap-wire wir) - =/ cur=(unit sack:nexus) (get-born here) - ?. ?&(?=(^ cur) =(lif ud.life.u.cur)) this - (enqu-take here (sys-give /arvo) ~ %arvo wire sign) + =/ base-paths=(list path) + :~ /sys/kelvin + /mar/bill/hoon + /mar/hoon/hoon + /mar/mime/hoon + /mar/noun/hoon + /mar/kelvin/hoon + /lib/dbug/hoon + /lib/default-agent/hoon + /lib/verb/hoon + /sur/verb/hoon + == + =/ files=(map path page:clay) + %- ~(gas by *(map path page:clay)) + :- :- /app/[dek]/hoon + :- %hoon + .^(noun %cx (scot %p our.bowl) %base (scot %da now.bowl) /lib/skeleton/hoon) + %+ turn base-paths + |= =path + ^- [^path page:clay] + :- path + :- (rear path) + .^(noun %cx (scot %p our.bowl) %base (scot %da now.bowl) path) + =. this (emit-card [%pass /new-desk %arvo (new-desk:cloy dek ~ files)]) + (emit-card [%pass /desk-bill %arvo %c %info dek %& [/desk/bill %ins bill+!>(~[dek])]~]) +:: +:: /sys/clay/ file write service +:: +++ handle-clay-info + |= [dek=desk changes=(list [path ?([%ins @tas *] [%del ~])])] + ^+ this + =/ mis=(list [path miso:clay]) + %+ turn changes + |= [pax=path change=?([%ins @tas *] [%del ~])] + ^- [path miso:clay] + ?- -.change + %del [pax %del ~] + %ins + [pax %ins +<.change !>(+>.change)] + == + (emit-card [%pass /clay-info %arvo %c %info dek %& mis]) +:: +:: /sys/eyre/ HTTP server service +:: +++ eyre-response-cards + |= [eyre-id=@ta upd=eyre-update:nexus] + ^- (list card) + ?- -.upd + %header + [%give %fact ~[/http-response/[eyre-id]] http-response-header+!>(response-header.upd)]~ + %data + [%give %fact ~[/http-response/[eyre-id]] http-response-data+!>(data.upd)]~ + %kick + [%give %kick ~[/http-response/[eyre-id]] ~]~ + %simple + (give-simple-payload:app:server eyre-id simple-payload.upd) + == :: -++ take-agent - |= [wir=wire =sign:agent:gall] +++ handle-eyre-action + |= [sender=rail:tarball =wire vaz=vase] + ^+ this + =/ act=eyre-action:nexus !<(eyre-action:nexus vaz) + =/ st=server-state:nexus get-server-state + ?- -.act + %bind + =. bindings.st (~(put by bindings.st) binding.act handler.act) + =. this (save-server-state st) + (emit-card [%pass /eyre-bind %arvo %e %connect binding.act dap.bowl]) + :: + %unbind + =/ orphans=(list @ta) + %+ murn ~(tap by conns.st) + |= [eid=@ta =binding:eyre] + ?. =(binding binding.act) ~ + `eid + =. this + %- emit-cards + %+ turn orphans + |= eid=@ta + ^- card + [%give %kick ~[/http-response/[eid]] ~] + =. conns.st + %- ~(gas by *(map @ta binding:eyre)) + %+ skip ~(tap by conns.st) + |= [eid=@ta =binding:eyre] + =(binding binding.act) + =. bindings.st (~(del by bindings.st) binding.act) + (save-server-state st) + :: + %send + =/ crds=(list card) + (eyre-response-cards eyre-id.act eyre-update.act) + =/ conn-binding=(unit binding:eyre) + (~(get by conns.st) eyre-id.act) + ?: ?=(?(%kick %simple) -.eyre-update.act) + ?~ conn-binding + (emit-cards crds) + =. conns.st (~(del by conns.st) eyre-id.act) + =. this (save-server-state st) + (emit-cards crds) + (emit-cards crds) + == +:: +:: /sys/gall/ agent poke service +:: +++ handle-gall-poke + |= [sender=rail:tarball =wire vaz=vase] + ^+ this + =/ [=dock =page] !<([dock page] vaz) + :: Remote pokes: wrap noun as-is, remote gall validates on arrival + :: Local pokes: clam through code nexus marc + =/ =vase + ?. =(our.bowl p.dock) + !>(`*`q.page) + :: Split mark on hyphens (like Clay +segments) to find matching file + =/ dek=desk + .^(desk %gd /(scot %p p.dock)/[q.dock]/(scot %da now.bowl)/$) + =/ segs=(list path) (segments:clay p.page) + =/ marc-res=(unit built:nexus) + |- + ?~ segs ~ + =/ seg=path i.segs + =/ dir=path (snip seg) + =/ nam=@ta (rear seg) + :: Try /mar/clay/[desk]/ then /mar/clay/base/ + =/ res=(unit built:nexus) + (get-built / (weld /mar/clay/[dek] dir) nam) + ?^ res res + =/ res=(unit built:nexus) + (get-built / (weld /mar/clay/base dir) nam) + ?^ res res + $(segs t.segs) + =/ =marc:tarball + ?~ marc-res + ~|([%marc-not-found p.page dek] !!) + ?. ?=(%vase -.u.marc-res) + ~|([%marc-failed p.page dek] !!) + !<(marc:tarball vase.u.marc-res) + (vale:marc q.page) + :: Encode sender in wire: /gall-poke/{path-len}/{path...}/{name}/{wire...} + =/ gall-wire=path + :- %gall-poke + :- (scot %ud (lent path.sender)) + (weld path.sender [name.sender wire]) + (emit-card [%pass gall-wire %agent dock %poke p.page vase]) +:: +++ take-gall-poke + |= [segs=wire =sign:agent:gall] + ^+ this + :: Decode wire: {path-len}/{path...}/{name}/{wire...} + ?> ?=(^ segs) + =/ path-len=@ud (slav %ud i.segs) + =/ from-path=path (scag path-len t.segs) + =/ rest=wire (slag path-len t.segs) + ?> ?=(^ rest) + =/ sender=rail:tarball [from-path i.rest] + =/ req-wire=wire t.rest + :: Route poke-ack back to sender + ?> ?=(%poke-ack -.sign) + =/ ack-sage=sage:tarball [[/ %poke-ack] !>(p.sign)] + =/ rel=from:fiber:nexus (relativize-from:nexus sender &+[/sys/gall %'main.sig']) + (enqu-take sender (sys-give /gall) ~ %poke rel ack-sage) +:: +:: /sys/iris/ HTTP client service +:: +++ handle-iris-request + |= [sender=rail:tarball =wire vaz=vase] + ^+ this + =/ =request:http !<(request:http vaz) + =/ iris-rail=rail:tarball [/sys/iris %'main.iris-state'] + :: Build iris wire: /iris/request/{path-len}/{path...}/{name}/{wire...} + =/ iris-wire=path + :- %iris + :- %request + :- (scot %ud (lent path.sender)) + (weld path.sender [name.sender wire]) + :: Update state + =/ old=(unit content:tarball) (~(get ba:tarball ball) iris-rail) + =/ st=iris-state:nexus + ?~ old [%0 ~] + !<(iris-state:nexus q.sage.u.old) + =. requests.st (~(put by requests.st) iris-wire [sender url.request]) + =. this (save-file iris-rail [~ [/ %iris-state] !>(st)]) + (emit-card [%pass iris-wire %arvo %i %request request *outbound-config:iris]) +:: +++ handle-iris-response + |= [segs=wire =client-response:iris] + ^+ this + :: Decode wire: {path-len}/{path...}/{name}/{wire...} + ?> ?=(^ segs) + =/ path-len=@ud (slav %ud i.segs) + =/ from-path=path (scag path-len t.segs) + =/ rest=wire (slag path-len t.segs) + ?> ?=(^ rest) + =/ from-name=@ta i.rest + =/ req-wire=wire t.rest + =/ sender=rail:tarball [from-path from-name] + :: Remove from state + =/ iris-rail=rail:tarball [/sys/iris %'main.iris-state'] + =/ iris-wire=path [%iris %request segs] + =/ old=(unit content:tarball) (~(get ba:tarball ball) iris-rail) + =/ st=iris-state:nexus + ?~ old [%0 ~] + !<(iris-state:nexus q.sage.u.old) + =. requests.st (~(del by requests.st) iris-wire) + =. this (save-file iris-rail [~ [/ %iris-state] !>(st)]) + :: Poke sender back with http-response + =/ rel=from:fiber:nexus (relativize-from:nexus sender &+iris-rail) + (enqu-take sender (sys-give /iris) ~ %poke rel [[/ %http-response] !>(client-response)]) +:: +:: /sys/scry/ scry service +:: +++ handle-scry-request + |= [sender=rail:tarball =wire vaz=vase] ^+ this - =/ [here=rail:tarball lif=@ud =wire] (unwrap-wire wir) - =/ cur=(unit sack:nexus) (get-born here) - ?. ?&(?=(^ cur) =(lif ud.life.u.cur)) this - (enqu-take here (sys-give /agent) ~ %agent wire sign) -:: Unwrap incoming watch/leave paths -:: -++ unwrap-watch-path - |= pat=path - ^- [rail:tarball path] - ?> ?=([%proc @ *] pat) - =/ len=@ud (slav %ud i.t.pat) - =/ here-path (scag len t.t.pat) - ?> ?=(^ here-path) - =/ here=rail:tarball [(snip `(list @ta)`here-path) (rear here-path)] - [here (slag len t.t.pat)] -:: -++ wrap-watch-path - |= [here=rail:tarball =path] - ^+ path - =/ here-path=^path (snoc path.here name.here) - (weld /proc/(scot %ud (lent here-path)) (weld here-path path)) -:: -++ take-watch - |= pat=path - ^+ this - =/ [here=rail:tarball sub=path] (unwrap-watch-path pat) - (enqu-take here (sys-give /watch) ~ %watch sub) -:: -++ take-leave - |= pat=path - ^+ this - =/ [here=rail:tarball sub=path] (unwrap-watch-path pat) - (enqu-take here (sys-give /leave) ~ %leave sub) + =/ pat=path !<(path vaz) + =/ scry-rail=rail:tarball [/sys/scry %'main.sig'] + ?> ?=([@ @ *] pat) + =/ res=vase + !>(.^(* i.pat (scot %p our.bowl) i.t.pat (scot %da now.bowl) t.t.pat)) + =/ rel=from:fiber:nexus (relativize-from:nexus sender &+scry-rail) + (enqu-take sender (sys-give /scry) ~ %poke rel [[/ %scry-response] res]) -- diff --git a/desk/gub/lib/bech32.hoon b/desk/gub/lib/bech32.hoon new file mode 100644 index 0000000..b6177e2 --- /dev/null +++ b/desk/gub/lib/bech32.hoon @@ -0,0 +1,165 @@ +:: BIP173: Bech32 Addresses +:: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki +:: +:: Heavily copies: +:: https://github.com/bitcoinjs/bech32/blob/master/index.js +:: +/< sur /lib/sur/bitcoin.hoon +/< bcu /lib/bitcoin-utils.hoon +=, sur +=, bcu +|% +++ prefixes + ^- (map network tape) + (my [[%main "bc"] [%testnet "tb"] [%regtest "bcrt"] ~]) +++ charset "qpzry9x8gf2tvdw0s3jn54khce6mua7l" ++$ raw-decoded + $+ b173-raw-decoded + [hrp=tape data=(list @) checksum=(list @)] +:: below is a port of: https://github.com/bitcoinjs/bech32/blob/master/index.js +:: +++ polymod + |= values=(list @) + |^ ^- @ + =/ gen=(list @ux) + ~[0x3b6a.57b2 0x2650.8e6d 0x1ea1.19fa 0x3d42.33dd 0x2a14.62b3] + =/ chk=@ 1 + |- ?~ values chk + =/ top (rsh [0 25] chk) + =. chk + (mix i.values (lsh [0 5] (dis chk 0x1ff.ffff))) + $(values t.values, chk (update-chk chk top gen)) +:: + ++ update-chk + |= [chk=@ top=@ gen=(list @ux)] + =/ is (gulf 0 4) + |- ?~ is chk + ?: =(1 (dis 1 (rsh [0 i.is] top))) + $(is t.is, chk (mix chk (snag i.is gen))) + $(is t.is) + -- +:: +++ expand-hrp + |= hrp=tape + ^- (list @) + =/ front (turn hrp |=(p=@tD (rsh [0 5] p))) + =/ back (turn hrp |=(p=@tD (dis 31 p))) + (zing ~[front ~[0] back]) +:: +++ verify-checksum + |= [hrp=tape data-and-checksum=(list @)] + ^- ? + %- |=(a=@ =(1 a)) + %- polymod + (weld (expand-hrp hrp) data-and-checksum) +:: +++ checksum + |= [hrp=tape data=(list @) tr=?] + ^- (list @) + :: xor 1 with the polymod + :: + =/ xorv=@ + ?. tr + 1 + 0x2bc8.30a3 + =/ pmod=@ + %+ mix xorv + %- polymod + (zing ~[(expand-hrp hrp) data (reap 6 0)]) + %+ turn (gulf 0 5) + |=(i=@ (dis 31 (rsh [0 (mul 5 (sub 5 i))] pmod))) +:: +++ charset-to-value + |= c=@tD + ^- (unit @) + (find ~[c] charset) +++ value-to-charset + |= value=@ + ^- (unit @tD) + ?: (gth value 31) ~ + `(snag value charset) +:: +++ is-valid + |= [bech=tape last-1-pos=@] ^- ? + ?& ?|(=((cass bech) bech) =((cuss bech) bech)) :: to upper or to lower is same as bech + (gte last-1-pos 1) + (lte (add last-1-pos 7) (lent bech)) + (lte (lent bech) 90) + (levy bech |=(c=@tD (gte c 33))) + (levy bech |=(c=@tD (lte c 126))) + == +:: data should be 5bit words +:: +++ encode-raw + |= [hrp=tape tr=? data=(list @)] + ^- cord + =/ combined=(list @) + (weld data (checksum hrp data tr)) + %- crip + (zing ~[hrp "1" (tape (murn combined value-to-charset))]) +++ decode-raw + |= body=cord + ^- (unit raw-decoded) + =/ bech (cass (trip body)) :: to lowercase + =/ pos (flop (fand "1" bech)) + ?~ pos ~ + =/ last-1=@ i.pos + ?. (is-valid bech last-1) :: check bech32 validity (not segwit validity or checksum) + ~ + =/ hrp (scag last-1 bech) + =/ encoded-data-and-checksum=(list @) + (slag +(last-1) bech) + =/ data-and-checksum=(list @) + %+ murn encoded-data-and-checksum + charset-to-value + ?. =((lent encoded-data-and-checksum) (lent data-and-checksum)) :: ensure all were in CHARSET + ~ + ?. (verify-checksum hrp data-and-checksum) + ~ + =/ checksum-pos (sub (lent data-and-checksum) 6) + `[hrp (scag checksum-pos data-and-checksum) (slag checksum-pos data-and-checksum)] +:: +from-address: BIP173 bech32 address encoding to hex +:: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki +:: expects to drop a leading 5-bit 0 (the witness version) +:: +++ from-address + |= body=cord + ^- hexb + ~| "Invalid bech32 address" + =/ d=(unit raw-decoded) (decode-raw body) + ?> ?=(^ d) + =/ bs=bits (from-atoms:bit 5 data.u.d) + =/ byt-len=@ (div (sub wid.bs 5) 8) + ?> =(5^0b0 (take:bit 5 bs)) + ?> ?| =(20 byt-len) + =(32 byt-len) + == + [byt-len `@ux`dat:(take:bit (mul 8 byt-len) (drop:bit 5 bs))] +:: pubkey is the 33 byte ECC compressed public key +:: +++ encode-pubkey + |= [=network pubkey=byts] + ^- (unit cord) + ?. =(33 wid.pubkey) + ~|('pubkey must be a 33 byte ECC compressed public key' !!) + =/ prefix (~(get by prefixes) network) + ?~ prefix ~ + :- ~ + %^ encode-raw + u.prefix + %.n + [0v0 (to-atoms:bit 5 [160 `@ub`dat:(hash-160 pubkey)])] +:: +++ encode-taproot + |= [=network pubkey=byts] + ^- (unit cord) + ?. =(32 wid.pubkey) + ~|('scriptpubkey must be 32 byte x-only pubkey' !!) + =/ prefix (~(get by prefixes) network) + ?~ prefix ~ + :- ~ + %^ encode-raw + u.prefix + %.y + [0v1 (to-atoms:bit 5 [256 `@ub`dat.pubkey])] +-- diff --git a/desk/gub/lib/bip/b173.hoon b/desk/gub/lib/bip/b173.hoon new file mode 100644 index 0000000..f321ef2 --- /dev/null +++ b/desk/gub/lib/bip/b173.hoon @@ -0,0 +1,167 @@ +:: BIP173: Bech32 Addresses +:: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki +:: +:: Heavily copies: +:: https://github.com/bitcoinjs/bech32/blob/master/index.js +:: +:: Ported from groundwire's lib/bip/b173.hoon. +:: +/< sur /lib/sur/bitcoin.hoon +/< bcu /lib/bitcoin-utils.hoon +=, sur +=, bcu +|% +++ prefixes + ^- (map network tape) + (my [[%main "bc"] [%testnet "tb"] [%regtest "bcrt"] ~]) +++ charset "qpzry9x8gf2tvdw0s3jn54khce6mua7l" ++$ raw-decoded + $+ b173-raw-decoded + [hrp=tape data=(list @) checksum=(list @)] +:: below is a port of: https://github.com/bitcoinjs/bech32/blob/master/index.js +:: +++ polymod + |= values=(list @) + |^ ^- @ + =/ gen=(list @ux) + ~[0x3b6a.57b2 0x2650.8e6d 0x1ea1.19fa 0x3d42.33dd 0x2a14.62b3] + =/ chk=@ 1 + |- ?~ values chk + =/ top (rsh [0 25] chk) + =. chk + (mix i.values (lsh [0 5] (dis chk 0x1ff.ffff))) + $(values t.values, chk (update-chk chk top gen)) +:: + ++ update-chk + |= [chk=@ top=@ gen=(list @ux)] + =/ is (gulf 0 4) + |- ?~ is chk + ?: =(1 (dis 1 (rsh [0 i.is] top))) + $(is t.is, chk (mix chk (snag i.is gen))) + $(is t.is) + -- +:: +++ expand-hrp + |= hrp=tape + ^- (list @) + =/ front (turn hrp |=(p=@tD (rsh [0 5] p))) + =/ back (turn hrp |=(p=@tD (dis 31 p))) + (zing ~[front ~[0] back]) +:: +++ verify-checksum + |= [hrp=tape data-and-checksum=(list @)] + ^- ? + %- |=(a=@ =(1 a)) + %- polymod + (weld (expand-hrp hrp) data-and-checksum) +:: +++ checksum + |= [hrp=tape data=(list @) tr=?] + ^- (list @) + :: xor 1 with the polymod + :: + =/ xorv=@ + ?. tr + 1 + 0x2bc8.30a3 + =/ pmod=@ + %+ mix xorv + %- polymod + (zing ~[(expand-hrp hrp) data (reap 6 0)]) + %+ turn (gulf 0 5) + |=(i=@ (dis 31 (rsh [0 (mul 5 (sub 5 i))] pmod))) +:: +++ charset-to-value + |= c=@tD + ^- (unit @) + (find ~[c] charset) +++ value-to-charset + |= value=@ + ^- (unit @tD) + ?: (gth value 31) ~ + `(snag value charset) +:: +++ is-valid + |= [bech=tape last-1-pos=@] ^- ? + ?& ?|(=((cass bech) bech) =((cuss bech) bech)) :: to upper or to lower is same as bech + (gte last-1-pos 1) + (lte (add last-1-pos 7) (lent bech)) + (lte (lent bech) 90) + (levy bech |=(c=@tD (gte c 33))) + (levy bech |=(c=@tD (lte c 126))) + == +:: data should be 5bit words +:: +++ encode-raw + |= [hrp=tape tr=? data=(list @)] + ^- cord + =/ combined=(list @) + (weld data (checksum hrp data tr)) + %- crip + (zing ~[hrp "1" (tape (murn combined value-to-charset))]) +++ decode-raw + |= body=cord + ^- (unit raw-decoded) + =/ bech (cass (trip body)) :: to lowercase + =/ pos (flop (fand "1" bech)) + ?~ pos ~ + =/ last-1=@ i.pos + ?. (is-valid bech last-1) :: check bech32 validity (not segwit validity or checksum) + ~ + =/ hrp (scag last-1 bech) + =/ encoded-data-and-checksum=(list @) + (slag +(last-1) bech) + =/ data-and-checksum=(list @) + %+ murn encoded-data-and-checksum + charset-to-value + ?. =((lent encoded-data-and-checksum) (lent data-and-checksum)) :: ensure all were in CHARSET + ~ + ?. (verify-checksum hrp data-and-checksum) + ~ + =/ checksum-pos (sub (lent data-and-checksum) 6) + `[hrp (scag checksum-pos data-and-checksum) (slag checksum-pos data-and-checksum)] +:: +from-address: BIP173 bech32 address encoding to hex +:: https://github.com/bitcoin/bips/blob/master/bip-0173.mediawiki +:: expects to drop a leading 5-bit 0 (the witness version) +:: +++ from-address + |= body=cord + ^- hexb + ~| "Invalid bech32 address" + =/ d=(unit raw-decoded) (decode-raw body) + ?> ?=(^ d) + =/ bs=bits (from-atoms:bit 5 data.u.d) + =/ byt-len=@ (div (sub wid.bs 5) 8) + ?> =(5^0b0 (take:bit 5 bs)) + ?> ?| =(20 byt-len) + =(32 byt-len) + == + [byt-len `@ux`dat:(take:bit (mul 8 byt-len) (drop:bit 5 bs))] +:: pubkey is the 33 byte ECC compressed public key +:: +++ encode-pubkey + |= [=network pubkey=byts] + ^- (unit cord) + ?. =(33 wid.pubkey) + ~|('pubkey must be a 33 byte ECC compressed public key' !!) + =/ prefix (~(get by prefixes) network) + ?~ prefix ~ + :- ~ + %^ encode-raw + u.prefix + %.n + [0v0 (to-atoms:bit 5 [160 `@ub`dat:(hash-160 pubkey)])] +:: +++ encode-taproot + |= [=network pubkey=byts] + ^- (unit cord) + ?. =(32 wid.pubkey) + ~|('scriptpubkey must be 32 byte x-only pubkey' !!) + =/ prefix (~(get by prefixes) network) + ?~ prefix ~ + :- ~ + %^ encode-raw + u.prefix + %.y + [0v1 (to-atoms:bit 5 [256 `@ub`dat.pubkey])] +-- diff --git a/desk/gub/lib/bip32.hoon b/desk/gub/lib/bip32.hoon new file mode 100644 index 0000000..49331cb --- /dev/null +++ b/desk/gub/lib/bip32.hoon @@ -0,0 +1,230 @@ +:: bip32 implementation in hoon +:: +:: to use, call one of the core initialization arms. +:: using the produced core, derive as needed and take out the data you want. +:: +=, hmac:crypto +=, secp:crypto +=+ ecc=secp256k1 +:: prv: private key +:: pub: public key +:: cad: chain code +:: dep: depth in chain +:: ind: index at depth +:: pif: parent fingerprint (4 bytes) +:: +|_ [prv=@ pub=point.ecc cad=@ dep=@ud ind=@ud pif=@] ++* this . +:: elliptic curve operations and values +:: +++ point priv-to-pub.ecc +++ ser-p compress-point.ecc +++ n n:t.ecc +:: core initialization +:: +++ from-seed + |= byts + ^+ this + =+ der=(hmac-sha512l [12 'dees nioctiB'] [wid dat]) + =+ pri=(cut 3 [32 32] der) + this(prv pri, pub (point pri), cad (cut 3 [0 32] der)) +:: +++ from-private + |= [key=@ cai=@] + ^+ this + this(prv key, pub (point key), cad cai) +:: +++ from-public + |= [key=@ cai=@] + ^+ this + this(pub (decompress-point.ecc key), cad cai) +:: +++ from-public-point + |= [pon=point.ecc cai=@] + ^+ this + this(pub pon, cad cai) +:: +++ from-extended + |= t=tape + ^+ this + =+ x=(de-base58check 4 t) + => |% + ++ take + |= b=@ud + ^- [v=@ x=@] + :- (end [3 b] x) + (rsh [3 b] x) + -- + =^ k x (take 33) + =^ c x (take 32) + =^ i x (take 4) + =^ p x (take 4) + =^ d x (take 1) + ?> =(0 x) :: sanity check + %. [d i p] + =< set-metadata + =+ v=(swag [1 3] t) + ?: =("prv" v) (from-private k c) + ?: =("pub" v) (from-public k c) + !! +:: +++ set-metadata + |= [d=@ud i=@ud p=@] + ^+ this + this(dep d, ind i, pif p) +:: derivation +:: +++ derivation-path + ;~ pfix + ;~(pose (jest 'm/') (easy ~)) + %+ most fas + ;~ pose + %+ cook + |=(i=@ (add i (bex 31))) + ;~(sfix dem soq) + dem + == + == +:: +++ derive-path + |= t=tape + ^+ this + %- derive-sequence + (scan t derivation-path) +:: +++ derive-sequence + |= j=(list @u) + ^+ this + ?~ j this + =. this (derive i.j) + $(j t.j) +:: +++ derive + ^- $-(@u _this) + ?: =(0 prv) + derive-public + derive-private +:: +++ derive-private + |= i=@u + ^+ this + ?: =(0 prv) + ~| %know-no-private-key + !! + =/ [left=@ right=@] + =- [(cut 3 [32 32] -) (cut 3 [0 32] -)] + %+ hmac-sha512l [32 cad] + :- 37 + ?: (gte i (bex 31)) + (can 3 ~[4^i 32^prv 1^0]) + (can 3 ~[4^i 33^(ser-p (point prv))]) + =+ key=(mod (add left prv) n) + ?: |(=(0 key) (gte left n)) $(i +(i)) + %= this + prv key + pub (point key) + cad right + dep +(dep) + ind i + pif fingerprint + == +:: +++ derive-public + |= i=@u + ^+ this + ?: (gte i (bex 31)) + ~| %cant-derive-hardened-public-key + !! + =/ [left=@ right=@] + =- [(cut 3 [32 32] -) (cut 3 [0 32] -)] + %+ hmac-sha512l [32 cad] + 37^(can 3 ~[4^i 33^(ser-p pub)]) + ?: (gte left n) $(i +(i)) + %= this + pub (add-points.ecc (point left) pub) + cad right + dep +(dep) + ind i + pif fingerprint + == +:: rendering +:: +++ private-key `@`?.(=(0 prv) prv ~|(%know-no-private-key !!)) +++ public-key `@`(ser-p pub) +++ chain-code `@`cad +++ private-chain `[@ @]`[private-key cad] +++ public-chain `[@ @]`[public-key cad] +:: +++ identity `@`(hash160 public-key) +++ fingerprint `@`(cut 3 [16 4] identity) +:: +++ prv-extended + |= network=?(%main %regtest %testnet) + ^- tape + %+ en-b58c-bip32 + (version-bytes network %prv %.y) + (build-extended private-key) +:: +++ pub-extended + |= network=?(%main %regtest %testnet) + ^- tape + %+ en-b58c-bip32 + (version-bytes network %pub %.y) + (build-extended public-key) +:: +++ build-extended + |= key=@ + ^- @ + %+ can 3 + :~ 33^key + 32^cad + 4^ind + 4^pif + 1^dep + == +:: +++ en-b58c-bip32 + |= [v=@ k=@] + ^- tape + %- en-base58:mimes:html + (en-base58check [4 v] [74 k]) +:: base58check +:: +++ en-base58check + |= [v=byts d=byts] + ^- @ + =/ [=step p=@] [(add wid.v wid.d) (can 3 ~[d v])] + =/ chk=@ (rsh [3 28] (sha-256l:sha 32 (sha-256l:sha step^p))) + (can 3 ~[4^chk step^p]) +:: +++ de-base58check + |= [vw=@u t=tape] + ^- @ + =/ x=@ (de-base58:mimes:html t) + =/ hash=@ (sha-256l:sha 32 (sha-256:sha (rsh [3 4] x))) + ?> =((end [3 4] x) (rsh [3 28] hash)) + (cut 3 [vw (sub (met 3 x) (add 4 vw))] x) +:: +++ hash160 + |= d=@ + ^- @ + (ripemd-160:ripemd:crypto 32 (sha-256:sha d)) +:: +++ version-bytes + |= [network=?(%main %regtest %testnet) type=?(%pub %prv) bip32=?] + ^- @ux + ?+ [network type bip32] !! + [%main %pub %.n] 0x0 + [%main %pub %.y] 0x488.b21e + [%main %prv %.n] 0x80 + [%main %prv %.y] 0x488.ade4 + [%regtest %pub %.n] 0x6f + [%regtest %pub %.y] 0x435.87cf + [%regtest %prv %.n] 0xef + [%regtest %prv %.y] 0x435.8394 + [%testnet %pub %.n] 0x6f + [%testnet %pub %.y] 0x435.87cf + [%testnet %prv %.n] 0xef + [%testnet %prv %.y] 0x435.8394 + == +-- diff --git a/desk/gub/lib/bip39-english.hoon b/desk/gub/lib/bip39-english.hoon new file mode 100644 index 0000000..60de893 --- /dev/null +++ b/desk/gub/lib/bip39-english.hoon @@ -0,0 +1,2052 @@ +:: english wordlist for use in bip39 +^- (list tape) +:~ + "abandon" + "ability" + "able" + "about" + "above" + "absent" + "absorb" + "abstract" + "absurd" + "abuse" + "access" + "accident" + "account" + "accuse" + "achieve" + "acid" + "acoustic" + "acquire" + "across" + "act" + "action" + "actor" + "actress" + "actual" + "adapt" + "add" + "addict" + "address" + "adjust" + "admit" + "adult" + "advance" + "advice" + "aerobic" + "affair" + "afford" + "afraid" + "again" + "age" + "agent" + "agree" + "ahead" + "aim" + "air" + "airport" + "aisle" + "alarm" + "album" + "alcohol" + "alert" + "alien" + "all" + "alley" + "allow" + "almost" + "alone" + "alpha" + "already" + "also" + "alter" + "always" + "amateur" + "amazing" + "among" + "amount" + "amused" + "analyst" + "anchor" + "ancient" + "anger" + "angle" + "angry" + "animal" + "ankle" + "announce" + "annual" + "another" + "answer" + "antenna" + "antique" + "anxiety" + "any" + "apart" + "apology" + "appear" + "apple" + "approve" + "april" + "arch" + "arctic" + "area" + "arena" + "argue" + "arm" + "armed" + "armor" + "army" + "around" + "arrange" + "arrest" + "arrive" + "arrow" + "art" + "artefact" + "artist" + "artwork" + "ask" + "aspect" + "assault" + "asset" + "assist" + "assume" + "asthma" + "athlete" + "atom" + "attack" + "attend" + "attitude" + "attract" + "auction" + "audit" + "august" + "aunt" + "author" + "auto" + "autumn" + "average" + "avocado" + "avoid" + "awake" + "aware" + "away" + "awesome" + "awful" + "awkward" + "axis" + "baby" + "bachelor" + "bacon" + "badge" + "bag" + "balance" + "balcony" + "ball" + "bamboo" + "banana" + "banner" + "bar" + "barely" + "bargain" + "barrel" + "base" + "basic" + "basket" + "battle" + "beach" + "bean" + "beauty" + "because" + "become" + "beef" + "before" + "begin" + "behave" + "behind" + "believe" + "below" + "belt" + "bench" + "benefit" + "best" + "betray" + "better" + "between" + "beyond" + "bicycle" + "bid" + "bike" + "bind" + "biology" + "bird" + "birth" + "bitter" + "black" + "blade" + "blame" + "blanket" + "blast" + "bleak" + "bless" + "blind" + "blood" + "blossom" + "blouse" + "blue" + "blur" + "blush" + "board" + "boat" + "body" + "boil" + "bomb" + "bone" + "bonus" + "book" + "boost" + "border" + "boring" + "borrow" + "boss" + "bottom" + "bounce" + "box" + "boy" + "bracket" + "brain" + "brand" + "brass" + "brave" + "bread" + "breeze" + "brick" + "bridge" + "brief" + "bright" + "bring" + "brisk" + "broccoli" + "broken" + "bronze" + "broom" + "brother" + "brown" + "brush" + "bubble" + "buddy" + "budget" + "buffalo" + "build" + "bulb" + "bulk" + "bullet" + "bundle" + "bunker" + "burden" + "burger" + "burst" + "bus" + "business" + "busy" + "butter" + "buyer" + "buzz" + "cabbage" + "cabin" + "cable" + "cactus" + "cage" + "cake" + "call" + "calm" + "camera" + "camp" + "can" + "canal" + "cancel" + "candy" + "cannon" + "canoe" + "canvas" + "canyon" + "capable" + "capital" + "captain" + "car" + "carbon" + "card" + "cargo" + "carpet" + "carry" + "cart" + "case" + "cash" + "casino" + "castle" + "casual" + "cat" + "catalog" + "catch" + "category" + "cattle" + "caught" + "cause" + "caution" + "cave" + "ceiling" + "celery" + "cement" + "census" + "century" + "cereal" + "certain" + "chair" + "chalk" + "champion" + "change" + "chaos" + "chapter" + "charge" + "chase" + "chat" + "cheap" + "check" + "cheese" + "chef" + "cherry" + "chest" + "chicken" + "chief" + "child" + "chimney" + "choice" + "choose" + "chronic" + "chuckle" + "chunk" + "churn" + "cigar" + "cinnamon" + "circle" + "citizen" + "city" + "civil" + "claim" + "clap" + "clarify" + "claw" + "clay" + "clean" + "clerk" + "clever" + "click" + "client" + "cliff" + "climb" + "clinic" + "clip" + "clock" + "clog" + "close" + "cloth" + "cloud" + "clown" + "club" + "clump" + "cluster" + "clutch" + "coach" + "coast" + "coconut" + "code" + "coffee" + "coil" + "coin" + "collect" + "color" + "column" + "combine" + "come" + "comfort" + "comic" + "common" + "company" + "concert" + "conduct" + "confirm" + "congress" + "connect" + "consider" + "control" + "convince" + "cook" + "cool" + "copper" + "copy" + "coral" + "core" + "corn" + "correct" + "cost" + "cotton" + "couch" + "country" + "couple" + "course" + "cousin" + "cover" + "coyote" + "crack" + "cradle" + "craft" + "cram" + "crane" + "crash" + "crater" + "crawl" + "crazy" + "cream" + "credit" + "creek" + "crew" + "cricket" + "crime" + "crisp" + "critic" + "crop" + "cross" + "crouch" + "crowd" + "crucial" + "cruel" + "cruise" + "crumble" + "crunch" + "crush" + "cry" + "crystal" + "cube" + "culture" + "cup" + "cupboard" + "curious" + "current" + "curtain" + "curve" + "cushion" + "custom" + "cute" + "cycle" + "dad" + "damage" + "damp" + "dance" + "danger" + "daring" + "dash" + "daughter" + "dawn" + "day" + "deal" + "debate" + "debris" + "decade" + "december" + "decide" + "decline" + "decorate" + "decrease" + "deer" + "defense" + "define" + "defy" + "degree" + "delay" + "deliver" + "demand" + "demise" + "denial" + "dentist" + "deny" + "depart" + "depend" + "deposit" + "depth" + "deputy" + "derive" + "describe" + "desert" + "design" + "desk" + "despair" + "destroy" + "detail" + "detect" + "develop" + "device" + "devote" + "diagram" + "dial" + "diamond" + "diary" + "dice" + "diesel" + "diet" + "differ" + "digital" + "dignity" + "dilemma" + "dinner" + "dinosaur" + "direct" + "dirt" + "disagree" + "discover" + "disease" + "dish" + "dismiss" + "disorder" + "display" + "distance" + "divert" + "divide" + "divorce" + "dizzy" + "doctor" + "document" + "dog" + "doll" + "dolphin" + "domain" + "donate" + "donkey" + "donor" + "door" + "dose" + "double" + "dove" + "draft" + "dragon" + "drama" + "drastic" + "draw" + "dream" + "dress" + "drift" + "drill" + "drink" + "drip" + "drive" + "drop" + "drum" + "dry" + "duck" + "dumb" + "dune" + "during" + "dust" + "dutch" + "duty" + "dwarf" + "dynamic" + "eager" + "eagle" + "early" + "earn" + "earth" + "easily" + "east" + "easy" + "echo" + "ecology" + "economy" + "edge" + "edit" + "educate" + "effort" + "egg" + "eight" + "either" + "elbow" + "elder" + "electric" + "elegant" + "element" + "elephant" + "elevator" + "elite" + "else" + "embark" + "embody" + "embrace" + "emerge" + "emotion" + "employ" + "empower" + "empty" + "enable" + "enact" + "end" + "endless" + "endorse" + "enemy" + "energy" + "enforce" + "engage" + "engine" + "enhance" + "enjoy" + "enlist" + "enough" + "enrich" + "enroll" + "ensure" + "enter" + "entire" + "entry" + "envelope" + "episode" + "equal" + "equip" + "era" + "erase" + "erode" + "erosion" + "error" + "erupt" + "escape" + "essay" + "essence" + "estate" + "eternal" + "ethics" + "evidence" + "evil" + "evoke" + "evolve" + "exact" + "example" + "excess" + "exchange" + "excite" + "exclude" + "excuse" + "execute" + "exercise" + "exhaust" + "exhibit" + "exile" + "exist" + "exit" + "exotic" + "expand" + "expect" + "expire" + "explain" + "expose" + "express" + "extend" + "extra" + "eye" + "eyebrow" + "fabric" + "face" + "faculty" + "fade" + "faint" + "faith" + "fall" + "false" + "fame" + "family" + "famous" + "fan" + "fancy" + "fantasy" + "farm" + "fashion" + "fat" + "fatal" + "father" + "fatigue" + "fault" + "favorite" + "feature" + "february" + "federal" + "fee" + "feed" + "feel" + "female" + "fence" + "festival" + "fetch" + "fever" + "few" + "fiber" + "fiction" + "field" + "figure" + "file" + "film" + "filter" + "final" + "find" + "fine" + "finger" + "finish" + "fire" + "firm" + "first" + "fiscal" + "fish" + "fit" + "fitness" + "fix" + "flag" + "flame" + "flash" + "flat" + "flavor" + "flee" + "flight" + "flip" + "float" + "flock" + "floor" + "flower" + "fluid" + "flush" + "fly" + "foam" + "focus" + "fog" + "foil" + "fold" + "follow" + "food" + "foot" + "force" + "forest" + "forget" + "fork" + "fortune" + "forum" + "forward" + "fossil" + "foster" + "found" + "fox" + "fragile" + "frame" + "frequent" + "fresh" + "friend" + "fringe" + "frog" + "front" + "frost" + "frown" + "frozen" + "fruit" + "fuel" + "fun" + "funny" + "furnace" + "fury" + "future" + "gadget" + "gain" + "galaxy" + "gallery" + "game" + "gap" + "garage" + "garbage" + "garden" + "garlic" + "garment" + "gas" + "gasp" + "gate" + "gather" + "gauge" + "gaze" + "general" + "genius" + "genre" + "gentle" + "genuine" + "gesture" + "ghost" + "giant" + "gift" + "giggle" + "ginger" + "giraffe" + "girl" + "give" + "glad" + "glance" + "glare" + "glass" + "glide" + "glimpse" + "globe" + "gloom" + "glory" + "glove" + "glow" + "glue" + "goat" + "goddess" + "gold" + "good" + "goose" + "gorilla" + "gospel" + "gossip" + "govern" + "gown" + "grab" + "grace" + "grain" + "grant" + "grape" + "grass" + "gravity" + "great" + "green" + "grid" + "grief" + "grit" + "grocery" + "group" + "grow" + "grunt" + "guard" + "guess" + "guide" + "guilt" + "guitar" + "gun" + "gym" + "habit" + "hair" + "half" + "hammer" + "hamster" + "hand" + "happy" + "harbor" + "hard" + "harsh" + "harvest" + "hat" + "have" + "hawk" + "hazard" + "head" + "health" + "heart" + "heavy" + "hedgehog" + "height" + "hello" + "helmet" + "help" + "hen" + "hero" + "hidden" + "high" + "hill" + "hint" + "hip" + "hire" + "history" + "hobby" + "hockey" + "hold" + "hole" + "holiday" + "hollow" + "home" + "honey" + "hood" + "hope" + "horn" + "horror" + "horse" + "hospital" + "host" + "hotel" + "hour" + "hover" + "hub" + "huge" + "human" + "humble" + "humor" + "hundred" + "hungry" + "hunt" + "hurdle" + "hurry" + "hurt" + "husband" + "hybrid" + "ice" + "icon" + "idea" + "identify" + "idle" + "ignore" + "ill" + "illegal" + "illness" + "image" + "imitate" + "immense" + "immune" + "impact" + "impose" + "improve" + "impulse" + "inch" + "include" + "income" + "increase" + "index" + "indicate" + "indoor" + "industry" + "infant" + "inflict" + "inform" + "inhale" + "inherit" + "initial" + "inject" + "injury" + "inmate" + "inner" + "innocent" + "input" + "inquiry" + "insane" + "insect" + "inside" + "inspire" + "install" + "intact" + "interest" + "into" + "invest" + "invite" + "involve" + "iron" + "island" + "isolate" + "issue" + "item" + "ivory" + "jacket" + "jaguar" + "jar" + "jazz" + "jealous" + "jeans" + "jelly" + "jewel" + "job" + "join" + "joke" + "journey" + "joy" + "judge" + "juice" + "jump" + "jungle" + "junior" + "junk" + "just" + "kangaroo" + "keen" + "keep" + "ketchup" + "key" + "kick" + "kid" + "kidney" + "kind" + "kingdom" + "kiss" + "kit" + "kitchen" + "kite" + "kitten" + "kiwi" + "knee" + "knife" + "knock" + "know" + "lab" + "label" + "labor" + "ladder" + "lady" + "lake" + "lamp" + "language" + "laptop" + "large" + "later" + "latin" + "laugh" + "laundry" + "lava" + "law" + "lawn" + "lawsuit" + "layer" + "lazy" + "leader" + "leaf" + "learn" + "leave" + "lecture" + "left" + "leg" + "legal" + "legend" + "leisure" + "lemon" + "lend" + "length" + "lens" + "leopard" + "lesson" + "letter" + "level" + "liar" + "liberty" + "library" + "license" + "life" + "lift" + "light" + "like" + "limb" + "limit" + "link" + "lion" + "liquid" + "list" + "little" + "live" + "lizard" + "load" + "loan" + "lobster" + "local" + "lock" + "logic" + "lonely" + "long" + "loop" + "lottery" + "loud" + "lounge" + "love" + "loyal" + "lucky" + "luggage" + "lumber" + "lunar" + "lunch" + "luxury" + "lyrics" + "machine" + "mad" + "magic" + "magnet" + "maid" + "mail" + "main" + "major" + "make" + "mammal" + "man" + "manage" + "mandate" + "mango" + "mansion" + "manual" + "maple" + "marble" + "march" + "margin" + "marine" + "market" + "marriage" + "mask" + "mass" + "master" + "match" + "material" + "math" + "matrix" + "matter" + "maximum" + "maze" + "meadow" + "mean" + "measure" + "meat" + "mechanic" + "medal" + "media" + "melody" + "melt" + "member" + "memory" + "mention" + "menu" + "mercy" + "merge" + "merit" + "merry" + "mesh" + "message" + "metal" + "method" + "middle" + "midnight" + "milk" + "million" + "mimic" + "mind" + "minimum" + "minor" + "minute" + "miracle" + "mirror" + "misery" + "miss" + "mistake" + "mix" + "mixed" + "mixture" + "mobile" + "model" + "modify" + "mom" + "moment" + "monitor" + "monkey" + "monster" + "month" + "moon" + "moral" + "more" + "morning" + "mosquito" + "mother" + "motion" + "motor" + "mountain" + "mouse" + "move" + "movie" + "much" + "muffin" + "mule" + "multiply" + "muscle" + "museum" + "mushroom" + "music" + "must" + "mutual" + "myself" + "mystery" + "myth" + "naive" + "name" + "napkin" + "narrow" + "nasty" + "nation" + "nature" + "near" + "neck" + "need" + "negative" + "neglect" + "neither" + "nephew" + "nerve" + "nest" + "net" + "network" + "neutral" + "never" + "news" + "next" + "nice" + "night" + "noble" + "noise" + "nominee" + "noodle" + "normal" + "north" + "nose" + "notable" + "note" + "nothing" + "notice" + "novel" + "now" + "nuclear" + "number" + "nurse" + "nut" + "oak" + "obey" + "object" + "oblige" + "obscure" + "observe" + "obtain" + "obvious" + "occur" + "ocean" + "october" + "odor" + "off" + "offer" + "office" + "often" + "oil" + "okay" + "old" + "olive" + "olympic" + "omit" + "once" + "one" + "onion" + "online" + "only" + "open" + "opera" + "opinion" + "oppose" + "option" + "orange" + "orbit" + "orchard" + "order" + "ordinary" + "organ" + "orient" + "original" + "orphan" + "ostrich" + "other" + "outdoor" + "outer" + "output" + "outside" + "oval" + "oven" + "over" + "own" + "owner" + "oxygen" + "oyster" + "ozone" + "pact" + "paddle" + "page" + "pair" + "palace" + "palm" + "panda" + "panel" + "panic" + "panther" + "paper" + "parade" + "parent" + "park" + "parrot" + "party" + "pass" + "patch" + "path" + "patient" + "patrol" + "pattern" + "pause" + "pave" + "payment" + "peace" + "peanut" + "pear" + "peasant" + "pelican" + "pen" + "penalty" + "pencil" + "people" + "pepper" + "perfect" + "permit" + "person" + "pet" + "phone" + "photo" + "phrase" + "physical" + "piano" + "picnic" + "picture" + "piece" + "pig" + "pigeon" + "pill" + "pilot" + "pink" + "pioneer" + "pipe" + "pistol" + "pitch" + "pizza" + "place" + "planet" + "plastic" + "plate" + "play" + "please" + "pledge" + "pluck" + "plug" + "plunge" + "poem" + "poet" + "point" + "polar" + "pole" + "police" + "pond" + "pony" + "pool" + "popular" + "portion" + "position" + "possible" + "post" + "potato" + "pottery" + "poverty" + "powder" + "power" + "practice" + "praise" + "predict" + "prefer" + "prepare" + "present" + "pretty" + "prevent" + "price" + "pride" + "primary" + "print" + "priority" + "prison" + "private" + "prize" + "problem" + "process" + "produce" + "profit" + "program" + "project" + "promote" + "proof" + "property" + "prosper" + "protect" + "proud" + "provide" + "public" + "pudding" + "pull" + "pulp" + "pulse" + "pumpkin" + "punch" + "pupil" + "puppy" + "purchase" + "purity" + "purpose" + "purse" + "push" + "put" + "puzzle" + "pyramid" + "quality" + "quantum" + "quarter" + "question" + "quick" + "quit" + "quiz" + "quote" + "rabbit" + "raccoon" + "race" + "rack" + "radar" + "radio" + "rail" + "rain" + "raise" + "rally" + "ramp" + "ranch" + "random" + "range" + "rapid" + "rare" + "rate" + "rather" + "raven" + "raw" + "razor" + "ready" + "real" + "reason" + "rebel" + "rebuild" + "recall" + "receive" + "recipe" + "record" + "recycle" + "reduce" + "reflect" + "reform" + "refuse" + "region" + "regret" + "regular" + "reject" + "relax" + "release" + "relief" + "rely" + "remain" + "remember" + "remind" + "remove" + "render" + "renew" + "rent" + "reopen" + "repair" + "repeat" + "replace" + "report" + "require" + "rescue" + "resemble" + "resist" + "resource" + "response" + "result" + "retire" + "retreat" + "return" + "reunion" + "reveal" + "review" + "reward" + "rhythm" + "rib" + "ribbon" + "rice" + "rich" + "ride" + "ridge" + "rifle" + "right" + "rigid" + "ring" + "riot" + "ripple" + "risk" + "ritual" + "rival" + "river" + "road" + "roast" + "robot" + "robust" + "rocket" + "romance" + "roof" + "rookie" + "room" + "rose" + "rotate" + "rough" + "round" + "route" + "royal" + "rubber" + "rude" + "rug" + "rule" + "run" + "runway" + "rural" + "sad" + "saddle" + "sadness" + "safe" + "sail" + "salad" + "salmon" + "salon" + "salt" + "salute" + "same" + "sample" + "sand" + "satisfy" + "satoshi" + "sauce" + "sausage" + "save" + "say" + "scale" + "scan" + "scare" + "scatter" + "scene" + "scheme" + "school" + "science" + "scissors" + "scorpion" + "scout" + "scrap" + "screen" + "script" + "scrub" + "sea" + "search" + "season" + "seat" + "second" + "secret" + "section" + "security" + "seed" + "seek" + "segment" + "select" + "sell" + "seminar" + "senior" + "sense" + "sentence" + "series" + "service" + "session" + "settle" + "setup" + "seven" + "shadow" + "shaft" + "shallow" + "share" + "shed" + "shell" + "sheriff" + "shield" + "shift" + "shine" + "ship" + "shiver" + "shock" + "shoe" + "shoot" + "shop" + "short" + "shoulder" + "shove" + "shrimp" + "shrug" + "shuffle" + "shy" + "sibling" + "sick" + "side" + "siege" + "sight" + "sign" + "silent" + "silk" + "silly" + "silver" + "similar" + "simple" + "since" + "sing" + "siren" + "sister" + "situate" + "six" + "size" + "skate" + "sketch" + "ski" + "skill" + "skin" + "skirt" + "skull" + "slab" + "slam" + "sleep" + "slender" + "slice" + "slide" + "slight" + "slim" + "slogan" + "slot" + "slow" + "slush" + "small" + "smart" + "smile" + "smoke" + "smooth" + "snack" + "snake" + "snap" + "sniff" + "snow" + "soap" + "soccer" + "social" + "sock" + "soda" + "soft" + "solar" + "soldier" + "solid" + "solution" + "solve" + "someone" + "song" + "soon" + "sorry" + "sort" + "soul" + "sound" + "soup" + "source" + "south" + "space" + "spare" + "spatial" + "spawn" + "speak" + "special" + "speed" + "spell" + "spend" + "sphere" + "spice" + "spider" + "spike" + "spin" + "spirit" + "split" + "spoil" + "sponsor" + "spoon" + "sport" + "spot" + "spray" + "spread" + "spring" + "spy" + "square" + "squeeze" + "squirrel" + "stable" + "stadium" + "staff" + "stage" + "stairs" + "stamp" + "stand" + "start" + "state" + "stay" + "steak" + "steel" + "stem" + "step" + "stereo" + "stick" + "still" + "sting" + "stock" + "stomach" + "stone" + "stool" + "story" + "stove" + "strategy" + "street" + "strike" + "strong" + "struggle" + "student" + "stuff" + "stumble" + "style" + "subject" + "submit" + "subway" + "success" + "such" + "sudden" + "suffer" + "sugar" + "suggest" + "suit" + "summer" + "sun" + "sunny" + "sunset" + "super" + "supply" + "supreme" + "sure" + "surface" + "surge" + "surprise" + "surround" + "survey" + "suspect" + "sustain" + "swallow" + "swamp" + "swap" + "swarm" + "swear" + "sweet" + "swift" + "swim" + "swing" + "switch" + "sword" + "symbol" + "symptom" + "syrup" + "system" + "table" + "tackle" + "tag" + "tail" + "talent" + "talk" + "tank" + "tape" + "target" + "task" + "taste" + "tattoo" + "taxi" + "teach" + "team" + "tell" + "ten" + "tenant" + "tennis" + "tent" + "term" + "test" + "text" + "thank" + "that" + "theme" + "then" + "theory" + "there" + "they" + "thing" + "this" + "thought" + "three" + "thrive" + "throw" + "thumb" + "thunder" + "ticket" + "tide" + "tiger" + "tilt" + "timber" + "time" + "tiny" + "tip" + "tired" + "tissue" + "title" + "toast" + "tobacco" + "today" + "toddler" + "toe" + "together" + "toilet" + "token" + "tomato" + "tomorrow" + "tone" + "tongue" + "tonight" + "tool" + "tooth" + "top" + "topic" + "topple" + "torch" + "tornado" + "tortoise" + "toss" + "total" + "tourist" + "toward" + "tower" + "town" + "toy" + "track" + "trade" + "traffic" + "tragic" + "train" + "transfer" + "trap" + "trash" + "travel" + "tray" + "treat" + "tree" + "trend" + "trial" + "tribe" + "trick" + "trigger" + "trim" + "trip" + "trophy" + "trouble" + "truck" + "true" + "truly" + "trumpet" + "trust" + "truth" + "try" + "tube" + "tuition" + "tumble" + "tuna" + "tunnel" + "turkey" + "turn" + "turtle" + "twelve" + "twenty" + "twice" + "twin" + "twist" + "two" + "type" + "typical" + "ugly" + "umbrella" + "unable" + "unaware" + "uncle" + "uncover" + "under" + "undo" + "unfair" + "unfold" + "unhappy" + "uniform" + "unique" + "unit" + "universe" + "unknown" + "unlock" + "until" + "unusual" + "unveil" + "update" + "upgrade" + "uphold" + "upon" + "upper" + "upset" + "urban" + "urge" + "usage" + "use" + "used" + "useful" + "useless" + "usual" + "utility" + "vacant" + "vacuum" + "vague" + "valid" + "valley" + "valve" + "van" + "vanish" + "vapor" + "various" + "vast" + "vault" + "vehicle" + "velvet" + "vendor" + "venture" + "venue" + "verb" + "verify" + "version" + "very" + "vessel" + "veteran" + "viable" + "vibrant" + "vicious" + "victory" + "video" + "view" + "village" + "vintage" + "violin" + "virtual" + "virus" + "visa" + "visit" + "visual" + "vital" + "vivid" + "vocal" + "voice" + "void" + "volcano" + "volume" + "vote" + "voyage" + "wage" + "wagon" + "wait" + "walk" + "wall" + "walnut" + "want" + "warfare" + "warm" + "warrior" + "wash" + "wasp" + "waste" + "water" + "wave" + "way" + "wealth" + "weapon" + "wear" + "weasel" + "weather" + "web" + "wedding" + "weekend" + "weird" + "welcome" + "west" + "wet" + "whale" + "what" + "wheat" + "wheel" + "when" + "where" + "whip" + "whisper" + "wide" + "width" + "wife" + "wild" + "will" + "win" + "window" + "wine" + "wing" + "wink" + "winner" + "winter" + "wire" + "wisdom" + "wise" + "wish" + "witness" + "wolf" + "woman" + "wonder" + "wood" + "wool" + "word" + "work" + "world" + "worry" + "worth" + "wrap" + "wreck" + "wrestle" + "wrist" + "write" + "wrong" + "yard" + "year" + "yellow" + "you" + "young" + "youth" + "zebra" + "zero" + "zone" + "zoo" +== diff --git a/desk/gub/lib/bip39.hoon b/desk/gub/lib/bip39.hoon new file mode 100644 index 0000000..761f4b4 --- /dev/null +++ b/desk/gub/lib/bip39.hoon @@ -0,0 +1,46 @@ +:: bip39 implementation in hoon +:: +/< bip39-english /lib/bip39-english.hoon +:: +|% +++ from-entropy + |= byts + ^- tape + =. wid (mul wid 8) + ~| [%unsupported-entropy-bit-length wid] + ?> &((gte wid 128) (lte wid 256)) + :: + =+ cs=(div wid 32) + =/ check=@ + %+ rsh [0 (sub 256 cs)] + (sha-256l:sha (div wid 8) dat) + =/ bits=byts + :- (add wid cs) + %+ can 0 + :~ cs^check + wid^dat + == + :: + =/ pieces + |- ^- (list @) + :- (end [0 11] dat.bits) + ?: (lte wid.bits 11) ~ + $(bits [(sub wid.bits 11) (rsh [0 11] dat.bits)]) + :: + =/ words=(list tape) + %+ turn pieces + |= ind=@ud + (snag ind `(list tape)`bip39-english) + :: + %+ roll (flop words) + |= [nex=tape all=tape] + ?~ all nex + :(weld all " " nex) +:: +::NOTE always produces a 512-bit result +++ to-seed + |= [mnem=tape pass=tape] + ^- @ + %- hmac-sha512t:pbkdf:crypto + [(crip mnem) (crip (weld "mnemonic" pass)) 2.048 64] +-- diff --git a/desk/gub/lib/bitcoin-utils.hoon b/desk/gub/lib/bitcoin-utils.hoon new file mode 100644 index 0000000..31b7490 --- /dev/null +++ b/desk/gub/lib/bitcoin-utils.hoon @@ -0,0 +1,185 @@ +:: lib/bitcoin-utils.hoon +:: Utilities for working with BTC data types and transactions +:: Crypto is unjetted +:: +/< bitcoin /lib/sur/bitcoin.hoon +=, bitcoin +|% +:: +:: TODO: move this bit/byt stuff to zuse +:: bit/byte utilities +:: +:: +:: +blop: munge bit and byt sequences (cat, flip, take, drop) +:: +++ blop + :: ~/ %blop + |_ =bloq + +$ biyts + $+ bu-biyts + [wid=@ud dat=@] + :: + ++ cat + |= bs=(list biyts) + ^- biyts + :- (roll (turn bs |=(b=biyts -.b)) add) + (can bloq (flop bs)) + :: +flip: flip endianness while preserving lead/trail zeroes + :: + ++ flip + |= b=biyts + ^- biyts + [wid.b (rev bloq b)] + :: +take: take n bloqs from front + :: pads front with extra zeroes if n is longer than input + :: + ++ take + |= [n=@ b=biyts] + ^- biyts + ?: (gth n wid.b) + [n dat.b] + [n (rsh [bloq (sub wid.b n)] dat.b)] + :: +drop: drop n bloqs from front + :: returns 0^0 if n >= width + :: + ++ drop + |= [n=@ b=biyts] + ^- biyts + ?: (gte n wid.b) + 0^0x0 + =+ n-take=(sub wid.b n) + [n-take (end [bloq n-take] dat.b)] + -- +++ byt ~(. blop 3) +:: +++ bit + :: ~/ %bit + =/ bl ~(. blop 0) + |% + ++ cat cat:bl:bit + ++ flip flip:bl:bit + ++ take take:bl:bit + ++ drop drop:bl:bit + ++ from-atoms + |= [bitwidth=@ digits=(list @)] + ^- bits + %- cat:bit + %+ turn digits + |= a=@ + ?> (lte (met 0 a) bitwidth) + [bitwidth `@ub`a] + :: +to-atoms: convert bits to atoms of bitwidth + :: + ++ to-atoms + |= [bitwidth=@ bs=bits] + ^- (list @) + =| res=(list @) + |- + ?: (lth wid.bs bitwidth) + ?: =(0 wid.bs) + res + =/ pad=@ (sub bitwidth wid.bs) + =. res (snoc res dat:(take:bit bitwidth [wid=bitwidth dat=(lsh [0 pad] dat.bs)])) + :: ~& res + res + :: ~& [wid.bs res] + %= $ + res (snoc res dat:(take:bit bitwidth bs)) + bs (drop:bit bitwidth bs) + == + -- +:: big endian sha256: input and output are both MSB first (big endian) +:: +++ sha256 + :: ~/ %sha256 + |= =byts + ^- hexb + %- flip:byt + [32 (shay (flip:byt byts))] +:: +++ dsha256 + :: ~/ %dsha256 + |= =byts + (sha256 (sha256 byts)) +:: +++ hash-160 + :: ~/ %hash-160 + |= val=byts + ^- hexb + =, ripemd:crypto + :- 20 + %- ripemd-160 + (sha256 val) + +:: +:: hxb: hex parsing utilities +:: +++ hxb + |% + ++ from-cord + :: ~/ %from-cord + |= h=@t + ^- hexb + ?: =('' h) 1^0x0 + :: Add leading 00 + :: + =+ (lsh [3 2] h) + :: Group by 4-size block + :: + =+ (rsh [3 2] -) + :: Parse hex to atom + :: + =/ a (need (de:base16:mimes:html -)) + [-.a `@ux`+.a] + :: + ++ to-cord + :: ~/ %to-cord + |= =hexb + ^- cord + (en:base16:mimes:html hexb) + -- +:: +:: +csiz: CompactSize integers (a Bitcoin-specific datatype) +:: https://btcinformation.org/en/developer-reference#compactsize-unsigned-integers +:: - encode: big endian to little endian +:: - decode: little endian to big endian +:: +++ csiz + |% + ++ en + :: ~/ %en + |= a=@ + ^- hexb + =/ l=@ (met 3 a) + ?: =(l 0) 1^a + ?: =(l 1) 1^a + ?: =(l 2) (cat:byt ~[1^0xfd (flip:byt 2^a)]) + ?: (lte l 4) (cat:byt ~[1^0xfe (flip:byt 4^a)]) + ?: (lte l 8) (cat:byt ~[1^0xff (flip:byt 8^a)]) + ~|("Cannot encode CompactSize longer than 8 bytes" !!) + :: + ++ de + :: ~/ %de + |= h=hexb + ^- [n=hexb rest=hexb] + =/ s=@ux dat:(take:byt 1 h) + ?: (lth s 0xfd) [1^s (drop:byt 1 h)] + ~| "Invalid compact-size at start of {}" + =/ len=bloq + ?+ s !! + %0xfd 1 + %0xfe 2 + %0xff 3 + == + :_ (drop:byt (add 1 (bex len)) h) + %- flip:byt + (take:byt (bex len) (drop:byt 1 h)) + :: +dea: atom instead of hexb for parsed CompactSize + :: + ++ dea + |= h=hexb + ^- [a=@ rest=hexb] + => (de h) + [dat.n rest] + -- +-- diff --git a/desk/gub/lib/btc-rpc.hoon b/desk/gub/lib/btc-rpc.hoon new file mode 100644 index 0000000..3cf8c8c --- /dev/null +++ b/desk/gub/lib/btc-rpc.hoon @@ -0,0 +1,229 @@ +:: btc-rpc.hoon: groundwire JSON-RPC helpers +:: +:: Shared between the groundwire nexus and MCP probe tools. Provides +:: request building, response parsing, block parsing from verbosity-2 +:: getblock, and a pure trace-block renderer. +:: +/< btc /lib/sur/bitcoin.hoon +/< btc-tx /lib/btc-tx.hoon +=, btc +|% +:: Default regtest connection (localhost groundwire, spvwallet creds). +:: +++ default-url `@t`'http://localhost:18443/' +++ default-auth `@t`'Basic Yml0Y29pbnJwYzpiaXRjb2lucnBj' +:: +:: Build a groundwire JSON-RPC request. +:: +++ rpc-request + |= [url=@t auth=@t method=@t params=@t] + ^- request:http + :* method=%'POST' + url=url + ^= header-list + :~ 'Content-Type'^'application/json' + 'Authorization'^auth + == + ^= body + %- some + %- as-octs:mimes:html + %+ rap 3 + :~ '{"jsonrpc":"1.0","id":"gub","method":"' + method + '","params":' + params + '}' + == + == +:: +:: Parse a hex cord (no 0x prefix) into @ux. +:: +++ parse-hex-cord + |= c=@t + ^- @ux + =/ res=(unit octs) (de:base16:mimes:html c) + ?~ res 0x0 + `@ux`q.u.res +:: +:: Parse a hex cord into a bitcoin hexb: [wid=@ dat=@ux]. +:: +++ hex-cord-to-hexb + |= c=@t + ^- hexb + =/ res=(unit octs) (de:base16:mimes:html c) + ?~ res 0^0x0 + [p.u.res `@ux`q.u.res] +:: +:: Compute the block reward at a given height (halves every 210k). +:: +++ reward-from-height + |= h=@ud + ^- @ud + (div 5.000.000.000 (bex (div h 210.000))) +:: +:: Parse getblockcount JSON response: {"result":N,"error":null,"id":"..."} +:: +++ parse-height + |= =json + ^- (unit @ud) + ?. ?=([%o *] json) ~ + =/ result=(unit ^json) (~(get by p.json) 'result') + ?~ result ~ + ?. ?=([%n *] u.result) ~ + (rush p.u.result dem) +:: +:: Parse a JSON-RPC response whose result is a string: {"result":"...", ...} +:: +++ parse-string-result + |= =json + ^- (unit @t) + ?. ?=([%o *] json) ~ + =/ result=(unit ^json) (~(get by p.json) 'result') + ?~ result ~ + ?. ?=([%s *] u.result) ~ + `p.u.result +:: +:: Parse a generatetoaddress response: {"result":["hex1","hex2",...], ...} +:: +++ parse-hash-list + |= =json + ^- (unit (list @ux)) + ?. ?=([%o *] json) ~ + =/ result=(unit ^json) (~(get by p.json) 'result') + ?~ result ~ + ?. ?=([%a *] u.result) ~ + =/ hs p.u.result + ?. (levy hs |=(j=^json ?=([%s *] j))) ~ + :- ~ + %+ turn hs + |= j=^json + ?> ?=([%s *] j) + (parse-hex-cord p.j) +:: +:: Parse one tx from a getblock verbosity-2 response. Uses the +:: raw "hex" field and decodes it with btc-tx's decodew, so we +:: get full typed dataw:tx without touching the vin/vout JSON. +:: +++ parse-tx + |= =json + ^- (unit tx:btc) + ?. ?=([%o *] json) ~ + =/ txid-j=(unit ^json) (~(get by p.json) 'txid') + ?~ txid-j ~ + ?. ?=([%s *] u.txid-j) ~ + =/ hex-j=(unit ^json) (~(get by p.json) 'hex') + ?~ hex-j ~ + ?. ?=([%s *] u.hex-j) ~ + =/ txid=@ux (parse-hex-cord p.u.txid-j) + =/ raw=hexb (hex-cord-to-hexb p.u.hex-j) + `[txid (decodew:txu:btc-tx raw)] +:: +:: Parse a getblock verbosity-2 response into a typed block:btc. +:: Shape: {"result":{"hash":"...","height":N,"tx":[...], ...}, ...} +:: +++ parse-block + |= =json + ^- (unit block:btc) + ?. ?=([%o *] json) ~ + =/ result=(unit ^json) (~(get by p.json) 'result') + ?~ result ~ + ?. ?=([%o *] u.result) ~ + =/ rmap p.u.result + =/ hash-j=(unit ^json) (~(get by rmap) 'hash') + ?~ hash-j ~ + ?. ?=([%s *] u.hash-j) ~ + =/ height-j=(unit ^json) (~(get by rmap) 'height') + ?~ height-j ~ + ?. ?=([%n *] u.height-j) ~ + =/ txs-j=(unit ^json) (~(get by rmap) 'tx') + ?~ txs-j ~ + ?. ?=([%a *] u.txs-j) ~ + =/ hax=@ux (parse-hex-cord p.u.hash-j) + =/ height=(unit @ud) (rush p.u.height-j dem) + ?~ height ~ + =/ mtxs=(list (unit tx:btc)) (turn p.u.txs-j parse-tx) + ?. (levy mtxs |=(m=(unit tx:btc) ?=(^ m))) ~ + =/ txs=(list tx:btc) (turn mtxs need) + `[hax (reward-from-height u.height) u.height txs] +:: +:: Render an octs as a lowercase hex cord (no 0x prefix, no dots). +:: +++ render-hex-octs + |= a=octs + ^- @t + (crip ((x-co:co (mul 2 p.a)) q.a)) +:: +:: Render a @ud as a cord. +:: +++ ud-to-cord + |= n=@ud + ^- @t + (crip ((d-co:co 1) n)) +:: +:: Pure helper: build a wain tracing one block's non-coinbase txs +:: with every input's full witness stack rendered as lowercase hex. +:: Returns ~ for coinbase-only blocks so callers can skip them. +:: +++ trace-block + |= [blk=block:btc reveals-count=@ud] + ^- wain + =/ non-cb=(list tx:btc) ?~(txs.blk ~ t.txs.blk) + ?~ non-cb ~ + =/ hash-hex=@t (render-hex-octs 32^hax.blk) + =/ hdr=@t + %+ rap 3 + :~ '=== block ' + (ud-to-cord height.blk) + ' hash=0x' + hash-hex + ' txs=' + (ud-to-cord (lent txs.blk)) + ' reveals=' + (ud-to-cord reveals-count) + == + :- hdr + %- zing + %+ turn non-cb + |= t=tx:btc + ^- wain + =/ txid-hex=@t (render-hex-octs 32^id.t) + =/ tx-hdr=@t + %+ rap 3 + :~ ' tx 0x' + txid-hex + ' ins=' + (ud-to-cord (lent is.t)) + ' outs=' + (ud-to-cord (lent os.t)) + == + :- tx-hdr + %- zing + =| in-idx=@ud + |- ^- (list wain) + ?~ is.t ~ + =/ iw=inputw:tx:btc i.is.t + =/ wit-count=@ud (lent witness.iw) + =/ in-hdr=@t + %+ rap 3 + :~ ' in ' + (ud-to-cord in-idx) + ' prev=0x' + (render-hex-octs 32^txid.iw) + ':' + (ud-to-cord pos.iw) + ' wits=' + (ud-to-cord wit-count) + == + =/ wit-lines=wain + %+ turn `(list hexb)`witness.iw + |= h=hexb + ^- @t + %+ rap 3 + :~ ' ' + (ud-to-cord wid.h) + 'b 0x' + (render-hex-octs [wid.h dat.h]) + == + :- [in-hdr wit-lines] + $(is.t t.is.t, in-idx +(in-idx)) +-- diff --git a/desk/gub/lib/btc-script.hoon b/desk/gub/lib/btc-script.hoon new file mode 100644 index 0000000..e1bee5f --- /dev/null +++ b/desk/gub/lib/btc-script.hoon @@ -0,0 +1,423 @@ +:: lib/btc-script.hoon +:: Bitcoin Script definition, encoders, and decoders. +:: Ported from groundwire's lib/btc-script.hoon. +:: +|% +++ script + =< script + |% + +$ script (list op) + -- +:: ++$ op + $@ $? %op-nop + %op-if + %op-notif + %op-else + %op-endif + %op-verify + %op-return + :: + %op-toaltstack + %op-fromaltstack + %op-ifdup + %op-depth + %op-drop + %op-dup + %op-nip + %op-over + %op-pick + %op-roll + %op-rot + %op-swap + %op-tuck + %op-2drop + %op-2dup + %op-3dup + %op-2over + %op-2rot + %op-2swap + :: + %op-cat + %op-substr + %op-left + %op-right + %op-size + :: + %op-invert + %op-and + %op-or + %op-xor + %op-equal + %op-equalverify + :: + %op-1add + %op-1sub + %op-2mul + %op-2div + %op-negate + %op-abs + %op-not + %op-0notequal + %op-add + %op-sub + %op-mul + %op-div + %op-mod + %op-lshift + %op-rshift + %op-booland + %op-boolor + %op-numequal + %op-numequalverify + %op-numnotequal + %op-lessthan + %op-greaterthan + %op-lessthanorequal + %op-greaterthanorequal + %op-min + %op-max + %op-within + :: + %op-ripemd160 + %op-sha1 + %op-sha256 + %op-hash160 + %op-hash256 + %op-codeseparator + %op-checksig + %op-checksigverify + %op-checkmultisig + %op-checkmultisigverify + :: + %op-checklocktimeverify + %op-checksequenceverify + :: + %op-pubkeyhash + %op-pubkey + %op-invalidopcode + :: + %op-reserved + %op-ver + %op-verif + %op-vernotif + %op-reserved1 + %op-reserved2 + :: + %op-nop1 + %op-nop4 + %op-nop5 + %op-nop6 + %op-nop7 + %op-nop8 + %op-nop9 + %op-nop10 + == + $: %op-push + $% [p=%num octs=[p=%1 q=@]] + [p=?(~ %1 %2 %4) =octs] + == + == +:: +++ en + |= =script + |^ ^- octs + =- [r p] + %- fax:plot :- bloq=3 + %- flop + (turn script encode-op) + :: + ++ encode-op + |= =op + ^- plat:plot + ?: ?=(^ op) + ?- p.op + %num + :- 1 + ?: =(q.octs.op 0x81) 0x4f + ?: =(0 q.octs.op) 0 + ?> (lte q.octs.op 0x10) + (add 0x50 q.octs.op) + :: + * [%s ~]^(encode-pushdata +.op) + == + :: + ?- op + %op-reserved 1^0x50 + :: + %op-nop 1^0x61 + %op-ver 1^0x62 + %op-if 1^0x63 + %op-notif 1^0x64 + %op-verif 1^0x65 + %op-vernotif 1^0x66 + %op-else 1^0x67 + %op-endif 1^0x68 + %op-verify 1^0x69 + %op-return 1^0x6a + %op-toaltstack 1^0x6b + %op-fromaltstack 1^0x6c + %op-2drop 1^0x6d + %op-2dup 1^0x6e + %op-3dup 1^0x6f + %op-2over 1^0x70 + %op-2rot 1^0x71 + %op-2swap 1^0x72 + %op-ifdup 1^0x73 + %op-depth 1^0x74 + %op-drop 1^0x75 + %op-dup 1^0x76 + %op-nip 1^0x77 + %op-over 1^0x78 + %op-pick 1^0x79 + %op-roll 1^0x7a + %op-rot 1^0x7b + %op-swap 1^0x7c + %op-tuck 1^0x7d + :: + %op-cat 1^0x7e + %op-substr 1^0x7f + %op-left 1^0x80 + %op-right 1^0x81 + %op-size 1^0x82 + %op-invert 1^0x83 + %op-and 1^0x84 + %op-or 1^0x85 + %op-xor 1^0x86 + %op-equal 1^0x87 + %op-equalverify 1^0x88 + %op-reserved1 1^0x89 + %op-reserved2 1^0x8a + :: + %op-1add 1^0x8b + %op-1sub 1^0x8c + %op-2mul 1^0x8d + %op-2div 1^0x8e + %op-negate 1^0x8f + %op-abs 1^0x90 + %op-not 1^0x91 + %op-0notequal 1^0x92 + %op-add 1^0x93 + %op-sub 1^0x94 + %op-mul 1^0x95 + %op-div 1^0x96 + %op-mod 1^0x97 + %op-lshift 1^0x98 + %op-rshift 1^0x99 + %op-booland 1^0x9a + %op-boolor 1^0x9b + %op-numequal 1^0x9c + %op-numequalverify 1^0x9d + %op-numnotequal 1^0x9e + %op-lessthan 1^0x9f + %op-greaterthan 1^0xa0 + %op-lessthanorequal 1^0xa1 + %op-greaterthanorequal 1^0xa2 + %op-min 1^0xa3 + %op-max 1^0xa4 + %op-within 1^0xa5 + :: + %op-ripemd160 1^0xa6 + %op-sha1 1^0xa7 + %op-sha256 1^0xa8 + %op-hash160 1^0xa9 + %op-hash256 1^0xaa + %op-codeseparator 1^0xab + %op-checksig 1^0xac + %op-checksigverify 1^0xad + %op-checkmultisig 1^0xae + %op-checkmultisigverify 1^0xaf + :: + %op-checklocktimeverify 1^0xb1 + %op-checksequenceverify 1^0xb2 + :: + %op-pubkeyhash 1^0xfd + %op-pubkey 1^0xfe + %op-invalidopcode 1^0xff + :: + %op-nop1 1^0xb0 + %op-nop4 1^0xb3 + %op-nop5 1^0xb4 + %op-nop6 1^0xb5 + %op-nop7 1^0xb6 + %op-nop8 1^0xb7 + %op-nop9 1^0xb8 + %op-nop10 1^0xb9 + == + :: + ++ encode-pushdata + |= [a=?(~ %1 %2 %4) b=byts] + ^- plot + :- bloq=3 + %- flop + ?> (lte (met 3 +.b) dat.b) + ~| %push-data-too-big-for-opcode + ?- a + ~ + ?> (lte wid.b 0x4b) + ~[[1 wid.b] wid.b^(rev 3 wid.b dat.b)] + :: + %1 + ?> (lte wid.b 0xff) + ~[1^0x4c [1 wid.b] wid.b^(rev 3 wid.b dat.b)] + :: + %2 + ?> (lte wid.b 0xffff) + ~[1^0x4d [2 (rev 3 2 wid.b)] wid.b^(rev 3 wid.b dat.b)] + :: + %4 + ?> (lte wid.b 0xffff.ffff) + ~[1^0x4e [4 (rev 3 4 wid.b)] wid.b^(rev 3 wid.b dat.b)] + == + -- +:: +++ de + |= a=octs + ^- (unit script) + ?: =(p.a 0) ~ :: `~ + =/ n (dec p.a) + |- ^- (unit script) + =/ op (cut 3 [n 1] q.a) + =- ?~ - ~ + ?: =(n.u 0) `op.u^~ + ?~ rest=%_($ n (dec n.u)) ~ + `op.u^u.rest + ^- (unit [=^op n=@]) + ?: &(!=(0 op) (lte op 0x4b)) :: push next `op` bytes + ?: (lth n op) ~ + =. n (sub n op) + =/ dat (rev 3 op (cut 3 [n op] q.a)) + `[%op-push ~ op dat]^n + ?: ?=(%0x4c op) :: op_pushdata1 + ?: =(n 0) ~ + =. n (dec n) + =/ len (cut 3 [n 1] q.a) + ?: (lth n len) ~ + =. n (sub n len) + =/ dat (rev 3 len (cut 3 [n len] q.a)) + `[%op-push %1 len dat]^n + ?: ?=(%0x4d op) :: op_pushdata2 + ?: (lth n 2) ~ + =. n (sub n 2) + =/ len (rev 3 2 (cut 3 [n 2] q.a)) + ?: (lth n len) ~ + =. n (sub n len) + =/ dat (rev 3 len (cut 3 [n len] q.a)) + `[%op-push %2 len dat]^n + ?: ?=(%0x4e op) :: op_pushdata4 + ?: (lth n 4) ~ + =. n (sub n 4) + =/ len (rev 3 4 (cut 3 [n 4] q.a)) + ?: (lth n len) ~ + =. n (sub n len) + =/ dat (rev 3 len (cut 3 [n len] q.a)) + `[%op-push %4 len dat]^n + =- ?~(- ~ `u^n) + ^- (unit ^op) + ?: &((lth 0x50 op) (lte op 0x60)) :: op_1..op_16 + `[%op-push %num %1 (sub op 0x50)] + ?+ op ~ + %0 `[%op-push %num %1 0] + %0x4f `[%op-push %num %1 0x81] + %0x50 `%op-reserved + :: + %0x61 `%op-nop + %0x62 `%op-ver + %0x63 `%op-if + %0x64 `%op-notif + %0x65 `%op-verif + %0x66 `%op-vernotif + %0x67 `%op-else + %0x68 `%op-endif + %0x69 `%op-verify + %0x6a `%op-return + %0x6b `%op-toaltstack + %0x6c `%op-fromaltstack + %0x6d `%op-2drop + %0x6e `%op-2dup + %0x6f `%op-3dup + %0x70 `%op-2over + %0x71 `%op-2rot + %0x72 `%op-2swap + %0x73 `%op-ifdup + %0x74 `%op-depth + %0x75 `%op-drop + %0x76 `%op-dup + %0x77 `%op-nip + %0x78 `%op-over + %0x79 `%op-pick + %0x7a `%op-roll + %0x7b `%op-rot + %0x7c `%op-swap + %0x7d `%op-tuck + :: + %0x7e `%op-cat + %0x7f `%op-substr + %0x80 `%op-left + %0x81 `%op-right + %0x82 `%op-size + %0x83 `%op-invert + %0x84 `%op-and + %0x85 `%op-or + %0x86 `%op-xor + %0x87 `%op-equal + %0x88 `%op-equalverify + %0x89 `%op-reserved1 + %0x8a `%op-reserved2 + :: + %0x8b `%op-1add + %0x8c `%op-1sub + %0x8d `%op-2mul + %0x8e `%op-2div + %0x8f `%op-negate + %0x90 `%op-abs + %0x91 `%op-not + %0x92 `%op-0notequal + %0x93 `%op-add + %0x94 `%op-sub + %0x95 `%op-mul + %0x96 `%op-div + %0x97 `%op-mod + %0x98 `%op-lshift + %0x99 `%op-rshift + %0x9a `%op-booland + %0x9b `%op-boolor + %0x9c `%op-numequal + %0x9d `%op-numequalverify + %0x9e `%op-numnotequal + %0x9f `%op-lessthan + %0xa0 `%op-greaterthan + %0xa1 `%op-lessthanorequal + %0xa2 `%op-greaterthanorequal + %0xa3 `%op-min + %0xa4 `%op-max + %0xa5 `%op-within + :: + %0xa6 `%op-ripemd160 + %0xa7 `%op-sha1 + %0xa8 `%op-sha256 + %0xa9 `%op-hash160 + %0xaa `%op-hash256 + %0xab `%op-codeseparator + %0xac `%op-checksig + %0xad `%op-checksigverify + %0xae `%op-checkmultisig + %0xaf `%op-checkmultisigverify + :: + %0xb1 `%op-checklocktimeverify + %0xb2 `%op-checksequenceverify + :: + %0xfd `%op-pubkeyhash + %0xfe `%op-pubkey + %0xff `%op-invalidopcode + :: + %0xb0 `%op-nop1 + %0xb3 `%op-nop4 + %0xb4 `%op-nop5 + %0xb5 `%op-nop6 + %0xb6 `%op-nop7 + %0xb7 `%op-nop8 + %0xb8 `%op-nop9 + %0xb9 `%op-nop10 + == +-- diff --git a/desk/gub/lib/btc-tx.hoon b/desk/gub/lib/btc-tx.hoon new file mode 100644 index 0000000..9653464 --- /dev/null +++ b/desk/gub/lib/btc-tx.hoon @@ -0,0 +1,144 @@ +:: btc-tx.hoon +:: Raw Bitcoin transaction encoding/decoding utilities. +:: Minimal port of groundwire's lib/bitcoin.hoon ++txu arm — just +:: enough to decode a segwit-encoded raw tx hexb into a dataw:tx. +:: +/< sur /lib/sur/bitcoin.hoon +/< bcu /lib/bitcoin-utils.hoon +=, sur +=, bcu +|% +++ txu + |% + ++ de + |% + ++ nversion + |= b=hexb + ^- [nversion=@ud rest=hexb] + :- dat:(flip:byt (take:byt 4 b)) + (drop:byt 4 b) + :: + ++ segwit + |= b=hexb + ^- [segwit=(unit @ud) rest=hexb] + ?. =(1^0x0 (take:byt 1 b)) + [~ b] + :- [~ dat:(take:byt 2 b)] + (drop:byt 2 b) + :: + ++ script-sig + |= b=hexb + ^- [sig=hexb rest=hexb] + =^ siglen=hexb b (de:csiz b) + :- (take:byt dat.siglen b) + (drop:byt dat.siglen b) + :: + ++ sequence + |= b=hexb + ^- [seq=hexb rest=hexb] + [(flip:byt (take:byt 4 b)) (drop:byt 4 b)] + :: + ++ inputs + |= b=hexb + ^- [is=(list input:tx) rest=hexb] + |^ + =| acc=(list input:tx) + =^ count b (dea:csiz b) + |- + ?: =(0 count) [acc b] + =^ i b (input b) + $(acc (snoc acc i), count (dec count)) + :: + ++ input + |= b=hexb + ^- [i=input:tx rest=hexb] + =/ txid dat:(flip:byt (take:byt 32 b)) + =/ pos dat:(flip:byt (take:byt 4 (drop:byt 32 b))) + =^ sig=hexb b (script-sig (drop:byt 36 b)) + =^ seq=hexb b (sequence b) + :_ b + [txid pos seq ?:((gth wid.sig 0) `sig ~) ~] + -- + :: + ++ outputs + |= b=hexb + ^- [os=(list output:tx) rest=hexb] + =| acc=(list output:tx) + =^ count b (dea:csiz b) + |- + ?: =(0 count) [acc b] + =/ value (flip:byt (take:byt 8 b)) + =^ scriptlen b (dea:csiz (drop:byt 8 b)) + %= $ + acc %+ snoc acc + :- (take:byt scriptlen b) + dat.value + b (drop:byt scriptlen b) + count (dec count) + == + -- + :: +parse-witness: decode witness stack + :: + ++ parse-witness + |= b=hexb + ^- (pair (list hexb) hexb) + =| acc=witness:tx + =+ i=0 + =^ n b (read-compact-size b) + |- + ?: =(i n) [acc b] + =^ wid b (read-compact-size b) + =^ dat b (read-bytes wid b) + $(acc (snoc acc dat), i +(i)) + :: +read-bytes: take n bytes, drop n bytes + :: + ++ read-bytes + |= [n=@ b=hexb] + ^- (pair hexb hexb) + [(take:byt n b) (drop:byt n b)] + :: +read-compact-size: decode CompactSize + :: + ++ read-compact-size + |= b=hexb + ^- [a=@ rest=hexb] + =^ s b (read-bytes 1 b) + ?: (lth +.s 0xfd) [+.s b] + ~| %invalid-compact-size + =/ len=bloq + ?+ +.s !! + %0xfd 1 + %0xfe 2 + %0xff 3 + == + =^ k b (read-bytes (bex len) b) + :_ b + dat:(flip:byt k) + :: + ++ decodew + |= b=hexb + ^- dataw:tx + =^ nversion b + (nversion:de b) + =^ segwit b + (segwit:de b) + =^ inputs b + (inputs:de b) + =^ outputs b + (outputs:de b) + => %=(. inputs `(list input:tx)`inputs) + ?~ segwit + =/ locktime=@ud + dat:(take:byt 4 (flip:byt b)) + :- (turn inputs |=(input:tx `inputw:tx`[~ +<])) + [outputs locktime nversion segwit] + ~| %invalid-witness-section + =| inputsw=(list inputw:tx) + |- ^- dataw:tx + ?: =(4 wid.b) + ?> ?=(~ inputs) + [(flop inputsw) outputs dat:(flip:byt b) nversion segwit] + ?> ?=(^ inputs) + =^ witness b (parse-witness b) + $(inputs t.inputs, inputsw [witness i.inputs]^inputsw) + -- +-- diff --git a/desk/sur/claude.hoon b/desk/gub/lib/claude.hoon similarity index 100% rename from desk/sur/claude.hoon rename to desk/gub/lib/claude.hoon diff --git a/desk/gub/lib/cron.hoon b/desk/gub/lib/cron.hoon new file mode 100644 index 0000000..cdafd15 --- /dev/null +++ b/desk/gub/lib/cron.hoon @@ -0,0 +1,123 @@ +:: cron: reusable cron expression parser +:: +:: pure functions for parsing cron expressions and computing +:: next fire times. no agent dependencies. +:: +|% +:: +:: +split-on-space: split cord on spaces into list of cords +:: +++ split-on-space + |= txt=@t + ^- (list @t) + =/ chars=tape (trip txt) + =/ out=(list @t) ~ + =/ buf=tape ~ + |- + ?~ chars + ?~ buf (flop out) + (flop [(crip (flop buf)) out]) + ?: =(i.chars ' ') + ?~ buf $(chars t.chars) + $(chars t.chars, out [(crip (flop buf)) out], buf ~) + $(chars t.chars, buf [i.chars buf]) +:: +:: +split-on-comma: split cord on commas into list of cords +:: +++ split-on-comma + |= txt=@t + ^- (list @t) + =/ chars=tape (trip txt) + =/ out=(list @t) ~ + =/ buf=tape ~ + |- + ?~ chars + ?~ buf (flop out) + (flop [(crip (flop buf)) out]) + ?: =(i.chars ',') + ?~ buf $(chars t.chars) + $(chars t.chars, out [(crip (flop buf)) out], buf ~) + $(chars t.chars, buf [i.chars buf]) +:: +:: +parse-cron-field: parse one cron field into a set of matching values +:: field: one of the 5 cron fields (e.g. '*', '*/5', '3', '1,15') +:: lo: minimum value for this field (e.g. 0 for minutes) +:: hi: maximum value for this field (e.g. 59 for minutes) +:: +++ parse-cron-field + |= [field=@t lo=@ud hi=@ud] + ^- (set @ud) + :: wildcard: all values + ?: =(field '*') + (silt (gulf lo hi)) + :: step: */N + =/ flen=@ud (met 3 field) + ?: &((gte flen 3) =((end [3 2] field) '*/')) + =/ step-cord=@t (rsh [3 2] field) + =/ step=@ud (fall (rush step-cord dem) 1) + ?: =(0 step) (silt (gulf lo hi)) + =/ vals=(list @ud) + =/ n=@ud 0 + =/ acc=(list @ud) ~ + |- + =/ v=@ud (add lo (mul n step)) + ?: (gth v hi) (flop acc) + $(n +(n), acc [v acc]) + (silt vals) + :: comma-separated list or single number + =/ parts=(list @t) (split-on-comma field) + =/ vals=(list @ud) + %+ murn parts + |= p=@t + (rush p dem) + (silt vals) +:: +:: +next-cron-fire: compute next fire time from cron expression +:: cron format: "min hour dom month dow" (5 fields) +:: each field: * (any), */N (every N), N (specific), N,M (list) +:: dow: 0=Sunday, 1=Monday, ..., 6=Saturday +:: +++ next-cron-fire + |= [expr=@t now=@da] + ^- (unit @da) + =/ fields=(list @t) (split-on-space expr) + ?. =((lent fields) 5) ~ + =/ f-min=(set @ud) (parse-cron-field (snag 0 fields) 0 59) + =/ f-hour=(set @ud) (parse-cron-field (snag 1 fields) 0 23) + =/ f-dom=(set @ud) (parse-cron-field (snag 2 fields) 1 31) + =/ f-mon=(set @ud) (parse-cron-field (snag 3 fields) 1 12) + =/ f-dow=(set @ud) (parse-cron-field (snag 4 fields) 0 6) + :: start from now + 1 minute, check each minute for up to 1 year + =/ candidate=@da (add now ~m1) + :: zero out seconds: rebuild with s=0 f=~ + =/ d=date (yore candidate) + =. s.t.d 0 + =. f.t.d ~ + =. candidate (year d) + =/ limit=@ud 525.600 :: minutes in a year + =/ idx=@ud 0 + |- + ?: =(idx limit) ~ + =/ d=date (yore candidate) + :: compute day of week (0=Sunday) + :: use the Zeller-like approach: convert to days and mod 7 + :: epoch: ~2000.1.1 is a Saturday (dow=6) + =/ epoch=@da ~2000.1.1 + =/ day-diff=@ud + ?: (gte candidate epoch) + (div (sub candidate epoch) ~d1) + 0 + =/ dow=@ud (mod (add 6 day-diff) 7) + :: check all 5 fields + ?. (~(has in f-min) m.t.d) + $(idx +(idx), candidate (add candidate ~m1)) + ?. (~(has in f-hour) h.t.d) + $(idx +(idx), candidate (add candidate ~m1)) + ?. (~(has in f-dom) d.t.d) + $(idx +(idx), candidate (add candidate ~m1)) + ?. (~(has in f-mon) m.d) + $(idx +(idx), candidate (add candidate ~m1)) + ?. (~(has in f-dow) dow) + $(idx +(idx), candidate (add candidate ~m1)) + `candidate +-- diff --git a/desk/gub/lib/der.hoon b/desk/gub/lib/der.hoon new file mode 100644 index 0000000..30a04cf --- /dev/null +++ b/desk/gub/lib/der.hoon @@ -0,0 +1,210 @@ +/< asn1 /lib/sur/asn1.hoon +:: |der: distinguished encoding rules for ASN.1 +:: +:: DER is a tag-length-value binary encoding for ASN.1, designed +:: so that there is only one (distinguished) valid encoding for an +:: instance of a type. +:: +|% +:: +en:der: encode +spec:asn1 to +octs (kindof) +:: +++ en + =< |= a=spec:asn1 + ^- [len=@ud dat=@ux] + =/ b ~(ren raw a) + [(lent b) (rep 3 b)] + |% + :: +raw:en:der: door for encoding +spec:asn1 to list of bytes + :: + ++ raw + |_ pec=spec:asn1 + :: +ren:raw:en:der: render +spec:asn1 to tag-length-value bytes + :: + ++ ren + ^- (list @D) + =/ a lem + [tag (weld (len a) a)] + :: +tag:raw:en:der: tag byte + :: + ++ tag + ^- @D + ?- pec + [%int *] 2 + [%bit *] 3 + [%oct *] 4 + [%nul *] 5 + [%obj *] 6 + [%seq *] 48 :: constructed: (con 0x20 16) + [%set *] 49 :: constructed: (con 0x20 17) + [%con *] ;: con + 0x80 :: context-specifc + ?:(imp.bes.pec 0 0x20) :: implicit? + (dis 0x1f tag.bes.pec) :: 5 bits of custom tag + == + == + :: +lem:raw:en:der: element bytes + :: + ++ lem + ^- (list @D) + ?- pec + :: unsigned only, interpreted as positive-signed and + :: rendered in big-endian byte order. negative-signed would + :: be two's complement + :: + [%int *] =/ a (flop (rip 3 int.pec)) + ?~ a [0 ~] + ?:((lte i.a 127) a [0 a]) + :: padded to byte-width, must be already byte-aligned + :: + [%bit *] =/ a (rip 3 bit.pec) + =/ b ~| %der-invalid-bit + ?. =(0 (mod len.pec 8)) + ~|(%der-invalid-bit-alignment !!) + (sub (div len.pec 8) (lent a)) + [0 (weld a (reap b 0))] + :: padded to byte-width + :: + [%oct *] =/ a (rip 3 oct.pec) + =/ b ~| %der-invalid-oct + (sub len.pec (lent a)) + (weld a (reap b 0)) + :: + [%nul *] ~ + [%obj *] (rip 3 obj.pec) + :: + [%seq *] %- zing + |- ^- (list (list @)) + ?~ seq.pec ~ + :- ren(pec i.seq.pec) + $(seq.pec t.seq.pec) + :: presumed to be already deduplicated and sorted + :: + [%set *] %- zing + |- ^- (list (list @)) + ?~ set.pec ~ + :- ren(pec i.set.pec) + $(set.pec t.set.pec) + :: already constructed + :: + [%con *] con.pec + == + :: +len:raw:en:der: length bytes + :: + ++ len + |= a=(list @D) + ^- (list @D) + =/ b (lent a) + ?: (lte b 127) + [b ~] :: note: big-endian + [(con 0x80 (met 3 b)) (flop (rip 3 b))] + -- + -- +:: +de:der: decode atom to +spec:asn1 +:: +++ de + |= [len=@ud dat=@ux] + ^- (unit spec:asn1) + :: XX refactor into +parse + =/ a (rip 3 dat) + =/ b ~| %der-invalid-len + (sub len (lent a)) + (rust `(list @D)`(weld a (reap b 0)) parse) +:: +parse:der: DER parser combinator +:: +++ parse + =< ^- $-(nail (like spec:asn1)) + ;~ pose + (stag %int (bass 256 (sear int ;~(pfix (tag 2) till)))) + (stag %bit (sear bit (boss 256 ;~(pfix (tag 3) till)))) + (stag %oct (boss 256 ;~(pfix (tag 4) till))) + (stag %nul (cold ~ ;~(plug (tag 5) (tag 0)))) + (stag %obj (^boss 256 ;~(pfix (tag 6) till))) + (stag %seq (sear recur ;~(pfix (tag 48) till))) + (stag %set (sear recur ;~(pfix (tag 49) till))) + (stag %con ;~(plug (sear context next) till)) + == + |% + :: +tag:parse:der: parse tag byte + :: + ++ tag + |=(a=@D (just a)) + :: +int:parse:der: sear unsigned big-endian bytes + :: + ++ int + |= a=(list @D) + ^- (unit (list @D)) + ?~ a ~ + ?: ?=([@ ~] a) `a + ?. =(0 i.a) `a + ?.((gth i.t.a 127) ~ `t.a) + :: +bit:parse:der: convert bytewidth to bitwidth + :: + ++ bit + |= [len=@ud dat=@ux] + ^- (unit [len=@ud dat=@ux]) + ?. =(0 (end 3 dat)) ~ + :+ ~ + (mul 8 (dec len)) + (rsh 3 dat) + :: +recur:parse:der: parse bytes for a list of +spec:asn1 + :: + ++ recur + |=(a=(list @) (rust a (star parse))) + :: +context:parse:der: decode context-specific tag byte + :: + ++ context + |= a=@D + ^- (unit bespoke:asn1) + ?. =(1 (cut 0 [7 1] a)) ~ + :+ ~ + =(1 (cut 0 [5 1] a)) + (dis 0x1f a) + :: +boss:parse:der: shadowed to count as well + :: + :: Use for parsing +octs more broadly? + :: + ++ boss + |* [wuc=@ tyd=rule] + %+ cook + |= waq=(list @) + :- (lent waq) + (reel waq |=([p=@ q=@] (add p (mul wuc q)))) + tyd + :: +till:parse:der: parser combinator for len-prefixed bytes + :: + :: advance until + :: + ++ till + |= tub=nail + ^- (like (list @D)) + ?~ q.tub + (fail tub) + :: fuz: first byte - length, or length of the length + :: + =* fuz i.q.tub + :: nex: offset of value bytes from fuz + :: len: length of value bytes + :: + =/ [nex=@ len=@] + :: faz: meaningful bits in fuz + :: + =/ faz (end [0 7] fuz) + ?: =(0 (cut 0 [7 1] fuz)) + [0 faz] + [faz (rep 3 (flop (scag faz t.q.tub)))] + ?: ?& !=(0 nex) + !=(nex (met 3 len)) + == + (fail tub) + :: zuf: value bytes + :: + =/ zuf (swag [nex len] t.q.tub) + ?. =(len (lent zuf)) + (fail tub) + :: zaf: product nail + :: + =/ zaf [p.p.tub (add +(nex) q.p.tub)] + [zaf `[zuf zaf (slag (add nex len) t.q.tub)]] + -- +-- + diff --git a/desk/lib/feather-icons.hoon b/desk/gub/lib/feather-icons.hoon similarity index 100% rename from desk/lib/feather-icons.hoon rename to desk/gub/lib/feather-icons.hoon diff --git a/desk/lib/feather.hoon b/desk/gub/lib/feather.hoon similarity index 100% rename from desk/lib/feather.hoon rename to desk/gub/lib/feather.hoon diff --git a/desk/gub/lib/git/bundle.hoon b/desk/gub/lib/git/bundle.hoon new file mode 100644 index 0000000..4776e94 --- /dev/null +++ b/desk/gub/lib/git/bundle.hoon @@ -0,0 +1,77 @@ +:: git bundle: bundle file format +:: +:: Ported from hoon-git. +:: +:: uses bytestream from sut (Clay-compiled, jetted) +/< * /lib/git/hash.hoon +/< * /lib/git/object.hoon +/< * /lib/git/refs.hoon +/< git-pack /lib/git/pack.hoon +|% ++$ bundle-header + $: version=$?(%2) + hash=hash-algo + need=(list hash) + refs=(list [p=path q=hash]) + == ++$ bundle [header=bundle-header =pack:git-pack] +:: +++ read + |= sea=bays:bytestream + ^- bundle + =^ header sea (read-header sea) + [header (read:git-pack sea)] +:: +++ read-header + |= sea=bays:bytestream + ^- [bundle-header bays:bytestream] + =^ line sea (read-line-maybe:bytestream sea) + ?~ line + ~| "Git bundle is corrupted: signature absent" !! + =/ signature + (cold %2 (jest '# v2 git bundle')) + =+ sig=(rust (trip u.line) signature) + ?~ sig + ~| "Git bundle is corrupted: invalid signature {(trip u.line)}" !! + =/ hal=hash-algo + ?: =(2 u.sig) %sha-1 + !! + =^ reqs=(list hash) sea + =| reqs=(list hash) + |- + =/ [line=(unit @t) red=bays:bytestream] (read-line-maybe:bytestream sea) + ?~ line + ~| "Git bundle is corrupted: invalid header" !! + =/ hash=(unit hash) + %+ rust (trip u.line) + %+ ifix [hep (just '\0a')] + ;~ sfix + ^~ (parse-hash hal) + (punt ;~(pfix ace (star prn))) + == + ?~ hash + [reqs sea] + $(reqs [u.hash reqs], sea red) + =^ refs=(list (pair refname hash)) sea + =| refs=(list (pair refname hash)) + |- + =/ [line=(unit @t) red=bays:bytestream] (read-line-maybe:bytestream sea) + ?~ line + ~| "Git bundle is corrupted: invalid header" !! + =/ ref=(unit [=hash =refname]) + %+ rust (trip u.line) + ;~ plug + ^~ (parse-hash hal) + ;~(pfix ace parse-refname) + == + ?~ ref + [refs sea] + $(refs [[refname.u.ref hash.u.ref] refs], sea red) + =^ line sea (read-line-maybe:bytestream sea) + ?~ line + ~| "Git bundle is corrupted: header not terminated" !! + ?: (gth (met 3 u.line) 1) + ~| "Git bundle is corrupted: invalid header terminator" !! + :_ sea + [u.sig hal reqs refs] +-- diff --git a/desk/gub/lib/git/hash.hoon b/desk/gub/lib/git/hash.hoon new file mode 100644 index 0000000..a0f6a14 --- /dev/null +++ b/desk/gub/lib/git/hash.hoon @@ -0,0 +1,106 @@ +:: git hash: SHA-1 hashing for git objects +:: +:: Ported from hoon-git. +:: +:: uses bytestream from sut (Clay-compiled, jetted) +|% ++$ hash @ux ++$ hash-algo + $? %sha-256 + %sha-1 + == +++ hash-bytes-sha-1 20 +++ hash-bytes-sha-256 !! +++ hash-size-sha-1 ^~((mul 2 hash-bytes-sha-1)) +++ hash-size-sha-256 ^~((mul 2 hash-bytes-sha-256)) +++ hash-bytes + |= hal=hash-algo + ?- hal + %sha-1 hash-bytes-sha-1 + %sha-256 hash-bytes-sha-256 + == +++ hash-size + |= hal=hash-algo + ?- hal + %sha-1 hash-size-sha-1 + %sha-256 hash-size-sha-256 + == +++ hash-octs-sha-1 + |= =octs + ^- @ux + (sha-1l:sha p.octs (rev 3 octs)) +++ hash-txt-sha-1 + |= txt=@t + ^- @ux + (hash-octs-sha-1 (met 3 txt) txt) +++ hash-octs-sha-256 !! +++ txt-to-hash + |= a=@ta + ^- hash + =| =hash + |- + ?: =(a 0) + hash + =+ dit=(end [3 1] a) + =/ val=@ux + ?: (gth dit '9') + (add (sub dit 'a') 10) + (sub dit '0') + $(a (rsh [3 1] a), hash (add (lsh [2 1] hash) val)) +++ print-hash-sha-1 + |= =hash + ^- tape + ((x-co:co hash-size-sha-1) hash) +++ print-hash + |= [hal=hash-algo =hash] + ^- tape + ?- hal + %sha-1 (print-hash-sha-1 hash) + %sha-256 !! + == +++ hex-dit + |= c=@C + ^- @ + ?: (lth c 0xa) + (add '0' c) + ?< (gth c 0xf) + (add 'a' (sub c 0xa)) +++ print-short-hash + |= [len=@ud =hash] + ^- @t + (cut 3 [0 len] (crip ((x-co:co 0) hash))) +++ parse-hash + |= hal=hash-algo + ?- hal + %sha-1 parse-hash-sha-1 + %sha-256 parse-hash-sha-256 + == +++ parse-hash-sha-1 + %+ cook + |=(hax=@ ;;(@ux hax)) + =* haz hash-size-sha-1 + (bass 16 (stun [haz haz] six:ab)) +++ parse-hash-sha-256 !! +++ read-hash + |= [hal=hash-algo sea=bays:bytestream] + ^- [hash bays:bytestream] + (read-msb:bytestream (hash-bytes hal) sea) +++ read-hash-maybe + |= [hal=hash-algo sea=bays:bytestream] + ^- [(unit hash) bays:bytestream] + (read-msb-maybe:bytestream (hash-bytes hal) sea) +++ write-hash + |= [sea=bays:bytestream hal=hash-algo =hash] + ^- bays:bytestream + =/ data + =+ (hash-bytes hal) + [- (rev 3 - hash)] + (write-octs:bytestream sea data) +++ append-hash + |= [sea=bays:bytestream hal=hash-algo =hash] + ^- bays:bytestream + =/ data + =+ (hash-bytes hal) + [- (rev 3 - hash)] + (append-octs:bytestream sea data) +-- diff --git a/desk/gub/lib/git/object.hoon b/desk/gub/lib/git/object.hoon new file mode 100644 index 0000000..1daa2a5 --- /dev/null +++ b/desk/gub/lib/git/object.hoon @@ -0,0 +1,374 @@ +:: git objects: commits, trees, blobs, tags +:: +:: Ported from hoon-git. +:: +:: uses bytestream from sut (Clay-compiled, jetted) +/< * /lib/git/hash.hoon +=> |% +:: ++$ object-type + $? %commit + %tree + %blob + %tag + == ++$ object-header [type=object-type size=@ud] ++$ raw-object [type=object-type size=@ud data=octs] +:: ++$ commit-person [name=tape email=tape] ++$ commit-time [date=@da zone=(pair ? @dr)] ++$ commit-signature $% [%gpg @t] + == ++$ commit-header $: tree=hash + parents=(list hash) + :: + author=commit-person + author-time=commit-time + :: + committer=commit-person + =commit-time + :: + sign=(unit commit-signature) + == ++$ commit $+ git-commit + $: commit-header + message=tape + == ++$ tree-entry [name=@ta mode=@ux =hash] ++$ tree-dir $+(git-tree (list tree-entry)) ++$ object $+ git-object + $% [%commit size=@ud =commit] + [%tree size=@ud =tree-dir] + [%blob size=@ud data=octs] + [%tag size=@ud ~] + == +:: Git object core +:: +-- +|% +++ ud-as-type + |= tid=@ud + ^- (unit object-type) + ?+ tid ~ + %1 `%commit + %2 `%tree + %3 `%blob + %4 `%tag + == +++ raw-to-octs + |= rob=raw-object + ^- octs + %- can-octs:bytestream + :~ (as-octs:mimes:html type.rob) + [1 ' '] + (as-octs:mimes:html (crip ((d-co:co 1) size.rob))) + [1 0x0] + data.rob + == +++ raw-size + |= rob=raw-object + ^- @ud + p.data.rob +++ raw-data + |= rob=raw-object + ^- octs + data.rob +++ blob-to-raw + |= blob=object + ^- raw-object + ?> ?=(%blob -.blob) + [%blob size.blob data.blob] +++ tree-to-raw + |= [hal=hash-algo dir=object] + ^- raw-object + ?> ?=(%tree -.dir) + =+ dir=tree-dir.dir + =| data=bays:bytestream + |- + ?~ dir + [%tree size=(size:bytestream data) (to-octs:bytestream data)] + =. data %+ append-octs:bytestream data + (as-octt:bytestream (print-octal mode.i.dir)) + =. data %+ append-octs:bytestream data + [1 ' '] + =. data %+ append-octs:bytestream data + (as-octs:bytestream name.i.dir) + =. data (append-byte:bytestream data 0x0) + =. data (append-hash data hal hash.i.dir) + $(dir t.dir) +++ commit-to-raw + |= [hal=hash-algo com=object] + ^- raw-object + ?> ?=(%commit -.com) + =| data=bays:bytestream + :: tree \n + =. data (append-octs:bytestream data (as-octt:bytestream "tree ")) + =. data (append-octs:bytestream data (as-octt:bytestream (print-hash hal tree.commit.com))) + =. data (append-byte:bytestream data 0xa) + :: parent \n (0 or more) + =. data + %+ roll parents.commit.com + |= [p=hash d=_data] + =. d (append-octs:bytestream d (as-octt:bytestream "parent ")) + =. d (append-octs:bytestream d (as-octt:bytestream (print-hash hal p))) + (append-byte:bytestream d 0xa) + :: author <> \n + =. data (append-octs:bytestream data (as-octt:bytestream "author ")) + =. data (append-octs:bytestream data (as-octt:bytestream (format-person author.commit.com))) + =. data (append-octs:bytestream data (as-octt:bytestream " ")) + =. data (append-octs:bytestream data (as-octt:bytestream (format-time author-time.commit.com))) + =. data (append-byte:bytestream data 0xa) + :: committer <> \n + =. data (append-octs:bytestream data (as-octt:bytestream "committer ")) + =. data (append-octs:bytestream data (as-octt:bytestream (format-person committer.commit.com))) + =. data (append-octs:bytestream data (as-octt:bytestream " ")) + =. data (append-octs:bytestream data (as-octt:bytestream (format-time commit-time.commit.com))) + =. data (append-byte:bytestream data 0xa) + :: \n + =. data (append-byte:bytestream data 0xa) + =. data (append-octs:bytestream data (as-octt:bytestream message.commit.com)) + =/ body=octs (to-octs:bytestream data) + [%commit p.body body] +:: +++ format-person + |= p=commit-person + ^- tape + "{name.p} <{email.p}>" +:: +++ format-time + |= ct=commit-time + ^- tape + =/ unix=@ud + ?: (lth date.ct ~1970.1.1) 0 + (div (sub date.ct ~1970.1.1) ~s1) + =/ zone-sign=tape ?:(-.zone.ct "+" "-") + =/ zone-secs=@ud (div +.zone.ct ~s1) + =/ zone-hrs=@ud (div zone-secs 3.600) + =/ zone-min=@ud (div (mod zone-secs 3.600) 60) + "{((d-co:co 1) unix)} {zone-sign}{(pad-2 zone-hrs)}{(pad-2 zone-min)}" +:: +++ pad-2 + |= n=@ud + ^- tape + ?:((lth n 10) "0{((d-co:co 1) n)}" ((d-co:co 1) n)) +++ obj-to-raw + |= [hal=hash-algo obj=object] + ^- raw-object + ?- -.obj + %blob (blob-to-raw obj) + %tree (tree-to-raw hal obj) + %commit (commit-to-raw hal obj) + %tag !! + == +++ hash-raw-sha-1 + |= rob=raw-object + ^- @ux + (hash-octs-sha-1 (raw-to-octs rob)) +++ hash-raw + |= [hal=hash-algo rob=raw-object] + ^- @ux + ?- hal + %sha-1 (hash-raw-sha-1 rob) + %sha-256 !! + == +++ hash-obj + |= [hal=hash-algo obj=object] + ^- @ux + (hash-raw hal (obj-to-raw hal obj)) +++ print-hash + |= [hal=hash-algo =hash] + ^- tape + ?- hal + %sha-1 + (print-hash-sha-1 hash) + :: + %sha-256 !! + == +++ raw-from-octs + |= =octs + ^- raw-object + =/ pin (find-byte:bytestream 0x0 (from-octs:bytestream octs)) + ?~ pin + ~| "Object is corrupted: no header terminator found" !! + =/ txt (trip (cut 3 [0 u.pin] q.octs)) + =/ hed (rust txt ;~(plug sym ;~(pfix ace dim:ag))) + ?~ hed + ~| "Object is corrupted: invalid header" !! + =+ [type=@tas size=@ud]=u.hed + ?. =(size (sub p.octs +(u.pin))) + ~| "Object is corrupted: incorrect object length" !! + =/ type=object-type + ?+ type ~| "Object corrupted: unknown type {}" !! + %blob %blob + %commit %commit + %tree %tree + %tag !! + == + =/ sea=bays:bytestream (from-octs:bytestream octs) + =/ data + (peek-octs-end:bytestream (seek-to:bytestream +(u.pin) sea)) + [type size data] +++ parse-raw + |= [hal=hash-algo rob=raw-object] + ^- object + ?- type.rob + %blob (parse-blob hal rob) + %commit (parse-commit hal rob) + %tree (parse-tree hal rob) + %tag !! + == +++ parse-blob + |= [hal=hash-algo rob=raw-object] + ^- object + (~(blob parse hal) rob) +++ parse-commit + |= [hal=hash-algo rob=raw-object] + ^- object + ?> ?=(%commit type.rob) + =+ txt=(trip q:(raw-data rob)) + =+ com=(~(commit parse hal) [[1 1] txt]) + ?~ q.com + ~& txt + ~| "Failed to parse commit object: syntax error {} in {txt}" !! + commit+[size.rob p.u.q.com] +:: +++ parse-tree + |= [hal=hash-algo rob=raw-object] + ^- object + ?> ?=(%tree type.rob) + =/ sea=bays:bytestream (from-octs:bytestream data.rob) + =+ hash-bytes=(hash-bytes hal) + =/ tes=(list tree-entry) ~ + |- + ?: (is-empty:bytestream sea) + tree+[size.rob tes] + =/ pin (find-byte:bytestream 0x0 sea) + ?~ pin !! + =^ tex=(unit octs) sea + (read-octs-until-maybe:bytestream u.pin sea) + =. sea (skip-byte:bytestream sea) + ?~ tex + ~| "Corrupted tree object: invalid tree entry" !! + =^ hash=(unit hash) sea + (read-hash-maybe hal sea) + ?~ hash + ~| "Corrupted tree object: hash not found" !! + =+ (scan (trip q.u.tex) ;~(plug tree-mode:parse tree-node:parse)) + =/ ent=tree-entry [+.- -.- u.hash] + $(tes [ent tes]) +++ parse + |_ hal=hash-algo + ++ hash + ^~ + ?- hal + %sha-1 parse-hash-sha-1 + %sha-256 parse-hash-sha-256 + == + ++ blob + |= rob=raw-object + ^- object + ?> ?=(%blob type.rob) + blob+[size.rob data.rob] + ++ eol (just '\0a') + ++ tree ;~(pfix (jest 'tree ') hash) + ++ parent ;~(pfix (jest 'parent ') hash) + ++ person + ;~ plug + ;~(sfix (star ;~(less ;~(plug ace gal) prn)) ;~(plug ace gal)) + ;~(sfix (star ;~(less gar prn)) gar) + == + ++ zone + %+ cook + |= [s=? hor=@ud min=@ud] + ^- (pair ? @dr) + :- s + `@dr`(add (mul hor ~h1) (mul min ~m1)) + ;~ plug + ;~(pose (cold %& lus) (cold %| hep)) + (bass 10 ;~(plug sid:ab sid:ab (easy ~))) + (bass 10 ;~(plug sid:ab sid:ab (easy ~))) + == + ++ date + %+ cook + |= sec=@ud + ^- @da + (add ~1970.1.1 (mul ~s1 sec)) + dip:ag + ++ time + ;~(plug date ;~(pfix ace zone)) + ++ message (star ;~(pose prn eol)) + ++ gpg-header-begin + ;~ pose + (jest '-----BEGIN PGP SIGNATURE-----') + (jest '-----BEGIN PGP MESSAGE-----') + == + ++ gpg-header-end + ;~ pose + (jest '-----END PGP SIGNATURE-----') + (jest '-----END PGP MESSAGE-----') + == + ++ commit-signature + ;~ pfix + ;~ plug + (jest 'gpgsig') + ace + gpg-header-begin + == + ;~ sfix + (stag %gpg (cook crip (plus ;~(less hep ;~(pose prn gah))))) + ;~(plug gpg-header-end ;~(less prn (star gah))) + == + == + ++ commit + ;~ plug + ;~ plug + ;~(sfix tree eol) + (star ;~(sfix parent eol)) + ;~(pfix (jest 'author ') person) + ;~(pfix ace ;~(sfix time eol)) + ;~(pfix (jest 'committer ') person) + ;~(pfix ace ;~(sfix time eol)) + (punt commit-signature) + == + ;~(pfix (star gah) message) + == + ++ parse-octal (bass 8 (plus cit)) + ++ tree-mode ;~(sfix parse-octal ace) + ++ tree-node (cook crip (plus prn)) + -- +++ print-octal + (em-co:co [8 0] |=([? b=@ c=tape] [(add '0' b) c])) +++ parse-octal + |= txt=tape + (scan txt parse-octal:parse) +++ ifinvalid ^~ (parse-octal "0030000") +++ ifmt ^~ (parse-octal "0170000") +++ ifsock ^~ (parse-octal "0140000") +++ iflnk ^~ (parse-octal "0120000") +++ ifreg ^~ (parse-octal "0100000") +++ ifblk ^~ (parse-octal "0060000") +++ ifdir ^~ (parse-octal "0040000") +++ ifchr ^~ (parse-octal "0020000") +++ ififo ^~ (parse-octal "0010000") +++ isuid ^~ (parse-octal "0004000") +++ isgid ^~ (parse-octal "0002000") +++ isvtx ^~ (parse-octal "0001000") +++ ifgitlink ^~ (parse-octal "0160000") +:: +++ file-type + |= ent=tree-entry + ^- @ux + (dis ifmt mode.ent) +++ is-regular + |= ent=tree-entry + ^- ? + =(ifreg (dis ifreg mode.ent)) +++ is-dir + |= ent=tree-entry + ^- ? + =(ifdir (dis ifdir mode.ent)) +++ is-gitlink + |= ent=tree-entry + ^- ? + =(ifgitlink (dis ifgitlink mode.ent)) +-- diff --git a/desk/gub/lib/git/pack.hoon b/desk/gub/lib/git/pack.hoon new file mode 100644 index 0000000..6aa42fd --- /dev/null +++ b/desk/gub/lib/git/pack.hoon @@ -0,0 +1,515 @@ +:: git pack: packfile reading and indexing +:: +:: Ported from hoon-git. +:: +:: uses bytestream + zlib from sut (Clay-compiled, jetted) +/< * /lib/git/hash.hoon +/< * /lib/git/object.hoon +=> |% ++$ pack-object-type $? object-type + %ofs-delta + %ref-delta + == ++$ pack-object-header [type=pack-object-type size=@ud] ++$ pack-object $% raw-object + [%ofs-delta pos=@ud base-offset=@ud =octs] + [%ref-delta pos=@ud =hash =octs] + == ++$ pack-delta-object $>(?(%ofs-delta %ref-delta) pack-object) + ++$ pack-header [version=%2 count=@ud] +++ hash-cmp gth ++$ pack-index ((mop hash @ud) hash-cmp) +++ pack-on ((on hash @ud) hash-cmp) ++$ pack-cache [count=@ud store=(list (pair @ud raw-object))] ++$ pack $: =hash-algo + count=@ud + index=pack-index + end-pos=@ud + stream=bays:bytestream + == ++$ store-raw-get $-(hash (unit raw-object)) +-- +=> |% +++ read + |= sea=bays:bytestream + ^- pack + (read-thin sea |=(* !!)) +++ read-thin + |= [sea=bays:bytestream get=store-raw-get] + ^- pack + =+ start=pos.sea + =^ header=pack-header sea (read-header sea) + =+ beg-pos=pos.sea + =^ [=pack miss=(list raw-object)] + sea (index header sea get) + =+ end=pos.sea + =^ hash sea + (read-hash-maybe (pack-hash-algo header) sea) + ?~ hash + ~| "Pack file is corrupted: no checksum found" !! + =+ len=(sub end start) + =+ check=(hash-octs-sha-1 len (rsh [3 start] q.data.sea)) + ?> =(u.hash check) + pack(pos.stream beg-pos) +:: +++ read-header + |= sea=bays:bytestream + ^- [pack-header bays:bytestream] + =^ sig sea (read-octs-maybe:bytestream 4 sea) + ?~ sig + ~| "Pack file is corrupted: no signature found" !! + ?. =(q.u.sig 'PACK') + ~| "Pack file is corrupted: invalid signature {<`@t`q.u.sig>} ({} bytes)" !! + =^ version sea (read-octs-maybe:bytestream 4 sea) + ?~ version + ~| "Pack file is corrupted: no version found" !! + =^ count sea (read-octs-maybe:bytestream 4 sea) + ?~ count + ~| "Pack file is corrupted: no object count found" !! + =+ ver=(rev 3 4 q.u.version) + =+ cot=(rev 3 4 q.u.count) + ?> ?=(%2 ver) + :_ sea + [ver cot] +++ insert-objects + |= [=pack list=(list raw-object)] + ^- ^pack + ?~ list + pack + =+ start=pos.stream.pack + =. pos.stream.pack end-pos.pack + =. pack + %+ roll `(^list raw-object)`list + |= [rob=raw-object =_pack] + %= pack + stream + %+ write-octs:bytestream stream.pack + (raw-to-octs rob) + index + =+ hash=(hash-raw %sha-1 rob) + %^ put:pack-on index.pack + hash + pos.stream.pack + count +(count.pack) + == + =+ sea=stream.pack + =+ end-pos=pos.sea + =+ hash=(hash-octs-sha-1 data.sea) + =. sea (append-octs:bytestream sea [20 hash]) + pack(stream sea(pos start)) +:: +++ pack-hash-bytes + |= hed=pack-header + ^- @ud + ?- version.hed + %2 20 + == +++ pack-hash-algo + |= hed=pack-header + ^- hash-algo + ?- version.hed + %2 %sha-1 + == +:: +++ index + |= $: header=pack-header + sea=bays:bytestream + get=store-raw-get + == + ^- [[pack (list raw-object)] bays:bytestream] + =+ start=pos.sea + =| count=@ud + =/ step=@ud + =- ?:((gth - 0) - 1) + (div count.header 10) + =| index=pack-index + =+ cache-limit=10 + =| cache=pack-cache + =| miss=(list raw-object) + =^ [=_index =_miss] sea + |- + ?. (lth count count.header) + :_ sea + [index miss] + ?: (is-empty:bytestream sea) + ~| "Expected {} objects ({} processed)" + !! + ~? > =(0 (mod count step)) + indexing-objects+"{<+(count)>}/{}" + =+ beg=pos.sea + =^ pob=pack-object sea (read-pack-object sea) + =/ [rob=raw-object miso=(unit raw-object)] + (resolve-raw-object-miss pob index cache sea get) + =+ hash=(hash-raw (pack-hash-algo header) rob) + ?: (~(has by index) hash) + ~| "Object {} duplicated: indexed at {<(~(get by index) hash)>}" !! + =? cache ?=(pack-delta-object pob) + =? cache =(count.cache cache-limit) + =+ new=(sub count.cache 5) + %= cache + count new + store (scag new store.cache) + == + %= cache + count +(count.cache) + store [[beg rob] store.cache] + == + %= $ + index (put:pack-on index hash beg) + count +(count) + miss ?~(miso miss [u.miso miss]) + == + :_ sea + :_ miss + :- (pack-hash-algo header) + [count.header index end-pos=pos.sea (seek-to:bytestream start sea)] +:: +++ resolve-raw-object-miss + |= $: pob=pack-object + index=pack-index + cache=pack-cache + sea=bays:bytestream + get=store-raw-get + == + ^- [raw-object (unit raw-object)] + ?: ?=(raw-object pob) + [pob ~] + (resolve-delta-object pob index cache sea get) +++ resolve-delta-object + |= $: delta=pack-delta-object + index=pack-index + cache=pack-cache + sea=bays:bytestream + get=store-raw-get + == + ^- [raw-object (unit raw-object)] + =/ chain=(lest pack-delta-object) + ~[delta] + =^ base=raw-object chain + |- + =+ pob=i.chain + =/ kob=pack-object + ?- -.pob + %ofs-delta + =+ pos=(sub pos.pob base-offset.pob) + =* store store.cache + =/ cob=(unit raw-object) + |- ?~ store ~ + ?: =(pos p.i.store) + (some q.i.store) + $(store t.store) + ?^ cob + u.cob + -:(read-pack-object (seek-to:bytestream pos sea)) + %ref-delta + =/ pos=(unit @ud) + (get:pack-on index hash.pob) + ?~ pos + (need (get hash.pob)) + =* store store.cache + =/ cob=(unit raw-object) + |- ?~ store ~ + ?: =(pos p.i.store) + (some q.i.store) + $(store t.store) + ?^ cob + u.cob + -:(read-pack-object (seek-to:bytestream u.pos sea)) + == + ?: ?=(pack-delta-object kob) + $(chain [kob chain]) + [kob chain] + =+ res=(resolve-delta-chain base chain sea) + ?. (has:pack-on index (hash-raw %sha-1 base)) + [res `base] + [res ~] +++ resolve-raw-object + |= $: pob=pack-object + index=pack-index + cache=pack-cache + sea=bays:bytestream + get=store-raw-get + == + ^- raw-object + -:(resolve-raw-object-miss pob index cache sea get) +++ resolve-delta-chain + |= $: base=raw-object + chain=(list pack-delta-object) + sea=bays:bytestream + == + ^- raw-object + |- + ?~ chain + base + =+ delta=i.chain + %= $ + chain t.chain + base (expand-delta-object base delta) + == +++ expand-delta-object + |= [base=raw-object delta=pack-delta-object] + ^- raw-object + =/ sea=bays:bytestream (from-octs:bytestream octs.delta) + =^ biz=@ud sea (read-object-size sea) + =^ siz=@ud sea (read-object-size sea) + ?> =(size.base biz) + =| data=octs + =< + |- + ?: (is-empty:bytestream sea) + ?> =(p.data siz) + [type.base p.data data] + =^ bat sea (read-byte:bytestream sea) + ?: =(0x0 bat) + ~| "+expand-delta-object: reserved instruction 0x0" !! + =^ chunk sea + ?: =(0 (dis bat 0x80)) + (add-data bat sea) + (copy-data bat sea) + $(data (cat-octs:bytestream data chunk)) + :: + |% + ++ add-data + |= [bat=@uxD sea=bays:bytestream] + ^- [octs bays:bytestream] + =+ siz=(dis bat 0x7f) + (read-octs:bytestream siz sea) + ++ read-cp-param + |= [var=@D [bat=@D bit=@D shift=@ud] sea=bays:bytestream] + ^- [@D bays:bytestream] + ?: =(0 (dis bat bit)) + :_ sea + var + =^ byt sea (read-byte:bytestream sea) + :_ sea + (add var (lsh [3 shift] byt)) + ++ copy-data + |= [bat=@D sea=bays:bytestream] + ^- [octs bays:bytestream] + =| offset=@ud + =| size=@ud + =^ oft sea + (read-cp-param offset [bat 0x1 0] sea) + =. offset oft + =^ oft sea + (read-cp-param offset [bat 0x2 1] sea) + =. offset oft + =^ oft sea + (read-cp-param offset [bat 0x4 2] sea) + =. offset oft + =^ oft sea + (read-cp-param offset [bat 0x8 3] sea) + =. offset oft + :: + =^ siz sea + (read-cp-param size [bat 0x10 0] sea) + =. size siz + =^ siz sea + (read-cp-param size [bat 0x20 1] sea) + =. size siz + =^ siz sea + (read-cp-param size [bat 0x40 2] sea) + =. size siz + =? size =(0 size) + `@ud`0x1.0000 + :_ sea + [size (cut 3 [offset size] q.data.base)] + -- +:: +++ read-with-index + |= [=pack =hash] + ^- [pack-object bays:bytestream] + =+ pin=(got:pack-on index.pack hash) + (read-pack-object (seek-to:bytestream pin stream.pack)) +++ read-pack-object + |= sea=bays:bytestream + ^- [pack-object bays:bytestream] + =+ pos=pos.sea + =^ [type=pack-object-type size=@ud] sea + (read-pack-object-header sea) + ?+ type + =^ data=octs sea (decompress-zlib:zlib sea) + ?. =(p.data size) + ~| "Object is corrupted: size mismatch (stated {}b uncompressed {}b)" !! + :_ sea + [type size data] + :: + %ofs-delta (read-object-ofs pos sea) + :: + %ref-delta (read-object-ref pos sea) + :: + == +:: +++ read-object-ref + |= [pos=@ud sea=bays:bytestream] + ^- [pack-delta-object bays:bytestream] + =^ =hash sea (read-hash sea) + =^ =octs sea (decompress-zlib:zlib sea) + :_ sea + [%ref-delta pos hash octs] +++ read-hash + |= sea=bays:bytestream + ^- [hash bays:bytestream] + =^ octs sea (read-octs:bytestream 20 sea) + :_ sea + q:octs +++ read-object-ofs + |= [pos=@ud sea=bays:bytestream] + ^- [pack-delta-object bays:bytestream] + =^ base-offset=@ud sea (read-offset sea) + ?< |(=(0 base-offset) (gte base-offset pos)) + =^ dat sea (decompress-zlib:zlib sea) + :_ sea + [%ofs-delta pos base-offset dat] +:: +++ read-offset + |= sea=bays:bytestream + ^- [@ud bays:bytestream] + =+ fet=0 + |- + =^ bat sea (read-byte:bytestream sea) + =+ tef=(add (lsh [0 7] fet) (dis 0x7f bat)) + ?: =(0 (dis 0x80 bat)) + :_ sea + tef + $(fet +(tef)) +:: +++ read-pack-object-header + |= sea=bays:bytestream + ^- [pack-object-header bays:bytestream] + =^ bat sea (read-byte:bytestream sea) + =+ tap=(dis (rsh [2 1] bat) 0x7) + =/ typ (to-object-type tap) + ?~ typ + ~| "Invalid pack object type {}" !! + =/ siz=@ud (dis bat 0xf) + ?: =(0 (dis bat 0x80)) + :_ sea + [u.typ siz] + =^ tiz=@ud sea (read-object-size sea) + =. siz (add (lsh [0 4] tiz) siz) + :_ sea + [u.typ siz] +:: +++ read-object-size + |= sea=bays:bytestream + ^- [@ud bays:bytestream] + =| bits=@ud + =| size=@ud + |- + =^ bat sea (read-byte:bytestream sea) + ?: =(0 (dis bat 0x80)) + :_ sea + (add size (lsh [0 bits] bat)) + %= $ + size (add size (lsh [0 bits] (dis bat 0x7f))) + bits (add bits 7) + == +++ to-object-type + |= ryt=@ud + ^- (unit pack-object-type) + ?+ ryt ~ + %1 `%commit + %2 `%tree + %3 `%blob + %4 `%tag + %6 `%ofs-delta + %7 `%ref-delta + == +:: +++ is-delta + |= kob=pack-object + ^- ? + ?=(?(%ofs-delta %ref-delta) -.kob) +:: +:: Pack interface +:: +-- +|_ pak=pack +++ get-raw + |= hax=hash + ^- (unit raw-object) + =+ pin=(get:pack-on index.pak hax) + ?~ pin + ~ + =+ sea=(seek-to:bytestream u.pin stream.pak) + =^ pob sea (read-pack-object sea) + `(resolve-raw-object pob index.pak *pack-cache sea |=(* !!)) +++ get-raw-thin + |= [hax=hash get=store-raw-get] + ^- (unit raw-object) + =+ pin=(get:pack-on index.pak hax) + ?~ pin + ~ + =+ sea=(seek-to:bytestream u.pin stream.pak) + =^ pob sea (read-pack-object sea) + `(resolve-raw-object pob index.pak *pack-cache sea get) +++ get + |= hax=hash + ^- (unit object) + =+ obe=(get-raw hax) + (bind obe (cury parse-raw hash-algo.pak)) +++ get-header + |= hax=hash + ^- (unit object-header) + =+ pin=(get:pack-on index.pak hax) + ?~ pin + ~ + =+ offset=u.pin + |- + =/ sea (seek-to:bytestream offset stream.pak) + =^ header=pack-object-header sea + (read-pack-object-header sea) + ?: ?=(object-header header) + `header + ?> ?=(%ofs-delta type.header) + $(offset (sub offset -:(read-offset sea))) +++ got-raw + |= hax=hash + ^- raw-object + =+ pin=(get:pack-on index.pak hax) + ?~ pin !! + =+ sea=(seek-to:bytestream u.pin stream.pak) + =^ pob=pack-object sea (read-pack-object sea) + (resolve-raw-object pob index.pak *pack-cache sea |=(* !!)) +++ got + |= hax=hash + ^- object + =+ obe=(got-raw hax) + (parse-raw hash-algo.pak obe) +++ got-header + |= =hash + ^- object-header + (need (get-header hash)) +++ has + |= =hash + ^- ? + (has:pack-on index.pak hash) +++ find-by-key + |= a=@ta + ^- (list hash) + =+ kex=(txt-to-hash a) + =+ key=[(met 3 a) kex] + =+ len=(met 3 (crip ((x-co:co 0) +(kex)))) + =| hey=(list @ux) + =< - + %^ (dip:pack-on _hey) + index.pak + hey + |= [hey=(list @ux) item=[hash @ud]] + ?. (compare:pack-on -.item kex) + [`+.item & hey] + ?: (match-key (hash-size hash-algo.pak) key -.item) + [`+.item & [-.item hey]] + [`+.item | hey] +++ match-key + |= [size=@ud a=octs b=@ux] + ^- ? + ?: =(a b) + & + .= q.a + %+ cut 2 + :_ b + [0 p.a] +-- diff --git a/desk/gub/lib/git/refs.hoon b/desk/gub/lib/git/refs.hoon new file mode 100644 index 0000000..9f67c8b --- /dev/null +++ b/desk/gub/lib/git/refs.hoon @@ -0,0 +1,134 @@ +:: git refs: reference names and ref store +:: +:: Ported from hoon-git. +:: +:: uses bytestream from sut (Clay-compiled, jetted) +/< * /lib/git/hash.hoon +=> |% ++$ refname $+(refname (list @t)) ++$ ref $@(hash [%symref =refname]) ++$ refs $+(git-refs (axal ref)) +:: +-- +|% +++ refspace + |% + ++ head ['HEAD' ~] + ++ branches /refs/heads + ++ tags /refs/tags + ++ remote /refs/remotes + ++ prefetch /refs/prefetch + -- +++ has-pattern + |= =refname + ^- ? + |- + ?~ refname | + ?^ (find-byte:bytestream '*' 0+(as-octs:bytestream i.refname)) + & + $(refname t.refname) +++ pattern-to-prefix + |= pat=refname + ^- refname + =| pix=refname + |- + ?~ pat (flop pix) + ?: =('*' i.pat) + (flop pix) + =+ glob=(find-byte:bytestream '*' 0+(as-octs:bytestream i.pat)) + ?~ glob + $(pat t.pat, pix [i.pat pix]) + (flop [(cut 3 [0 u.glob] i.pat) pix]) +++ expand-ref-prefix + |= pix=refname + ^- (list refname) + :~ pix + (weld /refs pix) + (weld /refs/tags pix) + (weld /refs/heads pix) + (weld /refs/remotes pix) + :(weld /refs/remotes pix ['HEAD' ~]) + == +++ print-ref + |= =ref + ^- tape + ?@ ref + (print-hash-sha-1 ref) + "symref: {}" +++ print-refname + |= =refname + ^- @t + ?~ refname %$ + =+ pri=i.refname + =+ refname=t.refname + |- + ?~ refname pri + ?: =(%$ i.refname) + $(pri (cat 3 pri '/'), refname t.refname) + %= $ + refname t.refname + pri :((cury cat 3) pri '/' i.refname) + == +++ parse-refname refname:parse +++ parse-raw-refname raw-refname:parse +++ parse-raw-pattern-refname raw-pattern-refname:parse +++ parse-refname-ext refname-ext:parse +:: +++ parse + |% + ++ except + ;~ pose + col wut + sel bas + ket sig + ace fas + == + ++ char + ;~ less + except + ;~(plug dot dot) + ;~(plug pat kel) + prn + == + ++ segment + %+ cook crip + ;~ plug + ;~(less dot char) + (star char) + == + ++ refname + ;~ less + pat + (more fas segment) + == + ++ refname-ext ;~(sfix refname (punt fas)) + ++ raw-refname + %+ cook + |=(a=tape ^-(@t (rap 3 a))) + (star ;~(pose nud hig low hep dot sig cab fas)) + ++ raw-pattern-refname + %+ cook + |=(a=tape ^-(@t (rap 3 a))) + (star ;~(pose nud hig low hep dot sig cab fas tar)) + -- +++ refname-one-level 0x1 +++ refname-pattern 0x2 +:: +++ has-flag + |= [lag=@uxD flags=@uxD] + ^- ? + !=(0 (dis lag flags)) +++ sane-refname + |= [=refname flags=@uxD] + ^- ? + ?~ refname | + =+ rear=(rear refname) + =+ last=(cut 3 [(dec (met 3 rear)) 1] rear) + ?: =('.' last) + | + ?: ?& !(has-flag refname-one-level flags) + (lth (lent refname) 2) + == + | + & +-- diff --git a/desk/gub/lib/git/refspec.hoon b/desk/gub/lib/git/refspec.hoon new file mode 100644 index 0000000..9075f90 --- /dev/null +++ b/desk/gub/lib/git/refspec.hoon @@ -0,0 +1,174 @@ +:: git refspec: reference specifications +:: +:: Ported from hoon-git. +:: +/< * /lib/git/refs.hoon +=> |% ++$ raw-refspec + [opt=(unit @tD) src=@t dst=(unit @t)] ++$ refspec + $: force=_| + negative=_| + pattern=_| + matching=_| + hash=_| + src=$~([%ref ~] $@(hash [%ref ref=refname])) + dst=(unit refname) + == +-- +|% +++ sane-refspec + |= [=refspec fetch=_|] + & +++ map-refname + |= [=refspec ref=refname] + ^- (unit refname) + ?. pattern.refspec ~ + ?@ src.refspec ~ + =+ src=(pattern-to-prefix ref.src.refspec) + =/ sub=(unit refname) + |- + ?~ src `ref + ?~ ref `ref + ?. =(i.src i.ref) ~ + $(src t.src, ref t.ref) + ?~ sub sub + %- some + (weld (pattern-to-prefix (need dst.refspec)) u.sub) +++ ref-prefixes + |= [=refspec fetch=_|] + ^- (list refname) + =, refspec + =/ base=(unit refname) + ?: |(hash negative) + ~ + ?: fetch + `+.src + ?: ?=(^ dst) + dst + ?: !hash + `+.src + ~ + ?~ base ~ + ?: pattern + ~[(pattern-to-prefix u.base)] + :~ u.base + (weld /refs u.base) + (weld /refs/heads u.base) + (weld /refs/tags u.base) + == +++ parse-refspec refspec:parse +++ parse-raw-refspec raw-refspec:parse +++ raw-to-refspec + |= [raw=raw-refspec fetch=?] + ^- (unit refspec) + =+ src=(scan (trip src.raw) refspec-src:parse) + =/ dst=(unit refname) + ?~ dst.raw ~ + %- some + (scan (trip u.dst.raw) refspec-dst:parse) + (to-refspec opt.raw src dst fetch) +++ to-refspec + |= $: opt=(unit @t) + src=$@(hash [%ref refname]) + dst=(unit refname) + fetch=? + == + ^- (unit refspec) + =/ force=? + ?&(?=(^ opt) =('+' u.opt)) + =/ negative=? + ?&(?=(^ opt) =('^' u.opt)) + =| =refspec + ?: &(negative ?=(^ dst)) + ~| "Invalid negative refspec" ~ + ?: ?& !fetch + ?=([%ref %$] src) + ?=([~ %$] dst) + == + `refspec(matching &) + =| dst-glob=_| + =? dst-glob ?=(^ dst) + (has-pattern u.dst) + =/ src-glob=? + ?@ src | + (has-pattern src) + ?: ?: src-glob + ?| &(?=(^ dst) !dst-glob) + &(?=(~ dst) !negative fetch) + == + ?& ?=(^ dst) + dst-glob + == + ~| "Invalid wildcard refspec" ~ + =/ pattern |(src-glob dst-glob) + =/ flags + (con refname-one-level ?.(pattern 0 refname-pattern)) + =/ sane-src=? + ?@ src & + (sane-refname +.src flags) + ?: ?& negative + ?| ?=(~ src) + ?=(hash src) + !sane-src + == + == + ~| "Invalid negative refspec" ~ + ?: ?& fetch + ?| &(!?=(~ src) !sane-src) + &(?=(^ dst) !?=(~ u.dst) !(sane-refname u.dst flags)) + == + == + ~| "Invalid fetch refspec" ~ + ?: ?& !fetch + ?| &(pattern !sane-src) + ?~ dst + !sane-src + !(sane-refname u.dst flags) + == + == + ~| "Invalid push refspec" ~ + %- some + %= refspec + force force + negative negative + pattern pattern + hash ?=(@ src) + src src + dst dst + == +++ parse + |% + ++ refspec-opt + (punt ;~(pose lus ket)) + ++ refspec-src + ;~ pose + parse-hash-sha-1 + (stag %ref (cold ['HEAD' ~] pat)) + (stag %ref parse-refname) + == + ++ refspec-dst parse-refname + ++ refspec + |* fetch=? + %+ cook + |= $: opt=(unit @t) + src=$@(hash [%ref refname]) + dst=(unit refname) + == + (need (to-refspec opt src dst fetch)) + ;~ plug + refspec-opt + refspec-src + (punt ;~(pfix col refspec-dst)) + == + ++ raw-refspec + ;~ plug + (punt ;~(pose lus ket)) + ;~ pose + pat + parse-raw-pattern-refname + == + (punt ;~(pfix col parse-raw-pattern-refname)) + == + -- +-- diff --git a/desk/gub/lib/git/repository.hoon b/desk/gub/lib/git/repository.hoon new file mode 100644 index 0000000..d11183c --- /dev/null +++ b/desk/gub/lib/git/repository.hoon @@ -0,0 +1,233 @@ +:: git repository: object store, refs, remotes +:: +:: Ported from hoon-git. Simplified config (no mip dependency). +:: +/< * /lib/git/object.hoon +/< * /lib/git/refs.hoon +/< * /lib/git/refspec.hoon +/< git-pack /lib/git/pack.hoon +/< git-bundle /lib/git/bundle.hoon +=> |% ++$ object-store $: loose=(map hash object) + archive=(list pack:git-pack) + == ++$ remote $: url=@t + fetch=(list refspec) + push=(list refspec) + == ++$ branch $: remote=@tas + push-remote=@tas + merge=(list refname) + == +:: ++$ repository + $+ repository + $: =hash-algo + =object-store + =refs + remotes=(map @tas remote) + branches=(map refname branch) + == +-- +:: +:: Git repository engine +:: +|_ repo=repository ++* this . +++ clone-from-bundle + |= =bundle:git-bundle + ^- repository + ?^ need.header.bundle + ~| "Bundle contains prerequisites" !! + =. repo (add-pack:store pack.bundle) + ?< ?=(~ archive.object-store.repo) + %= repo + refs + %+ roll refs.header.bundle + |= [ref=(pair path hash) =^refs] + ?> (has:store q.ref) + (~(put of refs) ref) + == +++ clone-from-pack + |= [=pack:git-pack ref-list=(list [=hash =refname])] + ^- repository + =. repo (add-pack:store pack) + %= repo + refs + %+ roll ref-list + |= [[=hash =refname] =^refs] + (~(put of refs) [refname hash]) + == +++ remote + |% + ++ get-url + |= remote=@ta + ^- (unit @t) + =+ remote=(~(get by remotes.repo) remote) + ?~ remote ~ + `url.u.remote + ++ got-url + |= remote=@ta + (need (get-url remote)) + -- +++ store + |% + ++ add-pack + |= =pack:git-pack + ^- repository + repo(archive.object-store [pack archive.object-store.repo]) + ++ get + |= =hash + ^- (unit object) + =+ loose=(~(get by loose.object-store.repo) hash) + ?^ loose + loose + %+ bind (get-raw hash) + (cury parse-raw %sha-1) + ++ get-commit + |= =hash + ^- (unit commit) + =+ obj=(get hash) + ?~ obj ~ + ?> ?=(%commit -.u.obj) + (some commit.u.obj) + ++ get-tree + |= =hash + ^- (unit tree-dir) + =+ obj=(get hash) + ?~ obj ~ + ?> ?=(%tree -.u.obj) + (some tree-dir.u.obj) + ++ get-blob + |= =hash + ^- (unit octs) + =+ obj=(get hash) + ?~ obj ~ + ?. ?=(%blob -.u.obj) ~ + (some data.u.obj) + ++ got + |= =hash + ^- object + (need (get hash)) + ++ got-commit + |= =hash + ^- commit + =+ obj=(got hash) + ?> ?=(%commit -.obj) + commit.obj + ++ got-tree + |= =hash + ^- tree-dir + =+ obj=(got hash) + ?> ?=(%tree -.obj) + tree-dir.obj + ++ got-blob + |= =hash + ^- octs + =+ obj=(got hash) + ?> ?=(%blob -.obj) + data.obj + ++ get-header + |= =hash + ^- (unit object-header) + =+ loose=(~(get by loose.object-store.repo) hash) + ?^ loose + `[-.u.loose size.u.loose] + %+ roll archive.object-store.repo + |= [=pack:git-pack obj=(unit object-header)] + ?~ obj + (~(get-header git-pack pack) hash) + obj + ++ got-header + |= =hash + ^- object-header + (need (get-header hash)) + ++ get-raw + |= =hash + ^- (unit raw-object) + =+ loose=(~(get by loose.object-store.repo) hash) + ?^ loose + (some (obj-to-raw hash-algo.repo u.loose)) + %+ roll archive.object-store.repo + |= [=pack:git-pack obj=(unit raw-object)] + ?~ obj + =+ rob=(~(get-raw-thin git-pack pack) hash get-raw) + rob + obj + ++ has + |= =hash + ^- ? + ?| (~(has by loose.object-store.repo) hash) + %+ lien archive.object-store.repo + |=(=pack:git-pack (~(has git-pack pack) hash)) + == + ++ find-by-key + |= a=@ta + ^- (unit hash) + =+ kex=(txt-to-hash a) + =+ key=[(met 3 a) kex] + =/ match=(list hash) + %+ skim ~(tap in ~(key by loose.object-store.repo)) + (cury (cury match-key:git-pack 40) key) + ?^ match + (some (head match)) + =| match=(list hash) + =. match + %+ roll archive.object-store.repo + |= [=pack:git-pack =_match] + %+ weld + (~(find-by-key git-pack pack) a) + match + ?~ match ~ + (some (head match)) + -- +++ refs + |% + ++ has + |= =refname + ^- ? + ?=(^ (~(get of refs.repo) refname)) + ++ resolve + |= =refname + ^- (unit ^refname) + =+ fil=(~(get of refs.repo) refname) + ?~ fil ~ + ?@ u.fil + (some refname) + (some refname.u.fil) + ++ get + |= =refname + ^- (unit hash) + =+ fil=(~(get of refs.repo) refname) + ?~ fil ~ + ?@ u.fil + fil + $(refname refname.u.fil) + ++ got + |= =refname + ^- hash + =+ ref=(get refname) + ?~ ref + ~| "Refname {} not found" !! + u.ref + ++ tap (tap-prefix ~) + ++ tap-prefix + |= prefix=refname + ^- (list [refname hash]) + %+ turn + ~(tap of (~(dip of refs.repo) prefix)) + |= [=refname =ref] + ?@ ref + [refname ref] + [refname (got refname)] + ++ tap-prefix-full + |= prefix=refname + ^- (list [refname hash]) + %+ turn + ~(tap of (~(dip of refs.repo) prefix)) + |= [=refname =ref] + ?@ ref + [(weld prefix refname) ref] + [(weld prefix refname) (got refname)] + -- +-- diff --git a/desk/gub/lib/git/transport.hoon b/desk/gub/lib/git/transport.hoon new file mode 100644 index 0000000..721642a --- /dev/null +++ b/desk/gub/lib/git/transport.hoon @@ -0,0 +1,340 @@ +:: git/transport: smart HTTP protocol +:: +:: Pure functions for parsing/building git smart HTTP protocol +:: messages. The caller handles actual HTTP requests. +:: +/< * /lib/git/hash.hoon +/< * /lib/git/object.hoon +/< * /lib/git/refs.hoon +|% ++$ git-ref [=hash =refname] ++$ discovery [caps=(set @t) refs=(list git-ref)] +:: +:: +default-branch: extract default branch from discovery caps +:: +:: Parses symref=HEAD:refs/heads/ capability +:: +++ default-branch + |= caps=(set @t) + ^- (unit @t) + =/ prefix=tape "symref=HEAD:refs/heads/" + =/ plen=@ud (lent prefix) + =/ match=(unit @t) + %- ~(rep in caps) + |= [cap=@t found=(unit @t)] + ?^ found found + =/ t=tape (trip cap) + ?. =(prefix (scag plen t)) ~ + `(crip (slag plen t)) + match +:: +:: +list-branches: extract branch names from discovery refs +:: +++ list-branches + |= ref-list=(list git-ref) + ^- (list @t) + =/ prefix=refname ~['refs' 'heads'] + %+ murn ref-list + |= r=git-ref + ?. =(prefix (scag 2 refname.r)) ~ + `(crip (join '/' (turn (slag 2 refname.r) trip))) +:: +:: +parse-discovery: parse GET /info/refs?service=git-upload-pack +:: +:: Response is pkt-line encoded: +:: 001e# service=git-upload-pack\n +:: 0000 +:: 00xx \0\n (first ref has caps) +:: 00xx \n +:: ... +:: 0000 +:: +++ parse-discovery + |= body=octs + ^- discovery + =/ pos=@ud 0 + :: skip service header pkt-line + =^ * pos (read-pkt pos body) + :: skip flush (0000) + =^ * pos (read-pkt pos body) + :: read ref lines until flush + =| ref-list=(list git-ref) + =| caps=(set @t) + |- + =^ pkt=(unit octs) pos (read-pkt pos body) + ?~ pkt [caps (flop ref-list)] + ?: =(0 p.u.pkt) $ :: skip empty payloads + =/ line=tape (trip q.u.pkt) + :: strip trailing newline + =? line &(!=(~ line) =((rear line) 10)) + (snip `tape`line) + :: first 40 chars = hex SHA, char 41 = space, rest = refname + =/ hex=tape (scag 40 line) + =/ rest=tape (slag 41 line) + :: first ref line has capabilities after NUL byte + =/ nul=(unit @ud) (find "\00" rest) + =/ ref-text=tape ?~(nul rest (scag u.nul rest)) + =? caps ?=(^ nul) + =/ cap-text=tape (slag +(u.nul) rest) + (~(uni in caps) (silt (turn (split cap-text ' ') crip))) + =/ h=hash (scan hex parse-hash-sha-1) + =/ rn=refname + (fall (rust ref-text parse-refname) ~[(crip ref-text)]) + $(ref-list [[h rn] ref-list]) +:: +:: +build-want: build POST /git-upload-pack request body +:: +:: For a fresh clone (no haves): +:: want \n +:: want \n +:: ... +:: deepen \n (optional, for shallow clone) +:: 0000 +:: done\n +:: +++ build-want + |= [wants=(list hash) caps=(list @t) depth=(unit @ud) haves=(list hash)] + ^- octs + ?> ?=(^ wants) + =/ sea=bays:bytestream *bays:bytestream + :: first want line includes capabilities + =/ first-line=tape + ;: weld + "want " + (print-hash-sha-1 i.wants) + ?~(caps ~ " ") + (join ' ' (turn caps trip)) + "\0a" + == + =. sea (append-pkt sea first-line) + :: remaining want lines + =. sea + %+ roll t.wants + |= [h=hash s=_sea] + (append-pkt s (weld "want " (weld (print-hash-sha-1 h) "\0a"))) + :: deepen for shallow clone + =? sea ?=(^ depth) + (append-pkt sea (weld "deepen " (weld ((d-co:co 1) u.depth) "\0a"))) + :: flush separates wants from haves + =. sea (append-octs:bytestream sea [4 '0000']) + :: have lines for incremental fetch + =. sea + %+ roll haves + |= [h=hash s=_sea] + (append-pkt s (weld "have " (weld (print-hash-sha-1 h) "\0a"))) + :: done + =. sea (append-pkt sea "done\0a") + (to-octs:bytestream sea) +:: +:: +extract-pack: extract raw pack data from upload-pack response +:: +:: Without side-band: NAK\n followed by raw PACK data +:: With side-band-64k: NAK\n, then pkt-lines with channel byte: +:: \01 = pack data, \02 = progress, \03 = error +:: +++ extract-pack + |= [body=octs sideband=?] + ^- octs + =/ pos=@ud 0 + :: skip pkt-lines until we find NAK or ACK (shallow lines, flushes, etc) + |- + =^ pkt=(unit octs) pos (read-pkt pos body) + ?~ pkt $ :: skip flush, keep looking + =/ line=tape (trip q.u.pkt) + ?. ?| =("NAK" (scag 3 line)) + =("NAK\0a" (scag 4 line)) + =("ACK" (scag 3 line)) + == + $ + :: after NAK/ACK: detect format from actual data + :: if next 4 bytes are "PACK" signature, it's raw (no sideband) + =/ next-4=@ (cut 3 [pos 4] q.body) + ?: =(next-4 'PACK') + [(sub p.body pos) (rsh [3 pos] q.body)] + :: otherwise demux sideband: collect channel 1 data + =/ sea=bays:bytestream *bays:bytestream + |- + ?: (gte pos p.body) + (to-octs:bytestream sea) + =^ pkt=(unit octs) pos (read-pkt pos body) + ?~ pkt (to-octs:bytestream sea) :: flush = done + ?: =(0 p.u.pkt) $ + =/ channel=@ (cut 3 [0 1] q.u.pkt) + ?. =(1 channel) $ :: skip progress/error channels + =/ dat=octs [(dec p.u.pkt) (rsh [3 1] q.u.pkt)] + $(sea (append-octs:bytestream sea dat)) +:: +:: +checkout: materialize files from a commit's tree +:: +:: Walks the tree recursively, returns list of [path octs] +:: for every blob. Skips submodules (gitlinks). +:: +++ checkout + |= [get-tree=$-(hash (unit tree-dir)) get-blob=$-(hash (unit octs)) tree-hash=hash] + ^- (list [path octs]) + =/ tree=(unit tree-dir) (get-tree tree-hash) + ?~ tree ~ + (walk-tree get-tree get-blob / u.tree) +:: +++ walk-tree + |= [get-tree=$-(hash (unit tree-dir)) get-blob=$-(hash (unit octs)) here=path dir=tree-dir] + ^- (list [path octs]) + %- zing + %+ turn dir + |= ent=tree-entry + ?: (is-gitlink ent) ~ + ?: (is-dir ent) + =/ sub=(unit tree-dir) (get-tree hash.ent) + ?~ sub ~ + (walk-tree get-tree get-blob (snoc here name.ent) u.sub) + =/ blob=(unit octs) (get-blob hash.ent) + ?~ blob ~ + ~[[(snoc here name.ent) u.blob]] +:: +:: +diff-trees: compare two commit trees, return list of changes +:: +:: Walks both trees in parallel by name. Same hash = skip. +:: Different hash on dirs = recurse. Blobs = mod/add/del. +:: ++$ tree-change + $% [%add =path =hash] + [%del =path =hash] + [%mod =path old=hash new=hash] + == +:: +++ diff-trees + |= [get-tree=$-(hash (unit tree-dir)) old=hash new=hash] + ^- (list tree-change) + ?: =(old new) ~ + =/ old-dir=(unit tree-dir) (get-tree old) + =/ new-dir=(unit tree-dir) (get-tree new) + ?~ old-dir ~ + ?~ new-dir ~ + (diff-dirs get-tree / u.old-dir u.new-dir) +:: +++ diff-dirs + |= [get-tree=$-(hash (unit tree-dir)) here=path old=tree-dir new=tree-dir] + ^- (list tree-change) + :: index entries by name for fast lookup + =/ new-map=(map @ta tree-entry) + (malt (turn new |=(e=tree-entry [name.e e]))) + =/ old-map=(map @ta tree-entry) + (malt (turn old |=(e=tree-entry [name.e e]))) + :: deletions and modifications from old entries + =/ del-mod=(list tree-change) + %- zing + %+ turn old + |= o=tree-entry + ^- (list tree-change) + ?: (is-gitlink o) ~ + =/ full=path (snoc here name.o) + =/ n=(unit tree-entry) (~(get by new-map) name.o) + ?~ n + ?: (is-dir o) + =/ sub=(unit tree-dir) (get-tree hash.o) + ?~ sub ~ + %+ turn (all-blobs get-tree full u.sub) + |=([p=path h=hash] `tree-change`[%del p h]) + ~[[%del full hash.o]] + ?: =(hash.o hash.u.n) ~ + ?: &((is-dir o) (is-dir u.n)) + =/ os=(unit tree-dir) (get-tree hash.o) + =/ ns=(unit tree-dir) (get-tree hash.u.n) + ?~ os ~ + ?~ ns ~ + (diff-dirs get-tree full u.os u.ns) + ?: &((is-dir o) !(is-dir u.n)) + :: dir->file: delete all old blobs, add new file + =/ sub=(unit tree-dir) (get-tree hash.o) + ?~ sub ~[[%add full hash.u.n]] + =/ dels=(list tree-change) + (turn (all-blobs get-tree full u.sub) |=([p=path h=hash] `tree-change`[%del p h])) + (snoc dels `tree-change`[%add full hash.u.n]) + ?: &(!(is-dir o) (is-dir u.n)) + :: file->dir: delete old file, add all new blobs + =/ sub=(unit tree-dir) (get-tree hash.u.n) + ?~ sub ~[[%del full hash.o]] + =/ adds=(list tree-change) + (turn (all-blobs get-tree full u.sub) |=([p=path h=hash] `tree-change`[%add p h])) + [`tree-change`[%del full hash.o] adds] + :: blob→blob + ~[[%mod full hash.o hash.u.n]] + :: additions from new entries + =/ adds=(list tree-change) + %- zing + %+ turn new + |= n=tree-entry + ^- (list tree-change) + ?: (is-gitlink n) ~ + ?: (~(has by old-map) name.n) ~ + =/ full=path (snoc here name.n) + ?: (is-dir n) + =/ sub=(unit tree-dir) (get-tree hash.n) + ?~ sub ~ + %+ turn (all-blobs get-tree full u.sub) + |=([p=path h=hash] `tree-change`[%add p h]) + ~[[%add full hash.n]] + (weld del-mod adds) +:: +:: +all-blobs: collect all blob paths+hashes from a tree recursively +:: +++ all-blobs + |= [get-tree=$-(hash (unit tree-dir)) here=path dir=tree-dir] + ^- (list [path hash]) + %- zing + %+ turn dir + |= ent=tree-entry + ?: (is-gitlink ent) ~ + ?: (is-dir ent) + =/ sub=(unit tree-dir) (get-tree hash.ent) + ?~ sub ~ + (all-blobs get-tree (snoc here name.ent) u.sub) + ~[[(snoc here name.ent) hash.ent]] +:: +:: Helpers +:: +++ read-pkt + |= [pos=@ud body=octs] + ^- [(unit octs) @ud] + ?: (gth (add pos 4) p.body) [~ pos] + =/ hex=tape (trip (cut 3 [pos 4] q.body)) + =/ len=@ud (scan hex (bass 16 (plus hit))) + ?: =(0 len) [~ (add pos 4)] :: flush + =/ payload-len=@ud (sub len 4) + ?: =(0 payload-len) [`[0 0x0] (add pos 4)] + [`[(min payload-len (sub p.body (add pos 4))) (cut 3 [(add pos 4) payload-len] q.body)] (add pos len)] +:: +++ append-pkt + |= [sea=bays:bytestream payload=tape] + ^- bays:bytestream + =/ dat=octs (as-octt:bytestream payload) + =/ total=@ud (add 4 p.dat) + =/ len=tape (print-hex-pad total 4) + =. sea (append-octs:bytestream sea (as-octt:bytestream len)) + (append-octs:bytestream sea dat) +:: +++ print-hex-pad + |= [val=@ud wid=@ud] + ^- tape + =/ raw=tape ((x-co:co 1) val) + =/ pad=@ud ?:((gte (lent raw) wid) 0 (sub wid (lent raw))) + (weld (reap pad '0') raw) +:: +++ split + |= [t=tape del=@t] + ^- (list tape) + =| acc=(list tape) + =| cur=tape + |- + ?~ t (flop [(flop cur) acc]) + ?: =(i.t del) + $(t t.t, acc [(flop cur) acc], cur ~) + $(t t.t, cur [i.t cur]) +:: +++ join + |= [del=@t ts=(list tape)] + ^- tape + ?~ ts ~ + ?~ t.ts i.ts + (weld i.ts [del (join del t.ts)]) +-- diff --git a/desk/gub/lib/goals.hoon b/desk/gub/lib/goals.hoon new file mode 100644 index 0000000..1ab7667 --- /dev/null +++ b/desk/gub/lib/goals.hoon @@ -0,0 +1,754 @@ +:: goals: DAG-based goal tracking library +:: +:: each goal has start/end nodes connected by directed edges. +:: the DAG encodes priority, precedence, nesting, and containment. +:: a goal collection is a single unit of state with one root goal (id %0). +:: +|% +:: types +:: ++$ goal-id @ta ++$ point ?(%start %end) ++$ node-id [=goal-id =point] ++$ status-entry [done=? at=@da] ++$ node + $: status=(lest status-entry) :: newest first, never empty + moment=(unit @da) + inflow=(list node-id) + outflow=(list node-id) + == ++$ goal + $: id=goal-id + data=(map @t json) :: arbitrary json data + parent=(unit goal-id) + children=(list goal-id) + actionable=? + start=node + end=node + == ++$ goal-store (map goal-id goal) ++$ action + $% [%create id=goal-id parent=goal-id data=(map @t json)] + [%delete id=goal-id] + [%move id=goal-id new-parent=goal-id] + [%reorder id=goal-id before=(unit goal-id)] + [%link from=node-id to=node-id] + [%unlink from=node-id to=node-id] + [%done =node-id] + [%undone =node-id] + [%update id=goal-id data=(map @t json)] + [%set-actionable id=goal-id actionable=?] + [%set-moment =node-id moment=(unit @da)] + == +:: constants +:: +++ root-id `goal-id`'0' +:: helpers +:: +++ get-goal + |= [store=goal-store id=goal-id] + ^- goal + (~(got by store) id) +:: +++ get-node + |= [store=goal-store nid=node-id] + ^- node + =/ g (get-goal store goal-id.nid) + ?- point.nid + %start start.g + %end end.g + == +:: +++ nid-eq + |= [a=node-id b=node-id] + ^- ? + &(=(goal-id.a goal-id.b) =(point.a point.b)) +:: +++ has-nid + |= [lis=(list node-id) target=node-id] + ^- ? + %+ lien lis + |=(n=node-id (nid-eq n target)) +:: +++ is-done + |= [store=goal-store nid=node-id] + ^- ? + done.i.status:(get-node store nid) +:: +++ nkey + |= nid=node-id + ^- @t + (crip "{(trip goal-id.nid)}:{(trip ?-(point.nid %start 'start', %end 'end'))}") +:: make fresh start/end nodes for a new goal +:: +++ make-nodes + |= [id=goal-id now=@da] + ^- [start=node end=node] + :- :* status=~[[done=%.n at=now]] + moment=~ + inflow=~ + outflow=~[[goal-id=id point=%end]] + == + :* status=~[[done=%.n at=now]] + moment=~ + inflow=~[[goal-id=id point=%start]] + outflow=~ + == +:: set a node on a goal in the store +:: +++ put-node + |= [store=goal-store nid=node-id =node] + ^- goal-store + =/ g (get-goal store goal-id.nid) + =/ g + ?- point.nid + %start g(start node) + %end g(end node) + == + (~(put by store) id.g g) +:: add a directed edge (both directions) +:: +++ add-edge + |= [store=goal-store from=node-id to=node-id] + ^- goal-store + =/ from-node (get-node store from) + =/ to-node (get-node store to) + =. store (put-node store from from-node(outflow [to outflow.from-node])) + (put-node store to to-node(inflow [from inflow.to-node])) +:: remove a directed edge (both directions) +:: +++ remove-edge + |= [store=goal-store from=node-id to=node-id] + ^- goal-store + =/ from-node (get-node store from) + =/ to-node (get-node store to) + =. from-node + from-node(outflow (skip outflow.from-node |=(n=node-id (nid-eq n to)))) + =. to-node + to-node(inflow (skip inflow.to-node |=(n=node-id (nid-eq n from)))) + =. store (put-node store from from-node) + (put-node store to to-node) +:: add containment edges (parent.start->child.start, child.end->parent.end) +:: +++ add-containment + |= [store=goal-store parent-id=goal-id child-id=goal-id] + ^- goal-store + =. store + (add-edge store [parent-id %start] [child-id %start]) + (add-edge store [child-id %end] [parent-id %end]) +:: remove containment edges +:: +++ remove-containment + |= [store=goal-store parent-id=goal-id child-id=goal-id] + ^- goal-store + =. store + (remove-edge store [parent-id %start] [child-id %start]) + (remove-edge store [child-id %end] [parent-id %end]) +:: find root nodes (end nodes with empty outflow) +:: +++ root-nodes + |= store=goal-store + ^- (list node-id) + =/ goals ~(val by store) + |- + ?~ goals ~ + =/ g i.goals + ?: =(~ outflow.end.g) + [[goal-id=id.g point=%end] $(goals t.goals)] + $(goals t.goals) +:: generic DAG traversal engine +:: +:: walks inflow (leftward) from starting nodes with cycle detection +:: and memoization. init/meld/land callbacks control the accumulator. +:: +++ traverse-dag + |* result=mold + |= $: store=goal-store + starts=(list node-id) + init=$-(node-id (unit result)) + meld=$-([acc=(unit result) neighbor=(unit result)] (unit result)) + land=$-([nid=node-id acc=(unit result)] (unit result)) + == + ^- (map @t (unit result)) + =/ visited=(map @t (unit result)) ~ + =/ path=(set @t) ~ + =| stack=(list node-id) + |^ + |- + ?~ starts visited + =/ rvp (visit i.starts) + =. visited vis.rvp + =. path pat.rvp + $(starts t.starts) + :: + ++ visit + |= nid=node-id + ^- [res=(unit result) vis=(map @t (unit result)) pat=(set @t)] + =/ key (nkey nid) + :: already computed + ?: (~(has by visited) key) + [(~(got by visited) key) visited path] + :: cycle detection + ?: (~(has in path) key) + ~|("cycle detected at {(trip key)}" !!) + =. path (~(put in path) key) + :: compute + =/ nd (get-node store nid) + =/ acc=(unit result) (init nid) + =/ neighbors inflow.nd + |- + ?~ neighbors + :: done with neighbors, land and memoize + =/ final (land nid acc) + =. visited (~(put by visited) key final) + =. path (~(del in path) key) + [final visited path] + :: visit each neighbor, fold into acc + =/ nvp (visit i.neighbors) + =. visited vis.nvp + =. path pat.nvp + =. acc (meld acc res.nvp) + $(neighbors t.neighbors) + -- +:: validation rules +:: +:: rule 0: root exists and has no parent +:: +++ check-root + |= store=goal-store + ^- ? + =/ root (~(get by store) root-id) + ?~ root ~|(%root-missing !!) + ?^ parent.u.root ~|(%root-has-parent !!) + %.y +:: rule 1: parent/child links are bidirectional +:: +++ check-parent-child-symmetry + |= store=goal-store + ^- ? + =/ goals ~(val by store) + |- + ?~ goals %.y + =/ g i.goals + :: check each child points back + ?. %+ levy children.g + |= cid=goal-id + =/ child (get-goal store cid) + ?~ parent.child %.n + =(u.parent.child id.g) + ~|([%parent-child-symmetry %child-mismatch id.g] !!) + :: check parent lists us + ?. ?~ parent.g %.y + =/ par (get-goal store u.parent.g) + %+ lien children.par + |=(c=goal-id =(c id.g)) + ~|([%parent-child-symmetry %parent-mismatch id.g] !!) + $(goals t.goals) +:: rule 2: graph edges are bidirectional +:: +++ check-edge-symmetry + |= store=goal-store + ^- ? + =/ goals ~(val by store) + |- + ?~ goals %.y + =/ g i.goals + ?. (check-node-edges store [id.g %start]) %.n + ?. (check-node-edges store [id.g %end]) %.n + $(goals t.goals) +:: +++ check-node-edges + |= [store=goal-store nid=node-id] + ^- ? + =/ nd (get-node store nid) + ?. %+ levy outflow.nd + |= target=node-id + =/ target-node (get-node store target) + (has-nid inflow.target-node nid) + ~|([%edge-symmetry %outflow-mismatch goal-id.nid point.nid] !!) + ?. %+ levy inflow.nd + |= source=node-id + =/ source-node (get-node store source) + (has-nid outflow.source-node nid) + ~|([%edge-symmetry %inflow-mismatch goal-id.nid point.nid] !!) + %.y +:: rule 3: no cycles in the DAG +:: +++ check-no-cycles + |= store=goal-store + ^- ? + =/ all-nodes=(list node-id) + =/ goals ~(val by store) + |- + ?~ goals ~ + [[id.i.goals %start] [id.i.goals %end] $(goals t.goals)] + :: traverse will crash on cycle + =/ res + %. :* store + all-nodes + |=(=node-id `(unit ?)`(some %.y)) + |= [acc=(unit ?) nb=(unit ?)] + ^- (unit ?) + (some &(?=(^ acc) u.acc ?=(^ nb) u.nb)) + |= [=node-id acc=(unit ?)] + ^- (unit ?) + acc + == + (traverse-dag ?) + %.y +:: rule 4: every goal's start flows into its own end +:: +++ check-start-to-end + |= store=goal-store + ^- ? + =/ goals ~(val by store) + |- + ?~ goals %.y + =/ g i.goals + ?. (has-nid outflow.start.g [id.g %end]) + ~|([%start-to-end %missing-outflow id.g] !!) + ?. (has-nid inflow.end.g [id.g %start]) + ~|([%start-to-end %missing-inflow id.g] !!) + $(goals t.goals) +:: rule 5: parent/child hierarchy matches containment edges +:: +++ check-containment + |= store=goal-store + ^- ? + =/ goals ~(val by store) + |- + ?~ goals %.y + =/ g i.goals + ?~ parent.g $(goals t.goals) + =/ par (get-goal store u.parent.g) + ?. (has-nid outflow.start.par [id.g %start]) + ~|([%containment %missing-start id.g] !!) + ?. (has-nid outflow.end.g [u.parent.g %end]) + ~|([%containment %missing-end id.g] !!) + $(goals t.goals) +:: rule 6: actionable goals have no end nodes in their end's inflow +:: +++ check-actionable + |= store=goal-store + ^- ? + =/ goals ~(val by store) + |- + ?~ goals %.y + =/ g i.goals + ?. actionable.g $(goals t.goals) + =/ has-end-inflow + %+ lien inflow.end.g + |=(n=node-id =(%end point.n)) + ?: has-end-inflow + ~|([%actionable-leaf %has-end-inflow id.g] !!) + $(goals t.goals) +:: rule 7: moments respect graph ordering +:: +++ check-moment-ordering + |= store=goal-store + ^- ? + =/ roots (root-nodes store) + =/ results + %. :* store + roots + |=(=node-id `(unit (unit @da))`[~ ~]) + |= [acc=(unit (unit @da)) nb=(unit (unit @da))] + ^- (unit (unit @da)) + ?~ acc nb + ?~ nb acc + ?~ u.acc nb + ?~ u.nb acc + [~ [~ `@da`(max u.u.acc u.u.nb)]] + |= [nid=node-id bound=(unit (unit @da))] + ^- (unit (unit @da)) + =/ nd (get-node store nid) + ?~ moment.nd + bound + ?~ bound [~ moment.nd] + ?~ u.bound [~ moment.nd] + ?. (gte u.moment.nd u.u.bound) + ~|([%moment-ordering nid u.moment.nd u.u.bound] !!) + [~ moment.nd] + == + (traverse-dag (unit @da)) + :: check all visited + =/ goals ~(val by store) + |- + ?~ goals %.y + =/ g i.goals + ?. (~(has by results) (nkey [id.g %start])) + ~|([%moment-ordering %not-visited id.g %start] !!) + ?. (~(has by results) (nkey [id.g %end])) + ~|([%moment-ordering %not-visited id.g %end] !!) + $(goals t.goals) +:: rule 8: completion consistency +:: +++ check-completion-consistency + |= store=goal-store + ^- ? + =/ roots (root-nodes store) + =/ results + %. :* store + roots + |=(=node-id [~ [~ %.n]]) + |= [acc=(unit (unit ?)) nb=(unit (unit ?))] + ^- (unit (unit ?)) + ?~ acc nb + ?~ nb acc + ?~ u.acc ~ + ?~ u.nb ~ + [~ [~ |(u.u.acc u.u.nb)]] + |= [nid=node-id has-left-inc=(unit (unit ?))] + ^- (unit (unit ?)) + ?~ has-left-inc ~ + ?~ u.has-left-inc ~ + =/ done (is-done store nid) + :: any done node with incomplete inflow is a violation + ?: &(done u.u.has-left-inc) + ~|([%completion-consistency goal-id.nid point.nid] !!) + :: start nodes pass through without adding incompleteness + ?: =(%start point.nid) has-left-inc + :: end nodes propagate own completion state + ?: !done [~ [~ %.y]] + [~ [~ %.n]] + == + (traverse-dag (unit ?)) + :: check all visited + =/ goals ~(val by store) + |- + ?~ goals %.y + =/ g i.goals + ?. (~(has by results) (nkey [id.g %start])) + ~|([%completion-consistency %not-visited id.g %start] !!) + ?. (~(has by results) (nkey [id.g %end])) + ~|([%completion-consistency %not-visited id.g %end] !!) + $(goals t.goals) +:: run all validation rules +:: +++ validate + |= store=goal-store + ^- ? + ?& (check-root store) + (check-parent-child-symmetry store) + (check-edge-symmetry store) + (check-no-cycles store) + (check-start-to-end store) + (check-containment store) + (check-actionable store) + (check-moment-ordering store) + (check-completion-consistency store) + == +:: operations +:: +:: create a new empty store with just the root goal +:: +++ create-store + |= now=@da + ^- goal-store + =/ nodes (make-nodes root-id now) + =/ root=goal + :* id=root-id + data=~ + parent=~ + children=~ + actionable=%.n + start=start.nodes + end=end.nodes + == + (my ~[[root-id root]]) +:: apply an action: returns new store (crashes on validation failure) +:: +:: This is the policy layer — it dispatches to fundamental operations +:: (apply-create, apply-move, etc) which are purely mechanical, then +:: applies smart defaults on top: +:: +:: - new goals default to actionable +:: - adding a child under an actionable parent auto-unsets the parent +:: - moving a goal under an actionable parent auto-unsets the parent +:: +:: Anyone wanting different policy can call the fundamental ops directly. +:: +++ apply + |= [store=goal-store =action now=@da] + ^- [goal-store (unit goal-id)] + =^ new-id store + ?- -.action + %create + (apply-create store id.action parent.action data.action now) + %delete + [~ (apply-delete store id.action)] + %move + [~ (apply-move store id.action new-parent.action)] + %reorder + [~ (apply-reorder store id.action before.action)] + %link + [~ (add-edge store from.action to.action)] + %unlink + [~ (remove-edge store from.action to.action)] + %done + [~ (apply-done store node-id.action now)] + %undone + [~ (apply-undone store node-id.action now)] + %update + [~ (apply-update store id.action data.action)] + %set-actionable + =/ g (get-goal store id.action) + [~ (~(put by store) id.action g(actionable actionable.action))] + %set-moment + =/ nd (get-node store node-id.action) + [~ (put-node store node-id.action nd(moment moment.action))] + == + :: policy: new goals default actionable + =? store ?=(%create -.action) + =/ cid=goal-id (need new-id) + =/ g (get-goal store cid) + (~(put by store) cid g(actionable %.y)) + :: policy: parent loses actionable when it gains a child + =? store ?=(%create -.action) + =/ par (get-goal store parent.action) + ?. actionable.par store + (~(put by store) parent.action par(actionable %.n)) + =? store ?=(%move -.action) + =/ par (get-goal store new-parent.action) + ?. actionable.par store + (~(put by store) new-parent.action par(actionable %.n)) + ?> (validate store) + [store new-id] +:: +++ apply-create + |= [store=goal-store id=goal-id parent-id=goal-id data=(map @t json) now=@da] + ^- [(unit goal-id) goal-store] + ?: (~(has by store) id) ~|([%id-already-exists id] !!) + =/ nodes (make-nodes id now) + =/ g=goal + :* id=id + data=data + parent=`parent-id + children=~ + actionable=%.n + start=start.nodes + end=end.nodes + == + =. store (~(put by store) id g) + =/ par (get-goal store parent-id) + =. store (~(put by store) parent-id par(children [id children.par])) + =. store (add-containment store parent-id id) + [`id store] +:: +++ apply-delete + |= [store=goal-store id=goal-id] + ^- goal-store + ?: =(id root-id) ~|(%cannot-delete-root !!) + =/ g (get-goal store id) + ?^ children.g ~|(%cannot-delete-with-children !!) + :: remove from parent + =. store + ?~ parent.g store + =/ par (get-goal store u.parent.g) + =. par par(children (skip children.par |=(c=goal-id =(c id)))) + =. store (~(put by store) u.parent.g par) + (remove-containment store u.parent.g id) + :: remove all edges involving this goal + =/ points=(list point) ~[%start %end] + |- + ?~ points (~(del by store) id) + =/ pt i.points + =/ this-nid=node-id [id pt] + =/ nd (get-node store this-nid) + :: remove outflow edges (skip self) + =. store + =/ outs outflow.nd + |- + ?~ outs store + ?. =(goal-id.i.outs id) + $(outs t.outs, store (remove-edge store this-nid i.outs)) + $(outs t.outs) + :: remove inflow edges (skip self) + =/ nd (get-node store this-nid) + =. store + =/ ins inflow.nd + |- + ?~ ins store + ?. =(goal-id.i.ins id) + $(ins t.ins, store (remove-edge store i.ins this-nid)) + $(ins t.ins) + $(points t.points) +:: +++ apply-reorder + |= [store=goal-store id=goal-id before=(unit goal-id)] + ^- goal-store + ?: =(id root-id) ~|(%cannot-reorder-root !!) + =/ g (get-goal store id) + ?~ parent.g ~|(%cannot-reorder-orphan !!) + =/ par (get-goal store u.parent.g) + =/ without=(list goal-id) + (skip children.par |=(c=goal-id =(c id))) + =/ new-kids=(list goal-id) + ?~ before (snoc without id) + =/ out=(list goal-id) ~ + =/ rem=_without without + |- + ?~ rem (flop [id out]) + ?: =(i.rem u.before) + (weld (flop [i.rem [id out]]) t.rem) + $(rem t.rem, out [i.rem out]) + (replace-children store u.parent.g new-kids) +:: +++ replace-children + |= [store=goal-store parent-id=goal-id new-kids=(list goal-id)] + ^- goal-store + =/ par (get-goal store parent-id) + =/ old-set=(set goal-id) (~(gas in *(set goal-id)) children.par) + =/ new-set=(set goal-id) (~(gas in *(set goal-id)) new-kids) + ?> =(old-set new-set) + (~(put by store) parent-id par(children new-kids)) +:: +++ apply-move + |= [store=goal-store id=goal-id new-parent-id=goal-id] + ^- goal-store + ?: =(id root-id) ~|(%cannot-move-root !!) + =/ g (get-goal store id) + ?: ?&(?=(^ parent.g) =(u.parent.g new-parent-id)) store + :: remove from old parent + =. store + ?~ parent.g store + =/ par (get-goal store u.parent.g) + =. par par(children (skip children.par |=(c=goal-id =(c id)))) + =. store (~(put by store) u.parent.g par) + (remove-containment store u.parent.g id) + :: add to new parent + =/ new-par (get-goal store new-parent-id) + =. store (~(put by store) new-parent-id new-par(children [id children.new-par])) + =. g (get-goal store id) + =. store (~(put by store) id g(parent `new-parent-id)) + (add-containment store new-parent-id id) +:: +++ apply-done + |= [store=goal-store nid=node-id now=@da] + ^- goal-store + =/ nd (get-node store nid) + (put-node store nid nd(status [[done=%.y at=now] status.nd])) +:: +++ apply-undone + |= [store=goal-store nid=node-id now=@da] + ^- goal-store + =/ nd (get-node store nid) + (put-node store nid nd(status [[done=%.n at=now] status.nd])) +:: +++ apply-update + |= [store=goal-store id=goal-id data=(map @t json)] + ^- goal-store + =/ g (get-goal store id) + =/ merged (~(uni by data.g) data) + (~(put by store) id g(data merged)) +:: queries +:: +:: harvest: "what can I work on right now to move toward this goal?" +:: +:: walk backwards from a goal's end node through ALL inflow edges +:: (containment, precedence, internal start->end — the DAG encodes it all). +:: skip completed goals. an actionable end node with no further incomplete +:: inflow is a harvestable leaf — something you can actually do right now. +:: +++ harvest + |= [store=goal-store gid=goal-id] + ^- (set goal-id) + =/ visited=(map @t (set goal-id)) ~ + =/ hvp (visit-harvest store [gid %end] visited) + (~(got by vis.hvp) (nkey [gid %end])) +:: +++ visit-harvest + |= [store=goal-store nid=node-id visited=(map @t (set goal-id))] + ^- [res=(set goal-id) vis=(map @t (set goal-id))] + =/ key (nkey nid) + :: memoized + ?: (~(has by visited) key) + [(~(got by visited) key) visited] + :: if goal's end is done, skip — completed goals have no harvest + ?: done.i.status:(get-node store [goal-id.nid %end]) + =. visited (~(put by visited) key ~) + [~ visited] + :: walk incomplete inflow + =/ nd (get-node store nid) + =/ neighbors inflow.nd + =/ acc=(set goal-id) ~ + |- + ?~ neighbors + :: land: if end node with empty harvest and actionable, return {self} + =/ result=(set goal-id) + ?. &(=(~ acc) =(%end point.nid) actionable:(get-goal store goal-id.nid)) + acc + (~(put in *(set goal-id)) goal-id.nid) + =. visited (~(put by visited) key result) + [result visited] + :: skip completed neighbor goals + =/ ngid goal-id.i.neighbors + ?: done.i.status:(get-node store [ngid %end]) + $(neighbors t.neighbors) + :: recurse + =/ hvp (visit-harvest store i.neighbors visited) + =. visited vis.hvp + $(neighbors t.neighbors, acc (~(uni in acc) res.hvp)) +:: +:: frontier: harvest as a list of goals +:: +++ frontier + |= [store=goal-store gid=goal-id] + ^- (list goal) + =/ ids ~(tap in (harvest store gid)) + (turn ids |=(id=goal-id (get-goal store id))) +:: get lineage (ancestors) from goal to root +:: +++ lineage + |= [store=goal-store id=goal-id] + ^- (list goal-id) + =/ g (get-goal store id) + ?~ parent.g ~ + [u.parent.g $(id u.parent.g)] +:: compute longest-path depth for each node in the DAG +:: depth = max chain of predecessor nodes. roots = 0. +:: +++ node-depths + |= store=goal-store + ^- (map @t @ud) + =/ all-nids=(list node-id) + %- zing + %+ turn ~(val by store) + |=(g=goal ~[[goal-id=id.g point=%start] [goal-id=id.g point=%end]]) + =/ depths=(map @t @ud) + (malt (turn all-nids |=(nid=node-id [(nkey nid) 0]))) + :: relax N times (longest path bounded by node count) + =/ iters=@ud (lent all-nids) + |- + ?: =(0 iters) depths + =. depths + =/ nids=_all-nids all-nids + |- + ?~ nids depths + =/ nid=node-id i.nids + =/ nd=node (get-node store nid) + =/ my-key=@t (nkey nid) + =/ my-depth=@ud (~(got by depths) my-key) + =/ max-in=@ud + =/ ins inflow.nd + |- + ?~ ins 0 + (max +((~(gut by depths) (nkey i.ins) 0)) $(ins t.ins)) + ?. (gth max-in my-depth) + $(nids t.nids) + $(nids t.nids, depths (~(put by depths) my-key max-in)) + $(iters (dec iters)) +:: flatten goal tree in children-list order (same as tree view) +:: +++ flatten-tree + |= [store=goal-store gid=goal-id] + ^- (list goal) + =/ g=goal (get-goal store gid) + =/ out=(list goal) + ?. =(gid root-id) ~[g] ~ + =/ kids children.g + |- + ?~ kids out + =/ sub ^$(gid i.kids) + $(kids t.kids, out (weld out sub)) +-- diff --git a/desk/gub/lib/groundwire.hoon b/desk/gub/lib/groundwire.hoon new file mode 100644 index 0000000..34dbe40 --- /dev/null +++ b/desk/gub/lib/groundwire.hoon @@ -0,0 +1,497 @@ +:: lib/groundwire.hoon +:: +:: Taproot keypairs, tx construction, and BIP341 sighash logic +:: for building and signing urb-bearing bitcoin transactions. +:: +:: Ported from groundwire's lib/groundwire.hoon. +:: +/< ord /lib/sur/ord.hoon +/< urb /lib/sur/urb.hoon +/< scr /lib/btc-script.hoon +/< bcu /lib/bitcoin-utils.hoon +/< b173 /lib/bip/b173.hoon +|% ++$ point + $+ urb-point + point:secp256k1:secp:crypto +:: ++$ outpoint + $+ urb-outpoint + [=txid:ord =vout:ord] +:: ++$ keypair + $+ urb-keypair + [pub=point priv=@] +:: ++$ pubkey + $+ urb-pubkey + @ +:: +++ sighash + |% + ++ default 0x0 + ++ all 0x1 + ++ none 0x2 + ++ single 0x3 + ++ anyonecanpay 0x80 + -- +++ tx + =< tx + |% + +$ in + $+ urb-tx-in + $: prevout=outpoint + nsequence=$~(0xffff.ffff @ux) + script-witness=(list octs) + == + :: + +$ out + $+ urb-tx-out + $: script-pubkey=octs + value=sats:ord + == + :: + +$ tx + $+ urb-tx + $: vin=(list in) + vout=(list out) + nversion=$~(0x2 @) + nlocktime=@ + inputs=(list input) + outputs=(list output) + == + :: + +$ input + $+ urb-tx-input + $: =in + utxo=output + sig-hash=$~(0x0 @ux) + == + +$ output + $+ urb-tx-output + $: out + spend-script=(unit script:scr) + internal-keys=keypair + == + -- ++$ input input:tx ++$ output output:tx +:: +++ raws + |= [eny=@ bits=@] + ^- [@ @] + [- +>-]:(~(raws og eny) bits) +:: +++ build + |_ t=tx + :: + ++ add-input-1 + |= $: $: prev=outpoint + from=output + == + sigh=(unit @ux) + nseq=(unit @ux) + == + (add-input prev from sigh nseq) + :: + ++ add-input + |= $: prev=outpoint + from=output + sigh=(unit @ux) + nseq=(unit @ux) + == + ^- tx + =| n=input + =. n + %_ n + utxo from + prevout.in prev + sig-hash (fall sigh sig-hash.n) + nsequence.in (fall nseq nsequence.in.n) + == + t(inputs (snoc inputs.t n)) + :: + ++ add-output-1 + |= out=output + ^- tx + t(outputs (snoc outputs.t out), vout (snoc vout.t -:out)) + :: + ++ add-output + |= $: val=sats:ord + int-key=keypair + scr=(unit script:scr) + == + ^- tx + =/ o=out:tx [~(scriptpubkey p2tr `x.pub.int-key scr ~) val] + =| =output + =. output + %_ output + - o + internal-keys int-key + spend-script scr + == + t(outputs (snoc outputs.t output), vout (snoc vout.t o)) + :: + ++ finalize-input + |= [i=@ eny=@] + ^- [tx _eny] + =/ n=input (snag i inputs.t) + ?. =(~ script-witness.in.n) + [t eny] + ?~ spend-script.utxo.n + =/ tpriv=@ + ~(tweak-privkey p2tr `x.pub.internal-keys.utxo.n spend-script.utxo.n `priv.internal-keys.utxo.n) + =/ twpub=keypair ~(tweak-keypair p2tr `x.pub.internal-keys.utxo.n ~ `priv.internal-keys.utxo.n) + =/ address=cord (need (encode-taproot:b173 %regtest 32^x.pub.twpub)) + =^ sig eny (sign-input t i tpriv eny 0) + =. script-witness.in.n ~[sig] + [t(inputs (snap inputs.t i `input`n)) eny] + + =/ address=cord (need (encode-taproot:b173 %regtest 32^x.pub.internal-keys.utxo.n)) + =. script-witness.in.n + ~(scriptspend p2tr `x.pub.internal-keys.utxo.n spend-script.utxo.n ~) + =^ sig eny (sign-input t i priv.internal-keys.utxo.n eny 1) + =. script-witness.in.n [sig script-witness.in.n] + [t(inputs (snap inputs.t i `input`n)) eny] + :: + ++ finalize + |= eny=@ + ^- [tx _eny] + =| i=@ + |- + ?: =((lent inputs.t) i) + t^eny + =/ n=input (snag i inputs.t) + :: todo: add checks - value (fees), sighash_single, valid nseq and nlock + ?. =(~ script-witness.in.n) + $(i +(i), t t(vin (snoc vin.t in.n))) + =^ t eny (finalize-input i eny) + $(i +(i), t t(vin (snoc vin.t in:(snag i inputs.t)))) + -- +:: +++ encode + |% + ++ txid + |= t=tx + ^- @ux + =< + + %- flipb + %- dsha256:bcu + %- catb %- zing + ^- (list (list octs)) + :~ ~[(flipb 4^nversion.t)] + ~[(encode-compact-size (lent vin.t))] + (turn vin.t input) + ~[(encode-compact-size (lent vout.t))] + (turn vout.t output) + ~[(flipb 4^nlocktime.t)] + == + :: + ++ txn + |= t=tx + ^- octs + %- catb %- zing + ^- (list (list octs)) + :~ ~[(flipb 4^nversion.t)] + ~[1^0x0 1^0x1] + ~[(encode-compact-size (lent vin.t))] + (turn vin.t input) + ~[(encode-compact-size (lent vout.t))] + (turn vout.t output) + (witness vin.t) + ~[(flipb 4^nlocktime.t)] + == + :: + ++ input + |= =in:tx + ^- octs + %- catb + :~ (flipb (to-octs txid.prevout.in)) + (flipb 4^vout.prevout.in) + 1^0x0 + (flipb 4^nsequence.in) + == + :: + ++ output + |= =out:tx + ^- octs + %- catb + :~ (flipb 8^value.out) + (encode-compact-size p.script-pubkey.out) + script-pubkey.out + == + :: + ++ witness + |= v=(list in:tx) + ^- (list octs) + %+ turn v + |= =in:tx + ^- octs + ?~ script-witness.in + 0^0x0 + %- catb + :- (encode-compact-size (lent script-witness.in)) + %- zing %+ turn script-witness.in + |= o=octs + ^- (list octs) + ?: =(0 p.o) + ~[1^0x0] + ~[(encode-compact-size p.o) o] + -- +:: +:: taproot spending and construction methods +++ sign-input + |= [t=tx i=@ priv=@ eny=@ ext=@] + ^- [octs _eny] + =+ n=(snag i inputs.t) + =/ neone=? =(anyonecanpay:sighash (dis sig-hash.n 0x80)) + =/ single=? =(single:sighash (dis sig-hash.n 3)) + =/ none=? =(none:sighash (dis sig-hash.n 3)) + |^ + =/ preimage=octs (catb ~[1^0x0 taproot-preimage]) + =/ msghash=@uvI + %+ tagged-hash:schnorr:secp256k1:secp:crypto 'TapSighash' + preimage + =^ sed eny (raws eny 256) + =/ sig=octs + %- to-octs + (sign:schnorr:secp256k1:secp:crypto priv msghash sed) + =? sig !=(default:sighash sig-hash.n) + (catb ~[sig 1^sig-hash.n]) + sig^eny + :: + ++ taproot-preimage + ^- octs + %- catb + :- 1^sig-hash.n + ;: welp + tx-fields + input-fields + output-fields + ext-fields + == + :: + ++ tx-fields + |^ ^- (list octs) + =/ fields=(list octs) + :~ (flipb 4^nversion.t) + (flipb 4^nlocktime.t) + == + =? fields !neone + %+ welp fields + :~ sha-prevouts + sha-amounts + sha-scriptpubkeys + sha-sequences + == + =? fields &(!single !none) + (snoc fields sha-outputs) + fields + :: + ++ sha-prevouts + ^- octs + =/ preimage=octs + (catb (turn inputs.t |=(np=input (encode-outpoint prevout.in.np)))) + (flipb 32^(shay (flipb preimage))) + :: + ++ sha-amounts + ^- octs + =/ preimage=octs + (catb (turn inputs.t |=(np=input (flipb 8^value.utxo.np)))) + (flipb 32^(shay (flipb preimage))) + :: + ++ sha-scriptpubkeys + ^- octs + =/ preimage=octs + %- catb + (turn inputs.t |=(np=input (encode-scriptpubkey script-pubkey.utxo.np))) + (flipb 32^(shay (flipb preimage))) + :: + ++ sha-sequences + ^- octs + =/ preimage=octs + (catb (turn inputs.t |=(np=input (flipb 4^nsequence.in.np)))) + (flipb 32^(shay (flipb preimage))) + :: + ++ sha-outputs + ^- octs + =/ preimage=octs + %- catb + %+ turn outputs.t + |= =output + (output:encode -.output) + (flipb 32^(shay (flipb preimage))) + -- + :: + ++ input-fields + :: assume no annex + :: assume known ext_flag as of BIP342 (0 for keyspends, 1 for scriptspends) + ^- (list octs) + =/ enc-out=octs (encode-outpoint prevout.in.n) + =/ fields=(list octs) + ?. neone + ~[(flipb 4^i)] + :~ (catb ~[(encode-compact-size p.enc-out) enc-out]) + (flipb 8^value.utxo.n) + (catb ~[(encode-compact-size 35) script-pubkey.utxo.n]) + (flipb 4^nsequence.in.n) + == + ?: =(1 ext) + (into fields 0 1^0x2) + ?: =(0 ext) + (into fields 0 1^0x0) + !! + :: + ++ output-fields + ^- (list octs) + ?. single + ~ + :_ ~ + %- flipb %- to-octs + (shay (output:encode -:(snag i outputs.t))) + :: + ++ ext-fields + :: assume no OP_CODESEPARATORs + ^- (list octs) + ?: =(0 ext) + ~ + ?: =(1 ext) + :~ (to-octs ~(tapleaf-hash p2tr `x.pub.internal-keys.utxo.n spend-script.utxo.n ~)) + 1^0x0 + 4^0xffff.ffff + == + !! + -- +:: +++ p2tr + :: current: single tapleaf + =, secp256k1:secp:crypto + |_ [p=(unit pubkey) s=(unit script:scr) sec=(unit @)] + ++ tweak-keypair + ^- keypair + =/ tweaked-seckey=@ tweak-privkey + :: populated the pubkey sample to match the privkey in case not provided + [q:tweak-pubkey tweaked-seckey] + :: + ++ scriptpubkey + (catb ~[1^0x51 1^0x20 (to-octs x.q:tweak-pubkey)]) + :: + ++ tweak-pubkey + ^- (pair @ point) + =/ pt=point (need (lift-x:schnorr (need p))) + =/ t=@I (tweak pt) + =/ tweaked=point + (add-points pt (mul-point-scalar g.domain.curve t)) + =/ parity=@ ?: =(0 (mod y.tweaked 2)) 0 1 + [p=parity q=tweaked] + :: + ++ tweak-privkey + ^- @ + ?~ sec !! + =/ pt=point (mul-point-scalar g.domain.curve u.sec) + ?: &(=(^ p) !=(p `x.pt)) ~|(%non-matching-keys !!) + =. p `x.pt + =/ t=@I (tweak pt) + =/ priv=@ + ?: =(0 (mod y.pt 2)) + u.sec + (sub n.domain.curve u.sec) + (mod (add priv t) n.domain.curve) + :: + ++ tweak + |= =point + ^- @I + ?~ s + (tagged-hash:schnorr 'TapTweak' (to-octs x.point)) + %+ tagged-hash:schnorr 'TapTweak' + (catb ~[(to-octs x.point) (to-octs tapleaf-hash)]) + :: + ++ tapleaf-hash + ^- @I + =/ scrbyt=octs (en:scr (need s)) + %+ tagged-hash:schnorr 'TapLeaf' + (catb ~[1^0xc0 (encode-compact-size p.scrbyt) scrbyt]) + :: + ++ scriptspend + :: pre-signing (no script inputs, only ser-script and control block) + :: |= sin=(list octs) + ^- (list octs) + =/ sscr=octs (en:scr (need s)) + =+ cbyt=(add 0xc0 p:tweak-pubkey) + =/ control-block=octs + %- catb + :~ (to-octs cbyt) + (to-octs (need p)) + :: additional merkle hashes for multileaf taptree would go here - irrelevant for inscriptions rn + == + :: %+ welp (flop sin) :: assume script inputs provided in regular exec order + :~ sscr + control-block + == + -- +:: +:: consolidated bitcoin utils +:: hex +++ catb + |= dats=(list octs) + ^- octs + :- (roll (turn dats |=(o=octs -.o)) add) + (can 3 (flop dats)) +:: +++ to-octs + |= dat=@ + ^- octs + [(met 3 dat) dat] +:: +++ flipb + |= o=octs + ^- octs + [p.o (rev 3 o)] +:: +++ splitb + |= [n=@ o=octs] + ^- [octs octs] + =+ rest=(sub p.o n) + :- [n (rsh [3 (sub p.o n)] q.o)] + [rest (end [3 rest] q.o)] +:: +:: encoding +++ encode-compact-size + |= a=@ + ^- octs + =+ n=(met 3 a) + ?: =(n 0) 1^a + ?: =(n 1) 1^a + ?: =(n 2) (catb ~[1^0xfd (flipb 2^a)]) + ?: (lte n 4) (catb ~[1^0xfe (flipb 4^a)]) + ?: (lte n 8) (catb ~[1^0xff (flipb 8^a)]) + ~|(%invalid-compact-size !!) +:: +++ read-compact-size + |= b=octs + ^- [a=@ rest=octs] + =^ s b (splitb 1 b) + ?: (lth +.s 0xfd) [+.s b] + ~| %invalid-compact-size + =/ len=bloq + ?+ +.s !! + %0xfd 1 + %0xfe 2 + %0xff 3 + == + =^ k b (splitb (bex len) b) + :_ b + q:(flipb k) +:: +++ encode-outpoint + |= o=outpoint + ^- octs + %- catb + :~ (flipb 32^txid.o) + (flipb 4^vout.o) + == +:: +++ encode-scriptpubkey + |= spk=octs + (catb ~[(encode-compact-size p.spk) spk]) +-- diff --git a/desk/gub/lib/iso-8601.hoon b/desk/gub/lib/iso-8601.hoon new file mode 100644 index 0000000..afba0aa --- /dev/null +++ b/desk/gub/lib/iso-8601.hoon @@ -0,0 +1,292 @@ +:: This library contains a collection of functions to parse +:: and convert to and from a subset of ISO-8601 datetime formats +:: which are standard for HTML date and time inputs. +:: +=> |% + +$ delta [sign=? d=@dr] + ++ numb :: adapted from numb:enjs:format + |= a=@u + ^- tape + ?: =(0 a) "0" + %- flop + |- ^- tape + ?:(=(0 a) ~ [(add '0' (mod a 10)) $(a (div a 10))]) + :: + ++ zfill + |= [w=@ud t=tape] + ^- tape + ?: (lte w (lent t)) + t + $(t ['0' t]) + :: + ++ monadic-parsing + |% + :: parser bind + :: + ++ bind + |* =mold + |* [sef=rule gat=$-(mold rule)] + |= tub=nail + =/ vex (sef tub) + ?~ q.vex vex + ((gat p.u.q.vex) q.u.q.vex) + :: lookahead arbitrary rule + :: + ++ peek + |* sef=rule + |= tub=nail + =+ vex=(sef tub) + ?~ q.vex + [p=p.vex q=[~ u=[p=~ q=tub]]] + [p=p.vex q=[~ u=[p=[~ p.u.q.vex] q=tub]]] + :: try to parse and advance only on success + :: + ++ seek + |* sef=rule + |= tub=nail + =+ vex=(sef tub) + ?~ q.vex + [p=p.vex q=[~ u=[p=~ q=tub]]] + [p=p.vex q=[~ u=[p=[~ p.u.q.vex] q=q.u.q.vex]]] + :: + ++ exact-dem + |= n=@ud + =| digits=(list @ud) + |- + ?. =(0 n) + ;< d=@ud bind dit + $(n (dec n), digits [d digits]) + %- easy + %+ roll (flop digits) + =|([p=@ q=@] |.((add p (mul 10 q)))) :: code from +bass + :: + ++ at-least-dem + |= n=@ud + =| digits=(list @ud) + |- + ?. =(0 n) + ;< d=@ud bind dit + $(n (dec n), digits [d digits]) + ;< rest=@ud bind dem + %- easy + %+ add rest + %+ roll (flop digits) + =|([p=@ q=@] |.((add p (mul 10 q)))) :: code from +bass + -- + -- +|% +++ offset + |% + ++ en + |= =delta + ^- tape + ?> =(0 (mod d.delta ~m1)) + ;: weld + ?:(sign.delta "+" "-") + (zfill 2 (numb (div d.delta ~h1))) + ":" + (zfill 2 (numb (div (mod d.delta ~h1) ~m1))) + == + + ++ de |=(=@t `delta`(rash t parse)) + ++ de-soft |=(=@t `(unit delta)`(rush t parse)) + ++ parse + =, monadic-parsing + ;< sign=? bind (cook |=(=@t =(t '+')) ;~(pose lus hep)) + ;< h=@ud bind (exact-dem 2) + ;< * bind col + ;< m=@ud bind (exact-dem 2) + (easy `delta`[sign (add (mul h ~h1) (mul m ~m1))]) + -- +:: YYYY, -YYYY..., +YYYYY... +:: +++ year-input + |% + ++ en + |= [a=? y=@ud] + ^- tape + ?. a + ['-' (zfill 4 (numb (dec y)))] :: year 1 BC is year 0 in ISO-8601 + ?: (lth y 10.000) + (zfill 4 (numb y)) + ['+' (numb y)] + ++ de |=(=@t `[a=? y=@ud]`(rash t parse)) + ++ de-soft |=(=@t `(unit [a=? y=@ud])`(rush t parse)) + ++ parse + =, monadic-parsing + ;< sign=(unit char) bind (seek ;~(pose hep lus)) + ?~ sign + ;< y=@ud bind (exact-dem 4) + (easy [& y]) + ?^ (rush u.sign hep) + ;< y=@ud bind (at-least-dem 4) + (easy [| +(y)]) + ;< y=@ud bind (at-least-dem 5) + (easy [& y]) + -- +:: YYYY-MM +:: +++ month-input + |% + ++ en + |= [[a=? y=@ud] m=@ud] + ^- tape + %+ weld + (en:year-input a y) + "-{(zfill 2 (numb m))}" + ++ de |=(=@t `[[a=? y=@ud] m=@ud]`(rash t parse)) + ++ de-soft |=(=@t `(unit [[a=? y=@ud] m=@ud])`(rush t parse)) + ++ parse + =, monadic-parsing + ;< [a=? y=@ud] bind parse:year-input + ;< * bind hep + ;< m=@ud bind (exact-dem 2) + (easy [[a y] m]) + -- +:: YYYY-MM-DD +:: +++ date-input + |% + ++ en + |= [[a=? y=@ud] m=@ud d=@ud] + ^- tape + %+ weld + (en:month-input [a y] m) + "-{(zfill 2 (numb d))}" + ++ de |=(=@t `[[a=? y=@ud] m=@ud d=@ud]`(rash t parse)) + ++ de-soft |=(=@t `(unit [[a=? y=@ud] m=@ud d=@ud])`(rush t parse)) + ++ parse + =, monadic-parsing + ;< [[a=? y=@ud] m=@ud] bind parse:month-input + ;< * bind hep + ;< d=@ud bind (exact-dem 2) + (easy [[a y] m d]) + -- +:: HH:MM[:SS[.SSS]] +:: +++ time-input + =| sep=?(%',' %'.') + =/ places=@ud 3 + |% + ++ en + |= d=@dr + ^- tape + =/ =tape (weld (zfill 2 (numb (div d ~h1))) ":") + =. d (mod d ~h1) + =. tape (weld tape (zfill 2 (numb (div d ~m1)))) + =. d (mod d ~m1) + ?: =(0 d) + tape + =. tape :(weld tape ":" (zfill 2 (numb (div d ~s1)))) + =. d (mod d ~s1) + ?: =(0 d) + tape + ;: weld + tape + (trip sep) + (zfill places (numb (div (mul d (pow 10 places)) ~s1))) + == + ++ de |=(=@t `@dr`(rash t parse)) + ++ de-soft |=(=@t `(unit @dr)`(rush t parse)) + ++ parse + =, monadic-parsing + ;< h=@ud bind (exact-dem 2) + ;< * bind col + ;< m=@ud bind (exact-dem 2) + =/ d=@dr (add (mul h ~h1) (mul m ~m1)) + ;< col=(unit char) bind (seek col) + ?~ col + (easy d) + ;< s=@ud bind (exact-dem 2) + =. d (add d (mul s ~s1)) + ;< sep=(unit char) bind (seek ;~(pose dot com)) + ?~ sep + (easy d) + ;< f=@ud bind (exact-dem places) + (easy (add d (div (mul f ~s1) (pow 10 places)))) + -- +:: YYYY-MM-DDTHH:MM[:SS[.SSS]] +:: +++ datetime-local + |% + ++ en + |= d=@da + ^- tape + =/ date=tape (en:date-input [[a y] m d.t]:(yore d)) + =/ clock=tape (en:time-input `@dr`(mod d ~d1)) + :(weld date "T" clock) + :: + ++ de |=(=@t `@da`(rash t parse)) + ++ de-soft |=(=@t `(unit @da)`(rush t parse)) + ++ parse + =, monadic-parsing + ;< [[a=? y=@ud] m=@ud d=@ud] bind parse:date-input + ;< * bind (just 'T') + ;< clock=@dr bind parse:time-input + =/ d=@da (year [a y] m d 0 0 0 ~) + (easy (add d clock)) + -- +:: YYYY-Www +:: +++ week-input + |% + ++ en + |= [[a=? y=@ud] w=@ud] + ^- tape + ;: weld + (en:year-input a y) + "-W" + (zfill 2 (numb w)) + == + ++ de |=(=@t `[[a=? y=@ud] w=@ud]`(rash t parse)) + ++ de-soft |=(=@t `(unit [[a=? y=@ud] w=@ud])`(rush t parse)) + ++ parse + =, monadic-parsing + ;< [a=? y=@ud] bind parse:year-input + ;< * bind ;~(plug hep (just 'W')) + ;< w=@ud bind (exact-dem 2) + (easy [[a y] w]) + -- +:: YYYY-Www-D +:: +++ week-date + |% + ++ en + |= [[a=? y=@ud] w=@ud d=@ud] + ^- tape + ;: weld + (en:week-input [a y] w) + "-" + (numb +(d)) :: d is 0-indexed on Urbit + == + ++ de |=(=@t `[[a=? y=@ud] w=@ud d=@ud]`(rash t parse)) + ++ de-soft |=(=@t `(unit [[a=? y=@ud] w=@ud d=@ud])`(rush t parse)) + ++ parse + =, monadic-parsing + ;< [[a=? y=@ud] w=@ud] bind parse:week-input + ;< * bind hep + ;< d=@ud bind (exact-dem 1) + (easy [[a y] w (dec d)]) :: d is 0-indexed on Urbit + -- +:: YYYY-DDD +:: +++ ordinal-date + |% + ++ en + |= [[a=? y=@ud] n=@ud] + ^- tape + ;: weld + (en:year-input a y) + "-" + (zfill 3 (numb n)) + == + ++ de |=(=@t `[[a=? y=@ud] n=@ud]`(rash t parse)) + ++ de-soft |=(=@t `(unit [[a=? y=@ud] n=@ud])`(rush t parse)) + ++ parse + =, monadic-parsing + ;< [a=? y=@ud] bind parse:year-input + ;< * bind hep + ;< n=@ud bind (exact-dem 3) + (easy [[a y] n]) + -- +-- diff --git a/desk/gub/lib/mcp/add-mcp-tool.hoon b/desk/gub/lib/mcp/add-mcp-tool.hoon new file mode 100644 index 0000000..f7b7029 --- /dev/null +++ b/desk/gub/lib/mcp/add-mcp-tool.hoon @@ -0,0 +1,50 @@ +/< tools /lib/nex/tools.hoon +:: add-mcp-tool: add a custom MCP tool +:: +:: Writes Hoon source to the ball mirror at /code/lib/mcp/ +:: so build-code compiles it into bins. Then checks compilation +:: result via %code dart. +:: +!: +^- tool:tools +|% +++ name 'add_mcp_tool' +++ description + ^~ %- crip + ;: weld + "Add a custom MCP tool by writing Hoon source to the " + "build pipeline at /code/lib/mcp/. The source is " + "compiled by build-code and made available via bins. " + "The source must produce a valid tool:tools. " + "Use check_bin to verify compilation status." + == +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['name' [%string 'Tool filename without extension (e.g. "my-tool")']] + ['source' [%string 'Hoon source code that produces a tool:tools']] + == +++ required ~['name' 'source'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t] tang) + %- mule |. + :- (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /source so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (name, source)']) + =/ [tool-name=@ta source=@t] p.parsed + =/ file-name=@ta (cat 3 tool-name '.hoon') + =/ road=road:tarball + [%& %& /code/lib/mcp file-name] + :: Write source to ball mirror + ;< exists=? bind:m (peek-exists:io road) + ?: exists + ;< ~ bind:m (over:io road [[/ %hoon] !>(source)]) + (pure:m [%text (crip "Source written: /code/lib/mcp/{(trip file-name)}. Use check_bin to verify compilation.")]) + ;< ~ bind:m (make:io road |+[%.n [[/ %hoon] !>(source)] ~]) + (pure:m [%text (crip "Source written: /code/lib/mcp/{(trip file-name)}. Use check_bin to verify compilation.")]) +-- diff --git a/desk/gub/lib/mcp/add-weir.hoon b/desk/gub/lib/mcp/add-weir.hoon new file mode 100644 index 0000000..ef9dbcd --- /dev/null +++ b/desk/gub/lib/mcp/add-weir.hoon @@ -0,0 +1,75 @@ +/< tools /lib/nex/tools.hoon +:: add-weir: add a sandbox rule to a directory +:: +!: +^- tool:tools +|% +++ name 'add_weir' +++ description 'Add a sandbox (weir) rule to a directory. Categories: write, poke, read. Road types: dir, file. Use steps_up for relative roads.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Directory to add the weir rule to (e.g. "/mcp.mcp")']] + ['category' [%string 'Rule category: "write", "poke", or "read"']] + ['road_path' [%string 'Allowed road path (e.g. "/")']] + ['road_type' [%string 'Road type: "dir" or "file"']] + ['steps_up' [%string 'Steps up for relative road (e.g. "1" means ../, "0" means ./). Omit for absolute road.']] + == +++ required ~['path' 'category' 'road_path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t @t] tang) + %- mule |. + :+ (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /category so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /'road_path' so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, category, road_path)']) + =/ [weir-path=@t category=@t road-path=@t] p.parsed + =/ road-type=@t + ?~ rt=(~(get jo:json-utils [%o args.st]) /'road_type') 'dir' + ?. ?=([%s *] u.rt) 'dir' + p.u.rt + =/ steps-up=(unit @ud) + ?~ su=(~(get jo:json-utils [%o args.st]) /'steps_up') ~ + ?. ?=([%s *] u.su) ~ + `(rash p.u.su dem) + =/ pax=path + =/ t=tape (trip road-path) + =/ clean=tape ?:(&(!=(~ t) =('/' (rear t))) (snip t) t) + ?~ clean / + (stab (crip clean)) + =/ new-road=road:tarball + ?^ steps-up + :: relative road (bend): steps up + lane + ?: =('file' road-type) + ?~ pax [%| u.steps-up %| /] + [%| u.steps-up %& (snip `path`pax) (rear pax)] + [%| u.steps-up %| pax] + :: absolute road + ?: =('file' road-type) + ?~ pax [%& %| /] + [%& %& (snip `path`pax) (rear pax)] + [%& %| pax] + =/ dir-pax=path + =/ t=tape (trip weir-path) + =/ clean=tape ?:(&(!=(~ t) =('/' (rear t))) (snip t) t) + ?~ clean / + (stab (crip clean)) + ;< dir-seen=seen:nexus bind:m (peek:io [%& %| dir-pax] ~) + =/ cur=weir:nexus + ?. ?=([%& %ball *] dir-seen) [~ ~ ~] + =/ dir-sand=sand:nexus sand.p.dir-seen + (fall fil.dir-sand [~ ~ ~]) + =/ new=weir:nexus + ?+ category cur + %'write' cur(make (~(put in make.cur) new-road)) + %'poke' cur(poke (~(put in poke.cur) new-road)) + %'read' cur(peek (~(put in peek.cur) new-road)) + == + ;< ~ bind:m (sand:io [%& %| dir-pax] `new) + (pure:m [%text (crip "Added {(trip category)} rule to {(trip weir-path)}")]) +-- diff --git a/desk/lib/nex/mcp/tools/batch-edit-clay.hoon b/desk/gub/lib/mcp/batch-edit-clay.hoon similarity index 77% rename from desk/lib/nex/mcp/tools/batch-edit-clay.hoon rename to desk/gub/lib/mcp/batch-edit-clay.hoon index 4cd491b..cb97b62 100644 --- a/desk/lib/nex/mcp/tools/batch-edit-clay.hoon +++ b/desk/gub/lib/mcp/batch-edit-clay.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: batch-edit-clay: edit multiple files in Clay as a single atomic commit :: !: @@ -31,30 +32,33 @@ ?^ err =/ lines=wall (zing (turn (flop u.err) |=(=tank (wash [0 80] tank)))) (pure:m [%error (crip "Clay build failed:\0a{(of-wall:format lines)}")]) - =/ desk=@t - %. [%o args.st] - (ot:dejs:format ~[['desk' so:dejs:format]]) - =/ edits-json=json + =/ parsed=(each [@t json] tang) + %- mule |. + :- %.([%o args.st] (ot:dejs:format ~[['desk' so:dejs:format]])) (~(got by args.st) 'edits') + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (desk, edits)']) + =/ [desk=@t edits-json=json] p.parsed ?. ?=([%a *] edits-json) (pure:m [%error 'edits must be a JSON array']) =/ edit-list=(list json) p.edits-json ?~ edit-list (pure:m [%error 'edits array is empty']) =/ dek=@tas (slav %tas desk) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - =/ instructions=(list [pax=path mark=@tas content=@t]) ~ + ;< our=@p bind:m get-our:io + ;< now=@da bind:m get-time:io + =/ instructions=(list [pax=path mark=@tas blob=*]) ~ =/ file-names=(list @t) ~ =/ remaining=(list json) edit-list |- ?~ remaining ?~ instructions (pure:m [%error 'no valid edits to apply']) - ;< initial=cass:clay bind:m (do-scry:io cass:clay /scry /cw/[dek]) - =/ ins=(list [path %ins @tas vase]) + ;< initial=cass:clay bind:m (scry:io cass:clay /cw/[dek]) + =/ ins=(list [path %ins @tas *]) %+ turn (flop instructions) - |= [pax=path mark=@tas content=@t] - [pax %ins mark !>(content)] + |= [pax=path mark=@tas blob=*] + [pax %ins mark blob] =/ write-data=json %- pairs:enjs:format :~ ['initial-ud' (numb:enjs:format ud.initial)] @@ -65,11 +69,11 @@ ;< ~ bind:m (replace:io !>([tool.st args.st %batch-editing write-data ~])) ;< * bind:m (keep:io /dill/logs [%& %& /sys/dill %'logs.dill-told'] ~) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io ;< ~ bind:m - (send-card:io %pass /commit-timeout %arvo %b %wait (add now.bowl ~s30)) + (set-timer:io /commit-timeout (add now ~s30)) ;< ~ bind:m - (gall-poke-our:io %hood kiln-info+!>(["" `[dek %& ins]])) + (clay-info:io dek ins) ;< ~ bind:m collect-logs:tools ;< ~ bind:m (drop:io /dill/logs [%& %& /sys/dill %'logs.dill-told']) ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) @@ -98,11 +102,13 @@ ?~ pax (pure:m [%error (crip "empty path in edit")]) =/ mark=@tas (rear pax) - ;< =riot:clay bind:m - (warp:io our.bowl dek ~ %sing %x da+now.bowl pax) - ?~ riot + ?. ?=(?(%hoon %json %html %css %js %md %txt) mark) + (pure:m [%error (crip "Unsupported mark: %{(trip mark)}. Use hoon, json, html, css, js, md, or txt.")]) + ;< has=? bind:m (scry:io ? (weld /cu/[dek] pax)) + ?. has (pure:m [%error (crip "File not found: {(trip file-path.u.parsed)}")]) - =/ =tang (pretty-file:pretty-file:tools !<(noun q.r.u.riot)) + ;< =vase bind:m (scry:io vase (weld /cr/[dek] pax)) + =/ =tang (pretty-file:pretty-file:tools !<(noun vase)) =/ =wain %- zing %+ turn tang @@ -119,9 +125,10 @@ =/ before=tape (scag u.idx text) =/ after=tape (slag (add u.idx (lent old-tape)) text) =/ result=@t (crip (zing ~[before new-tape after])) + =/ blob=* ?:(?=(%txt mark) (to-wain:format result) result) %= $ remaining t.remaining - instructions [[pax mark result] instructions] + instructions [[pax mark blob] instructions] file-names [file-path.u.parsed file-names] == %batch-editing diff --git a/desk/gub/lib/mcp/browse.hoon b/desk/gub/lib/mcp/browse.hoon new file mode 100644 index 0000000..f33368e --- /dev/null +++ b/desk/gub/lib/mcp/browse.hoon @@ -0,0 +1,53 @@ +/< tools /lib/nex/tools.hoon +:: browse: list files and subdirectories at a path in the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'browse' +++ description 'List files and subdirectories at a path in the grubbery ball' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['path' [%string 'Directory path (e.g. "/" or "/mcp.mcp")']]]) +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /path so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: path']) + =/ dir-path=@t p.parsed + =/ pax=path + =/ t=tape (trip dir-path) + =/ stripped=tape + ?: &((gth (lent t) 1) =('/' (rear t))) + (snip `(list @)`t) + t + (stab (crip stripped)) + ;< =seen:nexus bind:m (peek:io [%& %| pax] ~) + ?. ?=([%& %ball *] seen) + (pure:m [%error (crip "Directory not found: {(trip dir-path)}")]) + =/ neck-text=tape + ?~ fil.ball.p.seen "" + ?~ neck.u.fil.ball.p.seen "" + "\0aNexus: {(spud (snoc path.u.neck.u.fil.ball.p.seen name.u.neck.u.fil.ball.p.seen))}" + =/ sub-dirs=(list @ta) ~(tap in ~(key by dir.ball.p.seen)) + =/ files=(list [@ta @tas]) + ?~ fil.ball.p.seen ~ + %+ turn ~(tap by contents.u.fil.ball.p.seen) + |=([n=@ta c=content:tarball] [n name.p.sage.c]) + =/ dir-text=tape + ?~ sub-dirs "" + %- zing + %+ turn sub-dirs + |=(d=@ta "\0a {(trip d)}/") + =/ file-text=tape + ?~ files "" + %- zing + %+ turn files + |=([n=@ta m=@tas] "\0a {(trip n)}") + (pure:m [%text (crip "{(trip dir-path)}{neck-text}{dir-text}{file-text}")]) +-- diff --git a/desk/gub/lib/mcp/call-tool.hoon b/desk/gub/lib/mcp/call-tool.hoon new file mode 100644 index 0000000..fc4365e --- /dev/null +++ b/desk/gub/lib/mcp/call-tool.hoon @@ -0,0 +1,54 @@ +/< tools /lib/nex/tools.hoon +:: call-tool: invoke any tool by name, including dynamically added ones +:: +!: +^- tool:tools +|% +++ name 'call_tool' +++ description + ^~ %- crip + ;: weld + "Call any MCP tool by name, including dynamically added tools " + "that are not in your cached tools/list. Use list_tools to " + "discover available tools first. Pass the tool name and its " + "arguments as a JSON object." + == +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['tool_name' [%string 'Name of the tool to call (e.g. "echo", "my_custom_tool")']] + ['tool_args' [%object 'Arguments to pass to the tool as a JSON object']] + == +++ required ~['tool_name'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /'tool_name' so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: tool_name']) + =/ tool-name=@t p.parsed + =/ tool-args=(map @t json) + =/ v (~(get jo:json-utils [%o args.st]) /'tool_args') + ?~ v ~ + ?. ?=([%o *] u.v) ~ + p.u.v + :: Convert underscores to hyphens for filename lookup + =/ file-name=@ta + (crip (turn (trip tool-name) |=(c=@t ?:(=(c '_') '-' c)))) + :: Look up compiled tool from bins + ;< res=built:nexus bind:m (get-code-full:io [%& %& /code/lib/mcp file-name]) + ?. ?=(%vase -.res) + (pure:m [%error (crip "Tool not found: {(trip tool-name)}")]) + =/ got=(each tool:tools tang) + (mule |.(!<(tool:tools vase.res))) + ?. ?=(%& -.got) + (pure:m [%error (crip "Tool {(trip tool-name)} failed type check")]) + :: Swap state to target tool's args and run handler + =/ tl=tool:tools p.got + ;< ~ bind:m + (replace:io !>(`tool-state:tools`[tool-name tool-args %start *json ~])) + handler.tl +-- diff --git a/desk/gub/lib/mcp/check-bin.hoon b/desk/gub/lib/mcp/check-bin.hoon new file mode 100644 index 0000000..0ee47dc --- /dev/null +++ b/desk/gub/lib/mcp/check-bin.hoon @@ -0,0 +1,75 @@ +/< tools /lib/nex/tools.hoon +:: check-bin: check if a build artifact compiled or has errors +:: +:: Looks up an artifact in bins via %code dart. Returns the +:: compilation error tang if it failed, or confirms success. +:: +^- tool:tools +|% +++ name 'check_bin' +++ description + ^~ %- crip + ;: weld + "Check if a build artifact compiled successfully. " + "Provide the bins path and name to look up. " + "Example: path='/lib/mcp' name='echo' to check " + "the compiled echo tool. Returns the error tang " + "if compilation failed, or confirms success." + == +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Bins path (e.g. "/lib/mcp", "/mar", "/nex", "/das")']] + ['name' [%string 'Artifact name (e.g. "echo", "txt", "server")']] + ['code' [%string 'Code namespace path (default: "/code"). e.g. "/my/custom/code"']] + ['show' [%boolean 'Show the compiled noun via +sell (default: false)']] + == +++ required ~['path' 'name'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t] tang) + %- mule |. + :- (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, name)']) + =/ [pax=@t nam=@t] p.parsed + =/ code-ns=path + =/ raw=(unit @t) + ?~ p=(~(get jo:json-utils [%o args.st]) /code) ~ + ?. ?=([%s *] u.p) ~ + ?: =('' p.u.p) ~ + `p.u.p + ?~ raw /code + (stab u.raw) + =/ show=? + =/ p (~(get jo:json-utils [%o args.st]) /show) + ?~ p %.n + ?+ u.p %.n + [%b *] p.u.p + == + =/ bin-path=path + =/ pax-t=tape (trip pax) + =/ full=@t ?:(=('/' (end 3 pax)) pax (crip "/{pax-t}")) + =/ res=(each path tang) (mule |.((stab full))) + ?:(?=(%& -.res) p.res /(crip pax-t)) + =/ bin-name=@ta (crip (trip nam)) + ;< res=built:nexus bind:m (get-code-full:io [%& %& (weld code-ns bin-path) bin-name]) + ?: ?=(%vase -.res) + =/ msg=tape "OK: {(trip pax)}/{(trip nam)} compiled successfully" + ?. show + (pure:m [%text (crip msg)]) + =/ printed=tape + ~(ram re (sell vase.res)) + (pure:m [%text (crip "{msg}\0a\0a{printed}")]) + ?. ?=(%tang -.res) + (pure:m [%text (crip "OK: {(trip pax)}/{(trip nam)} — non-vase artifact")]) + =/ rendered=tape + %- zing + %+ turn (flop tang.res) + |=(=tank (weld ~(ram re tank) "\0a")) + (pure:m [%text (crip "FAILED: {(trip pax)}/{(trip nam)}\0a{rendered}")]) +-- diff --git a/desk/gub/lib/mcp/clear-weir.hoon b/desk/gub/lib/mcp/clear-weir.hoon new file mode 100644 index 0000000..367f74f --- /dev/null +++ b/desk/gub/lib/mcp/clear-weir.hoon @@ -0,0 +1,30 @@ +/< tools /lib/nex/tools.hoon +:: clear-weir: clear all sandbox rules from a directory +:: +!: +^- tool:tools +|% +++ name 'clear_weir' +++ description 'Clear all sandbox (weir) rules from a directory, giving it unrestricted access' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['path' [%string 'Directory to clear the weir from']]]) +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /path so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: path']) + =/ weir-path=@t p.parsed + =/ dir-pax=path + =/ t=tape (trip weir-path) + =/ clean=tape ?:(&(!=(~ t) =('/' (rear t))) (snip t) t) + ?~ clean / + (stab (crip clean)) + ;< ~ bind:m (sand:io [%& %| dir-pax] ~) + (pure:m [%text (crip "Cleared weir from {(trip weir-path)}")]) +-- diff --git a/desk/gub/lib/mcp/commit.hoon b/desk/gub/lib/mcp/commit.hoon new file mode 100644 index 0000000..8c7ccac --- /dev/null +++ b/desk/gub/lib/mcp/commit.hoon @@ -0,0 +1,63 @@ +/< tools /lib/nex/tools.hoon +:: commit: commit a mounted desk and return version info with logs +:: +!: +^- tool:tools +|% +++ name 'commit' +++ description 'Commit a mounted desk and return version info with logs' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['mount_point' [%string 'Mount point name (e.g. "base")']] + ['timeout_seconds' [%number 'Timeout in seconds to wait for logs (default: 30)']] + == +++ required ~['mount_point'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + ?+ step.st (pure:m [%error 'Unknown commit step']) + %start + =/ mount-point-json=(unit json) + (~(get by args.st) 'mount_point') + ?~ mount-point-json + (pure:m [%error 'Missing required argument: mount_point']) + ?. ?=([%s *] u.mount-point-json) + (pure:m [%error 'mount_point must be a string']) + =/ mount-point=@tas (slav %tas p.u.mount-point-json) + =/ timeout-seconds=@ud + ?~ timeout-json=(~(get by args.st) 'timeout_seconds') + 30 + ?. ?=([%n *] u.timeout-json) + 30 + (rash p.u.timeout-json dem) + =/ timeout=@dr (mul timeout-seconds ~s1) + ;< initial=cass:clay bind:m (scry:io cass:clay /cw/[mount-point]) + =/ commit-data=json + %- pairs:enjs:format + :~ ['initial-ud' (numb:enjs:format ud.initial)] + ['initial-da' s+(scot %da da.initial)] + ['logs' a+~] + == + ;< ~ bind:m + (replace:io !>([tool.st args.st %committing commit-data ~])) + ~& >> "%commit: subscribing to dill logs" + ;< * bind:m (keep:io /dill/logs [%& %& /sys/dill %'logs.dill-told'] ~) + ;< now=@da bind:m get-time:io + ~& >> "%commit: setting timeout timer" + ;< ~ bind:m + (set-timer:io /commit-timeout (add now timeout)) + ~& >> "%commit: poking hood" + ;< ~ bind:m (gall-poke-our:io %hood kiln-commit+[mount-point %.n]) + ~& >> "%commit: collecting logs" + ;< ~ bind:m collect-logs:tools + ~& >> "%commit: done collecting" + ;< ~ bind:m (drop:io /dill/logs [%& %& /sys/dill %'logs.dill-told']) + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + (finish-commit:tools args.st data.st) + %committing + (finish-commit:tools args.st data.st) + == +-- diff --git a/desk/gub/lib/mcp/copy-dir.hoon b/desk/gub/lib/mcp/copy-dir.hoon new file mode 100644 index 0000000..c61d1d2 --- /dev/null +++ b/desk/gub/lib/mcp/copy-dir.hoon @@ -0,0 +1,34 @@ +/< tools /lib/nex/tools.hoon +:: copy-dir: copy a directory within the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'copy_dir' +++ description 'Copy a directory and all its contents within the grubbery ball. Source and destination are absolute paths.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['src' [%string 'Source directory path (e.g. "/code/lib/nex")']] + ['dst' [%string 'Destination directory path (e.g. "/claw.claw_app/agents/testing/apps/code/lib/nex")']] + == +++ required ~['src' 'dst'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ src=(unit @t) (~(deg jo:json-utils [%o args.st]) /src so:dejs:format) + =/ dst=(unit @t) (~(deg jo:json-utils [%o args.st]) /dst so:dejs:format) + ?~ src (pure:m [%error 'Missing required argument: src']) + ?~ dst (pure:m [%error 'Missing required argument: dst']) + =/ src-road=road:tarball [%& %| (stab u.src)] + =/ dst-road=road:tarball [%& %| (stab u.dst)] + :: read source directory + ;< =seen:nexus bind:m (peek:io src-road ~) + ?. ?=([%& %ball *] seen) + (pure:m [%error (crip "Source not found or not a directory: {(trip u.src)}")]) + :: create destination with source's ball subtree + ;< ~ bind:m (make:io dst-road &+[sand.p.seen gain.p.seen ball.p.seen]) + (pure:m [%text (crip "Copied {(trip u.src)} -> {(trip u.dst)}")]) +-- diff --git a/desk/gub/lib/mcp/copy-grub.hoon b/desk/gub/lib/mcp/copy-grub.hoon new file mode 100644 index 0000000..18146ad --- /dev/null +++ b/desk/gub/lib/mcp/copy-grub.hoon @@ -0,0 +1,44 @@ +/< tools /lib/nex/tools.hoon +:: copy-grub: copy a file within the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'copy_grub' +++ description 'Copy a file within the grubbery ball. Source and destination are absolute paths.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['src_path' [%string 'Source directory (e.g. "/code/lib/nex")']] + ['src_name' [%string 'Source filename (e.g. "tools.hoon")']] + ['dst_path' [%string 'Destination directory (e.g. "/claw.claw_app/agents/testing/apps/code/lib/nex")']] + ['dst_name' [%string 'Destination filename (defaults to src_name if omitted)']] + == +++ required ~['src_path' 'src_name' 'dst_path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ src-path=(unit @t) (bind (~(get by args.st) 'src_path') |=(j=json ?>(?=(%s -.j) p.j))) + =/ src-name=(unit @t) (bind (~(get by args.st) 'src_name') |=(j=json ?>(?=(%s -.j) p.j))) + =/ dst-path=(unit @t) (bind (~(get by args.st) 'dst_path') |=(j=json ?>(?=(%s -.j) p.j))) + =/ dst-name=(unit @t) (bind (~(get by args.st) 'dst_name') |=(j=json ?>(?=(%s -.j) p.j))) + ?~ src-path (pure:m [%error 'Missing required argument: src_path']) + ?~ src-name (pure:m [%error 'Missing required argument: src_name']) + ?~ dst-path (pure:m [%error 'Missing required argument: dst_path']) + =/ dn=@ta (fall dst-name u.src-name) + =/ src-road=road:tarball [%& %& (stab u.src-path) u.src-name] + =/ dst-road=road:tarball [%& %& (stab u.dst-path) dn] + :: read source + ;< =seen:nexus bind:m (peek:io src-road ~) + ?. ?=([%& %file *] seen) + (pure:m [%error (crip "Source not found: {(trip u.src-path)}/{(trip u.src-name)}")]) + :: write destination + ;< exists=? bind:m (peek-exists:io dst-road) + ?: exists + ;< ~ bind:m (over:io dst-road sage.p.seen) + (pure:m [%text (crip "Copied {(trip u.src-path)}/{(trip u.src-name)} -> {(trip u.dst-path)}/{(trip dn)}")]) + ;< ~ bind:m (make:io dst-road |+[%.n sage.p.seen ~]) + (pure:m [%text (crip "Copied {(trip u.src-path)}/{(trip u.src-name)} -> {(trip u.dst-path)}/{(trip dn)}")]) +-- diff --git a/desk/gub/lib/mcp/create-folder.hoon b/desk/gub/lib/mcp/create-folder.hoon new file mode 100644 index 0000000..ff0cd64 --- /dev/null +++ b/desk/gub/lib/mcp/create-folder.hoon @@ -0,0 +1,33 @@ +/< tools /lib/nex/tools.hoon +:: create-folder: create a folder in the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'create_folder' +++ description 'Create a folder in the grubbery ball.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Parent directory path (e.g. "/")']] + ['name' [%string 'Folder name']] + == +++ required ~['path' 'name'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t] tang) + %- mule |. + :- (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, name)']) + =/ [parent-path=@t folder-name=@t] p.parsed + =/ dir-name=@ta folder-name + =/ folder-path=path (snoc (stab parent-path) dir-name) + =/ new-ball=ball:tarball [`[~ ~ ~] ~] + ;< ~ bind:m (make:io [%& %| folder-path] &+[*sand:nexus *gain:nexus new-ball]) + (pure:m [%text (crip "Created folder {(spud folder-path)}")]) +-- diff --git a/desk/gub/lib/mcp/create-symlink.hoon b/desk/gub/lib/mcp/create-symlink.hoon new file mode 100644 index 0000000..d8c6909 --- /dev/null +++ b/desk/gub/lib/mcp/create-symlink.hoon @@ -0,0 +1,36 @@ +/< tools /lib/nex/tools.hoon +:: create-symlink: create a symlink in the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'create_symlink' +++ description 'Create a symlink in the grubbery ball. Target is an absolute path like "/some/file" or a relative path like "^^/sibling".' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Directory to create the symlink in (e.g. "/")']] + ['name' [%string 'Symlink name']] + ['target' [%string 'Target path (e.g. "/some/path" for absolute, "^^/sibling" for relative)']] + == +++ required ~['path' 'name' 'target'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t @t] tang) + %- mule |. + :+ (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /target so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, name, target)']) + =/ [link-path=@t link-name=@t target=@t] p.parsed + =/ sym=(unit symlink:tarball) (parse-symlink:tarball target) + ?~ sym + (pure:m [%error (crip "Invalid symlink target: {(trip target)}")]) + ;< ~ bind:m + (make:io [%& %& (stab link-path) link-name] |+[%.n [[/ %symlink] !>(u.sym)] ~]) + (pure:m [%text (crip "Created symlink {(trip link-path)}/{(trip link-name)} -> {(trip target)}")]) +-- diff --git a/desk/gub/lib/mcp/del-weir.hoon b/desk/gub/lib/mcp/del-weir.hoon new file mode 100644 index 0000000..39dc83c --- /dev/null +++ b/desk/gub/lib/mcp/del-weir.hoon @@ -0,0 +1,73 @@ +/< tools /lib/nex/tools.hoon +:: del-weir: remove a sandbox rule from a directory +:: +!: +^- tool:tools +|% +++ name 'del_weir' +++ description 'Remove a sandbox (weir) rule from a directory' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Directory to remove the weir rule from']] + ['category' [%string 'Rule category: "write", "poke", or "read"']] + ['road_path' [%string 'Road path to remove']] + ['road_type' [%string 'Road type: "dir" or "file"']] + ['steps_up' [%string 'Steps up for relative road (e.g. "1"). Omit for absolute road.']] + == +++ required ~['path' 'category' 'road_path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t @t] tang) + %- mule |. + :+ (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /category so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /'road_path' so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, category, road_path)']) + =/ [weir-path=@t category=@t road-path=@t] p.parsed + =/ road-type=@t + ?~ rt=(~(get jo:json-utils [%o args.st]) /'road_type') 'dir' + ?. ?=([%s *] u.rt) 'dir' + p.u.rt + =/ steps-up=(unit @ud) + ?~ su=(~(get jo:json-utils [%o args.st]) /'steps_up') ~ + ?. ?=([%s *] u.su) ~ + `(rash p.u.su dem) + =/ pax=path + =/ t=tape (trip road-path) + =/ clean=tape ?:(&(!=(~ t) =('/' (rear t))) (snip t) t) + ?~ clean / + (stab (crip clean)) + =/ del-road=road:tarball + ?^ steps-up + ?: =('file' road-type) + ?~ pax [%| u.steps-up %| /] + [%| u.steps-up %& (snip `path`pax) (rear pax)] + [%| u.steps-up %| pax] + ?: =('file' road-type) + ?~ pax [%& %| /] + [%& %& (snip `path`pax) (rear pax)] + [%& %| pax] + =/ dir-pax=path + =/ t=tape (trip weir-path) + =/ clean=tape ?:(&(!=(~ t) =('/' (rear t))) (snip t) t) + ?~ clean / + (stab (crip clean)) + ;< dir-seen=seen:nexus bind:m (peek:io [%& %| dir-pax] ~) + =/ cur=weir:nexus + ?. ?=([%& %ball *] dir-seen) [~ ~ ~] + =/ dir-sand=sand:nexus sand.p.dir-seen + (fall fil.dir-sand [~ ~ ~]) + =/ new=weir:nexus + ?+ category cur + %'write' cur(make (~(del in make.cur) del-road)) + %'poke' cur(poke (~(del in poke.cur) del-road)) + %'read' cur(peek (~(del in peek.cur) del-road)) + == + ;< ~ bind:m (sand:io [%& %| dir-pax] `new) + (pure:m [%text (crip "Removed {(trip category)} rule from {(trip weir-path)}")]) +-- diff --git a/desk/gub/lib/mcp/delete-clay-file.hoon b/desk/gub/lib/mcp/delete-clay-file.hoon new file mode 100644 index 0000000..a830115 --- /dev/null +++ b/desk/gub/lib/mcp/delete-clay-file.hoon @@ -0,0 +1,74 @@ +/< tools /lib/nex/tools.hoon +:: delete-clay-file: delete a file from a Clay desk +:: +!: +^- tool:tools +|% +++ name 'delete_clay_file' +++ description + ^~ %- crip + ;: weld + "Delete a file from a Clay desk. " + "Path uses slashes including mark: /gub/nex/wallet/hoon (not .hoon). " + "Fails if the file does not exist." + == +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['desk' [%string 'Desk name (e.g. "grubbery")']] + ['path' [%string 'File path including mark (e.g. "/gub/nex/wallet/hoon")']] + == +++ required ~['desk' 'path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + ?+ step.st (pure:m [%error 'Unknown delete step']) + %start + ;< err=(unit tang) bind:m (sleep-or-crud:tools (div ~s1 10)) + ?^ err + =/ lines=wall (zing (turn (flop u.err) |=(=tank (wash [0 80] tank)))) + (pure:m [%error (crip "Clay build failed:\0a{(of-wall:format lines)}")]) + =/ parsed=(each [@t @t] tang) + %- mule |. + %. [%o args.st] + %- ot:dejs:format + :~ ['desk' so:dejs:format] + ['path' so:dejs:format] + == + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (desk, path)']) + =/ [desk=@t file-path=@t] p.parsed + =/ dek=@tas (slav %tas desk) + =/ pax=path (stab file-path) + ?~ pax + (pure:m [%error 'Empty path']) + :: Verify file exists before deleting + ;< has=? bind:m (scry:io ? (weld /cu/[dek] pax)) + ?. has + (pure:m [%error (crip "File not found: {(trip file-path)}")]) + ;< initial=cass:clay bind:m (scry:io cass:clay /cw/[dek]) + =/ write-data=json + %- pairs:enjs:format + :~ ['initial-ud' (numb:enjs:format ud.initial)] + ['desk' s+desk] + ['file-path' s+file-path] + ['logs' a+~] + == + ;< ~ bind:m + (replace:io !>([tool.st args.st %deleting write-data ~])) + ;< * bind:m (keep:io /dill/logs [%& %& /sys/dill %'logs.dill-told'] ~) + ;< now=@da bind:m get-time:io + ;< ~ bind:m + (set-timer:io /commit-timeout (add now ~s30)) + ;< ~ bind:m + (clay-info:io dek [pax %del ~]~) + ;< ~ bind:m collect-logs:tools + ;< ~ bind:m (drop:io /dill/logs [%& %& /sys/dill %'logs.dill-told']) + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + (finish-clay-write:tools args.st data.st) + %deleting + (finish-clay-write:tools args.st data.st) + == +-- diff --git a/desk/gub/lib/mcp/delete-folder.hoon b/desk/gub/lib/mcp/delete-folder.hoon new file mode 100644 index 0000000..578bb89 --- /dev/null +++ b/desk/gub/lib/mcp/delete-folder.hoon @@ -0,0 +1,25 @@ +/< tools /lib/nex/tools.hoon +:: delete-folder: delete a folder and all its contents +:: +!: +^- tool:tools +|% +++ name 'delete_folder' +++ description 'Delete a folder and all its contents from the grubbery ball' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['path' [%string 'Path of the folder to delete (e.g. "/old/stuff")']]]) +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /path so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: path']) + =/ folder-path=@t p.parsed + ;< ~ bind:m (cull:io [%& %| (stab folder-path)]) + (pure:m [%text (crip "Deleted folder {(trip folder-path)}")]) +-- diff --git a/desk/gub/lib/mcp/delete-grub.hoon b/desk/gub/lib/mcp/delete-grub.hoon new file mode 100644 index 0000000..dd99c3d --- /dev/null +++ b/desk/gub/lib/mcp/delete-grub.hoon @@ -0,0 +1,30 @@ +/< tools /lib/nex/tools.hoon +:: delete-grub: delete a grub (file) from the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'delete_grub' +++ description 'Delete a grub (file) from the grubbery ball' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Directory containing the grub (e.g. "/mcp.mcp/tools")']] + ['name' [%string 'Grub filename to delete']] + == +++ required ~['path' 'name'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t] tang) + %- mule |. + :- (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, name)']) + =/ [file-path=@t file-name=@t] p.parsed + ;< ~ bind:m (cull:io [%& %& (stab file-path) file-name]) + (pure:m [%text (crip "Deleted {(trip file-path)}/{(trip file-name)}")]) +-- diff --git a/desk/gub/lib/mcp/desk-version.hoon b/desk/gub/lib/mcp/desk-version.hoon new file mode 100644 index 0000000..e200271 --- /dev/null +++ b/desk/gub/lib/mcp/desk-version.hoon @@ -0,0 +1,31 @@ +/< tools /lib/nex/tools.hoon +:: desk-version: get the current version of a desk +:: +!: +^- tool:tools +|% +++ name 'desk_version' +++ description 'Get the current version of a desk' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['desk' [%string 'Desk name (e.g. "base")']]]) +++ required ~['desk'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /desk so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: desk']) + =/ dek=@tas p.parsed + ;< =cass:clay bind:m (scry:io cass:clay /cw/[dek]) + =/ result=tape + ;: weld + "Desk: {(trip dek)}\0a" + "Version: {}\0a" + "Date: {(scow %da da.cass)}" + == + (pure:m [%text (crip result)]) +-- diff --git a/desk/gub/lib/mcp/echo.hoon b/desk/gub/lib/mcp/echo.hoon new file mode 100644 index 0000000..ea320af --- /dev/null +++ b/desk/gub/lib/mcp/echo.hoon @@ -0,0 +1,23 @@ +/< tools /lib/nex/tools.hoon +:: echo: simple test tool that echoes back its input +:: +^- tool:tools +|% +++ name 'echo' +++ description 'Echoes back the provided message' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['message' [%string 'The message to echo back']]]) +++ required ~['message'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /message so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: message']) + =/ msg=@t p.parsed + (pure:m [%text msg]) +-- diff --git a/desk/lib/nex/mcp/tools/edit-clay-file.hoon b/desk/gub/lib/mcp/edit-clay-file.hoon similarity index 77% rename from desk/lib/nex/mcp/tools/edit-clay-file.hoon rename to desk/gub/lib/mcp/edit-clay-file.hoon index 2eea10e..4269f36 100644 --- a/desk/lib/nex/mcp/tools/edit-clay-file.hoon +++ b/desk/gub/lib/mcp/edit-clay-file.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: edit-clay-file: edit a file in Clay via exact string replacement :: !: @@ -31,7 +32,8 @@ ?^ err =/ lines=wall (zing (turn (flop u.err) |=(=tank (wash [0 80] tank)))) (pure:m [%error (crip "Clay build failed:\0a{(of-wall:format lines)}")]) - =/ [desk=@t file-path=@t old=@t new=@t] + =/ parsed=(each [@t @t @t @t] tang) + %- mule |. %. [%o args.st] %- ot:dejs:format :~ ['desk' so:dejs:format] @@ -39,17 +41,21 @@ ['old_string' so:dejs:format] ['new_string' so:dejs:format] == + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (desk, path, old_string, new_string)']) + =/ [desk=@t file-path=@t old=@t new=@t] p.parsed =/ dek=@tas (slav %tas desk) =/ pax=path (stab file-path) ?~ pax (pure:m [%error 'Empty path']) =/ mark=@tas (rear pax) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - ;< =riot:clay bind:m - (warp:io our.bowl dek ~ %sing %x da+now.bowl pax) - ?~ riot + ?. ?=(?(%hoon %json %html %css %js %md %txt) mark) + (pure:m [%error (crip "Unsupported mark: %{(trip mark)}. Use hoon, json, html, css, js, md, or txt.")]) + ;< has=? bind:m (scry:io ? (weld /cu/[dek] pax)) + ?. has (pure:m [%error (crip "File not found: {(trip file-path)}")]) - =/ =tang (pretty-file:pretty-file:tools !<(noun q.r.u.riot)) + ;< =vase bind:m (scry:io vase (weld /cr/[dek] pax)) + =/ =tang (pretty-file:pretty-file:tools !<(noun vase)) =/ =wain %- zing %+ turn tang @@ -66,7 +72,7 @@ =/ before=tape (scag u.idx text) =/ after=tape (slag (add u.idx (lent old-tape)) text) =/ result=@t (crip (zing ~[before new-tape after])) - ;< initial=cass:clay bind:m (do-scry:io cass:clay /scry /cw/[dek]) + ;< initial=cass:clay bind:m (scry:io cass:clay /cw/[dek]) =/ write-data=json %- pairs:enjs:format :~ ['initial-ud' (numb:enjs:format ud.initial)] @@ -77,11 +83,12 @@ ;< ~ bind:m (replace:io !>([tool.st args.st %editing write-data ~])) ;< * bind:m (keep:io /dill/logs [%& %& /sys/dill %'logs.dill-told'] ~) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io ;< ~ bind:m - (send-card:io %pass /commit-timeout %arvo %b %wait (add now.bowl ~s30)) + (set-timer:io /commit-timeout (add now ~s30)) ;< ~ bind:m - (gall-poke-our:io %hood kiln-info+!>(["" `[dek %& [pax %ins mark !>(result)]~]])) + =/ blob=* ?:(?=(%txt mark) (to-wain:format result) result) + (clay-info:io dek [pax %ins mark blob]~) ;< ~ bind:m collect-logs:tools ;< ~ bind:m (drop:io /dill/logs [%& %& /sys/dill %'logs.dill-told']) ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) diff --git a/desk/lib/nex/mcp/tools/edit-file.hoon b/desk/gub/lib/mcp/edit-file.hoon similarity index 76% rename from desk/lib/nex/mcp/tools/edit-file.hoon rename to desk/gub/lib/mcp/edit-file.hoon index 840a8b5..0fd11c1 100644 --- a/desk/lib/nex/mcp/tools/edit-file.hoon +++ b/desk/gub/lib/mcp/edit-file.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: edit-file: edit a text file in the grubbery ball via string replacement :: !: @@ -26,10 +27,15 @@ =/ m (fiber:fiber:nexus ,tool-result:tools) ^- form:m ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ file-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - =/ file-name=@t (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) - =/ old-string=@t (~(dog jo:json-utils [%o args.st]) /'old_string' so:dejs:format) - =/ new-string=@t (~(dog jo:json-utils [%o args.st]) /'new_string' so:dejs:format) + =/ parsed=(each [@t @t @t @t] tang) + %- mule |. + :^ (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /'old_string' so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /'new_string' so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, name, old_string, new_string)']) + =/ [file-path=@t file-name=@t old-string=@t new-string=@t] p.parsed =/ replace-all=? =/ ra (~(get jo:json-utils [%o args.st]) /'replace_all') ?~ ra %.n @@ -41,9 +47,9 @@ (lookup-grub:tools pax file-name) ?. ?=([%& %file *] seen) (pure:m [%error (crip "Not found: {(trip file-path)}/{(trip file-name)}")]) - =/ original-mark=@tas p.cage.p.seen + =/ original-mark=@tas name.p.sage.p.seen :: Convert to text via mime - ;< =mime bind:m (cage-to-mime:io cage.p.seen) + ;< =mime bind:m (sage-to-mime:io sage.p.seen) =/ txt=tape (trip q.q.mime) :: Do replacement =/ result=(each tape @tas) @@ -61,6 +67,6 @@ :: Send edited text back via %over — runtime handles mark conversion =/ new-mime=^mime [/text/plain (as-octs:mimes:html (crip p.result))] =/ road=road:tarball [%& %& pax grub-name] - ;< ~ bind:m (over:io /edit road mime+!>(new-mime)) + ;< ~ bind:m (over:io road [[/ %mime] !>(new-mime)]) (pure:m [%text (crip "Edited {(trip file-path)}/{(trip file-name)}")]) -- diff --git a/desk/lib/nex/mcp/tools/eval.hoon b/desk/gub/lib/mcp/eval.hoon similarity index 97% rename from desk/lib/nex/mcp/tools/eval.hoon rename to desk/gub/lib/mcp/eval.hoon index 79f713b..ede2384 100644 --- a/desk/lib/nex/mcp/tools/eval.hoon +++ b/desk/gub/lib/mcp/eval.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: eval: evaluate a Hoon expression :: !: diff --git a/desk/lib/nex/mcp/tools/get-clay-file.hoon b/desk/gub/lib/mcp/get-clay-file.hoon similarity index 85% rename from desk/lib/nex/mcp/tools/get-clay-file.hoon rename to desk/gub/lib/mcp/get-clay-file.hoon index 4281896..a650589 100644 --- a/desk/lib/nex/mcp/tools/get-clay-file.hoon +++ b/desk/gub/lib/mcp/get-clay-file.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: get-clay-file: fetch a file from Clay and return its contents :: !: @@ -27,12 +28,11 @@ ?~ dek (pure:m [%error (crip "Invalid desk name: {(trip u.desk)}")]) =/ pax=path (stab u.file-path) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - ;< =riot:clay bind:m - (warp:io our.bowl u.dek ~ %sing %x da+now.bowl pax) - ?~ riot + ;< has=? bind:m (scry:io ? (weld /cu/[u.dek] pax)) + ?. has (pure:m [%error 'File not found']) - =/ =tang (pretty-file:pretty-file:tools !<(noun q.r.u.riot)) + ;< =vase bind:m (scry:io vase (weld /cr/[u.dek] pax)) + =/ =tang (pretty-file:pretty-file:tools !<(noun vase)) =/ =wain %- zing %+ turn tang diff --git a/desk/lib/nex/mcp/tools/get-ship.hoon b/desk/gub/lib/mcp/get-ship.hoon similarity index 75% rename from desk/lib/nex/mcp/tools/get-ship.hoon rename to desk/gub/lib/mcp/get-ship.hoon index 0e6e8b2..2aa2d45 100644 --- a/desk/lib/nex/mcp/tools/get-ship.hoon +++ b/desk/gub/lib/mcp/get-ship.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: get-ship: return the current ship name :: !: @@ -11,6 +12,6 @@ ^- tool-handler:tools =/ m (fiber:fiber:nexus ,tool-result:tools) ^- form:m - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - (pure:m [%text (scot %p our.bowl)]) + ;< our=@p bind:m get-our:io + (pure:m [%text (scot %p our)]) -- diff --git a/desk/gub/lib/mcp/git-add.hoon b/desk/gub/lib/mcp/git-add.hoon new file mode 100644 index 0000000..1d12d83 --- /dev/null +++ b/desk/gub/lib/mcp/git-add.hoon @@ -0,0 +1,46 @@ +/< tools /lib/nex/tools.hoon +:: git-add: stage files in a git/repo nexus +:: +!: +^- tool:tools +|% +++ name 'git-add' +++ description + 'Stage files in a git/repo nexus. Pokes add.sig. Use paths for selective staging, or omit for add-all.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Path to git/repo nexus (e.g. "/git.git_repo")']] + ['paths' [%string 'JSON array of file paths to stage (omit for all)']] + == +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ get-str + |= [key=@t default=@t] + ^- @t + =/ v (~(get by args.st) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + =/ nex-path=@t (get-str 'path' '') + ?: =('' nex-path) (pure:m [%error 'Missing required argument: path']) + =/ pax-parsed=(each path @t) (parse-path:tools nex-path) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + :: build add request json + =/ paths-str=@t (get-str 'paths' '') + =/ req=json + ?: =('' paths-str) + (pairs:enjs:format ~[['all' b+%.y]]) + =/ parsed=(unit json) (de:json:html paths-str) + ?~ parsed (pairs:enjs:format ~[['all' b+%.y]]) + ?. ?=(%a -.u.parsed) (pairs:enjs:format ~[['all' b+%.y]]) + (pairs:enjs:format ~[['all' b+%.n] ['paths' u.parsed]]) + =/ =road:tarball [%& %& [(weld pax /actions) %'add.sig']] + ;< ~ bind:m (poke:io road [[/ %json] !>(req)]) + (pure:m [%text 'Files staged.']) +-- diff --git a/desk/gub/lib/mcp/git-branch.hoon b/desk/gub/lib/mcp/git-branch.hoon new file mode 100644 index 0000000..ab65517 --- /dev/null +++ b/desk/gub/lib/mcp/git-branch.hoon @@ -0,0 +1,40 @@ +/< tools /lib/nex/tools.hoon +:: git-branch: create a new branch at HEAD +:: +!: +^- tool:tools +|% +++ name 'git-branch' +++ description + 'Create a new branch at the current HEAD in a git/repo nexus. Pokes branch.sig with the branch name.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Path to git/repo nexus (e.g. "/git.git_repo")']] + ['name' [%string 'Branch name to create']] + == +++ required ~['path' 'name'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ get-str + |= [key=@t default=@t] + ^- @t + =/ v (~(get by args.st) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + =/ nex-path=@t (get-str 'path' '') + =/ branch=@t (get-str 'name' '') + ?: =('' nex-path) (pure:m [%error 'Missing required argument: path']) + ?: =('' branch) (pure:m [%error 'Missing required argument: name']) + =/ pax-parsed=(each path @t) (parse-path:tools nex-path) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + =/ rd=road:tarball [%& %& [(weld pax /actions) %'branch.sig']] + =/ msg-wain=wain (to-wain:format branch) + ;< ~ bind:m (poke:io rd [[/ %txt] !>(msg-wain)]) + (pure:m [%text (cat 3 'Branch created: ' branch)]) +-- diff --git a/desk/gub/lib/mcp/git-commit.hoon b/desk/gub/lib/mcp/git-commit.hoon new file mode 100644 index 0000000..ae498c7 --- /dev/null +++ b/desk/gub/lib/mcp/git-commit.hoon @@ -0,0 +1,46 @@ +/< tools /lib/nex/tools.hoon +:: git-commit: create a local git commit in a git/repo nexus +:: +!: +^- tool:tools +|% +++ name 'git-commit' +++ description + 'Create a local git commit from the current tree state in a git/repo nexus. Pokes commit.sig with the message.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Path to git/repo nexus (e.g. "/git.git_repo")']] + ['message' [%string 'Commit message']] + == +++ required ~['path' 'message'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ get-str + |= [key=@t default=@t] + ^- @t + =/ v (~(get by args.st) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + =/ nex-path=@t (get-str 'path' '') + =/ message=@t (get-str 'message' '') + ?: =('' nex-path) (pure:m [%error 'Missing required argument: path']) + ?: =('' message) (pure:m [%error 'Missing required argument: message']) + :: parse nexus path + =/ pax-parsed=(each path @t) (parse-path:tools nex-path) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + :: stage all files first (git add -A) + =/ add-rd=road:tarball [%& %& [(weld pax /actions) %'add.sig']] + =/ add-req=json (pairs:enjs:format ~[['all' b+%.y]]) + ;< ~ bind:m (poke:io add-rd [[/ %json] !>(add-req)]) + :: then commit from index + =/ commit-rd=road:tarball [%& %& [(weld pax /actions) %'commit.sig']] + =/ msg-wain=wain (to-wain:format message) + ;< ~ bind:m (poke:io commit-rd [[/ %txt] !>(msg-wain)]) + (pure:m [%text (cat 3 'Commit triggered: ' message)]) +-- diff --git a/desk/gub/lib/mcp/git-delete-branch.hoon b/desk/gub/lib/mcp/git-delete-branch.hoon new file mode 100644 index 0000000..ec96b97 --- /dev/null +++ b/desk/gub/lib/mcp/git-delete-branch.hoon @@ -0,0 +1,40 @@ +/< tools /lib/nex/tools.hoon +:: git-delete-branch: delete a branch from a git/repo nexus +:: +!: +^- tool:tools +|% +++ name 'git-delete-branch' +++ description + 'Delete a branch from a git/repo nexus. Pokes delete-branch.sig with the branch name. Cannot delete the currently checked-out branch.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Path to git/repo nexus (e.g. "/git.git_repo")']] + ['branch' [%string 'Branch name to delete']] + == +++ required ~['path' 'branch'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ get-str + |= [key=@t default=@t] + ^- @t + =/ v (~(get by args.st) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + =/ nex-path=@t (get-str 'path' '') + =/ branch=@t (get-str 'branch' '') + ?: =('' nex-path) (pure:m [%error 'Missing required argument: path']) + ?: =('' branch) (pure:m [%error 'Missing required argument: branch']) + =/ pax-parsed=(each path @t) (parse-path:tools nex-path) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + =/ rd=road:tarball [%& %& [(weld pax /actions) %'delete-branch.sig']] + =/ msg-wain=wain (to-wain:format branch) + ;< ~ bind:m (poke:io rd [[/ %txt] !>(msg-wain)]) + (pure:m [%text (cat 3 'Deleted branch: ' branch)]) +-- diff --git a/desk/gub/lib/mcp/git-push.hoon b/desk/gub/lib/mcp/git-push.hoon new file mode 100644 index 0000000..4268f1b --- /dev/null +++ b/desk/gub/lib/mcp/git-push.hoon @@ -0,0 +1,36 @@ +/< tools /lib/nex/tools.hoon +:: git-push: push local commits to GitHub via the repo nexus +:: +!: +^- tool:tools +|% +++ name 'git-push' +++ description + 'Push local git commits to GitHub. Pokes push.sig on the git/repo nexus.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Path to git/repo nexus (e.g. "/git.git_repo")']] + == +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ get-str + |= [key=@t default=@t] + ^- @t + =/ v (~(get by args.st) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + =/ nex-path=@t (get-str 'path' '') + ?: =('' nex-path) (pure:m [%error 'Missing required argument: path']) + =/ pax-parsed=(each path @t) (parse-path:tools nex-path) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + =/ =road:tarball [%& %& [(weld pax /actions) %'push.sig']] + ;< ~ bind:m (poke:io road [[/ %sig] !>(~)]) + (pure:m [%text 'Push triggered.']) +-- diff --git a/desk/gub/lib/mcp/git-stash-pop.hoon b/desk/gub/lib/mcp/git-stash-pop.hoon new file mode 100644 index 0000000..a9d8b5a --- /dev/null +++ b/desk/gub/lib/mcp/git-stash-pop.hoon @@ -0,0 +1,36 @@ +/< tools /lib/nex/tools.hoon +:: git-stash-pop: pop the most recent stash +:: +!: +^- tool:tools +|% +++ name 'git-stash-pop' +++ description + 'Pop the most recent stash in a git/repo nexus, restoring the stashed changes to the working tree.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Path to git/repo nexus (e.g. "/git.git_repo")']] + == +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ get-str + |= [key=@t default=@t] + ^- @t + =/ v (~(get by args.st) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + =/ nex-path=@t (get-str 'path' '') + ?: =('' nex-path) (pure:m [%error 'Missing required argument: path']) + =/ pax-parsed=(each path @t) (parse-path:tools nex-path) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + =/ rd=road:tarball [%& %& [(weld pax /actions) %'stash-pop.sig']] + ;< ~ bind:m (poke:io rd [[/ %sig] !>(~)]) + (pure:m [%text 'Stash pop requested']) +-- diff --git a/desk/gub/lib/mcp/git-stash.hoon b/desk/gub/lib/mcp/git-stash.hoon new file mode 100644 index 0000000..4c18e37 --- /dev/null +++ b/desk/gub/lib/mcp/git-stash.hoon @@ -0,0 +1,36 @@ +/< tools /lib/nex/tools.hoon +:: git-stash: stash dirty index and reset to HEAD +:: +!: +^- tool:tools +|% +++ name 'git-stash' +++ description + 'Stash the current staged changes in a git/repo nexus and reset the working tree to HEAD. Does nothing if tree is clean.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Path to git/repo nexus (e.g. "/git.git_repo")']] + == +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ get-str + |= [key=@t default=@t] + ^- @t + =/ v (~(get by args.st) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + =/ nex-path=@t (get-str 'path' '') + ?: =('' nex-path) (pure:m [%error 'Missing required argument: path']) + =/ pax-parsed=(each path @t) (parse-path:tools nex-path) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + =/ rd=road:tarball [%& %& [(weld pax /actions) %'stash.sig']] + ;< ~ bind:m (poke:io rd [[/ %sig] !>(~)]) + (pure:m [%text 'Stash requested']) +-- diff --git a/desk/gub/lib/mcp/git-switch.hoon b/desk/gub/lib/mcp/git-switch.hoon new file mode 100644 index 0000000..e3c277e --- /dev/null +++ b/desk/gub/lib/mcp/git-switch.hoon @@ -0,0 +1,40 @@ +/< tools /lib/nex/tools.hoon +:: git-switch: switch to a different branch in a git/repo nexus +:: +!: +^- tool:tools +|% +++ name 'git-switch' +++ description + 'Switch to a different branch in a git/repo nexus. Pokes switch.sig with the branch name. Will fail if working tree is dirty.' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Path to git/repo nexus (e.g. "/git.git_repo")']] + ['branch' [%string 'Branch name to switch to']] + == +++ required ~['path' 'branch'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ get-str + |= [key=@t default=@t] + ^- @t + =/ v (~(get by args.st) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + =/ nex-path=@t (get-str 'path' '') + =/ branch=@t (get-str 'branch' '') + ?: =('' nex-path) (pure:m [%error 'Missing required argument: path']) + ?: =('' branch) (pure:m [%error 'Missing required argument: branch']) + =/ pax-parsed=(each path @t) (parse-path:tools nex-path) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + =/ rd=road:tarball [%& %& [(weld pax /actions) %'switch.sig']] + =/ msg-wain=wain (to-wain:format branch) + ;< ~ bind:m (poke:io rd [[/ %txt] !>(msg-wain)]) + (pure:m [%text (cat 3 'Switched to branch: ' branch)]) +-- diff --git a/desk/lib/nex/mcp/tools/glob.hoon b/desk/gub/lib/mcp/glob.hoon similarity index 93% rename from desk/lib/nex/mcp/tools/glob.hoon rename to desk/gub/lib/mcp/glob.hoon index f23ab58..7f3c743 100644 --- a/desk/lib/nex/mcp/tools/glob.hoon +++ b/desk/gub/lib/mcp/glob.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: glob: search for files in the grubbery ball by path, name, and/or mark :: !: @@ -40,7 +41,7 @@ ?: =('' p.u.mk) ~ `p.u.mk :: Browse root to get entire ball - ;< =seen:nexus bind:m (peek:io /browse [%& %| ~] ~) + ;< =seen:nexus bind:m (peek:io [%& %| ~] ~) ?. ?=([%& %ball *] seen) (pure:m [%error 'Could not read ball']) :: Flatten ball to list of [rail content] pairs @@ -52,7 +53,7 @@ |= [=rail:tarball =content:tarball] =/ file-path=tape ?~(path.rail "/" (trip (spat path.rail))) =/ file-name=tape (trip name.rail) - =/ file-mark=tape (trip p.cage.content) + =/ file-mark=tape (trip name.p.sage.content) =/ path-ok=? ?~ pat-path %.y (glob-match:tools (trip u.pat-path) file-path) @@ -63,7 +64,7 @@ ?~ pat-mark %.y (glob-match:tools (trip u.pat-mark) file-mark) ?. ?&(path-ok name-ok mark-ok) ~ - `[rail p.cage.content] + `[rail name.p.sage.content] ?~ matches (pure:m [%text 'No matches found']) =/ result=tape diff --git a/desk/gub/lib/mcp/goals.hoon b/desk/gub/lib/mcp/goals.hoon new file mode 100644 index 0000000..99c805e --- /dev/null +++ b/desk/gub/lib/mcp/goals.hoon @@ -0,0 +1,272 @@ +:: goals: manage DAG-based goal stores +:: +:: Single tool for all goal operations. Command parameter selects the +:: operation. Store files live at /goals.goals/store/*.goal-store. +:: +/< tools /lib/nex/tools.hoon +/< goals /lib/goals.hoon +!: +^- tool:tools +=> +|% +:: road to a store file (flat: store/.goal-store) +:: +++ store-road + |= name=@ta + ^- road:tarball + =/ fname=@ta (crip "{(trip name)}.goal-store") + [%& %& /'goals.goals'/store fname] +:: road to the store directory +:: +++ store-dir-road + ^- road:tarball + [%& %| /'goals.goals'/store] +:: peek a store, return the goal-store +:: +++ peek-store + |= name=@ta + =/ m (fiber:fiber:nexus ,goal-store:goals) + ^- form:m + ;< =seen:nexus bind:m + (peek:io (store-road name) ~) + ?. ?=([%& %file *] seen) + ~|(%store-not-found !!) + (pure:m !<(goal-store:goals q.sage.p.seen)) +:: parse a node-id from json fields +:: +++ parse-nid + |= [jon=json gid-path=path pt-path=path] + ^- node-id:goals + =/ gid=@ta (~(dog jo:json-utils jon) gid-path so:dejs:format) + =/ pt=@t (~(dog jo:json-utils jon) pt-path so:dejs:format) + :- gid + ?: =('start' pt) %start + ?: =('end' pt) %end + !! +:: format a goal as text +:: +++ render-goal + |= g=goal:goals + ^- tape + =/ data-text=tape + ?~ data.g "" + " {(trip (en:json:html [%o data.g]))}" + =/ status-text=tape + ?: done.i.status.end.g " [DONE]" + ?: done.i.status.start.g " [STARTED]" + "" + =/ parent-text=tape + ?~ parent.g "" + " parent={}" + =/ children-text=tape + ?~ children.g "" + " children={}" + =/ actionable-text=tape + ?: actionable.g " [actionable]" + "" + "{}{status-text}{actionable-text}{parent-text}{children-text}{data-text}" +:: format a list of goals +:: +++ render-goals + |= gs=(list goal:goals) + ^- @t + ?~ gs 'No goals found.' + %- crip + %- zing + %+ turn gs + |=(g=goal:goals (weld (render-goal g) "\0a")) +-- +|% +++ name 'goals' +++ description + ^~ %- crip + ;: weld + "Manage DAG-based goal tracking stores. " + "Commands: create-store, delete-store, list-stores, " + "act, list, get, frontier, lineage. " + "Actions for 'act': create, delete, move, link, unlink, " + "done, undone, update, set-actionable, set-moment." + == +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['command' [%string 'Operation: create-store, delete-store, list-stores, act, list, get, frontier, lineage']] + ['store' [%string 'Store name (e.g. "my-project")']] + ['action' [%string 'JSON action for act command (e.g. {"type":"create","parent":"0","data":{"summary":"design"}}). id/parent optional for create.']] + ['goal_id' [%string 'Goal ID for get/frontier/lineage (e.g. "a")']] + == +++ required ~['command'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /command so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: command']) + =/ command=@t p.parsed + =/ store-name=(unit @t) + (~(deg jo:json-utils [%o args.st]) /store so:dejs:format) + =/ action-jon=(unit json) + (~(deg jo:json-utils [%o args.st]) /action same:dejs:format) + =/ goal-id-text=(unit @t) + (~(deg jo:json-utils [%o args.st]) /'goal_id' so:dejs:format) + :: + ?+ command + (pure:m [%error (crip "Unknown command: {(trip command)}")]) + :: + %'create-store' + ?~ store-name + (pure:m [%error 'Missing required argument: store']) + =/ name=@ta u.store-name + ;< now=@da bind:m get-time:io + =/ store=goal-store:goals (create-store:goals now) + ;< ~ bind:m + (make:io (store-road name) |+[%.n [[/ %goal-store] !>(store)] `[/ %goal-store]]) + (pure:m [%text (crip "Created store: {(trip name)}")]) + :: + %'delete-store' + ?~ store-name + (pure:m [%error 'Missing required argument: store']) + ;< ~ bind:m (cull:io (store-road u.store-name)) + (pure:m [%text (crip "Deleted store: {(trip u.store-name)}")]) + :: + %'list-stores' + ;< =seen:nexus bind:m + (peek:io store-dir-road ~) + ?. ?=([%& %ball *] seen) + (pure:m [%text 'No stores found.']) + ?~ fil.ball.p.seen + (pure:m [%text 'No stores found.']) + =/ suf=tape ".goal-store" + =/ names=(list @ta) + %+ murn ~(tap by contents.u.fil.ball.p.seen) + |= [fname=@ta *] + =/ full=tape (trip fname) + ?. (gte (lent full) (lent suf)) ~ + ?. =((slag (sub (lent full) (lent suf)) full) suf) ~ + `(crip (scag (sub (lent full) (lent suf)) full)) + ?~ names + (pure:m [%text 'No stores found.']) + =/ text=@t + %- crip + %- zing + (turn names |=(n=@ta "{(trip n)}\0a")) + (pure:m [%text text]) + :: + %'act' + ?~ store-name + (pure:m [%error 'Missing required argument: store']) + ?~ action-jon + (pure:m [%error 'Missing required argument: action']) + =/ jon=json u.action-jon + ?. ?=([%o *] jon) + (pure:m [%error 'Action must be a JSON object']) + =/ act-parsed=(each [@t action:goals] tang) + %- mule |. + =/ act-type=@t + (~(dog jo:json-utils jon) /type so:dejs:format) + :- act-type + ^- action:goals + ?+ act-type + ~|([%unknown-action-type act-type] !!) + :: + %'create' + :* %create + (~(dug jo:json-utils jon) /id so:dejs:format '') + (~(dug jo:json-utils jon) /parent so:dejs:format '0') + ^- (map @t json) + %. (~(dug jo:json-utils jon) /data same:dejs:format [%o ~]) + (om:dejs:format same:dejs:format) + == + %'delete' + [%delete (~(dog jo:json-utils jon) /id so:dejs:format)] + %'move' + :+ %move + (~(dog jo:json-utils jon) /id so:dejs:format) + (~(dog jo:json-utils jon) /'new_parent' so:dejs:format) + %'reorder' + :+ %reorder + (~(dog jo:json-utils jon) /id so:dejs:format) + (~(deg jo:json-utils jon) /before so:dejs:format) + %'link' + :+ %link + (parse-nid jon /from /'from_point') + (parse-nid jon /to /'to_point') + %'unlink' + :+ %unlink + (parse-nid jon /from /'from_point') + (parse-nid jon /to /'to_point') + %'done' + [%done (parse-nid jon /'goal_id' /point)] + %'undone' + [%undone (parse-nid jon /'goal_id' /point)] + %'update' + :+ %update + (~(dog jo:json-utils jon) /id so:dejs:format) + ^- (map @t json) + %. (~(dug jo:json-utils jon) /data same:dejs:format [%o ~]) + (om:dejs:format same:dejs:format) + %'set-actionable' + :+ %set-actionable + (~(dog jo:json-utils jon) /id so:dejs:format) + (~(dog jo:json-utils jon) /actionable bo:dejs:format) + %'set-moment' + :+ %set-moment + (parse-nid jon /'goal_id' /point) + =/ moment-text=(unit @t) + (~(deg jo:json-utils jon) /moment so:dejs:format) + ?~ moment-text ~ + `(slav %da u.moment-text) + == + ?: ?=(%| -.act-parsed) + (pure:m [%error 'Missing or invalid action arguments']) + =/ act-type=@t -.p.act-parsed + =/ act=action:goals +.p.act-parsed + ;< ~ bind:m + (poke:io (store-road u.store-name) [[/ %goal-action] !>(act)]) + (pure:m [%text (crip "Applied {(trip act-type)}")]) + :: + :: list: show all goals in a store + :: + %'list' + ?~ store-name + (pure:m [%error 'Missing required argument: store']) + ;< store=goal-store:goals bind:m (peek-store u.store-name) + =/ gs=(list goal:goals) ~(val by store) + (pure:m [%text (render-goals gs)]) + :: + %'get' + ?~ store-name + (pure:m [%error 'Missing required argument: store']) + ?~ goal-id-text + (pure:m [%error 'Missing required argument: goal_id']) + ;< store=goal-store:goals bind:m (peek-store u.store-name) + =/ g=goal:goals (get-goal:goals store u.goal-id-text) + (pure:m [%text (crip (render-goal g))]) + :: + %'frontier' + ?~ store-name + (pure:m [%error 'Missing required argument: store']) + ;< store=goal-store:goals bind:m (peek-store u.store-name) + =/ gid=goal-id:goals + ?~ goal-id-text root-id:goals + u.goal-id-text + =/ front=(list goal:goals) (frontier:goals store gid) + (pure:m [%text (render-goals front)]) + :: + %'lineage' + ?~ store-name + (pure:m [%error 'Missing required argument: store']) + ?~ goal-id-text + (pure:m [%error 'Missing required argument: goal_id']) + ;< store=goal-store:goals bind:m (peek-store u.store-name) + =/ ids=(list goal-id:goals) (lineage:goals store u.goal-id-text) + ?~ ids + (pure:m [%text 'Root goal (no ancestors).']) + =/ gs=(list goal:goals) + (turn ids |=(id=goal-id:goals (get-goal:goals store id))) + (pure:m [%text (render-goals gs)]) + == +-- diff --git a/desk/lib/nex/mcp/tools/grep.hoon b/desk/gub/lib/mcp/grep.hoon similarity index 88% rename from desk/lib/nex/mcp/tools/grep.hoon rename to desk/gub/lib/mcp/grep.hoon index 3a7f34f..8337d6b 100644 --- a/desk/lib/nex/mcp/tools/grep.hoon +++ b/desk/gub/lib/mcp/grep.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: grep: search file contents in the grubbery ball :: !: @@ -25,7 +26,11 @@ =/ m (fiber:fiber:nexus ,tool-result:tools) ^- form:m ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ search=@t (~(dog jo:json-utils [%o args.st]) /pattern so:dejs:format) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /pattern so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: pattern']) + =/ search=@t p.parsed =/ pat-path=(unit @t) ?~ p=(~(get jo:json-utils [%o args.st]) /path) ~ ?. ?=([%s *] u.p) ~ @@ -43,7 +48,7 @@ `p.u.mk =/ search-tape=tape (trip search) :: Browse root to get entire ball - ;< =seen:nexus bind:m (peek:io /browse [%& %| ~] ~) + ;< =seen:nexus bind:m (peek:io [%& %| ~] ~) ?. ?=([%& %ball *] seen) (pure:m [%error 'Could not read ball']) :: Flatten and filter by metadata patterns @@ -52,7 +57,7 @@ |= [=rail:tarball =content:tarball] =/ file-path=tape ?~(path.rail "/" (trip (spat path.rail))) =/ file-name=tape (trip name.rail) - =/ file-mark=tape (trip p.cage.content) + =/ file-mark=tape (trip name.p.sage.content) ?& ?~(pat-path %.y (glob-match:tools (trip u.pat-path) file-path)) ?~(pat-name %.y (glob-match:tools (trip u.pat-name) file-name)) ?~(pat-mark %.y (glob-match:tools (trip u.pat-mark) file-mark)) @@ -72,10 +77,10 @@ "{pax}/{(trip name.rail)}" :: Try to read file content as text ;< file-seen=seen:nexus bind:m - (peek:io /read [%& %& path.rail name.rail] ~) + (peek:io [%& %& path.rail name.rail] ~) ?. ?=([%& %file *] file-seen) $(candidates t.candidates) - ;< =mime bind:m (cage-to-mime:io cage.p.file-seen) + ;< =mime bind:m (sage-to-mime:io sage.p.file-seen) =/ text=tape (trip ;;(@t q.q.mime)) :: Split into lines and search =/ lines=(list tape) diff --git a/desk/gub/lib/mcp/indexer-status.hoon b/desk/gub/lib/mcp/indexer-status.hoon new file mode 100644 index 0000000..77f4727 --- /dev/null +++ b/desk/gub/lib/mcp/indexer-status.hoon @@ -0,0 +1,91 @@ +/< tools /lib/nex/tools.hoon +/< btc-rpc /lib/btc-rpc.hoon +:: indexer-status: check the indexer's state — tip height, cached blocks, +:: and optionally dump a specific block's header + tx summary. +:: +!: +^- tool:tools +|% +++ name 'indexer_status' +++ description + ^~ %- crip + ;: weld + "Check the bitcoin indexer's state. Shows current tip height and " + "cached block count. Optionally pass a block height to see that " + "block's header and transaction summary." + == +++ parameters + ^- (map @t parameter-def:tools) + %- malt + :~ ['height' [%string 'Optional: specific block height to inspect']] + == +++ required *(list @t) +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ arg-height=(unit @t) + (~(deg jo:json-utils [%o args.st]) /height so:dejs:format) + :: read tip + ;< tip-seen=seen:nexus bind:m + (peek:io [%& %& /['indexer.indexer_app'] %'tip.ud'] ~) + =/ tip=@ud + ?. ?=([%& %file *] tip-seen) 0 + =/ res (mole |.(!<(@ud q.sage.p.tip-seen))) + ?~ res 0 + u.res + :: read blocks directory + ;< blocks-seen=seen:nexus bind:m + (peek:io [%& %| /['indexer.indexer_app']/blocks] ~) + =/ cached-heights=(list @ud) + ?. ?=([%& %ball *] blocks-seen) ~ + %+ murn ~(tap by dir.ball.p.blocks-seen) + |= [name=@ta *] + (rush name dem) + =/ sorted=(list @ud) + (sort cached-heights lth) + =/ num-cached=@ud (lent sorted) + :: base status + =/ range-line=@t + ?~ sorted 'range: (none)' + =/ last=@ud (rear sorted) + %+ rap 3 + :~ 'range: ' + (crip ((d-co:co 1) i.sorted)) + ' - ' + (crip ((d-co:co 1) last)) + == + =/ status=wain + :~ (rap 3 ~['indexer tip: ' (crip ((d-co:co 1) tip))]) + (rap 3 ~['cached blocks: ' (crip ((d-co:co 1) num-cached))]) + range-line + == + :: if specific height requested, show that block + ?~ arg-height + (pure:m [%text (of-wain:format status)]) + =/ h=(unit @ud) (rush u.arg-height dem) + ?~ h + (pure:m [%error (crip "Invalid height: {(trip u.arg-height)}")]) + =/ height-dir=@ta (crip ((d-co:co 1) u.h)) + ;< header-seen=seen:nexus bind:m + (peek:io [%& %& /['indexer.indexer_app']/blocks/[height-dir] %'header.json'] ~) + ?. ?=([%& %file *] header-seen) + %- pure:m + [%text (of-wain:format (snoc status (rap 3 ~['block ' (crip ((d-co:co 1) u.h)) ': not cached'])))] + =/ header-json=json !<(json q.sage.p.header-seen) + :: read txs dir + ;< txs-seen=seen:nexus bind:m + (peek:io [%& %| /['indexer.indexer_app']/blocks/[height-dir]/txs] ~) + =/ tx-count=@ud + ?. ?=([%& %ball *] txs-seen) 0 + ?~ fil.ball.p.txs-seen 0 + ~(wyt by contents.u.fil.ball.p.txs-seen) + =/ block-info=wain + :~ '' + (rap 3 ~['block ' (crip ((d-co:co 1) u.h)) ':']) + (rap 3 ~[' header: ' (en:json:html header-json)]) + (rap 3 ~[' transactions: ' (crip ((d-co:co 1) tx-count))]) + == + (pure:m [%text (of-wain:format (weld status block-info))]) +-- diff --git a/desk/lib/nex/mcp/tools/insert-clay-file.hoon b/desk/gub/lib/mcp/insert-clay-file.hoon similarity index 76% rename from desk/lib/nex/mcp/tools/insert-clay-file.hoon rename to desk/gub/lib/mcp/insert-clay-file.hoon index a93da57..4feab4e 100644 --- a/desk/lib/nex/mcp/tools/insert-clay-file.hoon +++ b/desk/gub/lib/mcp/insert-clay-file.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: insert-clay-file: insert or overwrite a file in Clay :: !: @@ -31,19 +32,26 @@ ?^ err =/ lines=wall (zing (turn (flop u.err) |=(=tank (wash [0 80] tank)))) (pure:m [%error (crip "Clay build failed:\0a{(of-wall:format lines)}")]) - =/ [desk=@t file-path=@t content=@t] + =/ parsed=(each [@t @t @t] tang) + %- mule |. %. [%o args.st] %- ot:dejs:format :~ ['desk' so:dejs:format] ['path' so:dejs:format] ['content' so:dejs:format] == + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (desk, path, content)']) + =/ [desk=@t file-path=@t content=@t] p.parsed =/ dek=@tas (slav %tas desk) =/ pax=path (stab file-path) ?~ pax (pure:m [%error 'Empty path']) =/ mark=@tas (rear pax) - ;< initial=cass:clay bind:m (do-scry:io cass:clay /scry /cw/[dek]) + ?. ?=(?(%hoon %json %html %css %js %md %txt) mark) + (pure:m [%error (crip "Unsupported mark: %{(trip mark)}. Use hoon, json, html, css, js, md, or txt.")]) + =/ blob=* ?:(?=(%txt mark) (to-wain:format content) content) + ;< initial=cass:clay bind:m (scry:io cass:clay /cw/[dek]) =/ write-data=json %- pairs:enjs:format :~ ['initial-ud' (numb:enjs:format ud.initial)] @@ -54,11 +62,11 @@ ;< ~ bind:m (replace:io !>([tool.st args.st %inserting write-data ~])) ;< * bind:m (keep:io /dill/logs [%& %& /sys/dill %'logs.dill-told'] ~) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io ;< ~ bind:m - (send-card:io %pass /commit-timeout %arvo %b %wait (add now.bowl ~s30)) + (set-timer:io /commit-timeout (add now ~s30)) ;< ~ bind:m - (gall-poke-our:io %hood kiln-info+!>(["" `[dek %& [pax %ins mark !>(content)]~]])) + (clay-info:io dek [pax %ins mark blob]~) ;< ~ bind:m collect-logs:tools ;< ~ bind:m (drop:io /dill/logs [%& %& /sys/dill %'logs.dill-told']) ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) diff --git a/desk/gub/lib/mcp/install-app.hoon b/desk/gub/lib/mcp/install-app.hoon new file mode 100644 index 0000000..6c1aeaa --- /dev/null +++ b/desk/gub/lib/mcp/install-app.hoon @@ -0,0 +1,35 @@ +/< tools /lib/nex/tools.hoon +:: install-app: install a desk (local or from a remote ship) +:: +!: +^- tool:tools +|% +++ name 'install_app' +++ description 'Install a desk (local or from a remote ship)' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['desk' [%string 'Desk name to install']] + ['ship' [%string 'Source ship (optional, defaults to own ship)']] + == +++ required ~['desk'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /desk so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: desk']) + =/ desk=@t p.parsed + =/ dek=@tas (slav %tas desk) + ;< our=@p bind:m get-our:io + =/ src=@p + ?~ ship-json=(~(get jo:json-utils [%o args.st]) /ship) + our + ?. ?=([%s *] u.ship-json) our + (slav %p p.u.ship-json) + ;< ~ bind:m (gall-poke-our:io %hood kiln-install+[dek src dek]) + (pure:m [%text (crip "Installing %{(trip dek)} from {}")]) +-- diff --git a/desk/gub/lib/mcp/list-clay-files.hoon b/desk/gub/lib/mcp/list-clay-files.hoon new file mode 100644 index 0000000..18022b8 --- /dev/null +++ b/desk/gub/lib/mcp/list-clay-files.hoon @@ -0,0 +1,39 @@ +/< tools /lib/nex/tools.hoon +:: list-clay-files: list files in Clay under a given path +:: +!: +^- tool:tools +|% +++ name 'list_clay_files' +++ description 'List files in Clay under a given path' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['desk' [%string 'Desk name (e.g. "base")']] + ['path' [%string 'Path to list (e.g. "/" or "/gen")']] + == +++ required ~['desk' 'path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t] tang) + %- mule |. + :- (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (desk, path)']) + =/ [desk=@t file-path=@t] p.parsed + =/ dek=@tas (slav %tas desk) + =/ pax=path (stab file-path) + ;< files=(list path) bind:m + (scry:io (list path) [%ct dek pax]) + ?~ files + (pure:m [%text (crip "No files found under {(trip file-path)} on desk %{(trip desk)}")]) + =/ result=tape + %- zing + %+ turn files + |=(p=path "{(spud p)}\0a") + (pure:m [%text (crip result)]) +-- diff --git a/desk/gub/lib/mcp/list-tools.hoon b/desk/gub/lib/mcp/list-tools.hoon new file mode 100644 index 0000000..418ee05 --- /dev/null +++ b/desk/gub/lib/mcp/list-tools.hoon @@ -0,0 +1,133 @@ +/< tools /lib/nex/tools.hoon +:: list-tools: list all available MCP tools with optional filtering +:: +:: Looks up compiled tools from bins via %code darts. +:: +=> |% + :: +strip-hoon: remove .hoon suffix from filename + :: + ++ strip-hoon + |= name=@ta + ^- @ta + =/ t=tape (trip name) + =/ len=@ud (lent t) + ?. (gth len 5) name + ?. =(".hoon" (slag (sub len 5) t)) name + (crip (scag (sub len 5) t)) + :: +has-substr: case-insensitive substring search + :: + ++ has-substr + |= [needle=tape haystack=tape] + ^- ? + ?~ needle %.y + =/ nlow=tape (cass needle) + =/ hlow=tape (cass haystack) + =/ nlen=@ud (lent nlow) + |- + ?~ hlow %.n + ?: =(nlow (scag nlen `tape`hlow)) %.y + $(hlow t.hlow) + -- +!: +^- tool:tools +|% +++ name 'list_tools' +++ description + ^~ %- crip + ;: weld + "List all available MCP tools from the live compiled tool registry. " + "This reflects the current state and includes dynamically added tools " + "that may not appear in your cached tools/list. Use this to discover " + "tools added via add_mcp_tool. " + "Use 'name' to glob tool names (* wildcards), 'search' to grep " + "descriptions (substring match). Set names_only for compact output." + == +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['name' [%string 'Glob filter on tool names (* wildcards, e.g. "*clay*", "get_*")']] + ['search' [%string 'Substring search in tool descriptions (case-insensitive, e.g. "clay", "custom")']] + ['names_only' [%boolean 'If true, return only tool names (compact listing)']] + == +++ required ~ +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ pat-name=(unit @t) + ?~ p=(~(get jo:json-utils [%o args.st]) /name) ~ + ?. ?=([%s *] u.p) ~ + ?: =('' p.u.p) ~ + `p.u.p + =/ pat-search=(unit @t) + ?~ p=(~(get jo:json-utils [%o args.st]) /search) ~ + ?. ?=([%s *] u.p) ~ + ?: =('' p.u.p) ~ + `p.u.p + =/ v (~(get jo:json-utils [%o args.st]) /'names_only') + =/ names-only=? + ?~ v %.n + ?=([%b %.y] u.v) + :: Peek ball mirror for tool source filenames + ;< src-seen=seen:nexus bind:m + (peek:io [%& %| /code/lib/mcp] ~) + ?. ?=([%& %ball *] src-seen) + (pure:m [%error 'No tool sources found']) + ?~ fil.ball.p.src-seen + (pure:m [%error 'No tool sources found']) + =/ src-names=(list @ta) + %+ turn ~(tap by contents.u.fil.ball.p.src-seen) + |=([n=@ta *] (strip-hoon n)) + :: Look up each compiled tool from bins + =/ all-tools=(list tool:tools) ~ + |- + ?~ src-names + :: Filter by name glob and description search + =/ matches=(list tool:tools) + %+ skim all-tools + |= =tool:tools + =/ name-ok=? + ?~ pat-name %.y + (glob-match:tools (trip u.pat-name) (trip name:tool)) + =/ search-ok=? + ?~ pat-search %.y + (has-substr (trip u.pat-search) (trip description:tool)) + &(name-ok search-ok) + ?~ matches + (pure:m [%text 'No tools found']) + ?: names-only + =/ result=tape + (zing (turn matches |=(=tool:tools "\0a{(trip name:tool)}"))) + (pure:m [%text (crip "{<(lent matches)>} tools:{result}")]) + =/ result=tape + %- zing + %+ turn matches + |= =tool:tools + =/ params=(list @t) + (turn ~(tap by parameters:tool) |=([n=@t *] n)) + =/ req=(list @t) required:tool + =/ out=tape + "\0a\0a{(trip name:tool)}\0a {(trip description:tool)}" + =? out ?=(^ params) + =/ param-text=tape + %- zing + ^- (list tape) + (join ", " (turn params trip)) + (weld out "\0a params: {param-text}") + =? out ?=(^ req) + =/ req-text=tape + %- zing + ^- (list tape) + (join ", " (turn req trip)) + (weld out "\0a required: {req-text}") + out + (pure:m [%text (crip "{<(lent matches)>} tools found:{result}")]) + =/ n=@ta i.src-names + ;< res=built:nexus bind:m (get-code-full:io [%& %& /code/lib/mcp n]) + ?. ?=(%vase -.res) $(src-names t.src-names) + =/ got=(each tool:tools tang) + (mule |.(!<(tool:tools vase.res))) + ?. ?=(%& -.got) $(src-names t.src-names) + $(src-names t.src-names, all-tools [p.got all-tools]) +-- diff --git a/desk/gub/lib/mcp/mount-desk.hoon b/desk/gub/lib/mcp/mount-desk.hoon new file mode 100644 index 0000000..a0751ef --- /dev/null +++ b/desk/gub/lib/mcp/mount-desk.hoon @@ -0,0 +1,29 @@ +/< tools /lib/nex/tools.hoon +:: mount-desk: mount a desk to the Unix filesystem +:: +!: +^- tool:tools +|% +++ name 'mount_desk' +++ description 'Mount a desk to the Unix filesystem' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['desk' [%string 'Desk name (e.g. "base")']]]) +++ required ~['desk'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /desk so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: desk']) + =/ desk=@t p.parsed + =/ dek=@tas (slav %tas desk) + ;< our=@p bind:m get-our:io + ;< now=@da bind:m get-time:io + ;< ~ bind:m + (gall-poke-our:io %hood kiln-mount+[/(scot %p our)/[dek]/(scot %da now) dek]) + (pure:m [%text (crip "Mounted %{(trip dek)}")]) +-- diff --git a/desk/gub/lib/mcp/mount-to-grubbery.hoon b/desk/gub/lib/mcp/mount-to-grubbery.hoon new file mode 100644 index 0000000..b409e84 --- /dev/null +++ b/desk/gub/lib/mcp/mount-to-grubbery.hoon @@ -0,0 +1,32 @@ +/< tools /lib/nex/tools.hoon +:: mount-to-grubbery: sync a Clay desk into the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'mount_to_grubbery' +++ description + ^~ %- crip + ;: weld + "Mount a Clay desk into the grubbery ball at /sys/clay/desks/[desk]. " + "Files are synced and kept up to date as the desk changes." + == +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['desk' [%string 'Desk name (e.g. "base")']]]) +++ required ~['desk'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /desk so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: desk']) + =/ desk=@t p.parsed + =/ dek=@tas (slav %tas desk) + ;< ~ bind:m + (poke:io &+&+[/sys/clay %'main.clay-state'] [[/ %mount-desk] !>(dek)]) + (pure:m [%text (crip "Mounted %{(trip dek)} to /sys/clay/desks/{(trip dek)}")]) +-- diff --git a/desk/gub/lib/mcp/new-desk.hoon b/desk/gub/lib/mcp/new-desk.hoon new file mode 100644 index 0000000..3ad35c6 --- /dev/null +++ b/desk/gub/lib/mcp/new-desk.hoon @@ -0,0 +1,32 @@ +/< tools /lib/nex/tools.hoon +:: new-desk: create a new desk with default provisions +:: +!: +^- tool:tools +|% +++ name 'new_desk' +++ description + ^~ %- crip + ;: weld + "Create a new desk with a default agent, marks, and libraries. " + "The desk will have a minimal Gall agent and standard imports " + "(dbug, default-agent, skeleton, verb)." + == +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['desk' [%string 'Name of the desk to create (e.g. "my-app")']]]) +++ required ~['desk'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /desk so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: desk']) + =/ desk=@t p.parsed + =/ dek=@tas (slav %tas desk) + ;< ~ bind:m (create-desk:io dek) + (pure:m [%text (crip "Created desk %{(trip dek)}")]) +-- diff --git a/desk/gub/lib/mcp/nuke-agent.hoon b/desk/gub/lib/mcp/nuke-agent.hoon new file mode 100644 index 0000000..e7406fb --- /dev/null +++ b/desk/gub/lib/mcp/nuke-agent.hoon @@ -0,0 +1,26 @@ +/< tools /lib/nex/tools.hoon +:: nuke-agent: permanently wipe the state of a Gall agent +:: +!: +^- tool:tools +|% +++ name 'nuke_agent' +++ description 'Permanently wipe the state of a Gall agent' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['agent' [%string 'Agent name (e.g. "chat-store")']]]) +++ required ~['agent'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /agent so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: agent']) + =/ agent=@t p.parsed + =/ agt=@tas (slav %tas agent) + ;< ~ bind:m (gall-poke-our:io %hood kiln-nuke+[agt %.y]) + (pure:m [%text (crip "Nuked %{(trip agt)}")]) +-- diff --git a/desk/gub/lib/mcp/poke-agent.hoon b/desk/gub/lib/mcp/poke-agent.hoon new file mode 100644 index 0000000..ef093bf --- /dev/null +++ b/desk/gub/lib/mcp/poke-agent.hoon @@ -0,0 +1,43 @@ +/< tools /lib/nex/tools.hoon +:: poke-agent: poke a Gall agent with data of a specified mark +:: +!: +^- tool:tools +|% +++ name 'poke_agent' +++ description 'Poke a Gall agent with data of a specified mark' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['agent' [%string 'Agent name (e.g. "hood")']] + ['mark' [%string 'Poke mark (e.g. "helm-pass")']] + ['data' [%string 'Hoon expression for the poke data (e.g. "\'my-password\'")']] + == +++ required ~['agent' 'mark' 'data'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t @t] tang) + %- mule |. + :+ (~(dog jo:json-utils [%o args.st]) /agent so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /mark so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /data so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (agent, mark, data)']) + =/ [agent=@t mark=@t data=@t] p.parsed + =/ agt=@tas (slav %tas agent) + =/ mar=@tas (slav %tas mark) + =/ res=(each vase tang) + (mule |.((slap !>(..zuse) (ream data)))) + ?: ?=(%| -.res) + =/ lines=wall (zing (turn (flop p.res) |=(=tank (wash [0 80] tank)))) + (pure:m [%error (crip "Bad hoon expression:\0a{(of-wall:format lines)}")]) + ;< err=(unit tang) bind:m + (gall-poke-or-nack:io agt mar^q.p.res) + ?^ err + =/ lines=wall (zing (turn (flop u.err) |=(=tank (wash [0 80] tank)))) + (pure:m [%error (crip "Poke nacked:\0a{(of-wall:format lines)}")]) + (pure:m [%text (crip "Poked %{(trip agt)} with %{(trip mar)}")]) +-- diff --git a/desk/gub/lib/mcp/probe-block.hoon b/desk/gub/lib/mcp/probe-block.hoon new file mode 100644 index 0000000..89e7170 --- /dev/null +++ b/desk/gub/lib/mcp/probe-block.hoon @@ -0,0 +1,266 @@ +/< tools /lib/nex/tools.hoon +/< btc /lib/sur/bitcoin.hoon +/< urb /lib/sur/urb.hoon +/< urb-core /lib/urb-core.hoon +/< btc-rpc /lib/btc-rpc.hoon +:: probe-block: fetch a groundwire block and run it through the urb +:: detection pipeline at a chosen stage. Used for per-stage debugging +:: of the walker: isolate where reveals go missing. +:: +!: +=, btc +=> |% + :: Fiber helper: HTTP-fetch a getblock verbosity-2 response and + :: return its parsed JSON body. + :: + ++ fetch-block-json + |= [url=@t auth=@t hash-hex=@t] + =/ m (fiber:fiber:nexus ,(each json @t)) + ^- form:m + =/ params=@t + (rap 3 ~['["' hash-hex '",2]']) + =/ req=request:http + (rpc-request:btc-rpc url auth 'getblock' params) + ;< ~ bind:m (send-request:io req) + ;< resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.resp) + (pure:m [%| 'getblock: no finished response']) + ?~ full-file.resp + (pure:m [%| 'getblock: empty response body']) + =/ body=@t q.data.u.full-file.resp + =/ jon=(unit json) (de:json:html body) + ?~ jon (pure:m [%| 'getblock: invalid JSON body']) + (pure:m [%& u.jon]) + :: + :: Fiber helper: read groundwire config.json and return [url auth], + :: falling back to btc-rpc defaults on any failure. + :: + ++ read-groundwire-config + =/ m (fiber:fiber:nexus ,[url=@t auth=@t]) + ^- form:m + =/ fallback=[url=@t auth=@t] [default-url:btc-rpc default-auth:btc-rpc] + ;< =seen:nexus bind:m + (peek:io [%& %& /'groundwire.groundwire' %'config.json'] ~) + ?. ?=([%& %file *] seen) (pure:m fallback) + =/ jon !<(json q.sage.p.seen) + ?. ?=([%o *] jon) (pure:m fallback) + =/ url=@t + =/ u=(unit json) (~(get by p.jon) 'url') + ?~ u url.fallback + ?. ?=([%s *] u.u) url.fallback + p.u.u + =/ auth=@t + =/ a=(unit json) (~(get by p.jon) 'auth') + ?~ a auth.fallback + ?. ?=([%s *] u.a) auth.fallback + p.u.a + (pure:m [url auth]) + :: + :: Fiber helper: read groundwire latest.json and return the current + :: tip hash as a hex cord, or ~ if missing/malformed. + :: + ++ read-tip-hash + =/ m (fiber:fiber:nexus ,(unit @t)) + ^- form:m + ;< =seen:nexus bind:m + (peek:io [%& %& /'groundwire.groundwire' %'latest.json'] ~) + ?. ?=([%& %file *] seen) (pure:m ~) + =/ jon !<(json q.sage.p.seen) + ?. ?=([%o *] jon) (pure:m ~) + =/ h=(unit json) (~(get by p.jon) 'hash') + ?~ h (pure:m ~) + ?. ?=([%s *] u.h) (pure:m ~) + (pure:m `p.u.h) + :: Diagnostic: replay the witness extraction logic from + :: find-block-reveals step by step and report where each + :: input bails or succeeds. Does NOT modify urb-core. + :: + ++ diagnose-witness + |= blk=block:btc + ^- wain + =/ non-cb=(list tx:btc) ?~(txs.blk ~ t.txs.blk) + ?~ non-cb ~['(no non-coinbase txs)'] + %- zing + %+ turn non-cb + |= t=tx:btc + ^- wain + =/ txid-hex=@t (render-hex-octs:btc-rpc 32^id.t) + =/ tx-hdr=@t (rap 3 ~['tx 0x' txid-hex ' inputs=' (ud-to-cord:btc-rpc (lent is.t))]) + :- tx-hdr + =| idx=@ud + =/ ins is.t + |- ^- wain + ?~ ins ~ + =/ iw=inputw:tx:btc i.ins + =/ wit=wain + =/ rwit (flop witness.iw) + =/ rwit-len=@ud (lent rwit) + ?: =(0 rwit-len) + ~[' BAIL: empty witness stack'] + ?. ?=([* ^] rwit) + ~[(rap 3 ~[' BAIL: witness has only 1 item (need >=2), len=' (ud-to-cord:btc-rpc rwit-len)])] + :: check last item (first after flop) for taproot control byte + =/ last-item=hexb i.rwit + ?: =(0 wid.last-item) + ~[' BAIL: last witness item has wid=0'] + =/ first-byte=@ (cut 3 [(dec wid.last-item) 1] dat.last-item) + =/ first-byte-hex=@t (render-hex-octs:btc-rpc 1^first-byte) + ?. |(=(0xc0 first-byte) =(0xc1 first-byte)) + ~[(rap 3 ~[' BAIL: control byte 0x' first-byte-hex ' not 0xc0/0xc1 (not taproot)'])] + :: check for annex (0x50 in last byte of last item) + =/ has-annex=? + &(!=(0 wid.last-item) =(0x50 (cut 3 [(dec wid.last-item) 1] dat.last-item))) + :: wait — that's the same check. the code checks if last item's + :: first byte is 0x50, meaning it's an annex, and if so the script + :: is the THIRD item from the end instead of the second. + :: Actually re-reading: it checks i.rwit (last witness item) for + :: first-byte 0xc0/0xc1. Then checks i.rwit again (same item) for + :: 0x50 in the MSB. But that can't both be 0xc0/0xc1 AND 0x50... + :: Unless it's checking a DIFFERENT byte position. + :: + :: Let me re-read the original more carefully: + :: =/ first-byte =+(i.rwit (cut 3 [(dec wid) 1] dat)) + :: That's the MSB of the last witness item. + :: Then: ?. =+ i.rwit &(!=(0 wid) =(0x50 (cut 3 [(dec wid) 1] dat))) + :: That's ALSO the MSB of i.rwit. So it's checking if the SAME + :: byte is 0x50. But we already checked it's 0xc0 or 0xc1. + :: So this branch (has-annex) is NEVER true for taproot spends. + :: That means the script is always i.t.rwit (second from end). + :: + =/ script-item=hexb i.t.rwit + =/ script-wid=@ud wid.script-item + ?: (lth script-wid 6) + ~[(rap 3 ~[' BAIL: script too short (' (ud-to-cord:btc-rpc script-wid) ' bytes, need >=6)'])] + =/ envelope-check=@ (cut 3 [(sub script-wid 6) 5] dat.script-item) + =/ envelope-hex=@t (render-hex-octs:btc-rpc 5^envelope-check) + ?. =(0x63.0375.7262 envelope-check) + ~[(rap 3 ~[' BAIL: no urb envelope. top 5 bytes: 0x' envelope-hex ' (expected 6303757262)'])] + ~[(rap 3 ~[' OK: urb envelope found in script (' (ud-to-cord:btc-rpc script-wid) ' bytes)'])] + (weld wit $(ins t.ins, idx +(idx))) + -- +^- tool:tools +|% +++ name 'probe_block' +++ description + ^~ %- crip + ;: weld + "Fetch a groundwire block and inspect it at a given pipeline stage. " + "Stage 'parse' dumps the witness-byte trace-block output for every " + "non-coinbase tx. Additional stages (reveals/enrich/precommit/apply) " + "exercise deeper parts of the urb walker pipeline. If no hash is " + "given, reads /'groundwire.groundwire'/latest.json for the current tip." + == +++ parameters + ^- (map @t parameter-def:tools) + %- malt + :~ ['hash' [%string 'Block hash hex (no 0x prefix). Optional — defaults to tip.']] + ['stage' [%string 'Pipeline stage: parse (default) | reveals | enrich | precommit | apply']] + ['url' [%string 'Override RPC url. Optional — defaults to config.json.']] + ['auth' [%string 'Override RPC auth header. Optional — defaults to config.json.']] + == +++ required *(list @t) +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + :: Args + =/ arg-hash=(unit @t) + (~(deg jo:json-utils [%o args.st]) /hash so:dejs:format) + =/ arg-stage=(unit @t) + (~(deg jo:json-utils [%o args.st]) /stage so:dejs:format) + =/ arg-url=(unit @t) + (~(deg jo:json-utils [%o args.st]) /url so:dejs:format) + =/ arg-auth=(unit @t) + (~(deg jo:json-utils [%o args.st]) /auth so:dejs:format) + =/ stage=@t ?~(arg-stage 'parse' u.arg-stage) + :: Resolve url/auth (explicit args win over config.json) + ;< [cfg-url=@t cfg-auth=@t] bind:m read-groundwire-config + =/ url=@t ?~(arg-url cfg-url u.arg-url) + =/ auth=@t ?~(arg-auth cfg-auth u.arg-auth) + :: Resolve hash (explicit arg wins over latest.json tip) + ;< tip-hash=(unit @t) bind:m read-tip-hash + =/ mhash=(unit @t) + ?^ arg-hash arg-hash + tip-hash + ?~ mhash + (pure:m [%error 'No hash given and /groundwire.groundwire/latest.json missing/empty']) + =/ hash-hex=@t u.mhash + :: Fetch the block + ;< fetched=(each json @t) bind:m (fetch-block-json url auth hash-hex) + ?: ?=(%| -.fetched) (pure:m [%error p.fetched]) + :: Parse the block + =/ mblk=(unit block:btc) (parse-block:btc-rpc p.fetched) + ?~ mblk (pure:m [%error 'parse-block: could not parse JSON into block:btc']) + =/ blk=block:btc u.mblk + :: Stage dispatch + ?+ stage + (pure:m [%error (crip "unknown stage: {(trip stage)} (try parse|reveals|enrich|precommit|apply)")]) + :: + %parse + =/ trace=wain (trace-block:btc-rpc blk 0) + =/ header=wain + :~ (rap 3 ~['# probe_block stage=parse hash=' hash-hex]) + %+ rap 3 + :~ '# height=' (ud-to-cord:btc-rpc height.blk) + ' txs=' (ud-to-cord:btc-rpc (lent txs.blk)) + ' reward=' (ud-to-cord:btc-rpc reward.blk) + == + '' + == + =/ body=wain + ?~ trace + ~['(coinbase-only; no non-coinbase txs to trace)'] + trace + (pure:m [%text (of-wain:format (weld header body))]) + :: + %reveals + =/ revs-and-block + (find-block-reveals:(abed:urb-core:urb-core *state:urb) blk) + =/ reveals -.revs-and-block + =/ filtered=block:btc +.revs-and-block + =/ rev-count=@ud ~(wyt by reveals) + =/ filt-tx-count=@ud (lent txs.filtered) + =/ header=wain + :~ (rap 3 ~['# probe_block stage=reveals hash=' hash-hex]) + %+ rap 3 + :~ '# height=' (ud-to-cord:btc-rpc height.blk) + ' txs=' (ud-to-cord:btc-rpc (lent txs.blk)) + ' reveals=' (ud-to-cord:btc-rpc rev-count) + ' filtered-txs=' (ud-to-cord:btc-rpc filt-tx-count) + == + '' + == + =/ body=wain + ?: =(0 rev-count) + ~['NO REVEALS FOUND — find-block-reveals returned empty map'] + %- zing + %+ turn ~(tap by reveals) + |= [[=txid:ord:urb =vout:ord:urb] sots=(list raw-sotx:urb) value=(unit @ud)] + ^- wain + :~ %+ rap 3 + :~ ' outpoint 0x' + (render-hex-octs:btc-rpc 32^txid) + ':' + (ud-to-cord:btc-rpc vout) + ' sots=' + (ud-to-cord:btc-rpc (lent sots)) + ' value=' + ?~(value 'none' (ud-to-cord:btc-rpc u.value)) + == + == + (pure:m [%text (of-wain:format (weld header body))]) + :: + %diagnose + =/ header=wain + :~ (rap 3 ~['# probe_block stage=diagnose hash=' hash-hex]) + %+ rap 3 + :~ '# height=' (ud-to-cord:btc-rpc height.blk) + ' txs=' (ud-to-cord:btc-rpc (lent txs.blk)) + == + '' + == + =/ diag=wain (diagnose-witness blk) + (pure:m [%text (of-wain:format (weld header diag))]) + == +-- diff --git a/desk/gub/lib/mcp/probe-scan.hoon b/desk/gub/lib/mcp/probe-scan.hoon new file mode 100644 index 0000000..33d23ba --- /dev/null +++ b/desk/gub/lib/mcp/probe-scan.hoon @@ -0,0 +1,151 @@ +/< tools /lib/nex/tools.hoon +/< btc-rpc /lib/btc-rpc.hoon +:: probe-scan: walk back N blocks from the current tip and return +:: a one-line-per-block summary of heights, hashes, and tx counts. +:: Blocks with txs>1 are flagged with '*' (non-coinbase txs present). +:: +!: +=> |% + :: Fiber helper: read groundwire config.json and return [url auth], + :: falling back to btc-rpc defaults. + :: + ++ read-groundwire-config + =/ m (fiber:fiber:nexus ,[url=@t auth=@t]) + ^- form:m + =/ fallback=[url=@t auth=@t] + [default-url:btc-rpc default-auth:btc-rpc] + ;< =seen:nexus bind:m + (peek:io [%& %& /'groundwire.groundwire' %'config.json'] ~) + ?. ?=([%& %file *] seen) (pure:m fallback) + =/ jon !<(json q.sage.p.seen) + ?. ?=([%o *] jon) (pure:m fallback) + =/ url=@t + =/ u=(unit json) (~(get by p.jon) 'url') + ?~ u url.fallback + ?. ?=([%s *] u.u) url.fallback + p.u.u + =/ auth=@t + =/ a=(unit json) (~(get by p.jon) 'auth') + ?~ a auth.fallback + ?. ?=([%s *] u.a) auth.fallback + p.u.a + (pure:m [url auth]) + :: + :: Fiber helper: read groundwire height.ud and return current tip, + :: or ~ if missing. + :: + ++ read-tip-height + =/ m (fiber:fiber:nexus ,(unit @ud)) + ^- form:m + ;< =seen:nexus bind:m + (peek:io [%& %& /'groundwire.groundwire' %'height.ud'] ~) + ?. ?=([%& %file *] seen) (pure:m ~) + (pure:m `!<(@ud q.sage.p.seen)) + :: + :: Fiber helper: walk heights [from..to] calling getblockhash + + :: getblock verbosity=1, accumulate one line per block. + :: + ++ scan-range + |= [url=@t auth=@t from=@ud to=@ud] + =/ m (fiber:fiber:nexus ,wain) + ^- form:m + =| lines=wain + =. lines + :_ lines + %+ rap 3 + :~ '# probe_scan from=' (ud-to-cord:btc-rpc from) + ' to=' (ud-to-cord:btc-rpc to) + == + =/ h=@ud from + |- ^- form:m + ?: (gth h to) (pure:m (flop lines)) + =/ hash-params=@t (en:json:html [%a ~[(numb:enjs:format h)]]) + =/ hash-req=request:http + (rpc-request:btc-rpc url auth 'getblockhash' hash-params) + ;< ~ bind:m (send-request:io hash-req) + ;< hash-resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.hash-resp) $(h +(h)) + ?~ full-file.hash-resp $(h +(h)) + =/ hbody=@t q.data.u.full-file.hash-resp + =/ hjon=(unit json) (de:json:html hbody) + ?~ hjon $(h +(h)) + =/ mhash=(unit @t) (parse-string-result:btc-rpc u.hjon) + ?~ mhash $(h +(h)) + =/ hcord=@t u.mhash + =/ blk-params=@t + %+ rap 3 + :~ '["' hcord '",1]' == + =/ blk-req=request:http + (rpc-request:btc-rpc url auth 'getblock' blk-params) + ;< ~ bind:m (send-request:io blk-req) + ;< blk-resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.blk-resp) $(h +(h)) + ?~ full-file.blk-resp $(h +(h)) + =/ bbody=@t q.data.u.full-file.blk-resp + =/ bjon=(unit json) (de:json:html bbody) + ?~ bjon $(h +(h)) + =/ ntx=@ud + ?. ?=([%o *] u.bjon) 0 + =/ result=(unit json) (~(get by p.u.bjon) 'result') + ?~ result 0 + ?. ?=([%o *] u.result) 0 + =/ txs-j=(unit json) (~(get by p.u.result) 'tx') + ?~ txs-j 0 + ?. ?=([%a *] u.txs-j) 0 + (lent p.u.txs-j) + =/ flag=@t ?:((gth ntx 1) ' *' '') + =/ line=@t + %+ rap 3 + :~ (ud-to-cord:btc-rpc h) + ' 0x' hcord + ' txs=' (ud-to-cord:btc-rpc ntx) + flag + == + $(h +(h), lines [line lines]) + -- +^- tool:tools +|% +++ name 'probe_scan' +++ description + ^~ %- crip + ;: weld + "Walk back N blocks from the current groundwire tip and return a " + "one-line-per-block summary (height, hash, tx count). Blocks with " + "txs>1 are flagged with '*' (non-coinbase present — candidate " + "witness-block). Defaults to 30 blocks." + == +++ parameters + ^- (map @t parameter-def:tools) + %- malt + :~ ['count' [%string 'Number of blocks to scan back from tip (default 30)']] + ['url' [%string 'Override RPC url. Optional.']] + ['auth' [%string 'Override RPC auth header. Optional.']] + == +++ required *(list @t) +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ arg-count=(unit @t) + (~(deg jo:json-utils [%o args.st]) /count so:dejs:format) + =/ arg-url=(unit @t) + (~(deg jo:json-utils [%o args.st]) /url so:dejs:format) + =/ arg-auth=(unit @t) + (~(deg jo:json-utils [%o args.st]) /auth so:dejs:format) + =/ count=@ud + ?~ arg-count 30 + (fall (rush u.arg-count dem) 30) + ;< [cfg-url=@t cfg-auth=@t] bind:m read-groundwire-config + =/ url=@t ?~(arg-url cfg-url u.arg-url) + =/ auth=@t ?~(arg-auth cfg-auth u.arg-auth) + ;< mtip=(unit @ud) bind:m read-tip-height + ?~ mtip + (pure:m [%error '/groundwire.groundwire/height.ud missing — walker not running?']) + =/ tip=@ud u.mtip + ?: =(0 tip) + (pure:m [%error 'tip height is 0 — walker has not polled yet']) + =/ start=@ud ?:((gte count tip) 1 +((sub tip count))) + ;< lines=wain bind:m (scan-range url auth start tip) + (pure:m [%text (of-wain:format lines)]) +-- diff --git a/desk/gub/lib/mcp/read-bang.hoon b/desk/gub/lib/mcp/read-bang.hoon new file mode 100644 index 0000000..912194b --- /dev/null +++ b/desk/gub/lib/mcp/read-bang.hoon @@ -0,0 +1,41 @@ +/< tools /lib/nex/tools.hoon +^- tool:tools +|% +++ name 'read_bang' +++ description 'Check if a nexus directory or file has an error (bang). For directories returns the nexus bang and per-file errors, for files returns the file error.' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['path' [%string 'Path to query (e.g. "/claude.claude/" for nexus, "/claude.claude/config.json" for file)']]]) +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /path so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: path']) + =/ pax=@t p.parsed + =/ =road:tarball (cord-to-road:tarball pax) + ;< res=(each bangs:nexus (unit tang)) bind:m (get-bang:io road) + ?: ?=(%| -.res) + :: File error + :: + ?~ p.res + (pure:m [%text (crip "No error for {(trip pax)}")]) + =/ rendered=tape + %- zing + %+ turn (flop u.p.res) + |=(=tank (weld ~(ram re tank) "\0a")) + (pure:m [%text (crip "BANG file {(trip pax)}\0a{rendered}")]) + :: Directory bangs + :: + ?~ bang.p.res + (pure:m [%text (crip "No nexus error at {(trip pax)}")]) + =/ rendered=tape + %- zing + %+ turn (flop u.bang.p.res) + |=(=tank (weld ~(ram re tank) "\0a")) + (pure:m [%text (crip "BANG nexus {(trip pax)}\0a{rendered}")]) +-- diff --git a/desk/gub/lib/mcp/read-font.hoon b/desk/gub/lib/mcp/read-font.hoon new file mode 100644 index 0000000..e7a8043 --- /dev/null +++ b/desk/gub/lib/mcp/read-font.hoon @@ -0,0 +1,25 @@ +/< tools /lib/nex/tools.hoon +^- tool:tools +|% +++ name 'read_font' +++ description 'Find which code namespace governs a path.' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['path' [%string 'Path to query']]]) +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /path so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: path']) + =/ pax=@t p.parsed + =/ =road:tarball (cord-to-road:tarball pax) + ;< res=(unit bend:tarball) bind:m (get-font:io road) + ?~ res + (pure:m [%text (crip "No code found governing {(trip pax)}")]) + (pure:m [%text (crip "Bend: {}")]) +-- diff --git a/desk/lib/nex/mcp/tools/read-grub.hoon b/desk/gub/lib/mcp/read-grub.hoon similarity index 93% rename from desk/lib/nex/mcp/tools/read-grub.hoon rename to desk/gub/lib/mcp/read-grub.hoon index 4133deb..5eb16e8 100644 --- a/desk/lib/nex/mcp/tools/read-grub.hoon +++ b/desk/gub/lib/mcp/read-grub.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: read-grub: read a grub (file) from the grubbery ball :: !: @@ -8,7 +9,7 @@ ++ parameters ^- (map @t parameter-def:tools) %- ~(gas by *(map @t parameter-def:tools)) - :~ ['path' [%string 'Directory path (e.g. "/config/creds")']] + :~ ['path' [%string 'Directory path (e.g. "/mcp.mcp")']] ['name' [%string 'Grub filename (e.g. "telegram.json")']] == ++ required ~['path' 'name'] diff --git a/desk/gub/lib/mcp/read-manual.hoon b/desk/gub/lib/mcp/read-manual.hoon new file mode 100644 index 0000000..43f0271 --- /dev/null +++ b/desk/gub/lib/mcp/read-manual.hoon @@ -0,0 +1,28 @@ +/< tools /lib/nex/tools.hoon +:: manu: look up documentation for any path in the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'read_manual' +++ description 'Look up documentation for a path in the grubbery ball. Returns the on-manu documentation from the nexus responsible for that path. Use this to understand what a directory or file is, what processes run there, and how things are structured.' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['path' [%string 'Path to look up (e.g. "/" or "/claude.claude/" or "/claude.claude/config.json")']]]) +++ required ~['path'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /path so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: path']) + =/ pax=@t p.parsed + =/ =road:tarball (cord-to-road:tarball pax) + ;< doc=@t bind:m (manu-road:io road) + ?: =('' doc) + (pure:m [%text (crip "No documentation found for {(trip pax)}")]) + (pure:m [%text doc]) +-- diff --git a/desk/lib/nex/mcp/tools/read-terminal.hoon b/desk/gub/lib/mcp/read-terminal.hoon similarity index 91% rename from desk/lib/nex/mcp/tools/read-terminal.hoon rename to desk/gub/lib/mcp/read-terminal.hoon index 55bc607..b988dc7 100644 --- a/desk/lib/nex/mcp/tools/read-terminal.hoon +++ b/desk/gub/lib/mcp/read-terminal.hoon @@ -1,3 +1,5 @@ +/< tools /lib/nex/tools.hoon +/< clurd /lib/nex/clurd.hoon :: read-terminal: read rendered dill terminal output :: :: Reads historical blit batches from a dill session and renders @@ -53,7 +55,7 @@ [%& %& /sys/dill/sessions session] :: Get current version to compute range ;< =seen:nexus bind:m - (peek:io /cur ses-road ~) + (peek:io ses-road ~) ?. ?=([%& %file *] seen) (pure:m [%error 'Session not found']) =/ cur-ver=@ud ud.file.sack.p.seen @@ -65,8 +67,8 @@ =/ range-to=@ud (fall to cur-ver) :: Fetch all versions in range via peep - ;< res=(each (list [=cass:clay =cage]) tang) bind:m - (peep:io /hist ses-road [%numb `range-from `range-to]) + ;< res=(each (list [=cass:clay =sage:tarball]) tang) bind:m + (peep:io ses-road [%numb `range-from `range-to]) ?: ?=(%| -.res) (pure:m [%error (crip (zing (turn (flop p.res) |=(=tank (weld ~(ram re tank) "\0a")))))]) ?~ p.res @@ -75,8 +77,8 @@ =/ all-blits=(list blit:dill) %- zing %+ turn p.res - |= [=cass:clay =cage] - !<((list blit:dill) q.cage) + |= [=cass:clay =sage:tarball] + !<((list blit:dill) q.sage) =/ rendered=@t (render-blits:clurd all-blits wid) (pure:m [%text (crip "Terminal ({}, versions {}-{} of {}):\0a{(trip rendered)}")]) -- diff --git a/desk/gub/lib/mcp/read-weir.hoon b/desk/gub/lib/mcp/read-weir.hoon new file mode 100644 index 0000000..89538ca --- /dev/null +++ b/desk/gub/lib/mcp/read-weir.hoon @@ -0,0 +1,75 @@ +/< tools /lib/nex/tools.hoon +:: read-weir: show sandbox rules on a directory +:: +!: +=< ^- tool:tools + |% + ++ name 'read_weir' + ++ description 'Read sandbox (weir) rules from a directory. Shows make/poke/peek rules.' + ++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Directory to read weir from (e.g. "/claw.claw_app/agents/test/")']] + == + ++ required ~['path'] + ++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /path so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: path']) + =/ weir-path=@t p.parsed + =/ dir-pax=path + =/ t=tape (trip weir-path) + =/ clean=tape ?:(&(!=(~ t) =('/' (rear t))) (snip t) t) + ?~ clean / + (stab (crip clean)) + ;< dir-seen=seen:nexus bind:m (peek:io [%& %| dir-pax] ~) + ?. ?=([%& %ball *] dir-seen) + (pure:m [%text 'No directory found at that path']) + =/ =sand:nexus sand.p.dir-seen + ?~ fil.sand + (pure:m [%text (crip "Weir at {(trip weir-path)}: NONE (unrestricted)")]) + =/ w=weir:nexus u.fil.sand + =/ out=tape + ;: weld + "Weir at {(trip weir-path)}:\0a" + " make (write): {(render-rules make.w)}\0a" + " poke: {(render-rules poke.w)}\0a" + " peek (read): {(render-rules peek.w)}" + == + (pure:m [%text (crip out)]) + -- +:: +|% +++ render-rules + |= rules=(set road:tarball) + ^- tape + ?: =(~ rules) "BLOCKED (empty set)" + %- zing + %+ join ", " + ^- (list tape) + %+ turn ~(tap in rules) + |= r=road:tarball + ?- -.r + %& + =/ =lane:tarball p.r + ?- -.lane + %& "{(spud path.p.lane)}/{(trip name.p.lane)}" + %| "{(spud p.lane)}/" + == + %| + =/ =bend:tarball p.r + =/ ups=tape + ?: =(0 p.bend) "./" + (zing (turn (gulf 1 p.bend) |=(* "../"))) + =/ =lane:tarball q.bend + ?- -.lane + %& "{ups}{(spud path.p.lane)}/{(trip name.p.lane)}" + %| "{ups}{(spud p.lane)}/" + == + == +-- diff --git a/desk/gub/lib/mcp/remote-make.hoon b/desk/gub/lib/mcp/remote-make.hoon new file mode 100644 index 0000000..ac37475 --- /dev/null +++ b/desk/gub/lib/mcp/remote-make.hoon @@ -0,0 +1,59 @@ +/< tools /lib/nex/tools.hoon +:: remote-make: create a file on a remote ship's grubbery +:: +!: +^- tool:tools +|% +++ name 'remote_make' +++ description + ^~ %- crip + ;: weld + "Create a file on a remote ship's grubbery. " + "Sends a %grubbery-load %make poke to the target ship." + == +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['ship' [%string 'Target ship (e.g. "~nec")']] + ['path' [%string 'Directory path on remote (e.g. "/hello")']] + ['name' [%string 'Filename (e.g. "world")']] + ['content' [%string 'Text content to write']] + ['mark' [%string 'Target mark (e.g. "hoon", "txt"). Omit to store as mime.']] + == +++ required ~['ship' 'path' 'name' 'content'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ ship-raw=(unit @t) (~(deg jo:json-utils [%o args.st]) /ship so:dejs:format) + =/ path-raw=(unit @t) (~(deg jo:json-utils [%o args.st]) /path so:dejs:format) + =/ name-raw=(unit @t) (~(deg jo:json-utils [%o args.st]) /name so:dejs:format) + =/ content-raw=(unit @t) (~(deg jo:json-utils [%o args.st]) /content so:dejs:format) + ?~ ship-raw (pure:m [%error 'Missing required argument: ship']) + ?~ path-raw (pure:m [%error 'Missing required argument: path']) + ?~ name-raw (pure:m [%error 'Missing required argument: name']) + ?~ content-raw (pure:m [%error 'Missing required argument: content']) + =/ target=@p (slav %p u.ship-raw) + =/ pax-parsed=(each path @t) (parse-path:tools u.path-raw) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + =/ nam=@ta u.name-raw + =/ dest-blot=(unit blot:tarball) + ?~ mk=(~(get jo:json-utils [%o args.st]) /mark) ~ + ?. ?=([%s *] u.mk) ~ + ?: =('' p.u.mk) ~ + =/ pax=path + ?: =('/' (end 3 p.u.mk)) (stab p.u.mk) + (stab (cat 3 '/' p.u.mk)) + ?~ pax ~ + `[(snip `path`pax) (rear pax)] + =/ =mime [/text/plain (as-octs:mimes:html u.content-raw)] + =/ =make:remote:nexus |+[%.n [[/ %mime] mime] dest-blot] + =/ req=load:remote:nexus + [[/remote-make %& pax nam] %make make] + ;< ~ bind:m + (gall-poke:io [target %grubbery] grubbery-load+req) + (pure:m [%text (crip "Created {(trip u.path-raw)}/{(trip nam)} on {(trip u.ship-raw)}")]) +-- diff --git a/desk/gub/lib/mcp/revive-agent.hoon b/desk/gub/lib/mcp/revive-agent.hoon new file mode 100644 index 0000000..574eabb --- /dev/null +++ b/desk/gub/lib/mcp/revive-agent.hoon @@ -0,0 +1,26 @@ +/< tools /lib/nex/tools.hoon +:: revive-agent: revive (re-initialize) a nuked Gall agent +:: +!: +^- tool:tools +|% +++ name 'revive_agent' +++ description 'Revive (re-initialize) a nuked Gall agent' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['agent' [%string 'Agent name (e.g. "chat-store")']]]) +++ required ~['agent'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /agent so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: agent']) + =/ agent=@t p.parsed + =/ agt=@tas (slav %tas agent) + ;< ~ bind:m (gall-poke-our:io %hood kiln-revive+agt) + (pure:m [%text (crip "Revived %{(trip agt)}")]) +-- diff --git a/desk/lib/nex/mcp/tools/run-dojo.hoon b/desk/gub/lib/mcp/run-dojo.hoon similarity index 82% rename from desk/lib/nex/mcp/tools/run-dojo.hoon rename to desk/gub/lib/mcp/run-dojo.hoon index 3b2a879..ff66917 100644 --- a/desk/lib/nex/mcp/tools/run-dojo.hoon +++ b/desk/gub/lib/mcp/run-dojo.hoon @@ -1,3 +1,5 @@ +/< tools /lib/nex/tools.hoon +/< clurd /lib/nex/clurd.hoon :: run-dojo: execute a dojo command and return the output :: :: Sends belt input to a dill session, waits for the prompt @@ -32,22 +34,22 @@ =/ ses-road=road:tarball [%& %& /sys/dill/sessions session] =/ logs-road=road:tarball [%& %& /sys/dill %'logs.dill-told'] :: Fetch terminal blits and logs since our command - ;< ses-res=(each (list [=cass:clay =cage]) tang) bind:m - (peep:io /hist ses-road [%numb `+(pre-ver) ~]) - ;< log-res=(each (list [=cass:clay =cage]) tang) bind:m - (peep:io /logs logs-road [%numb `+(pre-log-ver) ~]) + ;< ses-res=(each (list [=cass:clay =sage:tarball]) tang) bind:m + (peep:io ses-road [%numb `+(pre-ver) ~]) + ;< log-res=(each (list [=cass:clay =sage:tarball]) tang) bind:m + (peep:io logs-road [%numb `+(pre-log-ver) ~]) :: Render terminal output =/ all-blits=(list blit:dill) ?. ?=(%& -.ses-res) ~ - (zing (turn p.ses-res |=([=cass:clay =cage] !<((list blit:dill) q.cage)))) + (zing (turn p.ses-res |=([=cass:clay =sage:tarball] !<((list blit:dill) q.sage)))) =/ terminal=@t (render-blits:clurd all-blits wid) :: Render logs =/ log-text=tape ?. ?=(%& -.log-res) "" %- zing %+ turn p.log-res - |= [=cass:clay =cage] - =/ =told:dill !<(told:dill q.cage) + |= [=cass:clay =sage:tarball] + =/ =told:dill !<(told:dill q.sage) (format-told:tools told) :: Combine =/ out=tape @@ -78,8 +80,11 @@ ?+ step.st (pure:m [%error 'Unknown run_dojo step']) %start =/ args=json [%o args.st] - =/ command=@t - (~(dog jo:json-utils args) /command so:dejs:format) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils args) /command so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: command']) + =/ command=@t p.parsed =/ session=@tas =/ ses=@t (~(dug jo:json-utils args) /session so:dejs:format '') (crip (trip ses)) @@ -92,11 +97,11 @@ :: Record version before command for both session and logs =/ ses-road=road:tarball [%& %& /sys/dill/sessions session] =/ logs-road=road:tarball [%& %& /sys/dill %'logs.dill-told'] - ;< pre=seen:nexus bind:m (peek:io /pre ses-road ~) + ;< pre=seen:nexus bind:m (peek:io ses-road ~) =/ pre-ver=@ud ?. ?=([%& %file *] pre) 0 ud.file.sack.p.pre - ;< pre-logs=seen:nexus bind:m (peek:io /pre-logs logs-road ~) + ;< pre-logs=seen:nexus bind:m (peek:io logs-road ~) =/ pre-log-ver=@ud ?. ?=([%& %file *] pre-logs) 0 ud.file.sack.p.pre-logs @@ -113,16 +118,13 @@ (replace:io !>([tool.st args.st %running run-data ~])) :: Send the command as belt input + return =/ chars=(list @c) (tuba (trip command)) - ;< ~ bind:m - (send-card:io %pass /dojo %arvo %d %shot session %belt [%txt chars]) - ;< ~ bind:m - (send-card:io %pass /dojo-ret %arvo %d %shot session %belt [%ret ~]) + ;< ~ bind:m (send-belt:io session %txt chars) + ;< ~ bind:m (send-belt:io session %ret ~) :: Subscribe to session for updates ;< * bind:m (keep:io /watch ses-road ~) :: Set timeout - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - ;< ~ bind:m - (send-card:io %pass /timeout %arvo %b %wait (add now.bowl (mul ~s1 timeout))) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now (mul ~s1 timeout))) :: Wait until we see a prompt in a blit batch that comes AFTER our command =/ batches=@ud 0 |- @@ -132,12 +134,12 @@ ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) (read-results st) ?. ?=([%file *] view.nw) $ - ?. ?=(%dill-blit p.cage.view.nw) $ + ?. ?=(%dill-blit name.p.sage.view.nw) $ =. batches +(batches) :: Skip the first batch (command echo) — wait for result + prompt ?. (gth batches 1) $ =/ blits=(list blit:dill) - !<((list blit:dill) q.cage.view.nw) + !<((list blit:dill) q.sage.view.nw) =/ rendered=@t (render-blits:clurd blits wid) =/ txt=tape (trip rendered) :: Check for prompt at end of this batch diff --git a/desk/gub/lib/mcp/run-spawn.hoon b/desk/gub/lib/mcp/run-spawn.hoon new file mode 100644 index 0000000..b74153d --- /dev/null +++ b/desk/gub/lib/mcp/run-spawn.hoon @@ -0,0 +1,48 @@ +:: run-spawn: trigger the reg-tester spawn flow via poke. +:: +:: Pokes groundwire.groundwire/reg-tester.sig with a spawn action, +:: which mines a funding block, builds commit/reveal chains, +:: broadcasts them, and mines confirmation blocks. +:: +/< tools /lib/nex/tools.hoon +!: +^- tool:tools +|% +++ name 'run_spawn' +++ description + ^~ %- crip + ;: weld + "Trigger the groundwire reg-tester spawn flow. Mines a funding block, " + "builds 3 commit/reveal tx pairs, broadcasts them, and mines 8 " + "confirmation blocks. Use probe_scan afterwards to find the reveal " + "block, then probe_block stage=reveals to verify detection." + == +++ parameters + ^- (map @t parameter-def:tools) + %- malt + :~ ['sed' [%string 'Wallet seed (positive integer). Default 42.']] + == +++ required *(list @t) +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ arg-sed=(unit @t) + (~(deg jo:json-utils [%o args.st]) /sed so:dejs:format) + =/ sed=@ud ?~(arg-sed 42 (fall (rush u.arg-sed dem) 42)) + :: build the poke json: {"action":"spawn","sed":N} + =/ poke-json=json + %- pairs:enjs:format + :~ ['action' [%s 'spawn']] + ['sed' (numb:enjs:format sed)] + == + :: poke groundwire.groundwire/reg-tester.sig + ;< ~ bind:m + %- poke:io + :* (cord-to-road:tarball './groundwire.groundwire') + [/ `@ta`'reg-tester.sig'] + !>(poke-json) + == + (pure:m [%text (crip "spawn poke sent (sed={((d-co:co 1) sed)}). watch the walker — it'll mine funding + 100 maturity + reveals + 8 confirmation blocks.")]) +-- diff --git a/desk/lib/nex/mcp/tools/run-tests.hoon b/desk/gub/lib/mcp/run-tests.hoon similarity index 99% rename from desk/lib/nex/mcp/tools/run-tests.hoon rename to desk/gub/lib/mcp/run-tests.hoon index cc7be76..63b920d 100644 --- a/desk/lib/nex/mcp/tools/run-tests.hoon +++ b/desk/gub/lib/mcp/run-tests.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: run-tests: discover and run unit tests from a Clay desk :: :: Path resolution follows ted/test.hoon: if the path is a .hoon file, diff --git a/desk/lib/nex/mcp/tools/s3-delete.hoon b/desk/gub/lib/mcp/s3-delete.hoon similarity index 86% rename from desk/lib/nex/mcp/tools/s3-delete.hoon rename to desk/gub/lib/mcp/s3-delete.hoon index 97b236d..407f91e 100644 --- a/desk/lib/nex/mcp/tools/s3-delete.hoon +++ b/desk/gub/lib/mcp/s3-delete.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: s3-delete: delete a file from S3 :: !: @@ -16,13 +17,17 @@ =/ m (fiber:fiber:nexus ,tool-result:tools) ^- form:m ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ s3-key=@t + =/ parsed=(each @t tang) + %- mule |. %. [%o args.st] %- ot:dejs:format :~ ['s3_key' so:dejs:format] == + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: s3_key']) + =/ s3-key=@t p.parsed ;< creds=s3-creds:tools bind:m read-s3-creds:tools - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io =/ [amz-date=@t payload-hash=@t authorization=@t] %: build-signature:s3:tools 'DELETE' @@ -34,7 +39,7 @@ s3-key '' ~ - now.bowl + now == =/ url=@t (build-url:s3:tools endpoint.creds bucket.creds s3-key ~) =/ headers=(list [@t @t]) (build-headers:s3:tools 'DELETE' payload-hash amz-date authorization) diff --git a/desk/lib/nex/mcp/tools/s3-download-directory.hoon b/desk/gub/lib/mcp/s3-download-directory.hoon similarity index 86% rename from desk/lib/nex/mcp/tools/s3-download-directory.hoon rename to desk/gub/lib/mcp/s3-download-directory.hoon index 7ec5ee3..ea5f52a 100644 --- a/desk/lib/nex/mcp/tools/s3-download-directory.hoon +++ b/desk/gub/lib/mcp/s3-download-directory.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: s3-download-directory: download all files under an S3 prefix to the ball :: !: @@ -17,15 +18,19 @@ =/ m (fiber:fiber:nexus ,tool-result:tools) ^- form:m ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ [s3-prefix=@t dest-path=@t] + =/ parsed=(each [@t @t] tang) + %- mule |. %. [%o args.st] %- ot:dejs:format :~ ['s3_prefix' so:dejs:format] ['path' so:dejs:format] == + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (s3_prefix, path)']) + =/ [s3-prefix=@t dest-path=@t] p.parsed =/ pax=path (stab dest-path) ;< creds=s3-creds:tools bind:m read-s3-creds:tools - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io =/ query-string=@t (build-list-query:s3:tools s3-prefix) =/ [amz-date=@t payload-hash=@t authorization=@t] %: build-signature:s3:tools @@ -38,7 +43,7 @@ '' query-string ~ - now.bowl + now == =/ url=@t (build-url:s3:tools endpoint.creds bucket.creds '' `query-string) =/ headers=(list [@t @t]) (build-headers:s3:tools 'GET' payload-hash amz-date authorization) @@ -61,7 +66,7 @@ =/ s3-key=@t i.files =/ filename=@ta (extract-filename:s3:tools s3-key) =/ ext=(unit @ta) (parse-extension:tarball filename) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io =/ [ld-amz-date=@t ld-payload-hash=@t ld-authorization=@t] %: build-signature:s3:tools 'GET' @@ -73,7 +78,7 @@ s3-key '' ~ - now.bowl + now == =/ dl-url=@t (build-url:s3:tools endpoint.creds bucket.creds s3-key ~) =/ dl-headers=(list [@t @t]) (build-headers:s3:tools 'GET' ld-payload-hash ld-amz-date ld-authorization) @@ -91,10 +96,10 @@ =/ mtype=path (determine-mime-type:tarball ct filename) =/ file-mime=mime [mtype (as-octs:mimes:html content)] =/ road=road:tarball [%& %& pax filename] - ;< exists=? bind:m (peek-exists:io /check road) + ;< exists=? bind:m (peek-exists:io road) ?: exists - ;< ~ bind:m (over:io /write road mime+!>(file-mime)) + ;< ~ bind:m (over:io road [[/ %mime] !>(file-mime)]) $(files t.files, downloaded +(downloaded)) - ;< ~ bind:m (make:io /write road |+[%.n mime+!>(file-mime) ext]) + ;< ~ bind:m (make:io road |+[%.n [[/ %mime] !>(file-mime)] (bind ext |=(e=@ta [/ e]))]) $(files t.files, downloaded +(downloaded)) -- diff --git a/desk/lib/nex/mcp/tools/s3-download.hoon b/desk/gub/lib/mcp/s3-download.hoon similarity index 83% rename from desk/lib/nex/mcp/tools/s3-download.hoon rename to desk/gub/lib/mcp/s3-download.hoon index 9496d80..0e2398b 100644 --- a/desk/lib/nex/mcp/tools/s3-download.hoon +++ b/desk/gub/lib/mcp/s3-download.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: s3-download: download an S3 file to the grubbery ball :: !: @@ -17,15 +18,19 @@ =/ m (fiber:fiber:nexus ,tool-result:tools) ^- form:m ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ [s3-key=@t dest-path=@t] + =/ parsed=(each [@t @t] tang) + %- mule |. %. [%o args.st] %- ot:dejs:format :~ ['s3_key' so:dejs:format] ['path' so:dejs:format] == + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (s3_key, path)']) + =/ [s3-key=@t dest-path=@t] p.parsed =/ pax=path (stab dest-path) ;< creds=s3-creds:tools bind:m read-s3-creds:tools - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io =/ [amz-date=@t payload-hash=@t authorization=@t] %: build-signature:s3:tools 'GET' @@ -37,7 +42,7 @@ s3-key '' ~ - now.bowl + now == =/ url=@t (build-url:s3:tools endpoint.creds bucket.creds s3-key ~) =/ headers=(list [@t @t]) (build-headers:s3:tools 'GET' payload-hash amz-date authorization) @@ -60,10 +65,10 @@ =/ mtype=path (determine-mime-type:tarball ct filename) =/ file-mime=mime [mtype (as-octs:mimes:html content)] =/ road=road:tarball [%& %& pax filename] - ;< exists=? bind:m (peek-exists:io /check road) + ;< exists=? bind:m (peek-exists:io road) ?: exists - ;< ~ bind:m (over:io /write road mime+!>(file-mime)) + ;< ~ bind:m (over:io road [[/ %mime] !>(file-mime)]) (pure:m [%text (crip "Downloaded s3://{(trip s3-key)} to {(trip dest-path)}/{(trip filename)}")]) - ;< ~ bind:m (make:io /write road |+[%.n mime+!>(file-mime) ext]) + ;< ~ bind:m (make:io road |+[%.n [[/ %mime] !>(file-mime)] (bind ext |=(e=@ta [/ e]))]) (pure:m [%text (crip "Downloaded s3://{(trip s3-key)} to {(trip dest-path)}/{(trip filename)}")]) -- diff --git a/desk/lib/nex/mcp/tools/s3-list.hoon b/desk/gub/lib/mcp/s3-list.hoon similarity index 95% rename from desk/lib/nex/mcp/tools/s3-list.hoon rename to desk/gub/lib/mcp/s3-list.hoon index 421eaa3..160b2d2 100644 --- a/desk/lib/nex/mcp/tools/s3-list.hoon +++ b/desk/gub/lib/mcp/s3-list.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: s3-list: list files in S3 bucket :: !: @@ -21,7 +22,7 @@ ?. ?=([%s *] u.pj) '' p.u.pj ;< creds=s3-creds:tools bind:m read-s3-creds:tools - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io =/ query-string=@t (build-list-query:s3:tools prefix) =/ [amz-date=@t payload-hash=@t authorization=@t] %: build-signature:s3:tools @@ -34,7 +35,7 @@ '' query-string ~ - now.bowl + now == =/ url=@t (build-url:s3:tools endpoint.creds bucket.creds '' `query-string) =/ headers=(list [@t @t]) (build-headers:s3:tools 'GET' payload-hash amz-date authorization) diff --git a/desk/lib/nex/mcp/tools/s3-upload-directory.hoon b/desk/gub/lib/mcp/s3-upload-directory.hoon similarity index 84% rename from desk/lib/nex/mcp/tools/s3-upload-directory.hoon rename to desk/gub/lib/mcp/s3-upload-directory.hoon index d840bd5..7957d3e 100644 --- a/desk/lib/nex/mcp/tools/s3-upload-directory.hoon +++ b/desk/gub/lib/mcp/s3-upload-directory.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: s3-upload-directory: upload a ball directory to S3 :: !: @@ -17,14 +18,18 @@ =/ m (fiber:fiber:nexus ,tool-result:tools) ^- form:m ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ [dir-path=@t s3-prefix=@t] + =/ parsed=(each [@t @t] tang) + %- mule |. %. [%o args.st] %- ot:dejs:format :~ ['path' so:dejs:format] ['s3_prefix' so:dejs:format] == + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, s3_prefix)']) + =/ [dir-path=@t s3-prefix=@t] p.parsed =/ pax=path (stab dir-path) - ;< =seen:nexus bind:m (peek:io /browse [%& %| pax] ~) + ;< =seen:nexus bind:m (peek:io [%& %| pax] ~) ?. ?=([%& %ball *] seen) (pure:m [%error (crip "Directory not found: {(trip dir-path)}")]) =/ files-to-upload=(list [path @ta]) @@ -36,10 +41,10 @@ (pure:m [%text (crip "Uploaded {} files to s3://{(trip s3-prefix)}")]) =/ [file-path=path filename=@ta] i.files-to-upload ;< file-seen=seen:nexus bind:m - (peek:io /read [%& %& file-path filename] ~) + (peek:io [%& %& file-path filename] ~) ?. ?=([%& %file *] file-seen) $(files-to-upload t.files-to-upload) - ;< =mime bind:m (cage-to-mime:io cage.p.file-seen) + ;< =mime bind:m (sage-to-mime:io sage.p.file-seen) =/ text=@t ;;(@t q.q.mime) =/ full-name=@ta filename =/ relative-path=path @@ -50,7 +55,7 @@ (path-to-s3-key:s3:tools relative-path) (crip "{(trip s3-prefix)}/{(trip (path-to-s3-key:s3:tools relative-path))}") ;< creds=s3-creds:tools bind:m read-s3-creds:tools - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io =/ [amz-date=@t payload-hash=@t authorization=@t] %: build-signature:s3:tools 'PUT' @@ -62,7 +67,7 @@ s3-key '' `text - now.bowl + now == =/ url=@t (build-url:s3:tools endpoint.creds bucket.creds s3-key ~) =/ headers=(list [@t @t]) (build-headers:s3:tools 'PUT' payload-hash amz-date authorization) diff --git a/desk/lib/nex/mcp/tools/s3-upload.hoon b/desk/gub/lib/mcp/s3-upload.hoon similarity index 86% rename from desk/lib/nex/mcp/tools/s3-upload.hoon rename to desk/gub/lib/mcp/s3-upload.hoon index 4d81dcd..57711e8 100644 --- a/desk/lib/nex/mcp/tools/s3-upload.hoon +++ b/desk/gub/lib/mcp/s3-upload.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: s3-upload: upload a single ball file to S3 :: !: @@ -18,12 +19,16 @@ =/ m (fiber:fiber:nexus ,tool-result:tools) ^- form:m ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ [file-path=@t file-name=@t] + =/ parsed=(each [@t @t] tang) + %- mule |. %. [%o args.st] %- ot:dejs:format :~ ['path' so:dejs:format] ['name' so:dejs:format] == + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, name)']) + =/ [file-path=@t file-name=@t] p.parsed =/ s3-key=@t ?~ sk=(~(get by args.st) 's3_key') file-name ?. ?=([%s *] u.sk) file-name @@ -34,10 +39,10 @@ (lookup-grub:tools pax file-name) ?. ?=([%& %file *] seen) (pure:m [%error (crip "Not found: {(trip file-path)}/{(trip file-name)}")]) - ;< =mime bind:m (cage-to-mime:io cage.p.seen) + ;< =mime bind:m (sage-to-mime:io sage.p.seen) =/ text=@t ;;(@t q.q.mime) ;< creds=s3-creds:tools bind:m read-s3-creds:tools - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io =/ [amz-date=@t payload-hash=@t authorization=@t] %: build-signature:s3:tools 'PUT' @@ -49,7 +54,7 @@ s3-key '' `text - now.bowl + now == =/ url=@t (build-url:s3:tools endpoint.creds bucket.creds s3-key ~) =/ headers=(list [@t @t]) (build-headers:s3:tools 'PUT' payload-hash amz-date authorization) diff --git a/desk/lib/nex/mcp/tools/scry.hoon b/desk/gub/lib/mcp/scry.hoon similarity index 75% rename from desk/lib/nex/mcp/tools/scry.hoon rename to desk/gub/lib/mcp/scry.hoon index 6358c16..6a01749 100644 --- a/desk/lib/nex/mcp/tools/scry.hoon +++ b/desk/gub/lib/mcp/scry.hoon @@ -1,3 +1,4 @@ +/< tools /lib/nex/tools.hoon :: scry: read data from a vane or agent :: !: @@ -31,22 +32,26 @@ =/ m (fiber:fiber:nexus ,tool-result:tools) ^- form:m ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ path-text=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /path so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: path']) + =/ path-text=@t p.parsed =/ pax=path (stab path-text) =/ mark=@tas (rear pax) ?+ mark (pure:m [%error (crip "Unsupported scry mark: %{(trip mark)}. Use /json, /txt, /hoon, or /mime.")]) %json - ;< result=json bind:m (do-scry:io json /scry pax) + ;< result=json bind:m (scry:io json pax) (pure:m [%text (en:json:html result)]) %txt - ;< result=wain bind:m (do-scry:io wain /scry pax) + ;< result=wain bind:m (scry:io wain pax) (pure:m [%text (of-wain:format result)]) %hoon - ;< result=@t bind:m (do-scry:io @t /scry pax) + ;< result=@t bind:m (scry:io @t pax) (pure:m [%text result]) %mime - ;< result=mime bind:m (do-scry:io mime /scry pax) + ;< result=mime bind:m (scry:io mime pax) (pure:m [%text (crip (trip q.q.result))]) == -- diff --git a/desk/gub/lib/mcp/send-telegram.hoon b/desk/gub/lib/mcp/send-telegram.hoon new file mode 100644 index 0000000..9fb2844 --- /dev/null +++ b/desk/gub/lib/mcp/send-telegram.hoon @@ -0,0 +1,55 @@ +/< tools /lib/nex/tools.hoon +:: send-telegram: send a Telegram message via bot API +:: +!: +^- tool:tools +|% +++ name 'send_telegram' +++ description 'Send a Telegram message. Uses first bot from /telegram.telegram/bots/.' +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['message' [%string 'Message to send']]]) +++ required ~['message'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /message so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: message']) + =/ message=@t p.parsed + :: Read telegram creds from telegram nexus + ;< creds-seen=seen:nexus bind:m + (peek:io [%& %& /'telegram.telegram' %'creds.json'] `[/ %json]) + ?. ?=([%& %file *] creds-seen) + (pure:m [%error 'No telegram creds. Create /telegram.telegram/creds.json with bot-token and chat-id.']) + =/ jon=json !<(json q.sage.p.creds-seen) + =/ creds-parsed=(each [@t @t] tang) + %- mule |. + :- (~(dog jo:json-utils jon) /bot-token so:dejs:format) + (~(dog jo:json-utils jon) /chat-id so:dejs:format) + ?: ?=(%| -.creds-parsed) + (pure:m [%error 'Telegram config missing bot-token or chat-id']) + =/ [bot-token=@t chat-id=@t] p.creds-parsed + :: POST to Telegram Bot API + =/ url=@t + (crip "{(trip 'https://api.telegram.org/bot')}{(trip bot-token)}/sendMessage") + =/ body=@t + (rap 3 ~['chat_id=' chat-id '&text=' message]) + =/ =request:http + :* %'POST' + url + ~[['content-type' 'application/x-www-form-urlencoded']] + `(as-octs:mimes:html body) + == + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) + (pure:m [%error 'Telegram request failed']) + =/ code=@ud status-code.response-header.client-response + ?. =(200 code) + (pure:m [%error (crip "Telegram API error: HTTP {}")]) + (pure:m [%text 'Telegram message sent']) +-- diff --git a/desk/gub/lib/mcp/toggle-permissions.hoon b/desk/gub/lib/mcp/toggle-permissions.hoon new file mode 100644 index 0000000..f0b80f5 --- /dev/null +++ b/desk/gub/lib/mcp/toggle-permissions.hoon @@ -0,0 +1,36 @@ +/< tools /lib/nex/tools.hoon +:: toggle-permissions: make Clay nodes public or private +:: +!: +^- tool:tools +|% +++ name 'toggle_permissions' +++ description 'Make Clay nodes public or private (for publishing desks as apps)' +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['desk' [%string 'Desk name']] + ['path' [%string 'Path within desk (e.g. "/")']] + ['public' [%boolean 'Whether to make public (true) or private (false)']] + == +++ required ~['desk' 'path' 'public'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t ?] tang) + %- mule |. + :+ (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /public bo:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (desk, path, public)']) + =/ [desk=@t path-text=@t pub=?] p.parsed + =/ dek=@tas (slav %tas desk) + =/ pax=path (stab path-text) + ;< ~ bind:m + (gall-poke-our:io %hood kiln-permission+[dek pax pub]) + =/ status=tape ?:(pub "public" "private") + (pure:m [%text (crip "Set %{(trip dek)}{(spud pax)} to {status}")]) +-- diff --git a/desk/gub/lib/mcp/unmount-from-grubbery.hoon b/desk/gub/lib/mcp/unmount-from-grubbery.hoon new file mode 100644 index 0000000..a775544 --- /dev/null +++ b/desk/gub/lib/mcp/unmount-from-grubbery.hoon @@ -0,0 +1,32 @@ +/< tools /lib/nex/tools.hoon +:: unmount-from-grubbery: remove a Clay desk mirror from the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'unmount_from_grubbery' +++ description + ^~ %- crip + ;: weld + "Unmount a Clay desk from the grubbery ball. " + "Removes /sys/clay/desks/[desk] and cancels the Clay subscription." + == +++ parameters + ^- (map @t parameter-def:tools) + (malt ~[['desk' [%string 'Desk name (e.g. "test")']]]) +++ required ~['desk'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each @t tang) + (mule |.((~(dog jo:json-utils [%o args.st]) /desk so:dejs:format))) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid argument: desk']) + =/ desk=@t p.parsed + =/ dek=@tas (slav %tas desk) + ;< ~ bind:m + (poke:io &+&+[/sys/clay %'main.clay-state'] [[/ %unmount-desk] !>(dek)]) + (pure:m [%text (crip "Unmounted %{(trip dek)} from /sys/clay/desks/{(trip dek)}")]) +-- diff --git a/desk/gub/lib/mcp/write-code.hoon b/desk/gub/lib/mcp/write-code.hoon new file mode 100644 index 0000000..25e64d7 --- /dev/null +++ b/desk/gub/lib/mcp/write-code.hoon @@ -0,0 +1,125 @@ +/< tools /lib/nex/tools.hoon +:: write-code: write hoon to code namespace and check compilation +:: +:: Two modes: +:: - Full write: provide 'content' with full source +:: - Edit: provide 'old_string' and 'new_string' to patch existing source +:: +:: Writes source to the code ball, which triggers build-code +:: automatically via save-file. Then checks the compiled bin +:: and returns success or the error tang. +:: +!: +^- tool:tools +=> +|% +++ do-check + |= [=road:tarball pax=@t nam=@t] + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< res=built:nexus bind:m (get-code-full:io road) + ?: ?=(%vase -.res) + (pure:m [%text (crip "OK: {(trip pax)}/{(trip nam)} compiled successfully")]) + ?. ?=(%tang -.res) + (pure:m [%text (crip "OK: {(trip pax)}/{(trip nam)} — non-vase artifact")]) + =/ rendered=tape + %- zing + %+ turn (flop tang.res) + |=(=tank (weld ~(ram re tank) "\0a")) + (pure:m [%error (crip "COMPILE ERROR: {(trip pax)}/{(trip nam)}\0a{rendered}")]) +:: +++ do-write + |= [src-road=road:tarball bin-road=road:tarball pax=@t nam=@t content=@t] + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + =/ src-mime=mime [/text/plain (as-octs:mimes:html content)] + ;< exists=? bind:m (peek-exists:io src-road) + ?: exists + ;< ~ bind:m (over:io src-road [[/ %mime] !>(src-mime)]) + (do-check bin-road pax nam) + ;< ~ bind:m (make:io src-road |+[%.n [[/ %mime] !>(src-mime)] `[/ %hoon]]) + (do-check bin-road pax nam) +:: +++ replace + |= [body=tape old=tape new=tape] + ^- (unit tape) + =/ olen=@ud (lent old) + =/ blen=@ud (lent body) + =/ idx=(unit @ud) (find old body) + ?~ idx ~ + =/ before=tape (scag u.idx body) + =/ after=tape (slag (add u.idx olen) body) + `:(weld before new after) +-- +|% +++ name 'write_code' +++ description + ^~ %- crip + ;: weld + "Write or edit Hoon source in the code namespace with immediate " + "compilation check. Full write: provide 'content'. " + "Edit: provide 'old_string' and 'new_string' to patch existing source. " + "path is the directory (e.g. '/lib/mcp'), name is the file stem " + "without extension (e.g. 'goals')." + == +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Directory in code namespace (e.g. "/lib/mcp", "/mar", "/nex")']] + ['name' [%string 'File stem without extension (e.g. "goals", "echo")']] + ['content' [%string 'Full Hoon source (for full write mode)']] + ['old_string' [%string 'String to find and replace (for edit mode)']] + ['new_string' [%string 'Replacement string (for edit mode)']] + ['code' [%string 'Code namespace path (default: "/code")']] + == +++ required ~['path' 'name'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ parsed=(each [@t @t] tang) + %- mule |. + :- (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) + (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) + ?: ?=(%| -.parsed) + (pure:m [%error 'Missing or invalid required arguments (path, name)']) + =/ [pax=@t nam=@t] p.parsed + =/ content=(unit @t) + (~(deg jo:json-utils [%o args.st]) /content so:dejs:format) + =/ old-string=(unit @t) + (~(deg jo:json-utils [%o args.st]) /'old_string' so:dejs:format) + =/ new-string=(unit @t) + (~(deg jo:json-utils [%o args.st]) /'new_string' so:dejs:format) + =/ code-ns=path + =/ raw=(unit @t) + ?~ p=(~(get jo:json-utils [%o args.st]) /code) ~ + ?. ?=([%s *] u.p) ~ + ?: =('' p.u.p) ~ + `p.u.p + ?~ raw /code + (stab u.raw) + =/ bin-path=path (stab pax) + =/ bin-name=@ta (crip (trip nam)) + =/ file-name=@ta (cat 3 bin-name '.hoon') + =/ src-road=road:tarball [%& %& (weld code-ns bin-path) file-name] + =/ bin-road=road:tarball [%& %& (weld code-ns bin-path) bin-name] + :: full write mode + ?^ content + (do-write src-road bin-road pax nam u.content) + :: edit mode + ?~ old-string + (pure:m [%error 'Provide either content (full write) or old_string+new_string (edit)']) + ?~ new-string + (pure:m [%error 'Missing required argument: new_string']) + :: read current source + ;< =seen:nexus bind:m (peek:io src-road ~) + ?. ?=([%& %file *] seen) + (pure:m [%error (crip "File not found: {(trip pax)}/{(trip nam)}.hoon")]) + =/ current=@t !<(@t q.sage.p.seen) + =/ result=(unit tape) + (replace (trip current) (trip u.old-string) (trip u.new-string)) + ?~ result + (pure:m [%error (crip "old_string not found in {(trip pax)}/{(trip nam)}.hoon")]) + (do-write src-road bin-road pax nam (crip u.result)) +-- diff --git a/desk/gub/lib/mcp/write-grub.hoon b/desk/gub/lib/mcp/write-grub.hoon new file mode 100644 index 0000000..f2615da --- /dev/null +++ b/desk/gub/lib/mcp/write-grub.hoon @@ -0,0 +1,87 @@ +/< tools /lib/nex/tools.hoon +:: write-grub: write a text file to the grubbery ball +:: +!: +^- tool:tools +|% +++ name 'write_grub' +++ description + ^~ %- crip + ;: weld + "Write a text file to the grubbery ball. " + "Set mark to store as a specific mark (e.g. \"hoon\", \"/wallet/account\"). " + "Without mark, stores as raw mime. " + "Set content_type to override the mime type (e.g. \"text/html\")." + == +++ parameters + ^- (map @t parameter-def:tools) + %- ~(gas by *(map @t parameter-def:tools)) + :~ ['path' [%string 'Directory path (e.g. "/")']] + ['name' [%string 'Filename (e.g. "foo.hoon", "notes.txt", "config.json")']] + ['content' [%string 'Text content to write']] + ['content_type' [%string 'MIME content type (e.g. "text/html"). When set, stores as raw mime.']] + ['mark' [%string 'Target mark as a blot path (e.g. "hoon", "/wallet/account"). Omit to store as mime.']] + == +++ required ~['path' 'name' 'content'] +++ handler + ^- tool-handler:tools + =/ m (fiber:fiber:nexus ,tool-result:tools) + ^- form:m + ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) + =/ file-path=(unit @t) (~(deg jo:json-utils [%o args.st]) /path so:dejs:format) + =/ file-name=(unit @t) (~(deg jo:json-utils [%o args.st]) /name so:dejs:format) + =/ content-raw=(unit @t) (~(deg jo:json-utils [%o args.st]) /content so:dejs:format) + ?~ file-path + (pure:m [%error 'Missing required argument: path']) + ?~ file-name + (pure:m [%error 'Missing required argument: name']) + ?~ content-raw + (pure:m [%error 'Missing required argument: content']) + =/ content-type=(unit @t) + ?~ ct=(~(get jo:json-utils [%o args.st]) /'content_type') ~ + ?. ?=([%s *] u.ct) ~ + ?: =('' p.u.ct) ~ + `p.u.ct + =/ dest-blot=(unit blot:tarball) + ?~ mk=(~(get jo:json-utils [%o args.st]) /mark) ~ + ?. ?=([%s *] u.mk) ~ + ?: =('' p.u.mk) ~ + :: parse as blot path + =/ pax=path + ?: =('/' (end 3 p.u.mk)) (stab p.u.mk) + (stab (cat 3 '/' p.u.mk)) + ?~ pax ~ + `[(snip `path`pax) (rear pax)] + =/ file-path=@t u.file-path + =/ file-name=@t u.file-name + =/ content=@t u.content-raw + =/ pax-parsed=(each path @t) (parse-path:tools file-path) + ?: ?=(%| -.pax-parsed) + (pure:m [%error p.pax-parsed]) + =/ pax=path p.pax-parsed + =/ road=road:tarball [%& %& pax file-name] + :: Explicit content_type: store as raw mime with that content-type + ?^ content-type + =/ mtype=path (stab (cat 3 '/' u.content-type)) + =/ src-mime=mime [mtype (as-octs:mimes:html content)] + ;< exists=? bind:m (peek-exists:io road) + ?: exists + ;< ~ bind:m (over:io road [[/ %mime] !>(src-mime)]) + (pure:m [%text (crip "Wrote {(trip file-path)}/{(trip file-name)} [{(trip u.content-type)}]")]) + ;< ~ bind:m (make:io road |+[%.n [[/ %mime] !>(src-mime)] ~]) + (pure:m [%text (crip "Created {(trip file-path)}/{(trip file-name)} [{(trip u.content-type)}]")]) + :: Build mime cage from content + =/ src-mime=mime [/text/plain (as-octs:mimes:html content)] + ;< exists=? bind:m (peek-exists:io road) + ?: exists + ?^ dest-blot + (pure:m [%error 'Cannot change blot of existing file. Delete it first, then recreate with the desired blot.']) + :: Existing file: %over converts mime to file's blot via warm tube + ;< ~ bind:m (over:io road [[/ %mime] !>(src-mime)]) + (pure:m [%text (crip "Wrote {(trip file-path)}/{(trip file-name)}")]) + :: New file: pass dest-blot so runtime converts mime before storing. + :: If no blot specified, stores as mime. + ;< ~ bind:m (make:io road |+[%.n [[/ %mime] !>(src-mime)] dest-blot]) + =/ blot-msg=tape ?~(dest-blot "mime" (spud (rail-to-path:tarball u.dest-blot))) + (pure:m [%text (crip "Created {(trip file-path)}/{(trip file-name)} [{blot-msg}]")]) +-- diff --git a/desk/lib/nex/clurd.hoon b/desk/gub/lib/nex/clurd.hoon similarity index 100% rename from desk/lib/nex/clurd.hoon rename to desk/gub/lib/nex/clurd.hoon diff --git a/desk/gub/lib/nex/mcp.hoon b/desk/gub/lib/nex/mcp.hoon new file mode 100644 index 0000000..9ca2019 --- /dev/null +++ b/desk/gub/lib/nex/mcp.hoon @@ -0,0 +1,156 @@ +:: lib/nex/mcp: MCP (Model Context Protocol) JSON-RPC 2.0 adapter +:: +:: Thin protocol layer that converts tool definitions from lib/nex/tools +:: to MCP JSON-RPC format and routes MCP requests to tool handlers. +:: +/< tools /lib/nex/tools.hoon +|% +:: JSON-RPC 2.0 error codes +:: +++ rpc-parse-error ~.-32700 +++ rpc-invalid-request ~.-32600 +++ rpc-method-not-found ~.-32601 +++ rpc-invalid-params ~.-32602 +++ rpc-internal-error ~.-32603 +:: +++ rpc-error + |= [code=@ta message=@t id=(unit json)] + %- pairs:enjs:format + %+ welp + ?~(id ~ ['id' u.id]~) + :~ ['jsonrpc' s+'2.0'] + :- 'error' + %- pairs:enjs:format + :~ ['code' n+code] + ['message' s+message] + == + == +:: +++ rpc-result + |= [result=json id=(unit json)] + %- pairs:enjs:format + %+ welp + ?~(id ~ ['id' u.id]~) + :~ ['jsonrpc' s+'2.0'] + ['result' result] + == +:: +++ mcp-text-result + |= [text=@t id=(unit json)] + %- pairs:enjs:format + %+ welp + ?~(id ~ ['id' u.id]~) + :~ ['jsonrpc' s+'2.0'] + :- 'result' + %- pairs:enjs:format + :~ :- 'content' + :- %a + :~ %- pairs:enjs:format + :~ ['type' s+'text'] + ['text' s+text] + == + == + == + == +:: +++ mcp-initialize + |= [server-name=@t version=@t id=(unit json)] + %- pairs:enjs:format + %+ welp + ?~(id ~ ['id' u.id]~) + :~ ['jsonrpc' s+'2.0'] + :- 'result' + %- pairs:enjs:format + :~ ['protocolVersion' s+'2024-11-05'] + :- 'capabilities' + %- pairs:enjs:format + :~ :- 'tools' + (pairs:enjs:format ~[['listChanged' b+%.y]]) + == + :- 'serverInfo' + %- pairs:enjs:format + :~ ['name' s+server-name] + ['version' s+version] + == + == + == +:: +++ param-type-to-json + |= type=parameter-type:tools + ^- @t + ?- type + %string 'string' + %number 'number' + %boolean 'boolean' + %array 'array' + %object 'object' + == +:: +++ tool-def-to-mcp + |= =tool:tools + ^- json + =/ properties=(map @t json) + %- ~(run by parameters:tool) + |= param=parameter-def:tools + %- pairs:enjs:format + :~ ['type' s+(param-type-to-json type.param)] + ['description' s+description.param] + == + =/ required-array=(list json) + (turn required:tool |=(f=@t s+f)) + %- pairs:enjs:format + :~ ['name' s+name:tool] + ['description' s+description:tool] + :- 'inputSchema' + %- pairs:enjs:format + :~ ['type' s+'object'] + ['properties' [%o properties]] + ['required' [%a required-array]] + == + == +:: +++ tool-definitions + |= dynamic=(map @t tool:tools) + ^- (list json) + (turn ~(val by dynamic) tool-def-to-mcp) +:: +++ mcp-tools-list + |= [dynamic=(map @t tool:tools) id=(unit json)] + %- pairs:enjs:format + %+ welp + ?~(id ~ ['id' u.id]~) + :~ ['jsonrpc' s+'2.0'] + :- 'result' + %- pairs:enjs:format + :~ ['tools' [%a (tool-definitions dynamic)]] + == + == +:: Main MCP request handler +:: +++ handle-request + |= [jon=json dynamic=(map @t tool:tools)] + =/ m (fiber:fiber:nexus ,(unit json)) + ^- form:m + =/ method=(unit json) (~(get jo:json-utils jon) /method) + =/ id=(unit json) (~(get jo:json-utils jon) /id) + ?+ method + (pure:m `(rpc-error rpc-method-not-found 'Method not found' id)) + :: + [~ [%s %'initialize']] + (pure:m `(mcp-initialize 'urbit-grubbery' '1.0.0' id)) + :: + [~ [%s %'notifications/initialized']] + (pure:m ~) + :: + [~ [%s %'tools/list']] + =/ advertised=(map @t tool:tools) + %- ~(gas by *(map @t tool:tools)) + %+ skim ~(tap by dynamic) + |= [name=@t *] + ?| =(name 'list_tools') + =(name 'call_tool') + =(name 'echo') + == + (pure:m `(mcp-tools-list advertised id)) + == +-- diff --git a/desk/lib/nex/tools.hoon b/desk/gub/lib/nex/tools.hoon similarity index 79% rename from desk/lib/nex/tools.hoon rename to desk/gub/lib/nex/tools.hoon index 9eaaebe..3895762 100644 --- a/desk/lib/nex/tools.hoon +++ b/desk/gub/lib/nex/tools.hoon @@ -3,8 +3,7 @@ :: Defines $tool, $tool-state, $tool-result and shared helper arms :: used by dynamic tool files in /lib/nex/mcp/tools/. :: -/+ nexus, tarball, io=fiberio, json-utils, pretty-file, s3 -!: +/< s3 /lib/s3.hoon |% :: Tool execution result :: @@ -91,7 +90,7 @@ (~(dog jo:json-utils data) /initial-ud ni:dejs:format) =/ log-texts=(list @t) (~(dug jo:json-utils data) /logs (ar:dejs:format so:dejs:format) ~) - ;< final=cass:clay bind:m (do-scry:io cass:clay /scry /cw/[mount-point]) + ;< final=cass:clay bind:m (scry:io cass:clay /cw/[mount-point]) =/ result=tape %+ weld "Initial version: {}\0a" %+ weld "Final version: {}\0a" @@ -116,7 +115,7 @@ =/ log-texts=(list @t) (~(dug jo:json-utils data) /logs (ar:dejs:format so:dejs:format) ~) =/ dek=@tas (slav %tas desk) - ;< final=cass:clay bind:m (do-scry:io cass:clay /scry /cw/[dek]) + ;< final=cass:clay bind:m (scry:io cass:clay /cw/[dek]) =/ has-errors=? %+ lien log-texts |=(t=@t !=(~ (find "ERROR" (trip t)))) @@ -144,19 +143,17 @@ |= for=@dr =/ m (fiber:fiber:nexus ,(unit tang)) ^- form:m - ;< =bowl:nexus bind:m (get-bowl:io /sleep) - =/ until=@da (add now.bowl for) + ;< now=@da bind:m get-time:io + =/ until=@da (add now for) ;< ~ bind:m (send-wait:io until) |= input:fiber:nexus :+ ~ state ?+ in [%skip ~] ~ [%wait ~] - [~ %arvo [%wait @ ~] %behn %wake *] - ?. =(`until (slaw %da i.t.wire.u.in)) + [~ %poke * *] + ?. =([/ %timer-wake] p.sage.u.in) [%skip ~] - ?~ error.sign.u.in - [%done ~] - [%done `u.error.sign.u.in] + [%done ~] == :: Collect dill logs with debounce: returns ~1s after last log. :: Each log spawns a quiet timer tagged with log count. If 1s passes @@ -175,14 +172,20 @@ :+ ~ state ?+ in [%skip ~] ~ [%wait ~] - [~ %arvo [%commit-timeout ~] %behn %wake *] - [%done %timeout ~] - [~ %arvo [%commit-quiet @ ~] %behn %wake *] - [%done %quiet (slav %ud i.t.wire.u.in)] + [~ %poke * *] + ?. =([/ %timer-wake] p.sage.u.in) + [%skip ~] + =/ wak=wire !<(wire q.sage.u.in) + ?+ wak [%skip ~] + [%commit-timeout ~] + [%done %timeout ~] + [%commit-quiet @ ~] + [%done %quiet (slav %ud i.t.wak)] + == [~ %news [%dill %logs ~] *] ?. ?=([%file *] view.u.in) [%skip ~] - ?. ?=(%dill-told p.cage.view.u.in) [%skip ~] - [%done %log !<(told:dill q.cage.view.u.in)] + ?. ?=(%dill-told name.p.sage.view.u.in) [%skip ~] + [%done %log !<(told:dill q.sage.view.u.in)] == :: ++ collect-logs @@ -208,9 +211,9 @@ (~(put jo:json-utils data.st) /logs a+[s+(crip log-text) logs]) =/ new-count=@ud +((lent logs)) ;< ~ bind:m (replace:io !>([tool.st args.st step.st new-data ~])) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + ;< now=@da bind:m get-time:io ;< ~ bind:m - (send-card:io %pass /commit-quiet/(scot %ud new-count) %arvo %b %wait (add now.bowl ~s1)) + (set-timer:io /commit-quiet/(scot %ud new-count) (add now ~s1)) $ == :: Format a dill told to text @@ -242,25 +245,39 @@ =/ m (fiber:fiber:nexus ,tool-result) ^- form:m ?> ?=([%& %file *] seen) - =/ =cage cage.p.seen - ?+ p.cage - :: Fallback: scry for tube to mime via %cc - ;< =desk bind:m get-desk:io - ;< convert=tube:clay bind:m - (do-scry:io tube:clay /tube /cc/[desk]/[p.cage]/mime) - =/ result-vase=vase (convert q.cage) - =/ out=mime !<(mime result-vase) - (pure:m [%text (crip (trip q.q.out))]) - %json - (pure:m [%text (en:json:html !<(json q.cage))]) - %txt - (pure:m [%text (of-wain:format !<(wain q.cage))]) - %hoon - (pure:m [%text !<(@t q.cage)]) - %mime - =/ out=mime !<(mime q.cage) - (pure:m [%text (crip (trip q.q.out))]) - == + =/ =sage:tarball sage.p.seen + =/ blot-text=@t + (crip "[mark: {(spud (snoc path.p.sage name.p.sage))}]") + ;< result=tool-result bind:m + ?+ name.p.sage + :: Fallback: convert to mime via grubbery's marc system + ;< convert=(unit tube:clay) bind:m + (get-tube:io [%& %| /code] [p.sage [/ %mime]]) + ?~ convert + (pure:m [%error (crip "No conversion from {(trip name.p.sage)} to mime")]) + =/ result-vase=vase (u.convert q.sage) + =/ out=mime !<(mime result-vase) + (pure:m [%text (crip (trip q.q.out))]) + %boom + =/ [err=tang mar=@tas data=*] !<([tang @tas *] q.sage) + =/ rendered=tape + %- zing + %+ turn (flop err) + |=(=tank (weld ~(ram re tank) "\0a")) + %- pure:m + [%error (crip "BOOM (mark %{(trip mar)})\0a{rendered}")] + %json + (pure:m [%text (en:json:html !<(json q.sage))]) + %txt + (pure:m [%text (of-wain:format !<(wain q.sage))]) + %hoon + (pure:m [%text !<(@t q.sage)]) + %mime + =/ out=mime !<(mime q.sage) + (pure:m [%text (crip (trip q.q.out))]) + == + ?: ?=(%error -.result) (pure:m result) + (pure:m [%text (crip "{(trip blot-text)}\0a{(trip text.result)}")]) :: Look up a grub by name — exact match :: Returns [actual-grub-name seen] :: @@ -269,7 +286,7 @@ =/ m (fiber:fiber:nexus ,[name=@ta seen=seen:nexus]) ^- form:m ;< =seen:nexus bind:m - (peek:io /read [%& %& pax file-name] ~) + (peek:io [%& %& pax file-name] ~) (pure:m [file-name seen]) :: String replacement on tapes :: Returns (unit tape) — ~ if not found or ambiguous @@ -307,17 +324,17 @@ endpoint=@t bucket=@t == -:: Read S3 credentials from config/creds/s3 +:: Read S3 credentials from mcp nexus :: ++ read-s3-creds =/ m (fiber:fiber:nexus ,s3-creds) ^- form:m ;< creds-seen=seen:nexus bind:m - (peek:io /creds [%& %& /config/creds 's3'] ~) + (peek:io [%& %& /'mcp.mcp' %'s3.json'] `[/ %json]) ?. ?=([%& %file *] creds-seen) ~| %s3-creds-not-found !! - =/ jon=json !<(json q.cage.p.creds-seen) + =/ jon=json !<(json q.sage.p.creds-seen) =/ creds=s3-creds %. jon %- ot:dejs:format diff --git a/desk/gub/lib/oneshot.hoon b/desk/gub/lib/oneshot.hoon new file mode 100644 index 0000000..0d6b156 --- /dev/null +++ b/desk/gub/lib/oneshot.hoon @@ -0,0 +1,471 @@ +:: oneshot: one-shot LLM call primitives +:: +:: A door that takes API configuration and exposes arms for +:: making independent, context-free LLM calls as fiber steps. +:: +:: Output constraining: every call has an output mark and description. +:: The LLM response text is converted to a wain (%txt), then tubed +:: to the target mark. If conversion fails, the error is fed back +:: and the call retries. +:: +|% +:: Claude API configuration +:: ++$ claude-config + $: api-key=@t :: anthropic API key + model=@t :: model identifier + max-tokens=@ud :: max output tokens + == +:: Output constraint: target mark + format description for the LLM +:: ++$ output [=mark desc=@t] +:: A one-shot call specification +:: ++$ spec + $: system=@t :: system prompt + prompt=@t :: user prompt (the input) + =output :: output constraint + == +:: Result of a one-shot call +:: +:: &/[raw sage]: LLM responded, tube passed +:: |/&/[raw tang]: LLM responded, tube crashed +:: |/|/@t: no LLM response (API/network error) ++$ success [raw=@t =sage:tarball] ++$ parse-error [raw=@t =tang] ++$ api-error @t ++$ failure (each parse-error api-error) ++$ result (each success failure) +:: The door: takes claude config, exposes call arms +:: +++ agent + |_ =claude-config + :: +call: one-shot API call with output constraining + :: + ++ call + |= =spec + =/ m (fiber:fiber:nexus ,result) + ^- form:m + ;< got=(each @t @t) bind:m (request spec) + ?. ?=(%& -.got) + (pure:m [%| %| p.got]) + (constrain p.got output.spec) + :: +request: send spec to Claude API, return raw text or error + :: + ++ request + |= =spec + =/ m (fiber:fiber:nexus ,(each @t @t)) + ^- form:m + :: append format description to system prompt + :: + =/ full-system=@t + (rap 3 ~[system.spec '\0a\0aOUTPUT FORMAT:\0a' desc.output.spec]) + :: build messages API request body + :: + =/ body=@t %- en:json:html + %- pairs:enjs:format + :~ ['model' s+model.claude-config] + ['max_tokens' (numb:enjs:format max-tokens.claude-config)] + ['system' s+full-system] + :- 'messages' + [%a ~[(pairs:enjs:format ~[['role' s+'user'] ['content' s+prompt.spec]])]] + == + =/ =request:http + :^ %'POST' 'https://api.anthropic.com/v1/messages' + :~ ['content-type' 'application/json'] + ['x-api-key' api-key.claude-config] + ['anthropic-version' '2023-06-01'] + == + `(as-octs:mimes:html body) + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) + (pure:m [%| 'request cancelled']) + =/ body=@t + ?~(full-file.client-response '' q.data.u.full-file.client-response) + (pure:m (extract-text (fall (de:json:html body) *json))) + :: +extract-text: pull raw text from Claude API response JSON + :: + ++ extract-text + |= resp=json + ^- (each @t @t) + ?. ?=([%o *] resp) + [%| 'response is not a JSON object'] + :: check for API-level error + :: + =/ err=(unit json) (~(get by p.resp) 'error') + ?^ err + :- %| + ?: ?=([%o *] u.err) + =/ msg=(unit json) (~(get by p.u.err) 'message') + ?:(?=([~ %s *] msg) p.u.msg 'unknown error') + 'unknown error' + :: collect text from content blocks + :: + =/ content=(unit json) (~(get by p.resp) 'content') + ?~ content [%| 'no content in response'] + ?. ?=(%a -.u.content) [%| 'content is not an array'] + =/ texts=(list @t) + %+ murn p.u.content + |= block=json + ?. ?=([%o *] block) ~ + =/ type=(unit json) (~(get by p.block) 'type') + ?. ?=([~ %s %'text'] type) ~ + =/ text=(unit json) (~(get by p.block) 'text') + ?. ?=([~ %s *] text) ~ + `p.u.text + ?~ texts [%| 'no text blocks in response'] + [%& (rap 3 texts)] + :: +constrain: tube raw text through %mime to target mark + :: + ++ constrain + |= [raw=@t =output] + =/ m (fiber:fiber:nexus ,result) + ^- form:m + :: wrap raw text as %mime for tube input + :: + =/ =mime [/text/plain (as-octs:mimes:html raw)] + =/ mime-vase=vase !>(mime) + ?: =(mark.output %mime) + (pure:m [%& raw [/ %mime] mime-vase]) + :: look up and run %mime -> target tube + :: + ;< tube=(unit tube:clay) bind:m + (get-tube:io [%& %| /code] [[/ %mime] [/ mark.output]]) + ?~ tube + =/ err=tang ~[leaf+(trip (cat 3 'no tube from %mime to %' mark.output))] + (pure:m [%| %& raw err]) + =/ convert=(each vase tang) (mule |.((u.tube mime-vase))) + ?: ?=(%| -.convert) + (pure:m [%| %& raw (flop p.convert)]) + (pure:m [%& raw [/ mark.output] p.convert]) + :: +call-retry: call with retry on crash, accumulating errors + :: + ++ call-retry + |= [=spec max-retries=@ud] + =/ m (fiber:fiber:nexus ,result) + ^- form:m + =| attempts=@ud + =| errors=(list @t) + |- + ;< =result bind:m (call spec) + ?: ?=(%& -.result) + (pure:m result) + ?: (gte +(attempts) max-retries) + (pure:m result) + :: extract error text for retry context + =/ err=@t + ?- -.p.result + %& %- of-wain:format + %+ turn tang.p.p.result + |=(=tank (crip ~(ram re tank))) + %| p.p.result + == + :: append crash report to system prompt and retry + =/ crash-log=@t + %+ rap 3 + %+ join '\0a' + %+ turn (snoc errors err) + |=(e=@t (rap 3 ~['- Attempt ' (scot %ud +(attempts)) ': ' e])) + =/ new-system=@t + %+ rap 3 + :~ system.spec + '\0a\0aPREVIOUS ATTEMPTS FAILED:\0a' + crash-log + '\0a\0aPlease try again, avoiding the above errors.' + == + $(attempts +(attempts), errors (snoc errors err), spec spec(system new-system)) + -- +:: +search: web search via Brave Search API +:: +:: Takes a Brave API key, exposes a search arm that returns +:: results as formatted text. +:: +++ search + |_ brave-key=@t + :: +web: single web search (sequential fetch) + :: + ++ web + |= query=@t + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< resp=json bind:m (fetch (web-url query)) + (pure:m (parse-web resp)) + :: +news: single news search (sequential fetch) + :: + ++ news + |= query=@t + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< resp=json bind:m (fetch (news-url query)) + (pure:m (parse-news resp)) + :: +multi: run web + news searches for each query sequentially + :: + ++ multi + |= queries=(list @t) + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + =| acc=(list @t) + =/ remaining=(list @t) queries + |- + ?~ remaining + (pure:m (of-wain:format acc)) + ;< web-res=@t bind:m (web i.remaining) + ;< news-res=@t bind:m (news i.remaining) + =/ labeled=@t + %: rap 3 + '\0a=== SEARCH: ' i.remaining ' ===\0a' + web-res '\0a' news-res + ~ + == + $(remaining t.remaining, acc (snoc acc labeled)) + :: +fetch: sequential HTTP fetch + JSON parse + :: + ++ fetch + |= url=@t + =/ m (fiber:fiber:nexus ,json) + ^- form:m + =/ =request:http + :^ %'GET' url + :~ ['Accept' 'application/json'] + ['X-Subscription-Token' brave-key] + == + ~ + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) + (pure:m *json) + =/ body=@t + ?~(full-file.client-response '' q.data.u.full-file.client-response) + =/ parsed=(each json tang) (mule |.((need (de:json:html body)))) + ?: ?=(%| -.parsed) + (pure:m *json) + (pure:m p.parsed) + :: +web-url: build Brave web search URL + :: + :: +web-url: build Brave web search URL + :: + :: Uses + for spaces instead of %20 because vere's cttp.c + :: decodes %20 via de-purl:html but doesn't re-encode when + :: serializing the request, producing literal spaces in the + :: HTTP request line. + :: TODO: Document and fix bug in cttp.c in vere + :: + ++ web-url + |= query=@t + ^- @t + =/ encoded=@t + %- crip + %- zing + %+ turn (trip query) + |=(c=@t ?:(=(c ' ') "%2520" (trip c))) + (rap 3 ~['https://api.search.brave.com/res/v1/web/search?q=' encoded]) + :: +news-url: build Brave news search URL + :: (see +web-url for encoding rationale) + :: + ++ news-url + |= query=@t + ^- @t + =/ encoded=@t + %- crip + %- zing + %+ turn (trip query) + |=(c=@t ?:(=(c ' ') "%2520" (trip c))) + (rap 3 ~['https://api.search.brave.com/res/v1/news/search?q=' encoded '&count=20']) + :: +parse-web: extract formatted text from web search response + :: + ++ parse-web + |= resp=json + ^- @t + ?. ?=([%o *] resp) 'search returned invalid response' + =/ results=(unit json) (~(get by p.resp) 'web') + ?~ results 'no web results' + ?. ?=([%o *] u.results) 'no web results' + =/ items=(unit json) (~(get by p.u.results) 'results') + ?~ items 'no result items' + ?. ?=(%a -.u.items) 'no result items' + (of-wain:format (extract-results p.u.items)) + :: +parse-news: extract formatted text from news search response + :: + ++ parse-news + |= resp=json + ^- @t + ?. ?=([%o *] resp) 'news returned invalid response' + =/ results=(unit json) (~(get by p.resp) 'results') + ?~ results 'no news results' + ?. ?=(%a -.u.results) 'no news results' + (of-wain:format (extract-results p.u.results)) + :: +extract-results: pull text from a Brave results array + :: + ++ extract-results + |= items=(list json) + ^- (list @t) + %+ murn items + |= item=json + ?. ?=([%o *] item) ~ + =/ title=(unit json) (~(get by p.item) 'title') + =/ url=(unit json) (~(get by p.item) 'url') + =/ desc=(unit json) (~(get by p.item) 'description') + =/ extras=(unit json) (~(get by p.item) 'extra_snippets') + =/ t=@t ?:(?=([~ %s *] title) p.u.title '') + =/ u=@t ?:(?=([~ %s *] url) p.u.url '') + =/ d=@t ?:(?=([~ %s *] desc) p.u.desc '') + =/ e=@t + ?. ?=([~ %a *] extras) '' + %- of-wain:format + %+ murn p.u.extras + |=(s=json ?.(?=([%s *] s) ~ `p.s)) + =/ tail=@t ?:(=('' e) '' '\0a') + `(rap 3 ~[t '\0a' u '\0a' d '\0a' e tail]) + -- +:: +briefing: research a topic via search + LLM synthesis +:: +:: Takes a config, a topic description, and an optional output +:: constraint. Generates search queries, runs them, then +:: synthesizes results into a briefing. +:: +++ briefing + |_ [=claude-config brave-key=@t] + :: +brief: research a topic and synthesize a briefing + :: + ++ brief + |= [topic=@t =output] + =/ m (fiber:fiber:nexus ,result) + ^- form:m + ;< queries=(list @t) bind:m (generate-queries topic) + ?~ queries + (pure:m [%| %| 'no queries generated']) + ;< research=@t bind:m (run-searches queries) + (synthesize topic research output) + :: +generate-queries: ask LLM to produce search queries for a topic + :: + ++ generate-queries + |= topic=@t + =/ m (fiber:fiber:nexus ,(list @t)) + ^- form:m + =/ =spec + :^ %+ rap 3 + :~ 'You are a research assistant. Given the following topic, ' + 'generate 5 to 8 search queries that would give comprehensive ' + 'coverage of the subject. Mix broad and specific queries. ' + 'Include both web and news angles.' + == + topic + %json + ''' + Output a JSON array of strings, each being a search query. + Example: ["query one", "query two", "query three"] + No other text, just the JSON array. + ''' + ;< res=result bind:m (~(call-retry agent claude-config) spec 2) + ?. ?=(%& -.res) + (pure:m ~) + =/ query-json=json (fall (de:json:html raw.p.res) *json) + ?. ?=([%a *] query-json) + (pure:m ~) + %- pure:m + %+ murn p.query-json + |=(q=json ?.(?=([%s *] q) ~ `p.q)) + :: +run-searches: run all queries sequentially + :: + ++ run-searches + |= queries=(list @t) + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + =| acc=(list @t) + =/ remaining=(list @t) queries + |- + ?~ remaining + (pure:m (of-wain:format acc)) + ;< web-res=@t bind:m (~(web search brave-key) i.remaining) + ;< news-res=@t bind:m (~(news search brave-key) i.remaining) + =/ labeled=@t + %: rap 3 + '\0a=== SEARCH: ' i.remaining ' ===\0a' + web-res '\0a' news-res + ~ + == + $(remaining t.remaining, acc (snoc acc labeled)) + :: +synthesize: ask LLM to write a briefing from search results + :: + ++ synthesize + |= [topic=@t research=@t =output] + =/ m (fiber:fiber:nexus ,result) + ^- form:m + =/ =spec + :+ %+ rap 3 + :~ 'You are an expert analyst. You have been given raw search ' + 'results from multiple queries on a topic. Synthesize these ' + 'into a clear, analytical briefing. Focus on what matters: ' + 'key developments, why they matter, connections between events, ' + 'and actionable insights. Do not just summarize headlines — ' + 'provide analysis and context.' + '\0a\0aTOPIC: ' + topic + == + research + output + (~(call agent claude-config) spec) + -- +:: +:: +descs: default format descriptions for common output marks +:: +++ descs + ^- (map @t @t) + %- my + :~ :- 'txt' + 'Any text output will be considered valid.' + :: + :- 'json' + ''' + Your output is constrained to pure json. Output only valid JSON that + can be directly parsed. Do not include markdown formatting, code + blocks, or any text outside the JSON structure. + + Examples of expected output formats: + + For a string value: + "Hello world" + + For a number: + 42 + + For a boolean: + true + + For null: + null + + For an array: + ["apple", "banana", "cherry"] + + For an object: + {"name": "John", "age": 30, "city": "New York"} + + For nested structures: + {"users": [{"id": 1, "name": "Alice"}, {"id": 2, "name": "Bob"}], "total": 2} + + Always ensure your output is valid JSON that starts with a JSON value + (object, array, string, number, boolean, or null) and contains no + additional text or formatting. + ''' + :: + :- 'ud' + ''' + You must output ONLY a decimal number using digits 0-9. + No separators, no periods, no commas, no spaces. + No other text, explanations, or characters. + + EXAMPLES: + - 0 + - 42 + - 137 + - 1000 + - 12345 + - 1234567 + - 999999999 + + Your response must be exactly one number, nothing else. + ''' + == +-- diff --git a/desk/gub/lib/ord.hoon b/desk/gub/lib/ord.hoon new file mode 100644 index 0000000..a5472ec --- /dev/null +++ b/desk/gub/lib/ord.hoon @@ -0,0 +1,255 @@ +:: lib/ord.hoon +:: +:: Ord metaprotocol encoder/decoder and sat-pointer (sont) map ops. +:: Ported from groundwire's lib/ord.hoon. +:: +/< bitcoin /lib/sur/bitcoin.hoon +/< ord /lib/sur/ord.hoon +/< bscr /lib/btc-script.hoon +=* sha ..shax +=| lac=_| +|% +:: +++ en + |% + ++ mails-to-script + |= mails=(list mail:ord) + ^- script:bscr + (zing (turn mails mail-to-script)) + :: + ++ mail-to-script + |= =mail:ord + ^- script:bscr + (draft-to-script (mail-to-draft mail)) + :: + ++ mail-to-draft + |= =mail:ord + |^ ^- draft:ord + %- ~(gas by *draft:ord) + %- zing + ^- (list (list (pair @ud octs))) + :~ ?~(mime.mail ~ [1 p.mime.mail p.+.mime.mail]^~) + ?~(code.mail ~ [9 p.code.mail p.+.code.mail]^~) + ?~(pntr.mail ~ [2 p.pntr.mail p.+.pntr.mail]^~) + ?~(rent.mail ~ [3 (insc rent.mail)]^~) + ?~(gate.mail ~ [11 (insc gate.mail)]^~) + ?~(meta.mail ~ [5 meta.mail]^~) + ?~(prot.mail ~ [7 prot.mail]^~) + ?~(data.mail ~ [0 data.mail]^~) + == + :: + ++ insc + |= [p=@ud oid=(each insc:ord @)] + ^- octs + :- p + ?. ?=(%& -.oid) p.oid + (con (lsh [3 (sub p 32)] txid.p.oid) idx.p.oid) + -- + :: + ++ rip-octs + |= octs + ^- (list octs) + =/ met-q (met 3 q) + ?> (lte met-q p) + =/ ripped (rip [3 520] q) + |- ^- (list octs) + ?~ ripped ~ + ?~ t.ripped [(met 3 i.ripped) i.ripped]^~ + [520 i.ripped]^$(ripped t.ripped) + :: + ++ push-data + |= data=octs + =/ ripped (rip-octs data) + ?: =(ripped ~) !! + |- ^- script:bscr + ?~ ripped ~ + :- (push-one-data i.ripped) + $(ripped t.ripped) + :: + ++ push-one-data + |= octs + ^- op:bscr + ?> (lte (met 3 q) p) + ?> !=(0 p) + ?> (lte p 520) + ?: (lte p 0x4b) op-push+~+p^q + ?: (lte p 0xff) op-push+1+p^q + ?> (lte p 520) + op-push+2+p^q + :: + ++ draft-to-script + |= =draft:ord + ^- script:bscr + =/ data (~(get by draft) 0) + =/ meta (~(get by draft) 5) + =. draft (~(del by (~(del by draft) 0)) 5) + =/ tags (sort ~(tap by draft) |=([[a=@ *] [b=@ *]] (lth a b))) + =- [op-push+num+1+0 %op-if op-push+~+3+'ord' -] + |^ ^- script:bscr + ?~ tags push-meta + :+ op-push+num+1+p.i.tags + (push-one-data q.i.tags) + $(tags t.tags) + :: + ++ push-meta + ^- script:bscr + ?~ meta push-data + =/ ripped (rip-octs u.meta) + |- ^- script:bscr + ?~ ripped push-data + :+ op-push+num+1+5 + (push-one-data i.ripped) + $(ripped t.ripped) + :: + ++ push-data + ^- script:bscr + ?~ data [%op-endif ~] + =- [op-push+num+1+0 -] + (^push-data u.data) + -- + -- +:: +++ de + |% + ++ mails + |= =script:bscr + (turn (drafts script) draft-to-mail) + :: + ++ draft-to-mail + |= =draft:ord + ^- mail:ord + :* (biff (~(get by draft) 1) ascii) + (biff (~(get by draft) 9) ascii) + (biff (~(get by draft) 2) pntr) + (biff (~(get by draft) 3) insc) + (biff (~(get by draft) 11) insc) + (fall (~(get by draft) 5) ~) + (fall (~(get by draft) 7) ~) + (fall (~(get by draft) 0) ~) + == + :: + ++ ascii + |= octs + ^- [p=@ud (each @t @)] + ?. (levy (rip 3 q) |=(@ (lth +< 128))) [p |+q] + [p &+q] + :: + ++ pntr + |= octs + ^- [p=@ud (each @ud @)] + ?. &((lte p 5) (lte q 0xffff.ffff)) [p |+q] + [p &+q] + :: + ++ insc + |= octs + ^- [p=@ud (each insc:ord @)] + ?. (lth p 33) [p |+q] + =/ tx (cut 3 [(sub p 32) 32] q) + =/ ilen (sub p 32) + [p &+[tx (cut 3 [0 ilen] q)]] + :: + ++ drafts + |= =script:bscr + ^- (list draft:ord) + ?~ script ~ + ?. ?=([[%op-push * * %0] %op-if [%op-push * * %'ord'] *] script) $(script t.script) + => .(script t.t.t.script) + |^ ^- (list draft:ord) + =^ tags script fetch-tags + ?~ tags ^$ [u.tags ^$] + :: + ++ fetch-tags + ^- [(unit draft:ord) script:bscr] + ?> ?=(^ script) + =| tags=(map @ud (list octs)) + |- ^+ fetch-tags + ?: ?=(%op-endif i.script) + :_ t.script + `(~(run by tags) |=((list octs) (roll +< |=([a=octs b=octs] (add p.a p.b)^(cat 3 q.a q.b))))) + ?> ?=(^ t.script) + ?. ?=([[%op-push *] [%op-push *] * *] script) + => .(script `(lest op:script:bscr)`t.script) + |- ^+ fetch-tags + ?: ?=(%op-endif -.script) ~^t.script + ?> ?=(^ t.script) + $(script t.script) + =* tag q.octs.i.script + =* dat octs.i.t.script + ?. =(tag 0) + %_ $ + script t.t.script + tags + ?~ d=(~(get by tags) tag) (~(put by tags) tag dat^~) + ?. =(tag 5) tags + (~(put by tags) tag dat^u.d) + == + =| dats=(list octs) + => .(script `(lest op:script:bscr)`t.script) + |- ^+ fetch-tags + ?. ?=(%op-endif i.script) + ?> ?=([[%op-push *] ^] script) + $(dats octs.i.script^dats, script t.script) + :_ t.script + :- ~ + %- ~(run by (~(put by tags) 0 dats)) + |=((list octs) (roll +< |=([a=octs b=octs] (add p.a p.b)^(cat 3 q.a q.b)))) + -- + :: + -- +:: +++ shan + |= a=* + ?@ a (shax:sha (cat 3 %atom a)) + (shax:sha (rep 3 %cell $(a -.a) $(a +.a) ~)) +:: +++ si + |% + ++ get + |= [a=sont-map:ord =txid:ord =vout:ord =off:ord] + ^- (unit sont-val:ord) + ?~ b=(~(get by a) txid vout) ~ + (~(get by sats.u.b) off) + :: + ++ get-com + |= [a=sont-map:ord =txid:ord =vout:ord =off:ord] + ^- (unit @p) + ?~(b=(get +<) ~ com.u.b) + :: + ++ get-vout + |= [a=sont-map:ord =txid:ord =vout:ord] + ^- (unit vout-map:ord) + (~(get by a) txid vout) + :: + ++ put-all + |= [a=sont-map:ord =txid:ord =vout:ord =off:ord val=@ud com=(unit @p) ins=(set insc:ord)] + ^- sont-map:ord + %+ ~(put by a) [txid vout] + =/ b=vout-map:ord (~(gut by a) [txid vout] [0 ~]) + =/ c=sont-val:ord (~(gut by sats.b) off [~ ~]) + val^(~(put by sats.b) off c(com com, ins (~(uni in ins.c) ins))) + :: + ++ put-ins + |= [a=sont-map:ord =txid:ord =vout:ord =off:ord val=@ud ins=(set insc:ord)] + ^- sont-map:ord + %+ ~(put by a) [txid vout] + =/ b=vout-map:ord (~(gut by a) [txid vout] [0 ~]) + =/ c=sont-val:ord (~(gut by sats.b) off [~ ~]) + val^(~(put by sats.b) off c(ins (~(uni in ins.c) ins))) + :: + ++ put-com + |= [a=sont-map:ord =txid:ord =vout:ord =off:ord val=@ud com=@p] + ^- sont-map:ord + %+ ~(put by a) [txid vout] + =/ b=vout-map:ord (~(gut by a) [txid vout] [0 ~]) + =/ c=sont-val:ord (~(gut by sats.b) off [~ ~]) + val^(~(put by sats.b) off c(com `com)) + :: + ++ del + |= [a=sont-map:ord =txid:ord =vout:ord =off:ord] + ^- sont-map:ord + ?~ b=(~(get by a) [txid vout]) a + =/ c (~(del by sats.u.b) off) + ?: =(c ~) (~(del by a) txid off) + (~(put by a) [txid vout] u.b(sats c)) + -- +-- diff --git a/desk/lib/pytz.hoon b/desk/gub/lib/pytz.hoon similarity index 94% rename from desk/lib/pytz.hoon rename to desk/gub/lib/pytz.hoon index ab35e74..07604a1 100644 --- a/desk/lib/pytz.hoon +++ b/desk/gub/lib/pytz.hoon @@ -1,6 +1,19 @@ -/~ files wain /lib/pytz +/& raw /lib/pytz/ :: helper structures and functions :: +=/ files=(map @tas wain) + =/ nod=(map @ta mime) (need fil.raw) + %- ~(gas by *(map @tas wain)) + %+ turn ~(tap by nod) + |= [name=@ta =mime] + ^- [@tas wain] + =/ t=tape (trip name) + =/ len=@ud (lent t) + =/ key=@tas + ?: &((gth len 4) =(".txt" (slag (sub len 4) t))) + (crip (scag (sub len 4) t)) + name + [key (to-wain:format q.q.mime)] => |% +$ dext [i=@ud d=@da] :: indexed time +$ delta [sign=? d=@dr] :: positive or negative offset diff --git a/desk/gub/lib/pytz/africa-abidjan.txt b/desk/gub/lib/pytz/africa-abidjan.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-abidjan.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-accra.txt b/desk/gub/lib/pytz/africa-accra.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-accra.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-addis-ababa.txt b/desk/gub/lib/pytz/africa-addis-ababa.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/africa-addis-ababa.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-algiers.txt b/desk/gub/lib/pytz/africa-algiers.txt new file mode 100644 index 0000000..a8efc7d --- /dev/null +++ b/desk/gub/lib/pytz/africa-algiers.txt @@ -0,0 +1,36 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:12,LMT +1901-12-13T20:45:52,+00:09,PMT +1911-03-10T23:50:39,+00:00,WET +1916-06-14T23:00:00,+01:00,WEST +1916-10-01T23:00:00,+00:00,WET +1917-03-24T23:00:00,+01:00,WEST +1917-10-07T23:00:00,+00:00,WET +1918-03-09T23:00:00,+01:00,WEST +1918-10-06T23:00:00,+00:00,WET +1919-03-01T23:00:00,+01:00,WEST +1919-10-05T23:00:00,+00:00,WET +1920-02-14T23:00:00,+01:00,WEST +1920-10-23T23:00:00,+00:00,WET +1921-03-14T23:00:00,+01:00,WEST +1921-06-21T23:00:00,+00:00,WET +1939-09-11T23:00:00,+01:00,WEST +1939-11-19T00:00:00,+00:00,WET +1940-02-25T02:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-08T00:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-15T23:00:00,+01:00,CET +1946-10-06T23:00:00,+00:00,WET +1956-01-29T00:00:00,+01:00,CET +1963-04-13T23:00:00,+00:00,WET +1971-04-25T23:00:00,+01:00,WEST +1971-09-26T23:00:00,+00:00,WET +1977-05-06T00:00:00,+01:00,WEST +1977-10-20T23:00:00,+01:00,CET +1978-03-24T00:00:00,+02:00,CEST +1978-09-22T01:00:00,+01:00,CET +1979-10-25T23:00:00,+00:00,WET +1980-04-25T00:00:00,+01:00,WEST +1980-10-31T01:00:00,+00:00,WET +1981-05-01T00:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-asmara.txt b/desk/gub/lib/pytz/africa-asmara.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/africa-asmara.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-asmera.txt b/desk/gub/lib/pytz/africa-asmera.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/africa-asmera.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-bamako.txt b/desk/gub/lib/pytz/africa-bamako.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-bamako.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-bangui.txt b/desk/gub/lib/pytz/africa-bangui.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-bangui.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-banjul.txt b/desk/gub/lib/pytz/africa-banjul.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-banjul.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-bissau.txt b/desk/gub/lib/pytz/africa-bissau.txt new file mode 100644 index 0000000..f193429 --- /dev/null +++ b/desk/gub/lib/pytz/africa-bissau.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1912-01-01T01:00:00,-01:00,-01 +1975-01-01T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-blantyre.txt b/desk/gub/lib/pytz/africa-blantyre.txt new file mode 100644 index 0000000..8fa1c45 --- /dev/null +++ b/desk/gub/lib/pytz/africa-blantyre.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:10,LMT +1908-12-31T21:49:42,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-brazzaville.txt b/desk/gub/lib/pytz/africa-brazzaville.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-brazzaville.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-bujumbura.txt b/desk/gub/lib/pytz/africa-bujumbura.txt new file mode 100644 index 0000000..8fa1c45 --- /dev/null +++ b/desk/gub/lib/pytz/africa-bujumbura.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:10,LMT +1908-12-31T21:49:42,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-cairo.txt b/desk/gub/lib/pytz/africa-cairo.txt new file mode 100644 index 0000000..9b1171a --- /dev/null +++ b/desk/gub/lib/pytz/africa-cairo.txt @@ -0,0 +1,159 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:05,LMT +1901-12-13T20:45:52,+02:00,EET +1940-07-14T22:00:00,+03:00,EEST +1940-09-30T21:00:00,+02:00,EET +1941-04-14T22:00:00,+03:00,EEST +1941-09-15T21:00:00,+02:00,EET +1942-03-31T22:00:00,+03:00,EEST +1942-10-26T21:00:00,+02:00,EET +1943-03-31T22:00:00,+03:00,EEST +1943-10-31T21:00:00,+02:00,EET +1944-03-31T22:00:00,+03:00,EEST +1944-10-31T21:00:00,+02:00,EET +1945-04-15T22:00:00,+03:00,EEST +1945-10-31T21:00:00,+02:00,EET +1957-05-09T22:00:00,+03:00,EEST +1957-09-30T21:00:00,+02:00,EET +1958-04-30T22:00:00,+03:00,EEST +1958-09-30T21:00:00,+02:00,EET +1959-04-30T23:00:00,+03:00,EEST +1959-09-30T00:00:00,+02:00,EET +1960-04-30T23:00:00,+03:00,EEST +1960-09-30T00:00:00,+02:00,EET +1961-04-30T23:00:00,+03:00,EEST +1961-09-30T00:00:00,+02:00,EET +1962-04-30T23:00:00,+03:00,EEST +1962-09-30T00:00:00,+02:00,EET +1963-04-30T23:00:00,+03:00,EEST +1963-09-30T00:00:00,+02:00,EET +1964-04-30T23:00:00,+03:00,EEST +1964-09-30T00:00:00,+02:00,EET +1965-04-30T23:00:00,+03:00,EEST +1965-09-30T00:00:00,+02:00,EET +1966-04-30T23:00:00,+03:00,EEST +1966-10-01T00:00:00,+02:00,EET +1967-04-30T23:00:00,+03:00,EEST +1967-10-01T00:00:00,+02:00,EET +1968-04-30T23:00:00,+03:00,EEST +1968-10-01T00:00:00,+02:00,EET +1969-04-30T23:00:00,+03:00,EEST +1969-10-01T00:00:00,+02:00,EET +1970-04-30T23:00:00,+03:00,EEST +1970-10-01T00:00:00,+02:00,EET +1971-04-30T23:00:00,+03:00,EEST +1971-10-01T00:00:00,+02:00,EET +1972-04-30T23:00:00,+03:00,EEST +1972-10-01T00:00:00,+02:00,EET +1973-04-30T23:00:00,+03:00,EEST +1973-10-01T00:00:00,+02:00,EET +1974-04-30T23:00:00,+03:00,EEST +1974-10-01T00:00:00,+02:00,EET +1975-04-30T23:00:00,+03:00,EEST +1975-10-01T00:00:00,+02:00,EET +1976-04-30T23:00:00,+03:00,EEST +1976-10-01T00:00:00,+02:00,EET +1977-04-30T23:00:00,+03:00,EEST +1977-10-01T00:00:00,+02:00,EET +1978-04-30T23:00:00,+03:00,EEST +1978-10-01T00:00:00,+02:00,EET +1979-04-30T23:00:00,+03:00,EEST +1979-10-01T00:00:00,+02:00,EET +1980-04-30T23:00:00,+03:00,EEST +1980-10-01T00:00:00,+02:00,EET +1981-04-30T23:00:00,+03:00,EEST +1981-10-01T00:00:00,+02:00,EET +1982-07-24T23:00:00,+03:00,EEST +1982-10-01T00:00:00,+02:00,EET +1983-07-11T23:00:00,+03:00,EEST +1983-10-01T00:00:00,+02:00,EET +1984-04-30T23:00:00,+03:00,EEST +1984-10-01T00:00:00,+02:00,EET +1985-04-30T23:00:00,+03:00,EEST +1985-10-01T00:00:00,+02:00,EET +1986-04-30T23:00:00,+03:00,EEST +1986-10-01T00:00:00,+02:00,EET +1987-04-30T23:00:00,+03:00,EEST +1987-10-01T00:00:00,+02:00,EET +1988-04-30T23:00:00,+03:00,EEST +1988-10-01T00:00:00,+02:00,EET +1989-05-05T23:00:00,+03:00,EEST +1989-10-01T00:00:00,+02:00,EET +1990-04-30T23:00:00,+03:00,EEST +1990-10-01T00:00:00,+02:00,EET +1991-04-30T23:00:00,+03:00,EEST +1991-10-01T00:00:00,+02:00,EET +1992-04-30T23:00:00,+03:00,EEST +1992-10-01T00:00:00,+02:00,EET +1993-04-30T23:00:00,+03:00,EEST +1993-10-01T00:00:00,+02:00,EET +1994-04-30T23:00:00,+03:00,EEST +1994-10-01T00:00:00,+02:00,EET +1995-04-27T22:00:00,+03:00,EEST +1995-09-28T21:00:00,+02:00,EET +1996-04-25T22:00:00,+03:00,EEST +1996-09-26T21:00:00,+02:00,EET +1997-04-24T22:00:00,+03:00,EEST +1997-09-25T21:00:00,+02:00,EET +1998-04-23T22:00:00,+03:00,EEST +1998-09-24T21:00:00,+02:00,EET +1999-04-29T22:00:00,+03:00,EEST +1999-09-30T21:00:00,+02:00,EET +2000-04-27T22:00:00,+03:00,EEST +2000-09-28T21:00:00,+02:00,EET +2001-04-26T22:00:00,+03:00,EEST +2001-09-27T21:00:00,+02:00,EET +2002-04-25T22:00:00,+03:00,EEST +2002-09-26T21:00:00,+02:00,EET +2003-04-24T22:00:00,+03:00,EEST +2003-09-25T21:00:00,+02:00,EET +2004-04-29T22:00:00,+03:00,EEST +2004-09-30T21:00:00,+02:00,EET +2005-04-28T22:00:00,+03:00,EEST +2005-09-29T21:00:00,+02:00,EET +2006-04-27T22:00:00,+03:00,EEST +2006-09-21T21:00:00,+02:00,EET +2007-04-26T22:00:00,+03:00,EEST +2007-09-06T21:00:00,+02:00,EET +2008-04-24T22:00:00,+03:00,EEST +2008-08-28T21:00:00,+02:00,EET +2009-04-23T22:00:00,+03:00,EEST +2009-08-20T21:00:00,+02:00,EET +2010-04-29T22:00:00,+03:00,EEST +2010-08-10T21:00:00,+02:00,EET +2010-09-09T22:00:00,+03:00,EEST +2010-09-30T21:00:00,+02:00,EET +2014-05-15T22:00:00,+03:00,EEST +2014-06-26T21:00:00,+02:00,EET +2014-07-31T22:00:00,+03:00,EEST +2014-09-25T21:00:00,+02:00,EET +2023-04-27T22:00:00,+03:00,EEST +2023-10-26T21:00:00,+02:00,EET +2024-04-25T22:00:00,+03:00,EEST +2024-10-31T21:00:00,+02:00,EET +2025-04-24T22:00:00,+03:00,EEST +2025-10-30T21:00:00,+02:00,EET +2026-04-23T22:00:00,+03:00,EEST +2026-10-29T21:00:00,+02:00,EET +2027-04-29T22:00:00,+03:00,EEST +2027-10-28T21:00:00,+02:00,EET +2028-04-27T22:00:00,+03:00,EEST +2028-10-26T21:00:00,+02:00,EET +2029-04-26T22:00:00,+03:00,EEST +2029-10-25T21:00:00,+02:00,EET +2030-04-25T22:00:00,+03:00,EEST +2030-10-31T21:00:00,+02:00,EET +2031-04-24T22:00:00,+03:00,EEST +2031-10-30T21:00:00,+02:00,EET +2032-04-29T22:00:00,+03:00,EEST +2032-10-28T21:00:00,+02:00,EET +2033-04-28T22:00:00,+03:00,EEST +2033-10-27T21:00:00,+02:00,EET +2034-04-27T22:00:00,+03:00,EEST +2034-10-26T21:00:00,+02:00,EET +2035-04-26T22:00:00,+03:00,EEST +2035-10-25T21:00:00,+02:00,EET +2036-04-24T22:00:00,+03:00,EEST +2036-10-30T21:00:00,+02:00,EET +2037-04-23T22:00:00,+03:00,EEST +2037-10-29T21:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-casablanca.txt b/desk/gub/lib/pytz/africa-casablanca.txt new file mode 100644 index 0000000..4f46fb6 --- /dev/null +++ b/desk/gub/lib/pytz/africa-casablanca.txt @@ -0,0 +1,96 @@ +Time,Offset,Name +1913-10-26T00:30:20,+00:00,+00 +1939-09-12T00:00:00,+01:00,+01 +1939-11-18T23:00:00,+00:00,+00 +1940-02-25T00:00:00,+01:00,+01 +1945-11-17T23:00:00,+00:00,+00 +1950-06-11T00:00:00,+01:00,+01 +1950-10-28T23:00:00,+00:00,+00 +1967-06-03T12:00:00,+01:00,+01 +1967-09-30T23:00:00,+00:00,+00 +1974-06-24T00:00:00,+01:00,+01 +1974-08-31T23:00:00,+00:00,+00 +1976-05-01T00:00:00,+01:00,+01 +1976-07-31T23:00:00,+00:00,+00 +1977-05-01T00:00:00,+01:00,+01 +1977-09-27T23:00:00,+00:00,+00 +1978-06-01T00:00:00,+01:00,+01 +1978-08-03T23:00:00,+00:00,+00 +1984-03-16T00:00:00,+01:00,+01 +1985-12-31T23:00:00,+00:00,+00 +2008-06-01T00:00:00,+01:00,+01 +2008-08-31T23:00:00,+00:00,+00 +2009-06-01T00:00:00,+01:00,+01 +2009-08-20T23:00:00,+00:00,+00 +2010-05-02T00:00:00,+01:00,+01 +2010-08-07T23:00:00,+00:00,+00 +2011-04-03T00:00:00,+01:00,+01 +2011-07-30T23:00:00,+00:00,+00 +2012-04-29T02:00:00,+01:00,+01 +2012-07-20T02:00:00,+00:00,+00 +2012-08-20T02:00:00,+01:00,+01 +2012-09-30T02:00:00,+00:00,+00 +2013-04-28T02:00:00,+01:00,+01 +2013-07-07T02:00:00,+00:00,+00 +2013-08-10T02:00:00,+01:00,+01 +2013-10-27T02:00:00,+00:00,+00 +2014-03-30T02:00:00,+01:00,+01 +2014-06-28T02:00:00,+00:00,+00 +2014-08-02T02:00:00,+01:00,+01 +2014-10-26T02:00:00,+00:00,+00 +2015-03-29T02:00:00,+01:00,+01 +2015-06-14T02:00:00,+00:00,+00 +2015-07-19T02:00:00,+01:00,+01 +2015-10-25T02:00:00,+00:00,+00 +2016-03-27T02:00:00,+01:00,+01 +2016-06-05T02:00:00,+00:00,+00 +2016-07-10T02:00:00,+01:00,+01 +2016-10-30T02:00:00,+00:00,+00 +2017-03-26T02:00:00,+01:00,+01 +2017-05-21T02:00:00,+00:00,+00 +2017-07-02T02:00:00,+01:00,+01 +2017-10-29T02:00:00,+00:00,+00 +2018-03-25T02:00:00,+01:00,+01 +2018-05-13T02:00:00,+00:00,+00 +2018-06-17T02:00:00,+01:00,+01 +2018-10-28T02:00:00,+01:00,+01 +2019-05-05T02:00:00,+00:00,+00 +2019-06-09T02:00:00,+01:00,+01 +2020-04-19T02:00:00,+00:00,+00 +2020-05-31T02:00:00,+01:00,+01 +2021-04-11T02:00:00,+00:00,+00 +2021-05-16T02:00:00,+01:00,+01 +2022-03-27T02:00:00,+00:00,+00 +2022-05-08T02:00:00,+01:00,+01 +2023-03-19T02:00:00,+00:00,+00 +2023-04-23T02:00:00,+01:00,+01 +2024-03-10T02:00:00,+00:00,+00 +2024-04-14T02:00:00,+01:00,+01 +2025-02-23T02:00:00,+00:00,+00 +2025-04-06T02:00:00,+01:00,+01 +2026-02-15T02:00:00,+00:00,+00 +2026-03-22T02:00:00,+01:00,+01 +2027-02-07T02:00:00,+00:00,+00 +2027-03-14T02:00:00,+01:00,+01 +2028-01-23T02:00:00,+00:00,+00 +2028-03-05T02:00:00,+01:00,+01 +2029-01-14T02:00:00,+00:00,+00 +2029-02-18T02:00:00,+01:00,+01 +2029-12-30T02:00:00,+00:00,+00 +2030-02-10T02:00:00,+01:00,+01 +2030-12-22T02:00:00,+00:00,+00 +2031-01-26T02:00:00,+01:00,+01 +2031-12-14T02:00:00,+00:00,+00 +2032-01-18T02:00:00,+01:00,+01 +2032-11-28T02:00:00,+00:00,+00 +2033-01-09T02:00:00,+01:00,+01 +2033-11-20T02:00:00,+00:00,+00 +2033-12-25T02:00:00,+01:00,+01 +2034-11-05T02:00:00,+00:00,+00 +2034-12-17T02:00:00,+01:00,+01 +2035-10-28T02:00:00,+00:00,+00 +2035-12-09T02:00:00,+01:00,+01 +2036-10-19T02:00:00,+00:00,+00 +2036-11-23T02:00:00,+01:00,+01 +2037-10-04T02:00:00,+00:00,+00 +2037-11-15T02:00:00,+01:00,+01 \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-ceuta.txt b/desk/gub/lib/pytz/africa-ceuta.txt new file mode 100644 index 0000000..5a2c002 --- /dev/null +++ b/desk/gub/lib/pytz/africa-ceuta.txt @@ -0,0 +1,127 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,WET +1918-05-06T23:00:00,+01:00,WEST +1918-10-07T22:00:00,+00:00,WET +1924-04-16T23:00:00,+01:00,WEST +1924-10-05T00:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-03T00:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-02T00:00:00,+00:00,WET +1928-04-15T00:00:00,+01:00,WEST +1928-10-07T00:00:00,+00:00,WET +1967-06-03T12:00:00,+01:00,WEST +1967-09-30T23:00:00,+00:00,WET +1974-06-24T00:00:00,+01:00,WEST +1974-08-31T23:00:00,+00:00,WET +1976-05-01T00:00:00,+01:00,WEST +1976-07-31T23:00:00,+00:00,WET +1977-05-01T00:00:00,+01:00,WEST +1977-09-27T23:00:00,+00:00,WET +1978-06-01T00:00:00,+01:00,WEST +1978-08-03T23:00:00,+00:00,WET +1984-03-16T00:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-conakry.txt b/desk/gub/lib/pytz/africa-conakry.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-conakry.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-dakar.txt b/desk/gub/lib/pytz/africa-dakar.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-dakar.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-dar-es-salaam.txt b/desk/gub/lib/pytz/africa-dar-es-salaam.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/africa-dar-es-salaam.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-djibouti.txt b/desk/gub/lib/pytz/africa-djibouti.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/africa-djibouti.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-douala.txt b/desk/gub/lib/pytz/africa-douala.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-douala.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-el-aaiun.txt b/desk/gub/lib/pytz/africa-el-aaiun.txt new file mode 100644 index 0000000..7d8dbb5 --- /dev/null +++ b/desk/gub/lib/pytz/africa-el-aaiun.txt @@ -0,0 +1,85 @@ +Time,Offset,Name +1934-01-01T00:52:48,-01:00,-01 +1976-04-14T01:00:00,+00:00,+00 +1976-05-01T00:00:00,+01:00,+01 +1976-07-31T23:00:00,+00:00,+00 +1977-05-01T00:00:00,+01:00,+01 +1977-09-27T23:00:00,+00:00,+00 +1978-06-01T00:00:00,+01:00,+01 +1978-08-03T23:00:00,+00:00,+00 +2008-06-01T00:00:00,+01:00,+01 +2008-08-31T23:00:00,+00:00,+00 +2009-06-01T00:00:00,+01:00,+01 +2009-08-20T23:00:00,+00:00,+00 +2010-05-02T00:00:00,+01:00,+01 +2010-08-07T23:00:00,+00:00,+00 +2011-04-03T00:00:00,+01:00,+01 +2011-07-30T23:00:00,+00:00,+00 +2012-04-29T02:00:00,+01:00,+01 +2012-07-20T02:00:00,+00:00,+00 +2012-08-20T02:00:00,+01:00,+01 +2012-09-30T02:00:00,+00:00,+00 +2013-04-28T02:00:00,+01:00,+01 +2013-07-07T02:00:00,+00:00,+00 +2013-08-10T02:00:00,+01:00,+01 +2013-10-27T02:00:00,+00:00,+00 +2014-03-30T02:00:00,+01:00,+01 +2014-06-28T02:00:00,+00:00,+00 +2014-08-02T02:00:00,+01:00,+01 +2014-10-26T02:00:00,+00:00,+00 +2015-03-29T02:00:00,+01:00,+01 +2015-06-14T02:00:00,+00:00,+00 +2015-07-19T02:00:00,+01:00,+01 +2015-10-25T02:00:00,+00:00,+00 +2016-03-27T02:00:00,+01:00,+01 +2016-06-05T02:00:00,+00:00,+00 +2016-07-10T02:00:00,+01:00,+01 +2016-10-30T02:00:00,+00:00,+00 +2017-03-26T02:00:00,+01:00,+01 +2017-05-21T02:00:00,+00:00,+00 +2017-07-02T02:00:00,+01:00,+01 +2017-10-29T02:00:00,+00:00,+00 +2018-03-25T02:00:00,+01:00,+01 +2018-05-13T02:00:00,+00:00,+00 +2018-06-17T02:00:00,+01:00,+01 +2018-10-28T02:00:00,+01:00,+01 +2019-05-05T02:00:00,+00:00,+00 +2019-06-09T02:00:00,+01:00,+01 +2020-04-19T02:00:00,+00:00,+00 +2020-05-31T02:00:00,+01:00,+01 +2021-04-11T02:00:00,+00:00,+00 +2021-05-16T02:00:00,+01:00,+01 +2022-03-27T02:00:00,+00:00,+00 +2022-05-08T02:00:00,+01:00,+01 +2023-03-19T02:00:00,+00:00,+00 +2023-04-23T02:00:00,+01:00,+01 +2024-03-10T02:00:00,+00:00,+00 +2024-04-14T02:00:00,+01:00,+01 +2025-02-23T02:00:00,+00:00,+00 +2025-04-06T02:00:00,+01:00,+01 +2026-02-15T02:00:00,+00:00,+00 +2026-03-22T02:00:00,+01:00,+01 +2027-02-07T02:00:00,+00:00,+00 +2027-03-14T02:00:00,+01:00,+01 +2028-01-23T02:00:00,+00:00,+00 +2028-03-05T02:00:00,+01:00,+01 +2029-01-14T02:00:00,+00:00,+00 +2029-02-18T02:00:00,+01:00,+01 +2029-12-30T02:00:00,+00:00,+00 +2030-02-10T02:00:00,+01:00,+01 +2030-12-22T02:00:00,+00:00,+00 +2031-01-26T02:00:00,+01:00,+01 +2031-12-14T02:00:00,+00:00,+00 +2032-01-18T02:00:00,+01:00,+01 +2032-11-28T02:00:00,+00:00,+00 +2033-01-09T02:00:00,+01:00,+01 +2033-11-20T02:00:00,+00:00,+00 +2033-12-25T02:00:00,+01:00,+01 +2034-11-05T02:00:00,+00:00,+00 +2034-12-17T02:00:00,+01:00,+01 +2035-10-28T02:00:00,+00:00,+00 +2035-12-09T02:00:00,+01:00,+01 +2036-10-19T02:00:00,+00:00,+00 +2036-11-23T02:00:00,+01:00,+01 +2037-10-04T02:00:00,+00:00,+00 +2037-11-15T02:00:00,+01:00,+01 \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-freetown.txt b/desk/gub/lib/pytz/africa-freetown.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-freetown.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-gaborone.txt b/desk/gub/lib/pytz/africa-gaborone.txt new file mode 100644 index 0000000..8fa1c45 --- /dev/null +++ b/desk/gub/lib/pytz/africa-gaborone.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:10,LMT +1908-12-31T21:49:42,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-harare.txt b/desk/gub/lib/pytz/africa-harare.txt new file mode 100644 index 0000000..8fa1c45 --- /dev/null +++ b/desk/gub/lib/pytz/africa-harare.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:10,LMT +1908-12-31T21:49:42,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-johannesburg.txt b/desk/gub/lib/pytz/africa-johannesburg.txt new file mode 100644 index 0000000..a782673 --- /dev/null +++ b/desk/gub/lib/pytz/africa-johannesburg.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:52,LMT +1901-12-13T20:45:52,+01:30,SAST +1903-02-28T22:30:00,+02:00,SAST +1942-09-20T00:00:00,+03:00,SAST +1943-03-20T23:00:00,+02:00,SAST +1943-09-19T00:00:00,+03:00,SAST +1944-03-18T23:00:00,+02:00,SAST \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-juba.txt b/desk/gub/lib/pytz/africa-juba.txt new file mode 100644 index 0000000..91c67c0 --- /dev/null +++ b/desk/gub/lib/pytz/africa-juba.txt @@ -0,0 +1,37 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:06,LMT +1930-12-31T21:53:32,+02:00,CAT +1970-04-30T22:00:00,+03:00,CAST +1970-10-14T21:00:00,+02:00,CAT +1971-04-29T22:00:00,+03:00,CAST +1971-10-14T21:00:00,+02:00,CAT +1972-04-29T22:00:00,+03:00,CAST +1972-10-14T21:00:00,+02:00,CAT +1973-04-28T22:00:00,+03:00,CAST +1973-10-14T21:00:00,+02:00,CAT +1974-04-27T22:00:00,+03:00,CAST +1974-10-14T21:00:00,+02:00,CAT +1975-04-26T22:00:00,+03:00,CAST +1975-10-14T21:00:00,+02:00,CAT +1976-04-24T22:00:00,+03:00,CAST +1976-10-14T21:00:00,+02:00,CAT +1977-04-23T22:00:00,+03:00,CAST +1977-10-14T21:00:00,+02:00,CAT +1978-04-29T22:00:00,+03:00,CAST +1978-10-14T21:00:00,+02:00,CAT +1979-04-28T22:00:00,+03:00,CAST +1979-10-14T21:00:00,+02:00,CAT +1980-04-26T22:00:00,+03:00,CAST +1980-10-14T21:00:00,+02:00,CAT +1981-04-25T22:00:00,+03:00,CAST +1981-10-14T21:00:00,+02:00,CAT +1982-04-24T22:00:00,+03:00,CAST +1982-10-14T21:00:00,+02:00,CAT +1983-04-23T22:00:00,+03:00,CAST +1983-10-14T21:00:00,+02:00,CAT +1984-04-28T22:00:00,+03:00,CAST +1984-10-14T21:00:00,+02:00,CAT +1985-04-27T22:00:00,+03:00,CAST +1985-10-14T21:00:00,+02:00,CAT +2000-01-15T10:00:00,+03:00,EAT +2021-01-31T21:00:00,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-kampala.txt b/desk/gub/lib/pytz/africa-kampala.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/africa-kampala.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-khartoum.txt b/desk/gub/lib/pytz/africa-khartoum.txt new file mode 100644 index 0000000..9d7bad9 --- /dev/null +++ b/desk/gub/lib/pytz/africa-khartoum.txt @@ -0,0 +1,37 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:10,LMT +1930-12-31T21:49:52,+02:00,CAT +1970-04-30T22:00:00,+03:00,CAST +1970-10-14T21:00:00,+02:00,CAT +1971-04-29T22:00:00,+03:00,CAST +1971-10-14T21:00:00,+02:00,CAT +1972-04-29T22:00:00,+03:00,CAST +1972-10-14T21:00:00,+02:00,CAT +1973-04-28T22:00:00,+03:00,CAST +1973-10-14T21:00:00,+02:00,CAT +1974-04-27T22:00:00,+03:00,CAST +1974-10-14T21:00:00,+02:00,CAT +1975-04-26T22:00:00,+03:00,CAST +1975-10-14T21:00:00,+02:00,CAT +1976-04-24T22:00:00,+03:00,CAST +1976-10-14T21:00:00,+02:00,CAT +1977-04-23T22:00:00,+03:00,CAST +1977-10-14T21:00:00,+02:00,CAT +1978-04-29T22:00:00,+03:00,CAST +1978-10-14T21:00:00,+02:00,CAT +1979-04-28T22:00:00,+03:00,CAST +1979-10-14T21:00:00,+02:00,CAT +1980-04-26T22:00:00,+03:00,CAST +1980-10-14T21:00:00,+02:00,CAT +1981-04-25T22:00:00,+03:00,CAST +1981-10-14T21:00:00,+02:00,CAT +1982-04-24T22:00:00,+03:00,CAST +1982-10-14T21:00:00,+02:00,CAT +1983-04-23T22:00:00,+03:00,CAST +1983-10-14T21:00:00,+02:00,CAT +1984-04-28T22:00:00,+03:00,CAST +1984-10-14T21:00:00,+02:00,CAT +1985-04-27T22:00:00,+03:00,CAST +1985-10-14T21:00:00,+02:00,CAT +2000-01-15T10:00:00,+03:00,EAT +2017-10-31T21:00:00,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-kigali.txt b/desk/gub/lib/pytz/africa-kigali.txt new file mode 100644 index 0000000..8fa1c45 --- /dev/null +++ b/desk/gub/lib/pytz/africa-kigali.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:10,LMT +1908-12-31T21:49:42,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-kinshasa.txt b/desk/gub/lib/pytz/africa-kinshasa.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-kinshasa.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-lagos.txt b/desk/gub/lib/pytz/africa-lagos.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-lagos.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-libreville.txt b/desk/gub/lib/pytz/africa-libreville.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-libreville.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-lome.txt b/desk/gub/lib/pytz/africa-lome.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-lome.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-luanda.txt b/desk/gub/lib/pytz/africa-luanda.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-luanda.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-lubumbashi.txt b/desk/gub/lib/pytz/africa-lubumbashi.txt new file mode 100644 index 0000000..8fa1c45 --- /dev/null +++ b/desk/gub/lib/pytz/africa-lubumbashi.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:10,LMT +1908-12-31T21:49:42,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-lusaka.txt b/desk/gub/lib/pytz/africa-lusaka.txt new file mode 100644 index 0000000..8fa1c45 --- /dev/null +++ b/desk/gub/lib/pytz/africa-lusaka.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:10,LMT +1908-12-31T21:49:42,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-malabo.txt b/desk/gub/lib/pytz/africa-malabo.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-malabo.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-maputo.txt b/desk/gub/lib/pytz/africa-maputo.txt new file mode 100644 index 0000000..8fa1c45 --- /dev/null +++ b/desk/gub/lib/pytz/africa-maputo.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:10,LMT +1908-12-31T21:49:42,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-maseru.txt b/desk/gub/lib/pytz/africa-maseru.txt new file mode 100644 index 0000000..a782673 --- /dev/null +++ b/desk/gub/lib/pytz/africa-maseru.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:52,LMT +1901-12-13T20:45:52,+01:30,SAST +1903-02-28T22:30:00,+02:00,SAST +1942-09-20T00:00:00,+03:00,SAST +1943-03-20T23:00:00,+02:00,SAST +1943-09-19T00:00:00,+03:00,SAST +1944-03-18T23:00:00,+02:00,SAST \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-mbabane.txt b/desk/gub/lib/pytz/africa-mbabane.txt new file mode 100644 index 0000000..a782673 --- /dev/null +++ b/desk/gub/lib/pytz/africa-mbabane.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:52,LMT +1901-12-13T20:45:52,+01:30,SAST +1903-02-28T22:30:00,+02:00,SAST +1942-09-20T00:00:00,+03:00,SAST +1943-03-20T23:00:00,+02:00,SAST +1943-09-19T00:00:00,+03:00,SAST +1944-03-18T23:00:00,+02:00,SAST \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-mogadishu.txt b/desk/gub/lib/pytz/africa-mogadishu.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/africa-mogadishu.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-monrovia.txt b/desk/gub/lib/pytz/africa-monrovia.txt new file mode 100644 index 0000000..a077089 --- /dev/null +++ b/desk/gub/lib/pytz/africa-monrovia.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +1901-12-13T20:45:52,-01:17,MMT +1919-03-01T00:43:08,-01:16,MMT +1972-01-07T00:44:30,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-nairobi.txt b/desk/gub/lib/pytz/africa-nairobi.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/africa-nairobi.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-ndjamena.txt b/desk/gub/lib/pytz/africa-ndjamena.txt new file mode 100644 index 0000000..a300351 --- /dev/null +++ b/desk/gub/lib/pytz/africa-ndjamena.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:00,LMT +1911-12-31T22:59:48,+01:00,WAT +1979-10-13T23:00:00,+02:00,WAST +1980-03-07T22:00:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-niamey.txt b/desk/gub/lib/pytz/africa-niamey.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-niamey.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-nouakchott.txt b/desk/gub/lib/pytz/africa-nouakchott.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-nouakchott.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-ouagadougou.txt b/desk/gub/lib/pytz/africa-ouagadougou.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-ouagadougou.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-porto-novo.txt b/desk/gub/lib/pytz/africa-porto-novo.txt new file mode 100644 index 0000000..3474c0a --- /dev/null +++ b/desk/gub/lib/pytz/africa-porto-novo.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:14,LMT +1905-06-30T23:46:25,+00:00,GMT +1908-07-01T00:00:00,+00:14,LMT +1913-12-31T23:46:25,+00:30,+0030 +1919-08-31T23:30:00,+01:00,WAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-sao-tome.txt b/desk/gub/lib/pytz/africa-sao-tome.txt new file mode 100644 index 0000000..b5ed710 --- /dev/null +++ b/desk/gub/lib/pytz/africa-sao-tome.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:27,LMT +1901-12-13T20:45:52,-01:23,LMT +1912-01-01T00:00:00,+00:00,GMT +2018-01-01T01:00:00,+01:00,WAT +2019-01-01T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-timbuktu.txt b/desk/gub/lib/pytz/africa-timbuktu.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/africa-timbuktu.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-tripoli.txt b/desk/gub/lib/pytz/africa-tripoli.txt new file mode 100644 index 0000000..4a47835 --- /dev/null +++ b/desk/gub/lib/pytz/africa-tripoli.txt @@ -0,0 +1,34 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:53,LMT +1919-12-31T23:07:16,+01:00,CET +1951-10-14T01:00:00,+02:00,CEST +1951-12-31T22:00:00,+01:00,CET +1953-10-09T01:00:00,+02:00,CEST +1953-12-31T22:00:00,+01:00,CET +1955-09-29T23:00:00,+02:00,CEST +1955-12-31T22:00:00,+01:00,CET +1958-12-31T23:00:00,+02:00,EET +1981-12-31T22:00:00,+01:00,CET +1982-03-31T23:00:00,+02:00,CEST +1982-09-30T22:00:00,+01:00,CET +1983-03-31T23:00:00,+02:00,CEST +1983-09-30T22:00:00,+01:00,CET +1984-03-31T23:00:00,+02:00,CEST +1984-09-30T22:00:00,+01:00,CET +1985-04-05T23:00:00,+02:00,CEST +1985-09-30T22:00:00,+01:00,CET +1986-04-03T23:00:00,+02:00,CEST +1986-10-02T22:00:00,+01:00,CET +1987-03-31T23:00:00,+02:00,CEST +1987-09-30T22:00:00,+01:00,CET +1988-03-31T23:00:00,+02:00,CEST +1988-09-30T22:00:00,+01:00,CET +1989-03-31T23:00:00,+02:00,CEST +1989-09-30T22:00:00,+01:00,CET +1990-05-03T23:00:00,+02:00,EET +1996-09-29T22:00:00,+01:00,CET +1997-04-03T23:00:00,+02:00,CEST +1997-10-03T22:00:00,+02:00,EET +2012-11-10T00:00:00,+01:00,CET +2013-03-29T00:00:00,+02:00,CEST +2013-10-25T00:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-tunis.txt b/desk/gub/lib/pytz/africa-tunis.txt new file mode 100644 index 0000000..d6fc09f --- /dev/null +++ b/desk/gub/lib/pytz/africa-tunis.txt @@ -0,0 +1,36 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:41,LMT +1901-12-13T20:45:52,+00:09,PMT +1911-03-10T23:50:39,+01:00,CET +1939-04-15T22:00:00,+02:00,CEST +1939-11-18T22:00:00,+01:00,CET +1940-02-25T22:00:00,+02:00,CEST +1941-10-05T22:00:00,+01:00,CET +1942-03-08T23:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-04-17T00:00:00,+01:00,CET +1943-04-25T01:00:00,+02:00,CEST +1943-10-04T00:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-07T22:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-15T22:00:00,+01:00,CET +1977-04-29T23:00:00,+02:00,CEST +1977-09-23T23:00:00,+01:00,CET +1978-04-30T23:00:00,+02:00,CEST +1978-09-30T23:00:00,+01:00,CET +1988-05-31T23:00:00,+02:00,CEST +1988-09-24T23:00:00,+01:00,CET +1989-03-25T23:00:00,+02:00,CEST +1989-09-23T23:00:00,+01:00,CET +1990-04-30T23:00:00,+02:00,CEST +1990-09-29T23:00:00,+01:00,CET +2005-04-30T23:00:00,+02:00,CEST +2005-09-30T00:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/africa-windhoek.txt b/desk/gub/lib/pytz/africa-windhoek.txt new file mode 100644 index 0000000..71fa8c3 --- /dev/null +++ b/desk/gub/lib/pytz/africa-windhoek.txt @@ -0,0 +1,55 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:08,LMT +1901-12-13T20:45:52,+01:30,+0130 +1903-02-28T22:30:00,+02:00,SAST +1942-09-20T00:00:00,+03:00,SAST +1943-03-20T23:00:00,+02:00,SAST +1990-03-20T22:00:00,+02:00,CAT +1994-03-20T22:00:00,+01:00,WAT +1994-09-04T01:00:00,+02:00,CAT +1995-04-02T00:00:00,+01:00,WAT +1995-09-03T01:00:00,+02:00,CAT +1996-04-07T00:00:00,+01:00,WAT +1996-09-01T01:00:00,+02:00,CAT +1997-04-06T00:00:00,+01:00,WAT +1997-09-07T01:00:00,+02:00,CAT +1998-04-05T00:00:00,+01:00,WAT +1998-09-06T01:00:00,+02:00,CAT +1999-04-04T00:00:00,+01:00,WAT +1999-09-05T01:00:00,+02:00,CAT +2000-04-02T00:00:00,+01:00,WAT +2000-09-03T01:00:00,+02:00,CAT +2001-04-01T00:00:00,+01:00,WAT +2001-09-02T01:00:00,+02:00,CAT +2002-04-07T00:00:00,+01:00,WAT +2002-09-01T01:00:00,+02:00,CAT +2003-04-06T00:00:00,+01:00,WAT +2003-09-07T01:00:00,+02:00,CAT +2004-04-04T00:00:00,+01:00,WAT +2004-09-05T01:00:00,+02:00,CAT +2005-04-03T00:00:00,+01:00,WAT +2005-09-04T01:00:00,+02:00,CAT +2006-04-02T00:00:00,+01:00,WAT +2006-09-03T01:00:00,+02:00,CAT +2007-04-01T00:00:00,+01:00,WAT +2007-09-02T01:00:00,+02:00,CAT +2008-04-06T00:00:00,+01:00,WAT +2008-09-07T01:00:00,+02:00,CAT +2009-04-05T00:00:00,+01:00,WAT +2009-09-06T01:00:00,+02:00,CAT +2010-04-04T00:00:00,+01:00,WAT +2010-09-05T01:00:00,+02:00,CAT +2011-04-03T00:00:00,+01:00,WAT +2011-09-04T01:00:00,+02:00,CAT +2012-04-01T00:00:00,+01:00,WAT +2012-09-02T01:00:00,+02:00,CAT +2013-04-07T00:00:00,+01:00,WAT +2013-09-01T01:00:00,+02:00,CAT +2014-04-06T00:00:00,+01:00,WAT +2014-09-07T01:00:00,+02:00,CAT +2015-04-05T00:00:00,+01:00,WAT +2015-09-06T01:00:00,+02:00,CAT +2016-04-03T00:00:00,+01:00,WAT +2016-09-04T01:00:00,+02:00,CAT +2017-04-02T00:00:00,+01:00,WAT +2017-09-03T01:00:00,+02:00,CAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-adak.txt b/desk/gub/lib/pytz/america-adak.txt new file mode 100644 index 0000000..00931da --- /dev/null +++ b/desk/gub/lib/pytz/america-adak.txt @@ -0,0 +1,146 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:13,LMT +1901-12-13T20:45:52,-11:00,NST +1942-02-09T13:00:00,-10:00,NWT +1945-08-14T23:00:00,-10:00,NPT +1945-09-30T12:00:00,-11:00,NST +1967-04-01T11:00:00,-11:00,BST +1969-04-27T13:00:00,-10:00,BDT +1969-10-26T12:00:00,-11:00,BST +1970-04-26T13:00:00,-10:00,BDT +1970-10-25T12:00:00,-11:00,BST +1971-04-25T13:00:00,-10:00,BDT +1971-10-31T12:00:00,-11:00,BST +1972-04-30T13:00:00,-10:00,BDT +1972-10-29T12:00:00,-11:00,BST +1973-04-29T13:00:00,-10:00,BDT +1973-10-28T12:00:00,-11:00,BST +1974-01-06T13:00:00,-10:00,BDT +1974-10-27T12:00:00,-11:00,BST +1975-02-23T13:00:00,-10:00,BDT +1975-10-26T12:00:00,-11:00,BST +1976-04-25T13:00:00,-10:00,BDT +1976-10-31T12:00:00,-11:00,BST +1977-04-24T13:00:00,-10:00,BDT +1977-10-30T12:00:00,-11:00,BST +1978-04-30T13:00:00,-10:00,BDT +1978-10-29T12:00:00,-11:00,BST +1979-04-29T13:00:00,-10:00,BDT +1979-10-28T12:00:00,-11:00,BST +1980-04-27T13:00:00,-10:00,BDT +1980-10-26T12:00:00,-11:00,BST +1981-04-26T13:00:00,-10:00,BDT +1981-10-25T12:00:00,-11:00,BST +1982-04-25T13:00:00,-10:00,BDT +1982-10-31T12:00:00,-11:00,BST +1983-04-24T13:00:00,-10:00,BDT +1983-10-30T12:00:00,-10:00,AHST +1983-11-30T10:00:00,-10:00,HST +1984-04-29T12:00:00,-09:00,HDT +1984-10-28T11:00:00,-10:00,HST +1985-04-28T12:00:00,-09:00,HDT +1985-10-27T11:00:00,-10:00,HST +1986-04-27T12:00:00,-09:00,HDT +1986-10-26T11:00:00,-10:00,HST +1987-04-05T12:00:00,-09:00,HDT +1987-10-25T11:00:00,-10:00,HST +1988-04-03T12:00:00,-09:00,HDT +1988-10-30T11:00:00,-10:00,HST +1989-04-02T12:00:00,-09:00,HDT +1989-10-29T11:00:00,-10:00,HST +1990-04-01T12:00:00,-09:00,HDT +1990-10-28T11:00:00,-10:00,HST +1991-04-07T12:00:00,-09:00,HDT +1991-10-27T11:00:00,-10:00,HST +1992-04-05T12:00:00,-09:00,HDT +1992-10-25T11:00:00,-10:00,HST +1993-04-04T12:00:00,-09:00,HDT +1993-10-31T11:00:00,-10:00,HST +1994-04-03T12:00:00,-09:00,HDT +1994-10-30T11:00:00,-10:00,HST +1995-04-02T12:00:00,-09:00,HDT +1995-10-29T11:00:00,-10:00,HST +1996-04-07T12:00:00,-09:00,HDT +1996-10-27T11:00:00,-10:00,HST +1997-04-06T12:00:00,-09:00,HDT +1997-10-26T11:00:00,-10:00,HST +1998-04-05T12:00:00,-09:00,HDT +1998-10-25T11:00:00,-10:00,HST +1999-04-04T12:00:00,-09:00,HDT +1999-10-31T11:00:00,-10:00,HST +2000-04-02T12:00:00,-09:00,HDT +2000-10-29T11:00:00,-10:00,HST +2001-04-01T12:00:00,-09:00,HDT +2001-10-28T11:00:00,-10:00,HST +2002-04-07T12:00:00,-09:00,HDT +2002-10-27T11:00:00,-10:00,HST +2003-04-06T12:00:00,-09:00,HDT +2003-10-26T11:00:00,-10:00,HST +2004-04-04T12:00:00,-09:00,HDT +2004-10-31T11:00:00,-10:00,HST +2005-04-03T12:00:00,-09:00,HDT +2005-10-30T11:00:00,-10:00,HST +2006-04-02T12:00:00,-09:00,HDT +2006-10-29T11:00:00,-10:00,HST +2007-03-11T12:00:00,-09:00,HDT +2007-11-04T11:00:00,-10:00,HST +2008-03-09T12:00:00,-09:00,HDT +2008-11-02T11:00:00,-10:00,HST +2009-03-08T12:00:00,-09:00,HDT +2009-11-01T11:00:00,-10:00,HST +2010-03-14T12:00:00,-09:00,HDT +2010-11-07T11:00:00,-10:00,HST +2011-03-13T12:00:00,-09:00,HDT +2011-11-06T11:00:00,-10:00,HST +2012-03-11T12:00:00,-09:00,HDT +2012-11-04T11:00:00,-10:00,HST +2013-03-10T12:00:00,-09:00,HDT +2013-11-03T11:00:00,-10:00,HST +2014-03-09T12:00:00,-09:00,HDT +2014-11-02T11:00:00,-10:00,HST +2015-03-08T12:00:00,-09:00,HDT +2015-11-01T11:00:00,-10:00,HST +2016-03-13T12:00:00,-09:00,HDT +2016-11-06T11:00:00,-10:00,HST +2017-03-12T12:00:00,-09:00,HDT +2017-11-05T11:00:00,-10:00,HST +2018-03-11T12:00:00,-09:00,HDT +2018-11-04T11:00:00,-10:00,HST +2019-03-10T12:00:00,-09:00,HDT +2019-11-03T11:00:00,-10:00,HST +2020-03-08T12:00:00,-09:00,HDT +2020-11-01T11:00:00,-10:00,HST +2021-03-14T12:00:00,-09:00,HDT +2021-11-07T11:00:00,-10:00,HST +2022-03-13T12:00:00,-09:00,HDT +2022-11-06T11:00:00,-10:00,HST +2023-03-12T12:00:00,-09:00,HDT +2023-11-05T11:00:00,-10:00,HST +2024-03-10T12:00:00,-09:00,HDT +2024-11-03T11:00:00,-10:00,HST +2025-03-09T12:00:00,-09:00,HDT +2025-11-02T11:00:00,-10:00,HST +2026-03-08T12:00:00,-09:00,HDT +2026-11-01T11:00:00,-10:00,HST +2027-03-14T12:00:00,-09:00,HDT +2027-11-07T11:00:00,-10:00,HST +2028-03-12T12:00:00,-09:00,HDT +2028-11-05T11:00:00,-10:00,HST +2029-03-11T12:00:00,-09:00,HDT +2029-11-04T11:00:00,-10:00,HST +2030-03-10T12:00:00,-09:00,HDT +2030-11-03T11:00:00,-10:00,HST +2031-03-09T12:00:00,-09:00,HDT +2031-11-02T11:00:00,-10:00,HST +2032-03-14T12:00:00,-09:00,HDT +2032-11-07T11:00:00,-10:00,HST +2033-03-13T12:00:00,-09:00,HDT +2033-11-06T11:00:00,-10:00,HST +2034-03-12T12:00:00,-09:00,HDT +2034-11-05T11:00:00,-10:00,HST +2035-03-11T12:00:00,-09:00,HDT +2035-11-04T11:00:00,-10:00,HST +2036-03-09T12:00:00,-09:00,HDT +2036-11-02T11:00:00,-10:00,HST +2037-03-08T12:00:00,-09:00,HDT +2037-11-01T11:00:00,-10:00,HST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-anchorage.txt b/desk/gub/lib/pytz/america-anchorage.txt new file mode 100644 index 0000000..c133f03 --- /dev/null +++ b/desk/gub/lib/pytz/america-anchorage.txt @@ -0,0 +1,146 @@ +Time,Offset,Name +0001-01-01T00:00:00,+14:00,LMT +1901-12-13T20:45:52,-10:00,AST +1942-02-09T12:00:00,-09:00,AWT +1945-08-14T23:00:00,-09:00,APT +1945-09-30T11:00:00,-10:00,AST +1967-04-01T10:00:00,-10:00,AHST +1969-04-27T12:00:00,-09:00,AHDT +1969-10-26T11:00:00,-10:00,AHST +1970-04-26T12:00:00,-09:00,AHDT +1970-10-25T11:00:00,-10:00,AHST +1971-04-25T12:00:00,-09:00,AHDT +1971-10-31T11:00:00,-10:00,AHST +1972-04-30T12:00:00,-09:00,AHDT +1972-10-29T11:00:00,-10:00,AHST +1973-04-29T12:00:00,-09:00,AHDT +1973-10-28T11:00:00,-10:00,AHST +1974-01-06T12:00:00,-09:00,AHDT +1974-10-27T11:00:00,-10:00,AHST +1975-02-23T12:00:00,-09:00,AHDT +1975-10-26T11:00:00,-10:00,AHST +1976-04-25T12:00:00,-09:00,AHDT +1976-10-31T11:00:00,-10:00,AHST +1977-04-24T12:00:00,-09:00,AHDT +1977-10-30T11:00:00,-10:00,AHST +1978-04-30T12:00:00,-09:00,AHDT +1978-10-29T11:00:00,-10:00,AHST +1979-04-29T12:00:00,-09:00,AHDT +1979-10-28T11:00:00,-10:00,AHST +1980-04-27T12:00:00,-09:00,AHDT +1980-10-26T11:00:00,-10:00,AHST +1981-04-26T12:00:00,-09:00,AHDT +1981-10-25T11:00:00,-10:00,AHST +1982-04-25T12:00:00,-09:00,AHDT +1982-10-31T11:00:00,-10:00,AHST +1983-04-24T12:00:00,-09:00,AHDT +1983-10-30T11:00:00,-09:00,YST +1983-11-30T09:00:00,-09:00,AKST +1984-04-29T11:00:00,-08:00,AKDT +1984-10-28T10:00:00,-09:00,AKST +1985-04-28T11:00:00,-08:00,AKDT +1985-10-27T10:00:00,-09:00,AKST +1986-04-27T11:00:00,-08:00,AKDT +1986-10-26T10:00:00,-09:00,AKST +1987-04-05T11:00:00,-08:00,AKDT +1987-10-25T10:00:00,-09:00,AKST +1988-04-03T11:00:00,-08:00,AKDT +1988-10-30T10:00:00,-09:00,AKST +1989-04-02T11:00:00,-08:00,AKDT +1989-10-29T10:00:00,-09:00,AKST +1990-04-01T11:00:00,-08:00,AKDT +1990-10-28T10:00:00,-09:00,AKST +1991-04-07T11:00:00,-08:00,AKDT +1991-10-27T10:00:00,-09:00,AKST +1992-04-05T11:00:00,-08:00,AKDT +1992-10-25T10:00:00,-09:00,AKST +1993-04-04T11:00:00,-08:00,AKDT +1993-10-31T10:00:00,-09:00,AKST +1994-04-03T11:00:00,-08:00,AKDT +1994-10-30T10:00:00,-09:00,AKST +1995-04-02T11:00:00,-08:00,AKDT +1995-10-29T10:00:00,-09:00,AKST +1996-04-07T11:00:00,-08:00,AKDT +1996-10-27T10:00:00,-09:00,AKST +1997-04-06T11:00:00,-08:00,AKDT +1997-10-26T10:00:00,-09:00,AKST +1998-04-05T11:00:00,-08:00,AKDT +1998-10-25T10:00:00,-09:00,AKST +1999-04-04T11:00:00,-08:00,AKDT +1999-10-31T10:00:00,-09:00,AKST +2000-04-02T11:00:00,-08:00,AKDT +2000-10-29T10:00:00,-09:00,AKST +2001-04-01T11:00:00,-08:00,AKDT +2001-10-28T10:00:00,-09:00,AKST +2002-04-07T11:00:00,-08:00,AKDT +2002-10-27T10:00:00,-09:00,AKST +2003-04-06T11:00:00,-08:00,AKDT +2003-10-26T10:00:00,-09:00,AKST +2004-04-04T11:00:00,-08:00,AKDT +2004-10-31T10:00:00,-09:00,AKST +2005-04-03T11:00:00,-08:00,AKDT +2005-10-30T10:00:00,-09:00,AKST +2006-04-02T11:00:00,-08:00,AKDT +2006-10-29T10:00:00,-09:00,AKST +2007-03-11T11:00:00,-08:00,AKDT +2007-11-04T10:00:00,-09:00,AKST +2008-03-09T11:00:00,-08:00,AKDT +2008-11-02T10:00:00,-09:00,AKST +2009-03-08T11:00:00,-08:00,AKDT +2009-11-01T10:00:00,-09:00,AKST +2010-03-14T11:00:00,-08:00,AKDT +2010-11-07T10:00:00,-09:00,AKST +2011-03-13T11:00:00,-08:00,AKDT +2011-11-06T10:00:00,-09:00,AKST +2012-03-11T11:00:00,-08:00,AKDT +2012-11-04T10:00:00,-09:00,AKST +2013-03-10T11:00:00,-08:00,AKDT +2013-11-03T10:00:00,-09:00,AKST +2014-03-09T11:00:00,-08:00,AKDT +2014-11-02T10:00:00,-09:00,AKST +2015-03-08T11:00:00,-08:00,AKDT +2015-11-01T10:00:00,-09:00,AKST +2016-03-13T11:00:00,-08:00,AKDT +2016-11-06T10:00:00,-09:00,AKST +2017-03-12T11:00:00,-08:00,AKDT +2017-11-05T10:00:00,-09:00,AKST +2018-03-11T11:00:00,-08:00,AKDT +2018-11-04T10:00:00,-09:00,AKST +2019-03-10T11:00:00,-08:00,AKDT +2019-11-03T10:00:00,-09:00,AKST +2020-03-08T11:00:00,-08:00,AKDT +2020-11-01T10:00:00,-09:00,AKST +2021-03-14T11:00:00,-08:00,AKDT +2021-11-07T10:00:00,-09:00,AKST +2022-03-13T11:00:00,-08:00,AKDT +2022-11-06T10:00:00,-09:00,AKST +2023-03-12T11:00:00,-08:00,AKDT +2023-11-05T10:00:00,-09:00,AKST +2024-03-10T11:00:00,-08:00,AKDT +2024-11-03T10:00:00,-09:00,AKST +2025-03-09T11:00:00,-08:00,AKDT +2025-11-02T10:00:00,-09:00,AKST +2026-03-08T11:00:00,-08:00,AKDT +2026-11-01T10:00:00,-09:00,AKST +2027-03-14T11:00:00,-08:00,AKDT +2027-11-07T10:00:00,-09:00,AKST +2028-03-12T11:00:00,-08:00,AKDT +2028-11-05T10:00:00,-09:00,AKST +2029-03-11T11:00:00,-08:00,AKDT +2029-11-04T10:00:00,-09:00,AKST +2030-03-10T11:00:00,-08:00,AKDT +2030-11-03T10:00:00,-09:00,AKST +2031-03-09T11:00:00,-08:00,AKDT +2031-11-02T10:00:00,-09:00,AKST +2032-03-14T11:00:00,-08:00,AKDT +2032-11-07T10:00:00,-09:00,AKST +2033-03-13T11:00:00,-08:00,AKDT +2033-11-06T10:00:00,-09:00,AKST +2034-03-12T11:00:00,-08:00,AKDT +2034-11-05T10:00:00,-09:00,AKST +2035-03-11T11:00:00,-08:00,AKDT +2035-11-04T10:00:00,-09:00,AKST +2036-03-09T11:00:00,-08:00,AKDT +2036-11-02T10:00:00,-09:00,AKST +2037-03-08T11:00:00,-08:00,AKDT +2037-11-01T10:00:00,-09:00,AKST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-anguilla.txt b/desk/gub/lib/pytz/america-anguilla.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-anguilla.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-antigua.txt b/desk/gub/lib/pytz/america-antigua.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-antigua.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-araguaina.txt b/desk/gub/lib/pytz/america-araguaina.txt new file mode 100644 index 0000000..ffc8ac5 --- /dev/null +++ b/desk/gub/lib/pytz/america-araguaina.txt @@ -0,0 +1,52 @@ +Time,Offset,Name +1914-01-01T03:12:48,-03:00,-03 +1931-10-03T14:00:00,-02:00,-02 +1932-04-01T02:00:00,-03:00,-03 +1932-10-03T03:00:00,-02:00,-02 +1933-04-01T02:00:00,-03:00,-03 +1949-12-01T03:00:00,-02:00,-02 +1950-04-16T03:00:00,-03:00,-03 +1950-12-01T03:00:00,-02:00,-02 +1951-04-01T02:00:00,-03:00,-03 +1951-12-01T03:00:00,-02:00,-02 +1952-04-01T02:00:00,-03:00,-03 +1952-12-01T03:00:00,-02:00,-02 +1953-03-01T02:00:00,-03:00,-03 +1963-12-09T03:00:00,-02:00,-02 +1964-03-01T02:00:00,-03:00,-03 +1965-01-31T03:00:00,-02:00,-02 +1965-03-31T02:00:00,-03:00,-03 +1965-12-01T03:00:00,-02:00,-02 +1966-03-01T02:00:00,-03:00,-03 +1966-11-01T03:00:00,-02:00,-02 +1967-03-01T02:00:00,-03:00,-03 +1967-11-01T03:00:00,-02:00,-02 +1968-03-01T02:00:00,-03:00,-03 +1985-11-02T03:00:00,-02:00,-02 +1986-03-15T02:00:00,-03:00,-03 +1986-10-25T03:00:00,-02:00,-02 +1987-02-14T02:00:00,-03:00,-03 +1987-10-25T03:00:00,-02:00,-02 +1988-02-07T02:00:00,-03:00,-03 +1988-10-16T03:00:00,-02:00,-02 +1989-01-29T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-02-11T02:00:00,-03:00,-03 +1995-10-15T03:00:00,-02:00,-02 +1996-02-11T02:00:00,-03:00,-03 +1996-10-06T03:00:00,-02:00,-02 +1997-02-16T02:00:00,-03:00,-03 +1997-10-06T03:00:00,-02:00,-02 +1998-03-01T02:00:00,-03:00,-03 +1998-10-11T03:00:00,-02:00,-02 +1999-02-21T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-02:00,-02 +2000-02-27T02:00:00,-03:00,-03 +2000-10-08T03:00:00,-02:00,-02 +2001-02-18T02:00:00,-03:00,-03 +2001-10-14T03:00:00,-02:00,-02 +2002-02-17T02:00:00,-03:00,-03 +2002-11-03T03:00:00,-02:00,-02 +2003-02-16T02:00:00,-03:00,-03 +2012-10-21T03:00:00,-02:00,-02 +2013-02-17T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-buenos-aires.txt b/desk/gub/lib/pytz/america-argentina-buenos-aires.txt new file mode 100644 index 0000000..53cc8d8 --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-buenos-aires.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-03:00,-03 +1991-10-20T03:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 +2008-10-19T03:00:00,-02:00,-02 +2009-03-15T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-catamarca.txt b/desk/gub/lib/pytz/america-argentina-catamarca.txt new file mode 100644 index 0000000..e87920f --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-catamarca.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-04:00,-04 +1991-10-20T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-06-01T03:00:00,-04:00,-04 +2004-06-20T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-comodrivadavia.txt b/desk/gub/lib/pytz/america-argentina-comodrivadavia.txt new file mode 100644 index 0000000..e87920f --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-comodrivadavia.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-04:00,-04 +1991-10-20T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-06-01T03:00:00,-04:00,-04 +2004-06-20T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-cordoba.txt b/desk/gub/lib/pytz/america-argentina-cordoba.txt new file mode 100644 index 0000000..789ef3c --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-cordoba.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-04:00,-04 +1991-10-20T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 +2008-10-19T03:00:00,-02:00,-02 +2009-03-15T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-jujuy.txt b/desk/gub/lib/pytz/america-argentina-jujuy.txt new file mode 100644 index 0000000..8cdab3f --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-jujuy.txt @@ -0,0 +1,60 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-04:00,-04 +1990-10-28T04:00:00,-03:00,-03 +1991-03-17T03:00:00,-04:00,-04 +1991-10-06T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-la-rioja.txt b/desk/gub/lib/pytz/america-argentina-la-rioja.txt new file mode 100644 index 0000000..9251ca4 --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-la-rioja.txt @@ -0,0 +1,63 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-01T02:00:00,-04:00,-04 +1991-05-07T04:00:00,-03:00,-03 +1991-10-20T03:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-06-01T03:00:00,-04:00,-04 +2004-06-20T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-mendoza.txt b/desk/gub/lib/pytz/america-argentina-mendoza.txt new file mode 100644 index 0000000..1230653 --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-mendoza.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-04:00,-04 +1990-10-15T04:00:00,-03:00,-03 +1991-03-01T03:00:00,-04:00,-04 +1991-10-15T04:00:00,-03:00,-03 +1992-03-01T03:00:00,-04:00,-04 +1992-10-18T04:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-05-23T03:00:00,-04:00,-04 +2004-09-26T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-rio-gallegos.txt b/desk/gub/lib/pytz/america-argentina-rio-gallegos.txt new file mode 100644 index 0000000..147e36d --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-rio-gallegos.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-03:00,-03 +1991-10-20T03:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-06-01T03:00:00,-04:00,-04 +2004-06-20T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-salta.txt b/desk/gub/lib/pytz/america-argentina-salta.txt new file mode 100644 index 0000000..2e6b9dc --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-salta.txt @@ -0,0 +1,60 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-04:00,-04 +1991-10-20T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-san-juan.txt b/desk/gub/lib/pytz/america-argentina-san-juan.txt new file mode 100644 index 0000000..5bf2eed --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-san-juan.txt @@ -0,0 +1,63 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-01T02:00:00,-04:00,-04 +1991-05-07T04:00:00,-03:00,-03 +1991-10-20T03:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-05-31T03:00:00,-04:00,-04 +2004-07-25T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-san-luis.txt b/desk/gub/lib/pytz/america-argentina-san-luis.txt new file mode 100644 index 0000000..24feeb3 --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-san-luis.txt @@ -0,0 +1,63 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-14T02:00:00,-04:00,-04 +1990-10-15T04:00:00,-03:00,-03 +1991-03-01T03:00:00,-04:00,-04 +1991-06-01T04:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-05-31T03:00:00,-04:00,-04 +2004-07-25T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-01-21T02:00:00,-03:00,-03 +2008-03-09T03:00:00,-04:00,-04 +2008-10-12T04:00:00,-03:00,-03 +2009-03-08T03:00:00,-04:00,-04 +2009-10-11T04:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-tucuman.txt b/desk/gub/lib/pytz/america-argentina-tucuman.txt new file mode 100644 index 0000000..dc91815 --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-tucuman.txt @@ -0,0 +1,64 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-04:00,-04 +1991-10-20T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-06-01T03:00:00,-04:00,-04 +2004-06-13T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 +2008-10-19T03:00:00,-02:00,-02 +2009-03-15T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-argentina-ushuaia.txt b/desk/gub/lib/pytz/america-argentina-ushuaia.txt new file mode 100644 index 0000000..87d6f5f --- /dev/null +++ b/desk/gub/lib/pytz/america-argentina-ushuaia.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-03:00,-03 +1991-10-20T03:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-05-30T03:00:00,-04:00,-04 +2004-06-20T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-aruba.txt b/desk/gub/lib/pytz/america-aruba.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-aruba.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-asuncion.txt b/desk/gub/lib/pytz/america-asuncion.txt new file mode 100644 index 0000000..9d7c70d --- /dev/null +++ b/desk/gub/lib/pytz/america-asuncion.txt @@ -0,0 +1,105 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:09,AMT +1931-10-10T03:50:40,-04:00,-04 +1972-10-01T04:00:00,-03:00,-03 +1974-04-01T03:00:00,-04:00,-04 +1975-10-01T04:00:00,-03:00,-03 +1976-03-01T03:00:00,-04:00,-04 +1976-10-01T04:00:00,-03:00,-03 +1977-03-01T03:00:00,-04:00,-04 +1977-10-01T04:00:00,-03:00,-03 +1978-03-01T03:00:00,-04:00,-04 +1978-10-01T04:00:00,-03:00,-03 +1979-04-01T03:00:00,-04:00,-04 +1979-10-01T04:00:00,-03:00,-03 +1980-04-01T03:00:00,-04:00,-04 +1980-10-01T04:00:00,-03:00,-03 +1981-04-01T03:00:00,-04:00,-04 +1981-10-01T04:00:00,-03:00,-03 +1982-04-01T03:00:00,-04:00,-04 +1982-10-01T04:00:00,-03:00,-03 +1983-04-01T03:00:00,-04:00,-04 +1983-10-01T04:00:00,-03:00,-03 +1984-04-01T03:00:00,-04:00,-04 +1984-10-01T04:00:00,-03:00,-03 +1985-04-01T03:00:00,-04:00,-04 +1985-10-01T04:00:00,-03:00,-03 +1986-04-01T03:00:00,-04:00,-04 +1986-10-01T04:00:00,-03:00,-03 +1987-04-01T03:00:00,-04:00,-04 +1987-10-01T04:00:00,-03:00,-03 +1988-04-01T03:00:00,-04:00,-04 +1988-10-01T04:00:00,-03:00,-03 +1989-04-01T03:00:00,-04:00,-04 +1989-10-22T04:00:00,-03:00,-03 +1990-04-01T03:00:00,-04:00,-04 +1990-10-01T04:00:00,-03:00,-03 +1991-04-01T03:00:00,-04:00,-04 +1991-10-06T04:00:00,-03:00,-03 +1992-03-01T03:00:00,-04:00,-04 +1992-10-05T04:00:00,-03:00,-03 +1993-03-31T03:00:00,-04:00,-04 +1993-10-01T04:00:00,-03:00,-03 +1994-02-27T03:00:00,-04:00,-04 +1994-10-01T04:00:00,-03:00,-03 +1995-02-26T03:00:00,-04:00,-04 +1995-10-01T04:00:00,-03:00,-03 +1996-03-01T03:00:00,-04:00,-04 +1996-10-06T04:00:00,-03:00,-03 +1997-02-23T03:00:00,-04:00,-04 +1997-10-05T04:00:00,-03:00,-03 +1998-03-01T03:00:00,-04:00,-04 +1998-10-04T04:00:00,-03:00,-03 +1999-03-07T03:00:00,-04:00,-04 +1999-10-03T04:00:00,-03:00,-03 +2000-03-05T03:00:00,-04:00,-04 +2000-10-01T04:00:00,-03:00,-03 +2001-03-04T03:00:00,-04:00,-04 +2001-10-07T04:00:00,-03:00,-03 +2002-04-07T03:00:00,-04:00,-04 +2002-09-01T04:00:00,-03:00,-03 +2003-04-06T03:00:00,-04:00,-04 +2003-09-07T04:00:00,-03:00,-03 +2004-04-04T03:00:00,-04:00,-04 +2004-10-17T04:00:00,-03:00,-03 +2005-03-13T03:00:00,-04:00,-04 +2005-10-16T04:00:00,-03:00,-03 +2006-03-12T03:00:00,-04:00,-04 +2006-10-15T04:00:00,-03:00,-03 +2007-03-11T03:00:00,-04:00,-04 +2007-10-21T04:00:00,-03:00,-03 +2008-03-09T03:00:00,-04:00,-04 +2008-10-19T04:00:00,-03:00,-03 +2009-03-08T03:00:00,-04:00,-04 +2009-10-18T04:00:00,-03:00,-03 +2010-04-11T03:00:00,-04:00,-04 +2010-10-03T04:00:00,-03:00,-03 +2011-04-10T03:00:00,-04:00,-04 +2011-10-02T04:00:00,-03:00,-03 +2012-04-08T03:00:00,-04:00,-04 +2012-10-07T04:00:00,-03:00,-03 +2013-03-24T03:00:00,-04:00,-04 +2013-10-06T04:00:00,-03:00,-03 +2014-03-23T03:00:00,-04:00,-04 +2014-10-05T04:00:00,-03:00,-03 +2015-03-22T03:00:00,-04:00,-04 +2015-10-04T04:00:00,-03:00,-03 +2016-03-27T03:00:00,-04:00,-04 +2016-10-02T04:00:00,-03:00,-03 +2017-03-26T03:00:00,-04:00,-04 +2017-10-01T04:00:00,-03:00,-03 +2018-03-25T03:00:00,-04:00,-04 +2018-10-07T04:00:00,-03:00,-03 +2019-03-24T03:00:00,-04:00,-04 +2019-10-06T04:00:00,-03:00,-03 +2020-03-22T03:00:00,-04:00,-04 +2020-10-04T04:00:00,-03:00,-03 +2021-03-28T03:00:00,-04:00,-04 +2021-10-03T04:00:00,-03:00,-03 +2022-03-27T03:00:00,-04:00,-04 +2022-10-02T04:00:00,-03:00,-03 +2023-03-26T03:00:00,-04:00,-04 +2023-10-01T04:00:00,-03:00,-03 +2024-03-24T03:00:00,-04:00,-04 +2024-10-06T04:00:00,-03:00,-03 +2024-10-15T03:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-atikokan.txt b/desk/gub/lib/pytz/america-atikokan.txt new file mode 100644 index 0000000..069fd8c --- /dev/null +++ b/desk/gub/lib/pytz/america-atikokan.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:40,CMT +1908-04-22T05:19:36,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-atka.txt b/desk/gub/lib/pytz/america-atka.txt new file mode 100644 index 0000000..00931da --- /dev/null +++ b/desk/gub/lib/pytz/america-atka.txt @@ -0,0 +1,146 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:13,LMT +1901-12-13T20:45:52,-11:00,NST +1942-02-09T13:00:00,-10:00,NWT +1945-08-14T23:00:00,-10:00,NPT +1945-09-30T12:00:00,-11:00,NST +1967-04-01T11:00:00,-11:00,BST +1969-04-27T13:00:00,-10:00,BDT +1969-10-26T12:00:00,-11:00,BST +1970-04-26T13:00:00,-10:00,BDT +1970-10-25T12:00:00,-11:00,BST +1971-04-25T13:00:00,-10:00,BDT +1971-10-31T12:00:00,-11:00,BST +1972-04-30T13:00:00,-10:00,BDT +1972-10-29T12:00:00,-11:00,BST +1973-04-29T13:00:00,-10:00,BDT +1973-10-28T12:00:00,-11:00,BST +1974-01-06T13:00:00,-10:00,BDT +1974-10-27T12:00:00,-11:00,BST +1975-02-23T13:00:00,-10:00,BDT +1975-10-26T12:00:00,-11:00,BST +1976-04-25T13:00:00,-10:00,BDT +1976-10-31T12:00:00,-11:00,BST +1977-04-24T13:00:00,-10:00,BDT +1977-10-30T12:00:00,-11:00,BST +1978-04-30T13:00:00,-10:00,BDT +1978-10-29T12:00:00,-11:00,BST +1979-04-29T13:00:00,-10:00,BDT +1979-10-28T12:00:00,-11:00,BST +1980-04-27T13:00:00,-10:00,BDT +1980-10-26T12:00:00,-11:00,BST +1981-04-26T13:00:00,-10:00,BDT +1981-10-25T12:00:00,-11:00,BST +1982-04-25T13:00:00,-10:00,BDT +1982-10-31T12:00:00,-11:00,BST +1983-04-24T13:00:00,-10:00,BDT +1983-10-30T12:00:00,-10:00,AHST +1983-11-30T10:00:00,-10:00,HST +1984-04-29T12:00:00,-09:00,HDT +1984-10-28T11:00:00,-10:00,HST +1985-04-28T12:00:00,-09:00,HDT +1985-10-27T11:00:00,-10:00,HST +1986-04-27T12:00:00,-09:00,HDT +1986-10-26T11:00:00,-10:00,HST +1987-04-05T12:00:00,-09:00,HDT +1987-10-25T11:00:00,-10:00,HST +1988-04-03T12:00:00,-09:00,HDT +1988-10-30T11:00:00,-10:00,HST +1989-04-02T12:00:00,-09:00,HDT +1989-10-29T11:00:00,-10:00,HST +1990-04-01T12:00:00,-09:00,HDT +1990-10-28T11:00:00,-10:00,HST +1991-04-07T12:00:00,-09:00,HDT +1991-10-27T11:00:00,-10:00,HST +1992-04-05T12:00:00,-09:00,HDT +1992-10-25T11:00:00,-10:00,HST +1993-04-04T12:00:00,-09:00,HDT +1993-10-31T11:00:00,-10:00,HST +1994-04-03T12:00:00,-09:00,HDT +1994-10-30T11:00:00,-10:00,HST +1995-04-02T12:00:00,-09:00,HDT +1995-10-29T11:00:00,-10:00,HST +1996-04-07T12:00:00,-09:00,HDT +1996-10-27T11:00:00,-10:00,HST +1997-04-06T12:00:00,-09:00,HDT +1997-10-26T11:00:00,-10:00,HST +1998-04-05T12:00:00,-09:00,HDT +1998-10-25T11:00:00,-10:00,HST +1999-04-04T12:00:00,-09:00,HDT +1999-10-31T11:00:00,-10:00,HST +2000-04-02T12:00:00,-09:00,HDT +2000-10-29T11:00:00,-10:00,HST +2001-04-01T12:00:00,-09:00,HDT +2001-10-28T11:00:00,-10:00,HST +2002-04-07T12:00:00,-09:00,HDT +2002-10-27T11:00:00,-10:00,HST +2003-04-06T12:00:00,-09:00,HDT +2003-10-26T11:00:00,-10:00,HST +2004-04-04T12:00:00,-09:00,HDT +2004-10-31T11:00:00,-10:00,HST +2005-04-03T12:00:00,-09:00,HDT +2005-10-30T11:00:00,-10:00,HST +2006-04-02T12:00:00,-09:00,HDT +2006-10-29T11:00:00,-10:00,HST +2007-03-11T12:00:00,-09:00,HDT +2007-11-04T11:00:00,-10:00,HST +2008-03-09T12:00:00,-09:00,HDT +2008-11-02T11:00:00,-10:00,HST +2009-03-08T12:00:00,-09:00,HDT +2009-11-01T11:00:00,-10:00,HST +2010-03-14T12:00:00,-09:00,HDT +2010-11-07T11:00:00,-10:00,HST +2011-03-13T12:00:00,-09:00,HDT +2011-11-06T11:00:00,-10:00,HST +2012-03-11T12:00:00,-09:00,HDT +2012-11-04T11:00:00,-10:00,HST +2013-03-10T12:00:00,-09:00,HDT +2013-11-03T11:00:00,-10:00,HST +2014-03-09T12:00:00,-09:00,HDT +2014-11-02T11:00:00,-10:00,HST +2015-03-08T12:00:00,-09:00,HDT +2015-11-01T11:00:00,-10:00,HST +2016-03-13T12:00:00,-09:00,HDT +2016-11-06T11:00:00,-10:00,HST +2017-03-12T12:00:00,-09:00,HDT +2017-11-05T11:00:00,-10:00,HST +2018-03-11T12:00:00,-09:00,HDT +2018-11-04T11:00:00,-10:00,HST +2019-03-10T12:00:00,-09:00,HDT +2019-11-03T11:00:00,-10:00,HST +2020-03-08T12:00:00,-09:00,HDT +2020-11-01T11:00:00,-10:00,HST +2021-03-14T12:00:00,-09:00,HDT +2021-11-07T11:00:00,-10:00,HST +2022-03-13T12:00:00,-09:00,HDT +2022-11-06T11:00:00,-10:00,HST +2023-03-12T12:00:00,-09:00,HDT +2023-11-05T11:00:00,-10:00,HST +2024-03-10T12:00:00,-09:00,HDT +2024-11-03T11:00:00,-10:00,HST +2025-03-09T12:00:00,-09:00,HDT +2025-11-02T11:00:00,-10:00,HST +2026-03-08T12:00:00,-09:00,HDT +2026-11-01T11:00:00,-10:00,HST +2027-03-14T12:00:00,-09:00,HDT +2027-11-07T11:00:00,-10:00,HST +2028-03-12T12:00:00,-09:00,HDT +2028-11-05T11:00:00,-10:00,HST +2029-03-11T12:00:00,-09:00,HDT +2029-11-04T11:00:00,-10:00,HST +2030-03-10T12:00:00,-09:00,HDT +2030-11-03T11:00:00,-10:00,HST +2031-03-09T12:00:00,-09:00,HDT +2031-11-02T11:00:00,-10:00,HST +2032-03-14T12:00:00,-09:00,HDT +2032-11-07T11:00:00,-10:00,HST +2033-03-13T12:00:00,-09:00,HDT +2033-11-06T11:00:00,-10:00,HST +2034-03-12T12:00:00,-09:00,HDT +2034-11-05T11:00:00,-10:00,HST +2035-03-11T12:00:00,-09:00,HDT +2035-11-04T11:00:00,-10:00,HST +2036-03-09T12:00:00,-09:00,HDT +2036-11-02T11:00:00,-10:00,HST +2037-03-08T12:00:00,-09:00,HDT +2037-11-01T11:00:00,-10:00,HST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-bahia-banderas.txt b/desk/gub/lib/pytz/america-bahia-banderas.txt new file mode 100644 index 0000000..c2d6e2c --- /dev/null +++ b/desk/gub/lib/pytz/america-bahia-banderas.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1942-04-24T06:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-05-06T09:00:00,-06:00,MDT +2001-09-30T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-04-01T09:00:00,-06:00,MDT +2007-10-28T08:00:00,-07:00,MST +2008-04-06T09:00:00,-06:00,MDT +2008-10-26T08:00:00,-07:00,MST +2009-04-05T09:00:00,-06:00,MDT +2009-10-25T08:00:00,-07:00,MST +2010-04-04T09:00:00,-05:00,CDT +2010-10-31T07:00:00,-06:00,CST +2011-04-03T08:00:00,-05:00,CDT +2011-10-30T07:00:00,-06:00,CST +2012-04-01T08:00:00,-05:00,CDT +2012-10-28T07:00:00,-06:00,CST +2013-04-07T08:00:00,-05:00,CDT +2013-10-27T07:00:00,-06:00,CST +2014-04-06T08:00:00,-05:00,CDT +2014-10-26T07:00:00,-06:00,CST +2015-04-05T08:00:00,-05:00,CDT +2015-10-25T07:00:00,-06:00,CST +2016-04-03T08:00:00,-05:00,CDT +2016-10-30T07:00:00,-06:00,CST +2017-04-02T08:00:00,-05:00,CDT +2017-10-29T07:00:00,-06:00,CST +2018-04-01T08:00:00,-05:00,CDT +2018-10-28T07:00:00,-06:00,CST +2019-04-07T08:00:00,-05:00,CDT +2019-10-27T07:00:00,-06:00,CST +2020-04-05T08:00:00,-05:00,CDT +2020-10-25T07:00:00,-06:00,CST +2021-04-04T08:00:00,-05:00,CDT +2021-10-31T07:00:00,-06:00,CST +2022-04-03T08:00:00,-05:00,CDT +2022-10-30T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-bahia.txt b/desk/gub/lib/pytz/america-bahia.txt new file mode 100644 index 0000000..048b257 --- /dev/null +++ b/desk/gub/lib/pytz/america-bahia.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1914-01-01T02:34:04,-03:00,-03 +1931-10-03T14:00:00,-02:00,-02 +1932-04-01T02:00:00,-03:00,-03 +1932-10-03T03:00:00,-02:00,-02 +1933-04-01T02:00:00,-03:00,-03 +1949-12-01T03:00:00,-02:00,-02 +1950-04-16T03:00:00,-03:00,-03 +1950-12-01T03:00:00,-02:00,-02 +1951-04-01T02:00:00,-03:00,-03 +1951-12-01T03:00:00,-02:00,-02 +1952-04-01T02:00:00,-03:00,-03 +1952-12-01T03:00:00,-02:00,-02 +1953-03-01T02:00:00,-03:00,-03 +1963-12-09T03:00:00,-02:00,-02 +1964-03-01T02:00:00,-03:00,-03 +1965-01-31T03:00:00,-02:00,-02 +1965-03-31T02:00:00,-03:00,-03 +1965-12-01T03:00:00,-02:00,-02 +1966-03-01T02:00:00,-03:00,-03 +1966-11-01T03:00:00,-02:00,-02 +1967-03-01T02:00:00,-03:00,-03 +1967-11-01T03:00:00,-02:00,-02 +1968-03-01T02:00:00,-03:00,-03 +1985-11-02T03:00:00,-02:00,-02 +1986-03-15T02:00:00,-03:00,-03 +1986-10-25T03:00:00,-02:00,-02 +1987-02-14T02:00:00,-03:00,-03 +1987-10-25T03:00:00,-02:00,-02 +1988-02-07T02:00:00,-03:00,-03 +1988-10-16T03:00:00,-02:00,-02 +1989-01-29T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-02-11T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-02-17T02:00:00,-03:00,-03 +1991-10-20T03:00:00,-02:00,-02 +1992-02-09T02:00:00,-03:00,-03 +1992-10-25T03:00:00,-02:00,-02 +1993-01-31T02:00:00,-03:00,-03 +1993-10-17T03:00:00,-02:00,-02 +1994-02-20T02:00:00,-03:00,-03 +1994-10-16T03:00:00,-02:00,-02 +1995-02-19T02:00:00,-03:00,-03 +1995-10-15T03:00:00,-02:00,-02 +1996-02-11T02:00:00,-03:00,-03 +1996-10-06T03:00:00,-02:00,-02 +1997-02-16T02:00:00,-03:00,-03 +1997-10-06T03:00:00,-02:00,-02 +1998-03-01T02:00:00,-03:00,-03 +1998-10-11T03:00:00,-02:00,-02 +1999-02-21T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-02:00,-02 +2000-02-27T02:00:00,-03:00,-03 +2000-10-08T03:00:00,-02:00,-02 +2001-02-18T02:00:00,-03:00,-03 +2001-10-14T03:00:00,-02:00,-02 +2002-02-17T02:00:00,-03:00,-03 +2002-11-03T03:00:00,-02:00,-02 +2003-02-16T02:00:00,-03:00,-03 +2011-10-16T03:00:00,-02:00,-02 +2012-02-26T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-barbados.txt b/desk/gub/lib/pytz/america-barbados.txt new file mode 100644 index 0000000..2d9127d --- /dev/null +++ b/desk/gub/lib/pytz/america-barbados.txt @@ -0,0 +1,16 @@ +Time,Offset,Name +1911-08-28T03:58:29,-04:00,AST +1942-04-19T05:00:00,-03:00,ADT +1942-08-31T06:00:00,-04:00,AST +1943-05-02T05:00:00,-03:00,ADT +1943-09-05T06:00:00,-04:00,AST +1944-04-10T05:00:00,-04:30,-0330 +1944-09-10T06:00:00,-04:00,AST +1977-06-12T06:00:00,-03:00,ADT +1977-10-02T05:00:00,-04:00,AST +1978-04-16T06:00:00,-03:00,ADT +1978-10-01T05:00:00,-04:00,AST +1979-04-15T06:00:00,-03:00,ADT +1979-09-30T05:00:00,-04:00,AST +1980-04-20T06:00:00,-03:00,ADT +1980-09-25T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-belem.txt b/desk/gub/lib/pytz/america-belem.txt new file mode 100644 index 0000000..754438c --- /dev/null +++ b/desk/gub/lib/pytz/america-belem.txt @@ -0,0 +1,30 @@ +Time,Offset,Name +1914-01-01T03:13:56,-03:00,-03 +1931-10-03T14:00:00,-02:00,-02 +1932-04-01T02:00:00,-03:00,-03 +1932-10-03T03:00:00,-02:00,-02 +1933-04-01T02:00:00,-03:00,-03 +1949-12-01T03:00:00,-02:00,-02 +1950-04-16T03:00:00,-03:00,-03 +1950-12-01T03:00:00,-02:00,-02 +1951-04-01T02:00:00,-03:00,-03 +1951-12-01T03:00:00,-02:00,-02 +1952-04-01T02:00:00,-03:00,-03 +1952-12-01T03:00:00,-02:00,-02 +1953-03-01T02:00:00,-03:00,-03 +1963-12-09T03:00:00,-02:00,-02 +1964-03-01T02:00:00,-03:00,-03 +1965-01-31T03:00:00,-02:00,-02 +1965-03-31T02:00:00,-03:00,-03 +1965-12-01T03:00:00,-02:00,-02 +1966-03-01T02:00:00,-03:00,-03 +1966-11-01T03:00:00,-02:00,-02 +1967-03-01T02:00:00,-03:00,-03 +1967-11-01T03:00:00,-02:00,-02 +1968-03-01T02:00:00,-03:00,-03 +1985-11-02T03:00:00,-02:00,-02 +1986-03-15T02:00:00,-03:00,-03 +1986-10-25T03:00:00,-02:00,-02 +1987-02-14T02:00:00,-03:00,-03 +1987-10-25T03:00:00,-02:00,-02 +1988-02-07T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-belize.txt b/desk/gub/lib/pytz/america-belize.txt new file mode 100644 index 0000000..4192e82 --- /dev/null +++ b/desk/gub/lib/pytz/america-belize.txt @@ -0,0 +1,99 @@ +Time,Offset,Name +1912-04-01T05:52:48,-06:00,CST +1918-10-06T06:00:00,-06:30,-0530 +1919-02-09T05:30:00,-06:00,CST +1919-10-05T06:00:00,-06:30,-0530 +1920-02-15T05:30:00,-06:00,CST +1920-10-03T06:00:00,-06:30,-0530 +1921-02-13T05:30:00,-06:00,CST +1921-10-02T06:00:00,-06:30,-0530 +1922-02-12T05:30:00,-06:00,CST +1922-10-08T06:00:00,-06:30,-0530 +1923-02-11T05:30:00,-06:00,CST +1923-10-07T06:00:00,-06:30,-0530 +1924-02-10T05:30:00,-06:00,CST +1924-10-05T06:00:00,-06:30,-0530 +1925-02-15T05:30:00,-06:00,CST +1925-10-04T06:00:00,-06:30,-0530 +1926-02-14T05:30:00,-06:00,CST +1926-10-03T06:00:00,-06:30,-0530 +1927-02-13T05:30:00,-06:00,CST +1927-10-02T06:00:00,-06:30,-0530 +1928-02-12T05:30:00,-06:00,CST +1928-10-07T06:00:00,-06:30,-0530 +1929-02-10T05:30:00,-06:00,CST +1929-10-06T06:00:00,-06:30,-0530 +1930-02-09T05:30:00,-06:00,CST +1930-10-05T06:00:00,-06:30,-0530 +1931-02-15T05:30:00,-06:00,CST +1931-10-04T06:00:00,-06:30,-0530 +1932-02-14T05:30:00,-06:00,CST +1932-10-02T06:00:00,-06:30,-0530 +1933-02-12T05:30:00,-06:00,CST +1933-10-08T06:00:00,-06:30,-0530 +1934-02-11T05:30:00,-06:00,CST +1934-10-07T06:00:00,-06:30,-0530 +1935-02-10T05:30:00,-06:00,CST +1935-10-06T06:00:00,-06:30,-0530 +1936-02-09T05:30:00,-06:00,CST +1936-10-04T06:00:00,-06:30,-0530 +1937-02-14T05:30:00,-06:00,CST +1937-10-03T06:00:00,-06:30,-0530 +1938-02-13T05:30:00,-06:00,CST +1938-10-02T06:00:00,-06:30,-0530 +1939-02-12T05:30:00,-06:00,CST +1939-10-08T06:00:00,-06:30,-0530 +1940-02-11T05:30:00,-06:00,CST +1940-10-06T06:00:00,-06:30,-0530 +1941-02-09T05:30:00,-06:00,CST +1941-10-05T06:00:00,-06:30,-0530 +1942-02-15T05:30:00,-06:00,CST +1942-06-28T06:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-12-16T05:00:00,-06:00,CST +1947-10-05T06:00:00,-06:30,-0530 +1948-02-15T05:30:00,-06:00,CST +1948-10-03T06:00:00,-06:30,-0530 +1949-02-13T05:30:00,-06:00,CST +1949-10-02T06:00:00,-06:30,-0530 +1950-02-12T05:30:00,-06:00,CST +1950-10-08T06:00:00,-06:30,-0530 +1951-02-11T05:30:00,-06:00,CST +1951-10-07T06:00:00,-06:30,-0530 +1952-02-10T05:30:00,-06:00,CST +1952-10-05T06:00:00,-06:30,-0530 +1953-02-15T05:30:00,-06:00,CST +1953-10-04T06:00:00,-06:30,-0530 +1954-02-14T05:30:00,-06:00,CST +1954-10-03T06:00:00,-06:30,-0530 +1955-02-13T05:30:00,-06:00,CST +1955-10-02T06:00:00,-06:30,-0530 +1956-02-12T05:30:00,-06:00,CST +1956-10-07T06:00:00,-06:30,-0530 +1957-02-10T05:30:00,-06:00,CST +1957-10-06T06:00:00,-06:30,-0530 +1958-02-09T05:30:00,-06:00,CST +1958-10-05T06:00:00,-06:30,-0530 +1959-02-15T05:30:00,-06:00,CST +1959-10-04T06:00:00,-06:30,-0530 +1960-02-14T05:30:00,-06:00,CST +1960-10-02T06:00:00,-06:30,-0530 +1961-02-12T05:30:00,-06:00,CST +1961-10-08T06:00:00,-06:30,-0530 +1962-02-11T05:30:00,-06:00,CST +1962-10-07T06:00:00,-06:30,-0530 +1963-02-10T05:30:00,-06:00,CST +1963-10-06T06:00:00,-06:30,-0530 +1964-02-09T05:30:00,-06:00,CST +1964-10-04T06:00:00,-06:30,-0530 +1965-02-14T05:30:00,-06:00,CST +1965-10-03T06:00:00,-06:30,-0530 +1966-02-13T05:30:00,-06:00,CST +1966-10-02T06:00:00,-06:30,-0530 +1967-02-12T05:30:00,-06:00,CST +1967-10-08T06:00:00,-06:30,-0530 +1968-02-11T05:30:00,-06:00,CST +1973-12-05T06:00:00,-05:00,CDT +1974-02-09T05:00:00,-06:00,CST +1982-12-18T06:00:00,-05:00,CDT +1983-02-12T05:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-blanc-sablon.txt b/desk/gub/lib/pytz/america-blanc-sablon.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-blanc-sablon.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-boa-vista.txt b/desk/gub/lib/pytz/america-boa-vista.txt new file mode 100644 index 0000000..930dbf0 --- /dev/null +++ b/desk/gub/lib/pytz/america-boa-vista.txt @@ -0,0 +1,34 @@ +Time,Offset,Name +1914-01-01T04:02:40,-04:00,-04 +1931-10-03T15:00:00,-03:00,-03 +1932-04-01T03:00:00,-04:00,-04 +1932-10-03T04:00:00,-03:00,-03 +1933-04-01T03:00:00,-04:00,-04 +1949-12-01T04:00:00,-03:00,-03 +1950-04-16T04:00:00,-04:00,-04 +1950-12-01T04:00:00,-03:00,-03 +1951-04-01T03:00:00,-04:00,-04 +1951-12-01T04:00:00,-03:00,-03 +1952-04-01T03:00:00,-04:00,-04 +1952-12-01T04:00:00,-03:00,-03 +1953-03-01T03:00:00,-04:00,-04 +1963-12-09T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1965-01-31T04:00:00,-03:00,-03 +1965-03-31T03:00:00,-04:00,-04 +1965-12-01T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-11-01T04:00:00,-03:00,-03 +1967-03-01T03:00:00,-04:00,-04 +1967-11-01T04:00:00,-03:00,-03 +1968-03-01T03:00:00,-04:00,-04 +1985-11-02T04:00:00,-03:00,-03 +1986-03-15T03:00:00,-04:00,-04 +1986-10-25T04:00:00,-03:00,-03 +1987-02-14T03:00:00,-04:00,-04 +1987-10-25T04:00:00,-03:00,-03 +1988-02-07T03:00:00,-04:00,-04 +1999-10-03T04:00:00,-03:00,-03 +2000-02-27T03:00:00,-04:00,-04 +2000-10-08T04:00:00,-03:00,-03 +2000-10-15T03:00:00,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-bogota.txt b/desk/gub/lib/pytz/america-bogota.txt new file mode 100644 index 0000000..2d0cbb5 --- /dev/null +++ b/desk/gub/lib/pytz/america-bogota.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:04,BMT +1914-11-23T04:56:16,-05:00,-05 +1992-05-03T05:00:00,-04:00,-04 +1993-02-07T04:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-boise.txt b/desk/gub/lib/pytz/america-boise.txt new file mode 100644 index 0000000..d2d4e1d --- /dev/null +++ b/desk/gub/lib/pytz/america-boise.txt @@ -0,0 +1,152 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:00,PST +1918-03-31T10:00:00,-07:00,PDT +1918-10-27T09:00:00,-08:00,PST +1919-03-30T10:00:00,-07:00,PDT +1919-10-26T09:00:00,-08:00,PST +1923-05-13T10:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST +1968-04-28T09:00:00,-06:00,MDT +1968-10-27T08:00:00,-07:00,MST +1969-04-27T09:00:00,-06:00,MDT +1969-10-26T08:00:00,-07:00,MST +1970-04-26T09:00:00,-06:00,MDT +1970-10-25T08:00:00,-07:00,MST +1971-04-25T09:00:00,-06:00,MDT +1971-10-31T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-02-03T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-02-23T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-buenos-aires.txt b/desk/gub/lib/pytz/america-buenos-aires.txt new file mode 100644 index 0000000..53cc8d8 --- /dev/null +++ b/desk/gub/lib/pytz/america-buenos-aires.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-03:00,-03 +1991-10-20T03:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 +2008-10-19T03:00:00,-02:00,-02 +2009-03-15T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-cambridge-bay.txt b/desk/gub/lib/pytz/america-cambridge-bay.txt new file mode 100644 index 0000000..4895de7 --- /dev/null +++ b/desk/gub/lib/pytz/america-cambridge-bay.txt @@ -0,0 +1,139 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1920-01-01T00:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-04-28T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-04-27T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-05:00,EST +2000-11-05T05:00:00,-06:00,CST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-campo-grande.txt b/desk/gub/lib/pytz/america-campo-grande.txt new file mode 100644 index 0000000..3bf7571 --- /dev/null +++ b/desk/gub/lib/pytz/america-campo-grande.txt @@ -0,0 +1,92 @@ +Time,Offset,Name +1914-01-01T03:38:28,-04:00,-04 +1931-10-03T15:00:00,-03:00,-03 +1932-04-01T03:00:00,-04:00,-04 +1932-10-03T04:00:00,-03:00,-03 +1933-04-01T03:00:00,-04:00,-04 +1949-12-01T04:00:00,-03:00,-03 +1950-04-16T04:00:00,-04:00,-04 +1950-12-01T04:00:00,-03:00,-03 +1951-04-01T03:00:00,-04:00,-04 +1951-12-01T04:00:00,-03:00,-03 +1952-04-01T03:00:00,-04:00,-04 +1952-12-01T04:00:00,-03:00,-03 +1953-03-01T03:00:00,-04:00,-04 +1963-12-09T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1965-01-31T04:00:00,-03:00,-03 +1965-03-31T03:00:00,-04:00,-04 +1965-12-01T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-11-01T04:00:00,-03:00,-03 +1967-03-01T03:00:00,-04:00,-04 +1967-11-01T04:00:00,-03:00,-03 +1968-03-01T03:00:00,-04:00,-04 +1985-11-02T04:00:00,-03:00,-03 +1986-03-15T03:00:00,-04:00,-04 +1986-10-25T04:00:00,-03:00,-03 +1987-02-14T03:00:00,-04:00,-04 +1987-10-25T04:00:00,-03:00,-03 +1988-02-07T03:00:00,-04:00,-04 +1988-10-16T04:00:00,-03:00,-03 +1989-01-29T03:00:00,-04:00,-04 +1989-10-15T04:00:00,-03:00,-03 +1990-02-11T03:00:00,-04:00,-04 +1990-10-21T04:00:00,-03:00,-03 +1991-02-17T03:00:00,-04:00,-04 +1991-10-20T04:00:00,-03:00,-03 +1992-02-09T03:00:00,-04:00,-04 +1992-10-25T04:00:00,-03:00,-03 +1993-01-31T03:00:00,-04:00,-04 +1993-10-17T04:00:00,-03:00,-03 +1994-02-20T03:00:00,-04:00,-04 +1994-10-16T04:00:00,-03:00,-03 +1995-02-19T03:00:00,-04:00,-04 +1995-10-15T04:00:00,-03:00,-03 +1996-02-11T03:00:00,-04:00,-04 +1996-10-06T04:00:00,-03:00,-03 +1997-02-16T03:00:00,-04:00,-04 +1997-10-06T04:00:00,-03:00,-03 +1998-03-01T03:00:00,-04:00,-04 +1998-10-11T04:00:00,-03:00,-03 +1999-02-21T03:00:00,-04:00,-04 +1999-10-03T04:00:00,-03:00,-03 +2000-02-27T03:00:00,-04:00,-04 +2000-10-08T04:00:00,-03:00,-03 +2001-02-18T03:00:00,-04:00,-04 +2001-10-14T04:00:00,-03:00,-03 +2002-02-17T03:00:00,-04:00,-04 +2002-11-03T04:00:00,-03:00,-03 +2003-02-16T03:00:00,-04:00,-04 +2003-10-19T04:00:00,-03:00,-03 +2004-02-15T03:00:00,-04:00,-04 +2004-11-02T04:00:00,-03:00,-03 +2005-02-20T03:00:00,-04:00,-04 +2005-10-16T04:00:00,-03:00,-03 +2006-02-19T03:00:00,-04:00,-04 +2006-11-05T04:00:00,-03:00,-03 +2007-02-25T03:00:00,-04:00,-04 +2007-10-14T04:00:00,-03:00,-03 +2008-02-17T03:00:00,-04:00,-04 +2008-10-19T04:00:00,-03:00,-03 +2009-02-15T03:00:00,-04:00,-04 +2009-10-18T04:00:00,-03:00,-03 +2010-02-21T03:00:00,-04:00,-04 +2010-10-17T04:00:00,-03:00,-03 +2011-02-20T03:00:00,-04:00,-04 +2011-10-16T04:00:00,-03:00,-03 +2012-02-26T03:00:00,-04:00,-04 +2012-10-21T04:00:00,-03:00,-03 +2013-02-17T03:00:00,-04:00,-04 +2013-10-20T04:00:00,-03:00,-03 +2014-02-16T03:00:00,-04:00,-04 +2014-10-19T04:00:00,-03:00,-03 +2015-02-22T03:00:00,-04:00,-04 +2015-10-18T04:00:00,-03:00,-03 +2016-02-21T03:00:00,-04:00,-04 +2016-10-16T04:00:00,-03:00,-03 +2017-02-19T03:00:00,-04:00,-04 +2017-10-15T04:00:00,-03:00,-03 +2018-02-18T03:00:00,-04:00,-04 +2018-11-04T04:00:00,-03:00,-03 +2019-02-17T03:00:00,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-cancun.txt b/desk/gub/lib/pytz/america-cancun.txt new file mode 100644 index 0000000..916ca6b --- /dev/null +++ b/desk/gub/lib/pytz/america-cancun.txt @@ -0,0 +1,44 @@ +Time,Offset,Name +1922-01-01T06:00:00,-06:00,CST +1981-12-26T08:00:00,-05:00,EST +1983-01-04T05:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-08-02T06:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-05-06T08:00:00,-05:00,CDT +2001-09-30T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-04-01T08:00:00,-05:00,CDT +2007-10-28T07:00:00,-06:00,CST +2008-04-06T08:00:00,-05:00,CDT +2008-10-26T07:00:00,-06:00,CST +2009-04-05T08:00:00,-05:00,CDT +2009-10-25T07:00:00,-06:00,CST +2010-04-04T08:00:00,-05:00,CDT +2010-10-31T07:00:00,-06:00,CST +2011-04-03T08:00:00,-05:00,CDT +2011-10-30T07:00:00,-06:00,CST +2012-04-01T08:00:00,-05:00,CDT +2012-10-28T07:00:00,-06:00,CST +2013-04-07T08:00:00,-05:00,CDT +2013-10-27T07:00:00,-06:00,CST +2014-04-06T08:00:00,-05:00,CDT +2014-10-26T07:00:00,-06:00,CST +2015-02-01T08:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-caracas.txt b/desk/gub/lib/pytz/america-caracas.txt new file mode 100644 index 0000000..b2689d7 --- /dev/null +++ b/desk/gub/lib/pytz/america-caracas.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:32,CMT +1912-02-12T04:27:40,-05:30,-0430 +1965-01-01T04:30:00,-04:00,-04 +2007-12-09T07:00:00,-05:30,-0430 +2016-05-01T07:00:00,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-catamarca.txt b/desk/gub/lib/pytz/america-catamarca.txt new file mode 100644 index 0000000..e87920f --- /dev/null +++ b/desk/gub/lib/pytz/america-catamarca.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-04:00,-04 +1991-10-20T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-06-01T03:00:00,-04:00,-04 +2004-06-20T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-cayenne.txt b/desk/gub/lib/pytz/america-cayenne.txt new file mode 100644 index 0000000..df98268 --- /dev/null +++ b/desk/gub/lib/pytz/america-cayenne.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1911-07-01T03:29:20,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-cayman.txt b/desk/gub/lib/pytz/america-cayman.txt new file mode 100644 index 0000000..069fd8c --- /dev/null +++ b/desk/gub/lib/pytz/america-cayman.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:40,CMT +1908-04-22T05:19:36,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-chicago.txt b/desk/gub/lib/pytz/america-chicago.txt new file mode 100644 index 0000000..cd8afcc --- /dev/null +++ b/desk/gub/lib/pytz/america-chicago.txt @@ -0,0 +1,237 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1920-06-13T08:00:00,-05:00,CDT +1920-10-31T07:00:00,-06:00,CST +1921-03-27T08:00:00,-05:00,CDT +1921-10-30T07:00:00,-06:00,CST +1922-04-30T08:00:00,-05:00,CDT +1922-09-24T07:00:00,-06:00,CST +1923-04-29T08:00:00,-05:00,CDT +1923-09-30T07:00:00,-06:00,CST +1924-04-27T08:00:00,-05:00,CDT +1924-09-28T07:00:00,-06:00,CST +1925-04-26T08:00:00,-05:00,CDT +1925-09-27T07:00:00,-06:00,CST +1926-04-25T08:00:00,-05:00,CDT +1926-09-26T07:00:00,-06:00,CST +1927-04-24T08:00:00,-05:00,CDT +1927-09-25T07:00:00,-06:00,CST +1928-04-29T08:00:00,-05:00,CDT +1928-09-30T07:00:00,-06:00,CST +1929-04-28T08:00:00,-05:00,CDT +1929-09-29T07:00:00,-06:00,CST +1930-04-27T08:00:00,-05:00,CDT +1930-09-28T07:00:00,-06:00,CST +1931-04-26T08:00:00,-05:00,CDT +1931-09-27T07:00:00,-06:00,CST +1932-04-24T08:00:00,-05:00,CDT +1932-09-25T07:00:00,-06:00,CST +1933-04-30T08:00:00,-05:00,CDT +1933-09-24T07:00:00,-06:00,CST +1934-04-29T08:00:00,-05:00,CDT +1934-09-30T07:00:00,-06:00,CST +1935-04-28T08:00:00,-05:00,CDT +1935-09-29T07:00:00,-06:00,CST +1936-03-01T08:00:00,-05:00,EST +1936-11-15T07:00:00,-06:00,CST +1937-04-25T08:00:00,-05:00,CDT +1937-09-26T07:00:00,-06:00,CST +1938-04-24T08:00:00,-05:00,CDT +1938-09-25T07:00:00,-06:00,CST +1939-04-30T08:00:00,-05:00,CDT +1939-09-24T07:00:00,-06:00,CST +1940-04-28T08:00:00,-05:00,CDT +1940-09-29T07:00:00,-06:00,CST +1941-04-27T08:00:00,-05:00,CDT +1941-09-28T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-10-30T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-10-28T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-10-27T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-10-26T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-10-30T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-10-29T07:00:00,-06:00,CST +1962-04-29T08:00:00,-05:00,CDT +1962-10-28T07:00:00,-06:00,CST +1963-04-28T08:00:00,-05:00,CDT +1963-10-27T07:00:00,-06:00,CST +1964-04-26T08:00:00,-05:00,CDT +1964-10-25T07:00:00,-06:00,CST +1965-04-25T08:00:00,-05:00,CDT +1965-10-31T07:00:00,-06:00,CST +1966-04-24T08:00:00,-05:00,CDT +1966-10-30T07:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T07:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T07:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T07:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T07:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T07:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-01-06T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-02-23T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T07:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T07:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T07:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-chihuahua.txt b/desk/gub/lib/pytz/america-chihuahua.txt new file mode 100644 index 0000000..f019d11 --- /dev/null +++ b/desk/gub/lib/pytz/america-chihuahua.txt @@ -0,0 +1,61 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-05-06T09:00:00,-06:00,MDT +2001-09-30T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-04-01T09:00:00,-06:00,MDT +2007-10-28T08:00:00,-07:00,MST +2008-04-06T09:00:00,-06:00,MDT +2008-10-26T08:00:00,-07:00,MST +2009-04-05T09:00:00,-06:00,MDT +2009-10-25T08:00:00,-07:00,MST +2010-04-04T09:00:00,-06:00,MDT +2010-10-31T08:00:00,-07:00,MST +2011-04-03T09:00:00,-06:00,MDT +2011-10-30T08:00:00,-07:00,MST +2012-04-01T09:00:00,-06:00,MDT +2012-10-28T08:00:00,-07:00,MST +2013-04-07T09:00:00,-06:00,MDT +2013-10-27T08:00:00,-07:00,MST +2014-04-06T09:00:00,-06:00,MDT +2014-10-26T08:00:00,-07:00,MST +2015-04-05T09:00:00,-06:00,MDT +2015-10-25T08:00:00,-07:00,MST +2016-04-03T09:00:00,-06:00,MDT +2016-10-30T08:00:00,-07:00,MST +2017-04-02T09:00:00,-06:00,MDT +2017-10-29T08:00:00,-07:00,MST +2018-04-01T09:00:00,-06:00,MDT +2018-10-28T08:00:00,-07:00,MST +2019-04-07T09:00:00,-06:00,MDT +2019-10-27T08:00:00,-07:00,MST +2020-04-05T09:00:00,-06:00,MDT +2020-10-25T08:00:00,-07:00,MST +2021-04-04T09:00:00,-06:00,MDT +2021-10-31T08:00:00,-07:00,MST +2022-04-03T09:00:00,-06:00,MDT +2022-10-30T08:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-ciudad-juarez.txt b/desk/gub/lib/pytz/america-ciudad-juarez.txt new file mode 100644 index 0000000..aa8fec3 --- /dev/null +++ b/desk/gub/lib/pytz/america-ciudad-juarez.txt @@ -0,0 +1,92 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-05-06T09:00:00,-06:00,MDT +2001-09-30T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-04-01T09:00:00,-06:00,MDT +2007-10-28T08:00:00,-07:00,MST +2008-04-06T09:00:00,-06:00,MDT +2008-10-26T08:00:00,-07:00,MST +2009-04-05T09:00:00,-06:00,MDT +2009-10-25T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-10-30T08:00:00,-06:00,CST +2022-11-30T06:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-coral-harbour.txt b/desk/gub/lib/pytz/america-coral-harbour.txt new file mode 100644 index 0000000..069fd8c --- /dev/null +++ b/desk/gub/lib/pytz/america-coral-harbour.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:40,CMT +1908-04-22T05:19:36,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-cordoba.txt b/desk/gub/lib/pytz/america-cordoba.txt new file mode 100644 index 0000000..789ef3c --- /dev/null +++ b/desk/gub/lib/pytz/america-cordoba.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-04:00,-04 +1991-10-20T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 +2008-10-19T03:00:00,-02:00,-02 +2009-03-15T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-costa-rica.txt b/desk/gub/lib/pytz/america-costa-rica.txt new file mode 100644 index 0000000..b37ff9e --- /dev/null +++ b/desk/gub/lib/pytz/america-costa-rica.txt @@ -0,0 +1,11 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:24,SJMT +1921-01-15T05:36:13,-06:00,CST +1979-02-25T06:00:00,-05:00,CDT +1979-06-03T05:00:00,-06:00,CST +1980-02-24T06:00:00,-05:00,CDT +1980-06-01T05:00:00,-06:00,CST +1991-01-19T06:00:00,-05:00,CDT +1991-07-01T05:00:00,-06:00,CST +1992-01-18T06:00:00,-05:00,CDT +1992-03-15T05:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-coyhaique.txt b/desk/gub/lib/pytz/america-coyhaique.txt new file mode 100644 index 0000000..45a0e43 --- /dev/null +++ b/desk/gub/lib/pytz/america-coyhaique.txt @@ -0,0 +1,134 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:17,SMT +1910-01-10T04:42:45,-05:00,-05 +1916-07-01T05:00:00,-05:17,SMT +1918-09-10T04:42:45,-04:00,-04 +1919-07-01T04:00:00,-05:17,SMT +1927-09-01T04:42:45,-04:00,-04 +1928-04-01T04:00:00,-05:00,-05 +1928-09-01T05:00:00,-04:00,-04 +1929-04-01T04:00:00,-05:00,-05 +1929-09-01T05:00:00,-04:00,-04 +1930-04-01T04:00:00,-05:00,-05 +1930-09-01T05:00:00,-04:00,-04 +1931-04-01T04:00:00,-05:00,-05 +1931-09-01T05:00:00,-04:00,-04 +1932-04-01T04:00:00,-05:00,-05 +1932-09-01T05:00:00,-04:00,-04 +1942-06-01T04:00:00,-05:00,-05 +1942-08-01T05:00:00,-04:00,-04 +1946-08-29T04:00:00,-04:00,-04 +1947-04-01T04:00:00,-05:00,-05 +1947-05-22T04:00:00,-04:00,-04 +1968-11-03T04:00:00,-03:00,-03 +1969-03-30T03:00:00,-04:00,-04 +1969-11-23T04:00:00,-03:00,-03 +1970-03-29T03:00:00,-04:00,-04 +1970-10-11T04:00:00,-03:00,-03 +1971-03-14T03:00:00,-04:00,-04 +1971-10-10T04:00:00,-03:00,-03 +1972-03-12T03:00:00,-04:00,-04 +1972-10-15T04:00:00,-03:00,-03 +1973-03-11T03:00:00,-04:00,-04 +1973-09-30T04:00:00,-03:00,-03 +1974-03-10T03:00:00,-04:00,-04 +1974-10-13T04:00:00,-03:00,-03 +1975-03-09T03:00:00,-04:00,-04 +1975-10-12T04:00:00,-03:00,-03 +1976-03-14T03:00:00,-04:00,-04 +1976-10-10T04:00:00,-03:00,-03 +1977-03-13T03:00:00,-04:00,-04 +1977-10-09T04:00:00,-03:00,-03 +1978-03-12T03:00:00,-04:00,-04 +1978-10-15T04:00:00,-03:00,-03 +1979-03-11T03:00:00,-04:00,-04 +1979-10-14T04:00:00,-03:00,-03 +1980-03-09T03:00:00,-04:00,-04 +1980-10-12T04:00:00,-03:00,-03 +1981-03-15T03:00:00,-04:00,-04 +1981-10-11T04:00:00,-03:00,-03 +1982-03-14T03:00:00,-04:00,-04 +1982-10-10T04:00:00,-03:00,-03 +1983-03-13T03:00:00,-04:00,-04 +1983-10-09T04:00:00,-03:00,-03 +1984-03-11T03:00:00,-04:00,-04 +1984-10-14T04:00:00,-03:00,-03 +1985-03-10T03:00:00,-04:00,-04 +1985-10-13T04:00:00,-03:00,-03 +1986-03-09T03:00:00,-04:00,-04 +1986-10-12T04:00:00,-03:00,-03 +1987-04-12T03:00:00,-04:00,-04 +1987-10-11T04:00:00,-03:00,-03 +1988-03-13T03:00:00,-04:00,-04 +1988-10-09T04:00:00,-03:00,-03 +1989-03-12T03:00:00,-04:00,-04 +1989-10-15T04:00:00,-03:00,-03 +1990-03-11T03:00:00,-04:00,-04 +1990-09-16T04:00:00,-03:00,-03 +1991-03-10T03:00:00,-04:00,-04 +1991-10-13T04:00:00,-03:00,-03 +1992-03-15T03:00:00,-04:00,-04 +1992-10-11T04:00:00,-03:00,-03 +1993-03-14T03:00:00,-04:00,-04 +1993-10-10T04:00:00,-03:00,-03 +1994-03-13T03:00:00,-04:00,-04 +1994-10-09T04:00:00,-03:00,-03 +1995-03-12T03:00:00,-04:00,-04 +1995-10-15T04:00:00,-03:00,-03 +1996-03-10T03:00:00,-04:00,-04 +1996-10-13T04:00:00,-03:00,-03 +1997-03-30T03:00:00,-04:00,-04 +1997-10-12T04:00:00,-03:00,-03 +1998-03-15T03:00:00,-04:00,-04 +1998-09-27T04:00:00,-03:00,-03 +1999-04-04T03:00:00,-04:00,-04 +1999-10-10T04:00:00,-03:00,-03 +2000-03-12T03:00:00,-04:00,-04 +2000-10-15T04:00:00,-03:00,-03 +2001-03-11T03:00:00,-04:00,-04 +2001-10-14T04:00:00,-03:00,-03 +2002-03-10T03:00:00,-04:00,-04 +2002-10-13T04:00:00,-03:00,-03 +2003-03-09T03:00:00,-04:00,-04 +2003-10-12T04:00:00,-03:00,-03 +2004-03-14T03:00:00,-04:00,-04 +2004-10-10T04:00:00,-03:00,-03 +2005-03-13T03:00:00,-04:00,-04 +2005-10-09T04:00:00,-03:00,-03 +2006-03-12T03:00:00,-04:00,-04 +2006-10-15T04:00:00,-03:00,-03 +2007-03-11T03:00:00,-04:00,-04 +2007-10-14T04:00:00,-03:00,-03 +2008-03-30T03:00:00,-04:00,-04 +2008-10-12T04:00:00,-03:00,-03 +2009-03-15T03:00:00,-04:00,-04 +2009-10-11T04:00:00,-03:00,-03 +2010-04-04T03:00:00,-04:00,-04 +2010-10-10T04:00:00,-03:00,-03 +2011-05-08T03:00:00,-04:00,-04 +2011-08-21T04:00:00,-03:00,-03 +2012-04-29T03:00:00,-04:00,-04 +2012-09-02T04:00:00,-03:00,-03 +2013-04-28T03:00:00,-04:00,-04 +2013-09-08T04:00:00,-03:00,-03 +2014-04-27T03:00:00,-04:00,-04 +2014-09-07T04:00:00,-03:00,-03 +2016-05-15T03:00:00,-04:00,-04 +2016-08-14T04:00:00,-03:00,-03 +2017-05-14T03:00:00,-04:00,-04 +2017-08-13T04:00:00,-03:00,-03 +2018-05-13T03:00:00,-04:00,-04 +2018-08-12T04:00:00,-03:00,-03 +2019-04-07T03:00:00,-04:00,-04 +2019-09-08T04:00:00,-03:00,-03 +2020-04-05T03:00:00,-04:00,-04 +2020-09-06T04:00:00,-03:00,-03 +2021-04-04T03:00:00,-04:00,-04 +2021-09-05T04:00:00,-03:00,-03 +2022-04-03T03:00:00,-04:00,-04 +2022-09-11T04:00:00,-03:00,-03 +2023-04-02T03:00:00,-04:00,-04 +2023-09-03T04:00:00,-03:00,-03 +2024-04-07T03:00:00,-04:00,-04 +2024-09-08T04:00:00,-03:00,-03 +2025-03-20T03:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-creston.txt b/desk/gub/lib/pytz/america-creston.txt new file mode 100644 index 0000000..56faa56 --- /dev/null +++ b/desk/gub/lib/pytz/america-creston.txt @@ -0,0 +1,12 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1944-01-01T06:01:00,-07:00,MST +1944-04-01T07:01:00,-06:00,MWT +1944-10-01T06:01:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-cuiaba.txt b/desk/gub/lib/pytz/america-cuiaba.txt new file mode 100644 index 0000000..da4ab97 --- /dev/null +++ b/desk/gub/lib/pytz/america-cuiaba.txt @@ -0,0 +1,90 @@ +Time,Offset,Name +1914-01-01T03:44:20,-04:00,-04 +1931-10-03T15:00:00,-03:00,-03 +1932-04-01T03:00:00,-04:00,-04 +1932-10-03T04:00:00,-03:00,-03 +1933-04-01T03:00:00,-04:00,-04 +1949-12-01T04:00:00,-03:00,-03 +1950-04-16T04:00:00,-04:00,-04 +1950-12-01T04:00:00,-03:00,-03 +1951-04-01T03:00:00,-04:00,-04 +1951-12-01T04:00:00,-03:00,-03 +1952-04-01T03:00:00,-04:00,-04 +1952-12-01T04:00:00,-03:00,-03 +1953-03-01T03:00:00,-04:00,-04 +1963-12-09T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1965-01-31T04:00:00,-03:00,-03 +1965-03-31T03:00:00,-04:00,-04 +1965-12-01T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-11-01T04:00:00,-03:00,-03 +1967-03-01T03:00:00,-04:00,-04 +1967-11-01T04:00:00,-03:00,-03 +1968-03-01T03:00:00,-04:00,-04 +1985-11-02T04:00:00,-03:00,-03 +1986-03-15T03:00:00,-04:00,-04 +1986-10-25T04:00:00,-03:00,-03 +1987-02-14T03:00:00,-04:00,-04 +1987-10-25T04:00:00,-03:00,-03 +1988-02-07T03:00:00,-04:00,-04 +1988-10-16T04:00:00,-03:00,-03 +1989-01-29T03:00:00,-04:00,-04 +1989-10-15T04:00:00,-03:00,-03 +1990-02-11T03:00:00,-04:00,-04 +1990-10-21T04:00:00,-03:00,-03 +1991-02-17T03:00:00,-04:00,-04 +1991-10-20T04:00:00,-03:00,-03 +1992-02-09T03:00:00,-04:00,-04 +1992-10-25T04:00:00,-03:00,-03 +1993-01-31T03:00:00,-04:00,-04 +1993-10-17T04:00:00,-03:00,-03 +1994-02-20T03:00:00,-04:00,-04 +1994-10-16T04:00:00,-03:00,-03 +1995-02-19T03:00:00,-04:00,-04 +1995-10-15T04:00:00,-03:00,-03 +1996-02-11T03:00:00,-04:00,-04 +1996-10-06T04:00:00,-03:00,-03 +1997-02-16T03:00:00,-04:00,-04 +1997-10-06T04:00:00,-03:00,-03 +1998-03-01T03:00:00,-04:00,-04 +1998-10-11T04:00:00,-03:00,-03 +1999-02-21T03:00:00,-04:00,-04 +1999-10-03T04:00:00,-03:00,-03 +2000-02-27T03:00:00,-04:00,-04 +2000-10-08T04:00:00,-03:00,-03 +2001-02-18T03:00:00,-04:00,-04 +2001-10-14T04:00:00,-03:00,-03 +2002-02-17T03:00:00,-04:00,-04 +2002-11-03T04:00:00,-03:00,-03 +2003-02-16T03:00:00,-04:00,-04 +2004-11-02T04:00:00,-03:00,-03 +2005-02-20T03:00:00,-04:00,-04 +2005-10-16T04:00:00,-03:00,-03 +2006-02-19T03:00:00,-04:00,-04 +2006-11-05T04:00:00,-03:00,-03 +2007-02-25T03:00:00,-04:00,-04 +2007-10-14T04:00:00,-03:00,-03 +2008-02-17T03:00:00,-04:00,-04 +2008-10-19T04:00:00,-03:00,-03 +2009-02-15T03:00:00,-04:00,-04 +2009-10-18T04:00:00,-03:00,-03 +2010-02-21T03:00:00,-04:00,-04 +2010-10-17T04:00:00,-03:00,-03 +2011-02-20T03:00:00,-04:00,-04 +2011-10-16T04:00:00,-03:00,-03 +2012-02-26T03:00:00,-04:00,-04 +2012-10-21T04:00:00,-03:00,-03 +2013-02-17T03:00:00,-04:00,-04 +2013-10-20T04:00:00,-03:00,-03 +2014-02-16T03:00:00,-04:00,-04 +2014-10-19T04:00:00,-03:00,-03 +2015-02-22T03:00:00,-04:00,-04 +2015-10-18T04:00:00,-03:00,-03 +2016-02-21T03:00:00,-04:00,-04 +2016-10-16T04:00:00,-03:00,-03 +2017-02-19T03:00:00,-04:00,-04 +2017-10-15T04:00:00,-03:00,-03 +2018-02-18T03:00:00,-04:00,-04 +2018-11-04T04:00:00,-03:00,-03 +2019-02-17T03:00:00,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-curacao.txt b/desk/gub/lib/pytz/america-curacao.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-curacao.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-danmarkshavn.txt b/desk/gub/lib/pytz/america-danmarkshavn.txt new file mode 100644 index 0000000..f1b9c14 --- /dev/null +++ b/desk/gub/lib/pytz/america-danmarkshavn.txt @@ -0,0 +1,35 @@ +Time,Offset,Name +1916-07-28T01:14:40,-03:00,-03 +1980-04-06T05:00:00,-02:00,-02 +1980-09-28T01:00:00,-03:00,-03 +1981-03-29T01:00:00,-02:00,-02 +1981-09-27T01:00:00,-03:00,-03 +1982-03-28T01:00:00,-02:00,-02 +1982-09-26T01:00:00,-03:00,-03 +1983-03-27T01:00:00,-02:00,-02 +1983-09-25T01:00:00,-03:00,-03 +1984-03-25T01:00:00,-02:00,-02 +1984-09-30T01:00:00,-03:00,-03 +1985-03-31T01:00:00,-02:00,-02 +1985-09-29T01:00:00,-03:00,-03 +1986-03-30T01:00:00,-02:00,-02 +1986-09-28T01:00:00,-03:00,-03 +1987-03-29T01:00:00,-02:00,-02 +1987-09-27T01:00:00,-03:00,-03 +1988-03-27T01:00:00,-02:00,-02 +1988-09-25T01:00:00,-03:00,-03 +1989-03-26T01:00:00,-02:00,-02 +1989-09-24T01:00:00,-03:00,-03 +1990-03-25T01:00:00,-02:00,-02 +1990-09-30T01:00:00,-03:00,-03 +1991-03-31T01:00:00,-02:00,-02 +1991-09-29T01:00:00,-03:00,-03 +1992-03-29T01:00:00,-02:00,-02 +1992-09-27T01:00:00,-03:00,-03 +1993-03-28T01:00:00,-02:00,-02 +1993-09-26T01:00:00,-03:00,-03 +1994-03-27T01:00:00,-02:00,-02 +1994-09-25T01:00:00,-03:00,-03 +1995-03-26T01:00:00,-02:00,-02 +1995-09-24T01:00:00,-03:00,-03 +1996-01-01T03:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-dawson-creek.txt b/desk/gub/lib/pytz/america-dawson-creek.txt new file mode 100644 index 0000000..86e92b7 --- /dev/null +++ b/desk/gub/lib/pytz/america-dawson-creek.txt @@ -0,0 +1,59 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:00,PST +1918-04-14T10:00:00,-07:00,PDT +1918-10-27T09:00:00,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1947-04-27T10:00:00,-07:00,PDT +1947-09-28T09:00:00,-08:00,PST +1948-04-25T10:00:00,-07:00,PDT +1948-09-26T09:00:00,-08:00,PST +1949-04-24T10:00:00,-07:00,PDT +1949-09-25T09:00:00,-08:00,PST +1950-04-30T10:00:00,-07:00,PDT +1950-09-24T09:00:00,-08:00,PST +1951-04-29T10:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T10:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T10:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T10:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T10:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T10:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T10:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T10:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T10:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T10:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T10:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T10:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T10:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T10:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T10:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T10:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-08-30T09:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-dawson.txt b/desk/gub/lib/pytz/america-dawson.txt new file mode 100644 index 0000000..44e1f36 --- /dev/null +++ b/desk/gub/lib/pytz/america-dawson.txt @@ -0,0 +1,94 @@ +Time,Offset,Name +1901-12-13T20:45:52,-09:00,YST +1918-04-14T11:00:00,-08:00,YDT +1918-10-27T10:00:00,-09:00,YST +1919-05-25T11:00:00,-08:00,YDT +1919-11-01T08:00:00,-09:00,YST +1942-02-09T11:00:00,-08:00,YWT +1945-08-14T23:00:00,-08:00,YPT +1945-09-30T10:00:00,-09:00,YST +1965-04-25T09:00:00,-07:00,YDDT +1965-10-31T09:00:00,-09:00,YST +1973-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-03-11T10:00:00,-07:00,PDT +2007-11-04T09:00:00,-08:00,PST +2008-03-09T10:00:00,-07:00,PDT +2008-11-02T09:00:00,-08:00,PST +2009-03-08T10:00:00,-07:00,PDT +2009-11-01T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T07:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-denver.txt b/desk/gub/lib/pytz/america-denver.txt new file mode 100644 index 0000000..d26b6e0 --- /dev/null +++ b/desk/gub/lib/pytz/america-denver.txt @@ -0,0 +1,159 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1920-03-28T09:00:00,-06:00,MDT +1920-10-31T08:00:00,-07:00,MST +1921-03-27T09:00:00,-06:00,MDT +1921-05-22T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1965-04-25T09:00:00,-06:00,MDT +1965-10-31T08:00:00,-07:00,MST +1966-04-24T09:00:00,-06:00,MDT +1966-10-30T08:00:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST +1968-04-28T09:00:00,-06:00,MDT +1968-10-27T08:00:00,-07:00,MST +1969-04-27T09:00:00,-06:00,MDT +1969-10-26T08:00:00,-07:00,MST +1970-04-26T09:00:00,-06:00,MDT +1970-10-25T08:00:00,-07:00,MST +1971-04-25T09:00:00,-06:00,MDT +1971-10-31T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-01-06T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-02-23T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-detroit.txt b/desk/gub/lib/pytz/america-detroit.txt new file mode 100644 index 0000000..f27866c --- /dev/null +++ b/desk/gub/lib/pytz/america-detroit.txt @@ -0,0 +1,142 @@ +Time,Offset,Name +1905-01-01T05:32:11,-06:00,CST +1915-05-15T08:00:00,-05:00,EST +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1967-06-14T05:01:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-01-06T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-dominica.txt b/desk/gub/lib/pytz/america-dominica.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-dominica.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-edmonton.txt b/desk/gub/lib/pytz/america-edmonton.txt new file mode 100644 index 0000000..799f7ce --- /dev/null +++ b/desk/gub/lib/pytz/america-edmonton.txt @@ -0,0 +1,151 @@ +Time,Offset,Name +1906-09-01T07:33:52,-07:00,MST +1918-04-14T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-04-13T09:00:00,-06:00,MDT +1919-05-27T08:00:00,-07:00,MST +1920-04-25T09:00:00,-06:00,MDT +1920-10-31T08:00:00,-07:00,MST +1921-04-24T09:00:00,-06:00,MDT +1921-09-25T08:00:00,-07:00,MST +1922-04-30T09:00:00,-06:00,MDT +1922-09-24T08:00:00,-07:00,MST +1923-04-29T09:00:00,-06:00,MDT +1923-09-30T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1947-04-27T09:00:00,-06:00,MDT +1947-09-28T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-04-28T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-04-27T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-eirunepe.txt b/desk/gub/lib/pytz/america-eirunepe.txt new file mode 100644 index 0000000..aba4ae2 --- /dev/null +++ b/desk/gub/lib/pytz/america-eirunepe.txt @@ -0,0 +1,34 @@ +Time,Offset,Name +1914-01-01T04:39:28,-05:00,-05 +1931-10-03T16:00:00,-04:00,-04 +1932-04-01T04:00:00,-05:00,-05 +1932-10-03T05:00:00,-04:00,-04 +1933-04-01T04:00:00,-05:00,-05 +1949-12-01T05:00:00,-04:00,-04 +1950-04-16T05:00:00,-05:00,-05 +1950-12-01T05:00:00,-04:00,-04 +1951-04-01T04:00:00,-05:00,-05 +1951-12-01T05:00:00,-04:00,-04 +1952-04-01T04:00:00,-05:00,-05 +1952-12-01T05:00:00,-04:00,-04 +1953-03-01T04:00:00,-05:00,-05 +1963-12-09T05:00:00,-04:00,-04 +1964-03-01T04:00:00,-05:00,-05 +1965-01-31T05:00:00,-04:00,-04 +1965-03-31T04:00:00,-05:00,-05 +1965-12-01T05:00:00,-04:00,-04 +1966-03-01T04:00:00,-05:00,-05 +1966-11-01T05:00:00,-04:00,-04 +1967-03-01T04:00:00,-05:00,-05 +1967-11-01T05:00:00,-04:00,-04 +1968-03-01T04:00:00,-05:00,-05 +1985-11-02T05:00:00,-04:00,-04 +1986-03-15T04:00:00,-05:00,-05 +1986-10-25T05:00:00,-04:00,-04 +1987-02-14T04:00:00,-05:00,-05 +1987-10-25T05:00:00,-04:00,-04 +1988-02-07T04:00:00,-05:00,-05 +1993-10-17T05:00:00,-04:00,-04 +1994-02-20T04:00:00,-05:00,-05 +2008-06-24T05:00:00,-04:00,-04 +2013-11-10T04:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-el-salvador.txt b/desk/gub/lib/pytz/america-el-salvador.txt new file mode 100644 index 0000000..ce361c5 --- /dev/null +++ b/desk/gub/lib/pytz/america-el-salvador.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +1921-01-01T05:56:48,-06:00,CST +1987-05-03T06:00:00,-05:00,CDT +1987-09-27T05:00:00,-06:00,CST +1988-05-01T06:00:00,-05:00,CDT +1988-09-25T05:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-ensenada.txt b/desk/gub/lib/pytz/america-ensenada.txt new file mode 100644 index 0000000..a411291 --- /dev/null +++ b/desk/gub/lib/pytz/america-ensenada.txt @@ -0,0 +1,188 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1924-01-01T07:00:00,-08:00,PST +1927-06-10T08:00:00,-07:00,MST +1930-11-15T07:00:00,-08:00,PST +1931-04-01T08:00:00,-07:00,PDT +1931-09-30T07:00:00,-08:00,PST +1942-04-24T08:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-11-15T07:00:00,-08:00,PST +1948-04-05T08:00:00,-07:00,PDT +1949-01-14T07:00:00,-08:00,PST +1950-05-01T08:00:00,-07:00,PDT +1950-09-24T07:00:00,-08:00,PST +1951-04-29T10:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T10:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T09:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T09:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T09:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T09:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T09:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T09:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T09:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T09:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T09:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T09:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T09:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T09:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T09:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T09:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-04-01T10:00:00,-07:00,PDT +2007-10-28T09:00:00,-08:00,PST +2008-04-06T10:00:00,-07:00,PDT +2008-10-26T09:00:00,-08:00,PST +2009-04-05T10:00:00,-07:00,PDT +2009-10-25T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T09:00:00,-08:00,PST +2021-03-14T10:00:00,-07:00,PDT +2021-11-07T09:00:00,-08:00,PST +2022-03-13T10:00:00,-07:00,PDT +2022-11-06T09:00:00,-08:00,PST +2023-03-12T10:00:00,-07:00,PDT +2023-11-05T09:00:00,-08:00,PST +2024-03-10T10:00:00,-07:00,PDT +2024-11-03T09:00:00,-08:00,PST +2025-03-09T10:00:00,-07:00,PDT +2025-11-02T09:00:00,-08:00,PST +2026-03-08T10:00:00,-07:00,PDT +2026-11-01T09:00:00,-08:00,PST +2027-03-14T10:00:00,-07:00,PDT +2027-11-07T09:00:00,-08:00,PST +2028-03-12T10:00:00,-07:00,PDT +2028-11-05T09:00:00,-08:00,PST +2029-03-11T10:00:00,-07:00,PDT +2029-11-04T09:00:00,-08:00,PST +2030-03-10T10:00:00,-07:00,PDT +2030-11-03T09:00:00,-08:00,PST +2031-03-09T10:00:00,-07:00,PDT +2031-11-02T09:00:00,-08:00,PST +2032-03-14T10:00:00,-07:00,PDT +2032-11-07T09:00:00,-08:00,PST +2033-03-13T10:00:00,-07:00,PDT +2033-11-06T09:00:00,-08:00,PST +2034-03-12T10:00:00,-07:00,PDT +2034-11-05T09:00:00,-08:00,PST +2035-03-11T10:00:00,-07:00,PDT +2035-11-04T09:00:00,-08:00,PST +2036-03-09T10:00:00,-07:00,PDT +2036-11-02T09:00:00,-08:00,PST +2037-03-08T10:00:00,-07:00,PDT +2037-11-01T09:00:00,-08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-fort-nelson.txt b/desk/gub/lib/pytz/america-fort-nelson.txt new file mode 100644 index 0000000..00f609b --- /dev/null +++ b/desk/gub/lib/pytz/america-fort-nelson.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:00,PST +1918-04-14T10:00:00,-07:00,PDT +1918-10-27T09:00:00,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1947-04-27T10:00:00,-07:00,PDT +1947-09-28T09:00:00,-08:00,PST +1948-04-25T10:00:00,-07:00,PDT +1948-09-26T09:00:00,-08:00,PST +1949-04-24T10:00:00,-07:00,PDT +1949-09-25T09:00:00,-08:00,PST +1950-04-30T10:00:00,-07:00,PDT +1950-09-24T09:00:00,-08:00,PST +1951-04-29T10:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T10:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T10:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T10:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T10:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T10:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T10:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T10:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T10:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T10:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T10:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T10:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T10:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T10:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T10:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T10:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-04-28T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-04-27T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-03-11T10:00:00,-07:00,PDT +2007-11-04T09:00:00,-08:00,PST +2008-03-09T10:00:00,-07:00,PDT +2008-11-02T09:00:00,-08:00,PST +2009-03-08T10:00:00,-07:00,PDT +2009-11-01T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-fort-wayne.txt b/desk/gub/lib/pytz/america-fort-wayne.txt new file mode 100644 index 0000000..74f5be8 --- /dev/null +++ b/desk/gub/lib/pytz/america-fort-wayne.txt @@ -0,0 +1,100 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1941-06-22T08:00:00,-05:00,CDT +1941-09-28T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,EST +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-fortaleza.txt b/desk/gub/lib/pytz/america-fortaleza.txt new file mode 100644 index 0000000..8300cd5 --- /dev/null +++ b/desk/gub/lib/pytz/america-fortaleza.txt @@ -0,0 +1,40 @@ +Time,Offset,Name +1914-01-01T02:34:00,-03:00,-03 +1931-10-03T14:00:00,-02:00,-02 +1932-04-01T02:00:00,-03:00,-03 +1932-10-03T03:00:00,-02:00,-02 +1933-04-01T02:00:00,-03:00,-03 +1949-12-01T03:00:00,-02:00,-02 +1950-04-16T03:00:00,-03:00,-03 +1950-12-01T03:00:00,-02:00,-02 +1951-04-01T02:00:00,-03:00,-03 +1951-12-01T03:00:00,-02:00,-02 +1952-04-01T02:00:00,-03:00,-03 +1952-12-01T03:00:00,-02:00,-02 +1953-03-01T02:00:00,-03:00,-03 +1963-12-09T03:00:00,-02:00,-02 +1964-03-01T02:00:00,-03:00,-03 +1965-01-31T03:00:00,-02:00,-02 +1965-03-31T02:00:00,-03:00,-03 +1965-12-01T03:00:00,-02:00,-02 +1966-03-01T02:00:00,-03:00,-03 +1966-11-01T03:00:00,-02:00,-02 +1967-03-01T02:00:00,-03:00,-03 +1967-11-01T03:00:00,-02:00,-02 +1968-03-01T02:00:00,-03:00,-03 +1985-11-02T03:00:00,-02:00,-02 +1986-03-15T02:00:00,-03:00,-03 +1986-10-25T03:00:00,-02:00,-02 +1987-02-14T02:00:00,-03:00,-03 +1987-10-25T03:00:00,-02:00,-02 +1988-02-07T02:00:00,-03:00,-03 +1988-10-16T03:00:00,-02:00,-02 +1989-01-29T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-02-11T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-02:00,-02 +2000-02-27T02:00:00,-03:00,-03 +2000-10-08T03:00:00,-02:00,-02 +2000-10-22T02:00:00,-03:00,-03 +2001-10-14T03:00:00,-02:00,-02 +2002-02-17T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-glace-bay.txt b/desk/gub/lib/pytz/america-glace-bay.txt new file mode 100644 index 0000000..d689c7f --- /dev/null +++ b/desk/gub/lib/pytz/america-glace-bay.txt @@ -0,0 +1,141 @@ +Time,Offset,Name +1902-06-15T03:59:48,-04:00,AST +1918-04-14T06:00:00,-03:00,ADT +1918-10-27T05:00:00,-04:00,AST +1942-02-09T06:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST +1953-04-26T06:00:00,-03:00,ADT +1953-09-27T05:00:00,-04:00,AST +1972-04-30T06:00:00,-03:00,ADT +1972-10-29T05:00:00,-04:00,AST +1973-04-29T06:00:00,-03:00,ADT +1973-10-28T05:00:00,-04:00,AST +1974-04-28T06:00:00,-03:00,ADT +1974-10-27T05:00:00,-04:00,AST +1975-04-27T06:00:00,-03:00,ADT +1975-10-26T05:00:00,-04:00,AST +1976-04-25T06:00:00,-03:00,ADT +1976-10-31T05:00:00,-04:00,AST +1977-04-24T06:00:00,-03:00,ADT +1977-10-30T05:00:00,-04:00,AST +1978-04-30T06:00:00,-03:00,ADT +1978-10-29T05:00:00,-04:00,AST +1979-04-29T06:00:00,-03:00,ADT +1979-10-28T05:00:00,-04:00,AST +1980-04-27T06:00:00,-03:00,ADT +1980-10-26T05:00:00,-04:00,AST +1981-04-26T06:00:00,-03:00,ADT +1981-10-25T05:00:00,-04:00,AST +1982-04-25T06:00:00,-03:00,ADT +1982-10-31T05:00:00,-04:00,AST +1983-04-24T06:00:00,-03:00,ADT +1983-10-30T05:00:00,-04:00,AST +1984-04-29T06:00:00,-03:00,ADT +1984-10-28T05:00:00,-04:00,AST +1985-04-28T06:00:00,-03:00,ADT +1985-10-27T05:00:00,-04:00,AST +1986-04-27T06:00:00,-03:00,ADT +1986-10-26T05:00:00,-04:00,AST +1987-04-05T06:00:00,-03:00,ADT +1987-10-25T05:00:00,-04:00,AST +1988-04-03T06:00:00,-03:00,ADT +1988-10-30T05:00:00,-04:00,AST +1989-04-02T06:00:00,-03:00,ADT +1989-10-29T05:00:00,-04:00,AST +1990-04-01T06:00:00,-03:00,ADT +1990-10-28T05:00:00,-04:00,AST +1991-04-07T06:00:00,-03:00,ADT +1991-10-27T05:00:00,-04:00,AST +1992-04-05T06:00:00,-03:00,ADT +1992-10-25T05:00:00,-04:00,AST +1993-04-04T06:00:00,-03:00,ADT +1993-10-31T05:00:00,-04:00,AST +1994-04-03T06:00:00,-03:00,ADT +1994-10-30T05:00:00,-04:00,AST +1995-04-02T06:00:00,-03:00,ADT +1995-10-29T05:00:00,-04:00,AST +1996-04-07T06:00:00,-03:00,ADT +1996-10-27T05:00:00,-04:00,AST +1997-04-06T06:00:00,-03:00,ADT +1997-10-26T05:00:00,-04:00,AST +1998-04-05T06:00:00,-03:00,ADT +1998-10-25T05:00:00,-04:00,AST +1999-04-04T06:00:00,-03:00,ADT +1999-10-31T05:00:00,-04:00,AST +2000-04-02T06:00:00,-03:00,ADT +2000-10-29T05:00:00,-04:00,AST +2001-04-01T06:00:00,-03:00,ADT +2001-10-28T05:00:00,-04:00,AST +2002-04-07T06:00:00,-03:00,ADT +2002-10-27T05:00:00,-04:00,AST +2003-04-06T06:00:00,-03:00,ADT +2003-10-26T05:00:00,-04:00,AST +2004-04-04T06:00:00,-03:00,ADT +2004-10-31T05:00:00,-04:00,AST +2005-04-03T06:00:00,-03:00,ADT +2005-10-30T05:00:00,-04:00,AST +2006-04-02T06:00:00,-03:00,ADT +2006-10-29T05:00:00,-04:00,AST +2007-03-11T06:00:00,-03:00,ADT +2007-11-04T05:00:00,-04:00,AST +2008-03-09T06:00:00,-03:00,ADT +2008-11-02T05:00:00,-04:00,AST +2009-03-08T06:00:00,-03:00,ADT +2009-11-01T05:00:00,-04:00,AST +2010-03-14T06:00:00,-03:00,ADT +2010-11-07T05:00:00,-04:00,AST +2011-03-13T06:00:00,-03:00,ADT +2011-11-06T05:00:00,-04:00,AST +2012-03-11T06:00:00,-03:00,ADT +2012-11-04T05:00:00,-04:00,AST +2013-03-10T06:00:00,-03:00,ADT +2013-11-03T05:00:00,-04:00,AST +2014-03-09T06:00:00,-03:00,ADT +2014-11-02T05:00:00,-04:00,AST +2015-03-08T06:00:00,-03:00,ADT +2015-11-01T05:00:00,-04:00,AST +2016-03-13T06:00:00,-03:00,ADT +2016-11-06T05:00:00,-04:00,AST +2017-03-12T06:00:00,-03:00,ADT +2017-11-05T05:00:00,-04:00,AST +2018-03-11T06:00:00,-03:00,ADT +2018-11-04T05:00:00,-04:00,AST +2019-03-10T06:00:00,-03:00,ADT +2019-11-03T05:00:00,-04:00,AST +2020-03-08T06:00:00,-03:00,ADT +2020-11-01T05:00:00,-04:00,AST +2021-03-14T06:00:00,-03:00,ADT +2021-11-07T05:00:00,-04:00,AST +2022-03-13T06:00:00,-03:00,ADT +2022-11-06T05:00:00,-04:00,AST +2023-03-12T06:00:00,-03:00,ADT +2023-11-05T05:00:00,-04:00,AST +2024-03-10T06:00:00,-03:00,ADT +2024-11-03T05:00:00,-04:00,AST +2025-03-09T06:00:00,-03:00,ADT +2025-11-02T05:00:00,-04:00,AST +2026-03-08T06:00:00,-03:00,ADT +2026-11-01T05:00:00,-04:00,AST +2027-03-14T06:00:00,-03:00,ADT +2027-11-07T05:00:00,-04:00,AST +2028-03-12T06:00:00,-03:00,ADT +2028-11-05T05:00:00,-04:00,AST +2029-03-11T06:00:00,-03:00,ADT +2029-11-04T05:00:00,-04:00,AST +2030-03-10T06:00:00,-03:00,ADT +2030-11-03T05:00:00,-04:00,AST +2031-03-09T06:00:00,-03:00,ADT +2031-11-02T05:00:00,-04:00,AST +2032-03-14T06:00:00,-03:00,ADT +2032-11-07T05:00:00,-04:00,AST +2033-03-13T06:00:00,-03:00,ADT +2033-11-06T05:00:00,-04:00,AST +2034-03-12T06:00:00,-03:00,ADT +2034-11-05T05:00:00,-04:00,AST +2035-03-11T06:00:00,-03:00,ADT +2035-11-04T05:00:00,-04:00,AST +2036-03-09T06:00:00,-03:00,ADT +2036-11-02T05:00:00,-04:00,AST +2037-03-08T06:00:00,-03:00,ADT +2037-11-01T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-godthab.txt b/desk/gub/lib/pytz/america-godthab.txt new file mode 100644 index 0000000..226ae8f --- /dev/null +++ b/desk/gub/lib/pytz/america-godthab.txt @@ -0,0 +1,117 @@ +Time,Offset,Name +1916-07-28T03:26:56,-03:00,-03 +1980-04-06T05:00:00,-02:00,-02 +1980-09-28T01:00:00,-03:00,-03 +1981-03-29T01:00:00,-02:00,-02 +1981-09-27T01:00:00,-03:00,-03 +1982-03-28T01:00:00,-02:00,-02 +1982-09-26T01:00:00,-03:00,-03 +1983-03-27T01:00:00,-02:00,-02 +1983-09-25T01:00:00,-03:00,-03 +1984-03-25T01:00:00,-02:00,-02 +1984-09-30T01:00:00,-03:00,-03 +1985-03-31T01:00:00,-02:00,-02 +1985-09-29T01:00:00,-03:00,-03 +1986-03-30T01:00:00,-02:00,-02 +1986-09-28T01:00:00,-03:00,-03 +1987-03-29T01:00:00,-02:00,-02 +1987-09-27T01:00:00,-03:00,-03 +1988-03-27T01:00:00,-02:00,-02 +1988-09-25T01:00:00,-03:00,-03 +1989-03-26T01:00:00,-02:00,-02 +1989-09-24T01:00:00,-03:00,-03 +1990-03-25T01:00:00,-02:00,-02 +1990-09-30T01:00:00,-03:00,-03 +1991-03-31T01:00:00,-02:00,-02 +1991-09-29T01:00:00,-03:00,-03 +1992-03-29T01:00:00,-02:00,-02 +1992-09-27T01:00:00,-03:00,-03 +1993-03-28T01:00:00,-02:00,-02 +1993-09-26T01:00:00,-03:00,-03 +1994-03-27T01:00:00,-02:00,-02 +1994-09-25T01:00:00,-03:00,-03 +1995-03-26T01:00:00,-02:00,-02 +1995-09-24T01:00:00,-03:00,-03 +1996-03-31T01:00:00,-02:00,-02 +1996-10-27T01:00:00,-03:00,-03 +1997-03-30T01:00:00,-02:00,-02 +1997-10-26T01:00:00,-03:00,-03 +1998-03-29T01:00:00,-02:00,-02 +1998-10-25T01:00:00,-03:00,-03 +1999-03-28T01:00:00,-02:00,-02 +1999-10-31T01:00:00,-03:00,-03 +2000-03-26T01:00:00,-02:00,-02 +2000-10-29T01:00:00,-03:00,-03 +2001-03-25T01:00:00,-02:00,-02 +2001-10-28T01:00:00,-03:00,-03 +2002-03-31T01:00:00,-02:00,-02 +2002-10-27T01:00:00,-03:00,-03 +2003-03-30T01:00:00,-02:00,-02 +2003-10-26T01:00:00,-03:00,-03 +2004-03-28T01:00:00,-02:00,-02 +2004-10-31T01:00:00,-03:00,-03 +2005-03-27T01:00:00,-02:00,-02 +2005-10-30T01:00:00,-03:00,-03 +2006-03-26T01:00:00,-02:00,-02 +2006-10-29T01:00:00,-03:00,-03 +2007-03-25T01:00:00,-02:00,-02 +2007-10-28T01:00:00,-03:00,-03 +2008-03-30T01:00:00,-02:00,-02 +2008-10-26T01:00:00,-03:00,-03 +2009-03-29T01:00:00,-02:00,-02 +2009-10-25T01:00:00,-03:00,-03 +2010-03-28T01:00:00,-02:00,-02 +2010-10-31T01:00:00,-03:00,-03 +2011-03-27T01:00:00,-02:00,-02 +2011-10-30T01:00:00,-03:00,-03 +2012-03-25T01:00:00,-02:00,-02 +2012-10-28T01:00:00,-03:00,-03 +2013-03-31T01:00:00,-02:00,-02 +2013-10-27T01:00:00,-03:00,-03 +2014-03-30T01:00:00,-02:00,-02 +2014-10-26T01:00:00,-03:00,-03 +2015-03-29T01:00:00,-02:00,-02 +2015-10-25T01:00:00,-03:00,-03 +2016-03-27T01:00:00,-02:00,-02 +2016-10-30T01:00:00,-03:00,-03 +2017-03-26T01:00:00,-02:00,-02 +2017-10-29T01:00:00,-03:00,-03 +2018-03-25T01:00:00,-02:00,-02 +2018-10-28T01:00:00,-03:00,-03 +2019-03-31T01:00:00,-02:00,-02 +2019-10-27T01:00:00,-03:00,-03 +2020-03-29T01:00:00,-02:00,-02 +2020-10-25T01:00:00,-03:00,-03 +2021-03-28T01:00:00,-02:00,-02 +2021-10-31T01:00:00,-03:00,-03 +2022-03-27T01:00:00,-02:00,-02 +2022-10-30T01:00:00,-03:00,-03 +2023-03-26T01:00:00,-02:00,-02 +2024-03-31T01:00:00,-01:00,-01 +2024-10-27T01:00:00,-02:00,-02 +2025-03-30T01:00:00,-01:00,-01 +2025-10-26T01:00:00,-02:00,-02 +2026-03-29T01:00:00,-01:00,-01 +2026-10-25T01:00:00,-02:00,-02 +2027-03-28T01:00:00,-01:00,-01 +2027-10-31T01:00:00,-02:00,-02 +2028-03-26T01:00:00,-01:00,-01 +2028-10-29T01:00:00,-02:00,-02 +2029-03-25T01:00:00,-01:00,-01 +2029-10-28T01:00:00,-02:00,-02 +2030-03-31T01:00:00,-01:00,-01 +2030-10-27T01:00:00,-02:00,-02 +2031-03-30T01:00:00,-01:00,-01 +2031-10-26T01:00:00,-02:00,-02 +2032-03-28T01:00:00,-01:00,-01 +2032-10-31T01:00:00,-02:00,-02 +2033-03-27T01:00:00,-01:00,-01 +2033-10-30T01:00:00,-02:00,-02 +2034-03-26T01:00:00,-01:00,-01 +2034-10-29T01:00:00,-02:00,-02 +2035-03-25T01:00:00,-01:00,-01 +2035-10-28T01:00:00,-02:00,-02 +2036-03-30T01:00:00,-01:00,-01 +2036-10-26T01:00:00,-02:00,-02 +2037-03-29T01:00:00,-01:00,-01 +2037-10-25T01:00:00,-02:00,-02 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-goose-bay.txt b/desk/gub/lib/pytz/america-goose-bay.txt new file mode 100644 index 0000000..86bb0dd --- /dev/null +++ b/desk/gub/lib/pytz/america-goose-bay.txt @@ -0,0 +1,205 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:29,NST +1918-04-14T05:30:52,-03:29,NDT +1918-10-27T04:30:52,-04:29,NST +1935-03-30T03:30:52,-04:30,NST +1936-05-11T03:30:00,-03:30,NDT +1936-10-05T02:30:00,-04:30,NST +1937-05-10T03:30:00,-03:30,NDT +1937-10-04T02:30:00,-04:30,NST +1938-05-09T03:30:00,-03:30,NDT +1938-10-03T02:30:00,-04:30,NST +1939-05-15T03:30:00,-03:30,NDT +1939-10-02T02:30:00,-04:30,NST +1940-05-13T03:30:00,-03:30,NDT +1940-10-07T02:30:00,-04:30,NST +1941-05-12T03:30:00,-03:30,NDT +1941-10-06T02:30:00,-04:30,NST +1942-05-11T03:30:00,-03:30,NWT +1945-08-14T23:00:00,-03:30,NPT +1945-09-30T04:30:00,-04:30,NST +1946-05-12T05:30:00,-03:30,NDT +1946-10-06T04:30:00,-04:30,NST +1947-05-11T05:30:00,-03:30,NDT +1947-10-05T04:30:00,-04:30,NST +1948-05-09T05:30:00,-03:30,NDT +1948-10-03T04:30:00,-04:30,NST +1949-05-08T05:30:00,-03:30,NDT +1949-10-02T04:30:00,-04:30,NST +1950-05-14T05:30:00,-03:30,NDT +1950-10-08T04:30:00,-04:30,NST +1951-04-29T05:30:00,-03:30,NDT +1951-09-30T04:30:00,-04:30,NST +1952-04-27T05:30:00,-03:30,NDT +1952-09-28T04:30:00,-04:30,NST +1953-04-26T05:30:00,-03:30,NDT +1953-09-27T04:30:00,-04:30,NST +1954-04-25T05:30:00,-03:30,NDT +1954-09-26T04:30:00,-04:30,NST +1955-04-24T05:30:00,-03:30,NDT +1955-09-25T04:30:00,-04:30,NST +1956-04-29T05:30:00,-03:30,NDT +1956-09-30T04:30:00,-04:30,NST +1957-04-28T05:30:00,-03:30,NDT +1957-09-29T04:30:00,-04:30,NST +1958-04-27T05:30:00,-03:30,NDT +1958-09-28T04:30:00,-04:30,NST +1959-04-26T05:30:00,-03:30,NDT +1959-09-27T04:30:00,-04:30,NST +1960-04-24T05:30:00,-03:30,NDT +1960-10-30T04:30:00,-04:30,NST +1961-04-30T05:30:00,-03:30,NDT +1961-10-29T04:30:00,-04:30,NST +1962-04-29T05:30:00,-03:30,NDT +1962-10-28T04:30:00,-04:30,NST +1963-04-28T05:30:00,-03:30,NDT +1963-10-27T04:30:00,-04:30,NST +1964-04-26T05:30:00,-03:30,NDT +1964-10-25T04:30:00,-04:30,NST +1965-04-25T05:30:00,-03:30,NDT +1965-10-31T04:30:00,-04:30,NST +1966-03-15T05:30:00,-04:00,AST +1966-04-24T06:00:00,-03:00,ADT +1966-10-30T05:00:00,-04:00,AST +1967-04-30T06:00:00,-03:00,ADT +1967-10-29T05:00:00,-04:00,AST +1968-04-28T06:00:00,-03:00,ADT +1968-10-27T05:00:00,-04:00,AST +1969-04-27T06:00:00,-03:00,ADT +1969-10-26T05:00:00,-04:00,AST +1970-04-26T06:00:00,-03:00,ADT +1970-10-25T05:00:00,-04:00,AST +1971-04-25T06:00:00,-03:00,ADT +1971-10-31T05:00:00,-04:00,AST +1972-04-30T06:00:00,-03:00,ADT +1972-10-29T05:00:00,-04:00,AST +1973-04-29T06:00:00,-03:00,ADT +1973-10-28T05:00:00,-04:00,AST +1974-04-28T06:00:00,-03:00,ADT +1974-10-27T05:00:00,-04:00,AST +1975-04-27T06:00:00,-03:00,ADT +1975-10-26T05:00:00,-04:00,AST +1976-04-25T06:00:00,-03:00,ADT +1976-10-31T05:00:00,-04:00,AST +1977-04-24T06:00:00,-03:00,ADT +1977-10-30T05:00:00,-04:00,AST +1978-04-30T06:00:00,-03:00,ADT +1978-10-29T05:00:00,-04:00,AST +1979-04-29T06:00:00,-03:00,ADT +1979-10-28T05:00:00,-04:00,AST +1980-04-27T06:00:00,-03:00,ADT +1980-10-26T05:00:00,-04:00,AST +1981-04-26T06:00:00,-03:00,ADT +1981-10-25T05:00:00,-04:00,AST +1982-04-25T06:00:00,-03:00,ADT +1982-10-31T05:00:00,-04:00,AST +1983-04-24T06:00:00,-03:00,ADT +1983-10-30T05:00:00,-04:00,AST +1984-04-29T06:00:00,-03:00,ADT +1984-10-28T05:00:00,-04:00,AST +1985-04-28T06:00:00,-03:00,ADT +1985-10-27T05:00:00,-04:00,AST +1986-04-27T06:00:00,-03:00,ADT +1986-10-26T05:00:00,-04:00,AST +1987-04-05T04:01:00,-03:00,ADT +1987-10-25T03:01:00,-04:00,AST +1988-04-03T04:01:00,-02:00,ADDT +1988-10-30T02:01:00,-04:00,AST +1989-04-02T04:01:00,-03:00,ADT +1989-10-29T03:01:00,-04:00,AST +1990-04-01T04:01:00,-03:00,ADT +1990-10-28T03:01:00,-04:00,AST +1991-04-07T04:01:00,-03:00,ADT +1991-10-27T03:01:00,-04:00,AST +1992-04-05T04:01:00,-03:00,ADT +1992-10-25T03:01:00,-04:00,AST +1993-04-04T04:01:00,-03:00,ADT +1993-10-31T03:01:00,-04:00,AST +1994-04-03T04:01:00,-03:00,ADT +1994-10-30T03:01:00,-04:00,AST +1995-04-02T04:01:00,-03:00,ADT +1995-10-29T03:01:00,-04:00,AST +1996-04-07T04:01:00,-03:00,ADT +1996-10-27T03:01:00,-04:00,AST +1997-04-06T04:01:00,-03:00,ADT +1997-10-26T03:01:00,-04:00,AST +1998-04-05T04:01:00,-03:00,ADT +1998-10-25T03:01:00,-04:00,AST +1999-04-04T04:01:00,-03:00,ADT +1999-10-31T03:01:00,-04:00,AST +2000-04-02T04:01:00,-03:00,ADT +2000-10-29T03:01:00,-04:00,AST +2001-04-01T04:01:00,-03:00,ADT +2001-10-28T03:01:00,-04:00,AST +2002-04-07T04:01:00,-03:00,ADT +2002-10-27T03:01:00,-04:00,AST +2003-04-06T04:01:00,-03:00,ADT +2003-10-26T03:01:00,-04:00,AST +2004-04-04T04:01:00,-03:00,ADT +2004-10-31T03:01:00,-04:00,AST +2005-04-03T04:01:00,-03:00,ADT +2005-10-30T03:01:00,-04:00,AST +2006-04-02T04:01:00,-03:00,ADT +2006-10-29T03:01:00,-04:00,AST +2007-03-11T04:01:00,-03:00,ADT +2007-11-04T03:01:00,-04:00,AST +2008-03-09T04:01:00,-03:00,ADT +2008-11-02T03:01:00,-04:00,AST +2009-03-08T04:01:00,-03:00,ADT +2009-11-01T03:01:00,-04:00,AST +2010-03-14T04:01:00,-03:00,ADT +2010-11-07T03:01:00,-04:00,AST +2011-03-13T04:01:00,-03:00,ADT +2011-11-06T05:00:00,-04:00,AST +2012-03-11T06:00:00,-03:00,ADT +2012-11-04T05:00:00,-04:00,AST +2013-03-10T06:00:00,-03:00,ADT +2013-11-03T05:00:00,-04:00,AST +2014-03-09T06:00:00,-03:00,ADT +2014-11-02T05:00:00,-04:00,AST +2015-03-08T06:00:00,-03:00,ADT +2015-11-01T05:00:00,-04:00,AST +2016-03-13T06:00:00,-03:00,ADT +2016-11-06T05:00:00,-04:00,AST +2017-03-12T06:00:00,-03:00,ADT +2017-11-05T05:00:00,-04:00,AST +2018-03-11T06:00:00,-03:00,ADT +2018-11-04T05:00:00,-04:00,AST +2019-03-10T06:00:00,-03:00,ADT +2019-11-03T05:00:00,-04:00,AST +2020-03-08T06:00:00,-03:00,ADT +2020-11-01T05:00:00,-04:00,AST +2021-03-14T06:00:00,-03:00,ADT +2021-11-07T05:00:00,-04:00,AST +2022-03-13T06:00:00,-03:00,ADT +2022-11-06T05:00:00,-04:00,AST +2023-03-12T06:00:00,-03:00,ADT +2023-11-05T05:00:00,-04:00,AST +2024-03-10T06:00:00,-03:00,ADT +2024-11-03T05:00:00,-04:00,AST +2025-03-09T06:00:00,-03:00,ADT +2025-11-02T05:00:00,-04:00,AST +2026-03-08T06:00:00,-03:00,ADT +2026-11-01T05:00:00,-04:00,AST +2027-03-14T06:00:00,-03:00,ADT +2027-11-07T05:00:00,-04:00,AST +2028-03-12T06:00:00,-03:00,ADT +2028-11-05T05:00:00,-04:00,AST +2029-03-11T06:00:00,-03:00,ADT +2029-11-04T05:00:00,-04:00,AST +2030-03-10T06:00:00,-03:00,ADT +2030-11-03T05:00:00,-04:00,AST +2031-03-09T06:00:00,-03:00,ADT +2031-11-02T05:00:00,-04:00,AST +2032-03-14T06:00:00,-03:00,ADT +2032-11-07T05:00:00,-04:00,AST +2033-03-13T06:00:00,-03:00,ADT +2033-11-06T05:00:00,-04:00,AST +2034-03-12T06:00:00,-03:00,ADT +2034-11-05T05:00:00,-04:00,AST +2035-03-11T06:00:00,-03:00,ADT +2035-11-04T05:00:00,-04:00,AST +2036-03-09T06:00:00,-03:00,ADT +2036-11-02T05:00:00,-04:00,AST +2037-03-08T06:00:00,-03:00,ADT +2037-11-01T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-grand-turk.txt b/desk/gub/lib/pytz/america-grand-turk.txt new file mode 100644 index 0000000..49fbcec --- /dev/null +++ b/desk/gub/lib/pytz/america-grand-turk.txt @@ -0,0 +1,116 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:53,KMT +1912-02-01T05:07:10,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,AST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-grenada.txt b/desk/gub/lib/pytz/america-grenada.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-grenada.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-guadeloupe.txt b/desk/gub/lib/pytz/america-guadeloupe.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-guadeloupe.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-guatemala.txt b/desk/gub/lib/pytz/america-guatemala.txt new file mode 100644 index 0000000..4d68e73 --- /dev/null +++ b/desk/gub/lib/pytz/america-guatemala.txt @@ -0,0 +1,10 @@ +Time,Offset,Name +1918-10-05T06:02:04,-06:00,CST +1973-11-25T06:00:00,-05:00,CDT +1974-02-24T05:00:00,-06:00,CST +1983-05-21T06:00:00,-05:00,CDT +1983-09-22T05:00:00,-06:00,CST +1991-03-23T06:00:00,-05:00,CDT +1991-09-07T05:00:00,-06:00,CST +2006-04-30T06:00:00,-05:00,CDT +2006-10-01T05:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-guayaquil.txt b/desk/gub/lib/pytz/america-guayaquil.txt new file mode 100644 index 0000000..e1ed8db --- /dev/null +++ b/desk/gub/lib/pytz/america-guayaquil.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:46,QMT +1931-01-01T05:14:00,-05:00,-05 +1992-11-28T05:00:00,-04:00,-04 +1993-02-05T04:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-guyana.txt b/desk/gub/lib/pytz/america-guyana.txt new file mode 100644 index 0000000..6dacd8a --- /dev/null +++ b/desk/gub/lib/pytz/america-guyana.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1911-08-01T03:52:39,-04:00,-04 +1915-03-01T04:00:00,-04:15,-0345 +1975-08-01T03:45:00,-03:00,-03 +1992-03-29T04:00:00,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-halifax.txt b/desk/gub/lib/pytz/america-halifax.txt new file mode 100644 index 0000000..e3a6cca --- /dev/null +++ b/desk/gub/lib/pytz/america-halifax.txt @@ -0,0 +1,229 @@ +Time,Offset,Name +1902-06-15T04:14:24,-04:00,AST +1916-04-01T04:00:00,-03:00,ADT +1916-10-01T03:00:00,-04:00,AST +1918-04-14T06:00:00,-03:00,ADT +1918-10-27T05:00:00,-04:00,AST +1920-05-09T04:00:00,-03:00,ADT +1920-08-29T03:00:00,-04:00,AST +1921-05-06T04:00:00,-03:00,ADT +1921-09-05T03:00:00,-04:00,AST +1922-04-30T04:00:00,-03:00,ADT +1922-09-05T03:00:00,-04:00,AST +1923-05-06T04:00:00,-03:00,ADT +1923-09-04T03:00:00,-04:00,AST +1924-05-04T04:00:00,-03:00,ADT +1924-09-15T03:00:00,-04:00,AST +1925-05-03T04:00:00,-03:00,ADT +1925-09-28T03:00:00,-04:00,AST +1926-05-16T04:00:00,-03:00,ADT +1926-09-13T03:00:00,-04:00,AST +1927-05-01T04:00:00,-03:00,ADT +1927-09-26T03:00:00,-04:00,AST +1928-05-13T04:00:00,-03:00,ADT +1928-09-09T03:00:00,-04:00,AST +1929-05-12T04:00:00,-03:00,ADT +1929-09-03T03:00:00,-04:00,AST +1930-05-11T04:00:00,-03:00,ADT +1930-09-15T03:00:00,-04:00,AST +1931-05-10T04:00:00,-03:00,ADT +1931-09-28T03:00:00,-04:00,AST +1932-05-01T04:00:00,-03:00,ADT +1932-09-26T03:00:00,-04:00,AST +1933-04-30T04:00:00,-03:00,ADT +1933-10-02T03:00:00,-04:00,AST +1934-05-20T04:00:00,-03:00,ADT +1934-09-16T03:00:00,-04:00,AST +1935-06-02T04:00:00,-03:00,ADT +1935-09-30T03:00:00,-04:00,AST +1936-06-01T04:00:00,-03:00,ADT +1936-09-14T03:00:00,-04:00,AST +1937-05-02T04:00:00,-03:00,ADT +1937-09-27T03:00:00,-04:00,AST +1938-05-01T04:00:00,-03:00,ADT +1938-09-26T03:00:00,-04:00,AST +1939-05-28T04:00:00,-03:00,ADT +1939-09-25T03:00:00,-04:00,AST +1940-05-05T04:00:00,-03:00,ADT +1940-09-30T03:00:00,-04:00,AST +1941-05-04T04:00:00,-03:00,ADT +1941-09-29T03:00:00,-04:00,AST +1942-02-09T06:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST +1946-04-28T06:00:00,-03:00,ADT +1946-09-29T05:00:00,-04:00,AST +1947-04-27T06:00:00,-03:00,ADT +1947-09-28T05:00:00,-04:00,AST +1948-04-25T06:00:00,-03:00,ADT +1948-09-26T05:00:00,-04:00,AST +1949-04-24T06:00:00,-03:00,ADT +1949-09-25T05:00:00,-04:00,AST +1951-04-29T06:00:00,-03:00,ADT +1951-09-30T05:00:00,-04:00,AST +1952-04-27T06:00:00,-03:00,ADT +1952-09-28T05:00:00,-04:00,AST +1953-04-26T06:00:00,-03:00,ADT +1953-09-27T05:00:00,-04:00,AST +1954-04-25T06:00:00,-03:00,ADT +1954-09-26T05:00:00,-04:00,AST +1956-04-29T06:00:00,-03:00,ADT +1956-09-30T05:00:00,-04:00,AST +1957-04-28T06:00:00,-03:00,ADT +1957-09-29T05:00:00,-04:00,AST +1958-04-27T06:00:00,-03:00,ADT +1958-09-28T05:00:00,-04:00,AST +1959-04-26T06:00:00,-03:00,ADT +1959-09-27T05:00:00,-04:00,AST +1962-04-29T06:00:00,-03:00,ADT +1962-10-28T05:00:00,-04:00,AST +1963-04-28T06:00:00,-03:00,ADT +1963-10-27T05:00:00,-04:00,AST +1964-04-26T06:00:00,-03:00,ADT +1964-10-25T05:00:00,-04:00,AST +1965-04-25T06:00:00,-03:00,ADT +1965-10-31T05:00:00,-04:00,AST +1966-04-24T06:00:00,-03:00,ADT +1966-10-30T05:00:00,-04:00,AST +1967-04-30T06:00:00,-03:00,ADT +1967-10-29T05:00:00,-04:00,AST +1968-04-28T06:00:00,-03:00,ADT +1968-10-27T05:00:00,-04:00,AST +1969-04-27T06:00:00,-03:00,ADT +1969-10-26T05:00:00,-04:00,AST +1970-04-26T06:00:00,-03:00,ADT +1970-10-25T05:00:00,-04:00,AST +1971-04-25T06:00:00,-03:00,ADT +1971-10-31T05:00:00,-04:00,AST +1972-04-30T06:00:00,-03:00,ADT +1972-10-29T05:00:00,-04:00,AST +1973-04-29T06:00:00,-03:00,ADT +1973-10-28T05:00:00,-04:00,AST +1974-04-28T06:00:00,-03:00,ADT +1974-10-27T05:00:00,-04:00,AST +1975-04-27T06:00:00,-03:00,ADT +1975-10-26T05:00:00,-04:00,AST +1976-04-25T06:00:00,-03:00,ADT +1976-10-31T05:00:00,-04:00,AST +1977-04-24T06:00:00,-03:00,ADT +1977-10-30T05:00:00,-04:00,AST +1978-04-30T06:00:00,-03:00,ADT +1978-10-29T05:00:00,-04:00,AST +1979-04-29T06:00:00,-03:00,ADT +1979-10-28T05:00:00,-04:00,AST +1980-04-27T06:00:00,-03:00,ADT +1980-10-26T05:00:00,-04:00,AST +1981-04-26T06:00:00,-03:00,ADT +1981-10-25T05:00:00,-04:00,AST +1982-04-25T06:00:00,-03:00,ADT +1982-10-31T05:00:00,-04:00,AST +1983-04-24T06:00:00,-03:00,ADT +1983-10-30T05:00:00,-04:00,AST +1984-04-29T06:00:00,-03:00,ADT +1984-10-28T05:00:00,-04:00,AST +1985-04-28T06:00:00,-03:00,ADT +1985-10-27T05:00:00,-04:00,AST +1986-04-27T06:00:00,-03:00,ADT +1986-10-26T05:00:00,-04:00,AST +1987-04-05T06:00:00,-03:00,ADT +1987-10-25T05:00:00,-04:00,AST +1988-04-03T06:00:00,-03:00,ADT +1988-10-30T05:00:00,-04:00,AST +1989-04-02T06:00:00,-03:00,ADT +1989-10-29T05:00:00,-04:00,AST +1990-04-01T06:00:00,-03:00,ADT +1990-10-28T05:00:00,-04:00,AST +1991-04-07T06:00:00,-03:00,ADT +1991-10-27T05:00:00,-04:00,AST +1992-04-05T06:00:00,-03:00,ADT +1992-10-25T05:00:00,-04:00,AST +1993-04-04T06:00:00,-03:00,ADT +1993-10-31T05:00:00,-04:00,AST +1994-04-03T06:00:00,-03:00,ADT +1994-10-30T05:00:00,-04:00,AST +1995-04-02T06:00:00,-03:00,ADT +1995-10-29T05:00:00,-04:00,AST +1996-04-07T06:00:00,-03:00,ADT +1996-10-27T05:00:00,-04:00,AST +1997-04-06T06:00:00,-03:00,ADT +1997-10-26T05:00:00,-04:00,AST +1998-04-05T06:00:00,-03:00,ADT +1998-10-25T05:00:00,-04:00,AST +1999-04-04T06:00:00,-03:00,ADT +1999-10-31T05:00:00,-04:00,AST +2000-04-02T06:00:00,-03:00,ADT +2000-10-29T05:00:00,-04:00,AST +2001-04-01T06:00:00,-03:00,ADT +2001-10-28T05:00:00,-04:00,AST +2002-04-07T06:00:00,-03:00,ADT +2002-10-27T05:00:00,-04:00,AST +2003-04-06T06:00:00,-03:00,ADT +2003-10-26T05:00:00,-04:00,AST +2004-04-04T06:00:00,-03:00,ADT +2004-10-31T05:00:00,-04:00,AST +2005-04-03T06:00:00,-03:00,ADT +2005-10-30T05:00:00,-04:00,AST +2006-04-02T06:00:00,-03:00,ADT +2006-10-29T05:00:00,-04:00,AST +2007-03-11T06:00:00,-03:00,ADT +2007-11-04T05:00:00,-04:00,AST +2008-03-09T06:00:00,-03:00,ADT +2008-11-02T05:00:00,-04:00,AST +2009-03-08T06:00:00,-03:00,ADT +2009-11-01T05:00:00,-04:00,AST +2010-03-14T06:00:00,-03:00,ADT +2010-11-07T05:00:00,-04:00,AST +2011-03-13T06:00:00,-03:00,ADT +2011-11-06T05:00:00,-04:00,AST +2012-03-11T06:00:00,-03:00,ADT +2012-11-04T05:00:00,-04:00,AST +2013-03-10T06:00:00,-03:00,ADT +2013-11-03T05:00:00,-04:00,AST +2014-03-09T06:00:00,-03:00,ADT +2014-11-02T05:00:00,-04:00,AST +2015-03-08T06:00:00,-03:00,ADT +2015-11-01T05:00:00,-04:00,AST +2016-03-13T06:00:00,-03:00,ADT +2016-11-06T05:00:00,-04:00,AST +2017-03-12T06:00:00,-03:00,ADT +2017-11-05T05:00:00,-04:00,AST +2018-03-11T06:00:00,-03:00,ADT +2018-11-04T05:00:00,-04:00,AST +2019-03-10T06:00:00,-03:00,ADT +2019-11-03T05:00:00,-04:00,AST +2020-03-08T06:00:00,-03:00,ADT +2020-11-01T05:00:00,-04:00,AST +2021-03-14T06:00:00,-03:00,ADT +2021-11-07T05:00:00,-04:00,AST +2022-03-13T06:00:00,-03:00,ADT +2022-11-06T05:00:00,-04:00,AST +2023-03-12T06:00:00,-03:00,ADT +2023-11-05T05:00:00,-04:00,AST +2024-03-10T06:00:00,-03:00,ADT +2024-11-03T05:00:00,-04:00,AST +2025-03-09T06:00:00,-03:00,ADT +2025-11-02T05:00:00,-04:00,AST +2026-03-08T06:00:00,-03:00,ADT +2026-11-01T05:00:00,-04:00,AST +2027-03-14T06:00:00,-03:00,ADT +2027-11-07T05:00:00,-04:00,AST +2028-03-12T06:00:00,-03:00,ADT +2028-11-05T05:00:00,-04:00,AST +2029-03-11T06:00:00,-03:00,ADT +2029-11-04T05:00:00,-04:00,AST +2030-03-10T06:00:00,-03:00,ADT +2030-11-03T05:00:00,-04:00,AST +2031-03-09T06:00:00,-03:00,ADT +2031-11-02T05:00:00,-04:00,AST +2032-03-14T06:00:00,-03:00,ADT +2032-11-07T05:00:00,-04:00,AST +2033-03-13T06:00:00,-03:00,ADT +2033-11-06T05:00:00,-04:00,AST +2034-03-12T06:00:00,-03:00,ADT +2034-11-05T05:00:00,-04:00,AST +2035-03-11T06:00:00,-03:00,ADT +2035-11-04T05:00:00,-04:00,AST +2036-03-09T06:00:00,-03:00,ADT +2036-11-02T05:00:00,-04:00,AST +2037-03-08T06:00:00,-03:00,ADT +2037-11-01T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-havana.txt b/desk/gub/lib/pytz/america-havana.txt new file mode 100644 index 0000000..136867c --- /dev/null +++ b/desk/gub/lib/pytz/america-havana.txt @@ -0,0 +1,157 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:30,HMT +1925-07-19T17:29:36,-05:00,CST +1928-06-10T05:00:00,-04:00,CDT +1928-10-10T04:00:00,-05:00,CST +1940-06-02T05:00:00,-04:00,CDT +1940-09-01T04:00:00,-05:00,CST +1941-06-01T05:00:00,-04:00,CDT +1941-09-07T04:00:00,-05:00,CST +1942-06-07T05:00:00,-04:00,CDT +1942-09-06T04:00:00,-05:00,CST +1945-06-03T05:00:00,-04:00,CDT +1945-09-02T04:00:00,-05:00,CST +1946-06-02T05:00:00,-04:00,CDT +1946-09-01T04:00:00,-05:00,CST +1965-06-01T05:00:00,-04:00,CDT +1965-09-30T04:00:00,-05:00,CST +1966-05-29T05:00:00,-04:00,CDT +1966-10-02T04:00:00,-05:00,CST +1967-04-08T05:00:00,-04:00,CDT +1967-09-10T04:00:00,-05:00,CST +1968-04-14T05:00:00,-04:00,CDT +1968-09-08T04:00:00,-05:00,CST +1969-04-27T05:00:00,-04:00,CDT +1969-10-26T04:00:00,-05:00,CST +1970-04-26T05:00:00,-04:00,CDT +1970-10-25T04:00:00,-05:00,CST +1971-04-25T05:00:00,-04:00,CDT +1971-10-31T04:00:00,-05:00,CST +1972-04-30T05:00:00,-04:00,CDT +1972-10-08T04:00:00,-05:00,CST +1973-04-29T05:00:00,-04:00,CDT +1973-10-08T04:00:00,-05:00,CST +1974-04-28T05:00:00,-04:00,CDT +1974-10-08T04:00:00,-05:00,CST +1975-04-27T05:00:00,-04:00,CDT +1975-10-26T04:00:00,-05:00,CST +1976-04-25T05:00:00,-04:00,CDT +1976-10-31T04:00:00,-05:00,CST +1977-04-24T05:00:00,-04:00,CDT +1977-10-30T04:00:00,-05:00,CST +1978-05-07T05:00:00,-04:00,CDT +1978-10-08T04:00:00,-05:00,CST +1979-03-18T05:00:00,-04:00,CDT +1979-10-14T04:00:00,-05:00,CST +1980-03-16T05:00:00,-04:00,CDT +1980-10-12T04:00:00,-05:00,CST +1981-05-10T05:00:00,-04:00,CDT +1981-10-11T04:00:00,-05:00,CST +1982-05-09T05:00:00,-04:00,CDT +1982-10-10T04:00:00,-05:00,CST +1983-05-08T05:00:00,-04:00,CDT +1983-10-09T04:00:00,-05:00,CST +1984-05-06T05:00:00,-04:00,CDT +1984-10-14T04:00:00,-05:00,CST +1985-05-05T05:00:00,-04:00,CDT +1985-10-13T04:00:00,-05:00,CST +1986-03-16T05:00:00,-04:00,CDT +1986-10-12T04:00:00,-05:00,CST +1987-03-15T05:00:00,-04:00,CDT +1987-10-11T04:00:00,-05:00,CST +1988-03-20T05:00:00,-04:00,CDT +1988-10-09T04:00:00,-05:00,CST +1989-03-19T05:00:00,-04:00,CDT +1989-10-08T04:00:00,-05:00,CST +1990-04-01T05:00:00,-04:00,CDT +1990-10-14T04:00:00,-05:00,CST +1991-04-07T05:00:00,-04:00,CDT +1991-10-13T05:00:00,-05:00,CST +1992-04-05T05:00:00,-04:00,CDT +1992-10-11T05:00:00,-05:00,CST +1993-04-04T05:00:00,-04:00,CDT +1993-10-10T05:00:00,-05:00,CST +1994-04-03T05:00:00,-04:00,CDT +1994-10-09T05:00:00,-05:00,CST +1995-04-02T05:00:00,-04:00,CDT +1995-10-08T05:00:00,-05:00,CST +1996-04-07T05:00:00,-04:00,CDT +1996-10-06T05:00:00,-05:00,CST +1997-04-06T05:00:00,-04:00,CDT +1997-10-12T05:00:00,-05:00,CST +1998-03-29T05:00:00,-04:00,CDT +1998-10-25T05:00:00,-05:00,CST +1999-03-28T05:00:00,-04:00,CDT +1999-10-31T05:00:00,-05:00,CST +2000-04-02T05:00:00,-04:00,CDT +2000-10-29T05:00:00,-05:00,CST +2001-04-01T05:00:00,-04:00,CDT +2001-10-28T05:00:00,-05:00,CST +2002-04-07T05:00:00,-04:00,CDT +2002-10-27T05:00:00,-05:00,CST +2003-04-06T05:00:00,-04:00,CDT +2003-10-26T05:00:00,-05:00,CST +2004-03-28T05:00:00,-04:00,CDT +2006-10-29T05:00:00,-05:00,CST +2007-03-11T05:00:00,-04:00,CDT +2007-10-28T05:00:00,-05:00,CST +2008-03-16T05:00:00,-04:00,CDT +2008-10-26T05:00:00,-05:00,CST +2009-03-08T05:00:00,-04:00,CDT +2009-10-25T05:00:00,-05:00,CST +2010-03-14T05:00:00,-04:00,CDT +2010-10-31T05:00:00,-05:00,CST +2011-03-20T05:00:00,-04:00,CDT +2011-11-13T05:00:00,-05:00,CST +2012-04-01T05:00:00,-04:00,CDT +2012-11-04T05:00:00,-05:00,CST +2013-03-10T05:00:00,-04:00,CDT +2013-11-03T05:00:00,-05:00,CST +2014-03-09T05:00:00,-04:00,CDT +2014-11-02T05:00:00,-05:00,CST +2015-03-08T05:00:00,-04:00,CDT +2015-11-01T05:00:00,-05:00,CST +2016-03-13T05:00:00,-04:00,CDT +2016-11-06T05:00:00,-05:00,CST +2017-03-12T05:00:00,-04:00,CDT +2017-11-05T05:00:00,-05:00,CST +2018-03-11T05:00:00,-04:00,CDT +2018-11-04T05:00:00,-05:00,CST +2019-03-10T05:00:00,-04:00,CDT +2019-11-03T05:00:00,-05:00,CST +2020-03-08T05:00:00,-04:00,CDT +2020-11-01T05:00:00,-05:00,CST +2021-03-14T05:00:00,-04:00,CDT +2021-11-07T05:00:00,-05:00,CST +2022-03-13T05:00:00,-04:00,CDT +2022-11-06T05:00:00,-05:00,CST +2023-03-12T05:00:00,-04:00,CDT +2023-11-05T05:00:00,-05:00,CST +2024-03-10T05:00:00,-04:00,CDT +2024-11-03T05:00:00,-05:00,CST +2025-03-09T05:00:00,-04:00,CDT +2025-11-02T05:00:00,-05:00,CST +2026-03-08T05:00:00,-04:00,CDT +2026-11-01T05:00:00,-05:00,CST +2027-03-14T05:00:00,-04:00,CDT +2027-11-07T05:00:00,-05:00,CST +2028-03-12T05:00:00,-04:00,CDT +2028-11-05T05:00:00,-05:00,CST +2029-03-11T05:00:00,-04:00,CDT +2029-11-04T05:00:00,-05:00,CST +2030-03-10T05:00:00,-04:00,CDT +2030-11-03T05:00:00,-05:00,CST +2031-03-09T05:00:00,-04:00,CDT +2031-11-02T05:00:00,-05:00,CST +2032-03-14T05:00:00,-04:00,CDT +2032-11-07T05:00:00,-05:00,CST +2033-03-13T05:00:00,-04:00,CDT +2033-11-06T05:00:00,-05:00,CST +2034-03-12T05:00:00,-04:00,CDT +2034-11-05T05:00:00,-05:00,CST +2035-03-11T05:00:00,-04:00,CDT +2035-11-04T05:00:00,-05:00,CST +2036-03-09T05:00:00,-04:00,CDT +2036-11-02T05:00:00,-05:00,CST +2037-03-08T05:00:00,-04:00,CDT +2037-11-01T05:00:00,-05:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-hermosillo.txt b/desk/gub/lib/pytz/america-hermosillo.txt new file mode 100644 index 0000000..907012d --- /dev/null +++ b/desk/gub/lib/pytz/america-hermosillo.txt @@ -0,0 +1,14 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1942-04-24T06:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-indiana-indianapolis.txt b/desk/gub/lib/pytz/america-indiana-indianapolis.txt new file mode 100644 index 0000000..74f5be8 --- /dev/null +++ b/desk/gub/lib/pytz/america-indiana-indianapolis.txt @@ -0,0 +1,100 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1941-06-22T08:00:00,-05:00,CDT +1941-09-28T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,EST +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-indiana-knox.txt b/desk/gub/lib/pytz/america-indiana-knox.txt new file mode 100644 index 0000000..b8696ff --- /dev/null +++ b/desk/gub/lib/pytz/america-indiana-knox.txt @@ -0,0 +1,155 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-10-30T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-10-28T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-10-30T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-10-29T07:00:00,-06:00,CST +1962-04-29T08:00:00,-05:00,EST +1963-10-27T07:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T07:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T07:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T07:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T07:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T07:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-01-06T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-02-23T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-05:00,EST +2006-04-02T07:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-indiana-marengo.txt b/desk/gub/lib/pytz/america-indiana-marengo.txt new file mode 100644 index 0000000..f8d9629 --- /dev/null +++ b/desk/gub/lib/pytz/america-indiana-marengo.txt @@ -0,0 +1,104 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-09-25T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-09-30T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-09-27T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-09-25T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-01-06T07:00:00,-05:00,CDT +1974-10-27T07:00:00,-05:00,EST +1975-02-23T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-indiana-petersburg.txt b/desk/gub/lib/pytz/america-indiana-petersburg.txt new file mode 100644 index 0000000..3ec8da0 --- /dev/null +++ b/desk/gub/lib/pytz/america-indiana-petersburg.txt @@ -0,0 +1,117 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1955-05-01T06:00:00,-05:00,CDT +1955-09-25T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-09-30T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-09-27T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-09-25T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-10-29T07:00:00,-06:00,CST +1962-04-29T08:00:00,-05:00,CDT +1962-10-28T07:00:00,-06:00,CST +1963-04-28T08:00:00,-05:00,CDT +1963-10-27T07:00:00,-06:00,CST +1964-04-26T08:00:00,-05:00,CDT +1964-10-25T07:00:00,-06:00,CST +1965-04-25T08:00:00,-05:00,EST +1966-10-30T07:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T07:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T07:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T07:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T07:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T07:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-01-06T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-02-23T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-05:00,EST +2006-04-02T07:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-indiana-tell-city.txt b/desk/gub/lib/pytz/america-indiana-tell-city.txt new file mode 100644 index 0000000..db9ad59 --- /dev/null +++ b/desk/gub/lib/pytz/america-indiana-tell-city.txt @@ -0,0 +1,99 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1955-05-01T06:00:00,-05:00,CDT +1955-09-25T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-09-30T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-09-27T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-09-25T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-10-29T07:00:00,-06:00,CST +1962-04-29T08:00:00,-05:00,CDT +1962-10-28T07:00:00,-06:00,CST +1963-04-28T08:00:00,-05:00,CDT +1963-10-27T07:00:00,-06:00,CST +1964-04-26T08:00:00,-05:00,EST +1967-10-29T07:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T07:00:00,-06:00,CST +1969-04-27T08:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +2006-04-02T07:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-indiana-vevay.txt b/desk/gub/lib/pytz/america-indiana-vevay.txt new file mode 100644 index 0000000..1323c0f --- /dev/null +++ b/desk/gub/lib/pytz/america-indiana-vevay.txt @@ -0,0 +1,82 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-indiana-vincennes.txt b/desk/gub/lib/pytz/america-indiana-vincennes.txt new file mode 100644 index 0000000..1e3fb96 --- /dev/null +++ b/desk/gub/lib/pytz/america-indiana-vincennes.txt @@ -0,0 +1,102 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-05-01T06:00:00,-05:00,CDT +1955-09-25T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-09-30T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-09-27T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-10-30T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-09-24T07:00:00,-06:00,CST +1962-04-29T08:00:00,-05:00,CDT +1962-10-28T07:00:00,-06:00,CST +1963-04-28T08:00:00,-05:00,CDT +1963-10-27T07:00:00,-06:00,CST +1964-04-26T08:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +2006-04-02T07:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-indiana-winamac.txt b/desk/gub/lib/pytz/america-indiana-winamac.txt new file mode 100644 index 0000000..0c676ec --- /dev/null +++ b/desk/gub/lib/pytz/america-indiana-winamac.txt @@ -0,0 +1,108 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-10-30T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-10-28T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-09-27T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-09-25T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +2006-04-02T07:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-indianapolis.txt b/desk/gub/lib/pytz/america-indianapolis.txt new file mode 100644 index 0000000..74f5be8 --- /dev/null +++ b/desk/gub/lib/pytz/america-indianapolis.txt @@ -0,0 +1,100 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1941-06-22T08:00:00,-05:00,CDT +1941-09-28T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,EST +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-inuvik.txt b/desk/gub/lib/pytz/america-inuvik.txt new file mode 100644 index 0000000..78cca10 --- /dev/null +++ b/desk/gub/lib/pytz/america-inuvik.txt @@ -0,0 +1,135 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1953-01-01T00:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-04-28T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-04-27T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-iqaluit.txt b/desk/gub/lib/pytz/america-iqaluit.txt new file mode 100644 index 0000000..6295f38 --- /dev/null +++ b/desk/gub/lib/pytz/america-iqaluit.txt @@ -0,0 +1,137 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1942-08-01T00:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-04-28T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-jamaica.txt b/desk/gub/lib/pytz/america-jamaica.txt new file mode 100644 index 0000000..9cdb797 --- /dev/null +++ b/desk/gub/lib/pytz/america-jamaica.txt @@ -0,0 +1,23 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:53,KMT +1912-02-01T05:07:10,-05:00,EST +1974-01-06T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-02-23T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-jujuy.txt b/desk/gub/lib/pytz/america-jujuy.txt new file mode 100644 index 0000000..8cdab3f --- /dev/null +++ b/desk/gub/lib/pytz/america-jujuy.txt @@ -0,0 +1,60 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-04:00,-04 +1990-10-28T04:00:00,-03:00,-03 +1991-03-17T03:00:00,-04:00,-04 +1991-10-06T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-juneau.txt b/desk/gub/lib/pytz/america-juneau.txt new file mode 100644 index 0000000..2baf42c --- /dev/null +++ b/desk/gub/lib/pytz/america-juneau.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+15:02,LMT +1901-12-13T20:45:52,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-08:00,YDT +1980-10-26T10:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-09:00,YST +1983-11-30T09:00:00,-09:00,AKST +1984-04-29T11:00:00,-08:00,AKDT +1984-10-28T10:00:00,-09:00,AKST +1985-04-28T11:00:00,-08:00,AKDT +1985-10-27T10:00:00,-09:00,AKST +1986-04-27T11:00:00,-08:00,AKDT +1986-10-26T10:00:00,-09:00,AKST +1987-04-05T11:00:00,-08:00,AKDT +1987-10-25T10:00:00,-09:00,AKST +1988-04-03T11:00:00,-08:00,AKDT +1988-10-30T10:00:00,-09:00,AKST +1989-04-02T11:00:00,-08:00,AKDT +1989-10-29T10:00:00,-09:00,AKST +1990-04-01T11:00:00,-08:00,AKDT +1990-10-28T10:00:00,-09:00,AKST +1991-04-07T11:00:00,-08:00,AKDT +1991-10-27T10:00:00,-09:00,AKST +1992-04-05T11:00:00,-08:00,AKDT +1992-10-25T10:00:00,-09:00,AKST +1993-04-04T11:00:00,-08:00,AKDT +1993-10-31T10:00:00,-09:00,AKST +1994-04-03T11:00:00,-08:00,AKDT +1994-10-30T10:00:00,-09:00,AKST +1995-04-02T11:00:00,-08:00,AKDT +1995-10-29T10:00:00,-09:00,AKST +1996-04-07T11:00:00,-08:00,AKDT +1996-10-27T10:00:00,-09:00,AKST +1997-04-06T11:00:00,-08:00,AKDT +1997-10-26T10:00:00,-09:00,AKST +1998-04-05T11:00:00,-08:00,AKDT +1998-10-25T10:00:00,-09:00,AKST +1999-04-04T11:00:00,-08:00,AKDT +1999-10-31T10:00:00,-09:00,AKST +2000-04-02T11:00:00,-08:00,AKDT +2000-10-29T10:00:00,-09:00,AKST +2001-04-01T11:00:00,-08:00,AKDT +2001-10-28T10:00:00,-09:00,AKST +2002-04-07T11:00:00,-08:00,AKDT +2002-10-27T10:00:00,-09:00,AKST +2003-04-06T11:00:00,-08:00,AKDT +2003-10-26T10:00:00,-09:00,AKST +2004-04-04T11:00:00,-08:00,AKDT +2004-10-31T10:00:00,-09:00,AKST +2005-04-03T11:00:00,-08:00,AKDT +2005-10-30T10:00:00,-09:00,AKST +2006-04-02T11:00:00,-08:00,AKDT +2006-10-29T10:00:00,-09:00,AKST +2007-03-11T11:00:00,-08:00,AKDT +2007-11-04T10:00:00,-09:00,AKST +2008-03-09T11:00:00,-08:00,AKDT +2008-11-02T10:00:00,-09:00,AKST +2009-03-08T11:00:00,-08:00,AKDT +2009-11-01T10:00:00,-09:00,AKST +2010-03-14T11:00:00,-08:00,AKDT +2010-11-07T10:00:00,-09:00,AKST +2011-03-13T11:00:00,-08:00,AKDT +2011-11-06T10:00:00,-09:00,AKST +2012-03-11T11:00:00,-08:00,AKDT +2012-11-04T10:00:00,-09:00,AKST +2013-03-10T11:00:00,-08:00,AKDT +2013-11-03T10:00:00,-09:00,AKST +2014-03-09T11:00:00,-08:00,AKDT +2014-11-02T10:00:00,-09:00,AKST +2015-03-08T11:00:00,-08:00,AKDT +2015-11-01T10:00:00,-09:00,AKST +2016-03-13T11:00:00,-08:00,AKDT +2016-11-06T10:00:00,-09:00,AKST +2017-03-12T11:00:00,-08:00,AKDT +2017-11-05T10:00:00,-09:00,AKST +2018-03-11T11:00:00,-08:00,AKDT +2018-11-04T10:00:00,-09:00,AKST +2019-03-10T11:00:00,-08:00,AKDT +2019-11-03T10:00:00,-09:00,AKST +2020-03-08T11:00:00,-08:00,AKDT +2020-11-01T10:00:00,-09:00,AKST +2021-03-14T11:00:00,-08:00,AKDT +2021-11-07T10:00:00,-09:00,AKST +2022-03-13T11:00:00,-08:00,AKDT +2022-11-06T10:00:00,-09:00,AKST +2023-03-12T11:00:00,-08:00,AKDT +2023-11-05T10:00:00,-09:00,AKST +2024-03-10T11:00:00,-08:00,AKDT +2024-11-03T10:00:00,-09:00,AKST +2025-03-09T11:00:00,-08:00,AKDT +2025-11-02T10:00:00,-09:00,AKST +2026-03-08T11:00:00,-08:00,AKDT +2026-11-01T10:00:00,-09:00,AKST +2027-03-14T11:00:00,-08:00,AKDT +2027-11-07T10:00:00,-09:00,AKST +2028-03-12T11:00:00,-08:00,AKDT +2028-11-05T10:00:00,-09:00,AKST +2029-03-11T11:00:00,-08:00,AKDT +2029-11-04T10:00:00,-09:00,AKST +2030-03-10T11:00:00,-08:00,AKDT +2030-11-03T10:00:00,-09:00,AKST +2031-03-09T11:00:00,-08:00,AKDT +2031-11-02T10:00:00,-09:00,AKST +2032-03-14T11:00:00,-08:00,AKDT +2032-11-07T10:00:00,-09:00,AKST +2033-03-13T11:00:00,-08:00,AKDT +2033-11-06T10:00:00,-09:00,AKST +2034-03-12T11:00:00,-08:00,AKDT +2034-11-05T10:00:00,-09:00,AKST +2035-03-11T11:00:00,-08:00,AKDT +2035-11-04T10:00:00,-09:00,AKST +2036-03-09T11:00:00,-08:00,AKDT +2036-11-02T10:00:00,-09:00,AKST +2037-03-08T11:00:00,-08:00,AKDT +2037-11-01T10:00:00,-09:00,AKST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-kentucky-louisville.txt b/desk/gub/lib/pytz/america-kentucky-louisville.txt new file mode 100644 index 0000000..35b7690 --- /dev/null +++ b/desk/gub/lib/pytz/america-kentucky-louisville.txt @@ -0,0 +1,179 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1921-05-01T08:00:00,-05:00,CDT +1921-09-01T07:00:00,-06:00,CST +1941-04-27T08:00:00,-05:00,CDT +1941-09-28T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T06:01:00,-05:00,CDT +1946-06-02T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-09-25T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-10-28T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-10-27T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-10-26T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-10-30T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-07-23T07:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-01-06T07:00:00,-05:00,CDT +1974-10-27T07:00:00,-05:00,EST +1975-02-23T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-kentucky-monticello.txt b/desk/gub/lib/pytz/america-kentucky-monticello.txt new file mode 100644 index 0000000..8f33ee1 --- /dev/null +++ b/desk/gub/lib/pytz/america-kentucky-monticello.txt @@ -0,0 +1,149 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T07:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T07:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T07:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T07:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-01-06T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-02-23T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T07:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T07:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T07:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-knox-in.txt b/desk/gub/lib/pytz/america-knox-in.txt new file mode 100644 index 0000000..b8696ff --- /dev/null +++ b/desk/gub/lib/pytz/america-knox-in.txt @@ -0,0 +1,155 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-10-30T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-10-28T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-10-30T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-10-29T07:00:00,-06:00,CST +1962-04-29T08:00:00,-05:00,EST +1963-10-27T07:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T07:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T07:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T07:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T07:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T07:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-01-06T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-02-23T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-05:00,EST +2006-04-02T07:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-kralendijk.txt b/desk/gub/lib/pytz/america-kralendijk.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-kralendijk.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-la-paz.txt b/desk/gub/lib/pytz/america-la-paz.txt new file mode 100644 index 0000000..4cf2e56 --- /dev/null +++ b/desk/gub/lib/pytz/america-la-paz.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:27,CMT +1931-10-15T04:32:36,-04:27,BST +1932-03-21T03:32:36,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-lima.txt b/desk/gub/lib/pytz/america-lima.txt new file mode 100644 index 0000000..b24d363 --- /dev/null +++ b/desk/gub/lib/pytz/america-lima.txt @@ -0,0 +1,17 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:51,LMT +1908-07-28T05:08:36,-05:00,-05 +1938-01-01T05:00:00,-04:00,-04 +1938-04-01T04:00:00,-05:00,-05 +1938-09-25T05:00:00,-04:00,-04 +1939-03-26T04:00:00,-05:00,-05 +1939-09-24T05:00:00,-04:00,-04 +1940-03-24T04:00:00,-05:00,-05 +1986-01-01T05:00:00,-04:00,-04 +1986-04-01T04:00:00,-05:00,-05 +1987-01-01T05:00:00,-04:00,-04 +1987-04-01T04:00:00,-05:00,-05 +1990-01-01T05:00:00,-04:00,-04 +1990-04-01T04:00:00,-05:00,-05 +1994-01-01T05:00:00,-04:00,-04 +1994-04-01T04:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-los-angeles.txt b/desk/gub/lib/pytz/america-los-angeles.txt new file mode 100644 index 0000000..6c5197e --- /dev/null +++ b/desk/gub/lib/pytz/america-los-angeles.txt @@ -0,0 +1,187 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:00,PST +1918-03-31T10:00:00,-07:00,PDT +1918-10-27T09:00:00,-08:00,PST +1919-03-30T10:00:00,-07:00,PDT +1919-10-26T09:00:00,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1948-03-14T10:01:00,-07:00,PDT +1949-01-01T09:00:00,-08:00,PST +1950-04-30T09:00:00,-07:00,PDT +1950-09-24T09:00:00,-08:00,PST +1951-04-29T09:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T09:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T09:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T09:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T09:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T09:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T09:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T09:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T09:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T09:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T09:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T09:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T09:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T09:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T09:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T09:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-03-11T10:00:00,-07:00,PDT +2007-11-04T09:00:00,-08:00,PST +2008-03-09T10:00:00,-07:00,PDT +2008-11-02T09:00:00,-08:00,PST +2009-03-08T10:00:00,-07:00,PDT +2009-11-01T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T09:00:00,-08:00,PST +2021-03-14T10:00:00,-07:00,PDT +2021-11-07T09:00:00,-08:00,PST +2022-03-13T10:00:00,-07:00,PDT +2022-11-06T09:00:00,-08:00,PST +2023-03-12T10:00:00,-07:00,PDT +2023-11-05T09:00:00,-08:00,PST +2024-03-10T10:00:00,-07:00,PDT +2024-11-03T09:00:00,-08:00,PST +2025-03-09T10:00:00,-07:00,PDT +2025-11-02T09:00:00,-08:00,PST +2026-03-08T10:00:00,-07:00,PDT +2026-11-01T09:00:00,-08:00,PST +2027-03-14T10:00:00,-07:00,PDT +2027-11-07T09:00:00,-08:00,PST +2028-03-12T10:00:00,-07:00,PDT +2028-11-05T09:00:00,-08:00,PST +2029-03-11T10:00:00,-07:00,PDT +2029-11-04T09:00:00,-08:00,PST +2030-03-10T10:00:00,-07:00,PDT +2030-11-03T09:00:00,-08:00,PST +2031-03-09T10:00:00,-07:00,PDT +2031-11-02T09:00:00,-08:00,PST +2032-03-14T10:00:00,-07:00,PDT +2032-11-07T09:00:00,-08:00,PST +2033-03-13T10:00:00,-07:00,PDT +2033-11-06T09:00:00,-08:00,PST +2034-03-12T10:00:00,-07:00,PDT +2034-11-05T09:00:00,-08:00,PST +2035-03-11T10:00:00,-07:00,PDT +2035-11-04T09:00:00,-08:00,PST +2036-03-09T10:00:00,-07:00,PDT +2036-11-02T09:00:00,-08:00,PST +2037-03-08T10:00:00,-07:00,PDT +2037-11-01T09:00:00,-08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-louisville.txt b/desk/gub/lib/pytz/america-louisville.txt new file mode 100644 index 0000000..35b7690 --- /dev/null +++ b/desk/gub/lib/pytz/america-louisville.txt @@ -0,0 +1,179 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1921-05-01T08:00:00,-05:00,CDT +1921-09-01T07:00:00,-06:00,CST +1941-04-27T08:00:00,-05:00,CDT +1941-09-28T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T06:01:00,-05:00,CDT +1946-06-02T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-09-25T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-10-28T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-10-27T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-10-26T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-10-30T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-07-23T07:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-01-06T07:00:00,-05:00,CDT +1974-10-27T07:00:00,-05:00,EST +1975-02-23T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-lower-princes.txt b/desk/gub/lib/pytz/america-lower-princes.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-lower-princes.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-maceio.txt b/desk/gub/lib/pytz/america-maceio.txt new file mode 100644 index 0000000..4e0f74c --- /dev/null +++ b/desk/gub/lib/pytz/america-maceio.txt @@ -0,0 +1,42 @@ +Time,Offset,Name +1914-01-01T02:22:52,-03:00,-03 +1931-10-03T14:00:00,-02:00,-02 +1932-04-01T02:00:00,-03:00,-03 +1932-10-03T03:00:00,-02:00,-02 +1933-04-01T02:00:00,-03:00,-03 +1949-12-01T03:00:00,-02:00,-02 +1950-04-16T03:00:00,-03:00,-03 +1950-12-01T03:00:00,-02:00,-02 +1951-04-01T02:00:00,-03:00,-03 +1951-12-01T03:00:00,-02:00,-02 +1952-04-01T02:00:00,-03:00,-03 +1952-12-01T03:00:00,-02:00,-02 +1953-03-01T02:00:00,-03:00,-03 +1963-12-09T03:00:00,-02:00,-02 +1964-03-01T02:00:00,-03:00,-03 +1965-01-31T03:00:00,-02:00,-02 +1965-03-31T02:00:00,-03:00,-03 +1965-12-01T03:00:00,-02:00,-02 +1966-03-01T02:00:00,-03:00,-03 +1966-11-01T03:00:00,-02:00,-02 +1967-03-01T02:00:00,-03:00,-03 +1967-11-01T03:00:00,-02:00,-02 +1968-03-01T02:00:00,-03:00,-03 +1985-11-02T03:00:00,-02:00,-02 +1986-03-15T02:00:00,-03:00,-03 +1986-10-25T03:00:00,-02:00,-02 +1987-02-14T02:00:00,-03:00,-03 +1987-10-25T03:00:00,-02:00,-02 +1988-02-07T02:00:00,-03:00,-03 +1988-10-16T03:00:00,-02:00,-02 +1989-01-29T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-02-11T02:00:00,-03:00,-03 +1995-10-15T03:00:00,-02:00,-02 +1996-02-11T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-02:00,-02 +2000-02-27T02:00:00,-03:00,-03 +2000-10-08T03:00:00,-02:00,-02 +2000-10-22T02:00:00,-03:00,-03 +2001-10-14T03:00:00,-02:00,-02 +2002-02-17T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-managua.txt b/desk/gub/lib/pytz/america-managua.txt new file mode 100644 index 0000000..bc0f3a0 --- /dev/null +++ b/desk/gub/lib/pytz/america-managua.txt @@ -0,0 +1,17 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:15,MMT +1934-06-23T05:45:12,-06:00,CST +1973-05-01T06:00:00,-05:00,EST +1975-02-16T05:00:00,-06:00,CST +1979-03-18T06:00:00,-05:00,CDT +1979-06-25T05:00:00,-06:00,CST +1980-03-16T06:00:00,-05:00,CDT +1980-06-23T05:00:00,-06:00,CST +1992-01-01T10:00:00,-05:00,EST +1992-09-24T05:00:00,-06:00,CST +1993-01-01T06:00:00,-05:00,EST +1997-01-01T05:00:00,-06:00,CST +2005-04-10T06:00:00,-05:00,CDT +2005-10-02T05:00:00,-06:00,CST +2006-04-30T08:00:00,-05:00,CDT +2006-10-01T06:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-manaus.txt b/desk/gub/lib/pytz/america-manaus.txt new file mode 100644 index 0000000..93c19a7 --- /dev/null +++ b/desk/gub/lib/pytz/america-manaus.txt @@ -0,0 +1,32 @@ +Time,Offset,Name +1914-01-01T04:00:04,-04:00,-04 +1931-10-03T15:00:00,-03:00,-03 +1932-04-01T03:00:00,-04:00,-04 +1932-10-03T04:00:00,-03:00,-03 +1933-04-01T03:00:00,-04:00,-04 +1949-12-01T04:00:00,-03:00,-03 +1950-04-16T04:00:00,-04:00,-04 +1950-12-01T04:00:00,-03:00,-03 +1951-04-01T03:00:00,-04:00,-04 +1951-12-01T04:00:00,-03:00,-03 +1952-04-01T03:00:00,-04:00,-04 +1952-12-01T04:00:00,-03:00,-03 +1953-03-01T03:00:00,-04:00,-04 +1963-12-09T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1965-01-31T04:00:00,-03:00,-03 +1965-03-31T03:00:00,-04:00,-04 +1965-12-01T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-11-01T04:00:00,-03:00,-03 +1967-03-01T03:00:00,-04:00,-04 +1967-11-01T04:00:00,-03:00,-03 +1968-03-01T03:00:00,-04:00,-04 +1985-11-02T04:00:00,-03:00,-03 +1986-03-15T03:00:00,-04:00,-04 +1986-10-25T04:00:00,-03:00,-03 +1987-02-14T03:00:00,-04:00,-04 +1987-10-25T04:00:00,-03:00,-03 +1988-02-07T03:00:00,-04:00,-04 +1993-10-17T04:00:00,-03:00,-03 +1994-02-20T03:00:00,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-marigot.txt b/desk/gub/lib/pytz/america-marigot.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-marigot.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-martinique.txt b/desk/gub/lib/pytz/america-martinique.txt new file mode 100644 index 0000000..bb6896a --- /dev/null +++ b/desk/gub/lib/pytz/america-martinique.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:56,FFMT +1911-05-01T04:04:20,-04:00,AST +1980-04-06T04:00:00,-03:00,ADT +1980-09-28T03:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-matamoros.txt b/desk/gub/lib/pytz/america-matamoros.txt new file mode 100644 index 0000000..9e66b1c --- /dev/null +++ b/desk/gub/lib/pytz/america-matamoros.txt @@ -0,0 +1,88 @@ +Time,Offset,Name +1922-01-01T06:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-05-06T08:00:00,-05:00,CDT +2001-09-30T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-04-01T08:00:00,-05:00,CDT +2007-10-28T07:00:00,-06:00,CST +2008-04-06T08:00:00,-05:00,CDT +2008-10-26T07:00:00,-06:00,CST +2009-04-05T08:00:00,-05:00,CDT +2009-10-25T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-mazatlan.txt b/desk/gub/lib/pytz/america-mazatlan.txt new file mode 100644 index 0000000..ca1f8ec --- /dev/null +++ b/desk/gub/lib/pytz/america-mazatlan.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1942-04-24T06:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-05-06T09:00:00,-06:00,MDT +2001-09-30T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-04-01T09:00:00,-06:00,MDT +2007-10-28T08:00:00,-07:00,MST +2008-04-06T09:00:00,-06:00,MDT +2008-10-26T08:00:00,-07:00,MST +2009-04-05T09:00:00,-06:00,MDT +2009-10-25T08:00:00,-07:00,MST +2010-04-04T09:00:00,-06:00,MDT +2010-10-31T08:00:00,-07:00,MST +2011-04-03T09:00:00,-06:00,MDT +2011-10-30T08:00:00,-07:00,MST +2012-04-01T09:00:00,-06:00,MDT +2012-10-28T08:00:00,-07:00,MST +2013-04-07T09:00:00,-06:00,MDT +2013-10-27T08:00:00,-07:00,MST +2014-04-06T09:00:00,-06:00,MDT +2014-10-26T08:00:00,-07:00,MST +2015-04-05T09:00:00,-06:00,MDT +2015-10-25T08:00:00,-07:00,MST +2016-04-03T09:00:00,-06:00,MDT +2016-10-30T08:00:00,-07:00,MST +2017-04-02T09:00:00,-06:00,MDT +2017-10-29T08:00:00,-07:00,MST +2018-04-01T09:00:00,-06:00,MDT +2018-10-28T08:00:00,-07:00,MST +2019-04-07T09:00:00,-06:00,MDT +2019-10-27T08:00:00,-07:00,MST +2020-04-05T09:00:00,-06:00,MDT +2020-10-25T08:00:00,-07:00,MST +2021-04-04T09:00:00,-06:00,MDT +2021-10-31T08:00:00,-07:00,MST +2022-04-03T09:00:00,-06:00,MDT +2022-10-30T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-mendoza.txt b/desk/gub/lib/pytz/america-mendoza.txt new file mode 100644 index 0000000..1230653 --- /dev/null +++ b/desk/gub/lib/pytz/america-mendoza.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-04:00,-04 +1990-10-15T04:00:00,-03:00,-03 +1991-03-01T03:00:00,-04:00,-04 +1991-10-15T04:00:00,-03:00,-03 +1992-03-01T03:00:00,-04:00,-04 +1992-10-18T04:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2004-05-23T03:00:00,-04:00,-04 +2004-09-26T04:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-menominee.txt b/desk/gub/lib/pytz/america-menominee.txt new file mode 100644 index 0000000..d432c20 --- /dev/null +++ b/desk/gub/lib/pytz/america-menominee.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1966-04-24T08:00:00,-05:00,CDT +1966-10-30T07:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,EST +1973-04-29T07:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-01-06T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-02-23T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T07:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T07:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T07:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-merida.txt b/desk/gub/lib/pytz/america-merida.txt new file mode 100644 index 0000000..7a0da22 --- /dev/null +++ b/desk/gub/lib/pytz/america-merida.txt @@ -0,0 +1,58 @@ +Time,Offset,Name +1922-01-01T06:00:00,-06:00,CST +1981-12-26T08:00:00,-05:00,EST +1982-11-02T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-05-06T08:00:00,-05:00,CDT +2001-09-30T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-04-01T08:00:00,-05:00,CDT +2007-10-28T07:00:00,-06:00,CST +2008-04-06T08:00:00,-05:00,CDT +2008-10-26T07:00:00,-06:00,CST +2009-04-05T08:00:00,-05:00,CDT +2009-10-25T07:00:00,-06:00,CST +2010-04-04T08:00:00,-05:00,CDT +2010-10-31T07:00:00,-06:00,CST +2011-04-03T08:00:00,-05:00,CDT +2011-10-30T07:00:00,-06:00,CST +2012-04-01T08:00:00,-05:00,CDT +2012-10-28T07:00:00,-06:00,CST +2013-04-07T08:00:00,-05:00,CDT +2013-10-27T07:00:00,-06:00,CST +2014-04-06T08:00:00,-05:00,CDT +2014-10-26T07:00:00,-06:00,CST +2015-04-05T08:00:00,-05:00,CDT +2015-10-25T07:00:00,-06:00,CST +2016-04-03T08:00:00,-05:00,CDT +2016-10-30T07:00:00,-06:00,CST +2017-04-02T08:00:00,-05:00,CDT +2017-10-29T07:00:00,-06:00,CST +2018-04-01T08:00:00,-05:00,CDT +2018-10-28T07:00:00,-06:00,CST +2019-04-07T08:00:00,-05:00,CDT +2019-10-27T07:00:00,-06:00,CST +2020-04-05T08:00:00,-05:00,CDT +2020-10-25T07:00:00,-06:00,CST +2021-04-04T08:00:00,-05:00,CDT +2021-10-31T07:00:00,-06:00,CST +2022-04-03T08:00:00,-05:00,CDT +2022-10-30T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-metlakatla.txt b/desk/gub/lib/pytz/america-metlakatla.txt new file mode 100644 index 0000000..b90a9f6 --- /dev/null +++ b/desk/gub/lib/pytz/america-metlakatla.txt @@ -0,0 +1,82 @@ +Time,Offset,Name +0001-01-01T00:00:00,+15:14,LMT +1901-12-13T20:45:52,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +2015-11-01T10:00:00,-09:00,AKST +2016-03-13T11:00:00,-08:00,AKDT +2016-11-06T10:00:00,-09:00,AKST +2017-03-12T11:00:00,-08:00,AKDT +2017-11-05T10:00:00,-09:00,AKST +2018-03-11T11:00:00,-08:00,AKDT +2018-11-04T10:00:00,-08:00,PST +2019-01-20T10:00:00,-09:00,AKST +2019-03-10T11:00:00,-08:00,AKDT +2019-11-03T10:00:00,-09:00,AKST +2020-03-08T11:00:00,-08:00,AKDT +2020-11-01T10:00:00,-09:00,AKST +2021-03-14T11:00:00,-08:00,AKDT +2021-11-07T10:00:00,-09:00,AKST +2022-03-13T11:00:00,-08:00,AKDT +2022-11-06T10:00:00,-09:00,AKST +2023-03-12T11:00:00,-08:00,AKDT +2023-11-05T10:00:00,-09:00,AKST +2024-03-10T11:00:00,-08:00,AKDT +2024-11-03T10:00:00,-09:00,AKST +2025-03-09T11:00:00,-08:00,AKDT +2025-11-02T10:00:00,-09:00,AKST +2026-03-08T11:00:00,-08:00,AKDT +2026-11-01T10:00:00,-09:00,AKST +2027-03-14T11:00:00,-08:00,AKDT +2027-11-07T10:00:00,-09:00,AKST +2028-03-12T11:00:00,-08:00,AKDT +2028-11-05T10:00:00,-09:00,AKST +2029-03-11T11:00:00,-08:00,AKDT +2029-11-04T10:00:00,-09:00,AKST +2030-03-10T11:00:00,-08:00,AKDT +2030-11-03T10:00:00,-09:00,AKST +2031-03-09T11:00:00,-08:00,AKDT +2031-11-02T10:00:00,-09:00,AKST +2032-03-14T11:00:00,-08:00,AKDT +2032-11-07T10:00:00,-09:00,AKST +2033-03-13T11:00:00,-08:00,AKDT +2033-11-06T10:00:00,-09:00,AKST +2034-03-12T11:00:00,-08:00,AKDT +2034-11-05T10:00:00,-09:00,AKST +2035-03-11T11:00:00,-08:00,AKDT +2035-11-04T10:00:00,-09:00,AKST +2036-03-09T11:00:00,-08:00,AKDT +2036-11-02T10:00:00,-09:00,AKST +2037-03-08T11:00:00,-08:00,AKDT +2037-11-01T10:00:00,-09:00,AKST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-mexico-city.txt b/desk/gub/lib/pytz/america-mexico-city.txt new file mode 100644 index 0000000..b8ce94b --- /dev/null +++ b/desk/gub/lib/pytz/america-mexico-city.txt @@ -0,0 +1,69 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1939-02-05T06:00:00,-05:00,CDT +1939-06-25T05:00:00,-06:00,CST +1940-12-09T06:00:00,-05:00,CDT +1941-04-01T05:00:00,-06:00,CST +1943-12-16T06:00:00,-05:00,CWT +1944-05-01T05:00:00,-06:00,CST +1950-02-12T06:00:00,-05:00,CDT +1950-07-30T05:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-05-06T08:00:00,-05:00,CDT +2001-09-30T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-04-01T08:00:00,-05:00,CDT +2007-10-28T07:00:00,-06:00,CST +2008-04-06T08:00:00,-05:00,CDT +2008-10-26T07:00:00,-06:00,CST +2009-04-05T08:00:00,-05:00,CDT +2009-10-25T07:00:00,-06:00,CST +2010-04-04T08:00:00,-05:00,CDT +2010-10-31T07:00:00,-06:00,CST +2011-04-03T08:00:00,-05:00,CDT +2011-10-30T07:00:00,-06:00,CST +2012-04-01T08:00:00,-05:00,CDT +2012-10-28T07:00:00,-06:00,CST +2013-04-07T08:00:00,-05:00,CDT +2013-10-27T07:00:00,-06:00,CST +2014-04-06T08:00:00,-05:00,CDT +2014-10-26T07:00:00,-06:00,CST +2015-04-05T08:00:00,-05:00,CDT +2015-10-25T07:00:00,-06:00,CST +2016-04-03T08:00:00,-05:00,CDT +2016-10-30T07:00:00,-06:00,CST +2017-04-02T08:00:00,-05:00,CDT +2017-10-29T07:00:00,-06:00,CST +2018-04-01T08:00:00,-05:00,CDT +2018-10-28T07:00:00,-06:00,CST +2019-04-07T08:00:00,-05:00,CDT +2019-10-27T07:00:00,-06:00,CST +2020-04-05T08:00:00,-05:00,CDT +2020-10-25T07:00:00,-06:00,CST +2021-04-04T08:00:00,-05:00,CDT +2021-10-31T07:00:00,-06:00,CST +2022-04-03T08:00:00,-05:00,CDT +2022-10-30T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-miquelon.txt b/desk/gub/lib/pytz/america-miquelon.txt new file mode 100644 index 0000000..6f86476 --- /dev/null +++ b/desk/gub/lib/pytz/america-miquelon.txt @@ -0,0 +1,105 @@ +Time,Offset,Name +1911-06-15T03:44:40,-04:00,AST +1980-05-01T04:00:00,-03:00,-03 +1987-04-05T05:00:00,-02:00,-02 +1987-10-25T04:00:00,-03:00,-03 +1988-04-03T05:00:00,-02:00,-02 +1988-10-30T04:00:00,-03:00,-03 +1989-04-02T05:00:00,-02:00,-02 +1989-10-29T04:00:00,-03:00,-03 +1990-04-01T05:00:00,-02:00,-02 +1990-10-28T04:00:00,-03:00,-03 +1991-04-07T05:00:00,-02:00,-02 +1991-10-27T04:00:00,-03:00,-03 +1992-04-05T05:00:00,-02:00,-02 +1992-10-25T04:00:00,-03:00,-03 +1993-04-04T05:00:00,-02:00,-02 +1993-10-31T04:00:00,-03:00,-03 +1994-04-03T05:00:00,-02:00,-02 +1994-10-30T04:00:00,-03:00,-03 +1995-04-02T05:00:00,-02:00,-02 +1995-10-29T04:00:00,-03:00,-03 +1996-04-07T05:00:00,-02:00,-02 +1996-10-27T04:00:00,-03:00,-03 +1997-04-06T05:00:00,-02:00,-02 +1997-10-26T04:00:00,-03:00,-03 +1998-04-05T05:00:00,-02:00,-02 +1998-10-25T04:00:00,-03:00,-03 +1999-04-04T05:00:00,-02:00,-02 +1999-10-31T04:00:00,-03:00,-03 +2000-04-02T05:00:00,-02:00,-02 +2000-10-29T04:00:00,-03:00,-03 +2001-04-01T05:00:00,-02:00,-02 +2001-10-28T04:00:00,-03:00,-03 +2002-04-07T05:00:00,-02:00,-02 +2002-10-27T04:00:00,-03:00,-03 +2003-04-06T05:00:00,-02:00,-02 +2003-10-26T04:00:00,-03:00,-03 +2004-04-04T05:00:00,-02:00,-02 +2004-10-31T04:00:00,-03:00,-03 +2005-04-03T05:00:00,-02:00,-02 +2005-10-30T04:00:00,-03:00,-03 +2006-04-02T05:00:00,-02:00,-02 +2006-10-29T04:00:00,-03:00,-03 +2007-03-11T05:00:00,-02:00,-02 +2007-11-04T04:00:00,-03:00,-03 +2008-03-09T05:00:00,-02:00,-02 +2008-11-02T04:00:00,-03:00,-03 +2009-03-08T05:00:00,-02:00,-02 +2009-11-01T04:00:00,-03:00,-03 +2010-03-14T05:00:00,-02:00,-02 +2010-11-07T04:00:00,-03:00,-03 +2011-03-13T05:00:00,-02:00,-02 +2011-11-06T04:00:00,-03:00,-03 +2012-03-11T05:00:00,-02:00,-02 +2012-11-04T04:00:00,-03:00,-03 +2013-03-10T05:00:00,-02:00,-02 +2013-11-03T04:00:00,-03:00,-03 +2014-03-09T05:00:00,-02:00,-02 +2014-11-02T04:00:00,-03:00,-03 +2015-03-08T05:00:00,-02:00,-02 +2015-11-01T04:00:00,-03:00,-03 +2016-03-13T05:00:00,-02:00,-02 +2016-11-06T04:00:00,-03:00,-03 +2017-03-12T05:00:00,-02:00,-02 +2017-11-05T04:00:00,-03:00,-03 +2018-03-11T05:00:00,-02:00,-02 +2018-11-04T04:00:00,-03:00,-03 +2019-03-10T05:00:00,-02:00,-02 +2019-11-03T04:00:00,-03:00,-03 +2020-03-08T05:00:00,-02:00,-02 +2020-11-01T04:00:00,-03:00,-03 +2021-03-14T05:00:00,-02:00,-02 +2021-11-07T04:00:00,-03:00,-03 +2022-03-13T05:00:00,-02:00,-02 +2022-11-06T04:00:00,-03:00,-03 +2023-03-12T05:00:00,-02:00,-02 +2023-11-05T04:00:00,-03:00,-03 +2024-03-10T05:00:00,-02:00,-02 +2024-11-03T04:00:00,-03:00,-03 +2025-03-09T05:00:00,-02:00,-02 +2025-11-02T04:00:00,-03:00,-03 +2026-03-08T05:00:00,-02:00,-02 +2026-11-01T04:00:00,-03:00,-03 +2027-03-14T05:00:00,-02:00,-02 +2027-11-07T04:00:00,-03:00,-03 +2028-03-12T05:00:00,-02:00,-02 +2028-11-05T04:00:00,-03:00,-03 +2029-03-11T05:00:00,-02:00,-02 +2029-11-04T04:00:00,-03:00,-03 +2030-03-10T05:00:00,-02:00,-02 +2030-11-03T04:00:00,-03:00,-03 +2031-03-09T05:00:00,-02:00,-02 +2031-11-02T04:00:00,-03:00,-03 +2032-03-14T05:00:00,-02:00,-02 +2032-11-07T04:00:00,-03:00,-03 +2033-03-13T05:00:00,-02:00,-02 +2033-11-06T04:00:00,-03:00,-03 +2034-03-12T05:00:00,-02:00,-02 +2034-11-05T04:00:00,-03:00,-03 +2035-03-11T05:00:00,-02:00,-02 +2035-11-04T04:00:00,-03:00,-03 +2036-03-09T05:00:00,-02:00,-02 +2036-11-02T04:00:00,-03:00,-03 +2037-03-08T05:00:00,-02:00,-02 +2037-11-01T04:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-moncton.txt b/desk/gub/lib/pytz/america-moncton.txt new file mode 100644 index 0000000..d0a7a06 --- /dev/null +++ b/desk/gub/lib/pytz/america-moncton.txt @@ -0,0 +1,208 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1902-06-15T05:00:00,-04:00,AST +1918-04-14T06:00:00,-03:00,ADT +1918-10-27T05:00:00,-04:00,AST +1933-06-11T05:00:00,-03:00,ADT +1933-09-10T04:00:00,-04:00,AST +1934-06-10T05:00:00,-03:00,ADT +1934-09-09T04:00:00,-04:00,AST +1935-06-09T05:00:00,-03:00,ADT +1935-09-08T04:00:00,-04:00,AST +1936-06-07T05:00:00,-03:00,ADT +1936-09-06T04:00:00,-04:00,AST +1937-06-06T05:00:00,-03:00,ADT +1937-09-05T04:00:00,-04:00,AST +1938-06-05T05:00:00,-03:00,ADT +1938-09-04T04:00:00,-04:00,AST +1939-05-27T05:00:00,-03:00,ADT +1939-09-23T04:00:00,-04:00,AST +1940-05-19T05:00:00,-03:00,ADT +1940-09-21T04:00:00,-04:00,AST +1941-05-04T05:00:00,-03:00,ADT +1941-09-27T04:00:00,-04:00,AST +1942-02-09T06:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST +1946-04-28T06:00:00,-03:00,ADT +1946-09-29T05:00:00,-04:00,AST +1947-04-27T06:00:00,-03:00,ADT +1947-09-28T05:00:00,-04:00,AST +1948-04-25T06:00:00,-03:00,ADT +1948-09-26T05:00:00,-04:00,AST +1949-04-24T06:00:00,-03:00,ADT +1949-09-25T05:00:00,-04:00,AST +1950-04-30T06:00:00,-03:00,ADT +1950-09-24T05:00:00,-04:00,AST +1951-04-29T06:00:00,-03:00,ADT +1951-09-30T05:00:00,-04:00,AST +1952-04-27T06:00:00,-03:00,ADT +1952-09-28T05:00:00,-04:00,AST +1953-04-26T06:00:00,-03:00,ADT +1953-09-27T05:00:00,-04:00,AST +1954-04-25T06:00:00,-03:00,ADT +1954-09-26T05:00:00,-04:00,AST +1955-04-24T06:00:00,-03:00,ADT +1955-09-25T05:00:00,-04:00,AST +1956-04-29T06:00:00,-03:00,ADT +1956-09-30T05:00:00,-04:00,AST +1957-04-28T06:00:00,-03:00,ADT +1957-10-27T05:00:00,-04:00,AST +1958-04-27T06:00:00,-03:00,ADT +1958-10-26T05:00:00,-04:00,AST +1959-04-26T06:00:00,-03:00,ADT +1959-10-25T05:00:00,-04:00,AST +1960-04-24T06:00:00,-03:00,ADT +1960-10-30T05:00:00,-04:00,AST +1961-04-30T06:00:00,-03:00,ADT +1961-10-29T05:00:00,-04:00,AST +1962-04-29T06:00:00,-03:00,ADT +1962-10-28T05:00:00,-04:00,AST +1963-04-28T06:00:00,-03:00,ADT +1963-10-27T05:00:00,-04:00,AST +1964-04-26T06:00:00,-03:00,ADT +1964-10-25T05:00:00,-04:00,AST +1965-04-25T06:00:00,-03:00,ADT +1965-10-31T05:00:00,-04:00,AST +1966-04-24T06:00:00,-03:00,ADT +1966-10-30T05:00:00,-04:00,AST +1967-04-30T06:00:00,-03:00,ADT +1967-10-29T05:00:00,-04:00,AST +1968-04-28T06:00:00,-03:00,ADT +1968-10-27T05:00:00,-04:00,AST +1969-04-27T06:00:00,-03:00,ADT +1969-10-26T05:00:00,-04:00,AST +1970-04-26T06:00:00,-03:00,ADT +1970-10-25T05:00:00,-04:00,AST +1971-04-25T06:00:00,-03:00,ADT +1971-10-31T05:00:00,-04:00,AST +1972-04-30T06:00:00,-03:00,ADT +1972-10-29T05:00:00,-04:00,AST +1974-04-28T06:00:00,-03:00,ADT +1974-10-27T05:00:00,-04:00,AST +1975-04-27T06:00:00,-03:00,ADT +1975-10-26T05:00:00,-04:00,AST +1976-04-25T06:00:00,-03:00,ADT +1976-10-31T05:00:00,-04:00,AST +1977-04-24T06:00:00,-03:00,ADT +1977-10-30T05:00:00,-04:00,AST +1978-04-30T06:00:00,-03:00,ADT +1978-10-29T05:00:00,-04:00,AST +1979-04-29T06:00:00,-03:00,ADT +1979-10-28T05:00:00,-04:00,AST +1980-04-27T06:00:00,-03:00,ADT +1980-10-26T05:00:00,-04:00,AST +1981-04-26T06:00:00,-03:00,ADT +1981-10-25T05:00:00,-04:00,AST +1982-04-25T06:00:00,-03:00,ADT +1982-10-31T05:00:00,-04:00,AST +1983-04-24T06:00:00,-03:00,ADT +1983-10-30T05:00:00,-04:00,AST +1984-04-29T06:00:00,-03:00,ADT +1984-10-28T05:00:00,-04:00,AST +1985-04-28T06:00:00,-03:00,ADT +1985-10-27T05:00:00,-04:00,AST +1986-04-27T06:00:00,-03:00,ADT +1986-10-26T05:00:00,-04:00,AST +1987-04-05T06:00:00,-03:00,ADT +1987-10-25T05:00:00,-04:00,AST +1988-04-03T06:00:00,-03:00,ADT +1988-10-30T05:00:00,-04:00,AST +1989-04-02T06:00:00,-03:00,ADT +1989-10-29T05:00:00,-04:00,AST +1990-04-01T06:00:00,-03:00,ADT +1990-10-28T05:00:00,-04:00,AST +1991-04-07T06:00:00,-03:00,ADT +1991-10-27T05:00:00,-04:00,AST +1992-04-05T06:00:00,-03:00,ADT +1992-10-25T05:00:00,-04:00,AST +1993-04-04T04:01:00,-03:00,ADT +1993-10-31T03:01:00,-04:00,AST +1994-04-03T04:01:00,-03:00,ADT +1994-10-30T03:01:00,-04:00,AST +1995-04-02T04:01:00,-03:00,ADT +1995-10-29T03:01:00,-04:00,AST +1996-04-07T04:01:00,-03:00,ADT +1996-10-27T03:01:00,-04:00,AST +1997-04-06T04:01:00,-03:00,ADT +1997-10-26T03:01:00,-04:00,AST +1998-04-05T04:01:00,-03:00,ADT +1998-10-25T03:01:00,-04:00,AST +1999-04-04T04:01:00,-03:00,ADT +1999-10-31T03:01:00,-04:00,AST +2000-04-02T04:01:00,-03:00,ADT +2000-10-29T03:01:00,-04:00,AST +2001-04-01T04:01:00,-03:00,ADT +2001-10-28T03:01:00,-04:00,AST +2002-04-07T04:01:00,-03:00,ADT +2002-10-27T03:01:00,-04:00,AST +2003-04-06T04:01:00,-03:00,ADT +2003-10-26T03:01:00,-04:00,AST +2004-04-04T04:01:00,-03:00,ADT +2004-10-31T03:01:00,-04:00,AST +2005-04-03T04:01:00,-03:00,ADT +2005-10-30T03:01:00,-04:00,AST +2006-04-02T04:01:00,-03:00,ADT +2006-10-29T03:01:00,-04:00,AST +2007-03-11T06:00:00,-03:00,ADT +2007-11-04T05:00:00,-04:00,AST +2008-03-09T06:00:00,-03:00,ADT +2008-11-02T05:00:00,-04:00,AST +2009-03-08T06:00:00,-03:00,ADT +2009-11-01T05:00:00,-04:00,AST +2010-03-14T06:00:00,-03:00,ADT +2010-11-07T05:00:00,-04:00,AST +2011-03-13T06:00:00,-03:00,ADT +2011-11-06T05:00:00,-04:00,AST +2012-03-11T06:00:00,-03:00,ADT +2012-11-04T05:00:00,-04:00,AST +2013-03-10T06:00:00,-03:00,ADT +2013-11-03T05:00:00,-04:00,AST +2014-03-09T06:00:00,-03:00,ADT +2014-11-02T05:00:00,-04:00,AST +2015-03-08T06:00:00,-03:00,ADT +2015-11-01T05:00:00,-04:00,AST +2016-03-13T06:00:00,-03:00,ADT +2016-11-06T05:00:00,-04:00,AST +2017-03-12T06:00:00,-03:00,ADT +2017-11-05T05:00:00,-04:00,AST +2018-03-11T06:00:00,-03:00,ADT +2018-11-04T05:00:00,-04:00,AST +2019-03-10T06:00:00,-03:00,ADT +2019-11-03T05:00:00,-04:00,AST +2020-03-08T06:00:00,-03:00,ADT +2020-11-01T05:00:00,-04:00,AST +2021-03-14T06:00:00,-03:00,ADT +2021-11-07T05:00:00,-04:00,AST +2022-03-13T06:00:00,-03:00,ADT +2022-11-06T05:00:00,-04:00,AST +2023-03-12T06:00:00,-03:00,ADT +2023-11-05T05:00:00,-04:00,AST +2024-03-10T06:00:00,-03:00,ADT +2024-11-03T05:00:00,-04:00,AST +2025-03-09T06:00:00,-03:00,ADT +2025-11-02T05:00:00,-04:00,AST +2026-03-08T06:00:00,-03:00,ADT +2026-11-01T05:00:00,-04:00,AST +2027-03-14T06:00:00,-03:00,ADT +2027-11-07T05:00:00,-04:00,AST +2028-03-12T06:00:00,-03:00,ADT +2028-11-05T05:00:00,-04:00,AST +2029-03-11T06:00:00,-03:00,ADT +2029-11-04T05:00:00,-04:00,AST +2030-03-10T06:00:00,-03:00,ADT +2030-11-03T05:00:00,-04:00,AST +2031-03-09T06:00:00,-03:00,ADT +2031-11-02T05:00:00,-04:00,AST +2032-03-14T06:00:00,-03:00,ADT +2032-11-07T05:00:00,-04:00,AST +2033-03-13T06:00:00,-03:00,ADT +2033-11-06T05:00:00,-04:00,AST +2034-03-12T06:00:00,-03:00,ADT +2034-11-05T05:00:00,-04:00,AST +2035-03-11T06:00:00,-03:00,ADT +2035-11-04T05:00:00,-04:00,AST +2036-03-09T06:00:00,-03:00,ADT +2036-11-02T05:00:00,-04:00,AST +2037-03-08T06:00:00,-03:00,ADT +2037-11-01T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-monterrey.txt b/desk/gub/lib/pytz/america-monterrey.txt new file mode 100644 index 0000000..5ae2a28 --- /dev/null +++ b/desk/gub/lib/pytz/america-monterrey.txt @@ -0,0 +1,63 @@ +Time,Offset,Name +1922-01-01T06:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-05-06T08:00:00,-05:00,CDT +2001-09-30T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-04-01T08:00:00,-05:00,CDT +2007-10-28T07:00:00,-06:00,CST +2008-04-06T08:00:00,-05:00,CDT +2008-10-26T07:00:00,-06:00,CST +2009-04-05T08:00:00,-05:00,CDT +2009-10-25T07:00:00,-06:00,CST +2010-04-04T08:00:00,-05:00,CDT +2010-10-31T07:00:00,-06:00,CST +2011-04-03T08:00:00,-05:00,CDT +2011-10-30T07:00:00,-06:00,CST +2012-04-01T08:00:00,-05:00,CDT +2012-10-28T07:00:00,-06:00,CST +2013-04-07T08:00:00,-05:00,CDT +2013-10-27T07:00:00,-06:00,CST +2014-04-06T08:00:00,-05:00,CDT +2014-10-26T07:00:00,-06:00,CST +2015-04-05T08:00:00,-05:00,CDT +2015-10-25T07:00:00,-06:00,CST +2016-04-03T08:00:00,-05:00,CDT +2016-10-30T07:00:00,-06:00,CST +2017-04-02T08:00:00,-05:00,CDT +2017-10-29T07:00:00,-06:00,CST +2018-04-01T08:00:00,-05:00,CDT +2018-10-28T07:00:00,-06:00,CST +2019-04-07T08:00:00,-05:00,CDT +2019-10-27T07:00:00,-06:00,CST +2020-04-05T08:00:00,-05:00,CDT +2020-10-25T07:00:00,-06:00,CST +2021-04-04T08:00:00,-05:00,CDT +2021-10-31T07:00:00,-06:00,CST +2022-04-03T08:00:00,-05:00,CDT +2022-10-30T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-montevideo.txt b/desk/gub/lib/pytz/america-montevideo.txt new file mode 100644 index 0000000..c2f2dbd --- /dev/null +++ b/desk/gub/lib/pytz/america-montevideo.txt @@ -0,0 +1,87 @@ +Time,Offset,Name +1908-06-10T03:44:51,-04:15,MMT +1920-05-01T03:44:51,-04:00,-04 +1923-10-01T04:00:00,-03:00,-03 +1924-04-01T03:00:00,-04:30,-0330 +1924-10-01T03:30:00,-03:00,-03 +1925-04-01T03:00:00,-04:30,-0330 +1925-10-01T03:30:00,-03:00,-03 +1926-04-01T03:00:00,-04:30,-0330 +1933-10-29T03:30:00,-03:00,-03 +1934-04-01T03:00:00,-04:30,-0330 +1934-10-28T03:30:00,-03:00,-03 +1935-03-31T03:00:00,-04:30,-0330 +1935-10-27T03:30:00,-03:00,-03 +1936-03-29T03:00:00,-04:30,-0330 +1936-10-25T03:30:00,-03:00,-03 +1937-03-28T03:00:00,-04:30,-0330 +1937-10-31T03:30:00,-03:00,-03 +1938-03-27T03:00:00,-04:30,-0330 +1938-10-30T03:30:00,-03:00,-03 +1939-03-26T03:00:00,-04:30,-0330 +1939-10-01T03:30:00,-03:00,-03 +1940-03-31T03:00:00,-04:30,-0330 +1940-10-27T03:30:00,-03:00,-03 +1941-03-30T03:00:00,-04:30,-0330 +1941-08-01T03:30:00,-03:00,-03 +1942-12-14T03:00:00,-03:30,-0230 +1943-03-14T02:30:00,-03:00,-03 +1959-05-24T03:00:00,-03:30,-0230 +1959-11-15T02:30:00,-03:00,-03 +1960-01-17T03:00:00,-02:00,-02 +1960-03-06T02:00:00,-03:00,-03 +1965-04-04T03:00:00,-02:00,-02 +1965-09-26T02:00:00,-03:00,-03 +1968-05-27T03:00:00,-03:30,-0230 +1968-12-01T02:30:00,-03:00,-03 +1970-04-25T03:00:00,-02:00,-02 +1970-06-14T02:00:00,-03:00,-03 +1972-04-23T03:00:00,-02:00,-02 +1972-07-16T02:00:00,-03:00,-03 +1974-01-13T03:00:00,-02:30,-0130 +1974-03-10T01:30:00,-03:30,-0230 +1974-09-01T02:30:00,-03:00,-03 +1974-12-22T03:00:00,-02:00,-02 +1975-03-30T02:00:00,-03:00,-03 +1976-12-19T03:00:00,-02:00,-02 +1977-03-06T02:00:00,-03:00,-03 +1977-12-04T03:00:00,-02:00,-02 +1978-03-05T02:00:00,-03:00,-03 +1978-12-17T03:00:00,-02:00,-02 +1979-03-04T02:00:00,-03:00,-03 +1979-04-29T03:00:00,-02:00,-02 +1980-03-16T02:00:00,-03:00,-03 +1987-12-14T03:00:00,-02:00,-02 +1988-02-28T02:00:00,-03:00,-03 +1988-12-11T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-29T03:00:00,-02:00,-02 +1990-02-25T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-03:00,-03 +1991-10-27T03:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-02-28T02:00:00,-03:00,-03 +2004-09-19T03:00:00,-02:00,-02 +2005-03-27T04:00:00,-03:00,-03 +2005-10-09T05:00:00,-02:00,-02 +2006-03-12T04:00:00,-03:00,-03 +2006-10-01T05:00:00,-02:00,-02 +2007-03-11T04:00:00,-03:00,-03 +2007-10-07T05:00:00,-02:00,-02 +2008-03-09T04:00:00,-03:00,-03 +2008-10-05T05:00:00,-02:00,-02 +2009-03-08T04:00:00,-03:00,-03 +2009-10-04T05:00:00,-02:00,-02 +2010-03-14T04:00:00,-03:00,-03 +2010-10-03T05:00:00,-02:00,-02 +2011-03-13T04:00:00,-03:00,-03 +2011-10-02T05:00:00,-02:00,-02 +2012-03-11T04:00:00,-03:00,-03 +2012-10-07T05:00:00,-02:00,-02 +2013-03-10T04:00:00,-03:00,-03 +2013-10-06T05:00:00,-02:00,-02 +2014-03-09T04:00:00,-03:00,-03 +2014-10-05T05:00:00,-02:00,-02 +2015-03-08T04:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-montreal.txt b/desk/gub/lib/pytz/america-montreal.txt new file mode 100644 index 0000000..4379fb8 --- /dev/null +++ b/desk/gub/lib/pytz/america-montreal.txt @@ -0,0 +1,234 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1918-04-14T07:00:00,-04:00,EDT +1918-10-27T06:00:00,-05:00,EST +1919-03-31T04:30:00,-04:00,EDT +1919-10-26T04:00:00,-05:00,EST +1920-05-02T07:00:00,-04:00,EDT +1920-09-26T04:00:00,-05:00,EST +1921-05-15T07:00:00,-04:00,EDT +1921-09-15T06:00:00,-05:00,EST +1922-05-14T07:00:00,-04:00,EDT +1922-09-17T06:00:00,-05:00,EST +1923-05-13T07:00:00,-04:00,EDT +1923-09-16T06:00:00,-05:00,EST +1924-05-04T07:00:00,-04:00,EDT +1924-09-21T06:00:00,-05:00,EST +1925-05-03T07:00:00,-04:00,EDT +1925-09-20T06:00:00,-05:00,EST +1926-05-02T07:00:00,-04:00,EDT +1926-09-19T06:00:00,-05:00,EST +1927-05-01T07:00:00,-04:00,EDT +1927-09-25T06:00:00,-05:00,EST +1928-04-29T07:00:00,-04:00,EDT +1928-09-30T06:00:00,-05:00,EST +1929-04-28T07:00:00,-04:00,EDT +1929-09-29T06:00:00,-05:00,EST +1930-04-27T07:00:00,-04:00,EDT +1930-09-28T06:00:00,-05:00,EST +1931-04-26T07:00:00,-04:00,EDT +1931-09-27T06:00:00,-05:00,EST +1932-05-01T07:00:00,-04:00,EDT +1932-09-25T06:00:00,-05:00,EST +1933-04-30T07:00:00,-04:00,EDT +1933-10-01T06:00:00,-05:00,EST +1934-04-29T07:00:00,-04:00,EDT +1934-09-30T06:00:00,-05:00,EST +1935-04-28T07:00:00,-04:00,EDT +1935-09-29T06:00:00,-05:00,EST +1936-04-26T07:00:00,-04:00,EDT +1936-09-27T06:00:00,-05:00,EST +1937-04-25T07:00:00,-04:00,EDT +1937-09-26T06:00:00,-05:00,EST +1938-04-24T07:00:00,-04:00,EDT +1938-09-25T06:00:00,-05:00,EST +1939-04-30T07:00:00,-04:00,EDT +1939-09-24T06:00:00,-05:00,EST +1940-04-28T07:00:00,-04:00,EDT +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1946-04-28T07:00:00,-04:00,EDT +1946-09-29T06:00:00,-05:00,EST +1947-04-27T07:00:00,-04:00,EDT +1947-09-28T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1949-04-24T07:00:00,-04:00,EDT +1949-11-27T06:00:00,-05:00,EST +1950-04-30T07:00:00,-04:00,EDT +1950-11-26T06:00:00,-05:00,EST +1951-04-29T07:00:00,-04:00,EDT +1951-09-30T06:00:00,-05:00,EST +1952-04-27T07:00:00,-04:00,EDT +1952-09-28T06:00:00,-05:00,EST +1953-04-26T07:00:00,-04:00,EDT +1953-09-27T06:00:00,-05:00,EST +1954-04-25T07:00:00,-04:00,EDT +1954-09-26T06:00:00,-05:00,EST +1955-04-24T07:00:00,-04:00,EDT +1955-09-25T06:00:00,-05:00,EST +1956-04-29T07:00:00,-04:00,EDT +1956-09-30T06:00:00,-05:00,EST +1957-04-28T07:00:00,-04:00,EDT +1957-10-27T06:00:00,-05:00,EST +1958-04-27T07:00:00,-04:00,EDT +1958-10-26T06:00:00,-05:00,EST +1959-04-26T07:00:00,-04:00,EDT +1959-10-25T06:00:00,-05:00,EST +1960-04-24T07:00:00,-04:00,EDT +1960-10-30T06:00:00,-05:00,EST +1961-04-30T07:00:00,-04:00,EDT +1961-10-29T06:00:00,-05:00,EST +1962-04-29T07:00:00,-04:00,EDT +1962-10-28T06:00:00,-05:00,EST +1963-04-28T07:00:00,-04:00,EDT +1963-10-27T06:00:00,-05:00,EST +1964-04-26T07:00:00,-04:00,EDT +1964-10-25T06:00:00,-05:00,EST +1965-04-25T07:00:00,-04:00,EDT +1965-10-31T06:00:00,-05:00,EST +1966-04-24T07:00:00,-04:00,EDT +1966-10-30T06:00:00,-05:00,EST +1967-04-30T07:00:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-04-28T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-montserrat.txt b/desk/gub/lib/pytz/america-montserrat.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-montserrat.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-nassau.txt b/desk/gub/lib/pytz/america-nassau.txt new file mode 100644 index 0000000..4379fb8 --- /dev/null +++ b/desk/gub/lib/pytz/america-nassau.txt @@ -0,0 +1,234 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1918-04-14T07:00:00,-04:00,EDT +1918-10-27T06:00:00,-05:00,EST +1919-03-31T04:30:00,-04:00,EDT +1919-10-26T04:00:00,-05:00,EST +1920-05-02T07:00:00,-04:00,EDT +1920-09-26T04:00:00,-05:00,EST +1921-05-15T07:00:00,-04:00,EDT +1921-09-15T06:00:00,-05:00,EST +1922-05-14T07:00:00,-04:00,EDT +1922-09-17T06:00:00,-05:00,EST +1923-05-13T07:00:00,-04:00,EDT +1923-09-16T06:00:00,-05:00,EST +1924-05-04T07:00:00,-04:00,EDT +1924-09-21T06:00:00,-05:00,EST +1925-05-03T07:00:00,-04:00,EDT +1925-09-20T06:00:00,-05:00,EST +1926-05-02T07:00:00,-04:00,EDT +1926-09-19T06:00:00,-05:00,EST +1927-05-01T07:00:00,-04:00,EDT +1927-09-25T06:00:00,-05:00,EST +1928-04-29T07:00:00,-04:00,EDT +1928-09-30T06:00:00,-05:00,EST +1929-04-28T07:00:00,-04:00,EDT +1929-09-29T06:00:00,-05:00,EST +1930-04-27T07:00:00,-04:00,EDT +1930-09-28T06:00:00,-05:00,EST +1931-04-26T07:00:00,-04:00,EDT +1931-09-27T06:00:00,-05:00,EST +1932-05-01T07:00:00,-04:00,EDT +1932-09-25T06:00:00,-05:00,EST +1933-04-30T07:00:00,-04:00,EDT +1933-10-01T06:00:00,-05:00,EST +1934-04-29T07:00:00,-04:00,EDT +1934-09-30T06:00:00,-05:00,EST +1935-04-28T07:00:00,-04:00,EDT +1935-09-29T06:00:00,-05:00,EST +1936-04-26T07:00:00,-04:00,EDT +1936-09-27T06:00:00,-05:00,EST +1937-04-25T07:00:00,-04:00,EDT +1937-09-26T06:00:00,-05:00,EST +1938-04-24T07:00:00,-04:00,EDT +1938-09-25T06:00:00,-05:00,EST +1939-04-30T07:00:00,-04:00,EDT +1939-09-24T06:00:00,-05:00,EST +1940-04-28T07:00:00,-04:00,EDT +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1946-04-28T07:00:00,-04:00,EDT +1946-09-29T06:00:00,-05:00,EST +1947-04-27T07:00:00,-04:00,EDT +1947-09-28T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1949-04-24T07:00:00,-04:00,EDT +1949-11-27T06:00:00,-05:00,EST +1950-04-30T07:00:00,-04:00,EDT +1950-11-26T06:00:00,-05:00,EST +1951-04-29T07:00:00,-04:00,EDT +1951-09-30T06:00:00,-05:00,EST +1952-04-27T07:00:00,-04:00,EDT +1952-09-28T06:00:00,-05:00,EST +1953-04-26T07:00:00,-04:00,EDT +1953-09-27T06:00:00,-05:00,EST +1954-04-25T07:00:00,-04:00,EDT +1954-09-26T06:00:00,-05:00,EST +1955-04-24T07:00:00,-04:00,EDT +1955-09-25T06:00:00,-05:00,EST +1956-04-29T07:00:00,-04:00,EDT +1956-09-30T06:00:00,-05:00,EST +1957-04-28T07:00:00,-04:00,EDT +1957-10-27T06:00:00,-05:00,EST +1958-04-27T07:00:00,-04:00,EDT +1958-10-26T06:00:00,-05:00,EST +1959-04-26T07:00:00,-04:00,EDT +1959-10-25T06:00:00,-05:00,EST +1960-04-24T07:00:00,-04:00,EDT +1960-10-30T06:00:00,-05:00,EST +1961-04-30T07:00:00,-04:00,EDT +1961-10-29T06:00:00,-05:00,EST +1962-04-29T07:00:00,-04:00,EDT +1962-10-28T06:00:00,-05:00,EST +1963-04-28T07:00:00,-04:00,EDT +1963-10-27T06:00:00,-05:00,EST +1964-04-26T07:00:00,-04:00,EDT +1964-10-25T06:00:00,-05:00,EST +1965-04-25T07:00:00,-04:00,EDT +1965-10-31T06:00:00,-05:00,EST +1966-04-24T07:00:00,-04:00,EDT +1966-10-30T06:00:00,-05:00,EST +1967-04-30T07:00:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-04-28T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-new-york.txt b/desk/gub/lib/pytz/america-new-york.txt new file mode 100644 index 0000000..7921b85 --- /dev/null +++ b/desk/gub/lib/pytz/america-new-york.txt @@ -0,0 +1,237 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1918-03-31T07:00:00,-04:00,EDT +1918-10-27T06:00:00,-05:00,EST +1919-03-30T07:00:00,-04:00,EDT +1919-10-26T06:00:00,-05:00,EST +1920-03-28T07:00:00,-04:00,EDT +1920-10-31T06:00:00,-05:00,EST +1921-04-24T07:00:00,-04:00,EDT +1921-09-25T06:00:00,-05:00,EST +1922-04-30T07:00:00,-04:00,EDT +1922-09-24T06:00:00,-05:00,EST +1923-04-29T07:00:00,-04:00,EDT +1923-09-30T06:00:00,-05:00,EST +1924-04-27T07:00:00,-04:00,EDT +1924-09-28T06:00:00,-05:00,EST +1925-04-26T07:00:00,-04:00,EDT +1925-09-27T06:00:00,-05:00,EST +1926-04-25T07:00:00,-04:00,EDT +1926-09-26T06:00:00,-05:00,EST +1927-04-24T07:00:00,-04:00,EDT +1927-09-25T06:00:00,-05:00,EST +1928-04-29T07:00:00,-04:00,EDT +1928-09-30T06:00:00,-05:00,EST +1929-04-28T07:00:00,-04:00,EDT +1929-09-29T06:00:00,-05:00,EST +1930-04-27T07:00:00,-04:00,EDT +1930-09-28T06:00:00,-05:00,EST +1931-04-26T07:00:00,-04:00,EDT +1931-09-27T06:00:00,-05:00,EST +1932-04-24T07:00:00,-04:00,EDT +1932-09-25T06:00:00,-05:00,EST +1933-04-30T07:00:00,-04:00,EDT +1933-09-24T06:00:00,-05:00,EST +1934-04-29T07:00:00,-04:00,EDT +1934-09-30T06:00:00,-05:00,EST +1935-04-28T07:00:00,-04:00,EDT +1935-09-29T06:00:00,-05:00,EST +1936-04-26T07:00:00,-04:00,EDT +1936-09-27T06:00:00,-05:00,EST +1937-04-25T07:00:00,-04:00,EDT +1937-09-26T06:00:00,-05:00,EST +1938-04-24T07:00:00,-04:00,EDT +1938-09-25T06:00:00,-05:00,EST +1939-04-30T07:00:00,-04:00,EDT +1939-09-24T06:00:00,-05:00,EST +1940-04-28T07:00:00,-04:00,EDT +1940-09-29T06:00:00,-05:00,EST +1941-04-27T07:00:00,-04:00,EDT +1941-09-28T06:00:00,-05:00,EST +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1946-04-28T07:00:00,-04:00,EDT +1946-09-29T06:00:00,-05:00,EST +1947-04-27T07:00:00,-04:00,EDT +1947-09-28T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1949-04-24T07:00:00,-04:00,EDT +1949-09-25T06:00:00,-05:00,EST +1950-04-30T07:00:00,-04:00,EDT +1950-09-24T06:00:00,-05:00,EST +1951-04-29T07:00:00,-04:00,EDT +1951-09-30T06:00:00,-05:00,EST +1952-04-27T07:00:00,-04:00,EDT +1952-09-28T06:00:00,-05:00,EST +1953-04-26T07:00:00,-04:00,EDT +1953-09-27T06:00:00,-05:00,EST +1954-04-25T07:00:00,-04:00,EDT +1954-09-26T06:00:00,-05:00,EST +1955-04-24T07:00:00,-04:00,EDT +1955-10-30T06:00:00,-05:00,EST +1956-04-29T07:00:00,-04:00,EDT +1956-10-28T06:00:00,-05:00,EST +1957-04-28T07:00:00,-04:00,EDT +1957-10-27T06:00:00,-05:00,EST +1958-04-27T07:00:00,-04:00,EDT +1958-10-26T06:00:00,-05:00,EST +1959-04-26T07:00:00,-04:00,EDT +1959-10-25T06:00:00,-05:00,EST +1960-04-24T07:00:00,-04:00,EDT +1960-10-30T06:00:00,-05:00,EST +1961-04-30T07:00:00,-04:00,EDT +1961-10-29T06:00:00,-05:00,EST +1962-04-29T07:00:00,-04:00,EDT +1962-10-28T06:00:00,-05:00,EST +1963-04-28T07:00:00,-04:00,EDT +1963-10-27T06:00:00,-05:00,EST +1964-04-26T07:00:00,-04:00,EDT +1964-10-25T06:00:00,-05:00,EST +1965-04-25T07:00:00,-04:00,EDT +1965-10-31T06:00:00,-05:00,EST +1966-04-24T07:00:00,-04:00,EDT +1966-10-30T06:00:00,-05:00,EST +1967-04-30T07:00:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-01-06T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-02-23T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-nipigon.txt b/desk/gub/lib/pytz/america-nipigon.txt new file mode 100644 index 0000000..4379fb8 --- /dev/null +++ b/desk/gub/lib/pytz/america-nipigon.txt @@ -0,0 +1,234 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1918-04-14T07:00:00,-04:00,EDT +1918-10-27T06:00:00,-05:00,EST +1919-03-31T04:30:00,-04:00,EDT +1919-10-26T04:00:00,-05:00,EST +1920-05-02T07:00:00,-04:00,EDT +1920-09-26T04:00:00,-05:00,EST +1921-05-15T07:00:00,-04:00,EDT +1921-09-15T06:00:00,-05:00,EST +1922-05-14T07:00:00,-04:00,EDT +1922-09-17T06:00:00,-05:00,EST +1923-05-13T07:00:00,-04:00,EDT +1923-09-16T06:00:00,-05:00,EST +1924-05-04T07:00:00,-04:00,EDT +1924-09-21T06:00:00,-05:00,EST +1925-05-03T07:00:00,-04:00,EDT +1925-09-20T06:00:00,-05:00,EST +1926-05-02T07:00:00,-04:00,EDT +1926-09-19T06:00:00,-05:00,EST +1927-05-01T07:00:00,-04:00,EDT +1927-09-25T06:00:00,-05:00,EST +1928-04-29T07:00:00,-04:00,EDT +1928-09-30T06:00:00,-05:00,EST +1929-04-28T07:00:00,-04:00,EDT +1929-09-29T06:00:00,-05:00,EST +1930-04-27T07:00:00,-04:00,EDT +1930-09-28T06:00:00,-05:00,EST +1931-04-26T07:00:00,-04:00,EDT +1931-09-27T06:00:00,-05:00,EST +1932-05-01T07:00:00,-04:00,EDT +1932-09-25T06:00:00,-05:00,EST +1933-04-30T07:00:00,-04:00,EDT +1933-10-01T06:00:00,-05:00,EST +1934-04-29T07:00:00,-04:00,EDT +1934-09-30T06:00:00,-05:00,EST +1935-04-28T07:00:00,-04:00,EDT +1935-09-29T06:00:00,-05:00,EST +1936-04-26T07:00:00,-04:00,EDT +1936-09-27T06:00:00,-05:00,EST +1937-04-25T07:00:00,-04:00,EDT +1937-09-26T06:00:00,-05:00,EST +1938-04-24T07:00:00,-04:00,EDT +1938-09-25T06:00:00,-05:00,EST +1939-04-30T07:00:00,-04:00,EDT +1939-09-24T06:00:00,-05:00,EST +1940-04-28T07:00:00,-04:00,EDT +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1946-04-28T07:00:00,-04:00,EDT +1946-09-29T06:00:00,-05:00,EST +1947-04-27T07:00:00,-04:00,EDT +1947-09-28T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1949-04-24T07:00:00,-04:00,EDT +1949-11-27T06:00:00,-05:00,EST +1950-04-30T07:00:00,-04:00,EDT +1950-11-26T06:00:00,-05:00,EST +1951-04-29T07:00:00,-04:00,EDT +1951-09-30T06:00:00,-05:00,EST +1952-04-27T07:00:00,-04:00,EDT +1952-09-28T06:00:00,-05:00,EST +1953-04-26T07:00:00,-04:00,EDT +1953-09-27T06:00:00,-05:00,EST +1954-04-25T07:00:00,-04:00,EDT +1954-09-26T06:00:00,-05:00,EST +1955-04-24T07:00:00,-04:00,EDT +1955-09-25T06:00:00,-05:00,EST +1956-04-29T07:00:00,-04:00,EDT +1956-09-30T06:00:00,-05:00,EST +1957-04-28T07:00:00,-04:00,EDT +1957-10-27T06:00:00,-05:00,EST +1958-04-27T07:00:00,-04:00,EDT +1958-10-26T06:00:00,-05:00,EST +1959-04-26T07:00:00,-04:00,EDT +1959-10-25T06:00:00,-05:00,EST +1960-04-24T07:00:00,-04:00,EDT +1960-10-30T06:00:00,-05:00,EST +1961-04-30T07:00:00,-04:00,EDT +1961-10-29T06:00:00,-05:00,EST +1962-04-29T07:00:00,-04:00,EDT +1962-10-28T06:00:00,-05:00,EST +1963-04-28T07:00:00,-04:00,EDT +1963-10-27T06:00:00,-05:00,EST +1964-04-26T07:00:00,-04:00,EDT +1964-10-25T06:00:00,-05:00,EST +1965-04-25T07:00:00,-04:00,EDT +1965-10-31T06:00:00,-05:00,EST +1966-04-24T07:00:00,-04:00,EDT +1966-10-30T06:00:00,-05:00,EST +1967-04-30T07:00:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-04-28T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-nome.txt b/desk/gub/lib/pytz/america-nome.txt new file mode 100644 index 0000000..423ed48 --- /dev/null +++ b/desk/gub/lib/pytz/america-nome.txt @@ -0,0 +1,146 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:58,LMT +1901-12-13T20:45:52,-11:00,NST +1942-02-09T13:00:00,-10:00,NWT +1945-08-14T23:00:00,-10:00,NPT +1945-09-30T12:00:00,-11:00,NST +1967-04-01T11:00:00,-11:00,BST +1969-04-27T13:00:00,-10:00,BDT +1969-10-26T12:00:00,-11:00,BST +1970-04-26T13:00:00,-10:00,BDT +1970-10-25T12:00:00,-11:00,BST +1971-04-25T13:00:00,-10:00,BDT +1971-10-31T12:00:00,-11:00,BST +1972-04-30T13:00:00,-10:00,BDT +1972-10-29T12:00:00,-11:00,BST +1973-04-29T13:00:00,-10:00,BDT +1973-10-28T12:00:00,-11:00,BST +1974-01-06T13:00:00,-10:00,BDT +1974-10-27T12:00:00,-11:00,BST +1975-02-23T13:00:00,-10:00,BDT +1975-10-26T12:00:00,-11:00,BST +1976-04-25T13:00:00,-10:00,BDT +1976-10-31T12:00:00,-11:00,BST +1977-04-24T13:00:00,-10:00,BDT +1977-10-30T12:00:00,-11:00,BST +1978-04-30T13:00:00,-10:00,BDT +1978-10-29T12:00:00,-11:00,BST +1979-04-29T13:00:00,-10:00,BDT +1979-10-28T12:00:00,-11:00,BST +1980-04-27T13:00:00,-10:00,BDT +1980-10-26T12:00:00,-11:00,BST +1981-04-26T13:00:00,-10:00,BDT +1981-10-25T12:00:00,-11:00,BST +1982-04-25T13:00:00,-10:00,BDT +1982-10-31T12:00:00,-11:00,BST +1983-04-24T13:00:00,-10:00,BDT +1983-10-30T12:00:00,-09:00,YST +1983-11-30T09:00:00,-09:00,AKST +1984-04-29T11:00:00,-08:00,AKDT +1984-10-28T10:00:00,-09:00,AKST +1985-04-28T11:00:00,-08:00,AKDT +1985-10-27T10:00:00,-09:00,AKST +1986-04-27T11:00:00,-08:00,AKDT +1986-10-26T10:00:00,-09:00,AKST +1987-04-05T11:00:00,-08:00,AKDT +1987-10-25T10:00:00,-09:00,AKST +1988-04-03T11:00:00,-08:00,AKDT +1988-10-30T10:00:00,-09:00,AKST +1989-04-02T11:00:00,-08:00,AKDT +1989-10-29T10:00:00,-09:00,AKST +1990-04-01T11:00:00,-08:00,AKDT +1990-10-28T10:00:00,-09:00,AKST +1991-04-07T11:00:00,-08:00,AKDT +1991-10-27T10:00:00,-09:00,AKST +1992-04-05T11:00:00,-08:00,AKDT +1992-10-25T10:00:00,-09:00,AKST +1993-04-04T11:00:00,-08:00,AKDT +1993-10-31T10:00:00,-09:00,AKST +1994-04-03T11:00:00,-08:00,AKDT +1994-10-30T10:00:00,-09:00,AKST +1995-04-02T11:00:00,-08:00,AKDT +1995-10-29T10:00:00,-09:00,AKST +1996-04-07T11:00:00,-08:00,AKDT +1996-10-27T10:00:00,-09:00,AKST +1997-04-06T11:00:00,-08:00,AKDT +1997-10-26T10:00:00,-09:00,AKST +1998-04-05T11:00:00,-08:00,AKDT +1998-10-25T10:00:00,-09:00,AKST +1999-04-04T11:00:00,-08:00,AKDT +1999-10-31T10:00:00,-09:00,AKST +2000-04-02T11:00:00,-08:00,AKDT +2000-10-29T10:00:00,-09:00,AKST +2001-04-01T11:00:00,-08:00,AKDT +2001-10-28T10:00:00,-09:00,AKST +2002-04-07T11:00:00,-08:00,AKDT +2002-10-27T10:00:00,-09:00,AKST +2003-04-06T11:00:00,-08:00,AKDT +2003-10-26T10:00:00,-09:00,AKST +2004-04-04T11:00:00,-08:00,AKDT +2004-10-31T10:00:00,-09:00,AKST +2005-04-03T11:00:00,-08:00,AKDT +2005-10-30T10:00:00,-09:00,AKST +2006-04-02T11:00:00,-08:00,AKDT +2006-10-29T10:00:00,-09:00,AKST +2007-03-11T11:00:00,-08:00,AKDT +2007-11-04T10:00:00,-09:00,AKST +2008-03-09T11:00:00,-08:00,AKDT +2008-11-02T10:00:00,-09:00,AKST +2009-03-08T11:00:00,-08:00,AKDT +2009-11-01T10:00:00,-09:00,AKST +2010-03-14T11:00:00,-08:00,AKDT +2010-11-07T10:00:00,-09:00,AKST +2011-03-13T11:00:00,-08:00,AKDT +2011-11-06T10:00:00,-09:00,AKST +2012-03-11T11:00:00,-08:00,AKDT +2012-11-04T10:00:00,-09:00,AKST +2013-03-10T11:00:00,-08:00,AKDT +2013-11-03T10:00:00,-09:00,AKST +2014-03-09T11:00:00,-08:00,AKDT +2014-11-02T10:00:00,-09:00,AKST +2015-03-08T11:00:00,-08:00,AKDT +2015-11-01T10:00:00,-09:00,AKST +2016-03-13T11:00:00,-08:00,AKDT +2016-11-06T10:00:00,-09:00,AKST +2017-03-12T11:00:00,-08:00,AKDT +2017-11-05T10:00:00,-09:00,AKST +2018-03-11T11:00:00,-08:00,AKDT +2018-11-04T10:00:00,-09:00,AKST +2019-03-10T11:00:00,-08:00,AKDT +2019-11-03T10:00:00,-09:00,AKST +2020-03-08T11:00:00,-08:00,AKDT +2020-11-01T10:00:00,-09:00,AKST +2021-03-14T11:00:00,-08:00,AKDT +2021-11-07T10:00:00,-09:00,AKST +2022-03-13T11:00:00,-08:00,AKDT +2022-11-06T10:00:00,-09:00,AKST +2023-03-12T11:00:00,-08:00,AKDT +2023-11-05T10:00:00,-09:00,AKST +2024-03-10T11:00:00,-08:00,AKDT +2024-11-03T10:00:00,-09:00,AKST +2025-03-09T11:00:00,-08:00,AKDT +2025-11-02T10:00:00,-09:00,AKST +2026-03-08T11:00:00,-08:00,AKDT +2026-11-01T10:00:00,-09:00,AKST +2027-03-14T11:00:00,-08:00,AKDT +2027-11-07T10:00:00,-09:00,AKST +2028-03-12T11:00:00,-08:00,AKDT +2028-11-05T10:00:00,-09:00,AKST +2029-03-11T11:00:00,-08:00,AKDT +2029-11-04T10:00:00,-09:00,AKST +2030-03-10T11:00:00,-08:00,AKDT +2030-11-03T10:00:00,-09:00,AKST +2031-03-09T11:00:00,-08:00,AKDT +2031-11-02T10:00:00,-09:00,AKST +2032-03-14T11:00:00,-08:00,AKDT +2032-11-07T10:00:00,-09:00,AKST +2033-03-13T11:00:00,-08:00,AKDT +2033-11-06T10:00:00,-09:00,AKST +2034-03-12T11:00:00,-08:00,AKDT +2034-11-05T10:00:00,-09:00,AKST +2035-03-11T11:00:00,-08:00,AKDT +2035-11-04T10:00:00,-09:00,AKST +2036-03-09T11:00:00,-08:00,AKDT +2036-11-02T10:00:00,-09:00,AKST +2037-03-08T11:00:00,-08:00,AKDT +2037-11-01T10:00:00,-09:00,AKST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-noronha.txt b/desk/gub/lib/pytz/america-noronha.txt new file mode 100644 index 0000000..5a829be --- /dev/null +++ b/desk/gub/lib/pytz/america-noronha.txt @@ -0,0 +1,40 @@ +Time,Offset,Name +1914-01-01T02:09:40,-02:00,-02 +1931-10-03T13:00:00,-01:00,-01 +1932-04-01T01:00:00,-02:00,-02 +1932-10-03T02:00:00,-01:00,-01 +1933-04-01T01:00:00,-02:00,-02 +1949-12-01T02:00:00,-01:00,-01 +1950-04-16T02:00:00,-02:00,-02 +1950-12-01T02:00:00,-01:00,-01 +1951-04-01T01:00:00,-02:00,-02 +1951-12-01T02:00:00,-01:00,-01 +1952-04-01T01:00:00,-02:00,-02 +1952-12-01T02:00:00,-01:00,-01 +1953-03-01T01:00:00,-02:00,-02 +1963-12-09T02:00:00,-01:00,-01 +1964-03-01T01:00:00,-02:00,-02 +1965-01-31T02:00:00,-01:00,-01 +1965-03-31T01:00:00,-02:00,-02 +1965-12-01T02:00:00,-01:00,-01 +1966-03-01T01:00:00,-02:00,-02 +1966-11-01T02:00:00,-01:00,-01 +1967-03-01T01:00:00,-02:00,-02 +1967-11-01T02:00:00,-01:00,-01 +1968-03-01T01:00:00,-02:00,-02 +1985-11-02T02:00:00,-01:00,-01 +1986-03-15T01:00:00,-02:00,-02 +1986-10-25T02:00:00,-01:00,-01 +1987-02-14T01:00:00,-02:00,-02 +1987-10-25T02:00:00,-01:00,-01 +1988-02-07T01:00:00,-02:00,-02 +1988-10-16T02:00:00,-01:00,-01 +1989-01-29T01:00:00,-02:00,-02 +1989-10-15T02:00:00,-01:00,-01 +1990-02-11T01:00:00,-02:00,-02 +1999-10-03T02:00:00,-01:00,-01 +2000-02-27T01:00:00,-02:00,-02 +2000-10-08T02:00:00,-01:00,-01 +2000-10-15T01:00:00,-02:00,-02 +2001-10-14T02:00:00,-01:00,-01 +2002-02-17T01:00:00,-02:00,-02 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-north-dakota-beulah.txt b/desk/gub/lib/pytz/america-north-dakota-beulah.txt new file mode 100644 index 0000000..e7c85e7 --- /dev/null +++ b/desk/gub/lib/pytz/america-north-dakota-beulah.txt @@ -0,0 +1,151 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST +1968-04-28T09:00:00,-06:00,MDT +1968-10-27T08:00:00,-07:00,MST +1969-04-27T09:00:00,-06:00,MDT +1969-10-26T08:00:00,-07:00,MST +1970-04-26T09:00:00,-06:00,MDT +1970-10-25T08:00:00,-07:00,MST +1971-04-25T09:00:00,-06:00,MDT +1971-10-31T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-01-06T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-02-23T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-north-dakota-center.txt b/desk/gub/lib/pytz/america-north-dakota-center.txt new file mode 100644 index 0000000..6046826 --- /dev/null +++ b/desk/gub/lib/pytz/america-north-dakota-center.txt @@ -0,0 +1,151 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST +1968-04-28T09:00:00,-06:00,MDT +1968-10-27T08:00:00,-07:00,MST +1969-04-27T09:00:00,-06:00,MDT +1969-10-26T08:00:00,-07:00,MST +1970-04-26T09:00:00,-06:00,MDT +1970-10-25T08:00:00,-07:00,MST +1971-04-25T09:00:00,-06:00,MDT +1971-10-31T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-01-06T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-02-23T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T07:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T07:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-north-dakota-new-salem.txt b/desk/gub/lib/pytz/america-north-dakota-new-salem.txt new file mode 100644 index 0000000..a618789 --- /dev/null +++ b/desk/gub/lib/pytz/america-north-dakota-new-salem.txt @@ -0,0 +1,151 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST +1968-04-28T09:00:00,-06:00,MDT +1968-10-27T08:00:00,-07:00,MST +1969-04-27T09:00:00,-06:00,MDT +1969-10-26T08:00:00,-07:00,MST +1970-04-26T09:00:00,-06:00,MDT +1970-10-25T08:00:00,-07:00,MST +1971-04-25T09:00:00,-06:00,MDT +1971-10-31T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-01-06T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-02-23T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-nuuk.txt b/desk/gub/lib/pytz/america-nuuk.txt new file mode 100644 index 0000000..226ae8f --- /dev/null +++ b/desk/gub/lib/pytz/america-nuuk.txt @@ -0,0 +1,117 @@ +Time,Offset,Name +1916-07-28T03:26:56,-03:00,-03 +1980-04-06T05:00:00,-02:00,-02 +1980-09-28T01:00:00,-03:00,-03 +1981-03-29T01:00:00,-02:00,-02 +1981-09-27T01:00:00,-03:00,-03 +1982-03-28T01:00:00,-02:00,-02 +1982-09-26T01:00:00,-03:00,-03 +1983-03-27T01:00:00,-02:00,-02 +1983-09-25T01:00:00,-03:00,-03 +1984-03-25T01:00:00,-02:00,-02 +1984-09-30T01:00:00,-03:00,-03 +1985-03-31T01:00:00,-02:00,-02 +1985-09-29T01:00:00,-03:00,-03 +1986-03-30T01:00:00,-02:00,-02 +1986-09-28T01:00:00,-03:00,-03 +1987-03-29T01:00:00,-02:00,-02 +1987-09-27T01:00:00,-03:00,-03 +1988-03-27T01:00:00,-02:00,-02 +1988-09-25T01:00:00,-03:00,-03 +1989-03-26T01:00:00,-02:00,-02 +1989-09-24T01:00:00,-03:00,-03 +1990-03-25T01:00:00,-02:00,-02 +1990-09-30T01:00:00,-03:00,-03 +1991-03-31T01:00:00,-02:00,-02 +1991-09-29T01:00:00,-03:00,-03 +1992-03-29T01:00:00,-02:00,-02 +1992-09-27T01:00:00,-03:00,-03 +1993-03-28T01:00:00,-02:00,-02 +1993-09-26T01:00:00,-03:00,-03 +1994-03-27T01:00:00,-02:00,-02 +1994-09-25T01:00:00,-03:00,-03 +1995-03-26T01:00:00,-02:00,-02 +1995-09-24T01:00:00,-03:00,-03 +1996-03-31T01:00:00,-02:00,-02 +1996-10-27T01:00:00,-03:00,-03 +1997-03-30T01:00:00,-02:00,-02 +1997-10-26T01:00:00,-03:00,-03 +1998-03-29T01:00:00,-02:00,-02 +1998-10-25T01:00:00,-03:00,-03 +1999-03-28T01:00:00,-02:00,-02 +1999-10-31T01:00:00,-03:00,-03 +2000-03-26T01:00:00,-02:00,-02 +2000-10-29T01:00:00,-03:00,-03 +2001-03-25T01:00:00,-02:00,-02 +2001-10-28T01:00:00,-03:00,-03 +2002-03-31T01:00:00,-02:00,-02 +2002-10-27T01:00:00,-03:00,-03 +2003-03-30T01:00:00,-02:00,-02 +2003-10-26T01:00:00,-03:00,-03 +2004-03-28T01:00:00,-02:00,-02 +2004-10-31T01:00:00,-03:00,-03 +2005-03-27T01:00:00,-02:00,-02 +2005-10-30T01:00:00,-03:00,-03 +2006-03-26T01:00:00,-02:00,-02 +2006-10-29T01:00:00,-03:00,-03 +2007-03-25T01:00:00,-02:00,-02 +2007-10-28T01:00:00,-03:00,-03 +2008-03-30T01:00:00,-02:00,-02 +2008-10-26T01:00:00,-03:00,-03 +2009-03-29T01:00:00,-02:00,-02 +2009-10-25T01:00:00,-03:00,-03 +2010-03-28T01:00:00,-02:00,-02 +2010-10-31T01:00:00,-03:00,-03 +2011-03-27T01:00:00,-02:00,-02 +2011-10-30T01:00:00,-03:00,-03 +2012-03-25T01:00:00,-02:00,-02 +2012-10-28T01:00:00,-03:00,-03 +2013-03-31T01:00:00,-02:00,-02 +2013-10-27T01:00:00,-03:00,-03 +2014-03-30T01:00:00,-02:00,-02 +2014-10-26T01:00:00,-03:00,-03 +2015-03-29T01:00:00,-02:00,-02 +2015-10-25T01:00:00,-03:00,-03 +2016-03-27T01:00:00,-02:00,-02 +2016-10-30T01:00:00,-03:00,-03 +2017-03-26T01:00:00,-02:00,-02 +2017-10-29T01:00:00,-03:00,-03 +2018-03-25T01:00:00,-02:00,-02 +2018-10-28T01:00:00,-03:00,-03 +2019-03-31T01:00:00,-02:00,-02 +2019-10-27T01:00:00,-03:00,-03 +2020-03-29T01:00:00,-02:00,-02 +2020-10-25T01:00:00,-03:00,-03 +2021-03-28T01:00:00,-02:00,-02 +2021-10-31T01:00:00,-03:00,-03 +2022-03-27T01:00:00,-02:00,-02 +2022-10-30T01:00:00,-03:00,-03 +2023-03-26T01:00:00,-02:00,-02 +2024-03-31T01:00:00,-01:00,-01 +2024-10-27T01:00:00,-02:00,-02 +2025-03-30T01:00:00,-01:00,-01 +2025-10-26T01:00:00,-02:00,-02 +2026-03-29T01:00:00,-01:00,-01 +2026-10-25T01:00:00,-02:00,-02 +2027-03-28T01:00:00,-01:00,-01 +2027-10-31T01:00:00,-02:00,-02 +2028-03-26T01:00:00,-01:00,-01 +2028-10-29T01:00:00,-02:00,-02 +2029-03-25T01:00:00,-01:00,-01 +2029-10-28T01:00:00,-02:00,-02 +2030-03-31T01:00:00,-01:00,-01 +2030-10-27T01:00:00,-02:00,-02 +2031-03-30T01:00:00,-01:00,-01 +2031-10-26T01:00:00,-02:00,-02 +2032-03-28T01:00:00,-01:00,-01 +2032-10-31T01:00:00,-02:00,-02 +2033-03-27T01:00:00,-01:00,-01 +2033-10-30T01:00:00,-02:00,-02 +2034-03-26T01:00:00,-01:00,-01 +2034-10-29T01:00:00,-02:00,-02 +2035-03-25T01:00:00,-01:00,-01 +2035-10-28T01:00:00,-02:00,-02 +2036-03-30T01:00:00,-01:00,-01 +2036-10-26T01:00:00,-02:00,-02 +2037-03-29T01:00:00,-01:00,-01 +2037-10-25T01:00:00,-02:00,-02 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-ojinaga.txt b/desk/gub/lib/pytz/america-ojinaga.txt new file mode 100644 index 0000000..f519126 --- /dev/null +++ b/desk/gub/lib/pytz/america-ojinaga.txt @@ -0,0 +1,91 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-05-06T09:00:00,-06:00,MDT +2001-09-30T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-04-01T09:00:00,-06:00,MDT +2007-10-28T08:00:00,-07:00,MST +2008-04-06T09:00:00,-06:00,MDT +2008-10-26T08:00:00,-07:00,MST +2009-04-05T09:00:00,-06:00,MDT +2009-10-25T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-10-30T08:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-panama.txt b/desk/gub/lib/pytz/america-panama.txt new file mode 100644 index 0000000..069fd8c --- /dev/null +++ b/desk/gub/lib/pytz/america-panama.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:40,CMT +1908-04-22T05:19:36,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-pangnirtung.txt b/desk/gub/lib/pytz/america-pangnirtung.txt new file mode 100644 index 0000000..6295f38 --- /dev/null +++ b/desk/gub/lib/pytz/america-pangnirtung.txt @@ -0,0 +1,137 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1942-08-01T00:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-04-28T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-paramaribo.txt b/desk/gub/lib/pytz/america-paramaribo.txt new file mode 100644 index 0000000..b4a1382 --- /dev/null +++ b/desk/gub/lib/pytz/america-paramaribo.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1911-01-01T03:40:40,-04:19,PMT +1935-01-01T03:40:52,-04:19,PMT +1945-10-01T03:40:36,-04:30,-0330 +1984-10-01T03:30:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-phoenix.txt b/desk/gub/lib/pytz/america-phoenix.txt new file mode 100644 index 0000000..56faa56 --- /dev/null +++ b/desk/gub/lib/pytz/america-phoenix.txt @@ -0,0 +1,12 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1944-01-01T06:01:00,-07:00,MST +1944-04-01T07:01:00,-06:00,MWT +1944-10-01T06:01:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-port-au-prince.txt b/desk/gub/lib/pytz/america-port-au-prince.txt new file mode 100644 index 0000000..da9ee98 --- /dev/null +++ b/desk/gub/lib/pytz/america-port-au-prince.txt @@ -0,0 +1,87 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:11,PPMT +1917-01-24T16:49:00,-05:00,EST +1983-05-08T05:00:00,-04:00,EDT +1983-10-30T04:00:00,-05:00,EST +1984-04-29T05:00:00,-04:00,EDT +1984-10-28T04:00:00,-05:00,EST +1985-04-28T05:00:00,-04:00,EDT +1985-10-27T04:00:00,-05:00,EST +1986-04-27T05:00:00,-04:00,EDT +1986-10-26T04:00:00,-05:00,EST +1987-04-26T05:00:00,-04:00,EDT +1987-10-25T04:00:00,-05:00,EST +1988-04-03T06:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T06:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T06:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T06:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T06:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T06:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T06:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T06:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T06:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T06:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +2005-04-03T05:00:00,-04:00,EDT +2005-10-30T04:00:00,-05:00,EST +2006-04-02T05:00:00,-04:00,EDT +2006-10-29T04:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-port-of-spain.txt b/desk/gub/lib/pytz/america-port-of-spain.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-port-of-spain.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-porto-acre.txt b/desk/gub/lib/pytz/america-porto-acre.txt new file mode 100644 index 0000000..78ee44c --- /dev/null +++ b/desk/gub/lib/pytz/america-porto-acre.txt @@ -0,0 +1,32 @@ +Time,Offset,Name +1914-01-01T04:31:12,-05:00,-05 +1931-10-03T16:00:00,-04:00,-04 +1932-04-01T04:00:00,-05:00,-05 +1932-10-03T05:00:00,-04:00,-04 +1933-04-01T04:00:00,-05:00,-05 +1949-12-01T05:00:00,-04:00,-04 +1950-04-16T05:00:00,-05:00,-05 +1950-12-01T05:00:00,-04:00,-04 +1951-04-01T04:00:00,-05:00,-05 +1951-12-01T05:00:00,-04:00,-04 +1952-04-01T04:00:00,-05:00,-05 +1952-12-01T05:00:00,-04:00,-04 +1953-03-01T04:00:00,-05:00,-05 +1963-12-09T05:00:00,-04:00,-04 +1964-03-01T04:00:00,-05:00,-05 +1965-01-31T05:00:00,-04:00,-04 +1965-03-31T04:00:00,-05:00,-05 +1965-12-01T05:00:00,-04:00,-04 +1966-03-01T04:00:00,-05:00,-05 +1966-11-01T05:00:00,-04:00,-04 +1967-03-01T04:00:00,-05:00,-05 +1967-11-01T05:00:00,-04:00,-04 +1968-03-01T04:00:00,-05:00,-05 +1985-11-02T05:00:00,-04:00,-04 +1986-03-15T04:00:00,-05:00,-05 +1986-10-25T05:00:00,-04:00,-04 +1987-02-14T04:00:00,-05:00,-05 +1987-10-25T05:00:00,-04:00,-04 +1988-02-07T04:00:00,-05:00,-05 +2008-06-24T05:00:00,-04:00,-04 +2013-11-10T04:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-porto-velho.txt b/desk/gub/lib/pytz/america-porto-velho.txt new file mode 100644 index 0000000..44c9745 --- /dev/null +++ b/desk/gub/lib/pytz/america-porto-velho.txt @@ -0,0 +1,30 @@ +Time,Offset,Name +1914-01-01T04:15:36,-04:00,-04 +1931-10-03T15:00:00,-03:00,-03 +1932-04-01T03:00:00,-04:00,-04 +1932-10-03T04:00:00,-03:00,-03 +1933-04-01T03:00:00,-04:00,-04 +1949-12-01T04:00:00,-03:00,-03 +1950-04-16T04:00:00,-04:00,-04 +1950-12-01T04:00:00,-03:00,-03 +1951-04-01T03:00:00,-04:00,-04 +1951-12-01T04:00:00,-03:00,-03 +1952-04-01T03:00:00,-04:00,-04 +1952-12-01T04:00:00,-03:00,-03 +1953-03-01T03:00:00,-04:00,-04 +1963-12-09T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1965-01-31T04:00:00,-03:00,-03 +1965-03-31T03:00:00,-04:00,-04 +1965-12-01T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-11-01T04:00:00,-03:00,-03 +1967-03-01T03:00:00,-04:00,-04 +1967-11-01T04:00:00,-03:00,-03 +1968-03-01T03:00:00,-04:00,-04 +1985-11-02T04:00:00,-03:00,-03 +1986-03-15T03:00:00,-04:00,-04 +1986-10-25T04:00:00,-03:00,-03 +1987-02-14T03:00:00,-04:00,-04 +1987-10-25T04:00:00,-03:00,-03 +1988-02-07T03:00:00,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-puerto-rico.txt b/desk/gub/lib/pytz/america-puerto-rico.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-puerto-rico.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-punta-arenas.txt b/desk/gub/lib/pytz/america-punta-arenas.txt new file mode 100644 index 0000000..c736c46 --- /dev/null +++ b/desk/gub/lib/pytz/america-punta-arenas.txt @@ -0,0 +1,118 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:17,SMT +1910-01-10T04:42:45,-05:00,-05 +1916-07-01T05:00:00,-05:17,SMT +1918-09-10T04:42:45,-04:00,-04 +1919-07-01T04:00:00,-05:17,SMT +1927-09-01T04:42:45,-04:00,-04 +1928-04-01T04:00:00,-05:00,-05 +1928-09-01T05:00:00,-04:00,-04 +1929-04-01T04:00:00,-05:00,-05 +1929-09-01T05:00:00,-04:00,-04 +1930-04-01T04:00:00,-05:00,-05 +1930-09-01T05:00:00,-04:00,-04 +1931-04-01T04:00:00,-05:00,-05 +1931-09-01T05:00:00,-04:00,-04 +1932-04-01T04:00:00,-05:00,-05 +1932-09-01T05:00:00,-04:00,-04 +1942-06-01T04:00:00,-05:00,-05 +1942-08-01T05:00:00,-04:00,-04 +1946-08-29T04:00:00,-04:00,-04 +1947-04-01T04:00:00,-05:00,-05 +1947-05-22T04:00:00,-04:00,-04 +1968-11-03T04:00:00,-03:00,-03 +1969-03-30T03:00:00,-04:00,-04 +1969-11-23T04:00:00,-03:00,-03 +1970-03-29T03:00:00,-04:00,-04 +1970-10-11T04:00:00,-03:00,-03 +1971-03-14T03:00:00,-04:00,-04 +1971-10-10T04:00:00,-03:00,-03 +1972-03-12T03:00:00,-04:00,-04 +1972-10-15T04:00:00,-03:00,-03 +1973-03-11T03:00:00,-04:00,-04 +1973-09-30T04:00:00,-03:00,-03 +1974-03-10T03:00:00,-04:00,-04 +1974-10-13T04:00:00,-03:00,-03 +1975-03-09T03:00:00,-04:00,-04 +1975-10-12T04:00:00,-03:00,-03 +1976-03-14T03:00:00,-04:00,-04 +1976-10-10T04:00:00,-03:00,-03 +1977-03-13T03:00:00,-04:00,-04 +1977-10-09T04:00:00,-03:00,-03 +1978-03-12T03:00:00,-04:00,-04 +1978-10-15T04:00:00,-03:00,-03 +1979-03-11T03:00:00,-04:00,-04 +1979-10-14T04:00:00,-03:00,-03 +1980-03-09T03:00:00,-04:00,-04 +1980-10-12T04:00:00,-03:00,-03 +1981-03-15T03:00:00,-04:00,-04 +1981-10-11T04:00:00,-03:00,-03 +1982-03-14T03:00:00,-04:00,-04 +1982-10-10T04:00:00,-03:00,-03 +1983-03-13T03:00:00,-04:00,-04 +1983-10-09T04:00:00,-03:00,-03 +1984-03-11T03:00:00,-04:00,-04 +1984-10-14T04:00:00,-03:00,-03 +1985-03-10T03:00:00,-04:00,-04 +1985-10-13T04:00:00,-03:00,-03 +1986-03-09T03:00:00,-04:00,-04 +1986-10-12T04:00:00,-03:00,-03 +1987-04-12T03:00:00,-04:00,-04 +1987-10-11T04:00:00,-03:00,-03 +1988-03-13T03:00:00,-04:00,-04 +1988-10-09T04:00:00,-03:00,-03 +1989-03-12T03:00:00,-04:00,-04 +1989-10-15T04:00:00,-03:00,-03 +1990-03-11T03:00:00,-04:00,-04 +1990-09-16T04:00:00,-03:00,-03 +1991-03-10T03:00:00,-04:00,-04 +1991-10-13T04:00:00,-03:00,-03 +1992-03-15T03:00:00,-04:00,-04 +1992-10-11T04:00:00,-03:00,-03 +1993-03-14T03:00:00,-04:00,-04 +1993-10-10T04:00:00,-03:00,-03 +1994-03-13T03:00:00,-04:00,-04 +1994-10-09T04:00:00,-03:00,-03 +1995-03-12T03:00:00,-04:00,-04 +1995-10-15T04:00:00,-03:00,-03 +1996-03-10T03:00:00,-04:00,-04 +1996-10-13T04:00:00,-03:00,-03 +1997-03-30T03:00:00,-04:00,-04 +1997-10-12T04:00:00,-03:00,-03 +1998-03-15T03:00:00,-04:00,-04 +1998-09-27T04:00:00,-03:00,-03 +1999-04-04T03:00:00,-04:00,-04 +1999-10-10T04:00:00,-03:00,-03 +2000-03-12T03:00:00,-04:00,-04 +2000-10-15T04:00:00,-03:00,-03 +2001-03-11T03:00:00,-04:00,-04 +2001-10-14T04:00:00,-03:00,-03 +2002-03-10T03:00:00,-04:00,-04 +2002-10-13T04:00:00,-03:00,-03 +2003-03-09T03:00:00,-04:00,-04 +2003-10-12T04:00:00,-03:00,-03 +2004-03-14T03:00:00,-04:00,-04 +2004-10-10T04:00:00,-03:00,-03 +2005-03-13T03:00:00,-04:00,-04 +2005-10-09T04:00:00,-03:00,-03 +2006-03-12T03:00:00,-04:00,-04 +2006-10-15T04:00:00,-03:00,-03 +2007-03-11T03:00:00,-04:00,-04 +2007-10-14T04:00:00,-03:00,-03 +2008-03-30T03:00:00,-04:00,-04 +2008-10-12T04:00:00,-03:00,-03 +2009-03-15T03:00:00,-04:00,-04 +2009-10-11T04:00:00,-03:00,-03 +2010-04-04T03:00:00,-04:00,-04 +2010-10-10T04:00:00,-03:00,-03 +2011-05-08T03:00:00,-04:00,-04 +2011-08-21T04:00:00,-03:00,-03 +2012-04-29T03:00:00,-04:00,-04 +2012-09-02T04:00:00,-03:00,-03 +2013-04-28T03:00:00,-04:00,-04 +2013-09-08T04:00:00,-03:00,-03 +2014-04-27T03:00:00,-04:00,-04 +2014-09-07T04:00:00,-03:00,-03 +2016-05-15T03:00:00,-04:00,-04 +2016-08-14T04:00:00,-03:00,-03 +2016-12-04T03:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-rainy-river.txt b/desk/gub/lib/pytz/america-rainy-river.txt new file mode 100644 index 0000000..9793b6c --- /dev/null +++ b/desk/gub/lib/pytz/america-rainy-river.txt @@ -0,0 +1,187 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1916-04-23T06:00:00,-05:00,CDT +1916-09-17T05:00:00,-06:00,CST +1918-04-14T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1937-05-16T08:00:00,-05:00,CDT +1937-09-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-05-12T08:00:00,-05:00,CDT +1946-10-13T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-05-01T08:00:00,-05:00,CDT +1950-09-30T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-09-25T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-09-30T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-09-25T07:00:00,-06:00,CST +1963-04-28T08:00:00,-05:00,CDT +1963-09-22T07:00:00,-06:00,CST +1966-04-24T08:00:00,-05:00,CDT +1966-10-30T08:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T08:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T08:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T08:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T08:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T08:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T08:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T08:00:00,-06:00,CST +1974-04-28T08:00:00,-05:00,CDT +1974-10-27T08:00:00,-06:00,CST +1975-04-27T08:00:00,-05:00,CDT +1975-10-26T08:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T08:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T08:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T08:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T08:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T08:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T08:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T08:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T08:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T08:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T08:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T08:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T08:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T08:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T08:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T08:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T08:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T08:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T08:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T08:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T08:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T08:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T08:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T08:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T08:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T08:00:00,-06:00,CST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T08:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T08:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T08:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T08:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T08:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-rankin-inlet.txt b/desk/gub/lib/pytz/america-rankin-inlet.txt new file mode 100644 index 0000000..33a06ea --- /dev/null +++ b/desk/gub/lib/pytz/america-rankin-inlet.txt @@ -0,0 +1,135 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1957-01-01T00:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-04-28T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-04-27T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T07:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T07:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T07:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-05:00,EST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-recife.txt b/desk/gub/lib/pytz/america-recife.txt new file mode 100644 index 0000000..6520bc6 --- /dev/null +++ b/desk/gub/lib/pytz/america-recife.txt @@ -0,0 +1,40 @@ +Time,Offset,Name +1914-01-01T02:19:36,-03:00,-03 +1931-10-03T14:00:00,-02:00,-02 +1932-04-01T02:00:00,-03:00,-03 +1932-10-03T03:00:00,-02:00,-02 +1933-04-01T02:00:00,-03:00,-03 +1949-12-01T03:00:00,-02:00,-02 +1950-04-16T03:00:00,-03:00,-03 +1950-12-01T03:00:00,-02:00,-02 +1951-04-01T02:00:00,-03:00,-03 +1951-12-01T03:00:00,-02:00,-02 +1952-04-01T02:00:00,-03:00,-03 +1952-12-01T03:00:00,-02:00,-02 +1953-03-01T02:00:00,-03:00,-03 +1963-12-09T03:00:00,-02:00,-02 +1964-03-01T02:00:00,-03:00,-03 +1965-01-31T03:00:00,-02:00,-02 +1965-03-31T02:00:00,-03:00,-03 +1965-12-01T03:00:00,-02:00,-02 +1966-03-01T02:00:00,-03:00,-03 +1966-11-01T03:00:00,-02:00,-02 +1967-03-01T02:00:00,-03:00,-03 +1967-11-01T03:00:00,-02:00,-02 +1968-03-01T02:00:00,-03:00,-03 +1985-11-02T03:00:00,-02:00,-02 +1986-03-15T02:00:00,-03:00,-03 +1986-10-25T03:00:00,-02:00,-02 +1987-02-14T02:00:00,-03:00,-03 +1987-10-25T03:00:00,-02:00,-02 +1988-02-07T02:00:00,-03:00,-03 +1988-10-16T03:00:00,-02:00,-02 +1989-01-29T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-02-11T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-02:00,-02 +2000-02-27T02:00:00,-03:00,-03 +2000-10-08T03:00:00,-02:00,-02 +2000-10-15T02:00:00,-03:00,-03 +2001-10-14T03:00:00,-02:00,-02 +2002-02-17T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-regina.txt b/desk/gub/lib/pytz/america-regina.txt new file mode 100644 index 0000000..8e72606 --- /dev/null +++ b/desk/gub/lib/pytz/america-regina.txt @@ -0,0 +1,54 @@ +Time,Offset,Name +1905-09-01T06:58:36,-07:00,MST +1918-04-14T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1930-05-04T07:00:00,-06:00,MDT +1930-10-05T06:00:00,-07:00,MST +1931-05-03T07:00:00,-06:00,MDT +1931-10-04T06:00:00,-07:00,MST +1932-05-01T07:00:00,-06:00,MDT +1932-10-02T06:00:00,-07:00,MST +1933-05-07T07:00:00,-06:00,MDT +1933-10-01T06:00:00,-07:00,MST +1934-05-06T07:00:00,-06:00,MDT +1934-10-07T06:00:00,-07:00,MST +1937-04-11T07:00:00,-06:00,MDT +1937-10-10T06:00:00,-07:00,MST +1938-04-10T07:00:00,-06:00,MDT +1938-10-02T06:00:00,-07:00,MST +1939-04-09T07:00:00,-06:00,MDT +1939-10-08T06:00:00,-07:00,MST +1940-04-14T07:00:00,-06:00,MDT +1940-10-13T06:00:00,-07:00,MST +1941-04-13T07:00:00,-06:00,MDT +1941-10-12T06:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1946-04-14T09:00:00,-06:00,MDT +1946-10-13T08:00:00,-07:00,MST +1947-04-27T09:00:00,-06:00,MDT +1947-09-28T08:00:00,-07:00,MST +1948-04-25T09:00:00,-06:00,MDT +1948-09-26T08:00:00,-07:00,MST +1949-04-24T09:00:00,-06:00,MDT +1949-09-25T08:00:00,-07:00,MST +1950-04-30T09:00:00,-06:00,MDT +1950-09-24T08:00:00,-07:00,MST +1951-04-29T09:00:00,-06:00,MDT +1951-09-30T08:00:00,-07:00,MST +1952-04-27T09:00:00,-06:00,MDT +1952-09-28T08:00:00,-07:00,MST +1953-04-26T09:00:00,-06:00,MDT +1953-09-27T08:00:00,-07:00,MST +1954-04-25T09:00:00,-06:00,MDT +1954-09-26T08:00:00,-07:00,MST +1955-04-24T09:00:00,-06:00,MDT +1955-09-25T08:00:00,-07:00,MST +1956-04-29T09:00:00,-06:00,MDT +1956-09-30T08:00:00,-07:00,MST +1957-04-28T09:00:00,-06:00,MDT +1957-09-29T08:00:00,-07:00,MST +1959-04-26T09:00:00,-06:00,MDT +1959-10-25T08:00:00,-07:00,MST +1960-04-24T09:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-resolute.txt b/desk/gub/lib/pytz/america-resolute.txt new file mode 100644 index 0000000..aacb4c5 --- /dev/null +++ b/desk/gub/lib/pytz/america-resolute.txt @@ -0,0 +1,135 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1947-08-31T00:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-04-28T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-04-27T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T07:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T07:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T07:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-05:00,EST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-05:00,EST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-rio-branco.txt b/desk/gub/lib/pytz/america-rio-branco.txt new file mode 100644 index 0000000..78ee44c --- /dev/null +++ b/desk/gub/lib/pytz/america-rio-branco.txt @@ -0,0 +1,32 @@ +Time,Offset,Name +1914-01-01T04:31:12,-05:00,-05 +1931-10-03T16:00:00,-04:00,-04 +1932-04-01T04:00:00,-05:00,-05 +1932-10-03T05:00:00,-04:00,-04 +1933-04-01T04:00:00,-05:00,-05 +1949-12-01T05:00:00,-04:00,-04 +1950-04-16T05:00:00,-05:00,-05 +1950-12-01T05:00:00,-04:00,-04 +1951-04-01T04:00:00,-05:00,-05 +1951-12-01T05:00:00,-04:00,-04 +1952-04-01T04:00:00,-05:00,-05 +1952-12-01T05:00:00,-04:00,-04 +1953-03-01T04:00:00,-05:00,-05 +1963-12-09T05:00:00,-04:00,-04 +1964-03-01T04:00:00,-05:00,-05 +1965-01-31T05:00:00,-04:00,-04 +1965-03-31T04:00:00,-05:00,-05 +1965-12-01T05:00:00,-04:00,-04 +1966-03-01T04:00:00,-05:00,-05 +1966-11-01T05:00:00,-04:00,-04 +1967-03-01T04:00:00,-05:00,-05 +1967-11-01T05:00:00,-04:00,-04 +1968-03-01T04:00:00,-05:00,-05 +1985-11-02T05:00:00,-04:00,-04 +1986-03-15T04:00:00,-05:00,-05 +1986-10-25T05:00:00,-04:00,-04 +1987-02-14T04:00:00,-05:00,-05 +1987-10-25T05:00:00,-04:00,-04 +1988-02-07T04:00:00,-05:00,-05 +2008-06-24T05:00:00,-04:00,-04 +2013-11-10T04:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-rosario.txt b/desk/gub/lib/pytz/america-rosario.txt new file mode 100644 index 0000000..789ef3c --- /dev/null +++ b/desk/gub/lib/pytz/america-rosario.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:43,CMT +1920-05-01T04:16:48,-04:00,-04 +1930-12-01T04:00:00,-03:00,-03 +1931-04-01T03:00:00,-04:00,-04 +1931-10-15T04:00:00,-03:00,-03 +1932-03-01T03:00:00,-04:00,-04 +1932-11-01T04:00:00,-03:00,-03 +1933-03-01T03:00:00,-04:00,-04 +1933-11-01T04:00:00,-03:00,-03 +1934-03-01T03:00:00,-04:00,-04 +1934-11-01T04:00:00,-03:00,-03 +1935-03-01T03:00:00,-04:00,-04 +1935-11-01T04:00:00,-03:00,-03 +1936-03-01T03:00:00,-04:00,-04 +1936-11-01T04:00:00,-03:00,-03 +1937-03-01T03:00:00,-04:00,-04 +1937-11-01T04:00:00,-03:00,-03 +1938-03-01T03:00:00,-04:00,-04 +1938-11-01T04:00:00,-03:00,-03 +1939-03-01T03:00:00,-04:00,-04 +1939-11-01T04:00:00,-03:00,-03 +1940-03-01T03:00:00,-04:00,-04 +1940-07-01T04:00:00,-03:00,-03 +1941-06-15T03:00:00,-04:00,-04 +1941-10-15T04:00:00,-03:00,-03 +1943-08-01T03:00:00,-04:00,-04 +1943-10-15T04:00:00,-03:00,-03 +1946-03-01T03:00:00,-04:00,-04 +1946-10-01T04:00:00,-03:00,-03 +1963-10-01T03:00:00,-04:00,-04 +1963-12-15T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1964-10-15T04:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1988-12-01T03:00:00,-02:00,-02 +1989-03-05T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-03-04T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-03-03T02:00:00,-04:00,-04 +1991-10-20T04:00:00,-02:00,-02 +1992-03-01T02:00:00,-03:00,-03 +1992-10-18T03:00:00,-02:00,-02 +1993-03-07T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-03:00,-03 +2000-03-03T03:00:00,-03:00,-03 +2007-12-30T03:00:00,-02:00,-02 +2008-03-16T02:00:00,-03:00,-03 +2008-10-19T03:00:00,-02:00,-02 +2009-03-15T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-santa-isabel.txt b/desk/gub/lib/pytz/america-santa-isabel.txt new file mode 100644 index 0000000..a411291 --- /dev/null +++ b/desk/gub/lib/pytz/america-santa-isabel.txt @@ -0,0 +1,188 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1924-01-01T07:00:00,-08:00,PST +1927-06-10T08:00:00,-07:00,MST +1930-11-15T07:00:00,-08:00,PST +1931-04-01T08:00:00,-07:00,PDT +1931-09-30T07:00:00,-08:00,PST +1942-04-24T08:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-11-15T07:00:00,-08:00,PST +1948-04-05T08:00:00,-07:00,PDT +1949-01-14T07:00:00,-08:00,PST +1950-05-01T08:00:00,-07:00,PDT +1950-09-24T07:00:00,-08:00,PST +1951-04-29T10:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T10:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T09:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T09:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T09:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T09:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T09:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T09:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T09:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T09:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T09:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T09:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T09:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T09:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T09:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T09:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-04-01T10:00:00,-07:00,PDT +2007-10-28T09:00:00,-08:00,PST +2008-04-06T10:00:00,-07:00,PDT +2008-10-26T09:00:00,-08:00,PST +2009-04-05T10:00:00,-07:00,PDT +2009-10-25T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T09:00:00,-08:00,PST +2021-03-14T10:00:00,-07:00,PDT +2021-11-07T09:00:00,-08:00,PST +2022-03-13T10:00:00,-07:00,PDT +2022-11-06T09:00:00,-08:00,PST +2023-03-12T10:00:00,-07:00,PDT +2023-11-05T09:00:00,-08:00,PST +2024-03-10T10:00:00,-07:00,PDT +2024-11-03T09:00:00,-08:00,PST +2025-03-09T10:00:00,-07:00,PDT +2025-11-02T09:00:00,-08:00,PST +2026-03-08T10:00:00,-07:00,PDT +2026-11-01T09:00:00,-08:00,PST +2027-03-14T10:00:00,-07:00,PDT +2027-11-07T09:00:00,-08:00,PST +2028-03-12T10:00:00,-07:00,PDT +2028-11-05T09:00:00,-08:00,PST +2029-03-11T10:00:00,-07:00,PDT +2029-11-04T09:00:00,-08:00,PST +2030-03-10T10:00:00,-07:00,PDT +2030-11-03T09:00:00,-08:00,PST +2031-03-09T10:00:00,-07:00,PDT +2031-11-02T09:00:00,-08:00,PST +2032-03-14T10:00:00,-07:00,PDT +2032-11-07T09:00:00,-08:00,PST +2033-03-13T10:00:00,-07:00,PDT +2033-11-06T09:00:00,-08:00,PST +2034-03-12T10:00:00,-07:00,PDT +2034-11-05T09:00:00,-08:00,PST +2035-03-11T10:00:00,-07:00,PDT +2035-11-04T09:00:00,-08:00,PST +2036-03-09T10:00:00,-07:00,PDT +2036-11-02T09:00:00,-08:00,PST +2037-03-08T10:00:00,-07:00,PDT +2037-11-01T09:00:00,-08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-santarem.txt b/desk/gub/lib/pytz/america-santarem.txt new file mode 100644 index 0000000..1e9e546 --- /dev/null +++ b/desk/gub/lib/pytz/america-santarem.txt @@ -0,0 +1,31 @@ +Time,Offset,Name +1914-01-01T03:38:48,-04:00,-04 +1931-10-03T15:00:00,-03:00,-03 +1932-04-01T03:00:00,-04:00,-04 +1932-10-03T04:00:00,-03:00,-03 +1933-04-01T03:00:00,-04:00,-04 +1949-12-01T04:00:00,-03:00,-03 +1950-04-16T04:00:00,-04:00,-04 +1950-12-01T04:00:00,-03:00,-03 +1951-04-01T03:00:00,-04:00,-04 +1951-12-01T04:00:00,-03:00,-03 +1952-04-01T03:00:00,-04:00,-04 +1952-12-01T04:00:00,-03:00,-03 +1953-03-01T03:00:00,-04:00,-04 +1963-12-09T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1965-01-31T04:00:00,-03:00,-03 +1965-03-31T03:00:00,-04:00,-04 +1965-12-01T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-11-01T04:00:00,-03:00,-03 +1967-03-01T03:00:00,-04:00,-04 +1967-11-01T04:00:00,-03:00,-03 +1968-03-01T03:00:00,-04:00,-04 +1985-11-02T04:00:00,-03:00,-03 +1986-03-15T03:00:00,-04:00,-04 +1986-10-25T04:00:00,-03:00,-03 +1987-02-14T03:00:00,-04:00,-04 +1987-10-25T04:00:00,-03:00,-03 +1988-02-07T03:00:00,-04:00,-04 +2008-06-24T04:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-santiago.txt b/desk/gub/lib/pytz/america-santiago.txt new file mode 100644 index 0000000..e602c10 --- /dev/null +++ b/desk/gub/lib/pytz/america-santiago.txt @@ -0,0 +1,160 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:17,SMT +1910-01-10T04:42:45,-05:00,-05 +1916-07-01T05:00:00,-05:17,SMT +1918-09-10T04:42:45,-04:00,-04 +1919-07-01T04:00:00,-05:17,SMT +1927-09-01T04:42:45,-04:00,-04 +1928-04-01T04:00:00,-05:00,-05 +1928-09-01T05:00:00,-04:00,-04 +1929-04-01T04:00:00,-05:00,-05 +1929-09-01T05:00:00,-04:00,-04 +1930-04-01T04:00:00,-05:00,-05 +1930-09-01T05:00:00,-04:00,-04 +1931-04-01T04:00:00,-05:00,-05 +1931-09-01T05:00:00,-04:00,-04 +1932-04-01T04:00:00,-05:00,-05 +1932-09-01T05:00:00,-04:00,-04 +1942-06-01T04:00:00,-05:00,-05 +1942-08-01T05:00:00,-04:00,-04 +1946-07-15T04:00:00,-03:00,-03 +1946-08-29T03:00:00,-04:00,-04 +1947-04-01T04:00:00,-05:00,-05 +1947-05-22T04:00:00,-04:00,-04 +1968-11-03T04:00:00,-03:00,-03 +1969-03-30T03:00:00,-04:00,-04 +1969-11-23T04:00:00,-03:00,-03 +1970-03-29T03:00:00,-04:00,-04 +1970-10-11T04:00:00,-03:00,-03 +1971-03-14T03:00:00,-04:00,-04 +1971-10-10T04:00:00,-03:00,-03 +1972-03-12T03:00:00,-04:00,-04 +1972-10-15T04:00:00,-03:00,-03 +1973-03-11T03:00:00,-04:00,-04 +1973-09-30T04:00:00,-03:00,-03 +1974-03-10T03:00:00,-04:00,-04 +1974-10-13T04:00:00,-03:00,-03 +1975-03-09T03:00:00,-04:00,-04 +1975-10-12T04:00:00,-03:00,-03 +1976-03-14T03:00:00,-04:00,-04 +1976-10-10T04:00:00,-03:00,-03 +1977-03-13T03:00:00,-04:00,-04 +1977-10-09T04:00:00,-03:00,-03 +1978-03-12T03:00:00,-04:00,-04 +1978-10-15T04:00:00,-03:00,-03 +1979-03-11T03:00:00,-04:00,-04 +1979-10-14T04:00:00,-03:00,-03 +1980-03-09T03:00:00,-04:00,-04 +1980-10-12T04:00:00,-03:00,-03 +1981-03-15T03:00:00,-04:00,-04 +1981-10-11T04:00:00,-03:00,-03 +1982-03-14T03:00:00,-04:00,-04 +1982-10-10T04:00:00,-03:00,-03 +1983-03-13T03:00:00,-04:00,-04 +1983-10-09T04:00:00,-03:00,-03 +1984-03-11T03:00:00,-04:00,-04 +1984-10-14T04:00:00,-03:00,-03 +1985-03-10T03:00:00,-04:00,-04 +1985-10-13T04:00:00,-03:00,-03 +1986-03-09T03:00:00,-04:00,-04 +1986-10-12T04:00:00,-03:00,-03 +1987-04-12T03:00:00,-04:00,-04 +1987-10-11T04:00:00,-03:00,-03 +1988-03-13T03:00:00,-04:00,-04 +1988-10-09T04:00:00,-03:00,-03 +1989-03-12T03:00:00,-04:00,-04 +1989-10-15T04:00:00,-03:00,-03 +1990-03-11T03:00:00,-04:00,-04 +1990-09-16T04:00:00,-03:00,-03 +1991-03-10T03:00:00,-04:00,-04 +1991-10-13T04:00:00,-03:00,-03 +1992-03-15T03:00:00,-04:00,-04 +1992-10-11T04:00:00,-03:00,-03 +1993-03-14T03:00:00,-04:00,-04 +1993-10-10T04:00:00,-03:00,-03 +1994-03-13T03:00:00,-04:00,-04 +1994-10-09T04:00:00,-03:00,-03 +1995-03-12T03:00:00,-04:00,-04 +1995-10-15T04:00:00,-03:00,-03 +1996-03-10T03:00:00,-04:00,-04 +1996-10-13T04:00:00,-03:00,-03 +1997-03-30T03:00:00,-04:00,-04 +1997-10-12T04:00:00,-03:00,-03 +1998-03-15T03:00:00,-04:00,-04 +1998-09-27T04:00:00,-03:00,-03 +1999-04-04T03:00:00,-04:00,-04 +1999-10-10T04:00:00,-03:00,-03 +2000-03-12T03:00:00,-04:00,-04 +2000-10-15T04:00:00,-03:00,-03 +2001-03-11T03:00:00,-04:00,-04 +2001-10-14T04:00:00,-03:00,-03 +2002-03-10T03:00:00,-04:00,-04 +2002-10-13T04:00:00,-03:00,-03 +2003-03-09T03:00:00,-04:00,-04 +2003-10-12T04:00:00,-03:00,-03 +2004-03-14T03:00:00,-04:00,-04 +2004-10-10T04:00:00,-03:00,-03 +2005-03-13T03:00:00,-04:00,-04 +2005-10-09T04:00:00,-03:00,-03 +2006-03-12T03:00:00,-04:00,-04 +2006-10-15T04:00:00,-03:00,-03 +2007-03-11T03:00:00,-04:00,-04 +2007-10-14T04:00:00,-03:00,-03 +2008-03-30T03:00:00,-04:00,-04 +2008-10-12T04:00:00,-03:00,-03 +2009-03-15T03:00:00,-04:00,-04 +2009-10-11T04:00:00,-03:00,-03 +2010-04-04T03:00:00,-04:00,-04 +2010-10-10T04:00:00,-03:00,-03 +2011-05-08T03:00:00,-04:00,-04 +2011-08-21T04:00:00,-03:00,-03 +2012-04-29T03:00:00,-04:00,-04 +2012-09-02T04:00:00,-03:00,-03 +2013-04-28T03:00:00,-04:00,-04 +2013-09-08T04:00:00,-03:00,-03 +2014-04-27T03:00:00,-04:00,-04 +2014-09-07T04:00:00,-03:00,-03 +2016-05-15T03:00:00,-04:00,-04 +2016-08-14T04:00:00,-03:00,-03 +2017-05-14T03:00:00,-04:00,-04 +2017-08-13T04:00:00,-03:00,-03 +2018-05-13T03:00:00,-04:00,-04 +2018-08-12T04:00:00,-03:00,-03 +2019-04-07T03:00:00,-04:00,-04 +2019-09-08T04:00:00,-03:00,-03 +2020-04-05T03:00:00,-04:00,-04 +2020-09-06T04:00:00,-03:00,-03 +2021-04-04T03:00:00,-04:00,-04 +2021-09-05T04:00:00,-03:00,-03 +2022-04-03T03:00:00,-04:00,-04 +2022-09-11T04:00:00,-03:00,-03 +2023-04-02T03:00:00,-04:00,-04 +2023-09-03T04:00:00,-03:00,-03 +2024-04-07T03:00:00,-04:00,-04 +2024-09-08T04:00:00,-03:00,-03 +2025-04-06T03:00:00,-04:00,-04 +2025-09-07T04:00:00,-03:00,-03 +2026-04-05T03:00:00,-04:00,-04 +2026-09-06T04:00:00,-03:00,-03 +2027-04-04T03:00:00,-04:00,-04 +2027-09-05T04:00:00,-03:00,-03 +2028-04-02T03:00:00,-04:00,-04 +2028-09-03T04:00:00,-03:00,-03 +2029-04-08T03:00:00,-04:00,-04 +2029-09-02T04:00:00,-03:00,-03 +2030-04-07T03:00:00,-04:00,-04 +2030-09-08T04:00:00,-03:00,-03 +2031-04-06T03:00:00,-04:00,-04 +2031-09-07T04:00:00,-03:00,-03 +2032-04-04T03:00:00,-04:00,-04 +2032-09-05T04:00:00,-03:00,-03 +2033-04-03T03:00:00,-04:00,-04 +2033-09-04T04:00:00,-03:00,-03 +2034-04-02T03:00:00,-04:00,-04 +2034-09-03T04:00:00,-03:00,-03 +2035-04-08T03:00:00,-04:00,-04 +2035-09-02T04:00:00,-03:00,-03 +2036-04-06T03:00:00,-04:00,-04 +2036-09-07T04:00:00,-03:00,-03 +2037-04-05T03:00:00,-04:00,-04 +2037-09-06T04:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-santo-domingo.txt b/desk/gub/lib/pytz/america-santo-domingo.txt new file mode 100644 index 0000000..7eafe91 --- /dev/null +++ b/desk/gub/lib/pytz/america-santo-domingo.txt @@ -0,0 +1,18 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:20,SDMT +1933-04-01T16:40:00,-05:00,EST +1966-10-30T05:00:00,-04:00,EDT +1967-02-28T04:00:00,-05:00,EST +1969-10-26T05:00:00,-05:30,-0430 +1970-02-21T04:30:00,-05:00,EST +1970-10-25T05:00:00,-05:30,-0430 +1971-01-20T04:30:00,-05:00,EST +1971-10-31T05:00:00,-05:30,-0430 +1972-01-21T04:30:00,-05:00,EST +1972-10-29T05:00:00,-05:30,-0430 +1973-01-21T04:30:00,-05:00,EST +1973-10-28T05:00:00,-05:30,-0430 +1974-01-21T04:30:00,-05:00,EST +1974-10-27T05:00:00,-04:00,AST +2000-10-29T06:00:00,-05:00,EST +2000-12-03T06:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-sao-paulo.txt b/desk/gub/lib/pytz/america-sao-paulo.txt new file mode 100644 index 0000000..9a320e4 --- /dev/null +++ b/desk/gub/lib/pytz/america-sao-paulo.txt @@ -0,0 +1,92 @@ +Time,Offset,Name +1914-01-01T03:06:28,-03:00,-03 +1931-10-03T14:00:00,-02:00,-02 +1932-04-01T02:00:00,-03:00,-03 +1932-10-03T03:00:00,-02:00,-02 +1933-04-01T02:00:00,-03:00,-03 +1949-12-01T03:00:00,-02:00,-02 +1950-04-16T03:00:00,-03:00,-03 +1950-12-01T03:00:00,-02:00,-02 +1951-04-01T02:00:00,-03:00,-03 +1951-12-01T03:00:00,-02:00,-02 +1952-04-01T02:00:00,-03:00,-03 +1952-12-01T03:00:00,-02:00,-02 +1953-03-01T02:00:00,-03:00,-03 +1963-10-23T03:00:00,-02:00,-02 +1964-03-01T02:00:00,-03:00,-03 +1965-01-31T03:00:00,-02:00,-02 +1965-03-31T02:00:00,-03:00,-03 +1965-12-01T03:00:00,-02:00,-02 +1966-03-01T02:00:00,-03:00,-03 +1966-11-01T03:00:00,-02:00,-02 +1967-03-01T02:00:00,-03:00,-03 +1967-11-01T03:00:00,-02:00,-02 +1968-03-01T02:00:00,-03:00,-03 +1985-11-02T03:00:00,-02:00,-02 +1986-03-15T02:00:00,-03:00,-03 +1986-10-25T03:00:00,-02:00,-02 +1987-02-14T02:00:00,-03:00,-03 +1987-10-25T03:00:00,-02:00,-02 +1988-02-07T02:00:00,-03:00,-03 +1988-10-16T03:00:00,-02:00,-02 +1989-01-29T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-02-11T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-02-17T02:00:00,-03:00,-03 +1991-10-20T03:00:00,-02:00,-02 +1992-02-09T02:00:00,-03:00,-03 +1992-10-25T03:00:00,-02:00,-02 +1993-01-31T02:00:00,-03:00,-03 +1993-10-17T03:00:00,-02:00,-02 +1994-02-20T02:00:00,-03:00,-03 +1994-10-16T03:00:00,-02:00,-02 +1995-02-19T02:00:00,-03:00,-03 +1995-10-15T03:00:00,-02:00,-02 +1996-02-11T02:00:00,-03:00,-03 +1996-10-06T03:00:00,-02:00,-02 +1997-02-16T02:00:00,-03:00,-03 +1997-10-06T03:00:00,-02:00,-02 +1998-03-01T02:00:00,-03:00,-03 +1998-10-11T03:00:00,-02:00,-02 +1999-02-21T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-02:00,-02 +2000-02-27T02:00:00,-03:00,-03 +2000-10-08T03:00:00,-02:00,-02 +2001-02-18T02:00:00,-03:00,-03 +2001-10-14T03:00:00,-02:00,-02 +2002-02-17T02:00:00,-03:00,-03 +2002-11-03T03:00:00,-02:00,-02 +2003-02-16T02:00:00,-03:00,-03 +2003-10-19T03:00:00,-02:00,-02 +2004-02-15T02:00:00,-03:00,-03 +2004-11-02T03:00:00,-02:00,-02 +2005-02-20T02:00:00,-03:00,-03 +2005-10-16T03:00:00,-02:00,-02 +2006-02-19T02:00:00,-03:00,-03 +2006-11-05T03:00:00,-02:00,-02 +2007-02-25T02:00:00,-03:00,-03 +2007-10-14T03:00:00,-02:00,-02 +2008-02-17T02:00:00,-03:00,-03 +2008-10-19T03:00:00,-02:00,-02 +2009-02-15T02:00:00,-03:00,-03 +2009-10-18T03:00:00,-02:00,-02 +2010-02-21T02:00:00,-03:00,-03 +2010-10-17T03:00:00,-02:00,-02 +2011-02-20T02:00:00,-03:00,-03 +2011-10-16T03:00:00,-02:00,-02 +2012-02-26T02:00:00,-03:00,-03 +2012-10-21T03:00:00,-02:00,-02 +2013-02-17T02:00:00,-03:00,-03 +2013-10-20T03:00:00,-02:00,-02 +2014-02-16T02:00:00,-03:00,-03 +2014-10-19T03:00:00,-02:00,-02 +2015-02-22T02:00:00,-03:00,-03 +2015-10-18T03:00:00,-02:00,-02 +2016-02-21T02:00:00,-03:00,-03 +2016-10-16T03:00:00,-02:00,-02 +2017-02-19T02:00:00,-03:00,-03 +2017-10-15T03:00:00,-02:00,-02 +2018-02-18T02:00:00,-03:00,-03 +2018-11-04T03:00:00,-02:00,-02 +2019-02-17T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-scoresbysund.txt b/desk/gub/lib/pytz/america-scoresbysund.txt new file mode 100644 index 0000000..6d80ec4 --- /dev/null +++ b/desk/gub/lib/pytz/america-scoresbysund.txt @@ -0,0 +1,118 @@ +Time,Offset,Name +1916-07-28T01:27:52,-02:00,-02 +1980-04-06T04:00:00,-01:00,-01 +1980-09-28T04:00:00,-02:00,-02 +1981-03-29T02:00:00,+00:00,+00 +1981-09-27T01:00:00,-01:00,-01 +1982-03-28T01:00:00,+00:00,+00 +1982-09-26T01:00:00,-01:00,-01 +1983-03-27T01:00:00,+00:00,+00 +1983-09-25T01:00:00,-01:00,-01 +1984-03-25T01:00:00,+00:00,+00 +1984-09-30T01:00:00,-01:00,-01 +1985-03-31T01:00:00,+00:00,+00 +1985-09-29T01:00:00,-01:00,-01 +1986-03-30T01:00:00,+00:00,+00 +1986-09-28T01:00:00,-01:00,-01 +1987-03-29T01:00:00,+00:00,+00 +1987-09-27T01:00:00,-01:00,-01 +1988-03-27T01:00:00,+00:00,+00 +1988-09-25T01:00:00,-01:00,-01 +1989-03-26T01:00:00,+00:00,+00 +1989-09-24T01:00:00,-01:00,-01 +1990-03-25T01:00:00,+00:00,+00 +1990-09-30T01:00:00,-01:00,-01 +1991-03-31T01:00:00,+00:00,+00 +1991-09-29T01:00:00,-01:00,-01 +1992-03-29T01:00:00,+00:00,+00 +1992-09-27T01:00:00,-01:00,-01 +1993-03-28T01:00:00,+00:00,+00 +1993-09-26T01:00:00,-01:00,-01 +1994-03-27T01:00:00,+00:00,+00 +1994-09-25T01:00:00,-01:00,-01 +1995-03-26T01:00:00,+00:00,+00 +1995-09-24T01:00:00,-01:00,-01 +1996-03-31T01:00:00,+00:00,+00 +1996-10-27T01:00:00,-01:00,-01 +1997-03-30T01:00:00,+00:00,+00 +1997-10-26T01:00:00,-01:00,-01 +1998-03-29T01:00:00,+00:00,+00 +1998-10-25T01:00:00,-01:00,-01 +1999-03-28T01:00:00,+00:00,+00 +1999-10-31T01:00:00,-01:00,-01 +2000-03-26T01:00:00,+00:00,+00 +2000-10-29T01:00:00,-01:00,-01 +2001-03-25T01:00:00,+00:00,+00 +2001-10-28T01:00:00,-01:00,-01 +2002-03-31T01:00:00,+00:00,+00 +2002-10-27T01:00:00,-01:00,-01 +2003-03-30T01:00:00,+00:00,+00 +2003-10-26T01:00:00,-01:00,-01 +2004-03-28T01:00:00,+00:00,+00 +2004-10-31T01:00:00,-01:00,-01 +2005-03-27T01:00:00,+00:00,+00 +2005-10-30T01:00:00,-01:00,-01 +2006-03-26T01:00:00,+00:00,+00 +2006-10-29T01:00:00,-01:00,-01 +2007-03-25T01:00:00,+00:00,+00 +2007-10-28T01:00:00,-01:00,-01 +2008-03-30T01:00:00,+00:00,+00 +2008-10-26T01:00:00,-01:00,-01 +2009-03-29T01:00:00,+00:00,+00 +2009-10-25T01:00:00,-01:00,-01 +2010-03-28T01:00:00,+00:00,+00 +2010-10-31T01:00:00,-01:00,-01 +2011-03-27T01:00:00,+00:00,+00 +2011-10-30T01:00:00,-01:00,-01 +2012-03-25T01:00:00,+00:00,+00 +2012-10-28T01:00:00,-01:00,-01 +2013-03-31T01:00:00,+00:00,+00 +2013-10-27T01:00:00,-01:00,-01 +2014-03-30T01:00:00,+00:00,+00 +2014-10-26T01:00:00,-01:00,-01 +2015-03-29T01:00:00,+00:00,+00 +2015-10-25T01:00:00,-01:00,-01 +2016-03-27T01:00:00,+00:00,+00 +2016-10-30T01:00:00,-01:00,-01 +2017-03-26T01:00:00,+00:00,+00 +2017-10-29T01:00:00,-01:00,-01 +2018-03-25T01:00:00,+00:00,+00 +2018-10-28T01:00:00,-01:00,-01 +2019-03-31T01:00:00,+00:00,+00 +2019-10-27T01:00:00,-01:00,-01 +2020-03-29T01:00:00,+00:00,+00 +2020-10-25T01:00:00,-01:00,-01 +2021-03-28T01:00:00,+00:00,+00 +2021-10-31T01:00:00,-01:00,-01 +2022-03-27T01:00:00,+00:00,+00 +2022-10-30T01:00:00,-01:00,-01 +2023-03-26T01:00:00,+00:00,+00 +2023-10-29T01:00:00,-01:00,-01 +2024-03-31T01:00:00,-01:00,-01 +2024-10-27T01:00:00,-02:00,-02 +2025-03-30T01:00:00,-01:00,-01 +2025-10-26T01:00:00,-02:00,-02 +2026-03-29T01:00:00,-01:00,-01 +2026-10-25T01:00:00,-02:00,-02 +2027-03-28T01:00:00,-01:00,-01 +2027-10-31T01:00:00,-02:00,-02 +2028-03-26T01:00:00,-01:00,-01 +2028-10-29T01:00:00,-02:00,-02 +2029-03-25T01:00:00,-01:00,-01 +2029-10-28T01:00:00,-02:00,-02 +2030-03-31T01:00:00,-01:00,-01 +2030-10-27T01:00:00,-02:00,-02 +2031-03-30T01:00:00,-01:00,-01 +2031-10-26T01:00:00,-02:00,-02 +2032-03-28T01:00:00,-01:00,-01 +2032-10-31T01:00:00,-02:00,-02 +2033-03-27T01:00:00,-01:00,-01 +2033-10-30T01:00:00,-02:00,-02 +2034-03-26T01:00:00,-01:00,-01 +2034-10-29T01:00:00,-02:00,-02 +2035-03-25T01:00:00,-01:00,-01 +2035-10-28T01:00:00,-02:00,-02 +2036-03-30T01:00:00,-01:00,-01 +2036-10-26T01:00:00,-02:00,-02 +2037-03-29T01:00:00,-01:00,-01 +2037-10-25T01:00:00,-02:00,-02 \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-shiprock.txt b/desk/gub/lib/pytz/america-shiprock.txt new file mode 100644 index 0000000..d26b6e0 --- /dev/null +++ b/desk/gub/lib/pytz/america-shiprock.txt @@ -0,0 +1,159 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1920-03-28T09:00:00,-06:00,MDT +1920-10-31T08:00:00,-07:00,MST +1921-03-27T09:00:00,-06:00,MDT +1921-05-22T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1965-04-25T09:00:00,-06:00,MDT +1965-10-31T08:00:00,-07:00,MST +1966-04-24T09:00:00,-06:00,MDT +1966-10-30T08:00:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST +1968-04-28T09:00:00,-06:00,MDT +1968-10-27T08:00:00,-07:00,MST +1969-04-27T09:00:00,-06:00,MDT +1969-10-26T08:00:00,-07:00,MST +1970-04-26T09:00:00,-06:00,MDT +1970-10-25T08:00:00,-07:00,MST +1971-04-25T09:00:00,-06:00,MDT +1971-10-31T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-01-06T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-02-23T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-sitka.txt b/desk/gub/lib/pytz/america-sitka.txt new file mode 100644 index 0000000..2b976c1 --- /dev/null +++ b/desk/gub/lib/pytz/america-sitka.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+14:59,LMT +1901-12-13T20:45:52,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-09:00,YST +1983-11-30T09:00:00,-09:00,AKST +1984-04-29T11:00:00,-08:00,AKDT +1984-10-28T10:00:00,-09:00,AKST +1985-04-28T11:00:00,-08:00,AKDT +1985-10-27T10:00:00,-09:00,AKST +1986-04-27T11:00:00,-08:00,AKDT +1986-10-26T10:00:00,-09:00,AKST +1987-04-05T11:00:00,-08:00,AKDT +1987-10-25T10:00:00,-09:00,AKST +1988-04-03T11:00:00,-08:00,AKDT +1988-10-30T10:00:00,-09:00,AKST +1989-04-02T11:00:00,-08:00,AKDT +1989-10-29T10:00:00,-09:00,AKST +1990-04-01T11:00:00,-08:00,AKDT +1990-10-28T10:00:00,-09:00,AKST +1991-04-07T11:00:00,-08:00,AKDT +1991-10-27T10:00:00,-09:00,AKST +1992-04-05T11:00:00,-08:00,AKDT +1992-10-25T10:00:00,-09:00,AKST +1993-04-04T11:00:00,-08:00,AKDT +1993-10-31T10:00:00,-09:00,AKST +1994-04-03T11:00:00,-08:00,AKDT +1994-10-30T10:00:00,-09:00,AKST +1995-04-02T11:00:00,-08:00,AKDT +1995-10-29T10:00:00,-09:00,AKST +1996-04-07T11:00:00,-08:00,AKDT +1996-10-27T10:00:00,-09:00,AKST +1997-04-06T11:00:00,-08:00,AKDT +1997-10-26T10:00:00,-09:00,AKST +1998-04-05T11:00:00,-08:00,AKDT +1998-10-25T10:00:00,-09:00,AKST +1999-04-04T11:00:00,-08:00,AKDT +1999-10-31T10:00:00,-09:00,AKST +2000-04-02T11:00:00,-08:00,AKDT +2000-10-29T10:00:00,-09:00,AKST +2001-04-01T11:00:00,-08:00,AKDT +2001-10-28T10:00:00,-09:00,AKST +2002-04-07T11:00:00,-08:00,AKDT +2002-10-27T10:00:00,-09:00,AKST +2003-04-06T11:00:00,-08:00,AKDT +2003-10-26T10:00:00,-09:00,AKST +2004-04-04T11:00:00,-08:00,AKDT +2004-10-31T10:00:00,-09:00,AKST +2005-04-03T11:00:00,-08:00,AKDT +2005-10-30T10:00:00,-09:00,AKST +2006-04-02T11:00:00,-08:00,AKDT +2006-10-29T10:00:00,-09:00,AKST +2007-03-11T11:00:00,-08:00,AKDT +2007-11-04T10:00:00,-09:00,AKST +2008-03-09T11:00:00,-08:00,AKDT +2008-11-02T10:00:00,-09:00,AKST +2009-03-08T11:00:00,-08:00,AKDT +2009-11-01T10:00:00,-09:00,AKST +2010-03-14T11:00:00,-08:00,AKDT +2010-11-07T10:00:00,-09:00,AKST +2011-03-13T11:00:00,-08:00,AKDT +2011-11-06T10:00:00,-09:00,AKST +2012-03-11T11:00:00,-08:00,AKDT +2012-11-04T10:00:00,-09:00,AKST +2013-03-10T11:00:00,-08:00,AKDT +2013-11-03T10:00:00,-09:00,AKST +2014-03-09T11:00:00,-08:00,AKDT +2014-11-02T10:00:00,-09:00,AKST +2015-03-08T11:00:00,-08:00,AKDT +2015-11-01T10:00:00,-09:00,AKST +2016-03-13T11:00:00,-08:00,AKDT +2016-11-06T10:00:00,-09:00,AKST +2017-03-12T11:00:00,-08:00,AKDT +2017-11-05T10:00:00,-09:00,AKST +2018-03-11T11:00:00,-08:00,AKDT +2018-11-04T10:00:00,-09:00,AKST +2019-03-10T11:00:00,-08:00,AKDT +2019-11-03T10:00:00,-09:00,AKST +2020-03-08T11:00:00,-08:00,AKDT +2020-11-01T10:00:00,-09:00,AKST +2021-03-14T11:00:00,-08:00,AKDT +2021-11-07T10:00:00,-09:00,AKST +2022-03-13T11:00:00,-08:00,AKDT +2022-11-06T10:00:00,-09:00,AKST +2023-03-12T11:00:00,-08:00,AKDT +2023-11-05T10:00:00,-09:00,AKST +2024-03-10T11:00:00,-08:00,AKDT +2024-11-03T10:00:00,-09:00,AKST +2025-03-09T11:00:00,-08:00,AKDT +2025-11-02T10:00:00,-09:00,AKST +2026-03-08T11:00:00,-08:00,AKDT +2026-11-01T10:00:00,-09:00,AKST +2027-03-14T11:00:00,-08:00,AKDT +2027-11-07T10:00:00,-09:00,AKST +2028-03-12T11:00:00,-08:00,AKDT +2028-11-05T10:00:00,-09:00,AKST +2029-03-11T11:00:00,-08:00,AKDT +2029-11-04T10:00:00,-09:00,AKST +2030-03-10T11:00:00,-08:00,AKDT +2030-11-03T10:00:00,-09:00,AKST +2031-03-09T11:00:00,-08:00,AKDT +2031-11-02T10:00:00,-09:00,AKST +2032-03-14T11:00:00,-08:00,AKDT +2032-11-07T10:00:00,-09:00,AKST +2033-03-13T11:00:00,-08:00,AKDT +2033-11-06T10:00:00,-09:00,AKST +2034-03-12T11:00:00,-08:00,AKDT +2034-11-05T10:00:00,-09:00,AKST +2035-03-11T11:00:00,-08:00,AKDT +2035-11-04T10:00:00,-09:00,AKST +2036-03-09T11:00:00,-08:00,AKDT +2036-11-02T10:00:00,-09:00,AKST +2037-03-08T11:00:00,-08:00,AKDT +2037-11-01T10:00:00,-09:00,AKST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-st-barthelemy.txt b/desk/gub/lib/pytz/america-st-barthelemy.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-st-barthelemy.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-st-johns.txt b/desk/gub/lib/pytz/america-st-johns.txt new file mode 100644 index 0000000..8625466 --- /dev/null +++ b/desk/gub/lib/pytz/america-st-johns.txt @@ -0,0 +1,240 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:29,NST +1917-04-08T05:30:52,-03:29,NDT +1917-09-17T04:30:52,-04:29,NST +1918-04-14T05:30:52,-03:29,NDT +1918-10-27T04:30:52,-04:29,NST +1919-05-06T02:30:52,-03:29,NDT +1919-08-13T01:30:52,-04:29,NST +1920-05-03T02:30:52,-03:29,NDT +1920-11-01T01:30:52,-04:29,NST +1921-05-02T02:30:52,-03:29,NDT +1921-10-31T01:30:52,-04:29,NST +1922-05-08T02:30:52,-03:29,NDT +1922-10-30T01:30:52,-04:29,NST +1923-05-07T02:30:52,-03:29,NDT +1923-10-29T01:30:52,-04:29,NST +1924-05-05T02:30:52,-03:29,NDT +1924-10-27T01:30:52,-04:29,NST +1925-05-04T02:30:52,-03:29,NDT +1925-10-26T01:30:52,-04:29,NST +1926-05-03T02:30:52,-03:29,NDT +1926-11-01T01:30:52,-04:29,NST +1927-05-02T02:30:52,-03:29,NDT +1927-10-31T01:30:52,-04:29,NST +1928-05-07T02:30:52,-03:29,NDT +1928-10-29T01:30:52,-04:29,NST +1929-05-06T02:30:52,-03:29,NDT +1929-10-28T01:30:52,-04:29,NST +1930-05-05T02:30:52,-03:29,NDT +1930-10-27T01:30:52,-04:29,NST +1931-05-04T02:30:52,-03:29,NDT +1931-10-26T01:30:52,-04:29,NST +1932-05-02T02:30:52,-03:29,NDT +1932-10-31T01:30:52,-04:29,NST +1933-05-08T02:30:52,-03:29,NDT +1933-10-30T01:30:52,-04:29,NST +1934-05-07T02:30:52,-03:29,NDT +1934-10-29T01:30:52,-04:29,NST +1935-03-30T03:30:52,-04:30,NST +1935-05-06T02:30:00,-03:30,NDT +1935-10-28T01:30:00,-04:30,NST +1936-05-11T03:30:00,-03:30,NDT +1936-10-05T02:30:00,-04:30,NST +1937-05-10T03:30:00,-03:30,NDT +1937-10-04T02:30:00,-04:30,NST +1938-05-09T03:30:00,-03:30,NDT +1938-10-03T02:30:00,-04:30,NST +1939-05-15T03:30:00,-03:30,NDT +1939-10-02T02:30:00,-04:30,NST +1940-05-13T03:30:00,-03:30,NDT +1940-10-07T02:30:00,-04:30,NST +1941-05-12T03:30:00,-03:30,NDT +1941-10-06T02:30:00,-04:30,NST +1942-05-11T03:30:00,-03:30,NWT +1945-08-14T23:00:00,-03:30,NPT +1945-09-30T04:30:00,-04:30,NST +1946-05-12T05:30:00,-03:30,NDT +1946-10-06T04:30:00,-04:30,NST +1947-05-11T05:30:00,-03:30,NDT +1947-10-05T04:30:00,-04:30,NST +1948-05-09T05:30:00,-03:30,NDT +1948-10-03T04:30:00,-04:30,NST +1949-05-08T05:30:00,-03:30,NDT +1949-10-02T04:30:00,-04:30,NST +1950-05-14T05:30:00,-03:30,NDT +1950-10-08T04:30:00,-04:30,NST +1951-04-29T05:30:00,-03:30,NDT +1951-09-30T04:30:00,-04:30,NST +1952-04-27T05:30:00,-03:30,NDT +1952-09-28T04:30:00,-04:30,NST +1953-04-26T05:30:00,-03:30,NDT +1953-09-27T04:30:00,-04:30,NST +1954-04-25T05:30:00,-03:30,NDT +1954-09-26T04:30:00,-04:30,NST +1955-04-24T05:30:00,-03:30,NDT +1955-09-25T04:30:00,-04:30,NST +1956-04-29T05:30:00,-03:30,NDT +1956-09-30T04:30:00,-04:30,NST +1957-04-28T05:30:00,-03:30,NDT +1957-09-29T04:30:00,-04:30,NST +1958-04-27T05:30:00,-03:30,NDT +1958-09-28T04:30:00,-04:30,NST +1959-04-26T05:30:00,-03:30,NDT +1959-09-27T04:30:00,-04:30,NST +1960-04-24T05:30:00,-03:30,NDT +1960-10-30T04:30:00,-04:30,NST +1961-04-30T05:30:00,-03:30,NDT +1961-10-29T04:30:00,-04:30,NST +1962-04-29T05:30:00,-03:30,NDT +1962-10-28T04:30:00,-04:30,NST +1963-04-28T05:30:00,-03:30,NDT +1963-10-27T04:30:00,-04:30,NST +1964-04-26T05:30:00,-03:30,NDT +1964-10-25T04:30:00,-04:30,NST +1965-04-25T05:30:00,-03:30,NDT +1965-10-31T04:30:00,-04:30,NST +1966-04-24T05:30:00,-03:30,NDT +1966-10-30T04:30:00,-04:30,NST +1967-04-30T05:30:00,-03:30,NDT +1967-10-29T04:30:00,-04:30,NST +1968-04-28T05:30:00,-03:30,NDT +1968-10-27T04:30:00,-04:30,NST +1969-04-27T05:30:00,-03:30,NDT +1969-10-26T04:30:00,-04:30,NST +1970-04-26T05:30:00,-03:30,NDT +1970-10-25T04:30:00,-04:30,NST +1971-04-25T05:30:00,-03:30,NDT +1971-10-31T04:30:00,-04:30,NST +1972-04-30T05:30:00,-03:30,NDT +1972-10-29T04:30:00,-04:30,NST +1973-04-29T05:30:00,-03:30,NDT +1973-10-28T04:30:00,-04:30,NST +1974-04-28T05:30:00,-03:30,NDT +1974-10-27T04:30:00,-04:30,NST +1975-04-27T05:30:00,-03:30,NDT +1975-10-26T04:30:00,-04:30,NST +1976-04-25T05:30:00,-03:30,NDT +1976-10-31T04:30:00,-04:30,NST +1977-04-24T05:30:00,-03:30,NDT +1977-10-30T04:30:00,-04:30,NST +1978-04-30T05:30:00,-03:30,NDT +1978-10-29T04:30:00,-04:30,NST +1979-04-29T05:30:00,-03:30,NDT +1979-10-28T04:30:00,-04:30,NST +1980-04-27T05:30:00,-03:30,NDT +1980-10-26T04:30:00,-04:30,NST +1981-04-26T05:30:00,-03:30,NDT +1981-10-25T04:30:00,-04:30,NST +1982-04-25T05:30:00,-03:30,NDT +1982-10-31T04:30:00,-04:30,NST +1983-04-24T05:30:00,-03:30,NDT +1983-10-30T04:30:00,-04:30,NST +1984-04-29T05:30:00,-03:30,NDT +1984-10-28T04:30:00,-04:30,NST +1985-04-28T05:30:00,-03:30,NDT +1985-10-27T04:30:00,-04:30,NST +1986-04-27T05:30:00,-03:30,NDT +1986-10-26T04:30:00,-04:30,NST +1987-04-05T03:31:00,-03:30,NDT +1987-10-25T02:31:00,-04:30,NST +1988-04-03T03:31:00,-02:30,NDDT +1988-10-30T01:31:00,-04:30,NST +1989-04-02T03:31:00,-03:30,NDT +1989-10-29T02:31:00,-04:30,NST +1990-04-01T03:31:00,-03:30,NDT +1990-10-28T02:31:00,-04:30,NST +1991-04-07T03:31:00,-03:30,NDT +1991-10-27T02:31:00,-04:30,NST +1992-04-05T03:31:00,-03:30,NDT +1992-10-25T02:31:00,-04:30,NST +1993-04-04T03:31:00,-03:30,NDT +1993-10-31T02:31:00,-04:30,NST +1994-04-03T03:31:00,-03:30,NDT +1994-10-30T02:31:00,-04:30,NST +1995-04-02T03:31:00,-03:30,NDT +1995-10-29T02:31:00,-04:30,NST +1996-04-07T03:31:00,-03:30,NDT +1996-10-27T02:31:00,-04:30,NST +1997-04-06T03:31:00,-03:30,NDT +1997-10-26T02:31:00,-04:30,NST +1998-04-05T03:31:00,-03:30,NDT +1998-10-25T02:31:00,-04:30,NST +1999-04-04T03:31:00,-03:30,NDT +1999-10-31T02:31:00,-04:30,NST +2000-04-02T03:31:00,-03:30,NDT +2000-10-29T02:31:00,-04:30,NST +2001-04-01T03:31:00,-03:30,NDT +2001-10-28T02:31:00,-04:30,NST +2002-04-07T03:31:00,-03:30,NDT +2002-10-27T02:31:00,-04:30,NST +2003-04-06T03:31:00,-03:30,NDT +2003-10-26T02:31:00,-04:30,NST +2004-04-04T03:31:00,-03:30,NDT +2004-10-31T02:31:00,-04:30,NST +2005-04-03T03:31:00,-03:30,NDT +2005-10-30T02:31:00,-04:30,NST +2006-04-02T03:31:00,-03:30,NDT +2006-10-29T02:31:00,-04:30,NST +2007-03-11T03:31:00,-03:30,NDT +2007-11-04T02:31:00,-04:30,NST +2008-03-09T03:31:00,-03:30,NDT +2008-11-02T02:31:00,-04:30,NST +2009-03-08T03:31:00,-03:30,NDT +2009-11-01T02:31:00,-04:30,NST +2010-03-14T03:31:00,-03:30,NDT +2010-11-07T02:31:00,-04:30,NST +2011-03-13T03:31:00,-03:30,NDT +2011-11-06T04:30:00,-04:30,NST +2012-03-11T05:30:00,-03:30,NDT +2012-11-04T04:30:00,-04:30,NST +2013-03-10T05:30:00,-03:30,NDT +2013-11-03T04:30:00,-04:30,NST +2014-03-09T05:30:00,-03:30,NDT +2014-11-02T04:30:00,-04:30,NST +2015-03-08T05:30:00,-03:30,NDT +2015-11-01T04:30:00,-04:30,NST +2016-03-13T05:30:00,-03:30,NDT +2016-11-06T04:30:00,-04:30,NST +2017-03-12T05:30:00,-03:30,NDT +2017-11-05T04:30:00,-04:30,NST +2018-03-11T05:30:00,-03:30,NDT +2018-11-04T04:30:00,-04:30,NST +2019-03-10T05:30:00,-03:30,NDT +2019-11-03T04:30:00,-04:30,NST +2020-03-08T05:30:00,-03:30,NDT +2020-11-01T04:30:00,-04:30,NST +2021-03-14T05:30:00,-03:30,NDT +2021-11-07T04:30:00,-04:30,NST +2022-03-13T05:30:00,-03:30,NDT +2022-11-06T04:30:00,-04:30,NST +2023-03-12T05:30:00,-03:30,NDT +2023-11-05T04:30:00,-04:30,NST +2024-03-10T05:30:00,-03:30,NDT +2024-11-03T04:30:00,-04:30,NST +2025-03-09T05:30:00,-03:30,NDT +2025-11-02T04:30:00,-04:30,NST +2026-03-08T05:30:00,-03:30,NDT +2026-11-01T04:30:00,-04:30,NST +2027-03-14T05:30:00,-03:30,NDT +2027-11-07T04:30:00,-04:30,NST +2028-03-12T05:30:00,-03:30,NDT +2028-11-05T04:30:00,-04:30,NST +2029-03-11T05:30:00,-03:30,NDT +2029-11-04T04:30:00,-04:30,NST +2030-03-10T05:30:00,-03:30,NDT +2030-11-03T04:30:00,-04:30,NST +2031-03-09T05:30:00,-03:30,NDT +2031-11-02T04:30:00,-04:30,NST +2032-03-14T05:30:00,-03:30,NDT +2032-11-07T04:30:00,-04:30,NST +2033-03-13T05:30:00,-03:30,NDT +2033-11-06T04:30:00,-04:30,NST +2034-03-12T05:30:00,-03:30,NDT +2034-11-05T04:30:00,-04:30,NST +2035-03-11T05:30:00,-03:30,NDT +2035-11-04T04:30:00,-04:30,NST +2036-03-09T05:30:00,-03:30,NDT +2036-11-02T04:30:00,-04:30,NST +2037-03-08T05:30:00,-03:30,NDT +2037-11-01T04:30:00,-04:30,NST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-st-kitts.txt b/desk/gub/lib/pytz/america-st-kitts.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-st-kitts.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-st-lucia.txt b/desk/gub/lib/pytz/america-st-lucia.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-st-lucia.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-st-thomas.txt b/desk/gub/lib/pytz/america-st-thomas.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-st-thomas.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-st-vincent.txt b/desk/gub/lib/pytz/america-st-vincent.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-st-vincent.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-swift-current.txt b/desk/gub/lib/pytz/america-swift-current.txt new file mode 100644 index 0000000..6dcae81 --- /dev/null +++ b/desk/gub/lib/pytz/america-swift-current.txt @@ -0,0 +1,24 @@ +Time,Offset,Name +1905-09-01T07:11:20,-07:00,MST +1918-04-14T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1946-04-28T09:00:00,-06:00,MDT +1946-10-13T08:00:00,-07:00,MST +1947-04-27T09:00:00,-06:00,MDT +1947-09-28T08:00:00,-07:00,MST +1948-04-25T09:00:00,-06:00,MDT +1948-09-26T08:00:00,-07:00,MST +1949-04-24T09:00:00,-06:00,MDT +1949-09-25T08:00:00,-07:00,MST +1957-04-28T09:00:00,-06:00,MDT +1957-10-27T08:00:00,-07:00,MST +1959-04-26T09:00:00,-06:00,MDT +1959-10-25T08:00:00,-07:00,MST +1960-04-24T09:00:00,-06:00,MDT +1960-09-25T08:00:00,-07:00,MST +1961-04-30T09:00:00,-06:00,MDT +1961-09-24T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-tegucigalpa.txt b/desk/gub/lib/pytz/america-tegucigalpa.txt new file mode 100644 index 0000000..f365810 --- /dev/null +++ b/desk/gub/lib/pytz/america-tegucigalpa.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +1921-04-01T05:48:52,-06:00,CST +1987-05-03T06:00:00,-05:00,CDT +1987-09-27T05:00:00,-06:00,CST +1988-05-01T06:00:00,-05:00,CDT +1988-09-25T05:00:00,-06:00,CST +2006-05-07T06:00:00,-05:00,CDT +2006-08-07T05:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-thule.txt b/desk/gub/lib/pytz/america-thule.txt new file mode 100644 index 0000000..2f60f36 --- /dev/null +++ b/desk/gub/lib/pytz/america-thule.txt @@ -0,0 +1,96 @@ +Time,Offset,Name +1916-07-28T04:35:08,-04:00,AST +1991-03-31T06:00:00,-03:00,ADT +1991-09-29T05:00:00,-04:00,AST +1992-03-29T06:00:00,-03:00,ADT +1992-09-27T05:00:00,-04:00,AST +1993-04-04T06:00:00,-03:00,ADT +1993-10-31T05:00:00,-04:00,AST +1994-04-03T06:00:00,-03:00,ADT +1994-10-30T05:00:00,-04:00,AST +1995-04-02T06:00:00,-03:00,ADT +1995-10-29T05:00:00,-04:00,AST +1996-04-07T06:00:00,-03:00,ADT +1996-10-27T05:00:00,-04:00,AST +1997-04-06T06:00:00,-03:00,ADT +1997-10-26T05:00:00,-04:00,AST +1998-04-05T06:00:00,-03:00,ADT +1998-10-25T05:00:00,-04:00,AST +1999-04-04T06:00:00,-03:00,ADT +1999-10-31T05:00:00,-04:00,AST +2000-04-02T06:00:00,-03:00,ADT +2000-10-29T05:00:00,-04:00,AST +2001-04-01T06:00:00,-03:00,ADT +2001-10-28T05:00:00,-04:00,AST +2002-04-07T06:00:00,-03:00,ADT +2002-10-27T05:00:00,-04:00,AST +2003-04-06T06:00:00,-03:00,ADT +2003-10-26T05:00:00,-04:00,AST +2004-04-04T06:00:00,-03:00,ADT +2004-10-31T05:00:00,-04:00,AST +2005-04-03T06:00:00,-03:00,ADT +2005-10-30T05:00:00,-04:00,AST +2006-04-02T06:00:00,-03:00,ADT +2006-10-29T05:00:00,-04:00,AST +2007-03-11T06:00:00,-03:00,ADT +2007-11-04T05:00:00,-04:00,AST +2008-03-09T06:00:00,-03:00,ADT +2008-11-02T05:00:00,-04:00,AST +2009-03-08T06:00:00,-03:00,ADT +2009-11-01T05:00:00,-04:00,AST +2010-03-14T06:00:00,-03:00,ADT +2010-11-07T05:00:00,-04:00,AST +2011-03-13T06:00:00,-03:00,ADT +2011-11-06T05:00:00,-04:00,AST +2012-03-11T06:00:00,-03:00,ADT +2012-11-04T05:00:00,-04:00,AST +2013-03-10T06:00:00,-03:00,ADT +2013-11-03T05:00:00,-04:00,AST +2014-03-09T06:00:00,-03:00,ADT +2014-11-02T05:00:00,-04:00,AST +2015-03-08T06:00:00,-03:00,ADT +2015-11-01T05:00:00,-04:00,AST +2016-03-13T06:00:00,-03:00,ADT +2016-11-06T05:00:00,-04:00,AST +2017-03-12T06:00:00,-03:00,ADT +2017-11-05T05:00:00,-04:00,AST +2018-03-11T06:00:00,-03:00,ADT +2018-11-04T05:00:00,-04:00,AST +2019-03-10T06:00:00,-03:00,ADT +2019-11-03T05:00:00,-04:00,AST +2020-03-08T06:00:00,-03:00,ADT +2020-11-01T05:00:00,-04:00,AST +2021-03-14T06:00:00,-03:00,ADT +2021-11-07T05:00:00,-04:00,AST +2022-03-13T06:00:00,-03:00,ADT +2022-11-06T05:00:00,-04:00,AST +2023-03-12T06:00:00,-03:00,ADT +2023-11-05T05:00:00,-04:00,AST +2024-03-10T06:00:00,-03:00,ADT +2024-11-03T05:00:00,-04:00,AST +2025-03-09T06:00:00,-03:00,ADT +2025-11-02T05:00:00,-04:00,AST +2026-03-08T06:00:00,-03:00,ADT +2026-11-01T05:00:00,-04:00,AST +2027-03-14T06:00:00,-03:00,ADT +2027-11-07T05:00:00,-04:00,AST +2028-03-12T06:00:00,-03:00,ADT +2028-11-05T05:00:00,-04:00,AST +2029-03-11T06:00:00,-03:00,ADT +2029-11-04T05:00:00,-04:00,AST +2030-03-10T06:00:00,-03:00,ADT +2030-11-03T05:00:00,-04:00,AST +2031-03-09T06:00:00,-03:00,ADT +2031-11-02T05:00:00,-04:00,AST +2032-03-14T06:00:00,-03:00,ADT +2032-11-07T05:00:00,-04:00,AST +2033-03-13T06:00:00,-03:00,ADT +2033-11-06T05:00:00,-04:00,AST +2034-03-12T06:00:00,-03:00,ADT +2034-11-05T05:00:00,-04:00,AST +2035-03-11T06:00:00,-03:00,ADT +2035-11-04T05:00:00,-04:00,AST +2036-03-09T06:00:00,-03:00,ADT +2036-11-02T05:00:00,-04:00,AST +2037-03-08T06:00:00,-03:00,ADT +2037-11-01T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-thunder-bay.txt b/desk/gub/lib/pytz/america-thunder-bay.txt new file mode 100644 index 0000000..4379fb8 --- /dev/null +++ b/desk/gub/lib/pytz/america-thunder-bay.txt @@ -0,0 +1,234 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1918-04-14T07:00:00,-04:00,EDT +1918-10-27T06:00:00,-05:00,EST +1919-03-31T04:30:00,-04:00,EDT +1919-10-26T04:00:00,-05:00,EST +1920-05-02T07:00:00,-04:00,EDT +1920-09-26T04:00:00,-05:00,EST +1921-05-15T07:00:00,-04:00,EDT +1921-09-15T06:00:00,-05:00,EST +1922-05-14T07:00:00,-04:00,EDT +1922-09-17T06:00:00,-05:00,EST +1923-05-13T07:00:00,-04:00,EDT +1923-09-16T06:00:00,-05:00,EST +1924-05-04T07:00:00,-04:00,EDT +1924-09-21T06:00:00,-05:00,EST +1925-05-03T07:00:00,-04:00,EDT +1925-09-20T06:00:00,-05:00,EST +1926-05-02T07:00:00,-04:00,EDT +1926-09-19T06:00:00,-05:00,EST +1927-05-01T07:00:00,-04:00,EDT +1927-09-25T06:00:00,-05:00,EST +1928-04-29T07:00:00,-04:00,EDT +1928-09-30T06:00:00,-05:00,EST +1929-04-28T07:00:00,-04:00,EDT +1929-09-29T06:00:00,-05:00,EST +1930-04-27T07:00:00,-04:00,EDT +1930-09-28T06:00:00,-05:00,EST +1931-04-26T07:00:00,-04:00,EDT +1931-09-27T06:00:00,-05:00,EST +1932-05-01T07:00:00,-04:00,EDT +1932-09-25T06:00:00,-05:00,EST +1933-04-30T07:00:00,-04:00,EDT +1933-10-01T06:00:00,-05:00,EST +1934-04-29T07:00:00,-04:00,EDT +1934-09-30T06:00:00,-05:00,EST +1935-04-28T07:00:00,-04:00,EDT +1935-09-29T06:00:00,-05:00,EST +1936-04-26T07:00:00,-04:00,EDT +1936-09-27T06:00:00,-05:00,EST +1937-04-25T07:00:00,-04:00,EDT +1937-09-26T06:00:00,-05:00,EST +1938-04-24T07:00:00,-04:00,EDT +1938-09-25T06:00:00,-05:00,EST +1939-04-30T07:00:00,-04:00,EDT +1939-09-24T06:00:00,-05:00,EST +1940-04-28T07:00:00,-04:00,EDT +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1946-04-28T07:00:00,-04:00,EDT +1946-09-29T06:00:00,-05:00,EST +1947-04-27T07:00:00,-04:00,EDT +1947-09-28T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1949-04-24T07:00:00,-04:00,EDT +1949-11-27T06:00:00,-05:00,EST +1950-04-30T07:00:00,-04:00,EDT +1950-11-26T06:00:00,-05:00,EST +1951-04-29T07:00:00,-04:00,EDT +1951-09-30T06:00:00,-05:00,EST +1952-04-27T07:00:00,-04:00,EDT +1952-09-28T06:00:00,-05:00,EST +1953-04-26T07:00:00,-04:00,EDT +1953-09-27T06:00:00,-05:00,EST +1954-04-25T07:00:00,-04:00,EDT +1954-09-26T06:00:00,-05:00,EST +1955-04-24T07:00:00,-04:00,EDT +1955-09-25T06:00:00,-05:00,EST +1956-04-29T07:00:00,-04:00,EDT +1956-09-30T06:00:00,-05:00,EST +1957-04-28T07:00:00,-04:00,EDT +1957-10-27T06:00:00,-05:00,EST +1958-04-27T07:00:00,-04:00,EDT +1958-10-26T06:00:00,-05:00,EST +1959-04-26T07:00:00,-04:00,EDT +1959-10-25T06:00:00,-05:00,EST +1960-04-24T07:00:00,-04:00,EDT +1960-10-30T06:00:00,-05:00,EST +1961-04-30T07:00:00,-04:00,EDT +1961-10-29T06:00:00,-05:00,EST +1962-04-29T07:00:00,-04:00,EDT +1962-10-28T06:00:00,-05:00,EST +1963-04-28T07:00:00,-04:00,EDT +1963-10-27T06:00:00,-05:00,EST +1964-04-26T07:00:00,-04:00,EDT +1964-10-25T06:00:00,-05:00,EST +1965-04-25T07:00:00,-04:00,EDT +1965-10-31T06:00:00,-05:00,EST +1966-04-24T07:00:00,-04:00,EDT +1966-10-30T06:00:00,-05:00,EST +1967-04-30T07:00:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-04-28T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-tijuana.txt b/desk/gub/lib/pytz/america-tijuana.txt new file mode 100644 index 0000000..a411291 --- /dev/null +++ b/desk/gub/lib/pytz/america-tijuana.txt @@ -0,0 +1,188 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1924-01-01T07:00:00,-08:00,PST +1927-06-10T08:00:00,-07:00,MST +1930-11-15T07:00:00,-08:00,PST +1931-04-01T08:00:00,-07:00,PDT +1931-09-30T07:00:00,-08:00,PST +1942-04-24T08:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-11-15T07:00:00,-08:00,PST +1948-04-05T08:00:00,-07:00,PDT +1949-01-14T07:00:00,-08:00,PST +1950-05-01T08:00:00,-07:00,PDT +1950-09-24T07:00:00,-08:00,PST +1951-04-29T10:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T10:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T09:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T09:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T09:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T09:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T09:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T09:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T09:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T09:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T09:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T09:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T09:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T09:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T09:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T09:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-04-01T10:00:00,-07:00,PDT +2007-10-28T09:00:00,-08:00,PST +2008-04-06T10:00:00,-07:00,PDT +2008-10-26T09:00:00,-08:00,PST +2009-04-05T10:00:00,-07:00,PDT +2009-10-25T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T09:00:00,-08:00,PST +2021-03-14T10:00:00,-07:00,PDT +2021-11-07T09:00:00,-08:00,PST +2022-03-13T10:00:00,-07:00,PDT +2022-11-06T09:00:00,-08:00,PST +2023-03-12T10:00:00,-07:00,PDT +2023-11-05T09:00:00,-08:00,PST +2024-03-10T10:00:00,-07:00,PDT +2024-11-03T09:00:00,-08:00,PST +2025-03-09T10:00:00,-07:00,PDT +2025-11-02T09:00:00,-08:00,PST +2026-03-08T10:00:00,-07:00,PDT +2026-11-01T09:00:00,-08:00,PST +2027-03-14T10:00:00,-07:00,PDT +2027-11-07T09:00:00,-08:00,PST +2028-03-12T10:00:00,-07:00,PDT +2028-11-05T09:00:00,-08:00,PST +2029-03-11T10:00:00,-07:00,PDT +2029-11-04T09:00:00,-08:00,PST +2030-03-10T10:00:00,-07:00,PDT +2030-11-03T09:00:00,-08:00,PST +2031-03-09T10:00:00,-07:00,PDT +2031-11-02T09:00:00,-08:00,PST +2032-03-14T10:00:00,-07:00,PDT +2032-11-07T09:00:00,-08:00,PST +2033-03-13T10:00:00,-07:00,PDT +2033-11-06T09:00:00,-08:00,PST +2034-03-12T10:00:00,-07:00,PDT +2034-11-05T09:00:00,-08:00,PST +2035-03-11T10:00:00,-07:00,PDT +2035-11-04T09:00:00,-08:00,PST +2036-03-09T10:00:00,-07:00,PDT +2036-11-02T09:00:00,-08:00,PST +2037-03-08T10:00:00,-07:00,PDT +2037-11-01T09:00:00,-08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-toronto.txt b/desk/gub/lib/pytz/america-toronto.txt new file mode 100644 index 0000000..4379fb8 --- /dev/null +++ b/desk/gub/lib/pytz/america-toronto.txt @@ -0,0 +1,234 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1918-04-14T07:00:00,-04:00,EDT +1918-10-27T06:00:00,-05:00,EST +1919-03-31T04:30:00,-04:00,EDT +1919-10-26T04:00:00,-05:00,EST +1920-05-02T07:00:00,-04:00,EDT +1920-09-26T04:00:00,-05:00,EST +1921-05-15T07:00:00,-04:00,EDT +1921-09-15T06:00:00,-05:00,EST +1922-05-14T07:00:00,-04:00,EDT +1922-09-17T06:00:00,-05:00,EST +1923-05-13T07:00:00,-04:00,EDT +1923-09-16T06:00:00,-05:00,EST +1924-05-04T07:00:00,-04:00,EDT +1924-09-21T06:00:00,-05:00,EST +1925-05-03T07:00:00,-04:00,EDT +1925-09-20T06:00:00,-05:00,EST +1926-05-02T07:00:00,-04:00,EDT +1926-09-19T06:00:00,-05:00,EST +1927-05-01T07:00:00,-04:00,EDT +1927-09-25T06:00:00,-05:00,EST +1928-04-29T07:00:00,-04:00,EDT +1928-09-30T06:00:00,-05:00,EST +1929-04-28T07:00:00,-04:00,EDT +1929-09-29T06:00:00,-05:00,EST +1930-04-27T07:00:00,-04:00,EDT +1930-09-28T06:00:00,-05:00,EST +1931-04-26T07:00:00,-04:00,EDT +1931-09-27T06:00:00,-05:00,EST +1932-05-01T07:00:00,-04:00,EDT +1932-09-25T06:00:00,-05:00,EST +1933-04-30T07:00:00,-04:00,EDT +1933-10-01T06:00:00,-05:00,EST +1934-04-29T07:00:00,-04:00,EDT +1934-09-30T06:00:00,-05:00,EST +1935-04-28T07:00:00,-04:00,EDT +1935-09-29T06:00:00,-05:00,EST +1936-04-26T07:00:00,-04:00,EDT +1936-09-27T06:00:00,-05:00,EST +1937-04-25T07:00:00,-04:00,EDT +1937-09-26T06:00:00,-05:00,EST +1938-04-24T07:00:00,-04:00,EDT +1938-09-25T06:00:00,-05:00,EST +1939-04-30T07:00:00,-04:00,EDT +1939-09-24T06:00:00,-05:00,EST +1940-04-28T07:00:00,-04:00,EDT +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1946-04-28T07:00:00,-04:00,EDT +1946-09-29T06:00:00,-05:00,EST +1947-04-27T07:00:00,-04:00,EDT +1947-09-28T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1949-04-24T07:00:00,-04:00,EDT +1949-11-27T06:00:00,-05:00,EST +1950-04-30T07:00:00,-04:00,EDT +1950-11-26T06:00:00,-05:00,EST +1951-04-29T07:00:00,-04:00,EDT +1951-09-30T06:00:00,-05:00,EST +1952-04-27T07:00:00,-04:00,EDT +1952-09-28T06:00:00,-05:00,EST +1953-04-26T07:00:00,-04:00,EDT +1953-09-27T06:00:00,-05:00,EST +1954-04-25T07:00:00,-04:00,EDT +1954-09-26T06:00:00,-05:00,EST +1955-04-24T07:00:00,-04:00,EDT +1955-09-25T06:00:00,-05:00,EST +1956-04-29T07:00:00,-04:00,EDT +1956-09-30T06:00:00,-05:00,EST +1957-04-28T07:00:00,-04:00,EDT +1957-10-27T06:00:00,-05:00,EST +1958-04-27T07:00:00,-04:00,EDT +1958-10-26T06:00:00,-05:00,EST +1959-04-26T07:00:00,-04:00,EDT +1959-10-25T06:00:00,-05:00,EST +1960-04-24T07:00:00,-04:00,EDT +1960-10-30T06:00:00,-05:00,EST +1961-04-30T07:00:00,-04:00,EDT +1961-10-29T06:00:00,-05:00,EST +1962-04-29T07:00:00,-04:00,EDT +1962-10-28T06:00:00,-05:00,EST +1963-04-28T07:00:00,-04:00,EDT +1963-10-27T06:00:00,-05:00,EST +1964-04-26T07:00:00,-04:00,EDT +1964-10-25T06:00:00,-05:00,EST +1965-04-25T07:00:00,-04:00,EDT +1965-10-31T06:00:00,-05:00,EST +1966-04-24T07:00:00,-04:00,EDT +1966-10-30T06:00:00,-05:00,EST +1967-04-30T07:00:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-04-28T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-tortola.txt b/desk/gub/lib/pytz/america-tortola.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-tortola.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-vancouver.txt b/desk/gub/lib/pytz/america-vancouver.txt new file mode 100644 index 0000000..b3882aa --- /dev/null +++ b/desk/gub/lib/pytz/america-vancouver.txt @@ -0,0 +1,191 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:00,PST +1918-04-14T10:00:00,-07:00,PDT +1918-10-27T09:00:00,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1946-04-28T10:00:00,-07:00,PDT +1946-09-29T09:00:00,-08:00,PST +1947-04-27T10:00:00,-07:00,PDT +1947-09-28T09:00:00,-08:00,PST +1948-04-25T10:00:00,-07:00,PDT +1948-09-26T09:00:00,-08:00,PST +1949-04-24T10:00:00,-07:00,PDT +1949-09-25T09:00:00,-08:00,PST +1950-04-30T10:00:00,-07:00,PDT +1950-09-24T09:00:00,-08:00,PST +1951-04-29T10:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T10:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T10:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T10:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T10:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T10:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T10:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T10:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T10:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T10:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T10:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T10:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T10:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T10:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T10:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T10:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-04-28T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-04-27T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-03-11T10:00:00,-07:00,PDT +2007-11-04T09:00:00,-08:00,PST +2008-03-09T10:00:00,-07:00,PDT +2008-11-02T09:00:00,-08:00,PST +2009-03-08T10:00:00,-07:00,PDT +2009-11-01T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T09:00:00,-08:00,PST +2021-03-14T10:00:00,-07:00,PDT +2021-11-07T09:00:00,-08:00,PST +2022-03-13T10:00:00,-07:00,PDT +2022-11-06T09:00:00,-08:00,PST +2023-03-12T10:00:00,-07:00,PDT +2023-11-05T09:00:00,-08:00,PST +2024-03-10T10:00:00,-07:00,PDT +2024-11-03T09:00:00,-08:00,PST +2025-03-09T10:00:00,-07:00,PDT +2025-11-02T09:00:00,-08:00,PST +2026-03-08T10:00:00,-07:00,PDT +2026-11-01T09:00:00,-08:00,PST +2027-03-14T10:00:00,-07:00,PDT +2027-11-07T09:00:00,-08:00,PST +2028-03-12T10:00:00,-07:00,PDT +2028-11-05T09:00:00,-08:00,PST +2029-03-11T10:00:00,-07:00,PDT +2029-11-04T09:00:00,-08:00,PST +2030-03-10T10:00:00,-07:00,PDT +2030-11-03T09:00:00,-08:00,PST +2031-03-09T10:00:00,-07:00,PDT +2031-11-02T09:00:00,-08:00,PST +2032-03-14T10:00:00,-07:00,PDT +2032-11-07T09:00:00,-08:00,PST +2033-03-13T10:00:00,-07:00,PDT +2033-11-06T09:00:00,-08:00,PST +2034-03-12T10:00:00,-07:00,PDT +2034-11-05T09:00:00,-08:00,PST +2035-03-11T10:00:00,-07:00,PDT +2035-11-04T09:00:00,-08:00,PST +2036-03-09T10:00:00,-07:00,PDT +2036-11-02T09:00:00,-08:00,PST +2037-03-08T10:00:00,-07:00,PDT +2037-11-01T09:00:00,-08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-virgin.txt b/desk/gub/lib/pytz/america-virgin.txt new file mode 100644 index 0000000..b18c344 --- /dev/null +++ b/desk/gub/lib/pytz/america-virgin.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:00,AST +1942-05-03T04:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-whitehorse.txt b/desk/gub/lib/pytz/america-whitehorse.txt new file mode 100644 index 0000000..622b7f9 --- /dev/null +++ b/desk/gub/lib/pytz/america-whitehorse.txt @@ -0,0 +1,94 @@ +Time,Offset,Name +1901-12-13T20:45:52,-09:00,YST +1918-04-14T11:00:00,-08:00,YDT +1918-10-27T10:00:00,-09:00,YST +1919-05-25T11:00:00,-08:00,YDT +1919-11-01T08:00:00,-09:00,YST +1942-02-09T11:00:00,-08:00,YWT +1945-08-14T23:00:00,-08:00,YPT +1945-09-30T10:00:00,-09:00,YST +1965-04-25T09:00:00,-07:00,YDDT +1965-10-31T09:00:00,-09:00,YST +1966-02-27T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-03-11T10:00:00,-07:00,PDT +2007-11-04T09:00:00,-08:00,PST +2008-03-09T10:00:00,-07:00,PDT +2008-11-02T09:00:00,-08:00,PST +2009-03-08T10:00:00,-07:00,PDT +2009-11-01T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T07:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-winnipeg.txt b/desk/gub/lib/pytz/america-winnipeg.txt new file mode 100644 index 0000000..9793b6c --- /dev/null +++ b/desk/gub/lib/pytz/america-winnipeg.txt @@ -0,0 +1,187 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1916-04-23T06:00:00,-05:00,CDT +1916-09-17T05:00:00,-06:00,CST +1918-04-14T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1937-05-16T08:00:00,-05:00,CDT +1937-09-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-05-12T08:00:00,-05:00,CDT +1946-10-13T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-05-01T08:00:00,-05:00,CDT +1950-09-30T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-09-25T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-09-30T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-09-25T07:00:00,-06:00,CST +1963-04-28T08:00:00,-05:00,CDT +1963-09-22T07:00:00,-06:00,CST +1966-04-24T08:00:00,-05:00,CDT +1966-10-30T08:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T08:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T08:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T08:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T08:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T08:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T08:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T08:00:00,-06:00,CST +1974-04-28T08:00:00,-05:00,CDT +1974-10-27T08:00:00,-06:00,CST +1975-04-27T08:00:00,-05:00,CDT +1975-10-26T08:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T08:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T08:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T08:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T08:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T08:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T08:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T08:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T08:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T08:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T08:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T08:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T08:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T08:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T08:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T08:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T08:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T08:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T08:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T08:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T08:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T08:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T08:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T08:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T08:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T08:00:00,-06:00,CST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T08:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T08:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T08:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T08:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T08:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-yakutat.txt b/desk/gub/lib/pytz/america-yakutat.txt new file mode 100644 index 0000000..e389acb --- /dev/null +++ b/desk/gub/lib/pytz/america-yakutat.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+14:41,LMT +1901-12-13T20:45:52,-09:00,YST +1942-02-09T11:00:00,-08:00,YWT +1945-08-14T23:00:00,-08:00,YPT +1945-09-30T10:00:00,-09:00,YST +1969-04-27T11:00:00,-08:00,YDT +1969-10-26T10:00:00,-09:00,YST +1970-04-26T11:00:00,-08:00,YDT +1970-10-25T10:00:00,-09:00,YST +1971-04-25T11:00:00,-08:00,YDT +1971-10-31T10:00:00,-09:00,YST +1972-04-30T11:00:00,-08:00,YDT +1972-10-29T10:00:00,-09:00,YST +1973-04-29T11:00:00,-08:00,YDT +1973-10-28T10:00:00,-09:00,YST +1974-01-06T11:00:00,-08:00,YDT +1974-10-27T10:00:00,-09:00,YST +1975-02-23T11:00:00,-08:00,YDT +1975-10-26T10:00:00,-09:00,YST +1976-04-25T11:00:00,-08:00,YDT +1976-10-31T10:00:00,-09:00,YST +1977-04-24T11:00:00,-08:00,YDT +1977-10-30T10:00:00,-09:00,YST +1978-04-30T11:00:00,-08:00,YDT +1978-10-29T10:00:00,-09:00,YST +1979-04-29T11:00:00,-08:00,YDT +1979-10-28T10:00:00,-09:00,YST +1980-04-27T11:00:00,-08:00,YDT +1980-10-26T10:00:00,-09:00,YST +1981-04-26T11:00:00,-08:00,YDT +1981-10-25T10:00:00,-09:00,YST +1982-04-25T11:00:00,-08:00,YDT +1982-10-31T10:00:00,-09:00,YST +1983-04-24T11:00:00,-08:00,YDT +1983-10-30T10:00:00,-09:00,YST +1983-11-30T09:00:00,-09:00,AKST +1984-04-29T11:00:00,-08:00,AKDT +1984-10-28T10:00:00,-09:00,AKST +1985-04-28T11:00:00,-08:00,AKDT +1985-10-27T10:00:00,-09:00,AKST +1986-04-27T11:00:00,-08:00,AKDT +1986-10-26T10:00:00,-09:00,AKST +1987-04-05T11:00:00,-08:00,AKDT +1987-10-25T10:00:00,-09:00,AKST +1988-04-03T11:00:00,-08:00,AKDT +1988-10-30T10:00:00,-09:00,AKST +1989-04-02T11:00:00,-08:00,AKDT +1989-10-29T10:00:00,-09:00,AKST +1990-04-01T11:00:00,-08:00,AKDT +1990-10-28T10:00:00,-09:00,AKST +1991-04-07T11:00:00,-08:00,AKDT +1991-10-27T10:00:00,-09:00,AKST +1992-04-05T11:00:00,-08:00,AKDT +1992-10-25T10:00:00,-09:00,AKST +1993-04-04T11:00:00,-08:00,AKDT +1993-10-31T10:00:00,-09:00,AKST +1994-04-03T11:00:00,-08:00,AKDT +1994-10-30T10:00:00,-09:00,AKST +1995-04-02T11:00:00,-08:00,AKDT +1995-10-29T10:00:00,-09:00,AKST +1996-04-07T11:00:00,-08:00,AKDT +1996-10-27T10:00:00,-09:00,AKST +1997-04-06T11:00:00,-08:00,AKDT +1997-10-26T10:00:00,-09:00,AKST +1998-04-05T11:00:00,-08:00,AKDT +1998-10-25T10:00:00,-09:00,AKST +1999-04-04T11:00:00,-08:00,AKDT +1999-10-31T10:00:00,-09:00,AKST +2000-04-02T11:00:00,-08:00,AKDT +2000-10-29T10:00:00,-09:00,AKST +2001-04-01T11:00:00,-08:00,AKDT +2001-10-28T10:00:00,-09:00,AKST +2002-04-07T11:00:00,-08:00,AKDT +2002-10-27T10:00:00,-09:00,AKST +2003-04-06T11:00:00,-08:00,AKDT +2003-10-26T10:00:00,-09:00,AKST +2004-04-04T11:00:00,-08:00,AKDT +2004-10-31T10:00:00,-09:00,AKST +2005-04-03T11:00:00,-08:00,AKDT +2005-10-30T10:00:00,-09:00,AKST +2006-04-02T11:00:00,-08:00,AKDT +2006-10-29T10:00:00,-09:00,AKST +2007-03-11T11:00:00,-08:00,AKDT +2007-11-04T10:00:00,-09:00,AKST +2008-03-09T11:00:00,-08:00,AKDT +2008-11-02T10:00:00,-09:00,AKST +2009-03-08T11:00:00,-08:00,AKDT +2009-11-01T10:00:00,-09:00,AKST +2010-03-14T11:00:00,-08:00,AKDT +2010-11-07T10:00:00,-09:00,AKST +2011-03-13T11:00:00,-08:00,AKDT +2011-11-06T10:00:00,-09:00,AKST +2012-03-11T11:00:00,-08:00,AKDT +2012-11-04T10:00:00,-09:00,AKST +2013-03-10T11:00:00,-08:00,AKDT +2013-11-03T10:00:00,-09:00,AKST +2014-03-09T11:00:00,-08:00,AKDT +2014-11-02T10:00:00,-09:00,AKST +2015-03-08T11:00:00,-08:00,AKDT +2015-11-01T10:00:00,-09:00,AKST +2016-03-13T11:00:00,-08:00,AKDT +2016-11-06T10:00:00,-09:00,AKST +2017-03-12T11:00:00,-08:00,AKDT +2017-11-05T10:00:00,-09:00,AKST +2018-03-11T11:00:00,-08:00,AKDT +2018-11-04T10:00:00,-09:00,AKST +2019-03-10T11:00:00,-08:00,AKDT +2019-11-03T10:00:00,-09:00,AKST +2020-03-08T11:00:00,-08:00,AKDT +2020-11-01T10:00:00,-09:00,AKST +2021-03-14T11:00:00,-08:00,AKDT +2021-11-07T10:00:00,-09:00,AKST +2022-03-13T11:00:00,-08:00,AKDT +2022-11-06T10:00:00,-09:00,AKST +2023-03-12T11:00:00,-08:00,AKDT +2023-11-05T10:00:00,-09:00,AKST +2024-03-10T11:00:00,-08:00,AKDT +2024-11-03T10:00:00,-09:00,AKST +2025-03-09T11:00:00,-08:00,AKDT +2025-11-02T10:00:00,-09:00,AKST +2026-03-08T11:00:00,-08:00,AKDT +2026-11-01T10:00:00,-09:00,AKST +2027-03-14T11:00:00,-08:00,AKDT +2027-11-07T10:00:00,-09:00,AKST +2028-03-12T11:00:00,-08:00,AKDT +2028-11-05T10:00:00,-09:00,AKST +2029-03-11T11:00:00,-08:00,AKDT +2029-11-04T10:00:00,-09:00,AKST +2030-03-10T11:00:00,-08:00,AKDT +2030-11-03T10:00:00,-09:00,AKST +2031-03-09T11:00:00,-08:00,AKDT +2031-11-02T10:00:00,-09:00,AKST +2032-03-14T11:00:00,-08:00,AKDT +2032-11-07T10:00:00,-09:00,AKST +2033-03-13T11:00:00,-08:00,AKDT +2033-11-06T10:00:00,-09:00,AKST +2034-03-12T11:00:00,-08:00,AKDT +2034-11-05T10:00:00,-09:00,AKST +2035-03-11T11:00:00,-08:00,AKDT +2035-11-04T10:00:00,-09:00,AKST +2036-03-09T11:00:00,-08:00,AKDT +2036-11-02T10:00:00,-09:00,AKST +2037-03-08T11:00:00,-08:00,AKDT +2037-11-01T10:00:00,-09:00,AKST \ No newline at end of file diff --git a/desk/gub/lib/pytz/america-yellowknife.txt b/desk/gub/lib/pytz/america-yellowknife.txt new file mode 100644 index 0000000..799f7ce --- /dev/null +++ b/desk/gub/lib/pytz/america-yellowknife.txt @@ -0,0 +1,151 @@ +Time,Offset,Name +1906-09-01T07:33:52,-07:00,MST +1918-04-14T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-04-13T09:00:00,-06:00,MDT +1919-05-27T08:00:00,-07:00,MST +1920-04-25T09:00:00,-06:00,MDT +1920-10-31T08:00:00,-07:00,MST +1921-04-24T09:00:00,-06:00,MDT +1921-09-25T08:00:00,-07:00,MST +1922-04-30T09:00:00,-06:00,MDT +1922-09-24T08:00:00,-07:00,MST +1923-04-29T09:00:00,-06:00,MDT +1923-09-30T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1947-04-27T09:00:00,-06:00,MDT +1947-09-28T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-04-28T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-04-27T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-casey.txt b/desk/gub/lib/pytz/antarctica-casey.txt new file mode 100644 index 0000000..db0f710 --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-casey.txt @@ -0,0 +1,19 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1969-01-01T00:00:00,+08:00,+08 +2009-10-17T18:00:00,+11:00,+11 +2010-03-04T15:00:00,+08:00,+08 +2011-10-27T18:00:00,+11:00,+11 +2012-02-21T17:00:00,+08:00,+08 +2016-10-21T16:00:00,+11:00,+11 +2018-03-10T17:00:00,+08:00,+08 +2018-10-06T20:00:00,+11:00,+11 +2019-03-16T16:00:00,+08:00,+08 +2019-10-03T19:00:00,+11:00,+11 +2020-03-07T16:00:00,+08:00,+08 +2020-10-03T16:01:00,+11:00,+11 +2021-03-13T13:00:00,+08:00,+08 +2021-10-02T16:01:00,+11:00,+11 +2022-03-12T13:00:00,+08:00,+08 +2022-10-01T16:01:00,+11:00,+11 +2023-03-08T16:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-davis.txt b/desk/gub/lib/pytz/antarctica-davis.txt new file mode 100644 index 0000000..7d4d326 --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-davis.txt @@ -0,0 +1,9 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1957-01-13T00:00:00,+07:00,+07 +1964-10-31T17:00:00,+00:00,-00 +1969-02-01T00:00:00,+07:00,+07 +2009-10-17T19:00:00,+05:00,+05 +2010-03-10T20:00:00,+07:00,+07 +2011-10-27T19:00:00,+05:00,+05 +2012-02-21T20:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-dumontdurville.txt b/desk/gub/lib/pytz/antarctica-dumontdurville.txt new file mode 100644 index 0000000..a494e67 --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-dumontdurville.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:49,LMT +1901-12-13T20:45:52,+10:00,+10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-macquarie.txt b/desk/gub/lib/pytz/antarctica-macquarie.txt new file mode 100644 index 0000000..56ce06f --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-macquarie.txt @@ -0,0 +1,146 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1901-12-13T20:45:52,+10:00,AEST +1916-09-30T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1919-03-31T14:00:00,+00:00,-00 +1948-03-25T00:00:00,+10:00,AEST +1967-09-30T16:00:00,+11:00,AEDT +1968-03-30T16:00:00,+10:00,AEST +1968-10-26T16:00:00,+11:00,AEDT +1969-03-08T16:00:00,+10:00,AEST +1969-10-25T16:00:00,+11:00,AEDT +1970-03-07T16:00:00,+10:00,AEST +1970-10-24T16:00:00,+11:00,AEDT +1971-03-13T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-03-27T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-26T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-01T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-24T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-17T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-30T16:00:00,+10:00,AEST +1991-10-05T16:00:00,+11:00,AEDT +1992-03-28T16:00:00,+10:00,AEST +1992-10-03T16:00:00,+11:00,AEDT +1993-03-27T16:00:00,+10:00,AEST +1993-10-02T16:00:00,+11:00,AEDT +1994-03-26T16:00:00,+10:00,AEST +1994-10-01T16:00:00,+11:00,AEDT +1995-03-25T16:00:00,+10:00,AEST +1995-09-30T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-05T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-04T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-03T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-02T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-06T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-05T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-04T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-02T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-01T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-09-30T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-06T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-mawson.txt b/desk/gub/lib/pytz/antarctica-mawson.txt new file mode 100644 index 0000000..f5e8908 --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-mawson.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1954-02-13T00:00:00,+06:00,+06 +2009-10-17T20:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-mcmurdo.txt b/desk/gub/lib/pytz/antarctica-mcmurdo.txt new file mode 100644 index 0000000..5d21f11 --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-mcmurdo.txt @@ -0,0 +1,158 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:39,LMT +1901-12-13T20:45:52,+11:30,NZMT +1927-11-05T14:30:00,+12:30,NZST +1928-03-03T13:30:00,+11:30,NZMT +1928-10-13T14:30:00,+12:00,NZST +1929-03-16T14:00:00,+11:30,NZMT +1929-10-12T14:30:00,+12:00,NZST +1930-03-15T14:00:00,+11:30,NZMT +1930-10-11T14:30:00,+12:00,NZST +1931-03-14T14:00:00,+11:30,NZMT +1931-10-10T14:30:00,+12:00,NZST +1932-03-19T14:00:00,+11:30,NZMT +1932-10-08T14:30:00,+12:00,NZST +1933-03-18T14:00:00,+11:30,NZMT +1933-10-07T14:30:00,+12:00,NZST +1934-04-28T14:00:00,+11:30,NZMT +1934-09-29T14:30:00,+12:00,NZST +1935-04-27T14:00:00,+11:30,NZMT +1935-09-28T14:30:00,+12:00,NZST +1936-04-25T14:00:00,+11:30,NZMT +1936-09-26T14:30:00,+12:00,NZST +1937-04-24T14:00:00,+11:30,NZMT +1937-09-25T14:30:00,+12:00,NZST +1938-04-23T14:00:00,+11:30,NZMT +1938-09-24T14:30:00,+12:00,NZST +1939-04-29T14:00:00,+11:30,NZMT +1939-09-23T14:30:00,+12:00,NZST +1940-04-27T14:00:00,+11:30,NZMT +1940-09-28T14:30:00,+12:00,NZST +1945-12-31T12:00:00,+12:00,NZST +1974-11-02T14:00:00,+13:00,NZDT +1975-02-22T14:00:00,+12:00,NZST +1975-10-25T14:00:00,+13:00,NZDT +1976-03-06T14:00:00,+12:00,NZST +1976-10-30T14:00:00,+13:00,NZDT +1977-03-05T14:00:00,+12:00,NZST +1977-10-29T14:00:00,+13:00,NZDT +1978-03-04T14:00:00,+12:00,NZST +1978-10-28T14:00:00,+13:00,NZDT +1979-03-03T14:00:00,+12:00,NZST +1979-10-27T14:00:00,+13:00,NZDT +1980-03-01T14:00:00,+12:00,NZST +1980-10-25T14:00:00,+13:00,NZDT +1981-02-28T14:00:00,+12:00,NZST +1981-10-24T14:00:00,+13:00,NZDT +1982-03-06T14:00:00,+12:00,NZST +1982-10-30T14:00:00,+13:00,NZDT +1983-03-05T14:00:00,+12:00,NZST +1983-10-29T14:00:00,+13:00,NZDT +1984-03-03T14:00:00,+12:00,NZST +1984-10-27T14:00:00,+13:00,NZDT +1985-03-02T14:00:00,+12:00,NZST +1985-10-26T14:00:00,+13:00,NZDT +1986-03-01T14:00:00,+12:00,NZST +1986-10-25T14:00:00,+13:00,NZDT +1987-02-28T14:00:00,+12:00,NZST +1987-10-24T14:00:00,+13:00,NZDT +1988-03-05T14:00:00,+12:00,NZST +1988-10-29T14:00:00,+13:00,NZDT +1989-03-04T14:00:00,+12:00,NZST +1989-10-07T14:00:00,+13:00,NZDT +1990-03-17T14:00:00,+12:00,NZST +1990-10-06T14:00:00,+13:00,NZDT +1991-03-16T14:00:00,+12:00,NZST +1991-10-05T14:00:00,+13:00,NZDT +1992-03-14T14:00:00,+12:00,NZST +1992-10-03T14:00:00,+13:00,NZDT +1993-03-20T14:00:00,+12:00,NZST +1993-10-02T14:00:00,+13:00,NZDT +1994-03-19T14:00:00,+12:00,NZST +1994-10-01T14:00:00,+13:00,NZDT +1995-03-18T14:00:00,+12:00,NZST +1995-09-30T14:00:00,+13:00,NZDT +1996-03-16T14:00:00,+12:00,NZST +1996-10-05T14:00:00,+13:00,NZDT +1997-03-15T14:00:00,+12:00,NZST +1997-10-04T14:00:00,+13:00,NZDT +1998-03-14T14:00:00,+12:00,NZST +1998-10-03T14:00:00,+13:00,NZDT +1999-03-20T14:00:00,+12:00,NZST +1999-10-02T14:00:00,+13:00,NZDT +2000-03-18T14:00:00,+12:00,NZST +2000-09-30T14:00:00,+13:00,NZDT +2001-03-17T14:00:00,+12:00,NZST +2001-10-06T14:00:00,+13:00,NZDT +2002-03-16T14:00:00,+12:00,NZST +2002-10-05T14:00:00,+13:00,NZDT +2003-03-15T14:00:00,+12:00,NZST +2003-10-04T14:00:00,+13:00,NZDT +2004-03-20T14:00:00,+12:00,NZST +2004-10-02T14:00:00,+13:00,NZDT +2005-03-19T14:00:00,+12:00,NZST +2005-10-01T14:00:00,+13:00,NZDT +2006-03-18T14:00:00,+12:00,NZST +2006-09-30T14:00:00,+13:00,NZDT +2007-03-17T14:00:00,+12:00,NZST +2007-09-29T14:00:00,+13:00,NZDT +2008-04-05T14:00:00,+12:00,NZST +2008-09-27T14:00:00,+13:00,NZDT +2009-04-04T14:00:00,+12:00,NZST +2009-09-26T14:00:00,+13:00,NZDT +2010-04-03T14:00:00,+12:00,NZST +2010-09-25T14:00:00,+13:00,NZDT +2011-04-02T14:00:00,+12:00,NZST +2011-09-24T14:00:00,+13:00,NZDT +2012-03-31T14:00:00,+12:00,NZST +2012-09-29T14:00:00,+13:00,NZDT +2013-04-06T14:00:00,+12:00,NZST +2013-09-28T14:00:00,+13:00,NZDT +2014-04-05T14:00:00,+12:00,NZST +2014-09-27T14:00:00,+13:00,NZDT +2015-04-04T14:00:00,+12:00,NZST +2015-09-26T14:00:00,+13:00,NZDT +2016-04-02T14:00:00,+12:00,NZST +2016-09-24T14:00:00,+13:00,NZDT +2017-04-01T14:00:00,+12:00,NZST +2017-09-23T14:00:00,+13:00,NZDT +2018-03-31T14:00:00,+12:00,NZST +2018-09-29T14:00:00,+13:00,NZDT +2019-04-06T14:00:00,+12:00,NZST +2019-09-28T14:00:00,+13:00,NZDT +2020-04-04T14:00:00,+12:00,NZST +2020-09-26T14:00:00,+13:00,NZDT +2021-04-03T14:00:00,+12:00,NZST +2021-09-25T14:00:00,+13:00,NZDT +2022-04-02T14:00:00,+12:00,NZST +2022-09-24T14:00:00,+13:00,NZDT +2023-04-01T14:00:00,+12:00,NZST +2023-09-23T14:00:00,+13:00,NZDT +2024-04-06T14:00:00,+12:00,NZST +2024-09-28T14:00:00,+13:00,NZDT +2025-04-05T14:00:00,+12:00,NZST +2025-09-27T14:00:00,+13:00,NZDT +2026-04-04T14:00:00,+12:00,NZST +2026-09-26T14:00:00,+13:00,NZDT +2027-04-03T14:00:00,+12:00,NZST +2027-09-25T14:00:00,+13:00,NZDT +2028-04-01T14:00:00,+12:00,NZST +2028-09-23T14:00:00,+13:00,NZDT +2029-03-31T14:00:00,+12:00,NZST +2029-09-29T14:00:00,+13:00,NZDT +2030-04-06T14:00:00,+12:00,NZST +2030-09-28T14:00:00,+13:00,NZDT +2031-04-05T14:00:00,+12:00,NZST +2031-09-27T14:00:00,+13:00,NZDT +2032-04-03T14:00:00,+12:00,NZST +2032-09-25T14:00:00,+13:00,NZDT +2033-04-02T14:00:00,+12:00,NZST +2033-09-24T14:00:00,+13:00,NZDT +2034-04-01T14:00:00,+12:00,NZST +2034-09-23T14:00:00,+13:00,NZDT +2035-03-31T14:00:00,+12:00,NZST +2035-09-29T14:00:00,+13:00,NZDT +2036-04-05T14:00:00,+12:00,NZST +2036-09-27T14:00:00,+13:00,NZDT +2037-04-04T14:00:00,+12:00,NZST +2037-09-26T14:00:00,+13:00,NZDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-palmer.txt b/desk/gub/lib/pytz/antarctica-palmer.txt new file mode 100644 index 0000000..59ed89c --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-palmer.txt @@ -0,0 +1,84 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1965-01-01T00:00:00,-03:00,-03 +1965-03-01T03:00:00,-04:00,-04 +1965-10-15T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-10-15T04:00:00,-03:00,-03 +1967-04-02T03:00:00,-04:00,-04 +1967-10-01T04:00:00,-03:00,-03 +1968-04-07T03:00:00,-04:00,-04 +1968-10-06T04:00:00,-03:00,-03 +1969-04-06T03:00:00,-04:00,-04 +1969-10-05T04:00:00,-03:00,-03 +1974-01-23T03:00:00,-02:00,-02 +1974-05-01T02:00:00,-03:00,-03 +1982-05-01T03:00:00,-04:00,-04 +1982-10-10T04:00:00,-03:00,-03 +1983-03-13T03:00:00,-04:00,-04 +1983-10-09T04:00:00,-03:00,-03 +1984-03-11T03:00:00,-04:00,-04 +1984-10-14T04:00:00,-03:00,-03 +1985-03-10T03:00:00,-04:00,-04 +1985-10-13T04:00:00,-03:00,-03 +1986-03-09T03:00:00,-04:00,-04 +1986-10-12T04:00:00,-03:00,-03 +1987-04-12T03:00:00,-04:00,-04 +1987-10-11T04:00:00,-03:00,-03 +1988-03-13T03:00:00,-04:00,-04 +1988-10-09T04:00:00,-03:00,-03 +1989-03-12T03:00:00,-04:00,-04 +1989-10-15T04:00:00,-03:00,-03 +1990-03-11T03:00:00,-04:00,-04 +1990-09-16T04:00:00,-03:00,-03 +1991-03-10T03:00:00,-04:00,-04 +1991-10-13T04:00:00,-03:00,-03 +1992-03-15T03:00:00,-04:00,-04 +1992-10-11T04:00:00,-03:00,-03 +1993-03-14T03:00:00,-04:00,-04 +1993-10-10T04:00:00,-03:00,-03 +1994-03-13T03:00:00,-04:00,-04 +1994-10-09T04:00:00,-03:00,-03 +1995-03-12T03:00:00,-04:00,-04 +1995-10-15T04:00:00,-03:00,-03 +1996-03-10T03:00:00,-04:00,-04 +1996-10-13T04:00:00,-03:00,-03 +1997-03-30T03:00:00,-04:00,-04 +1997-10-12T04:00:00,-03:00,-03 +1998-03-15T03:00:00,-04:00,-04 +1998-09-27T04:00:00,-03:00,-03 +1999-04-04T03:00:00,-04:00,-04 +1999-10-10T04:00:00,-03:00,-03 +2000-03-12T03:00:00,-04:00,-04 +2000-10-15T04:00:00,-03:00,-03 +2001-03-11T03:00:00,-04:00,-04 +2001-10-14T04:00:00,-03:00,-03 +2002-03-10T03:00:00,-04:00,-04 +2002-10-13T04:00:00,-03:00,-03 +2003-03-09T03:00:00,-04:00,-04 +2003-10-12T04:00:00,-03:00,-03 +2004-03-14T03:00:00,-04:00,-04 +2004-10-10T04:00:00,-03:00,-03 +2005-03-13T03:00:00,-04:00,-04 +2005-10-09T04:00:00,-03:00,-03 +2006-03-12T03:00:00,-04:00,-04 +2006-10-15T04:00:00,-03:00,-03 +2007-03-11T03:00:00,-04:00,-04 +2007-10-14T04:00:00,-03:00,-03 +2008-03-30T03:00:00,-04:00,-04 +2008-10-12T04:00:00,-03:00,-03 +2009-03-15T03:00:00,-04:00,-04 +2009-10-11T04:00:00,-03:00,-03 +2010-04-04T03:00:00,-04:00,-04 +2010-10-10T04:00:00,-03:00,-03 +2011-05-08T03:00:00,-04:00,-04 +2011-08-21T04:00:00,-03:00,-03 +2012-04-29T03:00:00,-04:00,-04 +2012-09-02T04:00:00,-03:00,-03 +2013-04-28T03:00:00,-04:00,-04 +2013-09-08T04:00:00,-03:00,-03 +2014-04-27T03:00:00,-04:00,-04 +2014-09-07T04:00:00,-03:00,-03 +2016-05-15T03:00:00,-04:00,-04 +2016-08-14T04:00:00,-03:00,-03 +2016-12-04T03:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-rothera.txt b/desk/gub/lib/pytz/antarctica-rothera.txt new file mode 100644 index 0000000..af812db --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-rothera.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1976-12-01T00:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-south-pole.txt b/desk/gub/lib/pytz/antarctica-south-pole.txt new file mode 100644 index 0000000..5d21f11 --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-south-pole.txt @@ -0,0 +1,158 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:39,LMT +1901-12-13T20:45:52,+11:30,NZMT +1927-11-05T14:30:00,+12:30,NZST +1928-03-03T13:30:00,+11:30,NZMT +1928-10-13T14:30:00,+12:00,NZST +1929-03-16T14:00:00,+11:30,NZMT +1929-10-12T14:30:00,+12:00,NZST +1930-03-15T14:00:00,+11:30,NZMT +1930-10-11T14:30:00,+12:00,NZST +1931-03-14T14:00:00,+11:30,NZMT +1931-10-10T14:30:00,+12:00,NZST +1932-03-19T14:00:00,+11:30,NZMT +1932-10-08T14:30:00,+12:00,NZST +1933-03-18T14:00:00,+11:30,NZMT +1933-10-07T14:30:00,+12:00,NZST +1934-04-28T14:00:00,+11:30,NZMT +1934-09-29T14:30:00,+12:00,NZST +1935-04-27T14:00:00,+11:30,NZMT +1935-09-28T14:30:00,+12:00,NZST +1936-04-25T14:00:00,+11:30,NZMT +1936-09-26T14:30:00,+12:00,NZST +1937-04-24T14:00:00,+11:30,NZMT +1937-09-25T14:30:00,+12:00,NZST +1938-04-23T14:00:00,+11:30,NZMT +1938-09-24T14:30:00,+12:00,NZST +1939-04-29T14:00:00,+11:30,NZMT +1939-09-23T14:30:00,+12:00,NZST +1940-04-27T14:00:00,+11:30,NZMT +1940-09-28T14:30:00,+12:00,NZST +1945-12-31T12:00:00,+12:00,NZST +1974-11-02T14:00:00,+13:00,NZDT +1975-02-22T14:00:00,+12:00,NZST +1975-10-25T14:00:00,+13:00,NZDT +1976-03-06T14:00:00,+12:00,NZST +1976-10-30T14:00:00,+13:00,NZDT +1977-03-05T14:00:00,+12:00,NZST +1977-10-29T14:00:00,+13:00,NZDT +1978-03-04T14:00:00,+12:00,NZST +1978-10-28T14:00:00,+13:00,NZDT +1979-03-03T14:00:00,+12:00,NZST +1979-10-27T14:00:00,+13:00,NZDT +1980-03-01T14:00:00,+12:00,NZST +1980-10-25T14:00:00,+13:00,NZDT +1981-02-28T14:00:00,+12:00,NZST +1981-10-24T14:00:00,+13:00,NZDT +1982-03-06T14:00:00,+12:00,NZST +1982-10-30T14:00:00,+13:00,NZDT +1983-03-05T14:00:00,+12:00,NZST +1983-10-29T14:00:00,+13:00,NZDT +1984-03-03T14:00:00,+12:00,NZST +1984-10-27T14:00:00,+13:00,NZDT +1985-03-02T14:00:00,+12:00,NZST +1985-10-26T14:00:00,+13:00,NZDT +1986-03-01T14:00:00,+12:00,NZST +1986-10-25T14:00:00,+13:00,NZDT +1987-02-28T14:00:00,+12:00,NZST +1987-10-24T14:00:00,+13:00,NZDT +1988-03-05T14:00:00,+12:00,NZST +1988-10-29T14:00:00,+13:00,NZDT +1989-03-04T14:00:00,+12:00,NZST +1989-10-07T14:00:00,+13:00,NZDT +1990-03-17T14:00:00,+12:00,NZST +1990-10-06T14:00:00,+13:00,NZDT +1991-03-16T14:00:00,+12:00,NZST +1991-10-05T14:00:00,+13:00,NZDT +1992-03-14T14:00:00,+12:00,NZST +1992-10-03T14:00:00,+13:00,NZDT +1993-03-20T14:00:00,+12:00,NZST +1993-10-02T14:00:00,+13:00,NZDT +1994-03-19T14:00:00,+12:00,NZST +1994-10-01T14:00:00,+13:00,NZDT +1995-03-18T14:00:00,+12:00,NZST +1995-09-30T14:00:00,+13:00,NZDT +1996-03-16T14:00:00,+12:00,NZST +1996-10-05T14:00:00,+13:00,NZDT +1997-03-15T14:00:00,+12:00,NZST +1997-10-04T14:00:00,+13:00,NZDT +1998-03-14T14:00:00,+12:00,NZST +1998-10-03T14:00:00,+13:00,NZDT +1999-03-20T14:00:00,+12:00,NZST +1999-10-02T14:00:00,+13:00,NZDT +2000-03-18T14:00:00,+12:00,NZST +2000-09-30T14:00:00,+13:00,NZDT +2001-03-17T14:00:00,+12:00,NZST +2001-10-06T14:00:00,+13:00,NZDT +2002-03-16T14:00:00,+12:00,NZST +2002-10-05T14:00:00,+13:00,NZDT +2003-03-15T14:00:00,+12:00,NZST +2003-10-04T14:00:00,+13:00,NZDT +2004-03-20T14:00:00,+12:00,NZST +2004-10-02T14:00:00,+13:00,NZDT +2005-03-19T14:00:00,+12:00,NZST +2005-10-01T14:00:00,+13:00,NZDT +2006-03-18T14:00:00,+12:00,NZST +2006-09-30T14:00:00,+13:00,NZDT +2007-03-17T14:00:00,+12:00,NZST +2007-09-29T14:00:00,+13:00,NZDT +2008-04-05T14:00:00,+12:00,NZST +2008-09-27T14:00:00,+13:00,NZDT +2009-04-04T14:00:00,+12:00,NZST +2009-09-26T14:00:00,+13:00,NZDT +2010-04-03T14:00:00,+12:00,NZST +2010-09-25T14:00:00,+13:00,NZDT +2011-04-02T14:00:00,+12:00,NZST +2011-09-24T14:00:00,+13:00,NZDT +2012-03-31T14:00:00,+12:00,NZST +2012-09-29T14:00:00,+13:00,NZDT +2013-04-06T14:00:00,+12:00,NZST +2013-09-28T14:00:00,+13:00,NZDT +2014-04-05T14:00:00,+12:00,NZST +2014-09-27T14:00:00,+13:00,NZDT +2015-04-04T14:00:00,+12:00,NZST +2015-09-26T14:00:00,+13:00,NZDT +2016-04-02T14:00:00,+12:00,NZST +2016-09-24T14:00:00,+13:00,NZDT +2017-04-01T14:00:00,+12:00,NZST +2017-09-23T14:00:00,+13:00,NZDT +2018-03-31T14:00:00,+12:00,NZST +2018-09-29T14:00:00,+13:00,NZDT +2019-04-06T14:00:00,+12:00,NZST +2019-09-28T14:00:00,+13:00,NZDT +2020-04-04T14:00:00,+12:00,NZST +2020-09-26T14:00:00,+13:00,NZDT +2021-04-03T14:00:00,+12:00,NZST +2021-09-25T14:00:00,+13:00,NZDT +2022-04-02T14:00:00,+12:00,NZST +2022-09-24T14:00:00,+13:00,NZDT +2023-04-01T14:00:00,+12:00,NZST +2023-09-23T14:00:00,+13:00,NZDT +2024-04-06T14:00:00,+12:00,NZST +2024-09-28T14:00:00,+13:00,NZDT +2025-04-05T14:00:00,+12:00,NZST +2025-09-27T14:00:00,+13:00,NZDT +2026-04-04T14:00:00,+12:00,NZST +2026-09-26T14:00:00,+13:00,NZDT +2027-04-03T14:00:00,+12:00,NZST +2027-09-25T14:00:00,+13:00,NZDT +2028-04-01T14:00:00,+12:00,NZST +2028-09-23T14:00:00,+13:00,NZDT +2029-03-31T14:00:00,+12:00,NZST +2029-09-29T14:00:00,+13:00,NZDT +2030-04-06T14:00:00,+12:00,NZST +2030-09-28T14:00:00,+13:00,NZDT +2031-04-05T14:00:00,+12:00,NZST +2031-09-27T14:00:00,+13:00,NZDT +2032-04-03T14:00:00,+12:00,NZST +2032-09-25T14:00:00,+13:00,NZDT +2033-04-02T14:00:00,+12:00,NZST +2033-09-24T14:00:00,+13:00,NZDT +2034-04-01T14:00:00,+12:00,NZST +2034-09-23T14:00:00,+13:00,NZDT +2035-03-31T14:00:00,+12:00,NZST +2035-09-29T14:00:00,+13:00,NZDT +2036-04-05T14:00:00,+12:00,NZST +2036-09-27T14:00:00,+13:00,NZDT +2037-04-04T14:00:00,+12:00,NZST +2037-09-26T14:00:00,+13:00,NZDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-syowa.txt b/desk/gub/lib/pytz/antarctica-syowa.txt new file mode 100644 index 0000000..e563a29 --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-syowa.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:07,LMT +1947-03-13T20:53:08,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-troll.txt b/desk/gub/lib/pytz/antarctica-troll.txt new file mode 100644 index 0000000..88a0326 --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-troll.txt @@ -0,0 +1,69 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +2005-02-12T00:00:00,+00:00,+00 +2005-03-27T01:00:00,+02:00,+02 +2005-10-30T01:00:00,+00:00,+00 +2006-03-26T01:00:00,+02:00,+02 +2006-10-29T01:00:00,+00:00,+00 +2007-03-25T01:00:00,+02:00,+02 +2007-10-28T01:00:00,+00:00,+00 +2008-03-30T01:00:00,+02:00,+02 +2008-10-26T01:00:00,+00:00,+00 +2009-03-29T01:00:00,+02:00,+02 +2009-10-25T01:00:00,+00:00,+00 +2010-03-28T01:00:00,+02:00,+02 +2010-10-31T01:00:00,+00:00,+00 +2011-03-27T01:00:00,+02:00,+02 +2011-10-30T01:00:00,+00:00,+00 +2012-03-25T01:00:00,+02:00,+02 +2012-10-28T01:00:00,+00:00,+00 +2013-03-31T01:00:00,+02:00,+02 +2013-10-27T01:00:00,+00:00,+00 +2014-03-30T01:00:00,+02:00,+02 +2014-10-26T01:00:00,+00:00,+00 +2015-03-29T01:00:00,+02:00,+02 +2015-10-25T01:00:00,+00:00,+00 +2016-03-27T01:00:00,+02:00,+02 +2016-10-30T01:00:00,+00:00,+00 +2017-03-26T01:00:00,+02:00,+02 +2017-10-29T01:00:00,+00:00,+00 +2018-03-25T01:00:00,+02:00,+02 +2018-10-28T01:00:00,+00:00,+00 +2019-03-31T01:00:00,+02:00,+02 +2019-10-27T01:00:00,+00:00,+00 +2020-03-29T01:00:00,+02:00,+02 +2020-10-25T01:00:00,+00:00,+00 +2021-03-28T01:00:00,+02:00,+02 +2021-10-31T01:00:00,+00:00,+00 +2022-03-27T01:00:00,+02:00,+02 +2022-10-30T01:00:00,+00:00,+00 +2023-03-26T01:00:00,+02:00,+02 +2023-10-29T01:00:00,+00:00,+00 +2024-03-31T01:00:00,+02:00,+02 +2024-10-27T01:00:00,+00:00,+00 +2025-03-30T01:00:00,+02:00,+02 +2025-10-26T01:00:00,+00:00,+00 +2026-03-29T01:00:00,+02:00,+02 +2026-10-25T01:00:00,+00:00,+00 +2027-03-28T01:00:00,+02:00,+02 +2027-10-31T01:00:00,+00:00,+00 +2028-03-26T01:00:00,+02:00,+02 +2028-10-29T01:00:00,+00:00,+00 +2029-03-25T01:00:00,+02:00,+02 +2029-10-28T01:00:00,+00:00,+00 +2030-03-31T01:00:00,+02:00,+02 +2030-10-27T01:00:00,+00:00,+00 +2031-03-30T01:00:00,+02:00,+02 +2031-10-26T01:00:00,+00:00,+00 +2032-03-28T01:00:00,+02:00,+02 +2032-10-31T01:00:00,+00:00,+00 +2033-03-27T01:00:00,+02:00,+02 +2033-10-30T01:00:00,+00:00,+00 +2034-03-26T01:00:00,+02:00,+02 +2034-10-29T01:00:00,+00:00,+00 +2035-03-25T01:00:00,+02:00,+02 +2035-10-28T01:00:00,+00:00,+00 +2036-03-30T01:00:00,+02:00,+02 +2036-10-26T01:00:00,+00:00,+00 +2037-03-29T01:00:00,+02:00,+02 +2037-10-25T01:00:00,+00:00,+00 \ No newline at end of file diff --git a/desk/gub/lib/pytz/antarctica-vostok.txt b/desk/gub/lib/pytz/antarctica-vostok.txt new file mode 100644 index 0000000..086b82b --- /dev/null +++ b/desk/gub/lib/pytz/antarctica-vostok.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1957-12-16T00:00:00,+07:00,+07 +1994-01-31T17:00:00,+00:00,-00 +1994-11-01T00:00:00,+07:00,+07 +2023-12-17T19:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/arctic-longyearbyen.txt b/desk/gub/lib/pytz/arctic-longyearbyen.txt new file mode 100644 index 0000000..56ab2cd --- /dev/null +++ b/desk/gub/lib/pytz/arctic-longyearbyen.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:53,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-05-24T00:00:00,+03:00,CEMT +1945-09-24T00:00:00,+02:00,CEST +1945-11-18T01:00:00,+01:00,CET +1946-04-14T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1947-04-06T02:00:00,+02:00,CEST +1947-05-11T01:00:00,+03:00,CEMT +1947-06-29T00:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-10T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-aden.txt b/desk/gub/lib/pytz/asia-aden.txt new file mode 100644 index 0000000..e563a29 --- /dev/null +++ b/desk/gub/lib/pytz/asia-aden.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:07,LMT +1947-03-13T20:53:08,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-almaty.txt b/desk/gub/lib/pytz/asia-almaty.txt new file mode 100644 index 0000000..3b8296c --- /dev/null +++ b/desk/gub/lib/pytz/asia-almaty.txt @@ -0,0 +1,54 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:08,LMT +1924-05-01T18:52:12,+05:00,+05 +1930-06-20T19:00:00,+06:00,+06 +1981-03-31T18:00:00,+07:00,+07 +1981-09-30T17:00:00,+06:00,+06 +1982-03-31T18:00:00,+07:00,+07 +1982-09-30T17:00:00,+06:00,+06 +1983-03-31T18:00:00,+07:00,+07 +1983-09-30T17:00:00,+06:00,+06 +1984-03-31T18:00:00,+07:00,+07 +1984-09-29T20:00:00,+06:00,+06 +1985-03-30T20:00:00,+07:00,+07 +1985-09-28T20:00:00,+06:00,+06 +1986-03-29T20:00:00,+07:00,+07 +1986-09-27T20:00:00,+06:00,+06 +1987-03-28T20:00:00,+07:00,+07 +1987-09-26T20:00:00,+06:00,+06 +1988-03-26T20:00:00,+07:00,+07 +1988-09-24T20:00:00,+06:00,+06 +1989-03-25T20:00:00,+07:00,+07 +1989-09-23T20:00:00,+06:00,+06 +1990-03-24T20:00:00,+07:00,+07 +1990-09-29T20:00:00,+06:00,+06 +1991-03-30T20:00:00,+06:00,+06 +1991-09-28T21:00:00,+05:00,+05 +1992-01-18T21:00:00,+06:00,+06 +1992-03-28T20:00:00,+07:00,+07 +1992-09-26T20:00:00,+06:00,+06 +1993-03-27T20:00:00,+07:00,+07 +1993-09-25T20:00:00,+06:00,+06 +1994-03-26T20:00:00,+07:00,+07 +1994-09-24T20:00:00,+06:00,+06 +1995-03-25T20:00:00,+07:00,+07 +1995-09-23T20:00:00,+06:00,+06 +1996-03-30T20:00:00,+07:00,+07 +1996-10-26T20:00:00,+06:00,+06 +1997-03-29T20:00:00,+07:00,+07 +1997-10-25T20:00:00,+06:00,+06 +1998-03-28T20:00:00,+07:00,+07 +1998-10-24T20:00:00,+06:00,+06 +1999-03-27T20:00:00,+07:00,+07 +1999-10-30T20:00:00,+06:00,+06 +2000-03-25T20:00:00,+07:00,+07 +2000-10-28T20:00:00,+06:00,+06 +2001-03-24T20:00:00,+07:00,+07 +2001-10-27T20:00:00,+06:00,+06 +2002-03-30T20:00:00,+07:00,+07 +2002-10-26T20:00:00,+06:00,+06 +2003-03-29T20:00:00,+07:00,+07 +2003-10-25T20:00:00,+06:00,+06 +2004-03-27T20:00:00,+07:00,+07 +2004-10-30T20:00:00,+06:00,+06 +2024-02-29T18:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-amman.txt b/desk/gub/lib/pytz/asia-amman.txt new file mode 100644 index 0000000..32af7b3 --- /dev/null +++ b/desk/gub/lib/pytz/asia-amman.txt @@ -0,0 +1,89 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:24,LMT +1930-12-31T21:36:16,+02:00,EET +1973-06-05T22:00:00,+03:00,EEST +1973-09-30T21:00:00,+02:00,EET +1974-04-30T22:00:00,+03:00,EEST +1974-09-30T21:00:00,+02:00,EET +1975-04-30T22:00:00,+03:00,EEST +1975-09-30T21:00:00,+02:00,EET +1976-04-30T22:00:00,+03:00,EEST +1976-10-31T21:00:00,+02:00,EET +1977-04-30T22:00:00,+03:00,EEST +1977-09-30T21:00:00,+02:00,EET +1978-04-29T22:00:00,+03:00,EEST +1978-09-29T21:00:00,+02:00,EET +1985-03-31T22:00:00,+03:00,EEST +1985-09-30T21:00:00,+02:00,EET +1986-04-03T22:00:00,+03:00,EEST +1986-10-02T21:00:00,+02:00,EET +1987-04-02T22:00:00,+03:00,EEST +1987-10-01T21:00:00,+02:00,EET +1988-03-31T22:00:00,+03:00,EEST +1988-10-06T21:00:00,+02:00,EET +1989-05-07T22:00:00,+03:00,EEST +1989-10-05T21:00:00,+02:00,EET +1990-04-26T22:00:00,+03:00,EEST +1990-10-04T21:00:00,+02:00,EET +1991-04-16T22:00:00,+03:00,EEST +1991-09-26T21:00:00,+02:00,EET +1992-04-09T22:00:00,+03:00,EEST +1992-10-01T21:00:00,+02:00,EET +1993-04-01T22:00:00,+03:00,EEST +1993-09-30T21:00:00,+02:00,EET +1994-03-31T22:00:00,+03:00,EEST +1994-09-15T21:00:00,+02:00,EET +1995-04-06T22:00:00,+03:00,EEST +1995-09-14T22:00:00,+02:00,EET +1996-04-04T22:00:00,+03:00,EEST +1996-09-19T22:00:00,+02:00,EET +1997-04-03T22:00:00,+03:00,EEST +1997-09-18T22:00:00,+02:00,EET +1998-04-02T22:00:00,+03:00,EEST +1998-09-17T22:00:00,+02:00,EET +1999-06-30T22:00:00,+03:00,EEST +1999-09-23T22:00:00,+02:00,EET +2000-03-29T22:00:00,+03:00,EEST +2000-09-28T22:00:00,+02:00,EET +2001-03-28T22:00:00,+03:00,EEST +2001-09-27T22:00:00,+02:00,EET +2002-03-28T22:00:00,+03:00,EEST +2002-09-26T22:00:00,+02:00,EET +2003-03-27T22:00:00,+03:00,EEST +2003-10-23T22:00:00,+02:00,EET +2004-03-25T22:00:00,+03:00,EEST +2004-10-14T22:00:00,+02:00,EET +2005-03-31T22:00:00,+03:00,EEST +2005-09-29T22:00:00,+02:00,EET +2006-03-30T22:00:00,+03:00,EEST +2006-10-26T22:00:00,+02:00,EET +2007-03-29T22:00:00,+03:00,EEST +2007-10-25T22:00:00,+02:00,EET +2008-03-27T22:00:00,+03:00,EEST +2008-10-30T22:00:00,+02:00,EET +2009-03-26T22:00:00,+03:00,EEST +2009-10-29T22:00:00,+02:00,EET +2010-03-25T22:00:00,+03:00,EEST +2010-10-28T22:00:00,+02:00,EET +2011-03-31T22:00:00,+03:00,EEST +2011-10-27T22:00:00,+02:00,EET +2012-03-29T22:00:00,+03:00,EEST +2013-12-19T21:00:00,+02:00,EET +2014-03-27T22:00:00,+03:00,EEST +2014-10-30T22:00:00,+02:00,EET +2015-03-26T22:00:00,+03:00,EEST +2015-10-29T22:00:00,+02:00,EET +2016-03-31T22:00:00,+03:00,EEST +2016-10-27T22:00:00,+02:00,EET +2017-03-30T22:00:00,+03:00,EEST +2017-10-26T22:00:00,+02:00,EET +2018-03-29T22:00:00,+03:00,EEST +2018-10-25T22:00:00,+02:00,EET +2019-03-28T22:00:00,+03:00,EEST +2019-10-24T22:00:00,+02:00,EET +2020-03-26T22:00:00,+03:00,EEST +2020-10-29T22:00:00,+02:00,EET +2021-03-25T22:00:00,+03:00,EEST +2021-10-28T22:00:00,+02:00,EET +2022-02-24T22:00:00,+03:00,EEST +2022-10-27T22:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-anadyr.txt b/desk/gub/lib/pytz/asia-anadyr.txt new file mode 100644 index 0000000..8343b88 --- /dev/null +++ b/desk/gub/lib/pytz/asia-anadyr.txt @@ -0,0 +1,66 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:50,LMT +1924-05-01T12:10:04,+12:00,+12 +1930-06-20T12:00:00,+13:00,+13 +1981-03-31T11:00:00,+14:00,+14 +1981-09-30T10:00:00,+13:00,+13 +1982-03-31T11:00:00,+13:00,+13 +1982-09-30T11:00:00,+12:00,+12 +1983-03-31T12:00:00,+13:00,+13 +1983-09-30T11:00:00,+12:00,+12 +1984-03-31T12:00:00,+13:00,+13 +1984-09-29T14:00:00,+12:00,+12 +1985-03-30T14:00:00,+13:00,+13 +1985-09-28T14:00:00,+12:00,+12 +1986-03-29T14:00:00,+13:00,+13 +1986-09-27T14:00:00,+12:00,+12 +1987-03-28T14:00:00,+13:00,+13 +1987-09-26T14:00:00,+12:00,+12 +1988-03-26T14:00:00,+13:00,+13 +1988-09-24T14:00:00,+12:00,+12 +1989-03-25T14:00:00,+13:00,+13 +1989-09-23T14:00:00,+12:00,+12 +1990-03-24T14:00:00,+13:00,+13 +1990-09-29T14:00:00,+12:00,+12 +1991-03-30T14:00:00,+12:00,+12 +1991-09-28T15:00:00,+11:00,+11 +1992-01-18T15:00:00,+12:00,+12 +1992-03-28T14:00:00,+13:00,+13 +1992-09-26T14:00:00,+12:00,+12 +1993-03-27T14:00:00,+13:00,+13 +1993-09-25T14:00:00,+12:00,+12 +1994-03-26T14:00:00,+13:00,+13 +1994-09-24T14:00:00,+12:00,+12 +1995-03-25T14:00:00,+13:00,+13 +1995-09-23T14:00:00,+12:00,+12 +1996-03-30T14:00:00,+13:00,+13 +1996-10-26T14:00:00,+12:00,+12 +1997-03-29T14:00:00,+13:00,+13 +1997-10-25T14:00:00,+12:00,+12 +1998-03-28T14:00:00,+13:00,+13 +1998-10-24T14:00:00,+12:00,+12 +1999-03-27T14:00:00,+13:00,+13 +1999-10-30T14:00:00,+12:00,+12 +2000-03-25T14:00:00,+13:00,+13 +2000-10-28T14:00:00,+12:00,+12 +2001-03-24T14:00:00,+13:00,+13 +2001-10-27T14:00:00,+12:00,+12 +2002-03-30T14:00:00,+13:00,+13 +2002-10-26T14:00:00,+12:00,+12 +2003-03-29T14:00:00,+13:00,+13 +2003-10-25T14:00:00,+12:00,+12 +2004-03-27T14:00:00,+13:00,+13 +2004-10-30T14:00:00,+12:00,+12 +2005-03-26T14:00:00,+13:00,+13 +2005-10-29T14:00:00,+12:00,+12 +2006-03-25T14:00:00,+13:00,+13 +2006-10-28T14:00:00,+12:00,+12 +2007-03-24T14:00:00,+13:00,+13 +2007-10-27T14:00:00,+12:00,+12 +2008-03-29T14:00:00,+13:00,+13 +2008-10-25T14:00:00,+12:00,+12 +2009-03-28T14:00:00,+13:00,+13 +2009-10-24T14:00:00,+12:00,+12 +2010-03-27T14:00:00,+12:00,+12 +2010-10-30T15:00:00,+11:00,+11 +2011-03-26T15:00:00,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-aqtau.txt b/desk/gub/lib/pytz/asia-aqtau.txt new file mode 100644 index 0000000..f6226d3 --- /dev/null +++ b/desk/gub/lib/pytz/asia-aqtau.txt @@ -0,0 +1,52 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:21,LMT +1924-05-01T20:38:56,+04:00,+04 +1930-06-20T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+06:00,+06 +1982-03-31T18:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+06:00,+06 +1989-09-23T21:00:00,+05:00,+05 +1990-03-24T21:00:00,+06:00,+06 +1990-09-29T21:00:00,+05:00,+05 +1991-03-30T21:00:00,+05:00,+05 +1991-09-28T22:00:00,+04:00,+04 +1992-01-18T22:00:00,+05:00,+05 +1992-03-28T21:00:00,+06:00,+06 +1992-09-26T21:00:00,+05:00,+05 +1993-03-27T21:00:00,+06:00,+06 +1993-09-25T21:00:00,+05:00,+05 +1994-03-26T21:00:00,+06:00,+06 +1994-09-24T21:00:00,+04:00,+04 +1995-03-25T22:00:00,+05:00,+05 +1995-09-23T22:00:00,+04:00,+04 +1996-03-30T22:00:00,+05:00,+05 +1996-10-26T22:00:00,+04:00,+04 +1997-03-29T22:00:00,+05:00,+05 +1997-10-25T22:00:00,+04:00,+04 +1998-03-28T22:00:00,+05:00,+05 +1998-10-24T22:00:00,+04:00,+04 +1999-03-27T22:00:00,+05:00,+05 +1999-10-30T22:00:00,+04:00,+04 +2000-03-25T22:00:00,+05:00,+05 +2000-10-28T22:00:00,+04:00,+04 +2001-03-24T22:00:00,+05:00,+05 +2001-10-27T22:00:00,+04:00,+04 +2002-03-30T22:00:00,+05:00,+05 +2002-10-26T22:00:00,+04:00,+04 +2003-03-29T22:00:00,+05:00,+05 +2003-10-25T22:00:00,+04:00,+04 +2004-03-27T22:00:00,+05:00,+05 +2004-10-30T22:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-aqtobe.txt b/desk/gub/lib/pytz/asia-aqtobe.txt new file mode 100644 index 0000000..c698871 --- /dev/null +++ b/desk/gub/lib/pytz/asia-aqtobe.txt @@ -0,0 +1,53 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:49,LMT +1924-05-01T20:11:20,+04:00,+04 +1930-06-20T20:00:00,+05:00,+05 +1981-03-31T19:00:00,+06:00,+06 +1981-09-30T18:00:00,+06:00,+06 +1982-03-31T18:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+06:00,+06 +1989-09-23T21:00:00,+05:00,+05 +1990-03-24T21:00:00,+06:00,+06 +1990-09-29T21:00:00,+05:00,+05 +1991-03-30T21:00:00,+05:00,+05 +1991-09-28T22:00:00,+04:00,+04 +1992-01-18T22:00:00,+05:00,+05 +1992-03-28T21:00:00,+06:00,+06 +1992-09-26T21:00:00,+05:00,+05 +1993-03-27T21:00:00,+06:00,+06 +1993-09-25T21:00:00,+05:00,+05 +1994-03-26T21:00:00,+06:00,+06 +1994-09-24T21:00:00,+05:00,+05 +1995-03-25T21:00:00,+06:00,+06 +1995-09-23T21:00:00,+05:00,+05 +1996-03-30T21:00:00,+06:00,+06 +1996-10-26T21:00:00,+05:00,+05 +1997-03-29T21:00:00,+06:00,+06 +1997-10-25T21:00:00,+05:00,+05 +1998-03-28T21:00:00,+06:00,+06 +1998-10-24T21:00:00,+05:00,+05 +1999-03-27T21:00:00,+06:00,+06 +1999-10-30T21:00:00,+05:00,+05 +2000-03-25T21:00:00,+06:00,+06 +2000-10-28T21:00:00,+05:00,+05 +2001-03-24T21:00:00,+06:00,+06 +2001-10-27T21:00:00,+05:00,+05 +2002-03-30T21:00:00,+06:00,+06 +2002-10-26T21:00:00,+05:00,+05 +2003-03-29T21:00:00,+06:00,+06 +2003-10-25T21:00:00,+05:00,+05 +2004-03-27T21:00:00,+06:00,+06 +2004-10-30T21:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-ashgabat.txt b/desk/gub/lib/pytz/asia-ashgabat.txt new file mode 100644 index 0000000..07111c1 --- /dev/null +++ b/desk/gub/lib/pytz/asia-ashgabat.txt @@ -0,0 +1,27 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:54,LMT +1924-05-01T20:06:28,+04:00,+04 +1930-06-20T20:00:00,+05:00,+05 +1981-03-31T19:00:00,+06:00,+06 +1981-09-30T18:00:00,+05:00,+05 +1982-03-31T19:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+06:00,+06 +1989-09-23T21:00:00,+05:00,+05 +1990-03-24T21:00:00,+06:00,+06 +1990-09-29T21:00:00,+05:00,+05 +1991-03-30T21:00:00,+05:00,+05 +1991-09-28T22:00:00,+04:00,+04 +1992-01-18T22:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-ashkhabad.txt b/desk/gub/lib/pytz/asia-ashkhabad.txt new file mode 100644 index 0000000..07111c1 --- /dev/null +++ b/desk/gub/lib/pytz/asia-ashkhabad.txt @@ -0,0 +1,27 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:54,LMT +1924-05-01T20:06:28,+04:00,+04 +1930-06-20T20:00:00,+05:00,+05 +1981-03-31T19:00:00,+06:00,+06 +1981-09-30T18:00:00,+05:00,+05 +1982-03-31T19:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+06:00,+06 +1989-09-23T21:00:00,+05:00,+05 +1990-03-24T21:00:00,+06:00,+06 +1990-09-29T21:00:00,+05:00,+05 +1991-03-30T21:00:00,+05:00,+05 +1991-09-28T22:00:00,+04:00,+04 +1992-01-18T22:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-atyrau.txt b/desk/gub/lib/pytz/asia-atyrau.txt new file mode 100644 index 0000000..e53efd3 --- /dev/null +++ b/desk/gub/lib/pytz/asia-atyrau.txt @@ -0,0 +1,52 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:28,LMT +1924-05-01T20:32:16,+03:00,+03 +1930-06-20T21:00:00,+05:00,+05 +1981-09-30T19:00:00,+06:00,+06 +1982-03-31T18:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+06:00,+06 +1989-09-23T21:00:00,+05:00,+05 +1990-03-24T21:00:00,+06:00,+06 +1990-09-29T21:00:00,+05:00,+05 +1991-03-30T21:00:00,+05:00,+05 +1991-09-28T22:00:00,+04:00,+04 +1992-01-18T22:00:00,+05:00,+05 +1992-03-28T21:00:00,+06:00,+06 +1992-09-26T21:00:00,+05:00,+05 +1993-03-27T21:00:00,+06:00,+06 +1993-09-25T21:00:00,+05:00,+05 +1994-03-26T21:00:00,+06:00,+06 +1994-09-24T21:00:00,+05:00,+05 +1995-03-25T21:00:00,+06:00,+06 +1995-09-23T21:00:00,+05:00,+05 +1996-03-30T21:00:00,+06:00,+06 +1996-10-26T21:00:00,+05:00,+05 +1997-03-29T21:00:00,+06:00,+06 +1997-10-25T21:00:00,+05:00,+05 +1998-03-28T21:00:00,+06:00,+06 +1998-10-24T21:00:00,+05:00,+05 +1999-03-27T21:00:00,+05:00,+05 +1999-10-30T22:00:00,+04:00,+04 +2000-03-25T22:00:00,+05:00,+05 +2000-10-28T22:00:00,+04:00,+04 +2001-03-24T22:00:00,+05:00,+05 +2001-10-27T22:00:00,+04:00,+04 +2002-03-30T22:00:00,+05:00,+05 +2002-10-26T22:00:00,+04:00,+04 +2003-03-29T22:00:00,+05:00,+05 +2003-10-25T22:00:00,+04:00,+04 +2004-03-27T22:00:00,+05:00,+05 +2004-10-30T22:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-baghdad.txt b/desk/gub/lib/pytz/asia-baghdad.txt new file mode 100644 index 0000000..67c31fd --- /dev/null +++ b/desk/gub/lib/pytz/asia-baghdad.txt @@ -0,0 +1,56 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:58,LMT +1901-12-13T20:45:52,+02:58,BMT +1917-12-31T21:02:24,+03:00,+03 +1982-04-30T21:00:00,+04:00,+04 +1982-09-30T20:00:00,+03:00,+03 +1983-03-30T21:00:00,+04:00,+04 +1983-09-30T20:00:00,+03:00,+03 +1984-03-31T21:00:00,+04:00,+04 +1984-09-30T20:00:00,+03:00,+03 +1985-03-31T21:00:00,+04:00,+04 +1985-09-28T22:00:00,+03:00,+03 +1986-03-29T22:00:00,+04:00,+04 +1986-09-27T22:00:00,+03:00,+03 +1987-03-28T22:00:00,+04:00,+04 +1987-09-26T22:00:00,+03:00,+03 +1988-03-26T22:00:00,+04:00,+04 +1988-09-24T22:00:00,+03:00,+03 +1989-03-25T22:00:00,+04:00,+04 +1989-09-23T22:00:00,+03:00,+03 +1990-03-24T22:00:00,+04:00,+04 +1990-09-29T22:00:00,+03:00,+03 +1991-04-01T00:00:00,+04:00,+04 +1991-10-01T00:00:00,+03:00,+03 +1992-04-01T00:00:00,+04:00,+04 +1992-10-01T00:00:00,+03:00,+03 +1993-04-01T00:00:00,+04:00,+04 +1993-10-01T00:00:00,+03:00,+03 +1994-04-01T00:00:00,+04:00,+04 +1994-10-01T00:00:00,+03:00,+03 +1995-04-01T00:00:00,+04:00,+04 +1995-10-01T00:00:00,+03:00,+03 +1996-04-01T00:00:00,+04:00,+04 +1996-10-01T00:00:00,+03:00,+03 +1997-04-01T00:00:00,+04:00,+04 +1997-10-01T00:00:00,+03:00,+03 +1998-04-01T00:00:00,+04:00,+04 +1998-10-01T00:00:00,+03:00,+03 +1999-04-01T00:00:00,+04:00,+04 +1999-10-01T00:00:00,+03:00,+03 +2000-04-01T00:00:00,+04:00,+04 +2000-10-01T00:00:00,+03:00,+03 +2001-04-01T00:00:00,+04:00,+04 +2001-10-01T00:00:00,+03:00,+03 +2002-04-01T00:00:00,+04:00,+04 +2002-10-01T00:00:00,+03:00,+03 +2003-04-01T00:00:00,+04:00,+04 +2003-10-01T00:00:00,+03:00,+03 +2004-04-01T00:00:00,+04:00,+04 +2004-10-01T00:00:00,+03:00,+03 +2005-04-01T00:00:00,+04:00,+04 +2005-10-01T00:00:00,+03:00,+03 +2006-04-01T00:00:00,+04:00,+04 +2006-10-01T00:00:00,+03:00,+03 +2007-04-01T00:00:00,+04:00,+04 +2007-10-01T00:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-bahrain.txt b/desk/gub/lib/pytz/asia-bahrain.txt new file mode 100644 index 0000000..c1d08f6 --- /dev/null +++ b/desk/gub/lib/pytz/asia-bahrain.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:26,LMT +1919-12-31T20:33:52,+04:00,+04 +1972-05-31T20:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-baku.txt b/desk/gub/lib/pytz/asia-baku.txt new file mode 100644 index 0000000..032d8a4 --- /dev/null +++ b/desk/gub/lib/pytz/asia-baku.txt @@ -0,0 +1,68 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:19,LMT +1924-05-01T20:40:36,+03:00,+03 +1957-02-28T21:00:00,+04:00,+04 +1981-03-31T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+04:00,+04 +1982-03-31T20:00:00,+05:00,+05 +1982-09-30T19:00:00,+04:00,+04 +1983-03-31T20:00:00,+05:00,+05 +1983-09-30T19:00:00,+04:00,+04 +1984-03-31T20:00:00,+05:00,+05 +1984-09-29T22:00:00,+04:00,+04 +1985-03-30T22:00:00,+05:00,+05 +1985-09-28T22:00:00,+04:00,+04 +1986-03-29T22:00:00,+05:00,+05 +1986-09-27T22:00:00,+04:00,+04 +1987-03-28T22:00:00,+05:00,+05 +1987-09-26T22:00:00,+04:00,+04 +1988-03-26T22:00:00,+05:00,+05 +1988-09-24T22:00:00,+04:00,+04 +1989-03-25T22:00:00,+05:00,+05 +1989-09-23T22:00:00,+04:00,+04 +1990-03-24T22:00:00,+05:00,+05 +1990-09-29T22:00:00,+04:00,+04 +1991-03-30T22:00:00,+04:00,+04 +1991-09-28T23:00:00,+03:00,+03 +1992-03-28T23:00:00,+04:00,+04 +1992-09-26T23:00:00,+04:00,+04 +1996-03-31T01:00:00,+05:00,+05 +1996-10-27T01:00:00,+04:00,+04 +1997-03-30T00:00:00,+05:00,+05 +1997-10-26T00:00:00,+04:00,+04 +1998-03-29T00:00:00,+05:00,+05 +1998-10-25T00:00:00,+04:00,+04 +1999-03-28T00:00:00,+05:00,+05 +1999-10-31T00:00:00,+04:00,+04 +2000-03-26T00:00:00,+05:00,+05 +2000-10-29T00:00:00,+04:00,+04 +2001-03-25T00:00:00,+05:00,+05 +2001-10-28T00:00:00,+04:00,+04 +2002-03-31T00:00:00,+05:00,+05 +2002-10-27T00:00:00,+04:00,+04 +2003-03-30T00:00:00,+05:00,+05 +2003-10-26T00:00:00,+04:00,+04 +2004-03-28T00:00:00,+05:00,+05 +2004-10-31T00:00:00,+04:00,+04 +2005-03-27T00:00:00,+05:00,+05 +2005-10-30T00:00:00,+04:00,+04 +2006-03-26T00:00:00,+05:00,+05 +2006-10-29T00:00:00,+04:00,+04 +2007-03-25T00:00:00,+05:00,+05 +2007-10-28T00:00:00,+04:00,+04 +2008-03-30T00:00:00,+05:00,+05 +2008-10-26T00:00:00,+04:00,+04 +2009-03-29T00:00:00,+05:00,+05 +2009-10-25T00:00:00,+04:00,+04 +2010-03-28T00:00:00,+05:00,+05 +2010-10-31T00:00:00,+04:00,+04 +2011-03-27T00:00:00,+05:00,+05 +2011-10-30T00:00:00,+04:00,+04 +2012-03-25T00:00:00,+05:00,+05 +2012-10-28T00:00:00,+04:00,+04 +2013-03-31T00:00:00,+05:00,+05 +2013-10-27T00:00:00,+04:00,+04 +2014-03-30T00:00:00,+05:00,+05 +2014-10-26T00:00:00,+04:00,+04 +2015-03-29T00:00:00,+05:00,+05 +2015-10-25T00:00:00,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-bangkok.txt b/desk/gub/lib/pytz/asia-bangkok.txt new file mode 100644 index 0000000..3cb374b --- /dev/null +++ b/desk/gub/lib/pytz/asia-bangkok.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:42,LMT +1901-12-13T20:45:52,+06:42,BMT +1920-03-31T17:17:56,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-barnaul.txt b/desk/gub/lib/pytz/asia-barnaul.txt new file mode 100644 index 0000000..312b5d9 --- /dev/null +++ b/desk/gub/lib/pytz/asia-barnaul.txt @@ -0,0 +1,69 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:35,LMT +1919-12-09T18:25:00,+06:00,+06 +1930-06-20T18:00:00,+07:00,+07 +1981-03-31T17:00:00,+08:00,+08 +1981-09-30T16:00:00,+07:00,+07 +1982-03-31T17:00:00,+08:00,+08 +1982-09-30T16:00:00,+07:00,+07 +1983-03-31T17:00:00,+08:00,+08 +1983-09-30T16:00:00,+07:00,+07 +1984-03-31T17:00:00,+08:00,+08 +1984-09-29T19:00:00,+07:00,+07 +1985-03-30T19:00:00,+08:00,+08 +1985-09-28T19:00:00,+07:00,+07 +1986-03-29T19:00:00,+08:00,+08 +1986-09-27T19:00:00,+07:00,+07 +1987-03-28T19:00:00,+08:00,+08 +1987-09-26T19:00:00,+07:00,+07 +1988-03-26T19:00:00,+08:00,+08 +1988-09-24T19:00:00,+07:00,+07 +1989-03-25T19:00:00,+08:00,+08 +1989-09-23T19:00:00,+07:00,+07 +1990-03-24T19:00:00,+08:00,+08 +1990-09-29T19:00:00,+07:00,+07 +1991-03-30T19:00:00,+07:00,+07 +1991-09-28T20:00:00,+06:00,+06 +1992-01-18T20:00:00,+07:00,+07 +1992-03-28T19:00:00,+08:00,+08 +1992-09-26T19:00:00,+07:00,+07 +1993-03-27T19:00:00,+08:00,+08 +1993-09-25T19:00:00,+07:00,+07 +1994-03-26T19:00:00,+08:00,+08 +1994-09-24T19:00:00,+07:00,+07 +1995-03-25T19:00:00,+08:00,+08 +1995-05-27T16:00:00,+07:00,+07 +1995-09-23T20:00:00,+06:00,+06 +1996-03-30T20:00:00,+07:00,+07 +1996-10-26T20:00:00,+06:00,+06 +1997-03-29T20:00:00,+07:00,+07 +1997-10-25T20:00:00,+06:00,+06 +1998-03-28T20:00:00,+07:00,+07 +1998-10-24T20:00:00,+06:00,+06 +1999-03-27T20:00:00,+07:00,+07 +1999-10-30T20:00:00,+06:00,+06 +2000-03-25T20:00:00,+07:00,+07 +2000-10-28T20:00:00,+06:00,+06 +2001-03-24T20:00:00,+07:00,+07 +2001-10-27T20:00:00,+06:00,+06 +2002-03-30T20:00:00,+07:00,+07 +2002-10-26T20:00:00,+06:00,+06 +2003-03-29T20:00:00,+07:00,+07 +2003-10-25T20:00:00,+06:00,+06 +2004-03-27T20:00:00,+07:00,+07 +2004-10-30T20:00:00,+06:00,+06 +2005-03-26T20:00:00,+07:00,+07 +2005-10-29T20:00:00,+06:00,+06 +2006-03-25T20:00:00,+07:00,+07 +2006-10-28T20:00:00,+06:00,+06 +2007-03-24T20:00:00,+07:00,+07 +2007-10-27T20:00:00,+06:00,+06 +2008-03-29T20:00:00,+07:00,+07 +2008-10-25T20:00:00,+06:00,+06 +2009-03-28T20:00:00,+07:00,+07 +2009-10-24T20:00:00,+06:00,+06 +2010-03-27T20:00:00,+07:00,+07 +2010-10-30T20:00:00,+06:00,+06 +2011-03-26T20:00:00,+07:00,+07 +2014-10-25T19:00:00,+06:00,+06 +2016-03-26T20:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-beirut.txt b/desk/gub/lib/pytz/asia-beirut.txt new file mode 100644 index 0000000..6380eb9 --- /dev/null +++ b/desk/gub/lib/pytz/asia-beirut.txt @@ -0,0 +1,143 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:22,LMT +1901-12-13T20:45:52,+02:00,EET +1920-03-27T22:00:00,+03:00,EEST +1920-10-24T21:00:00,+02:00,EET +1921-04-02T22:00:00,+03:00,EEST +1921-10-02T21:00:00,+02:00,EET +1922-03-25T22:00:00,+03:00,EEST +1922-10-07T21:00:00,+02:00,EET +1923-04-21T22:00:00,+03:00,EEST +1923-09-15T21:00:00,+02:00,EET +1957-04-30T22:00:00,+03:00,EEST +1957-09-30T21:00:00,+02:00,EET +1958-04-30T22:00:00,+03:00,EEST +1958-09-30T21:00:00,+02:00,EET +1959-04-30T22:00:00,+03:00,EEST +1959-09-30T21:00:00,+02:00,EET +1960-04-30T22:00:00,+03:00,EEST +1960-09-30T21:00:00,+02:00,EET +1961-04-30T22:00:00,+03:00,EEST +1961-09-30T21:00:00,+02:00,EET +1972-06-21T22:00:00,+03:00,EEST +1972-09-30T21:00:00,+02:00,EET +1973-04-30T22:00:00,+03:00,EEST +1973-09-30T21:00:00,+02:00,EET +1974-04-30T22:00:00,+03:00,EEST +1974-09-30T21:00:00,+02:00,EET +1975-04-30T22:00:00,+03:00,EEST +1975-09-30T21:00:00,+02:00,EET +1976-04-30T22:00:00,+03:00,EEST +1976-09-30T21:00:00,+02:00,EET +1977-04-30T22:00:00,+03:00,EEST +1977-09-30T21:00:00,+02:00,EET +1978-04-29T22:00:00,+03:00,EEST +1978-09-29T21:00:00,+02:00,EET +1984-04-30T22:00:00,+03:00,EEST +1984-10-15T21:00:00,+02:00,EET +1985-04-30T22:00:00,+03:00,EEST +1985-10-15T21:00:00,+02:00,EET +1986-04-30T22:00:00,+03:00,EEST +1986-10-15T21:00:00,+02:00,EET +1987-04-30T22:00:00,+03:00,EEST +1987-10-15T21:00:00,+02:00,EET +1988-05-31T22:00:00,+03:00,EEST +1988-10-15T21:00:00,+02:00,EET +1989-05-09T22:00:00,+03:00,EEST +1989-10-15T21:00:00,+02:00,EET +1990-04-30T22:00:00,+03:00,EEST +1990-10-15T21:00:00,+02:00,EET +1991-04-30T22:00:00,+03:00,EEST +1991-10-15T21:00:00,+02:00,EET +1992-04-30T22:00:00,+03:00,EEST +1992-10-03T21:00:00,+02:00,EET +1993-03-27T22:00:00,+03:00,EEST +1993-09-25T21:00:00,+02:00,EET +1994-03-26T22:00:00,+03:00,EEST +1994-09-24T21:00:00,+02:00,EET +1995-03-25T22:00:00,+03:00,EEST +1995-09-23T21:00:00,+02:00,EET +1996-03-30T22:00:00,+03:00,EEST +1996-09-28T21:00:00,+02:00,EET +1997-03-29T22:00:00,+03:00,EEST +1997-09-27T21:00:00,+02:00,EET +1998-03-28T22:00:00,+03:00,EEST +1998-09-26T21:00:00,+02:00,EET +1999-03-27T22:00:00,+03:00,EEST +1999-10-30T21:00:00,+02:00,EET +2000-03-25T22:00:00,+03:00,EEST +2000-10-28T21:00:00,+02:00,EET +2001-03-24T22:00:00,+03:00,EEST +2001-10-27T21:00:00,+02:00,EET +2002-03-30T22:00:00,+03:00,EEST +2002-10-26T21:00:00,+02:00,EET +2003-03-29T22:00:00,+03:00,EEST +2003-10-25T21:00:00,+02:00,EET +2004-03-27T22:00:00,+03:00,EEST +2004-10-30T21:00:00,+02:00,EET +2005-03-26T22:00:00,+03:00,EEST +2005-10-29T21:00:00,+02:00,EET +2006-03-25T22:00:00,+03:00,EEST +2006-10-28T21:00:00,+02:00,EET +2007-03-24T22:00:00,+03:00,EEST +2007-10-27T21:00:00,+02:00,EET +2008-03-29T22:00:00,+03:00,EEST +2008-10-25T21:00:00,+02:00,EET +2009-03-28T22:00:00,+03:00,EEST +2009-10-24T21:00:00,+02:00,EET +2010-03-27T22:00:00,+03:00,EEST +2010-10-30T21:00:00,+02:00,EET +2011-03-26T22:00:00,+03:00,EEST +2011-10-29T21:00:00,+02:00,EET +2012-03-24T22:00:00,+03:00,EEST +2012-10-27T21:00:00,+02:00,EET +2013-03-30T22:00:00,+03:00,EEST +2013-10-26T21:00:00,+02:00,EET +2014-03-29T22:00:00,+03:00,EEST +2014-10-25T21:00:00,+02:00,EET +2015-03-28T22:00:00,+03:00,EEST +2015-10-24T21:00:00,+02:00,EET +2016-03-26T22:00:00,+03:00,EEST +2016-10-29T21:00:00,+02:00,EET +2017-03-25T22:00:00,+03:00,EEST +2017-10-28T21:00:00,+02:00,EET +2018-03-24T22:00:00,+03:00,EEST +2018-10-27T21:00:00,+02:00,EET +2019-03-30T22:00:00,+03:00,EEST +2019-10-26T21:00:00,+02:00,EET +2020-03-28T22:00:00,+03:00,EEST +2020-10-24T21:00:00,+02:00,EET +2021-03-27T22:00:00,+03:00,EEST +2021-10-30T21:00:00,+02:00,EET +2022-03-26T22:00:00,+03:00,EEST +2022-10-29T21:00:00,+02:00,EET +2023-03-25T22:00:00,+03:00,EEST +2023-10-28T21:00:00,+02:00,EET +2024-03-30T22:00:00,+03:00,EEST +2024-10-26T21:00:00,+02:00,EET +2025-03-29T22:00:00,+03:00,EEST +2025-10-25T21:00:00,+02:00,EET +2026-03-28T22:00:00,+03:00,EEST +2026-10-24T21:00:00,+02:00,EET +2027-03-27T22:00:00,+03:00,EEST +2027-10-30T21:00:00,+02:00,EET +2028-03-25T22:00:00,+03:00,EEST +2028-10-28T21:00:00,+02:00,EET +2029-03-24T22:00:00,+03:00,EEST +2029-10-27T21:00:00,+02:00,EET +2030-03-30T22:00:00,+03:00,EEST +2030-10-26T21:00:00,+02:00,EET +2031-03-29T22:00:00,+03:00,EEST +2031-10-25T21:00:00,+02:00,EET +2032-03-27T22:00:00,+03:00,EEST +2032-10-30T21:00:00,+02:00,EET +2033-03-26T22:00:00,+03:00,EEST +2033-10-29T21:00:00,+02:00,EET +2034-03-25T22:00:00,+03:00,EEST +2034-10-28T21:00:00,+02:00,EET +2035-03-24T22:00:00,+03:00,EEST +2035-10-27T21:00:00,+02:00,EET +2036-03-29T22:00:00,+03:00,EEST +2036-10-25T21:00:00,+02:00,EET +2037-03-28T22:00:00,+03:00,EEST +2037-10-24T21:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-bishkek.txt b/desk/gub/lib/pytz/asia-bishkek.txt new file mode 100644 index 0000000..3aebadd --- /dev/null +++ b/desk/gub/lib/pytz/asia-bishkek.txt @@ -0,0 +1,54 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:58,LMT +1924-05-01T19:01:36,+05:00,+05 +1930-06-20T19:00:00,+06:00,+06 +1981-03-31T18:00:00,+07:00,+07 +1981-09-30T17:00:00,+06:00,+06 +1982-03-31T18:00:00,+07:00,+07 +1982-09-30T17:00:00,+06:00,+06 +1983-03-31T18:00:00,+07:00,+07 +1983-09-30T17:00:00,+06:00,+06 +1984-03-31T18:00:00,+07:00,+07 +1984-09-29T20:00:00,+06:00,+06 +1985-03-30T20:00:00,+07:00,+07 +1985-09-28T20:00:00,+06:00,+06 +1986-03-29T20:00:00,+07:00,+07 +1986-09-27T20:00:00,+06:00,+06 +1987-03-28T20:00:00,+07:00,+07 +1987-09-26T20:00:00,+06:00,+06 +1988-03-26T20:00:00,+07:00,+07 +1988-09-24T20:00:00,+06:00,+06 +1989-03-25T20:00:00,+07:00,+07 +1989-09-23T20:00:00,+06:00,+06 +1990-03-24T20:00:00,+07:00,+07 +1990-09-29T20:00:00,+06:00,+06 +1991-03-30T20:00:00,+06:00,+06 +1991-08-30T20:00:00,+05:00,+05 +1992-04-11T19:00:00,+06:00,+06 +1992-09-26T18:00:00,+05:00,+05 +1993-04-10T19:00:00,+06:00,+06 +1993-09-25T18:00:00,+05:00,+05 +1994-04-09T19:00:00,+06:00,+06 +1994-09-24T18:00:00,+05:00,+05 +1995-04-08T19:00:00,+06:00,+06 +1995-09-23T18:00:00,+05:00,+05 +1996-04-06T19:00:00,+06:00,+06 +1996-09-28T18:00:00,+05:00,+05 +1997-03-29T21:30:00,+06:00,+06 +1997-10-25T20:30:00,+05:00,+05 +1998-03-28T21:30:00,+06:00,+06 +1998-10-24T20:30:00,+05:00,+05 +1999-03-27T21:30:00,+06:00,+06 +1999-10-30T20:30:00,+05:00,+05 +2000-03-25T21:30:00,+06:00,+06 +2000-10-28T20:30:00,+05:00,+05 +2001-03-24T21:30:00,+06:00,+06 +2001-10-27T20:30:00,+05:00,+05 +2002-03-30T21:30:00,+06:00,+06 +2002-10-26T20:30:00,+05:00,+05 +2003-03-29T21:30:00,+06:00,+06 +2003-10-25T20:30:00,+05:00,+05 +2004-03-27T21:30:00,+06:00,+06 +2004-10-30T20:30:00,+05:00,+05 +2005-03-26T21:30:00,+06:00,+06 +2005-08-11T18:00:00,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-brunei.txt b/desk/gub/lib/pytz/asia-brunei.txt new file mode 100644 index 0000000..4d06e1e --- /dev/null +++ b/desk/gub/lib/pytz/asia-brunei.txt @@ -0,0 +1,20 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:21,LMT +1926-02-28T16:38:40,+07:30,+0730 +1932-12-31T16:30:00,+08:00,+08 +1935-09-13T16:00:00,+08:20,+0820 +1935-12-13T15:40:00,+08:00,+08 +1936-09-13T16:00:00,+08:20,+0820 +1936-12-13T15:40:00,+08:00,+08 +1937-09-13T16:00:00,+08:20,+0820 +1937-12-13T15:40:00,+08:00,+08 +1938-09-13T16:00:00,+08:20,+0820 +1938-12-13T15:40:00,+08:00,+08 +1939-09-13T16:00:00,+08:20,+0820 +1939-12-13T15:40:00,+08:00,+08 +1940-09-13T16:00:00,+08:20,+0820 +1940-12-13T15:40:00,+08:00,+08 +1941-09-13T16:00:00,+08:20,+0820 +1941-12-13T15:40:00,+08:00,+08 +1942-02-15T16:00:00,+09:00,+09 +1945-09-11T15:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-calcutta.txt b/desk/gub/lib/pytz/asia-calcutta.txt new file mode 100644 index 0000000..3a4a8e2 --- /dev/null +++ b/desk/gub/lib/pytz/asia-calcutta.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:53,LMT +1901-12-13T20:45:52,+05:21,MMT +1905-12-31T18:38:50,+05:30,IST +1941-09-30T18:30:00,+06:30,+0630 +1942-05-14T17:30:00,+05:30,IST +1942-08-31T18:30:00,+06:30,+0630 +1945-10-14T17:30:00,+05:30,IST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-chita.txt b/desk/gub/lib/pytz/asia-chita.txt new file mode 100644 index 0000000..7eeacc9 --- /dev/null +++ b/desk/gub/lib/pytz/asia-chita.txt @@ -0,0 +1,68 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:34,LMT +1919-12-14T16:26:08,+08:00,+08 +1930-06-20T16:00:00,+09:00,+09 +1981-03-31T15:00:00,+10:00,+10 +1981-09-30T14:00:00,+09:00,+09 +1982-03-31T15:00:00,+10:00,+10 +1982-09-30T14:00:00,+09:00,+09 +1983-03-31T15:00:00,+10:00,+10 +1983-09-30T14:00:00,+09:00,+09 +1984-03-31T15:00:00,+10:00,+10 +1984-09-29T17:00:00,+09:00,+09 +1985-03-30T17:00:00,+10:00,+10 +1985-09-28T17:00:00,+09:00,+09 +1986-03-29T17:00:00,+10:00,+10 +1986-09-27T17:00:00,+09:00,+09 +1987-03-28T17:00:00,+10:00,+10 +1987-09-26T17:00:00,+09:00,+09 +1988-03-26T17:00:00,+10:00,+10 +1988-09-24T17:00:00,+09:00,+09 +1989-03-25T17:00:00,+10:00,+10 +1989-09-23T17:00:00,+09:00,+09 +1990-03-24T17:00:00,+10:00,+10 +1990-09-29T17:00:00,+09:00,+09 +1991-03-30T17:00:00,+09:00,+09 +1991-09-28T18:00:00,+08:00,+08 +1992-01-18T18:00:00,+09:00,+09 +1992-03-28T17:00:00,+10:00,+10 +1992-09-26T17:00:00,+09:00,+09 +1993-03-27T17:00:00,+10:00,+10 +1993-09-25T17:00:00,+09:00,+09 +1994-03-26T17:00:00,+10:00,+10 +1994-09-24T17:00:00,+09:00,+09 +1995-03-25T17:00:00,+10:00,+10 +1995-09-23T17:00:00,+09:00,+09 +1996-03-30T17:00:00,+10:00,+10 +1996-10-26T17:00:00,+09:00,+09 +1997-03-29T17:00:00,+10:00,+10 +1997-10-25T17:00:00,+09:00,+09 +1998-03-28T17:00:00,+10:00,+10 +1998-10-24T17:00:00,+09:00,+09 +1999-03-27T17:00:00,+10:00,+10 +1999-10-30T17:00:00,+09:00,+09 +2000-03-25T17:00:00,+10:00,+10 +2000-10-28T17:00:00,+09:00,+09 +2001-03-24T17:00:00,+10:00,+10 +2001-10-27T17:00:00,+09:00,+09 +2002-03-30T17:00:00,+10:00,+10 +2002-10-26T17:00:00,+09:00,+09 +2003-03-29T17:00:00,+10:00,+10 +2003-10-25T17:00:00,+09:00,+09 +2004-03-27T17:00:00,+10:00,+10 +2004-10-30T17:00:00,+09:00,+09 +2005-03-26T17:00:00,+10:00,+10 +2005-10-29T17:00:00,+09:00,+09 +2006-03-25T17:00:00,+10:00,+10 +2006-10-28T17:00:00,+09:00,+09 +2007-03-24T17:00:00,+10:00,+10 +2007-10-27T17:00:00,+09:00,+09 +2008-03-29T17:00:00,+10:00,+10 +2008-10-25T17:00:00,+09:00,+09 +2009-03-28T17:00:00,+10:00,+10 +2009-10-24T17:00:00,+09:00,+09 +2010-03-27T17:00:00,+10:00,+10 +2010-10-30T17:00:00,+09:00,+09 +2011-03-26T17:00:00,+10:00,+10 +2014-10-25T16:00:00,+08:00,+08 +2016-03-26T18:00:00,+09:00,+09 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-choibalsan.txt b/desk/gub/lib/pytz/asia-choibalsan.txt new file mode 100644 index 0000000..720beab --- /dev/null +++ b/desk/gub/lib/pytz/asia-choibalsan.txt @@ -0,0 +1,52 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:08,LMT +1905-07-31T16:52:28,+07:00,+07 +1977-12-31T17:00:00,+08:00,+08 +1983-03-31T16:00:00,+09:00,+09 +1983-09-30T15:00:00,+08:00,+08 +1984-03-31T16:00:00,+09:00,+09 +1984-09-29T15:00:00,+08:00,+08 +1985-03-30T16:00:00,+09:00,+09 +1985-09-28T15:00:00,+08:00,+08 +1986-03-29T16:00:00,+09:00,+09 +1986-09-27T15:00:00,+08:00,+08 +1987-03-28T16:00:00,+09:00,+09 +1987-09-26T15:00:00,+08:00,+08 +1988-03-26T16:00:00,+09:00,+09 +1988-09-24T15:00:00,+08:00,+08 +1989-03-25T16:00:00,+09:00,+09 +1989-09-23T15:00:00,+08:00,+08 +1990-03-24T16:00:00,+09:00,+09 +1990-09-29T15:00:00,+08:00,+08 +1991-03-30T16:00:00,+09:00,+09 +1991-09-28T15:00:00,+08:00,+08 +1992-03-28T16:00:00,+09:00,+09 +1992-09-26T15:00:00,+08:00,+08 +1993-03-27T16:00:00,+09:00,+09 +1993-09-25T15:00:00,+08:00,+08 +1994-03-26T16:00:00,+09:00,+09 +1994-09-24T15:00:00,+08:00,+08 +1995-03-25T16:00:00,+09:00,+09 +1995-09-23T15:00:00,+08:00,+08 +1996-03-30T16:00:00,+09:00,+09 +1996-09-28T15:00:00,+08:00,+08 +1997-03-29T16:00:00,+09:00,+09 +1997-09-27T15:00:00,+08:00,+08 +1998-03-28T16:00:00,+09:00,+09 +1998-09-26T15:00:00,+08:00,+08 +2001-04-27T18:00:00,+09:00,+09 +2001-09-28T17:00:00,+08:00,+08 +2002-03-29T18:00:00,+09:00,+09 +2002-09-27T17:00:00,+08:00,+08 +2003-03-28T18:00:00,+09:00,+09 +2003-09-26T17:00:00,+08:00,+08 +2004-03-26T18:00:00,+09:00,+09 +2004-09-24T17:00:00,+08:00,+08 +2005-03-25T18:00:00,+09:00,+09 +2005-09-23T17:00:00,+08:00,+08 +2006-03-24T18:00:00,+09:00,+09 +2006-09-29T17:00:00,+08:00,+08 +2015-03-27T18:00:00,+09:00,+09 +2015-09-25T15:00:00,+08:00,+08 +2016-03-25T18:00:00,+09:00,+09 +2016-09-23T15:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-chongqing.txt b/desk/gub/lib/pytz/asia-chongqing.txt new file mode 100644 index 0000000..27376f6 --- /dev/null +++ b/desk/gub/lib/pytz/asia-chongqing.txt @@ -0,0 +1,31 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:06,LMT +1901-12-13T20:45:52,+08:00,CST +1919-04-12T16:00:00,+09:00,CDT +1919-09-30T15:00:00,+08:00,CST +1940-05-31T16:00:00,+09:00,CDT +1940-10-12T15:00:00,+08:00,CST +1941-03-14T16:00:00,+09:00,CDT +1941-11-01T15:00:00,+08:00,CST +1942-01-30T16:00:00,+09:00,CDT +1945-09-01T15:00:00,+08:00,CST +1946-05-14T16:00:00,+09:00,CDT +1946-09-30T15:00:00,+08:00,CST +1947-04-14T16:00:00,+09:00,CDT +1947-10-31T15:00:00,+08:00,CST +1948-04-30T16:00:00,+09:00,CDT +1948-09-30T15:00:00,+08:00,CST +1949-04-30T16:00:00,+09:00,CDT +1949-05-27T15:00:00,+08:00,CST +1986-05-03T18:00:00,+09:00,CDT +1986-09-13T17:00:00,+08:00,CST +1987-04-11T18:00:00,+09:00,CDT +1987-09-12T17:00:00,+08:00,CST +1988-04-16T18:00:00,+09:00,CDT +1988-09-10T17:00:00,+08:00,CST +1989-04-15T18:00:00,+09:00,CDT +1989-09-16T17:00:00,+08:00,CST +1990-04-14T18:00:00,+09:00,CDT +1990-09-15T17:00:00,+08:00,CST +1991-04-13T18:00:00,+09:00,CDT +1991-09-14T17:00:00,+08:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-chungking.txt b/desk/gub/lib/pytz/asia-chungking.txt new file mode 100644 index 0000000..27376f6 --- /dev/null +++ b/desk/gub/lib/pytz/asia-chungking.txt @@ -0,0 +1,31 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:06,LMT +1901-12-13T20:45:52,+08:00,CST +1919-04-12T16:00:00,+09:00,CDT +1919-09-30T15:00:00,+08:00,CST +1940-05-31T16:00:00,+09:00,CDT +1940-10-12T15:00:00,+08:00,CST +1941-03-14T16:00:00,+09:00,CDT +1941-11-01T15:00:00,+08:00,CST +1942-01-30T16:00:00,+09:00,CDT +1945-09-01T15:00:00,+08:00,CST +1946-05-14T16:00:00,+09:00,CDT +1946-09-30T15:00:00,+08:00,CST +1947-04-14T16:00:00,+09:00,CDT +1947-10-31T15:00:00,+08:00,CST +1948-04-30T16:00:00,+09:00,CDT +1948-09-30T15:00:00,+08:00,CST +1949-04-30T16:00:00,+09:00,CDT +1949-05-27T15:00:00,+08:00,CST +1986-05-03T18:00:00,+09:00,CDT +1986-09-13T17:00:00,+08:00,CST +1987-04-11T18:00:00,+09:00,CDT +1987-09-12T17:00:00,+08:00,CST +1988-04-16T18:00:00,+09:00,CDT +1988-09-10T17:00:00,+08:00,CST +1989-04-15T18:00:00,+09:00,CDT +1989-09-16T17:00:00,+08:00,CST +1990-04-14T18:00:00,+09:00,CDT +1990-09-15T17:00:00,+08:00,CST +1991-04-13T18:00:00,+09:00,CDT +1991-09-14T17:00:00,+08:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-colombo.txt b/desk/gub/lib/pytz/asia-colombo.txt new file mode 100644 index 0000000..1babfb5 --- /dev/null +++ b/desk/gub/lib/pytz/asia-colombo.txt @@ -0,0 +1,10 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:19,LMT +1901-12-13T20:45:52,+05:20,MMT +1905-12-31T18:40:28,+05:30,+0530 +1942-01-04T18:30:00,+06:00,+06 +1942-08-31T18:00:00,+06:30,+0630 +1945-10-15T19:30:00,+05:30,+0530 +1996-05-24T18:30:00,+06:30,+0630 +1996-10-25T18:00:00,+06:00,+06 +2006-04-14T18:30:00,+05:30,+0530 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-dacca.txt b/desk/gub/lib/pytz/asia-dacca.txt new file mode 100644 index 0000000..3e2557c --- /dev/null +++ b/desk/gub/lib/pytz/asia-dacca.txt @@ -0,0 +1,9 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:02,LMT +1901-12-13T20:45:52,+05:53,HMT +1941-09-30T18:06:40,+06:30,+0630 +1942-05-14T17:30:00,+05:30,+0530 +1942-08-31T18:30:00,+06:30,+0630 +1951-09-29T17:30:00,+06:00,+06 +2009-06-19T17:00:00,+07:00,+07 +2009-12-31T17:00:00,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-damascus.txt b/desk/gub/lib/pytz/asia-damascus.txt new file mode 100644 index 0000000..ac8a3d1 --- /dev/null +++ b/desk/gub/lib/pytz/asia-damascus.txt @@ -0,0 +1,123 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:25,LMT +1919-12-31T21:34:48,+02:00,EET +1920-04-18T00:00:00,+03:00,EEST +1920-10-02T23:00:00,+02:00,EET +1921-04-17T00:00:00,+03:00,EEST +1921-10-01T23:00:00,+02:00,EET +1922-04-16T00:00:00,+03:00,EEST +1922-09-30T23:00:00,+02:00,EET +1923-04-15T00:00:00,+03:00,EEST +1923-10-06T23:00:00,+02:00,EET +1962-04-29T00:00:00,+03:00,EEST +1962-09-30T23:00:00,+02:00,EET +1963-05-01T00:00:00,+03:00,EEST +1963-09-29T23:00:00,+02:00,EET +1964-05-01T00:00:00,+03:00,EEST +1964-09-30T23:00:00,+02:00,EET +1965-05-01T00:00:00,+03:00,EEST +1965-09-29T23:00:00,+02:00,EET +1966-04-24T00:00:00,+03:00,EEST +1966-09-30T23:00:00,+02:00,EET +1967-05-01T00:00:00,+03:00,EEST +1967-09-30T23:00:00,+02:00,EET +1968-05-01T00:00:00,+03:00,EEST +1968-09-30T23:00:00,+02:00,EET +1969-05-01T00:00:00,+03:00,EEST +1969-09-30T23:00:00,+02:00,EET +1970-05-01T00:00:00,+03:00,EEST +1970-09-30T23:00:00,+02:00,EET +1971-05-01T00:00:00,+03:00,EEST +1971-09-30T23:00:00,+02:00,EET +1972-05-01T00:00:00,+03:00,EEST +1972-09-30T23:00:00,+02:00,EET +1973-05-01T00:00:00,+03:00,EEST +1973-09-30T23:00:00,+02:00,EET +1974-05-01T00:00:00,+03:00,EEST +1974-09-30T23:00:00,+02:00,EET +1975-05-01T00:00:00,+03:00,EEST +1975-09-30T23:00:00,+02:00,EET +1976-05-01T00:00:00,+03:00,EEST +1976-09-30T23:00:00,+02:00,EET +1977-05-01T00:00:00,+03:00,EEST +1977-08-31T23:00:00,+02:00,EET +1978-05-01T00:00:00,+03:00,EEST +1978-08-31T23:00:00,+02:00,EET +1983-04-09T00:00:00,+03:00,EEST +1983-09-30T23:00:00,+02:00,EET +1984-04-09T00:00:00,+03:00,EEST +1984-09-30T23:00:00,+02:00,EET +1986-02-16T00:00:00,+03:00,EEST +1986-10-08T23:00:00,+02:00,EET +1987-03-01T00:00:00,+03:00,EEST +1987-10-30T23:00:00,+02:00,EET +1988-03-15T00:00:00,+03:00,EEST +1988-10-30T23:00:00,+02:00,EET +1989-03-31T00:00:00,+03:00,EEST +1989-09-30T23:00:00,+02:00,EET +1990-04-01T00:00:00,+03:00,EEST +1990-09-29T23:00:00,+02:00,EET +1991-03-31T22:00:00,+03:00,EEST +1991-09-30T21:00:00,+02:00,EET +1992-04-07T22:00:00,+03:00,EEST +1992-09-30T21:00:00,+02:00,EET +1993-03-25T22:00:00,+03:00,EEST +1993-09-24T21:00:00,+02:00,EET +1994-03-31T22:00:00,+03:00,EEST +1994-09-30T21:00:00,+02:00,EET +1995-03-31T22:00:00,+03:00,EEST +1995-09-30T21:00:00,+02:00,EET +1996-03-31T22:00:00,+03:00,EEST +1996-09-30T21:00:00,+02:00,EET +1997-03-30T22:00:00,+03:00,EEST +1997-09-30T21:00:00,+02:00,EET +1998-03-29T22:00:00,+03:00,EEST +1998-09-30T21:00:00,+02:00,EET +1999-03-31T22:00:00,+03:00,EEST +1999-09-30T21:00:00,+02:00,EET +2000-03-31T22:00:00,+03:00,EEST +2000-09-30T21:00:00,+02:00,EET +2001-03-31T22:00:00,+03:00,EEST +2001-09-30T21:00:00,+02:00,EET +2002-03-31T22:00:00,+03:00,EEST +2002-09-30T21:00:00,+02:00,EET +2003-03-31T22:00:00,+03:00,EEST +2003-09-30T21:00:00,+02:00,EET +2004-03-31T22:00:00,+03:00,EEST +2004-09-30T21:00:00,+02:00,EET +2005-03-31T22:00:00,+03:00,EEST +2005-09-30T21:00:00,+02:00,EET +2006-03-31T22:00:00,+03:00,EEST +2006-09-21T21:00:00,+02:00,EET +2007-03-29T22:00:00,+03:00,EEST +2007-11-01T21:00:00,+02:00,EET +2008-04-03T22:00:00,+03:00,EEST +2008-10-31T21:00:00,+02:00,EET +2009-03-26T22:00:00,+03:00,EEST +2009-10-29T21:00:00,+02:00,EET +2010-04-01T22:00:00,+03:00,EEST +2010-10-28T21:00:00,+02:00,EET +2011-03-31T22:00:00,+03:00,EEST +2011-10-27T21:00:00,+02:00,EET +2012-03-29T22:00:00,+03:00,EEST +2012-10-25T21:00:00,+02:00,EET +2013-03-28T22:00:00,+03:00,EEST +2013-10-24T21:00:00,+02:00,EET +2014-03-27T22:00:00,+03:00,EEST +2014-10-30T21:00:00,+02:00,EET +2015-03-26T22:00:00,+03:00,EEST +2015-10-29T21:00:00,+02:00,EET +2016-03-24T22:00:00,+03:00,EEST +2016-10-27T21:00:00,+02:00,EET +2017-03-30T22:00:00,+03:00,EEST +2017-10-26T21:00:00,+02:00,EET +2018-03-29T22:00:00,+03:00,EEST +2018-10-25T21:00:00,+02:00,EET +2019-03-28T22:00:00,+03:00,EEST +2019-10-24T21:00:00,+02:00,EET +2020-03-26T22:00:00,+03:00,EEST +2020-10-29T21:00:00,+02:00,EET +2021-03-25T22:00:00,+03:00,EEST +2021-10-28T21:00:00,+02:00,EET +2022-03-24T22:00:00,+03:00,EEST +2022-10-27T21:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-dhaka.txt b/desk/gub/lib/pytz/asia-dhaka.txt new file mode 100644 index 0000000..3e2557c --- /dev/null +++ b/desk/gub/lib/pytz/asia-dhaka.txt @@ -0,0 +1,9 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:02,LMT +1901-12-13T20:45:52,+05:53,HMT +1941-09-30T18:06:40,+06:30,+0630 +1942-05-14T17:30:00,+05:30,+0530 +1942-08-31T18:30:00,+06:30,+0630 +1951-09-29T17:30:00,+06:00,+06 +2009-06-19T17:00:00,+07:00,+07 +2009-12-31T17:00:00,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-dili.txt b/desk/gub/lib/pytz/asia-dili.txt new file mode 100644 index 0000000..693017f --- /dev/null +++ b/desk/gub/lib/pytz/asia-dili.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:22,LMT +1911-12-31T16:00:00,+08:00,+08 +1942-02-21T15:00:00,+09:00,+09 +1976-05-02T15:00:00,+08:00,+08 +2000-09-16T16:00:00,+09:00,+09 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-dubai.txt b/desk/gub/lib/pytz/asia-dubai.txt new file mode 100644 index 0000000..86b277e --- /dev/null +++ b/desk/gub/lib/pytz/asia-dubai.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:41,LMT +1919-12-31T20:18:48,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-dushanbe.txt b/desk/gub/lib/pytz/asia-dushanbe.txt new file mode 100644 index 0000000..114dba6 --- /dev/null +++ b/desk/gub/lib/pytz/asia-dushanbe.txt @@ -0,0 +1,26 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:35,LMT +1924-05-01T19:24:48,+05:00,+05 +1930-06-20T19:00:00,+06:00,+06 +1981-03-31T18:00:00,+07:00,+07 +1981-09-30T17:00:00,+06:00,+06 +1982-03-31T18:00:00,+07:00,+07 +1982-09-30T17:00:00,+06:00,+06 +1983-03-31T18:00:00,+07:00,+07 +1983-09-30T17:00:00,+06:00,+06 +1984-03-31T18:00:00,+07:00,+07 +1984-09-29T20:00:00,+06:00,+06 +1985-03-30T20:00:00,+07:00,+07 +1985-09-28T20:00:00,+06:00,+06 +1986-03-29T20:00:00,+07:00,+07 +1986-09-27T20:00:00,+06:00,+06 +1987-03-28T20:00:00,+07:00,+07 +1987-09-26T20:00:00,+06:00,+06 +1988-03-26T20:00:00,+07:00,+07 +1988-09-24T20:00:00,+06:00,+06 +1989-03-25T20:00:00,+07:00,+07 +1989-09-23T20:00:00,+06:00,+06 +1990-03-24T20:00:00,+07:00,+07 +1990-09-29T20:00:00,+06:00,+06 +1991-03-30T20:00:00,+06:00,+06 +1991-09-08T21:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-famagusta.txt b/desk/gub/lib/pytz/asia-famagusta.txt new file mode 100644 index 0000000..2222518 --- /dev/null +++ b/desk/gub/lib/pytz/asia-famagusta.txt @@ -0,0 +1,128 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:16,LMT +1921-11-13T21:44:12,+02:00,EET +1975-04-12T22:00:00,+03:00,EEST +1975-10-11T21:00:00,+02:00,EET +1976-05-14T22:00:00,+03:00,EEST +1976-10-10T21:00:00,+02:00,EET +1977-04-02T22:00:00,+03:00,EEST +1977-09-24T21:00:00,+02:00,EET +1978-04-01T22:00:00,+03:00,EEST +1978-10-01T21:00:00,+02:00,EET +1979-03-31T22:00:00,+03:00,EEST +1979-09-29T21:00:00,+02:00,EET +1980-04-05T22:00:00,+03:00,EEST +1980-09-27T21:00:00,+02:00,EET +1981-03-28T22:00:00,+03:00,EEST +1981-09-26T21:00:00,+02:00,EET +1982-03-27T22:00:00,+03:00,EEST +1982-09-25T21:00:00,+02:00,EET +1983-03-26T22:00:00,+03:00,EEST +1983-09-24T21:00:00,+02:00,EET +1984-03-24T22:00:00,+03:00,EEST +1984-09-29T21:00:00,+02:00,EET +1985-03-30T22:00:00,+03:00,EEST +1985-09-28T21:00:00,+02:00,EET +1986-03-29T22:00:00,+03:00,EEST +1986-09-27T21:00:00,+02:00,EET +1987-03-28T22:00:00,+03:00,EEST +1987-09-26T21:00:00,+02:00,EET +1988-03-26T22:00:00,+03:00,EEST +1988-09-24T21:00:00,+02:00,EET +1989-03-25T22:00:00,+03:00,EEST +1989-09-23T21:00:00,+02:00,EET +1990-03-24T22:00:00,+03:00,EEST +1990-09-29T21:00:00,+02:00,EET +1991-03-30T22:00:00,+03:00,EEST +1991-09-28T21:00:00,+02:00,EET +1992-03-28T22:00:00,+03:00,EEST +1992-09-26T21:00:00,+02:00,EET +1993-03-27T22:00:00,+03:00,EEST +1993-09-25T21:00:00,+02:00,EET +1994-03-26T22:00:00,+03:00,EEST +1994-09-24T21:00:00,+02:00,EET +1995-03-25T22:00:00,+03:00,EEST +1995-09-23T21:00:00,+02:00,EET +1996-03-30T22:00:00,+03:00,EEST +1996-09-28T21:00:00,+02:00,EET +1997-03-29T22:00:00,+03:00,EEST +1997-09-27T21:00:00,+02:00,EET +1998-03-28T22:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-09-07T21:00:00,+03:00,+03 +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-gaza.txt b/desk/gub/lib/pytz/asia-gaza.txt new file mode 100644 index 0000000..dceef0f --- /dev/null +++ b/desk/gub/lib/pytz/asia-gaza.txt @@ -0,0 +1,152 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:18,LMT +1901-12-13T20:45:52,+02:00,EET +1940-06-01T00:00:00,+03:00,EEST +1940-10-01T00:00:00,+02:00,EET +1940-11-17T00:00:00,+03:00,EEST +1942-11-01T00:00:00,+02:00,EET +1943-04-01T00:00:00,+03:00,EEST +1943-11-01T00:00:00,+02:00,EET +1944-04-01T00:00:00,+03:00,EEST +1944-11-01T00:00:00,+02:00,EET +1945-04-16T00:00:00,+03:00,EEST +1945-11-01T00:00:00,+02:00,EET +1946-04-16T00:00:00,+03:00,EEST +1946-11-01T00:00:00,+02:00,EET +1957-05-09T22:00:00,+03:00,EEST +1957-09-30T21:00:00,+02:00,EET +1958-04-30T22:00:00,+03:00,EEST +1958-09-30T21:00:00,+02:00,EET +1959-04-30T23:00:00,+03:00,EEST +1959-09-30T00:00:00,+02:00,EET +1960-04-30T23:00:00,+03:00,EEST +1960-09-30T00:00:00,+02:00,EET +1961-04-30T23:00:00,+03:00,EEST +1961-09-30T00:00:00,+02:00,EET +1962-04-30T23:00:00,+03:00,EEST +1962-09-30T00:00:00,+02:00,EET +1963-04-30T23:00:00,+03:00,EEST +1963-09-30T00:00:00,+02:00,EET +1964-04-30T23:00:00,+03:00,EEST +1964-09-30T00:00:00,+02:00,EET +1965-04-30T23:00:00,+03:00,EEST +1965-09-30T00:00:00,+02:00,EET +1966-04-30T23:00:00,+03:00,EEST +1966-10-01T00:00:00,+02:00,EET +1967-04-30T23:00:00,+03:00,EEST +1967-06-04T21:00:00,+02:00,IST +1974-07-06T22:00:00,+03:00,IDT +1974-10-12T21:00:00,+02:00,IST +1975-04-19T22:00:00,+03:00,IDT +1975-08-30T21:00:00,+02:00,IST +1980-08-02T22:00:00,+03:00,IDT +1980-09-13T22:00:00,+02:00,IST +1984-05-05T22:00:00,+03:00,IDT +1984-08-25T22:00:00,+02:00,IST +1985-04-13T22:00:00,+03:00,IDT +1985-08-31T21:00:00,+02:00,IST +1986-05-17T22:00:00,+03:00,IDT +1986-09-06T21:00:00,+02:00,IST +1987-04-14T22:00:00,+03:00,IDT +1987-09-12T21:00:00,+02:00,IST +1988-04-09T22:00:00,+03:00,IDT +1988-09-03T21:00:00,+02:00,IST +1989-04-29T22:00:00,+03:00,IDT +1989-09-02T21:00:00,+02:00,IST +1990-03-24T22:00:00,+03:00,IDT +1990-08-25T21:00:00,+02:00,IST +1991-03-23T22:00:00,+03:00,IDT +1991-08-31T21:00:00,+02:00,IST +1992-03-28T22:00:00,+03:00,IDT +1992-09-05T21:00:00,+02:00,IST +1993-04-01T22:00:00,+03:00,IDT +1993-09-04T21:00:00,+02:00,IST +1994-03-31T22:00:00,+03:00,IDT +1994-08-27T21:00:00,+02:00,IST +1995-03-30T22:00:00,+03:00,IDT +1995-09-02T21:00:00,+02:00,IST +1995-12-31T22:00:00,+02:00,EET +1996-04-04T22:00:00,+03:00,EEST +1996-09-19T22:00:00,+02:00,EET +1997-04-03T22:00:00,+03:00,EEST +1997-09-18T22:00:00,+02:00,EET +1998-04-02T22:00:00,+03:00,EEST +1998-09-17T22:00:00,+02:00,EET +1999-04-15T22:00:00,+03:00,EEST +1999-10-14T21:00:00,+02:00,EET +2000-04-20T22:00:00,+03:00,EEST +2000-10-19T21:00:00,+02:00,EET +2001-04-19T22:00:00,+03:00,EEST +2001-10-18T21:00:00,+02:00,EET +2002-04-18T22:00:00,+03:00,EEST +2002-10-17T21:00:00,+02:00,EET +2003-04-17T22:00:00,+03:00,EEST +2003-10-16T21:00:00,+02:00,EET +2004-04-15T22:00:00,+03:00,EEST +2004-09-30T22:00:00,+02:00,EET +2005-04-14T22:00:00,+03:00,EEST +2005-10-03T23:00:00,+02:00,EET +2006-03-31T22:00:00,+03:00,EEST +2006-09-21T21:00:00,+02:00,EET +2007-03-31T22:00:00,+03:00,EEST +2007-09-12T23:00:00,+02:00,EET +2008-03-27T22:00:00,+03:00,EEST +2008-08-28T21:00:00,+02:00,EET +2009-03-26T22:00:00,+03:00,EEST +2009-09-03T22:00:00,+02:00,EET +2010-03-26T22:01:00,+03:00,EEST +2010-08-10T21:00:00,+02:00,EET +2011-03-31T22:01:00,+03:00,EEST +2011-07-31T21:00:00,+02:00,EET +2012-03-29T22:00:00,+03:00,EEST +2012-09-20T22:00:00,+02:00,EET +2013-03-28T22:00:00,+03:00,EEST +2013-09-26T21:00:00,+02:00,EET +2014-03-27T22:00:00,+03:00,EEST +2014-10-23T21:00:00,+02:00,EET +2015-03-27T22:00:00,+03:00,EEST +2015-10-22T22:00:00,+02:00,EET +2016-03-25T23:00:00,+03:00,EEST +2016-10-28T22:00:00,+02:00,EET +2017-03-24T23:00:00,+03:00,EEST +2017-10-27T22:00:00,+02:00,EET +2018-03-23T23:00:00,+03:00,EEST +2018-10-26T22:00:00,+02:00,EET +2019-03-28T22:00:00,+03:00,EEST +2019-10-25T21:00:00,+02:00,EET +2020-03-27T22:00:00,+03:00,EEST +2020-10-23T22:00:00,+02:00,EET +2021-03-26T22:00:00,+03:00,EEST +2021-10-28T22:00:00,+02:00,EET +2022-03-26T22:00:00,+03:00,EEST +2022-10-28T23:00:00,+02:00,EET +2023-04-29T00:00:00,+03:00,EEST +2023-10-27T23:00:00,+02:00,EET +2024-04-20T00:00:00,+03:00,EEST +2024-10-25T23:00:00,+02:00,EET +2025-04-12T00:00:00,+03:00,EEST +2025-10-24T23:00:00,+02:00,EET +2026-03-28T00:00:00,+03:00,EEST +2026-10-23T23:00:00,+02:00,EET +2027-03-27T00:00:00,+03:00,EEST +2027-10-29T23:00:00,+02:00,EET +2028-03-25T00:00:00,+03:00,EEST +2028-10-27T23:00:00,+02:00,EET +2029-03-24T00:00:00,+03:00,EEST +2029-10-26T23:00:00,+02:00,EET +2030-03-30T00:00:00,+03:00,EEST +2030-10-25T23:00:00,+02:00,EET +2031-03-29T00:00:00,+03:00,EEST +2031-10-24T23:00:00,+02:00,EET +2032-03-27T00:00:00,+03:00,EEST +2032-10-29T23:00:00,+02:00,EET +2033-03-26T00:00:00,+03:00,EEST +2033-10-28T23:00:00,+02:00,EET +2034-03-25T00:00:00,+03:00,EEST +2034-10-27T23:00:00,+02:00,EET +2035-03-24T00:00:00,+03:00,EEST +2035-10-26T23:00:00,+02:00,EET +2036-03-29T00:00:00,+03:00,EEST +2036-10-17T23:00:00,+02:00,EET +2037-03-28T00:00:00,+03:00,EEST +2037-10-09T23:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-harbin.txt b/desk/gub/lib/pytz/asia-harbin.txt new file mode 100644 index 0000000..27376f6 --- /dev/null +++ b/desk/gub/lib/pytz/asia-harbin.txt @@ -0,0 +1,31 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:06,LMT +1901-12-13T20:45:52,+08:00,CST +1919-04-12T16:00:00,+09:00,CDT +1919-09-30T15:00:00,+08:00,CST +1940-05-31T16:00:00,+09:00,CDT +1940-10-12T15:00:00,+08:00,CST +1941-03-14T16:00:00,+09:00,CDT +1941-11-01T15:00:00,+08:00,CST +1942-01-30T16:00:00,+09:00,CDT +1945-09-01T15:00:00,+08:00,CST +1946-05-14T16:00:00,+09:00,CDT +1946-09-30T15:00:00,+08:00,CST +1947-04-14T16:00:00,+09:00,CDT +1947-10-31T15:00:00,+08:00,CST +1948-04-30T16:00:00,+09:00,CDT +1948-09-30T15:00:00,+08:00,CST +1949-04-30T16:00:00,+09:00,CDT +1949-05-27T15:00:00,+08:00,CST +1986-05-03T18:00:00,+09:00,CDT +1986-09-13T17:00:00,+08:00,CST +1987-04-11T18:00:00,+09:00,CDT +1987-09-12T17:00:00,+08:00,CST +1988-04-16T18:00:00,+09:00,CDT +1988-09-10T17:00:00,+08:00,CST +1989-04-15T18:00:00,+09:00,CDT +1989-09-16T17:00:00,+08:00,CST +1990-04-14T18:00:00,+09:00,CDT +1990-09-15T17:00:00,+08:00,CST +1991-04-13T18:00:00,+09:00,CDT +1991-09-14T17:00:00,+08:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-hebron.txt b/desk/gub/lib/pytz/asia-hebron.txt new file mode 100644 index 0000000..3109bea --- /dev/null +++ b/desk/gub/lib/pytz/asia-hebron.txt @@ -0,0 +1,154 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:20,LMT +1901-12-13T20:45:52,+02:00,EET +1940-06-01T00:00:00,+03:00,EEST +1940-10-01T00:00:00,+02:00,EET +1940-11-17T00:00:00,+03:00,EEST +1942-11-01T00:00:00,+02:00,EET +1943-04-01T00:00:00,+03:00,EEST +1943-11-01T00:00:00,+02:00,EET +1944-04-01T00:00:00,+03:00,EEST +1944-11-01T00:00:00,+02:00,EET +1945-04-16T00:00:00,+03:00,EEST +1945-11-01T00:00:00,+02:00,EET +1946-04-16T00:00:00,+03:00,EEST +1946-11-01T00:00:00,+02:00,EET +1957-05-09T22:00:00,+03:00,EEST +1957-09-30T21:00:00,+02:00,EET +1958-04-30T22:00:00,+03:00,EEST +1958-09-30T21:00:00,+02:00,EET +1959-04-30T23:00:00,+03:00,EEST +1959-09-30T00:00:00,+02:00,EET +1960-04-30T23:00:00,+03:00,EEST +1960-09-30T00:00:00,+02:00,EET +1961-04-30T23:00:00,+03:00,EEST +1961-09-30T00:00:00,+02:00,EET +1962-04-30T23:00:00,+03:00,EEST +1962-09-30T00:00:00,+02:00,EET +1963-04-30T23:00:00,+03:00,EEST +1963-09-30T00:00:00,+02:00,EET +1964-04-30T23:00:00,+03:00,EEST +1964-09-30T00:00:00,+02:00,EET +1965-04-30T23:00:00,+03:00,EEST +1965-09-30T00:00:00,+02:00,EET +1966-04-30T23:00:00,+03:00,EEST +1966-10-01T00:00:00,+02:00,EET +1967-04-30T23:00:00,+03:00,EEST +1967-06-04T21:00:00,+02:00,IST +1974-07-06T22:00:00,+03:00,IDT +1974-10-12T21:00:00,+02:00,IST +1975-04-19T22:00:00,+03:00,IDT +1975-08-30T21:00:00,+02:00,IST +1980-08-02T22:00:00,+03:00,IDT +1980-09-13T22:00:00,+02:00,IST +1984-05-05T22:00:00,+03:00,IDT +1984-08-25T22:00:00,+02:00,IST +1985-04-13T22:00:00,+03:00,IDT +1985-08-31T21:00:00,+02:00,IST +1986-05-17T22:00:00,+03:00,IDT +1986-09-06T21:00:00,+02:00,IST +1987-04-14T22:00:00,+03:00,IDT +1987-09-12T21:00:00,+02:00,IST +1988-04-09T22:00:00,+03:00,IDT +1988-09-03T21:00:00,+02:00,IST +1989-04-29T22:00:00,+03:00,IDT +1989-09-02T21:00:00,+02:00,IST +1990-03-24T22:00:00,+03:00,IDT +1990-08-25T21:00:00,+02:00,IST +1991-03-23T22:00:00,+03:00,IDT +1991-08-31T21:00:00,+02:00,IST +1992-03-28T22:00:00,+03:00,IDT +1992-09-05T21:00:00,+02:00,IST +1993-04-01T22:00:00,+03:00,IDT +1993-09-04T21:00:00,+02:00,IST +1994-03-31T22:00:00,+03:00,IDT +1994-08-27T21:00:00,+02:00,IST +1995-03-30T22:00:00,+03:00,IDT +1995-09-02T21:00:00,+02:00,IST +1995-12-31T22:00:00,+02:00,EET +1996-04-04T22:00:00,+03:00,EEST +1996-09-19T22:00:00,+02:00,EET +1997-04-03T22:00:00,+03:00,EEST +1997-09-18T22:00:00,+02:00,EET +1998-04-02T22:00:00,+03:00,EEST +1998-09-17T22:00:00,+02:00,EET +1999-04-15T22:00:00,+03:00,EEST +1999-10-14T21:00:00,+02:00,EET +2000-04-20T22:00:00,+03:00,EEST +2000-10-19T21:00:00,+02:00,EET +2001-04-19T22:00:00,+03:00,EEST +2001-10-18T21:00:00,+02:00,EET +2002-04-18T22:00:00,+03:00,EEST +2002-10-17T21:00:00,+02:00,EET +2003-04-17T22:00:00,+03:00,EEST +2003-10-16T21:00:00,+02:00,EET +2004-04-15T22:00:00,+03:00,EEST +2004-09-30T22:00:00,+02:00,EET +2005-04-14T22:00:00,+03:00,EEST +2005-10-03T23:00:00,+02:00,EET +2006-03-31T22:00:00,+03:00,EEST +2006-09-21T21:00:00,+02:00,EET +2007-03-31T22:00:00,+03:00,EEST +2007-09-12T23:00:00,+02:00,EET +2008-03-27T22:00:00,+03:00,EEST +2008-08-31T21:00:00,+02:00,EET +2009-03-26T22:00:00,+03:00,EEST +2009-09-03T22:00:00,+02:00,EET +2010-03-25T22:00:00,+03:00,EEST +2010-08-10T21:00:00,+02:00,EET +2011-03-31T22:01:00,+03:00,EEST +2011-07-31T21:00:00,+02:00,EET +2011-08-29T22:00:00,+03:00,EEST +2011-09-29T21:00:00,+02:00,EET +2012-03-29T22:00:00,+03:00,EEST +2012-09-20T22:00:00,+02:00,EET +2013-03-28T22:00:00,+03:00,EEST +2013-09-26T21:00:00,+02:00,EET +2014-03-27T22:00:00,+03:00,EEST +2014-10-23T21:00:00,+02:00,EET +2015-03-27T22:00:00,+03:00,EEST +2015-10-22T22:00:00,+02:00,EET +2016-03-25T23:00:00,+03:00,EEST +2016-10-28T22:00:00,+02:00,EET +2017-03-24T23:00:00,+03:00,EEST +2017-10-27T22:00:00,+02:00,EET +2018-03-23T23:00:00,+03:00,EEST +2018-10-26T22:00:00,+02:00,EET +2019-03-28T22:00:00,+03:00,EEST +2019-10-25T21:00:00,+02:00,EET +2020-03-27T22:00:00,+03:00,EEST +2020-10-23T22:00:00,+02:00,EET +2021-03-26T22:00:00,+03:00,EEST +2021-10-28T22:00:00,+02:00,EET +2022-03-26T22:00:00,+03:00,EEST +2022-10-28T23:00:00,+02:00,EET +2023-04-29T00:00:00,+03:00,EEST +2023-10-27T23:00:00,+02:00,EET +2024-04-20T00:00:00,+03:00,EEST +2024-10-25T23:00:00,+02:00,EET +2025-04-12T00:00:00,+03:00,EEST +2025-10-24T23:00:00,+02:00,EET +2026-03-28T00:00:00,+03:00,EEST +2026-10-23T23:00:00,+02:00,EET +2027-03-27T00:00:00,+03:00,EEST +2027-10-29T23:00:00,+02:00,EET +2028-03-25T00:00:00,+03:00,EEST +2028-10-27T23:00:00,+02:00,EET +2029-03-24T00:00:00,+03:00,EEST +2029-10-26T23:00:00,+02:00,EET +2030-03-30T00:00:00,+03:00,EEST +2030-10-25T23:00:00,+02:00,EET +2031-03-29T00:00:00,+03:00,EEST +2031-10-24T23:00:00,+02:00,EET +2032-03-27T00:00:00,+03:00,EEST +2032-10-29T23:00:00,+02:00,EET +2033-03-26T00:00:00,+03:00,EEST +2033-10-28T23:00:00,+02:00,EET +2034-03-25T00:00:00,+03:00,EEST +2034-10-27T23:00:00,+02:00,EET +2035-03-24T00:00:00,+03:00,EEST +2035-10-26T23:00:00,+02:00,EET +2036-03-29T00:00:00,+03:00,EEST +2036-10-17T23:00:00,+02:00,EET +2037-03-28T00:00:00,+03:00,EEST +2037-10-09T23:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-ho-chi-minh.txt b/desk/gub/lib/pytz/asia-ho-chi-minh.txt new file mode 100644 index 0000000..cf7e33a --- /dev/null +++ b/desk/gub/lib/pytz/asia-ho-chi-minh.txt @@ -0,0 +1,11 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:07,LMT +1906-06-30T16:53:30,+07:07,PLMT +1911-04-30T16:53:30,+07:00,+07 +1942-12-31T16:00:00,+08:00,+08 +1945-03-14T15:00:00,+09:00,+09 +1945-09-01T15:00:00,+07:00,+07 +1947-03-31T17:00:00,+08:00,+08 +1955-06-30T17:00:00,+07:00,+07 +1959-12-31T16:00:00,+08:00,+08 +1975-06-12T16:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-hong-kong.txt b/desk/gub/lib/pytz/asia-hong-kong.txt new file mode 100644 index 0000000..ada1618 --- /dev/null +++ b/desk/gub/lib/pytz/asia-hong-kong.txt @@ -0,0 +1,71 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:37,LMT +1904-10-29T17:00:00,+08:00,HKT +1941-06-14T19:00:00,+09:00,HKST +1941-09-30T19:00:00,+08:30,HKWT +1941-12-24T15:30:00,+09:00,JST +1945-11-17T17:00:00,+08:00,HKT +1946-04-20T16:00:00,+09:00,HKST +1946-11-30T19:30:00,+08:00,HKT +1947-04-12T19:30:00,+09:00,HKST +1947-11-29T19:30:00,+08:00,HKT +1948-05-01T19:30:00,+09:00,HKST +1948-10-30T19:30:00,+08:00,HKT +1949-04-02T19:30:00,+09:00,HKST +1949-10-29T19:30:00,+08:00,HKT +1950-04-01T19:30:00,+09:00,HKST +1950-10-28T19:30:00,+08:00,HKT +1951-03-31T19:30:00,+09:00,HKST +1951-10-27T19:30:00,+08:00,HKT +1952-04-05T19:30:00,+09:00,HKST +1952-11-01T19:30:00,+08:00,HKT +1953-04-04T19:30:00,+09:00,HKST +1953-10-31T18:30:00,+08:00,HKT +1954-03-20T19:30:00,+09:00,HKST +1954-10-30T18:30:00,+08:00,HKT +1955-03-19T19:30:00,+09:00,HKST +1955-11-05T18:30:00,+08:00,HKT +1956-03-17T19:30:00,+09:00,HKST +1956-11-03T18:30:00,+08:00,HKT +1957-03-23T19:30:00,+09:00,HKST +1957-11-02T18:30:00,+08:00,HKT +1958-03-22T19:30:00,+09:00,HKST +1958-11-01T18:30:00,+08:00,HKT +1959-03-21T19:30:00,+09:00,HKST +1959-10-31T18:30:00,+08:00,HKT +1960-03-19T19:30:00,+09:00,HKST +1960-11-05T18:30:00,+08:00,HKT +1961-03-18T19:30:00,+09:00,HKST +1961-11-04T18:30:00,+08:00,HKT +1962-03-17T19:30:00,+09:00,HKST +1962-11-03T18:30:00,+08:00,HKT +1963-03-23T19:30:00,+09:00,HKST +1963-11-02T18:30:00,+08:00,HKT +1964-03-21T19:30:00,+09:00,HKST +1964-10-31T18:30:00,+08:00,HKT +1965-04-17T19:30:00,+09:00,HKST +1965-10-16T18:30:00,+08:00,HKT +1966-04-16T19:30:00,+09:00,HKST +1966-10-15T18:30:00,+08:00,HKT +1967-04-15T19:30:00,+09:00,HKST +1967-10-21T18:30:00,+08:00,HKT +1968-04-20T19:30:00,+09:00,HKST +1968-10-19T18:30:00,+08:00,HKT +1969-04-19T19:30:00,+09:00,HKST +1969-10-18T18:30:00,+08:00,HKT +1970-04-18T19:30:00,+09:00,HKST +1970-10-17T18:30:00,+08:00,HKT +1971-04-17T19:30:00,+09:00,HKST +1971-10-16T18:30:00,+08:00,HKT +1972-04-15T19:30:00,+09:00,HKST +1972-10-21T18:30:00,+08:00,HKT +1973-04-21T19:30:00,+09:00,HKST +1973-10-20T18:30:00,+08:00,HKT +1973-12-29T19:30:00,+09:00,HKST +1974-10-19T18:30:00,+08:00,HKT +1975-04-19T19:30:00,+09:00,HKST +1975-10-18T18:30:00,+08:00,HKT +1976-04-17T19:30:00,+09:00,HKST +1976-10-16T18:30:00,+08:00,HKT +1979-05-12T19:30:00,+09:00,HKST +1979-10-20T18:30:00,+08:00,HKT \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-hovd.txt b/desk/gub/lib/pytz/asia-hovd.txt new file mode 100644 index 0000000..af7bf3a --- /dev/null +++ b/desk/gub/lib/pytz/asia-hovd.txt @@ -0,0 +1,52 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:07,LMT +1905-07-31T17:53:24,+06:00,+06 +1977-12-31T18:00:00,+07:00,+07 +1983-03-31T17:00:00,+08:00,+08 +1983-09-30T16:00:00,+07:00,+07 +1984-03-31T17:00:00,+08:00,+08 +1984-09-29T16:00:00,+07:00,+07 +1985-03-30T17:00:00,+08:00,+08 +1985-09-28T16:00:00,+07:00,+07 +1986-03-29T17:00:00,+08:00,+08 +1986-09-27T16:00:00,+07:00,+07 +1987-03-28T17:00:00,+08:00,+08 +1987-09-26T16:00:00,+07:00,+07 +1988-03-26T17:00:00,+08:00,+08 +1988-09-24T16:00:00,+07:00,+07 +1989-03-25T17:00:00,+08:00,+08 +1989-09-23T16:00:00,+07:00,+07 +1990-03-24T17:00:00,+08:00,+08 +1990-09-29T16:00:00,+07:00,+07 +1991-03-30T17:00:00,+08:00,+08 +1991-09-28T16:00:00,+07:00,+07 +1992-03-28T17:00:00,+08:00,+08 +1992-09-26T16:00:00,+07:00,+07 +1993-03-27T17:00:00,+08:00,+08 +1993-09-25T16:00:00,+07:00,+07 +1994-03-26T17:00:00,+08:00,+08 +1994-09-24T16:00:00,+07:00,+07 +1995-03-25T17:00:00,+08:00,+08 +1995-09-23T16:00:00,+07:00,+07 +1996-03-30T17:00:00,+08:00,+08 +1996-09-28T16:00:00,+07:00,+07 +1997-03-29T17:00:00,+08:00,+08 +1997-09-27T16:00:00,+07:00,+07 +1998-03-28T17:00:00,+08:00,+08 +1998-09-26T16:00:00,+07:00,+07 +2001-04-27T19:00:00,+08:00,+08 +2001-09-28T18:00:00,+07:00,+07 +2002-03-29T19:00:00,+08:00,+08 +2002-09-27T18:00:00,+07:00,+07 +2003-03-28T19:00:00,+08:00,+08 +2003-09-26T18:00:00,+07:00,+07 +2004-03-26T19:00:00,+08:00,+08 +2004-09-24T18:00:00,+07:00,+07 +2005-03-25T19:00:00,+08:00,+08 +2005-09-23T18:00:00,+07:00,+07 +2006-03-24T19:00:00,+08:00,+08 +2006-09-29T18:00:00,+07:00,+07 +2015-03-27T19:00:00,+08:00,+08 +2015-09-25T16:00:00,+07:00,+07 +2016-03-25T19:00:00,+08:00,+08 +2016-09-23T16:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-irkutsk.txt b/desk/gub/lib/pytz/asia-irkutsk.txt new file mode 100644 index 0000000..1c1b47c --- /dev/null +++ b/desk/gub/lib/pytz/asia-irkutsk.txt @@ -0,0 +1,68 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:57,LMT +1901-12-13T20:45:52,+06:57,IMT +1920-01-24T17:02:55,+07:00,+07 +1930-06-20T17:00:00,+08:00,+08 +1981-03-31T16:00:00,+09:00,+09 +1981-09-30T15:00:00,+08:00,+08 +1982-03-31T16:00:00,+09:00,+09 +1982-09-30T15:00:00,+08:00,+08 +1983-03-31T16:00:00,+09:00,+09 +1983-09-30T15:00:00,+08:00,+08 +1984-03-31T16:00:00,+09:00,+09 +1984-09-29T18:00:00,+08:00,+08 +1985-03-30T18:00:00,+09:00,+09 +1985-09-28T18:00:00,+08:00,+08 +1986-03-29T18:00:00,+09:00,+09 +1986-09-27T18:00:00,+08:00,+08 +1987-03-28T18:00:00,+09:00,+09 +1987-09-26T18:00:00,+08:00,+08 +1988-03-26T18:00:00,+09:00,+09 +1988-09-24T18:00:00,+08:00,+08 +1989-03-25T18:00:00,+09:00,+09 +1989-09-23T18:00:00,+08:00,+08 +1990-03-24T18:00:00,+09:00,+09 +1990-09-29T18:00:00,+08:00,+08 +1991-03-30T18:00:00,+08:00,+08 +1991-09-28T19:00:00,+07:00,+07 +1992-01-18T19:00:00,+08:00,+08 +1992-03-28T18:00:00,+09:00,+09 +1992-09-26T18:00:00,+08:00,+08 +1993-03-27T18:00:00,+09:00,+09 +1993-09-25T18:00:00,+08:00,+08 +1994-03-26T18:00:00,+09:00,+09 +1994-09-24T18:00:00,+08:00,+08 +1995-03-25T18:00:00,+09:00,+09 +1995-09-23T18:00:00,+08:00,+08 +1996-03-30T18:00:00,+09:00,+09 +1996-10-26T18:00:00,+08:00,+08 +1997-03-29T18:00:00,+09:00,+09 +1997-10-25T18:00:00,+08:00,+08 +1998-03-28T18:00:00,+09:00,+09 +1998-10-24T18:00:00,+08:00,+08 +1999-03-27T18:00:00,+09:00,+09 +1999-10-30T18:00:00,+08:00,+08 +2000-03-25T18:00:00,+09:00,+09 +2000-10-28T18:00:00,+08:00,+08 +2001-03-24T18:00:00,+09:00,+09 +2001-10-27T18:00:00,+08:00,+08 +2002-03-30T18:00:00,+09:00,+09 +2002-10-26T18:00:00,+08:00,+08 +2003-03-29T18:00:00,+09:00,+09 +2003-10-25T18:00:00,+08:00,+08 +2004-03-27T18:00:00,+09:00,+09 +2004-10-30T18:00:00,+08:00,+08 +2005-03-26T18:00:00,+09:00,+09 +2005-10-29T18:00:00,+08:00,+08 +2006-03-25T18:00:00,+09:00,+09 +2006-10-28T18:00:00,+08:00,+08 +2007-03-24T18:00:00,+09:00,+09 +2007-10-27T18:00:00,+08:00,+08 +2008-03-29T18:00:00,+09:00,+09 +2008-10-25T18:00:00,+08:00,+08 +2009-03-28T18:00:00,+09:00,+09 +2009-10-24T18:00:00,+08:00,+08 +2010-03-27T18:00:00,+09:00,+09 +2010-10-30T18:00:00,+08:00,+08 +2011-03-26T18:00:00,+09:00,+09 +2014-10-25T17:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-istanbul.txt b/desk/gub/lib/pytz/asia-istanbul.txt new file mode 100644 index 0000000..3fd2a49 --- /dev/null +++ b/desk/gub/lib/pytz/asia-istanbul.txt @@ -0,0 +1,117 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:56,LMT +1901-12-13T20:45:52,+01:57,IMT +1910-09-30T22:03:04,+02:00,EET +1916-04-30T22:00:00,+03:00,EEST +1916-09-30T21:00:00,+02:00,EET +1920-03-27T22:00:00,+03:00,EEST +1920-10-24T21:00:00,+02:00,EET +1921-04-02T22:00:00,+03:00,EEST +1921-10-02T21:00:00,+02:00,EET +1922-03-25T22:00:00,+03:00,EEST +1922-10-07T21:00:00,+02:00,EET +1924-05-12T22:00:00,+03:00,EEST +1924-09-30T21:00:00,+02:00,EET +1925-04-30T22:00:00,+03:00,EEST +1925-09-30T21:00:00,+02:00,EET +1940-06-30T22:00:00,+03:00,EEST +1940-10-05T21:00:00,+02:00,EET +1940-11-30T22:00:00,+03:00,EEST +1941-09-20T21:00:00,+02:00,EET +1942-03-31T22:00:00,+03:00,EEST +1945-10-07T21:00:00,+02:00,EET +1946-05-31T22:00:00,+03:00,EEST +1946-09-30T21:00:00,+02:00,EET +1947-04-19T22:00:00,+03:00,EEST +1947-10-04T21:00:00,+02:00,EET +1948-04-17T22:00:00,+03:00,EEST +1948-10-02T21:00:00,+02:00,EET +1949-04-09T22:00:00,+03:00,EEST +1949-10-01T21:00:00,+02:00,EET +1950-04-15T22:00:00,+03:00,EEST +1950-10-07T21:00:00,+02:00,EET +1951-04-21T22:00:00,+03:00,EEST +1951-10-06T21:00:00,+02:00,EET +1962-07-14T22:00:00,+03:00,EEST +1963-10-29T21:00:00,+02:00,EET +1964-05-14T22:00:00,+03:00,EEST +1964-09-30T21:00:00,+02:00,EET +1973-06-02T23:00:00,+03:00,EEST +1973-11-03T23:00:00,+02:00,EET +1974-03-31T00:00:00,+03:00,EEST +1974-11-02T23:00:00,+02:00,EET +1975-03-22T00:00:00,+03:00,EEST +1975-11-01T23:00:00,+02:00,EET +1976-03-21T00:00:00,+03:00,EEST +1976-10-30T23:00:00,+02:00,EET +1977-04-03T00:00:00,+03:00,EEST +1977-10-15T23:00:00,+02:00,EET +1978-04-02T00:00:00,+03:00,EEST +1978-06-28T21:00:00,+03:00,+03 +1983-07-30T23:00:00,+04:00,+04 +1983-10-01T22:00:00,+03:00,+03 +1984-10-31T23:00:00,+02:00,EET +1985-04-19T23:00:00,+03:00,EEST +1985-09-27T23:00:00,+02:00,EET +1986-03-29T23:00:00,+03:00,EEST +1986-09-27T23:00:00,+02:00,EET +1987-03-28T23:00:00,+03:00,EEST +1987-09-26T23:00:00,+02:00,EET +1988-03-26T23:00:00,+03:00,EEST +1988-09-24T23:00:00,+02:00,EET +1989-03-25T23:00:00,+03:00,EEST +1989-09-23T23:00:00,+02:00,EET +1990-03-24T23:00:00,+03:00,EEST +1990-09-29T23:00:00,+02:00,EET +1991-03-30T23:00:00,+03:00,EEST +1991-09-28T23:00:00,+02:00,EET +1992-03-28T23:00:00,+03:00,EEST +1992-09-26T23:00:00,+02:00,EET +1993-03-27T23:00:00,+03:00,EEST +1993-09-25T23:00:00,+02:00,EET +1994-03-19T23:00:00,+03:00,EEST +1994-09-24T23:00:00,+02:00,EET +1995-03-25T23:00:00,+03:00,EEST +1995-09-23T23:00:00,+02:00,EET +1996-03-30T23:00:00,+03:00,EEST +1996-10-26T23:00:00,+02:00,EET +1997-03-29T23:00:00,+03:00,EEST +1997-10-25T23:00:00,+02:00,EET +1998-03-28T23:00:00,+03:00,EEST +1998-10-24T23:00:00,+02:00,EET +1999-03-27T23:00:00,+03:00,EEST +1999-10-30T23:00:00,+02:00,EET +2000-03-25T23:00:00,+03:00,EEST +2000-10-28T23:00:00,+02:00,EET +2001-03-24T23:00:00,+03:00,EEST +2001-10-27T23:00:00,+02:00,EET +2002-03-30T23:00:00,+03:00,EEST +2002-10-26T23:00:00,+02:00,EET +2003-03-29T23:00:00,+03:00,EEST +2003-10-25T23:00:00,+02:00,EET +2004-03-27T23:00:00,+03:00,EEST +2004-10-30T23:00:00,+02:00,EET +2005-03-26T23:00:00,+03:00,EEST +2005-10-29T23:00:00,+02:00,EET +2006-03-25T23:00:00,+03:00,EEST +2006-10-28T23:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-28T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-31T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-11-08T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-09-06T21:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-jakarta.txt b/desk/gub/lib/pytz/asia-jakarta.txt new file mode 100644 index 0000000..4ed1141 --- /dev/null +++ b/desk/gub/lib/pytz/asia-jakarta.txt @@ -0,0 +1,10 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:07,LMT +1901-12-13T20:45:52,+07:07,BMT +1923-12-31T16:40:00,+07:20,+0720 +1932-10-31T16:40:00,+07:30,+0730 +1942-03-22T16:30:00,+09:00,+09 +1945-09-22T15:00:00,+07:30,+0730 +1948-04-30T16:30:00,+08:00,+08 +1950-04-30T16:00:00,+07:30,+0730 +1963-12-31T16:30:00,+07:00,WIB \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-jayapura.txt b/desk/gub/lib/pytz/asia-jayapura.txt new file mode 100644 index 0000000..a2626c4 --- /dev/null +++ b/desk/gub/lib/pytz/asia-jayapura.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:23,LMT +1932-10-31T14:37:12,+09:00,+09 +1944-08-31T15:00:00,+09:30,+0930 +1963-12-31T14:30:00,+09:00,WIT \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-jerusalem.txt b/desk/gub/lib/pytz/asia-jerusalem.txt new file mode 100644 index 0000000..66d21f3 --- /dev/null +++ b/desk/gub/lib/pytz/asia-jerusalem.txt @@ -0,0 +1,151 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:21,LMT +1901-12-13T20:45:52,+02:21,JMT +1917-12-31T21:39:20,+02:00,IST +1940-06-01T00:00:00,+03:00,IDT +1940-10-01T00:00:00,+02:00,IST +1940-11-17T00:00:00,+03:00,IDT +1942-11-01T00:00:00,+02:00,IST +1943-04-01T00:00:00,+03:00,IDT +1943-11-01T00:00:00,+02:00,IST +1944-04-01T00:00:00,+03:00,IDT +1944-11-01T00:00:00,+02:00,IST +1945-04-16T00:00:00,+03:00,IDT +1945-11-01T00:00:00,+02:00,IST +1946-04-16T00:00:00,+03:00,IDT +1946-11-01T00:00:00,+02:00,IST +1948-05-23T00:00:00,+04:00,IDDT +1948-09-01T00:00:00,+03:00,IDT +1948-11-01T00:00:00,+02:00,IST +1949-05-01T00:00:00,+03:00,IDT +1949-11-01T00:00:00,+02:00,IST +1950-04-16T00:00:00,+03:00,IDT +1950-09-15T00:00:00,+02:00,IST +1951-04-01T00:00:00,+03:00,IDT +1951-11-11T00:00:00,+02:00,IST +1952-04-20T00:00:00,+03:00,IDT +1952-10-19T00:00:00,+02:00,IST +1953-04-12T00:00:00,+03:00,IDT +1953-09-13T00:00:00,+02:00,IST +1954-06-13T00:00:00,+03:00,IDT +1954-09-12T00:00:00,+02:00,IST +1955-06-12T00:00:00,+03:00,IDT +1955-09-11T00:00:00,+02:00,IST +1956-06-03T00:00:00,+03:00,IDT +1956-09-30T00:00:00,+02:00,IST +1957-04-28T00:00:00,+03:00,IDT +1957-09-22T00:00:00,+02:00,IST +1974-07-06T22:00:00,+03:00,IDT +1974-10-12T21:00:00,+02:00,IST +1975-04-19T22:00:00,+03:00,IDT +1975-08-30T21:00:00,+02:00,IST +1980-08-02T22:00:00,+03:00,IDT +1980-09-13T22:00:00,+02:00,IST +1984-05-05T22:00:00,+03:00,IDT +1984-08-25T22:00:00,+02:00,IST +1985-04-13T22:00:00,+03:00,IDT +1985-08-31T21:00:00,+02:00,IST +1986-05-17T22:00:00,+03:00,IDT +1986-09-06T21:00:00,+02:00,IST +1987-04-14T22:00:00,+03:00,IDT +1987-09-12T21:00:00,+02:00,IST +1988-04-09T22:00:00,+03:00,IDT +1988-09-03T21:00:00,+02:00,IST +1989-04-29T22:00:00,+03:00,IDT +1989-09-02T21:00:00,+02:00,IST +1990-03-24T22:00:00,+03:00,IDT +1990-08-25T21:00:00,+02:00,IST +1991-03-23T22:00:00,+03:00,IDT +1991-08-31T21:00:00,+02:00,IST +1992-03-28T22:00:00,+03:00,IDT +1992-09-05T21:00:00,+02:00,IST +1993-04-01T22:00:00,+03:00,IDT +1993-09-04T21:00:00,+02:00,IST +1994-03-31T22:00:00,+03:00,IDT +1994-08-27T21:00:00,+02:00,IST +1995-03-30T22:00:00,+03:00,IDT +1995-09-02T21:00:00,+02:00,IST +1996-03-14T22:00:00,+03:00,IDT +1996-09-15T21:00:00,+02:00,IST +1997-03-20T22:00:00,+03:00,IDT +1997-09-13T21:00:00,+02:00,IST +1998-03-19T22:00:00,+03:00,IDT +1998-09-05T21:00:00,+02:00,IST +1999-04-02T00:00:00,+03:00,IDT +1999-09-02T23:00:00,+02:00,IST +2000-04-14T00:00:00,+03:00,IDT +2000-10-05T22:00:00,+02:00,IST +2001-04-08T23:00:00,+03:00,IDT +2001-09-23T22:00:00,+02:00,IST +2002-03-28T23:00:00,+03:00,IDT +2002-10-06T22:00:00,+02:00,IST +2003-03-27T23:00:00,+03:00,IDT +2003-10-02T22:00:00,+02:00,IST +2004-04-06T23:00:00,+03:00,IDT +2004-09-21T22:00:00,+02:00,IST +2005-04-01T00:00:00,+03:00,IDT +2005-10-08T23:00:00,+02:00,IST +2006-03-31T00:00:00,+03:00,IDT +2006-09-30T23:00:00,+02:00,IST +2007-03-30T00:00:00,+03:00,IDT +2007-09-15T23:00:00,+02:00,IST +2008-03-28T00:00:00,+03:00,IDT +2008-10-04T23:00:00,+02:00,IST +2009-03-27T00:00:00,+03:00,IDT +2009-09-26T23:00:00,+02:00,IST +2010-03-26T00:00:00,+03:00,IDT +2010-09-11T23:00:00,+02:00,IST +2011-04-01T00:00:00,+03:00,IDT +2011-10-01T23:00:00,+02:00,IST +2012-03-30T00:00:00,+03:00,IDT +2012-09-22T23:00:00,+02:00,IST +2013-03-29T00:00:00,+03:00,IDT +2013-10-26T23:00:00,+02:00,IST +2014-03-28T00:00:00,+03:00,IDT +2014-10-25T23:00:00,+02:00,IST +2015-03-27T00:00:00,+03:00,IDT +2015-10-24T23:00:00,+02:00,IST +2016-03-25T00:00:00,+03:00,IDT +2016-10-29T23:00:00,+02:00,IST +2017-03-24T00:00:00,+03:00,IDT +2017-10-28T23:00:00,+02:00,IST +2018-03-23T00:00:00,+03:00,IDT +2018-10-27T23:00:00,+02:00,IST +2019-03-29T00:00:00,+03:00,IDT +2019-10-26T23:00:00,+02:00,IST +2020-03-27T00:00:00,+03:00,IDT +2020-10-24T23:00:00,+02:00,IST +2021-03-26T00:00:00,+03:00,IDT +2021-10-30T23:00:00,+02:00,IST +2022-03-25T00:00:00,+03:00,IDT +2022-10-29T23:00:00,+02:00,IST +2023-03-24T00:00:00,+03:00,IDT +2023-10-28T23:00:00,+02:00,IST +2024-03-29T00:00:00,+03:00,IDT +2024-10-26T23:00:00,+02:00,IST +2025-03-28T00:00:00,+03:00,IDT +2025-10-25T23:00:00,+02:00,IST +2026-03-27T00:00:00,+03:00,IDT +2026-10-24T23:00:00,+02:00,IST +2027-03-26T00:00:00,+03:00,IDT +2027-10-30T23:00:00,+02:00,IST +2028-03-24T00:00:00,+03:00,IDT +2028-10-28T23:00:00,+02:00,IST +2029-03-23T00:00:00,+03:00,IDT +2029-10-27T23:00:00,+02:00,IST +2030-03-29T00:00:00,+03:00,IDT +2030-10-26T23:00:00,+02:00,IST +2031-03-28T00:00:00,+03:00,IDT +2031-10-25T23:00:00,+02:00,IST +2032-03-26T00:00:00,+03:00,IDT +2032-10-30T23:00:00,+02:00,IST +2033-03-25T00:00:00,+03:00,IDT +2033-10-29T23:00:00,+02:00,IST +2034-03-24T00:00:00,+03:00,IDT +2034-10-28T23:00:00,+02:00,IST +2035-03-23T00:00:00,+03:00,IDT +2035-10-27T23:00:00,+02:00,IST +2036-03-28T00:00:00,+03:00,IDT +2036-10-25T23:00:00,+02:00,IST +2037-03-27T00:00:00,+03:00,IDT +2037-10-24T23:00:00,+02:00,IST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-kabul.txt b/desk/gub/lib/pytz/asia-kabul.txt new file mode 100644 index 0000000..e3dcc92 --- /dev/null +++ b/desk/gub/lib/pytz/asia-kabul.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:37,LMT +1901-12-13T20:45:52,+04:00,+04 +1944-12-31T20:00:00,+04:30,+0430 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-kamchatka.txt b/desk/gub/lib/pytz/asia-kamchatka.txt new file mode 100644 index 0000000..036f628 --- /dev/null +++ b/desk/gub/lib/pytz/asia-kamchatka.txt @@ -0,0 +1,66 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:35,LMT +1922-11-09T13:25:24,+11:00,+11 +1930-06-20T13:00:00,+12:00,+12 +1981-03-31T12:00:00,+13:00,+13 +1981-09-30T11:00:00,+12:00,+12 +1982-03-31T12:00:00,+13:00,+13 +1982-09-30T11:00:00,+12:00,+12 +1983-03-31T12:00:00,+13:00,+13 +1983-09-30T11:00:00,+12:00,+12 +1984-03-31T12:00:00,+13:00,+13 +1984-09-29T14:00:00,+12:00,+12 +1985-03-30T14:00:00,+13:00,+13 +1985-09-28T14:00:00,+12:00,+12 +1986-03-29T14:00:00,+13:00,+13 +1986-09-27T14:00:00,+12:00,+12 +1987-03-28T14:00:00,+13:00,+13 +1987-09-26T14:00:00,+12:00,+12 +1988-03-26T14:00:00,+13:00,+13 +1988-09-24T14:00:00,+12:00,+12 +1989-03-25T14:00:00,+13:00,+13 +1989-09-23T14:00:00,+12:00,+12 +1990-03-24T14:00:00,+13:00,+13 +1990-09-29T14:00:00,+12:00,+12 +1991-03-30T14:00:00,+12:00,+12 +1991-09-28T15:00:00,+11:00,+11 +1992-01-18T15:00:00,+12:00,+12 +1992-03-28T14:00:00,+13:00,+13 +1992-09-26T14:00:00,+12:00,+12 +1993-03-27T14:00:00,+13:00,+13 +1993-09-25T14:00:00,+12:00,+12 +1994-03-26T14:00:00,+13:00,+13 +1994-09-24T14:00:00,+12:00,+12 +1995-03-25T14:00:00,+13:00,+13 +1995-09-23T14:00:00,+12:00,+12 +1996-03-30T14:00:00,+13:00,+13 +1996-10-26T14:00:00,+12:00,+12 +1997-03-29T14:00:00,+13:00,+13 +1997-10-25T14:00:00,+12:00,+12 +1998-03-28T14:00:00,+13:00,+13 +1998-10-24T14:00:00,+12:00,+12 +1999-03-27T14:00:00,+13:00,+13 +1999-10-30T14:00:00,+12:00,+12 +2000-03-25T14:00:00,+13:00,+13 +2000-10-28T14:00:00,+12:00,+12 +2001-03-24T14:00:00,+13:00,+13 +2001-10-27T14:00:00,+12:00,+12 +2002-03-30T14:00:00,+13:00,+13 +2002-10-26T14:00:00,+12:00,+12 +2003-03-29T14:00:00,+13:00,+13 +2003-10-25T14:00:00,+12:00,+12 +2004-03-27T14:00:00,+13:00,+13 +2004-10-30T14:00:00,+12:00,+12 +2005-03-26T14:00:00,+13:00,+13 +2005-10-29T14:00:00,+12:00,+12 +2006-03-25T14:00:00,+13:00,+13 +2006-10-28T14:00:00,+12:00,+12 +2007-03-24T14:00:00,+13:00,+13 +2007-10-27T14:00:00,+12:00,+12 +2008-03-29T14:00:00,+13:00,+13 +2008-10-25T14:00:00,+12:00,+12 +2009-03-28T14:00:00,+13:00,+13 +2009-10-24T14:00:00,+12:00,+12 +2010-03-27T14:00:00,+12:00,+12 +2010-10-30T15:00:00,+11:00,+11 +2011-03-26T15:00:00,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-karachi.txt b/desk/gub/lib/pytz/asia-karachi.txt new file mode 100644 index 0000000..4db9cba --- /dev/null +++ b/desk/gub/lib/pytz/asia-karachi.txt @@ -0,0 +1,13 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:28,LMT +1906-12-31T19:31:48,+05:30,+0530 +1942-08-31T18:30:00,+06:30,+0630 +1945-10-14T17:30:00,+05:30,+0530 +1951-09-29T18:30:00,+05:00,+05 +1971-03-25T19:00:00,+05:00,PKT +2002-04-06T19:00:00,+06:00,PKST +2002-10-05T18:00:00,+05:00,PKT +2008-05-31T19:00:00,+06:00,PKST +2008-10-31T18:00:00,+05:00,PKT +2009-04-14T19:00:00,+06:00,PKST +2009-10-31T18:00:00,+05:00,PKT \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-kashgar.txt b/desk/gub/lib/pytz/asia-kashgar.txt new file mode 100644 index 0000000..45a94f4 --- /dev/null +++ b/desk/gub/lib/pytz/asia-kashgar.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:50,LMT +1927-12-31T18:09:40,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-kathmandu.txt b/desk/gub/lib/pytz/asia-kathmandu.txt new file mode 100644 index 0000000..98547e4 --- /dev/null +++ b/desk/gub/lib/pytz/asia-kathmandu.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:41,LMT +1919-12-31T18:18:44,+05:30,+0530 +1985-12-31T18:30:00,+05:45,+0545 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-katmandu.txt b/desk/gub/lib/pytz/asia-katmandu.txt new file mode 100644 index 0000000..98547e4 --- /dev/null +++ b/desk/gub/lib/pytz/asia-katmandu.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:41,LMT +1919-12-31T18:18:44,+05:30,+0530 +1985-12-31T18:30:00,+05:45,+0545 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-khandyga.txt b/desk/gub/lib/pytz/asia-khandyga.txt new file mode 100644 index 0000000..621a0ab --- /dev/null +++ b/desk/gub/lib/pytz/asia-khandyga.txt @@ -0,0 +1,69 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:02,LMT +1919-12-14T14:57:47,+08:00,+08 +1930-06-20T16:00:00,+09:00,+09 +1981-03-31T15:00:00,+10:00,+10 +1981-09-30T14:00:00,+09:00,+09 +1982-03-31T15:00:00,+10:00,+10 +1982-09-30T14:00:00,+09:00,+09 +1983-03-31T15:00:00,+10:00,+10 +1983-09-30T14:00:00,+09:00,+09 +1984-03-31T15:00:00,+10:00,+10 +1984-09-29T17:00:00,+09:00,+09 +1985-03-30T17:00:00,+10:00,+10 +1985-09-28T17:00:00,+09:00,+09 +1986-03-29T17:00:00,+10:00,+10 +1986-09-27T17:00:00,+09:00,+09 +1987-03-28T17:00:00,+10:00,+10 +1987-09-26T17:00:00,+09:00,+09 +1988-03-26T17:00:00,+10:00,+10 +1988-09-24T17:00:00,+09:00,+09 +1989-03-25T17:00:00,+10:00,+10 +1989-09-23T17:00:00,+09:00,+09 +1990-03-24T17:00:00,+10:00,+10 +1990-09-29T17:00:00,+09:00,+09 +1991-03-30T17:00:00,+09:00,+09 +1991-09-28T18:00:00,+08:00,+08 +1992-01-18T18:00:00,+09:00,+09 +1992-03-28T17:00:00,+10:00,+10 +1992-09-26T17:00:00,+09:00,+09 +1993-03-27T17:00:00,+10:00,+10 +1993-09-25T17:00:00,+09:00,+09 +1994-03-26T17:00:00,+10:00,+10 +1994-09-24T17:00:00,+09:00,+09 +1995-03-25T17:00:00,+10:00,+10 +1995-09-23T17:00:00,+09:00,+09 +1996-03-30T17:00:00,+10:00,+10 +1996-10-26T17:00:00,+09:00,+09 +1997-03-29T17:00:00,+10:00,+10 +1997-10-25T17:00:00,+09:00,+09 +1998-03-28T17:00:00,+10:00,+10 +1998-10-24T17:00:00,+09:00,+09 +1999-03-27T17:00:00,+10:00,+10 +1999-10-30T17:00:00,+09:00,+09 +2000-03-25T17:00:00,+10:00,+10 +2000-10-28T17:00:00,+09:00,+09 +2001-03-24T17:00:00,+10:00,+10 +2001-10-27T17:00:00,+09:00,+09 +2002-03-30T17:00:00,+10:00,+10 +2002-10-26T17:00:00,+09:00,+09 +2003-03-29T17:00:00,+10:00,+10 +2003-10-25T17:00:00,+09:00,+09 +2003-12-31T15:00:00,+10:00,+10 +2004-03-27T16:00:00,+11:00,+11 +2004-10-30T16:00:00,+10:00,+10 +2005-03-26T16:00:00,+11:00,+11 +2005-10-29T16:00:00,+10:00,+10 +2006-03-25T16:00:00,+11:00,+11 +2006-10-28T16:00:00,+10:00,+10 +2007-03-24T16:00:00,+11:00,+11 +2007-10-27T16:00:00,+10:00,+10 +2008-03-29T16:00:00,+11:00,+11 +2008-10-25T16:00:00,+10:00,+10 +2009-03-28T16:00:00,+11:00,+11 +2009-10-24T16:00:00,+10:00,+10 +2010-03-27T16:00:00,+11:00,+11 +2010-10-30T16:00:00,+10:00,+10 +2011-03-26T16:00:00,+11:00,+11 +2011-09-12T13:00:00,+10:00,+10 +2014-10-25T16:00:00,+09:00,+09 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-kolkata.txt b/desk/gub/lib/pytz/asia-kolkata.txt new file mode 100644 index 0000000..3a4a8e2 --- /dev/null +++ b/desk/gub/lib/pytz/asia-kolkata.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:53,LMT +1901-12-13T20:45:52,+05:21,MMT +1905-12-31T18:38:50,+05:30,IST +1941-09-30T18:30:00,+06:30,+0630 +1942-05-14T17:30:00,+05:30,IST +1942-08-31T18:30:00,+06:30,+0630 +1945-10-14T17:30:00,+05:30,IST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-krasnoyarsk.txt b/desk/gub/lib/pytz/asia-krasnoyarsk.txt new file mode 100644 index 0000000..7b19217 --- /dev/null +++ b/desk/gub/lib/pytz/asia-krasnoyarsk.txt @@ -0,0 +1,67 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:11,LMT +1920-01-05T17:48:34,+06:00,+06 +1930-06-20T18:00:00,+07:00,+07 +1981-03-31T17:00:00,+08:00,+08 +1981-09-30T16:00:00,+07:00,+07 +1982-03-31T17:00:00,+08:00,+08 +1982-09-30T16:00:00,+07:00,+07 +1983-03-31T17:00:00,+08:00,+08 +1983-09-30T16:00:00,+07:00,+07 +1984-03-31T17:00:00,+08:00,+08 +1984-09-29T19:00:00,+07:00,+07 +1985-03-30T19:00:00,+08:00,+08 +1985-09-28T19:00:00,+07:00,+07 +1986-03-29T19:00:00,+08:00,+08 +1986-09-27T19:00:00,+07:00,+07 +1987-03-28T19:00:00,+08:00,+08 +1987-09-26T19:00:00,+07:00,+07 +1988-03-26T19:00:00,+08:00,+08 +1988-09-24T19:00:00,+07:00,+07 +1989-03-25T19:00:00,+08:00,+08 +1989-09-23T19:00:00,+07:00,+07 +1990-03-24T19:00:00,+08:00,+08 +1990-09-29T19:00:00,+07:00,+07 +1991-03-30T19:00:00,+07:00,+07 +1991-09-28T20:00:00,+06:00,+06 +1992-01-18T20:00:00,+07:00,+07 +1992-03-28T19:00:00,+08:00,+08 +1992-09-26T19:00:00,+07:00,+07 +1993-03-27T19:00:00,+08:00,+08 +1993-09-25T19:00:00,+07:00,+07 +1994-03-26T19:00:00,+08:00,+08 +1994-09-24T19:00:00,+07:00,+07 +1995-03-25T19:00:00,+08:00,+08 +1995-09-23T19:00:00,+07:00,+07 +1996-03-30T19:00:00,+08:00,+08 +1996-10-26T19:00:00,+07:00,+07 +1997-03-29T19:00:00,+08:00,+08 +1997-10-25T19:00:00,+07:00,+07 +1998-03-28T19:00:00,+08:00,+08 +1998-10-24T19:00:00,+07:00,+07 +1999-03-27T19:00:00,+08:00,+08 +1999-10-30T19:00:00,+07:00,+07 +2000-03-25T19:00:00,+08:00,+08 +2000-10-28T19:00:00,+07:00,+07 +2001-03-24T19:00:00,+08:00,+08 +2001-10-27T19:00:00,+07:00,+07 +2002-03-30T19:00:00,+08:00,+08 +2002-10-26T19:00:00,+07:00,+07 +2003-03-29T19:00:00,+08:00,+08 +2003-10-25T19:00:00,+07:00,+07 +2004-03-27T19:00:00,+08:00,+08 +2004-10-30T19:00:00,+07:00,+07 +2005-03-26T19:00:00,+08:00,+08 +2005-10-29T19:00:00,+07:00,+07 +2006-03-25T19:00:00,+08:00,+08 +2006-10-28T19:00:00,+07:00,+07 +2007-03-24T19:00:00,+08:00,+08 +2007-10-27T19:00:00,+07:00,+07 +2008-03-29T19:00:00,+08:00,+08 +2008-10-25T19:00:00,+07:00,+07 +2009-03-28T19:00:00,+08:00,+08 +2009-10-24T19:00:00,+07:00,+07 +2010-03-27T19:00:00,+08:00,+08 +2010-10-30T19:00:00,+07:00,+07 +2011-03-26T19:00:00,+08:00,+08 +2014-10-25T18:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-kuala-lumpur.txt b/desk/gub/lib/pytz/asia-kuala-lumpur.txt new file mode 100644 index 0000000..9dc96c0 --- /dev/null +++ b/desk/gub/lib/pytz/asia-kuala-lumpur.txt @@ -0,0 +1,10 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:55,LMT +1901-12-13T20:45:52,+06:55,SMT +1905-05-31T17:04:35,+07:00,+07 +1932-12-31T17:00:00,+07:20,+0720 +1935-12-31T16:40:00,+07:20,+0720 +1941-08-31T16:40:00,+07:30,+0730 +1942-02-15T16:30:00,+09:00,+09 +1945-09-11T15:00:00,+07:30,+0730 +1981-12-31T16:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-kuching.txt b/desk/gub/lib/pytz/asia-kuching.txt new file mode 100644 index 0000000..4d06e1e --- /dev/null +++ b/desk/gub/lib/pytz/asia-kuching.txt @@ -0,0 +1,20 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:21,LMT +1926-02-28T16:38:40,+07:30,+0730 +1932-12-31T16:30:00,+08:00,+08 +1935-09-13T16:00:00,+08:20,+0820 +1935-12-13T15:40:00,+08:00,+08 +1936-09-13T16:00:00,+08:20,+0820 +1936-12-13T15:40:00,+08:00,+08 +1937-09-13T16:00:00,+08:20,+0820 +1937-12-13T15:40:00,+08:00,+08 +1938-09-13T16:00:00,+08:20,+0820 +1938-12-13T15:40:00,+08:00,+08 +1939-09-13T16:00:00,+08:20,+0820 +1939-12-13T15:40:00,+08:00,+08 +1940-09-13T16:00:00,+08:20,+0820 +1940-12-13T15:40:00,+08:00,+08 +1941-09-13T16:00:00,+08:20,+0820 +1941-12-13T15:40:00,+08:00,+08 +1942-02-15T16:00:00,+09:00,+09 +1945-09-11T15:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-kuwait.txt b/desk/gub/lib/pytz/asia-kuwait.txt new file mode 100644 index 0000000..e563a29 --- /dev/null +++ b/desk/gub/lib/pytz/asia-kuwait.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:07,LMT +1947-03-13T20:53:08,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-macao.txt b/desk/gub/lib/pytz/asia-macao.txt new file mode 100644 index 0000000..93df06e --- /dev/null +++ b/desk/gub/lib/pytz/asia-macao.txt @@ -0,0 +1,73 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:34,LMT +1904-10-29T16:25:50,+08:00,CST +1941-12-21T15:00:00,+09:00,+09 +1942-04-30T14:00:00,+10:00,+10 +1942-11-17T13:00:00,+09:00,+09 +1943-04-30T14:00:00,+10:00,+10 +1943-09-30T13:00:00,+09:00,+09 +1945-09-30T15:00:00,+08:00,CST +1946-04-30T15:00:00,+09:00,CDT +1946-09-30T15:00:00,+08:00,CST +1947-04-19T15:00:00,+09:00,CDT +1947-11-30T15:00:00,+08:00,CST +1948-05-02T15:00:00,+09:00,CDT +1948-10-31T15:00:00,+08:00,CST +1949-04-02T15:00:00,+09:00,CDT +1949-10-29T15:00:00,+08:00,CST +1950-04-01T15:00:00,+09:00,CDT +1950-10-28T15:00:00,+08:00,CST +1951-03-31T15:00:00,+09:00,CDT +1951-10-28T15:00:00,+08:00,CST +1952-04-05T15:00:00,+09:00,CDT +1952-11-01T15:00:00,+08:00,CST +1953-04-04T15:00:00,+09:00,CDT +1953-10-31T15:00:00,+08:00,CST +1954-03-20T15:00:00,+09:00,CDT +1954-10-30T15:00:00,+08:00,CST +1955-03-19T15:00:00,+09:00,CDT +1955-11-05T15:00:00,+08:00,CST +1956-03-17T15:00:00,+09:00,CDT +1956-11-03T18:30:00,+08:00,CST +1957-03-23T19:30:00,+09:00,CDT +1957-11-02T18:30:00,+08:00,CST +1958-03-22T19:30:00,+09:00,CDT +1958-11-01T18:30:00,+08:00,CST +1959-03-21T19:30:00,+09:00,CDT +1959-10-31T18:30:00,+08:00,CST +1960-03-19T19:30:00,+09:00,CDT +1960-11-05T18:30:00,+08:00,CST +1961-03-18T19:30:00,+09:00,CDT +1961-11-04T18:30:00,+08:00,CST +1962-03-17T19:30:00,+09:00,CDT +1962-11-03T18:30:00,+08:00,CST +1963-03-23T19:30:00,+09:00,CDT +1963-11-02T18:30:00,+08:00,CST +1964-03-21T19:30:00,+09:00,CDT +1964-10-31T18:30:00,+08:00,CST +1965-04-17T19:30:00,+09:00,CDT +1965-10-16T17:30:00,+08:00,CST +1966-04-16T19:30:00,+09:00,CDT +1966-10-15T17:30:00,+08:00,CST +1967-04-15T19:30:00,+09:00,CDT +1967-10-21T18:30:00,+08:00,CST +1968-04-20T19:30:00,+09:00,CDT +1968-10-19T18:30:00,+08:00,CST +1969-04-19T19:30:00,+09:00,CDT +1969-10-18T18:30:00,+08:00,CST +1970-04-18T19:30:00,+09:00,CDT +1970-10-17T18:30:00,+08:00,CST +1971-04-17T19:30:00,+09:00,CDT +1971-10-16T18:30:00,+08:00,CST +1972-04-15T19:30:00,+09:00,CDT +1972-10-21T18:30:00,+08:00,CST +1973-04-21T19:30:00,+09:00,CDT +1973-10-20T18:30:00,+08:00,CST +1973-12-29T19:30:00,+09:00,CDT +1974-10-19T18:30:00,+08:00,CST +1975-04-19T19:30:00,+09:00,CDT +1975-10-18T18:30:00,+08:00,CST +1976-04-17T19:30:00,+09:00,CDT +1976-10-16T18:30:00,+08:00,CST +1979-05-12T19:30:00,+09:00,CDT +1979-10-20T18:30:00,+08:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-macau.txt b/desk/gub/lib/pytz/asia-macau.txt new file mode 100644 index 0000000..93df06e --- /dev/null +++ b/desk/gub/lib/pytz/asia-macau.txt @@ -0,0 +1,73 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:34,LMT +1904-10-29T16:25:50,+08:00,CST +1941-12-21T15:00:00,+09:00,+09 +1942-04-30T14:00:00,+10:00,+10 +1942-11-17T13:00:00,+09:00,+09 +1943-04-30T14:00:00,+10:00,+10 +1943-09-30T13:00:00,+09:00,+09 +1945-09-30T15:00:00,+08:00,CST +1946-04-30T15:00:00,+09:00,CDT +1946-09-30T15:00:00,+08:00,CST +1947-04-19T15:00:00,+09:00,CDT +1947-11-30T15:00:00,+08:00,CST +1948-05-02T15:00:00,+09:00,CDT +1948-10-31T15:00:00,+08:00,CST +1949-04-02T15:00:00,+09:00,CDT +1949-10-29T15:00:00,+08:00,CST +1950-04-01T15:00:00,+09:00,CDT +1950-10-28T15:00:00,+08:00,CST +1951-03-31T15:00:00,+09:00,CDT +1951-10-28T15:00:00,+08:00,CST +1952-04-05T15:00:00,+09:00,CDT +1952-11-01T15:00:00,+08:00,CST +1953-04-04T15:00:00,+09:00,CDT +1953-10-31T15:00:00,+08:00,CST +1954-03-20T15:00:00,+09:00,CDT +1954-10-30T15:00:00,+08:00,CST +1955-03-19T15:00:00,+09:00,CDT +1955-11-05T15:00:00,+08:00,CST +1956-03-17T15:00:00,+09:00,CDT +1956-11-03T18:30:00,+08:00,CST +1957-03-23T19:30:00,+09:00,CDT +1957-11-02T18:30:00,+08:00,CST +1958-03-22T19:30:00,+09:00,CDT +1958-11-01T18:30:00,+08:00,CST +1959-03-21T19:30:00,+09:00,CDT +1959-10-31T18:30:00,+08:00,CST +1960-03-19T19:30:00,+09:00,CDT +1960-11-05T18:30:00,+08:00,CST +1961-03-18T19:30:00,+09:00,CDT +1961-11-04T18:30:00,+08:00,CST +1962-03-17T19:30:00,+09:00,CDT +1962-11-03T18:30:00,+08:00,CST +1963-03-23T19:30:00,+09:00,CDT +1963-11-02T18:30:00,+08:00,CST +1964-03-21T19:30:00,+09:00,CDT +1964-10-31T18:30:00,+08:00,CST +1965-04-17T19:30:00,+09:00,CDT +1965-10-16T17:30:00,+08:00,CST +1966-04-16T19:30:00,+09:00,CDT +1966-10-15T17:30:00,+08:00,CST +1967-04-15T19:30:00,+09:00,CDT +1967-10-21T18:30:00,+08:00,CST +1968-04-20T19:30:00,+09:00,CDT +1968-10-19T18:30:00,+08:00,CST +1969-04-19T19:30:00,+09:00,CDT +1969-10-18T18:30:00,+08:00,CST +1970-04-18T19:30:00,+09:00,CDT +1970-10-17T18:30:00,+08:00,CST +1971-04-17T19:30:00,+09:00,CDT +1971-10-16T18:30:00,+08:00,CST +1972-04-15T19:30:00,+09:00,CDT +1972-10-21T18:30:00,+08:00,CST +1973-04-21T19:30:00,+09:00,CDT +1973-10-20T18:30:00,+08:00,CST +1973-12-29T19:30:00,+09:00,CDT +1974-10-19T18:30:00,+08:00,CST +1975-04-19T19:30:00,+09:00,CDT +1975-10-18T18:30:00,+08:00,CST +1976-04-17T19:30:00,+09:00,CDT +1976-10-16T18:30:00,+08:00,CST +1979-05-12T19:30:00,+09:00,CDT +1979-10-20T18:30:00,+08:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-magadan.txt b/desk/gub/lib/pytz/asia-magadan.txt new file mode 100644 index 0000000..cdf92fb --- /dev/null +++ b/desk/gub/lib/pytz/asia-magadan.txt @@ -0,0 +1,68 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:03,LMT +1924-05-01T13:56:48,+10:00,+10 +1930-06-20T14:00:00,+11:00,+11 +1981-03-31T13:00:00,+12:00,+12 +1981-09-30T12:00:00,+11:00,+11 +1982-03-31T13:00:00,+12:00,+12 +1982-09-30T12:00:00,+11:00,+11 +1983-03-31T13:00:00,+12:00,+12 +1983-09-30T12:00:00,+11:00,+11 +1984-03-31T13:00:00,+12:00,+12 +1984-09-29T15:00:00,+11:00,+11 +1985-03-30T15:00:00,+12:00,+12 +1985-09-28T15:00:00,+11:00,+11 +1986-03-29T15:00:00,+12:00,+12 +1986-09-27T15:00:00,+11:00,+11 +1987-03-28T15:00:00,+12:00,+12 +1987-09-26T15:00:00,+11:00,+11 +1988-03-26T15:00:00,+12:00,+12 +1988-09-24T15:00:00,+11:00,+11 +1989-03-25T15:00:00,+12:00,+12 +1989-09-23T15:00:00,+11:00,+11 +1990-03-24T15:00:00,+12:00,+12 +1990-09-29T15:00:00,+11:00,+11 +1991-03-30T15:00:00,+11:00,+11 +1991-09-28T16:00:00,+10:00,+10 +1992-01-18T16:00:00,+11:00,+11 +1992-03-28T15:00:00,+12:00,+12 +1992-09-26T15:00:00,+11:00,+11 +1993-03-27T15:00:00,+12:00,+12 +1993-09-25T15:00:00,+11:00,+11 +1994-03-26T15:00:00,+12:00,+12 +1994-09-24T15:00:00,+11:00,+11 +1995-03-25T15:00:00,+12:00,+12 +1995-09-23T15:00:00,+11:00,+11 +1996-03-30T15:00:00,+12:00,+12 +1996-10-26T15:00:00,+11:00,+11 +1997-03-29T15:00:00,+12:00,+12 +1997-10-25T15:00:00,+11:00,+11 +1998-03-28T15:00:00,+12:00,+12 +1998-10-24T15:00:00,+11:00,+11 +1999-03-27T15:00:00,+12:00,+12 +1999-10-30T15:00:00,+11:00,+11 +2000-03-25T15:00:00,+12:00,+12 +2000-10-28T15:00:00,+11:00,+11 +2001-03-24T15:00:00,+12:00,+12 +2001-10-27T15:00:00,+11:00,+11 +2002-03-30T15:00:00,+12:00,+12 +2002-10-26T15:00:00,+11:00,+11 +2003-03-29T15:00:00,+12:00,+12 +2003-10-25T15:00:00,+11:00,+11 +2004-03-27T15:00:00,+12:00,+12 +2004-10-30T15:00:00,+11:00,+11 +2005-03-26T15:00:00,+12:00,+12 +2005-10-29T15:00:00,+11:00,+11 +2006-03-25T15:00:00,+12:00,+12 +2006-10-28T15:00:00,+11:00,+11 +2007-03-24T15:00:00,+12:00,+12 +2007-10-27T15:00:00,+11:00,+11 +2008-03-29T15:00:00,+12:00,+12 +2008-10-25T15:00:00,+11:00,+11 +2009-03-28T15:00:00,+12:00,+12 +2009-10-24T15:00:00,+11:00,+11 +2010-03-27T15:00:00,+12:00,+12 +2010-10-30T15:00:00,+11:00,+11 +2011-03-26T15:00:00,+12:00,+12 +2014-10-25T14:00:00,+10:00,+10 +2016-04-23T16:00:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-makassar.txt b/desk/gub/lib/pytz/asia-makassar.txt new file mode 100644 index 0000000..6850601 --- /dev/null +++ b/desk/gub/lib/pytz/asia-makassar.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:58,LMT +1919-12-31T16:02:24,+07:58,MMT +1932-10-31T16:02:24,+08:00,+08 +1942-02-08T16:00:00,+09:00,+09 +1945-09-22T15:00:00,+08:00,WITA \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-manila.txt b/desk/gub/lib/pytz/asia-manila.txt new file mode 100644 index 0000000..6ef7571 --- /dev/null +++ b/desk/gub/lib/pytz/asia-manila.txt @@ -0,0 +1,14 @@ +Time,Offset,Name +1901-12-13T20:45:52,+08:00,PST +1936-10-31T16:00:00,+09:00,PDT +1937-01-15T15:00:00,+08:00,PST +1941-12-15T16:00:00,+09:00,PDT +1942-02-11T15:00:00,+09:00,JST +1945-03-03T15:00:00,+09:00,PDT +1945-11-30T15:00:00,+08:00,PST +1954-04-11T16:00:00,+09:00,PDT +1954-06-04T15:00:00,+08:00,PST +1977-03-27T16:00:00,+09:00,PDT +1977-09-21T15:00:00,+08:00,PST +1990-05-20T16:00:00,+09:00,PDT +1990-07-28T15:00:00,+08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-muscat.txt b/desk/gub/lib/pytz/asia-muscat.txt new file mode 100644 index 0000000..86b277e --- /dev/null +++ b/desk/gub/lib/pytz/asia-muscat.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:41,LMT +1919-12-31T20:18:48,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-nicosia.txt b/desk/gub/lib/pytz/asia-nicosia.txt new file mode 100644 index 0000000..c2993cf --- /dev/null +++ b/desk/gub/lib/pytz/asia-nicosia.txt @@ -0,0 +1,129 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:13,LMT +1921-11-13T21:46:32,+02:00,EET +1975-04-12T22:00:00,+03:00,EEST +1975-10-11T21:00:00,+02:00,EET +1976-05-14T22:00:00,+03:00,EEST +1976-10-10T21:00:00,+02:00,EET +1977-04-02T22:00:00,+03:00,EEST +1977-09-24T21:00:00,+02:00,EET +1978-04-01T22:00:00,+03:00,EEST +1978-10-01T21:00:00,+02:00,EET +1979-03-31T22:00:00,+03:00,EEST +1979-09-29T21:00:00,+02:00,EET +1980-04-05T22:00:00,+03:00,EEST +1980-09-27T21:00:00,+02:00,EET +1981-03-28T22:00:00,+03:00,EEST +1981-09-26T21:00:00,+02:00,EET +1982-03-27T22:00:00,+03:00,EEST +1982-09-25T21:00:00,+02:00,EET +1983-03-26T22:00:00,+03:00,EEST +1983-09-24T21:00:00,+02:00,EET +1984-03-24T22:00:00,+03:00,EEST +1984-09-29T21:00:00,+02:00,EET +1985-03-30T22:00:00,+03:00,EEST +1985-09-28T21:00:00,+02:00,EET +1986-03-29T22:00:00,+03:00,EEST +1986-09-27T21:00:00,+02:00,EET +1987-03-28T22:00:00,+03:00,EEST +1987-09-26T21:00:00,+02:00,EET +1988-03-26T22:00:00,+03:00,EEST +1988-09-24T21:00:00,+02:00,EET +1989-03-25T22:00:00,+03:00,EEST +1989-09-23T21:00:00,+02:00,EET +1990-03-24T22:00:00,+03:00,EEST +1990-09-29T21:00:00,+02:00,EET +1991-03-30T22:00:00,+03:00,EEST +1991-09-28T21:00:00,+02:00,EET +1992-03-28T22:00:00,+03:00,EEST +1992-09-26T21:00:00,+02:00,EET +1993-03-27T22:00:00,+03:00,EEST +1993-09-25T21:00:00,+02:00,EET +1994-03-26T22:00:00,+03:00,EEST +1994-09-24T21:00:00,+02:00,EET +1995-03-25T22:00:00,+03:00,EEST +1995-09-23T21:00:00,+02:00,EET +1996-03-30T22:00:00,+03:00,EEST +1996-09-28T21:00:00,+02:00,EET +1997-03-29T22:00:00,+03:00,EEST +1997-09-27T21:00:00,+02:00,EET +1998-03-28T22:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-novokuznetsk.txt b/desk/gub/lib/pytz/asia-novokuznetsk.txt new file mode 100644 index 0000000..a355ed8 --- /dev/null +++ b/desk/gub/lib/pytz/asia-novokuznetsk.txt @@ -0,0 +1,66 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:49,LMT +1924-04-30T18:11:12,+06:00,+06 +1930-06-20T18:00:00,+07:00,+07 +1981-03-31T17:00:00,+08:00,+08 +1981-09-30T16:00:00,+07:00,+07 +1982-03-31T17:00:00,+08:00,+08 +1982-09-30T16:00:00,+07:00,+07 +1983-03-31T17:00:00,+08:00,+08 +1983-09-30T16:00:00,+07:00,+07 +1984-03-31T17:00:00,+08:00,+08 +1984-09-29T19:00:00,+07:00,+07 +1985-03-30T19:00:00,+08:00,+08 +1985-09-28T19:00:00,+07:00,+07 +1986-03-29T19:00:00,+08:00,+08 +1986-09-27T19:00:00,+07:00,+07 +1987-03-28T19:00:00,+08:00,+08 +1987-09-26T19:00:00,+07:00,+07 +1988-03-26T19:00:00,+08:00,+08 +1988-09-24T19:00:00,+07:00,+07 +1989-03-25T19:00:00,+08:00,+08 +1989-09-23T19:00:00,+07:00,+07 +1990-03-24T19:00:00,+08:00,+08 +1990-09-29T19:00:00,+07:00,+07 +1991-03-30T19:00:00,+07:00,+07 +1991-09-28T20:00:00,+06:00,+06 +1992-01-18T20:00:00,+07:00,+07 +1992-03-28T19:00:00,+08:00,+08 +1992-09-26T19:00:00,+07:00,+07 +1993-03-27T19:00:00,+08:00,+08 +1993-09-25T19:00:00,+07:00,+07 +1994-03-26T19:00:00,+08:00,+08 +1994-09-24T19:00:00,+07:00,+07 +1995-03-25T19:00:00,+08:00,+08 +1995-09-23T19:00:00,+07:00,+07 +1996-03-30T19:00:00,+08:00,+08 +1996-10-26T19:00:00,+07:00,+07 +1997-03-29T19:00:00,+08:00,+08 +1997-10-25T19:00:00,+07:00,+07 +1998-03-28T19:00:00,+08:00,+08 +1998-10-24T19:00:00,+07:00,+07 +1999-03-27T19:00:00,+08:00,+08 +1999-10-30T19:00:00,+07:00,+07 +2000-03-25T19:00:00,+08:00,+08 +2000-10-28T19:00:00,+07:00,+07 +2001-03-24T19:00:00,+08:00,+08 +2001-10-27T19:00:00,+07:00,+07 +2002-03-30T19:00:00,+08:00,+08 +2002-10-26T19:00:00,+07:00,+07 +2003-03-29T19:00:00,+08:00,+08 +2003-10-25T19:00:00,+07:00,+07 +2004-03-27T19:00:00,+08:00,+08 +2004-10-30T19:00:00,+07:00,+07 +2005-03-26T19:00:00,+08:00,+08 +2005-10-29T19:00:00,+07:00,+07 +2006-03-25T19:00:00,+08:00,+08 +2006-10-28T19:00:00,+07:00,+07 +2007-03-24T19:00:00,+08:00,+08 +2007-10-27T19:00:00,+07:00,+07 +2008-03-29T19:00:00,+08:00,+08 +2008-10-25T19:00:00,+07:00,+07 +2009-03-28T19:00:00,+08:00,+08 +2009-10-24T19:00:00,+07:00,+07 +2010-03-27T19:00:00,+07:00,+07 +2010-10-30T20:00:00,+06:00,+06 +2011-03-26T20:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-novosibirsk.txt b/desk/gub/lib/pytz/asia-novosibirsk.txt new file mode 100644 index 0000000..da6e227 --- /dev/null +++ b/desk/gub/lib/pytz/asia-novosibirsk.txt @@ -0,0 +1,69 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:32,LMT +1919-12-14T00:28:20,+06:00,+06 +1930-06-20T18:00:00,+07:00,+07 +1981-03-31T17:00:00,+08:00,+08 +1981-09-30T16:00:00,+07:00,+07 +1982-03-31T17:00:00,+08:00,+08 +1982-09-30T16:00:00,+07:00,+07 +1983-03-31T17:00:00,+08:00,+08 +1983-09-30T16:00:00,+07:00,+07 +1984-03-31T17:00:00,+08:00,+08 +1984-09-29T19:00:00,+07:00,+07 +1985-03-30T19:00:00,+08:00,+08 +1985-09-28T19:00:00,+07:00,+07 +1986-03-29T19:00:00,+08:00,+08 +1986-09-27T19:00:00,+07:00,+07 +1987-03-28T19:00:00,+08:00,+08 +1987-09-26T19:00:00,+07:00,+07 +1988-03-26T19:00:00,+08:00,+08 +1988-09-24T19:00:00,+07:00,+07 +1989-03-25T19:00:00,+08:00,+08 +1989-09-23T19:00:00,+07:00,+07 +1990-03-24T19:00:00,+08:00,+08 +1990-09-29T19:00:00,+07:00,+07 +1991-03-30T19:00:00,+07:00,+07 +1991-09-28T20:00:00,+06:00,+06 +1992-01-18T20:00:00,+07:00,+07 +1992-03-28T19:00:00,+08:00,+08 +1992-09-26T19:00:00,+07:00,+07 +1993-03-27T19:00:00,+08:00,+08 +1993-05-22T16:00:00,+07:00,+07 +1993-09-25T20:00:00,+06:00,+06 +1994-03-26T20:00:00,+07:00,+07 +1994-09-24T20:00:00,+06:00,+06 +1995-03-25T20:00:00,+07:00,+07 +1995-09-23T20:00:00,+06:00,+06 +1996-03-30T20:00:00,+07:00,+07 +1996-10-26T20:00:00,+06:00,+06 +1997-03-29T20:00:00,+07:00,+07 +1997-10-25T20:00:00,+06:00,+06 +1998-03-28T20:00:00,+07:00,+07 +1998-10-24T20:00:00,+06:00,+06 +1999-03-27T20:00:00,+07:00,+07 +1999-10-30T20:00:00,+06:00,+06 +2000-03-25T20:00:00,+07:00,+07 +2000-10-28T20:00:00,+06:00,+06 +2001-03-24T20:00:00,+07:00,+07 +2001-10-27T20:00:00,+06:00,+06 +2002-03-30T20:00:00,+07:00,+07 +2002-10-26T20:00:00,+06:00,+06 +2003-03-29T20:00:00,+07:00,+07 +2003-10-25T20:00:00,+06:00,+06 +2004-03-27T20:00:00,+07:00,+07 +2004-10-30T20:00:00,+06:00,+06 +2005-03-26T20:00:00,+07:00,+07 +2005-10-29T20:00:00,+06:00,+06 +2006-03-25T20:00:00,+07:00,+07 +2006-10-28T20:00:00,+06:00,+06 +2007-03-24T20:00:00,+07:00,+07 +2007-10-27T20:00:00,+06:00,+06 +2008-03-29T20:00:00,+07:00,+07 +2008-10-25T20:00:00,+06:00,+06 +2009-03-28T20:00:00,+07:00,+07 +2009-10-24T20:00:00,+06:00,+06 +2010-03-27T20:00:00,+07:00,+07 +2010-10-30T20:00:00,+06:00,+06 +2011-03-26T20:00:00,+07:00,+07 +2014-10-25T19:00:00,+06:00,+06 +2016-07-23T20:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-omsk.txt b/desk/gub/lib/pytz/asia-omsk.txt new file mode 100644 index 0000000..5cdd163 --- /dev/null +++ b/desk/gub/lib/pytz/asia-omsk.txt @@ -0,0 +1,67 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:54,LMT +1919-11-13T19:06:30,+05:00,+05 +1930-06-20T19:00:00,+06:00,+06 +1981-03-31T18:00:00,+07:00,+07 +1981-09-30T17:00:00,+06:00,+06 +1982-03-31T18:00:00,+07:00,+07 +1982-09-30T17:00:00,+06:00,+06 +1983-03-31T18:00:00,+07:00,+07 +1983-09-30T17:00:00,+06:00,+06 +1984-03-31T18:00:00,+07:00,+07 +1984-09-29T20:00:00,+06:00,+06 +1985-03-30T20:00:00,+07:00,+07 +1985-09-28T20:00:00,+06:00,+06 +1986-03-29T20:00:00,+07:00,+07 +1986-09-27T20:00:00,+06:00,+06 +1987-03-28T20:00:00,+07:00,+07 +1987-09-26T20:00:00,+06:00,+06 +1988-03-26T20:00:00,+07:00,+07 +1988-09-24T20:00:00,+06:00,+06 +1989-03-25T20:00:00,+07:00,+07 +1989-09-23T20:00:00,+06:00,+06 +1990-03-24T20:00:00,+07:00,+07 +1990-09-29T20:00:00,+06:00,+06 +1991-03-30T20:00:00,+06:00,+06 +1991-09-28T21:00:00,+05:00,+05 +1992-01-18T21:00:00,+06:00,+06 +1992-03-28T20:00:00,+07:00,+07 +1992-09-26T20:00:00,+06:00,+06 +1993-03-27T20:00:00,+07:00,+07 +1993-09-25T20:00:00,+06:00,+06 +1994-03-26T20:00:00,+07:00,+07 +1994-09-24T20:00:00,+06:00,+06 +1995-03-25T20:00:00,+07:00,+07 +1995-09-23T20:00:00,+06:00,+06 +1996-03-30T20:00:00,+07:00,+07 +1996-10-26T20:00:00,+06:00,+06 +1997-03-29T20:00:00,+07:00,+07 +1997-10-25T20:00:00,+06:00,+06 +1998-03-28T20:00:00,+07:00,+07 +1998-10-24T20:00:00,+06:00,+06 +1999-03-27T20:00:00,+07:00,+07 +1999-10-30T20:00:00,+06:00,+06 +2000-03-25T20:00:00,+07:00,+07 +2000-10-28T20:00:00,+06:00,+06 +2001-03-24T20:00:00,+07:00,+07 +2001-10-27T20:00:00,+06:00,+06 +2002-03-30T20:00:00,+07:00,+07 +2002-10-26T20:00:00,+06:00,+06 +2003-03-29T20:00:00,+07:00,+07 +2003-10-25T20:00:00,+06:00,+06 +2004-03-27T20:00:00,+07:00,+07 +2004-10-30T20:00:00,+06:00,+06 +2005-03-26T20:00:00,+07:00,+07 +2005-10-29T20:00:00,+06:00,+06 +2006-03-25T20:00:00,+07:00,+07 +2006-10-28T20:00:00,+06:00,+06 +2007-03-24T20:00:00,+07:00,+07 +2007-10-27T20:00:00,+06:00,+06 +2008-03-29T20:00:00,+07:00,+07 +2008-10-25T20:00:00,+06:00,+06 +2009-03-28T20:00:00,+07:00,+07 +2009-10-24T20:00:00,+06:00,+06 +2010-03-27T20:00:00,+07:00,+07 +2010-10-30T20:00:00,+06:00,+06 +2011-03-26T20:00:00,+07:00,+07 +2014-10-25T19:00:00,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-oral.txt b/desk/gub/lib/pytz/asia-oral.txt new file mode 100644 index 0000000..b9e37b1 --- /dev/null +++ b/desk/gub/lib/pytz/asia-oral.txt @@ -0,0 +1,53 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:25,LMT +1924-05-01T20:34:36,+03:00,+03 +1930-06-20T21:00:00,+05:00,+05 +1981-03-31T19:00:00,+06:00,+06 +1981-09-30T18:00:00,+06:00,+06 +1982-03-31T18:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+05:00,+05 +1989-09-23T22:00:00,+04:00,+04 +1990-03-24T22:00:00,+05:00,+05 +1990-09-29T22:00:00,+04:00,+04 +1991-03-30T22:00:00,+05:00,+05 +1991-09-28T22:00:00,+04:00,+04 +1992-01-18T22:00:00,+05:00,+05 +1992-03-28T21:00:00,+05:00,+05 +1992-09-26T22:00:00,+04:00,+04 +1993-03-27T22:00:00,+05:00,+05 +1993-09-25T22:00:00,+04:00,+04 +1994-03-26T22:00:00,+05:00,+05 +1994-09-24T22:00:00,+04:00,+04 +1995-03-25T22:00:00,+05:00,+05 +1995-09-23T22:00:00,+04:00,+04 +1996-03-30T22:00:00,+05:00,+05 +1996-10-26T22:00:00,+04:00,+04 +1997-03-29T22:00:00,+05:00,+05 +1997-10-25T22:00:00,+04:00,+04 +1998-03-28T22:00:00,+05:00,+05 +1998-10-24T22:00:00,+04:00,+04 +1999-03-27T22:00:00,+05:00,+05 +1999-10-30T22:00:00,+04:00,+04 +2000-03-25T22:00:00,+05:00,+05 +2000-10-28T22:00:00,+04:00,+04 +2001-03-24T22:00:00,+05:00,+05 +2001-10-27T22:00:00,+04:00,+04 +2002-03-30T22:00:00,+05:00,+05 +2002-10-26T22:00:00,+04:00,+04 +2003-03-29T22:00:00,+05:00,+05 +2003-10-25T22:00:00,+04:00,+04 +2004-03-27T22:00:00,+05:00,+05 +2004-10-30T22:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-phnom-penh.txt b/desk/gub/lib/pytz/asia-phnom-penh.txt new file mode 100644 index 0000000..3cb374b --- /dev/null +++ b/desk/gub/lib/pytz/asia-phnom-penh.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:42,LMT +1901-12-13T20:45:52,+06:42,BMT +1920-03-31T17:17:56,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-pontianak.txt b/desk/gub/lib/pytz/asia-pontianak.txt new file mode 100644 index 0000000..b7a1754 --- /dev/null +++ b/desk/gub/lib/pytz/asia-pontianak.txt @@ -0,0 +1,10 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:17,LMT +1908-04-30T16:42:40,+07:17,PMT +1932-10-31T16:42:40,+07:30,+0730 +1942-01-28T16:30:00,+09:00,+09 +1945-09-22T15:00:00,+07:30,+0730 +1948-04-30T16:30:00,+08:00,+08 +1950-04-30T16:00:00,+07:30,+0730 +1963-12-31T16:30:00,+08:00,WITA +1987-12-31T16:00:00,+07:00,WIB \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-pyongyang.txt b/desk/gub/lib/pytz/asia-pyongyang.txt new file mode 100644 index 0000000..a69cf43 --- /dev/null +++ b/desk/gub/lib/pytz/asia-pyongyang.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:23,LMT +1908-03-31T15:37:00,+08:30,KST +1911-12-31T15:30:00,+09:00,JST +1945-08-23T15:00:00,+09:00,KST +2015-08-14T15:00:00,+08:30,KST +2018-05-04T15:00:00,+09:00,KST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-qatar.txt b/desk/gub/lib/pytz/asia-qatar.txt new file mode 100644 index 0000000..c1d08f6 --- /dev/null +++ b/desk/gub/lib/pytz/asia-qatar.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:26,LMT +1919-12-31T20:33:52,+04:00,+04 +1972-05-31T20:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-qostanay.txt b/desk/gub/lib/pytz/asia-qostanay.txt new file mode 100644 index 0000000..3b45949 --- /dev/null +++ b/desk/gub/lib/pytz/asia-qostanay.txt @@ -0,0 +1,54 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:14,LMT +1924-05-01T19:45:32,+04:00,+04 +1930-06-20T20:00:00,+05:00,+05 +1981-03-31T19:00:00,+06:00,+06 +1981-09-30T18:00:00,+06:00,+06 +1982-03-31T18:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+06:00,+06 +1989-09-23T21:00:00,+05:00,+05 +1990-03-24T21:00:00,+06:00,+06 +1990-09-29T21:00:00,+05:00,+05 +1991-03-30T21:00:00,+05:00,+05 +1991-09-28T22:00:00,+04:00,+04 +1992-01-18T22:00:00,+05:00,+05 +1992-03-28T21:00:00,+06:00,+06 +1992-09-26T21:00:00,+05:00,+05 +1993-03-27T21:00:00,+06:00,+06 +1993-09-25T21:00:00,+05:00,+05 +1994-03-26T21:00:00,+06:00,+06 +1994-09-24T21:00:00,+05:00,+05 +1995-03-25T21:00:00,+06:00,+06 +1995-09-23T21:00:00,+05:00,+05 +1996-03-30T21:00:00,+06:00,+06 +1996-10-26T21:00:00,+05:00,+05 +1997-03-29T21:00:00,+06:00,+06 +1997-10-25T21:00:00,+05:00,+05 +1998-03-28T21:00:00,+06:00,+06 +1998-10-24T21:00:00,+05:00,+05 +1999-03-27T21:00:00,+06:00,+06 +1999-10-30T21:00:00,+05:00,+05 +2000-03-25T21:00:00,+06:00,+06 +2000-10-28T21:00:00,+05:00,+05 +2001-03-24T21:00:00,+06:00,+06 +2001-10-27T21:00:00,+05:00,+05 +2002-03-30T21:00:00,+06:00,+06 +2002-10-26T21:00:00,+05:00,+05 +2003-03-29T21:00:00,+06:00,+06 +2003-10-25T21:00:00,+05:00,+05 +2004-03-27T21:00:00,+06:00,+06 +2004-10-30T21:00:00,+06:00,+06 +2024-02-29T18:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-qyzylorda.txt b/desk/gub/lib/pytz/asia-qyzylorda.txt new file mode 100644 index 0000000..5872709 --- /dev/null +++ b/desk/gub/lib/pytz/asia-qyzylorda.txt @@ -0,0 +1,54 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:22,LMT +1924-05-01T19:38:08,+04:00,+04 +1930-06-20T20:00:00,+05:00,+05 +1981-03-31T19:00:00,+06:00,+06 +1981-09-30T18:00:00,+06:00,+06 +1982-03-31T18:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+06:00,+06 +1989-09-23T21:00:00,+05:00,+05 +1990-03-24T21:00:00,+06:00,+06 +1990-09-29T21:00:00,+05:00,+05 +1991-03-30T21:00:00,+05:00,+05 +1991-09-28T22:00:00,+05:00,+05 +1992-01-18T21:00:00,+06:00,+06 +1992-03-28T20:00:00,+06:00,+06 +1992-09-26T21:00:00,+05:00,+05 +1993-03-27T21:00:00,+06:00,+06 +1993-09-25T21:00:00,+05:00,+05 +1994-03-26T21:00:00,+06:00,+06 +1994-09-24T21:00:00,+05:00,+05 +1995-03-25T21:00:00,+06:00,+06 +1995-09-23T21:00:00,+05:00,+05 +1996-03-30T21:00:00,+06:00,+06 +1996-10-26T21:00:00,+05:00,+05 +1997-03-29T21:00:00,+06:00,+06 +1997-10-25T21:00:00,+05:00,+05 +1998-03-28T21:00:00,+06:00,+06 +1998-10-24T21:00:00,+05:00,+05 +1999-03-27T21:00:00,+06:00,+06 +1999-10-30T21:00:00,+05:00,+05 +2000-03-25T21:00:00,+06:00,+06 +2000-10-28T21:00:00,+05:00,+05 +2001-03-24T21:00:00,+06:00,+06 +2001-10-27T21:00:00,+05:00,+05 +2002-03-30T21:00:00,+06:00,+06 +2002-10-26T21:00:00,+05:00,+05 +2003-03-29T21:00:00,+06:00,+06 +2003-10-25T21:00:00,+05:00,+05 +2004-03-27T21:00:00,+06:00,+06 +2004-10-30T21:00:00,+06:00,+06 +2018-12-20T18:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-rangoon.txt b/desk/gub/lib/pytz/asia-rangoon.txt new file mode 100644 index 0000000..662c49c --- /dev/null +++ b/desk/gub/lib/pytz/asia-rangoon.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:25,LMT +1901-12-13T20:45:52,+06:25,RMT +1919-12-31T17:35:13,+06:30,+0630 +1942-04-30T17:30:00,+09:00,+09 +1945-05-02T15:00:00,+06:30,+0630 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-riyadh.txt b/desk/gub/lib/pytz/asia-riyadh.txt new file mode 100644 index 0000000..e563a29 --- /dev/null +++ b/desk/gub/lib/pytz/asia-riyadh.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:07,LMT +1947-03-13T20:53:08,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-saigon.txt b/desk/gub/lib/pytz/asia-saigon.txt new file mode 100644 index 0000000..cf7e33a --- /dev/null +++ b/desk/gub/lib/pytz/asia-saigon.txt @@ -0,0 +1,11 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:07,LMT +1906-06-30T16:53:30,+07:07,PLMT +1911-04-30T16:53:30,+07:00,+07 +1942-12-31T16:00:00,+08:00,+08 +1945-03-14T15:00:00,+09:00,+09 +1945-09-01T15:00:00,+07:00,+07 +1947-03-31T17:00:00,+08:00,+08 +1955-06-30T17:00:00,+07:00,+07 +1959-12-31T16:00:00,+08:00,+08 +1975-06-12T16:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-sakhalin.txt b/desk/gub/lib/pytz/asia-sakhalin.txt new file mode 100644 index 0000000..95dffa4 --- /dev/null +++ b/desk/gub/lib/pytz/asia-sakhalin.txt @@ -0,0 +1,68 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:31,LMT +1905-08-22T14:29:12,+09:00,+09 +1945-08-24T15:00:00,+11:00,+11 +1981-03-31T13:00:00,+12:00,+12 +1981-09-30T12:00:00,+11:00,+11 +1982-03-31T13:00:00,+12:00,+12 +1982-09-30T12:00:00,+11:00,+11 +1983-03-31T13:00:00,+12:00,+12 +1983-09-30T12:00:00,+11:00,+11 +1984-03-31T13:00:00,+12:00,+12 +1984-09-29T15:00:00,+11:00,+11 +1985-03-30T15:00:00,+12:00,+12 +1985-09-28T15:00:00,+11:00,+11 +1986-03-29T15:00:00,+12:00,+12 +1986-09-27T15:00:00,+11:00,+11 +1987-03-28T15:00:00,+12:00,+12 +1987-09-26T15:00:00,+11:00,+11 +1988-03-26T15:00:00,+12:00,+12 +1988-09-24T15:00:00,+11:00,+11 +1989-03-25T15:00:00,+12:00,+12 +1989-09-23T15:00:00,+11:00,+11 +1990-03-24T15:00:00,+12:00,+12 +1990-09-29T15:00:00,+11:00,+11 +1991-03-30T15:00:00,+11:00,+11 +1991-09-28T16:00:00,+10:00,+10 +1992-01-18T16:00:00,+11:00,+11 +1992-03-28T15:00:00,+12:00,+12 +1992-09-26T15:00:00,+11:00,+11 +1993-03-27T15:00:00,+12:00,+12 +1993-09-25T15:00:00,+11:00,+11 +1994-03-26T15:00:00,+12:00,+12 +1994-09-24T15:00:00,+11:00,+11 +1995-03-25T15:00:00,+12:00,+12 +1995-09-23T15:00:00,+11:00,+11 +1996-03-30T15:00:00,+12:00,+12 +1996-10-26T15:00:00,+11:00,+11 +1997-03-29T15:00:00,+11:00,+11 +1997-10-25T16:00:00,+10:00,+10 +1998-03-28T16:00:00,+11:00,+11 +1998-10-24T16:00:00,+10:00,+10 +1999-03-27T16:00:00,+11:00,+11 +1999-10-30T16:00:00,+10:00,+10 +2000-03-25T16:00:00,+11:00,+11 +2000-10-28T16:00:00,+10:00,+10 +2001-03-24T16:00:00,+11:00,+11 +2001-10-27T16:00:00,+10:00,+10 +2002-03-30T16:00:00,+11:00,+11 +2002-10-26T16:00:00,+10:00,+10 +2003-03-29T16:00:00,+11:00,+11 +2003-10-25T16:00:00,+10:00,+10 +2004-03-27T16:00:00,+11:00,+11 +2004-10-30T16:00:00,+10:00,+10 +2005-03-26T16:00:00,+11:00,+11 +2005-10-29T16:00:00,+10:00,+10 +2006-03-25T16:00:00,+11:00,+11 +2006-10-28T16:00:00,+10:00,+10 +2007-03-24T16:00:00,+11:00,+11 +2007-10-27T16:00:00,+10:00,+10 +2008-03-29T16:00:00,+11:00,+11 +2008-10-25T16:00:00,+10:00,+10 +2009-03-28T16:00:00,+11:00,+11 +2009-10-24T16:00:00,+10:00,+10 +2010-03-27T16:00:00,+11:00,+11 +2010-10-30T16:00:00,+10:00,+10 +2011-03-26T16:00:00,+11:00,+11 +2014-10-25T15:00:00,+10:00,+10 +2016-03-26T16:00:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-samarkand.txt b/desk/gub/lib/pytz/asia-samarkand.txt new file mode 100644 index 0000000..08be4d1 --- /dev/null +++ b/desk/gub/lib/pytz/asia-samarkand.txt @@ -0,0 +1,26 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:28,LMT +1924-05-01T19:32:07,+04:00,+04 +1930-06-20T20:00:00,+05:00,+05 +1981-03-31T19:00:00,+06:00,+06 +1981-09-30T18:00:00,+06:00,+06 +1982-03-31T18:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+06:00,+06 +1989-09-23T21:00:00,+05:00,+05 +1990-03-24T21:00:00,+06:00,+06 +1990-09-29T21:00:00,+05:00,+05 +1991-03-30T21:00:00,+06:00,+06 +1991-09-28T21:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-seoul.txt b/desk/gub/lib/pytz/asia-seoul.txt new file mode 100644 index 0000000..0e4a4ea --- /dev/null +++ b/desk/gub/lib/pytz/asia-seoul.txt @@ -0,0 +1,31 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:28,LMT +1908-03-31T15:32:08,+08:30,KST +1911-12-31T15:30:00,+09:00,JST +1945-09-07T15:00:00,+09:00,KST +1948-05-31T15:00:00,+10:00,KDT +1948-09-12T14:00:00,+09:00,KST +1949-04-02T15:00:00,+10:00,KDT +1949-09-10T14:00:00,+09:00,KST +1950-03-31T15:00:00,+10:00,KDT +1950-09-09T14:00:00,+09:00,KST +1951-05-05T15:00:00,+10:00,KDT +1951-09-08T14:00:00,+09:00,KST +1954-03-20T15:00:00,+08:30,KST +1955-05-04T15:30:00,+09:30,KDT +1955-09-08T14:30:00,+08:30,KST +1956-05-19T15:30:00,+09:30,KDT +1956-09-29T14:30:00,+08:30,KST +1957-05-04T15:30:00,+09:30,KDT +1957-09-21T14:30:00,+08:30,KST +1958-05-03T15:30:00,+09:30,KDT +1958-09-20T14:30:00,+08:30,KST +1959-05-02T15:30:00,+09:30,KDT +1959-09-19T14:30:00,+08:30,KST +1960-04-30T15:30:00,+09:30,KDT +1960-09-17T14:30:00,+08:30,KST +1961-08-09T15:30:00,+09:00,KST +1987-05-09T17:00:00,+10:00,KDT +1987-10-10T17:00:00,+09:00,KST +1988-05-07T17:00:00,+10:00,KDT +1988-10-08T17:00:00,+09:00,KST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-shanghai.txt b/desk/gub/lib/pytz/asia-shanghai.txt new file mode 100644 index 0000000..27376f6 --- /dev/null +++ b/desk/gub/lib/pytz/asia-shanghai.txt @@ -0,0 +1,31 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:06,LMT +1901-12-13T20:45:52,+08:00,CST +1919-04-12T16:00:00,+09:00,CDT +1919-09-30T15:00:00,+08:00,CST +1940-05-31T16:00:00,+09:00,CDT +1940-10-12T15:00:00,+08:00,CST +1941-03-14T16:00:00,+09:00,CDT +1941-11-01T15:00:00,+08:00,CST +1942-01-30T16:00:00,+09:00,CDT +1945-09-01T15:00:00,+08:00,CST +1946-05-14T16:00:00,+09:00,CDT +1946-09-30T15:00:00,+08:00,CST +1947-04-14T16:00:00,+09:00,CDT +1947-10-31T15:00:00,+08:00,CST +1948-04-30T16:00:00,+09:00,CDT +1948-09-30T15:00:00,+08:00,CST +1949-04-30T16:00:00,+09:00,CDT +1949-05-27T15:00:00,+08:00,CST +1986-05-03T18:00:00,+09:00,CDT +1986-09-13T17:00:00,+08:00,CST +1987-04-11T18:00:00,+09:00,CDT +1987-09-12T17:00:00,+08:00,CST +1988-04-16T18:00:00,+09:00,CDT +1988-09-10T17:00:00,+08:00,CST +1989-04-15T18:00:00,+09:00,CDT +1989-09-16T17:00:00,+08:00,CST +1990-04-14T18:00:00,+09:00,CDT +1990-09-15T17:00:00,+08:00,CST +1991-04-13T18:00:00,+09:00,CDT +1991-09-14T17:00:00,+08:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-singapore.txt b/desk/gub/lib/pytz/asia-singapore.txt new file mode 100644 index 0000000..9dc96c0 --- /dev/null +++ b/desk/gub/lib/pytz/asia-singapore.txt @@ -0,0 +1,10 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:55,LMT +1901-12-13T20:45:52,+06:55,SMT +1905-05-31T17:04:35,+07:00,+07 +1932-12-31T17:00:00,+07:20,+0720 +1935-12-31T16:40:00,+07:20,+0720 +1941-08-31T16:40:00,+07:30,+0730 +1942-02-15T16:30:00,+09:00,+09 +1945-09-11T15:00:00,+07:30,+0730 +1981-12-31T16:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-srednekolymsk.txt b/desk/gub/lib/pytz/asia-srednekolymsk.txt new file mode 100644 index 0000000..56edca4 --- /dev/null +++ b/desk/gub/lib/pytz/asia-srednekolymsk.txt @@ -0,0 +1,67 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:15,LMT +1924-05-01T13:45:08,+10:00,+10 +1930-06-20T14:00:00,+11:00,+11 +1981-03-31T13:00:00,+12:00,+12 +1981-09-30T12:00:00,+11:00,+11 +1982-03-31T13:00:00,+12:00,+12 +1982-09-30T12:00:00,+11:00,+11 +1983-03-31T13:00:00,+12:00,+12 +1983-09-30T12:00:00,+11:00,+11 +1984-03-31T13:00:00,+12:00,+12 +1984-09-29T15:00:00,+11:00,+11 +1985-03-30T15:00:00,+12:00,+12 +1985-09-28T15:00:00,+11:00,+11 +1986-03-29T15:00:00,+12:00,+12 +1986-09-27T15:00:00,+11:00,+11 +1987-03-28T15:00:00,+12:00,+12 +1987-09-26T15:00:00,+11:00,+11 +1988-03-26T15:00:00,+12:00,+12 +1988-09-24T15:00:00,+11:00,+11 +1989-03-25T15:00:00,+12:00,+12 +1989-09-23T15:00:00,+11:00,+11 +1990-03-24T15:00:00,+12:00,+12 +1990-09-29T15:00:00,+11:00,+11 +1991-03-30T15:00:00,+11:00,+11 +1991-09-28T16:00:00,+10:00,+10 +1992-01-18T16:00:00,+11:00,+11 +1992-03-28T15:00:00,+12:00,+12 +1992-09-26T15:00:00,+11:00,+11 +1993-03-27T15:00:00,+12:00,+12 +1993-09-25T15:00:00,+11:00,+11 +1994-03-26T15:00:00,+12:00,+12 +1994-09-24T15:00:00,+11:00,+11 +1995-03-25T15:00:00,+12:00,+12 +1995-09-23T15:00:00,+11:00,+11 +1996-03-30T15:00:00,+12:00,+12 +1996-10-26T15:00:00,+11:00,+11 +1997-03-29T15:00:00,+12:00,+12 +1997-10-25T15:00:00,+11:00,+11 +1998-03-28T15:00:00,+12:00,+12 +1998-10-24T15:00:00,+11:00,+11 +1999-03-27T15:00:00,+12:00,+12 +1999-10-30T15:00:00,+11:00,+11 +2000-03-25T15:00:00,+12:00,+12 +2000-10-28T15:00:00,+11:00,+11 +2001-03-24T15:00:00,+12:00,+12 +2001-10-27T15:00:00,+11:00,+11 +2002-03-30T15:00:00,+12:00,+12 +2002-10-26T15:00:00,+11:00,+11 +2003-03-29T15:00:00,+12:00,+12 +2003-10-25T15:00:00,+11:00,+11 +2004-03-27T15:00:00,+12:00,+12 +2004-10-30T15:00:00,+11:00,+11 +2005-03-26T15:00:00,+12:00,+12 +2005-10-29T15:00:00,+11:00,+11 +2006-03-25T15:00:00,+12:00,+12 +2006-10-28T15:00:00,+11:00,+11 +2007-03-24T15:00:00,+12:00,+12 +2007-10-27T15:00:00,+11:00,+11 +2008-03-29T15:00:00,+12:00,+12 +2008-10-25T15:00:00,+11:00,+11 +2009-03-28T15:00:00,+12:00,+12 +2009-10-24T15:00:00,+11:00,+11 +2010-03-27T15:00:00,+12:00,+12 +2010-10-30T15:00:00,+11:00,+11 +2011-03-26T15:00:00,+12:00,+12 +2014-10-25T14:00:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-taipei.txt b/desk/gub/lib/pytz/asia-taipei.txt new file mode 100644 index 0000000..2a4d212 --- /dev/null +++ b/desk/gub/lib/pytz/asia-taipei.txt @@ -0,0 +1,43 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:06,LMT +1901-12-13T20:45:52,+08:00,CST +1937-09-30T16:00:00,+09:00,JST +1945-09-20T16:00:00,+08:00,CST +1946-05-14T16:00:00,+09:00,CDT +1946-09-30T15:00:00,+08:00,CST +1947-04-14T16:00:00,+09:00,CDT +1947-10-31T15:00:00,+08:00,CST +1948-04-30T16:00:00,+09:00,CDT +1948-09-30T15:00:00,+08:00,CST +1949-04-30T16:00:00,+09:00,CDT +1949-09-30T15:00:00,+08:00,CST +1950-04-30T16:00:00,+09:00,CDT +1950-09-30T15:00:00,+08:00,CST +1951-04-30T16:00:00,+09:00,CDT +1951-09-30T15:00:00,+08:00,CST +1952-02-29T16:00:00,+09:00,CDT +1952-10-31T15:00:00,+08:00,CST +1953-03-31T16:00:00,+09:00,CDT +1953-10-31T15:00:00,+08:00,CST +1954-03-31T16:00:00,+09:00,CDT +1954-10-31T15:00:00,+08:00,CST +1955-03-31T16:00:00,+09:00,CDT +1955-09-30T15:00:00,+08:00,CST +1956-03-31T16:00:00,+09:00,CDT +1956-09-30T15:00:00,+08:00,CST +1957-03-31T16:00:00,+09:00,CDT +1957-09-30T15:00:00,+08:00,CST +1958-03-31T16:00:00,+09:00,CDT +1958-09-30T15:00:00,+08:00,CST +1959-03-31T16:00:00,+09:00,CDT +1959-09-30T15:00:00,+08:00,CST +1960-05-31T16:00:00,+09:00,CDT +1960-09-30T15:00:00,+08:00,CST +1961-05-31T16:00:00,+09:00,CDT +1961-09-30T15:00:00,+08:00,CST +1974-03-31T16:00:00,+09:00,CDT +1974-09-30T15:00:00,+08:00,CST +1975-03-31T16:00:00,+09:00,CDT +1975-09-30T15:00:00,+08:00,CST +1979-06-30T16:00:00,+09:00,CDT +1979-09-30T15:00:00,+08:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-tashkent.txt b/desk/gub/lib/pytz/asia-tashkent.txt new file mode 100644 index 0000000..78e25c2 --- /dev/null +++ b/desk/gub/lib/pytz/asia-tashkent.txt @@ -0,0 +1,26 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:37,LMT +1924-05-01T19:22:49,+05:00,+05 +1930-06-20T19:00:00,+06:00,+06 +1981-03-31T18:00:00,+07:00,+07 +1981-09-30T17:00:00,+06:00,+06 +1982-03-31T18:00:00,+07:00,+07 +1982-09-30T17:00:00,+06:00,+06 +1983-03-31T18:00:00,+07:00,+07 +1983-09-30T17:00:00,+06:00,+06 +1984-03-31T18:00:00,+07:00,+07 +1984-09-29T20:00:00,+06:00,+06 +1985-03-30T20:00:00,+07:00,+07 +1985-09-28T20:00:00,+06:00,+06 +1986-03-29T20:00:00,+07:00,+07 +1986-09-27T20:00:00,+06:00,+06 +1987-03-28T20:00:00,+07:00,+07 +1987-09-26T20:00:00,+06:00,+06 +1988-03-26T20:00:00,+07:00,+07 +1988-09-24T20:00:00,+06:00,+06 +1989-03-25T20:00:00,+07:00,+07 +1989-09-23T20:00:00,+06:00,+06 +1990-03-24T20:00:00,+07:00,+07 +1990-09-29T20:00:00,+06:00,+06 +1991-03-30T20:00:00,+06:00,+06 +1991-09-28T21:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-tbilisi.txt b/desk/gub/lib/pytz/asia-tbilisi.txt new file mode 100644 index 0000000..370ac1e --- /dev/null +++ b/desk/gub/lib/pytz/asia-tbilisi.txt @@ -0,0 +1,53 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:59,LMT +1901-12-13T20:45:52,+02:59,TBMT +1924-05-01T21:00:49,+03:00,+03 +1957-02-28T21:00:00,+04:00,+04 +1981-03-31T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+04:00,+04 +1982-03-31T20:00:00,+05:00,+05 +1982-09-30T19:00:00,+04:00,+04 +1983-03-31T20:00:00,+05:00,+05 +1983-09-30T19:00:00,+04:00,+04 +1984-03-31T20:00:00,+05:00,+05 +1984-09-29T22:00:00,+04:00,+04 +1985-03-30T22:00:00,+05:00,+05 +1985-09-28T22:00:00,+04:00,+04 +1986-03-29T22:00:00,+05:00,+05 +1986-09-27T22:00:00,+04:00,+04 +1987-03-28T22:00:00,+05:00,+05 +1987-09-26T22:00:00,+04:00,+04 +1988-03-26T22:00:00,+05:00,+05 +1988-09-24T22:00:00,+04:00,+04 +1989-03-25T22:00:00,+05:00,+05 +1989-09-23T22:00:00,+04:00,+04 +1990-03-24T22:00:00,+05:00,+05 +1990-09-29T22:00:00,+04:00,+04 +1991-03-30T22:00:00,+04:00,+04 +1991-09-28T23:00:00,+03:00,+03 +1992-03-28T21:00:00,+04:00,+04 +1992-09-26T20:00:00,+03:00,+03 +1993-03-27T21:00:00,+04:00,+04 +1993-09-25T20:00:00,+03:00,+03 +1994-03-26T21:00:00,+04:00,+04 +1994-09-24T20:00:00,+04:00,+04 +1995-03-25T20:00:00,+05:00,+05 +1995-09-23T19:00:00,+04:00,+04 +1996-03-30T20:00:00,+05:00,+05 +1997-10-25T19:00:00,+04:00,+04 +1998-03-28T20:00:00,+05:00,+05 +1998-10-24T19:00:00,+04:00,+04 +1999-03-27T20:00:00,+05:00,+05 +1999-10-30T19:00:00,+04:00,+04 +2000-03-25T20:00:00,+05:00,+05 +2000-10-28T19:00:00,+04:00,+04 +2001-03-24T20:00:00,+05:00,+05 +2001-10-27T19:00:00,+04:00,+04 +2002-03-30T20:00:00,+05:00,+05 +2002-10-26T19:00:00,+04:00,+04 +2003-03-29T20:00:00,+05:00,+05 +2003-10-25T19:00:00,+04:00,+04 +2004-03-27T20:00:00,+05:00,+05 +2004-06-26T19:00:00,+04:00,+04 +2004-10-30T23:00:00,+03:00,+03 +2005-03-26T23:00:00,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-tehran.txt b/desk/gub/lib/pytz/asia-tehran.txt new file mode 100644 index 0000000..fb9dea1 --- /dev/null +++ b/desk/gub/lib/pytz/asia-tehran.txt @@ -0,0 +1,73 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:26,LMT +1915-12-31T20:34:16,+03:26,TMT +1935-06-12T20:34:16,+03:30,+0330 +1977-03-21T19:30:00,+04:30,+0430 +1977-10-20T19:30:00,+04:00,+04 +1978-03-24T20:00:00,+05:00,+05 +1978-08-04T20:00:00,+04:00,+04 +1978-11-10T20:00:00,+03:30,+0330 +1979-05-26T20:30:00,+04:30,+0430 +1979-09-18T19:30:00,+03:30,+0330 +1980-03-20T20:30:00,+04:30,+0430 +1980-09-22T19:30:00,+03:30,+0330 +1991-05-02T20:30:00,+04:30,+0430 +1991-09-21T19:30:00,+03:30,+0330 +1992-03-21T20:30:00,+04:30,+0430 +1992-09-21T19:30:00,+03:30,+0330 +1993-03-21T20:30:00,+04:30,+0430 +1993-09-21T19:30:00,+03:30,+0330 +1994-03-21T20:30:00,+04:30,+0430 +1994-09-21T19:30:00,+03:30,+0330 +1995-03-21T20:30:00,+04:30,+0430 +1995-09-21T19:30:00,+03:30,+0330 +1996-03-20T20:30:00,+04:30,+0430 +1996-09-20T19:30:00,+03:30,+0330 +1997-03-21T20:30:00,+04:30,+0430 +1997-09-21T19:30:00,+03:30,+0330 +1998-03-21T20:30:00,+04:30,+0430 +1998-09-21T19:30:00,+03:30,+0330 +1999-03-21T20:30:00,+04:30,+0430 +1999-09-21T19:30:00,+03:30,+0330 +2000-03-20T20:30:00,+04:30,+0430 +2000-09-20T19:30:00,+03:30,+0330 +2001-03-21T20:30:00,+04:30,+0430 +2001-09-21T19:30:00,+03:30,+0330 +2002-03-21T20:30:00,+04:30,+0430 +2002-09-21T19:30:00,+03:30,+0330 +2003-03-21T20:30:00,+04:30,+0430 +2003-09-21T19:30:00,+03:30,+0330 +2004-03-20T20:30:00,+04:30,+0430 +2004-09-20T19:30:00,+03:30,+0330 +2005-03-21T20:30:00,+04:30,+0430 +2005-09-21T19:30:00,+03:30,+0330 +2008-03-20T20:30:00,+04:30,+0430 +2008-09-20T19:30:00,+03:30,+0330 +2009-03-21T20:30:00,+04:30,+0430 +2009-09-21T19:30:00,+03:30,+0330 +2010-03-21T20:30:00,+04:30,+0430 +2010-09-21T19:30:00,+03:30,+0330 +2011-03-21T20:30:00,+04:30,+0430 +2011-09-21T19:30:00,+03:30,+0330 +2012-03-20T20:30:00,+04:30,+0430 +2012-09-20T19:30:00,+03:30,+0330 +2013-03-21T20:30:00,+04:30,+0430 +2013-09-21T19:30:00,+03:30,+0330 +2014-03-21T20:30:00,+04:30,+0430 +2014-09-21T19:30:00,+03:30,+0330 +2015-03-21T20:30:00,+04:30,+0430 +2015-09-21T19:30:00,+03:30,+0330 +2016-03-20T20:30:00,+04:30,+0430 +2016-09-20T19:30:00,+03:30,+0330 +2017-03-21T20:30:00,+04:30,+0430 +2017-09-21T19:30:00,+03:30,+0330 +2018-03-21T20:30:00,+04:30,+0430 +2018-09-21T19:30:00,+03:30,+0330 +2019-03-21T20:30:00,+04:30,+0430 +2019-09-21T19:30:00,+03:30,+0330 +2020-03-20T20:30:00,+04:30,+0430 +2020-09-20T19:30:00,+03:30,+0330 +2021-03-21T20:30:00,+04:30,+0430 +2021-09-21T19:30:00,+03:30,+0330 +2022-03-21T20:30:00,+04:30,+0430 +2022-09-21T19:30:00,+03:30,+0330 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-tel-aviv.txt b/desk/gub/lib/pytz/asia-tel-aviv.txt new file mode 100644 index 0000000..66d21f3 --- /dev/null +++ b/desk/gub/lib/pytz/asia-tel-aviv.txt @@ -0,0 +1,151 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:21,LMT +1901-12-13T20:45:52,+02:21,JMT +1917-12-31T21:39:20,+02:00,IST +1940-06-01T00:00:00,+03:00,IDT +1940-10-01T00:00:00,+02:00,IST +1940-11-17T00:00:00,+03:00,IDT +1942-11-01T00:00:00,+02:00,IST +1943-04-01T00:00:00,+03:00,IDT +1943-11-01T00:00:00,+02:00,IST +1944-04-01T00:00:00,+03:00,IDT +1944-11-01T00:00:00,+02:00,IST +1945-04-16T00:00:00,+03:00,IDT +1945-11-01T00:00:00,+02:00,IST +1946-04-16T00:00:00,+03:00,IDT +1946-11-01T00:00:00,+02:00,IST +1948-05-23T00:00:00,+04:00,IDDT +1948-09-01T00:00:00,+03:00,IDT +1948-11-01T00:00:00,+02:00,IST +1949-05-01T00:00:00,+03:00,IDT +1949-11-01T00:00:00,+02:00,IST +1950-04-16T00:00:00,+03:00,IDT +1950-09-15T00:00:00,+02:00,IST +1951-04-01T00:00:00,+03:00,IDT +1951-11-11T00:00:00,+02:00,IST +1952-04-20T00:00:00,+03:00,IDT +1952-10-19T00:00:00,+02:00,IST +1953-04-12T00:00:00,+03:00,IDT +1953-09-13T00:00:00,+02:00,IST +1954-06-13T00:00:00,+03:00,IDT +1954-09-12T00:00:00,+02:00,IST +1955-06-12T00:00:00,+03:00,IDT +1955-09-11T00:00:00,+02:00,IST +1956-06-03T00:00:00,+03:00,IDT +1956-09-30T00:00:00,+02:00,IST +1957-04-28T00:00:00,+03:00,IDT +1957-09-22T00:00:00,+02:00,IST +1974-07-06T22:00:00,+03:00,IDT +1974-10-12T21:00:00,+02:00,IST +1975-04-19T22:00:00,+03:00,IDT +1975-08-30T21:00:00,+02:00,IST +1980-08-02T22:00:00,+03:00,IDT +1980-09-13T22:00:00,+02:00,IST +1984-05-05T22:00:00,+03:00,IDT +1984-08-25T22:00:00,+02:00,IST +1985-04-13T22:00:00,+03:00,IDT +1985-08-31T21:00:00,+02:00,IST +1986-05-17T22:00:00,+03:00,IDT +1986-09-06T21:00:00,+02:00,IST +1987-04-14T22:00:00,+03:00,IDT +1987-09-12T21:00:00,+02:00,IST +1988-04-09T22:00:00,+03:00,IDT +1988-09-03T21:00:00,+02:00,IST +1989-04-29T22:00:00,+03:00,IDT +1989-09-02T21:00:00,+02:00,IST +1990-03-24T22:00:00,+03:00,IDT +1990-08-25T21:00:00,+02:00,IST +1991-03-23T22:00:00,+03:00,IDT +1991-08-31T21:00:00,+02:00,IST +1992-03-28T22:00:00,+03:00,IDT +1992-09-05T21:00:00,+02:00,IST +1993-04-01T22:00:00,+03:00,IDT +1993-09-04T21:00:00,+02:00,IST +1994-03-31T22:00:00,+03:00,IDT +1994-08-27T21:00:00,+02:00,IST +1995-03-30T22:00:00,+03:00,IDT +1995-09-02T21:00:00,+02:00,IST +1996-03-14T22:00:00,+03:00,IDT +1996-09-15T21:00:00,+02:00,IST +1997-03-20T22:00:00,+03:00,IDT +1997-09-13T21:00:00,+02:00,IST +1998-03-19T22:00:00,+03:00,IDT +1998-09-05T21:00:00,+02:00,IST +1999-04-02T00:00:00,+03:00,IDT +1999-09-02T23:00:00,+02:00,IST +2000-04-14T00:00:00,+03:00,IDT +2000-10-05T22:00:00,+02:00,IST +2001-04-08T23:00:00,+03:00,IDT +2001-09-23T22:00:00,+02:00,IST +2002-03-28T23:00:00,+03:00,IDT +2002-10-06T22:00:00,+02:00,IST +2003-03-27T23:00:00,+03:00,IDT +2003-10-02T22:00:00,+02:00,IST +2004-04-06T23:00:00,+03:00,IDT +2004-09-21T22:00:00,+02:00,IST +2005-04-01T00:00:00,+03:00,IDT +2005-10-08T23:00:00,+02:00,IST +2006-03-31T00:00:00,+03:00,IDT +2006-09-30T23:00:00,+02:00,IST +2007-03-30T00:00:00,+03:00,IDT +2007-09-15T23:00:00,+02:00,IST +2008-03-28T00:00:00,+03:00,IDT +2008-10-04T23:00:00,+02:00,IST +2009-03-27T00:00:00,+03:00,IDT +2009-09-26T23:00:00,+02:00,IST +2010-03-26T00:00:00,+03:00,IDT +2010-09-11T23:00:00,+02:00,IST +2011-04-01T00:00:00,+03:00,IDT +2011-10-01T23:00:00,+02:00,IST +2012-03-30T00:00:00,+03:00,IDT +2012-09-22T23:00:00,+02:00,IST +2013-03-29T00:00:00,+03:00,IDT +2013-10-26T23:00:00,+02:00,IST +2014-03-28T00:00:00,+03:00,IDT +2014-10-25T23:00:00,+02:00,IST +2015-03-27T00:00:00,+03:00,IDT +2015-10-24T23:00:00,+02:00,IST +2016-03-25T00:00:00,+03:00,IDT +2016-10-29T23:00:00,+02:00,IST +2017-03-24T00:00:00,+03:00,IDT +2017-10-28T23:00:00,+02:00,IST +2018-03-23T00:00:00,+03:00,IDT +2018-10-27T23:00:00,+02:00,IST +2019-03-29T00:00:00,+03:00,IDT +2019-10-26T23:00:00,+02:00,IST +2020-03-27T00:00:00,+03:00,IDT +2020-10-24T23:00:00,+02:00,IST +2021-03-26T00:00:00,+03:00,IDT +2021-10-30T23:00:00,+02:00,IST +2022-03-25T00:00:00,+03:00,IDT +2022-10-29T23:00:00,+02:00,IST +2023-03-24T00:00:00,+03:00,IDT +2023-10-28T23:00:00,+02:00,IST +2024-03-29T00:00:00,+03:00,IDT +2024-10-26T23:00:00,+02:00,IST +2025-03-28T00:00:00,+03:00,IDT +2025-10-25T23:00:00,+02:00,IST +2026-03-27T00:00:00,+03:00,IDT +2026-10-24T23:00:00,+02:00,IST +2027-03-26T00:00:00,+03:00,IDT +2027-10-30T23:00:00,+02:00,IST +2028-03-24T00:00:00,+03:00,IDT +2028-10-28T23:00:00,+02:00,IST +2029-03-23T00:00:00,+03:00,IDT +2029-10-27T23:00:00,+02:00,IST +2030-03-29T00:00:00,+03:00,IDT +2030-10-26T23:00:00,+02:00,IST +2031-03-28T00:00:00,+03:00,IDT +2031-10-25T23:00:00,+02:00,IST +2032-03-26T00:00:00,+03:00,IDT +2032-10-30T23:00:00,+02:00,IST +2033-03-25T00:00:00,+03:00,IDT +2033-10-29T23:00:00,+02:00,IST +2034-03-24T00:00:00,+03:00,IDT +2034-10-28T23:00:00,+02:00,IST +2035-03-23T00:00:00,+03:00,IDT +2035-10-27T23:00:00,+02:00,IST +2036-03-28T00:00:00,+03:00,IDT +2036-10-25T23:00:00,+02:00,IST +2037-03-27T00:00:00,+03:00,IDT +2037-10-24T23:00:00,+02:00,IST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-thimbu.txt b/desk/gub/lib/pytz/asia-thimbu.txt new file mode 100644 index 0000000..79c6eeb --- /dev/null +++ b/desk/gub/lib/pytz/asia-thimbu.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:59,LMT +1947-08-14T18:01:24,+05:30,+0530 +1987-09-30T18:30:00,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-thimphu.txt b/desk/gub/lib/pytz/asia-thimphu.txt new file mode 100644 index 0000000..79c6eeb --- /dev/null +++ b/desk/gub/lib/pytz/asia-thimphu.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:59,LMT +1947-08-14T18:01:24,+05:30,+0530 +1987-09-30T18:30:00,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-tokyo.txt b/desk/gub/lib/pytz/asia-tokyo.txt new file mode 100644 index 0000000..605cd2b --- /dev/null +++ b/desk/gub/lib/pytz/asia-tokyo.txt @@ -0,0 +1,11 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:19,LMT +1901-12-13T20:45:52,+09:00,JST +1948-05-01T15:00:00,+10:00,JDT +1948-09-11T15:00:00,+09:00,JST +1949-04-02T15:00:00,+10:00,JDT +1949-09-10T15:00:00,+09:00,JST +1950-05-06T15:00:00,+10:00,JDT +1950-09-09T15:00:00,+09:00,JST +1951-05-05T15:00:00,+10:00,JDT +1951-09-08T15:00:00,+09:00,JST \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-tomsk.txt b/desk/gub/lib/pytz/asia-tomsk.txt new file mode 100644 index 0000000..ecf20d4 --- /dev/null +++ b/desk/gub/lib/pytz/asia-tomsk.txt @@ -0,0 +1,69 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:40,LMT +1919-12-21T18:20:09,+06:00,+06 +1930-06-20T18:00:00,+07:00,+07 +1981-03-31T17:00:00,+08:00,+08 +1981-09-30T16:00:00,+07:00,+07 +1982-03-31T17:00:00,+08:00,+08 +1982-09-30T16:00:00,+07:00,+07 +1983-03-31T17:00:00,+08:00,+08 +1983-09-30T16:00:00,+07:00,+07 +1984-03-31T17:00:00,+08:00,+08 +1984-09-29T19:00:00,+07:00,+07 +1985-03-30T19:00:00,+08:00,+08 +1985-09-28T19:00:00,+07:00,+07 +1986-03-29T19:00:00,+08:00,+08 +1986-09-27T19:00:00,+07:00,+07 +1987-03-28T19:00:00,+08:00,+08 +1987-09-26T19:00:00,+07:00,+07 +1988-03-26T19:00:00,+08:00,+08 +1988-09-24T19:00:00,+07:00,+07 +1989-03-25T19:00:00,+08:00,+08 +1989-09-23T19:00:00,+07:00,+07 +1990-03-24T19:00:00,+08:00,+08 +1990-09-29T19:00:00,+07:00,+07 +1991-03-30T19:00:00,+07:00,+07 +1991-09-28T20:00:00,+06:00,+06 +1992-01-18T20:00:00,+07:00,+07 +1992-03-28T19:00:00,+08:00,+08 +1992-09-26T19:00:00,+07:00,+07 +1993-03-27T19:00:00,+08:00,+08 +1993-09-25T19:00:00,+07:00,+07 +1994-03-26T19:00:00,+08:00,+08 +1994-09-24T19:00:00,+07:00,+07 +1995-03-25T19:00:00,+08:00,+08 +1995-09-23T19:00:00,+07:00,+07 +1996-03-30T19:00:00,+08:00,+08 +1996-10-26T19:00:00,+07:00,+07 +1997-03-29T19:00:00,+08:00,+08 +1997-10-25T19:00:00,+07:00,+07 +1998-03-28T19:00:00,+08:00,+08 +1998-10-24T19:00:00,+07:00,+07 +1999-03-27T19:00:00,+08:00,+08 +1999-10-30T19:00:00,+07:00,+07 +2000-03-25T19:00:00,+08:00,+08 +2000-10-28T19:00:00,+07:00,+07 +2001-03-24T19:00:00,+08:00,+08 +2001-10-27T19:00:00,+07:00,+07 +2002-03-30T19:00:00,+08:00,+08 +2002-04-30T19:00:00,+07:00,+07 +2002-10-26T20:00:00,+06:00,+06 +2003-03-29T20:00:00,+07:00,+07 +2003-10-25T20:00:00,+06:00,+06 +2004-03-27T20:00:00,+07:00,+07 +2004-10-30T20:00:00,+06:00,+06 +2005-03-26T20:00:00,+07:00,+07 +2005-10-29T20:00:00,+06:00,+06 +2006-03-25T20:00:00,+07:00,+07 +2006-10-28T20:00:00,+06:00,+06 +2007-03-24T20:00:00,+07:00,+07 +2007-10-27T20:00:00,+06:00,+06 +2008-03-29T20:00:00,+07:00,+07 +2008-10-25T20:00:00,+06:00,+06 +2009-03-28T20:00:00,+07:00,+07 +2009-10-24T20:00:00,+06:00,+06 +2010-03-27T20:00:00,+07:00,+07 +2010-10-30T20:00:00,+06:00,+06 +2011-03-26T20:00:00,+07:00,+07 +2014-10-25T19:00:00,+06:00,+06 +2016-05-28T20:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-ujung-pandang.txt b/desk/gub/lib/pytz/asia-ujung-pandang.txt new file mode 100644 index 0000000..6850601 --- /dev/null +++ b/desk/gub/lib/pytz/asia-ujung-pandang.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:58,LMT +1919-12-31T16:02:24,+07:58,MMT +1932-10-31T16:02:24,+08:00,+08 +1942-02-08T16:00:00,+09:00,+09 +1945-09-22T15:00:00,+08:00,WITA \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-ulaanbaatar.txt b/desk/gub/lib/pytz/asia-ulaanbaatar.txt new file mode 100644 index 0000000..720beab --- /dev/null +++ b/desk/gub/lib/pytz/asia-ulaanbaatar.txt @@ -0,0 +1,52 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:08,LMT +1905-07-31T16:52:28,+07:00,+07 +1977-12-31T17:00:00,+08:00,+08 +1983-03-31T16:00:00,+09:00,+09 +1983-09-30T15:00:00,+08:00,+08 +1984-03-31T16:00:00,+09:00,+09 +1984-09-29T15:00:00,+08:00,+08 +1985-03-30T16:00:00,+09:00,+09 +1985-09-28T15:00:00,+08:00,+08 +1986-03-29T16:00:00,+09:00,+09 +1986-09-27T15:00:00,+08:00,+08 +1987-03-28T16:00:00,+09:00,+09 +1987-09-26T15:00:00,+08:00,+08 +1988-03-26T16:00:00,+09:00,+09 +1988-09-24T15:00:00,+08:00,+08 +1989-03-25T16:00:00,+09:00,+09 +1989-09-23T15:00:00,+08:00,+08 +1990-03-24T16:00:00,+09:00,+09 +1990-09-29T15:00:00,+08:00,+08 +1991-03-30T16:00:00,+09:00,+09 +1991-09-28T15:00:00,+08:00,+08 +1992-03-28T16:00:00,+09:00,+09 +1992-09-26T15:00:00,+08:00,+08 +1993-03-27T16:00:00,+09:00,+09 +1993-09-25T15:00:00,+08:00,+08 +1994-03-26T16:00:00,+09:00,+09 +1994-09-24T15:00:00,+08:00,+08 +1995-03-25T16:00:00,+09:00,+09 +1995-09-23T15:00:00,+08:00,+08 +1996-03-30T16:00:00,+09:00,+09 +1996-09-28T15:00:00,+08:00,+08 +1997-03-29T16:00:00,+09:00,+09 +1997-09-27T15:00:00,+08:00,+08 +1998-03-28T16:00:00,+09:00,+09 +1998-09-26T15:00:00,+08:00,+08 +2001-04-27T18:00:00,+09:00,+09 +2001-09-28T17:00:00,+08:00,+08 +2002-03-29T18:00:00,+09:00,+09 +2002-09-27T17:00:00,+08:00,+08 +2003-03-28T18:00:00,+09:00,+09 +2003-09-26T17:00:00,+08:00,+08 +2004-03-26T18:00:00,+09:00,+09 +2004-09-24T17:00:00,+08:00,+08 +2005-03-25T18:00:00,+09:00,+09 +2005-09-23T17:00:00,+08:00,+08 +2006-03-24T18:00:00,+09:00,+09 +2006-09-29T17:00:00,+08:00,+08 +2015-03-27T18:00:00,+09:00,+09 +2015-09-25T15:00:00,+08:00,+08 +2016-03-25T18:00:00,+09:00,+09 +2016-09-23T15:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-ulan-bator.txt b/desk/gub/lib/pytz/asia-ulan-bator.txt new file mode 100644 index 0000000..720beab --- /dev/null +++ b/desk/gub/lib/pytz/asia-ulan-bator.txt @@ -0,0 +1,52 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:08,LMT +1905-07-31T16:52:28,+07:00,+07 +1977-12-31T17:00:00,+08:00,+08 +1983-03-31T16:00:00,+09:00,+09 +1983-09-30T15:00:00,+08:00,+08 +1984-03-31T16:00:00,+09:00,+09 +1984-09-29T15:00:00,+08:00,+08 +1985-03-30T16:00:00,+09:00,+09 +1985-09-28T15:00:00,+08:00,+08 +1986-03-29T16:00:00,+09:00,+09 +1986-09-27T15:00:00,+08:00,+08 +1987-03-28T16:00:00,+09:00,+09 +1987-09-26T15:00:00,+08:00,+08 +1988-03-26T16:00:00,+09:00,+09 +1988-09-24T15:00:00,+08:00,+08 +1989-03-25T16:00:00,+09:00,+09 +1989-09-23T15:00:00,+08:00,+08 +1990-03-24T16:00:00,+09:00,+09 +1990-09-29T15:00:00,+08:00,+08 +1991-03-30T16:00:00,+09:00,+09 +1991-09-28T15:00:00,+08:00,+08 +1992-03-28T16:00:00,+09:00,+09 +1992-09-26T15:00:00,+08:00,+08 +1993-03-27T16:00:00,+09:00,+09 +1993-09-25T15:00:00,+08:00,+08 +1994-03-26T16:00:00,+09:00,+09 +1994-09-24T15:00:00,+08:00,+08 +1995-03-25T16:00:00,+09:00,+09 +1995-09-23T15:00:00,+08:00,+08 +1996-03-30T16:00:00,+09:00,+09 +1996-09-28T15:00:00,+08:00,+08 +1997-03-29T16:00:00,+09:00,+09 +1997-09-27T15:00:00,+08:00,+08 +1998-03-28T16:00:00,+09:00,+09 +1998-09-26T15:00:00,+08:00,+08 +2001-04-27T18:00:00,+09:00,+09 +2001-09-28T17:00:00,+08:00,+08 +2002-03-29T18:00:00,+09:00,+09 +2002-09-27T17:00:00,+08:00,+08 +2003-03-28T18:00:00,+09:00,+09 +2003-09-26T17:00:00,+08:00,+08 +2004-03-26T18:00:00,+09:00,+09 +2004-09-24T17:00:00,+08:00,+08 +2005-03-25T18:00:00,+09:00,+09 +2005-09-23T17:00:00,+08:00,+08 +2006-03-24T18:00:00,+09:00,+09 +2006-09-29T17:00:00,+08:00,+08 +2015-03-27T18:00:00,+09:00,+09 +2015-09-25T15:00:00,+08:00,+08 +2016-03-25T18:00:00,+09:00,+09 +2016-09-23T15:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-urumqi.txt b/desk/gub/lib/pytz/asia-urumqi.txt new file mode 100644 index 0000000..45a94f4 --- /dev/null +++ b/desk/gub/lib/pytz/asia-urumqi.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:50,LMT +1927-12-31T18:09:40,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-ust-nera.txt b/desk/gub/lib/pytz/asia-ust-nera.txt new file mode 100644 index 0000000..6ec23c3 --- /dev/null +++ b/desk/gub/lib/pytz/asia-ust-nera.txt @@ -0,0 +1,68 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:33,LMT +1919-12-14T14:27:06,+08:00,+08 +1930-06-20T16:00:00,+09:00,+09 +1981-03-31T15:00:00,+12:00,+12 +1981-09-30T12:00:00,+11:00,+11 +1982-03-31T13:00:00,+12:00,+12 +1982-09-30T12:00:00,+11:00,+11 +1983-03-31T13:00:00,+12:00,+12 +1983-09-30T12:00:00,+11:00,+11 +1984-03-31T13:00:00,+12:00,+12 +1984-09-29T15:00:00,+11:00,+11 +1985-03-30T15:00:00,+12:00,+12 +1985-09-28T15:00:00,+11:00,+11 +1986-03-29T15:00:00,+12:00,+12 +1986-09-27T15:00:00,+11:00,+11 +1987-03-28T15:00:00,+12:00,+12 +1987-09-26T15:00:00,+11:00,+11 +1988-03-26T15:00:00,+12:00,+12 +1988-09-24T15:00:00,+11:00,+11 +1989-03-25T15:00:00,+12:00,+12 +1989-09-23T15:00:00,+11:00,+11 +1990-03-24T15:00:00,+12:00,+12 +1990-09-29T15:00:00,+11:00,+11 +1991-03-30T15:00:00,+11:00,+11 +1991-09-28T16:00:00,+10:00,+10 +1992-01-18T16:00:00,+11:00,+11 +1992-03-28T15:00:00,+12:00,+12 +1992-09-26T15:00:00,+11:00,+11 +1993-03-27T15:00:00,+12:00,+12 +1993-09-25T15:00:00,+11:00,+11 +1994-03-26T15:00:00,+12:00,+12 +1994-09-24T15:00:00,+11:00,+11 +1995-03-25T15:00:00,+12:00,+12 +1995-09-23T15:00:00,+11:00,+11 +1996-03-30T15:00:00,+12:00,+12 +1996-10-26T15:00:00,+11:00,+11 +1997-03-29T15:00:00,+12:00,+12 +1997-10-25T15:00:00,+11:00,+11 +1998-03-28T15:00:00,+12:00,+12 +1998-10-24T15:00:00,+11:00,+11 +1999-03-27T15:00:00,+12:00,+12 +1999-10-30T15:00:00,+11:00,+11 +2000-03-25T15:00:00,+12:00,+12 +2000-10-28T15:00:00,+11:00,+11 +2001-03-24T15:00:00,+12:00,+12 +2001-10-27T15:00:00,+11:00,+11 +2002-03-30T15:00:00,+12:00,+12 +2002-10-26T15:00:00,+11:00,+11 +2003-03-29T15:00:00,+12:00,+12 +2003-10-25T15:00:00,+11:00,+11 +2004-03-27T15:00:00,+12:00,+12 +2004-10-30T15:00:00,+11:00,+11 +2005-03-26T15:00:00,+12:00,+12 +2005-10-29T15:00:00,+11:00,+11 +2006-03-25T15:00:00,+12:00,+12 +2006-10-28T15:00:00,+11:00,+11 +2007-03-24T15:00:00,+12:00,+12 +2007-10-27T15:00:00,+11:00,+11 +2008-03-29T15:00:00,+12:00,+12 +2008-10-25T15:00:00,+11:00,+11 +2009-03-28T15:00:00,+12:00,+12 +2009-10-24T15:00:00,+11:00,+11 +2010-03-27T15:00:00,+12:00,+12 +2010-10-30T15:00:00,+11:00,+11 +2011-03-26T15:00:00,+12:00,+12 +2011-09-12T12:00:00,+11:00,+11 +2014-10-25T15:00:00,+10:00,+10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-vientiane.txt b/desk/gub/lib/pytz/asia-vientiane.txt new file mode 100644 index 0000000..3cb374b --- /dev/null +++ b/desk/gub/lib/pytz/asia-vientiane.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:42,LMT +1901-12-13T20:45:52,+06:42,BMT +1920-03-31T17:17:56,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-vladivostok.txt b/desk/gub/lib/pytz/asia-vladivostok.txt new file mode 100644 index 0000000..cc1d3b9 --- /dev/null +++ b/desk/gub/lib/pytz/asia-vladivostok.txt @@ -0,0 +1,67 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:48,LMT +1922-11-14T15:12:29,+09:00,+09 +1930-06-20T15:00:00,+10:00,+10 +1981-03-31T14:00:00,+11:00,+11 +1981-09-30T13:00:00,+10:00,+10 +1982-03-31T14:00:00,+11:00,+11 +1982-09-30T13:00:00,+10:00,+10 +1983-03-31T14:00:00,+11:00,+11 +1983-09-30T13:00:00,+10:00,+10 +1984-03-31T14:00:00,+11:00,+11 +1984-09-29T16:00:00,+10:00,+10 +1985-03-30T16:00:00,+11:00,+11 +1985-09-28T16:00:00,+10:00,+10 +1986-03-29T16:00:00,+11:00,+11 +1986-09-27T16:00:00,+10:00,+10 +1987-03-28T16:00:00,+11:00,+11 +1987-09-26T16:00:00,+10:00,+10 +1988-03-26T16:00:00,+11:00,+11 +1988-09-24T16:00:00,+10:00,+10 +1989-03-25T16:00:00,+11:00,+11 +1989-09-23T16:00:00,+10:00,+10 +1990-03-24T16:00:00,+11:00,+11 +1990-09-29T16:00:00,+10:00,+10 +1991-03-30T16:00:00,+10:00,+10 +1991-09-28T17:00:00,+09:00,+09 +1992-01-18T17:00:00,+10:00,+10 +1992-03-28T16:00:00,+11:00,+11 +1992-09-26T16:00:00,+10:00,+10 +1993-03-27T16:00:00,+11:00,+11 +1993-09-25T16:00:00,+10:00,+10 +1994-03-26T16:00:00,+11:00,+11 +1994-09-24T16:00:00,+10:00,+10 +1995-03-25T16:00:00,+11:00,+11 +1995-09-23T16:00:00,+10:00,+10 +1996-03-30T16:00:00,+11:00,+11 +1996-10-26T16:00:00,+10:00,+10 +1997-03-29T16:00:00,+11:00,+11 +1997-10-25T16:00:00,+10:00,+10 +1998-03-28T16:00:00,+11:00,+11 +1998-10-24T16:00:00,+10:00,+10 +1999-03-27T16:00:00,+11:00,+11 +1999-10-30T16:00:00,+10:00,+10 +2000-03-25T16:00:00,+11:00,+11 +2000-10-28T16:00:00,+10:00,+10 +2001-03-24T16:00:00,+11:00,+11 +2001-10-27T16:00:00,+10:00,+10 +2002-03-30T16:00:00,+11:00,+11 +2002-10-26T16:00:00,+10:00,+10 +2003-03-29T16:00:00,+11:00,+11 +2003-10-25T16:00:00,+10:00,+10 +2004-03-27T16:00:00,+11:00,+11 +2004-10-30T16:00:00,+10:00,+10 +2005-03-26T16:00:00,+11:00,+11 +2005-10-29T16:00:00,+10:00,+10 +2006-03-25T16:00:00,+11:00,+11 +2006-10-28T16:00:00,+10:00,+10 +2007-03-24T16:00:00,+11:00,+11 +2007-10-27T16:00:00,+10:00,+10 +2008-03-29T16:00:00,+11:00,+11 +2008-10-25T16:00:00,+10:00,+10 +2009-03-28T16:00:00,+11:00,+11 +2009-10-24T16:00:00,+10:00,+10 +2010-03-27T16:00:00,+11:00,+11 +2010-10-30T16:00:00,+10:00,+10 +2011-03-26T16:00:00,+11:00,+11 +2014-10-25T15:00:00,+10:00,+10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-yakutsk.txt b/desk/gub/lib/pytz/asia-yakutsk.txt new file mode 100644 index 0000000..9b68aa1 --- /dev/null +++ b/desk/gub/lib/pytz/asia-yakutsk.txt @@ -0,0 +1,67 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:39,LMT +1919-12-14T15:21:02,+08:00,+08 +1930-06-20T16:00:00,+09:00,+09 +1981-03-31T15:00:00,+10:00,+10 +1981-09-30T14:00:00,+09:00,+09 +1982-03-31T15:00:00,+10:00,+10 +1982-09-30T14:00:00,+09:00,+09 +1983-03-31T15:00:00,+10:00,+10 +1983-09-30T14:00:00,+09:00,+09 +1984-03-31T15:00:00,+10:00,+10 +1984-09-29T17:00:00,+09:00,+09 +1985-03-30T17:00:00,+10:00,+10 +1985-09-28T17:00:00,+09:00,+09 +1986-03-29T17:00:00,+10:00,+10 +1986-09-27T17:00:00,+09:00,+09 +1987-03-28T17:00:00,+10:00,+10 +1987-09-26T17:00:00,+09:00,+09 +1988-03-26T17:00:00,+10:00,+10 +1988-09-24T17:00:00,+09:00,+09 +1989-03-25T17:00:00,+10:00,+10 +1989-09-23T17:00:00,+09:00,+09 +1990-03-24T17:00:00,+10:00,+10 +1990-09-29T17:00:00,+09:00,+09 +1991-03-30T17:00:00,+09:00,+09 +1991-09-28T18:00:00,+08:00,+08 +1992-01-18T18:00:00,+09:00,+09 +1992-03-28T17:00:00,+10:00,+10 +1992-09-26T17:00:00,+09:00,+09 +1993-03-27T17:00:00,+10:00,+10 +1993-09-25T17:00:00,+09:00,+09 +1994-03-26T17:00:00,+10:00,+10 +1994-09-24T17:00:00,+09:00,+09 +1995-03-25T17:00:00,+10:00,+10 +1995-09-23T17:00:00,+09:00,+09 +1996-03-30T17:00:00,+10:00,+10 +1996-10-26T17:00:00,+09:00,+09 +1997-03-29T17:00:00,+10:00,+10 +1997-10-25T17:00:00,+09:00,+09 +1998-03-28T17:00:00,+10:00,+10 +1998-10-24T17:00:00,+09:00,+09 +1999-03-27T17:00:00,+10:00,+10 +1999-10-30T17:00:00,+09:00,+09 +2000-03-25T17:00:00,+10:00,+10 +2000-10-28T17:00:00,+09:00,+09 +2001-03-24T17:00:00,+10:00,+10 +2001-10-27T17:00:00,+09:00,+09 +2002-03-30T17:00:00,+10:00,+10 +2002-10-26T17:00:00,+09:00,+09 +2003-03-29T17:00:00,+10:00,+10 +2003-10-25T17:00:00,+09:00,+09 +2004-03-27T17:00:00,+10:00,+10 +2004-10-30T17:00:00,+09:00,+09 +2005-03-26T17:00:00,+10:00,+10 +2005-10-29T17:00:00,+09:00,+09 +2006-03-25T17:00:00,+10:00,+10 +2006-10-28T17:00:00,+09:00,+09 +2007-03-24T17:00:00,+10:00,+10 +2007-10-27T17:00:00,+09:00,+09 +2008-03-29T17:00:00,+10:00,+10 +2008-10-25T17:00:00,+09:00,+09 +2009-03-28T17:00:00,+10:00,+10 +2009-10-24T17:00:00,+09:00,+09 +2010-03-27T17:00:00,+10:00,+10 +2010-10-30T17:00:00,+09:00,+09 +2011-03-26T17:00:00,+10:00,+10 +2014-10-25T16:00:00,+09:00,+09 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-yangon.txt b/desk/gub/lib/pytz/asia-yangon.txt new file mode 100644 index 0000000..662c49c --- /dev/null +++ b/desk/gub/lib/pytz/asia-yangon.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:25,LMT +1901-12-13T20:45:52,+06:25,RMT +1919-12-31T17:35:13,+06:30,+0630 +1942-04-30T17:30:00,+09:00,+09 +1945-05-02T15:00:00,+06:30,+0630 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-yekaterinburg.txt b/desk/gub/lib/pytz/asia-yekaterinburg.txt new file mode 100644 index 0000000..284aa31 --- /dev/null +++ b/desk/gub/lib/pytz/asia-yekaterinburg.txt @@ -0,0 +1,68 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:03,LMT +1916-07-02T19:57:27,+03:45,PMT +1919-07-15T00:14:55,+04:00,+04 +1930-06-20T20:00:00,+05:00,+05 +1981-03-31T19:00:00,+06:00,+06 +1981-09-30T18:00:00,+05:00,+05 +1982-03-31T19:00:00,+06:00,+06 +1982-09-30T18:00:00,+05:00,+05 +1983-03-31T19:00:00,+06:00,+06 +1983-09-30T18:00:00,+05:00,+05 +1984-03-31T19:00:00,+06:00,+06 +1984-09-29T21:00:00,+05:00,+05 +1985-03-30T21:00:00,+06:00,+06 +1985-09-28T21:00:00,+05:00,+05 +1986-03-29T21:00:00,+06:00,+06 +1986-09-27T21:00:00,+05:00,+05 +1987-03-28T21:00:00,+06:00,+06 +1987-09-26T21:00:00,+05:00,+05 +1988-03-26T21:00:00,+06:00,+06 +1988-09-24T21:00:00,+05:00,+05 +1989-03-25T21:00:00,+06:00,+06 +1989-09-23T21:00:00,+05:00,+05 +1990-03-24T21:00:00,+06:00,+06 +1990-09-29T21:00:00,+05:00,+05 +1991-03-30T21:00:00,+05:00,+05 +1991-09-28T22:00:00,+04:00,+04 +1992-01-18T22:00:00,+05:00,+05 +1992-03-28T21:00:00,+06:00,+06 +1992-09-26T21:00:00,+05:00,+05 +1993-03-27T21:00:00,+06:00,+06 +1993-09-25T21:00:00,+05:00,+05 +1994-03-26T21:00:00,+06:00,+06 +1994-09-24T21:00:00,+05:00,+05 +1995-03-25T21:00:00,+06:00,+06 +1995-09-23T21:00:00,+05:00,+05 +1996-03-30T21:00:00,+06:00,+06 +1996-10-26T21:00:00,+05:00,+05 +1997-03-29T21:00:00,+06:00,+06 +1997-10-25T21:00:00,+05:00,+05 +1998-03-28T21:00:00,+06:00,+06 +1998-10-24T21:00:00,+05:00,+05 +1999-03-27T21:00:00,+06:00,+06 +1999-10-30T21:00:00,+05:00,+05 +2000-03-25T21:00:00,+06:00,+06 +2000-10-28T21:00:00,+05:00,+05 +2001-03-24T21:00:00,+06:00,+06 +2001-10-27T21:00:00,+05:00,+05 +2002-03-30T21:00:00,+06:00,+06 +2002-10-26T21:00:00,+05:00,+05 +2003-03-29T21:00:00,+06:00,+06 +2003-10-25T21:00:00,+05:00,+05 +2004-03-27T21:00:00,+06:00,+06 +2004-10-30T21:00:00,+05:00,+05 +2005-03-26T21:00:00,+06:00,+06 +2005-10-29T21:00:00,+05:00,+05 +2006-03-25T21:00:00,+06:00,+06 +2006-10-28T21:00:00,+05:00,+05 +2007-03-24T21:00:00,+06:00,+06 +2007-10-27T21:00:00,+05:00,+05 +2008-03-29T21:00:00,+06:00,+06 +2008-10-25T21:00:00,+05:00,+05 +2009-03-28T21:00:00,+06:00,+06 +2009-10-24T21:00:00,+05:00,+05 +2010-03-27T21:00:00,+06:00,+06 +2010-10-30T21:00:00,+05:00,+05 +2011-03-26T21:00:00,+06:00,+06 +2014-10-25T20:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/asia-yerevan.txt b/desk/gub/lib/pytz/asia-yerevan.txt new file mode 100644 index 0000000..7b3cfd7 --- /dev/null +++ b/desk/gub/lib/pytz/asia-yerevan.txt @@ -0,0 +1,64 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:58,LMT +1924-05-01T21:02:00,+03:00,+03 +1957-02-28T21:00:00,+04:00,+04 +1981-03-31T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+04:00,+04 +1982-03-31T20:00:00,+05:00,+05 +1982-09-30T19:00:00,+04:00,+04 +1983-03-31T20:00:00,+05:00,+05 +1983-09-30T19:00:00,+04:00,+04 +1984-03-31T20:00:00,+05:00,+05 +1984-09-29T22:00:00,+04:00,+04 +1985-03-30T22:00:00,+05:00,+05 +1985-09-28T22:00:00,+04:00,+04 +1986-03-29T22:00:00,+05:00,+05 +1986-09-27T22:00:00,+04:00,+04 +1987-03-28T22:00:00,+05:00,+05 +1987-09-26T22:00:00,+04:00,+04 +1988-03-26T22:00:00,+05:00,+05 +1988-09-24T22:00:00,+04:00,+04 +1989-03-25T22:00:00,+05:00,+05 +1989-09-23T22:00:00,+04:00,+04 +1990-03-24T22:00:00,+05:00,+05 +1990-09-29T22:00:00,+04:00,+04 +1991-03-30T22:00:00,+04:00,+04 +1991-09-28T23:00:00,+03:00,+03 +1992-03-28T23:00:00,+04:00,+04 +1992-09-26T23:00:00,+03:00,+03 +1993-03-27T23:00:00,+04:00,+04 +1993-09-25T23:00:00,+03:00,+03 +1994-03-26T23:00:00,+04:00,+04 +1994-09-24T23:00:00,+03:00,+03 +1995-03-25T23:00:00,+04:00,+04 +1995-09-23T23:00:00,+04:00,+04 +1997-03-29T22:00:00,+05:00,+05 +1997-10-25T22:00:00,+04:00,+04 +1998-03-28T22:00:00,+05:00,+05 +1998-10-24T22:00:00,+04:00,+04 +1999-03-27T22:00:00,+05:00,+05 +1999-10-30T22:00:00,+04:00,+04 +2000-03-25T22:00:00,+05:00,+05 +2000-10-28T22:00:00,+04:00,+04 +2001-03-24T22:00:00,+05:00,+05 +2001-10-27T22:00:00,+04:00,+04 +2002-03-30T22:00:00,+05:00,+05 +2002-10-26T22:00:00,+04:00,+04 +2003-03-29T22:00:00,+05:00,+05 +2003-10-25T22:00:00,+04:00,+04 +2004-03-27T22:00:00,+05:00,+05 +2004-10-30T22:00:00,+04:00,+04 +2005-03-26T22:00:00,+05:00,+05 +2005-10-29T22:00:00,+04:00,+04 +2006-03-25T22:00:00,+05:00,+05 +2006-10-28T22:00:00,+04:00,+04 +2007-03-24T22:00:00,+05:00,+05 +2007-10-27T22:00:00,+04:00,+04 +2008-03-29T22:00:00,+05:00,+05 +2008-10-25T22:00:00,+04:00,+04 +2009-03-28T22:00:00,+05:00,+05 +2009-10-24T22:00:00,+04:00,+04 +2010-03-27T22:00:00,+05:00,+05 +2010-10-30T22:00:00,+04:00,+04 +2011-03-26T22:00:00,+05:00,+05 +2011-10-29T22:00:00,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-azores.txt b/desk/gub/lib/pytz/atlantic-azores.txt new file mode 100644 index 0000000..1b585db --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-azores.txt @@ -0,0 +1,217 @@ +Time,Offset,Name +1901-12-13T20:45:52,-02:05,HMT +1912-01-01T02:00:00,-02:00,-02 +1916-06-18T01:00:00,-01:00,-01 +1916-11-01T02:00:00,-02:00,-02 +1917-03-01T02:00:00,-01:00,-01 +1917-10-15T01:00:00,-02:00,-02 +1918-03-01T02:00:00,-01:00,-01 +1918-10-15T01:00:00,-02:00,-02 +1919-03-01T02:00:00,-01:00,-01 +1919-10-15T01:00:00,-02:00,-02 +1920-03-01T02:00:00,-01:00,-01 +1920-10-15T01:00:00,-02:00,-02 +1921-03-01T02:00:00,-01:00,-01 +1921-10-15T01:00:00,-02:00,-02 +1924-04-17T01:00:00,-01:00,-01 +1924-10-05T01:00:00,-02:00,-02 +1926-04-18T01:00:00,-01:00,-01 +1926-10-03T01:00:00,-02:00,-02 +1927-04-10T01:00:00,-01:00,-01 +1927-10-02T01:00:00,-02:00,-02 +1928-04-15T01:00:00,-01:00,-01 +1928-10-07T01:00:00,-02:00,-02 +1929-04-21T01:00:00,-01:00,-01 +1929-10-06T01:00:00,-02:00,-02 +1931-04-19T01:00:00,-01:00,-01 +1931-10-04T01:00:00,-02:00,-02 +1932-04-03T01:00:00,-01:00,-01 +1932-10-02T01:00:00,-02:00,-02 +1934-04-08T01:00:00,-01:00,-01 +1934-10-07T01:00:00,-02:00,-02 +1935-03-31T01:00:00,-01:00,-01 +1935-10-06T01:00:00,-02:00,-02 +1936-04-19T01:00:00,-01:00,-01 +1936-10-04T01:00:00,-02:00,-02 +1937-04-04T01:00:00,-01:00,-01 +1937-10-03T01:00:00,-02:00,-02 +1938-03-27T01:00:00,-01:00,-01 +1938-10-02T01:00:00,-02:00,-02 +1939-04-16T01:00:00,-01:00,-01 +1939-11-19T01:00:00,-02:00,-02 +1940-02-25T01:00:00,-01:00,-01 +1940-10-08T01:00:00,-02:00,-02 +1941-04-06T01:00:00,-01:00,-01 +1941-10-06T01:00:00,-02:00,-02 +1942-03-15T01:00:00,-01:00,-01 +1942-04-26T00:00:00,+00:00,+00 +1942-08-16T00:00:00,-01:00,-01 +1942-10-25T01:00:00,-02:00,-02 +1943-03-14T01:00:00,-01:00,-01 +1943-04-18T00:00:00,+00:00,+00 +1943-08-29T00:00:00,-01:00,-01 +1943-10-31T01:00:00,-02:00,-02 +1944-03-12T01:00:00,-01:00,-01 +1944-04-23T00:00:00,+00:00,+00 +1944-08-27T00:00:00,-01:00,-01 +1944-10-29T01:00:00,-02:00,-02 +1945-03-11T01:00:00,-01:00,-01 +1945-04-22T00:00:00,+00:00,+00 +1945-08-26T00:00:00,-01:00,-01 +1945-10-28T01:00:00,-02:00,-02 +1946-04-07T01:00:00,-01:00,-01 +1946-10-06T01:00:00,-02:00,-02 +1947-04-06T04:00:00,-01:00,-01 +1947-10-05T04:00:00,-02:00,-02 +1948-04-04T04:00:00,-01:00,-01 +1948-10-03T04:00:00,-02:00,-02 +1949-04-03T04:00:00,-01:00,-01 +1949-10-02T04:00:00,-02:00,-02 +1950-04-02T04:00:00,-01:00,-01 +1950-10-01T04:00:00,-02:00,-02 +1951-04-01T04:00:00,-01:00,-01 +1951-10-07T04:00:00,-02:00,-02 +1952-04-06T04:00:00,-01:00,-01 +1952-10-05T04:00:00,-02:00,-02 +1953-04-05T04:00:00,-01:00,-01 +1953-10-04T04:00:00,-02:00,-02 +1954-04-04T04:00:00,-01:00,-01 +1954-10-03T04:00:00,-02:00,-02 +1955-04-03T04:00:00,-01:00,-01 +1955-10-02T04:00:00,-02:00,-02 +1956-04-01T04:00:00,-01:00,-01 +1956-10-07T04:00:00,-02:00,-02 +1957-04-07T04:00:00,-01:00,-01 +1957-10-06T04:00:00,-02:00,-02 +1958-04-06T04:00:00,-01:00,-01 +1958-10-05T04:00:00,-02:00,-02 +1959-04-05T04:00:00,-01:00,-01 +1959-10-04T04:00:00,-02:00,-02 +1960-04-03T04:00:00,-01:00,-01 +1960-10-02T04:00:00,-02:00,-02 +1961-04-02T04:00:00,-01:00,-01 +1961-10-01T04:00:00,-02:00,-02 +1962-04-01T04:00:00,-01:00,-01 +1962-10-07T04:00:00,-02:00,-02 +1963-04-07T04:00:00,-01:00,-01 +1963-10-06T04:00:00,-02:00,-02 +1964-04-05T04:00:00,-01:00,-01 +1964-10-04T04:00:00,-02:00,-02 +1965-04-04T04:00:00,-01:00,-01 +1965-10-03T04:00:00,-02:00,-02 +1966-04-03T04:00:00,-01:00,-01 +1966-10-02T04:00:00,-01:00,-01 +1982-03-28T01:00:00,+00:00,+00 +1982-09-26T01:00:00,-01:00,-01 +1983-03-27T01:00:00,+00:00,+00 +1983-09-25T01:00:00,-01:00,-01 +1984-03-25T01:00:00,+00:00,+00 +1984-09-30T01:00:00,-01:00,-01 +1985-03-31T01:00:00,+00:00,+00 +1985-09-29T01:00:00,-01:00,-01 +1986-03-30T01:00:00,+00:00,+00 +1986-09-28T01:00:00,-01:00,-01 +1987-03-29T01:00:00,+00:00,+00 +1987-09-27T01:00:00,-01:00,-01 +1988-03-27T01:00:00,+00:00,+00 +1988-09-25T01:00:00,-01:00,-01 +1989-03-26T01:00:00,+00:00,+00 +1989-09-24T01:00:00,-01:00,-01 +1990-03-25T01:00:00,+00:00,+00 +1990-09-30T01:00:00,-01:00,-01 +1991-03-31T01:00:00,+00:00,+00 +1991-09-29T01:00:00,-01:00,-01 +1992-03-29T01:00:00,+00:00,+00 +1992-09-27T01:00:00,-01:00,-01 +1992-12-27T02:00:00,+00:00,WET +1993-03-28T01:00:00,+01:00,WEST +1993-06-17T01:00:00,+00:00,+00 +1993-09-26T01:00:00,-01:00,-01 +1994-03-27T01:00:00,+00:00,+00 +1994-09-25T01:00:00,-01:00,-01 +1995-03-26T01:00:00,+00:00,+00 +1995-09-24T01:00:00,-01:00,-01 +1996-03-31T01:00:00,+00:00,+00 +1996-10-27T01:00:00,-01:00,-01 +1997-03-30T01:00:00,+00:00,+00 +1997-10-26T01:00:00,-01:00,-01 +1998-03-29T01:00:00,+00:00,+00 +1998-10-25T01:00:00,-01:00,-01 +1999-03-28T01:00:00,+00:00,+00 +1999-10-31T01:00:00,-01:00,-01 +2000-03-26T01:00:00,+00:00,+00 +2000-10-29T01:00:00,-01:00,-01 +2001-03-25T01:00:00,+00:00,+00 +2001-10-28T01:00:00,-01:00,-01 +2002-03-31T01:00:00,+00:00,+00 +2002-10-27T01:00:00,-01:00,-01 +2003-03-30T01:00:00,+00:00,+00 +2003-10-26T01:00:00,-01:00,-01 +2004-03-28T01:00:00,+00:00,+00 +2004-10-31T01:00:00,-01:00,-01 +2005-03-27T01:00:00,+00:00,+00 +2005-10-30T01:00:00,-01:00,-01 +2006-03-26T01:00:00,+00:00,+00 +2006-10-29T01:00:00,-01:00,-01 +2007-03-25T01:00:00,+00:00,+00 +2007-10-28T01:00:00,-01:00,-01 +2008-03-30T01:00:00,+00:00,+00 +2008-10-26T01:00:00,-01:00,-01 +2009-03-29T01:00:00,+00:00,+00 +2009-10-25T01:00:00,-01:00,-01 +2010-03-28T01:00:00,+00:00,+00 +2010-10-31T01:00:00,-01:00,-01 +2011-03-27T01:00:00,+00:00,+00 +2011-10-30T01:00:00,-01:00,-01 +2012-03-25T01:00:00,+00:00,+00 +2012-10-28T01:00:00,-01:00,-01 +2013-03-31T01:00:00,+00:00,+00 +2013-10-27T01:00:00,-01:00,-01 +2014-03-30T01:00:00,+00:00,+00 +2014-10-26T01:00:00,-01:00,-01 +2015-03-29T01:00:00,+00:00,+00 +2015-10-25T01:00:00,-01:00,-01 +2016-03-27T01:00:00,+00:00,+00 +2016-10-30T01:00:00,-01:00,-01 +2017-03-26T01:00:00,+00:00,+00 +2017-10-29T01:00:00,-01:00,-01 +2018-03-25T01:00:00,+00:00,+00 +2018-10-28T01:00:00,-01:00,-01 +2019-03-31T01:00:00,+00:00,+00 +2019-10-27T01:00:00,-01:00,-01 +2020-03-29T01:00:00,+00:00,+00 +2020-10-25T01:00:00,-01:00,-01 +2021-03-28T01:00:00,+00:00,+00 +2021-10-31T01:00:00,-01:00,-01 +2022-03-27T01:00:00,+00:00,+00 +2022-10-30T01:00:00,-01:00,-01 +2023-03-26T01:00:00,+00:00,+00 +2023-10-29T01:00:00,-01:00,-01 +2024-03-31T01:00:00,+00:00,+00 +2024-10-27T01:00:00,-01:00,-01 +2025-03-30T01:00:00,+00:00,+00 +2025-10-26T01:00:00,-01:00,-01 +2026-03-29T01:00:00,+00:00,+00 +2026-10-25T01:00:00,-01:00,-01 +2027-03-28T01:00:00,+00:00,+00 +2027-10-31T01:00:00,-01:00,-01 +2028-03-26T01:00:00,+00:00,+00 +2028-10-29T01:00:00,-01:00,-01 +2029-03-25T01:00:00,+00:00,+00 +2029-10-28T01:00:00,-01:00,-01 +2030-03-31T01:00:00,+00:00,+00 +2030-10-27T01:00:00,-01:00,-01 +2031-03-30T01:00:00,+00:00,+00 +2031-10-26T01:00:00,-01:00,-01 +2032-03-28T01:00:00,+00:00,+00 +2032-10-31T01:00:00,-01:00,-01 +2033-03-27T01:00:00,+00:00,+00 +2033-10-30T01:00:00,-01:00,-01 +2034-03-26T01:00:00,+00:00,+00 +2034-10-29T01:00:00,-01:00,-01 +2035-03-25T01:00:00,+00:00,+00 +2035-10-28T01:00:00,-01:00,-01 +2036-03-30T01:00:00,+00:00,+00 +2036-10-26T01:00:00,-01:00,-01 +2037-03-29T01:00:00,+00:00,+00 +2037-10-25T01:00:00,-01:00,-01 \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-bermuda.txt b/desk/gub/lib/pytz/atlantic-bermuda.txt new file mode 100644 index 0000000..3b8c236 --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-bermuda.txt @@ -0,0 +1,157 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:41,BMT +1917-04-06T04:19:18,-04:41,BST +1917-10-01T03:19:18,-05:41,BMT +1918-04-14T04:19:18,-04:41,BST +1918-09-16T03:19:18,-05:41,BMT +1930-01-01T06:19:18,-04:00,AST +1942-01-11T06:00:00,-03:00,ADT +1942-10-18T05:00:00,-04:00,AST +1943-03-21T06:00:00,-03:00,ADT +1943-10-31T05:00:00,-04:00,AST +1944-03-12T06:00:00,-03:00,ADT +1944-11-05T05:00:00,-04:00,AST +1945-03-11T06:00:00,-03:00,ADT +1945-11-04T05:00:00,-04:00,AST +1947-05-18T06:00:00,-03:00,ADT +1947-09-14T05:00:00,-04:00,AST +1948-05-23T06:00:00,-03:00,ADT +1948-09-05T05:00:00,-04:00,AST +1949-05-22T06:00:00,-03:00,ADT +1949-09-04T05:00:00,-04:00,AST +1950-05-28T06:00:00,-03:00,ADT +1950-09-03T05:00:00,-04:00,AST +1951-05-27T06:00:00,-03:00,ADT +1951-09-02T05:00:00,-04:00,AST +1952-05-25T06:00:00,-03:00,ADT +1952-09-07T05:00:00,-04:00,AST +1956-05-27T06:00:00,-03:00,ADT +1956-10-28T05:00:00,-04:00,AST +1974-04-28T06:00:00,-03:00,ADT +1974-10-27T05:00:00,-04:00,AST +1975-04-27T06:00:00,-03:00,ADT +1975-10-26T05:00:00,-04:00,AST +1976-04-25T06:00:00,-03:00,ADT +1976-10-31T05:00:00,-04:00,AST +1977-04-24T06:00:00,-03:00,ADT +1977-10-30T05:00:00,-04:00,AST +1978-04-30T06:00:00,-03:00,ADT +1978-10-29T05:00:00,-04:00,AST +1979-04-29T06:00:00,-03:00,ADT +1979-10-28T05:00:00,-04:00,AST +1980-04-27T06:00:00,-03:00,ADT +1980-10-26T05:00:00,-04:00,AST +1981-04-26T06:00:00,-03:00,ADT +1981-10-25T05:00:00,-04:00,AST +1982-04-25T06:00:00,-03:00,ADT +1982-10-31T05:00:00,-04:00,AST +1983-04-24T06:00:00,-03:00,ADT +1983-10-30T05:00:00,-04:00,AST +1984-04-29T06:00:00,-03:00,ADT +1984-10-28T05:00:00,-04:00,AST +1985-04-28T06:00:00,-03:00,ADT +1985-10-27T05:00:00,-04:00,AST +1986-04-27T06:00:00,-03:00,ADT +1986-10-26T05:00:00,-04:00,AST +1987-04-05T06:00:00,-03:00,ADT +1987-10-25T05:00:00,-04:00,AST +1988-04-03T06:00:00,-03:00,ADT +1988-10-30T05:00:00,-04:00,AST +1989-04-02T06:00:00,-03:00,ADT +1989-10-29T05:00:00,-04:00,AST +1990-04-01T06:00:00,-03:00,ADT +1990-10-28T05:00:00,-04:00,AST +1991-04-07T06:00:00,-03:00,ADT +1991-10-27T05:00:00,-04:00,AST +1992-04-05T06:00:00,-03:00,ADT +1992-10-25T05:00:00,-04:00,AST +1993-04-04T06:00:00,-03:00,ADT +1993-10-31T05:00:00,-04:00,AST +1994-04-03T06:00:00,-03:00,ADT +1994-10-30T05:00:00,-04:00,AST +1995-04-02T06:00:00,-03:00,ADT +1995-10-29T05:00:00,-04:00,AST +1996-04-07T06:00:00,-03:00,ADT +1996-10-27T05:00:00,-04:00,AST +1997-04-06T06:00:00,-03:00,ADT +1997-10-26T05:00:00,-04:00,AST +1998-04-05T06:00:00,-03:00,ADT +1998-10-25T05:00:00,-04:00,AST +1999-04-04T06:00:00,-03:00,ADT +1999-10-31T05:00:00,-04:00,AST +2000-04-02T06:00:00,-03:00,ADT +2000-10-29T05:00:00,-04:00,AST +2001-04-01T06:00:00,-03:00,ADT +2001-10-28T05:00:00,-04:00,AST +2002-04-07T06:00:00,-03:00,ADT +2002-10-27T05:00:00,-04:00,AST +2003-04-06T06:00:00,-03:00,ADT +2003-10-26T05:00:00,-04:00,AST +2004-04-04T06:00:00,-03:00,ADT +2004-10-31T05:00:00,-04:00,AST +2005-04-03T06:00:00,-03:00,ADT +2005-10-30T05:00:00,-04:00,AST +2006-04-02T06:00:00,-03:00,ADT +2006-10-29T05:00:00,-04:00,AST +2007-03-11T06:00:00,-03:00,ADT +2007-11-04T05:00:00,-04:00,AST +2008-03-09T06:00:00,-03:00,ADT +2008-11-02T05:00:00,-04:00,AST +2009-03-08T06:00:00,-03:00,ADT +2009-11-01T05:00:00,-04:00,AST +2010-03-14T06:00:00,-03:00,ADT +2010-11-07T05:00:00,-04:00,AST +2011-03-13T06:00:00,-03:00,ADT +2011-11-06T05:00:00,-04:00,AST +2012-03-11T06:00:00,-03:00,ADT +2012-11-04T05:00:00,-04:00,AST +2013-03-10T06:00:00,-03:00,ADT +2013-11-03T05:00:00,-04:00,AST +2014-03-09T06:00:00,-03:00,ADT +2014-11-02T05:00:00,-04:00,AST +2015-03-08T06:00:00,-03:00,ADT +2015-11-01T05:00:00,-04:00,AST +2016-03-13T06:00:00,-03:00,ADT +2016-11-06T05:00:00,-04:00,AST +2017-03-12T06:00:00,-03:00,ADT +2017-11-05T05:00:00,-04:00,AST +2018-03-11T06:00:00,-03:00,ADT +2018-11-04T05:00:00,-04:00,AST +2019-03-10T06:00:00,-03:00,ADT +2019-11-03T05:00:00,-04:00,AST +2020-03-08T06:00:00,-03:00,ADT +2020-11-01T05:00:00,-04:00,AST +2021-03-14T06:00:00,-03:00,ADT +2021-11-07T05:00:00,-04:00,AST +2022-03-13T06:00:00,-03:00,ADT +2022-11-06T05:00:00,-04:00,AST +2023-03-12T06:00:00,-03:00,ADT +2023-11-05T05:00:00,-04:00,AST +2024-03-10T06:00:00,-03:00,ADT +2024-11-03T05:00:00,-04:00,AST +2025-03-09T06:00:00,-03:00,ADT +2025-11-02T05:00:00,-04:00,AST +2026-03-08T06:00:00,-03:00,ADT +2026-11-01T05:00:00,-04:00,AST +2027-03-14T06:00:00,-03:00,ADT +2027-11-07T05:00:00,-04:00,AST +2028-03-12T06:00:00,-03:00,ADT +2028-11-05T05:00:00,-04:00,AST +2029-03-11T06:00:00,-03:00,ADT +2029-11-04T05:00:00,-04:00,AST +2030-03-10T06:00:00,-03:00,ADT +2030-11-03T05:00:00,-04:00,AST +2031-03-09T06:00:00,-03:00,ADT +2031-11-02T05:00:00,-04:00,AST +2032-03-14T06:00:00,-03:00,ADT +2032-11-07T05:00:00,-04:00,AST +2033-03-13T06:00:00,-03:00,ADT +2033-11-06T05:00:00,-04:00,AST +2034-03-12T06:00:00,-03:00,ADT +2034-11-05T05:00:00,-04:00,AST +2035-03-11T06:00:00,-03:00,ADT +2035-11-04T05:00:00,-04:00,AST +2036-03-09T06:00:00,-03:00,ADT +2036-11-02T05:00:00,-04:00,AST +2037-03-08T06:00:00,-03:00,ADT +2037-11-01T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-canary.txt b/desk/gub/lib/pytz/atlantic-canary.txt new file mode 100644 index 0000000..e57680c --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-canary.txt @@ -0,0 +1,119 @@ +Time,Offset,Name +1922-03-01T01:01:36,-01:00,-01 +1946-09-30T02:00:00,+00:00,WET +1980-04-06T00:00:00,+01:00,WEST +1980-09-28T01:00:00,+00:00,WET +1981-03-29T01:00:00,+01:00,WEST +1981-09-27T01:00:00,+00:00,WET +1982-03-28T01:00:00,+01:00,WEST +1982-09-26T01:00:00,+00:00,WET +1983-03-27T01:00:00,+01:00,WEST +1983-09-25T01:00:00,+00:00,WET +1984-03-25T01:00:00,+01:00,WEST +1984-09-30T01:00:00,+00:00,WET +1985-03-31T01:00:00,+01:00,WEST +1985-09-29T01:00:00,+00:00,WET +1986-03-30T01:00:00,+01:00,WEST +1986-09-28T01:00:00,+00:00,WET +1987-03-29T01:00:00,+01:00,WEST +1987-09-27T01:00:00,+00:00,WET +1988-03-27T01:00:00,+01:00,WEST +1988-09-25T01:00:00,+00:00,WET +1989-03-26T01:00:00,+01:00,WEST +1989-09-24T01:00:00,+00:00,WET +1990-03-25T01:00:00,+01:00,WEST +1990-09-30T01:00:00,+00:00,WET +1991-03-31T01:00:00,+01:00,WEST +1991-09-29T01:00:00,+00:00,WET +1992-03-29T01:00:00,+01:00,WEST +1992-09-27T01:00:00,+00:00,WET +1993-03-28T01:00:00,+01:00,WEST +1993-09-26T01:00:00,+00:00,WET +1994-03-27T01:00:00,+01:00,WEST +1994-09-25T01:00:00,+00:00,WET +1995-03-26T01:00:00,+01:00,WEST +1995-09-24T01:00:00,+00:00,WET +1996-03-31T01:00:00,+01:00,WEST +1996-10-27T01:00:00,+00:00,WET +1997-03-30T01:00:00,+01:00,WEST +1997-10-26T01:00:00,+00:00,WET +1998-03-29T01:00:00,+01:00,WEST +1998-10-25T01:00:00,+00:00,WET +1999-03-28T01:00:00,+01:00,WEST +1999-10-31T01:00:00,+00:00,WET +2000-03-26T01:00:00,+01:00,WEST +2000-10-29T01:00:00,+00:00,WET +2001-03-25T01:00:00,+01:00,WEST +2001-10-28T01:00:00,+00:00,WET +2002-03-31T01:00:00,+01:00,WEST +2002-10-27T01:00:00,+00:00,WET +2003-03-30T01:00:00,+01:00,WEST +2003-10-26T01:00:00,+00:00,WET +2004-03-28T01:00:00,+01:00,WEST +2004-10-31T01:00:00,+00:00,WET +2005-03-27T01:00:00,+01:00,WEST +2005-10-30T01:00:00,+00:00,WET +2006-03-26T01:00:00,+01:00,WEST +2006-10-29T01:00:00,+00:00,WET +2007-03-25T01:00:00,+01:00,WEST +2007-10-28T01:00:00,+00:00,WET +2008-03-30T01:00:00,+01:00,WEST +2008-10-26T01:00:00,+00:00,WET +2009-03-29T01:00:00,+01:00,WEST +2009-10-25T01:00:00,+00:00,WET +2010-03-28T01:00:00,+01:00,WEST +2010-10-31T01:00:00,+00:00,WET +2011-03-27T01:00:00,+01:00,WEST +2011-10-30T01:00:00,+00:00,WET +2012-03-25T01:00:00,+01:00,WEST +2012-10-28T01:00:00,+00:00,WET +2013-03-31T01:00:00,+01:00,WEST +2013-10-27T01:00:00,+00:00,WET +2014-03-30T01:00:00,+01:00,WEST +2014-10-26T01:00:00,+00:00,WET +2015-03-29T01:00:00,+01:00,WEST +2015-10-25T01:00:00,+00:00,WET +2016-03-27T01:00:00,+01:00,WEST +2016-10-30T01:00:00,+00:00,WET +2017-03-26T01:00:00,+01:00,WEST +2017-10-29T01:00:00,+00:00,WET +2018-03-25T01:00:00,+01:00,WEST +2018-10-28T01:00:00,+00:00,WET +2019-03-31T01:00:00,+01:00,WEST +2019-10-27T01:00:00,+00:00,WET +2020-03-29T01:00:00,+01:00,WEST +2020-10-25T01:00:00,+00:00,WET +2021-03-28T01:00:00,+01:00,WEST +2021-10-31T01:00:00,+00:00,WET +2022-03-27T01:00:00,+01:00,WEST +2022-10-30T01:00:00,+00:00,WET +2023-03-26T01:00:00,+01:00,WEST +2023-10-29T01:00:00,+00:00,WET +2024-03-31T01:00:00,+01:00,WEST +2024-10-27T01:00:00,+00:00,WET +2025-03-30T01:00:00,+01:00,WEST +2025-10-26T01:00:00,+00:00,WET +2026-03-29T01:00:00,+01:00,WEST +2026-10-25T01:00:00,+00:00,WET +2027-03-28T01:00:00,+01:00,WEST +2027-10-31T01:00:00,+00:00,WET +2028-03-26T01:00:00,+01:00,WEST +2028-10-29T01:00:00,+00:00,WET +2029-03-25T01:00:00,+01:00,WEST +2029-10-28T01:00:00,+00:00,WET +2030-03-31T01:00:00,+01:00,WEST +2030-10-27T01:00:00,+00:00,WET +2031-03-30T01:00:00,+01:00,WEST +2031-10-26T01:00:00,+00:00,WET +2032-03-28T01:00:00,+01:00,WEST +2032-10-31T01:00:00,+00:00,WET +2033-03-27T01:00:00,+01:00,WEST +2033-10-30T01:00:00,+00:00,WET +2034-03-26T01:00:00,+01:00,WEST +2034-10-29T01:00:00,+00:00,WET +2035-03-25T01:00:00,+01:00,WEST +2035-10-28T01:00:00,+00:00,WET +2036-03-30T01:00:00,+01:00,WEST +2036-10-26T01:00:00,+00:00,WET +2037-03-29T01:00:00,+01:00,WEST +2037-10-25T01:00:00,+00:00,WET \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-cape-verde.txt b/desk/gub/lib/pytz/atlantic-cape-verde.txt new file mode 100644 index 0000000..83f9997 --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-cape-verde.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1912-01-01T02:00:00,-02:00,-02 +1942-09-01T02:00:00,-01:00,-01 +1945-10-15T01:00:00,-02:00,-02 +1975-11-25T04:00:00,-01:00,-01 \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-faeroe.txt b/desk/gub/lib/pytz/atlantic-faeroe.txt new file mode 100644 index 0000000..6952caa --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-faeroe.txt @@ -0,0 +1,116 @@ +Time,Offset,Name +1908-01-11T00:27:04,+00:00,WET +1981-03-29T01:00:00,+01:00,WEST +1981-09-27T01:00:00,+00:00,WET +1982-03-28T01:00:00,+01:00,WEST +1982-09-26T01:00:00,+00:00,WET +1983-03-27T01:00:00,+01:00,WEST +1983-09-25T01:00:00,+00:00,WET +1984-03-25T01:00:00,+01:00,WEST +1984-09-30T01:00:00,+00:00,WET +1985-03-31T01:00:00,+01:00,WEST +1985-09-29T01:00:00,+00:00,WET +1986-03-30T01:00:00,+01:00,WEST +1986-09-28T01:00:00,+00:00,WET +1987-03-29T01:00:00,+01:00,WEST +1987-09-27T01:00:00,+00:00,WET +1988-03-27T01:00:00,+01:00,WEST +1988-09-25T01:00:00,+00:00,WET +1989-03-26T01:00:00,+01:00,WEST +1989-09-24T01:00:00,+00:00,WET +1990-03-25T01:00:00,+01:00,WEST +1990-09-30T01:00:00,+00:00,WET +1991-03-31T01:00:00,+01:00,WEST +1991-09-29T01:00:00,+00:00,WET +1992-03-29T01:00:00,+01:00,WEST +1992-09-27T01:00:00,+00:00,WET +1993-03-28T01:00:00,+01:00,WEST +1993-09-26T01:00:00,+00:00,WET +1994-03-27T01:00:00,+01:00,WEST +1994-09-25T01:00:00,+00:00,WET +1995-03-26T01:00:00,+01:00,WEST +1995-09-24T01:00:00,+00:00,WET +1996-03-31T01:00:00,+01:00,WEST +1996-10-27T01:00:00,+00:00,WET +1997-03-30T01:00:00,+01:00,WEST +1997-10-26T01:00:00,+00:00,WET +1998-03-29T01:00:00,+01:00,WEST +1998-10-25T01:00:00,+00:00,WET +1999-03-28T01:00:00,+01:00,WEST +1999-10-31T01:00:00,+00:00,WET +2000-03-26T01:00:00,+01:00,WEST +2000-10-29T01:00:00,+00:00,WET +2001-03-25T01:00:00,+01:00,WEST +2001-10-28T01:00:00,+00:00,WET +2002-03-31T01:00:00,+01:00,WEST +2002-10-27T01:00:00,+00:00,WET +2003-03-30T01:00:00,+01:00,WEST +2003-10-26T01:00:00,+00:00,WET +2004-03-28T01:00:00,+01:00,WEST +2004-10-31T01:00:00,+00:00,WET +2005-03-27T01:00:00,+01:00,WEST +2005-10-30T01:00:00,+00:00,WET +2006-03-26T01:00:00,+01:00,WEST +2006-10-29T01:00:00,+00:00,WET +2007-03-25T01:00:00,+01:00,WEST +2007-10-28T01:00:00,+00:00,WET +2008-03-30T01:00:00,+01:00,WEST +2008-10-26T01:00:00,+00:00,WET +2009-03-29T01:00:00,+01:00,WEST +2009-10-25T01:00:00,+00:00,WET +2010-03-28T01:00:00,+01:00,WEST +2010-10-31T01:00:00,+00:00,WET +2011-03-27T01:00:00,+01:00,WEST +2011-10-30T01:00:00,+00:00,WET +2012-03-25T01:00:00,+01:00,WEST +2012-10-28T01:00:00,+00:00,WET +2013-03-31T01:00:00,+01:00,WEST +2013-10-27T01:00:00,+00:00,WET +2014-03-30T01:00:00,+01:00,WEST +2014-10-26T01:00:00,+00:00,WET +2015-03-29T01:00:00,+01:00,WEST +2015-10-25T01:00:00,+00:00,WET +2016-03-27T01:00:00,+01:00,WEST +2016-10-30T01:00:00,+00:00,WET +2017-03-26T01:00:00,+01:00,WEST +2017-10-29T01:00:00,+00:00,WET +2018-03-25T01:00:00,+01:00,WEST +2018-10-28T01:00:00,+00:00,WET +2019-03-31T01:00:00,+01:00,WEST +2019-10-27T01:00:00,+00:00,WET +2020-03-29T01:00:00,+01:00,WEST +2020-10-25T01:00:00,+00:00,WET +2021-03-28T01:00:00,+01:00,WEST +2021-10-31T01:00:00,+00:00,WET +2022-03-27T01:00:00,+01:00,WEST +2022-10-30T01:00:00,+00:00,WET +2023-03-26T01:00:00,+01:00,WEST +2023-10-29T01:00:00,+00:00,WET +2024-03-31T01:00:00,+01:00,WEST +2024-10-27T01:00:00,+00:00,WET +2025-03-30T01:00:00,+01:00,WEST +2025-10-26T01:00:00,+00:00,WET +2026-03-29T01:00:00,+01:00,WEST +2026-10-25T01:00:00,+00:00,WET +2027-03-28T01:00:00,+01:00,WEST +2027-10-31T01:00:00,+00:00,WET +2028-03-26T01:00:00,+01:00,WEST +2028-10-29T01:00:00,+00:00,WET +2029-03-25T01:00:00,+01:00,WEST +2029-10-28T01:00:00,+00:00,WET +2030-03-31T01:00:00,+01:00,WEST +2030-10-27T01:00:00,+00:00,WET +2031-03-30T01:00:00,+01:00,WEST +2031-10-26T01:00:00,+00:00,WET +2032-03-28T01:00:00,+01:00,WEST +2032-10-31T01:00:00,+00:00,WET +2033-03-27T01:00:00,+01:00,WEST +2033-10-30T01:00:00,+00:00,WET +2034-03-26T01:00:00,+01:00,WEST +2034-10-29T01:00:00,+00:00,WET +2035-03-25T01:00:00,+01:00,WEST +2035-10-28T01:00:00,+00:00,WET +2036-03-30T01:00:00,+01:00,WEST +2036-10-26T01:00:00,+00:00,WET +2037-03-29T01:00:00,+01:00,WEST +2037-10-25T01:00:00,+00:00,WET \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-faroe.txt b/desk/gub/lib/pytz/atlantic-faroe.txt new file mode 100644 index 0000000..6952caa --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-faroe.txt @@ -0,0 +1,116 @@ +Time,Offset,Name +1908-01-11T00:27:04,+00:00,WET +1981-03-29T01:00:00,+01:00,WEST +1981-09-27T01:00:00,+00:00,WET +1982-03-28T01:00:00,+01:00,WEST +1982-09-26T01:00:00,+00:00,WET +1983-03-27T01:00:00,+01:00,WEST +1983-09-25T01:00:00,+00:00,WET +1984-03-25T01:00:00,+01:00,WEST +1984-09-30T01:00:00,+00:00,WET +1985-03-31T01:00:00,+01:00,WEST +1985-09-29T01:00:00,+00:00,WET +1986-03-30T01:00:00,+01:00,WEST +1986-09-28T01:00:00,+00:00,WET +1987-03-29T01:00:00,+01:00,WEST +1987-09-27T01:00:00,+00:00,WET +1988-03-27T01:00:00,+01:00,WEST +1988-09-25T01:00:00,+00:00,WET +1989-03-26T01:00:00,+01:00,WEST +1989-09-24T01:00:00,+00:00,WET +1990-03-25T01:00:00,+01:00,WEST +1990-09-30T01:00:00,+00:00,WET +1991-03-31T01:00:00,+01:00,WEST +1991-09-29T01:00:00,+00:00,WET +1992-03-29T01:00:00,+01:00,WEST +1992-09-27T01:00:00,+00:00,WET +1993-03-28T01:00:00,+01:00,WEST +1993-09-26T01:00:00,+00:00,WET +1994-03-27T01:00:00,+01:00,WEST +1994-09-25T01:00:00,+00:00,WET +1995-03-26T01:00:00,+01:00,WEST +1995-09-24T01:00:00,+00:00,WET +1996-03-31T01:00:00,+01:00,WEST +1996-10-27T01:00:00,+00:00,WET +1997-03-30T01:00:00,+01:00,WEST +1997-10-26T01:00:00,+00:00,WET +1998-03-29T01:00:00,+01:00,WEST +1998-10-25T01:00:00,+00:00,WET +1999-03-28T01:00:00,+01:00,WEST +1999-10-31T01:00:00,+00:00,WET +2000-03-26T01:00:00,+01:00,WEST +2000-10-29T01:00:00,+00:00,WET +2001-03-25T01:00:00,+01:00,WEST +2001-10-28T01:00:00,+00:00,WET +2002-03-31T01:00:00,+01:00,WEST +2002-10-27T01:00:00,+00:00,WET +2003-03-30T01:00:00,+01:00,WEST +2003-10-26T01:00:00,+00:00,WET +2004-03-28T01:00:00,+01:00,WEST +2004-10-31T01:00:00,+00:00,WET +2005-03-27T01:00:00,+01:00,WEST +2005-10-30T01:00:00,+00:00,WET +2006-03-26T01:00:00,+01:00,WEST +2006-10-29T01:00:00,+00:00,WET +2007-03-25T01:00:00,+01:00,WEST +2007-10-28T01:00:00,+00:00,WET +2008-03-30T01:00:00,+01:00,WEST +2008-10-26T01:00:00,+00:00,WET +2009-03-29T01:00:00,+01:00,WEST +2009-10-25T01:00:00,+00:00,WET +2010-03-28T01:00:00,+01:00,WEST +2010-10-31T01:00:00,+00:00,WET +2011-03-27T01:00:00,+01:00,WEST +2011-10-30T01:00:00,+00:00,WET +2012-03-25T01:00:00,+01:00,WEST +2012-10-28T01:00:00,+00:00,WET +2013-03-31T01:00:00,+01:00,WEST +2013-10-27T01:00:00,+00:00,WET +2014-03-30T01:00:00,+01:00,WEST +2014-10-26T01:00:00,+00:00,WET +2015-03-29T01:00:00,+01:00,WEST +2015-10-25T01:00:00,+00:00,WET +2016-03-27T01:00:00,+01:00,WEST +2016-10-30T01:00:00,+00:00,WET +2017-03-26T01:00:00,+01:00,WEST +2017-10-29T01:00:00,+00:00,WET +2018-03-25T01:00:00,+01:00,WEST +2018-10-28T01:00:00,+00:00,WET +2019-03-31T01:00:00,+01:00,WEST +2019-10-27T01:00:00,+00:00,WET +2020-03-29T01:00:00,+01:00,WEST +2020-10-25T01:00:00,+00:00,WET +2021-03-28T01:00:00,+01:00,WEST +2021-10-31T01:00:00,+00:00,WET +2022-03-27T01:00:00,+01:00,WEST +2022-10-30T01:00:00,+00:00,WET +2023-03-26T01:00:00,+01:00,WEST +2023-10-29T01:00:00,+00:00,WET +2024-03-31T01:00:00,+01:00,WEST +2024-10-27T01:00:00,+00:00,WET +2025-03-30T01:00:00,+01:00,WEST +2025-10-26T01:00:00,+00:00,WET +2026-03-29T01:00:00,+01:00,WEST +2026-10-25T01:00:00,+00:00,WET +2027-03-28T01:00:00,+01:00,WEST +2027-10-31T01:00:00,+00:00,WET +2028-03-26T01:00:00,+01:00,WEST +2028-10-29T01:00:00,+00:00,WET +2029-03-25T01:00:00,+01:00,WEST +2029-10-28T01:00:00,+00:00,WET +2030-03-31T01:00:00,+01:00,WEST +2030-10-27T01:00:00,+00:00,WET +2031-03-30T01:00:00,+01:00,WEST +2031-10-26T01:00:00,+00:00,WET +2032-03-28T01:00:00,+01:00,WEST +2032-10-31T01:00:00,+00:00,WET +2033-03-27T01:00:00,+01:00,WEST +2033-10-30T01:00:00,+00:00,WET +2034-03-26T01:00:00,+01:00,WEST +2034-10-29T01:00:00,+00:00,WET +2035-03-25T01:00:00,+01:00,WEST +2035-10-28T01:00:00,+00:00,WET +2036-03-30T01:00:00,+01:00,WEST +2036-10-26T01:00:00,+00:00,WET +2037-03-29T01:00:00,+01:00,WEST +2037-10-25T01:00:00,+00:00,WET \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-jan-mayen.txt b/desk/gub/lib/pytz/atlantic-jan-mayen.txt new file mode 100644 index 0000000..56ab2cd --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-jan-mayen.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:53,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-05-24T00:00:00,+03:00,CEMT +1945-09-24T00:00:00,+02:00,CEST +1945-11-18T01:00:00,+01:00,CET +1946-04-14T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1947-04-06T02:00:00,+02:00,CEST +1947-05-11T01:00:00,+03:00,CEMT +1947-06-29T00:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-10T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-madeira.txt b/desk/gub/lib/pytz/atlantic-madeira.txt new file mode 100644 index 0000000..012810e --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-madeira.txt @@ -0,0 +1,215 @@ +Time,Offset,Name +1901-12-13T20:45:52,-02:52,FMT +1912-01-01T01:00:00,-01:00,-01 +1916-06-18T00:00:00,+00:00,+00 +1916-11-01T01:00:00,-01:00,-01 +1917-03-01T01:00:00,+00:00,+00 +1917-10-15T00:00:00,-01:00,-01 +1918-03-01T01:00:00,+00:00,+00 +1918-10-15T00:00:00,-01:00,-01 +1919-03-01T01:00:00,+00:00,+00 +1919-10-15T00:00:00,-01:00,-01 +1920-03-01T01:00:00,+00:00,+00 +1920-10-15T00:00:00,-01:00,-01 +1921-03-01T01:00:00,+00:00,+00 +1921-10-15T00:00:00,-01:00,-01 +1924-04-17T00:00:00,+00:00,+00 +1924-10-05T00:00:00,-01:00,-01 +1926-04-18T00:00:00,+00:00,+00 +1926-10-03T00:00:00,-01:00,-01 +1927-04-10T00:00:00,+00:00,+00 +1927-10-02T00:00:00,-01:00,-01 +1928-04-15T00:00:00,+00:00,+00 +1928-10-07T00:00:00,-01:00,-01 +1929-04-21T00:00:00,+00:00,+00 +1929-10-06T00:00:00,-01:00,-01 +1931-04-19T00:00:00,+00:00,+00 +1931-10-04T00:00:00,-01:00,-01 +1932-04-03T00:00:00,+00:00,+00 +1932-10-02T00:00:00,-01:00,-01 +1934-04-08T00:00:00,+00:00,+00 +1934-10-07T00:00:00,-01:00,-01 +1935-03-31T00:00:00,+00:00,+00 +1935-10-06T00:00:00,-01:00,-01 +1936-04-19T00:00:00,+00:00,+00 +1936-10-04T00:00:00,-01:00,-01 +1937-04-04T00:00:00,+00:00,+00 +1937-10-03T00:00:00,-01:00,-01 +1938-03-27T00:00:00,+00:00,+00 +1938-10-02T00:00:00,-01:00,-01 +1939-04-16T00:00:00,+00:00,+00 +1939-11-19T00:00:00,-01:00,-01 +1940-02-25T00:00:00,+00:00,+00 +1940-10-08T00:00:00,-01:00,-01 +1941-04-06T00:00:00,+00:00,+00 +1941-10-06T00:00:00,-01:00,-01 +1942-03-15T00:00:00,+00:00,+00 +1942-04-25T23:00:00,+01:00,+01 +1942-08-15T23:00:00,+00:00,+00 +1942-10-25T00:00:00,-01:00,-01 +1943-03-14T00:00:00,+00:00,+00 +1943-04-17T23:00:00,+01:00,+01 +1943-08-28T23:00:00,+00:00,+00 +1943-10-31T00:00:00,-01:00,-01 +1944-03-12T00:00:00,+00:00,+00 +1944-04-22T23:00:00,+01:00,+01 +1944-08-26T23:00:00,+00:00,+00 +1944-10-29T00:00:00,-01:00,-01 +1945-03-11T00:00:00,+00:00,+00 +1945-04-21T23:00:00,+01:00,+01 +1945-08-25T23:00:00,+00:00,+00 +1945-10-28T00:00:00,-01:00,-01 +1946-04-07T00:00:00,+00:00,+00 +1946-10-06T00:00:00,-01:00,-01 +1947-04-06T03:00:00,+00:00,+00 +1947-10-05T03:00:00,-01:00,-01 +1948-04-04T03:00:00,+00:00,+00 +1948-10-03T03:00:00,-01:00,-01 +1949-04-03T03:00:00,+00:00,+00 +1949-10-02T03:00:00,-01:00,-01 +1950-04-02T03:00:00,+00:00,+00 +1950-10-01T03:00:00,-01:00,-01 +1951-04-01T03:00:00,+00:00,+00 +1951-10-07T03:00:00,-01:00,-01 +1952-04-06T03:00:00,+00:00,+00 +1952-10-05T03:00:00,-01:00,-01 +1953-04-05T03:00:00,+00:00,+00 +1953-10-04T03:00:00,-01:00,-01 +1954-04-04T03:00:00,+00:00,+00 +1954-10-03T03:00:00,-01:00,-01 +1955-04-03T03:00:00,+00:00,+00 +1955-10-02T03:00:00,-01:00,-01 +1956-04-01T03:00:00,+00:00,+00 +1956-10-07T03:00:00,-01:00,-01 +1957-04-07T03:00:00,+00:00,+00 +1957-10-06T03:00:00,-01:00,-01 +1958-04-06T03:00:00,+00:00,+00 +1958-10-05T03:00:00,-01:00,-01 +1959-04-05T03:00:00,+00:00,+00 +1959-10-04T03:00:00,-01:00,-01 +1960-04-03T03:00:00,+00:00,+00 +1960-10-02T03:00:00,-01:00,-01 +1961-04-02T03:00:00,+00:00,+00 +1961-10-01T03:00:00,-01:00,-01 +1962-04-01T03:00:00,+00:00,+00 +1962-10-07T03:00:00,-01:00,-01 +1963-04-07T03:00:00,+00:00,+00 +1963-10-06T03:00:00,-01:00,-01 +1964-04-05T03:00:00,+00:00,+00 +1964-10-04T03:00:00,-01:00,-01 +1965-04-04T03:00:00,+00:00,+00 +1965-10-03T03:00:00,-01:00,-01 +1966-04-03T03:00:00,+00:00,+00 +1966-10-02T03:00:00,+00:00,WET +1982-04-04T00:00:00,+01:00,WEST +1982-09-26T00:00:00,+00:00,WET +1983-03-27T00:00:00,+01:00,WEST +1983-09-25T00:00:00,+00:00,WET +1984-03-25T00:00:00,+01:00,WEST +1984-09-30T00:00:00,+00:00,WET +1985-03-31T00:00:00,+01:00,WEST +1985-09-29T00:00:00,+00:00,WET +1986-03-30T00:00:00,+01:00,WEST +1986-09-28T01:00:00,+00:00,WET +1987-03-29T01:00:00,+01:00,WEST +1987-09-27T01:00:00,+00:00,WET +1988-03-27T01:00:00,+01:00,WEST +1988-09-25T01:00:00,+00:00,WET +1989-03-26T01:00:00,+01:00,WEST +1989-09-24T01:00:00,+00:00,WET +1990-03-25T01:00:00,+01:00,WEST +1990-09-30T01:00:00,+00:00,WET +1991-03-31T01:00:00,+01:00,WEST +1991-09-29T01:00:00,+00:00,WET +1992-03-29T01:00:00,+01:00,WEST +1992-09-27T01:00:00,+00:00,WET +1993-03-28T01:00:00,+01:00,WEST +1993-09-26T01:00:00,+00:00,WET +1994-03-27T01:00:00,+01:00,WEST +1994-09-25T01:00:00,+00:00,WET +1995-03-26T01:00:00,+01:00,WEST +1995-09-24T01:00:00,+00:00,WET +1996-03-31T01:00:00,+01:00,WEST +1996-10-27T01:00:00,+00:00,WET +1997-03-30T01:00:00,+01:00,WEST +1997-10-26T01:00:00,+00:00,WET +1998-03-29T01:00:00,+01:00,WEST +1998-10-25T01:00:00,+00:00,WET +1999-03-28T01:00:00,+01:00,WEST +1999-10-31T01:00:00,+00:00,WET +2000-03-26T01:00:00,+01:00,WEST +2000-10-29T01:00:00,+00:00,WET +2001-03-25T01:00:00,+01:00,WEST +2001-10-28T01:00:00,+00:00,WET +2002-03-31T01:00:00,+01:00,WEST +2002-10-27T01:00:00,+00:00,WET +2003-03-30T01:00:00,+01:00,WEST +2003-10-26T01:00:00,+00:00,WET +2004-03-28T01:00:00,+01:00,WEST +2004-10-31T01:00:00,+00:00,WET +2005-03-27T01:00:00,+01:00,WEST +2005-10-30T01:00:00,+00:00,WET +2006-03-26T01:00:00,+01:00,WEST +2006-10-29T01:00:00,+00:00,WET +2007-03-25T01:00:00,+01:00,WEST +2007-10-28T01:00:00,+00:00,WET +2008-03-30T01:00:00,+01:00,WEST +2008-10-26T01:00:00,+00:00,WET +2009-03-29T01:00:00,+01:00,WEST +2009-10-25T01:00:00,+00:00,WET +2010-03-28T01:00:00,+01:00,WEST +2010-10-31T01:00:00,+00:00,WET +2011-03-27T01:00:00,+01:00,WEST +2011-10-30T01:00:00,+00:00,WET +2012-03-25T01:00:00,+01:00,WEST +2012-10-28T01:00:00,+00:00,WET +2013-03-31T01:00:00,+01:00,WEST +2013-10-27T01:00:00,+00:00,WET +2014-03-30T01:00:00,+01:00,WEST +2014-10-26T01:00:00,+00:00,WET +2015-03-29T01:00:00,+01:00,WEST +2015-10-25T01:00:00,+00:00,WET +2016-03-27T01:00:00,+01:00,WEST +2016-10-30T01:00:00,+00:00,WET +2017-03-26T01:00:00,+01:00,WEST +2017-10-29T01:00:00,+00:00,WET +2018-03-25T01:00:00,+01:00,WEST +2018-10-28T01:00:00,+00:00,WET +2019-03-31T01:00:00,+01:00,WEST +2019-10-27T01:00:00,+00:00,WET +2020-03-29T01:00:00,+01:00,WEST +2020-10-25T01:00:00,+00:00,WET +2021-03-28T01:00:00,+01:00,WEST +2021-10-31T01:00:00,+00:00,WET +2022-03-27T01:00:00,+01:00,WEST +2022-10-30T01:00:00,+00:00,WET +2023-03-26T01:00:00,+01:00,WEST +2023-10-29T01:00:00,+00:00,WET +2024-03-31T01:00:00,+01:00,WEST +2024-10-27T01:00:00,+00:00,WET +2025-03-30T01:00:00,+01:00,WEST +2025-10-26T01:00:00,+00:00,WET +2026-03-29T01:00:00,+01:00,WEST +2026-10-25T01:00:00,+00:00,WET +2027-03-28T01:00:00,+01:00,WEST +2027-10-31T01:00:00,+00:00,WET +2028-03-26T01:00:00,+01:00,WEST +2028-10-29T01:00:00,+00:00,WET +2029-03-25T01:00:00,+01:00,WEST +2029-10-28T01:00:00,+00:00,WET +2030-03-31T01:00:00,+01:00,WEST +2030-10-27T01:00:00,+00:00,WET +2031-03-30T01:00:00,+01:00,WEST +2031-10-26T01:00:00,+00:00,WET +2032-03-28T01:00:00,+01:00,WEST +2032-10-31T01:00:00,+00:00,WET +2033-03-27T01:00:00,+01:00,WEST +2033-10-30T01:00:00,+00:00,WET +2034-03-26T01:00:00,+01:00,WEST +2034-10-29T01:00:00,+00:00,WET +2035-03-25T01:00:00,+01:00,WEST +2035-10-28T01:00:00,+00:00,WET +2036-03-30T01:00:00,+01:00,WEST +2036-10-26T01:00:00,+00:00,WET +2037-03-29T01:00:00,+01:00,WEST +2037-10-25T01:00:00,+00:00,WET \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-reykjavik.txt b/desk/gub/lib/pytz/atlantic-reykjavik.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-reykjavik.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-south-georgia.txt b/desk/gub/lib/pytz/atlantic-south-georgia.txt new file mode 100644 index 0000000..e13104b --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-south-georgia.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1901-12-13T20:45:52,-02:00,-02 \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-st-helena.txt b/desk/gub/lib/pytz/atlantic-st-helena.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-st-helena.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/atlantic-stanley.txt b/desk/gub/lib/pytz/atlantic-stanley.txt new file mode 100644 index 0000000..22c25a9 --- /dev/null +++ b/desk/gub/lib/pytz/atlantic-stanley.txt @@ -0,0 +1,71 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:09,SMT +1912-03-12T03:51:24,-04:00,-04 +1937-09-26T04:00:00,-03:00,-03 +1938-03-20T03:00:00,-04:00,-04 +1938-09-25T04:00:00,-03:00,-03 +1939-03-19T03:00:00,-04:00,-04 +1939-10-01T04:00:00,-03:00,-03 +1940-03-24T03:00:00,-04:00,-04 +1940-09-29T04:00:00,-03:00,-03 +1941-03-23T03:00:00,-04:00,-04 +1941-09-28T04:00:00,-03:00,-03 +1942-03-22T03:00:00,-04:00,-04 +1942-09-27T04:00:00,-03:00,-03 +1943-01-01T03:00:00,-04:00,-04 +1983-05-01T04:00:00,-03:00,-03 +1983-09-25T03:00:00,-02:00,-02 +1984-04-29T02:00:00,-03:00,-03 +1984-09-16T03:00:00,-02:00,-02 +1985-04-28T02:00:00,-03:00,-03 +1985-09-15T03:00:00,-03:00,-03 +1986-04-20T03:00:00,-04:00,-04 +1986-09-14T04:00:00,-03:00,-03 +1987-04-19T03:00:00,-04:00,-04 +1987-09-13T04:00:00,-03:00,-03 +1988-04-17T03:00:00,-04:00,-04 +1988-09-11T04:00:00,-03:00,-03 +1989-04-16T03:00:00,-04:00,-04 +1989-09-10T04:00:00,-03:00,-03 +1990-04-22T03:00:00,-04:00,-04 +1990-09-09T04:00:00,-03:00,-03 +1991-04-21T03:00:00,-04:00,-04 +1991-09-15T04:00:00,-03:00,-03 +1992-04-19T03:00:00,-04:00,-04 +1992-09-13T04:00:00,-03:00,-03 +1993-04-18T03:00:00,-04:00,-04 +1993-09-12T04:00:00,-03:00,-03 +1994-04-17T03:00:00,-04:00,-04 +1994-09-11T04:00:00,-03:00,-03 +1995-04-16T03:00:00,-04:00,-04 +1995-09-10T04:00:00,-03:00,-03 +1996-04-21T03:00:00,-04:00,-04 +1996-09-15T04:00:00,-03:00,-03 +1997-04-20T03:00:00,-04:00,-04 +1997-09-14T04:00:00,-03:00,-03 +1998-04-19T03:00:00,-04:00,-04 +1998-09-13T04:00:00,-03:00,-03 +1999-04-18T03:00:00,-04:00,-04 +1999-09-12T04:00:00,-03:00,-03 +2000-04-16T03:00:00,-04:00,-04 +2000-09-10T04:00:00,-03:00,-03 +2001-04-15T05:00:00,-04:00,-04 +2001-09-02T06:00:00,-03:00,-03 +2002-04-21T05:00:00,-04:00,-04 +2002-09-01T06:00:00,-03:00,-03 +2003-04-20T05:00:00,-04:00,-04 +2003-09-07T06:00:00,-03:00,-03 +2004-04-18T05:00:00,-04:00,-04 +2004-09-05T06:00:00,-03:00,-03 +2005-04-17T05:00:00,-04:00,-04 +2005-09-04T06:00:00,-03:00,-03 +2006-04-16T05:00:00,-04:00,-04 +2006-09-03T06:00:00,-03:00,-03 +2007-04-15T05:00:00,-04:00,-04 +2007-09-02T06:00:00,-03:00,-03 +2008-04-20T05:00:00,-04:00,-04 +2008-09-07T06:00:00,-03:00,-03 +2009-04-19T05:00:00,-04:00,-04 +2009-09-06T06:00:00,-03:00,-03 +2010-04-18T05:00:00,-04:00,-04 +2010-09-05T06:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-act.txt b/desk/gub/lib/pytz/australia-act.txt new file mode 100644 index 0000000..a86766d --- /dev/null +++ b/desk/gub/lib/pytz/australia-act.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:05,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-12-31T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-04-03T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-05T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-15T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-24T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-03T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-02T16:00:00,+10:00,AEST +1991-10-26T16:00:00,+11:00,AEDT +1992-02-29T16:00:00,+10:00,AEST +1992-10-24T16:00:00,+11:00,AEDT +1993-03-06T16:00:00,+10:00,AEST +1993-10-30T16:00:00,+11:00,AEDT +1994-03-05T16:00:00,+10:00,AEST +1994-10-29T16:00:00,+11:00,AEDT +1995-03-04T16:00:00,+10:00,AEST +1995-10-28T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-26T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-25T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-24T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-30T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-27T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-26T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-25T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-30T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-29T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-10-28T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-27T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2010-04-03T16:00:00,+10:00,AEST +2010-10-02T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-adelaide.txt b/desk/gub/lib/pytz/australia-adelaide.txt new file mode 100644 index 0000000..3c92975 --- /dev/null +++ b/desk/gub/lib/pytz/australia-adelaide.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:14,LMT +1901-12-13T20:45:52,+09:30,ACST +1916-12-31T16:30:00,+10:30,ACDT +1917-03-24T16:30:00,+09:30,ACST +1941-12-31T16:30:00,+10:30,ACDT +1942-03-28T16:30:00,+09:30,ACST +1942-09-26T16:30:00,+10:30,ACDT +1943-03-27T16:30:00,+09:30,ACST +1943-10-02T16:30:00,+10:30,ACDT +1944-03-25T16:30:00,+09:30,ACST +1971-10-30T16:30:00,+10:30,ACDT +1972-02-26T16:30:00,+09:30,ACST +1972-10-28T16:30:00,+10:30,ACDT +1973-03-03T16:30:00,+09:30,ACST +1973-10-27T16:30:00,+10:30,ACDT +1974-03-02T16:30:00,+09:30,ACST +1974-10-26T16:30:00,+10:30,ACDT +1975-03-01T16:30:00,+09:30,ACST +1975-10-25T16:30:00,+10:30,ACDT +1976-03-06T16:30:00,+09:30,ACST +1976-10-30T16:30:00,+10:30,ACDT +1977-03-05T16:30:00,+09:30,ACST +1977-10-29T16:30:00,+10:30,ACDT +1978-03-04T16:30:00,+09:30,ACST +1978-10-28T16:30:00,+10:30,ACDT +1979-03-03T16:30:00,+09:30,ACST +1979-10-27T16:30:00,+10:30,ACDT +1980-03-01T16:30:00,+09:30,ACST +1980-10-25T16:30:00,+10:30,ACDT +1981-02-28T16:30:00,+09:30,ACST +1981-10-24T16:30:00,+10:30,ACDT +1982-03-06T16:30:00,+09:30,ACST +1982-10-30T16:30:00,+10:30,ACDT +1983-03-05T16:30:00,+09:30,ACST +1983-10-29T16:30:00,+10:30,ACDT +1984-03-03T16:30:00,+09:30,ACST +1984-10-27T16:30:00,+10:30,ACDT +1985-03-02T16:30:00,+09:30,ACST +1985-10-26T16:30:00,+10:30,ACDT +1986-03-15T16:30:00,+09:30,ACST +1986-10-18T16:30:00,+10:30,ACDT +1987-03-14T16:30:00,+09:30,ACST +1987-10-24T16:30:00,+10:30,ACDT +1988-03-19T16:30:00,+09:30,ACST +1988-10-29T16:30:00,+10:30,ACDT +1989-03-18T16:30:00,+09:30,ACST +1989-10-28T16:30:00,+10:30,ACDT +1990-03-17T16:30:00,+09:30,ACST +1990-10-27T16:30:00,+10:30,ACDT +1991-03-02T16:30:00,+09:30,ACST +1991-10-26T16:30:00,+10:30,ACDT +1992-03-21T16:30:00,+09:30,ACST +1992-10-24T16:30:00,+10:30,ACDT +1993-03-06T16:30:00,+09:30,ACST +1993-10-30T16:30:00,+10:30,ACDT +1994-03-19T16:30:00,+09:30,ACST +1994-10-29T16:30:00,+10:30,ACDT +1995-03-25T16:30:00,+09:30,ACST +1995-10-28T16:30:00,+10:30,ACDT +1996-03-30T16:30:00,+09:30,ACST +1996-10-26T16:30:00,+10:30,ACDT +1997-03-29T16:30:00,+09:30,ACST +1997-10-25T16:30:00,+10:30,ACDT +1998-03-28T16:30:00,+09:30,ACST +1998-10-24T16:30:00,+10:30,ACDT +1999-03-27T16:30:00,+09:30,ACST +1999-10-30T16:30:00,+10:30,ACDT +2000-03-25T16:30:00,+09:30,ACST +2000-10-28T16:30:00,+10:30,ACDT +2001-03-24T16:30:00,+09:30,ACST +2001-10-27T16:30:00,+10:30,ACDT +2002-03-30T16:30:00,+09:30,ACST +2002-10-26T16:30:00,+10:30,ACDT +2003-03-29T16:30:00,+09:30,ACST +2003-10-25T16:30:00,+10:30,ACDT +2004-03-27T16:30:00,+09:30,ACST +2004-10-30T16:30:00,+10:30,ACDT +2005-03-26T16:30:00,+09:30,ACST +2005-10-29T16:30:00,+10:30,ACDT +2006-04-01T16:30:00,+09:30,ACST +2006-10-28T16:30:00,+10:30,ACDT +2007-03-24T16:30:00,+09:30,ACST +2007-10-27T16:30:00,+10:30,ACDT +2008-04-05T16:30:00,+09:30,ACST +2008-10-04T16:30:00,+10:30,ACDT +2009-04-04T16:30:00,+09:30,ACST +2009-10-03T16:30:00,+10:30,ACDT +2010-04-03T16:30:00,+09:30,ACST +2010-10-02T16:30:00,+10:30,ACDT +2011-04-02T16:30:00,+09:30,ACST +2011-10-01T16:30:00,+10:30,ACDT +2012-03-31T16:30:00,+09:30,ACST +2012-10-06T16:30:00,+10:30,ACDT +2013-04-06T16:30:00,+09:30,ACST +2013-10-05T16:30:00,+10:30,ACDT +2014-04-05T16:30:00,+09:30,ACST +2014-10-04T16:30:00,+10:30,ACDT +2015-04-04T16:30:00,+09:30,ACST +2015-10-03T16:30:00,+10:30,ACDT +2016-04-02T16:30:00,+09:30,ACST +2016-10-01T16:30:00,+10:30,ACDT +2017-04-01T16:30:00,+09:30,ACST +2017-09-30T16:30:00,+10:30,ACDT +2018-03-31T16:30:00,+09:30,ACST +2018-10-06T16:30:00,+10:30,ACDT +2019-04-06T16:30:00,+09:30,ACST +2019-10-05T16:30:00,+10:30,ACDT +2020-04-04T16:30:00,+09:30,ACST +2020-10-03T16:30:00,+10:30,ACDT +2021-04-03T16:30:00,+09:30,ACST +2021-10-02T16:30:00,+10:30,ACDT +2022-04-02T16:30:00,+09:30,ACST +2022-10-01T16:30:00,+10:30,ACDT +2023-04-01T16:30:00,+09:30,ACST +2023-09-30T16:30:00,+10:30,ACDT +2024-04-06T16:30:00,+09:30,ACST +2024-10-05T16:30:00,+10:30,ACDT +2025-04-05T16:30:00,+09:30,ACST +2025-10-04T16:30:00,+10:30,ACDT +2026-04-04T16:30:00,+09:30,ACST +2026-10-03T16:30:00,+10:30,ACDT +2027-04-03T16:30:00,+09:30,ACST +2027-10-02T16:30:00,+10:30,ACDT +2028-04-01T16:30:00,+09:30,ACST +2028-09-30T16:30:00,+10:30,ACDT +2029-03-31T16:30:00,+09:30,ACST +2029-10-06T16:30:00,+10:30,ACDT +2030-04-06T16:30:00,+09:30,ACST +2030-10-05T16:30:00,+10:30,ACDT +2031-04-05T16:30:00,+09:30,ACST +2031-10-04T16:30:00,+10:30,ACDT +2032-04-03T16:30:00,+09:30,ACST +2032-10-02T16:30:00,+10:30,ACDT +2033-04-02T16:30:00,+09:30,ACST +2033-10-01T16:30:00,+10:30,ACDT +2034-04-01T16:30:00,+09:30,ACST +2034-09-30T16:30:00,+10:30,ACDT +2035-03-31T16:30:00,+09:30,ACST +2035-10-06T16:30:00,+10:30,ACDT +2036-04-05T16:30:00,+09:30,ACST +2036-10-04T16:30:00,+10:30,ACDT +2037-04-04T16:30:00,+09:30,ACST +2037-10-03T16:30:00,+10:30,ACDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-brisbane.txt b/desk/gub/lib/pytz/australia-brisbane.txt new file mode 100644 index 0000000..d24af9f --- /dev/null +++ b/desk/gub/lib/pytz/australia-brisbane.txt @@ -0,0 +1,19 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:12,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-12-31T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-03T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-02T16:00:00,+10:00,AEST +1991-10-26T16:00:00,+11:00,AEDT +1992-02-29T16:00:00,+10:00,AEST \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-broken-hill.txt b/desk/gub/lib/pytz/australia-broken-hill.txt new file mode 100644 index 0000000..82388cf --- /dev/null +++ b/desk/gub/lib/pytz/australia-broken-hill.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:26,LMT +1901-12-13T20:45:52,+09:30,ACST +1916-12-31T16:30:00,+10:30,ACDT +1917-03-24T16:30:00,+09:30,ACST +1941-12-31T16:30:00,+10:30,ACDT +1942-03-28T16:30:00,+09:30,ACST +1942-09-26T16:30:00,+10:30,ACDT +1943-03-27T16:30:00,+09:30,ACST +1943-10-02T16:30:00,+10:30,ACDT +1944-03-25T16:30:00,+09:30,ACST +1971-10-30T16:30:00,+10:30,ACDT +1972-02-26T16:30:00,+09:30,ACST +1972-10-28T16:30:00,+10:30,ACDT +1973-03-03T16:30:00,+09:30,ACST +1973-10-27T16:30:00,+10:30,ACDT +1974-03-02T16:30:00,+09:30,ACST +1974-10-26T16:30:00,+10:30,ACDT +1975-03-01T16:30:00,+09:30,ACST +1975-10-25T16:30:00,+10:30,ACDT +1976-03-06T16:30:00,+09:30,ACST +1976-10-30T16:30:00,+10:30,ACDT +1977-03-05T16:30:00,+09:30,ACST +1977-10-29T16:30:00,+10:30,ACDT +1978-03-04T16:30:00,+09:30,ACST +1978-10-28T16:30:00,+10:30,ACDT +1979-03-03T16:30:00,+09:30,ACST +1979-10-27T16:30:00,+10:30,ACDT +1980-03-01T16:30:00,+09:30,ACST +1980-10-25T16:30:00,+10:30,ACDT +1981-02-28T16:30:00,+09:30,ACST +1981-10-24T16:30:00,+10:30,ACDT +1982-04-03T16:30:00,+09:30,ACST +1982-10-30T16:30:00,+10:30,ACDT +1983-03-05T16:30:00,+09:30,ACST +1983-10-29T16:30:00,+10:30,ACDT +1984-03-03T16:30:00,+09:30,ACST +1984-10-27T16:30:00,+10:30,ACDT +1985-03-02T16:30:00,+09:30,ACST +1985-10-26T16:30:00,+10:30,ACDT +1986-03-15T16:30:00,+09:30,ACST +1986-10-18T16:30:00,+10:30,ACDT +1987-03-14T16:30:00,+09:30,ACST +1987-10-24T16:30:00,+10:30,ACDT +1988-03-19T16:30:00,+09:30,ACST +1988-10-29T16:30:00,+10:30,ACDT +1989-03-18T16:30:00,+09:30,ACST +1989-10-28T16:30:00,+10:30,ACDT +1990-03-03T16:30:00,+09:30,ACST +1990-10-27T16:30:00,+10:30,ACDT +1991-03-02T16:30:00,+09:30,ACST +1991-10-26T16:30:00,+10:30,ACDT +1992-02-29T16:30:00,+09:30,ACST +1992-10-24T16:30:00,+10:30,ACDT +1993-03-06T16:30:00,+09:30,ACST +1993-10-30T16:30:00,+10:30,ACDT +1994-03-05T16:30:00,+09:30,ACST +1994-10-29T16:30:00,+10:30,ACDT +1995-03-04T16:30:00,+09:30,ACST +1995-10-28T16:30:00,+10:30,ACDT +1996-03-30T16:30:00,+09:30,ACST +1996-10-26T16:30:00,+10:30,ACDT +1997-03-29T16:30:00,+09:30,ACST +1997-10-25T16:30:00,+10:30,ACDT +1998-03-28T16:30:00,+09:30,ACST +1998-10-24T16:30:00,+10:30,ACDT +1999-03-27T16:30:00,+09:30,ACST +1999-10-30T16:30:00,+10:30,ACDT +2000-03-25T16:30:00,+09:30,ACST +2000-10-28T16:30:00,+10:30,ACDT +2001-03-24T16:30:00,+09:30,ACST +2001-10-27T16:30:00,+10:30,ACDT +2002-03-30T16:30:00,+09:30,ACST +2002-10-26T16:30:00,+10:30,ACDT +2003-03-29T16:30:00,+09:30,ACST +2003-10-25T16:30:00,+10:30,ACDT +2004-03-27T16:30:00,+09:30,ACST +2004-10-30T16:30:00,+10:30,ACDT +2005-03-26T16:30:00,+09:30,ACST +2005-10-29T16:30:00,+10:30,ACDT +2006-04-01T16:30:00,+09:30,ACST +2006-10-28T16:30:00,+10:30,ACDT +2007-03-24T16:30:00,+09:30,ACST +2007-10-27T16:30:00,+10:30,ACDT +2008-04-05T16:30:00,+09:30,ACST +2008-10-04T16:30:00,+10:30,ACDT +2009-04-04T16:30:00,+09:30,ACST +2009-10-03T16:30:00,+10:30,ACDT +2010-04-03T16:30:00,+09:30,ACST +2010-10-02T16:30:00,+10:30,ACDT +2011-04-02T16:30:00,+09:30,ACST +2011-10-01T16:30:00,+10:30,ACDT +2012-03-31T16:30:00,+09:30,ACST +2012-10-06T16:30:00,+10:30,ACDT +2013-04-06T16:30:00,+09:30,ACST +2013-10-05T16:30:00,+10:30,ACDT +2014-04-05T16:30:00,+09:30,ACST +2014-10-04T16:30:00,+10:30,ACDT +2015-04-04T16:30:00,+09:30,ACST +2015-10-03T16:30:00,+10:30,ACDT +2016-04-02T16:30:00,+09:30,ACST +2016-10-01T16:30:00,+10:30,ACDT +2017-04-01T16:30:00,+09:30,ACST +2017-09-30T16:30:00,+10:30,ACDT +2018-03-31T16:30:00,+09:30,ACST +2018-10-06T16:30:00,+10:30,ACDT +2019-04-06T16:30:00,+09:30,ACST +2019-10-05T16:30:00,+10:30,ACDT +2020-04-04T16:30:00,+09:30,ACST +2020-10-03T16:30:00,+10:30,ACDT +2021-04-03T16:30:00,+09:30,ACST +2021-10-02T16:30:00,+10:30,ACDT +2022-04-02T16:30:00,+09:30,ACST +2022-10-01T16:30:00,+10:30,ACDT +2023-04-01T16:30:00,+09:30,ACST +2023-09-30T16:30:00,+10:30,ACDT +2024-04-06T16:30:00,+09:30,ACST +2024-10-05T16:30:00,+10:30,ACDT +2025-04-05T16:30:00,+09:30,ACST +2025-10-04T16:30:00,+10:30,ACDT +2026-04-04T16:30:00,+09:30,ACST +2026-10-03T16:30:00,+10:30,ACDT +2027-04-03T16:30:00,+09:30,ACST +2027-10-02T16:30:00,+10:30,ACDT +2028-04-01T16:30:00,+09:30,ACST +2028-09-30T16:30:00,+10:30,ACDT +2029-03-31T16:30:00,+09:30,ACST +2029-10-06T16:30:00,+10:30,ACDT +2030-04-06T16:30:00,+09:30,ACST +2030-10-05T16:30:00,+10:30,ACDT +2031-04-05T16:30:00,+09:30,ACST +2031-10-04T16:30:00,+10:30,ACDT +2032-04-03T16:30:00,+09:30,ACST +2032-10-02T16:30:00,+10:30,ACDT +2033-04-02T16:30:00,+09:30,ACST +2033-10-01T16:30:00,+10:30,ACDT +2034-04-01T16:30:00,+09:30,ACST +2034-09-30T16:30:00,+10:30,ACDT +2035-03-31T16:30:00,+09:30,ACST +2035-10-06T16:30:00,+10:30,ACDT +2036-04-05T16:30:00,+09:30,ACST +2036-10-04T16:30:00,+10:30,ACDT +2037-04-04T16:30:00,+09:30,ACST +2037-10-03T16:30:00,+10:30,ACDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-canberra.txt b/desk/gub/lib/pytz/australia-canberra.txt new file mode 100644 index 0000000..a86766d --- /dev/null +++ b/desk/gub/lib/pytz/australia-canberra.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:05,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-12-31T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-04-03T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-05T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-15T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-24T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-03T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-02T16:00:00,+10:00,AEST +1991-10-26T16:00:00,+11:00,AEDT +1992-02-29T16:00:00,+10:00,AEST +1992-10-24T16:00:00,+11:00,AEDT +1993-03-06T16:00:00,+10:00,AEST +1993-10-30T16:00:00,+11:00,AEDT +1994-03-05T16:00:00,+10:00,AEST +1994-10-29T16:00:00,+11:00,AEDT +1995-03-04T16:00:00,+10:00,AEST +1995-10-28T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-26T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-25T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-24T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-30T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-27T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-26T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-25T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-30T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-29T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-10-28T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-27T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2010-04-03T16:00:00,+10:00,AEST +2010-10-02T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-currie.txt b/desk/gub/lib/pytz/australia-currie.txt new file mode 100644 index 0000000..ff465d5 --- /dev/null +++ b/desk/gub/lib/pytz/australia-currie.txt @@ -0,0 +1,156 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:49,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-09-30T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1917-10-27T16:00:00,+11:00,AEDT +1918-03-02T16:00:00,+10:00,AEST +1918-10-26T16:00:00,+11:00,AEDT +1919-03-01T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1967-09-30T16:00:00,+11:00,AEDT +1968-03-30T16:00:00,+10:00,AEST +1968-10-26T16:00:00,+11:00,AEDT +1969-03-08T16:00:00,+10:00,AEST +1969-10-25T16:00:00,+11:00,AEDT +1970-03-07T16:00:00,+10:00,AEST +1970-10-24T16:00:00,+11:00,AEDT +1971-03-13T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-03-27T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-26T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-01T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-24T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-17T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-30T16:00:00,+10:00,AEST +1991-10-05T16:00:00,+11:00,AEDT +1992-03-28T16:00:00,+10:00,AEST +1992-10-03T16:00:00,+11:00,AEDT +1993-03-27T16:00:00,+10:00,AEST +1993-10-02T16:00:00,+11:00,AEDT +1994-03-26T16:00:00,+10:00,AEST +1994-10-01T16:00:00,+11:00,AEDT +1995-03-25T16:00:00,+10:00,AEST +1995-09-30T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-05T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-04T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-03T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-02T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-06T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-05T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-04T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-02T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-01T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-09-30T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-06T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2010-04-03T16:00:00,+10:00,AEST +2010-10-02T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-darwin.txt b/desk/gub/lib/pytz/australia-darwin.txt new file mode 100644 index 0000000..7db51b7 --- /dev/null +++ b/desk/gub/lib/pytz/australia-darwin.txt @@ -0,0 +1,11 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:43,LMT +1901-12-13T20:45:52,+09:30,ACST +1916-12-31T16:30:00,+10:30,ACDT +1917-03-24T16:30:00,+09:30,ACST +1941-12-31T16:30:00,+10:30,ACDT +1942-03-28T16:30:00,+09:30,ACST +1942-09-26T16:30:00,+10:30,ACDT +1943-03-27T16:30:00,+09:30,ACST +1943-10-02T16:30:00,+10:30,ACDT +1944-03-25T16:30:00,+09:30,ACST \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-eucla.txt b/desk/gub/lib/pytz/australia-eucla.txt new file mode 100644 index 0000000..7515f8e --- /dev/null +++ b/desk/gub/lib/pytz/australia-eucla.txt @@ -0,0 +1,21 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:35,LMT +1901-12-13T20:45:52,+08:45,+0845 +1916-12-31T17:15:00,+09:45,+0945 +1917-03-24T17:15:00,+08:45,+0845 +1941-12-31T17:15:00,+09:45,+0945 +1942-03-28T17:15:00,+08:45,+0845 +1942-09-26T17:15:00,+09:45,+0945 +1943-03-27T17:15:00,+08:45,+0845 +1974-10-26T17:15:00,+09:45,+0945 +1975-03-01T17:15:00,+08:45,+0845 +1983-10-29T17:15:00,+09:45,+0945 +1984-03-03T17:15:00,+08:45,+0845 +1991-11-16T17:15:00,+09:45,+0945 +1992-02-29T17:15:00,+08:45,+0845 +2006-12-02T17:15:00,+09:45,+0945 +2007-03-24T17:15:00,+08:45,+0845 +2007-10-27T17:15:00,+09:45,+0945 +2008-03-29T17:15:00,+08:45,+0845 +2008-10-25T17:15:00,+09:45,+0945 +2009-03-28T17:15:00,+08:45,+0845 \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-hobart.txt b/desk/gub/lib/pytz/australia-hobart.txt new file mode 100644 index 0000000..ff465d5 --- /dev/null +++ b/desk/gub/lib/pytz/australia-hobart.txt @@ -0,0 +1,156 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:49,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-09-30T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1917-10-27T16:00:00,+11:00,AEDT +1918-03-02T16:00:00,+10:00,AEST +1918-10-26T16:00:00,+11:00,AEDT +1919-03-01T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1967-09-30T16:00:00,+11:00,AEDT +1968-03-30T16:00:00,+10:00,AEST +1968-10-26T16:00:00,+11:00,AEDT +1969-03-08T16:00:00,+10:00,AEST +1969-10-25T16:00:00,+11:00,AEDT +1970-03-07T16:00:00,+10:00,AEST +1970-10-24T16:00:00,+11:00,AEDT +1971-03-13T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-03-27T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-26T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-01T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-24T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-17T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-30T16:00:00,+10:00,AEST +1991-10-05T16:00:00,+11:00,AEDT +1992-03-28T16:00:00,+10:00,AEST +1992-10-03T16:00:00,+11:00,AEDT +1993-03-27T16:00:00,+10:00,AEST +1993-10-02T16:00:00,+11:00,AEDT +1994-03-26T16:00:00,+10:00,AEST +1994-10-01T16:00:00,+11:00,AEDT +1995-03-25T16:00:00,+10:00,AEST +1995-09-30T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-05T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-04T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-03T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-02T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-06T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-05T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-04T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-02T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-01T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-09-30T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-06T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2010-04-03T16:00:00,+10:00,AEST +2010-10-02T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-lhi.txt b/desk/gub/lib/pytz/australia-lhi.txt new file mode 100644 index 0000000..3cb4b33 --- /dev/null +++ b/desk/gub/lib/pytz/australia-lhi.txt @@ -0,0 +1,117 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:36,LMT +1901-12-13T20:45:52,+10:00,AEST +1981-02-28T14:00:00,+10:30,+1030 +1981-10-24T15:30:00,+11:30,+1130 +1982-03-06T14:30:00,+10:30,+1030 +1982-10-30T15:30:00,+11:30,+1130 +1983-03-05T14:30:00,+10:30,+1030 +1983-10-29T15:30:00,+11:30,+1130 +1984-03-03T14:30:00,+10:30,+1030 +1984-10-27T15:30:00,+11:30,+1130 +1985-03-02T14:30:00,+10:30,+1030 +1985-10-26T15:30:00,+11:00,+11 +1986-03-15T15:00:00,+10:30,+1030 +1986-10-18T15:30:00,+11:00,+11 +1987-03-14T15:00:00,+10:30,+1030 +1987-10-24T15:30:00,+11:00,+11 +1988-03-19T15:00:00,+10:30,+1030 +1988-10-29T15:30:00,+11:00,+11 +1989-03-18T15:00:00,+10:30,+1030 +1989-10-28T15:30:00,+11:00,+11 +1990-03-03T15:00:00,+10:30,+1030 +1990-10-27T15:30:00,+11:00,+11 +1991-03-02T15:00:00,+10:30,+1030 +1991-10-26T15:30:00,+11:00,+11 +1992-02-29T15:00:00,+10:30,+1030 +1992-10-24T15:30:00,+11:00,+11 +1993-03-06T15:00:00,+10:30,+1030 +1993-10-30T15:30:00,+11:00,+11 +1994-03-05T15:00:00,+10:30,+1030 +1994-10-29T15:30:00,+11:00,+11 +1995-03-04T15:00:00,+10:30,+1030 +1995-10-28T15:30:00,+11:00,+11 +1996-03-30T15:00:00,+10:30,+1030 +1996-10-26T15:30:00,+11:00,+11 +1997-03-29T15:00:00,+10:30,+1030 +1997-10-25T15:30:00,+11:00,+11 +1998-03-28T15:00:00,+10:30,+1030 +1998-10-24T15:30:00,+11:00,+11 +1999-03-27T15:00:00,+10:30,+1030 +1999-10-30T15:30:00,+11:00,+11 +2000-03-25T15:00:00,+10:30,+1030 +2000-08-26T15:30:00,+11:00,+11 +2001-03-24T15:00:00,+10:30,+1030 +2001-10-27T15:30:00,+11:00,+11 +2002-03-30T15:00:00,+10:30,+1030 +2002-10-26T15:30:00,+11:00,+11 +2003-03-29T15:00:00,+10:30,+1030 +2003-10-25T15:30:00,+11:00,+11 +2004-03-27T15:00:00,+10:30,+1030 +2004-10-30T15:30:00,+11:00,+11 +2005-03-26T15:00:00,+10:30,+1030 +2005-10-29T15:30:00,+11:00,+11 +2006-04-01T15:00:00,+10:30,+1030 +2006-10-28T15:30:00,+11:00,+11 +2007-03-24T15:00:00,+10:30,+1030 +2007-10-27T15:30:00,+11:00,+11 +2008-04-05T15:00:00,+10:30,+1030 +2008-10-04T15:30:00,+11:00,+11 +2009-04-04T15:00:00,+10:30,+1030 +2009-10-03T15:30:00,+11:00,+11 +2010-04-03T15:00:00,+10:30,+1030 +2010-10-02T15:30:00,+11:00,+11 +2011-04-02T15:00:00,+10:30,+1030 +2011-10-01T15:30:00,+11:00,+11 +2012-03-31T15:00:00,+10:30,+1030 +2012-10-06T15:30:00,+11:00,+11 +2013-04-06T15:00:00,+10:30,+1030 +2013-10-05T15:30:00,+11:00,+11 +2014-04-05T15:00:00,+10:30,+1030 +2014-10-04T15:30:00,+11:00,+11 +2015-04-04T15:00:00,+10:30,+1030 +2015-10-03T15:30:00,+11:00,+11 +2016-04-02T15:00:00,+10:30,+1030 +2016-10-01T15:30:00,+11:00,+11 +2017-04-01T15:00:00,+10:30,+1030 +2017-09-30T15:30:00,+11:00,+11 +2018-03-31T15:00:00,+10:30,+1030 +2018-10-06T15:30:00,+11:00,+11 +2019-04-06T15:00:00,+10:30,+1030 +2019-10-05T15:30:00,+11:00,+11 +2020-04-04T15:00:00,+10:30,+1030 +2020-10-03T15:30:00,+11:00,+11 +2021-04-03T15:00:00,+10:30,+1030 +2021-10-02T15:30:00,+11:00,+11 +2022-04-02T15:00:00,+10:30,+1030 +2022-10-01T15:30:00,+11:00,+11 +2023-04-01T15:00:00,+10:30,+1030 +2023-09-30T15:30:00,+11:00,+11 +2024-04-06T15:00:00,+10:30,+1030 +2024-10-05T15:30:00,+11:00,+11 +2025-04-05T15:00:00,+10:30,+1030 +2025-10-04T15:30:00,+11:00,+11 +2026-04-04T15:00:00,+10:30,+1030 +2026-10-03T15:30:00,+11:00,+11 +2027-04-03T15:00:00,+10:30,+1030 +2027-10-02T15:30:00,+11:00,+11 +2028-04-01T15:00:00,+10:30,+1030 +2028-09-30T15:30:00,+11:00,+11 +2029-03-31T15:00:00,+10:30,+1030 +2029-10-06T15:30:00,+11:00,+11 +2030-04-06T15:00:00,+10:30,+1030 +2030-10-05T15:30:00,+11:00,+11 +2031-04-05T15:00:00,+10:30,+1030 +2031-10-04T15:30:00,+11:00,+11 +2032-04-03T15:00:00,+10:30,+1030 +2032-10-02T15:30:00,+11:00,+11 +2033-04-02T15:00:00,+10:30,+1030 +2033-10-01T15:30:00,+11:00,+11 +2034-04-01T15:00:00,+10:30,+1030 +2034-09-30T15:30:00,+11:00,+11 +2035-03-31T15:00:00,+10:30,+1030 +2035-10-06T15:30:00,+11:00,+11 +2036-04-05T15:00:00,+10:30,+1030 +2036-10-04T15:30:00,+11:00,+11 +2037-04-04T15:00:00,+10:30,+1030 +2037-10-03T15:30:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-lindeman.txt b/desk/gub/lib/pytz/australia-lindeman.txt new file mode 100644 index 0000000..ca5b76b --- /dev/null +++ b/desk/gub/lib/pytz/australia-lindeman.txt @@ -0,0 +1,23 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:56,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-12-31T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-03T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-02T16:00:00,+10:00,AEST +1991-10-26T16:00:00,+11:00,AEDT +1992-02-29T16:00:00,+10:00,AEST +1992-10-24T16:00:00,+11:00,AEDT +1993-03-06T16:00:00,+10:00,AEST +1993-10-30T16:00:00,+11:00,AEDT +1994-03-05T16:00:00,+10:00,AEST \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-lord-howe.txt b/desk/gub/lib/pytz/australia-lord-howe.txt new file mode 100644 index 0000000..3cb4b33 --- /dev/null +++ b/desk/gub/lib/pytz/australia-lord-howe.txt @@ -0,0 +1,117 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:36,LMT +1901-12-13T20:45:52,+10:00,AEST +1981-02-28T14:00:00,+10:30,+1030 +1981-10-24T15:30:00,+11:30,+1130 +1982-03-06T14:30:00,+10:30,+1030 +1982-10-30T15:30:00,+11:30,+1130 +1983-03-05T14:30:00,+10:30,+1030 +1983-10-29T15:30:00,+11:30,+1130 +1984-03-03T14:30:00,+10:30,+1030 +1984-10-27T15:30:00,+11:30,+1130 +1985-03-02T14:30:00,+10:30,+1030 +1985-10-26T15:30:00,+11:00,+11 +1986-03-15T15:00:00,+10:30,+1030 +1986-10-18T15:30:00,+11:00,+11 +1987-03-14T15:00:00,+10:30,+1030 +1987-10-24T15:30:00,+11:00,+11 +1988-03-19T15:00:00,+10:30,+1030 +1988-10-29T15:30:00,+11:00,+11 +1989-03-18T15:00:00,+10:30,+1030 +1989-10-28T15:30:00,+11:00,+11 +1990-03-03T15:00:00,+10:30,+1030 +1990-10-27T15:30:00,+11:00,+11 +1991-03-02T15:00:00,+10:30,+1030 +1991-10-26T15:30:00,+11:00,+11 +1992-02-29T15:00:00,+10:30,+1030 +1992-10-24T15:30:00,+11:00,+11 +1993-03-06T15:00:00,+10:30,+1030 +1993-10-30T15:30:00,+11:00,+11 +1994-03-05T15:00:00,+10:30,+1030 +1994-10-29T15:30:00,+11:00,+11 +1995-03-04T15:00:00,+10:30,+1030 +1995-10-28T15:30:00,+11:00,+11 +1996-03-30T15:00:00,+10:30,+1030 +1996-10-26T15:30:00,+11:00,+11 +1997-03-29T15:00:00,+10:30,+1030 +1997-10-25T15:30:00,+11:00,+11 +1998-03-28T15:00:00,+10:30,+1030 +1998-10-24T15:30:00,+11:00,+11 +1999-03-27T15:00:00,+10:30,+1030 +1999-10-30T15:30:00,+11:00,+11 +2000-03-25T15:00:00,+10:30,+1030 +2000-08-26T15:30:00,+11:00,+11 +2001-03-24T15:00:00,+10:30,+1030 +2001-10-27T15:30:00,+11:00,+11 +2002-03-30T15:00:00,+10:30,+1030 +2002-10-26T15:30:00,+11:00,+11 +2003-03-29T15:00:00,+10:30,+1030 +2003-10-25T15:30:00,+11:00,+11 +2004-03-27T15:00:00,+10:30,+1030 +2004-10-30T15:30:00,+11:00,+11 +2005-03-26T15:00:00,+10:30,+1030 +2005-10-29T15:30:00,+11:00,+11 +2006-04-01T15:00:00,+10:30,+1030 +2006-10-28T15:30:00,+11:00,+11 +2007-03-24T15:00:00,+10:30,+1030 +2007-10-27T15:30:00,+11:00,+11 +2008-04-05T15:00:00,+10:30,+1030 +2008-10-04T15:30:00,+11:00,+11 +2009-04-04T15:00:00,+10:30,+1030 +2009-10-03T15:30:00,+11:00,+11 +2010-04-03T15:00:00,+10:30,+1030 +2010-10-02T15:30:00,+11:00,+11 +2011-04-02T15:00:00,+10:30,+1030 +2011-10-01T15:30:00,+11:00,+11 +2012-03-31T15:00:00,+10:30,+1030 +2012-10-06T15:30:00,+11:00,+11 +2013-04-06T15:00:00,+10:30,+1030 +2013-10-05T15:30:00,+11:00,+11 +2014-04-05T15:00:00,+10:30,+1030 +2014-10-04T15:30:00,+11:00,+11 +2015-04-04T15:00:00,+10:30,+1030 +2015-10-03T15:30:00,+11:00,+11 +2016-04-02T15:00:00,+10:30,+1030 +2016-10-01T15:30:00,+11:00,+11 +2017-04-01T15:00:00,+10:30,+1030 +2017-09-30T15:30:00,+11:00,+11 +2018-03-31T15:00:00,+10:30,+1030 +2018-10-06T15:30:00,+11:00,+11 +2019-04-06T15:00:00,+10:30,+1030 +2019-10-05T15:30:00,+11:00,+11 +2020-04-04T15:00:00,+10:30,+1030 +2020-10-03T15:30:00,+11:00,+11 +2021-04-03T15:00:00,+10:30,+1030 +2021-10-02T15:30:00,+11:00,+11 +2022-04-02T15:00:00,+10:30,+1030 +2022-10-01T15:30:00,+11:00,+11 +2023-04-01T15:00:00,+10:30,+1030 +2023-09-30T15:30:00,+11:00,+11 +2024-04-06T15:00:00,+10:30,+1030 +2024-10-05T15:30:00,+11:00,+11 +2025-04-05T15:00:00,+10:30,+1030 +2025-10-04T15:30:00,+11:00,+11 +2026-04-04T15:00:00,+10:30,+1030 +2026-10-03T15:30:00,+11:00,+11 +2027-04-03T15:00:00,+10:30,+1030 +2027-10-02T15:30:00,+11:00,+11 +2028-04-01T15:00:00,+10:30,+1030 +2028-09-30T15:30:00,+11:00,+11 +2029-03-31T15:00:00,+10:30,+1030 +2029-10-06T15:30:00,+11:00,+11 +2030-04-06T15:00:00,+10:30,+1030 +2030-10-05T15:30:00,+11:00,+11 +2031-04-05T15:00:00,+10:30,+1030 +2031-10-04T15:30:00,+11:00,+11 +2032-04-03T15:00:00,+10:30,+1030 +2032-10-02T15:30:00,+11:00,+11 +2033-04-02T15:00:00,+10:30,+1030 +2033-10-01T15:30:00,+11:00,+11 +2034-04-01T15:00:00,+10:30,+1030 +2034-09-30T15:30:00,+11:00,+11 +2035-03-31T15:00:00,+10:30,+1030 +2035-10-06T15:30:00,+11:00,+11 +2036-04-05T15:00:00,+10:30,+1030 +2036-10-04T15:30:00,+11:00,+11 +2037-04-04T15:00:00,+10:30,+1030 +2037-10-03T15:30:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-melbourne.txt b/desk/gub/lib/pytz/australia-melbourne.txt new file mode 100644 index 0000000..50c679d --- /dev/null +++ b/desk/gub/lib/pytz/australia-melbourne.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:40,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-12-31T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-03-06T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-05T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-15T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-17T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-17T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-02T16:00:00,+10:00,AEST +1991-10-26T16:00:00,+11:00,AEDT +1992-02-29T16:00:00,+10:00,AEST +1992-10-24T16:00:00,+11:00,AEDT +1993-03-06T16:00:00,+10:00,AEST +1993-10-30T16:00:00,+11:00,AEDT +1994-03-05T16:00:00,+10:00,AEST +1994-10-29T16:00:00,+11:00,AEDT +1995-03-25T16:00:00,+10:00,AEST +1995-10-28T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-26T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-25T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-24T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-30T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-27T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-26T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-25T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-30T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-29T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-10-28T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-27T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2010-04-03T16:00:00,+10:00,AEST +2010-10-02T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-north.txt b/desk/gub/lib/pytz/australia-north.txt new file mode 100644 index 0000000..7db51b7 --- /dev/null +++ b/desk/gub/lib/pytz/australia-north.txt @@ -0,0 +1,11 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:43,LMT +1901-12-13T20:45:52,+09:30,ACST +1916-12-31T16:30:00,+10:30,ACDT +1917-03-24T16:30:00,+09:30,ACST +1941-12-31T16:30:00,+10:30,ACDT +1942-03-28T16:30:00,+09:30,ACST +1942-09-26T16:30:00,+10:30,ACDT +1943-03-27T16:30:00,+09:30,ACST +1943-10-02T16:30:00,+10:30,ACDT +1944-03-25T16:30:00,+09:30,ACST \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-nsw.txt b/desk/gub/lib/pytz/australia-nsw.txt new file mode 100644 index 0000000..a86766d --- /dev/null +++ b/desk/gub/lib/pytz/australia-nsw.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:05,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-12-31T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-04-03T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-05T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-15T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-24T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-03T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-02T16:00:00,+10:00,AEST +1991-10-26T16:00:00,+11:00,AEDT +1992-02-29T16:00:00,+10:00,AEST +1992-10-24T16:00:00,+11:00,AEDT +1993-03-06T16:00:00,+10:00,AEST +1993-10-30T16:00:00,+11:00,AEDT +1994-03-05T16:00:00,+10:00,AEST +1994-10-29T16:00:00,+11:00,AEDT +1995-03-04T16:00:00,+10:00,AEST +1995-10-28T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-26T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-25T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-24T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-30T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-27T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-26T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-25T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-30T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-29T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-10-28T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-27T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2010-04-03T16:00:00,+10:00,AEST +2010-10-02T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-perth.txt b/desk/gub/lib/pytz/australia-perth.txt new file mode 100644 index 0000000..cc78b04 --- /dev/null +++ b/desk/gub/lib/pytz/australia-perth.txt @@ -0,0 +1,21 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:43,LMT +1901-12-13T20:45:52,+08:00,AWST +1916-12-31T18:00:00,+09:00,AWDT +1917-03-24T18:00:00,+08:00,AWST +1941-12-31T18:00:00,+09:00,AWDT +1942-03-28T18:00:00,+08:00,AWST +1942-09-26T18:00:00,+09:00,AWDT +1943-03-27T18:00:00,+08:00,AWST +1974-10-26T18:00:00,+09:00,AWDT +1975-03-01T18:00:00,+08:00,AWST +1983-10-29T18:00:00,+09:00,AWDT +1984-03-03T18:00:00,+08:00,AWST +1991-11-16T18:00:00,+09:00,AWDT +1992-02-29T18:00:00,+08:00,AWST +2006-12-02T18:00:00,+09:00,AWDT +2007-03-24T18:00:00,+08:00,AWST +2007-10-27T18:00:00,+09:00,AWDT +2008-03-29T18:00:00,+08:00,AWST +2008-10-25T18:00:00,+09:00,AWDT +2009-03-28T18:00:00,+08:00,AWST \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-queensland.txt b/desk/gub/lib/pytz/australia-queensland.txt new file mode 100644 index 0000000..d24af9f --- /dev/null +++ b/desk/gub/lib/pytz/australia-queensland.txt @@ -0,0 +1,19 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:12,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-12-31T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-03T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-02T16:00:00,+10:00,AEST +1991-10-26T16:00:00,+11:00,AEDT +1992-02-29T16:00:00,+10:00,AEST \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-south.txt b/desk/gub/lib/pytz/australia-south.txt new file mode 100644 index 0000000..3c92975 --- /dev/null +++ b/desk/gub/lib/pytz/australia-south.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:14,LMT +1901-12-13T20:45:52,+09:30,ACST +1916-12-31T16:30:00,+10:30,ACDT +1917-03-24T16:30:00,+09:30,ACST +1941-12-31T16:30:00,+10:30,ACDT +1942-03-28T16:30:00,+09:30,ACST +1942-09-26T16:30:00,+10:30,ACDT +1943-03-27T16:30:00,+09:30,ACST +1943-10-02T16:30:00,+10:30,ACDT +1944-03-25T16:30:00,+09:30,ACST +1971-10-30T16:30:00,+10:30,ACDT +1972-02-26T16:30:00,+09:30,ACST +1972-10-28T16:30:00,+10:30,ACDT +1973-03-03T16:30:00,+09:30,ACST +1973-10-27T16:30:00,+10:30,ACDT +1974-03-02T16:30:00,+09:30,ACST +1974-10-26T16:30:00,+10:30,ACDT +1975-03-01T16:30:00,+09:30,ACST +1975-10-25T16:30:00,+10:30,ACDT +1976-03-06T16:30:00,+09:30,ACST +1976-10-30T16:30:00,+10:30,ACDT +1977-03-05T16:30:00,+09:30,ACST +1977-10-29T16:30:00,+10:30,ACDT +1978-03-04T16:30:00,+09:30,ACST +1978-10-28T16:30:00,+10:30,ACDT +1979-03-03T16:30:00,+09:30,ACST +1979-10-27T16:30:00,+10:30,ACDT +1980-03-01T16:30:00,+09:30,ACST +1980-10-25T16:30:00,+10:30,ACDT +1981-02-28T16:30:00,+09:30,ACST +1981-10-24T16:30:00,+10:30,ACDT +1982-03-06T16:30:00,+09:30,ACST +1982-10-30T16:30:00,+10:30,ACDT +1983-03-05T16:30:00,+09:30,ACST +1983-10-29T16:30:00,+10:30,ACDT +1984-03-03T16:30:00,+09:30,ACST +1984-10-27T16:30:00,+10:30,ACDT +1985-03-02T16:30:00,+09:30,ACST +1985-10-26T16:30:00,+10:30,ACDT +1986-03-15T16:30:00,+09:30,ACST +1986-10-18T16:30:00,+10:30,ACDT +1987-03-14T16:30:00,+09:30,ACST +1987-10-24T16:30:00,+10:30,ACDT +1988-03-19T16:30:00,+09:30,ACST +1988-10-29T16:30:00,+10:30,ACDT +1989-03-18T16:30:00,+09:30,ACST +1989-10-28T16:30:00,+10:30,ACDT +1990-03-17T16:30:00,+09:30,ACST +1990-10-27T16:30:00,+10:30,ACDT +1991-03-02T16:30:00,+09:30,ACST +1991-10-26T16:30:00,+10:30,ACDT +1992-03-21T16:30:00,+09:30,ACST +1992-10-24T16:30:00,+10:30,ACDT +1993-03-06T16:30:00,+09:30,ACST +1993-10-30T16:30:00,+10:30,ACDT +1994-03-19T16:30:00,+09:30,ACST +1994-10-29T16:30:00,+10:30,ACDT +1995-03-25T16:30:00,+09:30,ACST +1995-10-28T16:30:00,+10:30,ACDT +1996-03-30T16:30:00,+09:30,ACST +1996-10-26T16:30:00,+10:30,ACDT +1997-03-29T16:30:00,+09:30,ACST +1997-10-25T16:30:00,+10:30,ACDT +1998-03-28T16:30:00,+09:30,ACST +1998-10-24T16:30:00,+10:30,ACDT +1999-03-27T16:30:00,+09:30,ACST +1999-10-30T16:30:00,+10:30,ACDT +2000-03-25T16:30:00,+09:30,ACST +2000-10-28T16:30:00,+10:30,ACDT +2001-03-24T16:30:00,+09:30,ACST +2001-10-27T16:30:00,+10:30,ACDT +2002-03-30T16:30:00,+09:30,ACST +2002-10-26T16:30:00,+10:30,ACDT +2003-03-29T16:30:00,+09:30,ACST +2003-10-25T16:30:00,+10:30,ACDT +2004-03-27T16:30:00,+09:30,ACST +2004-10-30T16:30:00,+10:30,ACDT +2005-03-26T16:30:00,+09:30,ACST +2005-10-29T16:30:00,+10:30,ACDT +2006-04-01T16:30:00,+09:30,ACST +2006-10-28T16:30:00,+10:30,ACDT +2007-03-24T16:30:00,+09:30,ACST +2007-10-27T16:30:00,+10:30,ACDT +2008-04-05T16:30:00,+09:30,ACST +2008-10-04T16:30:00,+10:30,ACDT +2009-04-04T16:30:00,+09:30,ACST +2009-10-03T16:30:00,+10:30,ACDT +2010-04-03T16:30:00,+09:30,ACST +2010-10-02T16:30:00,+10:30,ACDT +2011-04-02T16:30:00,+09:30,ACST +2011-10-01T16:30:00,+10:30,ACDT +2012-03-31T16:30:00,+09:30,ACST +2012-10-06T16:30:00,+10:30,ACDT +2013-04-06T16:30:00,+09:30,ACST +2013-10-05T16:30:00,+10:30,ACDT +2014-04-05T16:30:00,+09:30,ACST +2014-10-04T16:30:00,+10:30,ACDT +2015-04-04T16:30:00,+09:30,ACST +2015-10-03T16:30:00,+10:30,ACDT +2016-04-02T16:30:00,+09:30,ACST +2016-10-01T16:30:00,+10:30,ACDT +2017-04-01T16:30:00,+09:30,ACST +2017-09-30T16:30:00,+10:30,ACDT +2018-03-31T16:30:00,+09:30,ACST +2018-10-06T16:30:00,+10:30,ACDT +2019-04-06T16:30:00,+09:30,ACST +2019-10-05T16:30:00,+10:30,ACDT +2020-04-04T16:30:00,+09:30,ACST +2020-10-03T16:30:00,+10:30,ACDT +2021-04-03T16:30:00,+09:30,ACST +2021-10-02T16:30:00,+10:30,ACDT +2022-04-02T16:30:00,+09:30,ACST +2022-10-01T16:30:00,+10:30,ACDT +2023-04-01T16:30:00,+09:30,ACST +2023-09-30T16:30:00,+10:30,ACDT +2024-04-06T16:30:00,+09:30,ACST +2024-10-05T16:30:00,+10:30,ACDT +2025-04-05T16:30:00,+09:30,ACST +2025-10-04T16:30:00,+10:30,ACDT +2026-04-04T16:30:00,+09:30,ACST +2026-10-03T16:30:00,+10:30,ACDT +2027-04-03T16:30:00,+09:30,ACST +2027-10-02T16:30:00,+10:30,ACDT +2028-04-01T16:30:00,+09:30,ACST +2028-09-30T16:30:00,+10:30,ACDT +2029-03-31T16:30:00,+09:30,ACST +2029-10-06T16:30:00,+10:30,ACDT +2030-04-06T16:30:00,+09:30,ACST +2030-10-05T16:30:00,+10:30,ACDT +2031-04-05T16:30:00,+09:30,ACST +2031-10-04T16:30:00,+10:30,ACDT +2032-04-03T16:30:00,+09:30,ACST +2032-10-02T16:30:00,+10:30,ACDT +2033-04-02T16:30:00,+09:30,ACST +2033-10-01T16:30:00,+10:30,ACDT +2034-04-01T16:30:00,+09:30,ACST +2034-09-30T16:30:00,+10:30,ACDT +2035-03-31T16:30:00,+09:30,ACST +2035-10-06T16:30:00,+10:30,ACDT +2036-04-05T16:30:00,+09:30,ACST +2036-10-04T16:30:00,+10:30,ACDT +2037-04-04T16:30:00,+09:30,ACST +2037-10-03T16:30:00,+10:30,ACDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-sydney.txt b/desk/gub/lib/pytz/australia-sydney.txt new file mode 100644 index 0000000..a86766d --- /dev/null +++ b/desk/gub/lib/pytz/australia-sydney.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:05,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-12-31T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-04-03T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-05T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-15T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-24T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-03T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-02T16:00:00,+10:00,AEST +1991-10-26T16:00:00,+11:00,AEDT +1992-02-29T16:00:00,+10:00,AEST +1992-10-24T16:00:00,+11:00,AEDT +1993-03-06T16:00:00,+10:00,AEST +1993-10-30T16:00:00,+11:00,AEDT +1994-03-05T16:00:00,+10:00,AEST +1994-10-29T16:00:00,+11:00,AEDT +1995-03-04T16:00:00,+10:00,AEST +1995-10-28T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-26T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-25T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-24T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-30T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-27T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-26T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-25T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-30T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-29T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-10-28T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-27T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2010-04-03T16:00:00,+10:00,AEST +2010-10-02T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-tasmania.txt b/desk/gub/lib/pytz/australia-tasmania.txt new file mode 100644 index 0000000..ff465d5 --- /dev/null +++ b/desk/gub/lib/pytz/australia-tasmania.txt @@ -0,0 +1,156 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:49,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-09-30T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1917-10-27T16:00:00,+11:00,AEDT +1918-03-02T16:00:00,+10:00,AEST +1918-10-26T16:00:00,+11:00,AEDT +1919-03-01T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1967-09-30T16:00:00,+11:00,AEDT +1968-03-30T16:00:00,+10:00,AEST +1968-10-26T16:00:00,+11:00,AEDT +1969-03-08T16:00:00,+10:00,AEST +1969-10-25T16:00:00,+11:00,AEDT +1970-03-07T16:00:00,+10:00,AEST +1970-10-24T16:00:00,+11:00,AEDT +1971-03-13T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-03-27T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-26T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-01T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-24T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-17T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-30T16:00:00,+10:00,AEST +1991-10-05T16:00:00,+11:00,AEDT +1992-03-28T16:00:00,+10:00,AEST +1992-10-03T16:00:00,+11:00,AEDT +1993-03-27T16:00:00,+10:00,AEST +1993-10-02T16:00:00,+11:00,AEDT +1994-03-26T16:00:00,+10:00,AEST +1994-10-01T16:00:00,+11:00,AEDT +1995-03-25T16:00:00,+10:00,AEST +1995-09-30T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-05T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-04T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-03T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-02T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-06T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-05T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-04T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-02T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-01T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-09-30T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-06T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2010-04-03T16:00:00,+10:00,AEST +2010-10-02T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-victoria.txt b/desk/gub/lib/pytz/australia-victoria.txt new file mode 100644 index 0000000..50c679d --- /dev/null +++ b/desk/gub/lib/pytz/australia-victoria.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:40,LMT +1901-12-13T20:45:52,+10:00,AEST +1916-12-31T16:00:00,+11:00,AEDT +1917-03-24T16:00:00,+10:00,AEST +1941-12-31T16:00:00,+11:00,AEDT +1942-03-28T16:00:00,+10:00,AEST +1942-09-26T16:00:00,+11:00,AEDT +1943-03-27T16:00:00,+10:00,AEST +1943-10-02T16:00:00,+11:00,AEDT +1944-03-25T16:00:00,+10:00,AEST +1971-10-30T16:00:00,+11:00,AEDT +1972-02-26T16:00:00,+10:00,AEST +1972-10-28T16:00:00,+11:00,AEDT +1973-03-03T16:00:00,+10:00,AEST +1973-10-27T16:00:00,+11:00,AEDT +1974-03-02T16:00:00,+10:00,AEST +1974-10-26T16:00:00,+11:00,AEDT +1975-03-01T16:00:00,+10:00,AEST +1975-10-25T16:00:00,+11:00,AEDT +1976-03-06T16:00:00,+10:00,AEST +1976-10-30T16:00:00,+11:00,AEDT +1977-03-05T16:00:00,+10:00,AEST +1977-10-29T16:00:00,+11:00,AEDT +1978-03-04T16:00:00,+10:00,AEST +1978-10-28T16:00:00,+11:00,AEDT +1979-03-03T16:00:00,+10:00,AEST +1979-10-27T16:00:00,+11:00,AEDT +1980-03-01T16:00:00,+10:00,AEST +1980-10-25T16:00:00,+11:00,AEDT +1981-02-28T16:00:00,+10:00,AEST +1981-10-24T16:00:00,+11:00,AEDT +1982-03-06T16:00:00,+10:00,AEST +1982-10-30T16:00:00,+11:00,AEDT +1983-03-05T16:00:00,+10:00,AEST +1983-10-29T16:00:00,+11:00,AEDT +1984-03-03T16:00:00,+10:00,AEST +1984-10-27T16:00:00,+11:00,AEDT +1985-03-02T16:00:00,+10:00,AEST +1985-10-26T16:00:00,+11:00,AEDT +1986-03-15T16:00:00,+10:00,AEST +1986-10-18T16:00:00,+11:00,AEDT +1987-03-14T16:00:00,+10:00,AEST +1987-10-17T16:00:00,+11:00,AEDT +1988-03-19T16:00:00,+10:00,AEST +1988-10-29T16:00:00,+11:00,AEDT +1989-03-18T16:00:00,+10:00,AEST +1989-10-28T16:00:00,+11:00,AEDT +1990-03-17T16:00:00,+10:00,AEST +1990-10-27T16:00:00,+11:00,AEDT +1991-03-02T16:00:00,+10:00,AEST +1991-10-26T16:00:00,+11:00,AEDT +1992-02-29T16:00:00,+10:00,AEST +1992-10-24T16:00:00,+11:00,AEDT +1993-03-06T16:00:00,+10:00,AEST +1993-10-30T16:00:00,+11:00,AEDT +1994-03-05T16:00:00,+10:00,AEST +1994-10-29T16:00:00,+11:00,AEDT +1995-03-25T16:00:00,+10:00,AEST +1995-10-28T16:00:00,+11:00,AEDT +1996-03-30T16:00:00,+10:00,AEST +1996-10-26T16:00:00,+11:00,AEDT +1997-03-29T16:00:00,+10:00,AEST +1997-10-25T16:00:00,+11:00,AEDT +1998-03-28T16:00:00,+10:00,AEST +1998-10-24T16:00:00,+11:00,AEDT +1999-03-27T16:00:00,+10:00,AEST +1999-10-30T16:00:00,+11:00,AEDT +2000-03-25T16:00:00,+10:00,AEST +2000-08-26T16:00:00,+11:00,AEDT +2001-03-24T16:00:00,+10:00,AEST +2001-10-27T16:00:00,+11:00,AEDT +2002-03-30T16:00:00,+10:00,AEST +2002-10-26T16:00:00,+11:00,AEDT +2003-03-29T16:00:00,+10:00,AEST +2003-10-25T16:00:00,+11:00,AEDT +2004-03-27T16:00:00,+10:00,AEST +2004-10-30T16:00:00,+11:00,AEDT +2005-03-26T16:00:00,+10:00,AEST +2005-10-29T16:00:00,+11:00,AEDT +2006-04-01T16:00:00,+10:00,AEST +2006-10-28T16:00:00,+11:00,AEDT +2007-03-24T16:00:00,+10:00,AEST +2007-10-27T16:00:00,+11:00,AEDT +2008-04-05T16:00:00,+10:00,AEST +2008-10-04T16:00:00,+11:00,AEDT +2009-04-04T16:00:00,+10:00,AEST +2009-10-03T16:00:00,+11:00,AEDT +2010-04-03T16:00:00,+10:00,AEST +2010-10-02T16:00:00,+11:00,AEDT +2011-04-02T16:00:00,+10:00,AEST +2011-10-01T16:00:00,+11:00,AEDT +2012-03-31T16:00:00,+10:00,AEST +2012-10-06T16:00:00,+11:00,AEDT +2013-04-06T16:00:00,+10:00,AEST +2013-10-05T16:00:00,+11:00,AEDT +2014-04-05T16:00:00,+10:00,AEST +2014-10-04T16:00:00,+11:00,AEDT +2015-04-04T16:00:00,+10:00,AEST +2015-10-03T16:00:00,+11:00,AEDT +2016-04-02T16:00:00,+10:00,AEST +2016-10-01T16:00:00,+11:00,AEDT +2017-04-01T16:00:00,+10:00,AEST +2017-09-30T16:00:00,+11:00,AEDT +2018-03-31T16:00:00,+10:00,AEST +2018-10-06T16:00:00,+11:00,AEDT +2019-04-06T16:00:00,+10:00,AEST +2019-10-05T16:00:00,+11:00,AEDT +2020-04-04T16:00:00,+10:00,AEST +2020-10-03T16:00:00,+11:00,AEDT +2021-04-03T16:00:00,+10:00,AEST +2021-10-02T16:00:00,+11:00,AEDT +2022-04-02T16:00:00,+10:00,AEST +2022-10-01T16:00:00,+11:00,AEDT +2023-04-01T16:00:00,+10:00,AEST +2023-09-30T16:00:00,+11:00,AEDT +2024-04-06T16:00:00,+10:00,AEST +2024-10-05T16:00:00,+11:00,AEDT +2025-04-05T16:00:00,+10:00,AEST +2025-10-04T16:00:00,+11:00,AEDT +2026-04-04T16:00:00,+10:00,AEST +2026-10-03T16:00:00,+11:00,AEDT +2027-04-03T16:00:00,+10:00,AEST +2027-10-02T16:00:00,+11:00,AEDT +2028-04-01T16:00:00,+10:00,AEST +2028-09-30T16:00:00,+11:00,AEDT +2029-03-31T16:00:00,+10:00,AEST +2029-10-06T16:00:00,+11:00,AEDT +2030-04-06T16:00:00,+10:00,AEST +2030-10-05T16:00:00,+11:00,AEDT +2031-04-05T16:00:00,+10:00,AEST +2031-10-04T16:00:00,+11:00,AEDT +2032-04-03T16:00:00,+10:00,AEST +2032-10-02T16:00:00,+11:00,AEDT +2033-04-02T16:00:00,+10:00,AEST +2033-10-01T16:00:00,+11:00,AEDT +2034-04-01T16:00:00,+10:00,AEST +2034-09-30T16:00:00,+11:00,AEDT +2035-03-31T16:00:00,+10:00,AEST +2035-10-06T16:00:00,+11:00,AEDT +2036-04-05T16:00:00,+10:00,AEST +2036-10-04T16:00:00,+11:00,AEDT +2037-04-04T16:00:00,+10:00,AEST +2037-10-03T16:00:00,+11:00,AEDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-west.txt b/desk/gub/lib/pytz/australia-west.txt new file mode 100644 index 0000000..cc78b04 --- /dev/null +++ b/desk/gub/lib/pytz/australia-west.txt @@ -0,0 +1,21 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:43,LMT +1901-12-13T20:45:52,+08:00,AWST +1916-12-31T18:00:00,+09:00,AWDT +1917-03-24T18:00:00,+08:00,AWST +1941-12-31T18:00:00,+09:00,AWDT +1942-03-28T18:00:00,+08:00,AWST +1942-09-26T18:00:00,+09:00,AWDT +1943-03-27T18:00:00,+08:00,AWST +1974-10-26T18:00:00,+09:00,AWDT +1975-03-01T18:00:00,+08:00,AWST +1983-10-29T18:00:00,+09:00,AWDT +1984-03-03T18:00:00,+08:00,AWST +1991-11-16T18:00:00,+09:00,AWDT +1992-02-29T18:00:00,+08:00,AWST +2006-12-02T18:00:00,+09:00,AWDT +2007-03-24T18:00:00,+08:00,AWST +2007-10-27T18:00:00,+09:00,AWDT +2008-03-29T18:00:00,+08:00,AWST +2008-10-25T18:00:00,+09:00,AWDT +2009-03-28T18:00:00,+08:00,AWST \ No newline at end of file diff --git a/desk/gub/lib/pytz/australia-yancowinna.txt b/desk/gub/lib/pytz/australia-yancowinna.txt new file mode 100644 index 0000000..82388cf --- /dev/null +++ b/desk/gub/lib/pytz/australia-yancowinna.txt @@ -0,0 +1,144 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:26,LMT +1901-12-13T20:45:52,+09:30,ACST +1916-12-31T16:30:00,+10:30,ACDT +1917-03-24T16:30:00,+09:30,ACST +1941-12-31T16:30:00,+10:30,ACDT +1942-03-28T16:30:00,+09:30,ACST +1942-09-26T16:30:00,+10:30,ACDT +1943-03-27T16:30:00,+09:30,ACST +1943-10-02T16:30:00,+10:30,ACDT +1944-03-25T16:30:00,+09:30,ACST +1971-10-30T16:30:00,+10:30,ACDT +1972-02-26T16:30:00,+09:30,ACST +1972-10-28T16:30:00,+10:30,ACDT +1973-03-03T16:30:00,+09:30,ACST +1973-10-27T16:30:00,+10:30,ACDT +1974-03-02T16:30:00,+09:30,ACST +1974-10-26T16:30:00,+10:30,ACDT +1975-03-01T16:30:00,+09:30,ACST +1975-10-25T16:30:00,+10:30,ACDT +1976-03-06T16:30:00,+09:30,ACST +1976-10-30T16:30:00,+10:30,ACDT +1977-03-05T16:30:00,+09:30,ACST +1977-10-29T16:30:00,+10:30,ACDT +1978-03-04T16:30:00,+09:30,ACST +1978-10-28T16:30:00,+10:30,ACDT +1979-03-03T16:30:00,+09:30,ACST +1979-10-27T16:30:00,+10:30,ACDT +1980-03-01T16:30:00,+09:30,ACST +1980-10-25T16:30:00,+10:30,ACDT +1981-02-28T16:30:00,+09:30,ACST +1981-10-24T16:30:00,+10:30,ACDT +1982-04-03T16:30:00,+09:30,ACST +1982-10-30T16:30:00,+10:30,ACDT +1983-03-05T16:30:00,+09:30,ACST +1983-10-29T16:30:00,+10:30,ACDT +1984-03-03T16:30:00,+09:30,ACST +1984-10-27T16:30:00,+10:30,ACDT +1985-03-02T16:30:00,+09:30,ACST +1985-10-26T16:30:00,+10:30,ACDT +1986-03-15T16:30:00,+09:30,ACST +1986-10-18T16:30:00,+10:30,ACDT +1987-03-14T16:30:00,+09:30,ACST +1987-10-24T16:30:00,+10:30,ACDT +1988-03-19T16:30:00,+09:30,ACST +1988-10-29T16:30:00,+10:30,ACDT +1989-03-18T16:30:00,+09:30,ACST +1989-10-28T16:30:00,+10:30,ACDT +1990-03-03T16:30:00,+09:30,ACST +1990-10-27T16:30:00,+10:30,ACDT +1991-03-02T16:30:00,+09:30,ACST +1991-10-26T16:30:00,+10:30,ACDT +1992-02-29T16:30:00,+09:30,ACST +1992-10-24T16:30:00,+10:30,ACDT +1993-03-06T16:30:00,+09:30,ACST +1993-10-30T16:30:00,+10:30,ACDT +1994-03-05T16:30:00,+09:30,ACST +1994-10-29T16:30:00,+10:30,ACDT +1995-03-04T16:30:00,+09:30,ACST +1995-10-28T16:30:00,+10:30,ACDT +1996-03-30T16:30:00,+09:30,ACST +1996-10-26T16:30:00,+10:30,ACDT +1997-03-29T16:30:00,+09:30,ACST +1997-10-25T16:30:00,+10:30,ACDT +1998-03-28T16:30:00,+09:30,ACST +1998-10-24T16:30:00,+10:30,ACDT +1999-03-27T16:30:00,+09:30,ACST +1999-10-30T16:30:00,+10:30,ACDT +2000-03-25T16:30:00,+09:30,ACST +2000-10-28T16:30:00,+10:30,ACDT +2001-03-24T16:30:00,+09:30,ACST +2001-10-27T16:30:00,+10:30,ACDT +2002-03-30T16:30:00,+09:30,ACST +2002-10-26T16:30:00,+10:30,ACDT +2003-03-29T16:30:00,+09:30,ACST +2003-10-25T16:30:00,+10:30,ACDT +2004-03-27T16:30:00,+09:30,ACST +2004-10-30T16:30:00,+10:30,ACDT +2005-03-26T16:30:00,+09:30,ACST +2005-10-29T16:30:00,+10:30,ACDT +2006-04-01T16:30:00,+09:30,ACST +2006-10-28T16:30:00,+10:30,ACDT +2007-03-24T16:30:00,+09:30,ACST +2007-10-27T16:30:00,+10:30,ACDT +2008-04-05T16:30:00,+09:30,ACST +2008-10-04T16:30:00,+10:30,ACDT +2009-04-04T16:30:00,+09:30,ACST +2009-10-03T16:30:00,+10:30,ACDT +2010-04-03T16:30:00,+09:30,ACST +2010-10-02T16:30:00,+10:30,ACDT +2011-04-02T16:30:00,+09:30,ACST +2011-10-01T16:30:00,+10:30,ACDT +2012-03-31T16:30:00,+09:30,ACST +2012-10-06T16:30:00,+10:30,ACDT +2013-04-06T16:30:00,+09:30,ACST +2013-10-05T16:30:00,+10:30,ACDT +2014-04-05T16:30:00,+09:30,ACST +2014-10-04T16:30:00,+10:30,ACDT +2015-04-04T16:30:00,+09:30,ACST +2015-10-03T16:30:00,+10:30,ACDT +2016-04-02T16:30:00,+09:30,ACST +2016-10-01T16:30:00,+10:30,ACDT +2017-04-01T16:30:00,+09:30,ACST +2017-09-30T16:30:00,+10:30,ACDT +2018-03-31T16:30:00,+09:30,ACST +2018-10-06T16:30:00,+10:30,ACDT +2019-04-06T16:30:00,+09:30,ACST +2019-10-05T16:30:00,+10:30,ACDT +2020-04-04T16:30:00,+09:30,ACST +2020-10-03T16:30:00,+10:30,ACDT +2021-04-03T16:30:00,+09:30,ACST +2021-10-02T16:30:00,+10:30,ACDT +2022-04-02T16:30:00,+09:30,ACST +2022-10-01T16:30:00,+10:30,ACDT +2023-04-01T16:30:00,+09:30,ACST +2023-09-30T16:30:00,+10:30,ACDT +2024-04-06T16:30:00,+09:30,ACST +2024-10-05T16:30:00,+10:30,ACDT +2025-04-05T16:30:00,+09:30,ACST +2025-10-04T16:30:00,+10:30,ACDT +2026-04-04T16:30:00,+09:30,ACST +2026-10-03T16:30:00,+10:30,ACDT +2027-04-03T16:30:00,+09:30,ACST +2027-10-02T16:30:00,+10:30,ACDT +2028-04-01T16:30:00,+09:30,ACST +2028-09-30T16:30:00,+10:30,ACDT +2029-03-31T16:30:00,+09:30,ACST +2029-10-06T16:30:00,+10:30,ACDT +2030-04-06T16:30:00,+09:30,ACST +2030-10-05T16:30:00,+10:30,ACDT +2031-04-05T16:30:00,+09:30,ACST +2031-10-04T16:30:00,+10:30,ACDT +2032-04-03T16:30:00,+09:30,ACST +2032-10-02T16:30:00,+10:30,ACDT +2033-04-02T16:30:00,+09:30,ACST +2033-10-01T16:30:00,+10:30,ACDT +2034-04-01T16:30:00,+09:30,ACST +2034-09-30T16:30:00,+10:30,ACDT +2035-03-31T16:30:00,+09:30,ACST +2035-10-06T16:30:00,+10:30,ACDT +2036-04-05T16:30:00,+09:30,ACST +2036-10-04T16:30:00,+10:30,ACDT +2037-04-04T16:30:00,+09:30,ACST +2037-10-03T16:30:00,+10:30,ACDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/brazil-acre.txt b/desk/gub/lib/pytz/brazil-acre.txt new file mode 100644 index 0000000..78ee44c --- /dev/null +++ b/desk/gub/lib/pytz/brazil-acre.txt @@ -0,0 +1,32 @@ +Time,Offset,Name +1914-01-01T04:31:12,-05:00,-05 +1931-10-03T16:00:00,-04:00,-04 +1932-04-01T04:00:00,-05:00,-05 +1932-10-03T05:00:00,-04:00,-04 +1933-04-01T04:00:00,-05:00,-05 +1949-12-01T05:00:00,-04:00,-04 +1950-04-16T05:00:00,-05:00,-05 +1950-12-01T05:00:00,-04:00,-04 +1951-04-01T04:00:00,-05:00,-05 +1951-12-01T05:00:00,-04:00,-04 +1952-04-01T04:00:00,-05:00,-05 +1952-12-01T05:00:00,-04:00,-04 +1953-03-01T04:00:00,-05:00,-05 +1963-12-09T05:00:00,-04:00,-04 +1964-03-01T04:00:00,-05:00,-05 +1965-01-31T05:00:00,-04:00,-04 +1965-03-31T04:00:00,-05:00,-05 +1965-12-01T05:00:00,-04:00,-04 +1966-03-01T04:00:00,-05:00,-05 +1966-11-01T05:00:00,-04:00,-04 +1967-03-01T04:00:00,-05:00,-05 +1967-11-01T05:00:00,-04:00,-04 +1968-03-01T04:00:00,-05:00,-05 +1985-11-02T05:00:00,-04:00,-04 +1986-03-15T04:00:00,-05:00,-05 +1986-10-25T05:00:00,-04:00,-04 +1987-02-14T04:00:00,-05:00,-05 +1987-10-25T05:00:00,-04:00,-04 +1988-02-07T04:00:00,-05:00,-05 +2008-06-24T05:00:00,-04:00,-04 +2013-11-10T04:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/brazil-denoronha.txt b/desk/gub/lib/pytz/brazil-denoronha.txt new file mode 100644 index 0000000..5a829be --- /dev/null +++ b/desk/gub/lib/pytz/brazil-denoronha.txt @@ -0,0 +1,40 @@ +Time,Offset,Name +1914-01-01T02:09:40,-02:00,-02 +1931-10-03T13:00:00,-01:00,-01 +1932-04-01T01:00:00,-02:00,-02 +1932-10-03T02:00:00,-01:00,-01 +1933-04-01T01:00:00,-02:00,-02 +1949-12-01T02:00:00,-01:00,-01 +1950-04-16T02:00:00,-02:00,-02 +1950-12-01T02:00:00,-01:00,-01 +1951-04-01T01:00:00,-02:00,-02 +1951-12-01T02:00:00,-01:00,-01 +1952-04-01T01:00:00,-02:00,-02 +1952-12-01T02:00:00,-01:00,-01 +1953-03-01T01:00:00,-02:00,-02 +1963-12-09T02:00:00,-01:00,-01 +1964-03-01T01:00:00,-02:00,-02 +1965-01-31T02:00:00,-01:00,-01 +1965-03-31T01:00:00,-02:00,-02 +1965-12-01T02:00:00,-01:00,-01 +1966-03-01T01:00:00,-02:00,-02 +1966-11-01T02:00:00,-01:00,-01 +1967-03-01T01:00:00,-02:00,-02 +1967-11-01T02:00:00,-01:00,-01 +1968-03-01T01:00:00,-02:00,-02 +1985-11-02T02:00:00,-01:00,-01 +1986-03-15T01:00:00,-02:00,-02 +1986-10-25T02:00:00,-01:00,-01 +1987-02-14T01:00:00,-02:00,-02 +1987-10-25T02:00:00,-01:00,-01 +1988-02-07T01:00:00,-02:00,-02 +1988-10-16T02:00:00,-01:00,-01 +1989-01-29T01:00:00,-02:00,-02 +1989-10-15T02:00:00,-01:00,-01 +1990-02-11T01:00:00,-02:00,-02 +1999-10-03T02:00:00,-01:00,-01 +2000-02-27T01:00:00,-02:00,-02 +2000-10-08T02:00:00,-01:00,-01 +2000-10-15T01:00:00,-02:00,-02 +2001-10-14T02:00:00,-01:00,-01 +2002-02-17T01:00:00,-02:00,-02 \ No newline at end of file diff --git a/desk/gub/lib/pytz/brazil-east.txt b/desk/gub/lib/pytz/brazil-east.txt new file mode 100644 index 0000000..9a320e4 --- /dev/null +++ b/desk/gub/lib/pytz/brazil-east.txt @@ -0,0 +1,92 @@ +Time,Offset,Name +1914-01-01T03:06:28,-03:00,-03 +1931-10-03T14:00:00,-02:00,-02 +1932-04-01T02:00:00,-03:00,-03 +1932-10-03T03:00:00,-02:00,-02 +1933-04-01T02:00:00,-03:00,-03 +1949-12-01T03:00:00,-02:00,-02 +1950-04-16T03:00:00,-03:00,-03 +1950-12-01T03:00:00,-02:00,-02 +1951-04-01T02:00:00,-03:00,-03 +1951-12-01T03:00:00,-02:00,-02 +1952-04-01T02:00:00,-03:00,-03 +1952-12-01T03:00:00,-02:00,-02 +1953-03-01T02:00:00,-03:00,-03 +1963-10-23T03:00:00,-02:00,-02 +1964-03-01T02:00:00,-03:00,-03 +1965-01-31T03:00:00,-02:00,-02 +1965-03-31T02:00:00,-03:00,-03 +1965-12-01T03:00:00,-02:00,-02 +1966-03-01T02:00:00,-03:00,-03 +1966-11-01T03:00:00,-02:00,-02 +1967-03-01T02:00:00,-03:00,-03 +1967-11-01T03:00:00,-02:00,-02 +1968-03-01T02:00:00,-03:00,-03 +1985-11-02T03:00:00,-02:00,-02 +1986-03-15T02:00:00,-03:00,-03 +1986-10-25T03:00:00,-02:00,-02 +1987-02-14T02:00:00,-03:00,-03 +1987-10-25T03:00:00,-02:00,-02 +1988-02-07T02:00:00,-03:00,-03 +1988-10-16T03:00:00,-02:00,-02 +1989-01-29T02:00:00,-03:00,-03 +1989-10-15T03:00:00,-02:00,-02 +1990-02-11T02:00:00,-03:00,-03 +1990-10-21T03:00:00,-02:00,-02 +1991-02-17T02:00:00,-03:00,-03 +1991-10-20T03:00:00,-02:00,-02 +1992-02-09T02:00:00,-03:00,-03 +1992-10-25T03:00:00,-02:00,-02 +1993-01-31T02:00:00,-03:00,-03 +1993-10-17T03:00:00,-02:00,-02 +1994-02-20T02:00:00,-03:00,-03 +1994-10-16T03:00:00,-02:00,-02 +1995-02-19T02:00:00,-03:00,-03 +1995-10-15T03:00:00,-02:00,-02 +1996-02-11T02:00:00,-03:00,-03 +1996-10-06T03:00:00,-02:00,-02 +1997-02-16T02:00:00,-03:00,-03 +1997-10-06T03:00:00,-02:00,-02 +1998-03-01T02:00:00,-03:00,-03 +1998-10-11T03:00:00,-02:00,-02 +1999-02-21T02:00:00,-03:00,-03 +1999-10-03T03:00:00,-02:00,-02 +2000-02-27T02:00:00,-03:00,-03 +2000-10-08T03:00:00,-02:00,-02 +2001-02-18T02:00:00,-03:00,-03 +2001-10-14T03:00:00,-02:00,-02 +2002-02-17T02:00:00,-03:00,-03 +2002-11-03T03:00:00,-02:00,-02 +2003-02-16T02:00:00,-03:00,-03 +2003-10-19T03:00:00,-02:00,-02 +2004-02-15T02:00:00,-03:00,-03 +2004-11-02T03:00:00,-02:00,-02 +2005-02-20T02:00:00,-03:00,-03 +2005-10-16T03:00:00,-02:00,-02 +2006-02-19T02:00:00,-03:00,-03 +2006-11-05T03:00:00,-02:00,-02 +2007-02-25T02:00:00,-03:00,-03 +2007-10-14T03:00:00,-02:00,-02 +2008-02-17T02:00:00,-03:00,-03 +2008-10-19T03:00:00,-02:00,-02 +2009-02-15T02:00:00,-03:00,-03 +2009-10-18T03:00:00,-02:00,-02 +2010-02-21T02:00:00,-03:00,-03 +2010-10-17T03:00:00,-02:00,-02 +2011-02-20T02:00:00,-03:00,-03 +2011-10-16T03:00:00,-02:00,-02 +2012-02-26T02:00:00,-03:00,-03 +2012-10-21T03:00:00,-02:00,-02 +2013-02-17T02:00:00,-03:00,-03 +2013-10-20T03:00:00,-02:00,-02 +2014-02-16T02:00:00,-03:00,-03 +2014-10-19T03:00:00,-02:00,-02 +2015-02-22T02:00:00,-03:00,-03 +2015-10-18T03:00:00,-02:00,-02 +2016-02-21T02:00:00,-03:00,-03 +2016-10-16T03:00:00,-02:00,-02 +2017-02-19T02:00:00,-03:00,-03 +2017-10-15T03:00:00,-02:00,-02 +2018-02-18T02:00:00,-03:00,-03 +2018-11-04T03:00:00,-02:00,-02 +2019-02-17T02:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/brazil-west.txt b/desk/gub/lib/pytz/brazil-west.txt new file mode 100644 index 0000000..93c19a7 --- /dev/null +++ b/desk/gub/lib/pytz/brazil-west.txt @@ -0,0 +1,32 @@ +Time,Offset,Name +1914-01-01T04:00:04,-04:00,-04 +1931-10-03T15:00:00,-03:00,-03 +1932-04-01T03:00:00,-04:00,-04 +1932-10-03T04:00:00,-03:00,-03 +1933-04-01T03:00:00,-04:00,-04 +1949-12-01T04:00:00,-03:00,-03 +1950-04-16T04:00:00,-04:00,-04 +1950-12-01T04:00:00,-03:00,-03 +1951-04-01T03:00:00,-04:00,-04 +1951-12-01T04:00:00,-03:00,-03 +1952-04-01T03:00:00,-04:00,-04 +1952-12-01T04:00:00,-03:00,-03 +1953-03-01T03:00:00,-04:00,-04 +1963-12-09T04:00:00,-03:00,-03 +1964-03-01T03:00:00,-04:00,-04 +1965-01-31T04:00:00,-03:00,-03 +1965-03-31T03:00:00,-04:00,-04 +1965-12-01T04:00:00,-03:00,-03 +1966-03-01T03:00:00,-04:00,-04 +1966-11-01T04:00:00,-03:00,-03 +1967-03-01T03:00:00,-04:00,-04 +1967-11-01T04:00:00,-03:00,-03 +1968-03-01T03:00:00,-04:00,-04 +1985-11-02T04:00:00,-03:00,-03 +1986-03-15T03:00:00,-04:00,-04 +1986-10-25T04:00:00,-03:00,-03 +1987-02-14T03:00:00,-04:00,-04 +1987-10-25T04:00:00,-03:00,-03 +1988-02-07T03:00:00,-04:00,-04 +1993-10-17T04:00:00,-03:00,-03 +1994-02-20T03:00:00,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/canada-atlantic.txt b/desk/gub/lib/pytz/canada-atlantic.txt new file mode 100644 index 0000000..e3a6cca --- /dev/null +++ b/desk/gub/lib/pytz/canada-atlantic.txt @@ -0,0 +1,229 @@ +Time,Offset,Name +1902-06-15T04:14:24,-04:00,AST +1916-04-01T04:00:00,-03:00,ADT +1916-10-01T03:00:00,-04:00,AST +1918-04-14T06:00:00,-03:00,ADT +1918-10-27T05:00:00,-04:00,AST +1920-05-09T04:00:00,-03:00,ADT +1920-08-29T03:00:00,-04:00,AST +1921-05-06T04:00:00,-03:00,ADT +1921-09-05T03:00:00,-04:00,AST +1922-04-30T04:00:00,-03:00,ADT +1922-09-05T03:00:00,-04:00,AST +1923-05-06T04:00:00,-03:00,ADT +1923-09-04T03:00:00,-04:00,AST +1924-05-04T04:00:00,-03:00,ADT +1924-09-15T03:00:00,-04:00,AST +1925-05-03T04:00:00,-03:00,ADT +1925-09-28T03:00:00,-04:00,AST +1926-05-16T04:00:00,-03:00,ADT +1926-09-13T03:00:00,-04:00,AST +1927-05-01T04:00:00,-03:00,ADT +1927-09-26T03:00:00,-04:00,AST +1928-05-13T04:00:00,-03:00,ADT +1928-09-09T03:00:00,-04:00,AST +1929-05-12T04:00:00,-03:00,ADT +1929-09-03T03:00:00,-04:00,AST +1930-05-11T04:00:00,-03:00,ADT +1930-09-15T03:00:00,-04:00,AST +1931-05-10T04:00:00,-03:00,ADT +1931-09-28T03:00:00,-04:00,AST +1932-05-01T04:00:00,-03:00,ADT +1932-09-26T03:00:00,-04:00,AST +1933-04-30T04:00:00,-03:00,ADT +1933-10-02T03:00:00,-04:00,AST +1934-05-20T04:00:00,-03:00,ADT +1934-09-16T03:00:00,-04:00,AST +1935-06-02T04:00:00,-03:00,ADT +1935-09-30T03:00:00,-04:00,AST +1936-06-01T04:00:00,-03:00,ADT +1936-09-14T03:00:00,-04:00,AST +1937-05-02T04:00:00,-03:00,ADT +1937-09-27T03:00:00,-04:00,AST +1938-05-01T04:00:00,-03:00,ADT +1938-09-26T03:00:00,-04:00,AST +1939-05-28T04:00:00,-03:00,ADT +1939-09-25T03:00:00,-04:00,AST +1940-05-05T04:00:00,-03:00,ADT +1940-09-30T03:00:00,-04:00,AST +1941-05-04T04:00:00,-03:00,ADT +1941-09-29T03:00:00,-04:00,AST +1942-02-09T06:00:00,-03:00,AWT +1945-08-14T23:00:00,-03:00,APT +1945-09-30T05:00:00,-04:00,AST +1946-04-28T06:00:00,-03:00,ADT +1946-09-29T05:00:00,-04:00,AST +1947-04-27T06:00:00,-03:00,ADT +1947-09-28T05:00:00,-04:00,AST +1948-04-25T06:00:00,-03:00,ADT +1948-09-26T05:00:00,-04:00,AST +1949-04-24T06:00:00,-03:00,ADT +1949-09-25T05:00:00,-04:00,AST +1951-04-29T06:00:00,-03:00,ADT +1951-09-30T05:00:00,-04:00,AST +1952-04-27T06:00:00,-03:00,ADT +1952-09-28T05:00:00,-04:00,AST +1953-04-26T06:00:00,-03:00,ADT +1953-09-27T05:00:00,-04:00,AST +1954-04-25T06:00:00,-03:00,ADT +1954-09-26T05:00:00,-04:00,AST +1956-04-29T06:00:00,-03:00,ADT +1956-09-30T05:00:00,-04:00,AST +1957-04-28T06:00:00,-03:00,ADT +1957-09-29T05:00:00,-04:00,AST +1958-04-27T06:00:00,-03:00,ADT +1958-09-28T05:00:00,-04:00,AST +1959-04-26T06:00:00,-03:00,ADT +1959-09-27T05:00:00,-04:00,AST +1962-04-29T06:00:00,-03:00,ADT +1962-10-28T05:00:00,-04:00,AST +1963-04-28T06:00:00,-03:00,ADT +1963-10-27T05:00:00,-04:00,AST +1964-04-26T06:00:00,-03:00,ADT +1964-10-25T05:00:00,-04:00,AST +1965-04-25T06:00:00,-03:00,ADT +1965-10-31T05:00:00,-04:00,AST +1966-04-24T06:00:00,-03:00,ADT +1966-10-30T05:00:00,-04:00,AST +1967-04-30T06:00:00,-03:00,ADT +1967-10-29T05:00:00,-04:00,AST +1968-04-28T06:00:00,-03:00,ADT +1968-10-27T05:00:00,-04:00,AST +1969-04-27T06:00:00,-03:00,ADT +1969-10-26T05:00:00,-04:00,AST +1970-04-26T06:00:00,-03:00,ADT +1970-10-25T05:00:00,-04:00,AST +1971-04-25T06:00:00,-03:00,ADT +1971-10-31T05:00:00,-04:00,AST +1972-04-30T06:00:00,-03:00,ADT +1972-10-29T05:00:00,-04:00,AST +1973-04-29T06:00:00,-03:00,ADT +1973-10-28T05:00:00,-04:00,AST +1974-04-28T06:00:00,-03:00,ADT +1974-10-27T05:00:00,-04:00,AST +1975-04-27T06:00:00,-03:00,ADT +1975-10-26T05:00:00,-04:00,AST +1976-04-25T06:00:00,-03:00,ADT +1976-10-31T05:00:00,-04:00,AST +1977-04-24T06:00:00,-03:00,ADT +1977-10-30T05:00:00,-04:00,AST +1978-04-30T06:00:00,-03:00,ADT +1978-10-29T05:00:00,-04:00,AST +1979-04-29T06:00:00,-03:00,ADT +1979-10-28T05:00:00,-04:00,AST +1980-04-27T06:00:00,-03:00,ADT +1980-10-26T05:00:00,-04:00,AST +1981-04-26T06:00:00,-03:00,ADT +1981-10-25T05:00:00,-04:00,AST +1982-04-25T06:00:00,-03:00,ADT +1982-10-31T05:00:00,-04:00,AST +1983-04-24T06:00:00,-03:00,ADT +1983-10-30T05:00:00,-04:00,AST +1984-04-29T06:00:00,-03:00,ADT +1984-10-28T05:00:00,-04:00,AST +1985-04-28T06:00:00,-03:00,ADT +1985-10-27T05:00:00,-04:00,AST +1986-04-27T06:00:00,-03:00,ADT +1986-10-26T05:00:00,-04:00,AST +1987-04-05T06:00:00,-03:00,ADT +1987-10-25T05:00:00,-04:00,AST +1988-04-03T06:00:00,-03:00,ADT +1988-10-30T05:00:00,-04:00,AST +1989-04-02T06:00:00,-03:00,ADT +1989-10-29T05:00:00,-04:00,AST +1990-04-01T06:00:00,-03:00,ADT +1990-10-28T05:00:00,-04:00,AST +1991-04-07T06:00:00,-03:00,ADT +1991-10-27T05:00:00,-04:00,AST +1992-04-05T06:00:00,-03:00,ADT +1992-10-25T05:00:00,-04:00,AST +1993-04-04T06:00:00,-03:00,ADT +1993-10-31T05:00:00,-04:00,AST +1994-04-03T06:00:00,-03:00,ADT +1994-10-30T05:00:00,-04:00,AST +1995-04-02T06:00:00,-03:00,ADT +1995-10-29T05:00:00,-04:00,AST +1996-04-07T06:00:00,-03:00,ADT +1996-10-27T05:00:00,-04:00,AST +1997-04-06T06:00:00,-03:00,ADT +1997-10-26T05:00:00,-04:00,AST +1998-04-05T06:00:00,-03:00,ADT +1998-10-25T05:00:00,-04:00,AST +1999-04-04T06:00:00,-03:00,ADT +1999-10-31T05:00:00,-04:00,AST +2000-04-02T06:00:00,-03:00,ADT +2000-10-29T05:00:00,-04:00,AST +2001-04-01T06:00:00,-03:00,ADT +2001-10-28T05:00:00,-04:00,AST +2002-04-07T06:00:00,-03:00,ADT +2002-10-27T05:00:00,-04:00,AST +2003-04-06T06:00:00,-03:00,ADT +2003-10-26T05:00:00,-04:00,AST +2004-04-04T06:00:00,-03:00,ADT +2004-10-31T05:00:00,-04:00,AST +2005-04-03T06:00:00,-03:00,ADT +2005-10-30T05:00:00,-04:00,AST +2006-04-02T06:00:00,-03:00,ADT +2006-10-29T05:00:00,-04:00,AST +2007-03-11T06:00:00,-03:00,ADT +2007-11-04T05:00:00,-04:00,AST +2008-03-09T06:00:00,-03:00,ADT +2008-11-02T05:00:00,-04:00,AST +2009-03-08T06:00:00,-03:00,ADT +2009-11-01T05:00:00,-04:00,AST +2010-03-14T06:00:00,-03:00,ADT +2010-11-07T05:00:00,-04:00,AST +2011-03-13T06:00:00,-03:00,ADT +2011-11-06T05:00:00,-04:00,AST +2012-03-11T06:00:00,-03:00,ADT +2012-11-04T05:00:00,-04:00,AST +2013-03-10T06:00:00,-03:00,ADT +2013-11-03T05:00:00,-04:00,AST +2014-03-09T06:00:00,-03:00,ADT +2014-11-02T05:00:00,-04:00,AST +2015-03-08T06:00:00,-03:00,ADT +2015-11-01T05:00:00,-04:00,AST +2016-03-13T06:00:00,-03:00,ADT +2016-11-06T05:00:00,-04:00,AST +2017-03-12T06:00:00,-03:00,ADT +2017-11-05T05:00:00,-04:00,AST +2018-03-11T06:00:00,-03:00,ADT +2018-11-04T05:00:00,-04:00,AST +2019-03-10T06:00:00,-03:00,ADT +2019-11-03T05:00:00,-04:00,AST +2020-03-08T06:00:00,-03:00,ADT +2020-11-01T05:00:00,-04:00,AST +2021-03-14T06:00:00,-03:00,ADT +2021-11-07T05:00:00,-04:00,AST +2022-03-13T06:00:00,-03:00,ADT +2022-11-06T05:00:00,-04:00,AST +2023-03-12T06:00:00,-03:00,ADT +2023-11-05T05:00:00,-04:00,AST +2024-03-10T06:00:00,-03:00,ADT +2024-11-03T05:00:00,-04:00,AST +2025-03-09T06:00:00,-03:00,ADT +2025-11-02T05:00:00,-04:00,AST +2026-03-08T06:00:00,-03:00,ADT +2026-11-01T05:00:00,-04:00,AST +2027-03-14T06:00:00,-03:00,ADT +2027-11-07T05:00:00,-04:00,AST +2028-03-12T06:00:00,-03:00,ADT +2028-11-05T05:00:00,-04:00,AST +2029-03-11T06:00:00,-03:00,ADT +2029-11-04T05:00:00,-04:00,AST +2030-03-10T06:00:00,-03:00,ADT +2030-11-03T05:00:00,-04:00,AST +2031-03-09T06:00:00,-03:00,ADT +2031-11-02T05:00:00,-04:00,AST +2032-03-14T06:00:00,-03:00,ADT +2032-11-07T05:00:00,-04:00,AST +2033-03-13T06:00:00,-03:00,ADT +2033-11-06T05:00:00,-04:00,AST +2034-03-12T06:00:00,-03:00,ADT +2034-11-05T05:00:00,-04:00,AST +2035-03-11T06:00:00,-03:00,ADT +2035-11-04T05:00:00,-04:00,AST +2036-03-09T06:00:00,-03:00,ADT +2036-11-02T05:00:00,-04:00,AST +2037-03-08T06:00:00,-03:00,ADT +2037-11-01T05:00:00,-04:00,AST \ No newline at end of file diff --git a/desk/gub/lib/pytz/canada-central.txt b/desk/gub/lib/pytz/canada-central.txt new file mode 100644 index 0000000..9793b6c --- /dev/null +++ b/desk/gub/lib/pytz/canada-central.txt @@ -0,0 +1,187 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1916-04-23T06:00:00,-05:00,CDT +1916-09-17T05:00:00,-06:00,CST +1918-04-14T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1937-05-16T08:00:00,-05:00,CDT +1937-09-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-05-12T08:00:00,-05:00,CDT +1946-10-13T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-05-01T08:00:00,-05:00,CDT +1950-09-30T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-09-25T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-09-30T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-09-25T07:00:00,-06:00,CST +1963-04-28T08:00:00,-05:00,CDT +1963-09-22T07:00:00,-06:00,CST +1966-04-24T08:00:00,-05:00,CDT +1966-10-30T08:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T08:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T08:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T08:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T08:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T08:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T08:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T08:00:00,-06:00,CST +1974-04-28T08:00:00,-05:00,CDT +1974-10-27T08:00:00,-06:00,CST +1975-04-27T08:00:00,-05:00,CDT +1975-10-26T08:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T08:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T08:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T08:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T08:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T08:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T08:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T08:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T08:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T08:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T08:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T08:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T08:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T08:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T08:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T08:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T08:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T08:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T08:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T08:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T08:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T08:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T08:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T08:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T08:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T08:00:00,-06:00,CST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T08:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T08:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T08:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T08:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T08:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/canada-eastern.txt b/desk/gub/lib/pytz/canada-eastern.txt new file mode 100644 index 0000000..4379fb8 --- /dev/null +++ b/desk/gub/lib/pytz/canada-eastern.txt @@ -0,0 +1,234 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1918-04-14T07:00:00,-04:00,EDT +1918-10-27T06:00:00,-05:00,EST +1919-03-31T04:30:00,-04:00,EDT +1919-10-26T04:00:00,-05:00,EST +1920-05-02T07:00:00,-04:00,EDT +1920-09-26T04:00:00,-05:00,EST +1921-05-15T07:00:00,-04:00,EDT +1921-09-15T06:00:00,-05:00,EST +1922-05-14T07:00:00,-04:00,EDT +1922-09-17T06:00:00,-05:00,EST +1923-05-13T07:00:00,-04:00,EDT +1923-09-16T06:00:00,-05:00,EST +1924-05-04T07:00:00,-04:00,EDT +1924-09-21T06:00:00,-05:00,EST +1925-05-03T07:00:00,-04:00,EDT +1925-09-20T06:00:00,-05:00,EST +1926-05-02T07:00:00,-04:00,EDT +1926-09-19T06:00:00,-05:00,EST +1927-05-01T07:00:00,-04:00,EDT +1927-09-25T06:00:00,-05:00,EST +1928-04-29T07:00:00,-04:00,EDT +1928-09-30T06:00:00,-05:00,EST +1929-04-28T07:00:00,-04:00,EDT +1929-09-29T06:00:00,-05:00,EST +1930-04-27T07:00:00,-04:00,EDT +1930-09-28T06:00:00,-05:00,EST +1931-04-26T07:00:00,-04:00,EDT +1931-09-27T06:00:00,-05:00,EST +1932-05-01T07:00:00,-04:00,EDT +1932-09-25T06:00:00,-05:00,EST +1933-04-30T07:00:00,-04:00,EDT +1933-10-01T06:00:00,-05:00,EST +1934-04-29T07:00:00,-04:00,EDT +1934-09-30T06:00:00,-05:00,EST +1935-04-28T07:00:00,-04:00,EDT +1935-09-29T06:00:00,-05:00,EST +1936-04-26T07:00:00,-04:00,EDT +1936-09-27T06:00:00,-05:00,EST +1937-04-25T07:00:00,-04:00,EDT +1937-09-26T06:00:00,-05:00,EST +1938-04-24T07:00:00,-04:00,EDT +1938-09-25T06:00:00,-05:00,EST +1939-04-30T07:00:00,-04:00,EDT +1939-09-24T06:00:00,-05:00,EST +1940-04-28T07:00:00,-04:00,EDT +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1946-04-28T07:00:00,-04:00,EDT +1946-09-29T06:00:00,-05:00,EST +1947-04-27T07:00:00,-04:00,EDT +1947-09-28T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1949-04-24T07:00:00,-04:00,EDT +1949-11-27T06:00:00,-05:00,EST +1950-04-30T07:00:00,-04:00,EDT +1950-11-26T06:00:00,-05:00,EST +1951-04-29T07:00:00,-04:00,EDT +1951-09-30T06:00:00,-05:00,EST +1952-04-27T07:00:00,-04:00,EDT +1952-09-28T06:00:00,-05:00,EST +1953-04-26T07:00:00,-04:00,EDT +1953-09-27T06:00:00,-05:00,EST +1954-04-25T07:00:00,-04:00,EDT +1954-09-26T06:00:00,-05:00,EST +1955-04-24T07:00:00,-04:00,EDT +1955-09-25T06:00:00,-05:00,EST +1956-04-29T07:00:00,-04:00,EDT +1956-09-30T06:00:00,-05:00,EST +1957-04-28T07:00:00,-04:00,EDT +1957-10-27T06:00:00,-05:00,EST +1958-04-27T07:00:00,-04:00,EDT +1958-10-26T06:00:00,-05:00,EST +1959-04-26T07:00:00,-04:00,EDT +1959-10-25T06:00:00,-05:00,EST +1960-04-24T07:00:00,-04:00,EDT +1960-10-30T06:00:00,-05:00,EST +1961-04-30T07:00:00,-04:00,EDT +1961-10-29T06:00:00,-05:00,EST +1962-04-29T07:00:00,-04:00,EDT +1962-10-28T06:00:00,-05:00,EST +1963-04-28T07:00:00,-04:00,EDT +1963-10-27T06:00:00,-05:00,EST +1964-04-26T07:00:00,-04:00,EDT +1964-10-25T06:00:00,-05:00,EST +1965-04-25T07:00:00,-04:00,EDT +1965-10-31T06:00:00,-05:00,EST +1966-04-24T07:00:00,-04:00,EDT +1966-10-30T06:00:00,-05:00,EST +1967-04-30T07:00:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-04-28T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/canada-mountain.txt b/desk/gub/lib/pytz/canada-mountain.txt new file mode 100644 index 0000000..799f7ce --- /dev/null +++ b/desk/gub/lib/pytz/canada-mountain.txt @@ -0,0 +1,151 @@ +Time,Offset,Name +1906-09-01T07:33:52,-07:00,MST +1918-04-14T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-04-13T09:00:00,-06:00,MDT +1919-05-27T08:00:00,-07:00,MST +1920-04-25T09:00:00,-06:00,MDT +1920-10-31T08:00:00,-07:00,MST +1921-04-24T09:00:00,-06:00,MDT +1921-09-25T08:00:00,-07:00,MST +1922-04-30T09:00:00,-06:00,MDT +1922-09-24T08:00:00,-07:00,MST +1923-04-29T09:00:00,-06:00,MDT +1923-09-30T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1947-04-27T09:00:00,-06:00,MDT +1947-09-28T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-04-28T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-04-27T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/canada-newfoundland.txt b/desk/gub/lib/pytz/canada-newfoundland.txt new file mode 100644 index 0000000..8625466 --- /dev/null +++ b/desk/gub/lib/pytz/canada-newfoundland.txt @@ -0,0 +1,240 @@ +Time,Offset,Name +1901-12-13T20:45:52,-04:29,NST +1917-04-08T05:30:52,-03:29,NDT +1917-09-17T04:30:52,-04:29,NST +1918-04-14T05:30:52,-03:29,NDT +1918-10-27T04:30:52,-04:29,NST +1919-05-06T02:30:52,-03:29,NDT +1919-08-13T01:30:52,-04:29,NST +1920-05-03T02:30:52,-03:29,NDT +1920-11-01T01:30:52,-04:29,NST +1921-05-02T02:30:52,-03:29,NDT +1921-10-31T01:30:52,-04:29,NST +1922-05-08T02:30:52,-03:29,NDT +1922-10-30T01:30:52,-04:29,NST +1923-05-07T02:30:52,-03:29,NDT +1923-10-29T01:30:52,-04:29,NST +1924-05-05T02:30:52,-03:29,NDT +1924-10-27T01:30:52,-04:29,NST +1925-05-04T02:30:52,-03:29,NDT +1925-10-26T01:30:52,-04:29,NST +1926-05-03T02:30:52,-03:29,NDT +1926-11-01T01:30:52,-04:29,NST +1927-05-02T02:30:52,-03:29,NDT +1927-10-31T01:30:52,-04:29,NST +1928-05-07T02:30:52,-03:29,NDT +1928-10-29T01:30:52,-04:29,NST +1929-05-06T02:30:52,-03:29,NDT +1929-10-28T01:30:52,-04:29,NST +1930-05-05T02:30:52,-03:29,NDT +1930-10-27T01:30:52,-04:29,NST +1931-05-04T02:30:52,-03:29,NDT +1931-10-26T01:30:52,-04:29,NST +1932-05-02T02:30:52,-03:29,NDT +1932-10-31T01:30:52,-04:29,NST +1933-05-08T02:30:52,-03:29,NDT +1933-10-30T01:30:52,-04:29,NST +1934-05-07T02:30:52,-03:29,NDT +1934-10-29T01:30:52,-04:29,NST +1935-03-30T03:30:52,-04:30,NST +1935-05-06T02:30:00,-03:30,NDT +1935-10-28T01:30:00,-04:30,NST +1936-05-11T03:30:00,-03:30,NDT +1936-10-05T02:30:00,-04:30,NST +1937-05-10T03:30:00,-03:30,NDT +1937-10-04T02:30:00,-04:30,NST +1938-05-09T03:30:00,-03:30,NDT +1938-10-03T02:30:00,-04:30,NST +1939-05-15T03:30:00,-03:30,NDT +1939-10-02T02:30:00,-04:30,NST +1940-05-13T03:30:00,-03:30,NDT +1940-10-07T02:30:00,-04:30,NST +1941-05-12T03:30:00,-03:30,NDT +1941-10-06T02:30:00,-04:30,NST +1942-05-11T03:30:00,-03:30,NWT +1945-08-14T23:00:00,-03:30,NPT +1945-09-30T04:30:00,-04:30,NST +1946-05-12T05:30:00,-03:30,NDT +1946-10-06T04:30:00,-04:30,NST +1947-05-11T05:30:00,-03:30,NDT +1947-10-05T04:30:00,-04:30,NST +1948-05-09T05:30:00,-03:30,NDT +1948-10-03T04:30:00,-04:30,NST +1949-05-08T05:30:00,-03:30,NDT +1949-10-02T04:30:00,-04:30,NST +1950-05-14T05:30:00,-03:30,NDT +1950-10-08T04:30:00,-04:30,NST +1951-04-29T05:30:00,-03:30,NDT +1951-09-30T04:30:00,-04:30,NST +1952-04-27T05:30:00,-03:30,NDT +1952-09-28T04:30:00,-04:30,NST +1953-04-26T05:30:00,-03:30,NDT +1953-09-27T04:30:00,-04:30,NST +1954-04-25T05:30:00,-03:30,NDT +1954-09-26T04:30:00,-04:30,NST +1955-04-24T05:30:00,-03:30,NDT +1955-09-25T04:30:00,-04:30,NST +1956-04-29T05:30:00,-03:30,NDT +1956-09-30T04:30:00,-04:30,NST +1957-04-28T05:30:00,-03:30,NDT +1957-09-29T04:30:00,-04:30,NST +1958-04-27T05:30:00,-03:30,NDT +1958-09-28T04:30:00,-04:30,NST +1959-04-26T05:30:00,-03:30,NDT +1959-09-27T04:30:00,-04:30,NST +1960-04-24T05:30:00,-03:30,NDT +1960-10-30T04:30:00,-04:30,NST +1961-04-30T05:30:00,-03:30,NDT +1961-10-29T04:30:00,-04:30,NST +1962-04-29T05:30:00,-03:30,NDT +1962-10-28T04:30:00,-04:30,NST +1963-04-28T05:30:00,-03:30,NDT +1963-10-27T04:30:00,-04:30,NST +1964-04-26T05:30:00,-03:30,NDT +1964-10-25T04:30:00,-04:30,NST +1965-04-25T05:30:00,-03:30,NDT +1965-10-31T04:30:00,-04:30,NST +1966-04-24T05:30:00,-03:30,NDT +1966-10-30T04:30:00,-04:30,NST +1967-04-30T05:30:00,-03:30,NDT +1967-10-29T04:30:00,-04:30,NST +1968-04-28T05:30:00,-03:30,NDT +1968-10-27T04:30:00,-04:30,NST +1969-04-27T05:30:00,-03:30,NDT +1969-10-26T04:30:00,-04:30,NST +1970-04-26T05:30:00,-03:30,NDT +1970-10-25T04:30:00,-04:30,NST +1971-04-25T05:30:00,-03:30,NDT +1971-10-31T04:30:00,-04:30,NST +1972-04-30T05:30:00,-03:30,NDT +1972-10-29T04:30:00,-04:30,NST +1973-04-29T05:30:00,-03:30,NDT +1973-10-28T04:30:00,-04:30,NST +1974-04-28T05:30:00,-03:30,NDT +1974-10-27T04:30:00,-04:30,NST +1975-04-27T05:30:00,-03:30,NDT +1975-10-26T04:30:00,-04:30,NST +1976-04-25T05:30:00,-03:30,NDT +1976-10-31T04:30:00,-04:30,NST +1977-04-24T05:30:00,-03:30,NDT +1977-10-30T04:30:00,-04:30,NST +1978-04-30T05:30:00,-03:30,NDT +1978-10-29T04:30:00,-04:30,NST +1979-04-29T05:30:00,-03:30,NDT +1979-10-28T04:30:00,-04:30,NST +1980-04-27T05:30:00,-03:30,NDT +1980-10-26T04:30:00,-04:30,NST +1981-04-26T05:30:00,-03:30,NDT +1981-10-25T04:30:00,-04:30,NST +1982-04-25T05:30:00,-03:30,NDT +1982-10-31T04:30:00,-04:30,NST +1983-04-24T05:30:00,-03:30,NDT +1983-10-30T04:30:00,-04:30,NST +1984-04-29T05:30:00,-03:30,NDT +1984-10-28T04:30:00,-04:30,NST +1985-04-28T05:30:00,-03:30,NDT +1985-10-27T04:30:00,-04:30,NST +1986-04-27T05:30:00,-03:30,NDT +1986-10-26T04:30:00,-04:30,NST +1987-04-05T03:31:00,-03:30,NDT +1987-10-25T02:31:00,-04:30,NST +1988-04-03T03:31:00,-02:30,NDDT +1988-10-30T01:31:00,-04:30,NST +1989-04-02T03:31:00,-03:30,NDT +1989-10-29T02:31:00,-04:30,NST +1990-04-01T03:31:00,-03:30,NDT +1990-10-28T02:31:00,-04:30,NST +1991-04-07T03:31:00,-03:30,NDT +1991-10-27T02:31:00,-04:30,NST +1992-04-05T03:31:00,-03:30,NDT +1992-10-25T02:31:00,-04:30,NST +1993-04-04T03:31:00,-03:30,NDT +1993-10-31T02:31:00,-04:30,NST +1994-04-03T03:31:00,-03:30,NDT +1994-10-30T02:31:00,-04:30,NST +1995-04-02T03:31:00,-03:30,NDT +1995-10-29T02:31:00,-04:30,NST +1996-04-07T03:31:00,-03:30,NDT +1996-10-27T02:31:00,-04:30,NST +1997-04-06T03:31:00,-03:30,NDT +1997-10-26T02:31:00,-04:30,NST +1998-04-05T03:31:00,-03:30,NDT +1998-10-25T02:31:00,-04:30,NST +1999-04-04T03:31:00,-03:30,NDT +1999-10-31T02:31:00,-04:30,NST +2000-04-02T03:31:00,-03:30,NDT +2000-10-29T02:31:00,-04:30,NST +2001-04-01T03:31:00,-03:30,NDT +2001-10-28T02:31:00,-04:30,NST +2002-04-07T03:31:00,-03:30,NDT +2002-10-27T02:31:00,-04:30,NST +2003-04-06T03:31:00,-03:30,NDT +2003-10-26T02:31:00,-04:30,NST +2004-04-04T03:31:00,-03:30,NDT +2004-10-31T02:31:00,-04:30,NST +2005-04-03T03:31:00,-03:30,NDT +2005-10-30T02:31:00,-04:30,NST +2006-04-02T03:31:00,-03:30,NDT +2006-10-29T02:31:00,-04:30,NST +2007-03-11T03:31:00,-03:30,NDT +2007-11-04T02:31:00,-04:30,NST +2008-03-09T03:31:00,-03:30,NDT +2008-11-02T02:31:00,-04:30,NST +2009-03-08T03:31:00,-03:30,NDT +2009-11-01T02:31:00,-04:30,NST +2010-03-14T03:31:00,-03:30,NDT +2010-11-07T02:31:00,-04:30,NST +2011-03-13T03:31:00,-03:30,NDT +2011-11-06T04:30:00,-04:30,NST +2012-03-11T05:30:00,-03:30,NDT +2012-11-04T04:30:00,-04:30,NST +2013-03-10T05:30:00,-03:30,NDT +2013-11-03T04:30:00,-04:30,NST +2014-03-09T05:30:00,-03:30,NDT +2014-11-02T04:30:00,-04:30,NST +2015-03-08T05:30:00,-03:30,NDT +2015-11-01T04:30:00,-04:30,NST +2016-03-13T05:30:00,-03:30,NDT +2016-11-06T04:30:00,-04:30,NST +2017-03-12T05:30:00,-03:30,NDT +2017-11-05T04:30:00,-04:30,NST +2018-03-11T05:30:00,-03:30,NDT +2018-11-04T04:30:00,-04:30,NST +2019-03-10T05:30:00,-03:30,NDT +2019-11-03T04:30:00,-04:30,NST +2020-03-08T05:30:00,-03:30,NDT +2020-11-01T04:30:00,-04:30,NST +2021-03-14T05:30:00,-03:30,NDT +2021-11-07T04:30:00,-04:30,NST +2022-03-13T05:30:00,-03:30,NDT +2022-11-06T04:30:00,-04:30,NST +2023-03-12T05:30:00,-03:30,NDT +2023-11-05T04:30:00,-04:30,NST +2024-03-10T05:30:00,-03:30,NDT +2024-11-03T04:30:00,-04:30,NST +2025-03-09T05:30:00,-03:30,NDT +2025-11-02T04:30:00,-04:30,NST +2026-03-08T05:30:00,-03:30,NDT +2026-11-01T04:30:00,-04:30,NST +2027-03-14T05:30:00,-03:30,NDT +2027-11-07T04:30:00,-04:30,NST +2028-03-12T05:30:00,-03:30,NDT +2028-11-05T04:30:00,-04:30,NST +2029-03-11T05:30:00,-03:30,NDT +2029-11-04T04:30:00,-04:30,NST +2030-03-10T05:30:00,-03:30,NDT +2030-11-03T04:30:00,-04:30,NST +2031-03-09T05:30:00,-03:30,NDT +2031-11-02T04:30:00,-04:30,NST +2032-03-14T05:30:00,-03:30,NDT +2032-11-07T04:30:00,-04:30,NST +2033-03-13T05:30:00,-03:30,NDT +2033-11-06T04:30:00,-04:30,NST +2034-03-12T05:30:00,-03:30,NDT +2034-11-05T04:30:00,-04:30,NST +2035-03-11T05:30:00,-03:30,NDT +2035-11-04T04:30:00,-04:30,NST +2036-03-09T05:30:00,-03:30,NDT +2036-11-02T04:30:00,-04:30,NST +2037-03-08T05:30:00,-03:30,NDT +2037-11-01T04:30:00,-04:30,NST \ No newline at end of file diff --git a/desk/gub/lib/pytz/canada-pacific.txt b/desk/gub/lib/pytz/canada-pacific.txt new file mode 100644 index 0000000..b3882aa --- /dev/null +++ b/desk/gub/lib/pytz/canada-pacific.txt @@ -0,0 +1,191 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:00,PST +1918-04-14T10:00:00,-07:00,PDT +1918-10-27T09:00:00,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1946-04-28T10:00:00,-07:00,PDT +1946-09-29T09:00:00,-08:00,PST +1947-04-27T10:00:00,-07:00,PDT +1947-09-28T09:00:00,-08:00,PST +1948-04-25T10:00:00,-07:00,PDT +1948-09-26T09:00:00,-08:00,PST +1949-04-24T10:00:00,-07:00,PDT +1949-09-25T09:00:00,-08:00,PST +1950-04-30T10:00:00,-07:00,PDT +1950-09-24T09:00:00,-08:00,PST +1951-04-29T10:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T10:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T10:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T10:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T10:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T10:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T10:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T10:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T10:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T10:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T10:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T10:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T10:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T10:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T10:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T10:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-04-28T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-04-27T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-03-11T10:00:00,-07:00,PDT +2007-11-04T09:00:00,-08:00,PST +2008-03-09T10:00:00,-07:00,PDT +2008-11-02T09:00:00,-08:00,PST +2009-03-08T10:00:00,-07:00,PDT +2009-11-01T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T09:00:00,-08:00,PST +2021-03-14T10:00:00,-07:00,PDT +2021-11-07T09:00:00,-08:00,PST +2022-03-13T10:00:00,-07:00,PDT +2022-11-06T09:00:00,-08:00,PST +2023-03-12T10:00:00,-07:00,PDT +2023-11-05T09:00:00,-08:00,PST +2024-03-10T10:00:00,-07:00,PDT +2024-11-03T09:00:00,-08:00,PST +2025-03-09T10:00:00,-07:00,PDT +2025-11-02T09:00:00,-08:00,PST +2026-03-08T10:00:00,-07:00,PDT +2026-11-01T09:00:00,-08:00,PST +2027-03-14T10:00:00,-07:00,PDT +2027-11-07T09:00:00,-08:00,PST +2028-03-12T10:00:00,-07:00,PDT +2028-11-05T09:00:00,-08:00,PST +2029-03-11T10:00:00,-07:00,PDT +2029-11-04T09:00:00,-08:00,PST +2030-03-10T10:00:00,-07:00,PDT +2030-11-03T09:00:00,-08:00,PST +2031-03-09T10:00:00,-07:00,PDT +2031-11-02T09:00:00,-08:00,PST +2032-03-14T10:00:00,-07:00,PDT +2032-11-07T09:00:00,-08:00,PST +2033-03-13T10:00:00,-07:00,PDT +2033-11-06T09:00:00,-08:00,PST +2034-03-12T10:00:00,-07:00,PDT +2034-11-05T09:00:00,-08:00,PST +2035-03-11T10:00:00,-07:00,PDT +2035-11-04T09:00:00,-08:00,PST +2036-03-09T10:00:00,-07:00,PDT +2036-11-02T09:00:00,-08:00,PST +2037-03-08T10:00:00,-07:00,PDT +2037-11-01T09:00:00,-08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/canada-saskatchewan.txt b/desk/gub/lib/pytz/canada-saskatchewan.txt new file mode 100644 index 0000000..8e72606 --- /dev/null +++ b/desk/gub/lib/pytz/canada-saskatchewan.txt @@ -0,0 +1,54 @@ +Time,Offset,Name +1905-09-01T06:58:36,-07:00,MST +1918-04-14T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1930-05-04T07:00:00,-06:00,MDT +1930-10-05T06:00:00,-07:00,MST +1931-05-03T07:00:00,-06:00,MDT +1931-10-04T06:00:00,-07:00,MST +1932-05-01T07:00:00,-06:00,MDT +1932-10-02T06:00:00,-07:00,MST +1933-05-07T07:00:00,-06:00,MDT +1933-10-01T06:00:00,-07:00,MST +1934-05-06T07:00:00,-06:00,MDT +1934-10-07T06:00:00,-07:00,MST +1937-04-11T07:00:00,-06:00,MDT +1937-10-10T06:00:00,-07:00,MST +1938-04-10T07:00:00,-06:00,MDT +1938-10-02T06:00:00,-07:00,MST +1939-04-09T07:00:00,-06:00,MDT +1939-10-08T06:00:00,-07:00,MST +1940-04-14T07:00:00,-06:00,MDT +1940-10-13T06:00:00,-07:00,MST +1941-04-13T07:00:00,-06:00,MDT +1941-10-12T06:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1946-04-14T09:00:00,-06:00,MDT +1946-10-13T08:00:00,-07:00,MST +1947-04-27T09:00:00,-06:00,MDT +1947-09-28T08:00:00,-07:00,MST +1948-04-25T09:00:00,-06:00,MDT +1948-09-26T08:00:00,-07:00,MST +1949-04-24T09:00:00,-06:00,MDT +1949-09-25T08:00:00,-07:00,MST +1950-04-30T09:00:00,-06:00,MDT +1950-09-24T08:00:00,-07:00,MST +1951-04-29T09:00:00,-06:00,MDT +1951-09-30T08:00:00,-07:00,MST +1952-04-27T09:00:00,-06:00,MDT +1952-09-28T08:00:00,-07:00,MST +1953-04-26T09:00:00,-06:00,MDT +1953-09-27T08:00:00,-07:00,MST +1954-04-25T09:00:00,-06:00,MDT +1954-09-26T08:00:00,-07:00,MST +1955-04-24T09:00:00,-06:00,MDT +1955-09-25T08:00:00,-07:00,MST +1956-04-29T09:00:00,-06:00,MDT +1956-09-30T08:00:00,-07:00,MST +1957-04-28T09:00:00,-06:00,MDT +1957-09-29T08:00:00,-07:00,MST +1959-04-26T09:00:00,-06:00,MDT +1959-10-25T08:00:00,-07:00,MST +1960-04-24T09:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/canada-yukon.txt b/desk/gub/lib/pytz/canada-yukon.txt new file mode 100644 index 0000000..622b7f9 --- /dev/null +++ b/desk/gub/lib/pytz/canada-yukon.txt @@ -0,0 +1,94 @@ +Time,Offset,Name +1901-12-13T20:45:52,-09:00,YST +1918-04-14T11:00:00,-08:00,YDT +1918-10-27T10:00:00,-09:00,YST +1919-05-25T11:00:00,-08:00,YDT +1919-11-01T08:00:00,-09:00,YST +1942-02-09T11:00:00,-08:00,YWT +1945-08-14T23:00:00,-08:00,YPT +1945-09-30T10:00:00,-09:00,YST +1965-04-25T09:00:00,-07:00,YDDT +1965-10-31T09:00:00,-09:00,YST +1966-02-27T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-03-11T10:00:00,-07:00,PDT +2007-11-04T09:00:00,-08:00,PST +2008-03-09T10:00:00,-07:00,PDT +2008-11-02T09:00:00,-08:00,PST +2009-03-08T10:00:00,-07:00,PDT +2009-11-01T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T07:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/cet.txt b/desk/gub/lib/pytz/cet.txt new file mode 100644 index 0000000..84f817c --- /dev/null +++ b/desk/gub/lib/pytz/cet.txt @@ -0,0 +1,186 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:18,LMT +1901-12-13T20:45:52,+00:00,WET +1914-11-08T00:00:00,+01:00,CET +1916-04-30T23:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1918-11-11T11:00:00,+00:00,WET +1919-03-01T23:00:00,+01:00,WEST +1919-10-04T23:00:00,+00:00,WET +1920-02-14T23:00:00,+01:00,WEST +1920-10-23T23:00:00,+00:00,WET +1921-03-14T23:00:00,+01:00,WEST +1921-10-25T23:00:00,+00:00,WET +1922-03-25T23:00:00,+01:00,WEST +1922-10-07T23:00:00,+00:00,WET +1923-04-21T23:00:00,+01:00,WEST +1923-10-06T23:00:00,+00:00,WET +1924-03-29T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1925-04-04T23:00:00,+01:00,WEST +1925-10-03T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-07T02:00:00,+00:00,WET +1929-04-21T02:00:00,+01:00,WEST +1929-10-06T02:00:00,+00:00,WET +1930-04-13T02:00:00,+01:00,WEST +1930-10-05T02:00:00,+00:00,WET +1931-04-19T02:00:00,+01:00,WEST +1931-10-04T02:00:00,+00:00,WET +1932-04-03T02:00:00,+01:00,WEST +1932-10-02T02:00:00,+00:00,WET +1933-03-26T02:00:00,+01:00,WEST +1933-10-08T02:00:00,+00:00,WET +1934-04-08T02:00:00,+01:00,WEST +1934-10-07T02:00:00,+00:00,WET +1935-03-31T02:00:00,+01:00,WEST +1935-10-06T02:00:00,+00:00,WET +1936-04-19T02:00:00,+01:00,WEST +1936-10-04T02:00:00,+00:00,WET +1937-04-04T02:00:00,+01:00,WEST +1937-10-03T02:00:00,+00:00,WET +1938-03-27T02:00:00,+01:00,WEST +1938-10-02T02:00:00,+00:00,WET +1939-04-16T02:00:00,+01:00,WEST +1939-11-19T02:00:00,+00:00,WET +1940-02-25T02:00:00,+01:00,WEST +1940-05-20T02:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-09-17T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1946-05-19T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1977-04-03T01:00:00,+02:00,CEST +1977-09-25T01:00:00,+01:00,CET +1978-04-02T01:00:00,+02:00,CEST +1978-10-01T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/chile-continental.txt b/desk/gub/lib/pytz/chile-continental.txt new file mode 100644 index 0000000..e602c10 --- /dev/null +++ b/desk/gub/lib/pytz/chile-continental.txt @@ -0,0 +1,160 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:17,SMT +1910-01-10T04:42:45,-05:00,-05 +1916-07-01T05:00:00,-05:17,SMT +1918-09-10T04:42:45,-04:00,-04 +1919-07-01T04:00:00,-05:17,SMT +1927-09-01T04:42:45,-04:00,-04 +1928-04-01T04:00:00,-05:00,-05 +1928-09-01T05:00:00,-04:00,-04 +1929-04-01T04:00:00,-05:00,-05 +1929-09-01T05:00:00,-04:00,-04 +1930-04-01T04:00:00,-05:00,-05 +1930-09-01T05:00:00,-04:00,-04 +1931-04-01T04:00:00,-05:00,-05 +1931-09-01T05:00:00,-04:00,-04 +1932-04-01T04:00:00,-05:00,-05 +1932-09-01T05:00:00,-04:00,-04 +1942-06-01T04:00:00,-05:00,-05 +1942-08-01T05:00:00,-04:00,-04 +1946-07-15T04:00:00,-03:00,-03 +1946-08-29T03:00:00,-04:00,-04 +1947-04-01T04:00:00,-05:00,-05 +1947-05-22T04:00:00,-04:00,-04 +1968-11-03T04:00:00,-03:00,-03 +1969-03-30T03:00:00,-04:00,-04 +1969-11-23T04:00:00,-03:00,-03 +1970-03-29T03:00:00,-04:00,-04 +1970-10-11T04:00:00,-03:00,-03 +1971-03-14T03:00:00,-04:00,-04 +1971-10-10T04:00:00,-03:00,-03 +1972-03-12T03:00:00,-04:00,-04 +1972-10-15T04:00:00,-03:00,-03 +1973-03-11T03:00:00,-04:00,-04 +1973-09-30T04:00:00,-03:00,-03 +1974-03-10T03:00:00,-04:00,-04 +1974-10-13T04:00:00,-03:00,-03 +1975-03-09T03:00:00,-04:00,-04 +1975-10-12T04:00:00,-03:00,-03 +1976-03-14T03:00:00,-04:00,-04 +1976-10-10T04:00:00,-03:00,-03 +1977-03-13T03:00:00,-04:00,-04 +1977-10-09T04:00:00,-03:00,-03 +1978-03-12T03:00:00,-04:00,-04 +1978-10-15T04:00:00,-03:00,-03 +1979-03-11T03:00:00,-04:00,-04 +1979-10-14T04:00:00,-03:00,-03 +1980-03-09T03:00:00,-04:00,-04 +1980-10-12T04:00:00,-03:00,-03 +1981-03-15T03:00:00,-04:00,-04 +1981-10-11T04:00:00,-03:00,-03 +1982-03-14T03:00:00,-04:00,-04 +1982-10-10T04:00:00,-03:00,-03 +1983-03-13T03:00:00,-04:00,-04 +1983-10-09T04:00:00,-03:00,-03 +1984-03-11T03:00:00,-04:00,-04 +1984-10-14T04:00:00,-03:00,-03 +1985-03-10T03:00:00,-04:00,-04 +1985-10-13T04:00:00,-03:00,-03 +1986-03-09T03:00:00,-04:00,-04 +1986-10-12T04:00:00,-03:00,-03 +1987-04-12T03:00:00,-04:00,-04 +1987-10-11T04:00:00,-03:00,-03 +1988-03-13T03:00:00,-04:00,-04 +1988-10-09T04:00:00,-03:00,-03 +1989-03-12T03:00:00,-04:00,-04 +1989-10-15T04:00:00,-03:00,-03 +1990-03-11T03:00:00,-04:00,-04 +1990-09-16T04:00:00,-03:00,-03 +1991-03-10T03:00:00,-04:00,-04 +1991-10-13T04:00:00,-03:00,-03 +1992-03-15T03:00:00,-04:00,-04 +1992-10-11T04:00:00,-03:00,-03 +1993-03-14T03:00:00,-04:00,-04 +1993-10-10T04:00:00,-03:00,-03 +1994-03-13T03:00:00,-04:00,-04 +1994-10-09T04:00:00,-03:00,-03 +1995-03-12T03:00:00,-04:00,-04 +1995-10-15T04:00:00,-03:00,-03 +1996-03-10T03:00:00,-04:00,-04 +1996-10-13T04:00:00,-03:00,-03 +1997-03-30T03:00:00,-04:00,-04 +1997-10-12T04:00:00,-03:00,-03 +1998-03-15T03:00:00,-04:00,-04 +1998-09-27T04:00:00,-03:00,-03 +1999-04-04T03:00:00,-04:00,-04 +1999-10-10T04:00:00,-03:00,-03 +2000-03-12T03:00:00,-04:00,-04 +2000-10-15T04:00:00,-03:00,-03 +2001-03-11T03:00:00,-04:00,-04 +2001-10-14T04:00:00,-03:00,-03 +2002-03-10T03:00:00,-04:00,-04 +2002-10-13T04:00:00,-03:00,-03 +2003-03-09T03:00:00,-04:00,-04 +2003-10-12T04:00:00,-03:00,-03 +2004-03-14T03:00:00,-04:00,-04 +2004-10-10T04:00:00,-03:00,-03 +2005-03-13T03:00:00,-04:00,-04 +2005-10-09T04:00:00,-03:00,-03 +2006-03-12T03:00:00,-04:00,-04 +2006-10-15T04:00:00,-03:00,-03 +2007-03-11T03:00:00,-04:00,-04 +2007-10-14T04:00:00,-03:00,-03 +2008-03-30T03:00:00,-04:00,-04 +2008-10-12T04:00:00,-03:00,-03 +2009-03-15T03:00:00,-04:00,-04 +2009-10-11T04:00:00,-03:00,-03 +2010-04-04T03:00:00,-04:00,-04 +2010-10-10T04:00:00,-03:00,-03 +2011-05-08T03:00:00,-04:00,-04 +2011-08-21T04:00:00,-03:00,-03 +2012-04-29T03:00:00,-04:00,-04 +2012-09-02T04:00:00,-03:00,-03 +2013-04-28T03:00:00,-04:00,-04 +2013-09-08T04:00:00,-03:00,-03 +2014-04-27T03:00:00,-04:00,-04 +2014-09-07T04:00:00,-03:00,-03 +2016-05-15T03:00:00,-04:00,-04 +2016-08-14T04:00:00,-03:00,-03 +2017-05-14T03:00:00,-04:00,-04 +2017-08-13T04:00:00,-03:00,-03 +2018-05-13T03:00:00,-04:00,-04 +2018-08-12T04:00:00,-03:00,-03 +2019-04-07T03:00:00,-04:00,-04 +2019-09-08T04:00:00,-03:00,-03 +2020-04-05T03:00:00,-04:00,-04 +2020-09-06T04:00:00,-03:00,-03 +2021-04-04T03:00:00,-04:00,-04 +2021-09-05T04:00:00,-03:00,-03 +2022-04-03T03:00:00,-04:00,-04 +2022-09-11T04:00:00,-03:00,-03 +2023-04-02T03:00:00,-04:00,-04 +2023-09-03T04:00:00,-03:00,-03 +2024-04-07T03:00:00,-04:00,-04 +2024-09-08T04:00:00,-03:00,-03 +2025-04-06T03:00:00,-04:00,-04 +2025-09-07T04:00:00,-03:00,-03 +2026-04-05T03:00:00,-04:00,-04 +2026-09-06T04:00:00,-03:00,-03 +2027-04-04T03:00:00,-04:00,-04 +2027-09-05T04:00:00,-03:00,-03 +2028-04-02T03:00:00,-04:00,-04 +2028-09-03T04:00:00,-03:00,-03 +2029-04-08T03:00:00,-04:00,-04 +2029-09-02T04:00:00,-03:00,-03 +2030-04-07T03:00:00,-04:00,-04 +2030-09-08T04:00:00,-03:00,-03 +2031-04-06T03:00:00,-04:00,-04 +2031-09-07T04:00:00,-03:00,-03 +2032-04-04T03:00:00,-04:00,-04 +2032-09-05T04:00:00,-03:00,-03 +2033-04-03T03:00:00,-04:00,-04 +2033-09-04T04:00:00,-03:00,-03 +2034-04-02T03:00:00,-04:00,-04 +2034-09-03T04:00:00,-03:00,-03 +2035-04-08T03:00:00,-04:00,-04 +2035-09-02T04:00:00,-03:00,-03 +2036-04-06T03:00:00,-04:00,-04 +2036-09-07T04:00:00,-03:00,-03 +2037-04-05T03:00:00,-04:00,-04 +2037-09-06T04:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/chile-easterisland.txt b/desk/gub/lib/pytz/chile-easterisland.txt new file mode 100644 index 0000000..7454c05 --- /dev/null +++ b/desk/gub/lib/pytz/chile-easterisland.txt @@ -0,0 +1,140 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:43,EMT +1932-09-01T07:17:28,-07:00,-07 +1968-11-03T04:00:00,-06:00,-06 +1969-03-30T03:00:00,-07:00,-07 +1969-11-23T04:00:00,-06:00,-06 +1970-03-29T03:00:00,-07:00,-07 +1970-10-11T04:00:00,-06:00,-06 +1971-03-14T03:00:00,-07:00,-07 +1971-10-10T04:00:00,-06:00,-06 +1972-03-12T03:00:00,-07:00,-07 +1972-10-15T04:00:00,-06:00,-06 +1973-03-11T03:00:00,-07:00,-07 +1973-09-30T04:00:00,-06:00,-06 +1974-03-10T03:00:00,-07:00,-07 +1974-10-13T04:00:00,-06:00,-06 +1975-03-09T03:00:00,-07:00,-07 +1975-10-12T04:00:00,-06:00,-06 +1976-03-14T03:00:00,-07:00,-07 +1976-10-10T04:00:00,-06:00,-06 +1977-03-13T03:00:00,-07:00,-07 +1977-10-09T04:00:00,-06:00,-06 +1978-03-12T03:00:00,-07:00,-07 +1978-10-15T04:00:00,-06:00,-06 +1979-03-11T03:00:00,-07:00,-07 +1979-10-14T04:00:00,-06:00,-06 +1980-03-09T03:00:00,-07:00,-07 +1980-10-12T04:00:00,-06:00,-06 +1981-03-15T03:00:00,-07:00,-07 +1981-10-11T04:00:00,-06:00,-06 +1982-03-14T03:00:00,-06:00,-06 +1982-10-10T04:00:00,-05:00,-05 +1983-03-13T03:00:00,-06:00,-06 +1983-10-09T04:00:00,-05:00,-05 +1984-03-11T03:00:00,-06:00,-06 +1984-10-14T04:00:00,-05:00,-05 +1985-03-10T03:00:00,-06:00,-06 +1985-10-13T04:00:00,-05:00,-05 +1986-03-09T03:00:00,-06:00,-06 +1986-10-12T04:00:00,-05:00,-05 +1987-04-12T03:00:00,-06:00,-06 +1987-10-11T04:00:00,-05:00,-05 +1988-03-13T03:00:00,-06:00,-06 +1988-10-09T04:00:00,-05:00,-05 +1989-03-12T03:00:00,-06:00,-06 +1989-10-15T04:00:00,-05:00,-05 +1990-03-11T03:00:00,-06:00,-06 +1990-09-16T04:00:00,-05:00,-05 +1991-03-10T03:00:00,-06:00,-06 +1991-10-13T04:00:00,-05:00,-05 +1992-03-15T03:00:00,-06:00,-06 +1992-10-11T04:00:00,-05:00,-05 +1993-03-14T03:00:00,-06:00,-06 +1993-10-10T04:00:00,-05:00,-05 +1994-03-13T03:00:00,-06:00,-06 +1994-10-09T04:00:00,-05:00,-05 +1995-03-12T03:00:00,-06:00,-06 +1995-10-15T04:00:00,-05:00,-05 +1996-03-10T03:00:00,-06:00,-06 +1996-10-13T04:00:00,-05:00,-05 +1997-03-30T03:00:00,-06:00,-06 +1997-10-12T04:00:00,-05:00,-05 +1998-03-15T03:00:00,-06:00,-06 +1998-09-27T04:00:00,-05:00,-05 +1999-04-04T03:00:00,-06:00,-06 +1999-10-10T04:00:00,-05:00,-05 +2000-03-12T03:00:00,-06:00,-06 +2000-10-15T04:00:00,-05:00,-05 +2001-03-11T03:00:00,-06:00,-06 +2001-10-14T04:00:00,-05:00,-05 +2002-03-10T03:00:00,-06:00,-06 +2002-10-13T04:00:00,-05:00,-05 +2003-03-09T03:00:00,-06:00,-06 +2003-10-12T04:00:00,-05:00,-05 +2004-03-14T03:00:00,-06:00,-06 +2004-10-10T04:00:00,-05:00,-05 +2005-03-13T03:00:00,-06:00,-06 +2005-10-09T04:00:00,-05:00,-05 +2006-03-12T03:00:00,-06:00,-06 +2006-10-15T04:00:00,-05:00,-05 +2007-03-11T03:00:00,-06:00,-06 +2007-10-14T04:00:00,-05:00,-05 +2008-03-30T03:00:00,-06:00,-06 +2008-10-12T04:00:00,-05:00,-05 +2009-03-15T03:00:00,-06:00,-06 +2009-10-11T04:00:00,-05:00,-05 +2010-04-04T03:00:00,-06:00,-06 +2010-10-10T04:00:00,-05:00,-05 +2011-05-08T03:00:00,-06:00,-06 +2011-08-21T04:00:00,-05:00,-05 +2012-04-29T03:00:00,-06:00,-06 +2012-09-02T04:00:00,-05:00,-05 +2013-04-28T03:00:00,-06:00,-06 +2013-09-08T04:00:00,-05:00,-05 +2014-04-27T03:00:00,-06:00,-06 +2014-09-07T04:00:00,-05:00,-05 +2016-05-15T03:00:00,-06:00,-06 +2016-08-14T04:00:00,-05:00,-05 +2017-05-14T03:00:00,-06:00,-06 +2017-08-13T04:00:00,-05:00,-05 +2018-05-13T03:00:00,-06:00,-06 +2018-08-12T04:00:00,-05:00,-05 +2019-04-07T03:00:00,-06:00,-06 +2019-09-08T04:00:00,-05:00,-05 +2020-04-05T03:00:00,-06:00,-06 +2020-09-06T04:00:00,-05:00,-05 +2021-04-04T03:00:00,-06:00,-06 +2021-09-05T04:00:00,-05:00,-05 +2022-04-03T03:00:00,-06:00,-06 +2022-09-11T04:00:00,-05:00,-05 +2023-04-02T03:00:00,-06:00,-06 +2023-09-03T04:00:00,-05:00,-05 +2024-04-07T03:00:00,-06:00,-06 +2024-09-08T04:00:00,-05:00,-05 +2025-04-06T03:00:00,-06:00,-06 +2025-09-07T04:00:00,-05:00,-05 +2026-04-05T03:00:00,-06:00,-06 +2026-09-06T04:00:00,-05:00,-05 +2027-04-04T03:00:00,-06:00,-06 +2027-09-05T04:00:00,-05:00,-05 +2028-04-02T03:00:00,-06:00,-06 +2028-09-03T04:00:00,-05:00,-05 +2029-04-08T03:00:00,-06:00,-06 +2029-09-02T04:00:00,-05:00,-05 +2030-04-07T03:00:00,-06:00,-06 +2030-09-08T04:00:00,-05:00,-05 +2031-04-06T03:00:00,-06:00,-06 +2031-09-07T04:00:00,-05:00,-05 +2032-04-04T03:00:00,-06:00,-06 +2032-09-05T04:00:00,-05:00,-05 +2033-04-03T03:00:00,-06:00,-06 +2033-09-04T04:00:00,-05:00,-05 +2034-04-02T03:00:00,-06:00,-06 +2034-09-03T04:00:00,-05:00,-05 +2035-04-08T03:00:00,-06:00,-06 +2035-09-02T04:00:00,-05:00,-05 +2036-04-06T03:00:00,-06:00,-06 +2036-09-07T04:00:00,-05:00,-05 +2037-04-05T03:00:00,-06:00,-06 +2037-09-06T04:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/cst6cdt.txt b/desk/gub/lib/pytz/cst6cdt.txt new file mode 100644 index 0000000..cd8afcc --- /dev/null +++ b/desk/gub/lib/pytz/cst6cdt.txt @@ -0,0 +1,237 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1920-06-13T08:00:00,-05:00,CDT +1920-10-31T07:00:00,-06:00,CST +1921-03-27T08:00:00,-05:00,CDT +1921-10-30T07:00:00,-06:00,CST +1922-04-30T08:00:00,-05:00,CDT +1922-09-24T07:00:00,-06:00,CST +1923-04-29T08:00:00,-05:00,CDT +1923-09-30T07:00:00,-06:00,CST +1924-04-27T08:00:00,-05:00,CDT +1924-09-28T07:00:00,-06:00,CST +1925-04-26T08:00:00,-05:00,CDT +1925-09-27T07:00:00,-06:00,CST +1926-04-25T08:00:00,-05:00,CDT +1926-09-26T07:00:00,-06:00,CST +1927-04-24T08:00:00,-05:00,CDT +1927-09-25T07:00:00,-06:00,CST +1928-04-29T08:00:00,-05:00,CDT +1928-09-30T07:00:00,-06:00,CST +1929-04-28T08:00:00,-05:00,CDT +1929-09-29T07:00:00,-06:00,CST +1930-04-27T08:00:00,-05:00,CDT +1930-09-28T07:00:00,-06:00,CST +1931-04-26T08:00:00,-05:00,CDT +1931-09-27T07:00:00,-06:00,CST +1932-04-24T08:00:00,-05:00,CDT +1932-09-25T07:00:00,-06:00,CST +1933-04-30T08:00:00,-05:00,CDT +1933-09-24T07:00:00,-06:00,CST +1934-04-29T08:00:00,-05:00,CDT +1934-09-30T07:00:00,-06:00,CST +1935-04-28T08:00:00,-05:00,CDT +1935-09-29T07:00:00,-06:00,CST +1936-03-01T08:00:00,-05:00,EST +1936-11-15T07:00:00,-06:00,CST +1937-04-25T08:00:00,-05:00,CDT +1937-09-26T07:00:00,-06:00,CST +1938-04-24T08:00:00,-05:00,CDT +1938-09-25T07:00:00,-06:00,CST +1939-04-30T08:00:00,-05:00,CDT +1939-09-24T07:00:00,-06:00,CST +1940-04-28T08:00:00,-05:00,CDT +1940-09-29T07:00:00,-06:00,CST +1941-04-27T08:00:00,-05:00,CDT +1941-09-28T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-10-30T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-10-28T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-10-27T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-10-26T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-10-30T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-10-29T07:00:00,-06:00,CST +1962-04-29T08:00:00,-05:00,CDT +1962-10-28T07:00:00,-06:00,CST +1963-04-28T08:00:00,-05:00,CDT +1963-10-27T07:00:00,-06:00,CST +1964-04-26T08:00:00,-05:00,CDT +1964-10-25T07:00:00,-06:00,CST +1965-04-25T08:00:00,-05:00,CDT +1965-10-31T07:00:00,-06:00,CST +1966-04-24T08:00:00,-05:00,CDT +1966-10-30T07:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T07:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T07:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T07:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T07:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T07:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-01-06T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-02-23T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T07:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T07:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T07:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/cuba.txt b/desk/gub/lib/pytz/cuba.txt new file mode 100644 index 0000000..136867c --- /dev/null +++ b/desk/gub/lib/pytz/cuba.txt @@ -0,0 +1,157 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:30,HMT +1925-07-19T17:29:36,-05:00,CST +1928-06-10T05:00:00,-04:00,CDT +1928-10-10T04:00:00,-05:00,CST +1940-06-02T05:00:00,-04:00,CDT +1940-09-01T04:00:00,-05:00,CST +1941-06-01T05:00:00,-04:00,CDT +1941-09-07T04:00:00,-05:00,CST +1942-06-07T05:00:00,-04:00,CDT +1942-09-06T04:00:00,-05:00,CST +1945-06-03T05:00:00,-04:00,CDT +1945-09-02T04:00:00,-05:00,CST +1946-06-02T05:00:00,-04:00,CDT +1946-09-01T04:00:00,-05:00,CST +1965-06-01T05:00:00,-04:00,CDT +1965-09-30T04:00:00,-05:00,CST +1966-05-29T05:00:00,-04:00,CDT +1966-10-02T04:00:00,-05:00,CST +1967-04-08T05:00:00,-04:00,CDT +1967-09-10T04:00:00,-05:00,CST +1968-04-14T05:00:00,-04:00,CDT +1968-09-08T04:00:00,-05:00,CST +1969-04-27T05:00:00,-04:00,CDT +1969-10-26T04:00:00,-05:00,CST +1970-04-26T05:00:00,-04:00,CDT +1970-10-25T04:00:00,-05:00,CST +1971-04-25T05:00:00,-04:00,CDT +1971-10-31T04:00:00,-05:00,CST +1972-04-30T05:00:00,-04:00,CDT +1972-10-08T04:00:00,-05:00,CST +1973-04-29T05:00:00,-04:00,CDT +1973-10-08T04:00:00,-05:00,CST +1974-04-28T05:00:00,-04:00,CDT +1974-10-08T04:00:00,-05:00,CST +1975-04-27T05:00:00,-04:00,CDT +1975-10-26T04:00:00,-05:00,CST +1976-04-25T05:00:00,-04:00,CDT +1976-10-31T04:00:00,-05:00,CST +1977-04-24T05:00:00,-04:00,CDT +1977-10-30T04:00:00,-05:00,CST +1978-05-07T05:00:00,-04:00,CDT +1978-10-08T04:00:00,-05:00,CST +1979-03-18T05:00:00,-04:00,CDT +1979-10-14T04:00:00,-05:00,CST +1980-03-16T05:00:00,-04:00,CDT +1980-10-12T04:00:00,-05:00,CST +1981-05-10T05:00:00,-04:00,CDT +1981-10-11T04:00:00,-05:00,CST +1982-05-09T05:00:00,-04:00,CDT +1982-10-10T04:00:00,-05:00,CST +1983-05-08T05:00:00,-04:00,CDT +1983-10-09T04:00:00,-05:00,CST +1984-05-06T05:00:00,-04:00,CDT +1984-10-14T04:00:00,-05:00,CST +1985-05-05T05:00:00,-04:00,CDT +1985-10-13T04:00:00,-05:00,CST +1986-03-16T05:00:00,-04:00,CDT +1986-10-12T04:00:00,-05:00,CST +1987-03-15T05:00:00,-04:00,CDT +1987-10-11T04:00:00,-05:00,CST +1988-03-20T05:00:00,-04:00,CDT +1988-10-09T04:00:00,-05:00,CST +1989-03-19T05:00:00,-04:00,CDT +1989-10-08T04:00:00,-05:00,CST +1990-04-01T05:00:00,-04:00,CDT +1990-10-14T04:00:00,-05:00,CST +1991-04-07T05:00:00,-04:00,CDT +1991-10-13T05:00:00,-05:00,CST +1992-04-05T05:00:00,-04:00,CDT +1992-10-11T05:00:00,-05:00,CST +1993-04-04T05:00:00,-04:00,CDT +1993-10-10T05:00:00,-05:00,CST +1994-04-03T05:00:00,-04:00,CDT +1994-10-09T05:00:00,-05:00,CST +1995-04-02T05:00:00,-04:00,CDT +1995-10-08T05:00:00,-05:00,CST +1996-04-07T05:00:00,-04:00,CDT +1996-10-06T05:00:00,-05:00,CST +1997-04-06T05:00:00,-04:00,CDT +1997-10-12T05:00:00,-05:00,CST +1998-03-29T05:00:00,-04:00,CDT +1998-10-25T05:00:00,-05:00,CST +1999-03-28T05:00:00,-04:00,CDT +1999-10-31T05:00:00,-05:00,CST +2000-04-02T05:00:00,-04:00,CDT +2000-10-29T05:00:00,-05:00,CST +2001-04-01T05:00:00,-04:00,CDT +2001-10-28T05:00:00,-05:00,CST +2002-04-07T05:00:00,-04:00,CDT +2002-10-27T05:00:00,-05:00,CST +2003-04-06T05:00:00,-04:00,CDT +2003-10-26T05:00:00,-05:00,CST +2004-03-28T05:00:00,-04:00,CDT +2006-10-29T05:00:00,-05:00,CST +2007-03-11T05:00:00,-04:00,CDT +2007-10-28T05:00:00,-05:00,CST +2008-03-16T05:00:00,-04:00,CDT +2008-10-26T05:00:00,-05:00,CST +2009-03-08T05:00:00,-04:00,CDT +2009-10-25T05:00:00,-05:00,CST +2010-03-14T05:00:00,-04:00,CDT +2010-10-31T05:00:00,-05:00,CST +2011-03-20T05:00:00,-04:00,CDT +2011-11-13T05:00:00,-05:00,CST +2012-04-01T05:00:00,-04:00,CDT +2012-11-04T05:00:00,-05:00,CST +2013-03-10T05:00:00,-04:00,CDT +2013-11-03T05:00:00,-05:00,CST +2014-03-09T05:00:00,-04:00,CDT +2014-11-02T05:00:00,-05:00,CST +2015-03-08T05:00:00,-04:00,CDT +2015-11-01T05:00:00,-05:00,CST +2016-03-13T05:00:00,-04:00,CDT +2016-11-06T05:00:00,-05:00,CST +2017-03-12T05:00:00,-04:00,CDT +2017-11-05T05:00:00,-05:00,CST +2018-03-11T05:00:00,-04:00,CDT +2018-11-04T05:00:00,-05:00,CST +2019-03-10T05:00:00,-04:00,CDT +2019-11-03T05:00:00,-05:00,CST +2020-03-08T05:00:00,-04:00,CDT +2020-11-01T05:00:00,-05:00,CST +2021-03-14T05:00:00,-04:00,CDT +2021-11-07T05:00:00,-05:00,CST +2022-03-13T05:00:00,-04:00,CDT +2022-11-06T05:00:00,-05:00,CST +2023-03-12T05:00:00,-04:00,CDT +2023-11-05T05:00:00,-05:00,CST +2024-03-10T05:00:00,-04:00,CDT +2024-11-03T05:00:00,-05:00,CST +2025-03-09T05:00:00,-04:00,CDT +2025-11-02T05:00:00,-05:00,CST +2026-03-08T05:00:00,-04:00,CDT +2026-11-01T05:00:00,-05:00,CST +2027-03-14T05:00:00,-04:00,CDT +2027-11-07T05:00:00,-05:00,CST +2028-03-12T05:00:00,-04:00,CDT +2028-11-05T05:00:00,-05:00,CST +2029-03-11T05:00:00,-04:00,CDT +2029-11-04T05:00:00,-05:00,CST +2030-03-10T05:00:00,-04:00,CDT +2030-11-03T05:00:00,-05:00,CST +2031-03-09T05:00:00,-04:00,CDT +2031-11-02T05:00:00,-05:00,CST +2032-03-14T05:00:00,-04:00,CDT +2032-11-07T05:00:00,-05:00,CST +2033-03-13T05:00:00,-04:00,CDT +2033-11-06T05:00:00,-05:00,CST +2034-03-12T05:00:00,-04:00,CDT +2034-11-05T05:00:00,-05:00,CST +2035-03-11T05:00:00,-04:00,CDT +2035-11-04T05:00:00,-05:00,CST +2036-03-09T05:00:00,-04:00,CDT +2036-11-02T05:00:00,-05:00,CST +2037-03-08T05:00:00,-04:00,CDT +2037-11-01T05:00:00,-05:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/eet.txt b/desk/gub/lib/pytz/eet.txt new file mode 100644 index 0000000..a621fe4 --- /dev/null +++ b/desk/gub/lib/pytz/eet.txt @@ -0,0 +1,140 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:35,LMT +1901-12-13T20:45:52,+01:35,AMT +1916-07-27T22:26:08,+02:00,EET +1932-07-06T22:00:00,+03:00,EEST +1932-08-31T21:00:00,+02:00,EET +1941-04-06T22:00:00,+03:00,EEST +1941-04-29T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T23:00:00,+02:00,CEST +1943-10-03T22:00:00,+01:00,CET +1944-04-03T23:00:00,+02:00,EET +1952-06-30T22:00:00,+03:00,EEST +1952-11-01T21:00:00,+02:00,EET +1975-04-11T22:00:00,+03:00,EEST +1975-11-25T22:00:00,+02:00,EET +1976-04-11T00:00:00,+03:00,EEST +1976-10-10T00:00:00,+02:00,EET +1977-04-03T00:00:00,+03:00,EEST +1977-09-26T00:00:00,+02:00,EET +1978-04-02T00:00:00,+03:00,EEST +1978-09-24T01:00:00,+02:00,EET +1979-04-01T07:00:00,+03:00,EEST +1979-09-28T23:00:00,+02:00,EET +1980-03-31T22:00:00,+03:00,EEST +1980-09-27T21:00:00,+02:00,EET +1981-03-29T01:00:00,+03:00,EEST +1981-09-27T01:00:00,+02:00,EET +1982-03-28T01:00:00,+03:00,EEST +1982-09-26T01:00:00,+02:00,EET +1983-03-27T01:00:00,+03:00,EEST +1983-09-25T01:00:00,+02:00,EET +1984-03-25T01:00:00,+03:00,EEST +1984-09-30T01:00:00,+02:00,EET +1985-03-31T01:00:00,+03:00,EEST +1985-09-29T01:00:00,+02:00,EET +1986-03-30T01:00:00,+03:00,EEST +1986-09-28T01:00:00,+02:00,EET +1987-03-29T01:00:00,+03:00,EEST +1987-09-27T01:00:00,+02:00,EET +1988-03-27T01:00:00,+03:00,EEST +1988-09-25T01:00:00,+02:00,EET +1989-03-26T01:00:00,+03:00,EEST +1989-09-24T01:00:00,+02:00,EET +1990-03-25T01:00:00,+03:00,EEST +1990-09-30T01:00:00,+02:00,EET +1991-03-31T01:00:00,+03:00,EEST +1991-09-29T01:00:00,+02:00,EET +1992-03-29T01:00:00,+03:00,EEST +1992-09-27T01:00:00,+02:00,EET +1993-03-28T01:00:00,+03:00,EEST +1993-09-26T01:00:00,+02:00,EET +1994-03-27T01:00:00,+03:00,EEST +1994-09-25T01:00:00,+02:00,EET +1995-03-26T01:00:00,+03:00,EEST +1995-09-24T01:00:00,+02:00,EET +1996-03-31T01:00:00,+03:00,EEST +1996-10-27T01:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/egypt.txt b/desk/gub/lib/pytz/egypt.txt new file mode 100644 index 0000000..9b1171a --- /dev/null +++ b/desk/gub/lib/pytz/egypt.txt @@ -0,0 +1,159 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:05,LMT +1901-12-13T20:45:52,+02:00,EET +1940-07-14T22:00:00,+03:00,EEST +1940-09-30T21:00:00,+02:00,EET +1941-04-14T22:00:00,+03:00,EEST +1941-09-15T21:00:00,+02:00,EET +1942-03-31T22:00:00,+03:00,EEST +1942-10-26T21:00:00,+02:00,EET +1943-03-31T22:00:00,+03:00,EEST +1943-10-31T21:00:00,+02:00,EET +1944-03-31T22:00:00,+03:00,EEST +1944-10-31T21:00:00,+02:00,EET +1945-04-15T22:00:00,+03:00,EEST +1945-10-31T21:00:00,+02:00,EET +1957-05-09T22:00:00,+03:00,EEST +1957-09-30T21:00:00,+02:00,EET +1958-04-30T22:00:00,+03:00,EEST +1958-09-30T21:00:00,+02:00,EET +1959-04-30T23:00:00,+03:00,EEST +1959-09-30T00:00:00,+02:00,EET +1960-04-30T23:00:00,+03:00,EEST +1960-09-30T00:00:00,+02:00,EET +1961-04-30T23:00:00,+03:00,EEST +1961-09-30T00:00:00,+02:00,EET +1962-04-30T23:00:00,+03:00,EEST +1962-09-30T00:00:00,+02:00,EET +1963-04-30T23:00:00,+03:00,EEST +1963-09-30T00:00:00,+02:00,EET +1964-04-30T23:00:00,+03:00,EEST +1964-09-30T00:00:00,+02:00,EET +1965-04-30T23:00:00,+03:00,EEST +1965-09-30T00:00:00,+02:00,EET +1966-04-30T23:00:00,+03:00,EEST +1966-10-01T00:00:00,+02:00,EET +1967-04-30T23:00:00,+03:00,EEST +1967-10-01T00:00:00,+02:00,EET +1968-04-30T23:00:00,+03:00,EEST +1968-10-01T00:00:00,+02:00,EET +1969-04-30T23:00:00,+03:00,EEST +1969-10-01T00:00:00,+02:00,EET +1970-04-30T23:00:00,+03:00,EEST +1970-10-01T00:00:00,+02:00,EET +1971-04-30T23:00:00,+03:00,EEST +1971-10-01T00:00:00,+02:00,EET +1972-04-30T23:00:00,+03:00,EEST +1972-10-01T00:00:00,+02:00,EET +1973-04-30T23:00:00,+03:00,EEST +1973-10-01T00:00:00,+02:00,EET +1974-04-30T23:00:00,+03:00,EEST +1974-10-01T00:00:00,+02:00,EET +1975-04-30T23:00:00,+03:00,EEST +1975-10-01T00:00:00,+02:00,EET +1976-04-30T23:00:00,+03:00,EEST +1976-10-01T00:00:00,+02:00,EET +1977-04-30T23:00:00,+03:00,EEST +1977-10-01T00:00:00,+02:00,EET +1978-04-30T23:00:00,+03:00,EEST +1978-10-01T00:00:00,+02:00,EET +1979-04-30T23:00:00,+03:00,EEST +1979-10-01T00:00:00,+02:00,EET +1980-04-30T23:00:00,+03:00,EEST +1980-10-01T00:00:00,+02:00,EET +1981-04-30T23:00:00,+03:00,EEST +1981-10-01T00:00:00,+02:00,EET +1982-07-24T23:00:00,+03:00,EEST +1982-10-01T00:00:00,+02:00,EET +1983-07-11T23:00:00,+03:00,EEST +1983-10-01T00:00:00,+02:00,EET +1984-04-30T23:00:00,+03:00,EEST +1984-10-01T00:00:00,+02:00,EET +1985-04-30T23:00:00,+03:00,EEST +1985-10-01T00:00:00,+02:00,EET +1986-04-30T23:00:00,+03:00,EEST +1986-10-01T00:00:00,+02:00,EET +1987-04-30T23:00:00,+03:00,EEST +1987-10-01T00:00:00,+02:00,EET +1988-04-30T23:00:00,+03:00,EEST +1988-10-01T00:00:00,+02:00,EET +1989-05-05T23:00:00,+03:00,EEST +1989-10-01T00:00:00,+02:00,EET +1990-04-30T23:00:00,+03:00,EEST +1990-10-01T00:00:00,+02:00,EET +1991-04-30T23:00:00,+03:00,EEST +1991-10-01T00:00:00,+02:00,EET +1992-04-30T23:00:00,+03:00,EEST +1992-10-01T00:00:00,+02:00,EET +1993-04-30T23:00:00,+03:00,EEST +1993-10-01T00:00:00,+02:00,EET +1994-04-30T23:00:00,+03:00,EEST +1994-10-01T00:00:00,+02:00,EET +1995-04-27T22:00:00,+03:00,EEST +1995-09-28T21:00:00,+02:00,EET +1996-04-25T22:00:00,+03:00,EEST +1996-09-26T21:00:00,+02:00,EET +1997-04-24T22:00:00,+03:00,EEST +1997-09-25T21:00:00,+02:00,EET +1998-04-23T22:00:00,+03:00,EEST +1998-09-24T21:00:00,+02:00,EET +1999-04-29T22:00:00,+03:00,EEST +1999-09-30T21:00:00,+02:00,EET +2000-04-27T22:00:00,+03:00,EEST +2000-09-28T21:00:00,+02:00,EET +2001-04-26T22:00:00,+03:00,EEST +2001-09-27T21:00:00,+02:00,EET +2002-04-25T22:00:00,+03:00,EEST +2002-09-26T21:00:00,+02:00,EET +2003-04-24T22:00:00,+03:00,EEST +2003-09-25T21:00:00,+02:00,EET +2004-04-29T22:00:00,+03:00,EEST +2004-09-30T21:00:00,+02:00,EET +2005-04-28T22:00:00,+03:00,EEST +2005-09-29T21:00:00,+02:00,EET +2006-04-27T22:00:00,+03:00,EEST +2006-09-21T21:00:00,+02:00,EET +2007-04-26T22:00:00,+03:00,EEST +2007-09-06T21:00:00,+02:00,EET +2008-04-24T22:00:00,+03:00,EEST +2008-08-28T21:00:00,+02:00,EET +2009-04-23T22:00:00,+03:00,EEST +2009-08-20T21:00:00,+02:00,EET +2010-04-29T22:00:00,+03:00,EEST +2010-08-10T21:00:00,+02:00,EET +2010-09-09T22:00:00,+03:00,EEST +2010-09-30T21:00:00,+02:00,EET +2014-05-15T22:00:00,+03:00,EEST +2014-06-26T21:00:00,+02:00,EET +2014-07-31T22:00:00,+03:00,EEST +2014-09-25T21:00:00,+02:00,EET +2023-04-27T22:00:00,+03:00,EEST +2023-10-26T21:00:00,+02:00,EET +2024-04-25T22:00:00,+03:00,EEST +2024-10-31T21:00:00,+02:00,EET +2025-04-24T22:00:00,+03:00,EEST +2025-10-30T21:00:00,+02:00,EET +2026-04-23T22:00:00,+03:00,EEST +2026-10-29T21:00:00,+02:00,EET +2027-04-29T22:00:00,+03:00,EEST +2027-10-28T21:00:00,+02:00,EET +2028-04-27T22:00:00,+03:00,EEST +2028-10-26T21:00:00,+02:00,EET +2029-04-26T22:00:00,+03:00,EEST +2029-10-25T21:00:00,+02:00,EET +2030-04-25T22:00:00,+03:00,EEST +2030-10-31T21:00:00,+02:00,EET +2031-04-24T22:00:00,+03:00,EEST +2031-10-30T21:00:00,+02:00,EET +2032-04-29T22:00:00,+03:00,EEST +2032-10-28T21:00:00,+02:00,EET +2033-04-28T22:00:00,+03:00,EEST +2033-10-27T21:00:00,+02:00,EET +2034-04-27T22:00:00,+03:00,EEST +2034-10-26T21:00:00,+02:00,EET +2035-04-26T22:00:00,+03:00,EEST +2035-10-25T21:00:00,+02:00,EET +2036-04-24T22:00:00,+03:00,EEST +2036-10-30T21:00:00,+02:00,EET +2037-04-23T22:00:00,+03:00,EEST +2037-10-29T21:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/eire.txt b/desk/gub/lib/pytz/eire.txt new file mode 100644 index 0000000..97a1ead --- /dev/null +++ b/desk/gub/lib/pytz/eire.txt @@ -0,0 +1,229 @@ +Time,Offset,Name +1901-12-13T20:45:52,-01:35,DMT +1916-05-21T02:25:21,+00:35,IST +1916-10-01T02:25:21,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,IST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,IST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,IST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,IST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,IST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,IST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,IST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,IST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,IST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,IST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,IST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,IST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,IST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,IST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,IST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,IST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,IST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,IST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,IST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,IST +1947-11-02T02:00:00,+00:00,GMT +1948-04-18T02:00:00,+01:00,IST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,IST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,IST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,IST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,IST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,IST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,IST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,IST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,IST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,IST +1957-10-06T02:00:00,+00:00,GMT +1958-04-20T02:00:00,+01:00,IST +1958-10-05T02:00:00,+00:00,GMT +1959-04-19T02:00:00,+01:00,IST +1959-10-04T02:00:00,+00:00,GMT +1960-04-10T02:00:00,+01:00,IST +1960-10-02T02:00:00,+00:00,GMT +1961-03-26T02:00:00,+01:00,IST +1961-10-29T02:00:00,+00:00,GMT +1962-03-25T02:00:00,+01:00,IST +1962-10-28T02:00:00,+00:00,GMT +1963-03-31T02:00:00,+01:00,IST +1963-10-27T02:00:00,+00:00,GMT +1964-03-22T02:00:00,+01:00,IST +1964-10-25T02:00:00,+00:00,GMT +1965-03-21T02:00:00,+01:00,IST +1965-10-24T02:00:00,+00:00,GMT +1966-03-20T02:00:00,+01:00,IST +1966-10-23T02:00:00,+00:00,GMT +1967-03-19T02:00:00,+01:00,IST +1967-10-29T02:00:00,+00:00,GMT +1968-02-18T02:00:00,+01:00,IST +1968-10-26T23:00:00,+01:00,IST +1971-10-31T02:00:00,+00:00,GMT +1972-03-19T02:00:00,+01:00,IST +1972-10-29T02:00:00,+00:00,GMT +1973-03-18T02:00:00,+01:00,IST +1973-10-28T02:00:00,+00:00,GMT +1974-03-17T02:00:00,+01:00,IST +1974-10-27T02:00:00,+00:00,GMT +1975-03-16T02:00:00,+01:00,IST +1975-10-26T02:00:00,+00:00,GMT +1976-03-21T02:00:00,+01:00,IST +1976-10-24T02:00:00,+00:00,GMT +1977-03-20T02:00:00,+01:00,IST +1977-10-23T02:00:00,+00:00,GMT +1978-03-19T02:00:00,+01:00,IST +1978-10-29T02:00:00,+00:00,GMT +1979-03-18T02:00:00,+01:00,IST +1979-10-28T02:00:00,+00:00,GMT +1980-03-16T02:00:00,+01:00,IST +1980-10-26T02:00:00,+00:00,GMT +1981-03-29T01:00:00,+01:00,IST +1981-10-25T01:00:00,+00:00,GMT +1982-03-28T01:00:00,+01:00,IST +1982-10-24T01:00:00,+00:00,GMT +1983-03-27T01:00:00,+01:00,IST +1983-10-23T01:00:00,+00:00,GMT +1984-03-25T01:00:00,+01:00,IST +1984-10-28T01:00:00,+00:00,GMT +1985-03-31T01:00:00,+01:00,IST +1985-10-27T01:00:00,+00:00,GMT +1986-03-30T01:00:00,+01:00,IST +1986-10-26T01:00:00,+00:00,GMT +1987-03-29T01:00:00,+01:00,IST +1987-10-25T01:00:00,+00:00,GMT +1988-03-27T01:00:00,+01:00,IST +1988-10-23T01:00:00,+00:00,GMT +1989-03-26T01:00:00,+01:00,IST +1989-10-29T01:00:00,+00:00,GMT +1990-03-25T01:00:00,+01:00,IST +1990-10-28T01:00:00,+00:00,GMT +1991-03-31T01:00:00,+01:00,IST +1991-10-27T01:00:00,+00:00,GMT +1992-03-29T01:00:00,+01:00,IST +1992-10-25T01:00:00,+00:00,GMT +1993-03-28T01:00:00,+01:00,IST +1993-10-24T01:00:00,+00:00,GMT +1994-03-27T01:00:00,+01:00,IST +1994-10-23T01:00:00,+00:00,GMT +1995-03-26T01:00:00,+01:00,IST +1995-10-22T01:00:00,+00:00,GMT +1996-03-31T01:00:00,+01:00,IST +1996-10-27T01:00:00,+00:00,GMT +1997-03-30T01:00:00,+01:00,IST +1997-10-26T01:00:00,+00:00,GMT +1998-03-29T01:00:00,+01:00,IST +1998-10-25T01:00:00,+00:00,GMT +1999-03-28T01:00:00,+01:00,IST +1999-10-31T01:00:00,+00:00,GMT +2000-03-26T01:00:00,+01:00,IST +2000-10-29T01:00:00,+00:00,GMT +2001-03-25T01:00:00,+01:00,IST +2001-10-28T01:00:00,+00:00,GMT +2002-03-31T01:00:00,+01:00,IST +2002-10-27T01:00:00,+00:00,GMT +2003-03-30T01:00:00,+01:00,IST +2003-10-26T01:00:00,+00:00,GMT +2004-03-28T01:00:00,+01:00,IST +2004-10-31T01:00:00,+00:00,GMT +2005-03-27T01:00:00,+01:00,IST +2005-10-30T01:00:00,+00:00,GMT +2006-03-26T01:00:00,+01:00,IST +2006-10-29T01:00:00,+00:00,GMT +2007-03-25T01:00:00,+01:00,IST +2007-10-28T01:00:00,+00:00,GMT +2008-03-30T01:00:00,+01:00,IST +2008-10-26T01:00:00,+00:00,GMT +2009-03-29T01:00:00,+01:00,IST +2009-10-25T01:00:00,+00:00,GMT +2010-03-28T01:00:00,+01:00,IST +2010-10-31T01:00:00,+00:00,GMT +2011-03-27T01:00:00,+01:00,IST +2011-10-30T01:00:00,+00:00,GMT +2012-03-25T01:00:00,+01:00,IST +2012-10-28T01:00:00,+00:00,GMT +2013-03-31T01:00:00,+01:00,IST +2013-10-27T01:00:00,+00:00,GMT +2014-03-30T01:00:00,+01:00,IST +2014-10-26T01:00:00,+00:00,GMT +2015-03-29T01:00:00,+01:00,IST +2015-10-25T01:00:00,+00:00,GMT +2016-03-27T01:00:00,+01:00,IST +2016-10-30T01:00:00,+00:00,GMT +2017-03-26T01:00:00,+01:00,IST +2017-10-29T01:00:00,+00:00,GMT +2018-03-25T01:00:00,+01:00,IST +2018-10-28T01:00:00,+00:00,GMT +2019-03-31T01:00:00,+01:00,IST +2019-10-27T01:00:00,+00:00,GMT +2020-03-29T01:00:00,+01:00,IST +2020-10-25T01:00:00,+00:00,GMT +2021-03-28T01:00:00,+01:00,IST +2021-10-31T01:00:00,+00:00,GMT +2022-03-27T01:00:00,+01:00,IST +2022-10-30T01:00:00,+00:00,GMT +2023-03-26T01:00:00,+01:00,IST +2023-10-29T01:00:00,+00:00,GMT +2024-03-31T01:00:00,+01:00,IST +2024-10-27T01:00:00,+00:00,GMT +2025-03-30T01:00:00,+01:00,IST +2025-10-26T01:00:00,+00:00,GMT +2026-03-29T01:00:00,+01:00,IST +2026-10-25T01:00:00,+00:00,GMT +2027-03-28T01:00:00,+01:00,IST +2027-10-31T01:00:00,+00:00,GMT +2028-03-26T01:00:00,+01:00,IST +2028-10-29T01:00:00,+00:00,GMT +2029-03-25T01:00:00,+01:00,IST +2029-10-28T01:00:00,+00:00,GMT +2030-03-31T01:00:00,+01:00,IST +2030-10-27T01:00:00,+00:00,GMT +2031-03-30T01:00:00,+01:00,IST +2031-10-26T01:00:00,+00:00,GMT +2032-03-28T01:00:00,+01:00,IST +2032-10-31T01:00:00,+00:00,GMT +2033-03-27T01:00:00,+01:00,IST +2033-10-30T01:00:00,+00:00,GMT +2034-03-26T01:00:00,+01:00,IST +2034-10-29T01:00:00,+00:00,GMT +2035-03-25T01:00:00,+01:00,IST +2035-10-28T01:00:00,+00:00,GMT +2036-03-30T01:00:00,+01:00,IST +2036-10-26T01:00:00,+00:00,GMT +2037-03-29T01:00:00,+01:00,IST +2037-10-25T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/est.txt b/desk/gub/lib/pytz/est.txt new file mode 100644 index 0000000..069fd8c --- /dev/null +++ b/desk/gub/lib/pytz/est.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:40,CMT +1908-04-22T05:19:36,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/est5edt.txt b/desk/gub/lib/pytz/est5edt.txt new file mode 100644 index 0000000..7921b85 --- /dev/null +++ b/desk/gub/lib/pytz/est5edt.txt @@ -0,0 +1,237 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1918-03-31T07:00:00,-04:00,EDT +1918-10-27T06:00:00,-05:00,EST +1919-03-30T07:00:00,-04:00,EDT +1919-10-26T06:00:00,-05:00,EST +1920-03-28T07:00:00,-04:00,EDT +1920-10-31T06:00:00,-05:00,EST +1921-04-24T07:00:00,-04:00,EDT +1921-09-25T06:00:00,-05:00,EST +1922-04-30T07:00:00,-04:00,EDT +1922-09-24T06:00:00,-05:00,EST +1923-04-29T07:00:00,-04:00,EDT +1923-09-30T06:00:00,-05:00,EST +1924-04-27T07:00:00,-04:00,EDT +1924-09-28T06:00:00,-05:00,EST +1925-04-26T07:00:00,-04:00,EDT +1925-09-27T06:00:00,-05:00,EST +1926-04-25T07:00:00,-04:00,EDT +1926-09-26T06:00:00,-05:00,EST +1927-04-24T07:00:00,-04:00,EDT +1927-09-25T06:00:00,-05:00,EST +1928-04-29T07:00:00,-04:00,EDT +1928-09-30T06:00:00,-05:00,EST +1929-04-28T07:00:00,-04:00,EDT +1929-09-29T06:00:00,-05:00,EST +1930-04-27T07:00:00,-04:00,EDT +1930-09-28T06:00:00,-05:00,EST +1931-04-26T07:00:00,-04:00,EDT +1931-09-27T06:00:00,-05:00,EST +1932-04-24T07:00:00,-04:00,EDT +1932-09-25T06:00:00,-05:00,EST +1933-04-30T07:00:00,-04:00,EDT +1933-09-24T06:00:00,-05:00,EST +1934-04-29T07:00:00,-04:00,EDT +1934-09-30T06:00:00,-05:00,EST +1935-04-28T07:00:00,-04:00,EDT +1935-09-29T06:00:00,-05:00,EST +1936-04-26T07:00:00,-04:00,EDT +1936-09-27T06:00:00,-05:00,EST +1937-04-25T07:00:00,-04:00,EDT +1937-09-26T06:00:00,-05:00,EST +1938-04-24T07:00:00,-04:00,EDT +1938-09-25T06:00:00,-05:00,EST +1939-04-30T07:00:00,-04:00,EDT +1939-09-24T06:00:00,-05:00,EST +1940-04-28T07:00:00,-04:00,EDT +1940-09-29T06:00:00,-05:00,EST +1941-04-27T07:00:00,-04:00,EDT +1941-09-28T06:00:00,-05:00,EST +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1946-04-28T07:00:00,-04:00,EDT +1946-09-29T06:00:00,-05:00,EST +1947-04-27T07:00:00,-04:00,EDT +1947-09-28T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1949-04-24T07:00:00,-04:00,EDT +1949-09-25T06:00:00,-05:00,EST +1950-04-30T07:00:00,-04:00,EDT +1950-09-24T06:00:00,-05:00,EST +1951-04-29T07:00:00,-04:00,EDT +1951-09-30T06:00:00,-05:00,EST +1952-04-27T07:00:00,-04:00,EDT +1952-09-28T06:00:00,-05:00,EST +1953-04-26T07:00:00,-04:00,EDT +1953-09-27T06:00:00,-05:00,EST +1954-04-25T07:00:00,-04:00,EDT +1954-09-26T06:00:00,-05:00,EST +1955-04-24T07:00:00,-04:00,EDT +1955-10-30T06:00:00,-05:00,EST +1956-04-29T07:00:00,-04:00,EDT +1956-10-28T06:00:00,-05:00,EST +1957-04-28T07:00:00,-04:00,EDT +1957-10-27T06:00:00,-05:00,EST +1958-04-27T07:00:00,-04:00,EDT +1958-10-26T06:00:00,-05:00,EST +1959-04-26T07:00:00,-04:00,EDT +1959-10-25T06:00:00,-05:00,EST +1960-04-24T07:00:00,-04:00,EDT +1960-10-30T06:00:00,-05:00,EST +1961-04-30T07:00:00,-04:00,EDT +1961-10-29T06:00:00,-05:00,EST +1962-04-29T07:00:00,-04:00,EDT +1962-10-28T06:00:00,-05:00,EST +1963-04-28T07:00:00,-04:00,EDT +1963-10-27T06:00:00,-05:00,EST +1964-04-26T07:00:00,-04:00,EDT +1964-10-25T06:00:00,-05:00,EST +1965-04-25T07:00:00,-04:00,EDT +1965-10-31T06:00:00,-05:00,EST +1966-04-24T07:00:00,-04:00,EDT +1966-10-30T06:00:00,-05:00,EST +1967-04-30T07:00:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-01-06T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-02-23T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--0.txt b/desk/gub/lib/pytz/etc-gmt--0.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--0.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--1.txt b/desk/gub/lib/pytz/etc-gmt--1.txt new file mode 100644 index 0000000..69b9dc5 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--1.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-01:00,-01 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--10.txt b/desk/gub/lib/pytz/etc-gmt--10.txt new file mode 100644 index 0000000..91d7b85 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--10.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-10:00,-10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--11.txt b/desk/gub/lib/pytz/etc-gmt--11.txt new file mode 100644 index 0000000..b9b07aa --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--11.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-11:00,-11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--12.txt b/desk/gub/lib/pytz/etc-gmt--12.txt new file mode 100644 index 0000000..8a9a2c6 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--12.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-12:00,-12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--2.txt b/desk/gub/lib/pytz/etc-gmt--2.txt new file mode 100644 index 0000000..ef3ffb5 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--2.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-02:00,-02 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--3.txt b/desk/gub/lib/pytz/etc-gmt--3.txt new file mode 100644 index 0000000..505e76d --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--3.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-03:00,-03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--4.txt b/desk/gub/lib/pytz/etc-gmt--4.txt new file mode 100644 index 0000000..4ef8667 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--4.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-04:00,-04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--5.txt b/desk/gub/lib/pytz/etc-gmt--5.txt new file mode 100644 index 0000000..371db49 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--5.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--6.txt b/desk/gub/lib/pytz/etc-gmt--6.txt new file mode 100644 index 0000000..71e8fd7 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--6.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-06:00,-06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--7.txt b/desk/gub/lib/pytz/etc-gmt--7.txt new file mode 100644 index 0000000..2778d42 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--7.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-07:00,-07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--8.txt b/desk/gub/lib/pytz/etc-gmt--8.txt new file mode 100644 index 0000000..37289ab --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--8.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-08:00,-08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt--9.txt b/desk/gub/lib/pytz/etc-gmt--9.txt new file mode 100644 index 0000000..9894570 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt--9.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,-09:00,-09 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-0.txt b/desk/gub/lib/pytz/etc-gmt-0.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-0.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-1.txt b/desk/gub/lib/pytz/etc-gmt-1.txt new file mode 100644 index 0000000..64e1fd6 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-1.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:00,+01 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-10.txt b/desk/gub/lib/pytz/etc-gmt-10.txt new file mode 100644 index 0000000..321a1c7 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-10.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:00,+10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-11.txt b/desk/gub/lib/pytz/etc-gmt-11.txt new file mode 100644 index 0000000..20551f1 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-11.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-12.txt b/desk/gub/lib/pytz/etc-gmt-12.txt new file mode 100644 index 0000000..63fde20 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-12.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-13.txt b/desk/gub/lib/pytz/etc-gmt-13.txt new file mode 100644 index 0000000..9e1f972 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-13.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+13:00,+13 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-14.txt b/desk/gub/lib/pytz/etc-gmt-14.txt new file mode 100644 index 0000000..d01d6a0 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-14.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+14:00,+14 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-2.txt b/desk/gub/lib/pytz/etc-gmt-2.txt new file mode 100644 index 0000000..e9ad0ff --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-2.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:00,+02 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-3.txt b/desk/gub/lib/pytz/etc-gmt-3.txt new file mode 100644 index 0000000..b651ec2 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-3.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-4.txt b/desk/gub/lib/pytz/etc-gmt-4.txt new file mode 100644 index 0000000..ca62028 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-4.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-5.txt b/desk/gub/lib/pytz/etc-gmt-5.txt new file mode 100644 index 0000000..bf42b51 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-5.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-6.txt b/desk/gub/lib/pytz/etc-gmt-6.txt new file mode 100644 index 0000000..d70de34 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-6.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-7.txt b/desk/gub/lib/pytz/etc-gmt-7.txt new file mode 100644 index 0000000..8759fb2 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-7.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-8.txt b/desk/gub/lib/pytz/etc-gmt-8.txt new file mode 100644 index 0000000..86ab5c7 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-8.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt-9.txt b/desk/gub/lib/pytz/etc-gmt-9.txt new file mode 100644 index 0000000..6830672 --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt-9.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:00,+09 \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt.txt b/desk/gub/lib/pytz/etc-gmt.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-gmt0.txt b/desk/gub/lib/pytz/etc-gmt0.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/etc-gmt0.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-greenwich.txt b/desk/gub/lib/pytz/etc-greenwich.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/etc-greenwich.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-uct.txt b/desk/gub/lib/pytz/etc-uct.txt new file mode 100644 index 0000000..69cda9e --- /dev/null +++ b/desk/gub/lib/pytz/etc-uct.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,UTC \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-universal.txt b/desk/gub/lib/pytz/etc-universal.txt new file mode 100644 index 0000000..69cda9e --- /dev/null +++ b/desk/gub/lib/pytz/etc-universal.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,UTC \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-utc.txt b/desk/gub/lib/pytz/etc-utc.txt new file mode 100644 index 0000000..69cda9e --- /dev/null +++ b/desk/gub/lib/pytz/etc-utc.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,UTC \ No newline at end of file diff --git a/desk/gub/lib/pytz/etc-zulu.txt b/desk/gub/lib/pytz/etc-zulu.txt new file mode 100644 index 0000000..69cda9e --- /dev/null +++ b/desk/gub/lib/pytz/etc-zulu.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,UTC \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-amsterdam.txt b/desk/gub/lib/pytz/europe-amsterdam.txt new file mode 100644 index 0000000..84f817c --- /dev/null +++ b/desk/gub/lib/pytz/europe-amsterdam.txt @@ -0,0 +1,186 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:18,LMT +1901-12-13T20:45:52,+00:00,WET +1914-11-08T00:00:00,+01:00,CET +1916-04-30T23:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1918-11-11T11:00:00,+00:00,WET +1919-03-01T23:00:00,+01:00,WEST +1919-10-04T23:00:00,+00:00,WET +1920-02-14T23:00:00,+01:00,WEST +1920-10-23T23:00:00,+00:00,WET +1921-03-14T23:00:00,+01:00,WEST +1921-10-25T23:00:00,+00:00,WET +1922-03-25T23:00:00,+01:00,WEST +1922-10-07T23:00:00,+00:00,WET +1923-04-21T23:00:00,+01:00,WEST +1923-10-06T23:00:00,+00:00,WET +1924-03-29T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1925-04-04T23:00:00,+01:00,WEST +1925-10-03T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-07T02:00:00,+00:00,WET +1929-04-21T02:00:00,+01:00,WEST +1929-10-06T02:00:00,+00:00,WET +1930-04-13T02:00:00,+01:00,WEST +1930-10-05T02:00:00,+00:00,WET +1931-04-19T02:00:00,+01:00,WEST +1931-10-04T02:00:00,+00:00,WET +1932-04-03T02:00:00,+01:00,WEST +1932-10-02T02:00:00,+00:00,WET +1933-03-26T02:00:00,+01:00,WEST +1933-10-08T02:00:00,+00:00,WET +1934-04-08T02:00:00,+01:00,WEST +1934-10-07T02:00:00,+00:00,WET +1935-03-31T02:00:00,+01:00,WEST +1935-10-06T02:00:00,+00:00,WET +1936-04-19T02:00:00,+01:00,WEST +1936-10-04T02:00:00,+00:00,WET +1937-04-04T02:00:00,+01:00,WEST +1937-10-03T02:00:00,+00:00,WET +1938-03-27T02:00:00,+01:00,WEST +1938-10-02T02:00:00,+00:00,WET +1939-04-16T02:00:00,+01:00,WEST +1939-11-19T02:00:00,+00:00,WET +1940-02-25T02:00:00,+01:00,WEST +1940-05-20T02:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-09-17T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1946-05-19T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1977-04-03T01:00:00,+02:00,CEST +1977-09-25T01:00:00,+01:00,CET +1978-04-02T01:00:00,+02:00,CEST +1978-10-01T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-andorra.txt b/desk/gub/lib/pytz/europe-andorra.txt new file mode 100644 index 0000000..fdd69a4 --- /dev/null +++ b/desk/gub/lib/pytz/europe-andorra.txt @@ -0,0 +1,110 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:06,LMT +1901-12-13T20:45:52,+00:00,WET +1946-09-30T00:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-astrakhan.txt b/desk/gub/lib/pytz/europe-astrakhan.txt new file mode 100644 index 0000000..f05efa0 --- /dev/null +++ b/desk/gub/lib/pytz/europe-astrakhan.txt @@ -0,0 +1,66 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:12,LMT +1924-04-30T20:47:48,+03:00,+03 +1930-06-20T21:00:00,+04:00,+04 +1981-03-31T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+04:00,+04 +1982-03-31T20:00:00,+05:00,+05 +1982-09-30T19:00:00,+04:00,+04 +1983-03-31T20:00:00,+05:00,+05 +1983-09-30T19:00:00,+04:00,+04 +1984-03-31T20:00:00,+05:00,+05 +1984-09-29T22:00:00,+04:00,+04 +1985-03-30T22:00:00,+05:00,+05 +1985-09-28T22:00:00,+04:00,+04 +1986-03-29T22:00:00,+05:00,+05 +1986-09-27T22:00:00,+04:00,+04 +1987-03-28T22:00:00,+05:00,+05 +1987-09-26T22:00:00,+04:00,+04 +1988-03-26T22:00:00,+05:00,+05 +1988-09-24T22:00:00,+04:00,+04 +1989-03-25T22:00:00,+04:00,+04 +1989-09-23T23:00:00,+03:00,+03 +1990-03-24T23:00:00,+04:00,+04 +1990-09-29T23:00:00,+03:00,+03 +1991-03-30T23:00:00,+04:00,+04 +1992-03-28T22:00:00,+04:00,+04 +1992-09-26T23:00:00,+03:00,+03 +1993-03-27T23:00:00,+04:00,+04 +1993-09-25T23:00:00,+03:00,+03 +1994-03-26T23:00:00,+04:00,+04 +1994-09-24T23:00:00,+03:00,+03 +1995-03-25T23:00:00,+04:00,+04 +1995-09-23T23:00:00,+03:00,+03 +1996-03-30T23:00:00,+04:00,+04 +1996-10-26T23:00:00,+03:00,+03 +1997-03-29T23:00:00,+04:00,+04 +1997-10-25T23:00:00,+03:00,+03 +1998-03-28T23:00:00,+04:00,+04 +1998-10-24T23:00:00,+03:00,+03 +1999-03-27T23:00:00,+04:00,+04 +1999-10-30T23:00:00,+03:00,+03 +2000-03-25T23:00:00,+04:00,+04 +2000-10-28T23:00:00,+03:00,+03 +2001-03-24T23:00:00,+04:00,+04 +2001-10-27T23:00:00,+03:00,+03 +2002-03-30T23:00:00,+04:00,+04 +2002-10-26T23:00:00,+03:00,+03 +2003-03-29T23:00:00,+04:00,+04 +2003-10-25T23:00:00,+03:00,+03 +2004-03-27T23:00:00,+04:00,+04 +2004-10-30T23:00:00,+03:00,+03 +2005-03-26T23:00:00,+04:00,+04 +2005-10-29T23:00:00,+03:00,+03 +2006-03-25T23:00:00,+04:00,+04 +2006-10-28T23:00:00,+03:00,+03 +2007-03-24T23:00:00,+04:00,+04 +2007-10-27T23:00:00,+03:00,+03 +2008-03-29T23:00:00,+04:00,+04 +2008-10-25T23:00:00,+03:00,+03 +2009-03-28T23:00:00,+04:00,+04 +2009-10-24T23:00:00,+03:00,+03 +2010-03-27T23:00:00,+04:00,+04 +2010-10-30T23:00:00,+03:00,+03 +2011-03-26T23:00:00,+04:00,+04 +2014-10-25T22:00:00,+03:00,+03 +2016-03-26T23:00:00,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-athens.txt b/desk/gub/lib/pytz/europe-athens.txt new file mode 100644 index 0000000..a621fe4 --- /dev/null +++ b/desk/gub/lib/pytz/europe-athens.txt @@ -0,0 +1,140 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:35,LMT +1901-12-13T20:45:52,+01:35,AMT +1916-07-27T22:26:08,+02:00,EET +1932-07-06T22:00:00,+03:00,EEST +1932-08-31T21:00:00,+02:00,EET +1941-04-06T22:00:00,+03:00,EEST +1941-04-29T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T23:00:00,+02:00,CEST +1943-10-03T22:00:00,+01:00,CET +1944-04-03T23:00:00,+02:00,EET +1952-06-30T22:00:00,+03:00,EEST +1952-11-01T21:00:00,+02:00,EET +1975-04-11T22:00:00,+03:00,EEST +1975-11-25T22:00:00,+02:00,EET +1976-04-11T00:00:00,+03:00,EEST +1976-10-10T00:00:00,+02:00,EET +1977-04-03T00:00:00,+03:00,EEST +1977-09-26T00:00:00,+02:00,EET +1978-04-02T00:00:00,+03:00,EEST +1978-09-24T01:00:00,+02:00,EET +1979-04-01T07:00:00,+03:00,EEST +1979-09-28T23:00:00,+02:00,EET +1980-03-31T22:00:00,+03:00,EEST +1980-09-27T21:00:00,+02:00,EET +1981-03-29T01:00:00,+03:00,EEST +1981-09-27T01:00:00,+02:00,EET +1982-03-28T01:00:00,+03:00,EEST +1982-09-26T01:00:00,+02:00,EET +1983-03-27T01:00:00,+03:00,EEST +1983-09-25T01:00:00,+02:00,EET +1984-03-25T01:00:00,+03:00,EEST +1984-09-30T01:00:00,+02:00,EET +1985-03-31T01:00:00,+03:00,EEST +1985-09-29T01:00:00,+02:00,EET +1986-03-30T01:00:00,+03:00,EEST +1986-09-28T01:00:00,+02:00,EET +1987-03-29T01:00:00,+03:00,EEST +1987-09-27T01:00:00,+02:00,EET +1988-03-27T01:00:00,+03:00,EEST +1988-09-25T01:00:00,+02:00,EET +1989-03-26T01:00:00,+03:00,EEST +1989-09-24T01:00:00,+02:00,EET +1990-03-25T01:00:00,+03:00,EEST +1990-09-30T01:00:00,+02:00,EET +1991-03-31T01:00:00,+03:00,EEST +1991-09-29T01:00:00,+02:00,EET +1992-03-29T01:00:00,+03:00,EEST +1992-09-27T01:00:00,+02:00,EET +1993-03-28T01:00:00,+03:00,EEST +1993-09-26T01:00:00,+02:00,EET +1994-03-27T01:00:00,+03:00,EEST +1994-09-25T01:00:00,+02:00,EET +1995-03-26T01:00:00,+03:00,EEST +1995-09-24T01:00:00,+02:00,EET +1996-03-31T01:00:00,+03:00,EEST +1996-10-27T01:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-belfast.txt b/desk/gub/lib/pytz/europe-belfast.txt new file mode 100644 index 0000000..a0614b8 --- /dev/null +++ b/desk/gub/lib/pytz/europe-belfast.txt @@ -0,0 +1,243 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,GMT +1916-05-21T02:00:00,+01:00,BST +1916-10-01T02:00:00,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,BST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,BST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,BST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,BST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,BST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,BST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,BST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,BST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,BST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,BST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,BST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,BST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,BST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,BST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,BST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,BST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,BST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,BST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,BST +1941-05-04T01:00:00,+02:00,BDST +1941-08-10T01:00:00,+01:00,BST +1942-04-05T01:00:00,+02:00,BDST +1942-08-09T01:00:00,+01:00,BST +1943-04-04T01:00:00,+02:00,BDST +1943-08-15T01:00:00,+01:00,BST +1944-04-02T01:00:00,+02:00,BDST +1944-09-17T01:00:00,+01:00,BST +1945-04-02T01:00:00,+02:00,BDST +1945-07-15T01:00:00,+01:00,BST +1945-10-07T02:00:00,+00:00,GMT +1946-04-14T02:00:00,+01:00,BST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,BST +1947-04-13T01:00:00,+02:00,BDST +1947-08-10T01:00:00,+01:00,BST +1947-11-02T02:00:00,+00:00,GMT +1948-03-14T02:00:00,+01:00,BST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,BST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,BST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,BST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,BST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,BST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,BST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,BST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,BST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,BST +1957-10-06T02:00:00,+00:00,GMT +1958-04-20T02:00:00,+01:00,BST +1958-10-05T02:00:00,+00:00,GMT +1959-04-19T02:00:00,+01:00,BST +1959-10-04T02:00:00,+00:00,GMT +1960-04-10T02:00:00,+01:00,BST +1960-10-02T02:00:00,+00:00,GMT +1961-03-26T02:00:00,+01:00,BST +1961-10-29T02:00:00,+00:00,GMT +1962-03-25T02:00:00,+01:00,BST +1962-10-28T02:00:00,+00:00,GMT +1963-03-31T02:00:00,+01:00,BST +1963-10-27T02:00:00,+00:00,GMT +1964-03-22T02:00:00,+01:00,BST +1964-10-25T02:00:00,+00:00,GMT +1965-03-21T02:00:00,+01:00,BST +1965-10-24T02:00:00,+00:00,GMT +1966-03-20T02:00:00,+01:00,BST +1966-10-23T02:00:00,+00:00,GMT +1967-03-19T02:00:00,+01:00,BST +1967-10-29T02:00:00,+00:00,GMT +1968-02-18T02:00:00,+01:00,BST +1968-10-26T23:00:00,+01:00,BST +1971-10-31T02:00:00,+00:00,GMT +1972-03-19T02:00:00,+01:00,BST +1972-10-29T02:00:00,+00:00,GMT +1973-03-18T02:00:00,+01:00,BST +1973-10-28T02:00:00,+00:00,GMT +1974-03-17T02:00:00,+01:00,BST +1974-10-27T02:00:00,+00:00,GMT +1975-03-16T02:00:00,+01:00,BST +1975-10-26T02:00:00,+00:00,GMT +1976-03-21T02:00:00,+01:00,BST +1976-10-24T02:00:00,+00:00,GMT +1977-03-20T02:00:00,+01:00,BST +1977-10-23T02:00:00,+00:00,GMT +1978-03-19T02:00:00,+01:00,BST +1978-10-29T02:00:00,+00:00,GMT +1979-03-18T02:00:00,+01:00,BST +1979-10-28T02:00:00,+00:00,GMT +1980-03-16T02:00:00,+01:00,BST +1980-10-26T02:00:00,+00:00,GMT +1981-03-29T01:00:00,+01:00,BST +1981-10-25T01:00:00,+00:00,GMT +1982-03-28T01:00:00,+01:00,BST +1982-10-24T01:00:00,+00:00,GMT +1983-03-27T01:00:00,+01:00,BST +1983-10-23T01:00:00,+00:00,GMT +1984-03-25T01:00:00,+01:00,BST +1984-10-28T01:00:00,+00:00,GMT +1985-03-31T01:00:00,+01:00,BST +1985-10-27T01:00:00,+00:00,GMT +1986-03-30T01:00:00,+01:00,BST +1986-10-26T01:00:00,+00:00,GMT +1987-03-29T01:00:00,+01:00,BST +1987-10-25T01:00:00,+00:00,GMT +1988-03-27T01:00:00,+01:00,BST +1988-10-23T01:00:00,+00:00,GMT +1989-03-26T01:00:00,+01:00,BST +1989-10-29T01:00:00,+00:00,GMT +1990-03-25T01:00:00,+01:00,BST +1990-10-28T01:00:00,+00:00,GMT +1991-03-31T01:00:00,+01:00,BST +1991-10-27T01:00:00,+00:00,GMT +1992-03-29T01:00:00,+01:00,BST +1992-10-25T01:00:00,+00:00,GMT +1993-03-28T01:00:00,+01:00,BST +1993-10-24T01:00:00,+00:00,GMT +1994-03-27T01:00:00,+01:00,BST +1994-10-23T01:00:00,+00:00,GMT +1995-03-26T01:00:00,+01:00,BST +1995-10-22T01:00:00,+00:00,GMT +1996-03-31T01:00:00,+01:00,BST +1996-10-27T01:00:00,+00:00,GMT +1997-03-30T01:00:00,+01:00,BST +1997-10-26T01:00:00,+00:00,GMT +1998-03-29T01:00:00,+01:00,BST +1998-10-25T01:00:00,+00:00,GMT +1999-03-28T01:00:00,+01:00,BST +1999-10-31T01:00:00,+00:00,GMT +2000-03-26T01:00:00,+01:00,BST +2000-10-29T01:00:00,+00:00,GMT +2001-03-25T01:00:00,+01:00,BST +2001-10-28T01:00:00,+00:00,GMT +2002-03-31T01:00:00,+01:00,BST +2002-10-27T01:00:00,+00:00,GMT +2003-03-30T01:00:00,+01:00,BST +2003-10-26T01:00:00,+00:00,GMT +2004-03-28T01:00:00,+01:00,BST +2004-10-31T01:00:00,+00:00,GMT +2005-03-27T01:00:00,+01:00,BST +2005-10-30T01:00:00,+00:00,GMT +2006-03-26T01:00:00,+01:00,BST +2006-10-29T01:00:00,+00:00,GMT +2007-03-25T01:00:00,+01:00,BST +2007-10-28T01:00:00,+00:00,GMT +2008-03-30T01:00:00,+01:00,BST +2008-10-26T01:00:00,+00:00,GMT +2009-03-29T01:00:00,+01:00,BST +2009-10-25T01:00:00,+00:00,GMT +2010-03-28T01:00:00,+01:00,BST +2010-10-31T01:00:00,+00:00,GMT +2011-03-27T01:00:00,+01:00,BST +2011-10-30T01:00:00,+00:00,GMT +2012-03-25T01:00:00,+01:00,BST +2012-10-28T01:00:00,+00:00,GMT +2013-03-31T01:00:00,+01:00,BST +2013-10-27T01:00:00,+00:00,GMT +2014-03-30T01:00:00,+01:00,BST +2014-10-26T01:00:00,+00:00,GMT +2015-03-29T01:00:00,+01:00,BST +2015-10-25T01:00:00,+00:00,GMT +2016-03-27T01:00:00,+01:00,BST +2016-10-30T01:00:00,+00:00,GMT +2017-03-26T01:00:00,+01:00,BST +2017-10-29T01:00:00,+00:00,GMT +2018-03-25T01:00:00,+01:00,BST +2018-10-28T01:00:00,+00:00,GMT +2019-03-31T01:00:00,+01:00,BST +2019-10-27T01:00:00,+00:00,GMT +2020-03-29T01:00:00,+01:00,BST +2020-10-25T01:00:00,+00:00,GMT +2021-03-28T01:00:00,+01:00,BST +2021-10-31T01:00:00,+00:00,GMT +2022-03-27T01:00:00,+01:00,BST +2022-10-30T01:00:00,+00:00,GMT +2023-03-26T01:00:00,+01:00,BST +2023-10-29T01:00:00,+00:00,GMT +2024-03-31T01:00:00,+01:00,BST +2024-10-27T01:00:00,+00:00,GMT +2025-03-30T01:00:00,+01:00,BST +2025-10-26T01:00:00,+00:00,GMT +2026-03-29T01:00:00,+01:00,BST +2026-10-25T01:00:00,+00:00,GMT +2027-03-28T01:00:00,+01:00,BST +2027-10-31T01:00:00,+00:00,GMT +2028-03-26T01:00:00,+01:00,BST +2028-10-29T01:00:00,+00:00,GMT +2029-03-25T01:00:00,+01:00,BST +2029-10-28T01:00:00,+00:00,GMT +2030-03-31T01:00:00,+01:00,BST +2030-10-27T01:00:00,+00:00,GMT +2031-03-30T01:00:00,+01:00,BST +2031-10-26T01:00:00,+00:00,GMT +2032-03-28T01:00:00,+01:00,BST +2032-10-31T01:00:00,+00:00,GMT +2033-03-27T01:00:00,+01:00,BST +2033-10-30T01:00:00,+00:00,GMT +2034-03-26T01:00:00,+01:00,BST +2034-10-29T01:00:00,+00:00,GMT +2035-03-25T01:00:00,+01:00,BST +2035-10-28T01:00:00,+00:00,GMT +2036-03-30T01:00:00,+01:00,BST +2036-10-26T01:00:00,+00:00,GMT +2037-03-29T01:00:00,+01:00,BST +2037-10-25T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-belgrade.txt b/desk/gub/lib/pytz/europe-belgrade.txt new file mode 100644 index 0000000..1692b4c --- /dev/null +++ b/desk/gub/lib/pytz/europe-belgrade.txt @@ -0,0 +1,121 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:22,LMT +1901-12-13T20:45:52,+01:00,CET +1941-04-18T22:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-05-08T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-berlin.txt b/desk/gub/lib/pytz/europe-berlin.txt new file mode 100644 index 0000000..56ab2cd --- /dev/null +++ b/desk/gub/lib/pytz/europe-berlin.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:53,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-05-24T00:00:00,+03:00,CEMT +1945-09-24T00:00:00,+02:00,CEST +1945-11-18T01:00:00,+01:00,CET +1946-04-14T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1947-04-06T02:00:00,+02:00,CEST +1947-05-11T01:00:00,+03:00,CEMT +1947-06-29T00:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-10T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-bratislava.txt b/desk/gub/lib/pytz/europe-bratislava.txt new file mode 100644 index 0000000..04a2e38 --- /dev/null +++ b/desk/gub/lib/pytz/europe-bratislava.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:58,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-10-01T01:00:00,+01:00,CET +1946-05-06T01:00:00,+02:00,CEST +1946-10-06T01:00:00,+01:00,CET +1946-12-01T02:00:00,+00:00,GMT +1947-02-23T02:00:00,+01:00,CET +1947-04-20T01:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-09T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-brussels.txt b/desk/gub/lib/pytz/europe-brussels.txt new file mode 100644 index 0000000..84f817c --- /dev/null +++ b/desk/gub/lib/pytz/europe-brussels.txt @@ -0,0 +1,186 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:18,LMT +1901-12-13T20:45:52,+00:00,WET +1914-11-08T00:00:00,+01:00,CET +1916-04-30T23:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1918-11-11T11:00:00,+00:00,WET +1919-03-01T23:00:00,+01:00,WEST +1919-10-04T23:00:00,+00:00,WET +1920-02-14T23:00:00,+01:00,WEST +1920-10-23T23:00:00,+00:00,WET +1921-03-14T23:00:00,+01:00,WEST +1921-10-25T23:00:00,+00:00,WET +1922-03-25T23:00:00,+01:00,WEST +1922-10-07T23:00:00,+00:00,WET +1923-04-21T23:00:00,+01:00,WEST +1923-10-06T23:00:00,+00:00,WET +1924-03-29T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1925-04-04T23:00:00,+01:00,WEST +1925-10-03T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-07T02:00:00,+00:00,WET +1929-04-21T02:00:00,+01:00,WEST +1929-10-06T02:00:00,+00:00,WET +1930-04-13T02:00:00,+01:00,WEST +1930-10-05T02:00:00,+00:00,WET +1931-04-19T02:00:00,+01:00,WEST +1931-10-04T02:00:00,+00:00,WET +1932-04-03T02:00:00,+01:00,WEST +1932-10-02T02:00:00,+00:00,WET +1933-03-26T02:00:00,+01:00,WEST +1933-10-08T02:00:00,+00:00,WET +1934-04-08T02:00:00,+01:00,WEST +1934-10-07T02:00:00,+00:00,WET +1935-03-31T02:00:00,+01:00,WEST +1935-10-06T02:00:00,+00:00,WET +1936-04-19T02:00:00,+01:00,WEST +1936-10-04T02:00:00,+00:00,WET +1937-04-04T02:00:00,+01:00,WEST +1937-10-03T02:00:00,+00:00,WET +1938-03-27T02:00:00,+01:00,WEST +1938-10-02T02:00:00,+00:00,WET +1939-04-16T02:00:00,+01:00,WEST +1939-11-19T02:00:00,+00:00,WET +1940-02-25T02:00:00,+01:00,WEST +1940-05-20T02:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-09-17T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1946-05-19T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1977-04-03T01:00:00,+02:00,CEST +1977-09-25T01:00:00,+01:00,CET +1978-04-02T01:00:00,+02:00,CEST +1978-10-01T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-bucharest.txt b/desk/gub/lib/pytz/europe-bucharest.txt new file mode 100644 index 0000000..da73e5d --- /dev/null +++ b/desk/gub/lib/pytz/europe-bucharest.txt @@ -0,0 +1,138 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:44,LMT +1901-12-13T20:45:52,+01:44,BMT +1931-07-23T22:15:36,+02:00,EET +1932-05-20T22:00:00,+03:00,EEST +1932-10-01T22:00:00,+02:00,EET +1933-04-01T22:00:00,+03:00,EEST +1933-09-30T22:00:00,+02:00,EET +1934-04-07T22:00:00,+03:00,EEST +1934-10-06T22:00:00,+02:00,EET +1935-04-06T22:00:00,+03:00,EEST +1935-10-05T22:00:00,+02:00,EET +1936-04-04T22:00:00,+03:00,EEST +1936-10-03T22:00:00,+02:00,EET +1937-04-03T22:00:00,+03:00,EEST +1937-10-02T22:00:00,+02:00,EET +1938-04-02T22:00:00,+03:00,EEST +1938-10-01T22:00:00,+02:00,EET +1939-04-01T22:00:00,+03:00,EEST +1939-09-30T22:00:00,+02:00,EET +1979-05-26T22:00:00,+03:00,EEST +1979-09-29T21:00:00,+02:00,EET +1980-04-05T21:00:00,+03:00,EEST +1980-09-27T22:00:00,+02:00,EET +1981-03-29T00:00:00,+03:00,EEST +1981-09-27T00:00:00,+02:00,EET +1982-03-28T00:00:00,+03:00,EEST +1982-09-26T00:00:00,+02:00,EET +1983-03-27T00:00:00,+03:00,EEST +1983-09-25T00:00:00,+02:00,EET +1984-03-25T00:00:00,+03:00,EEST +1984-09-30T00:00:00,+02:00,EET +1985-03-31T00:00:00,+03:00,EEST +1985-09-29T00:00:00,+02:00,EET +1986-03-30T00:00:00,+03:00,EEST +1986-09-28T00:00:00,+02:00,EET +1987-03-29T00:00:00,+03:00,EEST +1987-09-27T00:00:00,+02:00,EET +1988-03-27T00:00:00,+03:00,EEST +1988-09-25T00:00:00,+02:00,EET +1989-03-26T00:00:00,+03:00,EEST +1989-09-24T00:00:00,+02:00,EET +1990-03-25T00:00:00,+03:00,EEST +1990-09-30T00:00:00,+02:00,EET +1991-03-30T22:00:00,+03:00,EEST +1991-09-28T22:00:00,+02:00,EET +1992-03-28T22:00:00,+03:00,EEST +1992-09-26T22:00:00,+02:00,EET +1993-03-27T22:00:00,+03:00,EEST +1993-09-25T22:00:00,+02:00,EET +1994-03-26T22:00:00,+03:00,EEST +1994-09-24T21:00:00,+02:00,EET +1995-03-25T22:00:00,+03:00,EEST +1995-09-23T21:00:00,+02:00,EET +1996-03-30T22:00:00,+03:00,EEST +1996-10-26T21:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-budapest.txt b/desk/gub/lib/pytz/europe-budapest.txt new file mode 100644 index 0000000..e1c863e --- /dev/null +++ b/desk/gub/lib/pytz/europe-budapest.txt @@ -0,0 +1,153 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:16,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1919-04-15T01:00:00,+02:00,CEST +1919-09-15T01:00:00,+01:00,CET +1920-04-05T01:00:00,+02:00,CEST +1920-09-20T01:00:00,+01:00,CET +1941-04-07T22:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-05-01T22:00:00,+02:00,CEST +1945-10-31T23:00:00,+01:00,CET +1946-03-31T01:00:00,+02:00,CEST +1946-10-07T00:00:00,+01:00,CET +1947-04-06T01:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-04T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-10T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1954-05-22T23:00:00,+02:00,CEST +1954-10-02T22:00:00,+01:00,CET +1955-05-22T01:00:00,+02:00,CEST +1955-10-02T01:00:00,+01:00,CET +1956-06-03T01:00:00,+02:00,CEST +1956-09-30T01:00:00,+01:00,CET +1957-06-02T01:00:00,+02:00,CEST +1957-09-29T01:00:00,+01:00,CET +1980-04-05T23:00:00,+02:00,CEST +1980-09-27T23:00:00,+01:00,CET +1981-03-28T23:00:00,+02:00,CEST +1981-09-26T23:00:00,+01:00,CET +1982-03-27T23:00:00,+02:00,CEST +1982-09-25T23:00:00,+01:00,CET +1983-03-26T23:00:00,+02:00,CEST +1983-09-24T23:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-busingen.txt b/desk/gub/lib/pytz/europe-busingen.txt new file mode 100644 index 0000000..dec995d --- /dev/null +++ b/desk/gub/lib/pytz/europe-busingen.txt @@ -0,0 +1,121 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:34,LMT +1901-12-13T20:45:52,+01:00,CET +1941-05-05T00:00:00,+02:00,CEST +1941-10-06T00:00:00,+01:00,CET +1942-05-04T00:00:00,+02:00,CEST +1942-10-05T00:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-chisinau.txt b/desk/gub/lib/pytz/europe-chisinau.txt new file mode 100644 index 0000000..3fbc330 --- /dev/null +++ b/desk/gub/lib/pytz/europe-chisinau.txt @@ -0,0 +1,143 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:55,LMT +1901-12-13T20:45:52,+01:55,CMT +1918-02-14T22:05:00,+01:44,BMT +1931-07-23T22:15:36,+02:00,EET +1932-05-20T22:00:00,+03:00,EEST +1932-10-01T22:00:00,+02:00,EET +1933-04-01T22:00:00,+03:00,EEST +1933-09-30T22:00:00,+02:00,EET +1934-04-07T22:00:00,+03:00,EEST +1934-10-06T22:00:00,+02:00,EET +1935-04-06T22:00:00,+03:00,EEST +1935-10-05T22:00:00,+02:00,EET +1936-04-04T22:00:00,+03:00,EEST +1936-10-03T22:00:00,+02:00,EET +1937-04-03T22:00:00,+03:00,EEST +1937-10-02T22:00:00,+02:00,EET +1938-04-02T22:00:00,+03:00,EEST +1938-10-01T22:00:00,+02:00,EET +1939-04-01T22:00:00,+03:00,EEST +1939-09-30T22:00:00,+02:00,EET +1940-08-14T22:00:00,+03:00,EEST +1941-07-16T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-08-23T22:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-05-05T22:00:00,+03:00,EEST +1990-09-30T00:00:00,+02:00,EET +1991-03-31T00:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-28T22:00:00,+03:00,EEST +1992-09-26T21:00:00,+02:00,EET +1993-03-27T22:00:00,+03:00,EEST +1993-09-25T21:00:00,+02:00,EET +1994-03-26T22:00:00,+03:00,EEST +1994-09-24T21:00:00,+02:00,EET +1995-03-25T22:00:00,+03:00,EEST +1995-09-23T21:00:00,+02:00,EET +1996-03-30T22:00:00,+03:00,EEST +1996-10-26T21:00:00,+02:00,EET +1997-03-30T00:00:00,+03:00,EEST +1997-10-26T00:00:00,+02:00,EET +1998-03-29T00:00:00,+03:00,EEST +1998-10-25T00:00:00,+02:00,EET +1999-03-28T00:00:00,+03:00,EEST +1999-10-31T00:00:00,+02:00,EET +2000-03-26T00:00:00,+03:00,EEST +2000-10-29T00:00:00,+02:00,EET +2001-03-25T00:00:00,+03:00,EEST +2001-10-28T00:00:00,+02:00,EET +2002-03-31T00:00:00,+03:00,EEST +2002-10-27T00:00:00,+02:00,EET +2003-03-30T00:00:00,+03:00,EEST +2003-10-26T00:00:00,+02:00,EET +2004-03-28T00:00:00,+03:00,EEST +2004-10-31T00:00:00,+02:00,EET +2005-03-27T00:00:00,+03:00,EEST +2005-10-30T00:00:00,+02:00,EET +2006-03-26T00:00:00,+03:00,EEST +2006-10-29T00:00:00,+02:00,EET +2007-03-25T00:00:00,+03:00,EEST +2007-10-28T00:00:00,+02:00,EET +2008-03-30T00:00:00,+03:00,EEST +2008-10-26T00:00:00,+02:00,EET +2009-03-29T00:00:00,+03:00,EEST +2009-10-25T00:00:00,+02:00,EET +2010-03-28T00:00:00,+03:00,EEST +2010-10-31T00:00:00,+02:00,EET +2011-03-27T00:00:00,+03:00,EEST +2011-10-30T00:00:00,+02:00,EET +2012-03-25T00:00:00,+03:00,EEST +2012-10-28T00:00:00,+02:00,EET +2013-03-31T00:00:00,+03:00,EEST +2013-10-27T00:00:00,+02:00,EET +2014-03-30T00:00:00,+03:00,EEST +2014-10-26T00:00:00,+02:00,EET +2015-03-29T00:00:00,+03:00,EEST +2015-10-25T00:00:00,+02:00,EET +2016-03-27T00:00:00,+03:00,EEST +2016-10-30T00:00:00,+02:00,EET +2017-03-26T00:00:00,+03:00,EEST +2017-10-29T00:00:00,+02:00,EET +2018-03-25T00:00:00,+03:00,EEST +2018-10-28T00:00:00,+02:00,EET +2019-03-31T00:00:00,+03:00,EEST +2019-10-27T00:00:00,+02:00,EET +2020-03-29T00:00:00,+03:00,EEST +2020-10-25T00:00:00,+02:00,EET +2021-03-28T00:00:00,+03:00,EEST +2021-10-31T00:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-copenhagen.txt b/desk/gub/lib/pytz/europe-copenhagen.txt new file mode 100644 index 0000000..56ab2cd --- /dev/null +++ b/desk/gub/lib/pytz/europe-copenhagen.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:53,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-05-24T00:00:00,+03:00,CEMT +1945-09-24T00:00:00,+02:00,CEST +1945-11-18T01:00:00,+01:00,CET +1946-04-14T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1947-04-06T02:00:00,+02:00,CEST +1947-05-11T01:00:00,+03:00,CEMT +1947-06-29T00:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-10T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-dublin.txt b/desk/gub/lib/pytz/europe-dublin.txt new file mode 100644 index 0000000..97a1ead --- /dev/null +++ b/desk/gub/lib/pytz/europe-dublin.txt @@ -0,0 +1,229 @@ +Time,Offset,Name +1901-12-13T20:45:52,-01:35,DMT +1916-05-21T02:25:21,+00:35,IST +1916-10-01T02:25:21,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,IST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,IST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,IST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,IST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,IST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,IST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,IST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,IST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,IST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,IST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,IST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,IST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,IST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,IST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,IST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,IST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,IST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,IST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,IST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,IST +1947-11-02T02:00:00,+00:00,GMT +1948-04-18T02:00:00,+01:00,IST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,IST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,IST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,IST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,IST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,IST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,IST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,IST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,IST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,IST +1957-10-06T02:00:00,+00:00,GMT +1958-04-20T02:00:00,+01:00,IST +1958-10-05T02:00:00,+00:00,GMT +1959-04-19T02:00:00,+01:00,IST +1959-10-04T02:00:00,+00:00,GMT +1960-04-10T02:00:00,+01:00,IST +1960-10-02T02:00:00,+00:00,GMT +1961-03-26T02:00:00,+01:00,IST +1961-10-29T02:00:00,+00:00,GMT +1962-03-25T02:00:00,+01:00,IST +1962-10-28T02:00:00,+00:00,GMT +1963-03-31T02:00:00,+01:00,IST +1963-10-27T02:00:00,+00:00,GMT +1964-03-22T02:00:00,+01:00,IST +1964-10-25T02:00:00,+00:00,GMT +1965-03-21T02:00:00,+01:00,IST +1965-10-24T02:00:00,+00:00,GMT +1966-03-20T02:00:00,+01:00,IST +1966-10-23T02:00:00,+00:00,GMT +1967-03-19T02:00:00,+01:00,IST +1967-10-29T02:00:00,+00:00,GMT +1968-02-18T02:00:00,+01:00,IST +1968-10-26T23:00:00,+01:00,IST +1971-10-31T02:00:00,+00:00,GMT +1972-03-19T02:00:00,+01:00,IST +1972-10-29T02:00:00,+00:00,GMT +1973-03-18T02:00:00,+01:00,IST +1973-10-28T02:00:00,+00:00,GMT +1974-03-17T02:00:00,+01:00,IST +1974-10-27T02:00:00,+00:00,GMT +1975-03-16T02:00:00,+01:00,IST +1975-10-26T02:00:00,+00:00,GMT +1976-03-21T02:00:00,+01:00,IST +1976-10-24T02:00:00,+00:00,GMT +1977-03-20T02:00:00,+01:00,IST +1977-10-23T02:00:00,+00:00,GMT +1978-03-19T02:00:00,+01:00,IST +1978-10-29T02:00:00,+00:00,GMT +1979-03-18T02:00:00,+01:00,IST +1979-10-28T02:00:00,+00:00,GMT +1980-03-16T02:00:00,+01:00,IST +1980-10-26T02:00:00,+00:00,GMT +1981-03-29T01:00:00,+01:00,IST +1981-10-25T01:00:00,+00:00,GMT +1982-03-28T01:00:00,+01:00,IST +1982-10-24T01:00:00,+00:00,GMT +1983-03-27T01:00:00,+01:00,IST +1983-10-23T01:00:00,+00:00,GMT +1984-03-25T01:00:00,+01:00,IST +1984-10-28T01:00:00,+00:00,GMT +1985-03-31T01:00:00,+01:00,IST +1985-10-27T01:00:00,+00:00,GMT +1986-03-30T01:00:00,+01:00,IST +1986-10-26T01:00:00,+00:00,GMT +1987-03-29T01:00:00,+01:00,IST +1987-10-25T01:00:00,+00:00,GMT +1988-03-27T01:00:00,+01:00,IST +1988-10-23T01:00:00,+00:00,GMT +1989-03-26T01:00:00,+01:00,IST +1989-10-29T01:00:00,+00:00,GMT +1990-03-25T01:00:00,+01:00,IST +1990-10-28T01:00:00,+00:00,GMT +1991-03-31T01:00:00,+01:00,IST +1991-10-27T01:00:00,+00:00,GMT +1992-03-29T01:00:00,+01:00,IST +1992-10-25T01:00:00,+00:00,GMT +1993-03-28T01:00:00,+01:00,IST +1993-10-24T01:00:00,+00:00,GMT +1994-03-27T01:00:00,+01:00,IST +1994-10-23T01:00:00,+00:00,GMT +1995-03-26T01:00:00,+01:00,IST +1995-10-22T01:00:00,+00:00,GMT +1996-03-31T01:00:00,+01:00,IST +1996-10-27T01:00:00,+00:00,GMT +1997-03-30T01:00:00,+01:00,IST +1997-10-26T01:00:00,+00:00,GMT +1998-03-29T01:00:00,+01:00,IST +1998-10-25T01:00:00,+00:00,GMT +1999-03-28T01:00:00,+01:00,IST +1999-10-31T01:00:00,+00:00,GMT +2000-03-26T01:00:00,+01:00,IST +2000-10-29T01:00:00,+00:00,GMT +2001-03-25T01:00:00,+01:00,IST +2001-10-28T01:00:00,+00:00,GMT +2002-03-31T01:00:00,+01:00,IST +2002-10-27T01:00:00,+00:00,GMT +2003-03-30T01:00:00,+01:00,IST +2003-10-26T01:00:00,+00:00,GMT +2004-03-28T01:00:00,+01:00,IST +2004-10-31T01:00:00,+00:00,GMT +2005-03-27T01:00:00,+01:00,IST +2005-10-30T01:00:00,+00:00,GMT +2006-03-26T01:00:00,+01:00,IST +2006-10-29T01:00:00,+00:00,GMT +2007-03-25T01:00:00,+01:00,IST +2007-10-28T01:00:00,+00:00,GMT +2008-03-30T01:00:00,+01:00,IST +2008-10-26T01:00:00,+00:00,GMT +2009-03-29T01:00:00,+01:00,IST +2009-10-25T01:00:00,+00:00,GMT +2010-03-28T01:00:00,+01:00,IST +2010-10-31T01:00:00,+00:00,GMT +2011-03-27T01:00:00,+01:00,IST +2011-10-30T01:00:00,+00:00,GMT +2012-03-25T01:00:00,+01:00,IST +2012-10-28T01:00:00,+00:00,GMT +2013-03-31T01:00:00,+01:00,IST +2013-10-27T01:00:00,+00:00,GMT +2014-03-30T01:00:00,+01:00,IST +2014-10-26T01:00:00,+00:00,GMT +2015-03-29T01:00:00,+01:00,IST +2015-10-25T01:00:00,+00:00,GMT +2016-03-27T01:00:00,+01:00,IST +2016-10-30T01:00:00,+00:00,GMT +2017-03-26T01:00:00,+01:00,IST +2017-10-29T01:00:00,+00:00,GMT +2018-03-25T01:00:00,+01:00,IST +2018-10-28T01:00:00,+00:00,GMT +2019-03-31T01:00:00,+01:00,IST +2019-10-27T01:00:00,+00:00,GMT +2020-03-29T01:00:00,+01:00,IST +2020-10-25T01:00:00,+00:00,GMT +2021-03-28T01:00:00,+01:00,IST +2021-10-31T01:00:00,+00:00,GMT +2022-03-27T01:00:00,+01:00,IST +2022-10-30T01:00:00,+00:00,GMT +2023-03-26T01:00:00,+01:00,IST +2023-10-29T01:00:00,+00:00,GMT +2024-03-31T01:00:00,+01:00,IST +2024-10-27T01:00:00,+00:00,GMT +2025-03-30T01:00:00,+01:00,IST +2025-10-26T01:00:00,+00:00,GMT +2026-03-29T01:00:00,+01:00,IST +2026-10-25T01:00:00,+00:00,GMT +2027-03-28T01:00:00,+01:00,IST +2027-10-31T01:00:00,+00:00,GMT +2028-03-26T01:00:00,+01:00,IST +2028-10-29T01:00:00,+00:00,GMT +2029-03-25T01:00:00,+01:00,IST +2029-10-28T01:00:00,+00:00,GMT +2030-03-31T01:00:00,+01:00,IST +2030-10-27T01:00:00,+00:00,GMT +2031-03-30T01:00:00,+01:00,IST +2031-10-26T01:00:00,+00:00,GMT +2032-03-28T01:00:00,+01:00,IST +2032-10-31T01:00:00,+00:00,GMT +2033-03-27T01:00:00,+01:00,IST +2033-10-30T01:00:00,+00:00,GMT +2034-03-26T01:00:00,+01:00,IST +2034-10-29T01:00:00,+00:00,GMT +2035-03-25T01:00:00,+01:00,IST +2035-10-28T01:00:00,+00:00,GMT +2036-03-30T01:00:00,+01:00,IST +2036-10-26T01:00:00,+00:00,GMT +2037-03-29T01:00:00,+01:00,IST +2037-10-25T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-gibraltar.txt b/desk/gub/lib/pytz/europe-gibraltar.txt new file mode 100644 index 0000000..5d9ba03 --- /dev/null +++ b/desk/gub/lib/pytz/europe-gibraltar.txt @@ -0,0 +1,199 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,GMT +1916-05-21T02:00:00,+01:00,BST +1916-10-01T02:00:00,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,BST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,BST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,BST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,BST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,BST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,BST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,BST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,BST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,BST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,BST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,BST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,BST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,BST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,BST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,BST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,BST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,BST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,BST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,BST +1941-05-04T01:00:00,+02:00,BDST +1941-08-10T01:00:00,+01:00,BST +1942-04-05T01:00:00,+02:00,BDST +1942-08-09T01:00:00,+01:00,BST +1943-04-04T01:00:00,+02:00,BDST +1943-08-15T01:00:00,+01:00,BST +1944-04-02T01:00:00,+02:00,BDST +1944-09-17T01:00:00,+01:00,BST +1945-04-02T01:00:00,+02:00,BDST +1945-07-15T01:00:00,+01:00,BST +1945-10-07T02:00:00,+00:00,GMT +1946-04-14T02:00:00,+01:00,BST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,BST +1947-04-13T01:00:00,+02:00,BDST +1947-08-10T01:00:00,+01:00,BST +1947-11-02T02:00:00,+00:00,GMT +1948-03-14T02:00:00,+01:00,BST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,BST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,BST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,BST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,BST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,BST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,BST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,BST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,BST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-guernsey.txt b/desk/gub/lib/pytz/europe-guernsey.txt new file mode 100644 index 0000000..a0614b8 --- /dev/null +++ b/desk/gub/lib/pytz/europe-guernsey.txt @@ -0,0 +1,243 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,GMT +1916-05-21T02:00:00,+01:00,BST +1916-10-01T02:00:00,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,BST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,BST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,BST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,BST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,BST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,BST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,BST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,BST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,BST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,BST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,BST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,BST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,BST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,BST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,BST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,BST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,BST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,BST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,BST +1941-05-04T01:00:00,+02:00,BDST +1941-08-10T01:00:00,+01:00,BST +1942-04-05T01:00:00,+02:00,BDST +1942-08-09T01:00:00,+01:00,BST +1943-04-04T01:00:00,+02:00,BDST +1943-08-15T01:00:00,+01:00,BST +1944-04-02T01:00:00,+02:00,BDST +1944-09-17T01:00:00,+01:00,BST +1945-04-02T01:00:00,+02:00,BDST +1945-07-15T01:00:00,+01:00,BST +1945-10-07T02:00:00,+00:00,GMT +1946-04-14T02:00:00,+01:00,BST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,BST +1947-04-13T01:00:00,+02:00,BDST +1947-08-10T01:00:00,+01:00,BST +1947-11-02T02:00:00,+00:00,GMT +1948-03-14T02:00:00,+01:00,BST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,BST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,BST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,BST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,BST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,BST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,BST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,BST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,BST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,BST +1957-10-06T02:00:00,+00:00,GMT +1958-04-20T02:00:00,+01:00,BST +1958-10-05T02:00:00,+00:00,GMT +1959-04-19T02:00:00,+01:00,BST +1959-10-04T02:00:00,+00:00,GMT +1960-04-10T02:00:00,+01:00,BST +1960-10-02T02:00:00,+00:00,GMT +1961-03-26T02:00:00,+01:00,BST +1961-10-29T02:00:00,+00:00,GMT +1962-03-25T02:00:00,+01:00,BST +1962-10-28T02:00:00,+00:00,GMT +1963-03-31T02:00:00,+01:00,BST +1963-10-27T02:00:00,+00:00,GMT +1964-03-22T02:00:00,+01:00,BST +1964-10-25T02:00:00,+00:00,GMT +1965-03-21T02:00:00,+01:00,BST +1965-10-24T02:00:00,+00:00,GMT +1966-03-20T02:00:00,+01:00,BST +1966-10-23T02:00:00,+00:00,GMT +1967-03-19T02:00:00,+01:00,BST +1967-10-29T02:00:00,+00:00,GMT +1968-02-18T02:00:00,+01:00,BST +1968-10-26T23:00:00,+01:00,BST +1971-10-31T02:00:00,+00:00,GMT +1972-03-19T02:00:00,+01:00,BST +1972-10-29T02:00:00,+00:00,GMT +1973-03-18T02:00:00,+01:00,BST +1973-10-28T02:00:00,+00:00,GMT +1974-03-17T02:00:00,+01:00,BST +1974-10-27T02:00:00,+00:00,GMT +1975-03-16T02:00:00,+01:00,BST +1975-10-26T02:00:00,+00:00,GMT +1976-03-21T02:00:00,+01:00,BST +1976-10-24T02:00:00,+00:00,GMT +1977-03-20T02:00:00,+01:00,BST +1977-10-23T02:00:00,+00:00,GMT +1978-03-19T02:00:00,+01:00,BST +1978-10-29T02:00:00,+00:00,GMT +1979-03-18T02:00:00,+01:00,BST +1979-10-28T02:00:00,+00:00,GMT +1980-03-16T02:00:00,+01:00,BST +1980-10-26T02:00:00,+00:00,GMT +1981-03-29T01:00:00,+01:00,BST +1981-10-25T01:00:00,+00:00,GMT +1982-03-28T01:00:00,+01:00,BST +1982-10-24T01:00:00,+00:00,GMT +1983-03-27T01:00:00,+01:00,BST +1983-10-23T01:00:00,+00:00,GMT +1984-03-25T01:00:00,+01:00,BST +1984-10-28T01:00:00,+00:00,GMT +1985-03-31T01:00:00,+01:00,BST +1985-10-27T01:00:00,+00:00,GMT +1986-03-30T01:00:00,+01:00,BST +1986-10-26T01:00:00,+00:00,GMT +1987-03-29T01:00:00,+01:00,BST +1987-10-25T01:00:00,+00:00,GMT +1988-03-27T01:00:00,+01:00,BST +1988-10-23T01:00:00,+00:00,GMT +1989-03-26T01:00:00,+01:00,BST +1989-10-29T01:00:00,+00:00,GMT +1990-03-25T01:00:00,+01:00,BST +1990-10-28T01:00:00,+00:00,GMT +1991-03-31T01:00:00,+01:00,BST +1991-10-27T01:00:00,+00:00,GMT +1992-03-29T01:00:00,+01:00,BST +1992-10-25T01:00:00,+00:00,GMT +1993-03-28T01:00:00,+01:00,BST +1993-10-24T01:00:00,+00:00,GMT +1994-03-27T01:00:00,+01:00,BST +1994-10-23T01:00:00,+00:00,GMT +1995-03-26T01:00:00,+01:00,BST +1995-10-22T01:00:00,+00:00,GMT +1996-03-31T01:00:00,+01:00,BST +1996-10-27T01:00:00,+00:00,GMT +1997-03-30T01:00:00,+01:00,BST +1997-10-26T01:00:00,+00:00,GMT +1998-03-29T01:00:00,+01:00,BST +1998-10-25T01:00:00,+00:00,GMT +1999-03-28T01:00:00,+01:00,BST +1999-10-31T01:00:00,+00:00,GMT +2000-03-26T01:00:00,+01:00,BST +2000-10-29T01:00:00,+00:00,GMT +2001-03-25T01:00:00,+01:00,BST +2001-10-28T01:00:00,+00:00,GMT +2002-03-31T01:00:00,+01:00,BST +2002-10-27T01:00:00,+00:00,GMT +2003-03-30T01:00:00,+01:00,BST +2003-10-26T01:00:00,+00:00,GMT +2004-03-28T01:00:00,+01:00,BST +2004-10-31T01:00:00,+00:00,GMT +2005-03-27T01:00:00,+01:00,BST +2005-10-30T01:00:00,+00:00,GMT +2006-03-26T01:00:00,+01:00,BST +2006-10-29T01:00:00,+00:00,GMT +2007-03-25T01:00:00,+01:00,BST +2007-10-28T01:00:00,+00:00,GMT +2008-03-30T01:00:00,+01:00,BST +2008-10-26T01:00:00,+00:00,GMT +2009-03-29T01:00:00,+01:00,BST +2009-10-25T01:00:00,+00:00,GMT +2010-03-28T01:00:00,+01:00,BST +2010-10-31T01:00:00,+00:00,GMT +2011-03-27T01:00:00,+01:00,BST +2011-10-30T01:00:00,+00:00,GMT +2012-03-25T01:00:00,+01:00,BST +2012-10-28T01:00:00,+00:00,GMT +2013-03-31T01:00:00,+01:00,BST +2013-10-27T01:00:00,+00:00,GMT +2014-03-30T01:00:00,+01:00,BST +2014-10-26T01:00:00,+00:00,GMT +2015-03-29T01:00:00,+01:00,BST +2015-10-25T01:00:00,+00:00,GMT +2016-03-27T01:00:00,+01:00,BST +2016-10-30T01:00:00,+00:00,GMT +2017-03-26T01:00:00,+01:00,BST +2017-10-29T01:00:00,+00:00,GMT +2018-03-25T01:00:00,+01:00,BST +2018-10-28T01:00:00,+00:00,GMT +2019-03-31T01:00:00,+01:00,BST +2019-10-27T01:00:00,+00:00,GMT +2020-03-29T01:00:00,+01:00,BST +2020-10-25T01:00:00,+00:00,GMT +2021-03-28T01:00:00,+01:00,BST +2021-10-31T01:00:00,+00:00,GMT +2022-03-27T01:00:00,+01:00,BST +2022-10-30T01:00:00,+00:00,GMT +2023-03-26T01:00:00,+01:00,BST +2023-10-29T01:00:00,+00:00,GMT +2024-03-31T01:00:00,+01:00,BST +2024-10-27T01:00:00,+00:00,GMT +2025-03-30T01:00:00,+01:00,BST +2025-10-26T01:00:00,+00:00,GMT +2026-03-29T01:00:00,+01:00,BST +2026-10-25T01:00:00,+00:00,GMT +2027-03-28T01:00:00,+01:00,BST +2027-10-31T01:00:00,+00:00,GMT +2028-03-26T01:00:00,+01:00,BST +2028-10-29T01:00:00,+00:00,GMT +2029-03-25T01:00:00,+01:00,BST +2029-10-28T01:00:00,+00:00,GMT +2030-03-31T01:00:00,+01:00,BST +2030-10-27T01:00:00,+00:00,GMT +2031-03-30T01:00:00,+01:00,BST +2031-10-26T01:00:00,+00:00,GMT +2032-03-28T01:00:00,+01:00,BST +2032-10-31T01:00:00,+00:00,GMT +2033-03-27T01:00:00,+01:00,BST +2033-10-30T01:00:00,+00:00,GMT +2034-03-26T01:00:00,+01:00,BST +2034-10-29T01:00:00,+00:00,GMT +2035-03-25T01:00:00,+01:00,BST +2035-10-28T01:00:00,+00:00,GMT +2036-03-30T01:00:00,+01:00,BST +2036-10-26T01:00:00,+00:00,GMT +2037-03-29T01:00:00,+01:00,BST +2037-10-25T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-helsinki.txt b/desk/gub/lib/pytz/europe-helsinki.txt new file mode 100644 index 0000000..791e971 --- /dev/null +++ b/desk/gub/lib/pytz/europe-helsinki.txt @@ -0,0 +1,120 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:40,LMT +1901-12-13T20:45:52,+01:40,HMT +1921-04-30T22:20:11,+02:00,EET +1942-04-02T22:00:00,+03:00,EEST +1942-10-03T22:00:00,+02:00,EET +1981-03-29T00:00:00,+03:00,EEST +1981-09-27T00:00:00,+02:00,EET +1982-03-28T00:00:00,+03:00,EEST +1982-09-26T00:00:00,+02:00,EET +1983-03-27T01:00:00,+03:00,EEST +1983-09-25T01:00:00,+02:00,EET +1984-03-25T01:00:00,+03:00,EEST +1984-09-30T01:00:00,+02:00,EET +1985-03-31T01:00:00,+03:00,EEST +1985-09-29T01:00:00,+02:00,EET +1986-03-30T01:00:00,+03:00,EEST +1986-09-28T01:00:00,+02:00,EET +1987-03-29T01:00:00,+03:00,EEST +1987-09-27T01:00:00,+02:00,EET +1988-03-27T01:00:00,+03:00,EEST +1988-09-25T01:00:00,+02:00,EET +1989-03-26T01:00:00,+03:00,EEST +1989-09-24T01:00:00,+02:00,EET +1990-03-25T01:00:00,+03:00,EEST +1990-09-30T01:00:00,+02:00,EET +1991-03-31T01:00:00,+03:00,EEST +1991-09-29T01:00:00,+02:00,EET +1992-03-29T01:00:00,+03:00,EEST +1992-09-27T01:00:00,+02:00,EET +1993-03-28T01:00:00,+03:00,EEST +1993-09-26T01:00:00,+02:00,EET +1994-03-27T01:00:00,+03:00,EEST +1994-09-25T01:00:00,+02:00,EET +1995-03-26T01:00:00,+03:00,EEST +1995-09-24T01:00:00,+02:00,EET +1996-03-31T01:00:00,+03:00,EEST +1996-10-27T01:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-isle-of-man.txt b/desk/gub/lib/pytz/europe-isle-of-man.txt new file mode 100644 index 0000000..a0614b8 --- /dev/null +++ b/desk/gub/lib/pytz/europe-isle-of-man.txt @@ -0,0 +1,243 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,GMT +1916-05-21T02:00:00,+01:00,BST +1916-10-01T02:00:00,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,BST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,BST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,BST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,BST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,BST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,BST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,BST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,BST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,BST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,BST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,BST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,BST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,BST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,BST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,BST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,BST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,BST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,BST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,BST +1941-05-04T01:00:00,+02:00,BDST +1941-08-10T01:00:00,+01:00,BST +1942-04-05T01:00:00,+02:00,BDST +1942-08-09T01:00:00,+01:00,BST +1943-04-04T01:00:00,+02:00,BDST +1943-08-15T01:00:00,+01:00,BST +1944-04-02T01:00:00,+02:00,BDST +1944-09-17T01:00:00,+01:00,BST +1945-04-02T01:00:00,+02:00,BDST +1945-07-15T01:00:00,+01:00,BST +1945-10-07T02:00:00,+00:00,GMT +1946-04-14T02:00:00,+01:00,BST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,BST +1947-04-13T01:00:00,+02:00,BDST +1947-08-10T01:00:00,+01:00,BST +1947-11-02T02:00:00,+00:00,GMT +1948-03-14T02:00:00,+01:00,BST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,BST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,BST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,BST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,BST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,BST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,BST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,BST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,BST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,BST +1957-10-06T02:00:00,+00:00,GMT +1958-04-20T02:00:00,+01:00,BST +1958-10-05T02:00:00,+00:00,GMT +1959-04-19T02:00:00,+01:00,BST +1959-10-04T02:00:00,+00:00,GMT +1960-04-10T02:00:00,+01:00,BST +1960-10-02T02:00:00,+00:00,GMT +1961-03-26T02:00:00,+01:00,BST +1961-10-29T02:00:00,+00:00,GMT +1962-03-25T02:00:00,+01:00,BST +1962-10-28T02:00:00,+00:00,GMT +1963-03-31T02:00:00,+01:00,BST +1963-10-27T02:00:00,+00:00,GMT +1964-03-22T02:00:00,+01:00,BST +1964-10-25T02:00:00,+00:00,GMT +1965-03-21T02:00:00,+01:00,BST +1965-10-24T02:00:00,+00:00,GMT +1966-03-20T02:00:00,+01:00,BST +1966-10-23T02:00:00,+00:00,GMT +1967-03-19T02:00:00,+01:00,BST +1967-10-29T02:00:00,+00:00,GMT +1968-02-18T02:00:00,+01:00,BST +1968-10-26T23:00:00,+01:00,BST +1971-10-31T02:00:00,+00:00,GMT +1972-03-19T02:00:00,+01:00,BST +1972-10-29T02:00:00,+00:00,GMT +1973-03-18T02:00:00,+01:00,BST +1973-10-28T02:00:00,+00:00,GMT +1974-03-17T02:00:00,+01:00,BST +1974-10-27T02:00:00,+00:00,GMT +1975-03-16T02:00:00,+01:00,BST +1975-10-26T02:00:00,+00:00,GMT +1976-03-21T02:00:00,+01:00,BST +1976-10-24T02:00:00,+00:00,GMT +1977-03-20T02:00:00,+01:00,BST +1977-10-23T02:00:00,+00:00,GMT +1978-03-19T02:00:00,+01:00,BST +1978-10-29T02:00:00,+00:00,GMT +1979-03-18T02:00:00,+01:00,BST +1979-10-28T02:00:00,+00:00,GMT +1980-03-16T02:00:00,+01:00,BST +1980-10-26T02:00:00,+00:00,GMT +1981-03-29T01:00:00,+01:00,BST +1981-10-25T01:00:00,+00:00,GMT +1982-03-28T01:00:00,+01:00,BST +1982-10-24T01:00:00,+00:00,GMT +1983-03-27T01:00:00,+01:00,BST +1983-10-23T01:00:00,+00:00,GMT +1984-03-25T01:00:00,+01:00,BST +1984-10-28T01:00:00,+00:00,GMT +1985-03-31T01:00:00,+01:00,BST +1985-10-27T01:00:00,+00:00,GMT +1986-03-30T01:00:00,+01:00,BST +1986-10-26T01:00:00,+00:00,GMT +1987-03-29T01:00:00,+01:00,BST +1987-10-25T01:00:00,+00:00,GMT +1988-03-27T01:00:00,+01:00,BST +1988-10-23T01:00:00,+00:00,GMT +1989-03-26T01:00:00,+01:00,BST +1989-10-29T01:00:00,+00:00,GMT +1990-03-25T01:00:00,+01:00,BST +1990-10-28T01:00:00,+00:00,GMT +1991-03-31T01:00:00,+01:00,BST +1991-10-27T01:00:00,+00:00,GMT +1992-03-29T01:00:00,+01:00,BST +1992-10-25T01:00:00,+00:00,GMT +1993-03-28T01:00:00,+01:00,BST +1993-10-24T01:00:00,+00:00,GMT +1994-03-27T01:00:00,+01:00,BST +1994-10-23T01:00:00,+00:00,GMT +1995-03-26T01:00:00,+01:00,BST +1995-10-22T01:00:00,+00:00,GMT +1996-03-31T01:00:00,+01:00,BST +1996-10-27T01:00:00,+00:00,GMT +1997-03-30T01:00:00,+01:00,BST +1997-10-26T01:00:00,+00:00,GMT +1998-03-29T01:00:00,+01:00,BST +1998-10-25T01:00:00,+00:00,GMT +1999-03-28T01:00:00,+01:00,BST +1999-10-31T01:00:00,+00:00,GMT +2000-03-26T01:00:00,+01:00,BST +2000-10-29T01:00:00,+00:00,GMT +2001-03-25T01:00:00,+01:00,BST +2001-10-28T01:00:00,+00:00,GMT +2002-03-31T01:00:00,+01:00,BST +2002-10-27T01:00:00,+00:00,GMT +2003-03-30T01:00:00,+01:00,BST +2003-10-26T01:00:00,+00:00,GMT +2004-03-28T01:00:00,+01:00,BST +2004-10-31T01:00:00,+00:00,GMT +2005-03-27T01:00:00,+01:00,BST +2005-10-30T01:00:00,+00:00,GMT +2006-03-26T01:00:00,+01:00,BST +2006-10-29T01:00:00,+00:00,GMT +2007-03-25T01:00:00,+01:00,BST +2007-10-28T01:00:00,+00:00,GMT +2008-03-30T01:00:00,+01:00,BST +2008-10-26T01:00:00,+00:00,GMT +2009-03-29T01:00:00,+01:00,BST +2009-10-25T01:00:00,+00:00,GMT +2010-03-28T01:00:00,+01:00,BST +2010-10-31T01:00:00,+00:00,GMT +2011-03-27T01:00:00,+01:00,BST +2011-10-30T01:00:00,+00:00,GMT +2012-03-25T01:00:00,+01:00,BST +2012-10-28T01:00:00,+00:00,GMT +2013-03-31T01:00:00,+01:00,BST +2013-10-27T01:00:00,+00:00,GMT +2014-03-30T01:00:00,+01:00,BST +2014-10-26T01:00:00,+00:00,GMT +2015-03-29T01:00:00,+01:00,BST +2015-10-25T01:00:00,+00:00,GMT +2016-03-27T01:00:00,+01:00,BST +2016-10-30T01:00:00,+00:00,GMT +2017-03-26T01:00:00,+01:00,BST +2017-10-29T01:00:00,+00:00,GMT +2018-03-25T01:00:00,+01:00,BST +2018-10-28T01:00:00,+00:00,GMT +2019-03-31T01:00:00,+01:00,BST +2019-10-27T01:00:00,+00:00,GMT +2020-03-29T01:00:00,+01:00,BST +2020-10-25T01:00:00,+00:00,GMT +2021-03-28T01:00:00,+01:00,BST +2021-10-31T01:00:00,+00:00,GMT +2022-03-27T01:00:00,+01:00,BST +2022-10-30T01:00:00,+00:00,GMT +2023-03-26T01:00:00,+01:00,BST +2023-10-29T01:00:00,+00:00,GMT +2024-03-31T01:00:00,+01:00,BST +2024-10-27T01:00:00,+00:00,GMT +2025-03-30T01:00:00,+01:00,BST +2025-10-26T01:00:00,+00:00,GMT +2026-03-29T01:00:00,+01:00,BST +2026-10-25T01:00:00,+00:00,GMT +2027-03-28T01:00:00,+01:00,BST +2027-10-31T01:00:00,+00:00,GMT +2028-03-26T01:00:00,+01:00,BST +2028-10-29T01:00:00,+00:00,GMT +2029-03-25T01:00:00,+01:00,BST +2029-10-28T01:00:00,+00:00,GMT +2030-03-31T01:00:00,+01:00,BST +2030-10-27T01:00:00,+00:00,GMT +2031-03-30T01:00:00,+01:00,BST +2031-10-26T01:00:00,+00:00,GMT +2032-03-28T01:00:00,+01:00,BST +2032-10-31T01:00:00,+00:00,GMT +2033-03-27T01:00:00,+01:00,BST +2033-10-30T01:00:00,+00:00,GMT +2034-03-26T01:00:00,+01:00,BST +2034-10-29T01:00:00,+00:00,GMT +2035-03-25T01:00:00,+01:00,BST +2035-10-28T01:00:00,+00:00,GMT +2036-03-30T01:00:00,+01:00,BST +2036-10-26T01:00:00,+00:00,GMT +2037-03-29T01:00:00,+01:00,BST +2037-10-25T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-istanbul.txt b/desk/gub/lib/pytz/europe-istanbul.txt new file mode 100644 index 0000000..3fd2a49 --- /dev/null +++ b/desk/gub/lib/pytz/europe-istanbul.txt @@ -0,0 +1,117 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:56,LMT +1901-12-13T20:45:52,+01:57,IMT +1910-09-30T22:03:04,+02:00,EET +1916-04-30T22:00:00,+03:00,EEST +1916-09-30T21:00:00,+02:00,EET +1920-03-27T22:00:00,+03:00,EEST +1920-10-24T21:00:00,+02:00,EET +1921-04-02T22:00:00,+03:00,EEST +1921-10-02T21:00:00,+02:00,EET +1922-03-25T22:00:00,+03:00,EEST +1922-10-07T21:00:00,+02:00,EET +1924-05-12T22:00:00,+03:00,EEST +1924-09-30T21:00:00,+02:00,EET +1925-04-30T22:00:00,+03:00,EEST +1925-09-30T21:00:00,+02:00,EET +1940-06-30T22:00:00,+03:00,EEST +1940-10-05T21:00:00,+02:00,EET +1940-11-30T22:00:00,+03:00,EEST +1941-09-20T21:00:00,+02:00,EET +1942-03-31T22:00:00,+03:00,EEST +1945-10-07T21:00:00,+02:00,EET +1946-05-31T22:00:00,+03:00,EEST +1946-09-30T21:00:00,+02:00,EET +1947-04-19T22:00:00,+03:00,EEST +1947-10-04T21:00:00,+02:00,EET +1948-04-17T22:00:00,+03:00,EEST +1948-10-02T21:00:00,+02:00,EET +1949-04-09T22:00:00,+03:00,EEST +1949-10-01T21:00:00,+02:00,EET +1950-04-15T22:00:00,+03:00,EEST +1950-10-07T21:00:00,+02:00,EET +1951-04-21T22:00:00,+03:00,EEST +1951-10-06T21:00:00,+02:00,EET +1962-07-14T22:00:00,+03:00,EEST +1963-10-29T21:00:00,+02:00,EET +1964-05-14T22:00:00,+03:00,EEST +1964-09-30T21:00:00,+02:00,EET +1973-06-02T23:00:00,+03:00,EEST +1973-11-03T23:00:00,+02:00,EET +1974-03-31T00:00:00,+03:00,EEST +1974-11-02T23:00:00,+02:00,EET +1975-03-22T00:00:00,+03:00,EEST +1975-11-01T23:00:00,+02:00,EET +1976-03-21T00:00:00,+03:00,EEST +1976-10-30T23:00:00,+02:00,EET +1977-04-03T00:00:00,+03:00,EEST +1977-10-15T23:00:00,+02:00,EET +1978-04-02T00:00:00,+03:00,EEST +1978-06-28T21:00:00,+03:00,+03 +1983-07-30T23:00:00,+04:00,+04 +1983-10-01T22:00:00,+03:00,+03 +1984-10-31T23:00:00,+02:00,EET +1985-04-19T23:00:00,+03:00,EEST +1985-09-27T23:00:00,+02:00,EET +1986-03-29T23:00:00,+03:00,EEST +1986-09-27T23:00:00,+02:00,EET +1987-03-28T23:00:00,+03:00,EEST +1987-09-26T23:00:00,+02:00,EET +1988-03-26T23:00:00,+03:00,EEST +1988-09-24T23:00:00,+02:00,EET +1989-03-25T23:00:00,+03:00,EEST +1989-09-23T23:00:00,+02:00,EET +1990-03-24T23:00:00,+03:00,EEST +1990-09-29T23:00:00,+02:00,EET +1991-03-30T23:00:00,+03:00,EEST +1991-09-28T23:00:00,+02:00,EET +1992-03-28T23:00:00,+03:00,EEST +1992-09-26T23:00:00,+02:00,EET +1993-03-27T23:00:00,+03:00,EEST +1993-09-25T23:00:00,+02:00,EET +1994-03-19T23:00:00,+03:00,EEST +1994-09-24T23:00:00,+02:00,EET +1995-03-25T23:00:00,+03:00,EEST +1995-09-23T23:00:00,+02:00,EET +1996-03-30T23:00:00,+03:00,EEST +1996-10-26T23:00:00,+02:00,EET +1997-03-29T23:00:00,+03:00,EEST +1997-10-25T23:00:00,+02:00,EET +1998-03-28T23:00:00,+03:00,EEST +1998-10-24T23:00:00,+02:00,EET +1999-03-27T23:00:00,+03:00,EEST +1999-10-30T23:00:00,+02:00,EET +2000-03-25T23:00:00,+03:00,EEST +2000-10-28T23:00:00,+02:00,EET +2001-03-24T23:00:00,+03:00,EEST +2001-10-27T23:00:00,+02:00,EET +2002-03-30T23:00:00,+03:00,EEST +2002-10-26T23:00:00,+02:00,EET +2003-03-29T23:00:00,+03:00,EEST +2003-10-25T23:00:00,+02:00,EET +2004-03-27T23:00:00,+03:00,EEST +2004-10-30T23:00:00,+02:00,EET +2005-03-26T23:00:00,+03:00,EEST +2005-10-29T23:00:00,+02:00,EET +2006-03-25T23:00:00,+03:00,EEST +2006-10-28T23:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-28T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-31T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-11-08T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-09-06T21:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-jersey.txt b/desk/gub/lib/pytz/europe-jersey.txt new file mode 100644 index 0000000..a0614b8 --- /dev/null +++ b/desk/gub/lib/pytz/europe-jersey.txt @@ -0,0 +1,243 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,GMT +1916-05-21T02:00:00,+01:00,BST +1916-10-01T02:00:00,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,BST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,BST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,BST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,BST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,BST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,BST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,BST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,BST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,BST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,BST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,BST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,BST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,BST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,BST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,BST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,BST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,BST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,BST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,BST +1941-05-04T01:00:00,+02:00,BDST +1941-08-10T01:00:00,+01:00,BST +1942-04-05T01:00:00,+02:00,BDST +1942-08-09T01:00:00,+01:00,BST +1943-04-04T01:00:00,+02:00,BDST +1943-08-15T01:00:00,+01:00,BST +1944-04-02T01:00:00,+02:00,BDST +1944-09-17T01:00:00,+01:00,BST +1945-04-02T01:00:00,+02:00,BDST +1945-07-15T01:00:00,+01:00,BST +1945-10-07T02:00:00,+00:00,GMT +1946-04-14T02:00:00,+01:00,BST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,BST +1947-04-13T01:00:00,+02:00,BDST +1947-08-10T01:00:00,+01:00,BST +1947-11-02T02:00:00,+00:00,GMT +1948-03-14T02:00:00,+01:00,BST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,BST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,BST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,BST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,BST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,BST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,BST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,BST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,BST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,BST +1957-10-06T02:00:00,+00:00,GMT +1958-04-20T02:00:00,+01:00,BST +1958-10-05T02:00:00,+00:00,GMT +1959-04-19T02:00:00,+01:00,BST +1959-10-04T02:00:00,+00:00,GMT +1960-04-10T02:00:00,+01:00,BST +1960-10-02T02:00:00,+00:00,GMT +1961-03-26T02:00:00,+01:00,BST +1961-10-29T02:00:00,+00:00,GMT +1962-03-25T02:00:00,+01:00,BST +1962-10-28T02:00:00,+00:00,GMT +1963-03-31T02:00:00,+01:00,BST +1963-10-27T02:00:00,+00:00,GMT +1964-03-22T02:00:00,+01:00,BST +1964-10-25T02:00:00,+00:00,GMT +1965-03-21T02:00:00,+01:00,BST +1965-10-24T02:00:00,+00:00,GMT +1966-03-20T02:00:00,+01:00,BST +1966-10-23T02:00:00,+00:00,GMT +1967-03-19T02:00:00,+01:00,BST +1967-10-29T02:00:00,+00:00,GMT +1968-02-18T02:00:00,+01:00,BST +1968-10-26T23:00:00,+01:00,BST +1971-10-31T02:00:00,+00:00,GMT +1972-03-19T02:00:00,+01:00,BST +1972-10-29T02:00:00,+00:00,GMT +1973-03-18T02:00:00,+01:00,BST +1973-10-28T02:00:00,+00:00,GMT +1974-03-17T02:00:00,+01:00,BST +1974-10-27T02:00:00,+00:00,GMT +1975-03-16T02:00:00,+01:00,BST +1975-10-26T02:00:00,+00:00,GMT +1976-03-21T02:00:00,+01:00,BST +1976-10-24T02:00:00,+00:00,GMT +1977-03-20T02:00:00,+01:00,BST +1977-10-23T02:00:00,+00:00,GMT +1978-03-19T02:00:00,+01:00,BST +1978-10-29T02:00:00,+00:00,GMT +1979-03-18T02:00:00,+01:00,BST +1979-10-28T02:00:00,+00:00,GMT +1980-03-16T02:00:00,+01:00,BST +1980-10-26T02:00:00,+00:00,GMT +1981-03-29T01:00:00,+01:00,BST +1981-10-25T01:00:00,+00:00,GMT +1982-03-28T01:00:00,+01:00,BST +1982-10-24T01:00:00,+00:00,GMT +1983-03-27T01:00:00,+01:00,BST +1983-10-23T01:00:00,+00:00,GMT +1984-03-25T01:00:00,+01:00,BST +1984-10-28T01:00:00,+00:00,GMT +1985-03-31T01:00:00,+01:00,BST +1985-10-27T01:00:00,+00:00,GMT +1986-03-30T01:00:00,+01:00,BST +1986-10-26T01:00:00,+00:00,GMT +1987-03-29T01:00:00,+01:00,BST +1987-10-25T01:00:00,+00:00,GMT +1988-03-27T01:00:00,+01:00,BST +1988-10-23T01:00:00,+00:00,GMT +1989-03-26T01:00:00,+01:00,BST +1989-10-29T01:00:00,+00:00,GMT +1990-03-25T01:00:00,+01:00,BST +1990-10-28T01:00:00,+00:00,GMT +1991-03-31T01:00:00,+01:00,BST +1991-10-27T01:00:00,+00:00,GMT +1992-03-29T01:00:00,+01:00,BST +1992-10-25T01:00:00,+00:00,GMT +1993-03-28T01:00:00,+01:00,BST +1993-10-24T01:00:00,+00:00,GMT +1994-03-27T01:00:00,+01:00,BST +1994-10-23T01:00:00,+00:00,GMT +1995-03-26T01:00:00,+01:00,BST +1995-10-22T01:00:00,+00:00,GMT +1996-03-31T01:00:00,+01:00,BST +1996-10-27T01:00:00,+00:00,GMT +1997-03-30T01:00:00,+01:00,BST +1997-10-26T01:00:00,+00:00,GMT +1998-03-29T01:00:00,+01:00,BST +1998-10-25T01:00:00,+00:00,GMT +1999-03-28T01:00:00,+01:00,BST +1999-10-31T01:00:00,+00:00,GMT +2000-03-26T01:00:00,+01:00,BST +2000-10-29T01:00:00,+00:00,GMT +2001-03-25T01:00:00,+01:00,BST +2001-10-28T01:00:00,+00:00,GMT +2002-03-31T01:00:00,+01:00,BST +2002-10-27T01:00:00,+00:00,GMT +2003-03-30T01:00:00,+01:00,BST +2003-10-26T01:00:00,+00:00,GMT +2004-03-28T01:00:00,+01:00,BST +2004-10-31T01:00:00,+00:00,GMT +2005-03-27T01:00:00,+01:00,BST +2005-10-30T01:00:00,+00:00,GMT +2006-03-26T01:00:00,+01:00,BST +2006-10-29T01:00:00,+00:00,GMT +2007-03-25T01:00:00,+01:00,BST +2007-10-28T01:00:00,+00:00,GMT +2008-03-30T01:00:00,+01:00,BST +2008-10-26T01:00:00,+00:00,GMT +2009-03-29T01:00:00,+01:00,BST +2009-10-25T01:00:00,+00:00,GMT +2010-03-28T01:00:00,+01:00,BST +2010-10-31T01:00:00,+00:00,GMT +2011-03-27T01:00:00,+01:00,BST +2011-10-30T01:00:00,+00:00,GMT +2012-03-25T01:00:00,+01:00,BST +2012-10-28T01:00:00,+00:00,GMT +2013-03-31T01:00:00,+01:00,BST +2013-10-27T01:00:00,+00:00,GMT +2014-03-30T01:00:00,+01:00,BST +2014-10-26T01:00:00,+00:00,GMT +2015-03-29T01:00:00,+01:00,BST +2015-10-25T01:00:00,+00:00,GMT +2016-03-27T01:00:00,+01:00,BST +2016-10-30T01:00:00,+00:00,GMT +2017-03-26T01:00:00,+01:00,BST +2017-10-29T01:00:00,+00:00,GMT +2018-03-25T01:00:00,+01:00,BST +2018-10-28T01:00:00,+00:00,GMT +2019-03-31T01:00:00,+01:00,BST +2019-10-27T01:00:00,+00:00,GMT +2020-03-29T01:00:00,+01:00,BST +2020-10-25T01:00:00,+00:00,GMT +2021-03-28T01:00:00,+01:00,BST +2021-10-31T01:00:00,+00:00,GMT +2022-03-27T01:00:00,+01:00,BST +2022-10-30T01:00:00,+00:00,GMT +2023-03-26T01:00:00,+01:00,BST +2023-10-29T01:00:00,+00:00,GMT +2024-03-31T01:00:00,+01:00,BST +2024-10-27T01:00:00,+00:00,GMT +2025-03-30T01:00:00,+01:00,BST +2025-10-26T01:00:00,+00:00,GMT +2026-03-29T01:00:00,+01:00,BST +2026-10-25T01:00:00,+00:00,GMT +2027-03-28T01:00:00,+01:00,BST +2027-10-31T01:00:00,+00:00,GMT +2028-03-26T01:00:00,+01:00,BST +2028-10-29T01:00:00,+00:00,GMT +2029-03-25T01:00:00,+01:00,BST +2029-10-28T01:00:00,+00:00,GMT +2030-03-31T01:00:00,+01:00,BST +2030-10-27T01:00:00,+00:00,GMT +2031-03-30T01:00:00,+01:00,BST +2031-10-26T01:00:00,+00:00,GMT +2032-03-28T01:00:00,+01:00,BST +2032-10-31T01:00:00,+00:00,GMT +2033-03-27T01:00:00,+01:00,BST +2033-10-30T01:00:00,+00:00,GMT +2034-03-26T01:00:00,+01:00,BST +2034-10-29T01:00:00,+00:00,GMT +2035-03-25T01:00:00,+01:00,BST +2035-10-28T01:00:00,+00:00,GMT +2036-03-30T01:00:00,+01:00,BST +2036-10-26T01:00:00,+00:00,GMT +2037-03-29T01:00:00,+01:00,BST +2037-10-25T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-kaliningrad.txt b/desk/gub/lib/pytz/europe-kaliningrad.txt new file mode 100644 index 0000000..68e8d6d --- /dev/null +++ b/desk/gub/lib/pytz/europe-kaliningrad.txt @@ -0,0 +1,82 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:22,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-04-09T22:00:00,+02:00,EET +1945-04-28T22:00:00,+03:00,EEST +1945-10-31T21:00:00,+02:00,EET +1946-04-06T22:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+03:00,EEST +1989-09-24T00:00:00,+02:00,EET +1990-03-25T00:00:00,+03:00,EEST +1990-09-30T00:00:00,+02:00,EET +1991-03-31T00:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-09-25T00:00:00,+02:00,EET +1995-03-26T00:00:00,+03:00,EEST +1995-09-24T00:00:00,+02:00,EET +1996-03-31T00:00:00,+03:00,EEST +1996-10-27T00:00:00,+02:00,EET +1997-03-30T00:00:00,+03:00,EEST +1997-10-26T00:00:00,+02:00,EET +1998-03-29T00:00:00,+03:00,EEST +1998-10-25T00:00:00,+02:00,EET +1999-03-28T00:00:00,+03:00,EEST +1999-10-31T00:00:00,+02:00,EET +2000-03-26T00:00:00,+03:00,EEST +2000-10-29T00:00:00,+02:00,EET +2001-03-25T00:00:00,+03:00,EEST +2001-10-28T00:00:00,+02:00,EET +2002-03-31T00:00:00,+03:00,EEST +2002-10-27T00:00:00,+02:00,EET +2003-03-30T00:00:00,+03:00,EEST +2003-10-26T00:00:00,+02:00,EET +2004-03-28T00:00:00,+03:00,EEST +2004-10-31T00:00:00,+02:00,EET +2005-03-27T00:00:00,+03:00,EEST +2005-10-30T00:00:00,+02:00,EET +2006-03-26T00:00:00,+03:00,EEST +2006-10-29T00:00:00,+02:00,EET +2007-03-25T00:00:00,+03:00,EEST +2007-10-28T00:00:00,+02:00,EET +2008-03-30T00:00:00,+03:00,EEST +2008-10-26T00:00:00,+02:00,EET +2009-03-29T00:00:00,+03:00,EEST +2009-10-25T00:00:00,+02:00,EET +2010-03-28T00:00:00,+03:00,EEST +2010-10-31T00:00:00,+02:00,EET +2011-03-27T00:00:00,+03:00,+03 +2014-10-25T23:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-kiev.txt b/desk/gub/lib/pytz/europe-kiev.txt new file mode 100644 index 0000000..0718d6d --- /dev/null +++ b/desk/gub/lib/pytz/europe-kiev.txt @@ -0,0 +1,123 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:02,LMT +1901-12-13T20:45:52,+02:02,KMT +1924-05-01T21:57:56,+02:00,EET +1930-06-20T22:00:00,+03:00,MSK +1941-09-19T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1943-11-05T23:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-06-30T22:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-09-25T00:00:00,+02:00,EET +1995-03-26T00:00:00,+03:00,EEST +1995-09-24T00:00:00,+02:00,EET +1996-03-31T00:00:00,+03:00,EEST +1996-10-27T01:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-kirov.txt b/desk/gub/lib/pytz/europe-kirov.txt new file mode 100644 index 0000000..a9f2add --- /dev/null +++ b/desk/gub/lib/pytz/europe-kirov.txt @@ -0,0 +1,65 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:19,LMT +1919-07-01T00:00:00,+03:00,+03 +1930-06-20T21:00:00,+04:00,+04 +1981-03-31T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+04:00,+04 +1982-03-31T20:00:00,+05:00,+05 +1982-09-30T19:00:00,+04:00,+04 +1983-03-31T20:00:00,+05:00,+05 +1983-09-30T19:00:00,+04:00,+04 +1984-03-31T20:00:00,+05:00,+05 +1984-09-29T22:00:00,+04:00,+04 +1985-03-30T22:00:00,+05:00,+05 +1985-09-28T22:00:00,+04:00,+04 +1986-03-29T22:00:00,+05:00,+05 +1986-09-27T22:00:00,+04:00,+04 +1987-03-28T22:00:00,+05:00,+05 +1987-09-26T22:00:00,+04:00,+04 +1988-03-26T22:00:00,+05:00,+05 +1988-09-24T22:00:00,+04:00,+04 +1989-03-25T22:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-09-29T23:00:00,+03:00,MSK +1991-03-30T23:00:00,+04:00,+04 +1992-03-28T22:00:00,+04:00,MSD +1992-09-26T23:00:00,+03:00,MSK +1993-03-27T23:00:00,+04:00,MSD +1993-09-25T23:00:00,+03:00,MSK +1994-03-26T23:00:00,+04:00,MSD +1994-09-24T23:00:00,+03:00,MSK +1995-03-25T23:00:00,+04:00,MSD +1995-09-23T23:00:00,+03:00,MSK +1996-03-30T23:00:00,+04:00,MSD +1996-10-26T23:00:00,+03:00,MSK +1997-03-29T23:00:00,+04:00,MSD +1997-10-25T23:00:00,+03:00,MSK +1998-03-28T23:00:00,+04:00,MSD +1998-10-24T23:00:00,+03:00,MSK +1999-03-27T23:00:00,+04:00,MSD +1999-10-30T23:00:00,+03:00,MSK +2000-03-25T23:00:00,+04:00,MSD +2000-10-28T23:00:00,+03:00,MSK +2001-03-24T23:00:00,+04:00,MSD +2001-10-27T23:00:00,+03:00,MSK +2002-03-30T23:00:00,+04:00,MSD +2002-10-26T23:00:00,+03:00,MSK +2003-03-29T23:00:00,+04:00,MSD +2003-10-25T23:00:00,+03:00,MSK +2004-03-27T23:00:00,+04:00,MSD +2004-10-30T23:00:00,+03:00,MSK +2005-03-26T23:00:00,+04:00,MSD +2005-10-29T23:00:00,+03:00,MSK +2006-03-25T23:00:00,+04:00,MSD +2006-10-28T23:00:00,+03:00,MSK +2007-03-24T23:00:00,+04:00,MSD +2007-10-27T23:00:00,+03:00,MSK +2008-03-29T23:00:00,+04:00,MSD +2008-10-25T23:00:00,+03:00,MSK +2009-03-28T23:00:00,+04:00,MSD +2009-10-24T23:00:00,+03:00,MSK +2010-03-27T23:00:00,+04:00,MSD +2010-10-30T23:00:00,+03:00,MSK +2011-03-26T23:00:00,+04:00,MSK +2014-10-25T22:00:00,+03:00,MSK \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-kyiv.txt b/desk/gub/lib/pytz/europe-kyiv.txt new file mode 100644 index 0000000..0718d6d --- /dev/null +++ b/desk/gub/lib/pytz/europe-kyiv.txt @@ -0,0 +1,123 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:02,LMT +1901-12-13T20:45:52,+02:02,KMT +1924-05-01T21:57:56,+02:00,EET +1930-06-20T22:00:00,+03:00,MSK +1941-09-19T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1943-11-05T23:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-06-30T22:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-09-25T00:00:00,+02:00,EET +1995-03-26T00:00:00,+03:00,EEST +1995-09-24T00:00:00,+02:00,EET +1996-03-31T00:00:00,+03:00,EEST +1996-10-27T01:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-lisbon.txt b/desk/gub/lib/pytz/europe-lisbon.txt new file mode 100644 index 0000000..9c53c8f --- /dev/null +++ b/desk/gub/lib/pytz/europe-lisbon.txt @@ -0,0 +1,225 @@ +Time,Offset,Name +1912-01-01T00:00:00,+00:00,WET +1916-06-17T23:00:00,+01:00,WEST +1916-11-01T00:00:00,+00:00,WET +1917-03-01T00:00:00,+01:00,WEST +1917-10-14T23:00:00,+00:00,WET +1918-03-01T00:00:00,+01:00,WEST +1918-10-14T23:00:00,+00:00,WET +1919-03-01T00:00:00,+01:00,WEST +1919-10-14T23:00:00,+00:00,WET +1920-03-01T00:00:00,+01:00,WEST +1920-10-14T23:00:00,+00:00,WET +1921-03-01T00:00:00,+01:00,WEST +1921-10-14T23:00:00,+00:00,WET +1924-04-16T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-06T23:00:00,+00:00,WET +1929-04-20T23:00:00,+01:00,WEST +1929-10-05T23:00:00,+00:00,WET +1931-04-18T23:00:00,+01:00,WEST +1931-10-03T23:00:00,+00:00,WET +1932-04-02T23:00:00,+01:00,WEST +1932-10-01T23:00:00,+00:00,WET +1934-04-07T23:00:00,+01:00,WEST +1934-10-06T23:00:00,+00:00,WET +1935-03-30T23:00:00,+01:00,WEST +1935-10-05T23:00:00,+00:00,WET +1936-04-18T23:00:00,+01:00,WEST +1936-10-03T23:00:00,+00:00,WET +1937-04-03T23:00:00,+01:00,WEST +1937-10-02T23:00:00,+00:00,WET +1938-03-26T23:00:00,+01:00,WEST +1938-10-01T23:00:00,+00:00,WET +1939-04-15T23:00:00,+01:00,WEST +1939-11-18T23:00:00,+00:00,WET +1940-02-24T23:00:00,+01:00,WEST +1940-10-07T23:00:00,+00:00,WET +1941-04-05T23:00:00,+01:00,WEST +1941-10-05T23:00:00,+00:00,WET +1942-03-14T23:00:00,+01:00,WEST +1942-04-25T22:00:00,+02:00,WEMT +1942-08-15T22:00:00,+01:00,WEST +1942-10-24T23:00:00,+00:00,WET +1943-03-13T23:00:00,+01:00,WEST +1943-04-17T22:00:00,+02:00,WEMT +1943-08-28T22:00:00,+01:00,WEST +1943-10-30T23:00:00,+00:00,WET +1944-03-11T23:00:00,+01:00,WEST +1944-04-22T22:00:00,+02:00,WEMT +1944-08-26T22:00:00,+01:00,WEST +1944-10-28T23:00:00,+00:00,WET +1945-03-10T23:00:00,+01:00,WEST +1945-04-21T22:00:00,+02:00,WEMT +1945-08-25T22:00:00,+01:00,WEST +1945-10-27T23:00:00,+00:00,WET +1946-04-06T23:00:00,+01:00,WEST +1946-10-05T23:00:00,+00:00,WET +1947-04-06T02:00:00,+01:00,WEST +1947-10-05T02:00:00,+00:00,WET +1948-04-04T02:00:00,+01:00,WEST +1948-10-03T02:00:00,+00:00,WET +1949-04-03T02:00:00,+01:00,WEST +1949-10-02T02:00:00,+00:00,WET +1950-04-02T02:00:00,+01:00,WEST +1950-10-01T02:00:00,+00:00,WET +1951-04-01T02:00:00,+01:00,WEST +1951-10-07T02:00:00,+00:00,WET +1952-04-06T02:00:00,+01:00,WEST +1952-10-05T02:00:00,+00:00,WET +1953-04-05T02:00:00,+01:00,WEST +1953-10-04T02:00:00,+00:00,WET +1954-04-04T02:00:00,+01:00,WEST +1954-10-03T02:00:00,+00:00,WET +1955-04-03T02:00:00,+01:00,WEST +1955-10-02T02:00:00,+00:00,WET +1956-04-01T02:00:00,+01:00,WEST +1956-10-07T02:00:00,+00:00,WET +1957-04-07T02:00:00,+01:00,WEST +1957-10-06T02:00:00,+00:00,WET +1958-04-06T02:00:00,+01:00,WEST +1958-10-05T02:00:00,+00:00,WET +1959-04-05T02:00:00,+01:00,WEST +1959-10-04T02:00:00,+00:00,WET +1960-04-03T02:00:00,+01:00,WEST +1960-10-02T02:00:00,+00:00,WET +1961-04-02T02:00:00,+01:00,WEST +1961-10-01T02:00:00,+00:00,WET +1962-04-01T02:00:00,+01:00,WEST +1962-10-07T02:00:00,+00:00,WET +1963-04-07T02:00:00,+01:00,WEST +1963-10-06T02:00:00,+00:00,WET +1964-04-05T02:00:00,+01:00,WEST +1964-10-04T02:00:00,+00:00,WET +1965-04-04T02:00:00,+01:00,WEST +1965-10-03T02:00:00,+00:00,WET +1966-04-03T02:00:00,+01:00,WEST +1966-10-02T02:00:00,+01:00,CET +1976-09-26T00:00:00,+00:00,WET +1977-03-27T00:00:00,+01:00,WEST +1977-09-25T00:00:00,+00:00,WET +1978-04-02T01:00:00,+01:00,WEST +1978-10-01T01:00:00,+00:00,WET +1979-04-01T01:00:00,+01:00,WEST +1979-09-30T01:00:00,+00:00,WET +1980-04-06T01:00:00,+01:00,WEST +1980-09-28T01:00:00,+00:00,WET +1981-03-29T00:00:00,+01:00,WEST +1981-09-27T00:00:00,+00:00,WET +1982-03-28T00:00:00,+01:00,WEST +1982-09-26T00:00:00,+00:00,WET +1983-03-27T00:00:00,+01:00,WEST +1983-09-25T00:00:00,+00:00,WET +1984-03-25T00:00:00,+01:00,WEST +1984-09-30T00:00:00,+00:00,WET +1985-03-31T00:00:00,+01:00,WEST +1985-09-29T00:00:00,+00:00,WET +1986-03-30T01:00:00,+01:00,WEST +1986-09-28T01:00:00,+00:00,WET +1987-03-29T01:00:00,+01:00,WEST +1987-09-27T01:00:00,+00:00,WET +1988-03-27T01:00:00,+01:00,WEST +1988-09-25T01:00:00,+00:00,WET +1989-03-26T01:00:00,+01:00,WEST +1989-09-24T01:00:00,+00:00,WET +1990-03-25T01:00:00,+01:00,WEST +1990-09-30T01:00:00,+00:00,WET +1991-03-31T01:00:00,+01:00,WEST +1991-09-29T01:00:00,+00:00,WET +1992-03-29T01:00:00,+01:00,WEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+01:00,WEST +1996-10-27T01:00:00,+00:00,WET +1997-03-30T01:00:00,+01:00,WEST +1997-10-26T01:00:00,+00:00,WET +1998-03-29T01:00:00,+01:00,WEST +1998-10-25T01:00:00,+00:00,WET +1999-03-28T01:00:00,+01:00,WEST +1999-10-31T01:00:00,+00:00,WET +2000-03-26T01:00:00,+01:00,WEST +2000-10-29T01:00:00,+00:00,WET +2001-03-25T01:00:00,+01:00,WEST +2001-10-28T01:00:00,+00:00,WET +2002-03-31T01:00:00,+01:00,WEST +2002-10-27T01:00:00,+00:00,WET +2003-03-30T01:00:00,+01:00,WEST +2003-10-26T01:00:00,+00:00,WET +2004-03-28T01:00:00,+01:00,WEST +2004-10-31T01:00:00,+00:00,WET +2005-03-27T01:00:00,+01:00,WEST +2005-10-30T01:00:00,+00:00,WET +2006-03-26T01:00:00,+01:00,WEST +2006-10-29T01:00:00,+00:00,WET +2007-03-25T01:00:00,+01:00,WEST +2007-10-28T01:00:00,+00:00,WET +2008-03-30T01:00:00,+01:00,WEST +2008-10-26T01:00:00,+00:00,WET +2009-03-29T01:00:00,+01:00,WEST +2009-10-25T01:00:00,+00:00,WET +2010-03-28T01:00:00,+01:00,WEST +2010-10-31T01:00:00,+00:00,WET +2011-03-27T01:00:00,+01:00,WEST +2011-10-30T01:00:00,+00:00,WET +2012-03-25T01:00:00,+01:00,WEST +2012-10-28T01:00:00,+00:00,WET +2013-03-31T01:00:00,+01:00,WEST +2013-10-27T01:00:00,+00:00,WET +2014-03-30T01:00:00,+01:00,WEST +2014-10-26T01:00:00,+00:00,WET +2015-03-29T01:00:00,+01:00,WEST +2015-10-25T01:00:00,+00:00,WET +2016-03-27T01:00:00,+01:00,WEST +2016-10-30T01:00:00,+00:00,WET +2017-03-26T01:00:00,+01:00,WEST +2017-10-29T01:00:00,+00:00,WET +2018-03-25T01:00:00,+01:00,WEST +2018-10-28T01:00:00,+00:00,WET +2019-03-31T01:00:00,+01:00,WEST +2019-10-27T01:00:00,+00:00,WET +2020-03-29T01:00:00,+01:00,WEST +2020-10-25T01:00:00,+00:00,WET +2021-03-28T01:00:00,+01:00,WEST +2021-10-31T01:00:00,+00:00,WET +2022-03-27T01:00:00,+01:00,WEST +2022-10-30T01:00:00,+00:00,WET +2023-03-26T01:00:00,+01:00,WEST +2023-10-29T01:00:00,+00:00,WET +2024-03-31T01:00:00,+01:00,WEST +2024-10-27T01:00:00,+00:00,WET +2025-03-30T01:00:00,+01:00,WEST +2025-10-26T01:00:00,+00:00,WET +2026-03-29T01:00:00,+01:00,WEST +2026-10-25T01:00:00,+00:00,WET +2027-03-28T01:00:00,+01:00,WEST +2027-10-31T01:00:00,+00:00,WET +2028-03-26T01:00:00,+01:00,WEST +2028-10-29T01:00:00,+00:00,WET +2029-03-25T01:00:00,+01:00,WEST +2029-10-28T01:00:00,+00:00,WET +2030-03-31T01:00:00,+01:00,WEST +2030-10-27T01:00:00,+00:00,WET +2031-03-30T01:00:00,+01:00,WEST +2031-10-26T01:00:00,+00:00,WET +2032-03-28T01:00:00,+01:00,WEST +2032-10-31T01:00:00,+00:00,WET +2033-03-27T01:00:00,+01:00,WEST +2033-10-30T01:00:00,+00:00,WET +2034-03-26T01:00:00,+01:00,WEST +2034-10-29T01:00:00,+00:00,WET +2035-03-25T01:00:00,+01:00,WEST +2035-10-28T01:00:00,+00:00,WET +2036-03-30T01:00:00,+01:00,WEST +2036-10-26T01:00:00,+00:00,WET +2037-03-29T01:00:00,+01:00,WEST +2037-10-25T01:00:00,+00:00,WET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-ljubljana.txt b/desk/gub/lib/pytz/europe-ljubljana.txt new file mode 100644 index 0000000..1692b4c --- /dev/null +++ b/desk/gub/lib/pytz/europe-ljubljana.txt @@ -0,0 +1,121 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:22,LMT +1901-12-13T20:45:52,+01:00,CET +1941-04-18T22:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-05-08T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-london.txt b/desk/gub/lib/pytz/europe-london.txt new file mode 100644 index 0000000..a0614b8 --- /dev/null +++ b/desk/gub/lib/pytz/europe-london.txt @@ -0,0 +1,243 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,GMT +1916-05-21T02:00:00,+01:00,BST +1916-10-01T02:00:00,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,BST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,BST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,BST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,BST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,BST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,BST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,BST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,BST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,BST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,BST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,BST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,BST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,BST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,BST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,BST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,BST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,BST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,BST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,BST +1941-05-04T01:00:00,+02:00,BDST +1941-08-10T01:00:00,+01:00,BST +1942-04-05T01:00:00,+02:00,BDST +1942-08-09T01:00:00,+01:00,BST +1943-04-04T01:00:00,+02:00,BDST +1943-08-15T01:00:00,+01:00,BST +1944-04-02T01:00:00,+02:00,BDST +1944-09-17T01:00:00,+01:00,BST +1945-04-02T01:00:00,+02:00,BDST +1945-07-15T01:00:00,+01:00,BST +1945-10-07T02:00:00,+00:00,GMT +1946-04-14T02:00:00,+01:00,BST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,BST +1947-04-13T01:00:00,+02:00,BDST +1947-08-10T01:00:00,+01:00,BST +1947-11-02T02:00:00,+00:00,GMT +1948-03-14T02:00:00,+01:00,BST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,BST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,BST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,BST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,BST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,BST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,BST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,BST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,BST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,BST +1957-10-06T02:00:00,+00:00,GMT +1958-04-20T02:00:00,+01:00,BST +1958-10-05T02:00:00,+00:00,GMT +1959-04-19T02:00:00,+01:00,BST +1959-10-04T02:00:00,+00:00,GMT +1960-04-10T02:00:00,+01:00,BST +1960-10-02T02:00:00,+00:00,GMT +1961-03-26T02:00:00,+01:00,BST +1961-10-29T02:00:00,+00:00,GMT +1962-03-25T02:00:00,+01:00,BST +1962-10-28T02:00:00,+00:00,GMT +1963-03-31T02:00:00,+01:00,BST +1963-10-27T02:00:00,+00:00,GMT +1964-03-22T02:00:00,+01:00,BST +1964-10-25T02:00:00,+00:00,GMT +1965-03-21T02:00:00,+01:00,BST +1965-10-24T02:00:00,+00:00,GMT +1966-03-20T02:00:00,+01:00,BST +1966-10-23T02:00:00,+00:00,GMT +1967-03-19T02:00:00,+01:00,BST +1967-10-29T02:00:00,+00:00,GMT +1968-02-18T02:00:00,+01:00,BST +1968-10-26T23:00:00,+01:00,BST +1971-10-31T02:00:00,+00:00,GMT +1972-03-19T02:00:00,+01:00,BST +1972-10-29T02:00:00,+00:00,GMT +1973-03-18T02:00:00,+01:00,BST +1973-10-28T02:00:00,+00:00,GMT +1974-03-17T02:00:00,+01:00,BST +1974-10-27T02:00:00,+00:00,GMT +1975-03-16T02:00:00,+01:00,BST +1975-10-26T02:00:00,+00:00,GMT +1976-03-21T02:00:00,+01:00,BST +1976-10-24T02:00:00,+00:00,GMT +1977-03-20T02:00:00,+01:00,BST +1977-10-23T02:00:00,+00:00,GMT +1978-03-19T02:00:00,+01:00,BST +1978-10-29T02:00:00,+00:00,GMT +1979-03-18T02:00:00,+01:00,BST +1979-10-28T02:00:00,+00:00,GMT +1980-03-16T02:00:00,+01:00,BST +1980-10-26T02:00:00,+00:00,GMT +1981-03-29T01:00:00,+01:00,BST +1981-10-25T01:00:00,+00:00,GMT +1982-03-28T01:00:00,+01:00,BST +1982-10-24T01:00:00,+00:00,GMT +1983-03-27T01:00:00,+01:00,BST +1983-10-23T01:00:00,+00:00,GMT +1984-03-25T01:00:00,+01:00,BST +1984-10-28T01:00:00,+00:00,GMT +1985-03-31T01:00:00,+01:00,BST +1985-10-27T01:00:00,+00:00,GMT +1986-03-30T01:00:00,+01:00,BST +1986-10-26T01:00:00,+00:00,GMT +1987-03-29T01:00:00,+01:00,BST +1987-10-25T01:00:00,+00:00,GMT +1988-03-27T01:00:00,+01:00,BST +1988-10-23T01:00:00,+00:00,GMT +1989-03-26T01:00:00,+01:00,BST +1989-10-29T01:00:00,+00:00,GMT +1990-03-25T01:00:00,+01:00,BST +1990-10-28T01:00:00,+00:00,GMT +1991-03-31T01:00:00,+01:00,BST +1991-10-27T01:00:00,+00:00,GMT +1992-03-29T01:00:00,+01:00,BST +1992-10-25T01:00:00,+00:00,GMT +1993-03-28T01:00:00,+01:00,BST +1993-10-24T01:00:00,+00:00,GMT +1994-03-27T01:00:00,+01:00,BST +1994-10-23T01:00:00,+00:00,GMT +1995-03-26T01:00:00,+01:00,BST +1995-10-22T01:00:00,+00:00,GMT +1996-03-31T01:00:00,+01:00,BST +1996-10-27T01:00:00,+00:00,GMT +1997-03-30T01:00:00,+01:00,BST +1997-10-26T01:00:00,+00:00,GMT +1998-03-29T01:00:00,+01:00,BST +1998-10-25T01:00:00,+00:00,GMT +1999-03-28T01:00:00,+01:00,BST +1999-10-31T01:00:00,+00:00,GMT +2000-03-26T01:00:00,+01:00,BST +2000-10-29T01:00:00,+00:00,GMT +2001-03-25T01:00:00,+01:00,BST +2001-10-28T01:00:00,+00:00,GMT +2002-03-31T01:00:00,+01:00,BST +2002-10-27T01:00:00,+00:00,GMT +2003-03-30T01:00:00,+01:00,BST +2003-10-26T01:00:00,+00:00,GMT +2004-03-28T01:00:00,+01:00,BST +2004-10-31T01:00:00,+00:00,GMT +2005-03-27T01:00:00,+01:00,BST +2005-10-30T01:00:00,+00:00,GMT +2006-03-26T01:00:00,+01:00,BST +2006-10-29T01:00:00,+00:00,GMT +2007-03-25T01:00:00,+01:00,BST +2007-10-28T01:00:00,+00:00,GMT +2008-03-30T01:00:00,+01:00,BST +2008-10-26T01:00:00,+00:00,GMT +2009-03-29T01:00:00,+01:00,BST +2009-10-25T01:00:00,+00:00,GMT +2010-03-28T01:00:00,+01:00,BST +2010-10-31T01:00:00,+00:00,GMT +2011-03-27T01:00:00,+01:00,BST +2011-10-30T01:00:00,+00:00,GMT +2012-03-25T01:00:00,+01:00,BST +2012-10-28T01:00:00,+00:00,GMT +2013-03-31T01:00:00,+01:00,BST +2013-10-27T01:00:00,+00:00,GMT +2014-03-30T01:00:00,+01:00,BST +2014-10-26T01:00:00,+00:00,GMT +2015-03-29T01:00:00,+01:00,BST +2015-10-25T01:00:00,+00:00,GMT +2016-03-27T01:00:00,+01:00,BST +2016-10-30T01:00:00,+00:00,GMT +2017-03-26T01:00:00,+01:00,BST +2017-10-29T01:00:00,+00:00,GMT +2018-03-25T01:00:00,+01:00,BST +2018-10-28T01:00:00,+00:00,GMT +2019-03-31T01:00:00,+01:00,BST +2019-10-27T01:00:00,+00:00,GMT +2020-03-29T01:00:00,+01:00,BST +2020-10-25T01:00:00,+00:00,GMT +2021-03-28T01:00:00,+01:00,BST +2021-10-31T01:00:00,+00:00,GMT +2022-03-27T01:00:00,+01:00,BST +2022-10-30T01:00:00,+00:00,GMT +2023-03-26T01:00:00,+01:00,BST +2023-10-29T01:00:00,+00:00,GMT +2024-03-31T01:00:00,+01:00,BST +2024-10-27T01:00:00,+00:00,GMT +2025-03-30T01:00:00,+01:00,BST +2025-10-26T01:00:00,+00:00,GMT +2026-03-29T01:00:00,+01:00,BST +2026-10-25T01:00:00,+00:00,GMT +2027-03-28T01:00:00,+01:00,BST +2027-10-31T01:00:00,+00:00,GMT +2028-03-26T01:00:00,+01:00,BST +2028-10-29T01:00:00,+00:00,GMT +2029-03-25T01:00:00,+01:00,BST +2029-10-28T01:00:00,+00:00,GMT +2030-03-31T01:00:00,+01:00,BST +2030-10-27T01:00:00,+00:00,GMT +2031-03-30T01:00:00,+01:00,BST +2031-10-26T01:00:00,+00:00,GMT +2032-03-28T01:00:00,+01:00,BST +2032-10-31T01:00:00,+00:00,GMT +2033-03-27T01:00:00,+01:00,BST +2033-10-30T01:00:00,+00:00,GMT +2034-03-26T01:00:00,+01:00,BST +2034-10-29T01:00:00,+00:00,GMT +2035-03-25T01:00:00,+01:00,BST +2035-10-28T01:00:00,+00:00,GMT +2036-03-30T01:00:00,+01:00,BST +2036-10-26T01:00:00,+00:00,GMT +2037-03-29T01:00:00,+01:00,BST +2037-10-25T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-luxembourg.txt b/desk/gub/lib/pytz/europe-luxembourg.txt new file mode 100644 index 0000000..84f817c --- /dev/null +++ b/desk/gub/lib/pytz/europe-luxembourg.txt @@ -0,0 +1,186 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:18,LMT +1901-12-13T20:45:52,+00:00,WET +1914-11-08T00:00:00,+01:00,CET +1916-04-30T23:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1918-11-11T11:00:00,+00:00,WET +1919-03-01T23:00:00,+01:00,WEST +1919-10-04T23:00:00,+00:00,WET +1920-02-14T23:00:00,+01:00,WEST +1920-10-23T23:00:00,+00:00,WET +1921-03-14T23:00:00,+01:00,WEST +1921-10-25T23:00:00,+00:00,WET +1922-03-25T23:00:00,+01:00,WEST +1922-10-07T23:00:00,+00:00,WET +1923-04-21T23:00:00,+01:00,WEST +1923-10-06T23:00:00,+00:00,WET +1924-03-29T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1925-04-04T23:00:00,+01:00,WEST +1925-10-03T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-07T02:00:00,+00:00,WET +1929-04-21T02:00:00,+01:00,WEST +1929-10-06T02:00:00,+00:00,WET +1930-04-13T02:00:00,+01:00,WEST +1930-10-05T02:00:00,+00:00,WET +1931-04-19T02:00:00,+01:00,WEST +1931-10-04T02:00:00,+00:00,WET +1932-04-03T02:00:00,+01:00,WEST +1932-10-02T02:00:00,+00:00,WET +1933-03-26T02:00:00,+01:00,WEST +1933-10-08T02:00:00,+00:00,WET +1934-04-08T02:00:00,+01:00,WEST +1934-10-07T02:00:00,+00:00,WET +1935-03-31T02:00:00,+01:00,WEST +1935-10-06T02:00:00,+00:00,WET +1936-04-19T02:00:00,+01:00,WEST +1936-10-04T02:00:00,+00:00,WET +1937-04-04T02:00:00,+01:00,WEST +1937-10-03T02:00:00,+00:00,WET +1938-03-27T02:00:00,+01:00,WEST +1938-10-02T02:00:00,+00:00,WET +1939-04-16T02:00:00,+01:00,WEST +1939-11-19T02:00:00,+00:00,WET +1940-02-25T02:00:00,+01:00,WEST +1940-05-20T02:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-09-17T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1946-05-19T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1977-04-03T01:00:00,+02:00,CEST +1977-09-25T01:00:00,+01:00,CET +1978-04-02T01:00:00,+02:00,CEST +1978-10-01T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-madrid.txt b/desk/gub/lib/pytz/europe-madrid.txt new file mode 100644 index 0000000..c2d6108 --- /dev/null +++ b/desk/gub/lib/pytz/europe-madrid.txt @@ -0,0 +1,163 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,WET +1918-04-15T23:00:00,+01:00,WEST +1918-10-07T00:00:00,+00:00,WET +1919-04-06T23:00:00,+01:00,WEST +1919-10-07T00:00:00,+00:00,WET +1924-04-16T23:00:00,+01:00,WEST +1924-10-05T00:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-03T00:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-02T00:00:00,+00:00,WET +1928-04-15T00:00:00,+01:00,WEST +1928-10-07T00:00:00,+00:00,WET +1929-04-20T23:00:00,+01:00,WEST +1929-10-06T00:00:00,+00:00,WET +1937-06-16T23:00:00,+01:00,WEST +1937-10-03T00:00:00,+00:00,WET +1938-04-02T23:00:00,+01:00,WEST +1938-04-30T22:00:00,+02:00,WEMT +1938-10-02T22:00:00,+01:00,WEST +1939-10-08T00:00:00,+00:00,WET +1940-03-16T23:00:00,+01:00,CET +1942-05-02T22:00:00,+02:00,CEST +1942-08-31T23:00:00,+01:00,CET +1943-04-17T22:00:00,+02:00,CEST +1943-10-02T23:00:00,+01:00,CET +1944-04-15T22:00:00,+02:00,CEST +1944-09-30T23:00:00,+01:00,CET +1945-04-14T22:00:00,+02:00,CEST +1945-09-29T23:00:00,+01:00,CET +1946-04-13T22:00:00,+02:00,CEST +1946-09-28T23:00:00,+01:00,CET +1949-04-30T22:00:00,+02:00,CEST +1949-10-01T23:00:00,+01:00,CET +1974-04-13T22:00:00,+02:00,CEST +1974-10-05T23:00:00,+01:00,CET +1975-04-12T22:00:00,+02:00,CEST +1975-10-04T23:00:00,+01:00,CET +1976-03-27T22:00:00,+02:00,CEST +1976-09-25T23:00:00,+01:00,CET +1977-04-02T22:00:00,+02:00,CEST +1977-09-24T23:00:00,+01:00,CET +1978-04-02T01:00:00,+02:00,CEST +1978-10-01T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-malta.txt b/desk/gub/lib/pytz/europe-malta.txt new file mode 100644 index 0000000..6df9b3d --- /dev/null +++ b/desk/gub/lib/pytz/europe-malta.txt @@ -0,0 +1,171 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:58,LMT +1901-12-13T20:45:52,+01:00,CET +1916-06-03T23:00:00,+02:00,CEST +1916-09-30T22:00:00,+01:00,CET +1917-03-31T23:00:00,+02:00,CEST +1917-09-30T22:00:00,+01:00,CET +1918-03-09T23:00:00,+02:00,CEST +1918-10-06T22:00:00,+01:00,CET +1919-03-01T23:00:00,+02:00,CEST +1919-10-04T22:00:00,+01:00,CET +1920-03-20T23:00:00,+02:00,CEST +1920-09-18T22:00:00,+01:00,CET +1940-06-14T23:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-02T01:00:00,+02:00,CEST +1944-09-17T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-14T23:00:00,+01:00,CET +1946-03-17T01:00:00,+02:00,CEST +1946-10-06T01:00:00,+01:00,CET +1947-03-15T23:00:00,+02:00,CEST +1947-10-04T23:00:00,+01:00,CET +1948-02-29T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1966-05-21T23:00:00,+02:00,CEST +1966-09-24T22:00:00,+01:00,CET +1967-05-27T23:00:00,+02:00,CEST +1967-09-23T23:00:00,+01:00,CET +1968-05-25T23:00:00,+02:00,CEST +1968-09-21T23:00:00,+01:00,CET +1969-05-31T23:00:00,+02:00,CEST +1969-09-27T23:00:00,+01:00,CET +1970-05-30T23:00:00,+02:00,CEST +1970-09-26T23:00:00,+01:00,CET +1971-05-22T23:00:00,+02:00,CEST +1971-09-25T23:00:00,+01:00,CET +1972-05-27T23:00:00,+02:00,CEST +1972-09-30T23:00:00,+01:00,CET +1973-03-30T23:00:00,+02:00,CEST +1973-09-28T23:00:00,+01:00,CET +1974-04-20T23:00:00,+02:00,CEST +1974-09-15T23:00:00,+01:00,CET +1975-04-20T01:00:00,+02:00,CEST +1975-09-21T00:00:00,+01:00,CET +1976-04-18T01:00:00,+02:00,CEST +1976-09-19T00:00:00,+01:00,CET +1977-04-17T01:00:00,+02:00,CEST +1977-09-18T00:00:00,+01:00,CET +1978-04-16T01:00:00,+02:00,CEST +1978-09-17T00:00:00,+01:00,CET +1979-04-15T01:00:00,+02:00,CEST +1979-09-16T00:00:00,+01:00,CET +1980-03-31T01:00:00,+02:00,CEST +1980-09-21T00:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-mariehamn.txt b/desk/gub/lib/pytz/europe-mariehamn.txt new file mode 100644 index 0000000..791e971 --- /dev/null +++ b/desk/gub/lib/pytz/europe-mariehamn.txt @@ -0,0 +1,120 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:40,LMT +1901-12-13T20:45:52,+01:40,HMT +1921-04-30T22:20:11,+02:00,EET +1942-04-02T22:00:00,+03:00,EEST +1942-10-03T22:00:00,+02:00,EET +1981-03-29T00:00:00,+03:00,EEST +1981-09-27T00:00:00,+02:00,EET +1982-03-28T00:00:00,+03:00,EEST +1982-09-26T00:00:00,+02:00,EET +1983-03-27T01:00:00,+03:00,EEST +1983-09-25T01:00:00,+02:00,EET +1984-03-25T01:00:00,+03:00,EEST +1984-09-30T01:00:00,+02:00,EET +1985-03-31T01:00:00,+03:00,EEST +1985-09-29T01:00:00,+02:00,EET +1986-03-30T01:00:00,+03:00,EEST +1986-09-28T01:00:00,+02:00,EET +1987-03-29T01:00:00,+03:00,EEST +1987-09-27T01:00:00,+02:00,EET +1988-03-27T01:00:00,+03:00,EEST +1988-09-25T01:00:00,+02:00,EET +1989-03-26T01:00:00,+03:00,EEST +1989-09-24T01:00:00,+02:00,EET +1990-03-25T01:00:00,+03:00,EEST +1990-09-30T01:00:00,+02:00,EET +1991-03-31T01:00:00,+03:00,EEST +1991-09-29T01:00:00,+02:00,EET +1992-03-29T01:00:00,+03:00,EEST +1992-09-27T01:00:00,+02:00,EET +1993-03-28T01:00:00,+03:00,EEST +1993-09-26T01:00:00,+02:00,EET +1994-03-27T01:00:00,+03:00,EEST +1994-09-25T01:00:00,+02:00,EET +1995-03-26T01:00:00,+03:00,EEST +1995-09-24T01:00:00,+02:00,EET +1996-03-31T01:00:00,+03:00,EEST +1996-10-27T01:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-minsk.txt b/desk/gub/lib/pytz/europe-minsk.txt new file mode 100644 index 0000000..4f850c7 --- /dev/null +++ b/desk/gub/lib/pytz/europe-minsk.txt @@ -0,0 +1,70 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:50,LMT +1901-12-13T20:45:52,+01:50,MMT +1924-05-01T22:10:00,+02:00,EET +1930-06-20T22:00:00,+03:00,MSK +1941-06-27T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-07-02T22:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1991-03-30T23:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-09-25T00:00:00,+02:00,EET +1995-03-26T00:00:00,+03:00,EEST +1995-09-24T00:00:00,+02:00,EET +1996-03-31T00:00:00,+03:00,EEST +1996-10-27T00:00:00,+02:00,EET +1997-03-30T00:00:00,+03:00,EEST +1997-10-26T00:00:00,+02:00,EET +1998-03-29T00:00:00,+03:00,EEST +1998-10-25T00:00:00,+02:00,EET +1999-03-28T00:00:00,+03:00,EEST +1999-10-31T00:00:00,+02:00,EET +2000-03-26T00:00:00,+03:00,EEST +2000-10-29T00:00:00,+02:00,EET +2001-03-25T00:00:00,+03:00,EEST +2001-10-28T00:00:00,+02:00,EET +2002-03-31T00:00:00,+03:00,EEST +2002-10-27T00:00:00,+02:00,EET +2003-03-30T00:00:00,+03:00,EEST +2003-10-26T00:00:00,+02:00,EET +2004-03-28T00:00:00,+03:00,EEST +2004-10-31T00:00:00,+02:00,EET +2005-03-27T00:00:00,+03:00,EEST +2005-10-30T00:00:00,+02:00,EET +2006-03-26T00:00:00,+03:00,EEST +2006-10-29T00:00:00,+02:00,EET +2007-03-25T00:00:00,+03:00,EEST +2007-10-28T00:00:00,+02:00,EET +2008-03-30T00:00:00,+03:00,EEST +2008-10-26T00:00:00,+02:00,EET +2009-03-29T00:00:00,+03:00,EEST +2009-10-25T00:00:00,+02:00,EET +2010-03-28T00:00:00,+03:00,EEST +2010-10-31T00:00:00,+02:00,EET +2011-03-27T00:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-monaco.txt b/desk/gub/lib/pytz/europe-monaco.txt new file mode 100644 index 0000000..a473d5d --- /dev/null +++ b/desk/gub/lib/pytz/europe-monaco.txt @@ -0,0 +1,186 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:09,LMT +1901-12-13T20:45:52,+00:09,PMT +1911-03-10T23:50:39,+00:00,WET +1916-06-14T23:00:00,+01:00,WEST +1916-10-01T23:00:00,+00:00,WET +1917-03-24T23:00:00,+01:00,WEST +1917-10-07T23:00:00,+00:00,WET +1918-03-09T23:00:00,+01:00,WEST +1918-10-06T23:00:00,+00:00,WET +1919-03-01T23:00:00,+01:00,WEST +1919-10-05T23:00:00,+00:00,WET +1920-02-14T23:00:00,+01:00,WEST +1920-10-23T23:00:00,+00:00,WET +1921-03-14T23:00:00,+01:00,WEST +1921-10-25T23:00:00,+00:00,WET +1922-03-25T23:00:00,+01:00,WEST +1922-10-07T23:00:00,+00:00,WET +1923-05-26T23:00:00,+01:00,WEST +1923-10-06T23:00:00,+00:00,WET +1924-03-29T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1925-04-04T23:00:00,+01:00,WEST +1925-10-03T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-06T23:00:00,+00:00,WET +1929-04-20T23:00:00,+01:00,WEST +1929-10-05T23:00:00,+00:00,WET +1930-04-12T23:00:00,+01:00,WEST +1930-10-04T23:00:00,+00:00,WET +1931-04-18T23:00:00,+01:00,WEST +1931-10-03T23:00:00,+00:00,WET +1932-04-02T23:00:00,+01:00,WEST +1932-10-01T23:00:00,+00:00,WET +1933-03-25T23:00:00,+01:00,WEST +1933-10-07T23:00:00,+00:00,WET +1934-04-07T23:00:00,+01:00,WEST +1934-10-06T23:00:00,+00:00,WET +1935-03-30T23:00:00,+01:00,WEST +1935-10-05T23:00:00,+00:00,WET +1936-04-18T23:00:00,+01:00,WEST +1936-10-03T23:00:00,+00:00,WET +1937-04-03T23:00:00,+01:00,WEST +1937-10-02T23:00:00,+00:00,WET +1938-03-26T23:00:00,+01:00,WEST +1938-10-01T23:00:00,+00:00,WET +1939-04-15T23:00:00,+01:00,WEST +1939-11-18T23:00:00,+00:00,WET +1940-02-25T02:00:00,+01:00,WEST +1940-06-14T22:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-08-24T22:00:00,+02:00,WEMT +1944-10-07T23:00:00,+01:00,WEST +1945-04-02T01:00:00,+02:00,WEMT +1945-09-16T01:00:00,+01:00,CET +1976-03-28T00:00:00,+02:00,CEST +1976-09-25T23:00:00,+01:00,CET +1977-04-03T01:00:00,+02:00,CEST +1977-09-25T01:00:00,+01:00,CET +1978-04-02T01:00:00,+02:00,CEST +1978-10-01T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-moscow.txt b/desk/gub/lib/pytz/europe-moscow.txt new file mode 100644 index 0000000..52621f4 --- /dev/null +++ b/desk/gub/lib/pytz/europe-moscow.txt @@ -0,0 +1,80 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:30,LMT +1901-12-13T20:45:52,+02:30,MMT +1916-07-02T21:29:43,+02:31,MMT +1917-07-01T20:28:41,+03:31,MST +1917-12-27T20:28:41,+02:31,MMT +1918-05-31T19:28:41,+04:31,MDST +1918-09-15T20:28:41,+03:31,MST +1919-05-31T19:28:41,+04:31,MDST +1919-07-01T00:00:00,+04:00,MSD +1919-08-15T20:00:00,+03:00,MSK +1921-02-14T20:00:00,+04:00,MSD +1921-03-20T19:00:00,+05:00,+05 +1921-08-31T19:00:00,+04:00,MSD +1921-09-30T20:00:00,+03:00,MSK +1922-09-30T21:00:00,+02:00,EET +1930-06-20T22:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-09-29T23:00:00,+03:00,MSK +1991-03-30T23:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-01-19T00:00:00,+03:00,MSK +1992-03-28T23:00:00,+04:00,MSD +1992-09-26T23:00:00,+03:00,MSK +1993-03-27T23:00:00,+04:00,MSD +1993-09-25T23:00:00,+03:00,MSK +1994-03-26T23:00:00,+04:00,MSD +1994-09-24T23:00:00,+03:00,MSK +1995-03-25T23:00:00,+04:00,MSD +1995-09-23T23:00:00,+03:00,MSK +1996-03-30T23:00:00,+04:00,MSD +1996-10-26T23:00:00,+03:00,MSK +1997-03-29T23:00:00,+04:00,MSD +1997-10-25T23:00:00,+03:00,MSK +1998-03-28T23:00:00,+04:00,MSD +1998-10-24T23:00:00,+03:00,MSK +1999-03-27T23:00:00,+04:00,MSD +1999-10-30T23:00:00,+03:00,MSK +2000-03-25T23:00:00,+04:00,MSD +2000-10-28T23:00:00,+03:00,MSK +2001-03-24T23:00:00,+04:00,MSD +2001-10-27T23:00:00,+03:00,MSK +2002-03-30T23:00:00,+04:00,MSD +2002-10-26T23:00:00,+03:00,MSK +2003-03-29T23:00:00,+04:00,MSD +2003-10-25T23:00:00,+03:00,MSK +2004-03-27T23:00:00,+04:00,MSD +2004-10-30T23:00:00,+03:00,MSK +2005-03-26T23:00:00,+04:00,MSD +2005-10-29T23:00:00,+03:00,MSK +2006-03-25T23:00:00,+04:00,MSD +2006-10-28T23:00:00,+03:00,MSK +2007-03-24T23:00:00,+04:00,MSD +2007-10-27T23:00:00,+03:00,MSK +2008-03-29T23:00:00,+04:00,MSD +2008-10-25T23:00:00,+03:00,MSK +2009-03-28T23:00:00,+04:00,MSD +2009-10-24T23:00:00,+03:00,MSK +2010-03-27T23:00:00,+04:00,MSD +2010-10-30T23:00:00,+03:00,MSK +2011-03-26T23:00:00,+04:00,MSK +2014-10-25T22:00:00,+03:00,MSK \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-nicosia.txt b/desk/gub/lib/pytz/europe-nicosia.txt new file mode 100644 index 0000000..c2993cf --- /dev/null +++ b/desk/gub/lib/pytz/europe-nicosia.txt @@ -0,0 +1,129 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:13,LMT +1921-11-13T21:46:32,+02:00,EET +1975-04-12T22:00:00,+03:00,EEST +1975-10-11T21:00:00,+02:00,EET +1976-05-14T22:00:00,+03:00,EEST +1976-10-10T21:00:00,+02:00,EET +1977-04-02T22:00:00,+03:00,EEST +1977-09-24T21:00:00,+02:00,EET +1978-04-01T22:00:00,+03:00,EEST +1978-10-01T21:00:00,+02:00,EET +1979-03-31T22:00:00,+03:00,EEST +1979-09-29T21:00:00,+02:00,EET +1980-04-05T22:00:00,+03:00,EEST +1980-09-27T21:00:00,+02:00,EET +1981-03-28T22:00:00,+03:00,EEST +1981-09-26T21:00:00,+02:00,EET +1982-03-27T22:00:00,+03:00,EEST +1982-09-25T21:00:00,+02:00,EET +1983-03-26T22:00:00,+03:00,EEST +1983-09-24T21:00:00,+02:00,EET +1984-03-24T22:00:00,+03:00,EEST +1984-09-29T21:00:00,+02:00,EET +1985-03-30T22:00:00,+03:00,EEST +1985-09-28T21:00:00,+02:00,EET +1986-03-29T22:00:00,+03:00,EEST +1986-09-27T21:00:00,+02:00,EET +1987-03-28T22:00:00,+03:00,EEST +1987-09-26T21:00:00,+02:00,EET +1988-03-26T22:00:00,+03:00,EEST +1988-09-24T21:00:00,+02:00,EET +1989-03-25T22:00:00,+03:00,EEST +1989-09-23T21:00:00,+02:00,EET +1990-03-24T22:00:00,+03:00,EEST +1990-09-29T21:00:00,+02:00,EET +1991-03-30T22:00:00,+03:00,EEST +1991-09-28T21:00:00,+02:00,EET +1992-03-28T22:00:00,+03:00,EEST +1992-09-26T21:00:00,+02:00,EET +1993-03-27T22:00:00,+03:00,EEST +1993-09-25T21:00:00,+02:00,EET +1994-03-26T22:00:00,+03:00,EEST +1994-09-24T21:00:00,+02:00,EET +1995-03-25T22:00:00,+03:00,EEST +1995-09-23T21:00:00,+02:00,EET +1996-03-30T22:00:00,+03:00,EEST +1996-09-28T21:00:00,+02:00,EET +1997-03-29T22:00:00,+03:00,EEST +1997-09-27T21:00:00,+02:00,EET +1998-03-28T22:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-oslo.txt b/desk/gub/lib/pytz/europe-oslo.txt new file mode 100644 index 0000000..56ab2cd --- /dev/null +++ b/desk/gub/lib/pytz/europe-oslo.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:53,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-05-24T00:00:00,+03:00,CEMT +1945-09-24T00:00:00,+02:00,CEST +1945-11-18T01:00:00,+01:00,CET +1946-04-14T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1947-04-06T02:00:00,+02:00,CEST +1947-05-11T01:00:00,+03:00,CEMT +1947-06-29T00:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-10T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-paris.txt b/desk/gub/lib/pytz/europe-paris.txt new file mode 100644 index 0000000..a473d5d --- /dev/null +++ b/desk/gub/lib/pytz/europe-paris.txt @@ -0,0 +1,186 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:09,LMT +1901-12-13T20:45:52,+00:09,PMT +1911-03-10T23:50:39,+00:00,WET +1916-06-14T23:00:00,+01:00,WEST +1916-10-01T23:00:00,+00:00,WET +1917-03-24T23:00:00,+01:00,WEST +1917-10-07T23:00:00,+00:00,WET +1918-03-09T23:00:00,+01:00,WEST +1918-10-06T23:00:00,+00:00,WET +1919-03-01T23:00:00,+01:00,WEST +1919-10-05T23:00:00,+00:00,WET +1920-02-14T23:00:00,+01:00,WEST +1920-10-23T23:00:00,+00:00,WET +1921-03-14T23:00:00,+01:00,WEST +1921-10-25T23:00:00,+00:00,WET +1922-03-25T23:00:00,+01:00,WEST +1922-10-07T23:00:00,+00:00,WET +1923-05-26T23:00:00,+01:00,WEST +1923-10-06T23:00:00,+00:00,WET +1924-03-29T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1925-04-04T23:00:00,+01:00,WEST +1925-10-03T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-06T23:00:00,+00:00,WET +1929-04-20T23:00:00,+01:00,WEST +1929-10-05T23:00:00,+00:00,WET +1930-04-12T23:00:00,+01:00,WEST +1930-10-04T23:00:00,+00:00,WET +1931-04-18T23:00:00,+01:00,WEST +1931-10-03T23:00:00,+00:00,WET +1932-04-02T23:00:00,+01:00,WEST +1932-10-01T23:00:00,+00:00,WET +1933-03-25T23:00:00,+01:00,WEST +1933-10-07T23:00:00,+00:00,WET +1934-04-07T23:00:00,+01:00,WEST +1934-10-06T23:00:00,+00:00,WET +1935-03-30T23:00:00,+01:00,WEST +1935-10-05T23:00:00,+00:00,WET +1936-04-18T23:00:00,+01:00,WEST +1936-10-03T23:00:00,+00:00,WET +1937-04-03T23:00:00,+01:00,WEST +1937-10-02T23:00:00,+00:00,WET +1938-03-26T23:00:00,+01:00,WEST +1938-10-01T23:00:00,+00:00,WET +1939-04-15T23:00:00,+01:00,WEST +1939-11-18T23:00:00,+00:00,WET +1940-02-25T02:00:00,+01:00,WEST +1940-06-14T22:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-08-24T22:00:00,+02:00,WEMT +1944-10-07T23:00:00,+01:00,WEST +1945-04-02T01:00:00,+02:00,WEMT +1945-09-16T01:00:00,+01:00,CET +1976-03-28T00:00:00,+02:00,CEST +1976-09-25T23:00:00,+01:00,CET +1977-04-03T01:00:00,+02:00,CEST +1977-09-25T01:00:00,+01:00,CET +1978-04-02T01:00:00,+02:00,CEST +1978-10-01T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-podgorica.txt b/desk/gub/lib/pytz/europe-podgorica.txt new file mode 100644 index 0000000..1692b4c --- /dev/null +++ b/desk/gub/lib/pytz/europe-podgorica.txt @@ -0,0 +1,121 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:22,LMT +1901-12-13T20:45:52,+01:00,CET +1941-04-18T22:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-05-08T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-prague.txt b/desk/gub/lib/pytz/europe-prague.txt new file mode 100644 index 0000000..04a2e38 --- /dev/null +++ b/desk/gub/lib/pytz/europe-prague.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:58,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-10-01T01:00:00,+01:00,CET +1946-05-06T01:00:00,+02:00,CEST +1946-10-06T01:00:00,+01:00,CET +1946-12-01T02:00:00,+00:00,GMT +1947-02-23T02:00:00,+01:00,CET +1947-04-20T01:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-09T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-riga.txt b/desk/gub/lib/pytz/europe-riga.txt new file mode 100644 index 0000000..b87fadb --- /dev/null +++ b/desk/gub/lib/pytz/europe-riga.txt @@ -0,0 +1,128 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:37,LMT +1901-12-13T20:45:52,+01:37,RMT +1918-04-15T00:23:26,+02:37,LST +1918-09-16T00:23:26,+01:37,RMT +1919-04-01T00:23:26,+02:37,LST +1919-05-22T00:23:26,+01:37,RMT +1926-05-10T22:23:26,+02:00,EET +1940-08-04T22:00:00,+03:00,MSK +1941-06-30T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1944-10-12T23:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+03:00,EEST +1989-09-24T00:00:00,+02:00,EET +1990-03-25T00:00:00,+03:00,EEST +1990-09-30T00:00:00,+02:00,EET +1991-03-31T00:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-09-25T00:00:00,+02:00,EET +1995-03-26T00:00:00,+03:00,EEST +1995-09-24T00:00:00,+02:00,EET +1996-03-31T00:00:00,+03:00,EEST +1996-09-29T00:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-rome.txt b/desk/gub/lib/pytz/europe-rome.txt new file mode 100644 index 0000000..a7004fe --- /dev/null +++ b/desk/gub/lib/pytz/europe-rome.txt @@ -0,0 +1,171 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:50,LMT +1901-12-13T20:45:52,+01:00,CET +1916-06-03T23:00:00,+02:00,CEST +1916-09-30T22:00:00,+01:00,CET +1917-03-31T23:00:00,+02:00,CEST +1917-09-30T22:00:00,+01:00,CET +1918-03-09T23:00:00,+02:00,CEST +1918-10-06T22:00:00,+01:00,CET +1919-03-01T23:00:00,+02:00,CEST +1919-10-04T22:00:00,+01:00,CET +1920-03-20T23:00:00,+02:00,CEST +1920-09-18T22:00:00,+01:00,CET +1940-06-14T23:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-09-17T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-14T23:00:00,+01:00,CET +1946-03-17T01:00:00,+02:00,CEST +1946-10-06T01:00:00,+01:00,CET +1947-03-15T23:00:00,+02:00,CEST +1947-10-04T23:00:00,+01:00,CET +1948-02-29T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1966-05-21T23:00:00,+02:00,CEST +1966-09-24T22:00:00,+01:00,CET +1967-05-27T23:00:00,+02:00,CEST +1967-09-23T23:00:00,+01:00,CET +1968-05-25T23:00:00,+02:00,CEST +1968-09-21T23:00:00,+01:00,CET +1969-05-31T23:00:00,+02:00,CEST +1969-09-27T23:00:00,+01:00,CET +1970-05-30T23:00:00,+02:00,CEST +1970-09-26T23:00:00,+01:00,CET +1971-05-22T23:00:00,+02:00,CEST +1971-09-25T23:00:00,+01:00,CET +1972-05-27T23:00:00,+02:00,CEST +1972-09-30T23:00:00,+01:00,CET +1973-06-02T23:00:00,+02:00,CEST +1973-09-29T23:00:00,+01:00,CET +1974-05-25T23:00:00,+02:00,CEST +1974-09-28T23:00:00,+01:00,CET +1975-05-31T23:00:00,+02:00,CEST +1975-09-27T23:00:00,+01:00,CET +1976-05-29T23:00:00,+02:00,CEST +1976-09-25T23:00:00,+01:00,CET +1977-05-21T23:00:00,+02:00,CEST +1977-09-24T23:00:00,+01:00,CET +1978-05-27T23:00:00,+02:00,CEST +1978-09-30T23:00:00,+01:00,CET +1979-05-26T23:00:00,+02:00,CEST +1979-09-29T23:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-samara.txt b/desk/gub/lib/pytz/europe-samara.txt new file mode 100644 index 0000000..fb7c426 --- /dev/null +++ b/desk/gub/lib/pytz/europe-samara.txt @@ -0,0 +1,66 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:20,LMT +1919-07-01T00:00:00,+03:00,+03 +1930-06-20T21:00:00,+04:00,+04 +1981-03-31T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+04:00,+04 +1982-03-31T20:00:00,+05:00,+05 +1982-09-30T19:00:00,+04:00,+04 +1983-03-31T20:00:00,+05:00,+05 +1983-09-30T19:00:00,+04:00,+04 +1984-03-31T20:00:00,+05:00,+05 +1984-09-29T22:00:00,+04:00,+04 +1985-03-30T22:00:00,+05:00,+05 +1985-09-28T22:00:00,+04:00,+04 +1986-03-29T22:00:00,+05:00,+05 +1986-09-27T22:00:00,+04:00,+04 +1987-03-28T22:00:00,+05:00,+05 +1987-09-26T22:00:00,+04:00,+04 +1988-03-26T22:00:00,+05:00,+05 +1988-09-24T22:00:00,+04:00,+04 +1989-03-25T22:00:00,+04:00,+04 +1989-09-23T23:00:00,+03:00,+03 +1990-03-24T23:00:00,+04:00,+04 +1990-09-29T23:00:00,+03:00,+03 +1991-03-30T23:00:00,+03:00,+03 +1991-09-29T00:00:00,+03:00,+03 +1991-10-20T00:00:00,+04:00,+04 +1992-03-28T22:00:00,+05:00,+05 +1992-09-26T22:00:00,+04:00,+04 +1993-03-27T22:00:00,+05:00,+05 +1993-09-25T22:00:00,+04:00,+04 +1994-03-26T22:00:00,+05:00,+05 +1994-09-24T22:00:00,+04:00,+04 +1995-03-25T22:00:00,+05:00,+05 +1995-09-23T22:00:00,+04:00,+04 +1996-03-30T22:00:00,+05:00,+05 +1996-10-26T22:00:00,+04:00,+04 +1997-03-29T22:00:00,+05:00,+05 +1997-10-25T22:00:00,+04:00,+04 +1998-03-28T22:00:00,+05:00,+05 +1998-10-24T22:00:00,+04:00,+04 +1999-03-27T22:00:00,+05:00,+05 +1999-10-30T22:00:00,+04:00,+04 +2000-03-25T22:00:00,+05:00,+05 +2000-10-28T22:00:00,+04:00,+04 +2001-03-24T22:00:00,+05:00,+05 +2001-10-27T22:00:00,+04:00,+04 +2002-03-30T22:00:00,+05:00,+05 +2002-10-26T22:00:00,+04:00,+04 +2003-03-29T22:00:00,+05:00,+05 +2003-10-25T22:00:00,+04:00,+04 +2004-03-27T22:00:00,+05:00,+05 +2004-10-30T22:00:00,+04:00,+04 +2005-03-26T22:00:00,+05:00,+05 +2005-10-29T22:00:00,+04:00,+04 +2006-03-25T22:00:00,+05:00,+05 +2006-10-28T22:00:00,+04:00,+04 +2007-03-24T22:00:00,+05:00,+05 +2007-10-27T22:00:00,+04:00,+04 +2008-03-29T22:00:00,+05:00,+05 +2008-10-25T22:00:00,+04:00,+04 +2009-03-28T22:00:00,+05:00,+05 +2009-10-24T22:00:00,+04:00,+04 +2010-03-27T22:00:00,+04:00,+04 +2010-10-30T23:00:00,+03:00,+03 +2011-03-26T23:00:00,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-san-marino.txt b/desk/gub/lib/pytz/europe-san-marino.txt new file mode 100644 index 0000000..a7004fe --- /dev/null +++ b/desk/gub/lib/pytz/europe-san-marino.txt @@ -0,0 +1,171 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:50,LMT +1901-12-13T20:45:52,+01:00,CET +1916-06-03T23:00:00,+02:00,CEST +1916-09-30T22:00:00,+01:00,CET +1917-03-31T23:00:00,+02:00,CEST +1917-09-30T22:00:00,+01:00,CET +1918-03-09T23:00:00,+02:00,CEST +1918-10-06T22:00:00,+01:00,CET +1919-03-01T23:00:00,+02:00,CEST +1919-10-04T22:00:00,+01:00,CET +1920-03-20T23:00:00,+02:00,CEST +1920-09-18T22:00:00,+01:00,CET +1940-06-14T23:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-09-17T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-14T23:00:00,+01:00,CET +1946-03-17T01:00:00,+02:00,CEST +1946-10-06T01:00:00,+01:00,CET +1947-03-15T23:00:00,+02:00,CEST +1947-10-04T23:00:00,+01:00,CET +1948-02-29T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1966-05-21T23:00:00,+02:00,CEST +1966-09-24T22:00:00,+01:00,CET +1967-05-27T23:00:00,+02:00,CEST +1967-09-23T23:00:00,+01:00,CET +1968-05-25T23:00:00,+02:00,CEST +1968-09-21T23:00:00,+01:00,CET +1969-05-31T23:00:00,+02:00,CEST +1969-09-27T23:00:00,+01:00,CET +1970-05-30T23:00:00,+02:00,CEST +1970-09-26T23:00:00,+01:00,CET +1971-05-22T23:00:00,+02:00,CEST +1971-09-25T23:00:00,+01:00,CET +1972-05-27T23:00:00,+02:00,CEST +1972-09-30T23:00:00,+01:00,CET +1973-06-02T23:00:00,+02:00,CEST +1973-09-29T23:00:00,+01:00,CET +1974-05-25T23:00:00,+02:00,CEST +1974-09-28T23:00:00,+01:00,CET +1975-05-31T23:00:00,+02:00,CEST +1975-09-27T23:00:00,+01:00,CET +1976-05-29T23:00:00,+02:00,CEST +1976-09-25T23:00:00,+01:00,CET +1977-05-21T23:00:00,+02:00,CEST +1977-09-24T23:00:00,+01:00,CET +1978-05-27T23:00:00,+02:00,CEST +1978-09-30T23:00:00,+01:00,CET +1979-05-26T23:00:00,+02:00,CEST +1979-09-29T23:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-sarajevo.txt b/desk/gub/lib/pytz/europe-sarajevo.txt new file mode 100644 index 0000000..1692b4c --- /dev/null +++ b/desk/gub/lib/pytz/europe-sarajevo.txt @@ -0,0 +1,121 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:22,LMT +1901-12-13T20:45:52,+01:00,CET +1941-04-18T22:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-05-08T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-saratov.txt b/desk/gub/lib/pytz/europe-saratov.txt new file mode 100644 index 0000000..9fc55c3 --- /dev/null +++ b/desk/gub/lib/pytz/europe-saratov.txt @@ -0,0 +1,66 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:04,LMT +1919-07-01T00:00:00,+03:00,+03 +1930-06-20T21:00:00,+04:00,+04 +1981-03-31T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+04:00,+04 +1982-03-31T20:00:00,+05:00,+05 +1982-09-30T19:00:00,+04:00,+04 +1983-03-31T20:00:00,+05:00,+05 +1983-09-30T19:00:00,+04:00,+04 +1984-03-31T20:00:00,+05:00,+05 +1984-09-29T22:00:00,+04:00,+04 +1985-03-30T22:00:00,+05:00,+05 +1985-09-28T22:00:00,+04:00,+04 +1986-03-29T22:00:00,+05:00,+05 +1986-09-27T22:00:00,+04:00,+04 +1987-03-28T22:00:00,+05:00,+05 +1987-09-26T22:00:00,+04:00,+04 +1988-03-26T22:00:00,+04:00,+04 +1988-09-24T23:00:00,+03:00,+03 +1989-03-25T23:00:00,+04:00,+04 +1989-09-23T23:00:00,+03:00,+03 +1990-03-24T23:00:00,+04:00,+04 +1990-09-29T23:00:00,+03:00,+03 +1991-03-30T23:00:00,+04:00,+04 +1992-03-28T22:00:00,+04:00,+04 +1992-09-26T23:00:00,+03:00,+03 +1993-03-27T23:00:00,+04:00,+04 +1993-09-25T23:00:00,+03:00,+03 +1994-03-26T23:00:00,+04:00,+04 +1994-09-24T23:00:00,+03:00,+03 +1995-03-25T23:00:00,+04:00,+04 +1995-09-23T23:00:00,+03:00,+03 +1996-03-30T23:00:00,+04:00,+04 +1996-10-26T23:00:00,+03:00,+03 +1997-03-29T23:00:00,+04:00,+04 +1997-10-25T23:00:00,+03:00,+03 +1998-03-28T23:00:00,+04:00,+04 +1998-10-24T23:00:00,+03:00,+03 +1999-03-27T23:00:00,+04:00,+04 +1999-10-30T23:00:00,+03:00,+03 +2000-03-25T23:00:00,+04:00,+04 +2000-10-28T23:00:00,+03:00,+03 +2001-03-24T23:00:00,+04:00,+04 +2001-10-27T23:00:00,+03:00,+03 +2002-03-30T23:00:00,+04:00,+04 +2002-10-26T23:00:00,+03:00,+03 +2003-03-29T23:00:00,+04:00,+04 +2003-10-25T23:00:00,+03:00,+03 +2004-03-27T23:00:00,+04:00,+04 +2004-10-30T23:00:00,+03:00,+03 +2005-03-26T23:00:00,+04:00,+04 +2005-10-29T23:00:00,+03:00,+03 +2006-03-25T23:00:00,+04:00,+04 +2006-10-28T23:00:00,+03:00,+03 +2007-03-24T23:00:00,+04:00,+04 +2007-10-27T23:00:00,+03:00,+03 +2008-03-29T23:00:00,+04:00,+04 +2008-10-25T23:00:00,+03:00,+03 +2009-03-28T23:00:00,+04:00,+04 +2009-10-24T23:00:00,+03:00,+03 +2010-03-27T23:00:00,+04:00,+04 +2010-10-30T23:00:00,+03:00,+03 +2011-03-26T23:00:00,+04:00,+04 +2014-10-25T22:00:00,+03:00,+03 +2016-12-03T23:00:00,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-simferopol.txt b/desk/gub/lib/pytz/europe-simferopol.txt new file mode 100644 index 0000000..226bf91 --- /dev/null +++ b/desk/gub/lib/pytz/europe-simferopol.txt @@ -0,0 +1,77 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:16,LMT +1901-12-13T20:45:52,+02:16,SMT +1924-05-01T21:44:00,+02:00,EET +1930-06-20T22:00:00,+03:00,MSK +1941-10-31T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-04-12T22:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-06-30T23:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-04-30T21:00:00,+04:00,MSD +1994-09-24T23:00:00,+03:00,MSK +1995-03-25T23:00:00,+04:00,MSD +1995-09-23T23:00:00,+03:00,MSK +1996-03-30T21:00:00,+04:00,MSD +1996-10-27T00:00:00,+03:00,MSK +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T00:00:00,+04:00,MSK +2014-10-25T22:00:00,+03:00,MSK \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-skopje.txt b/desk/gub/lib/pytz/europe-skopje.txt new file mode 100644 index 0000000..1692b4c --- /dev/null +++ b/desk/gub/lib/pytz/europe-skopje.txt @@ -0,0 +1,121 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:22,LMT +1901-12-13T20:45:52,+01:00,CET +1941-04-18T22:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-05-08T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-sofia.txt b/desk/gub/lib/pytz/europe-sofia.txt new file mode 100644 index 0000000..b19e260 --- /dev/null +++ b/desk/gub/lib/pytz/europe-sofia.txt @@ -0,0 +1,127 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:33,LMT +1901-12-13T20:45:52,+02:00,EET +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T02:00:00,+02:00,EET +1979-03-31T21:00:00,+03:00,EEST +1979-09-30T22:00:00,+02:00,EET +1980-04-05T21:00:00,+03:00,EEST +1980-09-28T22:00:00,+02:00,EET +1981-04-04T21:00:00,+03:00,EEST +1981-09-26T23:00:00,+02:00,EET +1982-04-03T21:00:00,+03:00,EEST +1982-09-26T00:00:00,+02:00,EET +1983-03-27T00:00:00,+03:00,EEST +1983-09-25T00:00:00,+02:00,EET +1984-03-25T00:00:00,+03:00,EEST +1984-09-30T00:00:00,+02:00,EET +1985-03-31T00:00:00,+03:00,EEST +1985-09-29T00:00:00,+02:00,EET +1986-03-30T00:00:00,+03:00,EEST +1986-09-28T00:00:00,+02:00,EET +1987-03-29T00:00:00,+03:00,EEST +1987-09-27T00:00:00,+02:00,EET +1988-03-27T00:00:00,+03:00,EEST +1988-09-25T00:00:00,+02:00,EET +1989-03-26T00:00:00,+03:00,EEST +1989-09-24T00:00:00,+02:00,EET +1990-03-25T00:00:00,+03:00,EEST +1990-09-30T00:00:00,+02:00,EET +1991-03-30T22:00:00,+03:00,EEST +1991-09-28T21:00:00,+02:00,EET +1992-03-28T22:00:00,+03:00,EEST +1992-09-26T21:00:00,+02:00,EET +1993-03-27T22:00:00,+03:00,EEST +1993-09-25T21:00:00,+02:00,EET +1994-03-26T22:00:00,+03:00,EEST +1994-09-24T21:00:00,+02:00,EET +1995-03-25T22:00:00,+03:00,EEST +1995-09-23T21:00:00,+02:00,EET +1996-03-30T22:00:00,+03:00,EEST +1996-10-26T21:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-stockholm.txt b/desk/gub/lib/pytz/europe-stockholm.txt new file mode 100644 index 0000000..56ab2cd --- /dev/null +++ b/desk/gub/lib/pytz/europe-stockholm.txt @@ -0,0 +1,145 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:53,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-05-24T00:00:00,+03:00,CEMT +1945-09-24T00:00:00,+02:00,CEST +1945-11-18T01:00:00,+01:00,CET +1946-04-14T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1947-04-06T02:00:00,+02:00,CEST +1947-05-11T01:00:00,+03:00,CEMT +1947-06-29T00:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-10T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-tallinn.txt b/desk/gub/lib/pytz/europe-tallinn.txt new file mode 100644 index 0000000..32a7297 --- /dev/null +++ b/desk/gub/lib/pytz/europe-tallinn.txt @@ -0,0 +1,125 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:39,LMT +1901-12-13T20:45:52,+01:39,TMT +1918-01-31T22:21:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1919-06-30T23:00:00,+01:39,TMT +1921-04-30T22:21:00,+02:00,EET +1940-08-05T22:00:00,+03:00,MSK +1941-09-14T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-09-21T22:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+03:00,EEST +1989-09-24T00:00:00,+02:00,EET +1990-03-25T00:00:00,+03:00,EEST +1990-09-30T00:00:00,+02:00,EET +1991-03-31T00:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-09-25T00:00:00,+02:00,EET +1995-03-26T00:00:00,+03:00,EEST +1995-09-24T00:00:00,+02:00,EET +1996-03-31T00:00:00,+03:00,EEST +1996-10-27T00:00:00,+02:00,EET +1997-03-30T00:00:00,+03:00,EEST +1997-10-26T00:00:00,+02:00,EET +1998-03-29T00:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-tirane.txt b/desk/gub/lib/pytz/europe-tirane.txt new file mode 100644 index 0000000..fc0047e --- /dev/null +++ b/desk/gub/lib/pytz/europe-tirane.txt @@ -0,0 +1,135 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:19,LMT +1913-12-31T22:40:40,+01:00,CET +1940-06-15T23:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-04-10T01:00:00,+01:00,CET +1974-05-03T23:00:00,+02:00,CEST +1974-10-01T22:00:00,+01:00,CET +1975-04-30T23:00:00,+02:00,CEST +1975-10-01T22:00:00,+01:00,CET +1976-05-01T23:00:00,+02:00,CEST +1976-10-02T22:00:00,+01:00,CET +1977-05-07T23:00:00,+02:00,CEST +1977-10-01T22:00:00,+01:00,CET +1978-05-05T23:00:00,+02:00,CEST +1978-09-30T22:00:00,+01:00,CET +1979-05-04T23:00:00,+02:00,CEST +1979-09-29T22:00:00,+01:00,CET +1980-05-02T23:00:00,+02:00,CEST +1980-10-03T22:00:00,+01:00,CET +1981-04-25T23:00:00,+02:00,CEST +1981-09-26T22:00:00,+01:00,CET +1982-05-01T23:00:00,+02:00,CEST +1982-10-02T22:00:00,+01:00,CET +1983-04-17T23:00:00,+02:00,CEST +1983-09-30T22:00:00,+01:00,CET +1984-03-31T23:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-tiraspol.txt b/desk/gub/lib/pytz/europe-tiraspol.txt new file mode 100644 index 0000000..3fbc330 --- /dev/null +++ b/desk/gub/lib/pytz/europe-tiraspol.txt @@ -0,0 +1,143 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:55,LMT +1901-12-13T20:45:52,+01:55,CMT +1918-02-14T22:05:00,+01:44,BMT +1931-07-23T22:15:36,+02:00,EET +1932-05-20T22:00:00,+03:00,EEST +1932-10-01T22:00:00,+02:00,EET +1933-04-01T22:00:00,+03:00,EEST +1933-09-30T22:00:00,+02:00,EET +1934-04-07T22:00:00,+03:00,EEST +1934-10-06T22:00:00,+02:00,EET +1935-04-06T22:00:00,+03:00,EEST +1935-10-05T22:00:00,+02:00,EET +1936-04-04T22:00:00,+03:00,EEST +1936-10-03T22:00:00,+02:00,EET +1937-04-03T22:00:00,+03:00,EEST +1937-10-02T22:00:00,+02:00,EET +1938-04-02T22:00:00,+03:00,EEST +1938-10-01T22:00:00,+02:00,EET +1939-04-01T22:00:00,+03:00,EEST +1939-09-30T22:00:00,+02:00,EET +1940-08-14T22:00:00,+03:00,EEST +1941-07-16T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-08-23T22:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-05-05T22:00:00,+03:00,EEST +1990-09-30T00:00:00,+02:00,EET +1991-03-31T00:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-28T22:00:00,+03:00,EEST +1992-09-26T21:00:00,+02:00,EET +1993-03-27T22:00:00,+03:00,EEST +1993-09-25T21:00:00,+02:00,EET +1994-03-26T22:00:00,+03:00,EEST +1994-09-24T21:00:00,+02:00,EET +1995-03-25T22:00:00,+03:00,EEST +1995-09-23T21:00:00,+02:00,EET +1996-03-30T22:00:00,+03:00,EEST +1996-10-26T21:00:00,+02:00,EET +1997-03-30T00:00:00,+03:00,EEST +1997-10-26T00:00:00,+02:00,EET +1998-03-29T00:00:00,+03:00,EEST +1998-10-25T00:00:00,+02:00,EET +1999-03-28T00:00:00,+03:00,EEST +1999-10-31T00:00:00,+02:00,EET +2000-03-26T00:00:00,+03:00,EEST +2000-10-29T00:00:00,+02:00,EET +2001-03-25T00:00:00,+03:00,EEST +2001-10-28T00:00:00,+02:00,EET +2002-03-31T00:00:00,+03:00,EEST +2002-10-27T00:00:00,+02:00,EET +2003-03-30T00:00:00,+03:00,EEST +2003-10-26T00:00:00,+02:00,EET +2004-03-28T00:00:00,+03:00,EEST +2004-10-31T00:00:00,+02:00,EET +2005-03-27T00:00:00,+03:00,EEST +2005-10-30T00:00:00,+02:00,EET +2006-03-26T00:00:00,+03:00,EEST +2006-10-29T00:00:00,+02:00,EET +2007-03-25T00:00:00,+03:00,EEST +2007-10-28T00:00:00,+02:00,EET +2008-03-30T00:00:00,+03:00,EEST +2008-10-26T00:00:00,+02:00,EET +2009-03-29T00:00:00,+03:00,EEST +2009-10-25T00:00:00,+02:00,EET +2010-03-28T00:00:00,+03:00,EEST +2010-10-31T00:00:00,+02:00,EET +2011-03-27T00:00:00,+03:00,EEST +2011-10-30T00:00:00,+02:00,EET +2012-03-25T00:00:00,+03:00,EEST +2012-10-28T00:00:00,+02:00,EET +2013-03-31T00:00:00,+03:00,EEST +2013-10-27T00:00:00,+02:00,EET +2014-03-30T00:00:00,+03:00,EEST +2014-10-26T00:00:00,+02:00,EET +2015-03-29T00:00:00,+03:00,EEST +2015-10-25T00:00:00,+02:00,EET +2016-03-27T00:00:00,+03:00,EEST +2016-10-30T00:00:00,+02:00,EET +2017-03-26T00:00:00,+03:00,EEST +2017-10-29T00:00:00,+02:00,EET +2018-03-25T00:00:00,+03:00,EEST +2018-10-28T00:00:00,+02:00,EET +2019-03-31T00:00:00,+03:00,EEST +2019-10-27T00:00:00,+02:00,EET +2020-03-29T00:00:00,+03:00,EEST +2020-10-25T00:00:00,+02:00,EET +2021-03-28T00:00:00,+03:00,EEST +2021-10-31T00:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-ulyanovsk.txt b/desk/gub/lib/pytz/europe-ulyanovsk.txt new file mode 100644 index 0000000..c018bc0 --- /dev/null +++ b/desk/gub/lib/pytz/europe-ulyanovsk.txt @@ -0,0 +1,68 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:14,LMT +1919-07-01T00:00:00,+03:00,+03 +1930-06-20T21:00:00,+04:00,+04 +1981-03-31T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+04:00,+04 +1982-03-31T20:00:00,+05:00,+05 +1982-09-30T19:00:00,+04:00,+04 +1983-03-31T20:00:00,+05:00,+05 +1983-09-30T19:00:00,+04:00,+04 +1984-03-31T20:00:00,+05:00,+05 +1984-09-29T22:00:00,+04:00,+04 +1985-03-30T22:00:00,+05:00,+05 +1985-09-28T22:00:00,+04:00,+04 +1986-03-29T22:00:00,+05:00,+05 +1986-09-27T22:00:00,+04:00,+04 +1987-03-28T22:00:00,+05:00,+05 +1987-09-26T22:00:00,+04:00,+04 +1988-03-26T22:00:00,+05:00,+05 +1988-09-24T22:00:00,+04:00,+04 +1989-03-25T22:00:00,+04:00,+04 +1989-09-23T23:00:00,+03:00,+03 +1990-03-24T23:00:00,+04:00,+04 +1990-09-29T23:00:00,+03:00,+03 +1991-03-30T23:00:00,+03:00,+03 +1991-09-29T00:00:00,+02:00,+02 +1992-01-19T00:00:00,+03:00,+03 +1992-03-28T23:00:00,+04:00,+04 +1992-09-26T23:00:00,+03:00,+03 +1993-03-27T23:00:00,+04:00,+04 +1993-09-25T23:00:00,+03:00,+03 +1994-03-26T23:00:00,+04:00,+04 +1994-09-24T23:00:00,+03:00,+03 +1995-03-25T23:00:00,+04:00,+04 +1995-09-23T23:00:00,+03:00,+03 +1996-03-30T23:00:00,+04:00,+04 +1996-10-26T23:00:00,+03:00,+03 +1997-03-29T23:00:00,+04:00,+04 +1997-10-25T23:00:00,+03:00,+03 +1998-03-28T23:00:00,+04:00,+04 +1998-10-24T23:00:00,+03:00,+03 +1999-03-27T23:00:00,+04:00,+04 +1999-10-30T23:00:00,+03:00,+03 +2000-03-25T23:00:00,+04:00,+04 +2000-10-28T23:00:00,+03:00,+03 +2001-03-24T23:00:00,+04:00,+04 +2001-10-27T23:00:00,+03:00,+03 +2002-03-30T23:00:00,+04:00,+04 +2002-10-26T23:00:00,+03:00,+03 +2003-03-29T23:00:00,+04:00,+04 +2003-10-25T23:00:00,+03:00,+03 +2004-03-27T23:00:00,+04:00,+04 +2004-10-30T23:00:00,+03:00,+03 +2005-03-26T23:00:00,+04:00,+04 +2005-10-29T23:00:00,+03:00,+03 +2006-03-25T23:00:00,+04:00,+04 +2006-10-28T23:00:00,+03:00,+03 +2007-03-24T23:00:00,+04:00,+04 +2007-10-27T23:00:00,+03:00,+03 +2008-03-29T23:00:00,+04:00,+04 +2008-10-25T23:00:00,+03:00,+03 +2009-03-28T23:00:00,+04:00,+04 +2009-10-24T23:00:00,+03:00,+03 +2010-03-27T23:00:00,+04:00,+04 +2010-10-30T23:00:00,+03:00,+03 +2011-03-26T23:00:00,+04:00,+04 +2014-10-25T22:00:00,+03:00,+03 +2016-03-26T23:00:00,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-uzhgorod.txt b/desk/gub/lib/pytz/europe-uzhgorod.txt new file mode 100644 index 0000000..0718d6d --- /dev/null +++ b/desk/gub/lib/pytz/europe-uzhgorod.txt @@ -0,0 +1,123 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:02,LMT +1901-12-13T20:45:52,+02:02,KMT +1924-05-01T21:57:56,+02:00,EET +1930-06-20T22:00:00,+03:00,MSK +1941-09-19T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1943-11-05T23:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-06-30T22:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-09-25T00:00:00,+02:00,EET +1995-03-26T00:00:00,+03:00,EEST +1995-09-24T00:00:00,+02:00,EET +1996-03-31T00:00:00,+03:00,EEST +1996-10-27T01:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-vaduz.txt b/desk/gub/lib/pytz/europe-vaduz.txt new file mode 100644 index 0000000..dec995d --- /dev/null +++ b/desk/gub/lib/pytz/europe-vaduz.txt @@ -0,0 +1,121 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:34,LMT +1901-12-13T20:45:52,+01:00,CET +1941-05-05T00:00:00,+02:00,CEST +1941-10-06T00:00:00,+01:00,CET +1942-05-04T00:00:00,+02:00,CEST +1942-10-05T00:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-vatican.txt b/desk/gub/lib/pytz/europe-vatican.txt new file mode 100644 index 0000000..a7004fe --- /dev/null +++ b/desk/gub/lib/pytz/europe-vatican.txt @@ -0,0 +1,171 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:50,LMT +1901-12-13T20:45:52,+01:00,CET +1916-06-03T23:00:00,+02:00,CEST +1916-09-30T22:00:00,+01:00,CET +1917-03-31T23:00:00,+02:00,CEST +1917-09-30T22:00:00,+01:00,CET +1918-03-09T23:00:00,+02:00,CEST +1918-10-06T22:00:00,+01:00,CET +1919-03-01T23:00:00,+02:00,CEST +1919-10-04T22:00:00,+01:00,CET +1920-03-20T23:00:00,+02:00,CEST +1920-09-18T22:00:00,+01:00,CET +1940-06-14T23:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-09-17T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-14T23:00:00,+01:00,CET +1946-03-17T01:00:00,+02:00,CEST +1946-10-06T01:00:00,+01:00,CET +1947-03-15T23:00:00,+02:00,CEST +1947-10-04T23:00:00,+01:00,CET +1948-02-29T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1966-05-21T23:00:00,+02:00,CEST +1966-09-24T22:00:00,+01:00,CET +1967-05-27T23:00:00,+02:00,CEST +1967-09-23T23:00:00,+01:00,CET +1968-05-25T23:00:00,+02:00,CEST +1968-09-21T23:00:00,+01:00,CET +1969-05-31T23:00:00,+02:00,CEST +1969-09-27T23:00:00,+01:00,CET +1970-05-30T23:00:00,+02:00,CEST +1970-09-26T23:00:00,+01:00,CET +1971-05-22T23:00:00,+02:00,CEST +1971-09-25T23:00:00,+01:00,CET +1972-05-27T23:00:00,+02:00,CEST +1972-09-30T23:00:00,+01:00,CET +1973-06-02T23:00:00,+02:00,CEST +1973-09-29T23:00:00,+01:00,CET +1974-05-25T23:00:00,+02:00,CEST +1974-09-28T23:00:00,+01:00,CET +1975-05-31T23:00:00,+02:00,CEST +1975-09-27T23:00:00,+01:00,CET +1976-05-29T23:00:00,+02:00,CEST +1976-09-25T23:00:00,+01:00,CET +1977-05-21T23:00:00,+02:00,CEST +1977-09-24T23:00:00,+01:00,CET +1978-05-27T23:00:00,+02:00,CEST +1978-09-30T23:00:00,+01:00,CET +1979-05-26T23:00:00,+02:00,CEST +1979-09-29T23:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-vienna.txt b/desk/gub/lib/pytz/europe-vienna.txt new file mode 100644 index 0000000..15f53b7 --- /dev/null +++ b/desk/gub/lib/pytz/europe-vienna.txt @@ -0,0 +1,141 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:05,LMT +1901-12-13T20:45:52,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1920-04-05T01:00:00,+02:00,CEST +1920-09-13T01:00:00,+01:00,CET +1940-04-01T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-04-12T01:00:00,+01:00,CET +1946-04-14T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1947-04-06T01:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1980-04-05T23:00:00,+02:00,CEST +1980-09-27T22:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-vilnius.txt b/desk/gub/lib/pytz/europe-vilnius.txt new file mode 100644 index 0000000..0dfed9b --- /dev/null +++ b/desk/gub/lib/pytz/europe-vilnius.txt @@ -0,0 +1,122 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:41,LMT +1901-12-13T20:45:52,+01:24,WMT +1916-12-31T22:36:00,+01:36,KMT +1919-10-09T22:24:24,+01:00,CET +1920-07-11T23:00:00,+02:00,EET +1920-10-08T22:00:00,+01:00,CET +1940-08-02T23:00:00,+03:00,MSK +1941-06-23T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-07-31T22:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+03:00,EEST +1989-09-24T00:00:00,+02:00,EET +1990-03-25T00:00:00,+03:00,EEST +1990-09-30T00:00:00,+02:00,EET +1991-03-31T00:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-09-25T00:00:00,+02:00,EET +1995-03-26T00:00:00,+03:00,EEST +1995-09-24T00:00:00,+02:00,EET +1996-03-31T00:00:00,+03:00,EEST +1996-10-27T00:00:00,+02:00,EET +1997-03-30T00:00:00,+03:00,EEST +1997-10-26T00:00:00,+02:00,EET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-volgograd.txt b/desk/gub/lib/pytz/europe-volgograd.txt new file mode 100644 index 0000000..a83f6ea --- /dev/null +++ b/desk/gub/lib/pytz/europe-volgograd.txt @@ -0,0 +1,67 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:58,LMT +1920-01-02T21:02:20,+03:00,+03 +1930-06-20T21:00:00,+04:00,+04 +1981-03-31T20:00:00,+05:00,+05 +1981-09-30T19:00:00,+04:00,+04 +1982-03-31T20:00:00,+05:00,+05 +1982-09-30T19:00:00,+04:00,+04 +1983-03-31T20:00:00,+05:00,+05 +1983-09-30T19:00:00,+04:00,+04 +1984-03-31T20:00:00,+05:00,+05 +1984-09-29T22:00:00,+04:00,+04 +1985-03-30T22:00:00,+05:00,+05 +1985-09-28T22:00:00,+04:00,+04 +1986-03-29T22:00:00,+05:00,+05 +1986-09-27T22:00:00,+04:00,+04 +1987-03-28T22:00:00,+05:00,+05 +1987-09-26T22:00:00,+04:00,+04 +1988-03-26T22:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-09-29T23:00:00,+03:00,MSK +1991-03-30T23:00:00,+04:00,+04 +1992-03-28T22:00:00,+04:00,MSD +1992-09-26T23:00:00,+03:00,MSK +1993-03-27T23:00:00,+04:00,MSD +1993-09-25T23:00:00,+03:00,MSK +1994-03-26T23:00:00,+04:00,MSD +1994-09-24T23:00:00,+03:00,MSK +1995-03-25T23:00:00,+04:00,MSD +1995-09-23T23:00:00,+03:00,MSK +1996-03-30T23:00:00,+04:00,MSD +1996-10-26T23:00:00,+03:00,MSK +1997-03-29T23:00:00,+04:00,MSD +1997-10-25T23:00:00,+03:00,MSK +1998-03-28T23:00:00,+04:00,MSD +1998-10-24T23:00:00,+03:00,MSK +1999-03-27T23:00:00,+04:00,MSD +1999-10-30T23:00:00,+03:00,MSK +2000-03-25T23:00:00,+04:00,MSD +2000-10-28T23:00:00,+03:00,MSK +2001-03-24T23:00:00,+04:00,MSD +2001-10-27T23:00:00,+03:00,MSK +2002-03-30T23:00:00,+04:00,MSD +2002-10-26T23:00:00,+03:00,MSK +2003-03-29T23:00:00,+04:00,MSD +2003-10-25T23:00:00,+03:00,MSK +2004-03-27T23:00:00,+04:00,MSD +2004-10-30T23:00:00,+03:00,MSK +2005-03-26T23:00:00,+04:00,MSD +2005-10-29T23:00:00,+03:00,MSK +2006-03-25T23:00:00,+04:00,MSD +2006-10-28T23:00:00,+03:00,MSK +2007-03-24T23:00:00,+04:00,MSD +2007-10-27T23:00:00,+03:00,MSK +2008-03-29T23:00:00,+04:00,MSD +2008-10-25T23:00:00,+03:00,MSK +2009-03-28T23:00:00,+04:00,MSD +2009-10-24T23:00:00,+03:00,MSK +2010-03-27T23:00:00,+04:00,MSD +2010-10-30T23:00:00,+03:00,MSK +2011-03-26T23:00:00,+04:00,MSK +2014-10-25T22:00:00,+03:00,MSK +2018-10-27T23:00:00,+04:00,+04 +2020-12-26T22:00:00,+03:00,MSK \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-warsaw.txt b/desk/gub/lib/pytz/europe-warsaw.txt new file mode 100644 index 0000000..0a4c342 --- /dev/null +++ b/desk/gub/lib/pytz/europe-warsaw.txt @@ -0,0 +1,167 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:24,LMT +1901-12-13T20:45:52,+01:24,WMT +1915-08-04T22:36:00,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+02:00,EET +1919-04-15T00:00:00,+03:00,EEST +1919-09-16T00:00:00,+02:00,EET +1922-05-31T22:00:00,+01:00,CET +1940-06-23T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-04T00:00:00,+01:00,CET +1945-04-28T23:00:00,+02:00,CEST +1945-10-31T22:00:00,+01:00,CET +1946-04-13T23:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1947-05-04T01:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-10T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1957-06-02T00:00:00,+02:00,CEST +1957-09-29T00:00:00,+01:00,CET +1958-03-30T00:00:00,+02:00,CEST +1958-09-28T00:00:00,+01:00,CET +1959-05-31T00:00:00,+02:00,CEST +1959-10-04T00:00:00,+01:00,CET +1960-04-03T00:00:00,+02:00,CEST +1960-10-02T00:00:00,+01:00,CET +1961-05-28T00:00:00,+02:00,CEST +1961-10-01T00:00:00,+01:00,CET +1962-05-27T00:00:00,+02:00,CEST +1962-09-30T00:00:00,+01:00,CET +1963-05-26T00:00:00,+02:00,CEST +1963-09-29T00:00:00,+01:00,CET +1964-05-31T00:00:00,+02:00,CEST +1964-09-27T00:00:00,+01:00,CET +1977-04-03T00:00:00,+02:00,CEST +1977-09-25T00:00:00,+01:00,CET +1978-04-02T00:00:00,+02:00,CEST +1978-10-01T00:00:00,+01:00,CET +1979-04-01T00:00:00,+02:00,CEST +1979-09-30T00:00:00,+01:00,CET +1980-04-06T00:00:00,+02:00,CEST +1980-09-28T00:00:00,+01:00,CET +1981-03-29T00:00:00,+02:00,CEST +1981-09-27T00:00:00,+01:00,CET +1982-03-28T00:00:00,+02:00,CEST +1982-09-26T00:00:00,+01:00,CET +1983-03-27T00:00:00,+02:00,CEST +1983-09-25T00:00:00,+01:00,CET +1984-03-25T00:00:00,+02:00,CEST +1984-09-30T00:00:00,+01:00,CET +1985-03-31T00:00:00,+02:00,CEST +1985-09-29T00:00:00,+01:00,CET +1986-03-30T00:00:00,+02:00,CEST +1986-09-28T00:00:00,+01:00,CET +1987-03-29T00:00:00,+02:00,CEST +1987-09-27T00:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-zagreb.txt b/desk/gub/lib/pytz/europe-zagreb.txt new file mode 100644 index 0000000..1692b4c --- /dev/null +++ b/desk/gub/lib/pytz/europe-zagreb.txt @@ -0,0 +1,121 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:22,LMT +1901-12-13T20:45:52,+01:00,CET +1941-04-18T22:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-02T01:00:00,+01:00,CET +1945-05-08T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-zaporozhye.txt b/desk/gub/lib/pytz/europe-zaporozhye.txt new file mode 100644 index 0000000..0718d6d --- /dev/null +++ b/desk/gub/lib/pytz/europe-zaporozhye.txt @@ -0,0 +1,123 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:02,LMT +1901-12-13T20:45:52,+02:02,KMT +1924-05-01T21:57:56,+02:00,EET +1930-06-20T22:00:00,+03:00,MSK +1941-09-19T21:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1943-11-05T23:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-06-30T22:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-03-29T00:00:00,+03:00,EEST +1992-09-27T00:00:00,+02:00,EET +1993-03-28T00:00:00,+03:00,EEST +1993-09-26T00:00:00,+02:00,EET +1994-03-27T00:00:00,+03:00,EEST +1994-09-25T00:00:00,+02:00,EET +1995-03-26T00:00:00,+03:00,EEST +1995-09-24T00:00:00,+02:00,EET +1996-03-31T00:00:00,+03:00,EEST +1996-10-27T01:00:00,+02:00,EET +1997-03-30T01:00:00,+03:00,EEST +1997-10-26T01:00:00,+02:00,EET +1998-03-29T01:00:00,+03:00,EEST +1998-10-25T01:00:00,+02:00,EET +1999-03-28T01:00:00,+03:00,EEST +1999-10-31T01:00:00,+02:00,EET +2000-03-26T01:00:00,+03:00,EEST +2000-10-29T01:00:00,+02:00,EET +2001-03-25T01:00:00,+03:00,EEST +2001-10-28T01:00:00,+02:00,EET +2002-03-31T01:00:00,+03:00,EEST +2002-10-27T01:00:00,+02:00,EET +2003-03-30T01:00:00,+03:00,EEST +2003-10-26T01:00:00,+02:00,EET +2004-03-28T01:00:00,+03:00,EEST +2004-10-31T01:00:00,+02:00,EET +2005-03-27T01:00:00,+03:00,EEST +2005-10-30T01:00:00,+02:00,EET +2006-03-26T01:00:00,+03:00,EEST +2006-10-29T01:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-27T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-30T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-10-25T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-10-30T01:00:00,+02:00,EET +2017-03-26T01:00:00,+03:00,EEST +2017-10-29T01:00:00,+02:00,EET +2018-03-25T01:00:00,+03:00,EEST +2018-10-28T01:00:00,+02:00,EET +2019-03-31T01:00:00,+03:00,EEST +2019-10-27T01:00:00,+02:00,EET +2020-03-29T01:00:00,+03:00,EEST +2020-10-25T01:00:00,+02:00,EET +2021-03-28T01:00:00,+03:00,EEST +2021-10-31T01:00:00,+02:00,EET +2022-03-27T01:00:00,+03:00,EEST +2022-10-30T01:00:00,+02:00,EET +2023-03-26T01:00:00,+03:00,EEST +2023-10-29T01:00:00,+02:00,EET +2024-03-31T01:00:00,+03:00,EEST +2024-10-27T01:00:00,+02:00,EET +2025-03-30T01:00:00,+03:00,EEST +2025-10-26T01:00:00,+02:00,EET +2026-03-29T01:00:00,+03:00,EEST +2026-10-25T01:00:00,+02:00,EET +2027-03-28T01:00:00,+03:00,EEST +2027-10-31T01:00:00,+02:00,EET +2028-03-26T01:00:00,+03:00,EEST +2028-10-29T01:00:00,+02:00,EET +2029-03-25T01:00:00,+03:00,EEST +2029-10-28T01:00:00,+02:00,EET +2030-03-31T01:00:00,+03:00,EEST +2030-10-27T01:00:00,+02:00,EET +2031-03-30T01:00:00,+03:00,EEST +2031-10-26T01:00:00,+02:00,EET +2032-03-28T01:00:00,+03:00,EEST +2032-10-31T01:00:00,+02:00,EET +2033-03-27T01:00:00,+03:00,EEST +2033-10-30T01:00:00,+02:00,EET +2034-03-26T01:00:00,+03:00,EEST +2034-10-29T01:00:00,+02:00,EET +2035-03-25T01:00:00,+03:00,EEST +2035-10-28T01:00:00,+02:00,EET +2036-03-30T01:00:00,+03:00,EEST +2036-10-26T01:00:00,+02:00,EET +2037-03-29T01:00:00,+03:00,EEST +2037-10-25T01:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/europe-zurich.txt b/desk/gub/lib/pytz/europe-zurich.txt new file mode 100644 index 0000000..dec995d --- /dev/null +++ b/desk/gub/lib/pytz/europe-zurich.txt @@ -0,0 +1,121 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:34,LMT +1901-12-13T20:45:52,+01:00,CET +1941-05-05T00:00:00,+02:00,CEST +1941-10-06T00:00:00,+01:00,CET +1942-05-04T00:00:00,+02:00,CEST +1942-10-05T00:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/gb-eire.txt b/desk/gub/lib/pytz/gb-eire.txt new file mode 100644 index 0000000..a0614b8 --- /dev/null +++ b/desk/gub/lib/pytz/gb-eire.txt @@ -0,0 +1,243 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,GMT +1916-05-21T02:00:00,+01:00,BST +1916-10-01T02:00:00,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,BST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,BST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,BST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,BST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,BST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,BST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,BST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,BST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,BST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,BST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,BST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,BST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,BST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,BST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,BST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,BST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,BST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,BST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,BST +1941-05-04T01:00:00,+02:00,BDST +1941-08-10T01:00:00,+01:00,BST +1942-04-05T01:00:00,+02:00,BDST +1942-08-09T01:00:00,+01:00,BST +1943-04-04T01:00:00,+02:00,BDST +1943-08-15T01:00:00,+01:00,BST +1944-04-02T01:00:00,+02:00,BDST +1944-09-17T01:00:00,+01:00,BST +1945-04-02T01:00:00,+02:00,BDST +1945-07-15T01:00:00,+01:00,BST +1945-10-07T02:00:00,+00:00,GMT +1946-04-14T02:00:00,+01:00,BST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,BST +1947-04-13T01:00:00,+02:00,BDST +1947-08-10T01:00:00,+01:00,BST +1947-11-02T02:00:00,+00:00,GMT +1948-03-14T02:00:00,+01:00,BST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,BST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,BST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,BST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,BST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,BST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,BST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,BST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,BST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,BST +1957-10-06T02:00:00,+00:00,GMT +1958-04-20T02:00:00,+01:00,BST +1958-10-05T02:00:00,+00:00,GMT +1959-04-19T02:00:00,+01:00,BST +1959-10-04T02:00:00,+00:00,GMT +1960-04-10T02:00:00,+01:00,BST +1960-10-02T02:00:00,+00:00,GMT +1961-03-26T02:00:00,+01:00,BST +1961-10-29T02:00:00,+00:00,GMT +1962-03-25T02:00:00,+01:00,BST +1962-10-28T02:00:00,+00:00,GMT +1963-03-31T02:00:00,+01:00,BST +1963-10-27T02:00:00,+00:00,GMT +1964-03-22T02:00:00,+01:00,BST +1964-10-25T02:00:00,+00:00,GMT +1965-03-21T02:00:00,+01:00,BST +1965-10-24T02:00:00,+00:00,GMT +1966-03-20T02:00:00,+01:00,BST +1966-10-23T02:00:00,+00:00,GMT +1967-03-19T02:00:00,+01:00,BST +1967-10-29T02:00:00,+00:00,GMT +1968-02-18T02:00:00,+01:00,BST +1968-10-26T23:00:00,+01:00,BST +1971-10-31T02:00:00,+00:00,GMT +1972-03-19T02:00:00,+01:00,BST +1972-10-29T02:00:00,+00:00,GMT +1973-03-18T02:00:00,+01:00,BST +1973-10-28T02:00:00,+00:00,GMT +1974-03-17T02:00:00,+01:00,BST +1974-10-27T02:00:00,+00:00,GMT +1975-03-16T02:00:00,+01:00,BST +1975-10-26T02:00:00,+00:00,GMT +1976-03-21T02:00:00,+01:00,BST +1976-10-24T02:00:00,+00:00,GMT +1977-03-20T02:00:00,+01:00,BST +1977-10-23T02:00:00,+00:00,GMT +1978-03-19T02:00:00,+01:00,BST +1978-10-29T02:00:00,+00:00,GMT +1979-03-18T02:00:00,+01:00,BST +1979-10-28T02:00:00,+00:00,GMT +1980-03-16T02:00:00,+01:00,BST +1980-10-26T02:00:00,+00:00,GMT +1981-03-29T01:00:00,+01:00,BST +1981-10-25T01:00:00,+00:00,GMT +1982-03-28T01:00:00,+01:00,BST +1982-10-24T01:00:00,+00:00,GMT +1983-03-27T01:00:00,+01:00,BST +1983-10-23T01:00:00,+00:00,GMT +1984-03-25T01:00:00,+01:00,BST +1984-10-28T01:00:00,+00:00,GMT +1985-03-31T01:00:00,+01:00,BST +1985-10-27T01:00:00,+00:00,GMT +1986-03-30T01:00:00,+01:00,BST +1986-10-26T01:00:00,+00:00,GMT +1987-03-29T01:00:00,+01:00,BST +1987-10-25T01:00:00,+00:00,GMT +1988-03-27T01:00:00,+01:00,BST +1988-10-23T01:00:00,+00:00,GMT +1989-03-26T01:00:00,+01:00,BST +1989-10-29T01:00:00,+00:00,GMT +1990-03-25T01:00:00,+01:00,BST +1990-10-28T01:00:00,+00:00,GMT +1991-03-31T01:00:00,+01:00,BST +1991-10-27T01:00:00,+00:00,GMT +1992-03-29T01:00:00,+01:00,BST +1992-10-25T01:00:00,+00:00,GMT +1993-03-28T01:00:00,+01:00,BST +1993-10-24T01:00:00,+00:00,GMT +1994-03-27T01:00:00,+01:00,BST +1994-10-23T01:00:00,+00:00,GMT +1995-03-26T01:00:00,+01:00,BST +1995-10-22T01:00:00,+00:00,GMT +1996-03-31T01:00:00,+01:00,BST +1996-10-27T01:00:00,+00:00,GMT +1997-03-30T01:00:00,+01:00,BST +1997-10-26T01:00:00,+00:00,GMT +1998-03-29T01:00:00,+01:00,BST +1998-10-25T01:00:00,+00:00,GMT +1999-03-28T01:00:00,+01:00,BST +1999-10-31T01:00:00,+00:00,GMT +2000-03-26T01:00:00,+01:00,BST +2000-10-29T01:00:00,+00:00,GMT +2001-03-25T01:00:00,+01:00,BST +2001-10-28T01:00:00,+00:00,GMT +2002-03-31T01:00:00,+01:00,BST +2002-10-27T01:00:00,+00:00,GMT +2003-03-30T01:00:00,+01:00,BST +2003-10-26T01:00:00,+00:00,GMT +2004-03-28T01:00:00,+01:00,BST +2004-10-31T01:00:00,+00:00,GMT +2005-03-27T01:00:00,+01:00,BST +2005-10-30T01:00:00,+00:00,GMT +2006-03-26T01:00:00,+01:00,BST +2006-10-29T01:00:00,+00:00,GMT +2007-03-25T01:00:00,+01:00,BST +2007-10-28T01:00:00,+00:00,GMT +2008-03-30T01:00:00,+01:00,BST +2008-10-26T01:00:00,+00:00,GMT +2009-03-29T01:00:00,+01:00,BST +2009-10-25T01:00:00,+00:00,GMT +2010-03-28T01:00:00,+01:00,BST +2010-10-31T01:00:00,+00:00,GMT +2011-03-27T01:00:00,+01:00,BST +2011-10-30T01:00:00,+00:00,GMT +2012-03-25T01:00:00,+01:00,BST +2012-10-28T01:00:00,+00:00,GMT +2013-03-31T01:00:00,+01:00,BST +2013-10-27T01:00:00,+00:00,GMT +2014-03-30T01:00:00,+01:00,BST +2014-10-26T01:00:00,+00:00,GMT +2015-03-29T01:00:00,+01:00,BST +2015-10-25T01:00:00,+00:00,GMT +2016-03-27T01:00:00,+01:00,BST +2016-10-30T01:00:00,+00:00,GMT +2017-03-26T01:00:00,+01:00,BST +2017-10-29T01:00:00,+00:00,GMT +2018-03-25T01:00:00,+01:00,BST +2018-10-28T01:00:00,+00:00,GMT +2019-03-31T01:00:00,+01:00,BST +2019-10-27T01:00:00,+00:00,GMT +2020-03-29T01:00:00,+01:00,BST +2020-10-25T01:00:00,+00:00,GMT +2021-03-28T01:00:00,+01:00,BST +2021-10-31T01:00:00,+00:00,GMT +2022-03-27T01:00:00,+01:00,BST +2022-10-30T01:00:00,+00:00,GMT +2023-03-26T01:00:00,+01:00,BST +2023-10-29T01:00:00,+00:00,GMT +2024-03-31T01:00:00,+01:00,BST +2024-10-27T01:00:00,+00:00,GMT +2025-03-30T01:00:00,+01:00,BST +2025-10-26T01:00:00,+00:00,GMT +2026-03-29T01:00:00,+01:00,BST +2026-10-25T01:00:00,+00:00,GMT +2027-03-28T01:00:00,+01:00,BST +2027-10-31T01:00:00,+00:00,GMT +2028-03-26T01:00:00,+01:00,BST +2028-10-29T01:00:00,+00:00,GMT +2029-03-25T01:00:00,+01:00,BST +2029-10-28T01:00:00,+00:00,GMT +2030-03-31T01:00:00,+01:00,BST +2030-10-27T01:00:00,+00:00,GMT +2031-03-30T01:00:00,+01:00,BST +2031-10-26T01:00:00,+00:00,GMT +2032-03-28T01:00:00,+01:00,BST +2032-10-31T01:00:00,+00:00,GMT +2033-03-27T01:00:00,+01:00,BST +2033-10-30T01:00:00,+00:00,GMT +2034-03-26T01:00:00,+01:00,BST +2034-10-29T01:00:00,+00:00,GMT +2035-03-25T01:00:00,+01:00,BST +2035-10-28T01:00:00,+00:00,GMT +2036-03-30T01:00:00,+01:00,BST +2036-10-26T01:00:00,+00:00,GMT +2037-03-29T01:00:00,+01:00,BST +2037-10-25T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/gb.txt b/desk/gub/lib/pytz/gb.txt new file mode 100644 index 0000000..a0614b8 --- /dev/null +++ b/desk/gub/lib/pytz/gb.txt @@ -0,0 +1,243 @@ +Time,Offset,Name +1901-12-13T20:45:52,+00:00,GMT +1916-05-21T02:00:00,+01:00,BST +1916-10-01T02:00:00,+00:00,GMT +1917-04-08T02:00:00,+01:00,BST +1917-09-17T02:00:00,+00:00,GMT +1918-03-24T02:00:00,+01:00,BST +1918-09-30T02:00:00,+00:00,GMT +1919-03-30T02:00:00,+01:00,BST +1919-09-29T02:00:00,+00:00,GMT +1920-03-28T02:00:00,+01:00,BST +1920-10-25T02:00:00,+00:00,GMT +1921-04-03T02:00:00,+01:00,BST +1921-10-03T02:00:00,+00:00,GMT +1922-03-26T02:00:00,+01:00,BST +1922-10-08T02:00:00,+00:00,GMT +1923-04-22T02:00:00,+01:00,BST +1923-09-16T02:00:00,+00:00,GMT +1924-04-13T02:00:00,+01:00,BST +1924-09-21T02:00:00,+00:00,GMT +1925-04-19T02:00:00,+01:00,BST +1925-10-04T02:00:00,+00:00,GMT +1926-04-18T02:00:00,+01:00,BST +1926-10-03T02:00:00,+00:00,GMT +1927-04-10T02:00:00,+01:00,BST +1927-10-02T02:00:00,+00:00,GMT +1928-04-22T02:00:00,+01:00,BST +1928-10-07T02:00:00,+00:00,GMT +1929-04-21T02:00:00,+01:00,BST +1929-10-06T02:00:00,+00:00,GMT +1930-04-13T02:00:00,+01:00,BST +1930-10-05T02:00:00,+00:00,GMT +1931-04-19T02:00:00,+01:00,BST +1931-10-04T02:00:00,+00:00,GMT +1932-04-17T02:00:00,+01:00,BST +1932-10-02T02:00:00,+00:00,GMT +1933-04-09T02:00:00,+01:00,BST +1933-10-08T02:00:00,+00:00,GMT +1934-04-22T02:00:00,+01:00,BST +1934-10-07T02:00:00,+00:00,GMT +1935-04-14T02:00:00,+01:00,BST +1935-10-06T02:00:00,+00:00,GMT +1936-04-19T02:00:00,+01:00,BST +1936-10-04T02:00:00,+00:00,GMT +1937-04-18T02:00:00,+01:00,BST +1937-10-03T02:00:00,+00:00,GMT +1938-04-10T02:00:00,+01:00,BST +1938-10-02T02:00:00,+00:00,GMT +1939-04-16T02:00:00,+01:00,BST +1939-11-19T02:00:00,+00:00,GMT +1940-02-25T02:00:00,+01:00,BST +1941-05-04T01:00:00,+02:00,BDST +1941-08-10T01:00:00,+01:00,BST +1942-04-05T01:00:00,+02:00,BDST +1942-08-09T01:00:00,+01:00,BST +1943-04-04T01:00:00,+02:00,BDST +1943-08-15T01:00:00,+01:00,BST +1944-04-02T01:00:00,+02:00,BDST +1944-09-17T01:00:00,+01:00,BST +1945-04-02T01:00:00,+02:00,BDST +1945-07-15T01:00:00,+01:00,BST +1945-10-07T02:00:00,+00:00,GMT +1946-04-14T02:00:00,+01:00,BST +1946-10-06T02:00:00,+00:00,GMT +1947-03-16T02:00:00,+01:00,BST +1947-04-13T01:00:00,+02:00,BDST +1947-08-10T01:00:00,+01:00,BST +1947-11-02T02:00:00,+00:00,GMT +1948-03-14T02:00:00,+01:00,BST +1948-10-31T02:00:00,+00:00,GMT +1949-04-03T02:00:00,+01:00,BST +1949-10-30T02:00:00,+00:00,GMT +1950-04-16T02:00:00,+01:00,BST +1950-10-22T02:00:00,+00:00,GMT +1951-04-15T02:00:00,+01:00,BST +1951-10-21T02:00:00,+00:00,GMT +1952-04-20T02:00:00,+01:00,BST +1952-10-26T02:00:00,+00:00,GMT +1953-04-19T02:00:00,+01:00,BST +1953-10-04T02:00:00,+00:00,GMT +1954-04-11T02:00:00,+01:00,BST +1954-10-03T02:00:00,+00:00,GMT +1955-04-17T02:00:00,+01:00,BST +1955-10-02T02:00:00,+00:00,GMT +1956-04-22T02:00:00,+01:00,BST +1956-10-07T02:00:00,+00:00,GMT +1957-04-14T02:00:00,+01:00,BST +1957-10-06T02:00:00,+00:00,GMT +1958-04-20T02:00:00,+01:00,BST +1958-10-05T02:00:00,+00:00,GMT +1959-04-19T02:00:00,+01:00,BST +1959-10-04T02:00:00,+00:00,GMT +1960-04-10T02:00:00,+01:00,BST +1960-10-02T02:00:00,+00:00,GMT +1961-03-26T02:00:00,+01:00,BST +1961-10-29T02:00:00,+00:00,GMT +1962-03-25T02:00:00,+01:00,BST +1962-10-28T02:00:00,+00:00,GMT +1963-03-31T02:00:00,+01:00,BST +1963-10-27T02:00:00,+00:00,GMT +1964-03-22T02:00:00,+01:00,BST +1964-10-25T02:00:00,+00:00,GMT +1965-03-21T02:00:00,+01:00,BST +1965-10-24T02:00:00,+00:00,GMT +1966-03-20T02:00:00,+01:00,BST +1966-10-23T02:00:00,+00:00,GMT +1967-03-19T02:00:00,+01:00,BST +1967-10-29T02:00:00,+00:00,GMT +1968-02-18T02:00:00,+01:00,BST +1968-10-26T23:00:00,+01:00,BST +1971-10-31T02:00:00,+00:00,GMT +1972-03-19T02:00:00,+01:00,BST +1972-10-29T02:00:00,+00:00,GMT +1973-03-18T02:00:00,+01:00,BST +1973-10-28T02:00:00,+00:00,GMT +1974-03-17T02:00:00,+01:00,BST +1974-10-27T02:00:00,+00:00,GMT +1975-03-16T02:00:00,+01:00,BST +1975-10-26T02:00:00,+00:00,GMT +1976-03-21T02:00:00,+01:00,BST +1976-10-24T02:00:00,+00:00,GMT +1977-03-20T02:00:00,+01:00,BST +1977-10-23T02:00:00,+00:00,GMT +1978-03-19T02:00:00,+01:00,BST +1978-10-29T02:00:00,+00:00,GMT +1979-03-18T02:00:00,+01:00,BST +1979-10-28T02:00:00,+00:00,GMT +1980-03-16T02:00:00,+01:00,BST +1980-10-26T02:00:00,+00:00,GMT +1981-03-29T01:00:00,+01:00,BST +1981-10-25T01:00:00,+00:00,GMT +1982-03-28T01:00:00,+01:00,BST +1982-10-24T01:00:00,+00:00,GMT +1983-03-27T01:00:00,+01:00,BST +1983-10-23T01:00:00,+00:00,GMT +1984-03-25T01:00:00,+01:00,BST +1984-10-28T01:00:00,+00:00,GMT +1985-03-31T01:00:00,+01:00,BST +1985-10-27T01:00:00,+00:00,GMT +1986-03-30T01:00:00,+01:00,BST +1986-10-26T01:00:00,+00:00,GMT +1987-03-29T01:00:00,+01:00,BST +1987-10-25T01:00:00,+00:00,GMT +1988-03-27T01:00:00,+01:00,BST +1988-10-23T01:00:00,+00:00,GMT +1989-03-26T01:00:00,+01:00,BST +1989-10-29T01:00:00,+00:00,GMT +1990-03-25T01:00:00,+01:00,BST +1990-10-28T01:00:00,+00:00,GMT +1991-03-31T01:00:00,+01:00,BST +1991-10-27T01:00:00,+00:00,GMT +1992-03-29T01:00:00,+01:00,BST +1992-10-25T01:00:00,+00:00,GMT +1993-03-28T01:00:00,+01:00,BST +1993-10-24T01:00:00,+00:00,GMT +1994-03-27T01:00:00,+01:00,BST +1994-10-23T01:00:00,+00:00,GMT +1995-03-26T01:00:00,+01:00,BST +1995-10-22T01:00:00,+00:00,GMT +1996-03-31T01:00:00,+01:00,BST +1996-10-27T01:00:00,+00:00,GMT +1997-03-30T01:00:00,+01:00,BST +1997-10-26T01:00:00,+00:00,GMT +1998-03-29T01:00:00,+01:00,BST +1998-10-25T01:00:00,+00:00,GMT +1999-03-28T01:00:00,+01:00,BST +1999-10-31T01:00:00,+00:00,GMT +2000-03-26T01:00:00,+01:00,BST +2000-10-29T01:00:00,+00:00,GMT +2001-03-25T01:00:00,+01:00,BST +2001-10-28T01:00:00,+00:00,GMT +2002-03-31T01:00:00,+01:00,BST +2002-10-27T01:00:00,+00:00,GMT +2003-03-30T01:00:00,+01:00,BST +2003-10-26T01:00:00,+00:00,GMT +2004-03-28T01:00:00,+01:00,BST +2004-10-31T01:00:00,+00:00,GMT +2005-03-27T01:00:00,+01:00,BST +2005-10-30T01:00:00,+00:00,GMT +2006-03-26T01:00:00,+01:00,BST +2006-10-29T01:00:00,+00:00,GMT +2007-03-25T01:00:00,+01:00,BST +2007-10-28T01:00:00,+00:00,GMT +2008-03-30T01:00:00,+01:00,BST +2008-10-26T01:00:00,+00:00,GMT +2009-03-29T01:00:00,+01:00,BST +2009-10-25T01:00:00,+00:00,GMT +2010-03-28T01:00:00,+01:00,BST +2010-10-31T01:00:00,+00:00,GMT +2011-03-27T01:00:00,+01:00,BST +2011-10-30T01:00:00,+00:00,GMT +2012-03-25T01:00:00,+01:00,BST +2012-10-28T01:00:00,+00:00,GMT +2013-03-31T01:00:00,+01:00,BST +2013-10-27T01:00:00,+00:00,GMT +2014-03-30T01:00:00,+01:00,BST +2014-10-26T01:00:00,+00:00,GMT +2015-03-29T01:00:00,+01:00,BST +2015-10-25T01:00:00,+00:00,GMT +2016-03-27T01:00:00,+01:00,BST +2016-10-30T01:00:00,+00:00,GMT +2017-03-26T01:00:00,+01:00,BST +2017-10-29T01:00:00,+00:00,GMT +2018-03-25T01:00:00,+01:00,BST +2018-10-28T01:00:00,+00:00,GMT +2019-03-31T01:00:00,+01:00,BST +2019-10-27T01:00:00,+00:00,GMT +2020-03-29T01:00:00,+01:00,BST +2020-10-25T01:00:00,+00:00,GMT +2021-03-28T01:00:00,+01:00,BST +2021-10-31T01:00:00,+00:00,GMT +2022-03-27T01:00:00,+01:00,BST +2022-10-30T01:00:00,+00:00,GMT +2023-03-26T01:00:00,+01:00,BST +2023-10-29T01:00:00,+00:00,GMT +2024-03-31T01:00:00,+01:00,BST +2024-10-27T01:00:00,+00:00,GMT +2025-03-30T01:00:00,+01:00,BST +2025-10-26T01:00:00,+00:00,GMT +2026-03-29T01:00:00,+01:00,BST +2026-10-25T01:00:00,+00:00,GMT +2027-03-28T01:00:00,+01:00,BST +2027-10-31T01:00:00,+00:00,GMT +2028-03-26T01:00:00,+01:00,BST +2028-10-29T01:00:00,+00:00,GMT +2029-03-25T01:00:00,+01:00,BST +2029-10-28T01:00:00,+00:00,GMT +2030-03-31T01:00:00,+01:00,BST +2030-10-27T01:00:00,+00:00,GMT +2031-03-30T01:00:00,+01:00,BST +2031-10-26T01:00:00,+00:00,GMT +2032-03-28T01:00:00,+01:00,BST +2032-10-31T01:00:00,+00:00,GMT +2033-03-27T01:00:00,+01:00,BST +2033-10-30T01:00:00,+00:00,GMT +2034-03-26T01:00:00,+01:00,BST +2034-10-29T01:00:00,+00:00,GMT +2035-03-25T01:00:00,+01:00,BST +2035-10-28T01:00:00,+00:00,GMT +2036-03-30T01:00:00,+01:00,BST +2036-10-26T01:00:00,+00:00,GMT +2037-03-29T01:00:00,+01:00,BST +2037-10-25T01:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/gmt--0.txt b/desk/gub/lib/pytz/gmt--0.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/gmt--0.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/gmt-0.txt b/desk/gub/lib/pytz/gmt-0.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/gmt-0.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/gmt.txt b/desk/gub/lib/pytz/gmt.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/gmt.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/gmt0.txt b/desk/gub/lib/pytz/gmt0.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/gmt0.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/greenwich.txt b/desk/gub/lib/pytz/greenwich.txt new file mode 100644 index 0000000..fd7609b --- /dev/null +++ b/desk/gub/lib/pytz/greenwich.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/hongkong.txt b/desk/gub/lib/pytz/hongkong.txt new file mode 100644 index 0000000..ada1618 --- /dev/null +++ b/desk/gub/lib/pytz/hongkong.txt @@ -0,0 +1,71 @@ +Time,Offset,Name +0001-01-01T00:00:00,+07:37,LMT +1904-10-29T17:00:00,+08:00,HKT +1941-06-14T19:00:00,+09:00,HKST +1941-09-30T19:00:00,+08:30,HKWT +1941-12-24T15:30:00,+09:00,JST +1945-11-17T17:00:00,+08:00,HKT +1946-04-20T16:00:00,+09:00,HKST +1946-11-30T19:30:00,+08:00,HKT +1947-04-12T19:30:00,+09:00,HKST +1947-11-29T19:30:00,+08:00,HKT +1948-05-01T19:30:00,+09:00,HKST +1948-10-30T19:30:00,+08:00,HKT +1949-04-02T19:30:00,+09:00,HKST +1949-10-29T19:30:00,+08:00,HKT +1950-04-01T19:30:00,+09:00,HKST +1950-10-28T19:30:00,+08:00,HKT +1951-03-31T19:30:00,+09:00,HKST +1951-10-27T19:30:00,+08:00,HKT +1952-04-05T19:30:00,+09:00,HKST +1952-11-01T19:30:00,+08:00,HKT +1953-04-04T19:30:00,+09:00,HKST +1953-10-31T18:30:00,+08:00,HKT +1954-03-20T19:30:00,+09:00,HKST +1954-10-30T18:30:00,+08:00,HKT +1955-03-19T19:30:00,+09:00,HKST +1955-11-05T18:30:00,+08:00,HKT +1956-03-17T19:30:00,+09:00,HKST +1956-11-03T18:30:00,+08:00,HKT +1957-03-23T19:30:00,+09:00,HKST +1957-11-02T18:30:00,+08:00,HKT +1958-03-22T19:30:00,+09:00,HKST +1958-11-01T18:30:00,+08:00,HKT +1959-03-21T19:30:00,+09:00,HKST +1959-10-31T18:30:00,+08:00,HKT +1960-03-19T19:30:00,+09:00,HKST +1960-11-05T18:30:00,+08:00,HKT +1961-03-18T19:30:00,+09:00,HKST +1961-11-04T18:30:00,+08:00,HKT +1962-03-17T19:30:00,+09:00,HKST +1962-11-03T18:30:00,+08:00,HKT +1963-03-23T19:30:00,+09:00,HKST +1963-11-02T18:30:00,+08:00,HKT +1964-03-21T19:30:00,+09:00,HKST +1964-10-31T18:30:00,+08:00,HKT +1965-04-17T19:30:00,+09:00,HKST +1965-10-16T18:30:00,+08:00,HKT +1966-04-16T19:30:00,+09:00,HKST +1966-10-15T18:30:00,+08:00,HKT +1967-04-15T19:30:00,+09:00,HKST +1967-10-21T18:30:00,+08:00,HKT +1968-04-20T19:30:00,+09:00,HKST +1968-10-19T18:30:00,+08:00,HKT +1969-04-19T19:30:00,+09:00,HKST +1969-10-18T18:30:00,+08:00,HKT +1970-04-18T19:30:00,+09:00,HKST +1970-10-17T18:30:00,+08:00,HKT +1971-04-17T19:30:00,+09:00,HKST +1971-10-16T18:30:00,+08:00,HKT +1972-04-15T19:30:00,+09:00,HKST +1972-10-21T18:30:00,+08:00,HKT +1973-04-21T19:30:00,+09:00,HKST +1973-10-20T18:30:00,+08:00,HKT +1973-12-29T19:30:00,+09:00,HKST +1974-10-19T18:30:00,+08:00,HKT +1975-04-19T19:30:00,+09:00,HKST +1975-10-18T18:30:00,+08:00,HKT +1976-04-17T19:30:00,+09:00,HKST +1976-10-16T18:30:00,+08:00,HKT +1979-05-12T19:30:00,+09:00,HKST +1979-10-20T18:30:00,+08:00,HKT \ No newline at end of file diff --git a/desk/gub/lib/pytz/hst.txt b/desk/gub/lib/pytz/hst.txt new file mode 100644 index 0000000..da445a2 --- /dev/null +++ b/desk/gub/lib/pytz/hst.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +1901-12-13T20:45:52,-11:30,HST +1933-04-30T12:30:00,-10:30,HDT +1933-05-21T21:30:00,-11:30,HST +1942-02-09T12:30:00,-10:30,HWT +1945-08-14T23:00:00,-10:30,HPT +1945-09-30T11:30:00,-11:30,HST +1947-06-08T12:30:00,-10:00,HST \ No newline at end of file diff --git a/desk/gub/lib/pytz/iceland.txt b/desk/gub/lib/pytz/iceland.txt new file mode 100644 index 0000000..f432fbf --- /dev/null +++ b/desk/gub/lib/pytz/iceland.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-01-01T00:16:08,+00:00,GMT \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-antananarivo.txt b/desk/gub/lib/pytz/indian-antananarivo.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/indian-antananarivo.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-chagos.txt b/desk/gub/lib/pytz/indian-chagos.txt new file mode 100644 index 0000000..ad16179 --- /dev/null +++ b/desk/gub/lib/pytz/indian-chagos.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:50,LMT +1906-12-31T19:10:20,+05:00,+05 +1995-12-31T19:00:00,+06:00,+06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-christmas.txt b/desk/gub/lib/pytz/indian-christmas.txt new file mode 100644 index 0000000..3cb374b --- /dev/null +++ b/desk/gub/lib/pytz/indian-christmas.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:42,LMT +1901-12-13T20:45:52,+06:42,BMT +1920-03-31T17:17:56,+07:00,+07 \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-cocos.txt b/desk/gub/lib/pytz/indian-cocos.txt new file mode 100644 index 0000000..662c49c --- /dev/null +++ b/desk/gub/lib/pytz/indian-cocos.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:25,LMT +1901-12-13T20:45:52,+06:25,RMT +1919-12-31T17:35:13,+06:30,+0630 +1942-04-30T17:30:00,+09:00,+09 +1945-05-02T15:00:00,+06:30,+0630 \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-comoro.txt b/desk/gub/lib/pytz/indian-comoro.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/indian-comoro.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-kerguelen.txt b/desk/gub/lib/pytz/indian-kerguelen.txt new file mode 100644 index 0000000..d7a2d65 --- /dev/null +++ b/desk/gub/lib/pytz/indian-kerguelen.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:54,LMT +1901-12-13T20:45:52,+04:54,MMT +1959-12-31T19:06:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-mahe.txt b/desk/gub/lib/pytz/indian-mahe.txt new file mode 100644 index 0000000..86b277e --- /dev/null +++ b/desk/gub/lib/pytz/indian-mahe.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:41,LMT +1919-12-31T20:18:48,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-maldives.txt b/desk/gub/lib/pytz/indian-maldives.txt new file mode 100644 index 0000000..d7a2d65 --- /dev/null +++ b/desk/gub/lib/pytz/indian-maldives.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+04:54,LMT +1901-12-13T20:45:52,+04:54,MMT +1959-12-31T19:06:00,+05:00,+05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-mauritius.txt b/desk/gub/lib/pytz/indian-mauritius.txt new file mode 100644 index 0000000..f830969 --- /dev/null +++ b/desk/gub/lib/pytz/indian-mauritius.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:50,LMT +1906-12-31T20:10:00,+04:00,+04 +1982-10-09T20:00:00,+05:00,+05 +1983-03-20T19:00:00,+04:00,+04 +2008-10-25T22:00:00,+05:00,+05 +2009-03-28T21:00:00,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-mayotte.txt b/desk/gub/lib/pytz/indian-mayotte.txt new file mode 100644 index 0000000..3e88c2d --- /dev/null +++ b/desk/gub/lib/pytz/indian-mayotte.txt @@ -0,0 +1,7 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:27,LMT +1908-04-30T21:32:44,+02:30,+0230 +1928-06-30T21:30:00,+03:00,EAT +1930-01-04T21:00:00,+02:30,+0230 +1936-12-31T21:30:00,+02:45,+0245 +1942-07-31T21:15:00,+03:00,EAT \ No newline at end of file diff --git a/desk/gub/lib/pytz/indian-reunion.txt b/desk/gub/lib/pytz/indian-reunion.txt new file mode 100644 index 0000000..86b277e --- /dev/null +++ b/desk/gub/lib/pytz/indian-reunion.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:41,LMT +1919-12-31T20:18:48,+04:00,+04 \ No newline at end of file diff --git a/desk/gub/lib/pytz/iran.txt b/desk/gub/lib/pytz/iran.txt new file mode 100644 index 0000000..fb9dea1 --- /dev/null +++ b/desk/gub/lib/pytz/iran.txt @@ -0,0 +1,73 @@ +Time,Offset,Name +0001-01-01T00:00:00,+03:26,LMT +1915-12-31T20:34:16,+03:26,TMT +1935-06-12T20:34:16,+03:30,+0330 +1977-03-21T19:30:00,+04:30,+0430 +1977-10-20T19:30:00,+04:00,+04 +1978-03-24T20:00:00,+05:00,+05 +1978-08-04T20:00:00,+04:00,+04 +1978-11-10T20:00:00,+03:30,+0330 +1979-05-26T20:30:00,+04:30,+0430 +1979-09-18T19:30:00,+03:30,+0330 +1980-03-20T20:30:00,+04:30,+0430 +1980-09-22T19:30:00,+03:30,+0330 +1991-05-02T20:30:00,+04:30,+0430 +1991-09-21T19:30:00,+03:30,+0330 +1992-03-21T20:30:00,+04:30,+0430 +1992-09-21T19:30:00,+03:30,+0330 +1993-03-21T20:30:00,+04:30,+0430 +1993-09-21T19:30:00,+03:30,+0330 +1994-03-21T20:30:00,+04:30,+0430 +1994-09-21T19:30:00,+03:30,+0330 +1995-03-21T20:30:00,+04:30,+0430 +1995-09-21T19:30:00,+03:30,+0330 +1996-03-20T20:30:00,+04:30,+0430 +1996-09-20T19:30:00,+03:30,+0330 +1997-03-21T20:30:00,+04:30,+0430 +1997-09-21T19:30:00,+03:30,+0330 +1998-03-21T20:30:00,+04:30,+0430 +1998-09-21T19:30:00,+03:30,+0330 +1999-03-21T20:30:00,+04:30,+0430 +1999-09-21T19:30:00,+03:30,+0330 +2000-03-20T20:30:00,+04:30,+0430 +2000-09-20T19:30:00,+03:30,+0330 +2001-03-21T20:30:00,+04:30,+0430 +2001-09-21T19:30:00,+03:30,+0330 +2002-03-21T20:30:00,+04:30,+0430 +2002-09-21T19:30:00,+03:30,+0330 +2003-03-21T20:30:00,+04:30,+0430 +2003-09-21T19:30:00,+03:30,+0330 +2004-03-20T20:30:00,+04:30,+0430 +2004-09-20T19:30:00,+03:30,+0330 +2005-03-21T20:30:00,+04:30,+0430 +2005-09-21T19:30:00,+03:30,+0330 +2008-03-20T20:30:00,+04:30,+0430 +2008-09-20T19:30:00,+03:30,+0330 +2009-03-21T20:30:00,+04:30,+0430 +2009-09-21T19:30:00,+03:30,+0330 +2010-03-21T20:30:00,+04:30,+0430 +2010-09-21T19:30:00,+03:30,+0330 +2011-03-21T20:30:00,+04:30,+0430 +2011-09-21T19:30:00,+03:30,+0330 +2012-03-20T20:30:00,+04:30,+0430 +2012-09-20T19:30:00,+03:30,+0330 +2013-03-21T20:30:00,+04:30,+0430 +2013-09-21T19:30:00,+03:30,+0330 +2014-03-21T20:30:00,+04:30,+0430 +2014-09-21T19:30:00,+03:30,+0330 +2015-03-21T20:30:00,+04:30,+0430 +2015-09-21T19:30:00,+03:30,+0330 +2016-03-20T20:30:00,+04:30,+0430 +2016-09-20T19:30:00,+03:30,+0330 +2017-03-21T20:30:00,+04:30,+0430 +2017-09-21T19:30:00,+03:30,+0330 +2018-03-21T20:30:00,+04:30,+0430 +2018-09-21T19:30:00,+03:30,+0330 +2019-03-21T20:30:00,+04:30,+0430 +2019-09-21T19:30:00,+03:30,+0330 +2020-03-20T20:30:00,+04:30,+0430 +2020-09-20T19:30:00,+03:30,+0330 +2021-03-21T20:30:00,+04:30,+0430 +2021-09-21T19:30:00,+03:30,+0330 +2022-03-21T20:30:00,+04:30,+0430 +2022-09-21T19:30:00,+03:30,+0330 \ No newline at end of file diff --git a/desk/gub/lib/pytz/israel.txt b/desk/gub/lib/pytz/israel.txt new file mode 100644 index 0000000..66d21f3 --- /dev/null +++ b/desk/gub/lib/pytz/israel.txt @@ -0,0 +1,151 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:21,LMT +1901-12-13T20:45:52,+02:21,JMT +1917-12-31T21:39:20,+02:00,IST +1940-06-01T00:00:00,+03:00,IDT +1940-10-01T00:00:00,+02:00,IST +1940-11-17T00:00:00,+03:00,IDT +1942-11-01T00:00:00,+02:00,IST +1943-04-01T00:00:00,+03:00,IDT +1943-11-01T00:00:00,+02:00,IST +1944-04-01T00:00:00,+03:00,IDT +1944-11-01T00:00:00,+02:00,IST +1945-04-16T00:00:00,+03:00,IDT +1945-11-01T00:00:00,+02:00,IST +1946-04-16T00:00:00,+03:00,IDT +1946-11-01T00:00:00,+02:00,IST +1948-05-23T00:00:00,+04:00,IDDT +1948-09-01T00:00:00,+03:00,IDT +1948-11-01T00:00:00,+02:00,IST +1949-05-01T00:00:00,+03:00,IDT +1949-11-01T00:00:00,+02:00,IST +1950-04-16T00:00:00,+03:00,IDT +1950-09-15T00:00:00,+02:00,IST +1951-04-01T00:00:00,+03:00,IDT +1951-11-11T00:00:00,+02:00,IST +1952-04-20T00:00:00,+03:00,IDT +1952-10-19T00:00:00,+02:00,IST +1953-04-12T00:00:00,+03:00,IDT +1953-09-13T00:00:00,+02:00,IST +1954-06-13T00:00:00,+03:00,IDT +1954-09-12T00:00:00,+02:00,IST +1955-06-12T00:00:00,+03:00,IDT +1955-09-11T00:00:00,+02:00,IST +1956-06-03T00:00:00,+03:00,IDT +1956-09-30T00:00:00,+02:00,IST +1957-04-28T00:00:00,+03:00,IDT +1957-09-22T00:00:00,+02:00,IST +1974-07-06T22:00:00,+03:00,IDT +1974-10-12T21:00:00,+02:00,IST +1975-04-19T22:00:00,+03:00,IDT +1975-08-30T21:00:00,+02:00,IST +1980-08-02T22:00:00,+03:00,IDT +1980-09-13T22:00:00,+02:00,IST +1984-05-05T22:00:00,+03:00,IDT +1984-08-25T22:00:00,+02:00,IST +1985-04-13T22:00:00,+03:00,IDT +1985-08-31T21:00:00,+02:00,IST +1986-05-17T22:00:00,+03:00,IDT +1986-09-06T21:00:00,+02:00,IST +1987-04-14T22:00:00,+03:00,IDT +1987-09-12T21:00:00,+02:00,IST +1988-04-09T22:00:00,+03:00,IDT +1988-09-03T21:00:00,+02:00,IST +1989-04-29T22:00:00,+03:00,IDT +1989-09-02T21:00:00,+02:00,IST +1990-03-24T22:00:00,+03:00,IDT +1990-08-25T21:00:00,+02:00,IST +1991-03-23T22:00:00,+03:00,IDT +1991-08-31T21:00:00,+02:00,IST +1992-03-28T22:00:00,+03:00,IDT +1992-09-05T21:00:00,+02:00,IST +1993-04-01T22:00:00,+03:00,IDT +1993-09-04T21:00:00,+02:00,IST +1994-03-31T22:00:00,+03:00,IDT +1994-08-27T21:00:00,+02:00,IST +1995-03-30T22:00:00,+03:00,IDT +1995-09-02T21:00:00,+02:00,IST +1996-03-14T22:00:00,+03:00,IDT +1996-09-15T21:00:00,+02:00,IST +1997-03-20T22:00:00,+03:00,IDT +1997-09-13T21:00:00,+02:00,IST +1998-03-19T22:00:00,+03:00,IDT +1998-09-05T21:00:00,+02:00,IST +1999-04-02T00:00:00,+03:00,IDT +1999-09-02T23:00:00,+02:00,IST +2000-04-14T00:00:00,+03:00,IDT +2000-10-05T22:00:00,+02:00,IST +2001-04-08T23:00:00,+03:00,IDT +2001-09-23T22:00:00,+02:00,IST +2002-03-28T23:00:00,+03:00,IDT +2002-10-06T22:00:00,+02:00,IST +2003-03-27T23:00:00,+03:00,IDT +2003-10-02T22:00:00,+02:00,IST +2004-04-06T23:00:00,+03:00,IDT +2004-09-21T22:00:00,+02:00,IST +2005-04-01T00:00:00,+03:00,IDT +2005-10-08T23:00:00,+02:00,IST +2006-03-31T00:00:00,+03:00,IDT +2006-09-30T23:00:00,+02:00,IST +2007-03-30T00:00:00,+03:00,IDT +2007-09-15T23:00:00,+02:00,IST +2008-03-28T00:00:00,+03:00,IDT +2008-10-04T23:00:00,+02:00,IST +2009-03-27T00:00:00,+03:00,IDT +2009-09-26T23:00:00,+02:00,IST +2010-03-26T00:00:00,+03:00,IDT +2010-09-11T23:00:00,+02:00,IST +2011-04-01T00:00:00,+03:00,IDT +2011-10-01T23:00:00,+02:00,IST +2012-03-30T00:00:00,+03:00,IDT +2012-09-22T23:00:00,+02:00,IST +2013-03-29T00:00:00,+03:00,IDT +2013-10-26T23:00:00,+02:00,IST +2014-03-28T00:00:00,+03:00,IDT +2014-10-25T23:00:00,+02:00,IST +2015-03-27T00:00:00,+03:00,IDT +2015-10-24T23:00:00,+02:00,IST +2016-03-25T00:00:00,+03:00,IDT +2016-10-29T23:00:00,+02:00,IST +2017-03-24T00:00:00,+03:00,IDT +2017-10-28T23:00:00,+02:00,IST +2018-03-23T00:00:00,+03:00,IDT +2018-10-27T23:00:00,+02:00,IST +2019-03-29T00:00:00,+03:00,IDT +2019-10-26T23:00:00,+02:00,IST +2020-03-27T00:00:00,+03:00,IDT +2020-10-24T23:00:00,+02:00,IST +2021-03-26T00:00:00,+03:00,IDT +2021-10-30T23:00:00,+02:00,IST +2022-03-25T00:00:00,+03:00,IDT +2022-10-29T23:00:00,+02:00,IST +2023-03-24T00:00:00,+03:00,IDT +2023-10-28T23:00:00,+02:00,IST +2024-03-29T00:00:00,+03:00,IDT +2024-10-26T23:00:00,+02:00,IST +2025-03-28T00:00:00,+03:00,IDT +2025-10-25T23:00:00,+02:00,IST +2026-03-27T00:00:00,+03:00,IDT +2026-10-24T23:00:00,+02:00,IST +2027-03-26T00:00:00,+03:00,IDT +2027-10-30T23:00:00,+02:00,IST +2028-03-24T00:00:00,+03:00,IDT +2028-10-28T23:00:00,+02:00,IST +2029-03-23T00:00:00,+03:00,IDT +2029-10-27T23:00:00,+02:00,IST +2030-03-29T00:00:00,+03:00,IDT +2030-10-26T23:00:00,+02:00,IST +2031-03-28T00:00:00,+03:00,IDT +2031-10-25T23:00:00,+02:00,IST +2032-03-26T00:00:00,+03:00,IDT +2032-10-30T23:00:00,+02:00,IST +2033-03-25T00:00:00,+03:00,IDT +2033-10-29T23:00:00,+02:00,IST +2034-03-24T00:00:00,+03:00,IDT +2034-10-28T23:00:00,+02:00,IST +2035-03-23T00:00:00,+03:00,IDT +2035-10-27T23:00:00,+02:00,IST +2036-03-28T00:00:00,+03:00,IDT +2036-10-25T23:00:00,+02:00,IST +2037-03-27T00:00:00,+03:00,IDT +2037-10-24T23:00:00,+02:00,IST \ No newline at end of file diff --git a/desk/gub/lib/pytz/jamaica.txt b/desk/gub/lib/pytz/jamaica.txt new file mode 100644 index 0000000..9cdb797 --- /dev/null +++ b/desk/gub/lib/pytz/jamaica.txt @@ -0,0 +1,23 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:53,KMT +1912-02-01T05:07:10,-05:00,EST +1974-01-06T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-02-23T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/japan.txt b/desk/gub/lib/pytz/japan.txt new file mode 100644 index 0000000..605cd2b --- /dev/null +++ b/desk/gub/lib/pytz/japan.txt @@ -0,0 +1,11 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:19,LMT +1901-12-13T20:45:52,+09:00,JST +1948-05-01T15:00:00,+10:00,JDT +1948-09-11T15:00:00,+09:00,JST +1949-04-02T15:00:00,+10:00,JDT +1949-09-10T15:00:00,+09:00,JST +1950-05-06T15:00:00,+10:00,JDT +1950-09-09T15:00:00,+09:00,JST +1951-05-05T15:00:00,+10:00,JDT +1951-09-08T15:00:00,+09:00,JST \ No newline at end of file diff --git a/desk/gub/lib/pytz/kwajalein.txt b/desk/gub/lib/pytz/kwajalein.txt new file mode 100644 index 0000000..87a4f10 --- /dev/null +++ b/desk/gub/lib/pytz/kwajalein.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:09,LMT +1901-12-13T20:45:52,+11:00,+11 +1936-12-31T13:00:00,+10:00,+10 +1941-03-31T14:00:00,+09:00,+09 +1944-02-05T15:00:00,+11:00,+11 +1969-09-30T13:00:00,-12:00,-12 +1993-08-21T12:00:00,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/libya.txt b/desk/gub/lib/pytz/libya.txt new file mode 100644 index 0000000..4a47835 --- /dev/null +++ b/desk/gub/lib/pytz/libya.txt @@ -0,0 +1,34 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:53,LMT +1919-12-31T23:07:16,+01:00,CET +1951-10-14T01:00:00,+02:00,CEST +1951-12-31T22:00:00,+01:00,CET +1953-10-09T01:00:00,+02:00,CEST +1953-12-31T22:00:00,+01:00,CET +1955-09-29T23:00:00,+02:00,CEST +1955-12-31T22:00:00,+01:00,CET +1958-12-31T23:00:00,+02:00,EET +1981-12-31T22:00:00,+01:00,CET +1982-03-31T23:00:00,+02:00,CEST +1982-09-30T22:00:00,+01:00,CET +1983-03-31T23:00:00,+02:00,CEST +1983-09-30T22:00:00,+01:00,CET +1984-03-31T23:00:00,+02:00,CEST +1984-09-30T22:00:00,+01:00,CET +1985-04-05T23:00:00,+02:00,CEST +1985-09-30T22:00:00,+01:00,CET +1986-04-03T23:00:00,+02:00,CEST +1986-10-02T22:00:00,+01:00,CET +1987-03-31T23:00:00,+02:00,CEST +1987-09-30T22:00:00,+01:00,CET +1988-03-31T23:00:00,+02:00,CEST +1988-09-30T22:00:00,+01:00,CET +1989-03-31T23:00:00,+02:00,CEST +1989-09-30T22:00:00,+01:00,CET +1990-05-03T23:00:00,+02:00,EET +1996-09-29T22:00:00,+01:00,CET +1997-04-03T23:00:00,+02:00,CEST +1997-10-03T22:00:00,+02:00,EET +2012-11-10T00:00:00,+01:00,CET +2013-03-29T00:00:00,+02:00,CEST +2013-10-25T00:00:00,+02:00,EET \ No newline at end of file diff --git a/desk/gub/lib/pytz/met.txt b/desk/gub/lib/pytz/met.txt new file mode 100644 index 0000000..84f817c --- /dev/null +++ b/desk/gub/lib/pytz/met.txt @@ -0,0 +1,186 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:18,LMT +1901-12-13T20:45:52,+00:00,WET +1914-11-08T00:00:00,+01:00,CET +1916-04-30T23:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+01:00,CET +1918-11-11T11:00:00,+00:00,WET +1919-03-01T23:00:00,+01:00,WEST +1919-10-04T23:00:00,+00:00,WET +1920-02-14T23:00:00,+01:00,WEST +1920-10-23T23:00:00,+00:00,WET +1921-03-14T23:00:00,+01:00,WEST +1921-10-25T23:00:00,+00:00,WET +1922-03-25T23:00:00,+01:00,WEST +1922-10-07T23:00:00,+00:00,WET +1923-04-21T23:00:00,+01:00,WEST +1923-10-06T23:00:00,+00:00,WET +1924-03-29T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1925-04-04T23:00:00,+01:00,WEST +1925-10-03T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-07T02:00:00,+00:00,WET +1929-04-21T02:00:00,+01:00,WEST +1929-10-06T02:00:00,+00:00,WET +1930-04-13T02:00:00,+01:00,WEST +1930-10-05T02:00:00,+00:00,WET +1931-04-19T02:00:00,+01:00,WEST +1931-10-04T02:00:00,+00:00,WET +1932-04-03T02:00:00,+01:00,WEST +1932-10-02T02:00:00,+00:00,WET +1933-03-26T02:00:00,+01:00,WEST +1933-10-08T02:00:00,+00:00,WET +1934-04-08T02:00:00,+01:00,WEST +1934-10-07T02:00:00,+00:00,WET +1935-03-31T02:00:00,+01:00,WEST +1935-10-06T02:00:00,+00:00,WET +1936-04-19T02:00:00,+01:00,WEST +1936-10-04T02:00:00,+00:00,WET +1937-04-04T02:00:00,+01:00,WEST +1937-10-03T02:00:00,+00:00,WET +1938-03-27T02:00:00,+01:00,WEST +1938-10-02T02:00:00,+00:00,WET +1939-04-16T02:00:00,+01:00,WEST +1939-11-19T02:00:00,+00:00,WET +1940-02-25T02:00:00,+01:00,WEST +1940-05-20T02:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-09-17T01:00:00,+01:00,CET +1945-04-02T01:00:00,+02:00,CEST +1945-09-16T01:00:00,+01:00,CET +1946-05-19T01:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1977-04-03T01:00:00,+02:00,CEST +1977-09-25T01:00:00,+01:00,CET +1978-04-02T01:00:00,+02:00,CEST +1978-10-01T01:00:00,+01:00,CET +1979-04-01T01:00:00,+02:00,CEST +1979-09-30T01:00:00,+01:00,CET +1980-04-06T01:00:00,+02:00,CEST +1980-09-28T01:00:00,+01:00,CET +1981-03-29T01:00:00,+02:00,CEST +1981-09-27T01:00:00,+01:00,CET +1982-03-28T01:00:00,+02:00,CEST +1982-09-26T01:00:00,+01:00,CET +1983-03-27T01:00:00,+02:00,CEST +1983-09-25T01:00:00,+01:00,CET +1984-03-25T01:00:00,+02:00,CEST +1984-09-30T01:00:00,+01:00,CET +1985-03-31T01:00:00,+02:00,CEST +1985-09-29T01:00:00,+01:00,CET +1986-03-30T01:00:00,+02:00,CEST +1986-09-28T01:00:00,+01:00,CET +1987-03-29T01:00:00,+02:00,CEST +1987-09-27T01:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/mexico-bajanorte.txt b/desk/gub/lib/pytz/mexico-bajanorte.txt new file mode 100644 index 0000000..a411291 --- /dev/null +++ b/desk/gub/lib/pytz/mexico-bajanorte.txt @@ -0,0 +1,188 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1924-01-01T07:00:00,-08:00,PST +1927-06-10T08:00:00,-07:00,MST +1930-11-15T07:00:00,-08:00,PST +1931-04-01T08:00:00,-07:00,PDT +1931-09-30T07:00:00,-08:00,PST +1942-04-24T08:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-11-15T07:00:00,-08:00,PST +1948-04-05T08:00:00,-07:00,PDT +1949-01-14T07:00:00,-08:00,PST +1950-05-01T08:00:00,-07:00,PDT +1950-09-24T07:00:00,-08:00,PST +1951-04-29T10:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T10:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T09:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T09:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T09:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T09:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T09:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T09:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T09:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T09:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T09:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T09:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T09:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T09:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T09:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T09:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-04-01T10:00:00,-07:00,PDT +2007-10-28T09:00:00,-08:00,PST +2008-04-06T10:00:00,-07:00,PDT +2008-10-26T09:00:00,-08:00,PST +2009-04-05T10:00:00,-07:00,PDT +2009-10-25T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T09:00:00,-08:00,PST +2021-03-14T10:00:00,-07:00,PDT +2021-11-07T09:00:00,-08:00,PST +2022-03-13T10:00:00,-07:00,PDT +2022-11-06T09:00:00,-08:00,PST +2023-03-12T10:00:00,-07:00,PDT +2023-11-05T09:00:00,-08:00,PST +2024-03-10T10:00:00,-07:00,PDT +2024-11-03T09:00:00,-08:00,PST +2025-03-09T10:00:00,-07:00,PDT +2025-11-02T09:00:00,-08:00,PST +2026-03-08T10:00:00,-07:00,PDT +2026-11-01T09:00:00,-08:00,PST +2027-03-14T10:00:00,-07:00,PDT +2027-11-07T09:00:00,-08:00,PST +2028-03-12T10:00:00,-07:00,PDT +2028-11-05T09:00:00,-08:00,PST +2029-03-11T10:00:00,-07:00,PDT +2029-11-04T09:00:00,-08:00,PST +2030-03-10T10:00:00,-07:00,PDT +2030-11-03T09:00:00,-08:00,PST +2031-03-09T10:00:00,-07:00,PDT +2031-11-02T09:00:00,-08:00,PST +2032-03-14T10:00:00,-07:00,PDT +2032-11-07T09:00:00,-08:00,PST +2033-03-13T10:00:00,-07:00,PDT +2033-11-06T09:00:00,-08:00,PST +2034-03-12T10:00:00,-07:00,PDT +2034-11-05T09:00:00,-08:00,PST +2035-03-11T10:00:00,-07:00,PDT +2035-11-04T09:00:00,-08:00,PST +2036-03-09T10:00:00,-07:00,PDT +2036-11-02T09:00:00,-08:00,PST +2037-03-08T10:00:00,-07:00,PDT +2037-11-01T09:00:00,-08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/mexico-bajasur.txt b/desk/gub/lib/pytz/mexico-bajasur.txt new file mode 100644 index 0000000..ca1f8ec --- /dev/null +++ b/desk/gub/lib/pytz/mexico-bajasur.txt @@ -0,0 +1,62 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1942-04-24T06:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-05-06T09:00:00,-06:00,MDT +2001-09-30T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-04-01T09:00:00,-06:00,MDT +2007-10-28T08:00:00,-07:00,MST +2008-04-06T09:00:00,-06:00,MDT +2008-10-26T08:00:00,-07:00,MST +2009-04-05T09:00:00,-06:00,MDT +2009-10-25T08:00:00,-07:00,MST +2010-04-04T09:00:00,-06:00,MDT +2010-10-31T08:00:00,-07:00,MST +2011-04-03T09:00:00,-06:00,MDT +2011-10-30T08:00:00,-07:00,MST +2012-04-01T09:00:00,-06:00,MDT +2012-10-28T08:00:00,-07:00,MST +2013-04-07T09:00:00,-06:00,MDT +2013-10-27T08:00:00,-07:00,MST +2014-04-06T09:00:00,-06:00,MDT +2014-10-26T08:00:00,-07:00,MST +2015-04-05T09:00:00,-06:00,MDT +2015-10-25T08:00:00,-07:00,MST +2016-04-03T09:00:00,-06:00,MDT +2016-10-30T08:00:00,-07:00,MST +2017-04-02T09:00:00,-06:00,MDT +2017-10-29T08:00:00,-07:00,MST +2018-04-01T09:00:00,-06:00,MDT +2018-10-28T08:00:00,-07:00,MST +2019-04-07T09:00:00,-06:00,MDT +2019-10-27T08:00:00,-07:00,MST +2020-04-05T09:00:00,-06:00,MDT +2020-10-25T08:00:00,-07:00,MST +2021-04-04T09:00:00,-06:00,MDT +2021-10-31T08:00:00,-07:00,MST +2022-04-03T09:00:00,-06:00,MDT +2022-10-30T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/mexico-general.txt b/desk/gub/lib/pytz/mexico-general.txt new file mode 100644 index 0000000..b8ce94b --- /dev/null +++ b/desk/gub/lib/pytz/mexico-general.txt @@ -0,0 +1,69 @@ +Time,Offset,Name +1922-01-01T07:00:00,-07:00,MST +1927-06-10T07:00:00,-06:00,CST +1930-11-15T06:00:00,-07:00,MST +1931-04-30T07:00:00,-06:00,MDT +1931-10-01T06:00:00,-07:00,MST +1932-04-01T07:00:00,-06:00,CST +1939-02-05T06:00:00,-05:00,CDT +1939-06-25T05:00:00,-06:00,CST +1940-12-09T06:00:00,-05:00,CDT +1941-04-01T05:00:00,-06:00,CST +1943-12-16T06:00:00,-05:00,CWT +1944-05-01T05:00:00,-06:00,CST +1950-02-12T06:00:00,-05:00,CDT +1950-07-30T05:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-05-06T08:00:00,-05:00,CDT +2001-09-30T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-04-01T08:00:00,-05:00,CDT +2007-10-28T07:00:00,-06:00,CST +2008-04-06T08:00:00,-05:00,CDT +2008-10-26T07:00:00,-06:00,CST +2009-04-05T08:00:00,-05:00,CDT +2009-10-25T07:00:00,-06:00,CST +2010-04-04T08:00:00,-05:00,CDT +2010-10-31T07:00:00,-06:00,CST +2011-04-03T08:00:00,-05:00,CDT +2011-10-30T07:00:00,-06:00,CST +2012-04-01T08:00:00,-05:00,CDT +2012-10-28T07:00:00,-06:00,CST +2013-04-07T08:00:00,-05:00,CDT +2013-10-27T07:00:00,-06:00,CST +2014-04-06T08:00:00,-05:00,CDT +2014-10-26T07:00:00,-06:00,CST +2015-04-05T08:00:00,-05:00,CDT +2015-10-25T07:00:00,-06:00,CST +2016-04-03T08:00:00,-05:00,CDT +2016-10-30T07:00:00,-06:00,CST +2017-04-02T08:00:00,-05:00,CDT +2017-10-29T07:00:00,-06:00,CST +2018-04-01T08:00:00,-05:00,CDT +2018-10-28T07:00:00,-06:00,CST +2019-04-07T08:00:00,-05:00,CDT +2019-10-27T07:00:00,-06:00,CST +2020-04-05T08:00:00,-05:00,CDT +2020-10-25T07:00:00,-06:00,CST +2021-04-04T08:00:00,-05:00,CDT +2021-10-31T07:00:00,-06:00,CST +2022-04-03T08:00:00,-05:00,CDT +2022-10-30T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/mst.txt b/desk/gub/lib/pytz/mst.txt new file mode 100644 index 0000000..56faa56 --- /dev/null +++ b/desk/gub/lib/pytz/mst.txt @@ -0,0 +1,12 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1944-01-01T06:01:00,-07:00,MST +1944-04-01T07:01:00,-06:00,MWT +1944-10-01T06:01:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/mst7mdt.txt b/desk/gub/lib/pytz/mst7mdt.txt new file mode 100644 index 0000000..d26b6e0 --- /dev/null +++ b/desk/gub/lib/pytz/mst7mdt.txt @@ -0,0 +1,159 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1920-03-28T09:00:00,-06:00,MDT +1920-10-31T08:00:00,-07:00,MST +1921-03-27T09:00:00,-06:00,MDT +1921-05-22T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1965-04-25T09:00:00,-06:00,MDT +1965-10-31T08:00:00,-07:00,MST +1966-04-24T09:00:00,-06:00,MDT +1966-10-30T08:00:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST +1968-04-28T09:00:00,-06:00,MDT +1968-10-27T08:00:00,-07:00,MST +1969-04-27T09:00:00,-06:00,MDT +1969-10-26T08:00:00,-07:00,MST +1970-04-26T09:00:00,-06:00,MDT +1970-10-25T08:00:00,-07:00,MST +1971-04-25T09:00:00,-06:00,MDT +1971-10-31T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-01-06T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-02-23T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/names.txt b/desk/gub/lib/pytz/names.txt new file mode 100644 index 0000000..00c672a --- /dev/null +++ b/desk/gub/lib/pytz/names.txt @@ -0,0 +1,597 @@ +Africa/Abidjan +Africa/Accra +Africa/Addis_Ababa +Africa/Algiers +Africa/Asmara +Africa/Asmera +Africa/Bamako +Africa/Bangui +Africa/Banjul +Africa/Bissau +Africa/Blantyre +Africa/Brazzaville +Africa/Bujumbura +Africa/Cairo +Africa/Casablanca +Africa/Ceuta +Africa/Conakry +Africa/Dakar +Africa/Dar_es_Salaam +Africa/Djibouti +Africa/Douala +Africa/El_Aaiun +Africa/Freetown +Africa/Gaborone +Africa/Harare +Africa/Johannesburg +Africa/Juba +Africa/Kampala +Africa/Khartoum +Africa/Kigali +Africa/Kinshasa +Africa/Lagos +Africa/Libreville +Africa/Lome +Africa/Luanda +Africa/Lubumbashi +Africa/Lusaka +Africa/Malabo +Africa/Maputo +Africa/Maseru +Africa/Mbabane +Africa/Mogadishu +Africa/Monrovia +Africa/Nairobi +Africa/Ndjamena +Africa/Niamey +Africa/Nouakchott +Africa/Ouagadougou +Africa/Porto-Novo +Africa/Sao_Tome +Africa/Timbuktu +Africa/Tripoli +Africa/Tunis +Africa/Windhoek +America/Adak +America/Anchorage +America/Anguilla +America/Antigua +America/Araguaina +America/Argentina/Buenos_Aires +America/Argentina/Catamarca +America/Argentina/ComodRivadavia +America/Argentina/Cordoba +America/Argentina/Jujuy +America/Argentina/La_Rioja +America/Argentina/Mendoza +America/Argentina/Rio_Gallegos +America/Argentina/Salta +America/Argentina/San_Juan +America/Argentina/San_Luis +America/Argentina/Tucuman +America/Argentina/Ushuaia +America/Aruba +America/Asuncion +America/Atikokan +America/Atka +America/Bahia +America/Bahia_Banderas +America/Barbados +America/Belem +America/Belize +America/Blanc-Sablon +America/Boa_Vista +America/Bogota +America/Boise +America/Buenos_Aires +America/Cambridge_Bay +America/Campo_Grande +America/Cancun +America/Caracas +America/Catamarca +America/Cayenne +America/Cayman +America/Chicago +America/Chihuahua +America/Ciudad_Juarez +America/Coral_Harbour +America/Cordoba +America/Costa_Rica +America/Coyhaique +America/Creston +America/Cuiaba +America/Curacao +America/Danmarkshavn +America/Dawson +America/Dawson_Creek +America/Denver +America/Detroit +America/Dominica +America/Edmonton +America/Eirunepe +America/El_Salvador +America/Ensenada +America/Fort_Nelson +America/Fort_Wayne +America/Fortaleza +America/Glace_Bay +America/Godthab +America/Goose_Bay +America/Grand_Turk +America/Grenada +America/Guadeloupe +America/Guatemala +America/Guayaquil +America/Guyana +America/Halifax +America/Havana +America/Hermosillo +America/Indiana/Indianapolis +America/Indiana/Knox +America/Indiana/Marengo +America/Indiana/Petersburg +America/Indiana/Tell_City +America/Indiana/Vevay +America/Indiana/Vincennes +America/Indiana/Winamac +America/Indianapolis +America/Inuvik +America/Iqaluit +America/Jamaica +America/Jujuy +America/Juneau +America/Kentucky/Louisville +America/Kentucky/Monticello +America/Knox_IN +America/Kralendijk +America/La_Paz +America/Lima +America/Los_Angeles +America/Louisville +America/Lower_Princes +America/Maceio +America/Managua +America/Manaus +America/Marigot +America/Martinique +America/Matamoros +America/Mazatlan +America/Mendoza +America/Menominee +America/Merida +America/Metlakatla +America/Mexico_City +America/Miquelon +America/Moncton +America/Monterrey +America/Montevideo +America/Montreal +America/Montserrat +America/Nassau +America/New_York +America/Nipigon +America/Nome +America/Noronha +America/North_Dakota/Beulah +America/North_Dakota/Center +America/North_Dakota/New_Salem +America/Nuuk +America/Ojinaga +America/Panama +America/Pangnirtung +America/Paramaribo +America/Phoenix +America/Port-au-Prince +America/Port_of_Spain +America/Porto_Acre +America/Porto_Velho +America/Puerto_Rico +America/Punta_Arenas +America/Rainy_River +America/Rankin_Inlet +America/Recife +America/Regina +America/Resolute +America/Rio_Branco +America/Rosario +America/Santa_Isabel +America/Santarem +America/Santiago +America/Santo_Domingo +America/Sao_Paulo +America/Scoresbysund +America/Shiprock +America/Sitka +America/St_Barthelemy +America/St_Johns +America/St_Kitts +America/St_Lucia +America/St_Thomas +America/St_Vincent +America/Swift_Current +America/Tegucigalpa +America/Thule +America/Thunder_Bay +America/Tijuana +America/Toronto +America/Tortola +America/Vancouver +America/Virgin +America/Whitehorse +America/Winnipeg +America/Yakutat +America/Yellowknife +Antarctica/Casey +Antarctica/Davis +Antarctica/DumontDUrville +Antarctica/Macquarie +Antarctica/Mawson +Antarctica/McMurdo +Antarctica/Palmer +Antarctica/Rothera +Antarctica/South_Pole +Antarctica/Syowa +Antarctica/Troll +Antarctica/Vostok +Arctic/Longyearbyen +Asia/Aden +Asia/Almaty +Asia/Amman +Asia/Anadyr +Asia/Aqtau +Asia/Aqtobe +Asia/Ashgabat +Asia/Ashkhabad +Asia/Atyrau +Asia/Baghdad +Asia/Bahrain +Asia/Baku +Asia/Bangkok +Asia/Barnaul +Asia/Beirut +Asia/Bishkek +Asia/Brunei +Asia/Calcutta +Asia/Chita +Asia/Choibalsan +Asia/Chongqing +Asia/Chungking +Asia/Colombo +Asia/Dacca +Asia/Damascus +Asia/Dhaka +Asia/Dili +Asia/Dubai +Asia/Dushanbe +Asia/Famagusta +Asia/Gaza +Asia/Harbin +Asia/Hebron +Asia/Ho_Chi_Minh +Asia/Hong_Kong +Asia/Hovd +Asia/Irkutsk +Asia/Istanbul +Asia/Jakarta +Asia/Jayapura +Asia/Jerusalem +Asia/Kabul +Asia/Kamchatka +Asia/Karachi +Asia/Kashgar +Asia/Kathmandu +Asia/Katmandu +Asia/Khandyga +Asia/Kolkata +Asia/Krasnoyarsk +Asia/Kuala_Lumpur +Asia/Kuching +Asia/Kuwait +Asia/Macao +Asia/Macau +Asia/Magadan +Asia/Makassar +Asia/Manila +Asia/Muscat +Asia/Nicosia +Asia/Novokuznetsk +Asia/Novosibirsk +Asia/Omsk +Asia/Oral +Asia/Phnom_Penh +Asia/Pontianak +Asia/Pyongyang +Asia/Qatar +Asia/Qostanay +Asia/Qyzylorda +Asia/Rangoon +Asia/Riyadh +Asia/Saigon +Asia/Sakhalin +Asia/Samarkand +Asia/Seoul +Asia/Shanghai +Asia/Singapore +Asia/Srednekolymsk +Asia/Taipei +Asia/Tashkent +Asia/Tbilisi +Asia/Tehran +Asia/Tel_Aviv +Asia/Thimbu +Asia/Thimphu +Asia/Tokyo +Asia/Tomsk +Asia/Ujung_Pandang +Asia/Ulaanbaatar +Asia/Ulan_Bator +Asia/Urumqi +Asia/Ust-Nera +Asia/Vientiane +Asia/Vladivostok +Asia/Yakutsk +Asia/Yangon +Asia/Yekaterinburg +Asia/Yerevan +Atlantic/Azores +Atlantic/Bermuda +Atlantic/Canary +Atlantic/Cape_Verde +Atlantic/Faeroe +Atlantic/Faroe +Atlantic/Jan_Mayen +Atlantic/Madeira +Atlantic/Reykjavik +Atlantic/South_Georgia +Atlantic/St_Helena +Atlantic/Stanley +Australia/ACT +Australia/Adelaide +Australia/Brisbane +Australia/Broken_Hill +Australia/Canberra +Australia/Currie +Australia/Darwin +Australia/Eucla +Australia/Hobart +Australia/LHI +Australia/Lindeman +Australia/Lord_Howe +Australia/Melbourne +Australia/NSW +Australia/North +Australia/Perth +Australia/Queensland +Australia/South +Australia/Sydney +Australia/Tasmania +Australia/Victoria +Australia/West +Australia/Yancowinna +Brazil/Acre +Brazil/DeNoronha +Brazil/East +Brazil/West +CET +CST6CDT +Canada/Atlantic +Canada/Central +Canada/Eastern +Canada/Mountain +Canada/Newfoundland +Canada/Pacific +Canada/Saskatchewan +Canada/Yukon +Chile/Continental +Chile/EasterIsland +Cuba +EET +EST +EST5EDT +Egypt +Eire +Etc/GMT +Etc/GMT+0 +Etc/GMT+1 +Etc/GMT+10 +Etc/GMT+11 +Etc/GMT+12 +Etc/GMT+2 +Etc/GMT+3 +Etc/GMT+4 +Etc/GMT+5 +Etc/GMT+6 +Etc/GMT+7 +Etc/GMT+8 +Etc/GMT+9 +Etc/GMT-0 +Etc/GMT-1 +Etc/GMT-10 +Etc/GMT-11 +Etc/GMT-12 +Etc/GMT-13 +Etc/GMT-14 +Etc/GMT-2 +Etc/GMT-3 +Etc/GMT-4 +Etc/GMT-5 +Etc/GMT-6 +Etc/GMT-7 +Etc/GMT-8 +Etc/GMT-9 +Etc/GMT0 +Etc/Greenwich +Etc/UCT +Etc/UTC +Etc/Universal +Etc/Zulu +Europe/Amsterdam +Europe/Andorra +Europe/Astrakhan +Europe/Athens +Europe/Belfast +Europe/Belgrade +Europe/Berlin +Europe/Bratislava +Europe/Brussels +Europe/Bucharest +Europe/Budapest +Europe/Busingen +Europe/Chisinau +Europe/Copenhagen +Europe/Dublin +Europe/Gibraltar +Europe/Guernsey +Europe/Helsinki +Europe/Isle_of_Man +Europe/Istanbul +Europe/Jersey +Europe/Kaliningrad +Europe/Kiev +Europe/Kirov +Europe/Kyiv +Europe/Lisbon +Europe/Ljubljana +Europe/London +Europe/Luxembourg +Europe/Madrid +Europe/Malta +Europe/Mariehamn +Europe/Minsk +Europe/Monaco +Europe/Moscow +Europe/Nicosia +Europe/Oslo +Europe/Paris +Europe/Podgorica +Europe/Prague +Europe/Riga +Europe/Rome +Europe/Samara +Europe/San_Marino +Europe/Sarajevo +Europe/Saratov +Europe/Simferopol +Europe/Skopje +Europe/Sofia +Europe/Stockholm +Europe/Tallinn +Europe/Tirane +Europe/Tiraspol +Europe/Ulyanovsk +Europe/Uzhgorod +Europe/Vaduz +Europe/Vatican +Europe/Vienna +Europe/Vilnius +Europe/Volgograd +Europe/Warsaw +Europe/Zagreb +Europe/Zaporozhye +Europe/Zurich +GB +GB-Eire +GMT +GMT+0 +GMT-0 +GMT0 +Greenwich +HST +Hongkong +Iceland +Indian/Antananarivo +Indian/Chagos +Indian/Christmas +Indian/Cocos +Indian/Comoro +Indian/Kerguelen +Indian/Mahe +Indian/Maldives +Indian/Mauritius +Indian/Mayotte +Indian/Reunion +Iran +Israel +Jamaica +Japan +Kwajalein +Libya +MET +MST +MST7MDT +Mexico/BajaNorte +Mexico/BajaSur +Mexico/General +NZ +NZ-CHAT +Navajo +PRC +PST8PDT +Pacific/Apia +Pacific/Auckland +Pacific/Bougainville +Pacific/Chatham +Pacific/Chuuk +Pacific/Easter +Pacific/Efate +Pacific/Enderbury +Pacific/Fakaofo +Pacific/Fiji +Pacific/Funafuti +Pacific/Galapagos +Pacific/Gambier +Pacific/Guadalcanal +Pacific/Guam +Pacific/Honolulu +Pacific/Johnston +Pacific/Kanton +Pacific/Kiritimati +Pacific/Kosrae +Pacific/Kwajalein +Pacific/Majuro +Pacific/Marquesas +Pacific/Midway +Pacific/Nauru +Pacific/Niue +Pacific/Norfolk +Pacific/Noumea +Pacific/Pago_Pago +Pacific/Palau +Pacific/Pitcairn +Pacific/Pohnpei +Pacific/Ponape +Pacific/Port_Moresby +Pacific/Rarotonga +Pacific/Saipan +Pacific/Samoa +Pacific/Tahiti +Pacific/Tarawa +Pacific/Tongatapu +Pacific/Truk +Pacific/Wake +Pacific/Wallis +Pacific/Yap +Poland +Portugal +ROC +ROK +Singapore +Turkey +UCT +US/Alaska +US/Aleutian +US/Arizona +US/Central +US/East-Indiana +US/Eastern +US/Hawaii +US/Indiana-Starke +US/Michigan +US/Mountain +US/Pacific +US/Samoa +UTC +Universal +W-SU +WET +Zulu \ No newline at end of file diff --git a/desk/gub/lib/pytz/navajo.txt b/desk/gub/lib/pytz/navajo.txt new file mode 100644 index 0000000..d26b6e0 --- /dev/null +++ b/desk/gub/lib/pytz/navajo.txt @@ -0,0 +1,159 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1920-03-28T09:00:00,-06:00,MDT +1920-10-31T08:00:00,-07:00,MST +1921-03-27T09:00:00,-06:00,MDT +1921-05-22T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1965-04-25T09:00:00,-06:00,MDT +1965-10-31T08:00:00,-07:00,MST +1966-04-24T09:00:00,-06:00,MDT +1966-10-30T08:00:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST +1968-04-28T09:00:00,-06:00,MDT +1968-10-27T08:00:00,-07:00,MST +1969-04-27T09:00:00,-06:00,MDT +1969-10-26T08:00:00,-07:00,MST +1970-04-26T09:00:00,-06:00,MDT +1970-10-25T08:00:00,-07:00,MST +1971-04-25T09:00:00,-06:00,MDT +1971-10-31T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-01-06T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-02-23T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/nz-chat.txt b/desk/gub/lib/pytz/nz-chat.txt new file mode 100644 index 0000000..e59dafa --- /dev/null +++ b/desk/gub/lib/pytz/nz-chat.txt @@ -0,0 +1,131 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:14,LMT +1901-12-13T20:45:52,+12:15,+1215 +1945-12-31T11:45:00,+12:45,+1245 +1974-11-02T14:00:00,+13:45,+1345 +1975-02-22T14:00:00,+12:45,+1245 +1975-10-25T14:00:00,+13:45,+1345 +1976-03-06T14:00:00,+12:45,+1245 +1976-10-30T14:00:00,+13:45,+1345 +1977-03-05T14:00:00,+12:45,+1245 +1977-10-29T14:00:00,+13:45,+1345 +1978-03-04T14:00:00,+12:45,+1245 +1978-10-28T14:00:00,+13:45,+1345 +1979-03-03T14:00:00,+12:45,+1245 +1979-10-27T14:00:00,+13:45,+1345 +1980-03-01T14:00:00,+12:45,+1245 +1980-10-25T14:00:00,+13:45,+1345 +1981-02-28T14:00:00,+12:45,+1245 +1981-10-24T14:00:00,+13:45,+1345 +1982-03-06T14:00:00,+12:45,+1245 +1982-10-30T14:00:00,+13:45,+1345 +1983-03-05T14:00:00,+12:45,+1245 +1983-10-29T14:00:00,+13:45,+1345 +1984-03-03T14:00:00,+12:45,+1245 +1984-10-27T14:00:00,+13:45,+1345 +1985-03-02T14:00:00,+12:45,+1245 +1985-10-26T14:00:00,+13:45,+1345 +1986-03-01T14:00:00,+12:45,+1245 +1986-10-25T14:00:00,+13:45,+1345 +1987-02-28T14:00:00,+12:45,+1245 +1987-10-24T14:00:00,+13:45,+1345 +1988-03-05T14:00:00,+12:45,+1245 +1988-10-29T14:00:00,+13:45,+1345 +1989-03-04T14:00:00,+12:45,+1245 +1989-10-07T14:00:00,+13:45,+1345 +1990-03-17T14:00:00,+12:45,+1245 +1990-10-06T14:00:00,+13:45,+1345 +1991-03-16T14:00:00,+12:45,+1245 +1991-10-05T14:00:00,+13:45,+1345 +1992-03-14T14:00:00,+12:45,+1245 +1992-10-03T14:00:00,+13:45,+1345 +1993-03-20T14:00:00,+12:45,+1245 +1993-10-02T14:00:00,+13:45,+1345 +1994-03-19T14:00:00,+12:45,+1245 +1994-10-01T14:00:00,+13:45,+1345 +1995-03-18T14:00:00,+12:45,+1245 +1995-09-30T14:00:00,+13:45,+1345 +1996-03-16T14:00:00,+12:45,+1245 +1996-10-05T14:00:00,+13:45,+1345 +1997-03-15T14:00:00,+12:45,+1245 +1997-10-04T14:00:00,+13:45,+1345 +1998-03-14T14:00:00,+12:45,+1245 +1998-10-03T14:00:00,+13:45,+1345 +1999-03-20T14:00:00,+12:45,+1245 +1999-10-02T14:00:00,+13:45,+1345 +2000-03-18T14:00:00,+12:45,+1245 +2000-09-30T14:00:00,+13:45,+1345 +2001-03-17T14:00:00,+12:45,+1245 +2001-10-06T14:00:00,+13:45,+1345 +2002-03-16T14:00:00,+12:45,+1245 +2002-10-05T14:00:00,+13:45,+1345 +2003-03-15T14:00:00,+12:45,+1245 +2003-10-04T14:00:00,+13:45,+1345 +2004-03-20T14:00:00,+12:45,+1245 +2004-10-02T14:00:00,+13:45,+1345 +2005-03-19T14:00:00,+12:45,+1245 +2005-10-01T14:00:00,+13:45,+1345 +2006-03-18T14:00:00,+12:45,+1245 +2006-09-30T14:00:00,+13:45,+1345 +2007-03-17T14:00:00,+12:45,+1245 +2007-09-29T14:00:00,+13:45,+1345 +2008-04-05T14:00:00,+12:45,+1245 +2008-09-27T14:00:00,+13:45,+1345 +2009-04-04T14:00:00,+12:45,+1245 +2009-09-26T14:00:00,+13:45,+1345 +2010-04-03T14:00:00,+12:45,+1245 +2010-09-25T14:00:00,+13:45,+1345 +2011-04-02T14:00:00,+12:45,+1245 +2011-09-24T14:00:00,+13:45,+1345 +2012-03-31T14:00:00,+12:45,+1245 +2012-09-29T14:00:00,+13:45,+1345 +2013-04-06T14:00:00,+12:45,+1245 +2013-09-28T14:00:00,+13:45,+1345 +2014-04-05T14:00:00,+12:45,+1245 +2014-09-27T14:00:00,+13:45,+1345 +2015-04-04T14:00:00,+12:45,+1245 +2015-09-26T14:00:00,+13:45,+1345 +2016-04-02T14:00:00,+12:45,+1245 +2016-09-24T14:00:00,+13:45,+1345 +2017-04-01T14:00:00,+12:45,+1245 +2017-09-23T14:00:00,+13:45,+1345 +2018-03-31T14:00:00,+12:45,+1245 +2018-09-29T14:00:00,+13:45,+1345 +2019-04-06T14:00:00,+12:45,+1245 +2019-09-28T14:00:00,+13:45,+1345 +2020-04-04T14:00:00,+12:45,+1245 +2020-09-26T14:00:00,+13:45,+1345 +2021-04-03T14:00:00,+12:45,+1245 +2021-09-25T14:00:00,+13:45,+1345 +2022-04-02T14:00:00,+12:45,+1245 +2022-09-24T14:00:00,+13:45,+1345 +2023-04-01T14:00:00,+12:45,+1245 +2023-09-23T14:00:00,+13:45,+1345 +2024-04-06T14:00:00,+12:45,+1245 +2024-09-28T14:00:00,+13:45,+1345 +2025-04-05T14:00:00,+12:45,+1245 +2025-09-27T14:00:00,+13:45,+1345 +2026-04-04T14:00:00,+12:45,+1245 +2026-09-26T14:00:00,+13:45,+1345 +2027-04-03T14:00:00,+12:45,+1245 +2027-09-25T14:00:00,+13:45,+1345 +2028-04-01T14:00:00,+12:45,+1245 +2028-09-23T14:00:00,+13:45,+1345 +2029-03-31T14:00:00,+12:45,+1245 +2029-09-29T14:00:00,+13:45,+1345 +2030-04-06T14:00:00,+12:45,+1245 +2030-09-28T14:00:00,+13:45,+1345 +2031-04-05T14:00:00,+12:45,+1245 +2031-09-27T14:00:00,+13:45,+1345 +2032-04-03T14:00:00,+12:45,+1245 +2032-09-25T14:00:00,+13:45,+1345 +2033-04-02T14:00:00,+12:45,+1245 +2033-09-24T14:00:00,+13:45,+1345 +2034-04-01T14:00:00,+12:45,+1245 +2034-09-23T14:00:00,+13:45,+1345 +2035-03-31T14:00:00,+12:45,+1245 +2035-09-29T14:00:00,+13:45,+1345 +2036-04-05T14:00:00,+12:45,+1245 +2036-09-27T14:00:00,+13:45,+1345 +2037-04-04T14:00:00,+12:45,+1245 +2037-09-26T14:00:00,+13:45,+1345 \ No newline at end of file diff --git a/desk/gub/lib/pytz/nz.txt b/desk/gub/lib/pytz/nz.txt new file mode 100644 index 0000000..5d21f11 --- /dev/null +++ b/desk/gub/lib/pytz/nz.txt @@ -0,0 +1,158 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:39,LMT +1901-12-13T20:45:52,+11:30,NZMT +1927-11-05T14:30:00,+12:30,NZST +1928-03-03T13:30:00,+11:30,NZMT +1928-10-13T14:30:00,+12:00,NZST +1929-03-16T14:00:00,+11:30,NZMT +1929-10-12T14:30:00,+12:00,NZST +1930-03-15T14:00:00,+11:30,NZMT +1930-10-11T14:30:00,+12:00,NZST +1931-03-14T14:00:00,+11:30,NZMT +1931-10-10T14:30:00,+12:00,NZST +1932-03-19T14:00:00,+11:30,NZMT +1932-10-08T14:30:00,+12:00,NZST +1933-03-18T14:00:00,+11:30,NZMT +1933-10-07T14:30:00,+12:00,NZST +1934-04-28T14:00:00,+11:30,NZMT +1934-09-29T14:30:00,+12:00,NZST +1935-04-27T14:00:00,+11:30,NZMT +1935-09-28T14:30:00,+12:00,NZST +1936-04-25T14:00:00,+11:30,NZMT +1936-09-26T14:30:00,+12:00,NZST +1937-04-24T14:00:00,+11:30,NZMT +1937-09-25T14:30:00,+12:00,NZST +1938-04-23T14:00:00,+11:30,NZMT +1938-09-24T14:30:00,+12:00,NZST +1939-04-29T14:00:00,+11:30,NZMT +1939-09-23T14:30:00,+12:00,NZST +1940-04-27T14:00:00,+11:30,NZMT +1940-09-28T14:30:00,+12:00,NZST +1945-12-31T12:00:00,+12:00,NZST +1974-11-02T14:00:00,+13:00,NZDT +1975-02-22T14:00:00,+12:00,NZST +1975-10-25T14:00:00,+13:00,NZDT +1976-03-06T14:00:00,+12:00,NZST +1976-10-30T14:00:00,+13:00,NZDT +1977-03-05T14:00:00,+12:00,NZST +1977-10-29T14:00:00,+13:00,NZDT +1978-03-04T14:00:00,+12:00,NZST +1978-10-28T14:00:00,+13:00,NZDT +1979-03-03T14:00:00,+12:00,NZST +1979-10-27T14:00:00,+13:00,NZDT +1980-03-01T14:00:00,+12:00,NZST +1980-10-25T14:00:00,+13:00,NZDT +1981-02-28T14:00:00,+12:00,NZST +1981-10-24T14:00:00,+13:00,NZDT +1982-03-06T14:00:00,+12:00,NZST +1982-10-30T14:00:00,+13:00,NZDT +1983-03-05T14:00:00,+12:00,NZST +1983-10-29T14:00:00,+13:00,NZDT +1984-03-03T14:00:00,+12:00,NZST +1984-10-27T14:00:00,+13:00,NZDT +1985-03-02T14:00:00,+12:00,NZST +1985-10-26T14:00:00,+13:00,NZDT +1986-03-01T14:00:00,+12:00,NZST +1986-10-25T14:00:00,+13:00,NZDT +1987-02-28T14:00:00,+12:00,NZST +1987-10-24T14:00:00,+13:00,NZDT +1988-03-05T14:00:00,+12:00,NZST +1988-10-29T14:00:00,+13:00,NZDT +1989-03-04T14:00:00,+12:00,NZST +1989-10-07T14:00:00,+13:00,NZDT +1990-03-17T14:00:00,+12:00,NZST +1990-10-06T14:00:00,+13:00,NZDT +1991-03-16T14:00:00,+12:00,NZST +1991-10-05T14:00:00,+13:00,NZDT +1992-03-14T14:00:00,+12:00,NZST +1992-10-03T14:00:00,+13:00,NZDT +1993-03-20T14:00:00,+12:00,NZST +1993-10-02T14:00:00,+13:00,NZDT +1994-03-19T14:00:00,+12:00,NZST +1994-10-01T14:00:00,+13:00,NZDT +1995-03-18T14:00:00,+12:00,NZST +1995-09-30T14:00:00,+13:00,NZDT +1996-03-16T14:00:00,+12:00,NZST +1996-10-05T14:00:00,+13:00,NZDT +1997-03-15T14:00:00,+12:00,NZST +1997-10-04T14:00:00,+13:00,NZDT +1998-03-14T14:00:00,+12:00,NZST +1998-10-03T14:00:00,+13:00,NZDT +1999-03-20T14:00:00,+12:00,NZST +1999-10-02T14:00:00,+13:00,NZDT +2000-03-18T14:00:00,+12:00,NZST +2000-09-30T14:00:00,+13:00,NZDT +2001-03-17T14:00:00,+12:00,NZST +2001-10-06T14:00:00,+13:00,NZDT +2002-03-16T14:00:00,+12:00,NZST +2002-10-05T14:00:00,+13:00,NZDT +2003-03-15T14:00:00,+12:00,NZST +2003-10-04T14:00:00,+13:00,NZDT +2004-03-20T14:00:00,+12:00,NZST +2004-10-02T14:00:00,+13:00,NZDT +2005-03-19T14:00:00,+12:00,NZST +2005-10-01T14:00:00,+13:00,NZDT +2006-03-18T14:00:00,+12:00,NZST +2006-09-30T14:00:00,+13:00,NZDT +2007-03-17T14:00:00,+12:00,NZST +2007-09-29T14:00:00,+13:00,NZDT +2008-04-05T14:00:00,+12:00,NZST +2008-09-27T14:00:00,+13:00,NZDT +2009-04-04T14:00:00,+12:00,NZST +2009-09-26T14:00:00,+13:00,NZDT +2010-04-03T14:00:00,+12:00,NZST +2010-09-25T14:00:00,+13:00,NZDT +2011-04-02T14:00:00,+12:00,NZST +2011-09-24T14:00:00,+13:00,NZDT +2012-03-31T14:00:00,+12:00,NZST +2012-09-29T14:00:00,+13:00,NZDT +2013-04-06T14:00:00,+12:00,NZST +2013-09-28T14:00:00,+13:00,NZDT +2014-04-05T14:00:00,+12:00,NZST +2014-09-27T14:00:00,+13:00,NZDT +2015-04-04T14:00:00,+12:00,NZST +2015-09-26T14:00:00,+13:00,NZDT +2016-04-02T14:00:00,+12:00,NZST +2016-09-24T14:00:00,+13:00,NZDT +2017-04-01T14:00:00,+12:00,NZST +2017-09-23T14:00:00,+13:00,NZDT +2018-03-31T14:00:00,+12:00,NZST +2018-09-29T14:00:00,+13:00,NZDT +2019-04-06T14:00:00,+12:00,NZST +2019-09-28T14:00:00,+13:00,NZDT +2020-04-04T14:00:00,+12:00,NZST +2020-09-26T14:00:00,+13:00,NZDT +2021-04-03T14:00:00,+12:00,NZST +2021-09-25T14:00:00,+13:00,NZDT +2022-04-02T14:00:00,+12:00,NZST +2022-09-24T14:00:00,+13:00,NZDT +2023-04-01T14:00:00,+12:00,NZST +2023-09-23T14:00:00,+13:00,NZDT +2024-04-06T14:00:00,+12:00,NZST +2024-09-28T14:00:00,+13:00,NZDT +2025-04-05T14:00:00,+12:00,NZST +2025-09-27T14:00:00,+13:00,NZDT +2026-04-04T14:00:00,+12:00,NZST +2026-09-26T14:00:00,+13:00,NZDT +2027-04-03T14:00:00,+12:00,NZST +2027-09-25T14:00:00,+13:00,NZDT +2028-04-01T14:00:00,+12:00,NZST +2028-09-23T14:00:00,+13:00,NZDT +2029-03-31T14:00:00,+12:00,NZST +2029-09-29T14:00:00,+13:00,NZDT +2030-04-06T14:00:00,+12:00,NZST +2030-09-28T14:00:00,+13:00,NZDT +2031-04-05T14:00:00,+12:00,NZST +2031-09-27T14:00:00,+13:00,NZDT +2032-04-03T14:00:00,+12:00,NZST +2032-09-25T14:00:00,+13:00,NZDT +2033-04-02T14:00:00,+12:00,NZST +2033-09-24T14:00:00,+13:00,NZDT +2034-04-01T14:00:00,+12:00,NZST +2034-09-23T14:00:00,+13:00,NZDT +2035-03-31T14:00:00,+12:00,NZST +2035-09-29T14:00:00,+13:00,NZDT +2036-04-05T14:00:00,+12:00,NZST +2036-09-27T14:00:00,+13:00,NZDT +2037-04-04T14:00:00,+12:00,NZST +2037-09-26T14:00:00,+13:00,NZDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-apia.txt b/desk/gub/lib/pytz/pacific-apia.txt new file mode 100644 index 0000000..8d9534d --- /dev/null +++ b/desk/gub/lib/pytz/pacific-apia.txt @@ -0,0 +1,28 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:33,LMT +1901-12-13T20:45:52,-12:33,LMT +1911-01-01T11:26:56,-12:30,-1130 +1950-01-01T11:30:00,-11:00,-11 +2010-09-26T11:00:00,-10:00,-10 +2011-04-02T14:00:00,-11:00,-11 +2011-09-24T14:00:00,-10:00,-10 +2011-12-30T10:00:00,+14:00,+14 +2012-03-31T14:00:00,+13:00,+13 +2012-09-29T14:00:00,+14:00,+14 +2013-04-06T14:00:00,+13:00,+13 +2013-09-28T14:00:00,+14:00,+14 +2014-04-05T14:00:00,+13:00,+13 +2014-09-27T14:00:00,+14:00,+14 +2015-04-04T14:00:00,+13:00,+13 +2015-09-26T14:00:00,+14:00,+14 +2016-04-02T14:00:00,+13:00,+13 +2016-09-24T14:00:00,+14:00,+14 +2017-04-01T14:00:00,+13:00,+13 +2017-09-23T14:00:00,+14:00,+14 +2018-03-31T14:00:00,+13:00,+13 +2018-09-29T14:00:00,+14:00,+14 +2019-04-06T14:00:00,+13:00,+13 +2019-09-28T14:00:00,+14:00,+14 +2020-04-04T14:00:00,+13:00,+13 +2020-09-26T14:00:00,+14:00,+14 +2021-04-03T14:00:00,+13:00,+13 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-auckland.txt b/desk/gub/lib/pytz/pacific-auckland.txt new file mode 100644 index 0000000..5d21f11 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-auckland.txt @@ -0,0 +1,158 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:39,LMT +1901-12-13T20:45:52,+11:30,NZMT +1927-11-05T14:30:00,+12:30,NZST +1928-03-03T13:30:00,+11:30,NZMT +1928-10-13T14:30:00,+12:00,NZST +1929-03-16T14:00:00,+11:30,NZMT +1929-10-12T14:30:00,+12:00,NZST +1930-03-15T14:00:00,+11:30,NZMT +1930-10-11T14:30:00,+12:00,NZST +1931-03-14T14:00:00,+11:30,NZMT +1931-10-10T14:30:00,+12:00,NZST +1932-03-19T14:00:00,+11:30,NZMT +1932-10-08T14:30:00,+12:00,NZST +1933-03-18T14:00:00,+11:30,NZMT +1933-10-07T14:30:00,+12:00,NZST +1934-04-28T14:00:00,+11:30,NZMT +1934-09-29T14:30:00,+12:00,NZST +1935-04-27T14:00:00,+11:30,NZMT +1935-09-28T14:30:00,+12:00,NZST +1936-04-25T14:00:00,+11:30,NZMT +1936-09-26T14:30:00,+12:00,NZST +1937-04-24T14:00:00,+11:30,NZMT +1937-09-25T14:30:00,+12:00,NZST +1938-04-23T14:00:00,+11:30,NZMT +1938-09-24T14:30:00,+12:00,NZST +1939-04-29T14:00:00,+11:30,NZMT +1939-09-23T14:30:00,+12:00,NZST +1940-04-27T14:00:00,+11:30,NZMT +1940-09-28T14:30:00,+12:00,NZST +1945-12-31T12:00:00,+12:00,NZST +1974-11-02T14:00:00,+13:00,NZDT +1975-02-22T14:00:00,+12:00,NZST +1975-10-25T14:00:00,+13:00,NZDT +1976-03-06T14:00:00,+12:00,NZST +1976-10-30T14:00:00,+13:00,NZDT +1977-03-05T14:00:00,+12:00,NZST +1977-10-29T14:00:00,+13:00,NZDT +1978-03-04T14:00:00,+12:00,NZST +1978-10-28T14:00:00,+13:00,NZDT +1979-03-03T14:00:00,+12:00,NZST +1979-10-27T14:00:00,+13:00,NZDT +1980-03-01T14:00:00,+12:00,NZST +1980-10-25T14:00:00,+13:00,NZDT +1981-02-28T14:00:00,+12:00,NZST +1981-10-24T14:00:00,+13:00,NZDT +1982-03-06T14:00:00,+12:00,NZST +1982-10-30T14:00:00,+13:00,NZDT +1983-03-05T14:00:00,+12:00,NZST +1983-10-29T14:00:00,+13:00,NZDT +1984-03-03T14:00:00,+12:00,NZST +1984-10-27T14:00:00,+13:00,NZDT +1985-03-02T14:00:00,+12:00,NZST +1985-10-26T14:00:00,+13:00,NZDT +1986-03-01T14:00:00,+12:00,NZST +1986-10-25T14:00:00,+13:00,NZDT +1987-02-28T14:00:00,+12:00,NZST +1987-10-24T14:00:00,+13:00,NZDT +1988-03-05T14:00:00,+12:00,NZST +1988-10-29T14:00:00,+13:00,NZDT +1989-03-04T14:00:00,+12:00,NZST +1989-10-07T14:00:00,+13:00,NZDT +1990-03-17T14:00:00,+12:00,NZST +1990-10-06T14:00:00,+13:00,NZDT +1991-03-16T14:00:00,+12:00,NZST +1991-10-05T14:00:00,+13:00,NZDT +1992-03-14T14:00:00,+12:00,NZST +1992-10-03T14:00:00,+13:00,NZDT +1993-03-20T14:00:00,+12:00,NZST +1993-10-02T14:00:00,+13:00,NZDT +1994-03-19T14:00:00,+12:00,NZST +1994-10-01T14:00:00,+13:00,NZDT +1995-03-18T14:00:00,+12:00,NZST +1995-09-30T14:00:00,+13:00,NZDT +1996-03-16T14:00:00,+12:00,NZST +1996-10-05T14:00:00,+13:00,NZDT +1997-03-15T14:00:00,+12:00,NZST +1997-10-04T14:00:00,+13:00,NZDT +1998-03-14T14:00:00,+12:00,NZST +1998-10-03T14:00:00,+13:00,NZDT +1999-03-20T14:00:00,+12:00,NZST +1999-10-02T14:00:00,+13:00,NZDT +2000-03-18T14:00:00,+12:00,NZST +2000-09-30T14:00:00,+13:00,NZDT +2001-03-17T14:00:00,+12:00,NZST +2001-10-06T14:00:00,+13:00,NZDT +2002-03-16T14:00:00,+12:00,NZST +2002-10-05T14:00:00,+13:00,NZDT +2003-03-15T14:00:00,+12:00,NZST +2003-10-04T14:00:00,+13:00,NZDT +2004-03-20T14:00:00,+12:00,NZST +2004-10-02T14:00:00,+13:00,NZDT +2005-03-19T14:00:00,+12:00,NZST +2005-10-01T14:00:00,+13:00,NZDT +2006-03-18T14:00:00,+12:00,NZST +2006-09-30T14:00:00,+13:00,NZDT +2007-03-17T14:00:00,+12:00,NZST +2007-09-29T14:00:00,+13:00,NZDT +2008-04-05T14:00:00,+12:00,NZST +2008-09-27T14:00:00,+13:00,NZDT +2009-04-04T14:00:00,+12:00,NZST +2009-09-26T14:00:00,+13:00,NZDT +2010-04-03T14:00:00,+12:00,NZST +2010-09-25T14:00:00,+13:00,NZDT +2011-04-02T14:00:00,+12:00,NZST +2011-09-24T14:00:00,+13:00,NZDT +2012-03-31T14:00:00,+12:00,NZST +2012-09-29T14:00:00,+13:00,NZDT +2013-04-06T14:00:00,+12:00,NZST +2013-09-28T14:00:00,+13:00,NZDT +2014-04-05T14:00:00,+12:00,NZST +2014-09-27T14:00:00,+13:00,NZDT +2015-04-04T14:00:00,+12:00,NZST +2015-09-26T14:00:00,+13:00,NZDT +2016-04-02T14:00:00,+12:00,NZST +2016-09-24T14:00:00,+13:00,NZDT +2017-04-01T14:00:00,+12:00,NZST +2017-09-23T14:00:00,+13:00,NZDT +2018-03-31T14:00:00,+12:00,NZST +2018-09-29T14:00:00,+13:00,NZDT +2019-04-06T14:00:00,+12:00,NZST +2019-09-28T14:00:00,+13:00,NZDT +2020-04-04T14:00:00,+12:00,NZST +2020-09-26T14:00:00,+13:00,NZDT +2021-04-03T14:00:00,+12:00,NZST +2021-09-25T14:00:00,+13:00,NZDT +2022-04-02T14:00:00,+12:00,NZST +2022-09-24T14:00:00,+13:00,NZDT +2023-04-01T14:00:00,+12:00,NZST +2023-09-23T14:00:00,+13:00,NZDT +2024-04-06T14:00:00,+12:00,NZST +2024-09-28T14:00:00,+13:00,NZDT +2025-04-05T14:00:00,+12:00,NZST +2025-09-27T14:00:00,+13:00,NZDT +2026-04-04T14:00:00,+12:00,NZST +2026-09-26T14:00:00,+13:00,NZDT +2027-04-03T14:00:00,+12:00,NZST +2027-09-25T14:00:00,+13:00,NZDT +2028-04-01T14:00:00,+12:00,NZST +2028-09-23T14:00:00,+13:00,NZDT +2029-03-31T14:00:00,+12:00,NZST +2029-09-29T14:00:00,+13:00,NZDT +2030-04-06T14:00:00,+12:00,NZST +2030-09-28T14:00:00,+13:00,NZDT +2031-04-05T14:00:00,+12:00,NZST +2031-09-27T14:00:00,+13:00,NZDT +2032-04-03T14:00:00,+12:00,NZST +2032-09-25T14:00:00,+13:00,NZDT +2033-04-02T14:00:00,+12:00,NZST +2033-09-24T14:00:00,+13:00,NZDT +2034-04-01T14:00:00,+12:00,NZST +2034-09-23T14:00:00,+13:00,NZDT +2035-03-31T14:00:00,+12:00,NZST +2035-09-29T14:00:00,+13:00,NZDT +2036-04-05T14:00:00,+12:00,NZST +2036-09-27T14:00:00,+13:00,NZDT +2037-04-04T14:00:00,+12:00,NZST +2037-09-26T14:00:00,+13:00,NZDT \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-bougainville.txt b/desk/gub/lib/pytz/pacific-bougainville.txt new file mode 100644 index 0000000..619137a --- /dev/null +++ b/desk/gub/lib/pytz/pacific-bougainville.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:22,LMT +1901-12-13T20:45:52,+10:00,+10 +1942-06-30T14:00:00,+09:00,+09 +1945-08-20T15:00:00,+10:00,+10 +2014-12-27T16:00:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-chatham.txt b/desk/gub/lib/pytz/pacific-chatham.txt new file mode 100644 index 0000000..e59dafa --- /dev/null +++ b/desk/gub/lib/pytz/pacific-chatham.txt @@ -0,0 +1,131 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:14,LMT +1901-12-13T20:45:52,+12:15,+1215 +1945-12-31T11:45:00,+12:45,+1245 +1974-11-02T14:00:00,+13:45,+1345 +1975-02-22T14:00:00,+12:45,+1245 +1975-10-25T14:00:00,+13:45,+1345 +1976-03-06T14:00:00,+12:45,+1245 +1976-10-30T14:00:00,+13:45,+1345 +1977-03-05T14:00:00,+12:45,+1245 +1977-10-29T14:00:00,+13:45,+1345 +1978-03-04T14:00:00,+12:45,+1245 +1978-10-28T14:00:00,+13:45,+1345 +1979-03-03T14:00:00,+12:45,+1245 +1979-10-27T14:00:00,+13:45,+1345 +1980-03-01T14:00:00,+12:45,+1245 +1980-10-25T14:00:00,+13:45,+1345 +1981-02-28T14:00:00,+12:45,+1245 +1981-10-24T14:00:00,+13:45,+1345 +1982-03-06T14:00:00,+12:45,+1245 +1982-10-30T14:00:00,+13:45,+1345 +1983-03-05T14:00:00,+12:45,+1245 +1983-10-29T14:00:00,+13:45,+1345 +1984-03-03T14:00:00,+12:45,+1245 +1984-10-27T14:00:00,+13:45,+1345 +1985-03-02T14:00:00,+12:45,+1245 +1985-10-26T14:00:00,+13:45,+1345 +1986-03-01T14:00:00,+12:45,+1245 +1986-10-25T14:00:00,+13:45,+1345 +1987-02-28T14:00:00,+12:45,+1245 +1987-10-24T14:00:00,+13:45,+1345 +1988-03-05T14:00:00,+12:45,+1245 +1988-10-29T14:00:00,+13:45,+1345 +1989-03-04T14:00:00,+12:45,+1245 +1989-10-07T14:00:00,+13:45,+1345 +1990-03-17T14:00:00,+12:45,+1245 +1990-10-06T14:00:00,+13:45,+1345 +1991-03-16T14:00:00,+12:45,+1245 +1991-10-05T14:00:00,+13:45,+1345 +1992-03-14T14:00:00,+12:45,+1245 +1992-10-03T14:00:00,+13:45,+1345 +1993-03-20T14:00:00,+12:45,+1245 +1993-10-02T14:00:00,+13:45,+1345 +1994-03-19T14:00:00,+12:45,+1245 +1994-10-01T14:00:00,+13:45,+1345 +1995-03-18T14:00:00,+12:45,+1245 +1995-09-30T14:00:00,+13:45,+1345 +1996-03-16T14:00:00,+12:45,+1245 +1996-10-05T14:00:00,+13:45,+1345 +1997-03-15T14:00:00,+12:45,+1245 +1997-10-04T14:00:00,+13:45,+1345 +1998-03-14T14:00:00,+12:45,+1245 +1998-10-03T14:00:00,+13:45,+1345 +1999-03-20T14:00:00,+12:45,+1245 +1999-10-02T14:00:00,+13:45,+1345 +2000-03-18T14:00:00,+12:45,+1245 +2000-09-30T14:00:00,+13:45,+1345 +2001-03-17T14:00:00,+12:45,+1245 +2001-10-06T14:00:00,+13:45,+1345 +2002-03-16T14:00:00,+12:45,+1245 +2002-10-05T14:00:00,+13:45,+1345 +2003-03-15T14:00:00,+12:45,+1245 +2003-10-04T14:00:00,+13:45,+1345 +2004-03-20T14:00:00,+12:45,+1245 +2004-10-02T14:00:00,+13:45,+1345 +2005-03-19T14:00:00,+12:45,+1245 +2005-10-01T14:00:00,+13:45,+1345 +2006-03-18T14:00:00,+12:45,+1245 +2006-09-30T14:00:00,+13:45,+1345 +2007-03-17T14:00:00,+12:45,+1245 +2007-09-29T14:00:00,+13:45,+1345 +2008-04-05T14:00:00,+12:45,+1245 +2008-09-27T14:00:00,+13:45,+1345 +2009-04-04T14:00:00,+12:45,+1245 +2009-09-26T14:00:00,+13:45,+1345 +2010-04-03T14:00:00,+12:45,+1245 +2010-09-25T14:00:00,+13:45,+1345 +2011-04-02T14:00:00,+12:45,+1245 +2011-09-24T14:00:00,+13:45,+1345 +2012-03-31T14:00:00,+12:45,+1245 +2012-09-29T14:00:00,+13:45,+1345 +2013-04-06T14:00:00,+12:45,+1245 +2013-09-28T14:00:00,+13:45,+1345 +2014-04-05T14:00:00,+12:45,+1245 +2014-09-27T14:00:00,+13:45,+1345 +2015-04-04T14:00:00,+12:45,+1245 +2015-09-26T14:00:00,+13:45,+1345 +2016-04-02T14:00:00,+12:45,+1245 +2016-09-24T14:00:00,+13:45,+1345 +2017-04-01T14:00:00,+12:45,+1245 +2017-09-23T14:00:00,+13:45,+1345 +2018-03-31T14:00:00,+12:45,+1245 +2018-09-29T14:00:00,+13:45,+1345 +2019-04-06T14:00:00,+12:45,+1245 +2019-09-28T14:00:00,+13:45,+1345 +2020-04-04T14:00:00,+12:45,+1245 +2020-09-26T14:00:00,+13:45,+1345 +2021-04-03T14:00:00,+12:45,+1245 +2021-09-25T14:00:00,+13:45,+1345 +2022-04-02T14:00:00,+12:45,+1245 +2022-09-24T14:00:00,+13:45,+1345 +2023-04-01T14:00:00,+12:45,+1245 +2023-09-23T14:00:00,+13:45,+1345 +2024-04-06T14:00:00,+12:45,+1245 +2024-09-28T14:00:00,+13:45,+1345 +2025-04-05T14:00:00,+12:45,+1245 +2025-09-27T14:00:00,+13:45,+1345 +2026-04-04T14:00:00,+12:45,+1245 +2026-09-26T14:00:00,+13:45,+1345 +2027-04-03T14:00:00,+12:45,+1245 +2027-09-25T14:00:00,+13:45,+1345 +2028-04-01T14:00:00,+12:45,+1245 +2028-09-23T14:00:00,+13:45,+1345 +2029-03-31T14:00:00,+12:45,+1245 +2029-09-29T14:00:00,+13:45,+1345 +2030-04-06T14:00:00,+12:45,+1245 +2030-09-28T14:00:00,+13:45,+1345 +2031-04-05T14:00:00,+12:45,+1245 +2031-09-27T14:00:00,+13:45,+1345 +2032-04-03T14:00:00,+12:45,+1245 +2032-09-25T14:00:00,+13:45,+1345 +2033-04-02T14:00:00,+12:45,+1245 +2033-09-24T14:00:00,+13:45,+1345 +2034-04-01T14:00:00,+12:45,+1245 +2034-09-23T14:00:00,+13:45,+1345 +2035-03-31T14:00:00,+12:45,+1245 +2035-09-29T14:00:00,+13:45,+1345 +2036-04-05T14:00:00,+12:45,+1245 +2036-09-27T14:00:00,+13:45,+1345 +2037-04-04T14:00:00,+12:45,+1245 +2037-09-26T14:00:00,+13:45,+1345 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-chuuk.txt b/desk/gub/lib/pytz/pacific-chuuk.txt new file mode 100644 index 0000000..a494e67 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-chuuk.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:49,LMT +1901-12-13T20:45:52,+10:00,+10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-easter.txt b/desk/gub/lib/pytz/pacific-easter.txt new file mode 100644 index 0000000..7454c05 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-easter.txt @@ -0,0 +1,140 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:43,EMT +1932-09-01T07:17:28,-07:00,-07 +1968-11-03T04:00:00,-06:00,-06 +1969-03-30T03:00:00,-07:00,-07 +1969-11-23T04:00:00,-06:00,-06 +1970-03-29T03:00:00,-07:00,-07 +1970-10-11T04:00:00,-06:00,-06 +1971-03-14T03:00:00,-07:00,-07 +1971-10-10T04:00:00,-06:00,-06 +1972-03-12T03:00:00,-07:00,-07 +1972-10-15T04:00:00,-06:00,-06 +1973-03-11T03:00:00,-07:00,-07 +1973-09-30T04:00:00,-06:00,-06 +1974-03-10T03:00:00,-07:00,-07 +1974-10-13T04:00:00,-06:00,-06 +1975-03-09T03:00:00,-07:00,-07 +1975-10-12T04:00:00,-06:00,-06 +1976-03-14T03:00:00,-07:00,-07 +1976-10-10T04:00:00,-06:00,-06 +1977-03-13T03:00:00,-07:00,-07 +1977-10-09T04:00:00,-06:00,-06 +1978-03-12T03:00:00,-07:00,-07 +1978-10-15T04:00:00,-06:00,-06 +1979-03-11T03:00:00,-07:00,-07 +1979-10-14T04:00:00,-06:00,-06 +1980-03-09T03:00:00,-07:00,-07 +1980-10-12T04:00:00,-06:00,-06 +1981-03-15T03:00:00,-07:00,-07 +1981-10-11T04:00:00,-06:00,-06 +1982-03-14T03:00:00,-06:00,-06 +1982-10-10T04:00:00,-05:00,-05 +1983-03-13T03:00:00,-06:00,-06 +1983-10-09T04:00:00,-05:00,-05 +1984-03-11T03:00:00,-06:00,-06 +1984-10-14T04:00:00,-05:00,-05 +1985-03-10T03:00:00,-06:00,-06 +1985-10-13T04:00:00,-05:00,-05 +1986-03-09T03:00:00,-06:00,-06 +1986-10-12T04:00:00,-05:00,-05 +1987-04-12T03:00:00,-06:00,-06 +1987-10-11T04:00:00,-05:00,-05 +1988-03-13T03:00:00,-06:00,-06 +1988-10-09T04:00:00,-05:00,-05 +1989-03-12T03:00:00,-06:00,-06 +1989-10-15T04:00:00,-05:00,-05 +1990-03-11T03:00:00,-06:00,-06 +1990-09-16T04:00:00,-05:00,-05 +1991-03-10T03:00:00,-06:00,-06 +1991-10-13T04:00:00,-05:00,-05 +1992-03-15T03:00:00,-06:00,-06 +1992-10-11T04:00:00,-05:00,-05 +1993-03-14T03:00:00,-06:00,-06 +1993-10-10T04:00:00,-05:00,-05 +1994-03-13T03:00:00,-06:00,-06 +1994-10-09T04:00:00,-05:00,-05 +1995-03-12T03:00:00,-06:00,-06 +1995-10-15T04:00:00,-05:00,-05 +1996-03-10T03:00:00,-06:00,-06 +1996-10-13T04:00:00,-05:00,-05 +1997-03-30T03:00:00,-06:00,-06 +1997-10-12T04:00:00,-05:00,-05 +1998-03-15T03:00:00,-06:00,-06 +1998-09-27T04:00:00,-05:00,-05 +1999-04-04T03:00:00,-06:00,-06 +1999-10-10T04:00:00,-05:00,-05 +2000-03-12T03:00:00,-06:00,-06 +2000-10-15T04:00:00,-05:00,-05 +2001-03-11T03:00:00,-06:00,-06 +2001-10-14T04:00:00,-05:00,-05 +2002-03-10T03:00:00,-06:00,-06 +2002-10-13T04:00:00,-05:00,-05 +2003-03-09T03:00:00,-06:00,-06 +2003-10-12T04:00:00,-05:00,-05 +2004-03-14T03:00:00,-06:00,-06 +2004-10-10T04:00:00,-05:00,-05 +2005-03-13T03:00:00,-06:00,-06 +2005-10-09T04:00:00,-05:00,-05 +2006-03-12T03:00:00,-06:00,-06 +2006-10-15T04:00:00,-05:00,-05 +2007-03-11T03:00:00,-06:00,-06 +2007-10-14T04:00:00,-05:00,-05 +2008-03-30T03:00:00,-06:00,-06 +2008-10-12T04:00:00,-05:00,-05 +2009-03-15T03:00:00,-06:00,-06 +2009-10-11T04:00:00,-05:00,-05 +2010-04-04T03:00:00,-06:00,-06 +2010-10-10T04:00:00,-05:00,-05 +2011-05-08T03:00:00,-06:00,-06 +2011-08-21T04:00:00,-05:00,-05 +2012-04-29T03:00:00,-06:00,-06 +2012-09-02T04:00:00,-05:00,-05 +2013-04-28T03:00:00,-06:00,-06 +2013-09-08T04:00:00,-05:00,-05 +2014-04-27T03:00:00,-06:00,-06 +2014-09-07T04:00:00,-05:00,-05 +2016-05-15T03:00:00,-06:00,-06 +2016-08-14T04:00:00,-05:00,-05 +2017-05-14T03:00:00,-06:00,-06 +2017-08-13T04:00:00,-05:00,-05 +2018-05-13T03:00:00,-06:00,-06 +2018-08-12T04:00:00,-05:00,-05 +2019-04-07T03:00:00,-06:00,-06 +2019-09-08T04:00:00,-05:00,-05 +2020-04-05T03:00:00,-06:00,-06 +2020-09-06T04:00:00,-05:00,-05 +2021-04-04T03:00:00,-06:00,-06 +2021-09-05T04:00:00,-05:00,-05 +2022-04-03T03:00:00,-06:00,-06 +2022-09-11T04:00:00,-05:00,-05 +2023-04-02T03:00:00,-06:00,-06 +2023-09-03T04:00:00,-05:00,-05 +2024-04-07T03:00:00,-06:00,-06 +2024-09-08T04:00:00,-05:00,-05 +2025-04-06T03:00:00,-06:00,-06 +2025-09-07T04:00:00,-05:00,-05 +2026-04-05T03:00:00,-06:00,-06 +2026-09-06T04:00:00,-05:00,-05 +2027-04-04T03:00:00,-06:00,-06 +2027-09-05T04:00:00,-05:00,-05 +2028-04-02T03:00:00,-06:00,-06 +2028-09-03T04:00:00,-05:00,-05 +2029-04-08T03:00:00,-06:00,-06 +2029-09-02T04:00:00,-05:00,-05 +2030-04-07T03:00:00,-06:00,-06 +2030-09-08T04:00:00,-05:00,-05 +2031-04-06T03:00:00,-06:00,-06 +2031-09-07T04:00:00,-05:00,-05 +2032-04-04T03:00:00,-06:00,-06 +2032-09-05T04:00:00,-05:00,-05 +2033-04-03T03:00:00,-06:00,-06 +2033-09-04T04:00:00,-05:00,-05 +2034-04-02T03:00:00,-06:00,-06 +2034-09-03T04:00:00,-05:00,-05 +2035-04-08T03:00:00,-06:00,-06 +2035-09-02T04:00:00,-05:00,-05 +2036-04-06T03:00:00,-06:00,-06 +2036-09-07T04:00:00,-05:00,-05 +2037-04-05T03:00:00,-06:00,-06 +2037-09-06T04:00:00,-05:00,-05 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-efate.txt b/desk/gub/lib/pytz/pacific-efate.txt new file mode 100644 index 0000000..dd33072 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-efate.txt @@ -0,0 +1,25 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:13,LMT +1912-01-12T12:46:44,+11:00,+11 +1973-12-22T12:00:00,+12:00,+12 +1974-03-30T12:00:00,+11:00,+11 +1983-09-24T13:00:00,+12:00,+12 +1984-03-24T12:00:00,+11:00,+11 +1984-09-22T13:00:00,+12:00,+12 +1985-03-23T12:00:00,+11:00,+11 +1985-09-28T13:00:00,+12:00,+12 +1986-03-22T12:00:00,+11:00,+11 +1986-09-27T13:00:00,+12:00,+12 +1987-03-28T12:00:00,+11:00,+11 +1987-09-26T13:00:00,+12:00,+12 +1988-03-26T12:00:00,+11:00,+11 +1988-09-24T13:00:00,+12:00,+12 +1989-03-25T12:00:00,+11:00,+11 +1989-09-23T13:00:00,+12:00,+12 +1990-03-24T12:00:00,+11:00,+11 +1990-09-22T13:00:00,+12:00,+12 +1991-03-23T12:00:00,+11:00,+11 +1991-09-28T13:00:00,+12:00,+12 +1992-01-25T12:00:00,+11:00,+11 +1992-10-24T13:00:00,+12:00,+12 +1993-01-23T12:00:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-enderbury.txt b/desk/gub/lib/pytz/pacific-enderbury.txt new file mode 100644 index 0000000..f0d767a --- /dev/null +++ b/desk/gub/lib/pytz/pacific-enderbury.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1937-08-31T00:00:00,-12:00,-12 +1979-10-01T12:00:00,-11:00,-11 +1994-12-31T11:00:00,+13:00,+13 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-fakaofo.txt b/desk/gub/lib/pytz/pacific-fakaofo.txt new file mode 100644 index 0000000..2a09860 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-fakaofo.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1901-12-13T20:45:52,-11:00,-11 +2011-12-30T11:00:00,+13:00,+13 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-fiji.txt b/desk/gub/lib/pytz/pacific-fiji.txt new file mode 100644 index 0000000..ab07bd5 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-fiji.txt @@ -0,0 +1,31 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:56,LMT +1915-10-25T12:04:16,+12:00,+12 +1998-10-31T14:00:00,+13:00,+13 +1999-02-27T14:00:00,+12:00,+12 +1999-11-06T14:00:00,+13:00,+13 +2000-02-26T14:00:00,+12:00,+12 +2009-11-28T14:00:00,+13:00,+13 +2010-03-27T14:00:00,+12:00,+12 +2010-10-23T14:00:00,+13:00,+13 +2011-03-05T14:00:00,+12:00,+12 +2011-10-22T14:00:00,+13:00,+13 +2012-01-21T14:00:00,+12:00,+12 +2012-10-20T14:00:00,+13:00,+13 +2013-01-19T14:00:00,+12:00,+12 +2013-10-26T14:00:00,+13:00,+13 +2014-01-18T13:00:00,+12:00,+12 +2014-11-01T14:00:00,+13:00,+13 +2015-01-17T14:00:00,+12:00,+12 +2015-10-31T14:00:00,+13:00,+13 +2016-01-16T14:00:00,+12:00,+12 +2016-11-05T14:00:00,+13:00,+13 +2017-01-14T14:00:00,+12:00,+12 +2017-11-04T14:00:00,+13:00,+13 +2018-01-13T14:00:00,+12:00,+12 +2018-11-03T14:00:00,+13:00,+13 +2019-01-12T14:00:00,+12:00,+12 +2019-11-09T14:00:00,+13:00,+13 +2020-01-11T14:00:00,+12:00,+12 +2020-12-19T14:00:00,+13:00,+13 +2021-01-16T14:00:00,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-funafuti.txt b/desk/gub/lib/pytz/pacific-funafuti.txt new file mode 100644 index 0000000..2b4966d --- /dev/null +++ b/desk/gub/lib/pytz/pacific-funafuti.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:32,LMT +1901-12-13T20:45:52,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-galapagos.txt b/desk/gub/lib/pytz/pacific-galapagos.txt new file mode 100644 index 0000000..6affdf0 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-galapagos.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +1931-01-01T05:58:24,-05:00,-05 +1986-01-01T05:00:00,-06:00,-06 +1992-11-28T06:00:00,-05:00,-05 +1993-02-05T05:00:00,-06:00,-06 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-gambier.txt b/desk/gub/lib/pytz/pacific-gambier.txt new file mode 100644 index 0000000..c21caf1 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-gambier.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-10-01T08:59:48,-09:00,-09 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-guadalcanal.txt b/desk/gub/lib/pytz/pacific-guadalcanal.txt new file mode 100644 index 0000000..454a676 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-guadalcanal.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:40,LMT +1912-09-30T13:20:12,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-guam.txt b/desk/gub/lib/pytz/pacific-guam.txt new file mode 100644 index 0000000..b79b814 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-guam.txt @@ -0,0 +1,21 @@ +Time,Offset,Name +1901-12-13T20:45:52,+10:00,GST +1941-12-09T14:00:00,+09:00,+09 +1944-07-30T15:00:00,+10:00,GST +1959-06-26T16:00:00,+11:00,GDT +1961-01-28T15:00:00,+10:00,GST +1967-08-31T16:00:00,+11:00,GDT +1969-01-25T13:01:00,+10:00,GST +1969-06-21T16:00:00,+11:00,GDT +1969-08-30T15:00:00,+10:00,GST +1970-04-25T16:00:00,+11:00,GDT +1970-09-05T15:00:00,+10:00,GST +1971-04-24T16:00:00,+11:00,GDT +1971-09-04T15:00:00,+10:00,GST +1973-12-15T16:00:00,+11:00,GDT +1974-02-23T15:00:00,+10:00,GST +1976-05-25T16:00:00,+11:00,GDT +1976-08-21T15:01:00,+10:00,GST +1977-04-23T16:00:00,+11:00,GDT +1977-08-27T15:00:00,+10:00,GST +2000-12-22T14:00:00,+10:00,ChST \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-honolulu.txt b/desk/gub/lib/pytz/pacific-honolulu.txt new file mode 100644 index 0000000..da445a2 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-honolulu.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +1901-12-13T20:45:52,-11:30,HST +1933-04-30T12:30:00,-10:30,HDT +1933-05-21T21:30:00,-11:30,HST +1942-02-09T12:30:00,-10:30,HWT +1945-08-14T23:00:00,-10:30,HPT +1945-09-30T11:30:00,-11:30,HST +1947-06-08T12:30:00,-10:00,HST \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-johnston.txt b/desk/gub/lib/pytz/pacific-johnston.txt new file mode 100644 index 0000000..da445a2 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-johnston.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +1901-12-13T20:45:52,-11:30,HST +1933-04-30T12:30:00,-10:30,HDT +1933-05-21T21:30:00,-11:30,HST +1942-02-09T12:30:00,-10:30,HWT +1945-08-14T23:00:00,-10:30,HPT +1945-09-30T11:30:00,-11:30,HST +1947-06-08T12:30:00,-10:00,HST \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-kanton.txt b/desk/gub/lib/pytz/pacific-kanton.txt new file mode 100644 index 0000000..f0d767a --- /dev/null +++ b/desk/gub/lib/pytz/pacific-kanton.txt @@ -0,0 +1,5 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,-00 +1937-08-31T00:00:00,-12:00,-12 +1979-10-01T12:00:00,-11:00,-11 +1994-12-31T11:00:00,+13:00,+13 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-kiritimati.txt b/desk/gub/lib/pytz/pacific-kiritimati.txt new file mode 100644 index 0000000..280c9b5 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-kiritimati.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +1901-12-13T20:45:52,-11:20,-1040 +1979-10-01T10:40:00,-10:00,-10 +1994-12-31T10:00:00,+14:00,+14 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-kosrae.txt b/desk/gub/lib/pytz/pacific-kosrae.txt new file mode 100644 index 0000000..83c45f0 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-kosrae.txt @@ -0,0 +1,9 @@ +Time,Offset,Name +1901-12-13T20:45:52,+11:00,+11 +1914-09-30T13:00:00,+09:00,+09 +1919-01-31T15:00:00,+11:00,+11 +1936-12-31T13:00:00,+10:00,+10 +1941-03-31T14:00:00,+09:00,+09 +1945-07-31T15:00:00,+11:00,+11 +1969-09-30T13:00:00,+12:00,+12 +1998-12-31T12:00:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-kwajalein.txt b/desk/gub/lib/pytz/pacific-kwajalein.txt new file mode 100644 index 0000000..87a4f10 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-kwajalein.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:09,LMT +1901-12-13T20:45:52,+11:00,+11 +1936-12-31T13:00:00,+10:00,+10 +1941-03-31T14:00:00,+09:00,+09 +1944-02-05T15:00:00,+11:00,+11 +1969-09-30T13:00:00,-12:00,-12 +1993-08-21T12:00:00,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-majuro.txt b/desk/gub/lib/pytz/pacific-majuro.txt new file mode 100644 index 0000000..2b4966d --- /dev/null +++ b/desk/gub/lib/pytz/pacific-majuro.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:32,LMT +1901-12-13T20:45:52,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-marquesas.txt b/desk/gub/lib/pytz/pacific-marquesas.txt new file mode 100644 index 0000000..4b6a014 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-marquesas.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-10-01T09:18:00,-10:30,-0930 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-midway.txt b/desk/gub/lib/pytz/pacific-midway.txt new file mode 100644 index 0000000..51368c2 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-midway.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:37,LMT +1901-12-13T20:45:52,-12:37,LMT +1911-01-01T11:22:48,-11:00,SST \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-nauru.txt b/desk/gub/lib/pytz/pacific-nauru.txt new file mode 100644 index 0000000..1e46059 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-nauru.txt @@ -0,0 +1,6 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:08,LMT +1921-01-14T12:52:20,+11:30,+1130 +1942-08-28T12:30:00,+09:00,+09 +1945-09-07T15:00:00,+11:30,+1130 +1979-02-09T14:30:00,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-niue.txt b/desk/gub/lib/pytz/pacific-niue.txt new file mode 100644 index 0000000..230cea3 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-niue.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1952-10-16T11:19:40,-12:40,-1120 +1964-07-01T11:20:00,-11:00,-11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-norfolk.txt b/desk/gub/lib/pytz/pacific-norfolk.txt new file mode 100644 index 0000000..0810d6e --- /dev/null +++ b/desk/gub/lib/pytz/pacific-norfolk.txt @@ -0,0 +1,44 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:12,LMT +1901-12-13T20:45:52,+11:12,+1112 +1950-12-31T12:48:00,+11:30,+1130 +1974-10-26T14:30:00,+12:30,+1230 +1975-03-01T14:30:00,+11:30,+1130 +2015-10-03T14:30:00,+11:00,+11 +2019-10-05T15:00:00,+12:00,+12 +2020-04-04T15:00:00,+11:00,+11 +2020-10-03T15:00:00,+12:00,+12 +2021-04-03T15:00:00,+11:00,+11 +2021-10-02T15:00:00,+12:00,+12 +2022-04-02T15:00:00,+11:00,+11 +2022-10-01T15:00:00,+12:00,+12 +2023-04-01T15:00:00,+11:00,+11 +2023-09-30T15:00:00,+12:00,+12 +2024-04-06T15:00:00,+11:00,+11 +2024-10-05T15:00:00,+12:00,+12 +2025-04-05T15:00:00,+11:00,+11 +2025-10-04T15:00:00,+12:00,+12 +2026-04-04T15:00:00,+11:00,+11 +2026-10-03T15:00:00,+12:00,+12 +2027-04-03T15:00:00,+11:00,+11 +2027-10-02T15:00:00,+12:00,+12 +2028-04-01T15:00:00,+11:00,+11 +2028-09-30T15:00:00,+12:00,+12 +2029-03-31T15:00:00,+11:00,+11 +2029-10-06T15:00:00,+12:00,+12 +2030-04-06T15:00:00,+11:00,+11 +2030-10-05T15:00:00,+12:00,+12 +2031-04-05T15:00:00,+11:00,+11 +2031-10-04T15:00:00,+12:00,+12 +2032-04-03T15:00:00,+11:00,+11 +2032-10-02T15:00:00,+12:00,+12 +2033-04-02T15:00:00,+11:00,+11 +2033-10-01T15:00:00,+12:00,+12 +2034-04-01T15:00:00,+11:00,+11 +2034-09-30T15:00:00,+12:00,+12 +2035-03-31T15:00:00,+11:00,+11 +2035-10-06T15:00:00,+12:00,+12 +2036-04-05T15:00:00,+11:00,+11 +2036-10-04T15:00:00,+12:00,+12 +2037-04-04T15:00:00,+11:00,+11 +2037-10-03T15:00:00,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-noumea.txt b/desk/gub/lib/pytz/pacific-noumea.txt new file mode 100644 index 0000000..dfa07cf --- /dev/null +++ b/desk/gub/lib/pytz/pacific-noumea.txt @@ -0,0 +1,9 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:06,LMT +1912-01-12T12:54:12,+11:00,+11 +1977-12-03T13:00:00,+12:00,+12 +1978-02-26T12:00:00,+11:00,+11 +1978-12-02T13:00:00,+12:00,+12 +1979-02-26T12:00:00,+11:00,+11 +1996-11-30T15:00:00,+12:00,+12 +1997-03-01T15:00:00,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-pago-pago.txt b/desk/gub/lib/pytz/pacific-pago-pago.txt new file mode 100644 index 0000000..51368c2 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-pago-pago.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:37,LMT +1901-12-13T20:45:52,-12:37,LMT +1911-01-01T11:22:48,-11:00,SST \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-palau.txt b/desk/gub/lib/pytz/pacific-palau.txt new file mode 100644 index 0000000..e6a1b64 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-palau.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1901-12-13T20:45:52,+09:00,+09 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-pitcairn.txt b/desk/gub/lib/pytz/pacific-pitcairn.txt new file mode 100644 index 0000000..22a5c9b --- /dev/null +++ b/desk/gub/lib/pytz/pacific-pitcairn.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +1901-12-13T20:45:52,-09:30,-0830 +1998-04-27T08:30:00,-08:00,-08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-pohnpei.txt b/desk/gub/lib/pytz/pacific-pohnpei.txt new file mode 100644 index 0000000..454a676 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-pohnpei.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:40,LMT +1912-09-30T13:20:12,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-ponape.txt b/desk/gub/lib/pytz/pacific-ponape.txt new file mode 100644 index 0000000..454a676 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-ponape.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+10:40,LMT +1912-09-30T13:20:12,+11:00,+11 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-port-moresby.txt b/desk/gub/lib/pytz/pacific-port-moresby.txt new file mode 100644 index 0000000..a494e67 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-port-moresby.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:49,LMT +1901-12-13T20:45:52,+10:00,+10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-rarotonga.txt b/desk/gub/lib/pytz/pacific-rarotonga.txt new file mode 100644 index 0000000..bc25a19 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-rarotonga.txt @@ -0,0 +1,30 @@ +Time,Offset,Name +0001-01-01T00:00:00,+13:21,LMT +1901-12-13T20:45:52,-11:21,LMT +1952-10-16T10:39:04,-11:30,-1030 +1978-11-12T10:30:00,-10:30,-0930 +1979-03-04T09:30:00,-10:00,-10 +1979-10-28T10:00:00,-10:30,-0930 +1980-03-02T09:30:00,-10:00,-10 +1980-10-26T10:00:00,-10:30,-0930 +1981-03-01T09:30:00,-10:00,-10 +1981-10-25T10:00:00,-10:30,-0930 +1982-03-07T09:30:00,-10:00,-10 +1982-10-31T10:00:00,-10:30,-0930 +1983-03-06T09:30:00,-10:00,-10 +1983-10-30T10:00:00,-10:30,-0930 +1984-03-04T09:30:00,-10:00,-10 +1984-10-28T10:00:00,-10:30,-0930 +1985-03-03T09:30:00,-10:00,-10 +1985-10-27T10:00:00,-10:30,-0930 +1986-03-02T09:30:00,-10:00,-10 +1986-10-26T10:00:00,-10:30,-0930 +1987-03-01T09:30:00,-10:00,-10 +1987-10-25T10:00:00,-10:30,-0930 +1988-03-06T09:30:00,-10:00,-10 +1988-10-30T10:00:00,-10:30,-0930 +1989-03-05T09:30:00,-10:00,-10 +1989-10-29T10:00:00,-10:30,-0930 +1990-03-04T09:30:00,-10:00,-10 +1990-10-28T10:00:00,-10:30,-0930 +1991-03-03T09:30:00,-10:00,-10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-saipan.txt b/desk/gub/lib/pytz/pacific-saipan.txt new file mode 100644 index 0000000..b79b814 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-saipan.txt @@ -0,0 +1,21 @@ +Time,Offset,Name +1901-12-13T20:45:52,+10:00,GST +1941-12-09T14:00:00,+09:00,+09 +1944-07-30T15:00:00,+10:00,GST +1959-06-26T16:00:00,+11:00,GDT +1961-01-28T15:00:00,+10:00,GST +1967-08-31T16:00:00,+11:00,GDT +1969-01-25T13:01:00,+10:00,GST +1969-06-21T16:00:00,+11:00,GDT +1969-08-30T15:00:00,+10:00,GST +1970-04-25T16:00:00,+11:00,GDT +1970-09-05T15:00:00,+10:00,GST +1971-04-24T16:00:00,+11:00,GDT +1971-09-04T15:00:00,+10:00,GST +1973-12-15T16:00:00,+11:00,GDT +1974-02-23T15:00:00,+10:00,GST +1976-05-25T16:00:00,+11:00,GDT +1976-08-21T15:01:00,+10:00,GST +1977-04-23T16:00:00,+11:00,GDT +1977-08-27T15:00:00,+10:00,GST +2000-12-22T14:00:00,+10:00,ChST \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-samoa.txt b/desk/gub/lib/pytz/pacific-samoa.txt new file mode 100644 index 0000000..51368c2 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-samoa.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:37,LMT +1901-12-13T20:45:52,-12:37,LMT +1911-01-01T11:22:48,-11:00,SST \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-tahiti.txt b/desk/gub/lib/pytz/pacific-tahiti.txt new file mode 100644 index 0000000..3de7196 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-tahiti.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +1912-10-01T09:58:16,-10:00,-10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-tarawa.txt b/desk/gub/lib/pytz/pacific-tarawa.txt new file mode 100644 index 0000000..2b4966d --- /dev/null +++ b/desk/gub/lib/pytz/pacific-tarawa.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:32,LMT +1901-12-13T20:45:52,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-tongatapu.txt b/desk/gub/lib/pytz/pacific-tongatapu.txt new file mode 100644 index 0000000..3ec2a8c --- /dev/null +++ b/desk/gub/lib/pytz/pacific-tongatapu.txt @@ -0,0 +1,12 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:19,LMT +1945-09-09T11:40:48,+12:20,+1220 +1960-12-31T11:40:00,+13:00,+13 +1999-10-06T13:00:00,+14:00,+14 +2000-03-18T13:00:00,+13:00,+13 +2000-11-04T13:00:00,+14:00,+14 +2001-01-27T12:00:00,+13:00,+13 +2001-11-03T13:00:00,+14:00,+14 +2002-01-26T12:00:00,+13:00,+13 +2016-11-05T13:00:00,+14:00,+14 +2017-01-14T13:00:00,+13:00,+13 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-truk.txt b/desk/gub/lib/pytz/pacific-truk.txt new file mode 100644 index 0000000..a494e67 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-truk.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:49,LMT +1901-12-13T20:45:52,+10:00,+10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-wake.txt b/desk/gub/lib/pytz/pacific-wake.txt new file mode 100644 index 0000000..2b4966d --- /dev/null +++ b/desk/gub/lib/pytz/pacific-wake.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:32,LMT +1901-12-13T20:45:52,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-wallis.txt b/desk/gub/lib/pytz/pacific-wallis.txt new file mode 100644 index 0000000..2b4966d --- /dev/null +++ b/desk/gub/lib/pytz/pacific-wallis.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+11:32,LMT +1901-12-13T20:45:52,+12:00,+12 \ No newline at end of file diff --git a/desk/gub/lib/pytz/pacific-yap.txt b/desk/gub/lib/pytz/pacific-yap.txt new file mode 100644 index 0000000..a494e67 --- /dev/null +++ b/desk/gub/lib/pytz/pacific-yap.txt @@ -0,0 +1,3 @@ +Time,Offset,Name +0001-01-01T00:00:00,+09:49,LMT +1901-12-13T20:45:52,+10:00,+10 \ No newline at end of file diff --git a/desk/gub/lib/pytz/poland.txt b/desk/gub/lib/pytz/poland.txt new file mode 100644 index 0000000..0a4c342 --- /dev/null +++ b/desk/gub/lib/pytz/poland.txt @@ -0,0 +1,167 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:24,LMT +1901-12-13T20:45:52,+01:24,WMT +1915-08-04T22:36:00,+01:00,CET +1916-04-30T22:00:00,+02:00,CEST +1916-09-30T23:00:00,+01:00,CET +1917-04-16T01:00:00,+02:00,CEST +1917-09-17T01:00:00,+01:00,CET +1918-04-15T01:00:00,+02:00,CEST +1918-09-16T01:00:00,+02:00,EET +1919-04-15T00:00:00,+03:00,EEST +1919-09-16T00:00:00,+02:00,EET +1922-05-31T22:00:00,+01:00,CET +1940-06-23T01:00:00,+02:00,CEST +1942-11-02T01:00:00,+01:00,CET +1943-03-29T01:00:00,+02:00,CEST +1943-10-04T01:00:00,+01:00,CET +1944-04-03T01:00:00,+02:00,CEST +1944-10-04T00:00:00,+01:00,CET +1945-04-28T23:00:00,+02:00,CEST +1945-10-31T22:00:00,+01:00,CET +1946-04-13T23:00:00,+02:00,CEST +1946-10-07T01:00:00,+01:00,CET +1947-05-04T01:00:00,+02:00,CEST +1947-10-05T01:00:00,+01:00,CET +1948-04-18T01:00:00,+02:00,CEST +1948-10-03T01:00:00,+01:00,CET +1949-04-10T01:00:00,+02:00,CEST +1949-10-02T01:00:00,+01:00,CET +1957-06-02T00:00:00,+02:00,CEST +1957-09-29T00:00:00,+01:00,CET +1958-03-30T00:00:00,+02:00,CEST +1958-09-28T00:00:00,+01:00,CET +1959-05-31T00:00:00,+02:00,CEST +1959-10-04T00:00:00,+01:00,CET +1960-04-03T00:00:00,+02:00,CEST +1960-10-02T00:00:00,+01:00,CET +1961-05-28T00:00:00,+02:00,CEST +1961-10-01T00:00:00,+01:00,CET +1962-05-27T00:00:00,+02:00,CEST +1962-09-30T00:00:00,+01:00,CET +1963-05-26T00:00:00,+02:00,CEST +1963-09-29T00:00:00,+01:00,CET +1964-05-31T00:00:00,+02:00,CEST +1964-09-27T00:00:00,+01:00,CET +1977-04-03T00:00:00,+02:00,CEST +1977-09-25T00:00:00,+01:00,CET +1978-04-02T00:00:00,+02:00,CEST +1978-10-01T00:00:00,+01:00,CET +1979-04-01T00:00:00,+02:00,CEST +1979-09-30T00:00:00,+01:00,CET +1980-04-06T00:00:00,+02:00,CEST +1980-09-28T00:00:00,+01:00,CET +1981-03-29T00:00:00,+02:00,CEST +1981-09-27T00:00:00,+01:00,CET +1982-03-28T00:00:00,+02:00,CEST +1982-09-26T00:00:00,+01:00,CET +1983-03-27T00:00:00,+02:00,CEST +1983-09-25T00:00:00,+01:00,CET +1984-03-25T00:00:00,+02:00,CEST +1984-09-30T00:00:00,+01:00,CET +1985-03-31T00:00:00,+02:00,CEST +1985-09-29T00:00:00,+01:00,CET +1986-03-30T00:00:00,+02:00,CEST +1986-09-28T00:00:00,+01:00,CET +1987-03-29T00:00:00,+02:00,CEST +1987-09-27T00:00:00,+01:00,CET +1988-03-27T01:00:00,+02:00,CEST +1988-09-25T01:00:00,+01:00,CET +1989-03-26T01:00:00,+02:00,CEST +1989-09-24T01:00:00,+01:00,CET +1990-03-25T01:00:00,+02:00,CEST +1990-09-30T01:00:00,+01:00,CET +1991-03-31T01:00:00,+02:00,CEST +1991-09-29T01:00:00,+01:00,CET +1992-03-29T01:00:00,+02:00,CEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+02:00,CEST +1996-10-27T01:00:00,+01:00,CET +1997-03-30T01:00:00,+02:00,CEST +1997-10-26T01:00:00,+01:00,CET +1998-03-29T01:00:00,+02:00,CEST +1998-10-25T01:00:00,+01:00,CET +1999-03-28T01:00:00,+02:00,CEST +1999-10-31T01:00:00,+01:00,CET +2000-03-26T01:00:00,+02:00,CEST +2000-10-29T01:00:00,+01:00,CET +2001-03-25T01:00:00,+02:00,CEST +2001-10-28T01:00:00,+01:00,CET +2002-03-31T01:00:00,+02:00,CEST +2002-10-27T01:00:00,+01:00,CET +2003-03-30T01:00:00,+02:00,CEST +2003-10-26T01:00:00,+01:00,CET +2004-03-28T01:00:00,+02:00,CEST +2004-10-31T01:00:00,+01:00,CET +2005-03-27T01:00:00,+02:00,CEST +2005-10-30T01:00:00,+01:00,CET +2006-03-26T01:00:00,+02:00,CEST +2006-10-29T01:00:00,+01:00,CET +2007-03-25T01:00:00,+02:00,CEST +2007-10-28T01:00:00,+01:00,CET +2008-03-30T01:00:00,+02:00,CEST +2008-10-26T01:00:00,+01:00,CET +2009-03-29T01:00:00,+02:00,CEST +2009-10-25T01:00:00,+01:00,CET +2010-03-28T01:00:00,+02:00,CEST +2010-10-31T01:00:00,+01:00,CET +2011-03-27T01:00:00,+02:00,CEST +2011-10-30T01:00:00,+01:00,CET +2012-03-25T01:00:00,+02:00,CEST +2012-10-28T01:00:00,+01:00,CET +2013-03-31T01:00:00,+02:00,CEST +2013-10-27T01:00:00,+01:00,CET +2014-03-30T01:00:00,+02:00,CEST +2014-10-26T01:00:00,+01:00,CET +2015-03-29T01:00:00,+02:00,CEST +2015-10-25T01:00:00,+01:00,CET +2016-03-27T01:00:00,+02:00,CEST +2016-10-30T01:00:00,+01:00,CET +2017-03-26T01:00:00,+02:00,CEST +2017-10-29T01:00:00,+01:00,CET +2018-03-25T01:00:00,+02:00,CEST +2018-10-28T01:00:00,+01:00,CET +2019-03-31T01:00:00,+02:00,CEST +2019-10-27T01:00:00,+01:00,CET +2020-03-29T01:00:00,+02:00,CEST +2020-10-25T01:00:00,+01:00,CET +2021-03-28T01:00:00,+02:00,CEST +2021-10-31T01:00:00,+01:00,CET +2022-03-27T01:00:00,+02:00,CEST +2022-10-30T01:00:00,+01:00,CET +2023-03-26T01:00:00,+02:00,CEST +2023-10-29T01:00:00,+01:00,CET +2024-03-31T01:00:00,+02:00,CEST +2024-10-27T01:00:00,+01:00,CET +2025-03-30T01:00:00,+02:00,CEST +2025-10-26T01:00:00,+01:00,CET +2026-03-29T01:00:00,+02:00,CEST +2026-10-25T01:00:00,+01:00,CET +2027-03-28T01:00:00,+02:00,CEST +2027-10-31T01:00:00,+01:00,CET +2028-03-26T01:00:00,+02:00,CEST +2028-10-29T01:00:00,+01:00,CET +2029-03-25T01:00:00,+02:00,CEST +2029-10-28T01:00:00,+01:00,CET +2030-03-31T01:00:00,+02:00,CEST +2030-10-27T01:00:00,+01:00,CET +2031-03-30T01:00:00,+02:00,CEST +2031-10-26T01:00:00,+01:00,CET +2032-03-28T01:00:00,+02:00,CEST +2032-10-31T01:00:00,+01:00,CET +2033-03-27T01:00:00,+02:00,CEST +2033-10-30T01:00:00,+01:00,CET +2034-03-26T01:00:00,+02:00,CEST +2034-10-29T01:00:00,+01:00,CET +2035-03-25T01:00:00,+02:00,CEST +2035-10-28T01:00:00,+01:00,CET +2036-03-30T01:00:00,+02:00,CEST +2036-10-26T01:00:00,+01:00,CET +2037-03-29T01:00:00,+02:00,CEST +2037-10-25T01:00:00,+01:00,CET \ No newline at end of file diff --git a/desk/gub/lib/pytz/portugal.txt b/desk/gub/lib/pytz/portugal.txt new file mode 100644 index 0000000..9c53c8f --- /dev/null +++ b/desk/gub/lib/pytz/portugal.txt @@ -0,0 +1,225 @@ +Time,Offset,Name +1912-01-01T00:00:00,+00:00,WET +1916-06-17T23:00:00,+01:00,WEST +1916-11-01T00:00:00,+00:00,WET +1917-03-01T00:00:00,+01:00,WEST +1917-10-14T23:00:00,+00:00,WET +1918-03-01T00:00:00,+01:00,WEST +1918-10-14T23:00:00,+00:00,WET +1919-03-01T00:00:00,+01:00,WEST +1919-10-14T23:00:00,+00:00,WET +1920-03-01T00:00:00,+01:00,WEST +1920-10-14T23:00:00,+00:00,WET +1921-03-01T00:00:00,+01:00,WEST +1921-10-14T23:00:00,+00:00,WET +1924-04-16T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-06T23:00:00,+00:00,WET +1929-04-20T23:00:00,+01:00,WEST +1929-10-05T23:00:00,+00:00,WET +1931-04-18T23:00:00,+01:00,WEST +1931-10-03T23:00:00,+00:00,WET +1932-04-02T23:00:00,+01:00,WEST +1932-10-01T23:00:00,+00:00,WET +1934-04-07T23:00:00,+01:00,WEST +1934-10-06T23:00:00,+00:00,WET +1935-03-30T23:00:00,+01:00,WEST +1935-10-05T23:00:00,+00:00,WET +1936-04-18T23:00:00,+01:00,WEST +1936-10-03T23:00:00,+00:00,WET +1937-04-03T23:00:00,+01:00,WEST +1937-10-02T23:00:00,+00:00,WET +1938-03-26T23:00:00,+01:00,WEST +1938-10-01T23:00:00,+00:00,WET +1939-04-15T23:00:00,+01:00,WEST +1939-11-18T23:00:00,+00:00,WET +1940-02-24T23:00:00,+01:00,WEST +1940-10-07T23:00:00,+00:00,WET +1941-04-05T23:00:00,+01:00,WEST +1941-10-05T23:00:00,+00:00,WET +1942-03-14T23:00:00,+01:00,WEST +1942-04-25T22:00:00,+02:00,WEMT +1942-08-15T22:00:00,+01:00,WEST +1942-10-24T23:00:00,+00:00,WET +1943-03-13T23:00:00,+01:00,WEST +1943-04-17T22:00:00,+02:00,WEMT +1943-08-28T22:00:00,+01:00,WEST +1943-10-30T23:00:00,+00:00,WET +1944-03-11T23:00:00,+01:00,WEST +1944-04-22T22:00:00,+02:00,WEMT +1944-08-26T22:00:00,+01:00,WEST +1944-10-28T23:00:00,+00:00,WET +1945-03-10T23:00:00,+01:00,WEST +1945-04-21T22:00:00,+02:00,WEMT +1945-08-25T22:00:00,+01:00,WEST +1945-10-27T23:00:00,+00:00,WET +1946-04-06T23:00:00,+01:00,WEST +1946-10-05T23:00:00,+00:00,WET +1947-04-06T02:00:00,+01:00,WEST +1947-10-05T02:00:00,+00:00,WET +1948-04-04T02:00:00,+01:00,WEST +1948-10-03T02:00:00,+00:00,WET +1949-04-03T02:00:00,+01:00,WEST +1949-10-02T02:00:00,+00:00,WET +1950-04-02T02:00:00,+01:00,WEST +1950-10-01T02:00:00,+00:00,WET +1951-04-01T02:00:00,+01:00,WEST +1951-10-07T02:00:00,+00:00,WET +1952-04-06T02:00:00,+01:00,WEST +1952-10-05T02:00:00,+00:00,WET +1953-04-05T02:00:00,+01:00,WEST +1953-10-04T02:00:00,+00:00,WET +1954-04-04T02:00:00,+01:00,WEST +1954-10-03T02:00:00,+00:00,WET +1955-04-03T02:00:00,+01:00,WEST +1955-10-02T02:00:00,+00:00,WET +1956-04-01T02:00:00,+01:00,WEST +1956-10-07T02:00:00,+00:00,WET +1957-04-07T02:00:00,+01:00,WEST +1957-10-06T02:00:00,+00:00,WET +1958-04-06T02:00:00,+01:00,WEST +1958-10-05T02:00:00,+00:00,WET +1959-04-05T02:00:00,+01:00,WEST +1959-10-04T02:00:00,+00:00,WET +1960-04-03T02:00:00,+01:00,WEST +1960-10-02T02:00:00,+00:00,WET +1961-04-02T02:00:00,+01:00,WEST +1961-10-01T02:00:00,+00:00,WET +1962-04-01T02:00:00,+01:00,WEST +1962-10-07T02:00:00,+00:00,WET +1963-04-07T02:00:00,+01:00,WEST +1963-10-06T02:00:00,+00:00,WET +1964-04-05T02:00:00,+01:00,WEST +1964-10-04T02:00:00,+00:00,WET +1965-04-04T02:00:00,+01:00,WEST +1965-10-03T02:00:00,+00:00,WET +1966-04-03T02:00:00,+01:00,WEST +1966-10-02T02:00:00,+01:00,CET +1976-09-26T00:00:00,+00:00,WET +1977-03-27T00:00:00,+01:00,WEST +1977-09-25T00:00:00,+00:00,WET +1978-04-02T01:00:00,+01:00,WEST +1978-10-01T01:00:00,+00:00,WET +1979-04-01T01:00:00,+01:00,WEST +1979-09-30T01:00:00,+00:00,WET +1980-04-06T01:00:00,+01:00,WEST +1980-09-28T01:00:00,+00:00,WET +1981-03-29T00:00:00,+01:00,WEST +1981-09-27T00:00:00,+00:00,WET +1982-03-28T00:00:00,+01:00,WEST +1982-09-26T00:00:00,+00:00,WET +1983-03-27T00:00:00,+01:00,WEST +1983-09-25T00:00:00,+00:00,WET +1984-03-25T00:00:00,+01:00,WEST +1984-09-30T00:00:00,+00:00,WET +1985-03-31T00:00:00,+01:00,WEST +1985-09-29T00:00:00,+00:00,WET +1986-03-30T01:00:00,+01:00,WEST +1986-09-28T01:00:00,+00:00,WET +1987-03-29T01:00:00,+01:00,WEST +1987-09-27T01:00:00,+00:00,WET +1988-03-27T01:00:00,+01:00,WEST +1988-09-25T01:00:00,+00:00,WET +1989-03-26T01:00:00,+01:00,WEST +1989-09-24T01:00:00,+00:00,WET +1990-03-25T01:00:00,+01:00,WEST +1990-09-30T01:00:00,+00:00,WET +1991-03-31T01:00:00,+01:00,WEST +1991-09-29T01:00:00,+00:00,WET +1992-03-29T01:00:00,+01:00,WEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+01:00,WEST +1996-10-27T01:00:00,+00:00,WET +1997-03-30T01:00:00,+01:00,WEST +1997-10-26T01:00:00,+00:00,WET +1998-03-29T01:00:00,+01:00,WEST +1998-10-25T01:00:00,+00:00,WET +1999-03-28T01:00:00,+01:00,WEST +1999-10-31T01:00:00,+00:00,WET +2000-03-26T01:00:00,+01:00,WEST +2000-10-29T01:00:00,+00:00,WET +2001-03-25T01:00:00,+01:00,WEST +2001-10-28T01:00:00,+00:00,WET +2002-03-31T01:00:00,+01:00,WEST +2002-10-27T01:00:00,+00:00,WET +2003-03-30T01:00:00,+01:00,WEST +2003-10-26T01:00:00,+00:00,WET +2004-03-28T01:00:00,+01:00,WEST +2004-10-31T01:00:00,+00:00,WET +2005-03-27T01:00:00,+01:00,WEST +2005-10-30T01:00:00,+00:00,WET +2006-03-26T01:00:00,+01:00,WEST +2006-10-29T01:00:00,+00:00,WET +2007-03-25T01:00:00,+01:00,WEST +2007-10-28T01:00:00,+00:00,WET +2008-03-30T01:00:00,+01:00,WEST +2008-10-26T01:00:00,+00:00,WET +2009-03-29T01:00:00,+01:00,WEST +2009-10-25T01:00:00,+00:00,WET +2010-03-28T01:00:00,+01:00,WEST +2010-10-31T01:00:00,+00:00,WET +2011-03-27T01:00:00,+01:00,WEST +2011-10-30T01:00:00,+00:00,WET +2012-03-25T01:00:00,+01:00,WEST +2012-10-28T01:00:00,+00:00,WET +2013-03-31T01:00:00,+01:00,WEST +2013-10-27T01:00:00,+00:00,WET +2014-03-30T01:00:00,+01:00,WEST +2014-10-26T01:00:00,+00:00,WET +2015-03-29T01:00:00,+01:00,WEST +2015-10-25T01:00:00,+00:00,WET +2016-03-27T01:00:00,+01:00,WEST +2016-10-30T01:00:00,+00:00,WET +2017-03-26T01:00:00,+01:00,WEST +2017-10-29T01:00:00,+00:00,WET +2018-03-25T01:00:00,+01:00,WEST +2018-10-28T01:00:00,+00:00,WET +2019-03-31T01:00:00,+01:00,WEST +2019-10-27T01:00:00,+00:00,WET +2020-03-29T01:00:00,+01:00,WEST +2020-10-25T01:00:00,+00:00,WET +2021-03-28T01:00:00,+01:00,WEST +2021-10-31T01:00:00,+00:00,WET +2022-03-27T01:00:00,+01:00,WEST +2022-10-30T01:00:00,+00:00,WET +2023-03-26T01:00:00,+01:00,WEST +2023-10-29T01:00:00,+00:00,WET +2024-03-31T01:00:00,+01:00,WEST +2024-10-27T01:00:00,+00:00,WET +2025-03-30T01:00:00,+01:00,WEST +2025-10-26T01:00:00,+00:00,WET +2026-03-29T01:00:00,+01:00,WEST +2026-10-25T01:00:00,+00:00,WET +2027-03-28T01:00:00,+01:00,WEST +2027-10-31T01:00:00,+00:00,WET +2028-03-26T01:00:00,+01:00,WEST +2028-10-29T01:00:00,+00:00,WET +2029-03-25T01:00:00,+01:00,WEST +2029-10-28T01:00:00,+00:00,WET +2030-03-31T01:00:00,+01:00,WEST +2030-10-27T01:00:00,+00:00,WET +2031-03-30T01:00:00,+01:00,WEST +2031-10-26T01:00:00,+00:00,WET +2032-03-28T01:00:00,+01:00,WEST +2032-10-31T01:00:00,+00:00,WET +2033-03-27T01:00:00,+01:00,WEST +2033-10-30T01:00:00,+00:00,WET +2034-03-26T01:00:00,+01:00,WEST +2034-10-29T01:00:00,+00:00,WET +2035-03-25T01:00:00,+01:00,WEST +2035-10-28T01:00:00,+00:00,WET +2036-03-30T01:00:00,+01:00,WEST +2036-10-26T01:00:00,+00:00,WET +2037-03-29T01:00:00,+01:00,WEST +2037-10-25T01:00:00,+00:00,WET \ No newline at end of file diff --git a/desk/gub/lib/pytz/prc.txt b/desk/gub/lib/pytz/prc.txt new file mode 100644 index 0000000..27376f6 --- /dev/null +++ b/desk/gub/lib/pytz/prc.txt @@ -0,0 +1,31 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:06,LMT +1901-12-13T20:45:52,+08:00,CST +1919-04-12T16:00:00,+09:00,CDT +1919-09-30T15:00:00,+08:00,CST +1940-05-31T16:00:00,+09:00,CDT +1940-10-12T15:00:00,+08:00,CST +1941-03-14T16:00:00,+09:00,CDT +1941-11-01T15:00:00,+08:00,CST +1942-01-30T16:00:00,+09:00,CDT +1945-09-01T15:00:00,+08:00,CST +1946-05-14T16:00:00,+09:00,CDT +1946-09-30T15:00:00,+08:00,CST +1947-04-14T16:00:00,+09:00,CDT +1947-10-31T15:00:00,+08:00,CST +1948-04-30T16:00:00,+09:00,CDT +1948-09-30T15:00:00,+08:00,CST +1949-04-30T16:00:00,+09:00,CDT +1949-05-27T15:00:00,+08:00,CST +1986-05-03T18:00:00,+09:00,CDT +1986-09-13T17:00:00,+08:00,CST +1987-04-11T18:00:00,+09:00,CDT +1987-09-12T17:00:00,+08:00,CST +1988-04-16T18:00:00,+09:00,CDT +1988-09-10T17:00:00,+08:00,CST +1989-04-15T18:00:00,+09:00,CDT +1989-09-16T17:00:00,+08:00,CST +1990-04-14T18:00:00,+09:00,CDT +1990-09-15T17:00:00,+08:00,CST +1991-04-13T18:00:00,+09:00,CDT +1991-09-14T17:00:00,+08:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/pst8pdt.txt b/desk/gub/lib/pytz/pst8pdt.txt new file mode 100644 index 0000000..6c5197e --- /dev/null +++ b/desk/gub/lib/pytz/pst8pdt.txt @@ -0,0 +1,187 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:00,PST +1918-03-31T10:00:00,-07:00,PDT +1918-10-27T09:00:00,-08:00,PST +1919-03-30T10:00:00,-07:00,PDT +1919-10-26T09:00:00,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1948-03-14T10:01:00,-07:00,PDT +1949-01-01T09:00:00,-08:00,PST +1950-04-30T09:00:00,-07:00,PDT +1950-09-24T09:00:00,-08:00,PST +1951-04-29T09:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T09:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T09:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T09:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T09:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T09:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T09:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T09:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T09:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T09:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T09:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T09:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T09:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T09:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T09:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T09:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-03-11T10:00:00,-07:00,PDT +2007-11-04T09:00:00,-08:00,PST +2008-03-09T10:00:00,-07:00,PDT +2008-11-02T09:00:00,-08:00,PST +2009-03-08T10:00:00,-07:00,PDT +2009-11-01T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T09:00:00,-08:00,PST +2021-03-14T10:00:00,-07:00,PDT +2021-11-07T09:00:00,-08:00,PST +2022-03-13T10:00:00,-07:00,PDT +2022-11-06T09:00:00,-08:00,PST +2023-03-12T10:00:00,-07:00,PDT +2023-11-05T09:00:00,-08:00,PST +2024-03-10T10:00:00,-07:00,PDT +2024-11-03T09:00:00,-08:00,PST +2025-03-09T10:00:00,-07:00,PDT +2025-11-02T09:00:00,-08:00,PST +2026-03-08T10:00:00,-07:00,PDT +2026-11-01T09:00:00,-08:00,PST +2027-03-14T10:00:00,-07:00,PDT +2027-11-07T09:00:00,-08:00,PST +2028-03-12T10:00:00,-07:00,PDT +2028-11-05T09:00:00,-08:00,PST +2029-03-11T10:00:00,-07:00,PDT +2029-11-04T09:00:00,-08:00,PST +2030-03-10T10:00:00,-07:00,PDT +2030-11-03T09:00:00,-08:00,PST +2031-03-09T10:00:00,-07:00,PDT +2031-11-02T09:00:00,-08:00,PST +2032-03-14T10:00:00,-07:00,PDT +2032-11-07T09:00:00,-08:00,PST +2033-03-13T10:00:00,-07:00,PDT +2033-11-06T09:00:00,-08:00,PST +2034-03-12T10:00:00,-07:00,PDT +2034-11-05T09:00:00,-08:00,PST +2035-03-11T10:00:00,-07:00,PDT +2035-11-04T09:00:00,-08:00,PST +2036-03-09T10:00:00,-07:00,PDT +2036-11-02T09:00:00,-08:00,PST +2037-03-08T10:00:00,-07:00,PDT +2037-11-01T09:00:00,-08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/roc.txt b/desk/gub/lib/pytz/roc.txt new file mode 100644 index 0000000..2a4d212 --- /dev/null +++ b/desk/gub/lib/pytz/roc.txt @@ -0,0 +1,43 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:06,LMT +1901-12-13T20:45:52,+08:00,CST +1937-09-30T16:00:00,+09:00,JST +1945-09-20T16:00:00,+08:00,CST +1946-05-14T16:00:00,+09:00,CDT +1946-09-30T15:00:00,+08:00,CST +1947-04-14T16:00:00,+09:00,CDT +1947-10-31T15:00:00,+08:00,CST +1948-04-30T16:00:00,+09:00,CDT +1948-09-30T15:00:00,+08:00,CST +1949-04-30T16:00:00,+09:00,CDT +1949-09-30T15:00:00,+08:00,CST +1950-04-30T16:00:00,+09:00,CDT +1950-09-30T15:00:00,+08:00,CST +1951-04-30T16:00:00,+09:00,CDT +1951-09-30T15:00:00,+08:00,CST +1952-02-29T16:00:00,+09:00,CDT +1952-10-31T15:00:00,+08:00,CST +1953-03-31T16:00:00,+09:00,CDT +1953-10-31T15:00:00,+08:00,CST +1954-03-31T16:00:00,+09:00,CDT +1954-10-31T15:00:00,+08:00,CST +1955-03-31T16:00:00,+09:00,CDT +1955-09-30T15:00:00,+08:00,CST +1956-03-31T16:00:00,+09:00,CDT +1956-09-30T15:00:00,+08:00,CST +1957-03-31T16:00:00,+09:00,CDT +1957-09-30T15:00:00,+08:00,CST +1958-03-31T16:00:00,+09:00,CDT +1958-09-30T15:00:00,+08:00,CST +1959-03-31T16:00:00,+09:00,CDT +1959-09-30T15:00:00,+08:00,CST +1960-05-31T16:00:00,+09:00,CDT +1960-09-30T15:00:00,+08:00,CST +1961-05-31T16:00:00,+09:00,CDT +1961-09-30T15:00:00,+08:00,CST +1974-03-31T16:00:00,+09:00,CDT +1974-09-30T15:00:00,+08:00,CST +1975-03-31T16:00:00,+09:00,CDT +1975-09-30T15:00:00,+08:00,CST +1979-06-30T16:00:00,+09:00,CDT +1979-09-30T15:00:00,+08:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/rok.txt b/desk/gub/lib/pytz/rok.txt new file mode 100644 index 0000000..0e4a4ea --- /dev/null +++ b/desk/gub/lib/pytz/rok.txt @@ -0,0 +1,31 @@ +Time,Offset,Name +0001-01-01T00:00:00,+08:28,LMT +1908-03-31T15:32:08,+08:30,KST +1911-12-31T15:30:00,+09:00,JST +1945-09-07T15:00:00,+09:00,KST +1948-05-31T15:00:00,+10:00,KDT +1948-09-12T14:00:00,+09:00,KST +1949-04-02T15:00:00,+10:00,KDT +1949-09-10T14:00:00,+09:00,KST +1950-03-31T15:00:00,+10:00,KDT +1950-09-09T14:00:00,+09:00,KST +1951-05-05T15:00:00,+10:00,KDT +1951-09-08T14:00:00,+09:00,KST +1954-03-20T15:00:00,+08:30,KST +1955-05-04T15:30:00,+09:30,KDT +1955-09-08T14:30:00,+08:30,KST +1956-05-19T15:30:00,+09:30,KDT +1956-09-29T14:30:00,+08:30,KST +1957-05-04T15:30:00,+09:30,KDT +1957-09-21T14:30:00,+08:30,KST +1958-05-03T15:30:00,+09:30,KDT +1958-09-20T14:30:00,+08:30,KST +1959-05-02T15:30:00,+09:30,KDT +1959-09-19T14:30:00,+08:30,KST +1960-04-30T15:30:00,+09:30,KDT +1960-09-17T14:30:00,+08:30,KST +1961-08-09T15:30:00,+09:00,KST +1987-05-09T17:00:00,+10:00,KDT +1987-10-10T17:00:00,+09:00,KST +1988-05-07T17:00:00,+10:00,KDT +1988-10-08T17:00:00,+09:00,KST \ No newline at end of file diff --git a/desk/gub/lib/pytz/singapore.txt b/desk/gub/lib/pytz/singapore.txt new file mode 100644 index 0000000..9dc96c0 --- /dev/null +++ b/desk/gub/lib/pytz/singapore.txt @@ -0,0 +1,10 @@ +Time,Offset,Name +0001-01-01T00:00:00,+06:55,LMT +1901-12-13T20:45:52,+06:55,SMT +1905-05-31T17:04:35,+07:00,+07 +1932-12-31T17:00:00,+07:20,+0720 +1935-12-31T16:40:00,+07:20,+0720 +1941-08-31T16:40:00,+07:30,+0730 +1942-02-15T16:30:00,+09:00,+09 +1945-09-11T15:00:00,+07:30,+0730 +1981-12-31T16:00:00,+08:00,+08 \ No newline at end of file diff --git a/desk/gub/lib/pytz/turkey.txt b/desk/gub/lib/pytz/turkey.txt new file mode 100644 index 0000000..3fd2a49 --- /dev/null +++ b/desk/gub/lib/pytz/turkey.txt @@ -0,0 +1,117 @@ +Time,Offset,Name +0001-01-01T00:00:00,+01:56,LMT +1901-12-13T20:45:52,+01:57,IMT +1910-09-30T22:03:04,+02:00,EET +1916-04-30T22:00:00,+03:00,EEST +1916-09-30T21:00:00,+02:00,EET +1920-03-27T22:00:00,+03:00,EEST +1920-10-24T21:00:00,+02:00,EET +1921-04-02T22:00:00,+03:00,EEST +1921-10-02T21:00:00,+02:00,EET +1922-03-25T22:00:00,+03:00,EEST +1922-10-07T21:00:00,+02:00,EET +1924-05-12T22:00:00,+03:00,EEST +1924-09-30T21:00:00,+02:00,EET +1925-04-30T22:00:00,+03:00,EEST +1925-09-30T21:00:00,+02:00,EET +1940-06-30T22:00:00,+03:00,EEST +1940-10-05T21:00:00,+02:00,EET +1940-11-30T22:00:00,+03:00,EEST +1941-09-20T21:00:00,+02:00,EET +1942-03-31T22:00:00,+03:00,EEST +1945-10-07T21:00:00,+02:00,EET +1946-05-31T22:00:00,+03:00,EEST +1946-09-30T21:00:00,+02:00,EET +1947-04-19T22:00:00,+03:00,EEST +1947-10-04T21:00:00,+02:00,EET +1948-04-17T22:00:00,+03:00,EEST +1948-10-02T21:00:00,+02:00,EET +1949-04-09T22:00:00,+03:00,EEST +1949-10-01T21:00:00,+02:00,EET +1950-04-15T22:00:00,+03:00,EEST +1950-10-07T21:00:00,+02:00,EET +1951-04-21T22:00:00,+03:00,EEST +1951-10-06T21:00:00,+02:00,EET +1962-07-14T22:00:00,+03:00,EEST +1963-10-29T21:00:00,+02:00,EET +1964-05-14T22:00:00,+03:00,EEST +1964-09-30T21:00:00,+02:00,EET +1973-06-02T23:00:00,+03:00,EEST +1973-11-03T23:00:00,+02:00,EET +1974-03-31T00:00:00,+03:00,EEST +1974-11-02T23:00:00,+02:00,EET +1975-03-22T00:00:00,+03:00,EEST +1975-11-01T23:00:00,+02:00,EET +1976-03-21T00:00:00,+03:00,EEST +1976-10-30T23:00:00,+02:00,EET +1977-04-03T00:00:00,+03:00,EEST +1977-10-15T23:00:00,+02:00,EET +1978-04-02T00:00:00,+03:00,EEST +1978-06-28T21:00:00,+03:00,+03 +1983-07-30T23:00:00,+04:00,+04 +1983-10-01T22:00:00,+03:00,+03 +1984-10-31T23:00:00,+02:00,EET +1985-04-19T23:00:00,+03:00,EEST +1985-09-27T23:00:00,+02:00,EET +1986-03-29T23:00:00,+03:00,EEST +1986-09-27T23:00:00,+02:00,EET +1987-03-28T23:00:00,+03:00,EEST +1987-09-26T23:00:00,+02:00,EET +1988-03-26T23:00:00,+03:00,EEST +1988-09-24T23:00:00,+02:00,EET +1989-03-25T23:00:00,+03:00,EEST +1989-09-23T23:00:00,+02:00,EET +1990-03-24T23:00:00,+03:00,EEST +1990-09-29T23:00:00,+02:00,EET +1991-03-30T23:00:00,+03:00,EEST +1991-09-28T23:00:00,+02:00,EET +1992-03-28T23:00:00,+03:00,EEST +1992-09-26T23:00:00,+02:00,EET +1993-03-27T23:00:00,+03:00,EEST +1993-09-25T23:00:00,+02:00,EET +1994-03-19T23:00:00,+03:00,EEST +1994-09-24T23:00:00,+02:00,EET +1995-03-25T23:00:00,+03:00,EEST +1995-09-23T23:00:00,+02:00,EET +1996-03-30T23:00:00,+03:00,EEST +1996-10-26T23:00:00,+02:00,EET +1997-03-29T23:00:00,+03:00,EEST +1997-10-25T23:00:00,+02:00,EET +1998-03-28T23:00:00,+03:00,EEST +1998-10-24T23:00:00,+02:00,EET +1999-03-27T23:00:00,+03:00,EEST +1999-10-30T23:00:00,+02:00,EET +2000-03-25T23:00:00,+03:00,EEST +2000-10-28T23:00:00,+02:00,EET +2001-03-24T23:00:00,+03:00,EEST +2001-10-27T23:00:00,+02:00,EET +2002-03-30T23:00:00,+03:00,EEST +2002-10-26T23:00:00,+02:00,EET +2003-03-29T23:00:00,+03:00,EEST +2003-10-25T23:00:00,+02:00,EET +2004-03-27T23:00:00,+03:00,EEST +2004-10-30T23:00:00,+02:00,EET +2005-03-26T23:00:00,+03:00,EEST +2005-10-29T23:00:00,+02:00,EET +2006-03-25T23:00:00,+03:00,EEST +2006-10-28T23:00:00,+02:00,EET +2007-03-25T01:00:00,+03:00,EEST +2007-10-28T01:00:00,+02:00,EET +2008-03-30T01:00:00,+03:00,EEST +2008-10-26T01:00:00,+02:00,EET +2009-03-29T01:00:00,+03:00,EEST +2009-10-25T01:00:00,+02:00,EET +2010-03-28T01:00:00,+03:00,EEST +2010-10-31T01:00:00,+02:00,EET +2011-03-28T01:00:00,+03:00,EEST +2011-10-30T01:00:00,+02:00,EET +2012-03-25T01:00:00,+03:00,EEST +2012-10-28T01:00:00,+02:00,EET +2013-03-31T01:00:00,+03:00,EEST +2013-10-27T01:00:00,+02:00,EET +2014-03-31T01:00:00,+03:00,EEST +2014-10-26T01:00:00,+02:00,EET +2015-03-29T01:00:00,+03:00,EEST +2015-11-08T01:00:00,+02:00,EET +2016-03-27T01:00:00,+03:00,EEST +2016-09-06T21:00:00,+03:00,+03 \ No newline at end of file diff --git a/desk/gub/lib/pytz/uct.txt b/desk/gub/lib/pytz/uct.txt new file mode 100644 index 0000000..69cda9e --- /dev/null +++ b/desk/gub/lib/pytz/uct.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,UTC \ No newline at end of file diff --git a/desk/gub/lib/pytz/universal.txt b/desk/gub/lib/pytz/universal.txt new file mode 100644 index 0000000..69cda9e --- /dev/null +++ b/desk/gub/lib/pytz/universal.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,UTC \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-alaska.txt b/desk/gub/lib/pytz/us-alaska.txt new file mode 100644 index 0000000..c133f03 --- /dev/null +++ b/desk/gub/lib/pytz/us-alaska.txt @@ -0,0 +1,146 @@ +Time,Offset,Name +0001-01-01T00:00:00,+14:00,LMT +1901-12-13T20:45:52,-10:00,AST +1942-02-09T12:00:00,-09:00,AWT +1945-08-14T23:00:00,-09:00,APT +1945-09-30T11:00:00,-10:00,AST +1967-04-01T10:00:00,-10:00,AHST +1969-04-27T12:00:00,-09:00,AHDT +1969-10-26T11:00:00,-10:00,AHST +1970-04-26T12:00:00,-09:00,AHDT +1970-10-25T11:00:00,-10:00,AHST +1971-04-25T12:00:00,-09:00,AHDT +1971-10-31T11:00:00,-10:00,AHST +1972-04-30T12:00:00,-09:00,AHDT +1972-10-29T11:00:00,-10:00,AHST +1973-04-29T12:00:00,-09:00,AHDT +1973-10-28T11:00:00,-10:00,AHST +1974-01-06T12:00:00,-09:00,AHDT +1974-10-27T11:00:00,-10:00,AHST +1975-02-23T12:00:00,-09:00,AHDT +1975-10-26T11:00:00,-10:00,AHST +1976-04-25T12:00:00,-09:00,AHDT +1976-10-31T11:00:00,-10:00,AHST +1977-04-24T12:00:00,-09:00,AHDT +1977-10-30T11:00:00,-10:00,AHST +1978-04-30T12:00:00,-09:00,AHDT +1978-10-29T11:00:00,-10:00,AHST +1979-04-29T12:00:00,-09:00,AHDT +1979-10-28T11:00:00,-10:00,AHST +1980-04-27T12:00:00,-09:00,AHDT +1980-10-26T11:00:00,-10:00,AHST +1981-04-26T12:00:00,-09:00,AHDT +1981-10-25T11:00:00,-10:00,AHST +1982-04-25T12:00:00,-09:00,AHDT +1982-10-31T11:00:00,-10:00,AHST +1983-04-24T12:00:00,-09:00,AHDT +1983-10-30T11:00:00,-09:00,YST +1983-11-30T09:00:00,-09:00,AKST +1984-04-29T11:00:00,-08:00,AKDT +1984-10-28T10:00:00,-09:00,AKST +1985-04-28T11:00:00,-08:00,AKDT +1985-10-27T10:00:00,-09:00,AKST +1986-04-27T11:00:00,-08:00,AKDT +1986-10-26T10:00:00,-09:00,AKST +1987-04-05T11:00:00,-08:00,AKDT +1987-10-25T10:00:00,-09:00,AKST +1988-04-03T11:00:00,-08:00,AKDT +1988-10-30T10:00:00,-09:00,AKST +1989-04-02T11:00:00,-08:00,AKDT +1989-10-29T10:00:00,-09:00,AKST +1990-04-01T11:00:00,-08:00,AKDT +1990-10-28T10:00:00,-09:00,AKST +1991-04-07T11:00:00,-08:00,AKDT +1991-10-27T10:00:00,-09:00,AKST +1992-04-05T11:00:00,-08:00,AKDT +1992-10-25T10:00:00,-09:00,AKST +1993-04-04T11:00:00,-08:00,AKDT +1993-10-31T10:00:00,-09:00,AKST +1994-04-03T11:00:00,-08:00,AKDT +1994-10-30T10:00:00,-09:00,AKST +1995-04-02T11:00:00,-08:00,AKDT +1995-10-29T10:00:00,-09:00,AKST +1996-04-07T11:00:00,-08:00,AKDT +1996-10-27T10:00:00,-09:00,AKST +1997-04-06T11:00:00,-08:00,AKDT +1997-10-26T10:00:00,-09:00,AKST +1998-04-05T11:00:00,-08:00,AKDT +1998-10-25T10:00:00,-09:00,AKST +1999-04-04T11:00:00,-08:00,AKDT +1999-10-31T10:00:00,-09:00,AKST +2000-04-02T11:00:00,-08:00,AKDT +2000-10-29T10:00:00,-09:00,AKST +2001-04-01T11:00:00,-08:00,AKDT +2001-10-28T10:00:00,-09:00,AKST +2002-04-07T11:00:00,-08:00,AKDT +2002-10-27T10:00:00,-09:00,AKST +2003-04-06T11:00:00,-08:00,AKDT +2003-10-26T10:00:00,-09:00,AKST +2004-04-04T11:00:00,-08:00,AKDT +2004-10-31T10:00:00,-09:00,AKST +2005-04-03T11:00:00,-08:00,AKDT +2005-10-30T10:00:00,-09:00,AKST +2006-04-02T11:00:00,-08:00,AKDT +2006-10-29T10:00:00,-09:00,AKST +2007-03-11T11:00:00,-08:00,AKDT +2007-11-04T10:00:00,-09:00,AKST +2008-03-09T11:00:00,-08:00,AKDT +2008-11-02T10:00:00,-09:00,AKST +2009-03-08T11:00:00,-08:00,AKDT +2009-11-01T10:00:00,-09:00,AKST +2010-03-14T11:00:00,-08:00,AKDT +2010-11-07T10:00:00,-09:00,AKST +2011-03-13T11:00:00,-08:00,AKDT +2011-11-06T10:00:00,-09:00,AKST +2012-03-11T11:00:00,-08:00,AKDT +2012-11-04T10:00:00,-09:00,AKST +2013-03-10T11:00:00,-08:00,AKDT +2013-11-03T10:00:00,-09:00,AKST +2014-03-09T11:00:00,-08:00,AKDT +2014-11-02T10:00:00,-09:00,AKST +2015-03-08T11:00:00,-08:00,AKDT +2015-11-01T10:00:00,-09:00,AKST +2016-03-13T11:00:00,-08:00,AKDT +2016-11-06T10:00:00,-09:00,AKST +2017-03-12T11:00:00,-08:00,AKDT +2017-11-05T10:00:00,-09:00,AKST +2018-03-11T11:00:00,-08:00,AKDT +2018-11-04T10:00:00,-09:00,AKST +2019-03-10T11:00:00,-08:00,AKDT +2019-11-03T10:00:00,-09:00,AKST +2020-03-08T11:00:00,-08:00,AKDT +2020-11-01T10:00:00,-09:00,AKST +2021-03-14T11:00:00,-08:00,AKDT +2021-11-07T10:00:00,-09:00,AKST +2022-03-13T11:00:00,-08:00,AKDT +2022-11-06T10:00:00,-09:00,AKST +2023-03-12T11:00:00,-08:00,AKDT +2023-11-05T10:00:00,-09:00,AKST +2024-03-10T11:00:00,-08:00,AKDT +2024-11-03T10:00:00,-09:00,AKST +2025-03-09T11:00:00,-08:00,AKDT +2025-11-02T10:00:00,-09:00,AKST +2026-03-08T11:00:00,-08:00,AKDT +2026-11-01T10:00:00,-09:00,AKST +2027-03-14T11:00:00,-08:00,AKDT +2027-11-07T10:00:00,-09:00,AKST +2028-03-12T11:00:00,-08:00,AKDT +2028-11-05T10:00:00,-09:00,AKST +2029-03-11T11:00:00,-08:00,AKDT +2029-11-04T10:00:00,-09:00,AKST +2030-03-10T11:00:00,-08:00,AKDT +2030-11-03T10:00:00,-09:00,AKST +2031-03-09T11:00:00,-08:00,AKDT +2031-11-02T10:00:00,-09:00,AKST +2032-03-14T11:00:00,-08:00,AKDT +2032-11-07T10:00:00,-09:00,AKST +2033-03-13T11:00:00,-08:00,AKDT +2033-11-06T10:00:00,-09:00,AKST +2034-03-12T11:00:00,-08:00,AKDT +2034-11-05T10:00:00,-09:00,AKST +2035-03-11T11:00:00,-08:00,AKDT +2035-11-04T10:00:00,-09:00,AKST +2036-03-09T11:00:00,-08:00,AKDT +2036-11-02T10:00:00,-09:00,AKST +2037-03-08T11:00:00,-08:00,AKDT +2037-11-01T10:00:00,-09:00,AKST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-aleutian.txt b/desk/gub/lib/pytz/us-aleutian.txt new file mode 100644 index 0000000..00931da --- /dev/null +++ b/desk/gub/lib/pytz/us-aleutian.txt @@ -0,0 +1,146 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:13,LMT +1901-12-13T20:45:52,-11:00,NST +1942-02-09T13:00:00,-10:00,NWT +1945-08-14T23:00:00,-10:00,NPT +1945-09-30T12:00:00,-11:00,NST +1967-04-01T11:00:00,-11:00,BST +1969-04-27T13:00:00,-10:00,BDT +1969-10-26T12:00:00,-11:00,BST +1970-04-26T13:00:00,-10:00,BDT +1970-10-25T12:00:00,-11:00,BST +1971-04-25T13:00:00,-10:00,BDT +1971-10-31T12:00:00,-11:00,BST +1972-04-30T13:00:00,-10:00,BDT +1972-10-29T12:00:00,-11:00,BST +1973-04-29T13:00:00,-10:00,BDT +1973-10-28T12:00:00,-11:00,BST +1974-01-06T13:00:00,-10:00,BDT +1974-10-27T12:00:00,-11:00,BST +1975-02-23T13:00:00,-10:00,BDT +1975-10-26T12:00:00,-11:00,BST +1976-04-25T13:00:00,-10:00,BDT +1976-10-31T12:00:00,-11:00,BST +1977-04-24T13:00:00,-10:00,BDT +1977-10-30T12:00:00,-11:00,BST +1978-04-30T13:00:00,-10:00,BDT +1978-10-29T12:00:00,-11:00,BST +1979-04-29T13:00:00,-10:00,BDT +1979-10-28T12:00:00,-11:00,BST +1980-04-27T13:00:00,-10:00,BDT +1980-10-26T12:00:00,-11:00,BST +1981-04-26T13:00:00,-10:00,BDT +1981-10-25T12:00:00,-11:00,BST +1982-04-25T13:00:00,-10:00,BDT +1982-10-31T12:00:00,-11:00,BST +1983-04-24T13:00:00,-10:00,BDT +1983-10-30T12:00:00,-10:00,AHST +1983-11-30T10:00:00,-10:00,HST +1984-04-29T12:00:00,-09:00,HDT +1984-10-28T11:00:00,-10:00,HST +1985-04-28T12:00:00,-09:00,HDT +1985-10-27T11:00:00,-10:00,HST +1986-04-27T12:00:00,-09:00,HDT +1986-10-26T11:00:00,-10:00,HST +1987-04-05T12:00:00,-09:00,HDT +1987-10-25T11:00:00,-10:00,HST +1988-04-03T12:00:00,-09:00,HDT +1988-10-30T11:00:00,-10:00,HST +1989-04-02T12:00:00,-09:00,HDT +1989-10-29T11:00:00,-10:00,HST +1990-04-01T12:00:00,-09:00,HDT +1990-10-28T11:00:00,-10:00,HST +1991-04-07T12:00:00,-09:00,HDT +1991-10-27T11:00:00,-10:00,HST +1992-04-05T12:00:00,-09:00,HDT +1992-10-25T11:00:00,-10:00,HST +1993-04-04T12:00:00,-09:00,HDT +1993-10-31T11:00:00,-10:00,HST +1994-04-03T12:00:00,-09:00,HDT +1994-10-30T11:00:00,-10:00,HST +1995-04-02T12:00:00,-09:00,HDT +1995-10-29T11:00:00,-10:00,HST +1996-04-07T12:00:00,-09:00,HDT +1996-10-27T11:00:00,-10:00,HST +1997-04-06T12:00:00,-09:00,HDT +1997-10-26T11:00:00,-10:00,HST +1998-04-05T12:00:00,-09:00,HDT +1998-10-25T11:00:00,-10:00,HST +1999-04-04T12:00:00,-09:00,HDT +1999-10-31T11:00:00,-10:00,HST +2000-04-02T12:00:00,-09:00,HDT +2000-10-29T11:00:00,-10:00,HST +2001-04-01T12:00:00,-09:00,HDT +2001-10-28T11:00:00,-10:00,HST +2002-04-07T12:00:00,-09:00,HDT +2002-10-27T11:00:00,-10:00,HST +2003-04-06T12:00:00,-09:00,HDT +2003-10-26T11:00:00,-10:00,HST +2004-04-04T12:00:00,-09:00,HDT +2004-10-31T11:00:00,-10:00,HST +2005-04-03T12:00:00,-09:00,HDT +2005-10-30T11:00:00,-10:00,HST +2006-04-02T12:00:00,-09:00,HDT +2006-10-29T11:00:00,-10:00,HST +2007-03-11T12:00:00,-09:00,HDT +2007-11-04T11:00:00,-10:00,HST +2008-03-09T12:00:00,-09:00,HDT +2008-11-02T11:00:00,-10:00,HST +2009-03-08T12:00:00,-09:00,HDT +2009-11-01T11:00:00,-10:00,HST +2010-03-14T12:00:00,-09:00,HDT +2010-11-07T11:00:00,-10:00,HST +2011-03-13T12:00:00,-09:00,HDT +2011-11-06T11:00:00,-10:00,HST +2012-03-11T12:00:00,-09:00,HDT +2012-11-04T11:00:00,-10:00,HST +2013-03-10T12:00:00,-09:00,HDT +2013-11-03T11:00:00,-10:00,HST +2014-03-09T12:00:00,-09:00,HDT +2014-11-02T11:00:00,-10:00,HST +2015-03-08T12:00:00,-09:00,HDT +2015-11-01T11:00:00,-10:00,HST +2016-03-13T12:00:00,-09:00,HDT +2016-11-06T11:00:00,-10:00,HST +2017-03-12T12:00:00,-09:00,HDT +2017-11-05T11:00:00,-10:00,HST +2018-03-11T12:00:00,-09:00,HDT +2018-11-04T11:00:00,-10:00,HST +2019-03-10T12:00:00,-09:00,HDT +2019-11-03T11:00:00,-10:00,HST +2020-03-08T12:00:00,-09:00,HDT +2020-11-01T11:00:00,-10:00,HST +2021-03-14T12:00:00,-09:00,HDT +2021-11-07T11:00:00,-10:00,HST +2022-03-13T12:00:00,-09:00,HDT +2022-11-06T11:00:00,-10:00,HST +2023-03-12T12:00:00,-09:00,HDT +2023-11-05T11:00:00,-10:00,HST +2024-03-10T12:00:00,-09:00,HDT +2024-11-03T11:00:00,-10:00,HST +2025-03-09T12:00:00,-09:00,HDT +2025-11-02T11:00:00,-10:00,HST +2026-03-08T12:00:00,-09:00,HDT +2026-11-01T11:00:00,-10:00,HST +2027-03-14T12:00:00,-09:00,HDT +2027-11-07T11:00:00,-10:00,HST +2028-03-12T12:00:00,-09:00,HDT +2028-11-05T11:00:00,-10:00,HST +2029-03-11T12:00:00,-09:00,HDT +2029-11-04T11:00:00,-10:00,HST +2030-03-10T12:00:00,-09:00,HDT +2030-11-03T11:00:00,-10:00,HST +2031-03-09T12:00:00,-09:00,HDT +2031-11-02T11:00:00,-10:00,HST +2032-03-14T12:00:00,-09:00,HDT +2032-11-07T11:00:00,-10:00,HST +2033-03-13T12:00:00,-09:00,HDT +2033-11-06T11:00:00,-10:00,HST +2034-03-12T12:00:00,-09:00,HDT +2034-11-05T11:00:00,-10:00,HST +2035-03-11T12:00:00,-09:00,HDT +2035-11-04T11:00:00,-10:00,HST +2036-03-09T12:00:00,-09:00,HDT +2036-11-02T11:00:00,-10:00,HST +2037-03-08T12:00:00,-09:00,HDT +2037-11-01T11:00:00,-10:00,HST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-arizona.txt b/desk/gub/lib/pytz/us-arizona.txt new file mode 100644 index 0000000..56faa56 --- /dev/null +++ b/desk/gub/lib/pytz/us-arizona.txt @@ -0,0 +1,12 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1944-01-01T06:01:00,-07:00,MST +1944-04-01T07:01:00,-06:00,MWT +1944-10-01T06:01:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-central.txt b/desk/gub/lib/pytz/us-central.txt new file mode 100644 index 0000000..cd8afcc --- /dev/null +++ b/desk/gub/lib/pytz/us-central.txt @@ -0,0 +1,237 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1920-06-13T08:00:00,-05:00,CDT +1920-10-31T07:00:00,-06:00,CST +1921-03-27T08:00:00,-05:00,CDT +1921-10-30T07:00:00,-06:00,CST +1922-04-30T08:00:00,-05:00,CDT +1922-09-24T07:00:00,-06:00,CST +1923-04-29T08:00:00,-05:00,CDT +1923-09-30T07:00:00,-06:00,CST +1924-04-27T08:00:00,-05:00,CDT +1924-09-28T07:00:00,-06:00,CST +1925-04-26T08:00:00,-05:00,CDT +1925-09-27T07:00:00,-06:00,CST +1926-04-25T08:00:00,-05:00,CDT +1926-09-26T07:00:00,-06:00,CST +1927-04-24T08:00:00,-05:00,CDT +1927-09-25T07:00:00,-06:00,CST +1928-04-29T08:00:00,-05:00,CDT +1928-09-30T07:00:00,-06:00,CST +1929-04-28T08:00:00,-05:00,CDT +1929-09-29T07:00:00,-06:00,CST +1930-04-27T08:00:00,-05:00,CDT +1930-09-28T07:00:00,-06:00,CST +1931-04-26T08:00:00,-05:00,CDT +1931-09-27T07:00:00,-06:00,CST +1932-04-24T08:00:00,-05:00,CDT +1932-09-25T07:00:00,-06:00,CST +1933-04-30T08:00:00,-05:00,CDT +1933-09-24T07:00:00,-06:00,CST +1934-04-29T08:00:00,-05:00,CDT +1934-09-30T07:00:00,-06:00,CST +1935-04-28T08:00:00,-05:00,CDT +1935-09-29T07:00:00,-06:00,CST +1936-03-01T08:00:00,-05:00,EST +1936-11-15T07:00:00,-06:00,CST +1937-04-25T08:00:00,-05:00,CDT +1937-09-26T07:00:00,-06:00,CST +1938-04-24T08:00:00,-05:00,CDT +1938-09-25T07:00:00,-06:00,CST +1939-04-30T08:00:00,-05:00,CDT +1939-09-24T07:00:00,-06:00,CST +1940-04-28T08:00:00,-05:00,CDT +1940-09-29T07:00:00,-06:00,CST +1941-04-27T08:00:00,-05:00,CDT +1941-09-28T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-10-30T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-10-28T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-10-27T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-10-26T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-10-30T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-10-29T07:00:00,-06:00,CST +1962-04-29T08:00:00,-05:00,CDT +1962-10-28T07:00:00,-06:00,CST +1963-04-28T08:00:00,-05:00,CDT +1963-10-27T07:00:00,-06:00,CST +1964-04-26T08:00:00,-05:00,CDT +1964-10-25T07:00:00,-06:00,CST +1965-04-25T08:00:00,-05:00,CDT +1965-10-31T07:00:00,-06:00,CST +1966-04-24T08:00:00,-05:00,CDT +1966-10-30T07:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T07:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T07:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T07:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T07:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T07:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-01-06T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-02-23T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-06:00,CST +1992-04-05T08:00:00,-05:00,CDT +1992-10-25T07:00:00,-06:00,CST +1993-04-04T08:00:00,-05:00,CDT +1993-10-31T07:00:00,-06:00,CST +1994-04-03T08:00:00,-05:00,CDT +1994-10-30T07:00:00,-06:00,CST +1995-04-02T08:00:00,-05:00,CDT +1995-10-29T07:00:00,-06:00,CST +1996-04-07T08:00:00,-05:00,CDT +1996-10-27T07:00:00,-06:00,CST +1997-04-06T08:00:00,-05:00,CDT +1997-10-26T07:00:00,-06:00,CST +1998-04-05T08:00:00,-05:00,CDT +1998-10-25T07:00:00,-06:00,CST +1999-04-04T08:00:00,-05:00,CDT +1999-10-31T07:00:00,-06:00,CST +2000-04-02T08:00:00,-05:00,CDT +2000-10-29T07:00:00,-06:00,CST +2001-04-01T08:00:00,-05:00,CDT +2001-10-28T07:00:00,-06:00,CST +2002-04-07T08:00:00,-05:00,CDT +2002-10-27T07:00:00,-06:00,CST +2003-04-06T08:00:00,-05:00,CDT +2003-10-26T07:00:00,-06:00,CST +2004-04-04T08:00:00,-05:00,CDT +2004-10-31T07:00:00,-06:00,CST +2005-04-03T08:00:00,-05:00,CDT +2005-10-30T07:00:00,-06:00,CST +2006-04-02T08:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-east-indiana.txt b/desk/gub/lib/pytz/us-east-indiana.txt new file mode 100644 index 0000000..74f5be8 --- /dev/null +++ b/desk/gub/lib/pytz/us-east-indiana.txt @@ -0,0 +1,100 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1941-06-22T08:00:00,-05:00,CDT +1941-09-28T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1946-04-28T08:00:00,-05:00,CDT +1946-09-29T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,EST +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-eastern.txt b/desk/gub/lib/pytz/us-eastern.txt new file mode 100644 index 0000000..7921b85 --- /dev/null +++ b/desk/gub/lib/pytz/us-eastern.txt @@ -0,0 +1,237 @@ +Time,Offset,Name +1901-12-13T20:45:52,-05:00,EST +1918-03-31T07:00:00,-04:00,EDT +1918-10-27T06:00:00,-05:00,EST +1919-03-30T07:00:00,-04:00,EDT +1919-10-26T06:00:00,-05:00,EST +1920-03-28T07:00:00,-04:00,EDT +1920-10-31T06:00:00,-05:00,EST +1921-04-24T07:00:00,-04:00,EDT +1921-09-25T06:00:00,-05:00,EST +1922-04-30T07:00:00,-04:00,EDT +1922-09-24T06:00:00,-05:00,EST +1923-04-29T07:00:00,-04:00,EDT +1923-09-30T06:00:00,-05:00,EST +1924-04-27T07:00:00,-04:00,EDT +1924-09-28T06:00:00,-05:00,EST +1925-04-26T07:00:00,-04:00,EDT +1925-09-27T06:00:00,-05:00,EST +1926-04-25T07:00:00,-04:00,EDT +1926-09-26T06:00:00,-05:00,EST +1927-04-24T07:00:00,-04:00,EDT +1927-09-25T06:00:00,-05:00,EST +1928-04-29T07:00:00,-04:00,EDT +1928-09-30T06:00:00,-05:00,EST +1929-04-28T07:00:00,-04:00,EDT +1929-09-29T06:00:00,-05:00,EST +1930-04-27T07:00:00,-04:00,EDT +1930-09-28T06:00:00,-05:00,EST +1931-04-26T07:00:00,-04:00,EDT +1931-09-27T06:00:00,-05:00,EST +1932-04-24T07:00:00,-04:00,EDT +1932-09-25T06:00:00,-05:00,EST +1933-04-30T07:00:00,-04:00,EDT +1933-09-24T06:00:00,-05:00,EST +1934-04-29T07:00:00,-04:00,EDT +1934-09-30T06:00:00,-05:00,EST +1935-04-28T07:00:00,-04:00,EDT +1935-09-29T06:00:00,-05:00,EST +1936-04-26T07:00:00,-04:00,EDT +1936-09-27T06:00:00,-05:00,EST +1937-04-25T07:00:00,-04:00,EDT +1937-09-26T06:00:00,-05:00,EST +1938-04-24T07:00:00,-04:00,EDT +1938-09-25T06:00:00,-05:00,EST +1939-04-30T07:00:00,-04:00,EDT +1939-09-24T06:00:00,-05:00,EST +1940-04-28T07:00:00,-04:00,EDT +1940-09-29T06:00:00,-05:00,EST +1941-04-27T07:00:00,-04:00,EDT +1941-09-28T06:00:00,-05:00,EST +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1946-04-28T07:00:00,-04:00,EDT +1946-09-29T06:00:00,-05:00,EST +1947-04-27T07:00:00,-04:00,EDT +1947-09-28T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1949-04-24T07:00:00,-04:00,EDT +1949-09-25T06:00:00,-05:00,EST +1950-04-30T07:00:00,-04:00,EDT +1950-09-24T06:00:00,-05:00,EST +1951-04-29T07:00:00,-04:00,EDT +1951-09-30T06:00:00,-05:00,EST +1952-04-27T07:00:00,-04:00,EDT +1952-09-28T06:00:00,-05:00,EST +1953-04-26T07:00:00,-04:00,EDT +1953-09-27T06:00:00,-05:00,EST +1954-04-25T07:00:00,-04:00,EDT +1954-09-26T06:00:00,-05:00,EST +1955-04-24T07:00:00,-04:00,EDT +1955-10-30T06:00:00,-05:00,EST +1956-04-29T07:00:00,-04:00,EDT +1956-10-28T06:00:00,-05:00,EST +1957-04-28T07:00:00,-04:00,EDT +1957-10-27T06:00:00,-05:00,EST +1958-04-27T07:00:00,-04:00,EDT +1958-10-26T06:00:00,-05:00,EST +1959-04-26T07:00:00,-04:00,EDT +1959-10-25T06:00:00,-05:00,EST +1960-04-24T07:00:00,-04:00,EDT +1960-10-30T06:00:00,-05:00,EST +1961-04-30T07:00:00,-04:00,EDT +1961-10-29T06:00:00,-05:00,EST +1962-04-29T07:00:00,-04:00,EDT +1962-10-28T06:00:00,-05:00,EST +1963-04-28T07:00:00,-04:00,EDT +1963-10-27T06:00:00,-05:00,EST +1964-04-26T07:00:00,-04:00,EDT +1964-10-25T06:00:00,-05:00,EST +1965-04-25T07:00:00,-04:00,EDT +1965-10-31T06:00:00,-05:00,EST +1966-04-24T07:00:00,-04:00,EDT +1966-10-30T06:00:00,-05:00,EST +1967-04-30T07:00:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1969-04-27T07:00:00,-04:00,EDT +1969-10-26T06:00:00,-05:00,EST +1970-04-26T07:00:00,-04:00,EDT +1970-10-25T06:00:00,-05:00,EST +1971-04-25T07:00:00,-04:00,EDT +1971-10-31T06:00:00,-05:00,EST +1972-04-30T07:00:00,-04:00,EDT +1972-10-29T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-01-06T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-02-23T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-hawaii.txt b/desk/gub/lib/pytz/us-hawaii.txt new file mode 100644 index 0000000..da445a2 --- /dev/null +++ b/desk/gub/lib/pytz/us-hawaii.txt @@ -0,0 +1,8 @@ +Time,Offset,Name +1901-12-13T20:45:52,-11:30,HST +1933-04-30T12:30:00,-10:30,HDT +1933-05-21T21:30:00,-11:30,HST +1942-02-09T12:30:00,-10:30,HWT +1945-08-14T23:00:00,-10:30,HPT +1945-09-30T11:30:00,-11:30,HST +1947-06-08T12:30:00,-10:00,HST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-indiana-starke.txt b/desk/gub/lib/pytz/us-indiana-starke.txt new file mode 100644 index 0000000..b8696ff --- /dev/null +++ b/desk/gub/lib/pytz/us-indiana-starke.txt @@ -0,0 +1,155 @@ +Time,Offset,Name +1901-12-13T20:45:52,-06:00,CST +1918-03-31T08:00:00,-05:00,CDT +1918-10-27T07:00:00,-06:00,CST +1919-03-30T08:00:00,-05:00,CDT +1919-10-26T07:00:00,-06:00,CST +1942-02-09T08:00:00,-05:00,CWT +1945-08-14T23:00:00,-05:00,CPT +1945-09-30T07:00:00,-06:00,CST +1947-04-27T08:00:00,-05:00,CDT +1947-09-28T07:00:00,-06:00,CST +1948-04-25T08:00:00,-05:00,CDT +1948-09-26T07:00:00,-06:00,CST +1949-04-24T08:00:00,-05:00,CDT +1949-09-25T07:00:00,-06:00,CST +1950-04-30T08:00:00,-05:00,CDT +1950-09-24T07:00:00,-06:00,CST +1951-04-29T08:00:00,-05:00,CDT +1951-09-30T07:00:00,-06:00,CST +1952-04-27T08:00:00,-05:00,CDT +1952-09-28T07:00:00,-06:00,CST +1953-04-26T08:00:00,-05:00,CDT +1953-09-27T07:00:00,-06:00,CST +1954-04-25T08:00:00,-05:00,CDT +1954-09-26T07:00:00,-06:00,CST +1955-04-24T08:00:00,-05:00,CDT +1955-10-30T07:00:00,-06:00,CST +1956-04-29T08:00:00,-05:00,CDT +1956-10-28T07:00:00,-06:00,CST +1957-04-28T08:00:00,-05:00,CDT +1957-09-29T07:00:00,-06:00,CST +1958-04-27T08:00:00,-05:00,CDT +1958-09-28T07:00:00,-06:00,CST +1959-04-26T08:00:00,-05:00,CDT +1959-10-25T07:00:00,-06:00,CST +1960-04-24T08:00:00,-05:00,CDT +1960-10-30T07:00:00,-06:00,CST +1961-04-30T08:00:00,-05:00,CDT +1961-10-29T07:00:00,-06:00,CST +1962-04-29T08:00:00,-05:00,EST +1963-10-27T07:00:00,-06:00,CST +1967-04-30T08:00:00,-05:00,CDT +1967-10-29T07:00:00,-06:00,CST +1968-04-28T08:00:00,-05:00,CDT +1968-10-27T07:00:00,-06:00,CST +1969-04-27T08:00:00,-05:00,CDT +1969-10-26T07:00:00,-06:00,CST +1970-04-26T08:00:00,-05:00,CDT +1970-10-25T07:00:00,-06:00,CST +1971-04-25T08:00:00,-05:00,CDT +1971-10-31T07:00:00,-06:00,CST +1972-04-30T08:00:00,-05:00,CDT +1972-10-29T07:00:00,-06:00,CST +1973-04-29T08:00:00,-05:00,CDT +1973-10-28T07:00:00,-06:00,CST +1974-01-06T08:00:00,-05:00,CDT +1974-10-27T07:00:00,-06:00,CST +1975-02-23T08:00:00,-05:00,CDT +1975-10-26T07:00:00,-06:00,CST +1976-04-25T08:00:00,-05:00,CDT +1976-10-31T07:00:00,-06:00,CST +1977-04-24T08:00:00,-05:00,CDT +1977-10-30T07:00:00,-06:00,CST +1978-04-30T08:00:00,-05:00,CDT +1978-10-29T07:00:00,-06:00,CST +1979-04-29T08:00:00,-05:00,CDT +1979-10-28T07:00:00,-06:00,CST +1980-04-27T08:00:00,-05:00,CDT +1980-10-26T07:00:00,-06:00,CST +1981-04-26T08:00:00,-05:00,CDT +1981-10-25T07:00:00,-06:00,CST +1982-04-25T08:00:00,-05:00,CDT +1982-10-31T07:00:00,-06:00,CST +1983-04-24T08:00:00,-05:00,CDT +1983-10-30T07:00:00,-06:00,CST +1984-04-29T08:00:00,-05:00,CDT +1984-10-28T07:00:00,-06:00,CST +1985-04-28T08:00:00,-05:00,CDT +1985-10-27T07:00:00,-06:00,CST +1986-04-27T08:00:00,-05:00,CDT +1986-10-26T07:00:00,-06:00,CST +1987-04-05T08:00:00,-05:00,CDT +1987-10-25T07:00:00,-06:00,CST +1988-04-03T08:00:00,-05:00,CDT +1988-10-30T07:00:00,-06:00,CST +1989-04-02T08:00:00,-05:00,CDT +1989-10-29T07:00:00,-06:00,CST +1990-04-01T08:00:00,-05:00,CDT +1990-10-28T07:00:00,-06:00,CST +1991-04-07T08:00:00,-05:00,CDT +1991-10-27T07:00:00,-05:00,EST +2006-04-02T07:00:00,-05:00,CDT +2006-10-29T07:00:00,-06:00,CST +2007-03-11T08:00:00,-05:00,CDT +2007-11-04T07:00:00,-06:00,CST +2008-03-09T08:00:00,-05:00,CDT +2008-11-02T07:00:00,-06:00,CST +2009-03-08T08:00:00,-05:00,CDT +2009-11-01T07:00:00,-06:00,CST +2010-03-14T08:00:00,-05:00,CDT +2010-11-07T07:00:00,-06:00,CST +2011-03-13T08:00:00,-05:00,CDT +2011-11-06T07:00:00,-06:00,CST +2012-03-11T08:00:00,-05:00,CDT +2012-11-04T07:00:00,-06:00,CST +2013-03-10T08:00:00,-05:00,CDT +2013-11-03T07:00:00,-06:00,CST +2014-03-09T08:00:00,-05:00,CDT +2014-11-02T07:00:00,-06:00,CST +2015-03-08T08:00:00,-05:00,CDT +2015-11-01T07:00:00,-06:00,CST +2016-03-13T08:00:00,-05:00,CDT +2016-11-06T07:00:00,-06:00,CST +2017-03-12T08:00:00,-05:00,CDT +2017-11-05T07:00:00,-06:00,CST +2018-03-11T08:00:00,-05:00,CDT +2018-11-04T07:00:00,-06:00,CST +2019-03-10T08:00:00,-05:00,CDT +2019-11-03T07:00:00,-06:00,CST +2020-03-08T08:00:00,-05:00,CDT +2020-11-01T07:00:00,-06:00,CST +2021-03-14T08:00:00,-05:00,CDT +2021-11-07T07:00:00,-06:00,CST +2022-03-13T08:00:00,-05:00,CDT +2022-11-06T07:00:00,-06:00,CST +2023-03-12T08:00:00,-05:00,CDT +2023-11-05T07:00:00,-06:00,CST +2024-03-10T08:00:00,-05:00,CDT +2024-11-03T07:00:00,-06:00,CST +2025-03-09T08:00:00,-05:00,CDT +2025-11-02T07:00:00,-06:00,CST +2026-03-08T08:00:00,-05:00,CDT +2026-11-01T07:00:00,-06:00,CST +2027-03-14T08:00:00,-05:00,CDT +2027-11-07T07:00:00,-06:00,CST +2028-03-12T08:00:00,-05:00,CDT +2028-11-05T07:00:00,-06:00,CST +2029-03-11T08:00:00,-05:00,CDT +2029-11-04T07:00:00,-06:00,CST +2030-03-10T08:00:00,-05:00,CDT +2030-11-03T07:00:00,-06:00,CST +2031-03-09T08:00:00,-05:00,CDT +2031-11-02T07:00:00,-06:00,CST +2032-03-14T08:00:00,-05:00,CDT +2032-11-07T07:00:00,-06:00,CST +2033-03-13T08:00:00,-05:00,CDT +2033-11-06T07:00:00,-06:00,CST +2034-03-12T08:00:00,-05:00,CDT +2034-11-05T07:00:00,-06:00,CST +2035-03-11T08:00:00,-05:00,CDT +2035-11-04T07:00:00,-06:00,CST +2036-03-09T08:00:00,-05:00,CDT +2036-11-02T07:00:00,-06:00,CST +2037-03-08T08:00:00,-05:00,CDT +2037-11-01T07:00:00,-06:00,CST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-michigan.txt b/desk/gub/lib/pytz/us-michigan.txt new file mode 100644 index 0000000..f27866c --- /dev/null +++ b/desk/gub/lib/pytz/us-michigan.txt @@ -0,0 +1,142 @@ +Time,Offset,Name +1905-01-01T05:32:11,-06:00,CST +1915-05-15T08:00:00,-05:00,EST +1942-02-09T07:00:00,-04:00,EWT +1945-08-14T23:00:00,-04:00,EPT +1945-09-30T06:00:00,-05:00,EST +1948-04-25T07:00:00,-04:00,EDT +1948-09-26T06:00:00,-05:00,EST +1967-06-14T05:01:00,-04:00,EDT +1967-10-29T06:00:00,-05:00,EST +1968-04-28T07:00:00,-04:00,EDT +1968-10-27T06:00:00,-05:00,EST +1973-04-29T07:00:00,-04:00,EDT +1973-10-28T06:00:00,-05:00,EST +1974-01-06T07:00:00,-04:00,EDT +1974-10-27T06:00:00,-05:00,EST +1975-04-27T07:00:00,-04:00,EDT +1975-10-26T06:00:00,-05:00,EST +1976-04-25T07:00:00,-04:00,EDT +1976-10-31T06:00:00,-05:00,EST +1977-04-24T07:00:00,-04:00,EDT +1977-10-30T06:00:00,-05:00,EST +1978-04-30T07:00:00,-04:00,EDT +1978-10-29T06:00:00,-05:00,EST +1979-04-29T07:00:00,-04:00,EDT +1979-10-28T06:00:00,-05:00,EST +1980-04-27T07:00:00,-04:00,EDT +1980-10-26T06:00:00,-05:00,EST +1981-04-26T07:00:00,-04:00,EDT +1981-10-25T06:00:00,-05:00,EST +1982-04-25T07:00:00,-04:00,EDT +1982-10-31T06:00:00,-05:00,EST +1983-04-24T07:00:00,-04:00,EDT +1983-10-30T06:00:00,-05:00,EST +1984-04-29T07:00:00,-04:00,EDT +1984-10-28T06:00:00,-05:00,EST +1985-04-28T07:00:00,-04:00,EDT +1985-10-27T06:00:00,-05:00,EST +1986-04-27T07:00:00,-04:00,EDT +1986-10-26T06:00:00,-05:00,EST +1987-04-05T07:00:00,-04:00,EDT +1987-10-25T06:00:00,-05:00,EST +1988-04-03T07:00:00,-04:00,EDT +1988-10-30T06:00:00,-05:00,EST +1989-04-02T07:00:00,-04:00,EDT +1989-10-29T06:00:00,-05:00,EST +1990-04-01T07:00:00,-04:00,EDT +1990-10-28T06:00:00,-05:00,EST +1991-04-07T07:00:00,-04:00,EDT +1991-10-27T06:00:00,-05:00,EST +1992-04-05T07:00:00,-04:00,EDT +1992-10-25T06:00:00,-05:00,EST +1993-04-04T07:00:00,-04:00,EDT +1993-10-31T06:00:00,-05:00,EST +1994-04-03T07:00:00,-04:00,EDT +1994-10-30T06:00:00,-05:00,EST +1995-04-02T07:00:00,-04:00,EDT +1995-10-29T06:00:00,-05:00,EST +1996-04-07T07:00:00,-04:00,EDT +1996-10-27T06:00:00,-05:00,EST +1997-04-06T07:00:00,-04:00,EDT +1997-10-26T06:00:00,-05:00,EST +1998-04-05T07:00:00,-04:00,EDT +1998-10-25T06:00:00,-05:00,EST +1999-04-04T07:00:00,-04:00,EDT +1999-10-31T06:00:00,-05:00,EST +2000-04-02T07:00:00,-04:00,EDT +2000-10-29T06:00:00,-05:00,EST +2001-04-01T07:00:00,-04:00,EDT +2001-10-28T06:00:00,-05:00,EST +2002-04-07T07:00:00,-04:00,EDT +2002-10-27T06:00:00,-05:00,EST +2003-04-06T07:00:00,-04:00,EDT +2003-10-26T06:00:00,-05:00,EST +2004-04-04T07:00:00,-04:00,EDT +2004-10-31T06:00:00,-05:00,EST +2005-04-03T07:00:00,-04:00,EDT +2005-10-30T06:00:00,-05:00,EST +2006-04-02T07:00:00,-04:00,EDT +2006-10-29T06:00:00,-05:00,EST +2007-03-11T07:00:00,-04:00,EDT +2007-11-04T06:00:00,-05:00,EST +2008-03-09T07:00:00,-04:00,EDT +2008-11-02T06:00:00,-05:00,EST +2009-03-08T07:00:00,-04:00,EDT +2009-11-01T06:00:00,-05:00,EST +2010-03-14T07:00:00,-04:00,EDT +2010-11-07T06:00:00,-05:00,EST +2011-03-13T07:00:00,-04:00,EDT +2011-11-06T06:00:00,-05:00,EST +2012-03-11T07:00:00,-04:00,EDT +2012-11-04T06:00:00,-05:00,EST +2013-03-10T07:00:00,-04:00,EDT +2013-11-03T06:00:00,-05:00,EST +2014-03-09T07:00:00,-04:00,EDT +2014-11-02T06:00:00,-05:00,EST +2015-03-08T07:00:00,-04:00,EDT +2015-11-01T06:00:00,-05:00,EST +2016-03-13T07:00:00,-04:00,EDT +2016-11-06T06:00:00,-05:00,EST +2017-03-12T07:00:00,-04:00,EDT +2017-11-05T06:00:00,-05:00,EST +2018-03-11T07:00:00,-04:00,EDT +2018-11-04T06:00:00,-05:00,EST +2019-03-10T07:00:00,-04:00,EDT +2019-11-03T06:00:00,-05:00,EST +2020-03-08T07:00:00,-04:00,EDT +2020-11-01T06:00:00,-05:00,EST +2021-03-14T07:00:00,-04:00,EDT +2021-11-07T06:00:00,-05:00,EST +2022-03-13T07:00:00,-04:00,EDT +2022-11-06T06:00:00,-05:00,EST +2023-03-12T07:00:00,-04:00,EDT +2023-11-05T06:00:00,-05:00,EST +2024-03-10T07:00:00,-04:00,EDT +2024-11-03T06:00:00,-05:00,EST +2025-03-09T07:00:00,-04:00,EDT +2025-11-02T06:00:00,-05:00,EST +2026-03-08T07:00:00,-04:00,EDT +2026-11-01T06:00:00,-05:00,EST +2027-03-14T07:00:00,-04:00,EDT +2027-11-07T06:00:00,-05:00,EST +2028-03-12T07:00:00,-04:00,EDT +2028-11-05T06:00:00,-05:00,EST +2029-03-11T07:00:00,-04:00,EDT +2029-11-04T06:00:00,-05:00,EST +2030-03-10T07:00:00,-04:00,EDT +2030-11-03T06:00:00,-05:00,EST +2031-03-09T07:00:00,-04:00,EDT +2031-11-02T06:00:00,-05:00,EST +2032-03-14T07:00:00,-04:00,EDT +2032-11-07T06:00:00,-05:00,EST +2033-03-13T07:00:00,-04:00,EDT +2033-11-06T06:00:00,-05:00,EST +2034-03-12T07:00:00,-04:00,EDT +2034-11-05T06:00:00,-05:00,EST +2035-03-11T07:00:00,-04:00,EDT +2035-11-04T06:00:00,-05:00,EST +2036-03-09T07:00:00,-04:00,EDT +2036-11-02T06:00:00,-05:00,EST +2037-03-08T07:00:00,-04:00,EDT +2037-11-01T06:00:00,-05:00,EST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-mountain.txt b/desk/gub/lib/pytz/us-mountain.txt new file mode 100644 index 0000000..d26b6e0 --- /dev/null +++ b/desk/gub/lib/pytz/us-mountain.txt @@ -0,0 +1,159 @@ +Time,Offset,Name +1901-12-13T20:45:52,-07:00,MST +1918-03-31T09:00:00,-06:00,MDT +1918-10-27T08:00:00,-07:00,MST +1919-03-30T09:00:00,-06:00,MDT +1919-10-26T08:00:00,-07:00,MST +1920-03-28T09:00:00,-06:00,MDT +1920-10-31T08:00:00,-07:00,MST +1921-03-27T09:00:00,-06:00,MDT +1921-05-22T08:00:00,-07:00,MST +1942-02-09T09:00:00,-06:00,MWT +1945-08-14T23:00:00,-06:00,MPT +1945-09-30T08:00:00,-07:00,MST +1965-04-25T09:00:00,-06:00,MDT +1965-10-31T08:00:00,-07:00,MST +1966-04-24T09:00:00,-06:00,MDT +1966-10-30T08:00:00,-07:00,MST +1967-04-30T09:00:00,-06:00,MDT +1967-10-29T08:00:00,-07:00,MST +1968-04-28T09:00:00,-06:00,MDT +1968-10-27T08:00:00,-07:00,MST +1969-04-27T09:00:00,-06:00,MDT +1969-10-26T08:00:00,-07:00,MST +1970-04-26T09:00:00,-06:00,MDT +1970-10-25T08:00:00,-07:00,MST +1971-04-25T09:00:00,-06:00,MDT +1971-10-31T08:00:00,-07:00,MST +1972-04-30T09:00:00,-06:00,MDT +1972-10-29T08:00:00,-07:00,MST +1973-04-29T09:00:00,-06:00,MDT +1973-10-28T08:00:00,-07:00,MST +1974-01-06T09:00:00,-06:00,MDT +1974-10-27T08:00:00,-07:00,MST +1975-02-23T09:00:00,-06:00,MDT +1975-10-26T08:00:00,-07:00,MST +1976-04-25T09:00:00,-06:00,MDT +1976-10-31T08:00:00,-07:00,MST +1977-04-24T09:00:00,-06:00,MDT +1977-10-30T08:00:00,-07:00,MST +1978-04-30T09:00:00,-06:00,MDT +1978-10-29T08:00:00,-07:00,MST +1979-04-29T09:00:00,-06:00,MDT +1979-10-28T08:00:00,-07:00,MST +1980-04-27T09:00:00,-06:00,MDT +1980-10-26T08:00:00,-07:00,MST +1981-04-26T09:00:00,-06:00,MDT +1981-10-25T08:00:00,-07:00,MST +1982-04-25T09:00:00,-06:00,MDT +1982-10-31T08:00:00,-07:00,MST +1983-04-24T09:00:00,-06:00,MDT +1983-10-30T08:00:00,-07:00,MST +1984-04-29T09:00:00,-06:00,MDT +1984-10-28T08:00:00,-07:00,MST +1985-04-28T09:00:00,-06:00,MDT +1985-10-27T08:00:00,-07:00,MST +1986-04-27T09:00:00,-06:00,MDT +1986-10-26T08:00:00,-07:00,MST +1987-04-05T09:00:00,-06:00,MDT +1987-10-25T08:00:00,-07:00,MST +1988-04-03T09:00:00,-06:00,MDT +1988-10-30T08:00:00,-07:00,MST +1989-04-02T09:00:00,-06:00,MDT +1989-10-29T08:00:00,-07:00,MST +1990-04-01T09:00:00,-06:00,MDT +1990-10-28T08:00:00,-07:00,MST +1991-04-07T09:00:00,-06:00,MDT +1991-10-27T08:00:00,-07:00,MST +1992-04-05T09:00:00,-06:00,MDT +1992-10-25T08:00:00,-07:00,MST +1993-04-04T09:00:00,-06:00,MDT +1993-10-31T08:00:00,-07:00,MST +1994-04-03T09:00:00,-06:00,MDT +1994-10-30T08:00:00,-07:00,MST +1995-04-02T09:00:00,-06:00,MDT +1995-10-29T08:00:00,-07:00,MST +1996-04-07T09:00:00,-06:00,MDT +1996-10-27T08:00:00,-07:00,MST +1997-04-06T09:00:00,-06:00,MDT +1997-10-26T08:00:00,-07:00,MST +1998-04-05T09:00:00,-06:00,MDT +1998-10-25T08:00:00,-07:00,MST +1999-04-04T09:00:00,-06:00,MDT +1999-10-31T08:00:00,-07:00,MST +2000-04-02T09:00:00,-06:00,MDT +2000-10-29T08:00:00,-07:00,MST +2001-04-01T09:00:00,-06:00,MDT +2001-10-28T08:00:00,-07:00,MST +2002-04-07T09:00:00,-06:00,MDT +2002-10-27T08:00:00,-07:00,MST +2003-04-06T09:00:00,-06:00,MDT +2003-10-26T08:00:00,-07:00,MST +2004-04-04T09:00:00,-06:00,MDT +2004-10-31T08:00:00,-07:00,MST +2005-04-03T09:00:00,-06:00,MDT +2005-10-30T08:00:00,-07:00,MST +2006-04-02T09:00:00,-06:00,MDT +2006-10-29T08:00:00,-07:00,MST +2007-03-11T09:00:00,-06:00,MDT +2007-11-04T08:00:00,-07:00,MST +2008-03-09T09:00:00,-06:00,MDT +2008-11-02T08:00:00,-07:00,MST +2009-03-08T09:00:00,-06:00,MDT +2009-11-01T08:00:00,-07:00,MST +2010-03-14T09:00:00,-06:00,MDT +2010-11-07T08:00:00,-07:00,MST +2011-03-13T09:00:00,-06:00,MDT +2011-11-06T08:00:00,-07:00,MST +2012-03-11T09:00:00,-06:00,MDT +2012-11-04T08:00:00,-07:00,MST +2013-03-10T09:00:00,-06:00,MDT +2013-11-03T08:00:00,-07:00,MST +2014-03-09T09:00:00,-06:00,MDT +2014-11-02T08:00:00,-07:00,MST +2015-03-08T09:00:00,-06:00,MDT +2015-11-01T08:00:00,-07:00,MST +2016-03-13T09:00:00,-06:00,MDT +2016-11-06T08:00:00,-07:00,MST +2017-03-12T09:00:00,-06:00,MDT +2017-11-05T08:00:00,-07:00,MST +2018-03-11T09:00:00,-06:00,MDT +2018-11-04T08:00:00,-07:00,MST +2019-03-10T09:00:00,-06:00,MDT +2019-11-03T08:00:00,-07:00,MST +2020-03-08T09:00:00,-06:00,MDT +2020-11-01T08:00:00,-07:00,MST +2021-03-14T09:00:00,-06:00,MDT +2021-11-07T08:00:00,-07:00,MST +2022-03-13T09:00:00,-06:00,MDT +2022-11-06T08:00:00,-07:00,MST +2023-03-12T09:00:00,-06:00,MDT +2023-11-05T08:00:00,-07:00,MST +2024-03-10T09:00:00,-06:00,MDT +2024-11-03T08:00:00,-07:00,MST +2025-03-09T09:00:00,-06:00,MDT +2025-11-02T08:00:00,-07:00,MST +2026-03-08T09:00:00,-06:00,MDT +2026-11-01T08:00:00,-07:00,MST +2027-03-14T09:00:00,-06:00,MDT +2027-11-07T08:00:00,-07:00,MST +2028-03-12T09:00:00,-06:00,MDT +2028-11-05T08:00:00,-07:00,MST +2029-03-11T09:00:00,-06:00,MDT +2029-11-04T08:00:00,-07:00,MST +2030-03-10T09:00:00,-06:00,MDT +2030-11-03T08:00:00,-07:00,MST +2031-03-09T09:00:00,-06:00,MDT +2031-11-02T08:00:00,-07:00,MST +2032-03-14T09:00:00,-06:00,MDT +2032-11-07T08:00:00,-07:00,MST +2033-03-13T09:00:00,-06:00,MDT +2033-11-06T08:00:00,-07:00,MST +2034-03-12T09:00:00,-06:00,MDT +2034-11-05T08:00:00,-07:00,MST +2035-03-11T09:00:00,-06:00,MDT +2035-11-04T08:00:00,-07:00,MST +2036-03-09T09:00:00,-06:00,MDT +2036-11-02T08:00:00,-07:00,MST +2037-03-08T09:00:00,-06:00,MDT +2037-11-01T08:00:00,-07:00,MST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-pacific.txt b/desk/gub/lib/pytz/us-pacific.txt new file mode 100644 index 0000000..6c5197e --- /dev/null +++ b/desk/gub/lib/pytz/us-pacific.txt @@ -0,0 +1,187 @@ +Time,Offset,Name +1901-12-13T20:45:52,-08:00,PST +1918-03-31T10:00:00,-07:00,PDT +1918-10-27T09:00:00,-08:00,PST +1919-03-30T10:00:00,-07:00,PDT +1919-10-26T09:00:00,-08:00,PST +1942-02-09T10:00:00,-07:00,PWT +1945-08-14T23:00:00,-07:00,PPT +1945-09-30T09:00:00,-08:00,PST +1948-03-14T10:01:00,-07:00,PDT +1949-01-01T09:00:00,-08:00,PST +1950-04-30T09:00:00,-07:00,PDT +1950-09-24T09:00:00,-08:00,PST +1951-04-29T09:00:00,-07:00,PDT +1951-09-30T09:00:00,-08:00,PST +1952-04-27T09:00:00,-07:00,PDT +1952-09-28T09:00:00,-08:00,PST +1953-04-26T09:00:00,-07:00,PDT +1953-09-27T09:00:00,-08:00,PST +1954-04-25T09:00:00,-07:00,PDT +1954-09-26T09:00:00,-08:00,PST +1955-04-24T09:00:00,-07:00,PDT +1955-09-25T09:00:00,-08:00,PST +1956-04-29T09:00:00,-07:00,PDT +1956-09-30T09:00:00,-08:00,PST +1957-04-28T09:00:00,-07:00,PDT +1957-09-29T09:00:00,-08:00,PST +1958-04-27T09:00:00,-07:00,PDT +1958-09-28T09:00:00,-08:00,PST +1959-04-26T09:00:00,-07:00,PDT +1959-09-27T09:00:00,-08:00,PST +1960-04-24T09:00:00,-07:00,PDT +1960-09-25T09:00:00,-08:00,PST +1961-04-30T09:00:00,-07:00,PDT +1961-09-24T09:00:00,-08:00,PST +1962-04-29T09:00:00,-07:00,PDT +1962-10-28T09:00:00,-08:00,PST +1963-04-28T09:00:00,-07:00,PDT +1963-10-27T09:00:00,-08:00,PST +1964-04-26T09:00:00,-07:00,PDT +1964-10-25T09:00:00,-08:00,PST +1965-04-25T09:00:00,-07:00,PDT +1965-10-31T09:00:00,-08:00,PST +1966-04-24T09:00:00,-07:00,PDT +1966-10-30T09:00:00,-08:00,PST +1967-04-30T10:00:00,-07:00,PDT +1967-10-29T09:00:00,-08:00,PST +1968-04-28T10:00:00,-07:00,PDT +1968-10-27T09:00:00,-08:00,PST +1969-04-27T10:00:00,-07:00,PDT +1969-10-26T09:00:00,-08:00,PST +1970-04-26T10:00:00,-07:00,PDT +1970-10-25T09:00:00,-08:00,PST +1971-04-25T10:00:00,-07:00,PDT +1971-10-31T09:00:00,-08:00,PST +1972-04-30T10:00:00,-07:00,PDT +1972-10-29T09:00:00,-08:00,PST +1973-04-29T10:00:00,-07:00,PDT +1973-10-28T09:00:00,-08:00,PST +1974-01-06T10:00:00,-07:00,PDT +1974-10-27T09:00:00,-08:00,PST +1975-02-23T10:00:00,-07:00,PDT +1975-10-26T09:00:00,-08:00,PST +1976-04-25T10:00:00,-07:00,PDT +1976-10-31T09:00:00,-08:00,PST +1977-04-24T10:00:00,-07:00,PDT +1977-10-30T09:00:00,-08:00,PST +1978-04-30T10:00:00,-07:00,PDT +1978-10-29T09:00:00,-08:00,PST +1979-04-29T10:00:00,-07:00,PDT +1979-10-28T09:00:00,-08:00,PST +1980-04-27T10:00:00,-07:00,PDT +1980-10-26T09:00:00,-08:00,PST +1981-04-26T10:00:00,-07:00,PDT +1981-10-25T09:00:00,-08:00,PST +1982-04-25T10:00:00,-07:00,PDT +1982-10-31T09:00:00,-08:00,PST +1983-04-24T10:00:00,-07:00,PDT +1983-10-30T09:00:00,-08:00,PST +1984-04-29T10:00:00,-07:00,PDT +1984-10-28T09:00:00,-08:00,PST +1985-04-28T10:00:00,-07:00,PDT +1985-10-27T09:00:00,-08:00,PST +1986-04-27T10:00:00,-07:00,PDT +1986-10-26T09:00:00,-08:00,PST +1987-04-05T10:00:00,-07:00,PDT +1987-10-25T09:00:00,-08:00,PST +1988-04-03T10:00:00,-07:00,PDT +1988-10-30T09:00:00,-08:00,PST +1989-04-02T10:00:00,-07:00,PDT +1989-10-29T09:00:00,-08:00,PST +1990-04-01T10:00:00,-07:00,PDT +1990-10-28T09:00:00,-08:00,PST +1991-04-07T10:00:00,-07:00,PDT +1991-10-27T09:00:00,-08:00,PST +1992-04-05T10:00:00,-07:00,PDT +1992-10-25T09:00:00,-08:00,PST +1993-04-04T10:00:00,-07:00,PDT +1993-10-31T09:00:00,-08:00,PST +1994-04-03T10:00:00,-07:00,PDT +1994-10-30T09:00:00,-08:00,PST +1995-04-02T10:00:00,-07:00,PDT +1995-10-29T09:00:00,-08:00,PST +1996-04-07T10:00:00,-07:00,PDT +1996-10-27T09:00:00,-08:00,PST +1997-04-06T10:00:00,-07:00,PDT +1997-10-26T09:00:00,-08:00,PST +1998-04-05T10:00:00,-07:00,PDT +1998-10-25T09:00:00,-08:00,PST +1999-04-04T10:00:00,-07:00,PDT +1999-10-31T09:00:00,-08:00,PST +2000-04-02T10:00:00,-07:00,PDT +2000-10-29T09:00:00,-08:00,PST +2001-04-01T10:00:00,-07:00,PDT +2001-10-28T09:00:00,-08:00,PST +2002-04-07T10:00:00,-07:00,PDT +2002-10-27T09:00:00,-08:00,PST +2003-04-06T10:00:00,-07:00,PDT +2003-10-26T09:00:00,-08:00,PST +2004-04-04T10:00:00,-07:00,PDT +2004-10-31T09:00:00,-08:00,PST +2005-04-03T10:00:00,-07:00,PDT +2005-10-30T09:00:00,-08:00,PST +2006-04-02T10:00:00,-07:00,PDT +2006-10-29T09:00:00,-08:00,PST +2007-03-11T10:00:00,-07:00,PDT +2007-11-04T09:00:00,-08:00,PST +2008-03-09T10:00:00,-07:00,PDT +2008-11-02T09:00:00,-08:00,PST +2009-03-08T10:00:00,-07:00,PDT +2009-11-01T09:00:00,-08:00,PST +2010-03-14T10:00:00,-07:00,PDT +2010-11-07T09:00:00,-08:00,PST +2011-03-13T10:00:00,-07:00,PDT +2011-11-06T09:00:00,-08:00,PST +2012-03-11T10:00:00,-07:00,PDT +2012-11-04T09:00:00,-08:00,PST +2013-03-10T10:00:00,-07:00,PDT +2013-11-03T09:00:00,-08:00,PST +2014-03-09T10:00:00,-07:00,PDT +2014-11-02T09:00:00,-08:00,PST +2015-03-08T10:00:00,-07:00,PDT +2015-11-01T09:00:00,-08:00,PST +2016-03-13T10:00:00,-07:00,PDT +2016-11-06T09:00:00,-08:00,PST +2017-03-12T10:00:00,-07:00,PDT +2017-11-05T09:00:00,-08:00,PST +2018-03-11T10:00:00,-07:00,PDT +2018-11-04T09:00:00,-08:00,PST +2019-03-10T10:00:00,-07:00,PDT +2019-11-03T09:00:00,-08:00,PST +2020-03-08T10:00:00,-07:00,PDT +2020-11-01T09:00:00,-08:00,PST +2021-03-14T10:00:00,-07:00,PDT +2021-11-07T09:00:00,-08:00,PST +2022-03-13T10:00:00,-07:00,PDT +2022-11-06T09:00:00,-08:00,PST +2023-03-12T10:00:00,-07:00,PDT +2023-11-05T09:00:00,-08:00,PST +2024-03-10T10:00:00,-07:00,PDT +2024-11-03T09:00:00,-08:00,PST +2025-03-09T10:00:00,-07:00,PDT +2025-11-02T09:00:00,-08:00,PST +2026-03-08T10:00:00,-07:00,PDT +2026-11-01T09:00:00,-08:00,PST +2027-03-14T10:00:00,-07:00,PDT +2027-11-07T09:00:00,-08:00,PST +2028-03-12T10:00:00,-07:00,PDT +2028-11-05T09:00:00,-08:00,PST +2029-03-11T10:00:00,-07:00,PDT +2029-11-04T09:00:00,-08:00,PST +2030-03-10T10:00:00,-07:00,PDT +2030-11-03T09:00:00,-08:00,PST +2031-03-09T10:00:00,-07:00,PDT +2031-11-02T09:00:00,-08:00,PST +2032-03-14T10:00:00,-07:00,PDT +2032-11-07T09:00:00,-08:00,PST +2033-03-13T10:00:00,-07:00,PDT +2033-11-06T09:00:00,-08:00,PST +2034-03-12T10:00:00,-07:00,PDT +2034-11-05T09:00:00,-08:00,PST +2035-03-11T10:00:00,-07:00,PDT +2035-11-04T09:00:00,-08:00,PST +2036-03-09T10:00:00,-07:00,PDT +2036-11-02T09:00:00,-08:00,PST +2037-03-08T10:00:00,-07:00,PDT +2037-11-01T09:00:00,-08:00,PST \ No newline at end of file diff --git a/desk/gub/lib/pytz/us-samoa.txt b/desk/gub/lib/pytz/us-samoa.txt new file mode 100644 index 0000000..51368c2 --- /dev/null +++ b/desk/gub/lib/pytz/us-samoa.txt @@ -0,0 +1,4 @@ +Time,Offset,Name +0001-01-01T00:00:00,+12:37,LMT +1901-12-13T20:45:52,-12:37,LMT +1911-01-01T11:22:48,-11:00,SST \ No newline at end of file diff --git a/desk/gub/lib/pytz/utc.txt b/desk/gub/lib/pytz/utc.txt new file mode 100644 index 0000000..69cda9e --- /dev/null +++ b/desk/gub/lib/pytz/utc.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,UTC \ No newline at end of file diff --git a/desk/gub/lib/pytz/version.txt b/desk/gub/lib/pytz/version.txt new file mode 100644 index 0000000..c18714f --- /dev/null +++ b/desk/gub/lib/pytz/version.txt @@ -0,0 +1 @@ +2026.1.post1 \ No newline at end of file diff --git a/desk/gub/lib/pytz/w-su.txt b/desk/gub/lib/pytz/w-su.txt new file mode 100644 index 0000000..52621f4 --- /dev/null +++ b/desk/gub/lib/pytz/w-su.txt @@ -0,0 +1,80 @@ +Time,Offset,Name +0001-01-01T00:00:00,+02:30,LMT +1901-12-13T20:45:52,+02:30,MMT +1916-07-02T21:29:43,+02:31,MMT +1917-07-01T20:28:41,+03:31,MST +1917-12-27T20:28:41,+02:31,MMT +1918-05-31T19:28:41,+04:31,MDST +1918-09-15T20:28:41,+03:31,MST +1919-05-31T19:28:41,+04:31,MDST +1919-07-01T00:00:00,+04:00,MSD +1919-08-15T20:00:00,+03:00,MSK +1921-02-14T20:00:00,+04:00,MSD +1921-03-20T19:00:00,+05:00,+05 +1921-08-31T19:00:00,+04:00,MSD +1921-09-30T20:00:00,+03:00,MSK +1922-09-30T21:00:00,+02:00,EET +1930-06-20T22:00:00,+03:00,MSK +1981-03-31T21:00:00,+04:00,MSD +1981-09-30T20:00:00,+03:00,MSK +1982-03-31T21:00:00,+04:00,MSD +1982-09-30T20:00:00,+03:00,MSK +1983-03-31T21:00:00,+04:00,MSD +1983-09-30T20:00:00,+03:00,MSK +1984-03-31T21:00:00,+04:00,MSD +1984-09-29T23:00:00,+03:00,MSK +1985-03-30T23:00:00,+04:00,MSD +1985-09-28T23:00:00,+03:00,MSK +1986-03-29T23:00:00,+04:00,MSD +1986-09-27T23:00:00,+03:00,MSK +1987-03-28T23:00:00,+04:00,MSD +1987-09-26T23:00:00,+03:00,MSK +1988-03-26T23:00:00,+04:00,MSD +1988-09-24T23:00:00,+03:00,MSK +1989-03-25T23:00:00,+04:00,MSD +1989-09-23T23:00:00,+03:00,MSK +1990-03-24T23:00:00,+04:00,MSD +1990-09-29T23:00:00,+03:00,MSK +1991-03-30T23:00:00,+03:00,EEST +1991-09-29T00:00:00,+02:00,EET +1992-01-19T00:00:00,+03:00,MSK +1992-03-28T23:00:00,+04:00,MSD +1992-09-26T23:00:00,+03:00,MSK +1993-03-27T23:00:00,+04:00,MSD +1993-09-25T23:00:00,+03:00,MSK +1994-03-26T23:00:00,+04:00,MSD +1994-09-24T23:00:00,+03:00,MSK +1995-03-25T23:00:00,+04:00,MSD +1995-09-23T23:00:00,+03:00,MSK +1996-03-30T23:00:00,+04:00,MSD +1996-10-26T23:00:00,+03:00,MSK +1997-03-29T23:00:00,+04:00,MSD +1997-10-25T23:00:00,+03:00,MSK +1998-03-28T23:00:00,+04:00,MSD +1998-10-24T23:00:00,+03:00,MSK +1999-03-27T23:00:00,+04:00,MSD +1999-10-30T23:00:00,+03:00,MSK +2000-03-25T23:00:00,+04:00,MSD +2000-10-28T23:00:00,+03:00,MSK +2001-03-24T23:00:00,+04:00,MSD +2001-10-27T23:00:00,+03:00,MSK +2002-03-30T23:00:00,+04:00,MSD +2002-10-26T23:00:00,+03:00,MSK +2003-03-29T23:00:00,+04:00,MSD +2003-10-25T23:00:00,+03:00,MSK +2004-03-27T23:00:00,+04:00,MSD +2004-10-30T23:00:00,+03:00,MSK +2005-03-26T23:00:00,+04:00,MSD +2005-10-29T23:00:00,+03:00,MSK +2006-03-25T23:00:00,+04:00,MSD +2006-10-28T23:00:00,+03:00,MSK +2007-03-24T23:00:00,+04:00,MSD +2007-10-27T23:00:00,+03:00,MSK +2008-03-29T23:00:00,+04:00,MSD +2008-10-25T23:00:00,+03:00,MSK +2009-03-28T23:00:00,+04:00,MSD +2009-10-24T23:00:00,+03:00,MSK +2010-03-27T23:00:00,+04:00,MSD +2010-10-30T23:00:00,+03:00,MSK +2011-03-26T23:00:00,+04:00,MSK +2014-10-25T22:00:00,+03:00,MSK \ No newline at end of file diff --git a/desk/gub/lib/pytz/wet.txt b/desk/gub/lib/pytz/wet.txt new file mode 100644 index 0000000..9c53c8f --- /dev/null +++ b/desk/gub/lib/pytz/wet.txt @@ -0,0 +1,225 @@ +Time,Offset,Name +1912-01-01T00:00:00,+00:00,WET +1916-06-17T23:00:00,+01:00,WEST +1916-11-01T00:00:00,+00:00,WET +1917-03-01T00:00:00,+01:00,WEST +1917-10-14T23:00:00,+00:00,WET +1918-03-01T00:00:00,+01:00,WEST +1918-10-14T23:00:00,+00:00,WET +1919-03-01T00:00:00,+01:00,WEST +1919-10-14T23:00:00,+00:00,WET +1920-03-01T00:00:00,+01:00,WEST +1920-10-14T23:00:00,+00:00,WET +1921-03-01T00:00:00,+01:00,WEST +1921-10-14T23:00:00,+00:00,WET +1924-04-16T23:00:00,+01:00,WEST +1924-10-04T23:00:00,+00:00,WET +1926-04-17T23:00:00,+01:00,WEST +1926-10-02T23:00:00,+00:00,WET +1927-04-09T23:00:00,+01:00,WEST +1927-10-01T23:00:00,+00:00,WET +1928-04-14T23:00:00,+01:00,WEST +1928-10-06T23:00:00,+00:00,WET +1929-04-20T23:00:00,+01:00,WEST +1929-10-05T23:00:00,+00:00,WET +1931-04-18T23:00:00,+01:00,WEST +1931-10-03T23:00:00,+00:00,WET +1932-04-02T23:00:00,+01:00,WEST +1932-10-01T23:00:00,+00:00,WET +1934-04-07T23:00:00,+01:00,WEST +1934-10-06T23:00:00,+00:00,WET +1935-03-30T23:00:00,+01:00,WEST +1935-10-05T23:00:00,+00:00,WET +1936-04-18T23:00:00,+01:00,WEST +1936-10-03T23:00:00,+00:00,WET +1937-04-03T23:00:00,+01:00,WEST +1937-10-02T23:00:00,+00:00,WET +1938-03-26T23:00:00,+01:00,WEST +1938-10-01T23:00:00,+00:00,WET +1939-04-15T23:00:00,+01:00,WEST +1939-11-18T23:00:00,+00:00,WET +1940-02-24T23:00:00,+01:00,WEST +1940-10-07T23:00:00,+00:00,WET +1941-04-05T23:00:00,+01:00,WEST +1941-10-05T23:00:00,+00:00,WET +1942-03-14T23:00:00,+01:00,WEST +1942-04-25T22:00:00,+02:00,WEMT +1942-08-15T22:00:00,+01:00,WEST +1942-10-24T23:00:00,+00:00,WET +1943-03-13T23:00:00,+01:00,WEST +1943-04-17T22:00:00,+02:00,WEMT +1943-08-28T22:00:00,+01:00,WEST +1943-10-30T23:00:00,+00:00,WET +1944-03-11T23:00:00,+01:00,WEST +1944-04-22T22:00:00,+02:00,WEMT +1944-08-26T22:00:00,+01:00,WEST +1944-10-28T23:00:00,+00:00,WET +1945-03-10T23:00:00,+01:00,WEST +1945-04-21T22:00:00,+02:00,WEMT +1945-08-25T22:00:00,+01:00,WEST +1945-10-27T23:00:00,+00:00,WET +1946-04-06T23:00:00,+01:00,WEST +1946-10-05T23:00:00,+00:00,WET +1947-04-06T02:00:00,+01:00,WEST +1947-10-05T02:00:00,+00:00,WET +1948-04-04T02:00:00,+01:00,WEST +1948-10-03T02:00:00,+00:00,WET +1949-04-03T02:00:00,+01:00,WEST +1949-10-02T02:00:00,+00:00,WET +1950-04-02T02:00:00,+01:00,WEST +1950-10-01T02:00:00,+00:00,WET +1951-04-01T02:00:00,+01:00,WEST +1951-10-07T02:00:00,+00:00,WET +1952-04-06T02:00:00,+01:00,WEST +1952-10-05T02:00:00,+00:00,WET +1953-04-05T02:00:00,+01:00,WEST +1953-10-04T02:00:00,+00:00,WET +1954-04-04T02:00:00,+01:00,WEST +1954-10-03T02:00:00,+00:00,WET +1955-04-03T02:00:00,+01:00,WEST +1955-10-02T02:00:00,+00:00,WET +1956-04-01T02:00:00,+01:00,WEST +1956-10-07T02:00:00,+00:00,WET +1957-04-07T02:00:00,+01:00,WEST +1957-10-06T02:00:00,+00:00,WET +1958-04-06T02:00:00,+01:00,WEST +1958-10-05T02:00:00,+00:00,WET +1959-04-05T02:00:00,+01:00,WEST +1959-10-04T02:00:00,+00:00,WET +1960-04-03T02:00:00,+01:00,WEST +1960-10-02T02:00:00,+00:00,WET +1961-04-02T02:00:00,+01:00,WEST +1961-10-01T02:00:00,+00:00,WET +1962-04-01T02:00:00,+01:00,WEST +1962-10-07T02:00:00,+00:00,WET +1963-04-07T02:00:00,+01:00,WEST +1963-10-06T02:00:00,+00:00,WET +1964-04-05T02:00:00,+01:00,WEST +1964-10-04T02:00:00,+00:00,WET +1965-04-04T02:00:00,+01:00,WEST +1965-10-03T02:00:00,+00:00,WET +1966-04-03T02:00:00,+01:00,WEST +1966-10-02T02:00:00,+01:00,CET +1976-09-26T00:00:00,+00:00,WET +1977-03-27T00:00:00,+01:00,WEST +1977-09-25T00:00:00,+00:00,WET +1978-04-02T01:00:00,+01:00,WEST +1978-10-01T01:00:00,+00:00,WET +1979-04-01T01:00:00,+01:00,WEST +1979-09-30T01:00:00,+00:00,WET +1980-04-06T01:00:00,+01:00,WEST +1980-09-28T01:00:00,+00:00,WET +1981-03-29T00:00:00,+01:00,WEST +1981-09-27T00:00:00,+00:00,WET +1982-03-28T00:00:00,+01:00,WEST +1982-09-26T00:00:00,+00:00,WET +1983-03-27T00:00:00,+01:00,WEST +1983-09-25T00:00:00,+00:00,WET +1984-03-25T00:00:00,+01:00,WEST +1984-09-30T00:00:00,+00:00,WET +1985-03-31T00:00:00,+01:00,WEST +1985-09-29T00:00:00,+00:00,WET +1986-03-30T01:00:00,+01:00,WEST +1986-09-28T01:00:00,+00:00,WET +1987-03-29T01:00:00,+01:00,WEST +1987-09-27T01:00:00,+00:00,WET +1988-03-27T01:00:00,+01:00,WEST +1988-09-25T01:00:00,+00:00,WET +1989-03-26T01:00:00,+01:00,WEST +1989-09-24T01:00:00,+00:00,WET +1990-03-25T01:00:00,+01:00,WEST +1990-09-30T01:00:00,+00:00,WET +1991-03-31T01:00:00,+01:00,WEST +1991-09-29T01:00:00,+00:00,WET +1992-03-29T01:00:00,+01:00,WEST +1992-09-27T01:00:00,+01:00,CET +1993-03-28T01:00:00,+02:00,CEST +1993-09-26T01:00:00,+01:00,CET +1994-03-27T01:00:00,+02:00,CEST +1994-09-25T01:00:00,+01:00,CET +1995-03-26T01:00:00,+02:00,CEST +1995-09-24T01:00:00,+01:00,CET +1996-03-31T01:00:00,+01:00,WEST +1996-10-27T01:00:00,+00:00,WET +1997-03-30T01:00:00,+01:00,WEST +1997-10-26T01:00:00,+00:00,WET +1998-03-29T01:00:00,+01:00,WEST +1998-10-25T01:00:00,+00:00,WET +1999-03-28T01:00:00,+01:00,WEST +1999-10-31T01:00:00,+00:00,WET +2000-03-26T01:00:00,+01:00,WEST +2000-10-29T01:00:00,+00:00,WET +2001-03-25T01:00:00,+01:00,WEST +2001-10-28T01:00:00,+00:00,WET +2002-03-31T01:00:00,+01:00,WEST +2002-10-27T01:00:00,+00:00,WET +2003-03-30T01:00:00,+01:00,WEST +2003-10-26T01:00:00,+00:00,WET +2004-03-28T01:00:00,+01:00,WEST +2004-10-31T01:00:00,+00:00,WET +2005-03-27T01:00:00,+01:00,WEST +2005-10-30T01:00:00,+00:00,WET +2006-03-26T01:00:00,+01:00,WEST +2006-10-29T01:00:00,+00:00,WET +2007-03-25T01:00:00,+01:00,WEST +2007-10-28T01:00:00,+00:00,WET +2008-03-30T01:00:00,+01:00,WEST +2008-10-26T01:00:00,+00:00,WET +2009-03-29T01:00:00,+01:00,WEST +2009-10-25T01:00:00,+00:00,WET +2010-03-28T01:00:00,+01:00,WEST +2010-10-31T01:00:00,+00:00,WET +2011-03-27T01:00:00,+01:00,WEST +2011-10-30T01:00:00,+00:00,WET +2012-03-25T01:00:00,+01:00,WEST +2012-10-28T01:00:00,+00:00,WET +2013-03-31T01:00:00,+01:00,WEST +2013-10-27T01:00:00,+00:00,WET +2014-03-30T01:00:00,+01:00,WEST +2014-10-26T01:00:00,+00:00,WET +2015-03-29T01:00:00,+01:00,WEST +2015-10-25T01:00:00,+00:00,WET +2016-03-27T01:00:00,+01:00,WEST +2016-10-30T01:00:00,+00:00,WET +2017-03-26T01:00:00,+01:00,WEST +2017-10-29T01:00:00,+00:00,WET +2018-03-25T01:00:00,+01:00,WEST +2018-10-28T01:00:00,+00:00,WET +2019-03-31T01:00:00,+01:00,WEST +2019-10-27T01:00:00,+00:00,WET +2020-03-29T01:00:00,+01:00,WEST +2020-10-25T01:00:00,+00:00,WET +2021-03-28T01:00:00,+01:00,WEST +2021-10-31T01:00:00,+00:00,WET +2022-03-27T01:00:00,+01:00,WEST +2022-10-30T01:00:00,+00:00,WET +2023-03-26T01:00:00,+01:00,WEST +2023-10-29T01:00:00,+00:00,WET +2024-03-31T01:00:00,+01:00,WEST +2024-10-27T01:00:00,+00:00,WET +2025-03-30T01:00:00,+01:00,WEST +2025-10-26T01:00:00,+00:00,WET +2026-03-29T01:00:00,+01:00,WEST +2026-10-25T01:00:00,+00:00,WET +2027-03-28T01:00:00,+01:00,WEST +2027-10-31T01:00:00,+00:00,WET +2028-03-26T01:00:00,+01:00,WEST +2028-10-29T01:00:00,+00:00,WET +2029-03-25T01:00:00,+01:00,WEST +2029-10-28T01:00:00,+00:00,WET +2030-03-31T01:00:00,+01:00,WEST +2030-10-27T01:00:00,+00:00,WET +2031-03-30T01:00:00,+01:00,WEST +2031-10-26T01:00:00,+00:00,WET +2032-03-28T01:00:00,+01:00,WEST +2032-10-31T01:00:00,+00:00,WET +2033-03-27T01:00:00,+01:00,WEST +2033-10-30T01:00:00,+00:00,WET +2034-03-26T01:00:00,+01:00,WEST +2034-10-29T01:00:00,+00:00,WET +2035-03-25T01:00:00,+01:00,WEST +2035-10-28T01:00:00,+00:00,WET +2036-03-30T01:00:00,+01:00,WEST +2036-10-26T01:00:00,+00:00,WET +2037-03-29T01:00:00,+01:00,WEST +2037-10-25T01:00:00,+00:00,WET \ No newline at end of file diff --git a/desk/gub/lib/pytz/zulu.txt b/desk/gub/lib/pytz/zulu.txt new file mode 100644 index 0000000..69cda9e --- /dev/null +++ b/desk/gub/lib/pytz/zulu.txt @@ -0,0 +1,2 @@ +Time,Offset,Name +0001-01-01T00:00:00,+00:00,UTC \ No newline at end of file diff --git a/desk/gub/lib/s3.hoon b/desk/gub/lib/s3.hoon new file mode 100644 index 0000000..c5f4c27 --- /dev/null +++ b/desk/gub/lib/s3.hoon @@ -0,0 +1,293 @@ +:: lib/s3: Pure S3 (AWS Signature Version 4) functions +:: +:: Cryptographic signing, request building, and response parsing +:: for AWS S3-compatible storage (DigitalOcean Spaces, etc.) +:: +:: Byte order note: Hoon cords are stored little-endian (LSB first), but +:: cryptographic functions expect big-endian (MSB first). Use (swp 3 ...) +:: to swap byte order before passing cords to HMAC/SHA functions. HMAC +:: output is already big-endian, so only swap it when using as message. +:: +|% +:: HMAC-SHA256 with big-endian inputs +:: Expects key and message in big-endian format (use (swp 3 ...) on cords) +:: +++ hmac-sha256 + |= [key=@ msg=@] + ^- @ + %+ hmac-sha256l:hmac:crypto + [(met 3 key) key] + [(met 3 msg) msg] +:: Derive AWS signing key via nested HMAC operations +:: Implements AWS4-HMAC-SHA256 key derivation +:: +++ get-signature-key + |= [key=@t date-stamp=@t region=@t service=@t] + ^- @ + =/ aws4-key=@ (cat 3 'AWS4' key) + =/ k-date=@ (hmac-sha256 (swp 3 aws4-key) (swp 3 date-stamp)) + =/ k-region=@ (hmac-sha256 k-date (swp 3 region)) + =/ k-service=@ (hmac-sha256 k-region (swp 3 service)) + (hmac-sha256 k-service (swp 3 'aws4_request')) +:: Convert hash atom to lowercase hexadecimal string +:: Renders 32-byte hash in MSB-first order +:: +++ hash-to-hex + |= hash=@ + ^- @t + =/ hex-chars "0123456789abcdef" + =/ result=tape "" + =/ byte-count=@ud 32 :: SHA-256 is 32 bytes + =/ idx=@ud 0 + |- + ?: =(idx byte-count) + (crip result) + :: Extract from MSB (byte 31) down to LSB (byte 0) + =/ byte=@ (cut 3 [(sub (dec byte-count) idx) 1] hash) + =/ hi=@ud (div byte 16) + =/ lo=@ud (mod byte 16) + =/ hi-char=@tD (snag hi hex-chars) + =/ lo-char=@tD (snag lo hex-chars) + $(idx +(idx), result (weld result ~[hi-char lo-char])) +:: SHA256 hash returning lowercase hexadecimal string +:: Swaps cord bytes to big-endian before hashing +:: +++ sha256-hash + |= data=@ + ^- @t + %- hash-to-hex + %- sha-256:sha + (swp 3 data) +:: Format date as YYYYMMDD +:: +++ format-date-stamp + |= now=@da + ^- @t + =/ date (yore now) + =/ y=tape (a-co:co y.date) + =/ m=tape ?:((lth m.date 10) (weld "0" (a-co:co m.date)) (a-co:co m.date)) + =/ d=tape ?:((lth d.t.date 10) (weld "0" (a-co:co d.t.date)) (a-co:co d.t.date)) + (crip (weld y (weld m d))) +:: Format date as YYYYMMDDTHHMMSSZ +:: +++ format-amz-date + |= now=@da + ^- @t + =/ date (yore now) + =/ y=tape (a-co:co y.date) + =/ mon=tape ?:((lth m.date 10) (weld "0" (a-co:co m.date)) (a-co:co m.date)) + =/ d=tape ?:((lth d.t.date 10) (weld "0" (a-co:co d.t.date)) (a-co:co d.t.date)) + =/ h=tape ?:((lth h.t.date 10) (weld "0" (a-co:co h.t.date)) (a-co:co h.t.date)) + =/ min=tape ?:((lth m.t.date 10) (weld "0" (a-co:co m.t.date)) (a-co:co m.t.date)) + =/ s=tape ?:((lth s.t.date 10) (weld "0" (a-co:co s.t.date)) (a-co:co s.t.date)) + (crip (weld y (weld mon (weld d (weld "T" (weld h (weld min (weld s "Z")))))))) +:: Build S3 URL with optional query string +:: +++ build-url + |= [endpoint=@t bucket=@t object-key=@t query=(unit @t)] + ^- @t + =/ base=tape + %+ weld "https://" + %+ weld (trip endpoint) + %+ weld "/" + %+ weld (trip bucket) + "/" + =/ path=tape + ?: =(object-key '') + "" + (trip object-key) + =/ full-path=tape (weld base path) + ?~ query + (crip full-path) + (crip (weld full-path (weld "?" (trip u.query)))) +:: Build HTTP headers for S3 request +:: +++ build-headers + |= [method=@t payload-hash=@t amz-date=@t authorization=@t] + ^- (list [@t @t]) + =/ base-headers=(list [@t @t]) + :~ ['x-amz-content-sha256' payload-hash] + ['x-amz-date' amz-date] + ['authorization' authorization] + == + ?: =(method 'PUT') + [[%content-type 'text/plain'] base-headers] + base-headers +:: Build query string for LIST operation +:: +++ build-list-query + |= prefix=@t + ^- @t + ?: =(prefix '') + 'list-type=2' + =/ encoded-prefix=tape (en-urlt:html (trip prefix)) + (crip "list-type=2&prefix={encoded-prefix}") +:: Build AWS Signature V4 authorization +:: Supports GET, PUT, DELETE, and LIST operations +:: +++ build-signature + |= $: method=@t + access-key=@t + secret-key=@t + region=@t + endpoint=@t + bucket=@t + object-key=@t + query-string=@t + content=(unit @t) + now=@da + == + ^- [amz-date=@t payload-hash=@t authorization=@t] + :: Hash request payload (empty for GET/DELETE) + =/ payload-hash=@t (sha256-hash (fall content '')) + :: Format ISO8601 timestamp and date stamp + =/ amz-date=@t (format-amz-date now) + =/ date-stamp=@t (format-date-stamp now) + :: Build canonical request + =/ canonical-uri=@t + ?: =(object-key '') + (crip "/{(trip bucket)}/") + (crip "/{(trip bucket)}/{(trip object-key)}") + =/ canonical-querystring=@t query-string + :: Headers vary by method: PUT includes content-type + =/ [canonical-headers=@t signed-headers=@t] + ?: =(method 'PUT') + :- %+ rap 3 + :~ 'content-type:text/plain' + '\0a' + 'host:' + endpoint + '\0a' + 'x-amz-content-sha256:' + payload-hash + '\0a' + 'x-amz-date:' + amz-date + '\0a' + == + 'content-type;host;x-amz-content-sha256;x-amz-date' + :- %+ rap 3 + :~ 'host:' + endpoint + '\0a' + 'x-amz-content-sha256:' + payload-hash + '\0a' + 'x-amz-date:' + amz-date + '\0a' + == + 'host;x-amz-content-sha256;x-amz-date' + =/ canonical-request=@t + %+ rap 3 + :~ method '\0a' + canonical-uri '\0a' + canonical-querystring '\0a' + canonical-headers '\0a' + signed-headers '\0a' + payload-hash + == + :: Create string to sign + =/ algorithm=@t 'AWS4-HMAC-SHA256' + =/ credential-scope=@t + (crip "{(trip date-stamp)}/{(trip region)}/s3/aws4_request") + =/ canonical-request-hash=@t (sha256-hash canonical-request) + =/ string-to-sign=@t + %+ rap 3 + :~ algorithm '\0a' + amz-date '\0a' + credential-scope '\0a' + canonical-request-hash + == + :: Calculate signature + =/ signing-key=@ (get-signature-key secret-key date-stamp region 's3') + =/ signature-bytes=@ (hmac-sha256 signing-key (swp 3 string-to-sign)) + =/ signature=@t (hash-to-hex signature-bytes) + :: Build authorization header + =/ authorization=@t + %+ rap 3 + :~ algorithm + ' Credential=' + access-key + '/' + credential-scope + ', SignedHeaders=' + signed-headers + ', Signature=' + signature + == + [amz-date payload-hash authorization] +:: Parse S3 LIST XML response to extract object keys +:: Returns list of file keys from elements +:: +++ parse-list-response + |= xml=@t + ^- (list @t) + =/ xml-text=tape (trip xml) + =| keys=(list @t) + |- + ^- (list @t) + =/ key-start (find "" xml-text) + ?~ key-start (flop keys) + =/ rest=tape (slag (add u.key-start 5) xml-text) + =/ key-end (find "" rest) + ?~ key-end (flop keys) + =/ key=tape (scag u.key-end rest) + %= $ + xml-text (slag (add u.key-end 6) rest) + keys [(crip key) keys] + == +:: Extract Content-Type from HTTP response headers +:: +++ extract-content-type + |= response-headers=(list [key=@t value=@t]) + ^- (unit @t) + |- ^- (unit @t) + ?~ response-headers ~ + ?: =(key.i.response-headers 'content-type') + `value.i.response-headers + $(response-headers t.response-headers) +:: Extract filename from S3 key (everything after last /) +:: +++ extract-filename + |= s3-key=@t + ^- @ta + =/ key-text=tape (trip s3-key) + =/ last-slash=(unit @ud) (find "/" (flop key-text)) + ?~ last-slash + s3-key + (crip (slag (sub (lent key-text) u.last-slash) key-text)) +:: Convert path to S3 key (no leading slash) +:: +++ path-to-s3-key + |= pax=path + ^- @t + ?~ pax '' + =/ parts=(list tape) + %+ turn pax + |=(p=@ta (trip p)) + (crip (roll parts |=([a=tape b=tape] ?~(b a "{b}/{a}")))) +:: +:: Helper: collect all files from a ball directory recursively +:: +++ collect-files-recursive + |= [=ball:tarball current-path=path] + ^- (list [path @ta]) + :: Get files at current path + =/ files=(list @ta) (~(lis ba:tarball ball) current-path) + =/ files-with-path=(list [path @ta]) + %+ turn files + |=(f=@ta [current-path f]) + :: Get subdirectories + =/ current-ball=ball:tarball (~(dip ba:tarball ball) current-path) + =/ subdirs=(list @ta) ~(tap in ~(key by dir.current-ball)) + :: Recursively collect from subdirectories + =/ subdir-files=(list [path @ta]) + |- ^- (list [path @ta]) + ?~ subdirs ~ + =/ subdir-path=path (snoc current-path i.subdirs) + =/ subdir-results=(list [path @ta]) + (collect-files-recursive ball subdir-path) + (weld subdir-results $(subdirs t.subdirs)) + (weld files-with-path subdir-files) +-- diff --git a/desk/gub/lib/seed-phrases.hoon b/desk/gub/lib/seed-phrases.hoon new file mode 100644 index 0000000..e9d11e0 --- /dev/null +++ b/desk/gub/lib/seed-phrases.hoon @@ -0,0 +1,113 @@ +:: Seed Phrases Library +:: Core functionality for BIP39 seed phrase management and validation +:: +/< dict /lib/bip39-english.hoon +/< bip39 /lib/bip39.hoon +|% +++ c + |% + +$ eny ?(%128 %160 %192 %224 %256) + +$ wor ?(%12 %15 %18 %21 %24) + -- +:: +++ gen-seed + |= [ent=@ bits=eny:c] + ^- cord + =/ entropy=@ (end [0 bits] ent) + =/ byte-count=@ud (div bits 8) + =/ entropy-bytes=byts [byte-count entropy] + =/ result=tape (from-entropy:bip39 entropy-bytes) + (crip result) +:: +++ gen-unique + |= [ent=@ bits=eny:c existing=(set cord)] + ^- cord + =/ seed=cord (gen-seed ent bits) + ?. (~(has in existing) seed) + seed + $(ent (shax ent)) +:: BIP39 Validation Functions +:: +++ word-count + |= seed=cord + ^- @ud + (lent (split-words (trip seed))) +:: +++ word-count-to-checksum-bits + |= wc=wor:c + ^- @ud + (div wc 3) +:: +++ word-count-to-entropy-bytes + |= wc=wor:c + ^- @ud + :: BIP39: entropy bytes = (word_count * 4) / 3 + :: 12 words -> 16 bytes, 15 -> 20, 18 -> 24, 21 -> 28, 24 -> 32 + (div (mul wc 4) 3) +:: +++ split-words + |= input=tape + ^- wall + (scan input (more ace (star (shim 'a' 'z')))) +:: +++ find-word-index + =| index=@ud + |= word=tape + ^- (unit @ud) + ?~ dict ~ + ?: =(word i.dict) + `index + $(dict t.dict, index +(index)) +:: +++ all-words-to-indices + |= words=(list tape) + ^- (list (unit @ud)) + %+ turn words + |= word=tape + (find-word-index word) +:: +++ indices-to-full-entropy + |= indices=(list (unit @ud)) + ^- (unit @) + =| result=@ + |- + ?~ indices `result + ?~ i.indices ~ + =/ index-11-bits=@ (mod u.i.indices 2.048) + =/ new-result=@ (add (lsh [0 11] result) index-11-bits) + $(indices t.indices, result new-result) +:: +++ verify-checksum + |= [entropy-bits=@ checksum-bits=@ wc=wor:c] + ^- ? + =/ entropy-bytes=@ud (word-count-to-entropy-bytes wc) + =/ checksum-size=@ud (word-count-to-checksum-bits wc) + =/ hash=@ (sha-256l:sha entropy-bytes entropy-bits) + =/ expected-checksum=@ (rsh [0 (sub 256 checksum-size)] hash) + =(checksum-bits expected-checksum) +:: +++ words-to-entropy-pair + |= words=(list tape) + ^- (unit [entropy=@ checksum=@]) + =/ all-indices=(list (unit @ud)) (all-words-to-indices words) + =/ full-bits=(unit @) (indices-to-full-entropy all-indices) + ?~ full-bits ~ + =/ wc=(unit wor:c) (mole |.(;;(wor:c (lent words)))) + ?~ wc ~ + =/ checksum-bits=@ud (word-count-to-checksum-bits u.wc) + =/ extracted-entropy=@ (rsh [0 checksum-bits] u.full-bits) + =/ extracted-checksum=@ (end [0 checksum-bits] u.full-bits) + ?. (verify-checksum extracted-entropy extracted-checksum u.wc) + ~ + `[extracted-entropy extracted-checksum] +:: +++ validate-seed-phrase + |= seed=cord + ^- ? + =/ words=(list tape) (split-words (trip seed)) + =/ wc=(unit wor:c) (mole |.(;;(wor:c (lent words)))) + ?~ wc %.n + =/ entropy-pair=(unit [entropy=@ checksum=@]) + (words-to-entropy-pair words) + ?=(^ entropy-pair) +-- diff --git a/desk/gub/lib/server.hoon b/desk/gub/lib/server.hoon new file mode 100644 index 0000000..f5cf8f0 --- /dev/null +++ b/desk/gub/lib/server.hoon @@ -0,0 +1,159 @@ +=, eyre +|% ++$ request-line + $: [ext=(unit @ta) site=(list @t)] + args=(list [key=@t value=@t]) + == +:: +parse-request-line: take a cord and parse out a url +:: +++ parse-request-line + |= url=@t + ^- request-line + (fall (rush url ;~(plug apat:de-purl:html yque:de-purl:html)) [[~ ~] ~]) +:: +++ manx-to-octs + |= man=manx + ^- octs + (as-octt:mimes:html (en-xml:html man)) +:: +++ json-to-octs + |= jon=json + ^- octs + (as-octs:mimes:html (en:json:html jon)) +:: +++ app + |% + :: + :: +require-authorization: + :: redirect to the login page when unauthenticated + :: otherwise call handler on inbound request + :: + ++ require-authorization + |= $: =inbound-request:eyre + handler=$-(inbound-request:eyre simple-payload:http) + == + ^- simple-payload:http + :: + ?: authenticated.inbound-request + ~! this + ~! +:*handler + (handler inbound-request) + :: + =- [[307 ['location' -]~] ~] + %^ cat 3 + '/~/login?redirect=' + url.request.inbound-request + :: + :: +require-authorization-simple: + :: redirect to the login page when unauthenticated + :: otherwise pass through simple-paylod + :: + ++ require-authorization-simple + |= [=inbound-request:eyre =simple-payload:http] + ^- simple-payload:http + :: + ?: authenticated.inbound-request + ~! this + simple-payload + :: + =- [[307 ['location' -]~] ~] + %^ cat 3 + '/~/login?redirect=' + url.request.inbound-request + :: + ++ give-simple-payload + |= [eyre-id=@ta =simple-payload:http] + ^- (list card:agent:gall) + =/ header-cage + [%http-response-header !>(response-header.simple-payload)] + =/ data-cage + [%http-response-data !>(data.simple-payload)] + :~ [%give %fact ~[/http-response/[eyre-id]] header-cage] + [%give %fact ~[/http-response/[eyre-id]] data-cage] + [%give %kick ~[/http-response/[eyre-id]] ~] + == + -- +++ gen + |% + :: + ++ max-1-da ['cache-control' 'max-age=86400'] + ++ max-1-wk ['cache-control' 'max-age=604800'] + :: + ++ html-response + =| cache=? + |= =octs + ^- simple-payload:http + :_ `octs + [200 [['content-type' 'text/html'] ?:(cache [max-1-wk ~] ~)]] + :: + ++ css-response + =| cache=? + |= =octs + ^- simple-payload:http + :_ `octs + [200 [['content-type' 'text/css'] ?:(cache [max-1-wk ~] ~)]] + :: + ++ js-response + =| cache=? + |= =octs + ^- simple-payload:http + :_ `octs + [200 [['content-type' 'text/javascript'] ?:(cache [max-1-wk ~] ~)]] + :: + ++ png-response + =| cache=? + |= =octs + ^- simple-payload:http + :_ `octs + [200 [['content-type' 'image/png'] ?:(cache [max-1-wk ~] ~)]] + :: + ++ svg-response + =| cache=? + |= =octs + ^- simple-payload:http + :_ `octs + [200 [['content-type' 'image/svg+xml'] ?:(cache [max-1-wk ~] ~)]] + :: + ++ ico-response + |= =octs + ^- simple-payload:http + [[200 [['content-type' 'image/x-icon'] max-1-wk ~]] `octs] + :: + ++ woff2-response + =| cache=? + |= =octs + ^- simple-payload:http + [[200 [['content-type' 'font/woff2'] max-1-wk ~]] `octs] + :: + ++ json-response + =| cache=_| + |= =json + ^- simple-payload:http + :_ `(json-to-octs json) + [200 [['content-type' 'application/json'] ?:(cache [max-1-da ~] ~)]] + :: + ++ manx-response + =| cache=_| + |= man=manx + ^- simple-payload:http + :_ `(manx-to-octs man) + [200 [['content-type' 'text/html'] ?:(cache [max-1-da ~] ~)]] + :: + ++ not-found + ^- simple-payload:http + [[404 ~] ~] + :: + ++ login-redirect + |= =request:http + ^- simple-payload:http + =- [[307 ['location' -]~] ~] + %^ cat 3 + '/~/login?redirect=' + url.request + :: + ++ redirect + |= redirect=cord + ^- simple-payload:http + [[307 ['location' redirect]~] ~] + -- +-- diff --git a/desk/gub/lib/sur/asn1.hoon b/desk/gub/lib/sur/asn1.hoon new file mode 100644 index 0000000..348c07e --- /dev/null +++ b/desk/gub/lib/sur/asn1.hoon @@ -0,0 +1,80 @@ +:: |asn1: small selection of types and constants for ASN.1 +:: +:: A minimal representation of some basic ASN.1 types, +:: created to support PKCS keys, digests, and cert requests. +:: +^? +|% +:: +bespoke:asn1: context-specific, generic ASN.1 tag type +:: +:: Note that *explicit* implies *constructed* (ie, bit 5 is set in DER). +:: ++$ bespoke + :: imp: & is implicit, | is explicit + :: tag: 5 bits for the custom tag number + :: + [imp=? tag=@ud] +:: +spec:asn1: minimal representations of basic ASN.1 types +:: ++$ spec + $% :: %int: arbitrary-sized, unsigned integers + :: + :: Unsigned integers, represented as having a positive sign. + :: Negative integers would be two's complement in DER, + :: but we don't need them. + :: + [%int int=@u] + :: %bit: very minimal support for bit strings + :: + :: Specifically, values must already be padded and byte-aligned. + :: len: bitwidth + :: bit: data + :: + [%bit len=@ud bit=@ux] + :: %oct: octets in little-endian byte order + :: + :: len: bytewidth + :: bit: data + :: + [%oct len=@ud oct=@ux] + :: %nul: fully supported! + :: + [%nul ~] + :: %obj: object identifiers, pre-packed + :: + :: Object identifiers are technically a sequence of integers, + :: represented here in their already-encoded form. + :: + [%obj obj=@ux] + :: %seq: a list of specs + :: + [%seq seq=(list spec)] + :: %set: a logical set of specs + :: + :: Implemented here as a list for the sake of simplicity. + :: must be already deduplicated and sorted! + :: + [%set set=(list spec)] + :: %con: context-specific + :: + :: General support for context-specific tags. + :: bes: custom tag number, implicit or explicit + :: con: already-encoded bytes + :: + [%con bes=bespoke con=(list @D)] + == +:: |obj:asn1: constant object ids, pre-encoded +:: +++ obj + ^? + |% :: rfc4055 + ++ sha-256 0x1.0204.0365.0148.8660 :: 2.16.840.1.101.3.4.2.1 + ++ rsa 0x1.0101.0df7.8648.862a :: 1.2.840.113549.1.1.1 + ++ rsa-sha-256 0xb.0101.0df7.8648.862a :: 1.2.840.113549.1.1.11 + :: rfc2985 + ++ csr-ext 0xe.0901.0df7.8648.862a :: 1.2.840.113549.1.9.14 + :: rfc3280 + ++ sub-alt 0x11.1d55 :: 2.5.29.17 + -- +-- + diff --git a/desk/gub/lib/sur/bitcoin.hoon b/desk/gub/lib/sur/bitcoin.hoon new file mode 100644 index 0000000..6136314 --- /dev/null +++ b/desk/gub/lib/sur/bitcoin.hoon @@ -0,0 +1,202 @@ +:: lib/sur/bitcoin.hoon +:: Bitcoin data types (network, hexb, tx, block, psbt, ...) +:: +:: chyg: whether account is (non-)change. 0 or 1 +:: bytc: "btc-byts" with dat cast to @ux +|% ++$ network + $+ btc-network + ?(%main %testnet %regtest) +:: ++$ hexb + $+ btc-hexb + [wid=@ dat=@ux] :: hex byts +:: ++$ bits + $+ btc-bits + [wid=@ dat=@ub] +:: ++$ xpub + $+ btc-xpub + @ta +:: ++$ address + $+ btc-address + $% [%base58 @uc] + [%bech32 cord] + == +:: ++$ fprint + $+ btc-fprint + hexb +:: ++$ bipt + $+ btc-bipt + $?(%44 %49 %84) +:: ++$ chyg + $+ btc-chyg + $?(%0 %1) +:: ++$ idx + $+ btc-idx + @ud +:: ++$ hdkey + $+ btc-hdkey + [=fprint pubkey=hexb =network =bipt =chyg =idx] +:: ++$ sats + $+ btc-sats + @ud +:: ++$ vbytes + $+ btc-vbytes + @ud +:: ++$ txid + $+ btc-txid + @ux +:: ++$ utxo + $+ btc-utxo + [pos=@ =txid height=@ value=sats recvd=(unit @da)] +:: +++ address-info + $: =address + confirmed-value=sats + unconfirmed-value=sats + utxos=(set utxo) + == +:: +++ tx + =< tx + |% + +$ tx + $+ btc-tx + [id=txid dataw] + :: + +$ dataw + $+ btc-tx-data-witness + $: is=(list inputw) + os=(list output) + locktime=@ud + nversion=@ud + segwit=(unit @ud) + == + :: + +$ data + $+ btc-tx-data + $: is=(list input) + os=(list output) + locktime=@ud + nversion=@ud + segwit=(unit @ud) + == + :: + +$ in-val + $+ btc-input-value + $: =txid + pos=@ud + =address + == + :: + +$ out-val + $+ btc-output-value + $: =txid + pos=@ud + =address + value=sats + == + :: included: whether tx is in the mempool or blockchain + :: + +$ info + $+ btc-tx-info + $: included=? + =txid + confs=@ud + recvd=(unit @da) + inputs=(list in-val) + outputs=(list out-val) + == + :: + +$ input + $+ btc-tx-input + $: =txid + pos=@ud + sequence=hexb + script-sig=(unit hexb) + pubkey=(unit hexb) + == + :: + +$ inputw + $+ btc-tx-input-witness + [=witness input] + :: + +$ output + $+ btc-tx-output + $: script-pubkey=hexb + value=sats + == + :: + +$ witness + $+ btc-tx-witness + (list hexb) + -- +++ block + =< block + |% + +$ id + $+ btc-block-id + [=hax =num] + :: + +$ hax + $+ btc-block-hax + @ux + :: + +$ num + $+ btc-block-num + @ud + :: + +$ block + $+ btc-block + $: =hax + reward=@ud + height=@ud + txs=(list tx) + == + -- +++ psbt + |% + +$ base64 + $+ btc-psbt-base64 + cord + :: + +$ in + $+ btc-psbt-input + [=utxo rawtx=hexb =hdkey] + :: + +$ out + $+ btc-psbt-output + [=address hk=(unit hdkey)] + :: + +$ target + $+ btc-psbt-target + $?(%input %output) + :: + +$ keyval + $+ btc-psbt-keyval + [key=hexb val=hexb] + :: + +$ map + $+ btc-psbt-map + (list keyval) + -- +++ ops + |% + ++ op-dup 118 + ++ op-equalverify 136 + ++ op-hash160 169 + ++ op-checksig 172 + -- +-- diff --git a/desk/gub/lib/sur/ord.hoon b/desk/gub/lib/sur/ord.hoon new file mode 100644 index 0000000..a3ea0da --- /dev/null +++ b/desk/gub/lib/sur/ord.hoon @@ -0,0 +1,42 @@ +:: lib/sur/ord.hoon +:: +:: Type definitions for the ord bitcoin metaprotocol. +:: Ported from groundwire's sur/ord.hoon. +:: +|% ++$ address + $+ ord-address + $% [%base58 @uc] + [%bech32 @tas] + == +:: ++$ sats @ud ++$ txid @ux ++$ vout @ud :: index in tx output set ++$ off @ud :: sat index within output ++$ sont [=txid =vout =off] :: satpoint +:: ++$ insc [=txid idx=@ud] ++$ ordi [p=@ux q=@ud] ++$ urdi [p=@ux q=@ud r=@ud] +:: ++$ mail + $: mime=$@(~ [p=@ud (each @t @)]) :: tag 1 mimetype + code=$@(~ [p=@ud (each @t @)]) :: tag 9 content encoding + pntr=$@(~ [p=@ud (each @ud @)]) :: tag 2 pointer + rent=$@(~ [p=@ud (each insc @)]) :: tag 3 parent + gate=$@(~ [p=@ud (each insc @)]) :: tag 11 delegate + meta=$@(~ octs) :: tag 5 metadata (multple pushes) + prot=$@(~ octs) :: tag 7 meta protocol + data=$@(~ octs) :: tag 0 content (all pushed data after push of 0 tag) + == +:: ++$ draft + (map @ud octs) +:: ++$ sont-map (map [txid vout] vout-map) ++$ vout-map [value=@ud sats=(map off sont-val)] ++$ sont-val [com=(unit @p) ins=(set insc)] +:: ++$ insc-ids (map insc [=sont =mail]) +-- diff --git a/desk/gub/lib/sur/transactions.hoon b/desk/gub/lib/sur/transactions.hoon new file mode 100644 index 0000000..c836f0d --- /dev/null +++ b/desk/gub/lib/sur/transactions.hoon @@ -0,0 +1,70 @@ +:: transactions.hoon - Shared types for transaction building +:: +:: Two namespaces: +:: ++ap App-legible types (addresses, privkeys - what callers work with) +:: ++bc Bitcoin-legible types (scripts, witnesses - wire format) +:: +/< btc /lib/sur/bitcoin.hoon +/< taproot /lib/taproot.hoon +|% +:: Shared types used by both namespaces +:: ++$ taproot-spend + $% [%key-path merkle-root=(unit @ux)] + [%script-path =tapleaf:taproot proof=(list @ux) witness=(list hexb:btc)] + == +:: ++$ spend-type + $% [%p2pkh ~] + [%p2wpkh ~] + [%p2sh-p2wpkh ~] + [%p2tr taproot-spend] + == +:: ++$ network ?(%main %testnet3 %testnet4 %regtest %signet) +:: +:: ============================================================================ +:: App-legible types (what callers work with) +:: ============================================================================ +:: +++ ap + |% + :: Input: a UTXO to spend, with the key to spend it + :: + +$ input + $: privkey=@ux + pubkey=@ux + txid=@ux :: little-endian wire format + vout=@ud + amount=@ud + sequence=@ud :: 0xffff.ffff for final + =spend-type + == + :: Output: where to send coins + :: + +$ output [address=@t amount=@ud] + -- +:: +:: ============================================================================ +:: Bitcoin-legible types (wire format for encoding) +:: ============================================================================ +:: +++ bc + |% + :: Input: encoded for transaction serialization + :: + +$ input + $: txid=@ + vout=@ + sequence=@ + script-sig=hexb:btc :: fully built (empty for native segwit/taproot) + witness=hexb:btc :: fully built (empty for legacy) + == + :: Output: encoded for transaction serialization + :: + +$ output + $: script-pubkey=hexb:btc + amount=@ + == + -- +-- diff --git a/desk/gub/lib/sur/urb.hoon b/desk/gub/lib/sur/urb.hoon new file mode 100644 index 0000000..d6a9708 --- /dev/null +++ b/desk/gub/lib/sur/urb.hoon @@ -0,0 +1,130 @@ +:: lib/sur/urb.hoon +:: +:: Type definitions for the urb bitcoin metaprotocol +:: based on the ord metaprotocol, along with state +:: for lib/urb-core and the groundwire nexus walker. +:: Ported from groundwire's sur/urb.hoon. +:: +/< bitcoin /lib/sur/bitcoin.hoon +/< ord /lib/sur/ord.hoon +|% +:: ++$ unv-ids (map @p point) ++$ state + $: block-id=id:block:bitcoin + =sont-map:ord + =insc-ids:ord + =unv-ids + == +:: +:: sotx = signed ord tx (?) +:: We often call a list of sotx, raw-sotx, +:: or skim-sotx a "sots". ++$ sotx [[=ship sig=(unit @)] skim-sotx] ++$ raw-sotx [raw=octs sot=sotx] +++ skim-sotx + =< many + |% + +$ many + $% single + [%batch bat=(list single)] + == + :: + +$ single + :: spkh may be redundant here; we could make vout not be a unit + $% $: %spawn =pass + ::from=(unit [=vout =off]) + fief=(unit fief) + to=[spkh=@ux vout=(unit vout:ord) =off:ord tej=off:ord] + == + [%keys =pass breach=?] + [%escape parent=ship sig=(unit @)] + [%cancel-escape parent=ship] + [%adopt =ship] + [%reject =ship] + [%detach =ship] + [%fief fief=(unit fief)] + [%set-mang mang=(unit mang)] + == + -- +:: ++$ mang $%([%sont =sont:ord] [%pass =pass]) +:: +:: Ownership and networking info for a @p ++$ point + $: $= own + $: =sont:ord + mang=(unit mang) + == + :: + $= net + $: rift=@ud + =life + =pass + sponsor=[has=? who=@p] + escape=(unit @p) + fief=(unit fief) + == + == +:: ++$ turf (list @t) :: domain, tld first +:: ++$ fief + $% [%turf p=(list turf) q=@udE] + [%if p=@ifF q=@udE] + [%is p=@isH q=@udE] + == +:: +:: effects are an intermediate type that gets +:: converted to jael udiffs ++$ effect + $% diff + [%xfer from=sont:ord to=sont:ord] + [%insc =insc:ord sont=$@(~ sont:ord) =mail:ord] + == ++$ diff + $% [%dns domains=(list @t)] + $: %point =ship + $% [%rift =rift] + [%keys =life =pass] + [%sponsor sponsor=(unit @p)] + [%escape to=(unit @p)] + [%owner =sont:ord] + ::[%spawn-proxy =sont:ord] + [%mang mang=(unit mang)] + ::[%voting-proxy =sont:ord] + ::[%transfer-proxy =sont:ord] + ::[%dominion =dominion] + [%fief fief=(unit fief)] + == == == +:: +++ urb-tx + =< tx + |% + +$ tx [id=txid:ord data] + +$ data + $+ urb-tx-data + $: is=(list input) + os=(list output:tx:bitcoin) + locktime=@ud + nversion=@ud + segwit=(unit @ud) + == + +$ input + [[sots=(list raw-sotx) value=@ud] inputw:tx:bitcoin] + -- +:: +++ urb-block + =< block + |% + +$ hax @ux + +$ num @ud + +$ id [=hax =num] + +$ block + $: =hax + reward=@ud + height=@ud + txs=(list urb-tx) + == + -- +-- diff --git a/desk/gub/lib/taproot.hoon b/desk/gub/lib/taproot.hoon new file mode 100644 index 0000000..04ed7f7 --- /dev/null +++ b/desk/gub/lib/taproot.hoon @@ -0,0 +1,432 @@ +:: taproot.hoon - Taproot script tree utilities +:: +:: Provides operations on partial tapscript trees (ptst): +:: - Hash computation (TapLeaf, TapBranch) +:: - Leaf enumeration with axis addressing +:: - Merkle proof extraction +:: +/< bcu /lib/bitcoin-utils.hoon +/< btc /lib/sur/bitcoin.hoon +/< bech32 /lib/bech32.hoon +:: +:: secp256k1 curve order (n) +:: +|% +++ secp-n 0xffff.ffff.ffff.ffff.ffff.ffff.ffff.fffe.baae.dce6.af48.a03b.bfd2.5e8c.d036.4141 +:: Taproot script tree types +:: ++$ tapleaf [version=@ux script=hexb:btc] ++$ ptst :: partial tapscript tree + $@ ~ + $% [%leaf =tapleaf] + [%opaque hash=@ux] + [%branch l=ptst r=ptst] + == +:: +:: +leaf-hash: compute TapLeaf hash for a tapleaf +:: +++ leaf-hash + |= =tapleaf + ^- @ux + =/ script-len=@ wid.script.tapleaf + =/ compact-size=hexb:btc + ?: (lth script-len 0xfd) [1 `@ux`script-len] + ?: (lth script-len 0x1.0000) + (cat:byt:bcu ~[[1 0xfd] (flip:byt:bcu [2 script-len])]) + ?: (lth script-len 0x1.0000.0000) + (cat:byt:bcu ~[[1 0xfe] (flip:byt:bcu [4 script-len])]) + (cat:byt:bcu ~[[1 0xff] (flip:byt:bcu [8 script-len])]) + =/ leaf-data=hexb:btc + %- cat:byt:bcu + :~ [1 version.tapleaf] + compact-size + script.tapleaf + == + (tagged-hash 'TapLeaf' leaf-data) +:: +:: +hash: get the hash of a ptst node +:: +++ hash + |= tree=ptst + ^- @ux + ?~ tree 0x0 + ?- -.tree + %leaf (leaf-hash tapleaf.tree) + %opaque hash.tree + %branch + =/ left-hash=@ux (hash l.tree) + =/ right-hash=@ux (hash r.tree) + :: TapBranch: sort hashes lexicographically + =/ [first=@ux second=@ux] + ?: (lth left-hash right-hash) + [left-hash right-hash] + [right-hash left-hash] + =/ branch-data=hexb:btc + (cat:byt:bcu ~[[32 first] [32 second]]) + (tagged-hash 'TapBranch' branch-data) + == +:: +leaves: get all leaves with their axis addresses +:: +:: Uses Nock axis addressing: 1=root, 2=left, 3=right, etc. +:: +++ leaves + |= tree=ptst + ^- (list [axis=@ =tapleaf]) + (leaves-at tree 1) +:: +++ leaves-at + |= [tree=ptst axis=@] + ^- (list [axis=@ =tapleaf]) + ?~ tree ~ + ?- -.tree + %leaf [[axis tapleaf.tree] ~] + %opaque ~ + %branch + %+ weld + (leaves-at l.tree (mul 2 axis)) + (leaves-at r.tree +((mul 2 axis))) + == +:: +proof: get merkle proof for leaf at given axis +:: +:: Returns ~ if no leaf at that axis. +:: Returns list of sibling hashes from leaf to root. +:: +++ proof + |= [tree=ptst axis=@] + ^- (unit (list @ux)) + ?~ tree ~ + ?: =(1 axis) + :: At root - must be a leaf + ?. ?=(%leaf -.tree) ~ + `~ + :: Navigate to target, collecting sibling hashes + =/ path=(list ?) (axis-to-path axis) + (proof-walk tree path ~) +:: +++ proof-walk + |= [tree=ptst path=(list ?) siblings=(list @ux)] + ^- (unit (list @ux)) + ?~ tree ~ + ?~ path + :: Reached target - must be a leaf + ?. ?=(%leaf -.tree) ~ + `siblings + ?. ?=(%branch -.tree) ~ + =/ go-left=? i.path + =/ sibling-hash=@ux + ?: go-left + (hash r.tree) + (hash l.tree) + =/ next-tree=ptst ?:(go-left l.tree r.tree) + $(tree next-tree, path t.path, siblings (snoc siblings sibling-hash)) +:: +axis-to-path: convert axis to list of left/right decisions +:: +:: Returns path from root to target (%.y = left, %.n = right) +:: +++ axis-to-path + |= axis=@ + ^- (list ?) + ?: =(1 axis) ~ + =/ parent=@ (div axis 2) + =/ is-left=? =(0 (mod axis 2)) + (snoc (axis-to-path parent) is-left) +:: +tagged-hash: BIP-340 tagged hash +:: +:: tagged_hash(tag, data) = SHA256(SHA256(tag) || SHA256(tag) || data) +:: Defers to the standard library's implementation (same as groundwire) +:: +++ tagged-hash + |= [tag=@t data=hexb:btc] + ^- @ux + `@ux`(tagged-hash:schnorr:secp256k1:secp:crypto tag [p=wid.data q=dat.data]) +:: +has-leaf: check if tree contains at least one leaf +:: +++ has-leaf + |= tree=ptst + ^- ? + ?~ tree %.n + ?- -.tree + %leaf %.y + %opaque %.n + %branch ?|((has-leaf l.tree) (has-leaf r.tree)) + == +:: +:: Constructors +:: +:: +make-leaf: create a leaf node +:: +++ make-leaf + |= =tapleaf + ^- ptst + [%leaf tapleaf] +:: +:: +make-branch: create a branch node +:: +++ make-branch + |= [l=ptst r=ptst] + ^- ptst + [%branch l r] +:: +:: +make-opaque: create an opaque node from a known hash +:: +++ make-opaque + |= h=@ux + ^- ptst + [%opaque h] +:: +:: ============================================================================ +:: Key Tweaking (BIP-341) +:: ============================================================================ +:: +:: +x-only: extract x-coordinate from compressed pubkey +:: +:: Takes 33-byte compressed pubkey, returns 32-byte x-only pubkey. +:: The y-coordinate parity is implicit in taproot (always lift to even y). +:: +++ x-only + |= pubkey=@ux + ^- @ux + :: Compressed pubkey is 02/03 prefix + 32-byte x-coordinate + :: Extract just the x-coordinate (low 32 bytes) + (end [3 32] pubkey) +:: +:: +has-even-y: check if compressed pubkey has even y-coordinate +:: +++ has-even-y + |= pubkey=@ux + ^- ? + :: 02 prefix = even y, 03 prefix = odd y + =/ prefix=@ (rsh [3 32] pubkey) + =(0x2 prefix) +:: +:: +compute-tweak: compute taproot tweak value +:: +:: tweak = tagged_hash("TapTweak", internal_pubkey_x || merkle_root) +:: If merkle_root is ~, tweak = tagged_hash("TapTweak", internal_pubkey_x) +:: +++ compute-tweak + |= [internal-pubkey-x=@ux merkle-root=(unit @ux)] + ^- @ux + =/ data=hexb:btc + ?~ merkle-root + [32 internal-pubkey-x] + (cat:byt:bcu ~[[32 internal-pubkey-x] [32 u.merkle-root]]) + (tagged-hash 'TapTweak' data) +:: +:: +tweak-pubkey: compute tweaked output pubkey +:: +:: Takes internal pubkey (33-byte compressed) and optional merkle root. +:: Returns [tweaked-x-only-pubkey parity] where parity is the y-coordinate parity. +:: +:: Q = P + t*G where t is the tweak +:: +++ tweak-pubkey + |= [internal-pubkey=@ux merkle-root=(unit @ux)] + ^- [x=@ux parity=?] + =, secp256k1:secp:crypto + :: Get internal pubkey as a point + =/ p=point (decompress-point internal-pubkey) + :: If P has odd y, we need to negate it (use -P as internal key) + :: This ensures the internal key has even y for consistent tweaking + =/ p-even=point + ?: =(0 (mod y.p 2)) + p + [x.p (sub p:domain:curve y.p)] + :: Compute tweak + =/ tweak=@ux (compute-tweak (x-only internal-pubkey) merkle-root) + :: Q = P + t*G + =/ t-times-g=point (mul-point-scalar g:domain:curve tweak) + =/ q=point (add-points p-even t-times-g) + :: Return x-only pubkey and parity + :- x.q + !=(0 (mod y.q 2)) +:: +:: +tweak-privkey: compute tweaked private key for signing +:: +:: Takes private key, internal pubkey, and optional merkle root. +:: Returns tweaked private key suitable for Schnorr signing. +:: +:: If internal pubkey has even y: d' = (d + t) mod n +:: If internal pubkey has odd y: d' = (n - d + t) mod n +:: +:: Note: BIP-340 signing handles Q's y-parity internally. +:: +++ tweak-privkey + |= [privkey=@ux internal-pubkey=@ux merkle-root=(unit @ux)] + ^- @ux + :: Check if internal pubkey has even y + =/ even-y=? (has-even-y internal-pubkey) + :: Compute tweak + =/ tweak=@ux (compute-tweak (x-only internal-pubkey) merkle-root) + :: Negate privkey if pubkey has odd y, then add tweak + =/ d=@ux + ?: even-y + privkey + (sub secp-n privkey) + (mod (add d tweak) secp-n) +:: +:: +output-pubkey: compute taproot output key (for scriptPubKey) +:: +:: Convenience function that returns just the x-only output pubkey. +:: +++ output-pubkey + |= [internal-pubkey=@ux merkle-root=(unit @ux)] + ^- @ux + x:(tweak-pubkey internal-pubkey merkle-root) +:: +:: +merkle-root-from-proof: compute merkle root from leaf and proof +:: +:: Given a tapleaf and its merkle proof (list of sibling hashes), +:: reconstructs the merkle root by walking up the tree. +:: +++ merkle-root-from-proof + |= [=tapleaf proof=(list @ux)] + ^- @ux + =/ current=@ux (leaf-hash tapleaf) + |- + ?~ proof + current + :: TapBranch: sort hashes lexicographically before hashing + =/ sibling=@ux i.proof + =/ [first=@ux second=@ux] + ?: (lth current sibling) + [current sibling] + [sibling current] + =/ branch-data=hexb:btc + (cat:byt:bcu ~[[32 first] [32 second]]) + $(current (tagged-hash 'TapBranch' branch-data), proof t.proof) +:: +:: ============================================================================ +:: Taproot Address Handling (BIP-350 bech32m) +:: ============================================================================ +:: +:: Bech32m uses a different checksum constant than bech32 +:: +++ bech32m-constant 0x2bc8.30a3 +:: +:: +verify-checksum-bech32m: verify bech32m checksum +:: +++ verify-checksum-bech32m + |= [hrp=tape data-and-checksum=(list @)] + ^- ? + %- |=(a=@ =(bech32m-constant a)) + %- polymod:bech32 + (weld (expand-hrp:bech32 hrp) data-and-checksum) +:: +:: +is-taproot-address: check if address is a taproot address +:: +++ is-taproot-address + |= addr=@t + ^- ? + =/ addr-tape=tape (cass (trip addr)) + ?| =("bc1p" (scag 4 addr-tape)) + =("tb1p" (scag 4 addr-tape)) + =("bcrt1p" (scag 6 addr-tape)) + == +:: +:: +from-address: decode taproot address to 32-byte x-only pubkey +:: +:: Decodes bc1p/tb1p/bcrt1p addresses (witness version 1, bech32m checksum). +:: +++ from-address + |= body=cord + ^- hexb:btc + ~| "Invalid taproot address" + =/ bech=tape (cass (trip body)) + =/ pos=(list @) (flop (fand "1" bech)) + ?> ?=(^ pos) + =/ last-1=@ i.pos + ?> (is-valid:bech32 bech last-1) + =/ hrp=tape (scag last-1 bech) + =/ encoded-data-and-checksum=(list @) + (slag +(last-1) bech) + =/ data-and-checksum=(list @) + (murn encoded-data-and-checksum charset-to-value:bech32) + ?> =((lent encoded-data-and-checksum) (lent data-and-checksum)) + ?> (verify-checksum-bech32m hrp data-and-checksum) + =/ checksum-pos=@ (sub (lent data-and-checksum) 6) + =/ data=(list @) (scag checksum-pos data-and-checksum) + =/ bs=bits:bcu (from-atoms:bit:bcu 5 data) + =/ byt-len=@ (div (sub wid.bs 5) 8) + :: Assert witness version 1 + ?> =(5^0b1 (take:bit:bcu 5 bs)) + :: Assert 32 bytes (x-only pubkey) + ?> =(32 byt-len) + [32 `@ux`dat:(take:bit:bcu 256 (drop:bit:bcu 5 bs))] +:: +:: +to-script-pubkey: create taproot scriptPubKey from address +:: +:: Returns OP_1 <32-byte x-only pubkey> (34 bytes total) +:: +++ to-script-pubkey + |= addr=@t + ^- hexb:btc + =/ pubkey=hexb:btc (from-address addr) + %- cat:byt:bcu + :~ 1^0x51 :: OP_1 (witness version 1) + 1^wid.pubkey :: push 32 + pubkey + == +:: +:: +tapscript-address: generate taproot address with script tree +:: +:: Takes internal pubkey (33-byte compressed) and script tree. +:: Returns bech32m address for the tweaked output key. +:: +++ tapscript-address + |= [internal-pubkey=@ux tree=ptst net=?(%main %testnet %regtest)] + ^- @t + :: Compute merkle root from tree (~ if empty tree) + =/ merkle-root=(unit @ux) + ?~ tree ~ + `(hash tree) + :: Compute tweaked output pubkey + =/ tweaked-x=@ux (output-pubkey internal-pubkey merkle-root) + :: Encode as bech32m taproot address + =/ encoded=(unit @t) (encode-taproot:bech32 net [32 tweaked-x]) + (need encoded) +:: +:: ============================================================================ +:: Simple Tapscript Constructors (for testing) +:: ============================================================================ +:: +:: +checksig-script: OP_CHECKSIG +:: +:: Single-key spend script for script-path. +:: +++ checksig-script + |= pubkey=@ux + ^- hexb:btc + :: x-only pubkey (32 bytes) + OP_CHECKSIG (0xac) + =/ x-only=@ux (x-only pubkey) + %- cat:byt:bcu + :~ [1 32] :: push 32 bytes + [32 x-only] :: x-only pubkey + [1 0xac] :: OP_CHECKSIG + == +:: +:: +csv-checksig-script: OP_CSV OP_DROP OP_CHECKSIG +:: +:: Timelocked single-key spend (relative timelock). +:: +++ csv-checksig-script + |= [delay=@ud pubkey=@ux] + ^- hexb:btc + =/ x-only=@ux (x-only pubkey) + :: Encode delay as minimal push + =/ delay-push=hexb:btc + ?: (lth delay 0x80) + ?: =(0 delay) [1 0x0] + [1 `@ux`delay] + ?: (lth delay 0x100) + [2 `@ux`(con (lsh [3 1] 0x1) delay)] :: OP_PUSHBYTES_1 + byte + [3 `@ux`(con (lsh [3 2] 0x2) delay)] :: OP_PUSHBYTES_2 + le16 + %- cat:byt:bcu + :~ delay-push + [1 0xb2] :: OP_CHECKSEQUENCEVERIFY + [1 0x75] :: OP_DROP + [1 32] :: push 32 bytes + [32 x-only] :: x-only pubkey + [1 0xac] :: OP_CHECKSIG + == +-- diff --git a/desk/gub/lib/test.hoon b/desk/gub/lib/test.hoon new file mode 100644 index 0000000..6ad4d65 --- /dev/null +++ b/desk/gub/lib/test.hoon @@ -0,0 +1,71 @@ +:: build-time test runner +:: +:: test files should look like: +:: +:: /< test /lib/test.hoon +:: /< goals /lib/goals.hoon +:: %- run-tests:test +:: !> +:: |% +:: ++ test-whatever +:: |. ^- tang +:: (expect-eq:test !>(%foo) !>(%foo)) +:: -- +:: +:: the file compiles to (list [name=term ok=?]). +:: %.y: assertions passed. %.n: assertion failure. +:: if a test crashes, the build fails normally. +:: +|% +++ expect-eq + |= [expected=vase actual=vase] + ^- tang + =| result=tang + =? result !=(q.expected q.actual) + %+ weld result + ^- tang + :~ [%palm [": " ~ ~ ~] [leaf+"expected" (sell expected) ~]] + [%palm [": " ~ ~ ~] [leaf+"actual " (sell actual) ~]] + == + =? result !(~(nest ut p.actual) | p.expected) + %+ weld result + ^- tang + :~ :+ %palm [": " ~ ~ ~] + :~ [%leaf "failed to nest"] + (~(dunk ut p.actual) %actual) + (~(dunk ut p.expected) %expected) + == == + result +:: +++ expect + |= actual=vase + (expect-eq !>(%.y) actual) +:: +++ expect-fail + |= a=(trap) + ^- tang + =/ b (mule a) + ?- -.b + %| ~ + %& ['expected failure - succeeded' ~] + == +:: +++ expect-success + |= a=(trap) + ^- tang + =/ b (mule a) + ?- -.b + %& ~ + %| ['expected success - failed' p.b] + == +:: +++ run-tests + |= cor=vase + ^- (list [name=term ok=?]) + =/ arms=(list term) + (skim (sloe p.cor) |=(a=term =((end [3 5] a) 'test-'))) + %+ turn arms + |= name=term + =/ res=vase (slap (slap cor [%limb name]) [%limb %$]) + [name =(~ ;;(tang q.res))] +-- diff --git a/desk/gub/lib/tests/git-object.hoon b/desk/gub/lib/tests/git-object.hoon new file mode 100644 index 0000000..9a26110 --- /dev/null +++ b/desk/gub/lib/tests/git-object.hoon @@ -0,0 +1,87 @@ +/< test /lib/test.hoon +/< git-obj /lib/git/object.hoon +%- run-tests:test +!> +|% +:: +test-blob-roundtrip: blob -> raw -> octs -> raw -> blob +:: +++ test-blob-roundtrip + |. ^- tang + =/ data=octs (as-octt:mimes:html "hello world\0a") + =/ blob=object:git-obj [%blob p.data data] + =/ raw=raw-object:git-obj (obj-to-raw:git-obj %sha-1 blob) + =/ octs=octs (raw-to-octs:git-obj raw) + =/ raw2=raw-object:git-obj (raw-from-octs:git-obj octs) + =/ blob2=object:git-obj (parse-raw:git-obj %sha-1 raw2) + (expect-eq:test !>(blob) !>(blob2)) +:: +:: +test-empty-blob-roundtrip: empty blob +:: +++ test-empty-blob-roundtrip + |. ^- tang + =/ blob=object:git-obj [%blob 0 [0 0]] + =/ raw=raw-object:git-obj (obj-to-raw:git-obj %sha-1 blob) + =/ octs=octs (raw-to-octs:git-obj raw) + =/ raw2=raw-object:git-obj (raw-from-octs:git-obj octs) + =/ blob2=object:git-obj (parse-raw:git-obj %sha-1 raw2) + (expect-eq:test !>(blob) !>(blob2)) +:: +:: +test-tree-roundtrip: tree with entries +:: +++ test-tree-roundtrip + |. ^- tang + =/ h1 `hash:git-obj`0x1111.1111.1111.1111.1111.1111.1111.1111.1111.1111 + =/ h2 `hash:git-obj`0x2222.2222.2222.2222.2222.2222.2222.2222.2222.2222 + =/ entries=(list tree-entry:git-obj) + :~ ['file.txt' 0x81a4 h1] + ['src' 0x4000 h2] + == + =/ tree=object:git-obj [%tree 0 entries] + =/ raw=raw-object:git-obj (obj-to-raw:git-obj %sha-1 tree) + =. size.tree size.raw + :: roundtrip: serialize -> deserialize -> check fields + :: parse-tree reverses entry order so compare as sets + =/ octs=octs (raw-to-octs:git-obj raw) + =/ raw2=raw-object:git-obj (raw-from-octs:git-obj octs) + =/ tree2=object:git-obj (parse-raw:git-obj %sha-1 raw2) + ?> ?=(%tree -.tree2) + =/ orig=(set tree-entry:git-obj) (silt entries) + =/ parsed=(set tree-entry:git-obj) (silt tree-dir.tree2) + (expect-eq:test !>(orig) !>(parsed)) +:: +:: +test-commit-roundtrip: commit object +:: +++ test-commit-roundtrip + |. ^- tang + =/ tree-hash `hash:git-obj`0xaaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa + =/ parent-hash `hash:git-obj`0xbbbb.bbbb.bbbb.bbbb.bbbb.bbbb.bbbb.bbbb.bbbb.bbbb + =/ com=commit:git-obj + :_ "test commit message" + :* tree-hash + ~[parent-hash] + ["Test Author" "test@example.com"] + [~2025.1.1 [%.y ~h0]] + ["Test Author" "test@example.com"] + [~2025.1.1 [%.y ~h0]] + ~ + == + =/ obj=object:git-obj [%commit 0 com] + =/ raw=raw-object:git-obj (obj-to-raw:git-obj %sha-1 obj) + =. size.obj size.raw + =/ octs=octs (raw-to-octs:git-obj raw) + =/ raw2=raw-object:git-obj (raw-from-octs:git-obj octs) + =/ obj2=object:git-obj (parse-raw:git-obj %sha-1 raw2) + (expect-eq:test !>(obj) !>(obj2)) +:: +:: +test-empty-tree-roundtrip: tree with no entries +:: +++ test-empty-tree-roundtrip + |. ^- tang + =/ tree=object:git-obj [%tree 0 ~] + =/ raw=raw-object:git-obj (obj-to-raw:git-obj %sha-1 tree) + =. size.tree size.raw + =/ octs=octs (raw-to-octs:git-obj raw) + =/ raw2=raw-object:git-obj (raw-from-octs:git-obj octs) + =/ tree2=object:git-obj (parse-raw:git-obj %sha-1 raw2) + (expect-eq:test !>(tree) !>(tree2)) +-- diff --git a/desk/gub/lib/tests/git-transport.hoon b/desk/gub/lib/tests/git-transport.hoon new file mode 100644 index 0000000..68807c3 --- /dev/null +++ b/desk/gub/lib/tests/git-transport.hoon @@ -0,0 +1,181 @@ +/< test /lib/test.hoon +/< git-transport /lib/git/transport.hoon +%- run-tests:test +!> +|% +:: fake hashes for testing +++ h1 `hash:git-transport`0x1111.1111.1111.1111.1111.1111.1111.1111.1111.1111 +++ h2 `hash:git-transport`0x2222.2222.2222.2222.2222.2222.2222.2222.2222.2222 +++ h3 `hash:git-transport`0x3333.3333.3333.3333.3333.3333.3333.3333.3333.3333 +++ h4 `hash:git-transport`0x4444.4444.4444.4444.4444.4444.4444.4444.4444.4444 +++ h5 `hash:git-transport`0x5555.5555.5555.5555.5555.5555.5555.5555.5555.5555 +++ h6 `hash:git-transport`0x6666.6666.6666.6666.6666.6666.6666.6666.6666.6666 +:: tree hashes (for directories) +++ th1 `hash:git-transport`0xaaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa.aaaa +++ th2 `hash:git-transport`0xbbbb.bbbb.bbbb.bbbb.bbbb.bbbb.bbbb.bbbb.bbbb.bbbb +:: +:: blob mode and dir mode +++ blob-mode 0x81a4 :: 100644 +++ dir-mode 0x4000 :: 040000 +:: +:: mock get-tree that returns from a map +++ mock-trees + |= trees=(map hash:git-transport tree-dir:git-transport) + ^- $-(hash:git-transport (unit tree-dir:git-transport)) + |=(h=hash:git-transport (~(get by trees) h)) +:: +:: +test-identical-trees: same hash returns no changes +:: +++ test-identical-trees + |. ^- tang + =/ gt (mock-trees ~) + =/ changes (diff-trees:git-transport gt h1 h1) + (expect-eq:test !>(~) !>(changes)) +:: +:: +test-add-file: file in new but not old +:: +++ test-add-file + |. ^- tang + =/ old=tree-dir:git-transport ~ + =/ new=tree-dir:git-transport ~[['readme.md' blob-mode h1]] + =/ gt (mock-trees (malt ~[[th1 old] [th2 new]])) + =/ changes (diff-trees:git-transport gt th1 th2) + =/ expected=(list tree-change:git-transport) + ~[[%add /'readme.md' h1]] + (expect-eq:test !>(expected) !>(changes)) +:: +:: +test-del-file: file in old but not new +:: +++ test-del-file + |. ^- tang + =/ old=tree-dir:git-transport ~[['readme.md' blob-mode h1]] + =/ new=tree-dir:git-transport ~ + =/ gt (mock-trees (malt ~[[th1 old] [th2 new]])) + =/ changes (diff-trees:git-transport gt th1 th2) + =/ expected=(list tree-change:git-transport) + ~[[%del /'readme.md' h1]] + (expect-eq:test !>(expected) !>(changes)) +:: +:: +test-mod-file: same name different hash +:: +++ test-mod-file + |. ^- tang + =/ old=tree-dir:git-transport ~[['readme.md' blob-mode h1]] + =/ new=tree-dir:git-transport ~[['readme.md' blob-mode h2]] + =/ gt (mock-trees (malt ~[[th1 old] [th2 new]])) + =/ changes (diff-trees:git-transport gt th1 th2) + =/ expected=(list tree-change:git-transport) + ~[[%mod /'readme.md' h1 h2]] + (expect-eq:test !>(expected) !>(changes)) +:: +:: +test-unchanged-file: same name same hash, no changes +:: +++ test-unchanged-file + |. ^- tang + =/ old=tree-dir:git-transport ~[['readme.md' blob-mode h1]] + =/ new=tree-dir:git-transport ~[['readme.md' blob-mode h1]] + =/ gt (mock-trees (malt ~[[th1 old] [th2 new]])) + =/ changes (diff-trees:git-transport gt th1 th2) + (expect-eq:test !>(~) !>(changes)) +:: +:: +test-mixed-changes: add + del + mod + unchanged +:: +++ test-mixed-changes + |. ^- tang + =/ old=tree-dir:git-transport + :~ ['a.txt' blob-mode h1] + ['b.txt' blob-mode h2] + ['c.txt' blob-mode h3] + == + =/ new=tree-dir:git-transport + :~ ['a.txt' blob-mode h1] :: unchanged + ['b.txt' blob-mode h4] :: modified + ['d.txt' blob-mode h5] :: added + == + =/ gt (mock-trees (malt ~[[th1 old] [th2 new]])) + =/ changes (diff-trees:git-transport gt th1 th2) + :: should have mod b, del c, add d + =/ has-mod=? + (lien changes |=(c=tree-change:git-transport &(?=(%mod -.c) =(path.c /'b.txt')))) + =/ has-del=? + (lien changes |=(c=tree-change:git-transport &(?=(%del -.c) =(path.c /'c.txt')))) + =/ has-add=? + (lien changes |=(c=tree-change:git-transport &(?=(%add -.c) =(path.c /'d.txt')))) + =/ no-unchanged=? + !(lien changes |=(c=tree-change:git-transport =(path.c /'a.txt'))) + ;: weld + (expect:test !>(has-mod)) + (expect:test !>(has-del)) + (expect:test !>(has-add)) + (expect:test !>(no-unchanged)) + (expect-eq:test !>(3) !>((lent changes))) + == +:: +:: +test-nested-dir-change: recurse into subdirectory +:: +++ test-nested-dir-change + |. ^- tang + =/ old-sub=tree-dir:git-transport ~[['foo.txt' blob-mode h1]] + =/ new-sub=tree-dir:git-transport ~[['foo.txt' blob-mode h2]] + =/ old=tree-dir:git-transport ~[['src' dir-mode h3]] + =/ new=tree-dir:git-transport ~[['src' dir-mode h4]] + =/ gt + %- mock-trees + (malt ~[[th1 old] [th2 new] [h3 old-sub] [h4 new-sub]]) + =/ changes (diff-trees:git-transport gt th1 th2) + =/ expected=(list tree-change:git-transport) + ~[[%mod /src/'foo.txt' h1 h2]] + (expect-eq:test !>(expected) !>(changes)) +:: +:: +test-unchanged-dir: same dir hash skips entirely +:: +++ test-unchanged-dir + |. ^- tang + =/ sub=tree-dir:git-transport ~[['foo.txt' blob-mode h1]] + =/ old=tree-dir:git-transport ~[['src' dir-mode h3] ['readme.md' blob-mode h2]] + =/ new=tree-dir:git-transport ~[['src' dir-mode h3] ['readme.md' blob-mode h4]] + =/ gt + %- mock-trees + (malt ~[[th1 old] [th2 new] [h3 sub]]) + =/ changes (diff-trees:git-transport gt th1 th2) + :: only readme changed, src dir untouched + =/ expected=(list tree-change:git-transport) + ~[[%mod /'readme.md' h2 h4]] + (expect-eq:test !>(expected) !>(changes)) +:: +:: +test-dir-to-file: directory replaced by a file +:: +++ test-dir-to-file + |. ^- tang + =/ sub=tree-dir:git-transport ~[['inner.txt' blob-mode h1]] + =/ old=tree-dir:git-transport ~[['thing' dir-mode h3]] + =/ new=tree-dir:git-transport ~[['thing' blob-mode h5]] + =/ gt (mock-trees (malt ~[[th1 old] [th2 new] [h3 sub]])) + =/ changes (diff-trees:git-transport gt th1 th2) + =/ has-del=? + (lien changes |=(c=tree-change:git-transport &(?=(%del -.c) =(path.c /thing/'inner.txt')))) + =/ has-add=? + (lien changes |=(c=tree-change:git-transport &(?=(%add -.c) =(path.c /thing)))) + ;: weld + (expect:test !>(has-del)) + (expect:test !>(has-add)) + == +:: +:: +test-file-to-dir: file replaced by a directory +:: +++ test-file-to-dir + |. ^- tang + =/ sub=tree-dir:git-transport ~[['inner.txt' blob-mode h2]] + =/ old=tree-dir:git-transport ~[['thing' blob-mode h1]] + =/ new=tree-dir:git-transport ~[['thing' dir-mode h4]] + =/ gt (mock-trees (malt ~[[th1 old] [th2 new] [h4 sub]])) + =/ changes (diff-trees:git-transport gt th1 th2) + =/ has-del=? + (lien changes |=(c=tree-change:git-transport &(?=(%del -.c) =(path.c /thing)))) + =/ has-add=? + (lien changes |=(c=tree-change:git-transport &(?=(%add -.c) =(path.c /thing/'inner.txt')))) + ;: weld + (expect:test !>(has-del)) + (expect:test !>(has-add)) + == +-- diff --git a/desk/gub/lib/tests/goals.hoon b/desk/gub/lib/tests/goals.hoon new file mode 100644 index 0000000..1c3b5d9 --- /dev/null +++ b/desk/gub/lib/tests/goals.hoon @@ -0,0 +1,909 @@ +/< test /lib/test.hoon +/< goals /lib/goals.hoon +%- run-tests:test +!> +|% +++ now ~2025.1.1 +++ jan ~2025.1.1 +++ feb ~2025.2.1 +++ mar ~2025.3.1 +++ apr ~2025.4.1 +++ jun ~2025.6.1 +++ sep ~2025.9.1 +++ dec ~2025.12.1 +:: +++ fresh-store (create-store:goals now) +:: +++ id-a `goal-id:goals`'a' +++ id-b `goal-id:goals`'b' +++ id-c `goal-id:goals`'c' +++ id-d `goal-id:goals`'d' +++ id-e `goal-id:goals`'e' +++ id-f `goal-id:goals`'f' +:: +:: create a child under root, return [store child-id] +++ add-child + |= [store=goal-store:goals id=goal-id:goals data=(map @t json)] + ^- [goal-store:goals goal-id:goals] + =/ [s=goal-store:goals mid=(unit goal-id:goals)] + (apply:goals store [%create id root-id:goals data] now) + ?> ?=(^ mid) + [s u.mid] +:: +:: create a child under any parent +++ add-child-to + |= [store=goal-store:goals id=goal-id:goals parent=goal-id:goals data=(map @t json)] + ^- [goal-store:goals goal-id:goals] + =/ [s=goal-store:goals mid=(unit goal-id:goals)] + (apply:goals store [%create id parent data] now) + ?> ?=(^ mid) + [s u.mid] +:: +:: ========================================= +:: store creation +:: ========================================= +:: +++ test-create-store + |. ^- tang + =/ store fresh-store + =/ root (~(got by store) root-id:goals) + ;: weld + %+ expect-eq:test !>(root-id:goals) !>(id.root) + %+ expect-eq:test !>(~) !>(parent.root) + (expect:test !>((validate:goals store))) + == +:: +:: ========================================= +:: create goal +:: ========================================= +:: +++ test-create-goal + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] (add-child fresh-store id-a ~) + =/ child (~(got by store) cid) + =/ root (~(got by store) root-id:goals) + ;: weld + %+ expect-eq:test !>(`root-id:goals) !>(parent.child) + (expect:test !>((lien children.root |=(c=goal-id:goals =(c cid))))) + (expect:test !>((validate:goals store))) + == +:: +++ test-create-nested-children + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child-to store id-b a ~) + =/ ga (~(got by store) a) + =/ gb (~(got by store) b) + ;: weld + (expect:test !>((lien children.ga |=(c=goal-id:goals =(c b))))) + %+ expect-eq:test !>(`a) !>(parent.gb) + (expect:test !>((validate:goals store))) + == +:: +++ test-create-three-levels + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child-to store id-b a ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child-to store id-c b ~) + ;: weld + %+ expect-eq:test !>(`a) !>(parent:(~(got by store) b)) + %+ expect-eq:test !>(`b) !>(parent:(~(got by store) c)) + (expect:test !>((validate:goals store))) + == +:: +++ test-duplicate-id-fails + |. ^- tang + =/ [store=goal-store:goals *] (add-child fresh-store id-a ~) + %- expect-fail:test + |.((apply:goals store [%create id-a root-id:goals ~] now)) +:: +:: ========================================= +:: delete goal +:: ========================================= +:: +++ test-delete-leaf + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%delete cid] now) + =/ root (~(got by store) root-id:goals) + ;: weld + %+ expect-eq:test !>(~) !>((~(get by store) cid)) + %+ expect-eq:test !>(~) !>(children.root) + (expect:test !>((validate:goals store))) + == +:: +++ test-delete-root-fails + |. ^- tang + %- expect-fail:test + |.((apply:goals fresh-store [%delete root-id:goals] now)) +:: +++ test-delete-with-children-fails + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals gcid=goal-id:goals] (add-child-to store id-b cid ~) + %- expect-fail:test + |.((apply:goals store [%delete cid] now)) +:: +:: ========================================= +:: move goal +:: ========================================= +:: +++ test-move-goal + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + :: move b under a + =/ [store=goal-store:goals *] (apply:goals store [%move b a] now) + =/ ga (~(got by store) a) + =/ gb (~(got by store) b) + ;: weld + %+ expect-eq:test !>(`a) !>(parent.gb) + (expect:test !>((lien children.ga |=(c=goal-id:goals =(c b))))) + :: root should no longer list b + %+ expect-eq:test + !>(%.n) + !>((lien children:(~(got by store) root-id:goals) |=(c=goal-id:goals =(c b)))) + (expect:test !>((validate:goals store))) + == +:: +++ test-move-same-parent-noop + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%move a root-id:goals] now) + ;: weld + %+ expect-eq:test !>(`root-id:goals) !>(parent:(~(got by store) a)) + (expect:test !>((validate:goals store))) + == +:: +++ test-move-root-fails + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] (add-child fresh-store id-a ~) + %- expect-fail:test + |.((apply:goals store [%move root-id:goals cid] now)) +:: +++ test-move-rewires-containment + |. ^- tang + :: move b from root to a — old containment edges removed, new ones added + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals *] (apply:goals store [%move b a] now) + =/ root (~(got by store) root-id:goals) + =/ ga (~(got by store) a) + =/ gb (~(got by store) b) + ;: weld + :: old containment gone: root.start should NOT -> b.start + %+ expect-eq:test !>(%.n) !>((has-nid:goals outflow.start.root [b %start])) + :: old containment gone: b.end should NOT -> root.end + %+ expect-eq:test !>(%.n) !>((has-nid:goals outflow.end.gb [root-id:goals %end])) + :: new containment: a.start -> b.start + (expect:test !>((has-nid:goals outflow.start.ga [b %start]))) + :: new containment: b.end -> a.end + (expect:test !>((has-nid:goals outflow.end.gb [a %end]))) + (expect:test !>((validate:goals store))) + == +:: +:: ========================================= +:: link / unlink +:: ========================================= +:: +++ test-link-precedence + |. ^- tang + :: a's end -> b's start (precedence: a must finish before b starts) + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals *] + (apply:goals store [%link [a %end] [b %start]] now) + =/ ga (~(got by store) a) + =/ gb (~(got by store) b) + ;: weld + (expect:test !>((has-nid:goals outflow.end.ga [b %start]))) + (expect:test !>((has-nid:goals inflow.start.gb [a %end]))) + (expect:test !>((validate:goals store))) + == +:: +++ test-unlink + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals *] + (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] + (apply:goals store [%unlink [a %end] [b %start]] now) + =/ ga (~(got by store) a) + ;: weld + %+ expect-eq:test + !>(%.n) + !>((has-nid:goals outflow.end.ga [b %start])) + (expect:test !>((validate:goals store))) + == +:: +++ test-link-cycle-fails + |. ^- tang + :: create two goals, link them in a cycle + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + :: a.end -> b.start and b.end -> a.start creates a cycle + =/ [store=goal-store:goals *] + (apply:goals store [%link [a %end] [b %start]] now) + %- expect-fail:test + |.((apply:goals store [%link [b %end] [a %start]] now)) +:: +++ test-cycle-three-goals + |. ^- tang + :: a -> b -> c -> a cycle + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [c %start]] now) + %- expect-fail:test + |.((apply:goals store [%link [c %end] [a %start]] now)) +:: +++ test-diamond-dag-no-cycle + |. ^- tang + :: a -> b, a -> c, b -> d, c -> d (diamond, not a cycle) + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals d=goal-id:goals] (add-child store id-d ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [c %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [c %end] [d %start]] now) + (expect:test !>((validate:goals store))) +:: +:: ========================================= +:: done / undone +:: ========================================= +:: +++ test-done-marks-node + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] feb) + =/ ga (~(got by store) a) + ;: weld + (expect:test !>(done.i.status.start.ga)) + :: history preserved: init entry + done entry = 2 + %+ expect-eq:test !>(2) !>((lent status.start.ga)) + == +:: +++ test-undone-pushes-history + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] feb) + =/ [store=goal-store:goals *] (apply:goals store [%undone [a %start]] mar) + =/ ga (~(got by store) a) + ;: weld + %+ expect-eq:test !>(%.n) !>(done.i.status.start.ga) + :: 3 entries: init, done, undone + %+ expect-eq:test !>(3) !>((lent status.start.ga)) + == +:: +++ test-done-undone-end + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] + (apply:goals store [%done [cid %end]] feb) + =/ child (~(got by store) cid) + =/ top-status i.status.end.child + ;: weld + (expect:test !>(done.top-status)) + %+ expect-eq:test !>(feb) !>(at.top-status) + :: undone it + =/ [store2=goal-store:goals *] (apply:goals store [%undone [cid %end]] mar) + =/ child2 (~(got by store2) cid) + %+ expect-eq:test !>(%.n) !>(done.i.status.end.child2) + == +:: +++ test-done-parent-end-while-child-undone-fails + |. ^- tang + :: can't mark root.end done while child.end is still undone + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%done [root-id:goals %start]] feb) + %- expect-fail:test + |.((apply:goals store [%done [root-id:goals %end]] mar)) +:: +:: ========================================= +:: update data +:: ========================================= +:: +++ test-update-data + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] + (add-child fresh-store id-a (my ~[['name' s+'first']])) + =/ [store=goal-store:goals *] + (apply:goals store [%update cid (my ~[['desc' s+'hello']])] now) + =/ child (~(got by store) cid) + ;: weld + %+ expect-eq:test !>(``json`s+'first') !>((~(get by data.child) 'name')) + %+ expect-eq:test !>(``json`s+'hello') !>((~(get by data.child) 'desc')) + == +:: +++ test-update-overwrites-existing-key + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] + (add-child fresh-store id-a (my ~[['name' s+'first']])) + =/ [store=goal-store:goals *] + (apply:goals store [%update cid (my ~[['name' s+'updated']])] now) + =/ child (~(got by store) cid) + %+ expect-eq:test !>(``json`s+'updated') !>((~(get by data.child) 'name')) +:: +:: ========================================= +:: actionable (manual) +:: ========================================= +:: +++ test-set-actionable + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] + (apply:goals store [%set-actionable cid %.y] now) + =/ child (~(got by store) cid) + (expect:test !>(actionable.child)) +:: +++ test-actionable-with-children-fails + |. ^- tang + :: can't be actionable if you have children + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child-to store id-b a ~) + %- expect-fail:test + |.((apply:goals store [%set-actionable a %.y] now)) +:: +:: ========================================= +:: actionable (policy) +:: ========================================= +:: +++ test-create-defaults-actionable + |. ^- tang + =/ store (create-store:goals now) + =/ result (apply:goals store [%create 'a' '0' ~] now) + =/ gid (need +.result) + =/ g (get-goal:goals -.result gid) + (expect:test !>(actionable.g)) +:: +++ test-parent-loses-actionable-on-create + |. ^- tang + =/ store (create-store:goals now) + =/ r1 (apply:goals store [%create 'a' '0' ~] now) + =/ gid-a (need +.r1) + :: a should be actionable + =/ g-a (get-goal:goals -.r1 gid-a) + =/ t1 (expect:test !>(actionable.g-a)) + ?^ t1 t1 + :: create child under a + =/ r2 (apply:goals -.r1 [%create 'b' gid-a ~] now) + :: a should no longer be actionable + =/ g-a2 (get-goal:goals -.r2 gid-a) + (expect-eq:test !>(%.n) !>(actionable.g-a2)) +:: +++ test-child-defaults-actionable + |. ^- tang + =/ store (create-store:goals now) + =/ r1 (apply:goals store [%create 'a' '0' ~] now) + =/ gid-a (need +.r1) + =/ r2 (apply:goals -.r1 [%create 'b' gid-a ~] now) + =/ gid-b (need +.r2) + =/ g-b (get-goal:goals -.r2 gid-b) + (expect:test !>(actionable.g-b)) +:: +++ test-move-unsets-parent-actionable + |. ^- tang + =/ store (create-store:goals now) + =/ r1 (apply:goals store [%create 'a' '0' ~] now) + =/ gid-a (need +.r1) + =/ r2 (apply:goals -.r1 [%create 'b' '0' ~] now) + =/ gid-b (need +.r2) + :: both should be actionable + =/ g-a (get-goal:goals -.r2 gid-a) + =/ g-b (get-goal:goals -.r2 gid-b) + =/ t1 (expect:test !>(actionable.g-a)) + ?^ t1 t1 + =/ t2 (expect:test !>(actionable.g-b)) + ?^ t2 t2 + :: move b under a + =/ r3 (apply:goals -.r2 [%move gid-b gid-a] now) + =/ g-a2 (get-goal:goals -.r3 gid-a) + (expect-eq:test !>(%.n) !>(actionable.g-a2)) +:: +++ test-root-not-actionable + |. ^- tang + =/ store (create-store:goals now) + =/ root (get-goal:goals store root-id:goals) + :: root starts not actionable and stays that way after adding child + =/ t1 (expect-eq:test !>(%.n) !>(actionable.root)) + ?^ t1 t1 + =/ r1 (apply:goals store [%create 'a' '0' ~] now) + =/ root2 (get-goal:goals -.r1 root-id:goals) + (expect-eq:test !>(%.n) !>(actionable.root2)) +:: +:: ========================================= +:: set-moment +:: ========================================= +:: +++ test-set-moment + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] + (apply:goals store [%set-moment [cid %end] `feb] now) + =/ child (~(got by store) cid) + %+ expect-eq:test !>(`feb) !>(moment.end.child) +:: +++ test-clear-moment + |. ^- tang + =/ [store=goal-store:goals cid=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] + (apply:goals store [%set-moment [cid %start] `feb] now) + =/ [store=goal-store:goals *] + (apply:goals store [%set-moment [cid %start] ~] now) + =/ child (~(got by store) cid) + %+ expect-eq:test !>(~) !>(moment.start.child) +:: +:: ========================================= +:: moment ordering +:: ========================================= +:: +++ test-moment-ordering-valid + |. ^- tang + :: correctly ordered: parent contains child's moments + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [root-id:goals %start] `jan] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [root-id:goals %end] `dec] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [a %start] `mar] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [a %end] `jun] now) + (expect:test !>((validate:goals store))) +:: +++ test-moment-ordering-partial-ok + |. ^- tang + :: only some moments set — should be fine + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [a %start] `mar] now) + (expect:test !>((validate:goals store))) +:: +++ test-moment-child-start-before-parent-fails + |. ^- tang + :: child start before parent start + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [root-id:goals %start] `jun] now) + %- expect-fail:test + |.((apply:goals store [%set-moment [a %start] `jan] now)) +:: +++ test-moment-precedence-violation + |. ^- tang + :: if a.end -> b.start, a's end moment can't be after b's start moment + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [b %start] `feb] now) + %- expect-fail:test + |.((apply:goals store [%set-moment [a %end] `mar] now)) +:: +++ test-moment-precedence-valid + |. ^- tang + :: a.end -> b.start, moments correctly ordered + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [a %start] `jan] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [a %end] `mar] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [b %start] `apr] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [b %end] `jun] now) + (expect:test !>((validate:goals store))) +:: +++ test-moment-transitive-through-no-moment + |. ^- tang + :: root -> a -> b -> c (tree), a.start=Jun, c.start=Mar + :: even though b has no moment, bound propagates through b + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child-to store id-b a ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child-to store id-c b ~) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [a %start] `jun] now) + %- expect-fail:test + |.((apply:goals store [%set-moment [c %start] `mar] now)) +:: +++ test-moment-diamond-violation + |. ^- tang + :: a -> b, a -> c, b -> d, c -> d (diamond via precedence) + :: b.end = Sep, c.end = Mar, d.start = Jun + :: path through b says d.start must be >= Sep — violation + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals d=goal-id:goals] (add-child store id-d ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [c %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [c %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [b %end] `sep] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [c %end] `mar] now) + %- expect-fail:test + |.((apply:goals store [%set-moment [d %start] `jun] now)) +:: +++ test-moment-diamond-valid + |. ^- tang + :: same diamond, but d.start after both paths + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals d=goal-id:goals] (add-child store id-d ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [c %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [c %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [b %end] `jun] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [c %end] `mar] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [d %start] `sep] now) + (expect:test !>((validate:goals store))) +:: +++ test-moment-child-end-after-parent-end-fails + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [root-id:goals %end] `jun] now) + %- expect-fail:test + |.((apply:goals store [%set-moment [a %end] `dec] now)) +:: +++ test-moment-cross-cutting-precedence + |. ^- tang + :: root -> A -> A1, A2; root -> B -> B1, B2 + :: A2.end -> B1.start (cross-cutting precedence) + :: A2.end = Sep, B1.start = Mar → violation + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store 'A' ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store 'B' ~) + =/ [store=goal-store:goals a1=goal-id:goals] (add-child-to store 'A1' a ~) + =/ [store=goal-store:goals a2=goal-id:goals] (add-child-to store 'A2' a ~) + =/ [store=goal-store:goals b1=goal-id:goals] (add-child-to store 'B1' b ~) + =/ [store=goal-store:goals b2=goal-id:goals] (add-child-to store 'B2' b ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a2 %end] [b1 %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [a2 %end] `sep] now) + %- expect-fail:test + |.((apply:goals store [%set-moment [b1 %start] `mar] now)) +:: +:: ========================================= +:: completion consistency +:: ========================================= +:: +++ test-completion-all-incomplete-ok + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + (expect:test !>((validate:goals store))) +:: +++ test-completion-leaf-done-parent-not-ok + |. ^- tang + :: child done, parent still incomplete — that's fine + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] feb) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] mar) + (expect:test !>((validate:goals store))) +:: +++ test-completion-parent-done-child-not-fails + |. ^- tang + :: parent.end done while child.end still undone — violation + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + :: try to mark b.end done while a.end is still undone + %- expect-fail:test + |.((apply:goals store [%done [b %end]] feb)) +:: +++ test-completion-precedence-valid + |. ^- tang + :: a done then b done — fine + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] jan) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] feb) + =/ [store=goal-store:goals *] (apply:goals store [%done [b %start]] mar) + =/ [store=goal-store:goals *] (apply:goals store [%done [b %end]] apr) + (expect:test !>((validate:goals store))) +:: +++ test-completion-transitive-chain + |. ^- tang + :: a.end -> b.start, b.end -> c.start (chain) + :: b and c done, a not → violation (b.start done requires a.end done) + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [c %start]] now) + :: mark a done first so we can mark b + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] jan) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] feb) + =/ [store=goal-store:goals *] (apply:goals store [%done [b %start]] mar) + =/ [store=goal-store:goals *] (apply:goals store [%done [b %end]] apr) + :: now undone a, creating violation (b.start done but a.end no longer done) + %- expect-fail:test + |.((apply:goals store [%undone [a %end]] jun)) +:: +++ test-completion-partial-ok + |. ^- tang + :: a.end -> b.start: a done, b not yet started — fine + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] jan) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] feb) + (expect:test !>((validate:goals store))) +:: +++ test-completion-diamond-violation + |. ^- tang + :: a -> b, a -> c, b -> d, c -> d (diamond via precedence) + :: a and b done, c NOT done, d done → violation + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals d=goal-id:goals] (add-child store id-d ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [c %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [c %end] [d %start]] now) + :: mark a done + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] jan) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] feb) + :: mark b done + =/ [store=goal-store:goals *] (apply:goals store [%done [b %start]] mar) + =/ [store=goal-store:goals *] (apply:goals store [%done [b %end]] apr) + :: c stays incomplete — try to mark d done → violation + %- expect-fail:test + |.((apply:goals store [%done [d %start]] jun)) +:: +++ test-completion-diamond-all-done-valid + |. ^- tang + :: same diamond, all paths complete — should be fine + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals d=goal-id:goals] (add-child store id-d ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [c %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [c %end] [d %start]] now) + :: mark everything done in order + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] jan) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] feb) + =/ [store=goal-store:goals *] (apply:goals store [%done [b %start]] mar) + =/ [store=goal-store:goals *] (apply:goals store [%done [b %end]] apr) + =/ [store=goal-store:goals *] (apply:goals store [%done [c %start]] ~2025.5.1) + =/ [store=goal-store:goals *] (apply:goals store [%done [c %end]] jun) + =/ [store=goal-store:goals *] (apply:goals store [%done [d %start]] ~2025.7.1) + =/ [store=goal-store:goals *] (apply:goals store [%done [d %end]] ~2025.8.1) + (expect:test !>((validate:goals store))) +:: +++ test-completion-leaf-and-parent-both-done-valid + |. ^- tang + :: child done, then parent done — totally fine + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] jan) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] feb) + =/ [store=goal-store:goals *] (apply:goals store [%done [root-id:goals %start]] mar) + =/ [store=goal-store:goals *] (apply:goals store [%done [root-id:goals %end]] apr) + (expect:test !>((validate:goals store))) +:: +++ test-deep-chain-alternating-completion + |. ^- tang + :: a -> b -> c -> d -> e (precedence chain) + :: a done, b done, c NOT done, d done → violation + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals d=goal-id:goals] (add-child store id-d ~) + =/ [store=goal-store:goals e=goal-id:goals] (add-child store id-e ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [c %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [c %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [d %end] [e %start]] now) + :: mark a, b done + =/ [store=goal-store:goals *] (apply:goals store [%done [a %start]] jan) + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] feb) + =/ [store=goal-store:goals *] (apply:goals store [%done [b %start]] mar) + =/ [store=goal-store:goals *] (apply:goals store [%done [b %end]] apr) + :: skip c — try to mark d.start done → violation + %- expect-fail:test + |.((apply:goals store [%done [d %start]] jun)) +:: +:: ========================================= +:: containment +:: ========================================= +:: +++ test-containment-enforced + |. ^- tang + :: after create, parent.start -> child.start and child.end -> parent.end + =/ [store=goal-store:goals cid=goal-id:goals] (add-child fresh-store id-a ~) + =/ root (~(got by store) root-id:goals) + =/ child (~(got by store) cid) + ;: weld + (expect:test !>((has-nid:goals outflow.start.root [cid %start]))) + (expect:test !>((has-nid:goals outflow.end.child [root-id:goals %end]))) + == +:: +++ test-containment-nested + |. ^- tang + :: containment edges at each level of nesting + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child-to store id-b a ~) + =/ ga (~(got by store) a) + =/ gb (~(got by store) b) + ;: weld + :: a.start -> b.start + (expect:test !>((has-nid:goals outflow.start.ga [b %start]))) + :: b.end -> a.end + (expect:test !>((has-nid:goals outflow.end.gb [a %end]))) + (expect:test !>((validate:goals store))) + == +:: +:: ========================================= +:: queries: frontier +:: ========================================= +:: +++ test-frontier-two-actionable + |. ^- tang + :: "what can I do under root?" — two independent actionable goals + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + :: policy already sets actionable on create + =/ front (frontier:goals store root-id:goals) + %+ expect-eq:test !>(2) !>((lent front)) +:: +++ test-frontier-precedence-blocks + |. ^- tang + :: a.end -> b.start (a must finish before b starts) + :: "what can I do?" — only a, because b is blocked by a + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + :: policy already sets actionable on create + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ front (frontier:goals store root-id:goals) + %+ expect-eq:test !>(1) !>((lent front)) +:: +++ test-frontier-done-excluded + |. ^- tang + :: completed goal shouldn't show up — nothing to do there + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + :: policy already sets actionable on create + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] feb) + =/ front (frontier:goals store root-id:goals) + %+ expect-eq:test !>(0) !>((lent front)) +:: +++ test-frontier-scoped-to-goal + |. ^- tang + :: a has child b (actionable). ask "frontier of a" → {b} + :: c is also actionable under root but not under a + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child-to store id-b a ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + :: policy already sets actionable on create (b and c are actionable) + ;: weld + :: frontier of a only includes b, not c + %+ expect-eq:test !>(1) !>((lent (frontier:goals store a))) + :: frontier of root includes both b and c + %+ expect-eq:test !>(2) !>((lent (frontier:goals store root-id:goals))) + == +:: +++ test-frontier-chain-only-first + |. ^- tang + :: a -> b -> c precedence chain, all actionable + :: "what do I need to do first?" — only a + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + :: policy already sets actionable on create + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [c %start]] now) + =/ front (frontier:goals store root-id:goals) + %+ expect-eq:test !>(1) !>((lent front)) +:: +++ test-frontier-all-done-empty + |. ^- tang + :: everything under a goal is done → nothing to do + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + :: policy already sets actionable on create + =/ [store=goal-store:goals *] (apply:goals store [%done [a %end]] feb) + =/ front (frontier:goals store root-id:goals) + %+ expect-eq:test !>(0) !>((lent front)) +:: +:: ========================================= +:: queries: lineage +:: ========================================= +:: +++ test-lineage + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child-to store id-b a ~) + =/ lin (lineage:goals store b) + %+ expect-eq:test !>(~[a root-id:goals]) !>(lin) +:: +++ test-lineage-root + |. ^- tang + :: root's lineage is empty + =/ lin (lineage:goals fresh-store root-id:goals) + %+ expect-eq:test !>(~) !>(lin) +:: +++ test-lineage-deep + |. ^- tang + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child-to store id-b a ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child-to store id-c b ~) + =/ lin (lineage:goals store c) + %+ expect-eq:test !>(~[b a root-id:goals]) !>(lin) +:: +:: ========================================= +:: immutability +:: ========================================= +:: +++ test-apply-returns-new-store + |. ^- tang + =/ store fresh-store + =/ [new-store=goal-store:goals *] (apply:goals store [%create id-a root-id:goals ~] now) + :: original store should still have just root + %+ expect-eq:test !>(1) !>(~(wyt by store)) +:: +++ test-immutability-on-failure + |. ^- tang + :: failed operation should not corrupt the store + =/ store fresh-store + =/ original-size ~(wyt by store) + =/ result (mole |.((apply:goals store [%delete root-id:goals] now))) + :: store should be unchanged + %+ expect-eq:test !>(original-size) !>(~(wyt by store)) +:: +:: ========================================= +:: complex traversal scenarios +:: ========================================= +:: +++ test-double-diamond-moments + |. ^- tang + :: b + :: / \ + :: a d -> e + :: \ / | + :: c f <-+ + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals d=goal-id:goals] (add-child store id-d ~) + =/ [store=goal-store:goals e=goal-id:goals] (add-child store id-e ~) + =/ [store=goal-store:goals f=goal-id:goals] (add-child store id-f ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [c %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [c %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [d %end] [e %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [e %end] [f %start]] now) + :: all valid moments, increasing left to right + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [a %start] `jan] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [a %end] `~2025.1.15] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [b %start] `feb] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [b %end] `~2025.2.15] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [c %start] `mar] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [c %end] `~2025.3.15] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [d %start] `apr] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [d %end] `~2025.4.15] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [e %start] `~2025.5.1] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [e %end] `~2025.5.15] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [f %start] `jun] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [f %end] `~2025.6.15] now) + (expect:test !>((validate:goals store))) +:: +++ test-memoization-second-path-violation + |. ^- tang + :: diamond: a -> b, a -> c, b -> d, c -> d + :: b.end = Mar, c.end = Sep, d.start = Jun + :: path through b: bound=Mar, d.start=Jun >= Mar ✓ + :: path through c: bound=Sep, d.start=Jun < Sep ✗ + :: meld takes max(Mar,Sep)=Sep, so d.start=Jun < Sep → violation + =/ [store=goal-store:goals a=goal-id:goals] (add-child fresh-store id-a ~) + =/ [store=goal-store:goals b=goal-id:goals] (add-child store id-b ~) + =/ [store=goal-store:goals c=goal-id:goals] (add-child store id-c ~) + =/ [store=goal-store:goals d=goal-id:goals] (add-child store id-d ~) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [b %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [a %end] [c %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [b %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%link [c %end] [d %start]] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [b %end] `mar] now) + =/ [store=goal-store:goals *] (apply:goals store [%set-moment [c %end] `sep] now) + %- expect-fail:test + |.((apply:goals store [%set-moment [d %start] `jun] now)) +:: +++ test-create-nonexistent-parent-fails + |. ^- tang + %- expect-fail:test + |.((apply:goals fresh-store [%create id-a 'fake' ~] now)) +-- diff --git a/desk/gub/lib/tx/auth.hoon b/desk/gub/lib/tx/auth.hoon new file mode 100644 index 0000000..119d4b9 --- /dev/null +++ b/desk/gub/lib/tx/auth.hoon @@ -0,0 +1,184 @@ +:: auth.hoon - Authorization proof building +:: +:: Builds script-sig and witness from signatures based on spend-type. +:: Pure formatting - no cryptography, just serialization. +:: +:: Input: signature bytes + pubkey (where needed) +:: Output: [script-sig witness] pair for transaction encoding +:: +:: Structure: +:: 1. Shared helpers build common witness patterns +:: 2. Per-type functions assemble the final [script-sig witness] +:: +:: Spend type formats: +:: - Legacy: script-sig contains sig+pubkey, witness empty +:: - SegWit v0: script-sig empty (or redeem), witness contains sig+pubkey +:: - Taproot: script-sig empty, witness contains sig (+ script data) +:: +/< bcu /lib/bitcoin-utils.hoon +/< btc /lib/sur/bitcoin.hoon +/< taproot /lib/taproot.hoon +|% +:: +:: Shared Helpers +:: +:: Build SegWit v0 witness stack with signature and pubkey +:: +:: Witness is a stack of items, each prefixed with its length. +:: For P2WPKH/P2SH-P2WPKH: 2 items (signature, then pubkey). +:: Verifier pops pubkey, pops signature, checks sig against pubkey. +:: +++ witness-sig-pubkey + |= [signature=hexb:btc pubkey=@] + ^- hexb:btc + =/ pubkey-len=@ (met 3 pubkey) + %- cat:byt:bcu + :~ [1 2] :: item count: 2 + [1 wid.signature] :: item 1 length + signature :: item 1: DER signature + sighash byte + [1 pubkey-len] :: item 2 length + [pubkey-len pubkey] :: item 2: compressed pubkey (33 bytes) + == +:: Build taproot control block for script-path spending +:: +:: Format: <32-byte internal pubkey> +:: Control byte encodes leaf version (0xc0) + output pubkey y-parity. +:: +++ control-block + |= [pubkey=@ =tapleaf:taproot proof=(list @ux)] + ^- hexb:btc + :: Compute tweaked pubkey to get y-parity + :: + =/ [tweaked-x=@ux parity=?] + =/ merkle-root=@ux (merkle-root-from-proof:taproot tapleaf proof) + (tweak-pubkey:taproot pubkey `merkle-root) + :: Control byte: leaf version 0xc0 + parity bit + :: + =/ control-byte=@ux ?:(parity (add 0xc0 1) 0xc0) + :: Extract x-only internal pubkey + :: + =/ internal-x=@ux (x-only:taproot pubkey) + :: Serialize proof hashes + :: + =/ proof-bytes=hexb:btc + (cat:byt:bcu (turn proof |=(h=@ux [32 h]))) + :: Assemble control block + :: + %- cat:byt:bcu + :~ [1 control-byte] + [32 internal-x] + proof-bytes + == +:: +:: ============================================================================ +:: Legacy: P2PKH +:: ============================================================================ +:: +:: Original Bitcoin format. Signature and pubkey in script-sig. +:: +++ p2pkh + |= [signature=hexb:btc pubkey=@] + ^- [script-sig=hexb:btc witness=hexb:btc] + :: Build script-sig: + :: + =/ pubkey-len=@ (met 3 pubkey) + =/ script-sig=hexb:btc + %- cat:byt:bcu + :~ [1 wid.signature] + signature + [1 pubkey-len] + [pubkey-len pubkey] + == + :: Witness is empty for legacy + :: + [script-sig [0 0x0]] +:: +:: ============================================================================ +:: SegWit v0: P2WPKH, P2SH-P2WPKH +:: ============================================================================ +:: +:: BIP-141 witness format. Signature and pubkey in witness. +:: P2SH-wrapped version includes redeem script in script-sig. +:: +++ p2wpkh + |= [signature=hexb:btc pubkey=@] + ^- [script-sig=hexb:btc witness=hexb:btc] + :: script-sig empty, witness has sig+pubkey + :: + [[0 0x0] (witness-sig-pubkey signature pubkey)] +:: +++ p2sh-p2wpkh + |= [signature=hexb:btc pubkey=@] + ^- [script-sig=hexb:btc witness=hexb:btc] + :: Hash pubkey for redeem script + :: + =/ pubkey-hexb=hexb:btc [33 pubkey] + =/ pubkey-hash=@ux dat:(hash-160:bcu pubkey-hexb) + :: Build redeem script: OP_0 (0x00) + PUSH20 (0x14) + hash + :: + =/ redeem-script=@ux (con (lsh [3 20] 0x14) pubkey-hash) + :: Build script-sig: PUSH22 (0x16) + redeem-script + :: + =/ script-sig=hexb:btc [23 (con (lsh [3 22] 0x16) redeem-script)] + :: Witness same as P2WPKH + :: + [script-sig (witness-sig-pubkey signature pubkey)] +:: +:: ============================================================================ +:: Taproot: P2TR key-path, script-path +:: ============================================================================ +:: +:: BIP-341 witness format. Signature only for key-path. +:: Script-path adds script and control block. +:: +++ p2tr-keypath + |= signature=hexb:btc + ^- [script-sig=hexb:btc witness=hexb:btc] + :: Build witness: just the Schnorr signature (64 or 65 bytes) + :: Verifier checks sig against the tweaked output pubkey. + :: + =/ witness=hexb:btc + %- cat:byt:bcu + :~ [1 1] :: item count: 1 + [1 wid.signature] :: item 1 length + signature :: item 1: Schnorr sig (64B, or 65B with sighash) + == + :: script-sig empty for taproot + :: + [[0 0x0] witness] +:: +++ p2tr-scriptpath + |= $: signature=hexb:btc + pubkey=@ + =tapleaf:taproot + proof=(list @ux) + custom-witness=(list hexb:btc) + == + ^- [script-sig=hexb:btc witness=hexb:btc] + :: Get script bytes and build control block + :: + =/ script-bytes=hexb:btc script.tapleaf + =/ cb=hexb:btc (control-block pubkey tapleaf proof) + :: Count witness items: sig + custom items + script + control-block + :: + =/ item-count=@ud (add 3 (lent custom-witness)) + :: Build witness stack (bottom to top when executed): + :: - signature: proves authorization + :: - custom items: script-specific data (e.g. preimages) + :: - script: the tapleaf script being executed + :: - control block: proves script is in the taproot tree + :: + =/ witness=hexb:btc + %- cat:byt:bcu + %- zing + :~ ~[[1 item-count]] :: witness item count + ~[[1 wid.signature] signature] :: Schnorr signature + %+ turn custom-witness :: script-specific data + |=(w=hexb:btc (cat:byt:bcu ~[[1 wid.w] w])) + ~[[1 wid.script-bytes] script-bytes] :: tapleaf script + ~[[1 wid.cb] cb] :: control block + == + :: script-sig empty for taproot + :: + [[0 0x0] witness] +-- diff --git a/desk/gub/lib/tx/build.hoon b/desk/gub/lib/tx/build.hoon new file mode 100644 index 0000000..70cbbbc --- /dev/null +++ b/desk/gub/lib/tx/build.hoon @@ -0,0 +1,207 @@ +:: build.hoon - Bitcoin transaction building and signing +:: +:: Pipeline: inputs:ap + outputs:ap → outputs:bc → inputs:bc → bytes → hex +:: +:: Limitation: No taproot annex support +:: +/< tt /lib/sur/transactions.hoon +/< bcu /lib/bitcoin-utils.hoon +/< btc /lib/sur/bitcoin.hoon +/< taproot /lib/taproot.hoon +/< bech32 /lib/bech32.hoon +/< enc /lib/tx/encode.hoon +/< sig /lib/tx/sighash.hoon +/< auth /lib/tx/auth.hoon +/< signer /lib/tx/signer.hoon +|% +:: +decode-outputs: Convert app outputs to bitcoin outputs +:: +:: Transforms human-readable addresses into scriptPubKeys. +:: Validates each address matches the network before encoding. +:: +++ decode-outputs + |= [=network:tt outputs=(list output:ap:tt)] + ^- (list output:bc:tt) + %+ turn outputs + |= [address=@t amount=@ud] + :: Validate address matches network + :: + ?> (validate-address address network) + :: Build scriptPubKey from address + :: + =/ script-pubkey=hexb:btc + ?: (is-taproot-address:taproot address) + (to-script-pubkey:taproot address) + :: segwit (bech32) or legacy (base58) address + =/ addr=tape (trip address) + ?: ?| =("bc1" (scag 3 addr)) + =("tb1" (scag 3 addr)) + =("bcrt1" (scag 5 addr)) + == + :: bech32 segwit v0: OP_0 + =+ h=(from-address:bech32 address) + (cat:byt:bcu ~[1^0x0 1^wid.h h]) + :: base58: parse and build P2PKH or P2SH scriptPubKey + =/ raw=@ux (scan addr fim:ag) + =/ h=hexb:btc [21 `@ux`raw] + =+ lead-byt=dat:(take:byt:bcu 1 h) + ?: ?| =(0x0 lead-byt) :: mainnet P2PKH + =(0x6f lead-byt) :: testnet P2PKH + == + :: OP_DUP OP_HASH160 <20-byte-hash> OP_EQUALVERIFY OP_CHECKSIG + (cat:byt:bcu ~[3^0x76.a914 (drop:byt:bcu 1 h) 2^0x88ac]) + :: P2SH: OP_HASH160 <20-byte-hash> OP_EQUAL + (cat:byt:bcu ~[2^0xa914 (drop:byt:bcu 1 h) 1^0x87]) + [script-pubkey amount] +:: +validate-address: Check address prefix matches network +:: +++ validate-address + |= [address=@t =network:tt] + ^- ? + =/ addr=tape (trip address) + =/ c1=tape (scag 1 addr) + ?- network + %main ?| =("bc1" (scag 3 addr)) + =("1" c1) + =("3" c1) + == + %regtest ?| =("bcrt1" (scag 5 addr)) + =("m" c1) =("n" c1) =("2" c1) + == + ?(%testnet3 %testnet4 %signet) + ?| =("tb1" (scag 3 addr)) + =("bcrt1" (scag 5 addr)) + =("m" c1) =("n" c1) =("2" c1) + == + == +:: +sign-inputs: Sign all inputs in a transaction +:: +++ sign-inputs + |= $: inputs=(list input:ap:tt) + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + == + ^- (list input:bc:tt) + =/ n=@ud (lent inputs) + =/ idx=@ud 0 + |- + ?: =(idx n) ~ + :- (sign-input (snag idx inputs) inputs idx outputs nversion nlocktime) + $(idx +(idx)) +:: +sign-input: Sign a single input +:: +:: Dispatches to appropriate sighash algorithm based on spend-type. +:: Returns bitcoin-legible input with script-sig and witness. +:: +++ sign-input + |= $: input=input:ap:tt + all-inputs=(list input:ap:tt) + idx=@ud + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + == + ^- input:bc:tt + =/ [script-sig=hexb:btc witness=hexb:btc] + ?- -.spend-type.input + :: + :: Legacy P2PKH: ECDSA signature in scriptSig + :: + %p2pkh + =/ sighash (build:legacy:sig (to-legacy-inputs:sig all-inputs) idx outputs nversion nlocktime) + =/ signature (ecdsa:signer sighash privkey.input) + (p2pkh:auth signature pubkey.input) + :: + :: SegWit v0: ECDSA signature in witness (BIP-143 sighash) + :: + ?(%p2wpkh %p2sh-p2wpkh) + =/ sighash (build:bip143:sig (to-bip143-inputs:sig all-inputs) idx outputs nversion nlocktime) + =/ signature (ecdsa:signer sighash privkey.input) + ?- -.spend-type.input + %p2wpkh (p2wpkh:auth signature pubkey.input) + %p2sh-p2wpkh (p2sh-p2wpkh:auth signature pubkey.input) + == + :: + :: Taproot: Schnorr signature in witness (BIP-341 sighash) + :: + %p2tr + =/ bip341-inputs (to-bip341-inputs:sig all-inputs) + ?- -.+.spend-type.input + :: Key-path: sign with tweaked private key + :: + %key-path + =/ sighash (build:bip341:sig bip341-inputs idx outputs nversion nlocktime ~) + =/ merkle-root merkle-root.+.spend-type.input + =/ tweaked-privkey (tweak-privkey:taproot privkey.input pubkey.input merkle-root) + (p2tr-keypath:auth (schnorr:signer sighash tweaked-privkey 0)) + :: Script-path: sign with internal key, include script + proof + :: + %script-path + =/ leaf-hash (leaf-hash:taproot tapleaf.+.spend-type.input) + =/ ext [leaf-hash 0xc0 `@ud`0xffff.ffff] + =/ sighash (build:bip341:sig bip341-inputs idx outputs nversion nlocktime `ext) + =/ signature (schnorr:signer sighash privkey.input 0) + %: p2tr-scriptpath:auth + signature + pubkey.input + tapleaf.+.spend-type.input + proof.+.spend-type.input + witness.+.spend-type.input + == + == + == + [txid.input vout.input sequence.input script-sig witness] +:: +encode-transaction: Serialize signed transaction to bytes +:: +++ encode-transaction + |= $: inputs=(list input:bc:tt) + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + segwit=? + == + ^- hexb:btc + ?: segwit + (segwit-transaction:enc inputs outputs nversion nlocktime) + (legacy-transaction:enc inputs outputs nversion nlocktime) +:: +has-segwit: Check if any input requires witness data +:: +++ has-segwit + |= inputs=(list input:ap:tt) + ^- ? + %+ lien inputs + |=(=input:ap:tt ?=(?(%p2wpkh %p2sh-p2wpkh %p2tr) -.spend-type.input)) +:: +render-hex: Convert bytes to hex string +:: +++ render-hex + |= h=hexb:btc + ^- tape + (trip (crip ((x-co:co (mul 2 wid.h)) dat.h))) +:: +build-transaction: Build and sign a complete transaction +:: +:: Main entry point. Takes app-level inputs/outputs and returns +:: a broadcastable hex-encoded transaction. +:: +++ build-transaction + |= $: =network:tt + nversion=@ud + inputs=(list input:ap:tt) + outputs=(list output:ap:tt) + nlocktime=@ud + == + ^- tape + :: Decode outputs (addresses → scripts) + :: + =/ bc-outputs=(list output:bc:tt) + (decode-outputs network outputs) + :: Sign inputs (app inputs → bitcoin inputs) + :: + =/ bc-inputs=(list input:bc:tt) + (sign-inputs inputs bc-outputs nversion nlocktime) + :: Encode and render + :: + =/ tx-bytes=hexb:btc + (encode-transaction bc-inputs bc-outputs nversion nlocktime (has-segwit inputs)) + (render-hex tx-bytes) +-- diff --git a/desk/gub/lib/tx/draft.hoon b/desk/gub/lib/tx/draft.hoon new file mode 100644 index 0000000..cd84c1c --- /dev/null +++ b/desk/gub/lib/tx/draft.hoon @@ -0,0 +1,152 @@ +:: draft.hoon - Draft transaction types and utilities +:: +:: Types and functions for working with draft transactions before signing. +:: Handles fee estimation, address type detection, and output building. +:: +/< fees /lib/tx/fees.hoon +/< taproot /lib/taproot.hoon +|% +:: Types +:: ++$ utxo-input + $: txid=@t + vout=@ud + amount=@ud + =spend:fees + == +:: ++$ output + $: address=@t + amount=@ud + == +:: ++$ change-config + $: fee-rate=@ud + address=@t + == +:: ++$ select-mode ?(%random %largest-first) +:: ++$ transaction + $: inputs=(list utxo-input) + outputs=(list output) + change=(unit change-config) + auto-select=(unit select-mode) + created=@da + modified=@da + == +:: +sum-inputs: Sum total amount of inputs +:: +++ sum-inputs + |= inputs=(list utxo-input) + ^- @ud + %+ roll inputs + |= [in=utxo-input sum=@ud] + (add sum amount.in) +:: +sum-outputs: Sum total amount of outputs +:: +++ sum-outputs + |= outputs=(list output) + ^- @ud + %+ roll outputs + |= [out=output sum=@ud] + (add sum amount.out) +:: +calculate-vbytes: Calculate vbytes for a draft transaction +:: +:: Sums overhead + inputs + outputs + change (if configured). +:: +++ calculate-vbytes + |= draft=transaction + ^- @ud + :: Sum input vbytes based on spend type + :: + =/ inputs-vb=@ud + %+ roll inputs.draft + |= [in=utxo-input sum=@ud] + (add sum (input-vbytes:fees spend.in)) + :: Sum output vbytes based on address type + :: + =/ outputs-vb=@ud + %+ roll outputs.draft + |= [out=output sum=@ud] + (add sum (output-vbytes:fees (address-to-spend address.out))) + :: Add change output if configured + :: + =/ change-vb=@ud + ?~ change.draft 0 + (output-vbytes:fees (address-to-spend address.u.change.draft)) + :: Total: overhead + inputs + outputs + change + :: + ;: add + overhead-vbytes:fees + inputs-vb + outputs-vb + change-vb + == +:: Address format detection +:: +++ is-p2wpkh-address + |= addr=@t + ^- ? + =/ prefix=tape (scag 6 (trip addr)) + ?| =("bc1q" (scag 4 prefix)) + =("tb1q" (scag 4 prefix)) + =("bcrt1q" prefix) + == +:: +++ is-p2sh-address + |= addr=@t + ^- ? + =/ first=tape (scag 1 (trip addr)) + ?| =("3" first) + =("2" first) + == +:: +++ is-p2pkh-address + |= addr=@t + ^- ? + =/ first=tape (scag 1 (trip addr)) + ?| =("1" first) + =("m" first) + =("n" first) + == +:: +++ address-to-spend + |= addr=@t + ^- spend:fees + ?: (is-taproot-address:taproot addr) %p2tr + ?: (is-p2wpkh-address addr) %p2wpkh + ?: (is-p2sh-address addr) %p2sh-p2wpkh + ?> (is-p2pkh-address addr) %p2pkh +:: +incorporate-change: Add change output to draft if applicable +:: +:: Crashes if insufficient funds (caller should validate first). +:: Absorbs dust change into fee silently. +:: +++ incorporate-change + |= draft=transaction + ^- (list output) + :: No change configured - return outputs as-is + :: + ?~ change.draft + outputs.draft + :: Sum up inputs and outputs + :: + =/ total-inputs=@ud (sum-inputs inputs.draft) + =/ total-outputs=@ud (sum-outputs outputs.draft) + :: Calculate transaction size and fee + :: + =/ vbytes=@ud (calculate-vbytes draft) + =/ fee=@ud (calculate-fee:fees vbytes fee-rate.u.change.draft) + :: Calculate change amount + :: + =/ result=change-result:fees + (calculate-change-result:fees total-inputs total-outputs fee) + :: Handle result + :: + ?- -.result + %insufficient !! :: caller bug - should validate first + %dust outputs.draft :: absorb into fee + %ok (snoc outputs.draft [address.u.change.draft amount.result]) + == +-- diff --git a/desk/gub/lib/tx/encode.hoon b/desk/gub/lib/tx/encode.hoon new file mode 100644 index 0000000..3ff42f0 --- /dev/null +++ b/desk/gub/lib/tx/encode.hoon @@ -0,0 +1,114 @@ +:: encode.hoon - Bitcoin transaction serialization +:: +:: Pure byte serialization for SegWit (BIP-141) and legacy formats. +:: Takes fully-built inputs (with script-sig and witness) and outputs. +:: +/< tt /lib/sur/transactions.hoon +/< bcu /lib/bitcoin-utils.hoon +/< btc /lib/sur/bitcoin.hoon +|% +:: +encode-varint: Encode number as Bitcoin VarInt (CompactSize) +:: +++ encode-varint + |= n=@ + ^- hexb:btc + :: 0-252: single byte, value as-is + :: + ?: (lth n 253) + [1 n] + :: 253-65535: marker 0xfd + 2 bytes little-endian + :: + ?: (lth n 65.536) + (cat:byt:bcu ~[[1 0xfd] (flip:byt:bcu [2 n])]) + :: 65536-4294967295: marker 0xfe + 4 bytes little-endian + :: + ?: (lth n 4.294.967.296) + (cat:byt:bcu ~[[1 0xfe] (flip:byt:bcu [4 n])]) + :: larger: marker 0xff + 8 bytes little-endian + :: + (cat:byt:bcu ~[[1 0xff] (flip:byt:bcu [8 n])]) +:: +serialize-outputs: Serialize outputs to wire format +:: +:: Each output: [amount 8B LE] [script-len] [script-pubkey] +:: +++ serialize-outputs + |= outputs=(list output:bc:tt) + ^- hexb:btc + %- cat:byt:bcu + %+ turn outputs + |= =output:bc:tt + %- cat:byt:bcu + :~ (flip:byt:bcu [8 amount.output]) :: amount: 8 bytes little-endian + [1 wid.script-pubkey.output] :: script length + script-pubkey.output :: script-pubkey bytes + == +:: +serialize-inputs: Serialize inputs to wire format +:: +:: Each input: [txid 32B] [vout 4B LE] [script-sig-len] [script-sig] [sequence 4B LE] +:: +++ serialize-inputs + |= inputs=(list input:bc:tt) + ^- hexb:btc + %- cat:byt:bcu + %+ turn inputs + |= =input:bc:tt + %- cat:byt:bcu + :~ [32 txid.input] :: txid: 32 bytes + (flip:byt:bcu [4 vout.input]) :: vout: 4 bytes little-endian + (encode-varint wid.script-sig.input) :: script-sig length + script-sig.input :: script-sig bytes + (flip:byt:bcu [4 sequence.input]) :: sequence: 4 bytes little-endian + == +:: +serialize-witnesses: Concatenate pre-built witness data +:: +++ serialize-witnesses + |= inputs=(list input:bc:tt) + ^- hexb:btc + %- cat:byt:bcu + (turn inputs |=(=input:bc:tt witness.input)) +:: +segwit-transaction: Encode complete SegWit transaction (BIP-141) +:: +:: Returns serialized transaction with marker/flag bytes and witness data. +:: +++ segwit-transaction + |= $: inputs=(list input:bc:tt) + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + == + ^- hexb:btc + =/ input-count=@ (lent inputs) + =/ output-count=@ (lent outputs) + %- cat:byt:bcu + :~ (flip:byt:bcu [4 nversion]) + [1 0] :: marker (0x00) + [1 1] :: flag (0x01) + (encode-varint input-count) + (serialize-inputs inputs) + (encode-varint output-count) + (serialize-outputs outputs) + (serialize-witnesses inputs) + (flip:byt:bcu [4 nlocktime]) + == +:: +legacy-transaction: Encode complete legacy (non-SegWit) transaction +:: +:: No marker/flag bytes, no witness data. Original Bitcoin format. +:: +++ legacy-transaction + |= $: inputs=(list input:bc:tt) + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + == + ^- hexb:btc + =/ input-count=@ (lent inputs) + =/ output-count=@ (lent outputs) + %- cat:byt:bcu + :~ (flip:byt:bcu [4 nversion]) + (encode-varint input-count) + (serialize-inputs inputs) + (encode-varint output-count) + (serialize-outputs outputs) + (flip:byt:bcu [4 nlocktime]) + == +-- diff --git a/desk/gub/lib/tx/fees.hoon b/desk/gub/lib/tx/fees.hoon new file mode 100644 index 0000000..08d2684 --- /dev/null +++ b/desk/gub/lib/tx/fees.hoon @@ -0,0 +1,93 @@ +:: fees.hoon - Bitcoin transaction fee estimation +:: +:: Virtual byte (vbyte) constants and fee calculations. +:: Based on BIP-141 SegWit weight calculations. +:: +|% ++$ spend ?(%p2pkh %p2wpkh %p2sh-p2wpkh %p2tr) +:: Transaction overhead: version (4) + locktime (4) + marker/flag (2) + +:: ~1 varint +:: +++ overhead-vbytes 11 +:: +:: Dust threshold in satoshis +:: +:: Outputs below this are uneconomical to spend. ~3x the cost to spend +:: a P2WPKH input at 1 sat/vB (3 * 68 = 204). +:: +++ dust-threshold 204 +:: +:: Input vbytes by script type +:: P2WPKH: 68, P2PKH: 148, P2TR: 58, P2SH-P2WPKH: 91 +:: +++ input-vbytes + |= =spend + ^- @ud + ?- spend + %p2pkh 148 + %p2wpkh 68 + %p2sh-p2wpkh 91 + %p2tr 58 + == +:: +:: Output vbytes by script type +:: P2WPKH: 31, P2PKH: 34, P2TR: 43, P2SH-P2WPKH: 32 +:: +++ output-vbytes + |= =spend + ^- @ud + ?- spend + %p2pkh 34 + %p2wpkh 31 + %p2sh-p2wpkh 32 + %p2tr 43 + == +:: Calculate fee from vbytes and fee rate (sat/vB) +:: +:: Hook for future fee policy: min/max bounds, RBF bumping, rounding, etc. +:: +++ calculate-fee + |= [vbytes=@ud fee-rate=@ud] + ^- @ud + (mul vbytes fee-rate) +:: Change calculation result +:: ++$ change-result + $% [%ok amount=@ud] + [%insufficient shortfall=@ud] :: need this many more sats + [%dust amount=@ud] :: change exists but below threshold + == +:: +calculate-change-result: Calculate change with detailed result +:: +++ calculate-change-result + |= [total-inputs=@ud total-outputs=@ud fee=@ud] + ^- change-result + :: Calculate amount needed (outputs + fee) + :: + =/ needed=@ud (add total-outputs fee) + :: Check if inputs cover needed amount + :: + ?: (lth total-inputs needed) + [%insufficient (sub needed total-inputs)] + :: Calculate leftover as change + :: + =/ change=@ud (sub total-inputs needed) + :: Check if change is above dust threshold + :: + ?: (gte change dust-threshold) + [%ok change] + [%dust change] +:: Calculate change amount +:: +:: Returns ~ if change would be negative or dust +:: +++ calculate-change + |= [total-inputs=@ud total-outputs=@ud fee=@ud] + ^- (unit @ud) + =/ result=change-result (calculate-change-result total-inputs total-outputs fee) + ?- -.result + %dust ~ + %insufficient ~ + %ok `amount.result + == +-- diff --git a/desk/gub/lib/tx/select.hoon b/desk/gub/lib/tx/select.hoon new file mode 100644 index 0000000..f0ae74e --- /dev/null +++ b/desk/gub/lib/tx/select.hoon @@ -0,0 +1,127 @@ +:: select.hoon - UTXO selection algorithms +:: +:: Provides strategies for automatically selecting UTXOs to fund a transaction. +:: All selectors return ~ if insufficient funds, or a list of selected UTXOs. +:: +/< fees /lib/tx/fees.hoon +|% +:: Minimal UTXO type for selection +:: ++$ selectable + $: txid=@t + vout=@ud + amount=@ud + =spend:fees + == +:: +calculate-selection-fee: Calculate fee for a set of inputs +:: +:: Used internally by selection algorithms to calculate running fee. +:: +++ calculate-selection-fee + |= [inputs=(list selectable) output-vbytes=@ud fee-rate=@ud] + ^- @ud + :: Sum input vbytes + :: + =/ input-vbytes=@ud + %+ roll inputs + |= [in=selectable sum=@ud] + (add sum (input-vbytes:fees spend.in)) + :: Calculate total vbytes + :: + =/ vbytes=@ud + ;: add + overhead-vbytes:fees + input-vbytes + output-vbytes + == + :: Calculate fee + :: + (calculate-fee:fees vbytes fee-rate) +:: +accumulate: Core accumulator - picks from front until target met +:: +:: Takes a pre-ordered list and selects from the front until target + fee +:: is covered. Returns ~ if insufficient funds. +:: +++ accumulate + |= [ordered=(list selectable) target=@ud output-vbytes=@ud fee-rate=@ud] + ^- (unit (list selectable)) + :: No UTXOs available + :: + ?: =(~ ordered) ~ + :: Initialize state + :: + =| selected=(list selectable) + =| total=@ud + :: Accumulate until target met + :: + |- + :: Calculate fee based on current selection + :: + =/ fee=@ud (calculate-selection-fee selected output-vbytes fee-rate) + =/ needed=@ud (add target fee) + :: Success: have enough + :: + ?: (gte total needed) + `selected + :: Failure: nothing left to pick + :: + ?: =(~ ordered) ~ + :: Pick next UTXO from front + :: + =/ pick=selectable (snag 0 ordered) + :: Add to selection and continue + :: + %= $ + selected (snoc selected pick) + total (add total amount.pick) + ordered (slag 1 ordered) + == +:: +shuffle: Randomly reorder a list (Fisher-Yates) +:: +++ shuffle + |= [l=(list selectable) eny=@uvJ] + ^- (list selectable) + :: Initialize RNG and state + :: + =/ rng ~(. og eny) + =/ remaining=(list selectable) l + =/ result=(list selectable) ~ + :: Pick random elements until none remain + :: + |- ^- (list selectable) + ?~ remaining result + :: Pick random index and extract element + :: + =^ idx rng (rads:rng (lent remaining)) + =/ pick=selectable + (snag idx `(list selectable)`remaining) + =/ new-remaining=(list selectable) + (oust [idx 1] `(list selectable)`remaining) + :: Add to result and continue + :: + $(result (snoc result pick), remaining new-remaining) +:: +random: Random selection - shuffle and accumulate +:: +++ random + |= [utxos=(list selectable) target=@ud output-vbytes=@ud fee-rate=@ud eny=@uvJ] + ^- (unit (list selectable)) + (accumulate (shuffle utxos eny) target output-vbytes fee-rate) +:: +largest-first: Select largest UTXOs first +:: +++ largest-first + |= [utxos=(list selectable) target=@ud output-vbytes=@ud fee-rate=@ud] + ^- (unit (list selectable)) + =/ sorted=(list selectable) + %+ sort utxos + |=([a=selectable b=selectable] (gth amount.a amount.b)) + (accumulate sorted target output-vbytes fee-rate) +:: +smallest-first: Select smallest UTXOs first (consolidation) +:: +++ smallest-first + |= [utxos=(list selectable) target=@ud output-vbytes=@ud fee-rate=@ud] + ^- (unit (list selectable)) + =/ sorted=(list selectable) + %+ sort utxos + |=([a=selectable b=selectable] (lth amount.a amount.b)) + (accumulate sorted target output-vbytes fee-rate) +-- diff --git a/desk/gub/lib/tx/sighash.hoon b/desk/gub/lib/tx/sighash.hoon new file mode 100644 index 0000000..84266bc --- /dev/null +++ b/desk/gub/lib/tx/sighash.hoon @@ -0,0 +1,443 @@ +:: sighash.hoon - Transaction signing digests +:: +:: Computes the hash that gets signed for different Bitcoin script types. +:: Each BIP requires different data in the preimage, so this library handles: +:: +:: 1. Script building - construct the script needed for each sighash type +:: 2. Input conversion - transform app inputs into sighash-ready format +:: 3. Preimage construction - serialize data per BIP specification +:: 4. Final hash - apply the appropriate hash function +:: +:: Supported algorithms: +:: - Legacy: P2PKH - needs scriptPubKey in preimage +:: - BIP-143: P2WPKH, P2SH-P2WPKH - needs scriptCode (P2PKH-style) +:: - BIP-341: P2TR key/script-path - needs scriptPubKey, tagged hash +:: +:: Entry points: +:: - to-*-inputs: convert (list input:ap:tt) for each algorithm +:: - build:legacy/bip143/bip341: compute final sighash +:: +:: TODO: SIGHASH_NONE, SIGHASH_SINGLE, SIGHASH_ANYONECANPAY +:: +/< tt /lib/sur/transactions.hoon +/< bcu /lib/bitcoin-utils.hoon +/< btc /lib/sur/bitcoin.hoon +/< enc /lib/tx/encode.hoon +/< taproot /lib/taproot.hoon +|% +:: ============================================================================ +:: Sighash Input Types +:: ============================================================================ +:: +:: Internal types with pre-built scripts. Callers use to-*-inputs converters. +:: ++$ sighash-input :: BIP-143/341: includes amount + $: txid=@ + vout=@ud + amount=@ud + sequence=@ud + script-pubkey=hexb:btc :: scriptCode or scriptPubKey + == +:: ++$ sighash-input-legacy :: Legacy: no amount field + $: txid=@ + vout=@ + sequence=@ + script-pubkey=hexb:btc + == +:: +:: ============================================================================ +:: Script Building +:: ============================================================================ +:: +:: Build the scripts that go into sighash preimages. Different BIPs need +:: different scripts - this is input-side script building (we have the pubkey). +:: +:: +build-script-pubkey: The actual locking script for an input +:: +:: Used by Legacy and BIP-341 which commit to the real scriptPubKey. +:: Takes pubkey + spend-type because we're signing inputs we control. +:: +++ build-script-pubkey + |= [pubkey=@ =spend-type:tt] + ^- hexb:btc + ?- -.spend-type + %p2pkh + :: OP_DUP OP_HASH160 <20-byte-hash> OP_EQUALVERIFY OP_CHECKSIG + =/ pubkey-hash=@ux dat:(hash-160:bcu [33 pubkey]) + :- 25 + %+ con (lsh [3 22] 0x76.a914) + %+ con (lsh [3 2] pubkey-hash) + 0x88ac + :: + %p2wpkh + :: OP_0 <20-byte-pubkey-hash> + =/ pubkey-hash=@ux dat:(hash-160:bcu [33 pubkey]) + [22 (con (lsh [3 20] 0x14) pubkey-hash)] + :: + %p2sh-p2wpkh + :: OP_HASH160 <20-byte-script-hash> OP_EQUAL + =/ pubkey-hash=@ux dat:(hash-160:bcu [33 pubkey]) + =/ witness-program=hexb:btc [22 (con (lsh [3 20] 0x14) pubkey-hash)] + =/ script-hash=@ux dat:(hash-160:bcu witness-program) + :- 23 + %+ con (lsh [3 21] 0xa914) + %+ con (lsh [3 1] script-hash) + 0x87 + :: + %p2tr + :: OP_1 <32-byte-x-only-tweaked-pubkey> + =/ merkle-root=(unit @ux) + ?- -.+.spend-type + %key-path merkle-root.+.spend-type + %script-path `(merkle-root-from-proof:taproot tapleaf.+.spend-type proof.+.spend-type) + == + =/ tweaked-x=@ux (output-pubkey:taproot pubkey merkle-root) + [34 (con (lsh [3 32] 0x5120) tweaked-x)] + == +:: +:: +build-script-code: BIP-143 scriptCode (not a real script) +:: +:: BIP-143 invented a special format for SegWit v0 sighash: a P2PKH-style +:: script with length prefix. This never appears on-chain - it's only for +:: the sighash preimage. Format: 19 76 a9 14 <20-byte-hash> 88 ac +:: +++ build-script-code + |= pubkey=@ + ^- hexb:btc + =/ pubkey-hash=@ux dat:(hash-160:bcu [33 pubkey]) + :- 26 + %+ con (lsh [3 22] 0x1976.a914) + %+ con (lsh [3 2] pubkey-hash) + 0x88ac +:: +:: ============================================================================ +:: Input Conversion +:: ============================================================================ +:: +:: Transform app-level inputs into sighash-ready format. Each converter builds +:: the appropriate script for its algorithm - callers just pass input:ap:tt. +:: +++ to-bip143-inputs :: P2WPKH, P2SH-P2WPKH + :: Uses scriptCode (P2PKH-style with length prefix) + |= inputs=(list input:ap:tt) + ^- (list sighash-input) + %+ turn inputs + |= =input:ap:tt + :* txid.input + vout.input + amount.input + sequence.input + (build-script-code pubkey.input) + == +:: +++ to-bip341-inputs :: P2TR key-path, script-path + :: Uses actual scriptPubKey (with tweaked pubkey) + |= inputs=(list input:ap:tt) + ^- (list sighash-input) + %+ turn inputs + |= =input:ap:tt + :* txid.input + vout.input + amount.input + sequence.input + (build-script-pubkey pubkey.input spend-type.input) + == +:: +++ to-legacy-inputs :: P2PKH + :: Uses actual scriptPubKey (no amount field) + |= inputs=(list input:ap:tt) + ^- (list sighash-input-legacy) + %+ turn inputs + |= =input:ap:tt + :* txid.input + vout.input + sequence.input + (build-script-pubkey pubkey.input spend-type.input) + == +:: +:: ============================================================================ +:: Shared Serializers +:: ============================================================================ +:: +:: Concatenate input/output fields for hashing. Used by both BIP-143 (dsha256) +:: and BIP-341 (sha256) - the hash function differs, but serialization is same. +:: +++ cat-prevouts :: txid || vout for each input + |= inputs=(list sighash-input) + ^- hexb:btc + %- cat:byt:bcu + %+ turn inputs + |= =sighash-input + (cat:byt:bcu ~[[32 txid.sighash-input] (flip:byt:bcu [4 vout.sighash-input])]) +:: +++ cat-sequences :: sequence for each input + |= inputs=(list sighash-input) + ^- hexb:btc + %- cat:byt:bcu + (turn inputs |=(=sighash-input (flip:byt:bcu [4 sequence.sighash-input]))) +:: +++ cat-amounts :: amount for each input (BIP-341 only) + |= inputs=(list sighash-input) + ^- hexb:btc + %- cat:byt:bcu + (turn inputs |=(=sighash-input (flip:byt:bcu [8 amount.sighash-input]))) +:: +++ cat-scriptpubkeys :: scriptPubKey for each input (BIP-341 only) + |= inputs=(list sighash-input) + ^- hexb:btc + %- cat:byt:bcu + %+ turn inputs + |= =sighash-input + (cat:byt:bcu ~[(encode-varint:enc wid.script-pubkey.sighash-input) script-pubkey.sighash-input]) +:: +:: ============================================================================ +:: BIP-143: SegWit v0 Sighash (P2WPKH, P2SH-P2WPKH) +:: ============================================================================ +:: +:: Commits to all input amounts (malleability fix). Uses dsha256. +:: Preimage: version || hashPrevouts || hashSequence || outpoint || +:: scriptCode || amount || sequence || hashOutputs || locktime || sighash +:: +++ bip143 + |% + ++ hash-prevouts :: dsha256(prevouts) + |= inputs=(list sighash-input) + (dsha256:bcu (cat-prevouts inputs)) + :: + ++ hash-sequences :: dsha256(sequences) + |= inputs=(list sighash-input) + (dsha256:bcu (cat-sequences inputs)) + :: + ++ hash-outputs :: dsha256(outputs) + |= outputs=(list output:bc:tt) + (dsha256:bcu (serialize-outputs:enc outputs)) + :: +signing-input: Serialize signing input fields for preimage + :: + :: outpoint || scriptCode || amount || sequence + :: + ++ signing-input + |= inp=sighash-input + ^- hexb:btc + %- cat:byt:bcu + :~ [32 txid.inp] + (flip:byt:bcu [4 vout.inp]) + script-pubkey.inp + (flip:byt:bcu [8 amount.inp]) + (flip:byt:bcu [4 sequence.inp]) + == + :: +preimage: Build BIP-143 preimage + :: + :: version || hashPrevouts || hashSequence || signing-input || + :: hashOutputs || locktime || sighash_type + :: + ++ preimage + |= $: inputs=(list sighash-input) + signing-index=@ud + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + == + ^- hexb:btc + %- cat:byt:bcu + :~ (flip:byt:bcu [4 nversion]) + (hash-prevouts inputs) + (hash-sequences inputs) + (signing-input (snag signing-index inputs)) + (hash-outputs outputs) + (flip:byt:bcu [4 nlocktime]) + (flip:byt:bcu [4 1]) :: SIGHASH_ALL + == + :: +build: Build BIP-143 sighash (dsha256 of preimage) + :: + ++ build + |= $: inputs=(list sighash-input) + signing-index=@ud + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + == + ^- hexb:btc + (dsha256:bcu (preimage inputs signing-index outputs nversion nlocktime)) + -- +:: +:: ============================================================================ +:: BIP-341: Taproot Sighash (P2TR) +:: ============================================================================ +:: +:: Commits to all scriptPubKeys (cross-input signature aggregation safety). +:: Uses sha256 with tagged hash ("TapSighash"). Script-path adds leaf hash. +:: Message: epoch || sighash || version || locktime || sha256(prevouts) || +:: sha256(amounts) || sha256(scriptpubkeys) || sha256(sequences) || +:: sha256(outputs) || spend_type || input_index [|| ext] +:: +++ bip341 + |% + ++ sha-prevouts + |= inputs=(list sighash-input) + (sha256:bcu (cat-prevouts inputs)) + :: + ++ sha-amounts + |= inputs=(list sighash-input) + (sha256:bcu (cat-amounts inputs)) + :: + ++ sha-scriptpubkeys + |= inputs=(list sighash-input) + (sha256:bcu (cat-scriptpubkeys inputs)) + :: + ++ sha-sequences + |= inputs=(list sighash-input) + (sha256:bcu (cat-sequences inputs)) + :: + ++ sha-outputs + |= outputs=(list output:bc:tt) + (sha256:bcu (serialize-outputs:enc outputs)) + :: +sha-all: All 5 component hashes concatenated + :: + ++ sha-all + |= [inputs=(list sighash-input) outputs=(list output:bc:tt)] + ^- hexb:btc + %- cat:byt:bcu + :~ (sha-prevouts inputs) + (sha-amounts inputs) + (sha-scriptpubkeys inputs) + (sha-sequences inputs) + (sha-outputs outputs) + == + :: Script-path extension for BIP-341 + :: + +$ script-path-ext + $: leaf-hash=@ux + key-version=@ux + code-sep-pos=@ud + == + :: +ext-bytes: Serialize script-path extension + :: + ++ ext-bytes + |= ext=script-path-ext + ^- hexb:btc + %- cat:byt:bcu + :~ [32 leaf-hash.ext] + [1 key-version.ext] + (flip:byt:bcu [4 code-sep-pos.ext]) + == + :: +base-msg: Common message for key-path and script-path + :: + ++ base-msg + |= $: inputs=(list sighash-input) + signing-index=@ud + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + is-script-path=? + == + ^- hexb:btc + %- cat:byt:bcu + :~ [1 0x0] :: epoch + [1 0x0] :: SIGHASH_DEFAULT + (flip:byt:bcu [4 nversion]) + (flip:byt:bcu [4 nlocktime]) + (sha-all inputs outputs) + ?:(is-script-path [1 0x2] [1 0x0]) :: spend_type + (flip:byt:bcu [4 signing-index]) + == + :: +message: Build BIP-341 sighash message + :: + ++ message + |= $: inputs=(list sighash-input) + signing-index=@ud + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + ext=(unit script-path-ext) + == + ^- hexb:btc + =/ base=hexb:btc + (base-msg inputs signing-index outputs nversion nlocktime ?=(^ ext)) + ?~ ext base + (cat:byt:bcu ~[base (ext-bytes u.ext)]) + :: +build: Build BIP-341 sighash (tagged hash of message) + :: + ++ build + |= $: inputs=(list sighash-input) + signing-index=@ud + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + ext=(unit script-path-ext) + == + ^- hexb:btc + =/ msg=hexb:btc (message inputs signing-index outputs nversion nlocktime ext) + =/ sighash=@ + (tagged-hash:schnorr:secp256k1:secp:crypto 'TapSighash' [p=wid.msg q=dat.msg]) + [32 `@ux`sighash] + -- +:: +:: ============================================================================ +:: Legacy: P2PKH Sighash +:: ============================================================================ +:: +:: Original Bitcoin signing. Serializes entire transaction (no component hashes). +:: Signing input gets scriptPubKey as scriptSig, others get empty. Uses dsha256. +:: Preimage: version || inputs || outputs || locktime || sighash_type +:: +++ legacy + |% + ++ serialize-input + |= [inp=sighash-input-legacy is-signing=?] + ^- hexb:btc + =/ script-sig=hexb:btc + ?: is-signing script-pubkey.inp + [0 0x0] + %- cat:byt:bcu + :~ [32 txid.inp] + (flip:byt:bcu [4 vout.inp]) + (encode-varint:enc wid.script-sig) + script-sig + (flip:byt:bcu [4 sequence.inp]) + == + :: +serialize-inputs: Serialize all inputs for sighash + :: + ++ serialize-inputs + |= [inputs=(list sighash-input-legacy) signing-index=@ud] + ^- hexb:btc + =/ n=@ (lent inputs) + ?: =(0 n) [0 0x0] + %- cat:byt:bcu + %+ turn (gulf 0 (dec n)) + |= idx=@ud + (serialize-input (snag idx inputs) =(idx signing-index)) + :: +preimage: Build legacy preimage + :: + :: version || inputs || outputs || locktime || sighash_type + :: + ++ preimage + |= $: inputs=(list sighash-input-legacy) + signing-index=@ud + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + == + ^- hexb:btc + %- cat:byt:bcu + :~ (flip:byt:bcu [4 nversion]) + (encode-varint:enc (lent inputs)) + (serialize-inputs inputs signing-index) + (encode-varint:enc (lent outputs)) + (serialize-outputs:enc outputs) + (flip:byt:bcu [4 nlocktime]) + (flip:byt:bcu [4 1]) :: SIGHASH_ALL + == + :: +build: Build legacy sighash (dsha256 of preimage) + :: + ++ build + |= $: inputs=(list sighash-input-legacy) + signing-index=@ud + outputs=(list output:bc:tt) + nversion=@ud + nlocktime=@ud + == + ^- hexb:btc + (dsha256:bcu (preimage inputs signing-index outputs nversion nlocktime)) + -- +-- diff --git a/desk/gub/lib/tx/signer.hoon b/desk/gub/lib/tx/signer.hoon new file mode 100644 index 0000000..185759e --- /dev/null +++ b/desk/gub/lib/tx/signer.hoon @@ -0,0 +1,77 @@ +:: signer.hoon - Cryptographic signature generation +:: +:: Pure cryptography - signs hashes, returns signature bytes. +:: No transaction structure knowledge, just signing primitives. +:: +:: Input: sighash (the hash to sign) + private key +:: Output: signature bytes ready for authorization proof +:: +:: Algorithms: +:: - ECDSA: Legacy and SegWit v0 (P2PKH, P2WPKH, P2SH-P2WPKH) +:: - Schnorr: Taproot (P2TR key-path and script-path) +:: +/< bcu /lib/bitcoin-utils.hoon +/< btc /lib/sur/bitcoin.hoon +/< der /lib/der.hoon +|% +:: +:: ============================================================================ +:: ECDSA (secp256k1) +:: ============================================================================ +:: +:: Used by legacy P2PKH and SegWit v0 (P2WPKH, P2SH-P2WPKH). +:: Returns DER-encoded signature with SIGHASH_ALL appended. +:: +:: DER (Distinguished Encoding Rules) is ASN.1 binary format. +:: Bitcoin requires signatures in this standard format. +:: +++ ecdsa + |= [sighash=hexb:btc privkey=@ux] + ^- hexb:btc + :: Sign hash with secp256k1 ECDSA + :: + =/ [v=@ r=@ s=@] + (ecdsa-raw-sign:secp256k1:secp:crypto `@uvI`dat.sighash privkey) + :: DER encode the (r, s) pair + :: flip converts from big-endian (DER standard) to little-endian (hexb) + :: + =/ der-sig=hexb:btc + %- flip:byt:bcu + %- en:der + :- %seq + :~ [%int r] :: r: first half of signature + [%int s] :: s: second half of signature + == + :: Append SIGHASH_ALL (0x01) byte + :: + (cat:byt:bcu ~[der-sig [1 1]]) +:: +:: ============================================================================ +:: Schnorr (BIP-340) +:: ============================================================================ +:: +:: Used by Taproot (P2TR) for both key-path and script-path spending. +:: Returns 64-byte signature, or 65 bytes if non-default sighash type. +:: +:: Note: For key-path spending, privkey must be tweaked first. +:: Use tweak-privkey:taproot to compute the tweaked key. +:: +++ schnorr + |= [sighash=hexb:btc privkey=@ux sighash-type=@ud] + ^- hexb:btc + :: Auxiliary randomness for BIP-340 nonce generation + :: Zero produces deterministic signatures (safe but predictable). + :: Random aux adds side-channel resistance if privkey is reused. + :: TODO: Use Urbit entropy (eny) for production hardening. + :: + =/ aux=@ux 0x0 + :: Sign hash with BIP-340 Schnorr + :: + =/ sig=@ (sign:schnorr:secp256k1:secp:crypto privkey dat.sighash aux) + :: SIGHASH_DEFAULT (0x00): return 64-byte signature + :: Other types: append sighash byte (65 bytes total) + :: + ?: =(0 sighash-type) + [64 sig] + (cat:byt:bcu ~[[64 sig] [1 sighash-type]]) +-- diff --git a/desk/gub/lib/unv.hoon b/desk/gub/lib/unv.hoon new file mode 100644 index 0000000..2a4a3de --- /dev/null +++ b/desk/gub/lib/unv.hoon @@ -0,0 +1,305 @@ +:: lib/unv.hoon +:: +:: urb wallet/walt cores: derives a wallet from a seed, builds +:: commit/reveal outputs for each sotx kind, and signs them. +:: +:: The reg-tester grub uses this to mint taproot outputs with +:: urb envelopes so the groundwire walker + urb-core can observe +:: them end-to-end. +:: +:: Ported from groundwire's tests/unv.hoon (live wallet/walt +:: cores only — commented test scaffolding is dropped). +:: +/< urb /lib/sur/urb.hoon +/< ord /lib/sur/ord.hoon +/< scr /lib/btc-script.hoon +/< urb-encoder /lib/urb-encoder.hoon +/< gw /lib/groundwire.hoon +/< b173 /lib/bip/b173.hoon +/< bip32 /lib/bip32.hoon +=* raws raws:gw +=> |% +++ make-unv-script + |= sots=(list sotx:urb) + ^- script:scr + =/ en-sots (encode:urb-encoder sots) + =/ tscr (unv-to-script:en:urb-encoder en-sots) + =/ wit (en:scr tscr) + =/ de-wit (need (de:scr wit)) + ?> =(de-wit tscr) + =/ de-unv (unv:de:urb-encoder de-wit) + ?> ?=([* ~] de-unv) + =/ rol (parse-roll:urb-encoder i.de-unv) + ~| %failed-to-parse-the-same + ?> =((turn rol |=([* sotx:urb] +<+)) sots) + tscr +:: +:: +make-spend-script: wrap a unv script in a taproot script-path leaf. +:: +:: ORDER MATTERS: the envelope (rest) comes FIRST, then the key-checksig. +:: This matches the canonical format from gw-onboard.py: +:: OP_FALSE OP_IF "urb" OP_ENDIF OP_CHECKSIG +:: +:: The old (broken) order was key-checksig BEFORE the envelope, which +:: caused find-block-reveals to fail the quick-check (it looks for the +:: urb envelope marker at the start of the script). +:: +++ make-spend-script + |= [int-key=@ rest=script:scr] + ^- script:scr:gw + (snoc (snoc rest [%op-push ~ (flipb:gw 32^int-key)]) %op-checksig) +:: +++ make-output + |= $: int-key=keypair:gw + val=(unit @ud) + scr=(unit script:scr) + == + ^- output:tx:gw + =| out=output:tx:gw + =? spend-script.out ?=(^ scr) + `(make-spend-script x.pub.int-key u.scr) + =. script-pubkey.out + ~(scriptpubkey p2tr:gw `x.pub.int-key spend-script.out ~) + =? value.out ?=(^ val) u.val + %_ out + internal-keys int-key + == +:: ++$ utxo [outpoint:gw output:gw] +:: +++ wallet + |_ [sed=@ i=@ =utxo eny=@] + +* cor . + ++ nu + |= [sed=@ i=@ =^utxo] + ^+ cor + cor(sed sed, i i, utxo utxo, eny (shas %urb-test-wal-sed sed)) + :: + ++ derive + ^- [keypair:gw _i] + :_ +(i) + [pub prv]:(derive-sequence:(from-seed:bip32 32^sed) ~[i 0 0]) + :: + ++ build-output + |= scr=(unit script:scr) + ^- [output:gw _cor] + =^ kp i derive + :_ cor + (make-output kp ~ scr) + :: + ++ spend + |= [out=output:gw] + ^- [byts _cor] + =| =tx:gw + =. tx (~(add-input-1 build:gw tx) utxo ~ ~) + :: by passing ~ we default to SIGHASH_DEFAULT, equivalent to + :: SIGHASH_ALL, so when we sign this input later we'll commit + :: to all and only the inputs and outputs we've added up to + :: that point + =/ new-value + ?~ spend-script.utxo (sub value.utxo 150) + (sub value.utxo (add (lent u.spend-script.utxo) 400)) + =. value.out new-value + =. tx (~(add-output-1 build:gw tx) out) + =^ tx eny (~(finalize build:gw tx) eny) + =/ raw=octs (txn:encode:gw tx) + =/ txid=@ux (txid:encode:gw tx) + =. utxo [[txid 0] out] + [raw cor] + -- +:: +++ compress-point compress-point:secp256k1:secp:crypto +:: +-- +|% +++ walt + |_ [sed=@uw lyf=_1 xtr=@ twk=(unit @) wal=_wallet] + +* cor . + :: + ++ nu + |= [xtr=@ wal=_wallet] + ^+ cor + cor(sed sed:wal, xtr xtr, wal wal) + :: + ++ nu-twk + |= [xtr=@ twk=@ wal=_wallet] + ^+ cor + cor(sed sed:wal, xtr xtr, twk `twk, wal wal) + :: + ++ cac + =< ?>(&(?=(%c suite.+<) ?=(^ sek.+<)) .) + =. lyf 1 + =. xtr 0 + %: pit:nu:cric:crypto + 512 + sed + %c + ?^(twk u.twk (rap 3 ~[lyf %btc %ord %gw %test])) + :: xtr + == + :: + ++ fig `@p`fig:ex:cac(lyf 1) + ++ unv-tx + |% + ++ skim + |% + ++ spawn + |= $: out=[spk=output:gw vout=(unit vout:ord) =off:ord tej=off:ord] + == + =/ utxo utxo:wal + :: spkh = SHA-256(script-pubkey || value) of the FUNDING UTXO + :: (the precommit output). This matches gw-onboard.py's + :: compute_spkh(funding_address, funding_value_sats). + =/ funding-out +.utxo + =/ en-out (can 3 script-pubkey.funding-out 8^value.funding-out ~) + =/ hax-out (shay (add 8 p.script-pubkey.funding-out) en-out) + ^- single:skim-sotx:urb + [%spawn pub:ex:cac ~ out(spk hax-out)] + :: + ++ keys + |= bec=? + ^+ [*single:skim-sotx:urb cor] + =. cor cor(lyf +(lyf)) + [%keys pub:ex:cac bec]^cor + :: + ++ escape + |= her=@p + ^- single:skim-sotx:urb + [%escape her ~] + :: + ++ adopt + |= her=@p + ^- single:skim-sotx:urb + [%adopt her] + :: + ++ fief + |= fef=(unit ^^fief) + ^- single:skim-sotx:urb + [%fief fef] + :: + ++ batch + |= sots=(list single:skim-sotx:urb) + ^- skim-sotx:urb + [%batch sots] + -- +:: + ++ sign-batch + |= sots=(list single:skim-sotx:urb) + ^- sotx:urb + =/ sot (batch:skim +<) + =/ ent (skim:encode:urb-encoder sot) + =/ sig (sign-octs-raw:ed:crypto 512^(shaz ent) [sgn.pub sgn.sek]:+<:cac) + [fig^[~ sig] sot] + :: + ++ sign-skim + |= sot=skim-sotx:urb + ^- sotx:urb + =/ ent (skim:encode:urb-encoder sot) + =/ sig (sign-octs-raw:ed:crypto 512^(shaz ent) [sgn.pub sgn.sek]:+<:cac) + [fig^[~ sig] sot] + :: + ++ spawn + |= $: out=[spk=output:gw vout=(unit vout:ord) =off:ord tej=off:ord] + == + ^- sotx:urb + =/ sot=skim-sotx:urb (spawn:skim +<) + (sign-skim sot) + :: + ++ keys + |= bec=? + ^+ [*sotx:urb cor] + =. cor cor(lyf +(lyf)) + =^ sot=skim-sotx:urb cor (keys:skim +<) + (sign-skim sot)^cor + :: + ++ escape + |= her=@p + ^- sotx:urb + [fig^~ (escape:skim +<)] + :: + ++ cancel-escape + |= her=@p + ^- sotx:urb + [fig^~ [%cancel-escape her]] + :: + ++ adopt + |= her=@p + ^- sotx:urb + [fig^~ (adopt:skim +<)] + :: + ++ reject + |= her=@p + ^- sotx:urb + [fig^~ [%reject her]] + :: + ++ detach + |= her=@p + ^- sotx:urb + [fig^~ [%detach her]] + :: + ++ fief + |= fef=(unit ^fief) + ^- sotx:urb + [fig^~ (fief:skim +<)] + :: + ++ set-mang + |= man=(unit mang:urb) + ^- sotx:urb + [fig^~ [%set-mang man]] + -- + ++ btc + |% + ++ make-key-out + =^ out wal (build-output:wal ~) + out^cor + :: + ++ spend + |= [out=output:gw] + ^- [byts _cor] + =^ res wal (spend:wal out) + [res cor] + :: + ++ spawn + |= $: out=[spk=output:gw vout=(unit vout:ord) =off:ord tej=off:ord] + == + ^- [output:gw _cor] + =^ out wal + %- build-output:wal + `(make-unv-script (spawn:unv-tx +<) ~) + out^cor + :: + ++ keys + |= bec=? + ^- [output:gw _cor] + =^ sot cor (keys:unv-tx +<) + =^ out wal + %- build-output:wal + `(make-unv-script sot ~) + out^cor + :: + ++ escape + |= her=@p + ^- [output:gw _cor] + =^ out wal + %- build-output:wal + `(make-unv-script (escape:unv-tx +<) ~) + out^cor + :: + ++ adopt + |= her=@p + ^- [output:gw _cor] + =^ out wal + %- build-output:wal + `(make-unv-script (adopt:unv-tx +<) ~) + out^cor + :: + ++ fief + |= fef=(unit ^fief) + ^- [output:gw _cor] + =^ out wal + %- build-output:wal + `(make-unv-script (fief:unv-tx +<) ~) + out^cor + -- + -- +-- diff --git a/desk/gub/lib/urb-core.hoon b/desk/gub/lib/urb-core.hoon new file mode 100644 index 0000000..0e58da4 --- /dev/null +++ b/desk/gub/lib/urb-core.hoon @@ -0,0 +1,697 @@ +:: %urb-core +:: +:: This is where most of the heavy block processing in %urb-watcher happens. +:: Before engaging with this codebase, make sure that you understand +:: Taproot script-path spends and ordinal inscriptions. +:: See lib/sur/urb and lib/urb-encoder for more details on the types at play here. +:: The main ones to be aware of are: +:: - sont, a satpoint +:: - sotx, a comet attestation +:: - a list of sotx is often called a "sots." be warned that +:: this same name can appear on multiple parsing layers. +:: +:: The state of urb-core is an index +:: of urb-relevant transactions with their +:: associated prevouts and inscriptions. +:: +:: The logic flow here is: +:: 1. %urb-watcher receives a block from RPC and then +:: calls ++find-block-reveals, which filters it +:: down to txs containing urb reveals. +:: 2. %urb-watcher asynchronously fetches the prevout +:: values for each tx in the filtered block. +:: 3. %urb-watcher checks each tx for %spawn sotx. +:: If it finds one, it fetches a commit and +:: precommit transaction. See the %spawn case +:: down below for extensive detail on how and why +:: we do this. +:: 4. %urb-watcher calls ++apply-prevouts-and-urbify +:: on the block. This converts it to an urb-block. +:: 5. %urb-watcher calls ++handle-block on the +:: urb-block, which processes its txs for sotx and +:: returns an updated state and a list of fx. +:: 6. %urb-watcher turns these fx into udiffs and +:: gives them to Jael. +:: +:: Ported from groundwire's lib/urb-core.hoon. +:: +/< bitcoin /lib/sur/bitcoin.hoon +/< ord /lib/sur/ord.hoon +/< urb /lib/sur/urb.hoon +/< bscr /lib/btc-script.hoon +/< ol /lib/ord.hoon +/< urb-encoder /lib/urb-encoder.hoon +|% +++ urb-core + =| state:urb + =* state - + |_ $+ urb-core-sample + $: fx=(list [id:block:bitcoin effect:urb]) + cb-tx=[value=@ud urb-tx:urb] + == + +* cor . + ++ abed + |= =state:urb + ^+ cor + cor(state state) + :: + ++ emit + |= fc=effect:urb + ^+ cor + cor(fx :-([block-id fc] fx)) + :: + ++ emil + |= fy=(list effect:urb) + ^+ cor + ?~ fy cor + =. cor (emit i.fy) + $(fy t.fy) + :: + ++ abet + ^+ [fx state] + [(flop fx) state] + :: + :: Given a block, return its "reveals" (aka a map + :: of spent utxo to raw-sotx) and the block filtered + :: down to urb-relevant txs. A tx is relevant either + :: if we had saved one of its inputs previously, + :: or if its witness contains an urb reveal. + ++ find-block-reveals + |= =block:bitcoin + =| reveals=(map [txid:ord vout:ord] [sots=(list raw-sotx:urb) value=(unit @ud)]) + ^+ [reveals block] + :: + :: Set aside this block's coinbase transaction. + ?~ txs.block + ~& >>> ["%urb-core: This block has no transactions:" block] !! + =/ cb-tx i.txs.block + =/ txs t.txs.block + :: + :: Loop through this block's transactions + :: and filter down to tx containing reveals. + =| saved-txs=(list tx:bitcoin) + |- + ^+ [reveals block] + ?~ txs + :- reveals + block(txs [cb-tx (flop saved-txs)]) + :: + :: Loop through this transaction's inputs + :: and, if any contain sots, save the whole tx. + =/ is is.i.txs + =| need-tx=_| + |^ + ^+ ^$ + ?~ is + %= ^$ + txs t.txs + saved-txs ?. need-tx + saved-txs + [i.txs saved-txs] + == + :: + :: If this input had been saved as an output in our state, + :: then that means it was relevant to urb, and + :: we for sure need to save this tx to track where + :: all the sats end up. + =/ value=(unit @ud) + =/ vout (get-vout:si:ol sont-map [txid pos]:i.is) + ?~(vout ~ `value.u.vout) + =. need-tx |(need-tx ?=(^ value)) + :: + :: Similarly, if this input came from a transaction we've + :: already saved in this block, we save this tx too. + =. need-tx + ?| need-tx + %+ lien + saved-txs + |= =tx:bitcoin + =(id.tx txid.i.is) + == + :: + :: Parse the witness for sots. If no sots, just + :: preserve our potential saved value and recurse. + =/ raw-script=(unit octs) + =/ rwit (flop witness.i.is) + ?. ?=([* ^] rwit) ~ + =/ first-byte =+(i.rwit (cut 3 [(dec wid) 1] dat)) + ?. |(=(0xc0 first-byte) =(0xc1 first-byte)) ~ + ?. =+ i.rwit + &(!=(0 wid) =(0x50 (cut 3 [(dec wid) 1] dat))) + `i.t.rwit + ?~ t.t.rwit ~ + `i.t.t.rwit + ?~ raw-script + (add-to-reveals ~ value) + :: Quick check: skip scripts that don't start with the urb envelope. + :: Envelope is OP_0 OP_IF PUSH3 "urb" = bytes 00 63 03 75 72 62. + :: In octs, the first script byte is the MSB of the atom. + :: We check the top 5 bytes (skipping the leading 0x00 which + :: vanishes in the atom) for OP_IF PUSH3 "urb" = 0x6303757262. + ?. ?& (gte p.u.raw-script 6) + =(0x63.0375.7262 (cut 3 [(sub p.u.raw-script 6) 5] q.u.raw-script)) + == + (add-to-reveals ~ value) + ~& > "%urb-core: urb envelope detected! parsing..." + =/ descr (de:bscr u.raw-script) + ?~ descr + ~& >>> "%urb-core: de:bscr failed on urb script" + (add-to-reveals ~ value) + ~| [=+(u.raw-script [p `@ux`q]) =+((en:bscr u.descr) [p `@ux`q])] + ?. =(u.raw-script (en:bscr u.descr)) + ~& >>> "%urb-core: round-trip mismatch in witness parsing" !! + ~& > "%urb-core: script parsed successfully, extracting unvs..." + =/ unvs=(unit (list @)) (some (unv:de:urb-encoder u.descr)) + ?~ unvs + ~& >>> "%urb-core: no unvs found in parsed script" + (add-to-reveals ~ value) + :: + :: If there is sots, get it, add it to reveals, + :: flag this tx as needed, and recurse. + =/ sots=(list raw-sotx:urb) + (zing (turn u.unvs parse-roll:urb-encoder)) + (add-to-reveals(need-tx &) sots value) + :: + ++ add-to-reveals + |= [sots=(list raw-sotx:urb) value=(unit @ud)] + ^+ ^$ + ?> ?=(^ is) + ?: ?& =(~ sots) + =(~ value) + == + ^$(is t.is) + %= ^$ + is t.is + reveals (~(put by reveals) [txid pos]:i.is sots value) + == + -- + :: + :: Fill in a block's txs with prevouts + :: given in a reveals map and restructure it + :: to an urb-block. Unlike a block:bitcoin, an + :: urb-block tracks prevout values within inputs, + :: because we aren't indexing every previous block. + ++ apply-prevouts-and-urbify + |= $: block:bitcoin + reveals=(map [txid:ord vout:ord] [sots=(list raw-sotx:urb) value=(unit @ud)]) + == + ^- urb-block:urb + =* block +<- + => ?>(?=(^ txs) [cb-tx=i.txs .(txs t.txs)]) + =- %= block + txs ^- (list urb-tx:urb) + %+ welp + ^- (list urb-tx:urb) + :~ ^- urb-tx:urb + %= cb-tx + is %+ turn + is.cb-tx + |= inputw:tx:bitcoin + ^- input:urb-tx:urb + [[~ 0] +<] + == + == + ^- (list urb-tx:urb) + - + == + |- + ^- (list tx:urb-tx:urb) + ?~ txs ~ + =/ is is.i.txs + =- [i.txs(is -) $(txs t.txs)] + |- + ^- (list input:urb-tx:urb) + ?~ is + ~ + =/ rev + (~(get by reveals) [txid pos]:i.is) + ?~ rev + ~ + :- [u.rev(value (need value.u.rev)) i.is] + $(is t.is) + :: + :: Given an urb-block, update state and emit fx. + ++ handle-block + |= $: =urb-block:urb + precommits=(map [txid:ord vout:ord] [commit=urb-tx:urb precommit=urb-tx:urb]) + == + ^+ cor + =. num.block-id.state +(num.block-id.state) + ?~ txs.urb-block + cor + => %= . + txs.urb-block t.txs.urb-block + cb-tx [reward.urb-block i.txs.urb-block] + == + |- + ^+ cor + ?~ txs.urb-block + cor + =. cor (handle-tx i.txs.urb-block precommits) + $(txs.urb-block t.txs.urb-block) + :: + ++ handle-tx + =| running-value=@ud + |= $: tx=urb-tx:urb + precommits=(map [txid:ord vout:ord] [commit=urb-tx:urb precommit=urb-tx:urb]) + == + ^+ cor + =/ sum-out (roll os.tx |=([[* a=@] b=@] (add a b))) + =/ sum-in (roll is.tx |=([a=input:urb-tx:urb b=@] (add value.a b))) + =/ inputs is.tx + ?~ inputs cor + |^ + ^+ cor + =. cor process-unv + =. cor update-sonts + :: Excess inputs get added to coinbase fee, + :: which we calculate iteratively because we need + :: its per-input value for math in ++update-sonts. + =< ?~(t.inputs cor $(inputs t.inputs)) + =/ new-val (add running-value value.i.inputs) + ?: (lth new-val sum-out) + .(running-value new-val) + %= . + running-value sum-out + value.cb-tx (add value.cb-tx (sub new-val sum-out)) + == + :: + ++ process-unv + ^+ cor + =/ sots sots.i.inputs + |- + ?~ sots + cor + =* raw raw.i.sots + =* who ship.sot.i.sots + =- $.+(cor -, sots t.sots) + =/ sots=(list single:skim-sotx:urb) + ?: ?=(%batch +<.sot.i.sots) + bat.sot.i.sots + ~[+.sot.i.sots] + |^ + ^+ cor + =/ point (~(get by unv-ids) who) + =| bat-cnt=@ + =. bat-cnt +(bat-cnt) + ?~ sots cor + =* sot i.sots + ?: ?=(%spawn -.sot) + ?. =(1 bat-cnt) cor + ?^ point cor + ?: (~(has by unv-ids) who) cor + =/ cac (com:nu:cric:crypto pass.sot) + ?. ?=(%c suite.+<.cac) cor + ?. =(who fig:ex:cac) cor + :: + :: A Groundwire user must choose the sat they want to own their comet + :: prior to boot-time and pass in its satpoint to Vere on first boot. + :: However, within their commit attestation, they must include their + :: ship's networking key, which is only knowable after boot. + :: Because of this, we have an additional "pre-commit" transaction + :: in addition to the typical ordinal protocol. A client will: + :: + :: 1. Pre-commit to a sat inside a precommit transaction. + :: 2. Boot their comet using a satpoint within the precommit transaction. + :: 3. Submit the commit transaction containing their precommit satpoint and ship networking key. + :: 4. Submit the reveal transaction. + :: + :: When processing a %spawn sotx then, rather than just checking + :: whether the sont is in this input, we need to check if it carried + :: through from *two* transactions back. + :: + =/ pcmtx (~(get by precommits) [txid.i.inputs pos.i.inputs]) + ?~ pcmtx + ~& >> "%urb-core: Couldn't find precommit tx." cor + =/ precommit-tx precommit.u.pcmtx + =/ commit-tx commit.u.pcmtx + ?~ precommit-sat=(calc-precommit-sont precommit-tx to.sot) + cor + :: tweak = [%version payload] + :: payload = [pki-agent-source-ship pki-agent pki-data] + :: pki-data = [%src-name %protocol-name %protocol-version crypto-data] + =/ tweak + %+ rap + 3 + :~ %9 + ~tyr + %urb-watcher + %btc + %gw + %9 + txid=txid.u.precommit-sat + vout=vout.u.precommit-sat + off=off.u.precommit-sat + == + :: + :: Check that the given comet networking key encodes the tweak + :: that corresponds to the attestation. + ?. =(dat.tw.pub:+<:cac tweak) + ~& >>> ["%urb-core: provided pass's networking key does not match tweak: " dat.tw.pub:+<:cac] + cor + :: + :: We now know that: + :: - the attested satpoint exists + :: - the attested satpoint is encoded in the attested comet's networking key + :: - the attested satpoint was in an input to the commit transaction + :: + =/ commit-sat=(unit sont:ord) + (apply-tx-to-sont commit-tx u.precommit-sat) + ?~ commit-sat + cor + :: + ?. (is-sont-in-input u.commit-sat) + ~& >>> 'The commit sat did not get spent in the reveal tx. Rejecting.' + cor + :: + =. sont-map + %: put-com:si:ol + sont-map + txid.u.commit-sat + vout.u.commit-sat + off.u.commit-sat + value.i.inputs + who + == + =/ =point:urb + :* own=[u.commit-sat ~] + rift=0 + life=1 + pass=pass.sot + sponsor=[| who] + escape=~ + fief=fief.sot + == + =. unv-ids (~(put by unv-ids) who point) + =/ reveal-sunt + %- index-to-sont-with-coinbase + (add running-value off.u.commit-sat) + =/ reveal-sat=sont:ord + ?~ reveal-sunt [0x0 0 0] + u.reveal-sunt + ~& > ["%urb-watcher found comet: " who] + =. cor + %- emil + :~ [%point who %owner reveal-sat] + [%point who %sponsor `who] + [%point who %keys 1 pass.sot] + [%point who %fief fief.sot] + == + $(sots t.sots) + :: + ?~ point cor + ?. (is-sont-in-input sont.own.u.point) + ~& >>> 'Input to this tx did not include the owner sont. Rejecting.' + cor + ?- -.sot + %set-mang + !! + :: + %fief + =. fief.net.u.point fief.sot + =. cor (emit [%point who %fief fief.sot]) + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) who u.point) + == + :: + %escape + :: sponsoring self, update now + ?: =(parent.sot who) + =. sponsor.net.u.point &/who + =. escape.net.u.point ~ + =. cor (emit [%point who %sponsor `who]) + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) who u.point) + == + :: sponsor already signed the request off-chain, update now + ?^ sig.sot + =/ sponsor (~(get by unv-ids) parent.sot) + ?~ sponsor + ~& >>> "%urb-core: sponsor {} not found in unv-ids, dropping escape" + cor + =/ cac (com:nu:cric:crypto pass.net.u.sponsor) + =/ lower-bound + ?: (lth num.block-id.state 10) + 0 + (sub num.block-id.state 10) + ?. %+ lien + (gulf lower-bound (add num.block-id.state 1)) + |=(h=@ud (veri-octs:ed:crypto u.sig.sot 512^(shaz (jam [who h])) sgn:ded:ex:cac)) + ~& >>> ["%urb-core: escape sig from {} for {} failed verification (checked block heights {} to {<(add num.block-id.state 1)>})"] + cor + =. sponsor.net.u.point &/parent.sot + =. escape.net.u.point ~ + =. cor (emit [%point who %sponsor `parent.sot]) + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) who u.point) + == + :: no signature, flag sponsorship as pending + =. escape.net.u.point `parent.sot + =. cor (emit [%point who %escape `parent.sot]) + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) who u.point) + == + :: + %cancel-escape + ?. =([~ parent.sot] escape.net.u.point) cor + =. escape.net.u.point ~ + =. cor (emit [%point who %escape ~]) + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) who u.point) + == + :: + %detach + ?~ child=(~(get by unv-ids) ship.sot) cor + ?. =([& who] sponsor.net.u.child) cor + =. sponsor.net.u.child |/who + =. cor (emit [%point ship.sot %sponsor `who]) + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) ship.sot u.child) + == + :: + %adopt + ?: =(ship.sot who) + =. sponsor.net.u.point &/who + =. escape.net.u.point ~ + =. cor (emit [%point ship.sot %sponsor `who]) + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) who u.point) + == + ?~ child=(~(get by unv-ids) ship.sot) cor + ?. =([~ who] escape.net.u.child) cor + =. escape.net.u.child ~ + =. sponsor.net.u.child &/who + =. cor (emit [%point ship.sot %sponsor `who]) + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) ship.sot u.child) + == + :: + %reject + ?~ child=(~(get by unv-ids) ship.sot) cor + ?. =([~ who] escape.net.u.child) cor + =. escape.net.u.child ~ + =. cor (emit [%point ship.sot %escape ~]) + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) ship.sot u.child) + == + :: + %keys + =. net.u.point + net.u.point(pass pass.sot, life +(life.net.u.point)) + =? rift.net.u.point breach.sot +(rift.net.u.point) + =. cor %- emil + :* [%point who %keys life.net.u.point pass.sot] + ?. breach.sot ~ + [%point who %rift rift.net.u.point]^~ + == + %_ $ + sots t.sots + unv-ids (~(put by unv-ids) who u.point) + == + == + :: + :: Is this sont in the input that's being processed? + ++ is-sont-in-input + |= sot=sont:ord + ~| [s=sot [txid pos value]:i.inputs] + ?. =([txid vout]:sot [txid pos]:i.inputs) | + ~| %fatal-tracking-error + ?> (lth off.sot value.i.inputs) & + :: + :: Given a precommit tx and a [vout off tej], + :: check if the implied satpoint [txid vout off] + :: is a valid landing location within the tx outputs + :: and that off+tej doesn't exceed that output's value. + :: Additionally, check that the scriptPubkey hash of the + :: landing output matches the given spkh. + :: If both are true, return the implied satpoint, + :: otherwise return null. + ++ calc-precommit-sont + |= $: precommit=urb-tx:urb + out=[spkh=@ux pos=(unit vout:ord) =off:ord tej=off:ord] + == + ^- (unit sont:ord) + =| out-pos=@ud + =| out-val=@ud + =/ in-val + (roll is.precommit |=([a=input:urb-tx:urb b=@] (add value.a b))) + =/ outputs os.precommit + |- + ^- (unit sont:ord) + ?~ outputs ~ + ?~ pos.out + ~ + ?: (lth u.pos.out out-pos) + ~ + ?: (gth :(add out-val off.out tej.out) in-val) + ~ + ?: !=(out-pos u.pos.out) + $(out-val (add out-val value.i.outputs), outputs t.outputs, out-pos +(out-pos)) + ?: (gth (add off:out tej:out) value.i.outputs) + ~ + =/ sat=sont:ord [id.precommit u.pos.out off.out] + =/ en-out (can 3 script-pubkey.i.outputs 8^value.i.outputs ~) + =/ hax-out (shay (add 8 wid.script-pubkey.i.outputs) en-out) + ?: =(hax-out spkh.out) + `sat + ~ + -- + :: + :: Given the transaction input that's currently in + :: ++handle-tx's context, get every sont we're tracking + :: in sont-map within that input (typically one per + :: input) and: + :: - Update sont-map with new landing sonts + :: - Update insc-ids with new owner sont (mostly vestigial) + :: - Update unv-ids with new owner sont + :: - Emit %xfer event signalling point transfer to new owner sont + ++ update-sonts + ^+ cor + ?~ input=(~(get by sont-map) [txid pos]:i.inputs) + cor + =. sont-map (~(del by sont-map) [txid pos]:i.inputs) + =/ input-sonts ~(tap by sats.u.input) + |- + ^+ cor + ?~ input-sonts cor + =/ old-sont=sont:ord [txid.i.inputs pos.i.inputs p.i.input-sonts] + =/ new-sunt + %- index-to-sont-with-coinbase + (add running-value p.i.input-sonts) + =/ new-sont=sont:ord + ?~ new-sunt + [0x0 0 0] + u.new-sunt + =. state (update-ids state q.i.input-sonts new-sont) + =. cor (emit [%xfer old-sont new-sont]) + %_ $ + input-sonts t.input-sonts + sont-map ?~ new-sunt + sont-map + =/ out-value + ?: =(txid.new-sont id.tx) + value:(snag vout.new-sont os.tx) + value:(snag vout.new-sont os.cb-tx) + %- put-all:si:ol + :* sont-map + txid.new-sont + vout.new-sont + off.new-sont + out-value + q.i.input-sonts + == + == + :: + :: A wrapper around ++index-to-sont which has + :: access to context from ++handle-tx. We use this + :: context to handle the case where a sont lands + :: in the mining fee, in which case we transfer + :: ownership to the miner. + ++ index-to-sont-with-coinbase + |= index=@ud + ^- (unit sont:ord) + ?: (lth index sum-out) + ?~ sont=(index-to-sont index os.tx) ~ + `[id.tx vout.sont off.sont] + =/ sont + %- index-to-sont + :- (add value.cb-tx (sub index sum-out)) + os.cb-tx + ?: ?| =(~ sont) + (lte sum-in index) + == + ~ + ?> ?=(^ sont) + `[id.cb-tx vout.sont off.sont] + :: + :: Arms for updating insc-ids and unv-ids. + ++ update-ids + |= [=state:urb old=sont-val:ord =sont:ord] + =. state (update-inscriptions state ins.old sont) + ?~ com.old state + (update-comet state u.com.old sont) + :: + ++ update-inscriptions + |= [=state:urb oids=(set insc:ord) =sont:ord] + ?: =(~ oids) state + %- ~(rep in oids) + |: [*=insc:ord state] + =/ dat (~(got by insc-ids) insc) + state(insc-ids (~(put by insc-ids) insc dat(sont sont))) + :: + ++ update-comet + |= [=state:urb com=@p =sont:ord] + =/ point (~(got by unv-ids:state) com) + state(unv-ids (~(put by unv-ids:state) com point(sont.own sont))) + :: + :: Given a transaction and a satpoint that refers to one of its inputs, + :: compute where that same sat ends up in this tx's outputs. + ++ apply-tx-to-sont + |= [tx=urb-tx:urb sot=sont:ord] + ^- (unit sont:ord) + =/ inputs is.tx + =| in-sum=@ud + |- + ^- (unit sont:ord) + ?~ inputs + ~ + =/ inp i.inputs + ?: =([txid vout]:sot [txid pos]:inp) + ?. (lth off.sot value.inp) + ~ + =/ index=@ud + (add in-sum off.sot) + =/ out (index-to-sont index os.tx) + ?~ out + ~ + `[[id.tx vout.out off.out]] + $(inputs t.inputs, in-sum (add in-sum value.inp)) + -- + -- +:: +:: Take a list of outputs and a sat index across +:: those outputs, and return the output index +:: and relative sat offset. +++ index-to-sont + =| vout=@ud + |= [index=@ud outs=(list output:tx:bitcoin)] + ^- $@(~ [vout=@ud off=@ud]) + ?~ outs + ~ + ?: (lth index value.i.outs) + [vout index] + %= $ + vout +(vout) + index (sub index value.i.outs) + outs t.outs + == +-- diff --git a/desk/gub/lib/urb-encoder.hoon b/desk/gub/lib/urb-encoder.hoon new file mode 100644 index 0000000..1709389 --- /dev/null +++ b/desk/gub/lib/urb-encoder.hoon @@ -0,0 +1,369 @@ +:: lib/urb-encoder.hoon +:: +:: encode and decode: +:: - urb actions (sotx:urb) +:: - pushdata for Taproot scripts, sometimes called an "unv" +:: - bitcoin scripts +:: +:: "unv" is short for "urbit envelope." +:: an unv is an atom that comes from the body +:: of an ordinal-style Taproot script tagged +:: with "urb" instead of "ord": +:: +:: OP_PUSH 1 0 +:: OP_IF +:: "urb" +:: +:: OP_ENDIF +:: +:: An unv is variable-sized and +:: gets parsed into a list of "raw-sotx". +:: an ordinal script can also include multiple +:: unvs, giving us a (list (list raw-sotx)) +:: that we flatten. +:: +:: A raw-sotx is a [raw=octs sotx]. +:: we keep the raw data around even after parsing +:: because several proof steps depend on it. +:: +:: A sotx is similar to a jael udiff, and +:: indeed gets turned into a jael udiff, +:: which is what %urb-core ultimately +:: uses this library for. +:: +:: Ported from groundwire's lib/urb-encoder.hoon. +:: +/< ord /lib/sur/ord.hoon +/< urb /lib/sur/urb.hoon +/< bscr /lib/btc-script.hoon +/< ol /lib/ord.hoon +|% +++ encode + =< full + =, ord + =< |% + ++ full + |= sots=(list sotx:urb) + p:(fax:plot (^full sots)) + :: + ++ skim + |= sot=skim-sotx:urb + p:(fax:plot [0 (^skim sot)]) + -- + |% + ++ full + |= sots=(list sotx:urb) + :- bloq=0 + |- ^- (list plat:plot) + ?~ sots ~ + =* our ship.i.sots + =* sig sig.i.sots + :* [s+~ (en-sig sig)] + [128 our] + [s+~ 0 (skim +.i.sots)] + $(sots t.sots) + == + :: + ++ skim + |= sot=skim-sotx:urb + ^- (list plat:plot) + ?- -.sot + %batch + =/ l (lent bat.sot) + ?> (lth 1 l) + :+ [7 10] (mat l) + |- ^+ ^$ + ?~ bat.sot ~ + [[s+~ 0 ^$(sot i.bat.sot)] $(bat.sot t.bat.sot)] + :: + %set-mang + ?~ mang.sot [[7 8] [2 0] ~] + ?- -.u.mang.sot + %sont + [[7 8] [2 1] (en-sont sont.u.mang.sot)] + %pass + [[7 8] [2 2] [256 pass.u.mang.sot] ~] + == + :: + %spawn + |^ ^+ ^$ + =+ m=(mat pass.sot) + [[7 1] [1 0] m en-fief en-to ~] + :: + ++ en-fief + ^- plat:plot + :+ s+~ 0 + ?~ fief.sot ~[[2 0]] + =* fef u.fief.sot + ?- -.fef + %turf !! + %if ~[[2 2] [32 p.fef] [16 q.fef]] + %is ~[[2 3] [128 p.fef] [16 q.fef]] + == + :: + ++ en-to + ^- plat:plot + :+ s+~ 0 + :* [256 spkh.to.sot] + (mat off.to.sot) (mat tej.to.sot) + ?~(vout.to.sot [2 0]^~ [2 1]^(mat u.vout.to.sot)^~) + == + -- + :: + %keys + =+ m=(mat pass.sot) + [[7 2] [1 breach.sot] m ~] + :: + %fief + :+ [7 11] [1 0] + ?~ fief.sot ~[[2 0]] + =* fef u.fief.sot + ?- -.fef + %turf !! + %if ~[[2 2] [32 p.fef] [16 q.fef]] + %is ~[[2 3] [128 p.fef] [16 q.fef]] + == + :: + %escape + [[7 3] [1 0] [128 parent.sot] [s+~ (en-sig sig.sot)] ~] + :: + ?(%cancel-escape %adopt %reject %detach) + =- [[7 -] [1 0] [128 +.sot] ~] + ?- -.sot + %cancel-escape 4 + %adopt 5 + %reject 6 + %detach 7 + == + == + ++ en-sig + |= sig=(unit @) + ^- plot + ?~ sig [bloq=0 [2 0] ~] + [bloq=0 [2 1] [512 u.sig] ~] + :: + ++ en-sont + |= sont:ord + ^- (list plat:plot) + =/ mi (mat vout) + =/ mo (mat off) + [[1 0] [256 txid] mi mo ~] + -- +:: +:: Wrap a unv in a no-op urb-tagged Taproot script. +++ en + |% + ++ unv-to-script + |= dat=@ + ^- script:bscr + =/ len (met 3 dat) + :* [%op-push %num %1 %0] + %op-if + [%op-push ~ %3 'urb'] + (snoc (push-data:en:ol len dat) %op-endif) + == + -- +:: +:: Unwrap a script into a list of unvs. +++ de + |% + ++ unv + |= =script:bscr + ^- (list @) + ?~ script ~ + ?. ?=([[%op-push * * %0] %op-if [%op-push * * %'urb'] *] script) + $(script t.script) + => .(script t.t.t.script) + |^ ^- (list @) + =^ unv script fetch-unv + ?~ unv ~ [p:(fax:plot bloq=3 u.unv) ^$] + :: + ++ fetch-unv + ^- [(unit (list plat:plot)) script:bscr] + ?> ?=(^ script) + |- ^- [(unit (list plat:plot)) script:bscr] + ?: ?=(%op-endif i.script) [~ ~]^~ + ?. ?=([[%op-push *] ^] script) ~^~ + =/ rest $(script t.script) + ?~ -.rest ~^~ + [~ octs.i.script u.-.rest]^+.rest + -- + -- +:: +:: The following parsing code is adapted from %naive. +:: +:: Parse a unv encoding multiple +:: raw-tx into a list of raw-sotx. +++ parse-roll + |= batch=@ + =| roll=(list raw-sotx:urb) + =| cur=@ud + =/ las (met 0 batch) + =| num-msgs=@ud + |- ^+ roll + ?: (gte cur las) + (flop roll) + =/ parse-result (parse-raw-tx cur batch) + ?~ parse-result + ~& >>> %parse-failed !! + =^ raw-tx cur u.parse-result + $(roll [raw-tx roll], num-msgs +(num-msgs)) +:: +:: Given an index and a variable-sized atom, +:: parse the raw-tx at that index into a raw-sotx. +++ parse-raw-tx + |= [cur=@ud batch=@] + ^- (unit [raw-sotx:urb cur=@ud]) + |^ ^- (unit [raw-sotx:urb cur=@ud]) + =/ sig take-sig + ?~ sig ~& >>> %no-sig !! + =^ sig cur u.sig + =^ from-ship=ship cur (take 0 128) + =/ res=(unit [tx=skim-sotx:urb cur=@ud]) parse-tx + ?~ res ~ + =/ dif (sub cur.u.res cur) + =/ len =>((dvr dif 8) ?:(=(0 q) p +(p))) + :- ~ + :_ cur.u.res + :- [len (cut 0 [cur dif] batch)] + [[from-ship sig] tx.u.res] + :: + ++ parse-tx + |- ^- res=(unit [tx=skim-sotx:urb cur=@ud]) + =^ op cur (take 0 7) + ?+ op ~& >>> %strange-opcode !! + %1 + |^ ^+ ^$ + =^ pad=@ cur (take 0) + =^ =pass cur take-atom + =^ fief=(unit fief:urb) cur take-fief + =/ to take-to + ?~ to ~& >>> %no-to !! + =^ to cur u.to + `[[%spawn pass fief to] cur] + :: + ++ take-from + ^- (unit [(unit [=vout:ord =off:ord]) cur=@]) + =^ fro-o cur (take 0 2) + ?: =(fro-o 0) `[~ cur] + ?. =(fro-o 1) ~& >>> %no-fro !! + =^ vout cur take-atom + =^ off cur take-atom + `[`[vout off] cur] + :: + ++ take-to + ^- (unit [[spkh=@ux vout=(unit vout:ord) =off:ord tej=off:ord] cur=@]) + =^ spkh cur (take 0 256) + =^ off cur take-atom + =^ tej cur take-atom + =^ vout-o cur (take 0 2) + ?: =(vout-o 0) + `[[spkh ~ off tej] cur] + ?. =(vout-o 1) ~& >>> %take-to !! + =^ vout cur take-atom + `[[spkh `vout off tej] cur] + -- + :: + %2 + =^ breach=@ cur (take 0) + =^ =pass cur take-atom + `[[%keys pass =(0 breach)] cur] + :: + %3 + =^ res=ship cur take-ship + =/ sig take-sig + ?~ sig ~ + =^ sig cur u.sig + `[[%escape res sig] cur] + %4 =^(res cur take-ship `[[%cancel-escape res] cur]) + %5 =^(res cur take-ship `[[%adopt res] cur]) + %6 =^(res cur take-ship `[[%reject res] cur]) + %7 =^(res cur take-ship `[[%detach res] cur]) + %8 =^(res cur take-mang ?~(res ~ `[[%set-mang u.res] cur])) + %10 + =^ len cur take-atom + =| bat=(list single:skim-sotx:urb) + |- ^+ ^$ + ?: =(len 0) ~^[%batch (flop bat)]^cur + =/ one ,:^$ + ?~ one ~ + ?: ?=([%batch *] -.u.one) ~ + =^ one cur u.one + $(len (dec len), bat one^bat) + :: + %11 + =^ pad=@ cur (take 0) + =^ fief=(unit fief:urb) cur take-fief + `[[%fief fief] cur] + == + :: + :: Take a bite + :: + ++ take + |= =bite + ^- [@ @ud] + =/ =step + ?@ bite (bex bite) + (mul step.bite (bex bloq.bite)) + [(cut 0 [cur step] batch) (add cur step)] + :: + ++ take-mang + ^- [(unit (unit mang:urb)) @ud] + =^ typ cur (take 2) + ?+ typ [~ cur] + %0 [[~ ~] cur] + %1 + =^ sont cur take-sont + ?~ sont [~ cur] + [``[%sont u.sont] cur] + %2 + =^ pass cur (take 0 256) + [``[%pass pass] cur] + == + :: + ++ take-atom + ^- [@ @ud] + =/ m (rub cur batch) + [q.m (add cur p.m)] + :: Encode ship and sont + :: + ++ take-sont + ^- [(unit sont:ord) @ud] + =^ pad=@ cur (take 0) + ?. =(pad 0) ~^cur + =^ txid cur (take 0 256) + =^ vout cur take-atom + =^ off cur take-atom + [`[txid vout off] cur] + :: + ++ take-fief + ^- [(unit fief:urb) @ud] + =^ typ cur (take 0 2) + ?+ typ [~ cur] + %0 [~ cur] + %2 + =^ pip cur (take 3 4) + =^ por cur (take 3 2) + [`[%if pip por] cur] + %3 + =^ pip cur (take 0 128) + =^ por cur (take 3 2) + [`[%is pip por] cur] + == + :: Encode escape-related txs + :: + ++ take-ship + ^- [ship @ud] + =^ pad=@ cur (take 0) + =^ other=ship cur (take 0 128) + [other cur] + :: + ++ take-sig + ^- (unit [(unit @) @ud]) + =^ typ cur (take 0 2) + ?: =(typ 0) `[~ cur] + ?. =(typ 1) ~& >> %take-sig !! + =^ sig cur (take 0 512) + `[`sig cur] + -- +-- diff --git a/desk/gub/lib/wallet-account-ui.hoon b/desk/gub/lib/wallet-account-ui.hoon new file mode 100644 index 0000000..ee4450f --- /dev/null +++ b/desk/gub/lib/wallet-account-ui.hoon @@ -0,0 +1,1241 @@ +:: wallet-account-ui: pure rendering arms for account detail + send pages +:: +/< feather /lib/feather.hoon +/< fi /lib/feather-icons.hoon +/< wt /lib/wallet-types.hoon +/< bip32 /lib/bip32.hoon +/< drft /lib/tx/draft.hoon +/< fees /lib/tx/fees.hoon +=, wt +|% +:: types +:: ++$ scan-progress [phase=@t idx=@ud gap=@ud] +:: ++$ fee-calc + $: total-inputs=@ud + total-outputs=@ud + has-change-config=? + fee-rate=@ud + est-vbytes=@ud + est-fee=@ud + change-result=change-result:fees + actual-fee=@sd + == +:: +mop-to-list: tap mop to indexed list (ascending by index) +:: +++ mop-to-list + |= mop=addr-mop + ^- (list [@ud address-data]) + (flop (tap:((on @ud address-data) gth) mop)) +:: +++ format-sats + |= n=@ud + ^- tape + =/ digits=tape (a-co:co n) + =/ len=@ud (lent digits) + ?: (lte len 3) digits + =/ rev=tape (flop digits) + =/ out=tape ~ + =/ i=@ud 0 + |- + ?~ rev out + =? out &((gth i 0) =(0 (mod i 3))) + [',' out] + $(rev t.rev, out [i.rev out], i +(i)) +:: +++ compute-total-balance + |= [recv=addr-mop chng=addr-mop] + ^- @ud + =/ all=(list [@ud address-data]) + (weld (mop-to-list recv) (mop-to-list chng)) + %+ roll all + |= [[idx=@ud a=address-data] total=@ud] + ?~ info.a total + (add total (sub funded.u.info.a spent.u.info.a)) +:: +++ format-account-path + |= [purpose=seg coin-type=seg account-idx=seg] + ^- tape + =/ [ph=? pi=@ud] purpose + =/ [ch=? ci=@ud] coin-type + =/ [ah=? ai=@ud] account-idx + %+ welp "m/" + %+ welp (scow %ud pi) + %+ welp ?:(ph "'" "") + %+ welp "/" + %+ welp (scow %ud ci) + %+ welp ?:(ch "'" "") + %+ welp "/" + %+ welp (scow %ud ai) + ?:(ah "'" "") +:: +++ next-unused-addr + |= recv=addr-mop + ^- (unit @t) + =/ entries=(list [@ud address-data]) (mop-to-list recv) + |- + ?~ entries ~ + =/ [idx=@ud a=address-data] i.entries + ?: ?|(?=(~ info.a) =(0 tx-count.u.info.a)) + `addr.a + $(entries t.entries) +:: +++ next-unused-change-addr + |= chng=addr-mop + ^- (unit @t) + =/ entries=(list [@ud address-data]) (mop-to-list chng) + |- + ?~ entries ~ + =/ [idx=@ud a=address-data] i.entries + ?: =(0 (fall (bind info.a |=(i=address-info tx-count.i)) 0)) + `addr.a + $(entries t.entries) +:: +++ compute-fee-info + |= dr=(unit transaction:drft) + ^- fee-calc + =/ total-inputs=@ud + ?~ dr 0 + (sum-inputs:drft inputs.u.dr) + =/ total-outputs=@ud + ?~ dr 0 + (sum-outputs:drft outputs.u.dr) + =/ has-change-config=? + ?~ dr %.n + ?=(^ change.u.dr) + =/ fee-rate=@ud + ?~ dr 0 + ?~ change.u.dr 0 + fee-rate.u.change.u.dr + =/ est-vbytes=@ud + ?~ dr 0 + (calculate-vbytes:drft u.dr) + =/ est-fee=@ud (calculate-fee:fees est-vbytes fee-rate) + =/ change-result=change-result:fees + (calculate-change-result:fees total-inputs total-outputs est-fee) + =/ total-out-with-change=@ud + %+ add total-outputs + ?. has-change-config 0 + ?:(?=(%ok -.change-result) amount.change-result 0) + =/ actual-fee=@sd + ?: (gte total-inputs total-out-with-change) + (sun:si (sub total-inputs total-out-with-change)) + (new:si | (sub total-out-with-change total-inputs)) + [total-inputs total-outputs has-change-config fee-rate est-vbytes est-fee change-result actual-fee] +:: +++ purpose-badge + |= purpose=seg + ^- manx + =/ [hardened=? index=@ud] purpose + =/ tooltip=tape + ?+ index (scow %ud index) + %86 "Taproot (BIP86) - 86" + %84 "Native SegWit (BIP84) - 84" + %49 "Wrapped SegWit (BIP49) - 49" + %44 "Legacy (BIP44) - 44" + == + =/ [color=tape label=tape] + ?+ index ["#888" (scow %ud index)] + %86 ["#9333ea" "86"] + %84 ["#10b981" "84"] + %49 ["#f59e0b" "49"] + %44 ["#6b7280" "44"] + == + ;div(title "{tooltip}", style "display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; border-radius: 50%; background: {color}; color: white; font-size: 10px; font-weight: bold; font-family: monospace; cursor: default;"): {label} +:: +++ coin-type-badge + |= coin-type=seg + ^- manx + =/ [hardened=? index=@ud] coin-type + =/ tooltip=tape + ?+ index (scow %ud index) + %0 "Bitcoin Mainnet - 0" + %1 "Bitcoin Testnet - 1" + == + =/ badge=manx + ?+ index + %- need %- de-xml:html + '' + :: + %0 + %- need %- de-xml:html + '' + :: + %1 + %- need %- de-xml:html + '' + == + ;span(title "{tooltip}", style "cursor: default;") + ;+ badge + == +:: +++ network-badge + |= network=?(%main %testnet3 %testnet4 %signet %regtest) + ^- manx + =/ testnet-svg=manx + %- need %- de-xml:html + '' + ?- network + %main + %- need %- de-xml:html + '' + :: + %testnet3 testnet-svg + %testnet4 testnet-svg + %signet testnet-svg + :: + %regtest + %- need %- de-xml:html + '' + == +:: +++ network-label + |= network=?(%main %testnet3 %testnet4 %signet %regtest) + ^- tape + ?- network + %main "Mainnet" + %testnet3 "Testnet3" + %testnet4 "Testnet4" + %signet "Signet" + %regtest "Regtest" + == +:: +++ network-badge-ui + |= [network=?(%main %testnet3 %testnet4 %signet %regtest) coin-type=@ud] + ^- manx + ;div#network-status(data-network "{(trip ;;(@ta network))}", style "display: flex; align-items: center; gap: 8px; margin-top: 12px;") + ;div.p2.br1(style "display: flex; align-items: center; gap: 8px; background: var(--b2);") + ;div.p2.b1.br2(style "display: flex; align-items: center; gap: 6px;") + ;+ (network-badge network) + ;span.f2.s-1: {(network-label network)} + == + ;button.hover.pointer + =onclick "showNetworkModal()" + =title "Change network" + =style "background: var(--b1); border: none; color: var(--f3); display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 4px; cursor: pointer; outline: none;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'edit-2') + == + == + == + ;+ (network-modal network coin-type) + == +:: +++ network-modal + |= [current=?(%main %testnet3 %testnet4 %signet %regtest) coin-type=@ud] + ^- manx + =/ is-mainnet-cointype=? =(0 coin-type) + =/ is-testnet-cointype=? !is-mainnet-cointype + =/ testnet-svg=manx + %- need %- de-xml:html + '' + =/ mainnet-svg=manx + %- need %- de-xml:html + '' + =/ active-style=tape " background: rgba(100, 150, 255, 0.15); border-color: rgba(100, 150, 255, 0.4);" + ;div#network-modal(style "display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); z-index: 1000; align-items: center; justify-content: center;", onclick "if(event.target === this) hideModal('network-modal')") + ;div.p4.b1.br2(style "max-width: 320px; width: 100%;") + ;div(style "display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;") + ;h3.s1.bold: Select Network + ;button.hover.pointer(onclick "hideModal('network-modal')", style "background: transparent; border: none; color: var(--f3); cursor: pointer; padding: 4px;") + ;div(style "width: 20px; height: 20px;") + ;+ (make:fi 'x') + == + == + == + ;div.fc.g2 + ;+ ?: is-testnet-cointype + ;span; + ;button.p3.b1.br2.hover.pointer.wf(onclick "setNetwork('main')", style "text-align: left; display: flex; align-items: center; gap: 8px;{?:(=(%main current) active-style "")}") + ;+ mainnet-svg + ;span: Mainnet + == + ;+ ?: is-mainnet-cointype + ;span; + ;button.p3.b1.br2.hover.pointer.wf(onclick "setNetwork('testnet4')", style "text-align: left; display: flex; align-items: center; gap: 8px;{?:(=(%testnet4 current) active-style "")}") + ;+ testnet-svg + ;span: Testnet4 + == + ;+ ?: is-mainnet-cointype + ;span; + ;button.p3.b1.br2.hover.pointer.wf(onclick "setNetwork('testnet3')", style "text-align: left; display: flex; align-items: center; gap: 8px;{?:(=(%testnet3 current) active-style "")}") + ;+ testnet-svg + ;span: Testnet3 + == + ;+ ?: is-mainnet-cointype + ;span; + ;button.p3.b1.br2.hover.pointer.wf(onclick "setNetwork('signet')", style "text-align: left; display: flex; align-items: center; gap: 8px;{?:(=(%signet current) active-style "")}") + ;+ testnet-svg + ;span: Signet + == + ;+ ?: is-mainnet-cointype + ;span; + ;button.p3.b1.br2.hover.pointer.wf(onclick "setNetwork('regtest')", style "text-align: left; display: flex; align-items: center; gap: 8px;{?:(=(%regtest current) active-style "")}") + ;+ testnet-svg + ;span: Regtest + == + == + == + == +:: +++ account-summary-ui + |= [recv=addr-mop chng=addr-mop] + ^- manx + =/ total-balance=@ud (compute-total-balance recv chng) + ;div#account-summary(style "display: flex; justify-content: space-between; align-items: baseline;") + ;span.f2(style "opacity: 0.8;"): Total Balance + ;span.s0.bold.mono: {(format-sats total-balance)} sats + == +:: +++ tab-bar + |= [recv-count=@ud chng-count=@ud] + ^- manx + ;div(style "display: flex; border-bottom: 1px solid var(--b3);") + ;button.tab-btn(data-tab "receiving", onclick "showTab('receiving')", style "flex: 1; padding: 8px 16px; background: transparent; border: none; border-bottom: 2px solid var(--f1); color: var(--f1); font-weight: bold; cursor: pointer; outline: none;") + ; Receiving ({(scow %ud recv-count)}) + == + ;button.tab-btn(data-tab "change", onclick "showTab('change')", style "flex: 1; padding: 8px 16px; background: transparent; border: none; border-bottom: 2px solid transparent; color: var(--f3); cursor: pointer; outline: none;") + ; Change ({(scow %ud chng-count)}) + == + == +:: +++ derive-button + |= [chain=tape mop=addr-mop] + ^- manx + =/ next-idx=@ud + =/ top=(unit [idx=@ud address-data]) + (pry:((on @ud address-data) gth) mop) + ?~ top 0 + +(idx.u.top) + =/ chain-tag=tape + ?:(=("receiving" chain) "recv" "chng") + ;div.p3.b2.br2.hover.pointer + =id "derive-{chain-tag}" + =onclick "deriveNext('{chain}')" + =style "display: flex; align-items: center; justify-content: center; gap: 8px; border: 2px dashed var(--b3);" + ;div(style "font-size: 24px; color: var(--f-3);"): + + ;span.f2.bold.f-3: Derive Next Address (Index {(scow %ud next-idx)}) + == +:: +++ address-list + |= [acct=account-data chain-tag=?(%recv %chng) mop=addr-mop now=@da] + ^- manx + =/ chain=tape ?:(?=(%recv chain-tag) "receiving" "change") + =/ entries=(list [@ud address-data]) (mop-to-list mop) + ;div.fc.g2(id "addr-list-{(trip chain-tag)}") + ;* ?: =(~ entries) + :~ ;div.p4.b1.br2.tc(id "empty-{(trip chain-tag)}") + ;div.s0.f2.mb2: No addresses yet + ;div.f3.s-1: Click above to derive your first address + == + == + =/ acct-key (from-extended:bip32 (trip xprv.acct)) + =/ key-hex=tape (hexn:http-utils public-key:acct-key) + (turn (flop entries) |=([idx=@ud a=address-data] (address-row idx a now chain chain-tag active-network.acct key-hex))) + == +:: +++ address-row + |= [idx=@ud a=address-data now=@da chain=tape chain-tag=?(%recv %chng) network=?(%main %testnet3 %testnet4 %signet %regtest) key-hex=tape] + ^- manx + =/ addr-text=tape (trip addr.a) + =/ row-id=tape "addr-{(trip chain-tag)}-{(scow %ud idx)}" + =/ has-txs=? + ?~ info.a %.n + (gth tx-count.u.info.a 0) + =/ row-classes=tape + ?:(has-txs "p3 b1 br2 hover" "p3 b1 br2 hover empty-address") + ;div(id row-id, class row-classes, style "display: flex; justify-content: space-between; align-items: center; gap: 12px;") + ;div(style "flex: 1; min-width: 0;") + ;div(style "display: flex; align-items: center; gap: 8px;") + ;span.f3.s-2.mono: Index {(scow %ud idx)} + ;+ ?~ info.a ;span; + =/ balance=@ud + (sub funded.u.info.a spent.u.info.a) + ;div(style "display: flex; gap: 8px;") + ;span.f3.s-2(style "opacity: 0.8;") + ; • {(scow %ud tx-count.u.info.a)} txs + == + ;span.f3.s-2(style "opacity: 0.8;") + ; • {(format-sats balance)} sats + == + == + ;+ ?~ last-error.a ;span; + =/ err-lines=(list tape) + (turn u.last-error.a |=(=tank ~(ram re tank))) + =/ err-text=tape + (zing (join " | " err-lines)) + ;div + =title err-text + =style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center; color: #ff5050; cursor: help;" + ;+ (make:fi 'alert-circle') + == + == + ;div(style "display: flex; align-items: center; gap: 8px;") + ;button.p1.b0.br1.hover.pointer + =data-addr addr-text + =onclick "copyAddr(this)" + =title "Copy address" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 24px; height: 24px; justify-content: center; outline: none;" + ;div.copy-icon(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'copy') + == + ;div.check-icon(style "width: 12px; height: 12px; display: none; align-items: center; justify-content: center; color: #10b981;") + ;+ (make:fi 'check') + == + == + ;a.mono.f2.s-1.hover + =href "/groundwire/wallet/a/{key-hex}/addr/{?:(?=(%recv chain-tag) "recv" "chng")}/{(scow %ud idx)}" + =style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--f3); text-decoration: none;" + ;+ ;/ addr-text + == + == + == + ;div(style "display: flex; gap: 4px; flex-shrink: 0;") + ;+ ?: loading.a + ;div(style "display: flex; gap: 4px;") + ;div.p2.b1.br1(style "background: rgba(100, 150, 255, 0.2); border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 32px; height: 32px; justify-content: center;") + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center; animation: spin 1s linear infinite;") + ;+ (make:fi 'loader') + == + == + == + ;button.p2.b1.br1.hover.pointer + =title ?~(info.a "Never checked" "Last: {(scow %da last-check.u.info.a)}") + =data-chain (trip chain-tag) + =data-idx (scow %ud idx) + =onclick "refreshAddress(this.dataset.chain, this.dataset.idx)" + =style "background: var(--b2); border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 32px; height: 32px; justify-content: center; outline: none;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'refresh-cw') + == + == + ;button.p2.b1.br1.hover.pointer + =title "Remove address" + =data-chain (trip chain-tag) + =data-idx (scow %ud idx) + =onclick "deleteAddress(this.dataset.chain, this.dataset.idx)" + =style "background: var(--b2); border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 32px; height: 32px; justify-content: center; outline: none; opacity: 0.5;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'trash-2') + == + == + == + == +:: +++ receive-modal + |= recv=addr-mop + ^- manx + =/ next=(unit @t) (next-unused-addr recv) + ;div#receive-modal(style "display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.5); z-index: 1000; align-items: center; justify-content: center;", onclick "if(event.target === this) hideModal('receive-modal')") + ;div.p4.b1.br2(style "max-width: 400px; width: 100%;") + ;div(style "display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;") + ;h2.s1.bold: Receive Bitcoin + ;button.hover.pointer(onclick "hideModal('receive-modal')", style "background: transparent; border: 1px solid var(--b3); color: var(--f3); padding: 4px; outline: none; border-radius: 4px;") + ;div(style "width: 20px; height: 20px;") + ;+ (make:fi 'x') + == + == + == + ;+ ?~ next + ;div.tc.p4 + ;p.f2: No address available. Derive or scan your account first. + == + ;div + ;div.tc(style "margin-bottom: 16px;") + ;div#receive-qr(data-address "{(trip u.next)}", style "display: inline-block;"); + == + ;div.p3.b2.br2(style "display: flex; align-items: center; gap: 8px;") + ;button.p1.b0.br1.hover.pointer + =onclick "copyReceiveAddr()" + =title "Copy address" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 24px; height: 24px; justify-content: center; outline: none; flex-shrink: 0;" + ;div(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'copy') + == + == + ;div#receive-addr.mono.f3(style "overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0;"): {(trip u.next)} + == + == + == + == +:: +++ scan-status-ui + |= [scan=?(%active %paused %none) progress=(unit scan-progress)] + ^- manx + ?- scan + %active + =/ border-color=tape "rgba(100, 150, 255, 0.4)" + =/ bg-color=tape "rgba(100, 150, 255, 0.1)" + ;div#scan-status.p3.b2.br2(style "display: flex; align-items: center; justify-content: space-between; gap: 12px; border: 2px solid {border-color}; background: {bg-color};") + ;div(style "display: flex; align-items: center; gap: 12px; flex: 1;") + ;div(style "width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; animation: spin 1s linear infinite;") + ;+ (make:fi 'loader') + == + ;div(style "display: flex; flex-direction: column; gap: 4px;") + ;+ ?~ progress + ;span.f2.bold: Scanning... + ;span.f2.bold: {?:(=('recv' phase.u.progress) "Receiving" "Change")} + ;+ ?~ progress + ;span; + ;span.f3.s-1: Index: {(scow %ud idx.u.progress)} • Gap: {(scow %ud gap.u.progress)}/20 + == + == + ;div(style "display: flex; gap: 4px;") + ;button.p2.b1.br1.hover.pointer + =title "Pause full scan" + =onclick "pauseScan()" + =style "background: rgba(255, 180, 50, 0.2); border: 1px solid rgba(255, 180, 50, 0.4); color: #ffb432; display: flex; align-items: center; width: 32px; height: 32px; justify-content: center; outline: none;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'pause') + == + == + ;button.p2.b1.br1.hover.pointer + =title "Cancel full scan" + =onclick "cancelScan()" + =style "background: rgba(255, 80, 80, 0.2); border: 1px solid rgba(255, 80, 80, 0.4); color: #ff5050; display: flex; align-items: center; width: 32px; height: 32px; justify-content: center; outline: none;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'x-circle') + == + == + == + == + :: + %paused + =/ border-color=tape "rgba(150, 150, 150, 0.4)" + =/ bg-color=tape "rgba(150, 150, 150, 0.1)" + ;div#scan-status.p3.b2.br2(style "display: flex; align-items: center; justify-content: space-between; gap: 12px; border: 2px solid {border-color}; background: {bg-color};") + ;div(style "display: flex; align-items: center; gap: 12px; flex: 1;") + ;div(style "width: 20px; height: 20px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'pause-circle') + == + ;div(style "display: flex; flex-direction: column; gap: 4px;") + ;+ ?~ progress + ;span.f2.bold: Scan Paused + ;span.f2.bold: Paused — {?:(=('recv' phase.u.progress) "Receiving" "Change")} + ;+ ?~ progress + ;span; + ;span.f3.s-1: Index: {(scow %ud idx.u.progress)} • Gap: {(scow %ud gap.u.progress)}/20 + == + == + ;div(style "display: flex; gap: 4px;") + ;button.p2.b1.br1.hover.pointer + =title "Resume full scan" + =onclick "resumeScan()" + =style "background: rgba(50, 200, 100, 0.2); border: 1px solid rgba(50, 200, 100, 0.4); color: #32c864; display: flex; align-items: center; width: 32px; height: 32px; justify-content: center; outline: none;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'play') + == + == + ;button.p2.b1.br1.hover.pointer + =title "Cancel full scan" + =onclick "cancelScan()" + =style "background: rgba(255, 80, 80, 0.2); border: 1px solid rgba(255, 80, 80, 0.4); color: #ff5050; display: flex; align-items: center; width: 32px; height: 32px; justify-content: center; outline: none;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'x-circle') + == + == + == + == + :: + %none + ;div#scan-status.p3.b2.br2.hover.pointer + =onclick "fullScan()" + =style "display: flex; align-items: center; justify-content: center; gap: 8px; border: 2px solid var(--b3); background: var(--b2);" + ;div(style "font-size: 24px; color: var(--f-3);"): ↻ + ;span.f2.bold.f-3: Full Scan + == + == +:: +++ addresses-fragment + |= [acct=account-data recv=addr-mop chng=addr-mop now=@da scan=?(%active %paused %none) progress=(unit scan-progress)] + ^- manx + =/ recv-count=@ud (lent (mop-to-list recv)) + =/ chng-count=@ud (lent (mop-to-list chng)) + ;div.fc(style "flex: 1; min-height: 0;") + ;div.fc.g2(style "flex-shrink: 0;") + ;div#scan-status-wrap + ;+ (scan-status-ui scan progress) + == + ;div#tab-bar + ;+ (tab-bar recv-count chng-count) + == + ;div#receiving-derive(style "padding-top: 8px;") + ;+ (derive-button "receiving" recv) + == + ;div#change-derive(style "display: none; padding-top: 8px;") + ;+ (derive-button "change" chng) + == + == + ;div#addr-scroll.fc.g2(style "flex: 1; min-height: 0; overflow-y: auto; padding-top: 8px;") + ;div#receiving-addresses + ;+ (address-list acct %recv recv now) + == + ;div#change-addresses(style "display: none;") + ;+ (address-list acct %chng chng now) + == + == + == +:: +++ fee-info-ui + |= fi=fee-calc + ^- manx + =/ fee-color=tape + ?: (syn:si actual-fee.fi) "var(--f3)" + "rgba(255, 100, 100, 0.8)" + ;div#fee-info.f2(style "margin-top: 4px; display: flex; gap: 16px; flex-wrap: wrap;") + ;span: Inputs: {(scow %ud total-inputs.fi)} sats + ;span: Outputs: {(scow %ud total-outputs.fi)} sats + ;span: Size: ~{(scow %ud est-vbytes.fi)} vB + ;span(style "color: {fee-color};"): Fee: {?:((syn:si actual-fee.fi) (scow %ud (abs:si actual-fee.fi)) "-{(scow %ud (abs:si actual-fee.fi))}")} sats + == +:: +++ auto-select-ui + |= [has-auto=? is-random=? is-largest=? target=@ud] + ^- manx + ;div#auto-select(style "margin-bottom: 8px;") + ;div(style "display: flex; align-items: center; gap: 8px;") + ;label.pointer(style "display: flex; align-items: center; gap: 8px;") + ;+ ?: has-auto + ;input(type "checkbox", checked "", onchange "setAutoMode(this.checked ? 'random' : 'disabled')", style "width: 16px; height: 16px; cursor: pointer;"); + ;input(type "checkbox", onchange "setAutoMode(this.checked ? 'random' : 'disabled')", style "width: 16px; height: 16px; cursor: pointer;"); + ;span.f3: Auto-select UTXOs + == + ;+ ?: has-auto + ;span.f3(style "opacity: 0.6;"): (target: {(scow %ud target)} sats) + ;span; + == + ;div(style "margin-left: 24px; margin-top: 8px; display: {?:(has-auto "flex" "none")}; align-items: center; gap: 16px;") + ;button.p1.b1.br1.hover.pointer + =onclick "runAutoSelect()" + =title "Re-select UTXOs" + =style "background: rgba(100, 150, 255, 0.15); border: 1px solid rgba(100, 150, 255, 0.4); color: var(--f3); display: flex; align-items: center; justify-content: center; width: 28px; height: 28px; outline: none;" + ;div(style "width: 14px; height: 14px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'refresh-cw') + == + == + ;label.pointer(style "display: flex; align-items: center; gap: 4px;") + ;+ ?: is-random + ;input(type "radio", name "auto-mode", value "random", checked "", onchange "setAutoMode('random')", style "cursor: pointer;"); + ;input(type "radio", name "auto-mode", value "random", onchange "setAutoMode('random')", style "cursor: pointer;"); + ;span.f3: Random + == + ;label.pointer(style "display: flex; align-items: center; gap: 4px;") + ;+ ?: is-largest + ;input(type "radio", name "auto-mode", value "largest-first", checked "", onchange "setAutoMode('largest-first')", style "cursor: pointer;"); + ;input(type "radio", name "auto-mode", value "largest-first", onchange "setAutoMode('largest-first')", style "cursor: pointer;"); + ;span.f3: Largest first + == + == + == +:: +++ utxo-row-ui + |= [txid=@t vout=@ud value=@ud addr=@t spend=spend:fees is-sel=?] + ^- manx + ;div.p3.b1.br2(style "display: flex; align-items: center; gap: 12px; margin-bottom: 4px;") + ;button.p1.b0.br1.hover.pointer + =onclick "toggleInput('{(trip txid)}', {(a-co:co vout)}, {(a-co:co value)}, '{(trip (scot %tas spend))}', {?:(is-sel "true" "false")})" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 24px; height: 24px; justify-content: center; outline: none; flex-shrink: 0;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi ?:(is-sel 'check-square' 'square')) + == + == + ;div(style "flex: 1; min-width: 0;") + ;div.mono.f2.s-1(style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--f3);"): {(trip txid)}:{(scow %ud vout)} + ;div.mono.f3.s-2(style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; opacity: 0.7;"): {(trip addr)} + == + ;div.f3.s-2(style "white-space: nowrap; flex-shrink: 0;"): {(scow %ud value)} sats + == +:: +++ output-list-ui + |= dr=(unit transaction:drft) + ^- manx + ;div.fc.g2(style "max-height: 200px; overflow-y: auto;") + ;* ?~ dr + :~ ;div.p4.b1.br2.tc + ;div.s0.f2.mb2: No outputs yet + ;div.f3.s-1: Add your first output below + == + == + ?: =(~ outputs.u.dr) + :~ ;div.p4.b1.br2.tc + ;div.s0.f2.mb2: No outputs yet + ;div.f3.s-1: Add your first output below + == + == + =/ idx=@ud 0 + =/ remaining=(list output:drft) outputs.u.dr + |- + ?~ remaining ~ + :- ;div.p3.b1.br2(style "display: flex; align-items: center; gap: 8px;") + ;span.mono.f2.s-1(style "overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1; min-width: 0;"): {(trip address.i.remaining)} + ;span.f3.s-2(style "white-space: nowrap; flex-shrink: 0;"): {(scow %ud amount.i.remaining)} sats + ;button.p1.b0.br1.hover.pointer + =onclick "deleteOutput({(scow %ud idx)})" + =title "Delete output" + =style "background: var(--b2); border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 24px; height: 24px; justify-content: center; outline: none; flex-shrink: 0;" + ;div(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'trash-2') + == + == + == + $(idx +(idx), remaining t.remaining) + == +:: +++ change-section-ui + |= [has-cfg=? fee-rate=@ud est-fee=@ud est-vbytes=@ud change-result=change-result:fees next-chg=(unit @t)] + ^- manx + ;div.p3.b1.br2.mb2(style "border: 1px dashed var(--b3);") + ;div(style "display: flex; align-items: center; gap: 12px; margin-bottom: 8px;") + ;label.pointer(style "display: flex; align-items: center; gap: 8px;") + ;+ ?: has-cfg + ;input#use-change(type "checkbox", checked "", onchange "toggleChange(this.checked)", style "width: 16px; height: 16px; cursor: pointer;"); + ;input#use-change(type "checkbox", onchange "toggleChange(this.checked)", style "width: 16px; height: 16px; cursor: pointer;"); + ;span.f2.bold: Send change to self + == + == + ;div#change-details(style "display: {?:(has-cfg "block" "none")};") + ;div(style "display: flex; align-items: center; gap: 12px; margin-bottom: 8px;") + ;label.f3(style "white-space: nowrap;"): Fee rate: + ;input#fee-rate.p2.b1.br1.mono(type "number", min "1", value "{(scow %ud fee-rate)}", oninput "updateChange()", style "width: 80px; background: var(--b1); border: 1px solid var(--b3); color: var(--f2); outline: none;"); + ;span.f3: sat/vB + == + ;+ ?~ next-chg + ;div.f3(style "color: rgba(255,100,100,0.9); padding: 8px;"): No unused change address — derive more addresses first + ;div(style "display: flex; flex-direction: column; gap: 4px; padding: 8px; background: var(--b2); border-radius: 4px;") + ;div(style "display: flex; align-items: center; gap: 8px;") + ;span.f3(style "opacity: 0.6;"): Est. fee: + ;span#est-fee.mono.f2: {(scow %ud est-fee)} sats ({(scow %ud est-vbytes)} vB × {(scow %ud fee-rate)} sat/vB) + == + ;div(style "display: flex; align-items: center; gap: 8px;") + ;span.f3(style "opacity: 0.8;"): Change: + ;+ ?- -.change-result + %ok ;span#change-amount.mono.f2: {(scow %ud amount.change-result)} sats + %insufficient ;span#change-amount.mono.f2(style "background: rgba(220,80,80,0.9); color: white; padding: 2px 6px; border-radius: 3px;"): need {(scow %ud shortfall.change-result)} more sats + %dust ;span#change-amount.mono.f2(style "background: rgba(200,150,50,0.9); color: white; padding: 2px 6px; border-radius: 3px;"): {(scow %ud amount.change-result)} sats → fee (dust) + == + == + ;div(style "display: flex; align-items: center; gap: 8px;") + ;span.f3(style "opacity: 0.6;"): To: + ;span.mono.f3.s-1(style "opacity: 0.8; overflow: hidden; text-overflow: ellipsis;"): {(trip u.next-chg)} + == + == + == + == +:: +++ style-text + ^- tape + """ + html, body \{ + height: 100vh !important; + overflow: hidden !important; + margin: 0 !important; + } + @keyframes spin \{ + from \{ transform: rotate(0deg); } + to \{ transform: rotate(360deg); } + } + #account-page.hide-empty .empty-address \{ + display: none !important; + } + """ +:: +++ script-text + |= [network=?(%main %testnet3 %testnet4 %signet %regtest) acct-base=tape acct-hex=tape] + ^- tape + """ + var API = '/grubbery/api'; + var acctBase = '{acct-base}'; + var activeNetwork = '{(trip ;;(@ta network))}'; + var activeTab = 'receiving'; + var acctHex = '{acct-hex}'; + + function showReceiveModal() \{ + document.getElementById('receive-modal').style.display = 'flex'; + var qrContainer = document.getElementById('receive-qr'); + if (qrContainer) \{ + var address = qrContainer.getAttribute('data-address'); + qrContainer.innerHTML = ''; + new QRCode(qrContainer, \{text: address, width: 200, height: 200}); + } + } + + function copyReceiveAddr() \{ + var el = document.getElementById('receive-addr'); + if (el) navigator.clipboard.writeText(el.textContent.trim()); + } + + function showNetworkModal() \{ + document.getElementById('network-modal').style.display = 'flex'; + } + + function hideModal(id) \{ + document.getElementById(id).style.display = 'none'; + } + + function setNetwork(network) \{ + var url = API + '/poke/' + acctBase + '/main.sig?mark=json'; + fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'set-network', network: network}) + }).then(function() \{ + window.location.reload(); + }).catch(function(e) \{ console.error('set-network failed', e) }); + } + + function deriveNext(chain) \{ + console.log('[debug] deriveNext called', chain); + var url = API + '/poke/' + acctBase + '/main.sig?mark=json'; + console.log('[debug] deriveNext url:', url); + fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'derive-next', chain: chain}) + }).then(function(r) \{ + if (!r.ok) return r.text().then(function(t) \{ console.error('derive-next error', t) }); + }).catch(function(e) \{ console.error('derive-next failed', e) }); + } + + function deleteAddress(chain, idx) \{ + if (!confirm('Remove address ' + chain + '-' + idx + '?')) return; + var url = API + '/poke/' + acctBase + '/main.sig?mark=json'; + fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'delete-address', chain: chain, index: Number(idx)}) + }).catch(function(e) \{ console.error('delete failed', e) }); + } + + function refreshAddress(chain, idx) \{ + var url = API + '/poke/' + acctBase + '/main.sig?mark=json'; + fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'refresh', chain: chain, index: Number(idx)}) + }).then(function(r) \{ + if (!r.ok) return r.text().then(function(t) \{ console.error('refresh error', t) }); + }).catch(function(e) \{ console.error('refresh failed', e) }); + } + + function fullScan() \{ + var url = API + '/poke/' + acctBase + '/main.sig?mark=json'; + fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'full-scan'}) + }).catch(function(e) \{ console.error('scan failed', e) }); + } + + function pauseScan() \{ + var url = API + '/poke/' + acctBase + '/main.sig?mark=json'; + fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'pause-scan'}) + }).catch(function(e) \{ console.error('pause-scan failed', e) }); + } + + function resumeScan() \{ + var url = API + '/poke/' + acctBase + '/main.sig?mark=json'; + fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'resume-scan'}) + }).catch(function(e) \{ console.error('resume-scan failed', e) }); + } + + function cancelScan() \{ + var url = API + '/poke/' + acctBase + '/main.sig?mark=json'; + fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'cancel-scan'}) + }).catch(function(e) \{ console.error('cancel-scan failed', e) }); + } + + function toggleEmptyAddresses() \{ + var page = document.getElementById('account-page'); + var button = document.getElementById('empty-toggle'); + var iconContainer = document.getElementById('eye-icon'); + var isHiding = page.classList.contains('hide-empty'); + if (isHiding) \{ + page.classList.remove('hide-empty'); + button.setAttribute('title', 'Hide addresses without transactions'); + iconContainer.innerHTML = ''; + } else \{ + page.classList.add('hide-empty'); + button.setAttribute('title', 'Show addresses without transactions'); + iconContainer.innerHTML = ''; + } + } + + function copyAddr(btn) \{ + navigator.clipboard.writeText(btn.dataset.addr); + var ci = btn.querySelector('.copy-icon'); + var ki = btn.querySelector('.check-icon'); + if (ci) ci.style.display = 'none'; + if (ki) ki.style.display = 'flex'; + setTimeout(function() \{ + if (ci) ci.style.display = 'flex'; + if (ki) ki.style.display = 'none'; + }, 1500); + } + + function showTab(tab) \{ + activeTab = tab; + applyTab(); + } + + function applyTab() \{ + var r = document.getElementById('receiving-addresses'); + var c = document.getElementById('change-addresses'); + var rd = document.getElementById('receiving-derive'); + var cd = document.getElementById('change-derive'); + if (r) r.style.display = activeTab === 'receiving' ? '' : 'none'; + if (c) c.style.display = activeTab === 'change' ? '' : 'none'; + if (rd) rd.style.display = activeTab === 'receiving' ? '' : 'none'; + if (cd) cd.style.display = activeTab === 'change' ? '' : 'none'; + document.querySelectorAll('.tab-btn').forEach(function(btn) \{ + var active = btn.dataset.tab === activeTab; + btn.style.borderBottomColor = active ? 'var(--f1)' : 'transparent'; + btn.style.color = active ? 'var(--f1)' : 'var(--f3)'; + btn.style.fontWeight = active ? 'bold' : 'normal'; + }); + } + + function connectSSE() \{ + var es = new EventSource('/groundwire/wallet/a/' + acctHex + '/stream'); + es.addEventListener('fragment', function(e) \{ + try \{ + var data = JSON.parse(e.data); + var el = document.getElementById(data.target); + if (!el) return; + if (data.action === 'prepend') \{ + if (data.rowId && document.getElementById(data.rowId)) return; + var empty = el.querySelector('[id^="empty-"]'); + if (empty) empty.remove(); + el.insertAdjacentHTML('afterbegin', data.html); + } else if (data.action === 'update') \{ + var existing = document.getElementById(data.rowId); + if (existing) existing.outerHTML = data.html; + } else \{ + el.innerHTML = data.html; + } + applyTab(); + } catch(err) \{ console.error('SSE fragment error', err); } + }); + es.addEventListener('receive-addr', function(e) \{ + try \{ + var addr = e.data; + var qr = document.getElementById('receive-qr'); + if (qr) qr.setAttribute('data-address', addr); + var el = document.getElementById('receive-addr'); + if (el) el.textContent = addr; + } catch(err) \{ console.error('SSE receive-addr error', err); } + }); + es.onerror = function() \{ + es.close(); + setTimeout(connectSSE, 3000); + }; + } + connectSSE(); + """ +:: +++ send-scripts-ui + |= [next-chg-tape=tape acct-base=tape key-hex=tape] + ^- manx + =/ js=tape + """ + var API = '/grubbery/api'; + var sendBase = '{acct-base}'; + var changeAddress = '{next-chg-tape}'; + + function poke(action, extra) \{ + var url = API + '/poke/' + sendBase + '/main.sig?mark=json'; + var body = Object.assign(\{action: action}, extra || \{}); + return fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(body) + }); + } + + function addOutput() \{ + var addr = document.getElementById('output-addr').value.trim(); + var amt = parseInt(document.getElementById('output-amt').value); + if (!addr || !amt) return; + poke('add-output', \{address: addr, amount: amt}).then(function() \{ + document.getElementById('output-addr').value = ''; + document.getElementById('output-amt').value = ''; + }); + } + + function deleteOutput(idx) \{ + poke('delete-output', \{index: idx}); + } + + function clearDraft() \{ + poke('clear-draft'); + } + + function toggleInput(txid, vout, value, spend, isSelected) \{ + if (isSelected) \{ + poke('remove-input', \{'utxo-txid': txid, 'utxo-vout': vout}); + } else \{ + poke('add-input', \{'utxo-txid': txid, 'utxo-vout': vout, 'utxo-value': value, 'utxo-spend': spend}); + } + } + + function toggleChange(enabled) \{ + document.getElementById('change-details').style.display = enabled ? 'block' : 'none'; + if (enabled) \{ + updateChange(); + } else \{ + poke('clear-change-config'); + } + } + + function updateChange() \{ + if (!changeAddress) return; + var feeRate = parseInt(document.getElementById('fee-rate').value) || 10; + poke('set-change-config', \{'fee-rate': feeRate, 'change-address': changeAddress}); + } + + function setAutoMode(mode) \{ + poke('set-auto-select-mode', \{mode: mode}); + } + + function runAutoSelect() \{ + poke('run-auto-select'); + } + + function buildTransaction() \{ + poke('build-transaction'); + } + + function connectSSE() \{ + var es = new EventSource('/groundwire/wallet/a/{key-hex}/send/stream'); + es.addEventListener('fragment', function(e) \{ + try \{ + var data = JSON.parse(e.data); + var el = document.getElementById(data.target); + if (!el) return; + el.innerHTML = data.html; + } catch(err) \{ console.error('SSE fragment error', err); } + }); + es.onerror = function() \{ + es.close(); + setTimeout(connectSSE, 3000); + }; + } + connectSSE(); + """ + ;script + ;+ ;/ js + == +:: +++ detail-page + |= [acct=account-data recv=addr-mop chng=addr-mop now=@da scan=?(%active %paused %none) progress=(unit scan-progress) rfsh=(set (pair ?(%recv %chng) @ud)) wal-name=@t] + ^- manx + =/ acct-key (from-extended:bip32 (trip xprv.acct)) + =/ key-hex=tape (hexn:http-utils public-key:acct-key) + ;html + ;head + ;title: {(trip name.acct)} + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;+ feather:feather + ;script(src "https://cdnjs.cloudflare.com/ajax/libs/qrcodejs/1.0.0/qrcode.min.js"); + ;style + ;+ ;/ style-text + == + == + ;body + ;div(style "min-width: 650px; height: 100%;") + ;div#account-page.fc.g3.p5.ma.mw-page(style "height: 100%;") + ;div(style "flex-shrink: 0; display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;") + ;a.hover.pointer(href "/groundwire/wallet/w/{(hexn:http-utils wallet.acct)}/", style "color: var(--f3); text-decoration: none;"): ← Back to Wallet + == + ;div.p4.b1.br2(style "flex-shrink: 0; position: relative;") + ;button#empty-toggle.hover.pointer + =onclick "toggleEmptyAddresses()" + =title "Hide addresses without transactions" + =style "position: absolute; top: 16px; right: 16px; background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; justify-content: center; width: 32px; height: 32px; border-radius: 4px; cursor: pointer; outline: none;" + ;div#eye-icon(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'eye') + == + == + ;h1.s2.bold.mb2 + ; {(trip name.acct)} + ;+ ?: =('' wal-name) ;span; + ;span.f2(style "opacity: 0.4; font-weight: normal;"): {" | "}{(trip wal-name)} + == + ;div(style "display: flex; gap: 8px; align-items: center; flex-wrap: wrap;") + ;+ (purpose-badge purpose.acct) + ;code.mono.s-2.p1.b2.br1: {(format-account-path purpose.acct coin-type.acct account-idx.acct)} + ;+ (coin-type-badge coin-type.acct) + == + ;div#network-badge-wrap + ;+ (network-badge-ui active-network.acct q.coin-type.acct) + == + == + ;div.p4.b2.br2(style "flex-shrink: 0;") + ;h2.s1.bold.mb2: Account Summary + ;div#account-summary-wrap + ;+ (account-summary-ui recv chng) + == + ;div(style "display: flex; gap: 8px; margin-top: 12px; justify-content: center;") + ;a.p2.b1.br2.hover.pointer + =href "/groundwire/wallet/a/{key-hex}/send" + =style "display: flex; align-items: center; justify-content: center; gap: 6px; background: rgba(100, 150, 255, 0.15); border: 1px solid rgba(100, 150, 255, 0.4); color: var(--f3); text-decoration: none; outline: none; white-space: nowrap;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'arrow-up') + == + ;span.f2.bold: Send + == + ;button.p2.b1.br2.hover.pointer + =onclick "showReceiveModal()" + =style "display: flex; align-items: center; justify-content: center; gap: 6px; background: rgba(50, 200, 100, 0.15); border: 1px solid rgba(50, 200, 100, 0.4); color: var(--f3); outline: none; white-space: nowrap;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'arrow-down') + == + ;span.f2.bold: Receive + == + == + == + ;div#live-content.fc.g3(style "flex: 1; min-height: 0;") + ;+ (receive-modal recv) + ;+ (addresses-fragment acct recv chng now scan progress) + == + == + == + ;script + ;+ ;/ + =/ acct-base=tape "wallet.wallet_app/accounts/{key-hex}.wallet_account" + (script-text active-network.acct acct-base key-hex) + == + == + == +:: +++ send-page + |= [acct=account-data recv=addr-mop chng=addr-mop dr=(unit transaction:drft) now=@da wal-name=@t] + ^- manx + =/ acct-key (from-extended:bip32 (trip xprv.acct)) + =/ key-hex=tape (hexn:http-utils public-key:acct-key) + =/ fi=fee-calc (compute-fee-info dr) + =/ utxos=(list [addr=@t u=utxo chain=?(%recv %chng) idx=@ud]) + %+ weld + ^- (list [addr=@t u=utxo chain=?(%recv %chng) idx=@ud]) + %- zing + %+ turn (mop-to-list recv) + |= [idx=@ud a=address-data] + (turn utxos.a |=(u=utxo [addr.a u %recv idx])) + ^- (list [addr=@t u=utxo chain=?(%recv %chng) idx=@ud]) + %- zing + %+ turn (mop-to-list chng) + |= [idx=@ud a=address-data] + (turn utxos.a |=(u=utxo [addr.a u %chng idx])) + =/ next-chg=(unit @t) (next-unused-change-addr chng) + =/ next-chg-tape=tape ?~(next-chg "" (trip u.next-chg)) + =/ auto-mode=(unit select-mode:drft) + ?~ dr ~ + auto-select.u.dr + =/ has-auto=? ?=(^ auto-mode) + =/ is-random=? =(auto-mode `%random) + =/ is-largest=? =(auto-mode `%largest-first) + =/ spend=spend:fees script-type.acct + =/ total-balance=@ud + %+ roll utxos + |= [[addr=@t u=utxo chain=?(%recv %chng) idx=@ud] sum=@ud] + (add sum value.u) + =/ utxo-rows=(list manx) + ?~ utxos + :~ ;div.p3.b1.br2.f3: No UTXOs available + == + %+ turn utxos + |= [addr=@t u=utxo chain=?(%recv %chng) idx=@ud] + =/ is-sel=? + ?~ dr %.n + %+ lien inputs.u.dr + |=(i=utxo-input:drft &(=(txid.i txid.u) =(vout.i vout.u))) + (utxo-row-ui txid.u vout.u value.u addr spend is-sel) + ;html + ;head + ;title: Send - {(trip name.acct)} + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;+ feather:feather + ;style: html, body \{ height: 100vh !important; overflow: hidden !important; margin: 0 !important; } + == + ;body.dark.b0.f1(style "height: 100%;") + ;div.fc.g3.p5.ma(style "max-width: 720px; height: 100%; overflow-y: auto;") + ;a.hover.pointer(href "/groundwire/wallet/a/{key-hex}/", style "color: var(--f3); text-decoration: none; flex-shrink: 0;"): ← Back + ;div.p4.b1.br2(style "flex-shrink: 0;") + ;h1.s2.bold(style "margin-bottom: 8px;") + ; Send Bitcoin + ;span(style "opacity: 0.4; margin: 0 8px;"): | + ;span.f2(style "opacity: 0.5; font-weight: normal;"): {(trip name.acct)} + == + ;div#send-balance.f2(style "margin-top: 4px;"): Available: {(scow %ud total-balance)} sats + ;div#send-fee-info + ;+ (fee-info-ui fi) + == + == + ;div.p4.b2.br2 + ;h2.s1.bold.mb2: Select UTXOs (Inputs) + ;div#send-auto-select + ;+ (auto-select-ui has-auto is-random is-largest (add total-outputs.fi est-fee.fi)) + == + ;div.f3(style "opacity: 0.8; margin-bottom: 8px;"): Select which coins to spend + ;div#utxo-list(style "max-height: 300px; overflow-y: auto;") + ;* utxo-rows + == + == + ;div.p3.b2.br2(style "flex-shrink: 0;") + ;h3.s0.bold(style "margin-bottom: 8px;"): Add Output + ;div(style "display: flex; gap: 8px; width: 100%;") + ;div(style "flex: 2;") + ;label.f3.bold(style "display: block; margin-bottom: 4px;"): Address + ;input#output-addr.p2.b1.br1(type "text", placeholder "bc1q... or tb1q...", style "outline: none; width: 100%;"); + == + ;div(style "flex: 1;") + ;label.f3.bold(style "display: block; margin-bottom: 4px;"): Amount (sats) + ;input#output-amt.p2.b1.br1(type "number", placeholder "10000", min "1", style "outline: none; width: 100%;"); + == + == + ;button.p2.b1.br2.hover.pointer + =onclick "addOutput()" + =style "background: rgba(100, 150, 255, 0.15); border: 1px solid rgba(100, 150, 255, 0.4); outline: none; color: var(--f3); width: 100%; margin-top: 8px;" + ;span.f3: + Add Output + == + == + ;div.p4.b2.br2(style "flex-shrink: 0;") + ;h2.s1.bold.mb2: Transaction Outputs + ;div.f3(style "opacity: 0.8; margin-bottom: 12px;"): Draft outputs for this transaction + ;div#send-change-section + ;+ (change-section-ui has-change-config.fi fee-rate.fi est-fee.fi est-vbytes.fi change-result.fi next-chg) + == + ;div#output-list + ;+ (output-list-ui dr) + == + == + ;div.p4.b2.br2(style "display: flex; gap: 12px; justify-content: center; flex-shrink: 0;") + ;button.p3.b1.br2.hover.pointer + =onclick "if(confirm('Clear all outputs?')) clearDraft()" + =style "background: rgba(255, 100, 100, 0.15); border: 1px solid rgba(255, 100, 100, 0.4); outline: none; color: var(--f3); min-width: 120px;" + ;span.f2: Clear + == + ;button.p3.b1.br2.hover.pointer + =onclick "if(confirm('Broadcast this transaction?')) buildTransaction()" + =style "background: rgba(100, 200, 100, 0.2); border: 1px solid rgba(100, 200, 100, 0.5); outline: none; color: var(--f3); min-width: 120px;" + ;span.f2: Send + == + == + == + ;+ + =/ acct-base=tape "wallet.wallet_app/accounts/{key-hex}.wallet_account" + (send-scripts-ui next-chg-tape acct-base key-hex) + == + == +-- diff --git a/desk/gub/lib/wallet-types.hoon b/desk/gub/lib/wallet-types.hoon new file mode 100644 index 0000000..76573ee --- /dev/null +++ b/desk/gub/lib/wallet-types.hoon @@ -0,0 +1,95 @@ +:: wallet-types: shared types for wallet, account, and address nexuses +:: +|% ++$ seg (pair ? @ud) ++$ seed $%([%t phrase=@t] [%q secret=@q]) ++$ account [purpose=seg coin-type=seg account=seg] ++$ wallet-data [name=@t =seed fingerprint=@ux accounts=(map account @ux)] ++$ script-type ?(%p2pkh %p2sh-p2wpkh %p2wpkh %p2tr) +:: per-address fetched info from mempool.space +:: ++$ address-info + $: tx-count=@ud + funded=@ud :: chain_stats.funded_txo_sum (total sats received) + spent=@ud :: chain_stats.spent_txo_sum (total sats spent) + last-check=@da + == +:: transaction status: confirmed or unconfirmed +:: ++$ tx-status + $% [%unconfirmed ~] + [%confirmed block-hash=@t block-height=@ud] + == +:: transaction input +:: ++$ tx-input + $: spent-txid=@t + spent-vout=@ud + prevout=(unit tx-output) + == +:: transaction output +:: ++$ tx-output [value=@ud address=@t] +:: transaction: full mempool.space transaction data +:: ++$ transaction + $: txid=@t + inputs=(list tx-input) + outputs=(list tx-output) + =tx-status + fee=(unit @ud) + size=(unit @ud) + == +:: unspent transaction output +:: ++$ utxo + $: txid=@t + vout=@ud + value=@ud + =tx-status + == +:: per-address data: stored in addr-mop files keyed by index +:: path encodes network + chain: addresses/[network]/[recv|chng].wallet_addresses +:: ++$ address-data + $: addr=@t + loading=? + last-error=(unit tang) + info=(unit address-info) + utxos=(list utxo) + == +:: ordered map of index -> address-data (descending by index) +:: ++$ addr-mop ((mop @ud address-data) gth) ++$ tx-map (map @t transaction) +:: scan process state: tracks progress through gap-limit scan +:: ++$ scan-state + $: phase=?(%recv %chng) + idx=@ud + gap=@ud + == +:: ++$ account-data + $: name=@t + wallet=@ux + =script-type + active-network=?(%main %testnet3 %testnet4 %signet %regtest) + purpose=seg + coin-type=seg + account-idx=seg + xprv=@t + == +:: +to-bip-network: map expanded network to bip32/bech32 protocol network +:: +++ to-bip-network + |= network=?(%main %testnet3 %testnet4 %signet %regtest) + ^- ?(%main %testnet %regtest) + ?- network + %main %main + %testnet3 %testnet + %testnet4 %testnet + %signet %testnet + %regtest %regtest + == +-- diff --git a/desk/mar/add-member.hoon b/desk/gub/mar/add-member.hoon similarity index 95% rename from desk/mar/add-member.hoon rename to desk/gub/mar/add-member.hoon index 480a8ba..703d7ea 100644 --- a/desk/mar/add-member.hoon +++ b/desk/gub/mar/add-member.hoon @@ -16,5 +16,4 @@ ^- ^mime [/text/plain (as-octs:mimes:html (scot %p ship))] -- -++ grad %noun -- diff --git a/desk/gub/mar/bill.hoon b/desk/gub/mar/bill.hoon new file mode 100644 index 0000000..efaea0e --- /dev/null +++ b/desk/gub/mar/bill.hoon @@ -0,0 +1,33 @@ +|_ bil=(list dude:gall) +++ grow + |% + ++ mime `^mime`[/text/x-bill (as-octs:mimes:html hoon)] + ++ noun bil + ++ hoon + ^- @t + |^ (crip (of-wall:format (wrap-lines (spit-duz bil)))) + :: + ++ wrap-lines + |= taz=wall + ^- wall + ?~ taz ["~"]~ + :- (weld ":~ " i.taz) + %- snoc :_ "==" + (turn t.taz |=(t=tape (weld " " t))) + :: + ++ spit-duz + |= duz=(list dude:gall) + ^- wall + (turn duz |=(=dude:gall ['%' (trip dude)])) + -- + ++ txt (to-wain:format hoon) + -- +++ grab + |% + ++ noun (list dude:gall) + ++ mime + |= [=mite len=@ud tex=@] + ~_ tex + !<((list dude:gall) (slap !>(~) (ream tex))) + -- +-- diff --git a/desk/gub/mar/boom.hoon b/desk/gub/mar/boom.hoon new file mode 100644 index 0000000..857b9eb --- /dev/null +++ b/desk/gub/mar/boom.hoon @@ -0,0 +1,36 @@ +:: /boom mark: error-wrapped grub content +:: stores [tang bask] where bask is [blot noun] +:: +=, format +|_ [err=tang =bask:tarball] +++ grow + |% + ++ noun [err bask] + ++ json + ^- ^json + %- pairs:enjs + :~ :- 'error' + a+(turn (flop err) |=(=tank s+(crip ~(ram re tank)))) + ['mark' s+(crip (spud (snoc path.p.bask name.p.bask)))] + :- 'data' + s+(truncate 2.048 ~(ram re (sell !>(q.bask)))) + == + ++ txt + ^- wain + :* (crip "mark: {(spud (snoc path.p.bask name.p.bask))}") + (turn (flop err) |=(=tank (crip ~(ram re tank)))) + == + ++ mime + ^- ^mime + [/application/json (as-octs:mimes:html (en:json:html json))] + -- +++ grab + |% + ++ noun |=(n=* ;;([tang bask:tarball] n)) + -- +++ truncate + |= [max=@ud t=tape] + ^- @t + ?: (lte (lent t) max) (crip t) + (crip (weld (scag max t) "...")) +-- diff --git a/desk/mar/claude-action.hoon b/desk/gub/mar/claude-action.hoon similarity index 97% rename from desk/mar/claude-action.hoon rename to desk/gub/mar/claude-action.hoon index beda1e2..ccba460 100644 --- a/desk/mar/claude-action.hoon +++ b/desk/gub/mar/claude-action.hoon @@ -1,4 +1,4 @@ -/- *claude +/< * /lib/claude.hoon |_ act=action ++ grab |% @@ -42,5 +42,4 @@ ~[['type' s+'interrupt']] == -- -++ grad %noun -- diff --git a/desk/mar/claude-message.hoon b/desk/gub/mar/claude-message.hoon similarity index 86% rename from desk/mar/claude-message.hoon rename to desk/gub/mar/claude-message.hoon index 791977a..aa44538 100644 --- a/desk/mar/claude-message.hoon +++ b/desk/gub/mar/claude-message.hoon @@ -1,7 +1,7 @@ :: claude-message mark: single message to append to the chat store :: [role=@t text=@t] :: -/- *claude +/< * /lib/claude.hoon |_ msg=message ++ grab |% @@ -11,5 +11,4 @@ |% ++ noun msg -- -++ grad %noun -- diff --git a/desk/mar/claude-messages.hoon b/desk/gub/mar/claude-messages.hoon similarity index 97% rename from desk/mar/claude-messages.hoon rename to desk/gub/mar/claude-messages.hoon index 47cd63c..7627053 100644 --- a/desk/mar/claude-messages.hoon +++ b/desk/gub/mar/claude-messages.hoon @@ -1,4 +1,4 @@ -/- *claude +/< * /lib/claude.hoon |_ msg=messages ++ grab |% @@ -40,5 +40,4 @@ ^- ^mime [/application/json (as-octs:mimes:html (en:json:html json))] -- -++ grad %noun -- diff --git a/desk/mar/claude-registry.hoon b/desk/gub/mar/claude-registry.hoon similarity index 90% rename from desk/mar/claude-registry.hoon rename to desk/gub/mar/claude-registry.hoon index 91ab92b..375f5d4 100644 --- a/desk/mar/claude-registry.hoon +++ b/desk/gub/mar/claude-registry.hoon @@ -1,4 +1,5 @@ -/- *claude +/< claude /lib/claude.hoon +=, claude |_ reg=registry ++ grab |% @@ -17,5 +18,4 @@ |= [id=@ud act=@t pax=@t] (crip " [{(a-co:co id)}] {(trip act)} {(trip pax)}") -- -++ grad %noun -- diff --git a/desk/gub/mar/clay-info.hoon b/desk/gub/mar/clay-info.hoon new file mode 100644 index 0000000..0701957 --- /dev/null +++ b/desk/gub/mar/clay-info.hoon @@ -0,0 +1,12 @@ +:: clay-info: mark for file write payload [desk changes] +:: +|_ val=[desk (list [path ?([%ins @tas *] [%del ~])])] +++ grab + |% + ++ noun ,[desk (list [path ?([%ins @tas *] [%del ~])])] + -- +++ grow + |% + ++ noun val + -- +-- diff --git a/desk/gub/mar/clay-state.hoon b/desk/gub/mar/clay-state.hoon new file mode 100644 index 0000000..56a1357 --- /dev/null +++ b/desk/gub/mar/clay-state.hoon @@ -0,0 +1,26 @@ +:: clay-state: Clay desk sync service state +:: +|_ st=clay-state:nexus +++ grab + |% + ++ noun ,clay-state:nexus + -- +++ grow + |% + ++ noun st + ++ json + ^- ^json + :- %o + %- ~(gas by *(map @t ^json)) + :~ ['version' [%n '0']] + :- 'desks' + :- %a + %+ turn ~(tap in desks.st) + |=(d=desk s+d) + == + ++ mime + ^- ^mime + =/ txt=@t (en:json:html json) + [/application/json (as-octs:mimes:html txt)] + -- +-- diff --git a/desk/gub/mar/clay/base/bill.hoon b/desk/gub/mar/clay/base/bill.hoon new file mode 100644 index 0000000..efaea0e --- /dev/null +++ b/desk/gub/mar/clay/base/bill.hoon @@ -0,0 +1,33 @@ +|_ bil=(list dude:gall) +++ grow + |% + ++ mime `^mime`[/text/x-bill (as-octs:mimes:html hoon)] + ++ noun bil + ++ hoon + ^- @t + |^ (crip (of-wall:format (wrap-lines (spit-duz bil)))) + :: + ++ wrap-lines + |= taz=wall + ^- wall + ?~ taz ["~"]~ + :- (weld ":~ " i.taz) + %- snoc :_ "==" + (turn t.taz |=(t=tape (weld " " t))) + :: + ++ spit-duz + |= duz=(list dude:gall) + ^- wall + (turn duz |=(=dude:gall ['%' (trip dude)])) + -- + ++ txt (to-wain:format hoon) + -- +++ grab + |% + ++ noun (list dude:gall) + ++ mime + |= [=mite len=@ud tex=@] + ~_ tex + !<((list dude:gall) (slap !>(~) (ream tex))) + -- +-- diff --git a/desk/gub/mar/clay/base/hoon.hoon b/desk/gub/mar/clay/base/hoon.hoon new file mode 100644 index 0000000..1cea499 --- /dev/null +++ b/desk/gub/mar/clay/base/hoon.hoon @@ -0,0 +1,34 @@ +:::: /hoon/hoon/mar + :: +:: +=, eyre +|_ own=@t +:: +++ grow :: convert to + |% + ++ mime `^mime`[/text/x-hoon (as-octs:mimes:html own)] :: convert to %mime + ++ hymn + ;html + ;head + ;title:"Source" + ;script@"//cdnjs.cloudflare.com/ajax/libs/codemirror/4.3.0/codemirror.js"; + ;script@"/lib/syntax/hoon.js"; + ;link(rel "stylesheet", href "//cdnjs.cloudflare.com/ajax/libs/". + "codemirror/4.3.0/codemirror.min.css"); + ;link/"/lib/syntax/codemirror.css"(rel "stylesheet"); + == + ;body + ;textarea#src:"{(trip own)}" + ;script:'CodeMirror.fromTextArea(src, {lineNumbers:true, readOnly:true})' + == + == + ++ txt + (to-wain:format own) + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] q.q) + ++ noun @t :: clam from %noun + ++ txt of-wain:format + -- +-- diff --git a/desk/gub/mar/clay/base/json.hoon b/desk/gub/mar/clay/base/json.hoon new file mode 100644 index 0000000..1cfe563 --- /dev/null +++ b/desk/gub/mar/clay/base/json.hoon @@ -0,0 +1,24 @@ +:: +:::: /hoon/json/mar + :: + :: +:::: compute + :: +=, eyre +=, format +=, html +|_ jon=^json +:: +++ grow :: convert to + |% + ++ mime [/application/json (as-octs:mimes -:txt)] :: convert to %mime + ++ txt [(en:json jon)]~ + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (need (de:json (@t q.q)))) :: crash on bad json + ++ noun ^json :: clam from %noun + ++ numb numb:enjs + ++ time time:enjs + -- +-- diff --git a/desk/gub/mar/clay/base/kelvin.hoon b/desk/gub/mar/clay/base/kelvin.hoon new file mode 100644 index 0000000..e4f1886 --- /dev/null +++ b/desk/gub/mar/clay/base/kelvin.hoon @@ -0,0 +1,27 @@ +|_ kal=waft:clay +++ grow + |% + ++ mime `^mime`[/text/x-kelvin (as-octs:mimes:html hoon)] + ++ noun kal + ++ hoon + %+ rap 3 + %+ turn + %+ sort + ~(tap in (waft-to-wefts:clay kal)) + |= [a=weft b=weft] + ?: =(lal.a lal.b) + (gte num.a num.b) + (gte lal.a lal.b) + |= =weft + (rap 3 '[%' (scot %tas lal.weft) ' ' (scot %ud num.weft) ']\0a' ~) + :: + ++ txt (to-wain:format hoon) + -- +++ grab + |% + ++ noun waft:clay + ++ mime + |= [=mite len=@ud tex=@] + (cord-to-waft:clay tex) + -- +-- diff --git a/desk/gub/mar/clay/base/kiln/commit.hoon b/desk/gub/mar/clay/base/kiln/commit.hoon new file mode 100644 index 0000000..00d2d41 --- /dev/null +++ b/desk/gub/mar/clay/base/kiln/commit.hoon @@ -0,0 +1,10 @@ +|_ val=[term ?] +++ grab + |% + ++ noun ,[term ?] + -- +++ grow + |% + ++ noun val + -- +-- diff --git a/desk/gub/mar/clay/base/manx.hoon b/desk/gub/mar/clay/base/manx.hoon new file mode 100644 index 0000000..7af7186 --- /dev/null +++ b/desk/gub/mar/clay/base/manx.hoon @@ -0,0 +1,16 @@ +|_ =manx +++ grab + |% + ++ noun ^manx + -- +++ grow + |% + ++ noun manx + ++ txt + ^- wain + ~[(crip (en-xml:html manx))] + ++ mime + ^- ^mime + [/text/html (as-octs:mimes:html (crip (en-xml:html manx)))] + -- +-- diff --git a/desk/gub/mar/clay/base/mime.hoon b/desk/gub/mar/clay/base/mime.hoon new file mode 100644 index 0000000..f2ff96f --- /dev/null +++ b/desk/gub/mar/clay/base/mime.hoon @@ -0,0 +1,19 @@ +:: +:::: /hoon/mime/mar + :: +:: +|_ own=mime +++ grow + ^? + |% + ++ jam `@`q.q.own + -- +:: +++ grab :: convert from + ^? + |% + ++ noun mime :: clam from %noun + ++ tape + |=(a=_"" [/application/x-urb-unknown (as-octt:mimes:html a)]) + -- +-- diff --git a/desk/gub/mar/clay/base/noun.hoon b/desk/gub/mar/clay/base/noun.hoon new file mode 100644 index 0000000..cfaca65 --- /dev/null +++ b/desk/gub/mar/clay/base/noun.hoon @@ -0,0 +1,12 @@ +:: +:::: /hoon/noun/mar + :: +:::: A minimal noun mark +|_ non=* +++ grab |% + ++ noun * + -- +++ grow |% + ++ mime [/application/x-urb-jam (as-octs:mimes:html (jam non))] + -- +-- diff --git a/desk/gub/mar/clay/base/tang.hoon b/desk/gub/mar/clay/base/tang.hoon new file mode 100644 index 0000000..3aef689 --- /dev/null +++ b/desk/gub/mar/clay/base/tang.hoon @@ -0,0 +1,32 @@ +:: +:::: /hoon/tang/mar + :: +:: +=, format +|_ tan=(list tank) +++ grow + |% + ++ noun tan + ++ json + =/ result=(each (list ^json) tang) + (mule |.((turn tan tank:enjs:format))) + ?- -.result + %& a+p.result + %| a+[a+[%s '[[output rendering error]]']~]~ + == + ++ txt + ^- wain + %+ turn (flop tan) + |=(=tank (crip ~(ram re tank))) + ++ mime + ^- ^mime + =/ =wain txt + [/text/plain (as-octs:mimes:html (of-wain:format wain))] + -- +++ grab :: convert from + |% + ++ noun (list ^tank) :: clam from %noun + ++ tank |=(a=^tank [a]~) + ++ txt |=(=wain (flop (turn wain tank))) + -- +-- diff --git a/desk/gub/mar/clay/base/txt.hoon b/desk/gub/mar/clay/base/txt.hoon new file mode 100644 index 0000000..313183b --- /dev/null +++ b/desk/gub/mar/clay/base/txt.hoon @@ -0,0 +1,19 @@ +:: +:::: /hoon/txt/mar + :: +:: +=, format +=, mimes:html +|_ txt=wain +:: +++ grab :: convert from + |% + ++ mime |=((pair mite octs) (to-wain q.q)) + ++ noun wain :: clam from %noun + -- +++ grow + => v=. + |% + ++ mime => v [/text/plain (as-octs (of-wain txt))] + -- +-- diff --git a/desk/gub/mar/clay/grubbery/grubbery/action.hoon b/desk/gub/mar/clay/grubbery/grubbery/action.hoon new file mode 100644 index 0000000..316a559 --- /dev/null +++ b/desk/gub/mar/clay/grubbery/grubbery/action.hoon @@ -0,0 +1,13 @@ +:: grubbery-action marc: unified action mark for grubbery pokes +:: +/+ nexus +|_ axn=action:nexus +++ grow + |% + ++ noun axn + -- +++ grab + |% + ++ noun action:nexus + -- +-- diff --git a/desk/gub/mar/clay/grubbery/grubbery/intake.hoon b/desk/gub/mar/clay/grubbery/grubbery/intake.hoon new file mode 100644 index 0000000..d4a9249 --- /dev/null +++ b/desk/gub/mar/clay/grubbery/grubbery/intake.hoon @@ -0,0 +1,12 @@ +:: grubbery-intake marc: cross-ship response mark +:: +|_ tak=intake:remote:nexus +++ grow + |% + ++ noun tak + -- +++ grab + |% + ++ noun intake:remote:nexus + -- +-- diff --git a/desk/gub/mar/clay/grubbery/grubbery/load.hoon b/desk/gub/mar/clay/grubbery/grubbery/load.hoon new file mode 100644 index 0000000..9235e19 --- /dev/null +++ b/desk/gub/mar/clay/grubbery/grubbery/load.hoon @@ -0,0 +1,12 @@ +:: grubbery-load marc: cross-ship request mark +:: +|_ axn=load:remote:nexus +++ grow + |% + ++ noun axn + -- +++ grab + |% + ++ noun load:remote:nexus + -- +-- diff --git a/desk/gub/mar/css.hoon b/desk/gub/mar/css.hoon new file mode 100644 index 0000000..fd6bd62 --- /dev/null +++ b/desk/gub/mar/css.hoon @@ -0,0 +1,23 @@ +:: +:::: /hoon/css/mar + :: +=, eyre +=, mimes:html +|_ mud=@t +++ grow :: convert to + |% + ++ mime [/text/css (as-octs mud)] :: convert to %mime + ++ hymn :: convert to %hymn + |^ html + ++ style ;style + ;- (trip mud) + == + ++ html ;html:(head:"{style}" body) + -- + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (@t q.q)) + ++ noun @t :: clam from %noun + -- +-- diff --git a/desk/mar/del-member.hoon b/desk/gub/mar/del-member.hoon similarity index 95% rename from desk/mar/del-member.hoon rename to desk/gub/mar/del-member.hoon index 4a7b5ff..41304cd 100644 --- a/desk/mar/del-member.hoon +++ b/desk/gub/mar/del-member.hoon @@ -16,5 +16,4 @@ ^- ^mime [/text/plain (as-octs:mimes:html (scot %p ship))] -- -++ grad %noun -- diff --git a/desk/gub/mar/dill-belt.hoon b/desk/gub/mar/dill-belt.hoon new file mode 100644 index 0000000..ca40235 --- /dev/null +++ b/desk/gub/mar/dill-belt.hoon @@ -0,0 +1,12 @@ +:: dill-belt: mark for dill belt input [@tas belt:dill] +:: +|_ val=[@tas belt:dill] +++ grab + |% + ++ noun [@tas belt:dill] + -- +++ grow + |% + ++ noun val + -- +-- diff --git a/desk/gub/mar/dill-blit.hoon b/desk/gub/mar/dill-blit.hoon new file mode 100644 index 0000000..99d3d4b --- /dev/null +++ b/desk/gub/mar/dill-blit.hoon @@ -0,0 +1,88 @@ +:: dill-blit: mark for dill terminal output (list blit:dill) +:: +|_ blits=(list blit:dill) +++ grab + |% + ++ noun (list blit:dill) + -- +++ grow + |% + ++ noun blits + ++ json + ^- ^json + a+(turn blits blit-to-json) + ++ txt + ^- wain + (zing (turn blits blit-to-wain)) + ++ mime [/application/json (as-octs:mimes:html (en:json:html json))] + -- +:: +++ blit-to-json + |= =blit:dill + ^- json + ?- -.blit + %bel (pairs:enjs:format ['type' s+%bel]~) + %clr (pairs:enjs:format ['type' s+%clr]~) + %nel (pairs:enjs:format ['type' s+%nel]~) + %wyp (pairs:enjs:format ['type' s+%wyp]~) + %url (pairs:enjs:format ~[['type' s+%url] ['url' s+p.blit]]) + :: + %hop + %- pairs:enjs:format + :~ ['type' s+%hop] + :- 'pos' + ?@ p.blit + (numb:enjs:format p.blit) + %- pairs:enjs:format + :~ ['x' (numb:enjs:format x.p.blit)] + ['y' (numb:enjs:format y.p.blit)] + == + == + :: + %put + %- pairs:enjs:format + :~ ['type' s+%put] + ['text' s+(crip (tufa p.blit))] + == + :: + %klr + %- pairs:enjs:format + :~ ['type' s+%klr] + ['stub' a+(turn p.blit stye-to-json)] + == + :: + %mor + %- pairs:enjs:format + :~ ['type' s+%mor] + ['blits' a+(turn p.blit blit-to-json)] + == + :: + %sag + %- pairs:enjs:format + :~ ['type' s+%sag] + ['path' s+(spat p.blit)] + == + :: + %sav + %- pairs:enjs:format + :~ ['type' s+%sav] + ['path' s+(spat p.blit)] + == + == +:: +++ stye-to-json + |= [=stye text=(list @c)] + ^- json + %- pairs:enjs:format + :~ ['text' s+(crip (tufa text))] + == +:: +++ blit-to-wain + |= =blit:dill + ^- wain + ?+ -.blit ~ + %put [(crip (tufa p.blit))]~ + %nel ['']~ + %klr (turn p.blit |=([=stye t=(list @c)] (crip (tufa t)))) + == +-- diff --git a/desk/gub/mar/dill-told.hoon b/desk/gub/mar/dill-told.hoon new file mode 100644 index 0000000..30f7418 --- /dev/null +++ b/desk/gub/mar/dill-told.hoon @@ -0,0 +1,51 @@ +:: dill-told: mark for dill system output (told:dill) +:: +|_ =told:dill +++ grab + |% + ++ noun told:dill + -- +++ grow + |% + ++ noun told + ++ json + ^- ^json + ?- -.told + %crud + =/ lines=wall + (zing (turn (flop q.told) |=(=tank (wash [0 120] tank)))) + %- pairs:enjs:format + :~ ['type' s+%crud] + ['tag' s+p.told] + ['lines' a+(turn lines |=(t=tape s+(crip t)))] + == + %talk + =/ lines=wall + (zing (turn p.told |=(=tank (wash [0 120] tank)))) + %- pairs:enjs:format + :~ ['type' s+%talk] + ['lines' a+(turn lines |=(t=tape s+(crip t)))] + == + %text + %- pairs:enjs:format + :~ ['type' s+%text] + ['text' s+(crip p.told)] + == + == + ++ txt + ^- wain + ?- -.told + %crud + =/ lines=wall + (zing (turn (flop q.told) |=(=tank (wash [0 120] tank)))) + [(crip "ERROR [{}]:") (turn lines crip)] + %talk + =/ lines=wall + (zing (turn p.told |=(=tank (wash [0 120] tank)))) + (turn lines crip) + %text + [(crip p.told)]~ + == + ++ mime [/text/plain (as-octs:mimes:html (of-wain:format txt))] + -- +-- diff --git a/desk/gub/mar/entropy.hoon b/desk/gub/mar/entropy.hoon new file mode 100644 index 0000000..05bce50 --- /dev/null +++ b/desk/gub/mar/entropy.hoon @@ -0,0 +1,13 @@ +|_ e=@uvJ +++ grab + |% + ++ noun ,@uvJ + -- +++ grow + |% + ++ noun e + ++ mime + ^- ^mime + [/text/plain (as-octs:mimes:html (scot %uv e))] + -- +-- diff --git a/desk/gub/mar/eyre/bindings.hoon b/desk/gub/mar/eyre/bindings.hoon new file mode 100644 index 0000000..8a45a1b --- /dev/null +++ b/desk/gub/mar/eyre/bindings.hoon @@ -0,0 +1,58 @@ +:: eyre-bindings: list of HTTP bindings for eyre +:: +|_ bindings=(list binding:eyre) +++ grow + |% + ++ noun bindings + ++ mime + =/ jon=^json + :- %a + %+ turn bindings + |= =binding:eyre + %- pairs:enjs:format + :~ :- %site + ?~ site.binding + ~ + [%s u.site.binding] + :- %path + [%s (spat path.binding)] + == + =/ json-text=@t (en:json:html jon) + :- /application/json + (as-octs:mimes:html json-text) + ++ json + :- %a + %+ turn bindings + |= =binding:eyre + %- pairs:enjs:format + :~ :- %site + ?~ site.binding + ~ + [%s u.site.binding] + :- %path + [%s (spat path.binding)] + == + -- +++ grab + |% + ++ noun (list binding:eyre) + ++ mime + |= [=mite len=@ud dat=@] + ^- (list binding:eyre) + =/ json-text=@t (cut 3 [0 len] dat) + =/ jon=json (need (de:json:html json-text)) + =- ((ar:dejs:format -) jon) + |= jon=json + ^- binding:eyre + %. jon + %- ot:dejs:format + :~ :- %site + |= j=json + ?~ j ~ + `(so:dejs:format j) + :- %path + |= j=json + (stab (so:dejs:format j)) + == + -- +-- diff --git a/desk/gub/mar/gall-poke.hoon b/desk/gub/mar/gall-poke.hoon new file mode 100644 index 0000000..6e8a261 --- /dev/null +++ b/desk/gub/mar/gall-poke.hoon @@ -0,0 +1,12 @@ +:: gall-poke: mark for agent poke payload [dock page] +:: +|_ val=[dock page] +++ grab + |% + ++ noun [dock page] + -- +++ grow + |% + ++ noun val + -- +-- diff --git a/desk/gub/mar/goal-action.hoon b/desk/gub/mar/goal-action.hoon new file mode 100644 index 0000000..e987ea9 --- /dev/null +++ b/desk/gub/mar/goal-action.hoon @@ -0,0 +1,13 @@ +:: mark for goal actions (poked into store processes) +:: +/< goals /lib/goals.hoon +|_ act=action:goals +++ grab + |% + ++ noun action:goals + -- +++ grow + |% + ++ noun act + -- +-- diff --git a/desk/gub/mar/goal-store.hoon b/desk/gub/mar/goal-store.hoon new file mode 100644 index 0000000..e6fcc95 --- /dev/null +++ b/desk/gub/mar/goal-store.hoon @@ -0,0 +1,157 @@ +:: mark for goal-store: DAG-based goal collection state +:: +/< goals /lib/goals.hoon +=, format +|_ store=goal-store:goals +++ grab + |% + ++ noun goal-store:goals + ++ json + |= jon=^json + ^- goal-store:goals + ?> ?=([%o *] jon) + %- ~(gas by *goal-store:goals) + %+ turn ~(tap by p.jon) + |= [key=@t val=^json] + ^- [goal-id:goals goal:goals] + ?> ?=([%o *] val) + =/ m p.val + =/ gid=goal-id:goals key + =/ par=(unit goal-id:goals) + =/ p (~(get by m) 'parent') + ?~ p ~ + ?: ?=([~ %~] p) ~ + ?: ?=([~ %s *] p) `p.u.p + ~ + =/ kids=(list goal-id:goals) + =/ k (~(get by m) 'children') + ?~ k ~ + ?. ?=([~ %a *] k) ~ + (turn p.u.k |=(j=^json ?>(?=(%s -.j) p.j))) + =/ act=? + =/ a (~(get by m) 'actionable') + ?~ a %.n + ?: ?=([~ %b *] a) p.u.a + %.n + =/ dat=(map @t ^json) + =/ d (~(get by m) 'data') + ?~ d ~ + ?. ?=([~ %o *] d) ~ + p.u.d + =/ start=node:goals (parse-node (~(got by m) 'start')) + =/ end=node:goals (parse-node (~(got by m) 'end')) + [gid [id=gid data=dat parent=par children=kids actionable=act start=start end=end]] + ++ mime + |= [p=mite q=octs] + ^- goal-store:goals + (json (need (de:json:html (@t q.q)))) + -- +++ grow + |% + ++ noun store + ++ json + ^- ^json + :- %o + %- ~(gas by *(map @t ^json)) + %+ turn ~(tap by store) + |= [gid=goal-id:goals g=goal:goals] + ^- [@t ^json] + :- gid + :- %o + %- ~(gas by *(map @t ^json)) + :~ ['id' s+id.g] + ['parent' ?~(parent.g ~ s+u.parent.g)] + ['children' [%a (turn children.g |=(c=goal-id:goals s+c))]] + ['actionable' b+actionable.g] + ['data' [%o data.g]] + ['start' (node-to-json start.g)] + ['end' (node-to-json end.g)] + == + ++ mime [/application/json (as-octs:mimes:html -:txt)] + ++ txt [(en:json:html json)]~ + -- +:: +++ node-to-json + |= nd=node:goals + ^- json + :- %o + %- ~(gas by *(map @t json)) + :~ ['status' [%a (turn status.nd status-entry-to-json)]] + ['moment' ?~(moment.nd ~ (numb:enjs:format `@u`u.moment.nd))] + ['inflow' [%a (turn inflow.nd nid-to-json)]] + ['outflow' [%a (turn outflow.nd nid-to-json)]] + == +:: +++ nid-to-json + |= nid=node-id:goals + ^- json + :- %o + %- ~(gas by *(map @t json)) + :~ ['goal-id' s+goal-id.nid] + =/ pt=@t + ?- point.nid + %start 'start' + %end 'end' + == + ['point' s+pt] + == +:: +++ status-entry-to-json + |= se=status-entry:goals + ^- json + :- %o + %- ~(gas by *(map @t json)) + :~ ['done' b+done.se] + ['at' (numb:enjs:format `@u`at.se)] + == +:: +++ parse-node + |= jon=json + ^- node:goals + ?> ?=([%o *] jon) + =/ m p.jon + :* status=(parse-status (~(got by m) 'status')) + moment=(parse-moment (~(got by m) 'moment')) + inflow=(parse-nids (~(got by m) 'inflow')) + outflow=(parse-nids (~(got by m) 'outflow')) + == +:: +++ parse-status + |= jon=json + ^- (lest status-entry:goals) + ?> ?=([%a *] jon) + ?> ?=(^ p.jon) + =/ res=(list status-entry:goals) + %+ turn p.jon + |= j=json + ?> ?=([%o *] j) + =/ m p.j + =/ d=json (~(got by m) 'done') + =/ a=json (~(got by m) 'at') + ?> ?=([%b *] d) + ?> ?=([%n *] a) + [done=p.d at=`@da`(rash p.a dem)] + ?>(?=(^ res) res) +:: +++ parse-moment + |= jon=json + ^- (unit @da) + ?: ?=(%~ jon) ~ + ?: ?=([%n *] jon) `(rash p.jon dem) + ~ +:: +++ parse-nids + |= jon=json + ^- (list node-id:goals) + ?. ?=([%a *] jon) ~ + %+ turn p.jon + |= j=json + ^- node-id:goals + ?> ?=([%o *] j) + =/ m p.j + =/ gid=json (~(got by m) 'goal-id') + =/ pt=json (~(got by m) 'point') + ?> ?=([%s *] gid) + ?> ?=([%s *] pt) + [goal-id=p.gid point=?:(=('start' p.pt) %start %end)] +-- diff --git a/desk/gub/mar/handle-http-cancel.hoon b/desk/gub/mar/handle-http-cancel.hoon new file mode 100644 index 0000000..7e2e7d9 --- /dev/null +++ b/desk/gub/mar/handle-http-cancel.hoon @@ -0,0 +1,10 @@ +|_ eyre-id=@ta +++ grab + |% + ++ noun ,@ta + -- +++ grow + |% + ++ noun eyre-id + -- +-- diff --git a/desk/gub/mar/handle-http-request.hoon b/desk/gub/mar/handle-http-request.hoon new file mode 100644 index 0000000..315f313 --- /dev/null +++ b/desk/gub/mar/handle-http-request.hoon @@ -0,0 +1,10 @@ +|_ req=[@ta request-line:server inbound-request:eyre] +++ grab + |% + ++ noun ,[@ta request-line:server inbound-request:eyre] + -- +++ grow + |% + ++ noun req + -- +-- diff --git a/desk/gub/mar/hoon.hoon b/desk/gub/mar/hoon.hoon new file mode 100644 index 0000000..1cea499 --- /dev/null +++ b/desk/gub/mar/hoon.hoon @@ -0,0 +1,34 @@ +:::: /hoon/hoon/mar + :: +:: +=, eyre +|_ own=@t +:: +++ grow :: convert to + |% + ++ mime `^mime`[/text/x-hoon (as-octs:mimes:html own)] :: convert to %mime + ++ hymn + ;html + ;head + ;title:"Source" + ;script@"//cdnjs.cloudflare.com/ajax/libs/codemirror/4.3.0/codemirror.js"; + ;script@"/lib/syntax/hoon.js"; + ;link(rel "stylesheet", href "//cdnjs.cloudflare.com/ajax/libs/". + "codemirror/4.3.0/codemirror.min.css"); + ;link/"/lib/syntax/codemirror.css"(rel "stylesheet"); + == + ;body + ;textarea#src:"{(trip own)}" + ;script:'CodeMirror.fromTextArea(src, {lineNumbers:true, readOnly:true})' + == + == + ++ txt + (to-wain:format own) + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] q.q) + ++ noun @t :: clam from %noun + ++ txt of-wain:format + -- +-- diff --git a/desk/gub/mar/html.hoon b/desk/gub/mar/html.hoon new file mode 100644 index 0000000..0887277 --- /dev/null +++ b/desk/gub/mar/html.hoon @@ -0,0 +1,20 @@ +:: +:::: /hoon/html/mar + :: + :: +:::: compute + :: +=, html +|_ htm=@t +++ grow :: convert to + ^? + |% :: + ++ mime [/text/html (met 3 htm) htm] :: to %mime + ++ hymn (need (de-xml htm)) :: to %hymn + -- :: +++ grab ^? + |% :: convert from + ++ noun @t :: clam from %noun + ++ mime |=([p=mite q=octs] q.q) :: retrieve form %mime + -- +-- diff --git a/desk/gub/mar/http-request.hoon b/desk/gub/mar/http-request.hoon new file mode 100644 index 0000000..1956b0d --- /dev/null +++ b/desk/gub/mar/http-request.hoon @@ -0,0 +1,40 @@ +:: HTTP request state for request files +:: +|_ [src=@p req=inbound-request:eyre] +++ grab + |% + ++ noun ,[src=@p inbound-request:eyre] + -- +++ grow + |% + ++ noun [src req] + ++ json + ^- ^json + =/ bod=(unit @t) + ?~ body.request.req ~ + =/ raw=@t (@t q.u.body.request.req) + :: Truncate large bodies + ?: (gth (met 3 raw) 4.096) + `(cat 3 (end [3 4.096] raw) '...(truncated)') + `raw + %- pairs:enjs:format + :~ ['src' s+(scot %p src)] + ['authenticated' b+authenticated.req] + ['secure' b+secure.req] + ['method' s+method.request.req] + ['url' s+url.request.req] + :- 'headers' + :- %a + %+ turn header-list.request.req + |= [key=@t value=@t] + %- pairs:enjs:format + :~ ['key' s+key] + ['value' s+value] + == + :: + ['body' ?~(bod ~ s+u.bod)] + == + ++ mime [/application/json (as-octs:mimes:html -:txt)] + ++ txt [(en:json:html json)]~ + -- +-- diff --git a/desk/gub/mar/iris-state.hoon b/desk/gub/mar/iris-state.hoon new file mode 100644 index 0000000..b6eac9c --- /dev/null +++ b/desk/gub/mar/iris-state.hoon @@ -0,0 +1,31 @@ +:: iris-state: HTTP client service state +:: +|_ st=iris-state:nexus +++ grab + |% + ++ noun ,iris-state:nexus + -- +++ grow + |% + ++ noun st + ++ json + ^- ^json + :- %o + %- ~(gas by *(map @t ^json)) + :~ ['version' [%n '0']] + :- 'requests' + :- %a + %+ turn ~(tap by requests.st) + |= [=wire [sender=rail:tarball url=@t]] + %- pairs:enjs:format + :~ ['wire' s+(spat wire)] + ['sender' s+(spat (snoc path.sender name.sender))] + ['url' s+url] + == + == + ++ mime + ^- ^mime + =/ txt=@t (en:json:html json) + [/application/json (as-octs:mimes:html txt)] + -- +-- diff --git a/desk/gub/mar/jael-private-keys.hoon b/desk/gub/mar/jael-private-keys.hoon new file mode 100644 index 0000000..7d21a70 --- /dev/null +++ b/desk/gub/mar/jael-private-keys.hoon @@ -0,0 +1,19 @@ +:: private-keys: mark for jael private key state +:: +|_ [=life vein=(map life ring)] +++ grab + |% + ++ noun ,[^life (map ^life ring)] + -- +++ grow + |% + ++ noun [life vein] + ++ json + ^- ^json + %- pairs:enjs:format + :~ ['life' (numb:enjs:format life)] + ['keys' (numb:enjs:format ~(wyt by vein))] + == + ++ mime [/application/json (as-octs:mimes:html (en:json:html json))] + -- +-- diff --git a/desk/gub/mar/jael-public-keys-result.hoon b/desk/gub/mar/jael-public-keys-result.hoon new file mode 100644 index 0000000..ad863d9 --- /dev/null +++ b/desk/gub/mar/jael-public-keys-result.hoon @@ -0,0 +1,32 @@ +:: public-keys-result: mark for jael public key updates +:: +|_ =public-keys-result:jael +++ grab + |% + ++ noun public-keys-result:jael + -- +++ grow + |% + ++ noun public-keys-result + ++ json + ^- ^json + ?- -.public-keys-result + %full + %- pairs:enjs:format + :~ ['type' s+%full] + ['ships' (numb:enjs:format ~(wyt by points.public-keys-result))] + == + %diff + %- pairs:enjs:format + :~ ['type' s+%diff] + ['who' s+(scot %p who.public-keys-result)] + == + %breach + %- pairs:enjs:format + :~ ['type' s+%breach] + ['who' s+(scot %p who.public-keys-result)] + == + == + ++ mime [/application/json (as-octs:mimes:html (en:json:html json))] + -- +-- diff --git a/desk/gub/mar/js.hoon b/desk/gub/mar/js.hoon new file mode 100644 index 0000000..7e1a516 --- /dev/null +++ b/desk/gub/mar/js.hoon @@ -0,0 +1,23 @@ +:: +:::: /hoon/js/mar + :: +:: +=, eyre +|_ mud=@ +++ grow + |% + ++ mime [/application/javascript (as-octs:mimes:html (@t mud))] + ++ hymn :: convert to %hymn + |^ html + ++ script ;script + ;- (trip (@t mud)) + == + ++ html ;html:(head:"{script}" body) + -- + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (@t q.q)) + ++ noun cord :: clam from %noun + -- +-- diff --git a/desk/gub/mar/json.hoon b/desk/gub/mar/json.hoon new file mode 100644 index 0000000..1cfe563 --- /dev/null +++ b/desk/gub/mar/json.hoon @@ -0,0 +1,24 @@ +:: +:::: /hoon/json/mar + :: + :: +:::: compute + :: +=, eyre +=, format +=, html +|_ jon=^json +:: +++ grow :: convert to + |% + ++ mime [/application/json (as-octs:mimes -:txt)] :: convert to %mime + ++ txt [(en:json jon)]~ + -- +++ grab + |% :: convert from + ++ mime |=([p=mite q=octs] (need (de:json (@t q.q)))) :: crash on bad json + ++ noun ^json :: clam from %noun + ++ numb numb:enjs + ++ time time:enjs + -- +-- diff --git a/desk/gub/mar/kelvin.hoon b/desk/gub/mar/kelvin.hoon new file mode 100644 index 0000000..e4f1886 --- /dev/null +++ b/desk/gub/mar/kelvin.hoon @@ -0,0 +1,27 @@ +|_ kal=waft:clay +++ grow + |% + ++ mime `^mime`[/text/x-kelvin (as-octs:mimes:html hoon)] + ++ noun kal + ++ hoon + %+ rap 3 + %+ turn + %+ sort + ~(tap in (waft-to-wefts:clay kal)) + |= [a=weft b=weft] + ?: =(lal.a lal.b) + (gte num.a num.b) + (gte lal.a lal.b) + |= =weft + (rap 3 '[%' (scot %tas lal.weft) ' ' (scot %ud num.weft) ']\0a' ~) + :: + ++ txt (to-wain:format hoon) + -- +++ grab + |% + ++ noun waft:clay + ++ mime + |= [=mite len=@ud tex=@] + (cord-to-waft:clay tex) + -- +-- diff --git a/desk/gub/mar/loob.hoon b/desk/gub/mar/loob.hoon new file mode 100644 index 0000000..da86a3a --- /dev/null +++ b/desk/gub/mar/loob.hoon @@ -0,0 +1,14 @@ +|_ val=? +++ grab + |% + ++ noun ? + -- +++ grow + |% + ++ noun val + ++ txt ~[?:(val 'yes' 'no')] + ++ mime + ^- ^mime + [/text/plain (as-octs:mimes:html (of-wain:format txt))] + -- +-- diff --git a/desk/gub/mar/manx.hoon b/desk/gub/mar/manx.hoon new file mode 100644 index 0000000..7af7186 --- /dev/null +++ b/desk/gub/mar/manx.hoon @@ -0,0 +1,16 @@ +|_ =manx +++ grab + |% + ++ noun ^manx + -- +++ grow + |% + ++ noun manx + ++ txt + ^- wain + ~[(crip (en-xml:html manx))] + ++ mime + ^- ^mime + [/text/html (as-octs:mimes:html (crip (en-xml:html manx)))] + -- +-- diff --git a/desk/gub/mar/md.hoon b/desk/gub/mar/md.hoon new file mode 100644 index 0000000..4d43fa9 --- /dev/null +++ b/desk/gub/mar/md.hoon @@ -0,0 +1,18 @@ +:: +:::: /hoon/md/mar + :: +:: +=, format +=, mimes:html +|_ txt=wain +:: +++ grab :: convert from + |% + ++ mime |=((pair mite octs) (to-wain q.q)) + ++ noun wain :: clam from %noun + -- +++ grow + |% + ++ mime [/text/plain (as-octs (of-wain txt))] + -- +-- diff --git a/desk/gub/mar/mime.hoon b/desk/gub/mar/mime.hoon new file mode 100644 index 0000000..f2ff96f --- /dev/null +++ b/desk/gub/mar/mime.hoon @@ -0,0 +1,19 @@ +:: +:::: /hoon/mime/mar + :: +:: +|_ own=mime +++ grow + ^? + |% + ++ jam `@`q.q.own + -- +:: +++ grab :: convert from + ^? + |% + ++ noun mime :: clam from %noun + ++ tape + |=(a=_"" [/application/x-urb-unknown (as-octt:mimes:html a)]) + -- +-- diff --git a/desk/gub/mar/noun.hoon b/desk/gub/mar/noun.hoon new file mode 100644 index 0000000..cfaca65 --- /dev/null +++ b/desk/gub/mar/noun.hoon @@ -0,0 +1,12 @@ +:: +:::: /hoon/noun/mar + :: +:::: A minimal noun mark +|_ non=* +++ grab |% + ++ noun * + -- +++ grow |% + ++ mime [/application/x-urb-jam (as-octs:mimes:html (jam non))] + -- +-- diff --git a/desk/gub/mar/page.hoon b/desk/gub/mar/page.hoon new file mode 100644 index 0000000..04e4943 --- /dev/null +++ b/desk/gub/mar/page.hoon @@ -0,0 +1,14 @@ +|_ val=[p=@tas q=*] +++ grab + |% + ++ noun [p=@tas q=*] + -- +++ grow + |% + ++ noun val + ++ txt ~[(crip "[{(trip p.val)} {}]")] + ++ mime + ^- ^mime + [/text/plain (as-octs:mimes:html (of-wain:format txt))] + -- +-- diff --git a/desk/mar/put-members.hoon b/desk/gub/mar/put-members.hoon similarity index 97% rename from desk/mar/put-members.hoon rename to desk/gub/mar/put-members.hoon index c465fea..6bd5dfa 100644 --- a/desk/mar/put-members.hoon +++ b/desk/gub/mar/put-members.hoon @@ -28,5 +28,4 @@ =/ txt=@t (crip (zing (join " " parts))) [/text/plain (as-octs:mimes:html txt)] -- -++ grad %noun -- diff --git a/desk/gub/mar/sand.hoon b/desk/gub/mar/sand.hoon new file mode 100644 index 0000000..7abfed6 --- /dev/null +++ b/desk/gub/mar/sand.hoon @@ -0,0 +1,13 @@ +:: sand: sandbox filter tree mark +:: +|_ =sand:nexus +++ grow + |% + ++ noun sand + ++ json (sand-to-json:nexus sand) + -- +++ grab + |% + ++ noun sand:nexus + -- +-- diff --git a/desk/gub/mar/seed.hoon b/desk/gub/mar/seed.hoon new file mode 100644 index 0000000..8456021 --- /dev/null +++ b/desk/gub/mar/seed.hoon @@ -0,0 +1,25 @@ +:: mar/seed.hoon +:: +:: Mark for a ship's identity seed. The seed is the master +:: secret from which all keys (networking, signing) derive. +:: +|_ sed=$%([%t =@t] [%uw =@uw] [%ux =@ux]) +++ grow + |% + ++ noun sed + ++ json + ^- ^json + ?- -.sed + %t (pairs:enjs:format ~[['type' s+'text'] ['seed' s+t.sed]]) + %uw (pairs:enjs:format ~[['type' s+'uw'] ['seed' s+(scot %uw uw.sed)]]) + %ux (pairs:enjs:format ~[['type' s+'ux'] ['seed' s+(scot %ux ux.sed)]]) + == + ++ mime + =/ jon=^json json + [/application/json (as-octs:mimes:html (en:json:html jon))] + -- +++ grab + |% + +$ noun $%([%t =@t] [%uw =@uw] [%ux =@ux]) + -- +-- diff --git a/desk/gub/mar/server-state.hoon b/desk/gub/mar/server-state.hoon new file mode 100644 index 0000000..6f8dfe8 --- /dev/null +++ b/desk/gub/mar/server-state.hoon @@ -0,0 +1,37 @@ +:: server-state: HTTP binding registry + active connections +:: +|_ st=server-state:nexus +++ grow + |% + ++ noun st + ++ json + ^- ^json + %- pairs:enjs:format + :~ ['version' (numb:enjs:format 0)] + ['binding-count' (numb:enjs:format ~(wyt by bindings.st))] + :- 'bindings' + :- %a + %+ turn ~(tap by bindings.st) + |= [=binding:eyre handler=rail:tarball] + %- pairs:enjs:format + :~ ['site' ?~(site.binding ~ s+u.site.binding)] + ['path' s+(spat path.binding)] + ['handler' s+(spat (snoc path.handler name.handler))] + == + ['conn-count' (numb:enjs:format ~(wyt by conns.st))] + :- 'conns' + :- %a + %+ turn ~(tap by conns.st) + |= [eyre-id=@ta =binding:eyre] + %- pairs:enjs:format + :~ ['eyre-id' s+eyre-id] + ['path' s+(spat path.binding)] + == + == + ++ mime [/application/json (as-octs:mimes:html (en:json:html json))] + -- +++ grab + |% + ++ noun server-state:nexus + -- +-- diff --git a/desk/gub/mar/ship.hoon b/desk/gub/mar/ship.hoon new file mode 100644 index 0000000..db1f022 --- /dev/null +++ b/desk/gub/mar/ship.hoon @@ -0,0 +1,13 @@ +|_ =ship +++ grab + |% + ++ noun ,@p + -- +++ grow + |% + ++ noun ship + ++ mime + ^- ^mime + [/text/plain (as-octs:mimes:html (scot %p ship))] + -- +-- diff --git a/desk/mar/ships.hoon b/desk/gub/mar/ships.hoon similarity index 97% rename from desk/mar/ships.hoon rename to desk/gub/mar/ships.hoon index 068fdbf..5595876 100644 --- a/desk/mar/ships.hoon +++ b/desk/gub/mar/ships.hoon @@ -29,5 +29,4 @@ =/ txt=@t (crip (zing (join " " parts))) [/text/plain (as-octs:mimes:html txt)] -- -++ grad %noun -- diff --git a/desk/gub/mar/sig.hoon b/desk/gub/mar/sig.hoon new file mode 100644 index 0000000..1075732 --- /dev/null +++ b/desk/gub/mar/sig.hoon @@ -0,0 +1,12 @@ +|_ sig=~ +++ grab + |% + ++ noun ,~ + -- +++ grow + |% + ++ noun sig + ++ json ~ + ++ mime [/application/json (as-octs:mimes:html 'null')] + -- +-- diff --git a/desk/mar/symlink.hoon b/desk/gub/mar/symlink.hoon similarity index 88% rename from desk/mar/symlink.hoon rename to desk/gub/mar/symlink.hoon index 06d6927..e983913 100644 --- a/desk/mar/symlink.hoon +++ b/desk/gub/mar/symlink.hoon @@ -1,9 +1,7 @@ :: symlink: symbolic link mark :: Represents symlinks as either absolute or relative paths :: -/+ tarball |_ =symlink:tarball -++ grad %noun ++ grow |% ++ noun symlink diff --git a/desk/gub/mar/tang.hoon b/desk/gub/mar/tang.hoon new file mode 100644 index 0000000..3aef689 --- /dev/null +++ b/desk/gub/mar/tang.hoon @@ -0,0 +1,32 @@ +:: +:::: /hoon/tang/mar + :: +:: +=, format +|_ tan=(list tank) +++ grow + |% + ++ noun tan + ++ json + =/ result=(each (list ^json) tang) + (mule |.((turn tan tank:enjs:format))) + ?- -.result + %& a+p.result + %| a+[a+[%s '[[output rendering error]]']~]~ + == + ++ txt + ^- wain + %+ turn (flop tan) + |=(=tank (crip ~(ram re tank))) + ++ mime + ^- ^mime + =/ =wain txt + [/text/plain (as-octs:mimes:html (of-wain:format wain))] + -- +++ grab :: convert from + |% + ++ noun (list ^tank) :: clam from %noun + ++ tank |=(a=^tank [a]~) + ++ txt |=(=wain (flop (turn wain tank))) + -- +-- diff --git a/desk/gub/mar/time.hoon b/desk/gub/mar/time.hoon new file mode 100644 index 0000000..b2f931e --- /dev/null +++ b/desk/gub/mar/time.hoon @@ -0,0 +1,13 @@ +|_ t=@da +++ grab + |% + ++ noun ,@da + -- +++ grow + |% + ++ noun t + ++ mime + ^- ^mime + [/text/plain (as-octs:mimes:html (scot %da t))] + -- +-- diff --git a/desk/gub/mar/timer-set.hoon b/desk/gub/mar/timer-set.hoon new file mode 100644 index 0000000..a86b8d5 --- /dev/null +++ b/desk/gub/mar/timer-set.hoon @@ -0,0 +1,12 @@ +:: timer-set: poke to request a timer +:: +|_ req=[=wire when=@da] +++ grab + |% + ++ noun ,[wire @da] + -- +++ grow + |% + ++ noun req + -- +-- diff --git a/desk/gub/mar/timer-state.hoon b/desk/gub/mar/timer-state.hoon new file mode 100644 index 0000000..32d58cd --- /dev/null +++ b/desk/gub/mar/timer-state.hoon @@ -0,0 +1,31 @@ +:: timer-state: timer service state +:: +|_ st=timer-state:nexus +++ grab + |% + ++ noun ,timer-state:nexus + -- +++ grow + |% + ++ noun st + ++ json + ^- ^json + :- %o + %- ~(gas by *(map @t ^json)) + :~ ['version' [%n '0']] + :- 'timers' + :- %a + %+ turn ~(tap by timers.st) + |= [key=[=rail:tarball =wire] when=@da] + %- pairs:enjs:format + :~ ['path' s+(spat (snoc path.rail.key name.rail.key))] + ['wire' s+(spat wire.key)] + ['when' s+(scot %da when)] + == + == + ++ mime + ^- ^mime + =/ txt=@t (en:json:html json) + [/application/json (as-octs:mimes:html txt)] + -- +-- diff --git a/desk/gub/mar/timer-wake.hoon b/desk/gub/mar/timer-wake.hoon new file mode 100644 index 0000000..f01fb34 --- /dev/null +++ b/desk/gub/mar/timer-wake.hoon @@ -0,0 +1,12 @@ +:: timer-wake: poke-back when a timer fires +:: +|_ =wire +++ grab + |% + ++ noun ^wire + -- +++ grow + |% + ++ noun wire + -- +-- diff --git a/desk/mar/tool-state.hoon b/desk/gub/mar/tool-state.hoon similarity index 93% rename from desk/mar/tool-state.hoon rename to desk/gub/mar/tool-state.hoon index 7d208a3..ea627e6 100644 --- a/desk/mar/tool-state.hoon +++ b/desk/gub/mar/tool-state.hoon @@ -1,4 +1,4 @@ -/+ nex-tools +/< nex-tools /lib/nex/tools.hoon |_ =tool-state:nex-tools ++ grab |% @@ -20,5 +20,4 @@ =/ jon=^json json [/application/json (as-octs:mimes:html (en:json:html jon))] -- -++ grad %noun -- diff --git a/desk/gub/mar/txt.hoon b/desk/gub/mar/txt.hoon new file mode 100644 index 0000000..313183b --- /dev/null +++ b/desk/gub/mar/txt.hoon @@ -0,0 +1,19 @@ +:: +:::: /hoon/txt/mar + :: +:: +=, format +=, mimes:html +|_ txt=wain +:: +++ grab :: convert from + |% + ++ mime |=((pair mite octs) (to-wain q.q)) + ++ noun wain :: clam from %noun + -- +++ grow + => v=. + |% + ++ mime => v [/text/plain (as-octs (of-wain txt))] + -- +-- diff --git a/desk/gub/mar/ud.hoon b/desk/gub/mar/ud.hoon new file mode 100644 index 0000000..4196be1 --- /dev/null +++ b/desk/gub/mar/ud.hoon @@ -0,0 +1,20 @@ +|_ val=@ud +++ grab + |% + ++ noun @ud + ++ mime + |= [=mite len=@ud tex=@t] + ^- @ud + =/ txt=wain (to-wain:format tex) + ?~ txt !! + (rash i.txt dem) + -- +++ grow + |% + ++ noun val + ++ txt ~[(crip (a-co:co val))] + ++ mime + ^- ^mime + [/text/plain (as-octs:mimes:html (of-wain:format txt))] + -- +-- diff --git a/desk/gub/mar/urb-event.hoon b/desk/gub/mar/urb-event.hoon new file mode 100644 index 0000000..135de81 --- /dev/null +++ b/desk/gub/mar/urb-event.hoon @@ -0,0 +1,52 @@ +:: mar/urb-event.hoon +:: +:: Mark for a single urb protocol event observed on-chain. +:: Stored in gain-enabled files — subscribers see each event +:: as it flows through. Includes tx outputs for UTXO derivation. +:: ~ when no event has been recorded yet. +:: +/< urb /lib/sur/urb.hoon +/< bitcoin /lib/sur/bitcoin.hoon +|_ evt=(unit [height=@ud txid=@ux =ship =sotx:urb os=(list output:tx:bitcoin)]) +++ grow + |% + ++ noun evt + ++ json + ^- ^json + ?~ evt ~ + %- pairs:enjs:format + :~ ['height' (numb:enjs:format height.u.evt)] + ['txid' s+(en:base16:mimes:html 32^txid.u.evt)] + ['ship' s+(scot %p ship.u.evt)] + ['action' s+-.+.sotx.u.evt] + :- 'detail' + =/ sk +.sotx.u.evt + ?+ -.sk ~ + %spawn (pairs:enjs:format ~[['pass' s+(scot %ux pass.sk)]]) + %keys (pairs:enjs:format ~[['breach' b+breach.sk]]) + %escape (pairs:enjs:format ~[['parent' s+(scot %p parent.sk)]]) + %cancel-escape (pairs:enjs:format ~[['parent' s+(scot %p parent.sk)]]) + %adopt (pairs:enjs:format ~[['ship' s+(scot %p ship.sk)]]) + %reject (pairs:enjs:format ~[['ship' s+(scot %p ship.sk)]]) + %detach (pairs:enjs:format ~[['ship' s+(scot %p ship.sk)]]) + %fief (pairs:enjs:format ~[['fief' b+?=(^ fief.sk)]]) + %set-mang (pairs:enjs:format ~[['mang' b+?=(^ mang.sk)]]) + == + :- 'outputs' + :- %a + %+ turn os.u.evt + |= out=output:tx:bitcoin + %- pairs:enjs:format + :~ ['scriptpubkey' s+(en:base16:mimes:html script-pubkey.out)] + ['value' (numb:enjs:format value.out)] + == + == + ++ mime + =/ jon=^json json + [/application/json (as-octs:mimes:html (en:json:html jon))] + -- +++ grab + |% + +$ noun (unit [height=@ud txid=@ux =ship =sotx:urb os=(list output:tx:bitcoin)]) + -- +-- diff --git a/desk/gub/mar/urb-state.hoon b/desk/gub/mar/urb-state.hoon new file mode 100644 index 0000000..1ebe571 --- /dev/null +++ b/desk/gub/mar/urb-state.hoon @@ -0,0 +1,28 @@ +:: mar/urb-state.hoon +:: +:: Mark for the urb-core block processor's state. Living as a grub +:: lets the groundwire walker peek/over it between blocks, and lets the +:: state be scryable/served via /api/file without a bespoke endpoint. +:: +/< urb /lib/sur/urb.hoon +|_ state=state:urb +++ grow + |% + ++ noun state + ++ json + ^- ^json + %- pairs:enjs:format + :~ ['height' (numb:enjs:format num.block-id.state)] + ['hash' s+(en:base16:mimes:html 32^hax.block-id.state)] + ['sont-count' (numb:enjs:format ~(wyt by sont-map.state))] + ['insc-count' (numb:enjs:format ~(wyt by insc-ids.state))] + ['point-count' (numb:enjs:format ~(wyt by unv-ids.state))] + == + ++ mime [/application/json (as-octs:mimes:html -:txt)] + ++ txt [(en:json:html json)]~ + -- +++ grab + |% + ++ noun state:urb + -- +-- diff --git a/desk/gub/mar/urb-udiffs.hoon b/desk/gub/mar/urb-udiffs.hoon new file mode 100644 index 0000000..6a8c080 --- /dev/null +++ b/desk/gub/mar/urb-udiffs.hoon @@ -0,0 +1,37 @@ +:: mar/urb-udiffs.hoon +:: +:: Mark for urb PKI udiffs — non-invertible diffs emitted per block. +:: Stored in a gain-enabled file so subscribers get live updates. +:: +|_ =udiffs:point:jael +++ grow + |% + ++ noun udiffs + ++ json + ^- ^json + :- %a + %+ turn udiffs + |= [=ship ud=udiff:point:jael] + ^- ^json + =/ dif +.ud + %- pairs:enjs:format + :~ ['ship' s+(scot %p ship)] + ['block' (numb:enjs:format number.id.ud)] + :- 'diff' + ?- -.dif + %rift (pairs:enjs:format ~[['type' s+'rift'] ['rift' (numb:enjs:format rift.dif)] ['boot' b+boot.dif]]) + %keys (pairs:enjs:format ~[['type' s+'keys'] ['life' (numb:enjs:format life.dif)] ['boot' b+boot.dif]]) + %spon (pairs:enjs:format ~[['type' s+'spon'] ['sponsor' ?~(sponsor.dif ~ s+(scot %p u.sponsor.dif))]]) + %fief (pairs:enjs:format ~[['type' s+'fief'] ['fief' b+?=(^ fief.dif)]]) + %disavow (pairs:enjs:format ~[['type' s+'disavow']]) + == + == + ++ mime + =/ jon=^json json + [/application/json (as-octs:mimes:html (en:json:html jon))] + -- +++ grab + |% + ++ noun udiffs:point:jael + -- +-- diff --git a/desk/gub/mar/urb-wallet.hoon b/desk/gub/mar/urb-wallet.hoon new file mode 100644 index 0000000..47b14b4 --- /dev/null +++ b/desk/gub/mar/urb-wallet.hoon @@ -0,0 +1,40 @@ +:: mar/urb-wallet.hoon +:: +:: Mark for a ship's wallet state: the identity seed, spawn tweak, +:: and current UTXO. The tweak binds the ship's identity to its +:: precommit satpoint and never changes. The UTXO is ~ before the +:: first spawn confirms and gets updated after every on-chain action. +:: +/< gw /lib/groundwire.hoon +/< unv /lib/unv.hoon +|_ wal=[seed=$%([%t =@t] [%uw =@uw] [%ux =@ux]) twk=@ utxo=(unit utxo:unv)] +++ grow + |% + ++ noun wal + ++ json + ^- ^json + %- pairs:enjs:format + :~ :- 'seed' + ?- -.seed.wal + %t s+t.seed.wal + %uw s+(scot %uw uw.seed.wal) + %ux s+(scot %ux ux.seed.wal) + == + ['tweak' s+(scot %ux twk.wal)] + :- 'utxo' + ?~ utxo.wal ~ + %- pairs:enjs:format + :~ ['txid' s+(scot %ux txid.u.utxo.wal)] + ['vout' (numb:enjs:format vout.u.utxo.wal)] + ['value' (numb:enjs:format value.u.utxo.wal)] + == + == + ++ mime + =/ jon=^json json + [/application/json (as-octs:mimes:html (en:json:html jon))] + -- +++ grab + |% + +$ noun [seed=$%([%t =@t] [%uw =@uw] [%ux =@ux]) twk=@ utxo=(unit utxo:unv)] + -- +-- diff --git a/desk/gub/mar/wallet/account.hoon b/desk/gub/mar/wallet/account.hoon new file mode 100644 index 0000000..4eec5c0 --- /dev/null +++ b/desk/gub/mar/wallet/account.hoon @@ -0,0 +1,46 @@ +:: mark for account-data: BIP44 bitcoin account +:: +/< wt /lib/wallet-types.hoon +=, wt +=, format +|_ acct=account-data +++ grab + |% + ++ noun account-data + ++ json + |= jon=^json + ^- account-data + ?> ?=([%o *] jon) + :* (~(dog jo:json-utils jon) /name so:dejs:format) + (slav %ux (~(dog jo:json-utils jon) /wallet so:dejs:format)) + ;;(script-type (slav %tas (~(dog jo:json-utils jon) /script-type so:dejs:format))) + ;;(?(%main %testnet3 %testnet4 %signet %regtest) (slav %tas (~(dog jo:json-utils jon) /active-network so:dejs:format))) + [%.y (rash (~(dog jo:json-utils jon) /purpose so:dejs:format) dem)] + [%.y (rash (~(dog jo:json-utils jon) /coin-type so:dejs:format) dem)] + [%.y (rash (~(dog jo:json-utils jon) /account-idx so:dejs:format) dem)] + (~(dog jo:json-utils jon) /xprv so:dejs:format) + == + ++ mime + |= [p=mite q=octs] + ^- account-data + (json (need (de:json:html (@t q.q)))) + -- +++ grow + |% + ++ noun acct + ++ json + ^- ^json + %- pairs:enjs + :~ ['name' s+name.acct] + ['wallet' s+(scot %ux wallet.acct)] + ['script-type' s+(scot %tas script-type.acct)] + ['active-network' s+(scot %tas active-network.acct)] + ['purpose' (numb:enjs q.purpose.acct)] + ['coin-type' (numb:enjs q.coin-type.acct)] + ['account-idx' (numb:enjs q.account-idx.acct)] + ['xprv' s+xprv.acct] + == + ++ mime [/application/json (as-octs:mimes:html -:txt)] + ++ txt [(en:json:html json)]~ + -- +-- diff --git a/desk/gub/mar/wallet/addresses.hoon b/desk/gub/mar/wallet/addresses.hoon new file mode 100644 index 0000000..73f26b7 --- /dev/null +++ b/desk/gub/mar/wallet/addresses.hoon @@ -0,0 +1,14 @@ +:: mark for addr-mop: ordered map of address index to address-data +:: +/< wt /lib/wallet-types.hoon +=, wt +|_ mop=addr-mop +++ grab + |% + ++ noun addr-mop + -- +++ grow + |% + ++ noun mop + -- +-- diff --git a/desk/gub/mar/wallet/draft.hoon b/desk/gub/mar/wallet/draft.hoon new file mode 100644 index 0000000..971c67b --- /dev/null +++ b/desk/gub/mar/wallet/draft.hoon @@ -0,0 +1,133 @@ +:: mark for transaction draft state +:: +/< drft /lib/tx/draft.hoon +/< fees /lib/tx/fees.hoon +=, format +|_ draft=transaction:drft +++ grab + |% + ++ noun transaction:drft + ++ json + |= jon=^json + ^- transaction:drft + ?> ?=([%o *] jon) + =/ m p.jon + :: parse inputs array + :: + =/ inputs=(list utxo-input:drft) + =/ v (~(get by m) 'inputs') + ?~ v ~ + ?. ?=([%a *] u.v) ~ + (turn p.u.v parse-input) + :: parse outputs array + :: + =/ outputs=(list output:drft) + =/ v (~(get by m) 'outputs') + ?~ v ~ + ?. ?=([%a *] u.v) ~ + (turn p.u.v parse-output) + :: parse change (unit) + :: + =/ change=(unit change-config:drft) + =/ v (~(get by m) 'change') + ?~ v ~ + ?. ?=([%o *] u.v) ~ + `(parse-change u.v) + :: parse auto-select (unit) + :: + =/ auto-select=(unit select-mode:drft) + =/ v (~(get by m) 'auto-select') + ?~ v ~ + ?. ?=([%s *] u.v) ~ + ?: =(%'' p.u.v) ~ + `;;(select-mode:drft (slav %tas p.u.v)) + :: timestamps + :: + =/ created=@da + =/ v (~(get by m) 'created') + ?~ v *@da + ?. ?=([%s *] u.v) *@da + (slav %da p.u.v) + =/ modified=@da + =/ v (~(get by m) 'modified') + ?~ v *@da + ?. ?=([%s *] u.v) *@da + (slav %da p.u.v) + [inputs outputs change auto-select created modified] + ++ mime + |= [p=mite q=octs] + ^- transaction:drft + (json (need (de:json:html (@t q.q)))) + -- +++ grow + |% + ++ noun draft + ++ json + ^- ^json + %- pairs:enjs + :~ :- 'inputs' + :- %a + %+ turn inputs.draft + |= i=utxo-input:drft + %- pairs:enjs + :~ ['txid' s+txid.i] + ['vout' (numb:enjs vout.i)] + ['amount' (numb:enjs amount.i)] + ['spend' s+(scot %tas spend.i)] + == + :: + :- 'outputs' + :- %a + %+ turn outputs.draft + |= o=output:drft + %- pairs:enjs + :~ ['address' s+address.o] + ['amount' (numb:enjs amount.o)] + == + :: + :- 'change' + ?~ change.draft ~ + %- pairs:enjs + :~ ['fee-rate' (numb:enjs fee-rate.u.change.draft)] + ['address' s+address.u.change.draft] + == + :: + :- 'auto-select' + ?~ auto-select.draft ~ + s+(scot %tas u.auto-select.draft) + :: + ['created' s+(scot %da created.draft)] + ['modified' s+(scot %da modified.draft)] + == + ++ mime [/application/json (as-octs:mimes:html -:txt)] + ++ txt [(en:json:html json)]~ + -- +:: helper parsers +:: +++ parse-input + |= jon=json + ^- utxo-input:drft + ?> ?=([%o *] jon) + =/ m p.jon + :* (so:dejs:format (need (~(get by m) 'txid'))) + (ni:dejs:format (need (~(get by m) 'vout'))) + (ni:dejs:format (need (~(get by m) 'amount'))) + ;;(spend:fees (slav %tas (so:dejs:format (need (~(get by m) 'spend'))))) + == +++ parse-output + |= jon=json + ^- output:drft + ?> ?=([%o *] jon) + =/ m p.jon + :* (so:dejs:format (need (~(get by m) 'address'))) + (ni:dejs:format (need (~(get by m) 'amount'))) + == +++ parse-change + |= jon=json + ^- change-config:drft + ?> ?=([%o *] jon) + =/ m p.jon + :* (ni:dejs:format (need (~(get by m) 'fee-rate'))) + (so:dejs:format (need (~(get by m) 'address'))) + == +-- diff --git a/desk/gub/mar/wallet/txs.hoon b/desk/gub/mar/wallet/txs.hoon new file mode 100644 index 0000000..a82d1bf --- /dev/null +++ b/desk/gub/mar/wallet/txs.hoon @@ -0,0 +1,14 @@ +:: mark for tx-map: map of txid to transaction +:: +/< wt /lib/wallet-types.hoon +=, wt +|_ txs=tx-map +++ grab + |% + ++ noun tx-map + -- +++ grow + |% + ++ noun txs + -- +-- diff --git a/desk/gub/mar/wallet/wallet.hoon b/desk/gub/mar/wallet/wallet.hoon new file mode 100644 index 0000000..63d3e73 --- /dev/null +++ b/desk/gub/mar/wallet/wallet.hoon @@ -0,0 +1,75 @@ +:: mark for wallet-data: stored bitcoin wallet +:: +/< wt /lib/wallet-types.hoon +=, wt +=, format +|_ wal=wallet-data +++ grab + |% + ++ noun wallet-data + ++ json + |= jon=^json + ^- wallet-data + ?> ?=([%o *] jon) + =/ name=^json (~(got by p.jon) 'name') + ?> ?=([%s *] name) + =/ fp=^json (~(got by p.jon) 'fingerprint') + ?> ?=([%s *] fp) + =/ seed-jon=^json (~(got by p.jon) 'seed') + ?> ?=([%o *] seed-jon) + =/ stype=^json (~(got by p.seed-jon) 'type') + ?> ?=([%s *] stype) + =/ sval=^json (~(got by p.seed-jon) 'value') + ?> ?=([%s *] sval) + =/ =seed + ?: =('bip39' p.stype) [%t p.sval] + [%q (slav %q p.sval)] + =/ fingerprint=@ux (scan (trip p.fp) hex) + =/ accts-jon=(unit ^json) (~(get by p.jon) 'accounts') + =/ accts=(map account @ux) + ?~ accts-jon ~ + ?> ?=([%a *] u.accts-jon) + %- ~(gas by *(map account @ux)) + %+ turn p.u.accts-jon + |= ej=^json + ?> ?=([%o *] ej) + =/ pur=@ud (rash (so:dejs (~(got by p.ej) 'purpose')) dem) + =/ ct=@ud (rash (so:dejs (~(got by p.ej) 'coin-type')) dem) + =/ ai=@ud (rash (so:dejs (~(got by p.ej) 'account')) dem) + =/ pk=@ux (slav %ux (so:dejs (~(got by p.ej) 'pubkey'))) + [[[%.y pur] [%.y ct] [%.y ai]] pk] + [p.name seed fingerprint accts] + ++ mime + |= [p=mite q=octs] + ^- wallet-data + (json (need (de:json:html (@t q.q)))) + -- +++ grow + |% + ++ noun wal + ++ json + ^- ^json + %- pairs:enjs + :~ ['name' s+name.wal] + ['fingerprint' s+(crip (hexn:http-utils fingerprint.wal))] + :- 'seed' + %- pairs:enjs + ?- -.seed.wal + %t ~[['type' s+'bip39'] ['value' s+phrase.seed.wal]] + %q ~[['type' s+'q'] ['value' s+(scot %q secret.seed.wal)]] + == + :- 'accounts' + :- %a + %+ turn ~(tap by accounts.wal) + |= [=account:wt pubkey=@ux] + %- pairs:enjs + :~ ['purpose' (numb:enjs q.purpose.account)] + ['coin-type' (numb:enjs q.coin-type.account)] + ['account' (numb:enjs q.account.account)] + ['pubkey' s+(scot %ux pubkey)] + == + == + ++ mime [/application/json (as-octs:mimes:html -:txt)] + ++ txt [(en:json:html json)]~ + -- +-- diff --git a/desk/gub/mar/weir.hoon b/desk/gub/mar/weir.hoon new file mode 100644 index 0000000..2a54dd4 --- /dev/null +++ b/desk/gub/mar/weir.hoon @@ -0,0 +1,63 @@ +:: weir: access control template (make/poke/peek road sets) +:: TODO: consolidate road-to-text/render-road/render-rules across +:: peers.hoon, explorer.hoon, read-weir.hoon, and this file +:: +=< +|_ =weir:nexus +++ grab + |% + ++ noun weir:nexus + ++ mime + |= [=mite len=@ud tex=@t] + ^- weir:nexus + =/ lines=(list tape) + %+ murn (to-wain:format tex) + |= l=@t + =/ t=tape (trip l) + ?~ t ~ + `t + =| acc=weir:nexus + |- ^- weir:nexus + ?~ lines acc + =/ line=tape i.lines + =/ words=(list @t) (to-wain:format (crip `tape`(turn line |=(c=@tD ?:(=(c ' ') `@tD`10 c))))) + ?~ words $(lines t.lines) + =/ cat=@t i.words + =/ roads=(list @t) t.words + =. acc + |- + ?~ roads acc + =/ road=road:tarball [%& %| (stab i.roads)] + =. acc + ?+ cat acc + %'make' acc(make (~(put in make.acc) road)) + %'poke' acc(poke (~(put in poke.acc) road)) + %'peek' acc(peek (~(put in peek.acc) road)) + == + $(roads t.roads) + $(lines t.lines) + -- +++ grow + |% + ++ noun weir + ++ mime + ^- ^mime + =/ lines=(list tape) + %- zing + :~ (turn ~(tap in make.weir) |=(r=road:tarball "make {(render-road r)}")) + (turn ~(tap in poke.weir) |=(r=road:tarball "poke {(render-road r)}")) + (turn ~(tap in peek.weir) |=(r=road:tarball "peek {(render-road r)}")) + == + =/ txt=@t (of-wain:format (turn lines crip)) + [/text/plain (as-octs:mimes:html txt)] + -- +-- +|% +++ render-road + |= r=road:tarball + ^- tape + ?- -.r + %& ?-(-.p.r %& "{(spud path.p.p.r)}/{(trip name.p.p.r)}", %| (spud p.p.r)) + %| "{(zing (reap p.p.r "../"))}{?-(-.q.p.r %& "{(spud path.p.q.p.r)}/{(trip name.p.q.p.r)}", %| (spud p.q.p.r))}" + == +-- diff --git a/desk/nex/claude.hoon b/desk/gub/nex/claude.hoon similarity index 95% rename from desk/nex/claude.hoon rename to desk/gub/nex/claude.hoon index a4c5fa1..7efda91 100644 --- a/desk/nex/claude.hoon +++ b/desk/gub/nex/claude.hoon @@ -1,8 +1,7 @@ :: claude nexus: flat chat with Claude API :: -/- *claude -/+ nexus, tarball, io=fiberio, loader -!: +/< claude /lib/claude.hoon +=, claude =< ^- nexus:nexus |% ++ on-load @@ -19,20 +18,20 @@ ?(~ [~ %0]) %+ spin:loader [sand gain ball] :~ (ver-row:loader 0) - [%fall %& [/ %'config.json'] %.n [~ %json !>(default-config)]] - [%fall %& [/ %'messages.claude-messages'] %.n [~ %claude-messages !>(`messages`[%0 *((mop @ud message) lth)])]] - [%fall %& [/ %'custom-prompt.txt'] %.n [~ %txt !>(*wain)]] - [%fall %& [/ %'main.claude-registry'] %.n [~ %claude-registry !>(`registry`[%0 0 ~ %.y])]] + [%fall %& [/ %'config.json'] %.n [~ [/ %json] !>(default-config)]] + [%fall %& [/ %'messages.claude-messages'] %.n [~ [/ %claude-messages] !>(`messages`[%0 *((mop @ud message) lth)])]] + [%fall %& [/ %'custom-prompt.txt'] %.n [~ [/ %txt] !>(*wain)]] + [%fall %& [/ %'main.claude-registry'] %.n [~ [/ %claude-registry] !>(`registry`[%0 0 ~ %.y])]] :: always overwritten - [%over %& [/ %'weir.txt'] %.n [~ %txt !>(`wain`~['No weir set.'])]] - [%over %& [/ui %'chat.html'] %.n [~ %manx !>((chat-page ~))]] - [%over %& [/ui/sse %'last-message.html'] %.n [~ %manx !>(*manx)]] - [%over %& [/ui/sse %'status.json'] %.n [~ %json !>((pairs:enjs:format ~[['loading' b+%.n] ['live' b+%.y]]))]] + [%over %& [/ %'weir.txt'] %.n [~ [/ %txt] !>(`wain`~['No weir set.'])]] + [%over %& [/ui %'chat.html'] %.n [~ [/ %html] !>((crip (en-xml:html (chat-page ~))))]] + [%over %& [/ui/sse %'last-message.html'] %.n [~ [/ %html] !>((crip (en-xml:html *manx)))]] + [%over %& [/ui/sse %'status.json'] %.n [~ [/ %json] !>((pairs:enjs:format ~[['loading' b+%.n] ['live' b+%.y]]))]] == == :: ++ on-file - |= [=rail:tarball =mark] + |= [=rail:tarball =blot:tarball] ^- spool:fiber:nexus |= =prod:fiber:nexus =/ m (fiber:fiber:nexus ,~) @@ -43,11 +42,11 @@ [~ %'messages.claude-messages'] ;< ~ bind:m (rise-wait:io prod "%claude chat: failed") |- - ;< =cage bind:m take-poke:io - ?. ?=(%claude-action p.cage) - ~& > [%claude-chat %unknown-mark p.cage] + ;< =sage:tarball bind:m take-poke:io + ?. ?=(%claude-action name.p.sage) + ~& > [%claude-chat %unknown-mark name.p.sage] $ - =/ =action !<(action q.cage) + =/ =action !<(action q.sage) ?: ?=(%live -.action) $ :: not a message — skip ?: ?=(%interrupt -.action) $ :: not a message — skip =/ [role=@t text=@t] @@ -100,15 +99,15 @@ ;< init=view:nexus bind:m (keep:io /msgs (cord-to-road:tarball '../messages.claude-messages') ~) ?. ?=([%file *] init) $ - =/ msg=messages !<(messages q.cage.init) + =/ msg=messages !<(messages q.sage.init) =/ page=manx (chat-page (tap:mon messages.msg)) - ;< ~ bind:m (replace:io !>(page)) + ;< ~ bind:m (replace:io !>((crip (en-xml:html page)))) |- ;< upd=view:nexus bind:m (take-news:io /msgs) ?. ?=([%file *] upd) $ - =/ msg=messages !<(messages q.cage.upd) + =/ msg=messages !<(messages q.sage.upd) =/ page=manx (chat-page (tap:mon messages.msg)) - ;< ~ bind:m (replace:io !>(page)) + ;< ~ bind:m (replace:io !>((crip (en-xml:html page)))) $ :: /ui/sse/last-message.html — watches messages, emits last as HTML :: @@ -117,17 +116,17 @@ ;< init=view:nexus bind:m (keep:io /msgs (cord-to-road:tarball '../../messages.claude-messages') ~) ?. ?=([%file *] init) $ - =/ msg=messages !<(messages q.cage.init) + =/ msg=messages !<(messages q.sage.init) =/ last=(unit [key=@ud val=message]) (ram:mon messages.msg) =/ init-manx=manx ?~(last *manx (msg-to-manx val.u.last)) - ;< ~ bind:m (replace:io !>(init-manx)) + ;< ~ bind:m (replace:io !>((crip (en-xml:html init-manx)))) |- ;< upd=view:nexus bind:m (take-news:io /msgs) ?. ?=([%file *] upd) $ - =/ msg=messages !<(messages q.cage.upd) + =/ msg=messages !<(messages q.sage.upd) =/ last=(unit [key=@ud val=message]) (ram:mon messages.msg) ?~ last $ - ;< ~ bind:m (replace:io !>((msg-to-manx val.u.last))) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (msg-to-manx val.u.last))))) $ :: /ui/sse/status.json — loading state, updated by message fiber :: @@ -383,7 +382,7 @@ :: User message from UI :: %poke - =/ =action !<(action q.cage.ev) + =/ =action !<(action q.sage.ev) ?: ?=(%interrupt -.action) ~& > %claude-interrupt-no-op $ @@ -422,7 +421,7 @@ ?. live.reg $ ;< ~ bind:m (claude-turn msg-road) $ - :: Ack responses (make, over, cull, poke, diff, sand) + :: Ack responses (make, over, cull, poke, sand) :: %made ;< ~ bind:m (handle-ack msg-road wire.ev err.ev slots.reg live.reg) @@ -435,9 +434,6 @@ $ %pack ;< ~ bind:m (handle-ack msg-road wire.ev err.ev slots.reg live.reg) - $ - %diff - ;< ~ bind:m (handle-ack msg-road wire.ev err.ev slots.reg live.reg) $ %sand ;< ~ bind:m (handle-ack msg-road wire.ev err.ev slots.reg live.reg) @@ -527,28 +523,29 @@ ;< msg=messages bind:m (read-msgs msg-road) :: read config for API key ;< cfg-seen=seen:nexus bind:m - (peek:io /cfg (cord-to-road:tarball './config.json') `%json) + (peek:io (cord-to-road:tarball './config.json') `[/ %json]) =/ cfg=json ?. ?=([%& %file *] cfg-seen) (need (de:json:html '{}')) - !<(json q.cage.p.cfg-seen) + !<(json q.sage.p.cfg-seen) =/ api-key=@t (jget-t cfg 'api_key' '') ?: =('' api-key) ~& >>> %claude-no-api-key - ;< ~ bind:m (append-to-msgs msg-road 'user' 'No API key set. Add your Anthropic API key in /config/creds or /claude.claude/config.json') + ;< ~ bind:m (append-to-msgs msg-road 'user' 'No API key set. Add api_key to config.json.') (pure:m ~) =/ model=@t (jget-t cfg 'model' 'claude-sonnet-4-20250514') =/ max-tokens=@ud (jget-n cfg 'max_tokens' 4.096) =/ max-messages=@ud (jget-n cfg 'max_messages' 50) :: build system prompt ;< custom-seen=seen:nexus bind:m - (peek:io /prompt (cord-to-road:tarball './custom-prompt.txt') `%txt) + (peek:io (cord-to-road:tarball './custom-prompt.txt') `[/ %txt]) ;< weir-seen=seen:nexus bind:m - (peek:io /weir (cord-to-road:tarball './weir.txt') `%txt) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) + (peek:io (cord-to-road:tarball './weir.txt') `[/ %txt]) + ;< our=@p bind:m get-our:io + ;< now=@da bind:m get-time:io =/ custom=@t ?. ?=([%& %file *] custom-seen) '' - =/ =wain !<(wain q.cage.p.custom-seen) + =/ =wain !<(wain q.sage.p.custom-seen) ?~(wain '' (of-wain:format wain)) :: Registry state rendered to text for system prompt ;< reg=registry bind:m (get-state-as:io ,registry) @@ -563,9 +560,9 @@ =/ reg-text=@t (of-wain:format reg-wain) =/ weir-text=@t ?. ?=([%& %file *] weir-seen) '' - =/ =wain !<(wain q.cage.p.weir-seen) + =/ =wain !<(wain q.sage.p.weir-seen) ?~(wain '' (of-wain:format wain)) - =/ ship=@t (scot %p our.bowl) + =/ ship=@t (scot %p our) =/ msg-count=@t (crip (a-co:co (lent (tap:mon messages.msg)))) =/ system=(unit @t) :- ~ @@ -574,7 +571,7 @@ '\0a\0aLIVE CONTEXT: Ship: ' ship '. Current time: ' - (scot %da now.bowl) + (scot %da now) '. Messages in conversation: ' msg-count '.' @@ -610,7 +607,7 @@ ;< reg=registry bind:m (get-state-as:io ,registry) =/ loading-on=json (pairs:enjs:format ~[['loading' b+%.y] ['live' b+live.reg]]) =/ loading-off=json (pairs:enjs:format ~[['loading' b+%.n] ['live' b+live.reg]]) - ;< ~ bind:m (over:io /status status-road json+!>(loading-on)) + ;< ~ bind:m (over:io status-road [[/ %json] !>(loading-on)]) =/ =request:http :^ %'POST' 'https://api.anthropic.com/v1/messages' :~ ['content-type' 'application/json'] @@ -619,7 +616,7 @@ == `(as-octs:mimes:html body-cord) ;< response=(unit @t) bind:m (fetch-or-interrupt request) - ;< ~ bind:m (over:io /status status-road json+!>(loading-off)) + ;< ~ bind:m (over:io status-road [[/ %json] !>(loading-off)]) ?~ response ~& > %claude-interrupted ;< ~ bind:m (set-live %.n) @@ -782,24 +779,24 @@ %'sand' (send-dart:io %node slot-wire road %peek ~ ~ %.n) %'weir' (send-dart:io %node slot-wire road %peek ~ ~ %.n) :: manu - %'manu' (send-dart:io %manu slot-wire |+road) + %'manu' (send-dart:io %node slot-wire road %manu ~) :: writes %'make' =/ =mime [/text/plain (as-octs:mimes:html body)] - (send-dart:io %node slot-wire road %make |+[%.n mime+!>(mime) ~]) + (send-dart:io %node slot-wire road %make |+[%.n [[/ %mime] !>(mime)] ~]) %'dir' (send-dart:io %node slot-wire road %make &+[*sand:nexus *gain:nexus `[~ ~ ~] ~]) %'over' =/ =mime [/text/plain (as-octs:mimes:html body)] - (send-dart:io %node slot-wire road %over mime+!>(mime)) + (send-dart:io %node slot-wire road %over [[/ %mime] !>(mime)]) %'rmf' (send-dart:io %node slot-wire road %cull ~) %'rmd' (send-dart:io %node slot-wire road %cull ~) %'poke' =/ =mime [/text/plain (as-octs:mimes:html body)] - (send-dart:io %node slot-wire road %poke mime+!>(mime)) + (send-dart:io %node slot-wire road %poke [[/ %mime] !>(mime)]) %'diff' =/ =mime [/text/plain (as-octs:mimes:html body)] - (send-dart:io %node slot-wire road %diff mime+!>(mime)) + (send-dart:io %node slot-wire road %over [[/ %mime] !>(mime)]) %'setweir' =/ jon=(unit json) (de:json:html body) ?~ jon @@ -817,13 +814,12 @@ :: Multiplex ALL events — pokes, responses, subscriptions :: +$ main-event - $% [%poke =cage] + $% [%poke =sage:tarball] [%peek =wire =seen:nexus] [%made =wire err=(unit tang)] [%over =wire err=(unit tang)] [%gone =wire err=(unit tang)] [%pack =wire err=(unit tang)] - [%diff =wire err=(unit tang)] [%sand =wire err=(unit tang)] [%manu =wire res=(each @t tang)] [%bond =wire now=(each view:nexus tang)] @@ -839,15 +835,14 @@ ?+ in [%skip ~] ~ [%wait ~] [~ %poke * *] - ?. ?=(%claude-action p.cage.u.in) + ?. ?=(%claude-action name.p.sage.u.in) [%skip ~] - [%done %poke cage.u.in] + [%done %poke sage.u.in] [~ %peek * *] [%done %peek wire.u.in seen.u.in] [~ %made * *] [%done %made wire.u.in err.u.in] [~ %over * *] [%done %over wire.u.in err.u.in] [~ %gone * *] [%done %gone wire.u.in err.u.in] [~ %pack * *] [%done %pack wire.u.in err.u.in] - [~ %diff * *] [%done %diff wire.u.in err.u.in] [~ %sand * *] [%done %sand wire.u.in err.u.in] [~ %manu * *] [%done %manu wire.u.in res.u.in] [~ %bond * *] [%done %bond wire.u.in now.u.in] @@ -1003,20 +998,17 @@ :: Interrupt poke — consumed, returns ~ :: [~ %poke * *] - =/ =action !<(action q.cage.u.in) + ?: =([/ %http-response] p.sage.u.in) + =/ resp=client-response:iris !<(client-response:iris q.sage.u.in) + ?: ?=(%cancel -.resp) [%done ~] + ?> ?=(%finished -.resp) + =/ body=@t + ?~(full-file.resp '' q.data.u.full-file.resp) + [%done `body] + =/ =action !<(action q.sage.u.in) ?. ?=(%interrupt -.action) [%skip ~] [%done ~] - :: HTTP response — extract body, return (some body) - :: - [~ %arvo [%request ~] %iris %http-response %cancel *] - [%done ~] - [~ %arvo [%request ~] %iris %http-response %finished *] - =/ =client-response:iris client-response.sign.u.in - ?> ?=(%finished -.client-response) - =/ body=@t - ?~(full-file.client-response '' q.data.u.full-file.client-response) - [%done `body] == :: ++ set-live @@ -1027,7 +1019,7 @@ ;< ~ bind:m (replace:io !>(`registry`reg(live flag))) =/ status-road=road:tarball (cord-to-road:tarball './ui/sse/status.json') =/ =json (pairs:enjs:format ~[['loading' b+%.n] ['live' b+flag]]) - (over:io /status status-road json+!>(json)) + (over:io status-road [[/ %json] !>(json)]) :: ++ append-msg |= [msg-road=road:tarball =slot result=@t rev=(unit @ud)] @@ -1050,7 +1042,7 @@ %'file' ?. ?=([%& %file *] seen) (pure:m [(crip "ERROR: Not found: {(trip path.slot)}") ~]) - ;< content=@t bind:m (cage-to-txt cage.p.seen) + ;< content=@t bind:m (sage-to-txt sage.p.seen) (pure:m [content `ud.file.sack.p.seen]) :: %'kids' @@ -1124,7 +1116,7 @@ %none (append-to-msgs msg-road 'user' (rap 3 ~['DELETED'])) %file - ;< content=@t bind:m (cage-to-txt cage.view) + ;< content=@t bind:m (sage-to-txt sage.view) =/ rev=@ud ud.file.sack.view =/ rev-attr=@t (crip " rev=\"{(a-co:co rev)}\"") (append-to-msgs msg-road 'user' (rap 3 ~['' content ''])) @@ -1145,7 +1137,7 @@ ?~ files (pure:m ~) =/ [file-name=@ta =content:tarball] i.files =/ lane-path=@t (spat (snoc here file-name)) - ;< content-text=@t bind:m (cage-to-txt cage.content) + ;< content-text=@t bind:m (sage-to-txt sage.content) =/ msg=@t (rap 3 ~['' content-text '']) ;< ~ bind:m (append-to-msgs msg-road 'user' msg) @@ -1166,20 +1158,20 @@ ?: =(*weir:nexus weir) ~['No weir set.'] ~[(crip "PERMISSIONS (weir): {(trip (en:json:html (weir-to-json:nexus weir)))}")] :: -++ cage-to-txt - |= =cage +++ sage-to-txt + |= =sage:tarball =/ m (fiber:fiber:nexus ,@t) ^- form:m - ?: =(%txt p.cage) - (pure:m (of-wain:format !<(wain q.cage))) - ;< tube=(unit tube:clay) bind:m (get-tube:io [p.cage %txt]) + ?: =(%txt name.p.sage) + (pure:m (of-wain:format !<(wain q.sage))) + ;< tube=(unit tube:clay) bind:m (get-tube:io [%& %| /code] [p.sage [/ %txt]]) ?~ tube :: Fallback: convert to mime and extract body as text - ;< =mime bind:m (cage-to-mime:io cage) + ;< =mime bind:m (sage-to-mime:io sage) (pure:m `@t`(end [3 p.q.mime] q.q.mime)) - =/ result=(each vase tang) (mule |.((u.tube q.cage))) + =/ result=(each vase tang) (mule |.((u.tube q.sage))) ?: ?=(%| -.result) - ;< =mime bind:m (cage-to-mime:io cage) + ;< =mime bind:m (sage-to-mime:io sage) (pure:m `@t`(end [3 p.q.mime] q.q.mime)) (pure:m (of-wain:format !<(wain p.result))) :: @@ -1410,17 +1402,17 @@ |= msg-road=road:tarball =/ m (fiber:fiber:nexus ,messages) ^- form:m - ;< seen=seen:nexus bind:m (peek:io /msgs msg-road `%claude-messages) + ;< seen=seen:nexus bind:m (peek:io msg-road `[/ %claude-messages]) ?. ?=([%& %file *] seen) (pure:m `messages`[%0 *((mop @ud message) lth)]) - (pure:m !<(messages q.cage.p.seen)) + (pure:m !<(messages q.sage.p.seen)) :: Append a message to the messages file via poke :: ++ append-to-msgs |= [msg-road=road:tarball role=@t content=@t] =/ m (fiber:fiber:nexus ,~) ^- form:m - (poke:io /msgs msg-road claude-action+!>(`action`[%add role content])) + (poke:io msg-road [[/ %claude-action] !>(`action`[%add role content])]) :: Extract inner text from an XML tag like text :: ++ extract-inner diff --git a/desk/gub/nex/claw/agent.hoon b/desk/gub/nex/claw/agent.hoon new file mode 100644 index 0000000..4158019 --- /dev/null +++ b/desk/gub/nex/claw/agent.hoon @@ -0,0 +1,4152 @@ +:: claw nexus: self-building AI agent +:: +/< nex-tools /lib/nex/tools.hoon +/< iso-8601 /lib/iso-8601.hoon +/< cron /lib/cron.hoon +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + =/ default-config=json + %- pairs:enjs:format + :~ ['model' s+'claude-sonnet-4-20250514'] + ['api-proxy' s+'anthropic'] + ['context_window' (numb:enjs:format 80.000)] + ['message_cap' (numb:enjs:format 20.000)] + ['channel' s+''] + == + =/ default-prompt=wain + :~ 'You are an AI assistant running inside the grubbery system on an Urbit ship.' + '' + '# What you are' + '' + 'Three things to understand:' + '' + ' Ball = the filesystem. A tree of directories and files, all in memory.' + ' Nexus = a program that governs a directory. Identified by a "neck" on the dir.' + ' Fiber = a running process attached to a file. Your event loop.' + '' + 'You are a fiber process running inside a claw agent nexus. Your nexus owns' + 'a directory in the ball with all your files: chat, prompts, code,' + 'tools, and children. Everything is persistent across sessions.' + '' + 'IMPORTANT: You have reference documentation in your filesystem at ./context/docs/.' + 'READ THESE FIRST when you need to understand the system, write code, or debug.' + ' read road="./context/docs/grubbery-fundamentals.txt" -- full architecture' + ' read road="./context/docs/workflows.txt" -- step-by-step guides' + 'These are files YOU can read. They are NOT the same as read_manual.' + 'read_manual queries live nexus documentation for a specific path.' + 'The docs in ./context/docs/ are comprehensive written guides for you.' + '' + '# Your filesystem' + '' + ' ./config.json -- config (model, api-proxy, context_window, message_cap, channel)' + ' ./page.html -- your web UI' + ' ./about.txt -- your self-description (visible to other agents)' + ' ./context/ -- shared context (across all chats)' + ' prompts/ -- system prompt files (concatenated alphabetically)' + ' memories/ -- persistent notes you write to remember things' + ' docs/ -- YOUR REFERENCE DOCS. Read these! (see above)' + ' ./chats/main/ -- your primary chat instance' + ' chat.json -- conversation log + event loop (pokes arrive here)' + ' outbox.json -- append-only log; outbox tool writes here' + ' status.json -- current status (idle/api/tool)' + ' ./proc/tools/ -- active tool processes (DO NOT write source here)' + ' ./proc/cron/ -- active cron job processes (managed by cron_add/remove)' + ' ./apps/ -- your applications and code' + ' code/ -- your build scope (compiled by the grubbery build system)' + ' nex/ -- nexus source code' + ' lib/ -- libraries' + ' tools/ -- dynamic tool definitions (.hoon files)' + ' mar/ -- mark definitions' + ' ./children/ -- spawned child nexuses' + '' + '# Tools overview' + '' + '## File operations' + '- browse: list directory contents' + '- read: read a file (supports offset/limit for line ranges)' + '- write: write a file' + '- edit: exact string replacement in a file' + '- delete: delete a file' + '- mkdir: create a directory' + '- grep: search file contents by pattern (supports path/name/mark globs)' + '- glob: find files by path/name/mark patterns' + '' + '## Conversation history' + 'Your conversation has a sliding window -- older messages drop out of context.' + 'Use these tools to search and recall beyond the window:' + '- grep_history: search the FULL conversation (all messages ever, not just' + ' the current window) by substring. Returns matching lines with message indices.' + '- recall_messages: insert a [ref:N-M] marker that pulls old messages back' + ' into the current context at assembly time.' + '- summarize: send a message range to the LLM for targeted summarization.' + ' Always specify what kind of summary (process, decisions, technical, action-items).' + '' + '## Code and building' + '- check_bin: verify that code compiles. Use after every write to code.' + ' Takes a directory path and file stem (e.g. path="./apps/code/nex/foo" name="app").' + ' Returns compilation errors if it fails.' + '- check_bang: read the error state of a process. Every fiber process can crash;' + ' when it does, the crash trace is stored as its "bang." This tool reads that.' + ' A bang means the process at that path has crashed and needs fixing.' + '- read_manual: query the on-manu arm of the nexus governing a path.' + ' Returns live documentation embedded in nexus code about what a path does.' + ' Different from ./context/docs/ which are static reference guides you read directly.' + '- read_font: find which code namespace (./apps/code/) is responsible for' + ' compiling the code that governs a given path.' + '' + '## Nexus management' + '- create_nexus: create a child nexus in ./children/ from compiled code.' + ' The "code" arg refers to a nexus in your code namespace (e.g. "my-thing/app"' + ' for ./apps/code/nex/my-thing/app.hoon). The nexus must compile first.' + '- delete_nexus: remove a child nexus and all its contents.' + '- spawn_task: create a temporary child claw agent to handle a task.' + ' The child gets its own conversation, runs the task, and returns the result.' + ' Different from create_nexus: spawn_task creates another claw agent, while' + ' create_nexus instantiates custom nexus code you wrote.' + '- outbox: append to outbox.json to return results to a parent (used by spawned tasks).' + '' + '## Sandbox (weir)' + 'Weirs restrict what darts (effects) can pass through a directory.' + 'Darts travel UP through the tree, so a weir blocks operations that try' + 'to reach OUTSIDE the sandboxed area. No weir = fully permissive.' + 'A "veto" error means a weir somewhere along the path blocked your operation.' + '- read_weir: see sandbox permissions for a directory' + '- add_weir / del_weir / clear_weir: manage sandbox rules' + '' + '## Cron jobs' + '- cron_add: schedule a recurring message to a chat using cron expressions' + ' Format: "min hour dom month dow" (e.g. "0 9 * * *" for daily 9am UTC)' + '- cron_list: list all active cron jobs' + '- cron_remove: remove a cron job by ID' + '' + '# Building nexuses' + '' + 'A nexus is Hoon code that produces a `nexus:nexus` core with three arms:' + '' + '## on-load: initialize the filesystem' + ' |= [=sand:nexus =gain:nexus =ball:tarball]' + ' ^- [sand:nexus gain:nexus ball:tarball]' + '' + 'Called when the nexus is created or its code changes. Use the loader to' + 'set up files and directories. Key loader operations:' + ' %fall -- create file/dir only if absent (keeps existing data on reload)' + ' %over -- overwrite file/dir unconditionally (resets on reload)' + ' ver-row:loader -- version tracking for schema migrations' + '' + '## on-file: define fiber processes' + ' |= [=rail:tarball =mark]' + ' ^- spool:fiber:nexus' + '' + 'Pattern-matches on [path name] to spawn fiber processes. Each process is' + 'an event loop using the fiber monad (;< result bind:m action).' + '' + 'Common pattern for main.sig (poke handler):' + ' [~ %main.sig]' + ' ;< ~ bind:m (rise-wait:io prod "failed")' + ' |-' + ' ;< =sage:tarball bind:m take-poke:io' + ' :: handle the poke...' + ' $ :: loop back for next poke' + '' + 'Common pattern for reactive files (re-render on changes):' + ' [[%ui ~] %page.html]' + ' ;< init=view:nexus bind:m (keep:io /wire some-road ~)' + ' :: render initial state' + ' |-' + ' ;< upd=view:nexus bind:m (take-news:io /wire)' + ' :: re-render on change' + ' $' + '' + '## on-manu: documentation' + ' |= =mana:nexus' + ' ^- @t' + '' + 'Returns documentation strings for paths and files. Queried by read_manual.' + '' + '# Key fiberio operations' + '' + 'All fiber IO uses the pattern: ;< result bind:m (action:io args)' + '' + ' peek:io road mark -- read a file or directory' + ' peek-exists:io road -- check if something exists' + ' make:io road make-spec -- create a file or directory' + ' over:io road sage -- overwrite file content' + ' cull:io road -- delete a file or directory' + ' poke:io road sage -- send data to another process' + ' take-poke:io -- wait for incoming poke' + ' keep:io wire road mark -- subscribe to changes' + ' take-news:io wire -- wait for subscription update' + ' drop:io wire road -- unsubscribe' + ' replace:io vase -- overwrite own file content' + ' get-state-as:io ,type -- read own content, cast to type' + ' copy-grub:io src dst -- copy a file' + ' copy-fold:io src dst -- copy a directory' + ' sleep:io time -- wait' + ' get-our:io -- get ship name' + ' get-time:io -- get current time' + ' get-here:io -- get own location (here:nexus)' + ' get-here:io -- get absolute rail (crashes if blocked)' + ' rise-wait:io prod msg -- crash handler (put at top of process)' + '' + '# Build system' + '' + 'Code lives in ./apps/code/. The grubbery build system compiles it.' + '' + 'To write and test code:' + '1. Write source to ./apps/code/nex/my-thing/app.hoon (or lib/, mar/)' + '2. check_bin path="/apps/code/nex/my-thing" name="app"' + '3. If it fails, read the error, fix, write again, check again' + '4. Once it compiles, create_nexus to instantiate it' + '' + 'Dynamic tools: write source to ./apps/code/lib/tools/my-tool.hoon' + 'NOT ./proc/tools/ (that is where running processes live, not source code).' + 'Must produce a tool:nex-tools core (name, description, parameters, required, handler).' + 'Available immediately after check_bin passes.' + '' + '# Reference docs' + '' + 'There are two kinds of documentation:' + '' + '1. ./context/docs/ -- files in your namespace you can read directly.' + ' These are detailed written guides, not generated.' + ' Read them with: read road="./context/docs/grubbery-fundamentals.txt"' + ' grubbery-fundamentals.txt -- architecture from the ground up' + ' workflows.txt -- step-by-step guides for common tasks' + '' + '2. read_manual -- queries the on-manu arm of the nexus governing a path.' + ' This is live, contextual documentation embedded in nexus code.' + ' Each nexus defines what its directories and files do.' + ' Use it to understand unfamiliar paths: read_manual path="/some/path"' + '' + 'IMPORTANT: Before attempting to build nexuses, write code, or debug' + 'unfamiliar errors, read the docs in ./context/docs/ first.' + 'Use read_manual when you encounter a specific path and want to know' + 'what it does or what nexus governs it.' + '' + '# Key terms' + '' + 'ball -- the filesystem tree (all directories and files)' + 'nexus -- code (program) that governs a directory in the ball' + 'neck -- the mark on a directory identifying which nexus runs there' + 'fiber -- a running process attached to a file' + 'dart -- an effect emitted by a fiber (make, poke, peek, etc.)' + 'weir -- sandbox rules on a directory that filter darts passing through' + 'bang -- a crash trace stored on a process that has failed' + 'sage -- typed file content: [blot vase] (type identity + data)' + 'blot -- a mark/type identifier (e.g. [/ %json], [/ %txt])' + 'rail -- path to a file: [directory-path filename]' + 'fold -- path to a directory' + 'road -- absolute or relative path reference' + '' + '# Guidelines' + '' + '- Stay within scope. Respond to conversation directly. Only reach for tools' + ' and code when the task actually calls for it.' + '- When building code, always check_bin after writing. Fix errors iteratively.' + '- Use read_manual to understand what a specific path does.' + '- Read ./context/docs/ for architecture and workflow guides.' + '- Write memories to ./context/memories/ to persist important information.' + '- Use grep_history to search beyond your context window.' + '- When you hit an error you do not understand, read the docs before guessing.' + == + =/ fundamentals-doc=wain + :~ 'GRUBBERY FUNDAMENTALS' + '=====================' + '' + '' + '## Why Grubbery Exists' + '' + 'A Gall agent is one flat process managing one blob of state. If you' + 'want many concurrent concerns, you multiplex them yourself -- dispatch' + 'on wires, manage substates, handle interleaving. It gets complex fast.' + '' + 'Grubbery solves this by putting processes in a tree. Each file is a' + 'process with its own state. The tree structure lets you:' + ' - Decompose into many small processes, each managing one file' + ' - Group related processes in directories' + ' - Let different code govern different subtrees' + ' - Sandbox naturally via the tree hierarchy' + ' - Subscribe to any node by path' + '' + 'The namespace IS the architecture. Instead of designing internal data' + 'structures, you organize your application as a filesystem where every' + 'node is live.' + '' + '' + '## The Ball' + '' + 'Everything lives in a single in-memory tree called the ball. It is a' + 'hierarchical filesystem: directories contain files and subdirectories.' + '' + ' ball = (axal lump) -- tree of directory nodes' + ' sage = [blot vase] -- typed file content (type identity + data)' + '' + 'Paths in grubbery distinguish files from directories:' + ' rail = [path name] -- file: /foo/bar + config.json' + ' fold = path -- directory: /foo/bar/' + ' road -- can be absolute or relative' + '' + 'Common file types (blots):' + ' [/ %json] JSON data' + ' [/ %txt] text (wain = list of lines)' + ' [/ %sig] empty signal (poke endpoints)' + ' [/ %mime] binary data with MIME type' + '' + '' + '## Nexuses' + '' + 'A nexus is code that governs a directory. A directory becomes governed' + 'when it has a "neck" -- a rail identifying which nexus code to use.' + '' + 'A nexus has three arms:' + '' + ' ++on-load Sets up the directory structure via the loader.' + ' Called on creation and whenever code reloads.' + ' Returns [sand gain ball].' + '' + ' ++on-file Determines which fiber process runs at each file.' + ' Pattern-matches on [rail mark] to dispatch code.' + ' This is the primary meaning of "governs."' + '' + ' ++on-manu Returns documentation. Queried by read_manual.' + '' + 'Nexuses nest. An on-load can create subdirectories with their own' + 'necks, spawning child nexuses. Directory names encode the neck:' + ' server.server/ neck=[/ %server]' + ' claw.claw_app/ neck=[/claw %app]' + '' + '' + '## Fibers' + '' + 'A grub is a file in the namespace. It is two things at once:' + ' 1. Typed data -- the sage (blot + vase) stored in the ball' + ' 2. A running process -- the fiber, whose continuation lives in the pool' + '' + 'The file IS the fiber state. The sage is what the fiber manipulates.' + 'The continuation (the function waiting for next input) is stored' + 'separately by the runtime. Two halves of one thing.' + '' + 'A fiber is a monadic event loop using ;< bind syntax:' + ' ;< result=type bind:m (io-action args)' + ' :: use result, then continue...' + '' + 'Fibers receive intakes (pokes, subscription updates, etc) and emit' + 'darts (effects that route through the tree).' + '' + '' + '## Darts and Routing' + '' + 'A dart is an effect emitted by a fiber. Darts route through the tree:' + '' + ' 1. Resolve destination to an absolute lane' + ' 2. Find the "governor" -- nearest directory strictly ABOVE both' + ' source and destination (the neutral authority over both)' + ' 3. Walk UP from source to governor, checking weirs at each dir' + ' 4. If any weir blocks the dart -> %veto sent back to source' + ' 5. Downward movement from governor to destination is always free' + '' + 'Key dart types:' + ' %make create file or directory' + ' %cull delete file or directory' + ' %over overwrite file content' + ' %peek read a node (returns a view)' + ' %poke send data to a process' + ' %keep subscribe to changes' + ' %drop unsubscribe' + ' %manu query documentation' + ' %code look up compiled code' + ' %bang query error state' + '' + '' + '## Sandboxing (Weirs)' + '' + 'A weir is a set of rules on a directory that filters darts passing' + 'through it. It lists allowed destination prefixes for make, poke,' + 'and peek operations separately.' + '' + ' No weir = permissive (everything passes)' + ' Weirs only checked on the way UP (downward is always free)' + ' Blocked dart -> %veto intake to the sender' + '' + 'Your agent instance has a weir set by the claw app:' + ' make = ~ you cannot create/delete OUTSIDE your subtree' + ' poke = limited you can poke the system bowl and the API proxy' + ' peek = / you can READ the entire tree' + '' + 'This means: full read access, write only within your own subtree,' + 'poke restricted to specific endpoints.' + '' + '' + '## Code Namespaces' + '' + 'Directories with neck [/ %code] are code namespaces. Grubbery' + 'compiles Hoon source files in these directories into artifacts.' + '' + 'A code namespace contains:' + ' nex/ nexus definitions' + ' lib/ shared libraries' + ' mar/ mark (type) definitions' + '' + 'Code lookup walks UP the tree to find the nearest /code sibling.' + 'It is hermetic: if the nearest code namespace does not have the' + 'artifact, the lookup returns ~ (no fallback to parent namespaces).' + '' + 'Your build scope is ./apps/code/. Write source there and use' + 'check_bin to compile. Dynamic tools go in ./apps/code/lib/tools/.' + '' + '' + '## Bangs (Errors)' + '' + 'A bang is a crash trace that replaces normal operation.' + '' + 'Process-level: when a fiber crashes, its continuation is replaced' + 'with the crash trace. The process is dead; queued inputs sit idle.' + 'A successful respawn (e.g. on code reload) heals it.' + '' + 'Nexus-level: when on-load itself crashes, the bang cascades to every' + 'file underneath -- the whole subtree is frozen.' + '' + 'Use check_bang to inspect error state at a path.' + '' + '' + '## Subscriptions' + '' + 'Fibers can watch other files/directories for changes:' + ' keep -> subscribe, receive %bond (ack + initial view)' + ' news -> updates when the target changes' + ' drop -> unsubscribe, receive %fell (confirmed)' + ' fell -> also arrives if the target is deleted or weir breaks it' + '' + 'Under the hood, the runtime diffs version counters (born) before' + 'and after mutations, finds changed lanes, and delivers %news.' + '' + '' + '## Marks (Blots)' + '' + 'A blot is a type identity for file content: [/ %json], [/wallet %account].' + 'A marc is a compiled mark core with three arms:' + ' vale validate a noun into a vase' + ' grow convert outward to another blot' + ' grab convert inward from another blot' + '' + 'Source lives in /mar/ in code namespaces. The runtime validates' + 'content through marc vale on write.' + '' + '' + '## The Seven Structures' + '' + 'Grubbery maintains seven parallel structures, all keyed by path:' + ' Ball data tree (files and directories)' + ' Pool process tree (fiber continuations + input queues)' + ' Born version counters (basis for subscription system)' + ' Sand weir policy tree' + ' Gain history policy tree (which files track versions)' + ' Silo content-addressed store for historical versions' + ' Code compiled artifacts per code namespace' + '' + 'Ball holds data. Pool holds processes. They mirror each other:' + 'every grub in the ball has a corresponding process in the pool.' + '' + '' + '## Your Place in the Tree' + '' + ' / (root)' + ' code/ system code namespace' + ' claw.claw_app/' + ' agents/' + ' you.claw_agent/ your instance' + ' config.json' + ' main.sig your event loop' + ' context/' + ' chat.json conversation log' + ' prompts/' + ' memories/' + ' docs/ these docs' + ' apps/' + ' code/ YOUR build scope' + ' tools/ running tool processes' + ' children/ sub-agent instances' + '' + 'You are a fiber process at main.sig, governed by the claw agent' + 'nexus. Your filesystem is real and persistent. Files survive across' + 'sessions. Code you write in ./apps/code/ gets compiled. Nexuses you' + 'create in ./apps/ are live programs. Everything is scoped to your' + 'subtree -- nothing you build outlives your agent instance.' + == + =/ workflows-doc=wain + :~ 'COMMON WORKFLOWS' + '================' + '' + '' + '## Two spaces, two purposes' + '' + './apps/ is your application space:' + ' ./apps/code/ source code (nexus defs, libs, marks, tools)' + ' ./apps/my-thing/ running nexus instances you create' + '' + './children/ is for sub-agents:' + ' spawn_task creates temporary claw agent instances here' + ' These are other AIs handling subtasks, NOT custom programs' + '' + 'You NEVER modify your own nexus code -- it is authored by the developer,' + 'compiled in the parent code namespace, and governs you from above.' + '' + '' + '## Writing a dynamic tool' + '' + 'A tool is a .hoon file producing a tool:nex-tools core.' + '' + '1. write road="./apps/code/lib/tools/my-tool.hoon" mark="hoon"' + '2. check_bin code_road="./apps/code/" path="/lib/tools" name="my-tool"' + '3. Read errors, fix, rewrite, check again until it compiles' + '4. Once compiled, the tool is live -- no restart needed' + '' + 'The filename can be anything -- the tool is registered by its ++name arm,' + 'not the filename. But convention is to match (with hyphens in filename,' + 'underscores in name).' + '' + 'A tool core has these arms:' + ' ++name @t cord, the tool name users call' + ' ++description @t cord, what it does' + ' ++parameters (map @t parameter-def:tools), input params' + ' ++required (list @t), which params are required' + ' ++handler tool-handler:tools, fiber that runs on invocation' + '' + 'The handler receives tool-state (with args map) via get-state-as:io' + 'and returns a tool-result (%text or %error).' + '' + '### Tips' + '' + '- Always import the tools library first:' + ' /< tools /lib/nex/tools.hoon' + ' ^- tool:tools' + ' This gives you tool-state:tools, tool-result:tools, parameter-def:tools.' + '' + '- For entropy use get-entropy:io (returns @uvJ).' + ' For current time use get-now:io (returns @da).' + ' For location use get-here:io (returns rail:tarball).' + '' + '- Read args from the tool-state args map:' + ' ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools)' + ' =/ val (~(get by args.st) )' + ' JSON numbers: ?>(?=(%n -.j) (rash p.j dem)) gives @ud' + ' JSON strings: ?>(?=(%s -.j) p.j) gives @t' + ' JSON booleans: ?>(?=(%b -.j) p.j) gives ?' + '' + '- Write tool files with mark="hoon" so they compile as Hoon source.' + ' Without mark, files store as raw mime and will not compile.' + '' + '- Read existing tools in ./apps/code/lib/tools/ for reference.' + ' Also read ./apps/code/lib/nex/tools.hoon for the type definitions.' + '' + '' + '## Building a custom nexus' + '' + '1. Write the nexus source:' + ' write path="./apps/code/nex/my-thing/app.hoon"' + ' Must produce a nexus:nexus core (on-load, on-file, on-manu).' + '' + '2. Compile:' + ' check_bin path="./apps/code/nex/my-thing" name="app"' + ' Fix errors iteratively until it builds.' + '' + '3. Instantiate:' + ' create_nexus name="my-instance" code="my-thing/app"' + ' Creates ./apps/my-instance/ with a neck pointing to your code.' + ' on-load runs and sets up its filesystem.' + '' + '4. Interact:' + ' Use write/read on files in ./apps/my-instance/' + ' The instance is a live program with its own processes.' + '' + 'The code arg in create_nexus is the path within your code namespace' + '(./apps/code/nex/), NOT a filesystem path.' + '' + '' + '## Common mistakes' + '' + '- Writing source to ./proc/tools/ -- that holds running tool PROCESSES,' + ' not source code. Source goes in ./apps/code/lib/tools/.' + '' + '- Manually writing files into nexus instances. Use create_nexus to' + ' instantiate, then interact through its own files.' + '' + '- Confusing the three layers: ball = data, nexus = code, fiber =' + ' process. You are a fiber, governed by a nexus, in the ball.' + '' + '- check_bin takes a directory path + file stem, not a file path.' + ' E.g. path="./apps/code/nex/foo" name="app".' + '' + '- Writing the wrong type to a typed file. Files have typed content' + ' (sage = blot + vase). Type mismatches crash.' + '' + '- Trying to poke or create outside your subtree. Your weir blocks' + ' it -- you will get a %veto. Use check_bang to inspect errors.' + == + =/ default-conv=json [%a ~] + =/ code-dir=ball:tarball [`[~ `[/ %code] ~] ~] + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'config.json'] %.n [~ [/ %json] !>(default-config)]] + :: /main.sig: chat lifecycle + message routing + [%over %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + :: /chats/main: primary chat instance + [%fall %| /chats [~ ~] [~ ~] empty-dir:loader] + [%fall %| /chats/main [~ ~] [~ ~] empty-dir:loader] + [%fall %& [/chats/main %'chat.json'] %.n [~ [/ %json] !>(default-conv)]] + [%fall %& [/chats/main %'outbox.json'] %.n [~ [/ %json] !>([%a ~])]] + [%over %& [/chats/main %'status.json'] %.n [~ [/ %json] !>((pairs:enjs:format ~[['state' s+'idle']]))]] + :: /proc/tools: tool execution (flat, [chat]_[tid] naming) + [%fall %| /proc [~ ~] [~ ~] empty-dir:loader] + [%fall %| /proc/tools [~ ~] [~ ~] empty-dir:loader] + [%fall %| /proc/cron [~ ~] [~ ~] empty-dir:loader] + :: /context: shared prompts, memories, docs + [%fall %| /context [~ ~] [~ ~] empty-dir:loader] + [%fall %| /context/prompts [~ ~] [~ ~] empty-dir:loader] + [%fall %& [/context/prompts %'main.txt'] %.n [~ [/ %txt] !>(default-prompt)]] + [%fall %| /context/memories [~ ~] [~ ~] empty-dir:loader] + [%fall %| /context/docs [~ ~] [~ ~] empty-dir:loader] + [%over %& [/context/docs %'grubbery-fundamentals.txt'] %.n [~ [/ %txt] !>(fundamentals-doc)]] + [%over %& [/context/docs %'workflows.txt'] %.n [~ [/ %txt] !>(workflows-doc)]] + :: /apps: applications and code + [%fall %| /apps [~ ~] [~ ~] empty-dir:loader] + [%fall %| /apps/code [~ ~] [~ ~] code-dir] + [%fall %| /apps/code/nex [~ ~] [~ ~] empty-dir:loader] + [%fall %| /apps/code/lib [~ ~] [~ ~] empty-dir:loader] + [%fall %| /apps/code/lib/tools [~ ~] [~ ~] empty-dir:loader] + [%fall %| /apps/code/mar [~ ~] [~ ~] empty-dir:loader] + :: /ui/chats.json: manifest of active chats + [%fall %| /ui [~ ~] [~ ~] empty-dir:loader] + [%fall %& [/ui %'chats.json'] %.n [~ [/ %json] !>([%a ~[s+'main']])]] + :: /about.txt: self-description visible to other agents + =/ default-about=wain + :~ 'A general-purpose claw agent. No specific role assigned yet.' + == + [%fall %& [/ %'about.txt'] %.n [~ [/ %txt] !>(default-about)]] + :: /children: spawned child nexuses + [%fall %| /children [~ ~] [~ ~] empty-dir:loader] + :: ui + [%over %& [/ %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html (chat-page "" ""))))]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /main.sig: chat lifecycle + message routing + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%claw main.sig: failed") + :: rebuild chats.json from /chats/ directory on every startup + ;< chats-dir=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%| /chats]) + ;< =seen:nexus bind:m (peek:io chats-dir ~) + =/ names=(list @t) + ?. ?=([%& %ball *] seen) ~['main'] + =/ dirs=(list @ta) ~(tap in ~(key by dir.ball.p.seen)) + ?~ dirs ~['main'] + (sort dirs aor) + =/ manifest=json [%a (turn names |=(n=@t s+n))] + ;< chats-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%& /ui %'chats.json']) + ;< exists=? bind:m (peek-exists:io chats-road) + ;< ~ bind:m + ?: exists + (over:io chats-road [[/ %json] !>(manifest)]) + (make:io chats-road |+[%.n [[/ %json] !>(manifest)] ~]) + |- + ;< =sage:tarball bind:m take-poke:io + =/ jon=json (fall (mole |.(!<(json q.sage))) *json) + ?. ?=(%o -.jon) $ + =/ act=@t (get-str jon 'action') + ?+ act $ + %'create-chat' + =/ chat-name=@ta + (fall (bind (~(get by p.jon) 'name') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: =('' chat-name) + ~& >>> "%claw main.sig: create-chat missing name" + $ + :: check if chat already exists + ;< chat-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%& /chats/[chat-name] %'chat.json']) + ;< exists=? bind:m (peek-exists:io chat-road) + ?: exists + ~& >>> ["%claw main.sig: chat already exists" chat-name] + $ + ~& > ["%claw main.sig: creating chat" chat-name] + :: create /chats/[name]/ directory + ;< chat-dir=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%| /chats/[chat-name]]) + ;< ~ bind:m (make:io chat-dir &+[*sand:nexus *gain:nexus [~ ~]]) + :: create chat.json (empty convo) + ;< ~ bind:m (make:io chat-road |+[%.n [[/ %json] !>([%a ~])] ~]) + :: create outbox.json + ;< outbox-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%& /chats/[chat-name] %'outbox.json']) + ;< ~ bind:m (make:io outbox-road |+[%.n [[/ %json] !>([%a ~])] ~]) + :: create status.json + =/ idle=json (pairs:enjs:format ~[['state' s+'idle']]) + ;< status-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%& /chats/[chat-name] %'status.json']) + ;< ~ bind:m (make:io status-road |+[%.n [[/ %json] !>(idle)] ~]) + :: update chats.json manifest + ;< chat-list=(list @t) bind:m read-chat-list + ;< ~ bind:m (write-chat-list (snoc chat-list chat-name)) + ~& > ["%claw main.sig: chat created" chat-name] + $ + :: + %'delete-chat' + =/ chat-name=@ta + (fall (bind (~(get by p.jon) 'name') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: =('' chat-name) + ~& >>> "%claw main.sig: delete-chat missing name" + $ + ~& > ["%claw main.sig: deleting chat" chat-name] + ;< chat-dir=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%| /chats/[chat-name]]) + ;< ~ bind:m (cull:io chat-dir) + :: TODO: clean up orphaned tool files in /proc/tools/ prefixed with chat-name + :: update chats.json manifest + ;< chat-list=(list @t) bind:m read-chat-list + ;< ~ bind:m (write-chat-list (skip chat-list |=(n=@t =(n chat-name)))) + ~& > ["%claw main.sig: chat deleted" chat-name] + $ + :: + %'message' + =/ chat=@t (get-str jon 'chat') + =/ content=@t (get-str jon 'content') + ?: |(=('' chat) =('' content)) + ~& >>> "%claw main.sig: message missing chat or content" + $ + =/ chat-name=@ta (crip (cass:so (trip chat))) + =/ msg=json + (pairs:enjs:format ~[['action' s+'message'] ['content' s+content]]) + ;< chat-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%& /chats/[chat-name] %'chat.json']) + ;< ~ bind:m (poke:io chat-road [/ %json] !>(msg)) + $ + == + :: /chats/*/chat.json: per-chat event loop + :: + [[%chats @ ~] %'chat.json'] + =/ chat-name=@ta i.t.path.rail + ;< ~ bind:m (rise-wait:io prod "%claw chat: failed") + :: if main chat, watch config and subscribe to channel inbox + ;< [cur-chan=@t chan-seen=@ud] bind:m (init-channel-sub chat-name) + |- + ;< =main-event bind:m take-main-event + ~& >> ["%claw main.sig: got event" -.main-event] + ?- -.main-event + %news + :: channel inbox: new messages from linked channel + ?: ?=([%'chan-inbox' ~] wire.main-event) + ?. ?=(%file -.view.main-event) $ + =/ j=json (fall (mole |.(!<(json q.sage.view.main-event))) *json) + =/ msgs=(list json) + ?. ?=(%a -.j) ~ + p.j + =/ new-count=@ud (lent msgs) + ?: (lte new-count chan-seen) $ + =/ new-msgs=(list json) (slag chan-seen msgs) + =. chan-seen new-count + =/ texts=(list [from=@t text=@t]) + %+ murn new-msgs + |= m=json + ?. ?=(%o -.m) ~ + =/ text (~(get by p.m) 'text') + =/ from (~(get by p.m) 'from') + ?. ?=([~ %s *] text) ~ + `[(fall (bind from |=(j=json ?>(?=(%s -.j) p.j))) 'unknown') p.u.text] + ?~ texts $ + ~& > ["%claw: channel inbound" (lent texts) "messages"] + ;< config=json bind:m read-config + =/ model=@t (get-str config 'model') + =/ api-name=@t + =/ p (get-str config 'api-proxy') + ?:(=('' p) 'anthropic' p) + =/ ctx-window=@ud (get-num config 'context_window' 80.000) + =/ msg-cap=@ud (get-num config 'message_cap' 20.000) + ;< =convo bind:m read-chat + =/ combined=@t + %- crip + %- zing + %+ turn texts + |= [from=@t text=@t] + "[{(trip from)} via channel]: {(trip text)}\0a" + =/ updated=^convo (snoc convo [%msg 'user' combined]) + ;< ~ bind:m (write-chat updated) + ;< tools=(map @t tool:nex-tools) bind:m get-tools + ;< final=^convo bind:m (agent-turn chat-name model api-name ctx-window msg-cap updated tools) + ;< ~ bind:m (set-status chat-name [%idle ~]) + ;< ~ bind:m (forward-to-channel chat-name final updated) + $ + :: config changed: check if channel field changed + ?: ?=([%cfg ~] wire.main-event) + ?. =(%main chat-name) $ + ;< config=json bind:m read-config + =/ new-chan=@t (get-str config 'channel') + ?: =(new-chan cur-chan) $ + ~& > ["%claw: channel changed" cur-chan "=>" new-chan] + :: drop old subscription if any + ;< ~ bind:m + ?: =('' cur-chan) (pure:m ~) + =/ old-fold=path (cord-to-path cur-chan) + ;< old-road=road:tarball bind:m + (ancestor-road:io [/claw %app] [%& (weld /channels old-fold) %'inbox.json']) + (drop:io /chan-inbox old-road) + :: subscribe to new channel if any + ?: =('' new-chan) + =. cur-chan '' + =. chan-seen 0 + $ + =/ new-fold=path (cord-to-path new-chan) + ;< new-road=road:tarball bind:m + (ancestor-road:io [/claw %app] [%& (weld /channels new-fold) %'inbox.json']) + ;< inbox-view=view:nexus bind:m (keep:io /chan-inbox new-road ~) + =/ cnt=@ud + ?. ?=(%file -.inbox-view) 0 + =/ j=json (fall (mole |.(!<(json q.sage.inbox-view))) *json) + ?. ?=(%a -.j) 0 + (lent p.j) + ~& >> ["%claw: subscribed to new channel, seen" cnt] + =. cur-chan new-chan + =. chan-seen cnt + $ + :: deferred tool result arrived via subscription + :: only handle /tool-done/* wires; ignore stale news from other subs + ?. ?=([%'tool-done' @ ~] wire.main-event) $ + =/ tid=@ta i.t.wire.main-event + ?. ?=(%file -.view.main-event) $ + =/ tst=tool-state:nex-tools !<(tool-state:nex-tools q.sage.view.main-event) + ?. =(%done step.tst) $ + =/ tool-file=@ta (crip "{(trip chat-name)}_{(trip tid)}") + ;< tool-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /proc/tools tool-file]) + ;< ~ bind:m (drop:io /tool-done/[tid] tool-road) + =/ result-text=@t (extract-tool-result tst) + ~& > ["%claw: deferred result for" tid] + ;< config=json bind:m read-config + =/ model=@t (get-str config 'model') + =/ api-name=@t + =/ p (get-str config 'api-proxy') + ?:(=('' p) 'anthropic' p) + =/ ctx-window=@ud (get-num config 'context_window' 80.000) + =/ msg-cap=@ud (get-num config 'message_cap' 20.000) + ;< =convo bind:m read-chat + =/ updated=^convo + (snoc convo [%msg 'user' (crip "[spawn_task result]: {(trip result-text)}")]) + ;< ~ bind:m (write-chat updated) + ;< tools=(map @t tool:nex-tools) bind:m get-tools + ;< final=^convo bind:m (agent-turn chat-name model api-name ctx-window msg-cap updated tools) + ;< ~ bind:m (set-status chat-name [%idle ~]) + ;< ~ bind:m (forward-to-channel chat-name final updated) + $ + %poke + ~& >> ["%claw poke from:" from.main-event] + =/ =sage:tarball sage.main-event + ~& >> ["%claw poke: mark" name.p.sage] + ?+ name.p.sage $ + %json + =/ jon=json !<(json q.sage) + ~& >> ["%claw poke json:" jon] + ?. ?=([%o *] jon) $ + =/ act=@t (fall (bind (~(get by p.jon) 'action') |=(=json ?>(?=(%s -.json) p.json))) '') + ~& >> ["%claw poke action:" act] + ?+ act $ + %'interrupt' + :: when inside await-call-or-interrupt, this poke is consumed there. + :: when we reach here, it means we're in the main event loop — + :: check for a deferred tool to kill. + =/ tool-id=@t + (fall (bind (~(get by p.jon) 'id') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: =('' tool-id) + ~& > "%claw: interrupt (no request in-flight)" + $ + :: kill deferred tool proc + =/ tid=@ta (slav %tas tool-id) + =/ tool-file=@ta (crip "{(trip chat-name)}_{(trip tid)}") + ;< tool-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /proc/tools tool-file]) + ;< ~ bind:m (drop:io /tool-done/[tid] tool-road) + ;< ~ bind:m (cull:io tool-road) + ~& > ["%claw: killed deferred tool" tid] + ;< ~ bind:m (set-status chat-name [%idle ~]) + :: append interrupted marker to chat + ;< =convo bind:m read-chat + =/ updated=^convo + (snoc convo [%tool-result tool-id '[tool interrupted by user]']) + ;< ~ bind:m (write-chat updated) + $ + :: + %'set-model' + =/ model=@t (fall (bind (~(get by p.jon) 'model') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: =('' model) + ~& >>> "%claw: ignoring empty model" + $ + ;< config=json bind:m read-config + =/ updated=json + [%o (~(put by ?>(?=(%o -.config) p.config)) 'model' s+model)] + ;< ~ bind:m (write-config updated) + ~& > ["%claw: model set to" model] + $ + :: + %'message' + =/ content=@t (fall (bind (~(get by p.jon) 'content') |=(=json ?>(?=(%s -.json) p.json))) '') + ~& >> ["%claw message:" content] + ?: =('' content) $ + ;< outbox=(list json) bind:m (read-outbox chat-name) + ?: !=(~ outbox) + ~& > "%claw: nexus finished, ignoring message" + $ + ;< config=json bind:m read-config + =/ model=@t (get-str config 'model') + =/ api-name=@t + =/ p (get-str config 'api-proxy') + ?:(=('' p) 'anthropic' p) + =/ ctx-window=@ud (get-num config 'context_window' 80.000) + =/ msg-cap=@ud (get-num config 'message_cap' 20.000) + :: read chat, append user message + ;< =convo bind:m read-chat + =/ updated=^convo (snoc convo [%msg 'user' content]) + ;< ~ bind:m (write-chat updated) + :: discover tools + ;< tools=(map @t tool:nex-tools) bind:m get-tools + :: enter agent turn loop + ;< final=^convo bind:m (agent-turn chat-name model api-name ctx-window msg-cap updated tools) + ;< ~ bind:m (set-status chat-name [%idle ~]) + ;< ~ bind:m (forward-to-channel chat-name final updated) + $ + :: + %'clear' + ;< ~ bind:m (write-chat ~) + ~& > "%claw: chat cleared" + $ + :: + %'link-channel' + :: {"action": "link-channel", "channel": "telegram/main-bot"} + =/ chan-road=@t + (fall (bind (~(get by p.jon) 'channel') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: =('' chan-road) $ + ;< config=json bind:m read-config + =/ updated=json + [%o (~(put by ?>(?=(%o -.config) p.config)) 'channel' s+chan-road)] + ;< ~ bind:m (write-config updated) + ~& > ["%claw: linked to channel" chan-road] + $ + :: + %'unlink-channel' + ;< config=json bind:m read-config + =/ updated=json + [%o (~(put by ?>(?=(%o -.config) p.config)) 'channel' s+'')] + ;< ~ bind:m (write-config updated) + ~& > "%claw: unlinked from channel" + $ + == + == + == + :: /proc/tools/*: tool execution ([chat]_[tid] naming) + :: + [[%proc %tools ~] @] + ;< ~ bind:m (rise-tool prod) + ;< st=tool-state:nex-tools bind:m + (get-state-as:io ,tool-state:nex-tools) + ?: =(%done step.st) (pure:m ~) + :: tool execution + ;< got=(each tool:nex-tools tang) bind:m + (await-tool tool.st) + ?: ?=(%| -.got) + =/ result-data=json + (pairs:enjs:format ~[['type' s+'error'] ['message' s+(crip "Unknown tool: {(trip tool.st)}")]]) + (replace:io !>(`tool-state:nex-tools`[tool.st args.st %done data.st `result-data])) + =/ tl=tool:nex-tools p.got + ;< result=tool-result:nex-tools bind:m handler.tl + =/ result-json=json + ?- -.result + %text (pairs:enjs:format ~[['type' s+'text'] ['text' s+text.result]]) + %error (pairs:enjs:format ~[['type' s+'error'] ['message' s+message.result]]) + == + (replace:io !>(`tool-state:nex-tools`[tool.st args.st %done data.st `result-json])) + :: /proc/cron/*: cron job fiber (schedule + fire loop) + :: + [[%proc %cron ~] @] + ;< ~ bind:m (rise-wait:io prod "%claw cron: failed") + ;< st=json bind:m (get-state-as:io ,json) + ?. ?=(%o -.st) stay:m + =/ schedule=@t + (fall (bind (~(get by p.st) 'schedule') |=(=json ?>(?=(%s -.json) p.json))) '') + =/ chat=@t + (fall (bind (~(get by p.st) 'chat') |=(=json ?>(?=(%s -.json) p.json))) '') + =/ message=@t + (fall (bind (~(get by p.st) 'message') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: |(=('' schedule) =('' chat) =('' message)) + ~& >>> "%claw cron: missing schedule, chat, or message" + stay:m + |- + ;< now=@da bind:m get-time:io + =/ next=(unit @da) (next-cron-fire:cron schedule now) + ?~ next + ~& >>> "%claw cron: invalid schedule {(trip schedule)}" + stay:m + ~& > "%claw cron: waiting until {(scow %da u.next)}" + ;< ~ bind:m + (poke:io &+&+[/sys/behn %'main.timer-state'] [[/ %timer-set] !>(`[wire @da]`[/cron u.next])]) + ;< * bind:m take-poke:io + ~& > "%claw cron: firing to chat {(trip chat)}" + =/ msg=json + (pairs:enjs:format ~[['action' s+'message'] ['content' s+message]]) + ;< chat-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%& /chats/[(crip (cass:so (trip chat)))] %'chat.json']) + ;< ~ bind:m (poke:io chat-road [/ %json] !>(msg)) + $ + :: /page.html: rendered chat page + :: + [~ %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%claw page: failed") + ;< here=rail:tarball bind:m get-here-abs:io + =/ ball-id=tape + %- zing + %+ join "/" + ^- (list tape) + (turn path.here trip) + ;< app-road=road:tarball bind:m + (ancestor-road:io [/claw %app] [%& / %'page.html']) + =/ app-url=tape + ?: ?=([%| * %& *] app-road) + =/ steps=@ud p.p.app-road + =/ base=path (scag (sub (lent path.here) steps) path.here) + =/ rel-path=path path.p.q.p.app-road + =/ full=path (weld base rel-path) + =/ pax=tape + %- zing + %+ join "/" + ^- (list tape) + (turn full trip) + "/grubbery/ball/{pax}/{(trip name.p.q.p.app-road)}" + "" + ;< ~ bind:m (replace:io !>((crip (en-xml:html (chat-page ball-id app-url))))) + stay:m + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under claw.' + ~ + 'AI agent nexus. Chat with LLMs, build sub-nexuses.' + == + %| + ?+ rail.p.mana 'File under claw.' + [~ %'config.json'] 'Agent config: model, api-proxy, context_window, message_cap, channel.' + [~ %'main.sig'] 'Chat lifecycle (create/delete) + message routing.' + [~ %'page.html'] 'Chat interface.' + [[%chats @ ~] %'chat.json'] 'Chat conversation log + event loop. Pokes arrive here.' + [[%chats @ ~] %'status.json'] 'Chat status: idle/api/tool.' + [[%chats @ ~] %'outbox.json'] 'Append-only result log.' + == + == + -- +:: +:: types and helpers +:: +|% +:: conversation entry +:: ++$ entry + $% [%msg role=@t content=@t] + [%tool-use id=@t name=@t input=json] + [%tool-result tool-use-id=@t content=@t] + == +:: a conversation is an ordered list of entries +:: ++$ convo (list entry) +:: agent status for UI +:: ++$ agent-status + $% [%idle ~] + [%api ~] + [%tool id=@ta] + == +:: +:: +++ get-str + |= [jon=json key=@t] + ^- @t + ?~ jon '' + ?. ?=(%o -.jon) '' + =/ val=(unit json) (~(get by p.jon) key) + ?~ val '' + ?. ?=(%s -.u.val) '' + p.u.val +:: +++ get-num + |= [jon=json key=@t default=@ud] + ^- @ud + ?. ?=(%o -.jon) default + =/ val=(unit json) (~(get by p.jon) key) + ?~ val default + ?. ?=(%n -.u.val) default + (fall (rush p.u.val dem) default) +:: +++ resolve-proxy + |= api-name=@t + =/ m (fiber:fiber:nexus ,road:tarball) + ^- form:m + ?: =('' api-name) + (pure:m (cord-to-road:tarball '')) + (ancestor-road:io [/claw %app] [%& /apis/[api-name] %'main.sig']) +:: ++$ main-event + $% [%poke =from:fiber:nexus =sage:tarball] + [%news =wire =view:nexus] + == +:: +++ take-main-event + =/ m (fiber:fiber:nexus ,main-event) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error:io dart.u.in)] + [~ %poke * *] + ?: =([/ %timer-wake] p.sage.u.in) + [%skip ~] + [%done %poke [from sage]:u.in] + [~ %news * *] + [%done %news [wire view]:u.in] + == +:: +:: +++ read-prompts + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< prompts-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%| /context/prompts]) + ;< =seen:nexus bind:m (peek:io prompts-road ~) + ?. ?=([%& %ball *] seen) + (pure:m '') + ?~ fil.ball.p.seen + (pure:m '') + =/ names=(list @ta) + (sort ~(tap in ~(key by contents.u.fil.ball.p.seen)) aor) + =/ parts=(list @t) ~ + |- + ?~ names + ?~ parts (pure:m '') + =/ ordered=(list @t) (flop parts) + =/ out=tape + %- zing + %+ join "\0a\0a" + ^- (list tape) + (turn ordered trip) + (pure:m (crip out)) + =/ name=@ta i.names + ;< file-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /context/prompts name]) + ;< file-seen=seen:nexus bind:m (peek:io file-road ~) + ?. ?=([%& %file *] file-seen) + $(names t.names) + ;< =mime bind:m (sage-to-mime:io sage.p.file-seen) + =/ txt=@t (crip (trip q.q.mime)) + ?: =('' txt) + $(names t.names) + $(names t.names, parts [txt parts]) +:: +++ read-memories + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< mem-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%| /context/memories]) + ;< =seen:nexus bind:m (peek:io mem-road ~) + ?. ?=([%& %ball *] seen) + (pure:m '') + ?~ fil.ball.p.seen + (pure:m '') + =/ names=(list @ta) + (sort ~(tap in ~(key by contents.u.fil.ball.p.seen)) aor) + =/ parts=(list @t) ~ + |- + ?~ names + ?~ parts (pure:m '') + =/ ordered=(list @t) (flop parts) + =/ out=tape + %- zing + %+ join "\0a\0a" + ^- (list tape) + (turn ordered trip) + (pure:m (crip out)) + =/ name=@ta i.names + ;< file-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /context/memories name]) + ;< file-seen=seen:nexus bind:m (peek:io file-road ~) + ?. ?=([%& %file *] file-seen) + $(names t.names) + ;< =mime bind:m (sage-to-mime:io sage.p.file-seen) + =/ txt=@t (crip (trip q.q.mime)) + ?: =('' txt) + $(names t.names) + $(names t.names, parts [txt parts]) +:: +++ read-config + =/ m (fiber:fiber:nexus ,json) + ^- form:m + ;< road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& / %'config.json']) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m *json) + (pure:m (fall (mole |.(!<(json q.sage.p.seen))) *json)) +:: +++ write-config + |= updated=json + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& / %'config.json']) + (over:io road [[/ %json] !>(updated)]) +:: +++ read-outbox + |= chat-name=@ta + =/ m (fiber:fiber:nexus ,(list json)) + ^- form:m + ;< road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /chats/[chat-name] %'outbox.json']) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m ~) + =/ jon=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + ?. ?=(%a -.jon) (pure:m ~) + (pure:m p.jon) +:: +++ init-channel-sub + |= chat-name=@ta + =/ m (fiber:fiber:nexus ,[@t @ud]) + ^- form:m + ?. =(%main chat-name) (pure:m ['' 0]) + :: watch config for channel changes + ;< cfg-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& / %'config.json']) + ;< * bind:m (keep:io /cfg cfg-road ~) + ;< chan-name=@t bind:m read-channel + ?: =('' chan-name) (pure:m ['' 0]) + =/ chan-fold=path (cord-to-path chan-name) + ;< inbox-road=road:tarball bind:m + (ancestor-road:io [/claw %app] [%& (weld /channels chan-fold) %'inbox.json']) + ;< inbox-view=view:nexus bind:m (keep:io /chan-inbox inbox-road ~) + =/ cnt=@ud + ?. ?=(%file -.inbox-view) 0 + =/ j=json (fall (mole |.(!<(json q.sage.inbox-view))) *json) + ?. ?=(%a -.j) 0 + (lent p.j) + ~& >> ["%claw: channel inbox subscribed, seen" cnt] + (pure:m [chan-name cnt]) +:: +++ read-channel + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< config=json bind:m read-config + (pure:m (get-str config 'channel')) +:: +++ read-chat-list + =/ m (fiber:fiber:nexus ,(list @t)) + ^- form:m + ;< road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /ui %'chats.json']) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m ~['main']) + =/ jon=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + ?. ?=(%a -.jon) (pure:m ~['main']) + (pure:m (murn p.jon |=(j=json ?.(?=(%s -.j) ~ `p.j)))) +:: +++ write-chat-list + |= names=(list @t) + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /ui %'chats.json']) + (over:io road [[/ %json] !>([%a (turn names |=(n=@t s+n))])]) +:: +++ set-status + |= [chat-name=@ta st=agent-status] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ status=json + ?- -.st + %idle (pairs:enjs:format ~[['state' s+'idle']]) + %api (pairs:enjs:format ~[['state' s+'api']]) + %tool (pairs:enjs:format ~[['state' s+'tool'] ['id' s+id.st]]) + == + ;< road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /chats/[chat-name] %'status.json']) + (over:io road [[/ %json] !>(status)]) +:: +++ join-texts + |= texts=(list @t) + ^- @t + ?~ texts '' + =/ acc=tape (trip i.texts) + |- + ?~ t.texts (crip acc) + $(t.texts t.t.texts, acc (weld acc (weld "\0a\0a" (trip i.t.texts)))) +:: +:: +signal-typing: send typing indicator to linked channel +:: +++ signal-typing + |= chat-name=@ta + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. =(%main chat-name) (pure:m ~) + ;< chan-name=@t bind:m read-channel + ?: =('' chan-name) (pure:m ~) + =/ chan-fold=path (cord-to-path chan-name) + ;< send-road=road:tarball bind:m + (ancestor-road:io [/claw %app] [%& (weld /channels chan-fold) %'send.sig']) + =/ typing-body=json + (pairs:enjs:format ~[['action' s+'typing']]) + ;< ~ bind:m (poke:io send-road [/ %json] !>(typing-body)) + (pure:m ~) +:: +:: +forward-to-channel: if conv has a linked channel, send new assistant msgs +:: +++ forward-to-channel + |= [chat-name=@ta final=convo before=convo] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. =(%main chat-name) (pure:m ~) + ;< chan-name=@t bind:m read-channel + ?: =('' chan-name) (pure:m ~) + :: extract new assistant messages (final has more entries than before) + =/ new-entries=(list entry) (slag (lent before) final) + =/ texts=(list @t) + %+ murn new-entries + |= =entry + ?. ?=(%msg -.entry) ~ + ?. =('assistant' role.entry) ~ + `content.entry + ?~ texts (pure:m ~) + =/ combined=@t (join-texts texts) + =/ chan-fold=path (cord-to-path chan-name) + ;< send-road=road:tarball bind:m + (ancestor-road:io [/claw %app] [%& (weld /channels chan-fold) %'send.sig']) + =/ send-body=json + (pairs:enjs:format ~[['text' s+combined]]) + ~& > ["%claw: forwarding to channel" chan-name] + ;< ~ bind:m (poke:io send-road [/ %json] !>(send-body)) + (pure:m ~) +:: +:: +strip-hoon: remove .hoon suffix from filename +:: +++ strip-hoon + |= name=@ta + ^- @ta + =/ t=tape (trip name) + =/ len=@ud (lent t) + ?. (gth len 5) name + ?. =(".hoon" (slag (sub len 5) t)) name + (crip (scag (sub len 5) t)) +:: +:: +get-tool-chat-name: extract chat name from tool filename +:: +:: Tool files are named [chat]_[tid]. @ta can't contain '_', +:: so splitting on first '_' reliably gives the chat name. +:: Falls back to 'main' if no underscore found. +:: +++ get-tool-chat-name + |= =rail:tarball + ^- @ta + =/ t=tape (trip name.rail) + =/ idx=(unit @ud) (find "_" t) + ?~ idx %main + (crip (scag u.idx t)) +:: +:: built-in tools map +:: +++ builtins + ^- (map @t tool:nex-tools) + %- malt + :~ [name:browse-tool browse-tool] + [name:read-tool read-tool] + [name:write-tool write-tool] + [name:edit-tool edit-tool] + [name:delete-tool delete-tool] + [name:mkdir-tool mkdir-tool] + [name:create-nexus-tool create-nexus-tool] + [name:delete-nexus-tool delete-nexus-tool] + [name:check-bin-tool check-bin-tool] + [name:check-bang-tool check-bang-tool] + [name:read-manual-tool read-manual-tool] + [name:read-font-tool read-font-tool] + [name:read-weir-tool read-weir-tool] + [name:add-weir-tool add-weir-tool] + [name:del-weir-tool del-weir-tool] + [name:clear-weir-tool clear-weir-tool] + [name:outbox-tool outbox-tool] + [name:spawn-task-tool spawn-task-tool] + [name:grep-files-tool grep-files-tool] + [name:glob-files-tool glob-files-tool] + [name:grep-history-tool grep-history-tool] + [name:recall-messages-tool recall-messages-tool] + [name:summarize-tool summarize-tool] + [name:list-agents-tool list-agents-tool] + [name:search-agents-tool search-agents-tool] + [name:cron-add-tool cron-add-tool] + [name:cron-list-tool cron-list-tool] + [name:cron-remove-tool cron-remove-tool] + == +:: +:: +get-tools: return built-in tools merged with dynamic tools from apps/code/lib/tools +:: +++ get-tools + =/ m (fiber:fiber:nexus ,(map @t tool:nex-tools)) + ^- form:m + :: start with built-in tools + =/ result=(map @t tool:nex-tools) builtins + :: merge dynamic tools from apps/code/lib/tools + ;< tools-dir=road:tarball bind:m (ancestor-road:io [/claw %agent] [%| /apps/code/lib/tools]) + ;< src-seen=seen:nexus bind:m (peek:io tools-dir ~) + ?. ?=([%& %ball *] src-seen) + (pure:m result) + ?~ fil.ball.p.src-seen + (pure:m result) + =/ names=(list @ta) + %+ turn ~(tap by contents.u.fil.ball.p.src-seen) + |=([name=@ta *] (strip-hoon name)) + |- + ?~ names (pure:m result) + =/ name=@ta i.names + ;< tool-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /apps/code/lib/tools name]) + ;< res=built:nexus bind:m (get-code-full:io tool-road) + ?. ?=(%vase -.res) $(names t.names) + =/ got=(each tool:nex-tools tang) + (mule |.(!<(tool:nex-tools vase.res))) + ?. ?=(%& -.got) $(names t.names) + $(names t.names, result (~(put by result) name:p.got p.got)) +:: +:: +await-tool: look up a tool by name -- builtins first, then dynamic +:: +:: Discovers dynamic tools the same way +get-tools does, using +:: ancestor-road so it works from any depth. +:: +++ await-tool + |= tool=@t + =/ m (fiber:fiber:nexus ,(each tool:nex-tools tang)) + ^- form:m + =/ builtin=(unit tool:nex-tools) (~(get by builtins) tool) + ?^ builtin (pure:m &+u.builtin) + :: discover dynamic tools from apps/code/lib/tools + ;< tools-dir=road:tarball bind:m (ancestor-road:io [/claw %agent] [%| /apps/code/lib/tools]) + ;< src-seen=seen:nexus bind:m (peek:io tools-dir ~) + ?. ?=([%& %ball *] src-seen) + (pure:m [%| ~[leaf+"tool not found: {(trip tool)}"]]) + ?~ fil.ball.p.src-seen + (pure:m [%| ~[leaf+"tool not found: {(trip tool)}"]]) + =/ names=(list @ta) + %+ turn ~(tap by contents.u.fil.ball.p.src-seen) + |=([name=@ta *] (strip-hoon name)) + |- + ?~ names + (pure:m [%| ~[leaf+"tool not found: {(trip tool)}"]]) + =/ name=@ta i.names + ;< tool-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /apps/code/lib/tools name]) + ;< res=built:nexus bind:m (get-code-full:io tool-road) + ?. ?=(%vase -.res) $(names t.names) + =/ got=(each tool:nex-tools tang) + (mule |.(!<(tool:nex-tools vase.res))) + ?. ?=(%& -.got) $(names t.names) + ?. =(tool name:p.got) $(names t.names) + (pure:m &+p.got) +:: +:: +rise-tool: handle tool process crash +:: +++ rise-tool + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. ?=(%rise -.prod) (pure:m ~) + %- (slog leaf+"%claw tool crashed" tang.prod) + ;< st=tool-state:nex-tools bind:m + (get-state-as:io ,tool-state:nex-tools) + =/ err-msg=@t (render-tang:build tang.prod) + =/ result-data=json + (pairs:enjs:format ~[['type' s+'error'] ['message' s+(crip "crash\0a{(trip err-msg)}")]]) + =/ new-vase=(each vase tang) + (mule |.(!>(`tool-state:nex-tools`[tool.st args.st %done data.st `result-data]))) + ?: ?=(%| -.new-vase) + %- (slog leaf+"%claw: crash handler failed to build vase" ~) + =/ fallback=tool-state:nex-tools ['' ~ %done ~ `(pairs:enjs:format ~[['type' s+'error'] ['message' s+'tool crashed and recovery failed']])] + (replace:io !>(fallback)) + (replace:io p.new-vase) +:: +:: +tools-to-json: convert tool map to Anthropic tools array +:: +++ tools-to-json + |= tools=(map @t tool:nex-tools) + ^- json + :- %a + %+ turn ~(val by tools) + |= tl=tool:nex-tools + =/ props=(list [@t json]) + %+ turn ~(tap by parameters.tl) + |= [k=@t def=parameter-def:nex-tools] + [k (pairs:enjs:format ~[['type' s+(crip (trip type.def))] ['description' s+description.def]])] + %- pairs:enjs:format + :~ ['name' s+name.tl] + ['description' s+description.tl] + :- 'input_schema' + %- pairs:enjs:format + :~ ['type' s+'object'] + ['properties' [%o (~(gas by *(map @t json)) props)]] + ['required' [%a (turn required.tl |=(r=@t s+r))]] + == + == +:: +:: +agent-turn: the main agentic loop +:: +:: sends prompt to API, handles tool_use responses, loops until end_turn +:: +++ agent-turn + |= [chat-name=@ta model=@t api-name=@t ctx-window=@ud msg-cap=@ud =convo tools=(map @t tool:nex-tools)] + =/ m (fiber:fiber:nexus ,^convo) + ^- form:m + ~& >> "%claw agent-turn: start" + ;< base-sys=@t bind:m read-prompts + ~& >> "%claw agent-turn: got prompts" + ;< memories=@t bind:m read-memories + ~& >> "%claw agent-turn: got memories" + ;< now=@da bind:m get-time:io + ~& >> ["%claw agent-turn: got time" now] + ;< our=ship bind:m get-our:io + ~& >> "%claw agent-turn: got our" + ;< here=rail:tarball bind:m get-here-abs:io + ~& >> "%claw agent-turn: got here" + =/ runtime-ctx=@t + %- crip + ;: weld + :: "Current time (UTC): {(en:datetime-local:iso-8601 now)}\0a" + "Ship: {(scow %p our)}\0a" + "Location: {(spud (snoc path.here name.here))}" + == + |- + =/ sys-prompt=@t + %- crip + ;: weld + (trip base-sys) + "\0a\0a" + (trip runtime-ctx) + ?: =('' memories) "" + :(weld "\0a\0a## Memories\0a\0a" (trip memories)) + == + :: subtract prompt + tool defs from window budget + =/ prompt-tokens=@ud (max 1 (div (met 3 sys-prompt) 4)) + =/ tools-tokens=@ud + ?: =(~ tools) 0 + (max 1 (div (met 3 (en:json:html (tools-to-json tools))) 4)) + =/ effective-window=@ud + ?: (gth (add prompt-tokens tools-tokens) ctx-window) 1.000 + (sub ctx-window (add prompt-tokens tools-tokens)) + =/ api-msgs-list=(list json) (assemble convo effective-window msg-cap) + :: build API request body + =/ api-msgs=json [%a api-msgs-list] + =/ sys-block=json + %- pairs:enjs:format + :~ ['type' s+'text'] + ['text' s+sys-prompt] + ['cache_control' (pairs:enjs:format ~[['type' s+'ephemeral']])] + == + =/ body-pairs=(list [@t json]) + :~ ['model' s+model] + ['max_tokens' (numb:enjs:format 4.096)] + ['system' [%a ~[sys-block]]] + ['messages' api-msgs] + == + =? body-pairs !=(~ tools) + (snoc body-pairs ['tools' (tools-to-json tools)]) + =/ payload=json (pairs:enjs:format body-pairs) + :: signal typing to linked channel + ;< ~ bind:m (signal-typing chat-name) + ~& > ["%claw: sending to" model] + :: call the api proxy via calls/ pattern + ;< proxy=road:tarball bind:m (resolve-proxy api-name) + ;< eny=@uvJ bind:m get-entropy:io + =/ call-id=@t (scot %uv (end [3 8] eny)) + =/ main-road=road:tarball proxy + =/ call-road=road:tarball + :: same bend as proxy but targeting calls/{id}.json instead of main.sig + ?> ?=(%| -.proxy) + =/ steps=@ud p.p.proxy + ^- road:tarball + [%| steps %& [~[%apis api-name %calls] (crip "{(trip call-id)}.json")]] + :: subscribe to call file before it exists + ;< * bind:m (keep:io /api-call call-road ~) + :: poke main.sig to create the call + =/ poke-body=json + (pairs:enjs:format ~[['id' s+call-id] ['body' payload]]) + ;< ~ bind:m (poke:io main-road [/ %json] !>(poke-body)) + ~& >> ["%claw: call" call-id "created, waiting for response"] + ;< ~ bind:m (set-status chat-name [%api ~]) + :: wait for news with status=done, or interrupt poke + ;< resp=(unit json) bind:m (await-call-or-interrupt /api-call) + :: drop subscription + ;< ~ bind:m (drop:io /api-call call-road) + :: handle interrupt + ?~ resp + ~& > "%claw: interrupted" + =/ int-convo=^convo (snoc convo [%msg 'assistant' '[interrupted]']) + ;< ~ bind:m (write-chat int-convo) + (pure:m int-convo) + :: parse API response from JSON + =/ parsed=(unit api-response) (parse-json-response u.resp) + ?~ parsed + =/ raw=@t + ?: =(*json u.resp) 'empty response (vase extraction failed)' + =/ full=tape (trip (en:json:html u.resp)) + (crip ?:((lth (lent full) 200) full (weld (scag 200 full) "..."))) + =/ err-msg=@t (crip "Error: failed to parse API response: {(trip raw)}") + =/ err-convo=^convo (snoc convo [%msg 'assistant' err-msg]) + ;< ~ bind:m (write-chat err-convo) + (pure:m err-convo) + :: append all content blocks incrementally + =/ updated=^convo + %+ roll content-blocks.u.parsed + |= [=content-block acc=_convo] + ?- -.content-block + %text (snoc acc [%msg 'assistant' text.content-block]) + %tool-use (snoc acc [%tool-use id.content-block name.content-block input.content-block]) + == + ;< ~ bind:m (write-chat updated) + :: if end_turn or no tool calls, we're done + =/ calls=(list content-block) + (skim content-blocks.u.parsed |=(=content-block ?=(%tool-use -.content-block))) + ?~ calls + (pure:m updated) + :: execute tools, append results incrementally + ~& > ["%claw: executing" (lent calls) "tool calls"] + ;< result=(unit ^convo) bind:m (run-tool-calls chat-name updated calls) + ?~ result + :: interrupted during tool execution — exit turn + (pure:m updated) + $(convo u.result) +:: +:: +run-tool-calls: execute tool calls via /tools grubs +:: +:: Waits for each tool to reach %ack or %done (whichever comes first). +:: If %ack, the tool is still running -- re-subscribes on /tool-done/[tid] +:: so main.sig's event loop picks up the eventual %done. +:: If %done, the tool completed synchronously -- subscription dropped. +:: +++ run-tool-calls + |= [chat-name=@ta =convo calls=(list content-block)] + =/ m (fiber:fiber:nexus ,(unit ^convo)) + ^- form:m + |- + ?~ calls (pure:m `convo) + =/ call=content-block i.calls + ?> ?=(%tool-use -.call) + =/ tool-args=(map @t json) + ?. ?=(%o -.input.call) ~ + p.input.call + =/ ts=tool-state:nex-tools + [name.call tool-args %start ~ ~] + =/ tid=@ta id.call + =/ tool-file=@ta (crip "{(trip chat-name)}_{(trip tid)}") + ;< tool-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& /proc/tools tool-file]) + ;< ~ bind:m (set-status chat-name [%tool tid]) + ;< * bind:m (keep:io /tool-wait/[tid] tool-road ~) + ;< ~ bind:m (make:io tool-road |+[%.n [[/ %tool-state] !>(ts)] ~]) + ;< ack=(unit [@t ?]) bind:m (await-tool-ack tid) + ;< ~ bind:m (drop:io /tool-wait/[tid] tool-road) + ?~ ack + :: interrupted — kill tool, write marker, return + ;< ~ bind:m (cull:io tool-road) + ~& > ["%claw: tool interrupted" tid] + =/ updated=^convo (snoc convo [%tool-result id.call '[tool interrupted by user]']) + ;< ~ bind:m (write-chat updated) + ;< ~ bind:m (set-status chat-name [%idle ~]) + (pure:m ~) + =/ result-text=@t -.u.ack + =/ more=? +.u.ack + :: append result to convo and write immediately + =/ updated=^convo (snoc convo [%tool-result id.call result-text]) + ;< ~ bind:m (write-chat updated) + ?: more + :: tool ack'd but still running -- subscribe on /tool-done for main loop + ;< * bind:m (keep:io /tool-done/[tid] tool-road ~) + $(calls t.calls, convo updated) + $(calls t.calls, convo updated) +:: +:: +await-tool-ack: wait for tool grub to reach %ack or %done +:: +:: Returns [result-text more=?] where more=%.y means the tool +:: is still running and will eventually reach %done. +:: +++ await-tool-ack + |= tid=@ta + =/ m (fiber:fiber:nexus ,(unit [@t ?])) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error:io dart.u.in)] + :: interrupt poke — return ~ + :: + [~ %poke * *] + =/ jon=json (fall (mole |.(!<(json q.sage.u.in))) *json) + ?. ?=(%o -.jon) [%skip ~] + =/ act=(unit json) (~(get by p.jon) 'action') + ?. ?=([~ %s %'interrupt'] act) [%skip ~] + [%done ~] + :: news on tool subscription + :: + [~ %news * *] + ?. =(/tool-wait/[tid] wire.u.in) [%skip ~] + ?. ?=(%file -.view.u.in) [%skip ~] + =/ st=tool-state:nex-tools !<(tool-state:nex-tools q.sage.view.u.in) + ?: =(%ack step.st) + [%done `[(extract-tool-result st) %.y]] + ?. =(%done step.st) [%skip ~] + [%done `[(extract-tool-result st) %.n]] + == +:: +:: +extract-tool-result: pull text from tool-state update +:: +++ extract-tool-result + |= st=tool-state:nex-tools + ^- @t + ?~ update.st 'tool returned no result' + ?. ?=(%o -.u.update.st) 'tool returned no result' + =/ result-type=(unit json) (~(get by p.u.update.st) 'type') + ?: ?=([~ %s %'error'] result-type) + =/ err=@t (fall (bind (~(get by p.u.update.st) 'message') |=(j=json ?>(?=(%s -.j) p.j))) 'unknown error') + (crip "ERROR: {(trip err)}") + (fall (bind (~(get by p.u.update.st) 'text') |=(j=json ?>(?=(%s -.j) p.j))) '') +:: +:: +await-call-or-interrupt: wait for call response OR interrupt poke +:: +:: Returns (some json) on API response, ~ on interrupt. +:: Listens for both news on the call subscription wire and interrupt pokes. +:: +++ await-call-or-interrupt + |= =wire + =/ m (fiber:fiber:nexus ,(unit json)) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error:io dart.u.in)] + :: interrupt poke — return ~ + :: + [~ %poke * *] + =/ jon=json (fall (mole |.(!<(json q.sage.u.in))) *json) + ?. ?=(%o -.jon) [%skip ~] + =/ act=(unit json) (~(get by p.jon) 'action') + ?. ?=([~ %s %'interrupt'] act) [%skip ~] + [%done ~] + :: news on call subscription — check for status=done + :: + [~ %news * *] + ?. =(wire wire.u.in) [%skip ~] + ?. ?=(%file -.view.u.in) [%skip ~] + =/ jon=json (fall (mole |.(!<(json q.sage.view.u.in))) *json) + ?. ?=(%o -.jon) [%skip ~] + =/ status=(unit json) (~(get by p.jon) 'status') + ?. ?=([~ %s %'done'] status) [%skip ~] + =/ resp=json (fall (~(get by p.jon) 'response') [%o ~]) + [%done `resp] + == +:: +:: API response types +:: ++$ content-block + $% [%text text=@t] + [%tool-use id=@t name=@t input=json] + == ++$ api-response + $: stop-reason=@t + content-blocks=(list content-block) + == +:: +:: +parse-api-response: parse Anthropic Messages API response +:: +++ parse-json-response + |= data=json + ^- (unit api-response) + ?. ?=(%o -.data) ~ + :: check for error + =/ typ=(unit json) (~(get by p.data) 'type') + ?: ?=([~ %s %'error'] typ) + =/ err=(unit json) (~(get by p.data) 'error') + =/ err-msg=@t + ?~ err 'unknown error' + ?: ?=(%o -.u.err) + (fall (bind (~(get by p.u.err) 'message') |=(j=json ?>(?=(%s -.j) p.j))) 'unknown error') + 'unknown error' + ~& >>> ["%claw: API error" err-msg] + `[%'end_turn' [%text (crip "API error: {(trip err-msg)}")]~] + :: extract stop_reason + =/ stop=@t + (fall (bind (~(get by p.data) 'stop_reason') |=(j=json ?>(?=(%s -.j) p.j))) 'end_turn') + :: extract content blocks + =/ content-arr=(unit json) (~(get by p.data) 'content') + ?~ content-arr ~ + ?. ?=(%a -.u.content-arr) ~ + =/ blocks=(list content-block) + %+ murn p.u.content-arr + |= j=json + ^- (unit content-block) + ?. ?=(%o -.j) ~ + =/ block-type=(unit json) (~(get by p.j) 'type') + ?: ?=([~ %s %'text'] block-type) + =/ text=(unit json) (~(get by p.j) 'text') + ?~ text ~ + ?. ?=(%s -.u.text) ~ + `[%text p.u.text] + ?: ?=([~ %s %'tool_use'] block-type) + =/ id=(unit json) (~(get by p.j) 'id') + =/ name=(unit json) (~(get by p.j) 'name') + =/ input=(unit json) (~(get by p.j) 'input') + ?~ id ~ + ?~ name ~ + ?. ?=(%s -.u.id) ~ + ?. ?=(%s -.u.name) ~ + `[%tool-use p.u.id p.u.name (fall input [%o ~])] + ~ + `[stop blocks] +:: +++ read-chat + =/ m (fiber:fiber:nexus ,convo) + ^- form:m + ;< jon=json bind:m (get-state-as:io ,json) + (pure:m (parse-convo jon)) +:: +++ write-chat + |= =convo + =/ m (fiber:fiber:nexus ,~) + ^- form:m + (replace:io !>((convo-to-json convo))) +:: +++ parse-convo + |= jon=json + ^- convo + ?. ?=(%a -.jon) ~ + %+ murn p.jon + |= =json + ^- (unit entry) + ?. ?=(%o -.json) ~ + =/ type=(unit @t) (bind (~(get by p.json) 'type') |=(j=^json ?>(?=(%s -.j) p.j))) + ?: ?=([~ %'tool_use'] type) + =/ id=@t (fall (bind (~(get by p.json) 'id') |=(j=^json ?>(?=(%s -.j) p.j))) '') + =/ name=@t (fall (bind (~(get by p.json) 'name') |=(j=^json ?>(?=(%s -.j) p.j))) '') + =/ input=^json (fall (~(get by p.json) 'input') [%o ~]) + `[%tool-use id name input] + ?: ?=([~ %'tool_result'] type) + =/ tid=@t (fall (bind (~(get by p.json) 'tool_use_id') |=(j=^json ?>(?=(%s -.j) p.j))) '') + =/ content=@t (fall (bind (~(get by p.json) 'content') |=(j=^json ?>(?=(%s -.j) p.j))) '') + `[%tool-result tid content] + :: default: message + =/ role=(unit @t) (bind (~(get by p.json) 'role') |=(j=^json ?>(?=(%s -.j) p.j))) + =/ content=(unit @t) (bind (~(get by p.json) 'content') |=(j=^json ?>(?=(%s -.j) p.j))) + ?~ role ~ + ?~ content ~ + `[%msg u.role u.content] +:: +++ convo-to-json + |= =convo + ^- json + :- %a + %+ turn convo + |= =entry + ?- -.entry + %msg + (pairs:enjs:format ~[['role' s+role.entry] ['content' s+content.entry]]) + %tool-use + %- pairs:enjs:format + :~ ['type' s+'tool_use'] + ['id' s+id.entry] + ['name' s+name.entry] + ['input' input.entry] + == + %tool-result + %- pairs:enjs:format + :~ ['type' s+'tool_result'] + ['tool_use_id' s+tool-use-id.entry] + ['content' s+content.entry] + == + == +:: +:: +assemble: build API messages JSON from conversation +:: +:: returns list of API message objects with sliding window. +:: walks backward from end, keeping entries within token budget. +:: if truncated, prepends a note about earlier history. +:: resolves [ref:N-M] in tool results from full convo. +:: truncates individual messages exceeding msg-cap tokens. +:: consecutive tool-use entries get merged into one assistant message. +:: consecutive tool-result entries get merged into one user message. +:: +++ assemble + |= [=convo ctx-window=@ud msg-cap=@ud] + ^- (list json) + =/ total=@ud (lent convo) + =/ cap-chars=@ud (mul msg-cap 4) + :: sliding window: walk backward, keep entries within budget + =/ windowed=^convo + =/ budget=@ud ctx-window + =/ rev=^convo (flop convo) + =/ kept=^convo ~ + |- + ?~ rev kept + =/ tok=@ud (entry-tokens i.rev) + ?: (gth tok budget) kept + $(rev t.rev, kept [i.rev kept], budget (sub budget tok)) + :: drop orphaned tool entries at start of window + :: window must start with a %msg to avoid dangling tool_result/tool_use + =/ windowed=^convo + |- + ?~ windowed ~ + ?: ?=(%msg -.i.windowed) windowed + $(windowed t.windowed) + =/ skipped=@ud (sub total (lent windowed)) + =/ skipped-tokens=@ud + %+ roll (scag skipped convo) + |= [e=entry acc=@ud] + (add acc (entry-tokens e)) + =/ window-start=@ud skipped + =/ window-count=@ud (lent windowed) + =/ window-tokens=@ud + %+ roll windowed + |= [e=entry acc=@ud] + (add acc (entry-tokens e)) + =/ prefix=(unit json) + ?: =(0 skipped) ~ + =/ note=@t + %- crip + ;: weld + "[Conversation history truncated. " + (a-co:co skipped) + " earlier messages (est. " + (a-co:co skipped-tokens) + " tokens) not shown, covering messages 0-" + (a-co:co (dec skipped)) + ". Current window shows " + (a-co:co window-count) + " messages (est. " + (a-co:co window-tokens) + " tokens), messages " + (a-co:co window-start) + "-" + (a-co:co (dec total)) + ".]" + == + `(pairs:enjs:format ~[['role' s+'user'] ['content' s+note]]) + :: assemble the windowed entries + =/ msgs=(list json) ?~(prefix ~ [u.prefix]~) + =/ pending-tools=(list json) ~ + =/ pending-results=(list json) ~ + =/ walk=^convo windowed + |- ^- (list json) + =/ flush-tools=_msgs + ?~ pending-tools msgs + :_ msgs + %- pairs:enjs:format + ~[['role' s+'assistant'] ['content' [%a (flop pending-tools)]]] + =/ flush-results=_msgs + ?~ pending-results msgs + :_ msgs + %- pairs:enjs:format + ~[['role' s+'user'] ['content' [%a (flop pending-results)]]] + ?~ walk + =. msgs flush-tools + =. msgs flush-results + (flop msgs) + ?- -.i.walk + %msg + =. msgs flush-tools + =. msgs flush-results + =/ txt=@t (cap-content content.i.walk cap-chars) + %= $ + walk t.walk + pending-tools ~ + pending-results ~ + msgs :_ msgs + (pairs:enjs:format ~[['role' s+role.i.walk] ['content' s+txt]]) + == + %tool-use + =. msgs flush-results + =. pending-results ~ + =/ block=json + %- pairs:enjs:format + :~ ['type' s+'tool_use'] + ['id' s+id.i.walk] + ['name' s+name.i.walk] + ['input' input.i.walk] + == + $(walk t.walk, pending-tools [block pending-tools]) + %tool-result + =. msgs flush-tools + =. pending-tools ~ + :: resolve [ref:N-M] markers from full convo + =/ txt=@t (resolve-content content.i.walk convo cap-chars) + =/ block=json + %- pairs:enjs:format + :~ ['type' s+'tool_result'] + ['tool_use_id' s+tool-use-id.i.walk] + ['content' s+txt] + == + $(walk t.walk, pending-results [block pending-results]) + == +:: +:: +cap-content: truncate content to char limit with note +:: +++ cap-content + |= [txt=@t limit=@ud] + ^- @t + ?: (lte (met 3 txt) limit) txt + =/ original=@ud (met 3 txt) + %- crip + ;: weld + (scag limit (trip txt)) + "\0a\0a[truncated: showing " + (a-co:co (div limit 4)) + " of ~" + (a-co:co (div original 4)) + " est. tokens]" + == +:: +:: +resolve-content: resolve [ref:N-M] markers, then cap +:: +++ resolve-content + |= [txt=@t full=convo limit=@ud] + ^- @t + =/ t=tape (trip txt) + ?. ?& (gte (lent t) 5) + =("[ref:" (scag 5 t)) + == + (cap-content txt limit) + :: parse [ref:N-M] + =/ inner=tape (slag 5 t) + =/ close=(unit @ud) (find "]" inner) + ?~ close (cap-content txt limit) + =/ range=tape (scag u.close inner) + =/ dash=(unit @ud) (find "-" range) + ?~ dash (cap-content txt limit) + =/ from=@ud (fall (rush (crip (scag u.dash range)) dem) 0) + =/ to=@ud (fall (rush (crip (slag +(u.dash) range)) dem) 0) + :: resolve entries from full convo + =/ resolved=tape + %- zing + %+ turn (gulf from to) + |= idx=@ud + ^- tape + ?: (gte idx (lent full)) ~ + =/ e=entry (snag idx full) + ;: weld + "[" + (a-co:co idx) + "] " + ?- -.e + %msg + ;: weld (trip role.e) ": " (trip content.e) == + %tool-use + (weld "tool_use: " (trip name.e)) + %tool-result + (weld "tool_result: " (trip content.e)) + == + "\0a" + == + (cap-content (crip resolved) limit) +:: +:: split a tape into lines by newline +:: +++ to-lines + |= t=tape + ^- (list tape) + =/ acc=(list tape) ~ + =/ cur=tape ~ + |- + ?~ t + (flop [cur acc]) + ?: =(i.t '\0a') + $(t t.t, acc [cur acc], cur ~) + $(t t.t, cur (snoc cur i.t)) +:: +:: estimate tokens for a conversation entry (~4 chars per token) +:: +++ entry-tokens + |= =entry + ^- @ud + =/ chars=@ud + ?- -.entry + %msg (met 3 content.entry) + %tool-use (add (met 3 name.entry) (met 3 (en:json:html input.entry))) + %tool-result (met 3 content.entry) + == + (max 1 (div chars 4)) +:: +:: +:: +++ chat-page + |= [ball-id=tape app-url=tape] + ^- manx + ;html + ;head + ;title: claw + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;style + ;+ ;/ style-text + == + == + ;body + ;div#app + ;div#header + ;div + ;h1 + ;a(href "{app-url}", style "color: inherit; text-decoration: none;"): claw + == + ;div.f3.mono.s-2: AI agent nexus + == + ;div + ;button#clear-btn.hdr-btn: clear + ;button#about-btn.hdr-btn: about + ;button#config-btn.hdr-btn: config + == + == + ;div#cfg-backdrop + ;div#cfg-modal + ;div#cfg-header + ;span: Config + ;div + ;button#cfg-save.hdr-btn: save + ;button#cfg-close.hdr-btn: close + == + == + ;label.cfg-label: Model + ;input#cfg-model(type "text", placeholder "claude-sonnet-4-20250514"); + ;label.cfg-label: Context window (tokens) + ;input#cfg-window(type "number", placeholder "80000"); + ;label.cfg-label: Message cap (tokens) + ;input#cfg-msgcap(type "number", placeholder "20000"); + ;label.cfg-label: API proxy (e.g. anthropic) + ;input#cfg-proxy(type "text", placeholder "anthropic"); + ;label.cfg-label: Channel (e.g. telegram/main-bot) + ;input#cfg-channel(type "text", placeholder "leave empty for none"); + ;div#cfg-status; + == + == + ;div#abt-backdrop + ;div#abt-modal + ;div#abt-header + ;span: About + ;div + ;button#abt-save.hdr-btn: save + ;button#abt-close.hdr-btn: close + == + == + ;textarea#abt-text(rows "6", placeholder "Describe this agent...", style "width:100%;font-family:monospace;font-size:12px;border:1px solid #333;border-radius:6px;padding:10px;resize:vertical;background:#111;color:#eee;outline:none;"); + ;div#abt-status; + == + == + ;div#body + ;div#sidebar + ;div#chat-list; + ;button#new-chat-btn: + new chat + == + ;div#main + ;div#messages; + ;div#loading; + ;form#prompt-form(onsubmit "sendMessage(event)") + ;div.input-row + ;input#input(type "text", placeholder "Say something...", autocomplete "off"); + ;button#stop-btn(type "button"): Stop + ;button(type "submit"): Send + == + == + == + == + == + ;script + ;+ ;/ (script-text ball-id) + == + == + == +:: +++ style-text + ^- tape + """ + * \{ margin: 0; padding: 0; box-sizing: border-box; } + body \{ font-family: -apple-system, system-ui, sans-serif; background: #111; color: #eee; height: 100vh; } + #app \{ display: flex; flex-direction: column; height: 100vh; } + #header \{ padding: 12px 16px; border-bottom: 1px solid #333; flex-shrink: 0; display: flex; justify-content: space-between; align-items: flex-start; } + #header h1 \{ font-size: 20px; font-weight: 700; } + #header > div \{ display: flex; gap: 6px; } + #body \{ flex: 1; display: flex; overflow: hidden; } + #sidebar \{ width: 160px; flex-shrink: 0; border-right: 1px solid #222; display: flex; flex-direction: column; padding: 8px 0; overflow-y: auto; } + #main \{ flex: 1; display: flex; flex-direction: column; overflow: hidden; max-width: 700px; width: 100%; margin: 0 auto; padding: 0 16px; } + #messages \{ flex: 1; overflow-y: auto; display: flex; flex-direction: column; gap: 8px; padding: 8px 0; } + .msg \{ padding: 8px 12px; border-radius: 8px; max-width: 85%; white-space: pre-wrap; word-wrap: break-word; font-size: 14px; line-height: 1.5; } + .msg.user \{ background: #2563eb; color: white; align-self: flex-end; } + .msg.assistant \{ background: #222; border: 1px solid #333; align-self: flex-start; } + .msg.system \{ background: #1a1a2e; border: 1px solid #333; align-self: center; font-size: 12px; color: #888; } + .msg.pending \{ opacity: 0.5; } + .empty \{ color: #555; font-size: 14px; padding: 40px 0; text-align: center; } + #prompt-form \{ flex-shrink: 0; padding: 12px 0; border-top: 1px solid #333; } + .input-row \{ display: flex; gap: 8px; } + #input \{ flex: 1; padding: 10px 14px; border-radius: 8px; border: 1px solid #333; background: #1a1a1a; color: #eee; font-size: 14px; outline: none; } + #input:focus \{ border-color: #2563eb; } + button \{ padding: 10px 20px; border-radius: 8px; border: none; background: #2563eb; color: white; font-size: 14px; cursor: pointer; } + button:hover \{ background: #1d4ed8; } + .f3 \{ color: #888; } + .mono \{ font-family: monospace; } + .s-2 \{ font-size: 12px; } + .hdr-btn \{ font-size: 11px; padding: 4px 10px; border-radius: 4px; border: 1px solid #444; background: none; color: #888; cursor: pointer; } + .hdr-btn:hover \{ color: #eee; border-color: #666; } + #cfg-backdrop \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 100; } + #cfg-backdrop.open \{ display: flex; align-items: center; justify-content: center; } + #cfg-modal \{ background: #1a1a1a; border: 1px solid #333; border-radius: 8px; width: 90%; max-width: 400px; padding: 20px; } + #cfg-header \{ display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } + #cfg-header span \{ font-size: 14px; font-weight: 600; } + #cfg-header div \{ display: flex; gap: 6px; } + .cfg-label \{ display: block; font-size: 12px; color: #888; margin: 12px 0 4px; } + #cfg-model, #cfg-window, #cfg-msgcap, #cfg-proxy, #cfg-channel \{ width: 100%; padding: 8px 10px; border-radius: 6px; border: 1px solid #333; background: #111; color: #eee; font-size: 13px; font-family: monospace; outline: none; box-sizing: border-box; } + #cfg-model:focus, #cfg-window:focus, #cfg-msgcap:focus, #cfg-proxy:focus, #cfg-channel:focus \{ border-color: #2563eb; } + #cfg-status \{ margin-top: 10px; font-size: 12px; color: #4ade80; } + #loading \{ height: 2px; background: transparent; overflow: hidden; flex-shrink: 0; } + #loading.active \{ background: #333; } + #loading.active::after \{ content: ''; display: block; height: 100%; width: 30%; background: #2563eb; animation: slide 1s ease-in-out infinite; } + @keyframes slide \{ 0% \{ transform: translateX(-100%); } 100% \{ transform: translateX(400%); } } + #abt-backdrop \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 100; } + #abt-backdrop.open \{ display: flex; align-items: center; justify-content: center; } + #abt-modal \{ background: #1a1a1a; border: 1px solid #333; border-radius: 8px; width: 90%; max-width: 400px; padding: 20px; } + #abt-header \{ display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } + #abt-header span \{ font-size: 14px; font-weight: 600; } + #abt-header div \{ display: flex; gap: 6px; } + #abt-status \{ margin-top: 10px; font-size: 12px; color: #4ade80; } + #abt-text:focus \{ border-color: #2563eb; } + #stop-btn \{ display: none; background: none; color: #f87171; border: 1px solid #f87171; padding: 10px 16px; } + #stop-btn:hover \{ background: rgba(248,113,113,0.1); } + #stop-btn.active \{ display: block; } + #chat-list \{ flex: 1; display: flex; flex-direction: column; gap: 2px; } + .chat-item \{ font-size: 13px; padding: 6px 12px; color: #888; cursor: pointer; display: flex; justify-content: space-between; align-items: center; border-radius: 4px; margin: 0 6px; } + .chat-item:hover \{ color: #eee; background: #1a1a1a; } + .chat-item.active \{ color: #eee; background: #1a1a2e; cursor: default; } + .chat-del \{ font-size: 14px; color: #444; cursor: pointer; line-height: 1; opacity: 0; } + .chat-item:hover .chat-del \{ opacity: 1; } + .chat-del:hover \{ color: #f87171; } + #new-chat-btn \{ font-size: 12px; padding: 6px 12px; margin: 4px 6px; border-radius: 4px; border: 1px dashed #333; background: none; color: #555; cursor: pointer; text-align: left; } + #new-chat-btn:hover \{ color: #888; border-color: #555; background: none; } + """ +:: +++ script-text + |= ball-id=tape + ^- tape + ;: weld + "var API = '/grubbery/api';\0avar BALL = '{ball-id}';\0avar CHAT = new URLSearchParams(location.search).get('chat') || 'main';\0a" + """ + function renderMessages(entries) \{ + var el = document.getElementById('messages'); + el.innerHTML = ''; + if (!entries || !entries.length) \{ + el.innerHTML = '
No messages yet
'; + return; + } + for (var i = 0; i < entries.length; i++) \{ + var e = entries[i]; + var div = document.createElement('div'); + if (e.type === 'tool_use') \{ + div.className = 'msg system'; + div.textContent = '[tool] ' + e.name; + } else if (e.type === 'tool_result') \{ + div.className = 'msg system'; + div.textContent = '> ' + (e.content || '').slice(0, 200); + } else if (e.role === 'user' && e.content && e.content.indexOf('[spawn_task result]:') === 0) \{ + div.className = 'msg system'; + div.textContent = '> ' + e.content.slice(20).trim().slice(0, 200); + } else \{ + if (e.role === 'system') continue; + div.className = 'msg ' + e.role; + div.textContent = e.content; + } + el.appendChild(div); + } + el.scrollTop = el.scrollHeight; + } + + var sseCtrl = null; + var sseRdr = null; + + function sendMessage(e) \{ + e.preventDefault(); + var input = document.getElementById('input'); + var text = input.value.trim(); + if (!text) return; + input.value = ''; + fetch(API + '/poke/' + BALL + '/chats/' + CHAT + '/chat.json?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'message', content: text}) + }); + } + + document.getElementById('clear-btn').onclick = function() \{ + if (!confirm('Clear chat?')) return; + fetch(API + '/poke/' + BALL + '/chats/' + CHAT + '/chat.json?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'clear'}) + }); + }; + + // config modal + document.getElementById('config-btn').onclick = function() \{ + fetch(API + '/file/' + BALL + '/config.json?mark=json') + .then(function(r) \{ return r.json() }) + .then(function(cfg) \{ + document.getElementById('cfg-model').value = cfg.model || ''; + document.getElementById('cfg-proxy').value = cfg['api-proxy'] || 'anthropic'; + document.getElementById('cfg-window').value = cfg.context_window || '80000'; + document.getElementById('cfg-msgcap').value = cfg.message_cap || '20000'; + document.getElementById('cfg-channel').value = cfg.channel || ''; + }).catch(function() \{}); + document.getElementById('cfg-backdrop').classList.add('open'); + }; + document.getElementById('cfg-close').onclick = function() \{ + document.getElementById('cfg-backdrop').classList.remove('open'); + }; + document.getElementById('cfg-save').onclick = function() \{ + var model = document.getElementById('cfg-model').value.trim() || 'claude-sonnet-4-20250514'; + var proxy = document.getElementById('cfg-proxy').value.trim() || 'anthropic'; + var win = parseInt(document.getElementById('cfg-window').value) || 80000; + var cap = parseInt(document.getElementById('cfg-msgcap').value) || 20000; + var channel = document.getElementById('cfg-channel').value.trim(); + fetch(API + '/over/' + BALL + '/config.json?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{model: model, 'api-proxy': proxy, context_window: win, message_cap: cap, channel: channel}) + }); + document.getElementById('cfg-status').textContent = 'saved'; + setTimeout(function() \{ + document.getElementById('cfg-status').textContent = ''; + document.getElementById('cfg-backdrop').classList.remove('open'); + }, 800); + }; + + // about modal + document.getElementById('about-btn').onclick = function() \{ + fetch(API + '/file/' + BALL + '/about.txt?mark=txt') + .then(function(r) \{ return r.text() }) + .then(function(t) \{ document.getElementById('abt-text').value = t; }) + .catch(function() \{ document.getElementById('abt-text').value = ''; }); + document.getElementById('abt-status').textContent = ''; + document.getElementById('abt-backdrop').classList.add('open'); + }; + document.getElementById('abt-close').onclick = function() \{ + document.getElementById('abt-backdrop').classList.remove('open'); + }; + document.getElementById('abt-backdrop').onclick = function(e) \{ + if (e.target === this) this.classList.remove('open'); + }; + document.getElementById('abt-save').onclick = async function() \{ + var text = document.getElementById('abt-text').value; + var r = await fetch(API + '/over/' + BALL + '/about.txt?mark=txt', \{ + method: 'POST', + headers: \{'Content-Type': 'text/plain'}, + body: text + }); + var st = document.getElementById('abt-status'); + if (r.ok) \{ + st.textContent = 'saved'; + st.style.color = '#4ade80'; + setTimeout(function() \{ document.getElementById('abt-backdrop').classList.remove('open'); }, 800); + } else \{ + st.textContent = 'save failed'; + st.style.color = '#f87171'; + } + }; + + async function connectSSE() \{ + if (sseRdr) try \{ sseRdr.cancel(); } catch(e) \{} + if (sseCtrl) sseCtrl.abort(); + sseCtrl = new AbortController(); + try \{ + var r = await fetch(API + '/keep/' + BALL + '/chats/' + CHAT + '/chat.json?mark=json', \{ + headers: \{Accept: 'text/event-stream'}, + signal: sseCtrl.signal + }); + sseRdr = r.body.getReader(); + var dec = new TextDecoder(); + var buf = ''; + while (true) \{ + var chunk = await sseRdr.read(); + if (chunk.done) break; + buf += dec.decode(chunk.value, \{stream: true}); + var evts = buf.split('\\n\\n'); + buf = evts.pop(); + for (var i = 0; i < evts.length; i++) \{ + if (!evts[i].trim()) continue; + var data = ''; + var lines = evts[i].split('\\n'); + for (var j = 0; j < lines.length; j++) \{ + if (lines[j].indexOf('data: ') === 0) data += lines[j].slice(6); + } + if (!data) continue; + try \{ + var msgs = JSON.parse(data); + renderMessages(msgs); + } catch(e) \{} + } + } + } catch(e) \{ + if (e.name !== 'AbortError') setTimeout(connectSSE, 2000); + } + } + + window.addEventListener('beforeunload', function() \{ + if (sseRdr) try \{ sseRdr.cancel(); } catch(e) \{} + if (sseCtrl) sseCtrl.abort(); + if (statusEs) statusEs.close(); + if (chatListEs) chatListEs.close(); + }); + + // Stop button + var stopBtn = document.getElementById('stop-btn'); + var currentStatus = \{state: 'idle'}; + stopBtn.onclick = function() \{ + if (currentStatus.state === 'idle') return; + if (currentStatus.state === 'tool') \{ + if (!confirm('Abort tool? This may leave state inconsistent.')) return; + fetch(API + '/poke/' + BALL + '/chats/' + CHAT + '/chat.json?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'interrupt', id: currentStatus.id}) + }); + } else \{ + fetch(API + '/poke/' + BALL + '/chats/' + CHAT + '/chat.json?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'interrupt'}) + }); + } + }; + + // Status SSE + var statusEs = null; + function connectStatusSSE() \{ + if (statusEs) statusEs.close(); + statusEs = new EventSource(API + '/keep/' + BALL + '/chats/' + CHAT + '/status.json?mark=json'); + statusEs.addEventListener('upd status.json', function(e) \{ + try \{ + var s = JSON.parse(e.data); + currentStatus = s; + var ld = document.getElementById('loading'); + if (s.state !== 'idle') \{ + ld.classList.add('active'); + stopBtn.classList.add('active'); + stopBtn.textContent = s.state === 'tool' ? 'abort' : 'stop'; + } else \{ + ld.classList.remove('active'); + stopBtn.classList.remove('active'); + stopBtn.textContent = 'stop'; + } + } catch(x) \{} + }); + statusEs.onerror = function() \{ statusEs.close(); statusEs = null; setTimeout(connectStatusSSE, 2000); }; + } + + // Load chat + fetch(API + '/file/' + BALL + '/chats/' + CHAT + '/chat.json?mark=json') + .then(function(r) \{ return r.json() }) + .then(renderMessages) + .catch(function() \{}); + // Load current status + fetch(API + '/file/' + BALL + '/chats/' + CHAT + '/status.json?mark=json') + .then(function(r) \{ return r.json() }) + .then(function(s) \{ + currentStatus = s; + var ld = document.getElementById('loading'); + if (s.state !== 'idle') \{ + ld.classList.add('active'); + stopBtn.classList.add('active'); + stopBtn.textContent = s.state === 'tool' ? 'abort' : 'stop'; + } + }).catch(function() \{}); + connectSSE(); + connectStatusSSE(); + + // Chat list via SSE + var chatListEs = null; + var pendingNav = null; + + function renderChatList(names, skipCache) \{ + if (!Array.isArray(names) || !names.length) names = ['main']; + if (!skipCache) try \{ sessionStorage.setItem('claw-chats', JSON.stringify(names)); } catch(x) \{} + // navigate after create/delete if pending + if (pendingNav) \{ + var target = pendingNav; + if (target.charAt(0) === '+' && names.indexOf(target.slice(1)) >= 0) \{ + pendingNav = null; + location.search = '?chat=' + target.slice(1); + return; + } + if (target.charAt(0) === '-' && names.indexOf(target.slice(1)) < 0) \{ + pendingNav = null; + if (target.slice(1) === CHAT) \{ location.search = '?chat=main'; return; } + } + } + var el = document.getElementById('chat-list'); + el.innerHTML = ''; + for (var i = 0; i < names.length; i++) \{ + var name = names[i]; + var item = document.createElement('div'); + item.className = 'chat-item' + (name === CHAT ? ' active' : ''); + var label = document.createElement('span'); + label.textContent = name; + item.appendChild(label); + if (name !== CHAT) \{ + item.setAttribute('data-chat', name); + item.onclick = function() \{ location.search = '?chat=' + this.getAttribute('data-chat'); }; + } + var del = document.createElement('span'); + del.className = 'chat-del'; + del.textContent = String.fromCharCode(215); + del.setAttribute('data-chat', name); + del.onclick = function(e) \{ + e.stopPropagation(); + var n = this.getAttribute('data-chat'); + if (!confirm('Delete chat "' + n + '"?')) return; + pendingNav = '-' + n; + fetch(API + '/poke/' + BALL + '/main.sig?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'delete-chat', name: n}) + }); + }; + item.appendChild(del); + el.appendChild(item); + } + } + + function connectChatListSSE() \{ + if (chatListEs) chatListEs.close(); + chatListEs = new EventSource(API + '/keep/' + BALL + '/ui/chats.json?mark=json'); + chatListEs.addEventListener('upd chats.json', function(e) \{ + try \{ renderChatList(JSON.parse(e.data)); } catch(x) \{} + }); + chatListEs.onerror = function() \{ + chatListEs.close(); + chatListEs = null; + setTimeout(connectChatListSSE, 2000); + }; + } + + document.getElementById('new-chat-btn').onclick = function() \{ + var name = prompt('Chat name (lowercase, no spaces):'); + if (!name) return; + name = name.toLowerCase().replace(/[^a-z0-9\\-]/g, '-').replace(/^-|-$/g, ''); + if (!name) return; + pendingNav = '+' + name; + fetch(API + '/poke/' + BALL + '/main.sig?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'create-chat', name: name}) + }); + }; + + try \{ var cached = JSON.parse(sessionStorage.getItem('claw-chats')); if (cached) renderChatList(cached, true); } catch(x) \{} + fetch(API + '/file/' + BALL + '/ui/chats.json?mark=json') + .then(function(r) \{ return r.json() }) + .then(function(d) \{ renderChatList(d); }) + .catch(function() \{ if (!sessionStorage.getItem('claw-chats')) renderChatList(['main']); }); + connectChatListSSE(); + """ + == + +:: +:: built-in tools +:: +:: +get-arg: extract a string argument from tool state +:: +++ get-arg + |= [st=tool-state:nex-tools key=@t] + ^- (unit @t) + (bind (~(get by args.st) key) |=(j=json ?>(?=(%s -.j) p.j))) +:: +:: +agent-road: adjust a road so relative paths resolve from the agent root +:: +:: Tools run at /proc/tools/[tid], two levels below the agent. The LLM thinks +:: in terms of the agent directory, so ./foo should mean agent-root/foo, +:: not /proc/tools/[tid]/foo. This prepends ../../ to relative roads. +:: +++ agent-road + |= raw=@t + ^- road:tarball + =/ t=tape (trip raw) + =/ adjusted=@t + :: only adjust ./ (agent-relative), not ../ (already traversing) + ?: =("./" (scag 2 t)) + (crip (weld "../../" (slag 2 t))) + :: bare ../ paths: add two more levels to account for tool depth + ?: =(".." (scag 2 t)) + (crip (weld "../../" t)) + raw + (cord-to-road:tarball adjusted) +:: +:: +++ browse-tool + ^- tool:nex-tools + |% + ++ name 'browse' + ++ description + ^~ %- crip + ;: weld + "List files and subdirectories at a path in this nexus. " + "Accepts a road string: absolute (/proc/tools/) or " + "relative (./context/, ../). Trailing slash for directories." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['road' [%string 'Road to a directory (e.g. "/", "./context/", "./apps/")']]]) + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ road=road:tarball (agent-road u.raw) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %ball *] seen) + (pure:m [%error (crip "Not a directory: {(trip u.raw)}")]) + =/ sub-dirs=(list @ta) ~(tap in ~(key by dir.ball.p.seen)) + =/ files=(list [@ta @tas]) + ?~ fil.ball.p.seen ~ + %+ turn ~(tap by contents.u.fil.ball.p.seen) + |=([n=@ta c=content:tarball] [n name.p.sage.c]) + =/ dir-text=tape + ?~ sub-dirs "" + (zing (turn sub-dirs |=(d=@ta "\0a {(trip d)}/"))) + =/ file-text=tape + ?~ files "" + (zing (turn files |=([n=@ta *] "\0a {(trip n)}"))) + (pure:m [%text (crip :(weld (trip u.raw) dir-text file-text))]) + -- +:: +++ read-tool + ^- tool:nex-tools + |% + ++ name 'read' + ++ description + ^~ %- crip + ;: weld + "Read a file from this nexus. Paths are relative to the agent root " + "(e.g. ./config.json, ./context/chat.json) or absolute. " + "Use offset/limit to read a specific line range from large files." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + ^- (list [@t parameter-def:nex-tools]) + :~ ['road' [%string 'Path to a file (e.g. "./config.json")']] + ['offset' [%number 'Start line (1-indexed, default: 1)']] + ['limit' [%number 'Max lines to return (default: all)']] + == + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ road=road:tarball (agent-road u.raw) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) + (pure:m [%error (crip "Not found: {(trip u.raw)}")]) + =/ off=@ud + =/ v (~(get by args.st) 'offset') + ?~ v 0 + ?: ?=(%n -.u.v) (fall (rush p.u.v dem) 0) + ?: ?=(%s -.u.v) (fall (rush p.u.v dem) 0) + 0 + =/ lim=@ud + =/ v (~(get by args.st) 'limit') + ?~ v 0 + ?: ?=(%n -.u.v) (fall (rush p.u.v dem) 0) + ?: ?=(%s -.u.v) (fall (rush p.u.v dem) 0) + 0 + ?: &(=(0 off) =(0 lim)) + :: no range specified, return full file + (render-grub-content:nex-tools seen) + :: range read: convert to text and slice by lines + ;< =mime bind:m (sage-to-mime:io sage.p.seen) + =/ text=tape (trip ;;(@t q.q.mime)) + =/ lines=(list tape) (to-lines text) + =/ total=@ud (lent lines) + =/ start=@ud ?:(=(0 off) 0 (dec off)) + =/ sliced=(list tape) + =/ after=(list tape) (slag start lines) + ?:(=(0 lim) after (scag lim after)) + =/ end=@ud (add start (lent sliced)) + =/ header=tape + "[mark: {(spud (snoc path.p.sage.p.seen name.p.sage.p.seen))}] [lines {<(add start 1)>}-{} of {}]\0a" + =/ numbered=tape + %- zing + =/ n=@ud (add start 1) + |- + ?~ sliced ~ + =/ line=tape :(weld (a-co:co n) "\09" i.sliced "\0a") + [line $(sliced t.sliced, n +(n))] + (pure:m [%text (crip (weld header numbered))]) + -- +:: +++ write-tool + ^- tool:nex-tools + |% + ++ name 'write' + ++ description + ^~ %- crip + ;: weld + "Write a file in this nexus. " + "Accepts a road string pointing to a file: " + "absolute (/config.json) or relative (./apps/code/lib/tools/my-tool.hoon). " + "Creates the file if it doesn't exist, overwrites if it does. " + "Set mark to store as a specific mark (e.g. \"hoon\", \"/wallet/account\"). " + "Without mark, stores as raw mime. " + "Content is passed through mime conversion." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['road' [%string 'Road to a file (e.g. "./config.json", "./apps/code/lib/tools/foo.hoon")']] + ['content' [%string 'Text content to write']] + ['mark' [%string 'Target mark as a blot path (e.g. "hoon", "/wallet/account"). Omit to store as mime.']] + == + ++ required ~['road' 'content'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + ?~ content=(get-arg st 'content') + (pure:m [%error 'Missing required argument: content']) + =/ dest-blot=(unit blot:tarball) + ?~ mk=(get-arg st 'mark') ~ + ?: =('' u.mk) ~ + :: parse as blot path + =/ pax=path + ?: =('/' (end 3 u.mk)) (stab u.mk) + (stab (cat 3 '/' u.mk)) + ?~ pax ~ + `[(snip `path`pax) (rear pax)] + =/ road=road:tarball (agent-road u.raw) + =/ src-mime=mime [/text/plain (as-octs:mimes:html u.content)] + ;< exists=? bind:m (peek-exists:io road) + ?: exists + ?^ dest-blot + (pure:m [%error 'Cannot change blot of existing file. Delete it first, then recreate with the desired blot.']) + ;< ~ bind:m (over:io road [[/ %mime] !>(src-mime)]) + (pure:m [%text (crip "Wrote {(trip u.raw)}")]) + ;< ~ bind:m (make:io road |+[%.n [[/ %mime] !>(src-mime)] dest-blot]) + (pure:m [%text (crip "Created {(trip u.raw)}")]) + -- +:: +++ edit-tool + ^- tool:nex-tools + |% + ++ name 'edit' + ++ description + ^~ %- crip + ;: weld + "Edit a file via exact string replacement. " + "Fails if old_string is not found or matches multiple locations. " + "Set replace_all to replace every occurrence." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- ~(gas by *(map @t parameter-def:nex-tools)) + :~ ['road' [%string 'Road to the file to edit']] + ['old_string' [%string 'Exact text to find and replace']] + ['new_string' [%string 'Replacement text']] + ['replace_all' [%boolean 'Replace all occurrences (default: false)']] + == + ++ required ~['road' 'old_string' 'new_string'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + ?~ old=(get-arg st 'old_string') + (pure:m [%error 'Missing required argument: old_string']) + ?~ new=(get-arg st 'new_string') + (pure:m [%error 'Missing required argument: new_string']) + =/ replace-all=? + =/ ra (~(get by args.st) 'replace_all') + ?~ ra %.n + ?: ?=([~ %b *] ra) p.u.ra + %.n + =/ road=road:tarball (agent-road u.raw) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) + (pure:m [%error (crip "Not found: {(trip u.raw)}")]) + ;< =mime bind:m (sage-to-mime:io sage.p.seen) + =/ txt=tape (trip q.q.mime) + =/ result=(each tape @tas) + (tape-replace:nex-tools txt (trip u.old) (trip u.new) replace-all) + ?. ?=(%& -.result) + ?+ p.result + (pure:m [%error 'Edit failed']) + %not-found + (pure:m [%error 'old_string not found in file']) + %not-unique + (pure:m [%error 'old_string matches multiple locations. Provide more context or set replace_all.']) + %empty-search + (pure:m [%error 'old_string cannot be empty']) + == + =/ new-mime=^mime [/text/plain (as-octs:mimes:html (crip p.result))] + ;< ~ bind:m (over:io road [[/ %mime] !>(new-mime)]) + (pure:m [%text (crip "Edited {(trip u.raw)}")]) + -- +:: +++ delete-tool + ^- tool:nex-tools + |% + ++ name 'delete' + ++ description 'Delete a file from this nexus.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['road' [%string 'Road to the file to delete']]]) + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ road=road:tarball (agent-road u.raw) + ;< ~ bind:m (cull:io road) + (pure:m [%text (crip "Deleted {(trip u.raw)}")]) + -- +:: +++ mkdir-tool + ^- tool:nex-tools + |% + ++ name 'mkdir' + ++ description 'Create a directory in this nexus.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['road' [%string 'Road to the directory to create (e.g. "/children/my-thing/")']]]) + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ road=road:tarball (agent-road u.raw) + =/ new-ball=ball:tarball [`[~ ~ ~] ~] + ;< ~ bind:m (make:io road &+[*sand:nexus *gain:nexus new-ball]) + (pure:m [%text (crip "Created directory {(trip u.raw)}")]) + -- +:: +++ create-nexus-tool + ^- tool:nex-tools + |% + ++ name 'create_nexus' + ++ description + ^~ %- crip + ;: weld + "Create a nexus (directory with code) in this nexus. " + "Provide the road for the new directory and the code " + "path pointing to the nexus source (e.g. /claw/agent)." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['road' [%string 'Road to the new nexus directory']] + ['code' [%string 'Code path as a rail (e.g. "/nex/claw/agent")']] + == + ++ required ~['road' 'code'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + ?~ code-raw=(get-arg st 'code') + (pure:m [%error 'Missing required argument: code']) + =/ road=road:tarball (agent-road u.raw) + =/ code-pax=path (stab u.code-raw) + ?~ code-pax + (pure:m [%error 'Code path cannot be empty']) + =/ code-rail=rail:tarball [(snip `path`code-pax) (rear code-pax)] + =/ new-ball=ball:tarball [`[~ `code-rail ~] ~] + ;< ~ bind:m (make:io road &+[*sand:nexus *gain:nexus new-ball]) + (pure:m [%text (crip "Created nexus {(trip u.raw)} with code {(trip u.code-raw)}")]) + -- +:: +++ delete-nexus-tool + ^- tool:nex-tools + |% + ++ name 'delete_nexus' + ++ description 'Delete a nexus directory and all its contents.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['road' [%string 'Road to the nexus directory to delete']]]) + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ road=road:tarball (agent-road u.raw) + ;< ~ bind:m (cull:io road) + (pure:m [%text (crip "Deleted nexus {(trip u.raw)}")]) + -- +:: +++ read-manual-tool + ^- tool:nex-tools + |% + ++ name 'read_manual' + ++ description 'Look up on-manu documentation for any path. Use to understand what a directory or file does.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['road' [%string 'Road to look up docs for']]]) + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ road=road:tarball (agent-road u.raw) + ;< doc=@t bind:m (manu-road:io road) + ?: =('' doc) + (pure:m [%text (crip "No documentation found for {(trip u.raw)}")]) + (pure:m [%text doc]) + -- +:: +++ read-font-tool + ^- tool:nex-tools + |% + ++ name 'read_font' + ++ description 'Find which code namespace governs a path.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['road' [%string 'Road to query']]]) + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ road=road:tarball (agent-road u.raw) + ;< res=(unit bend:tarball) bind:m (get-font:io road) + ?~ res + (pure:m [%text (crip "No code found governing {(trip u.raw)}")]) + (pure:m [%text (crip "Code: {(trip (road-to-cord:tarball [%| u.res]))}")]) + -- +:: +++ read-weir-tool + ^- tool:nex-tools + |% + ++ name 'read_weir' + ++ description 'Read sandbox (weir) rules for a directory. Shows which roads are allowed for write, poke, and read.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['road' [%string 'Road to the directory to inspect (e.g. "./" or "./children/")']]]) + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ dir-road=road:tarball (agent-road u.raw) + ;< dir-seen=seen:nexus bind:m (peek:io dir-road ~) + ?. ?=([%& %ball *] dir-seen) + (pure:m [%error (crip "Not a directory or not found: {(trip u.raw)}")]) + =/ weir=weir:nexus (fall fil.sand.p.dir-seen [~ ~ ~]) + ?: &(=(~ make.weir) =(~ poke.weir) =(~ peek.weir)) + (pure:m [%text (crip "No weir at {(trip u.raw)} -- unrestricted")]) + =/ render + |= roads=(set road:tarball) + ^- tape + =/ lst=(list road:tarball) ~(tap in roads) + ?~ lst " (none)\0a" + %- zing + %+ turn lst + |=(=road:tarball " {(trip (road-to-cord:tarball road))}\0a") + %- pure:m + :- %text + %- crip + ;: weld + "Weir at {(trip u.raw)}:\0a\0a" + "write (make) allowed:\0a" (render make.weir) + "\0apoke allowed:\0a" (render poke.weir) + "\0aread (peek) allowed:\0a" (render peek.weir) + == + -- +:: +++ add-weir-tool + ^- tool:nex-tools + |% + ++ name 'add_weir' + ++ description 'Add a sandbox (weir) rule to a directory. Categories: write, poke, read.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['road' [%string 'Road to the directory to add the rule to']] + ['category' [%string 'Rule category: "write", "poke", or "read"']] + ['allow_road' [%string 'Road to allow (e.g. "/" for root, "./apps/" for apps dir)']] + == + ++ required ~['road' 'category' 'allow_road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + ?~ cat=(get-arg st 'category') + (pure:m [%error 'Missing required argument: category']) + ?~ allow=(get-arg st 'allow_road') + (pure:m [%error 'Missing required argument: allow_road']) + =/ dir-road=road:tarball (agent-road u.raw) + =/ allow-road=road:tarball (cord-to-road:tarball u.allow) + ;< dir-seen=seen:nexus bind:m (peek:io dir-road ~) + =/ cur=weir:nexus + ?. ?=([%& %ball *] dir-seen) [~ ~ ~] + (fall fil.sand.p.dir-seen [~ ~ ~]) + =/ new=weir:nexus + ?+ u.cat cur + %'write' cur(make (~(put in make.cur) allow-road)) + %'poke' cur(poke (~(put in poke.cur) allow-road)) + %'read' cur(peek (~(put in peek.cur) allow-road)) + == + ;< ~ bind:m (sand:io dir-road `new) + (pure:m [%text (crip "Added {(trip u.cat)} rule to {(trip u.raw)}")]) + -- +:: +++ del-weir-tool + ^- tool:nex-tools + |% + ++ name 'del_weir' + ++ description 'Remove a sandbox (weir) rule from a directory.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['road' [%string 'Road to the directory']] + ['category' [%string 'Rule category: "write", "poke", or "read"']] + ['allow_road' [%string 'Road to remove from the allow list']] + == + ++ required ~['road' 'category' 'allow_road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + ?~ cat=(get-arg st 'category') + (pure:m [%error 'Missing required argument: category']) + ?~ allow=(get-arg st 'allow_road') + (pure:m [%error 'Missing required argument: allow_road']) + =/ dir-road=road:tarball (agent-road u.raw) + =/ del-road=road:tarball (cord-to-road:tarball u.allow) + ;< dir-seen=seen:nexus bind:m (peek:io dir-road ~) + =/ cur=weir:nexus + ?. ?=([%& %ball *] dir-seen) [~ ~ ~] + (fall fil.sand.p.dir-seen [~ ~ ~]) + =/ new=weir:nexus + ?+ u.cat cur + %'write' cur(make (~(del in make.cur) del-road)) + %'poke' cur(poke (~(del in poke.cur) del-road)) + %'read' cur(peek (~(del in peek.cur) del-road)) + == + ;< ~ bind:m (sand:io dir-road `new) + (pure:m [%text (crip "Removed {(trip u.cat)} rule from {(trip u.raw)}")]) + -- +:: +++ clear-weir-tool + ^- tool:nex-tools + |% + ++ name 'clear_weir' + ++ description 'Clear all sandbox (weir) rules from a directory, giving it unrestricted access.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['road' [%string 'Road to the directory to clear']]]) + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ road=road:tarball (agent-road u.raw) + ;< ~ bind:m (sand:io road ~) + (pure:m [%text (crip "Cleared weir from {(trip u.raw)}")]) + -- +:: +++ check-bin-tool + ^- tool:nex-tools + |% + ++ name 'check_bin' + ++ description + ^~ %- crip + ;: weld + "Check if a build artifact compiled successfully. " + "Provide the code namespace road and artifact name. " + "Example: code_road='/apps/code/lib/tools/' name='my-tool' " + "to check a compiled tool. Returns the error tang " + "if compilation failed, or confirms success." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['code_road' [%string 'Road to code directory (e.g. "/apps/code/lib/tools/", "./code/lib/")']] + ['name' [%string 'Artifact name (e.g. "my-tool")']] + == + ++ required ~['code_road' 'name'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'code_road') + (pure:m [%error 'Missing required argument: code_road']) + ?~ nam=(get-arg st 'name') + (pure:m [%error 'Missing required argument: name']) + =/ dir-road=road:tarball (agent-road u.raw) + =/ bin-name=@ta (crip (trip u.nam)) + =/ code-road=road:tarball + ?- -.dir-road + %& ?-(-.p.dir-road %& dir-road, %| [%& %& p.p.dir-road bin-name]) + %| ?-(-.q.p.dir-road %& dir-road, %| [%| p.p.dir-road %& p.q.p.dir-road bin-name]) + == + ;< res=built:nexus bind:m (get-code-full:io code-road) + ?: ?=(%vase -.res) + (pure:m [%text (crip "OK: {(trip u.raw)}{(trip u.nam)} compiled successfully")]) + ?. ?=(%tang -.res) + (pure:m [%text (crip "OK: {(trip u.raw)}{(trip u.nam)} -- non-vase artifact")]) + =/ rendered=tape + %- zing + %+ turn (flop tang.res) + |=(=tank (weld ~(ram re tank) "\0a")) + (pure:m [%text (crip "FAILED: {(trip u.raw)}{(trip u.nam)}\0a{rendered}")]) + -- +:: +++ check-bang-tool + ^- tool:nex-tools + |% + ++ name 'check_bang' + ++ description + ^~ %- crip + ;: weld + "Check runtime health at a path. " + "Returns any nexus-level or per-file errors (bangs). " + "Use after writing code to see if anything broke. " + "Example: road='/' to check the whole nexus." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['road' [%string 'Road to check (e.g. "/", "/apps/code/", "./code/")']]]) + ++ required ~['road'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'road') + (pure:m [%error 'Missing required argument: road']) + =/ road=road:tarball (agent-road u.raw) + ;< res=(each bangs:nexus (unit tang)) bind:m (get-bang:io road) + ?: ?=(%| -.res) + ?~ p.res + (pure:m [%error (crip "Path not found: {(trip u.raw)}")]) + =/ rendered=tape + (zing (turn (flop u.p.res) |=(=tank (weld ~(ram re tank) "\0a")))) + (pure:m [%error (crip "Query failed:\0a{rendered}")]) + =/ =bangs:nexus p.res + =/ out=tape "" + =? out ?=(^ bang.bangs) + =/ rendered=tape + (zing (turn (flop u.bang.bangs) |=(=tank (weld ~(ram re tank) "\0a")))) + "NEXUS BANG:\0a{rendered}" + =/ errs=(list [@ta (unit tang)]) ~(tap by err.bangs) + =/ file-out=tape + %- zing + %+ murn errs + |= [name=@ta err=(unit tang)] + ^- (unit tape) + ?~ err ~ + =/ rendered=tape + (zing (turn (flop u.err) |=(=tank (weld ~(ram re tank) "\0a")))) + `"\0a{(trip name)}: BANGED\0a{rendered}" + =. out (weld out file-out) + ?: =('' (crip out)) + (pure:m [%text (crip "OK: {(trip u.raw)} -- no errors")]) + (pure:m [%text (crip out)]) + -- +:: +++ outbox-tool + ^- tool:nex-tools + |% + ++ name 'outbox' + ++ description + ^~ %- crip + ;: weld + "Append a result to outbox.json. " + "Used to return results to a parent (spawned tasks) or post updates. " + "Once written, no more messages are accepted." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['result' [%string 'The final result text to return']] + ['status' [%string 'Status: "complete", "error", "partial" (default: "complete")']] + == + ++ required ~['result'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ result=(get-arg st 'result') + (pure:m [%error 'Missing required argument: result']) + =/ status=@t + (fall (get-arg st 'status') 'complete') + =/ result-json=json + %- pairs:enjs:format + :~ ['status' s+status] + ['result' s+u.result] + == + ;< here=rail:tarball bind:m get-here-abs:io + =/ chat-name=@ta (get-tool-chat-name here) + =/ road=road:tarball (agent-road (crip "./chats/{(trip chat-name)}/outbox.json")) + ;< cur=(list json) bind:m (read-outbox chat-name) + =/ updated=json [%a (snoc cur result-json)] + ;< ~ bind:m (over:io road [[/ %json] !>(updated)]) + (pure:m [%text 'Finished -- result appended to outbox.json']) + -- +:: +++ await-child-result + |= pfx=tape + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + =/ outbox-road=road:tarball + (agent-road (crip "{pfx}/chats/main/outbox.json")) + :: drop any stale subscription from a previous run, then subscribe fresh + ;< ~ bind:m (drop:io /spawn-result outbox-road) + ;< * bind:m (keep:io /spawn-result outbox-road ~) + :: check if outbox already has entries before waiting + ;< =seen:nexus bind:m (peek:io outbox-road ~) + =/ existing=(list json) + ?. ?=([%& %file *] seen) ~ + =/ outbox=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + ?. ?=(%a -.outbox) ~ + p.outbox + ?^ existing + ;< ~ bind:m (drop:io /spawn-result outbox-road) + ;< result=tool-result:nex-tools bind:m (extract-child-result (rear existing)) + :: clean up child nexus + ;< ~ bind:m (cull:io (agent-road (crip "{pfx}/"))) + ~& > ["%claw: spawn_task cleaned up" pfx] + (pure:m result) + |- + ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /spawn-result) + ?: ?=(%wake -.nw) $ + ?. ?=(%file -.view.nw) $ + =/ outbox=json (fall (mole |.(!<(json q.sage.view.nw))) *json) + ?. ?& ?=(%a -.outbox) + !=(~ p.outbox) + == + $ + ;< ~ bind:m (drop:io /spawn-result outbox-road) + ;< result=tool-result:nex-tools bind:m (extract-child-result (rear p.outbox)) + :: clean up child nexus + ;< ~ bind:m (cull:io (agent-road (crip "{pfx}/"))) + ~& > ["%claw: spawn_task cleaned up" pfx] + (pure:m result) +:: +++ extract-child-result + |= jon=json + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ?~ jon (pure:m [%error 'spawn_task: child outbox entry is empty']) + ?. ?=(%o -.jon) (pure:m [%error 'spawn_task: child outbox entry is not an object']) + =/ status=@t + (fall (bind (~(get by p.jon) 'status') |=(j=json ?>(?=(%s -.j) p.j))) 'unknown') + =/ result=@t + (fall (bind (~(get by p.jon) 'result') |=(j=json ?>(?=(%s -.j) p.j))) 'no result text') + ?: =('error' status) + (pure:m [%error result]) + (pure:m [%text result]) +:: +++ spawn-task-tool + ^- tool:nex-tools + |% + ++ name 'spawn_task' + ++ description + ^~ %- crip + ;: weld + "Spawn a named child claw nexus to handle a task asynchronously. " + "Creates the nexus at ./children//, copies config, " + "and sends the message. Returns immediately with an ack, " + "then delivers the final result when the child finishes. " + "Use a short descriptive name unique to this task (e.g. 'research-api', 'build-parser')." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['name' [%string 'Unique name for the child (e.g. "research-api", "build-parser")']] + ['message' [%string 'Task message to send to the child']] + ['prompt' [%string 'System prompt for the child (written to /context/prompts/task.txt)']] + ['code' [%string 'Code path for the nexus (default: "/claw/agent")']] + == + ++ required ~['name' 'message'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + :: if resuming from ack, skip creation -- just re-subscribe and wait + ?: =(%ack step.st) + =/ pfx=tape + =/ d=json data.st + ?~ d "" + ?. ?=(%o -.d) "" + =/ v (~(get by p.d) 'pfx') + ?~ v "" + ?. ?=(%s -.u.v) "" + (trip p.u.v) + ?: =(~ pfx) + (pure:m [%error 'spawn_task: lost child path on restart']) + (await-child-result pfx) + :: normal creation flow + ?~ name=(get-arg st 'name') + (pure:m [%error 'Missing required argument: name']) + ?~ message=(get-arg st 'message') + (pure:m [%error 'Missing required argument: message']) + =/ code=@t (fall (get-arg st 'code') '/claw/agent') + =/ tid=@ta (crip (cass:so (trip u.name))) + =/ tid-t=tape (trip tid) + :: create child nexus (agent-road adjusts for tool depth) + =/ pfx=tape "./children/{tid-t}" + =/ child-road=road:tarball (agent-road (crip "{pfx}/")) + :: check if child already exists + ;< exists=? bind:m (peek-exists:io (agent-road (crip "{pfx}/chats/main/chat.json"))) + ?: exists + (pure:m [%error (crip "Child '{tid-t}' already exists. Use a unique name.")]) + =/ code-pax=path (stab code) + ?~ code-pax + (pure:m [%error 'Code path cannot be empty']) + =/ code-rail=rail:tarball [(snip `path`code-pax) (rear code-pax)] + =/ new-ball=ball:tarball [`[~ `code-rail ~] ~] + ;< ~ bind:m (make:io child-road &+[*sand:nexus *gain:nexus new-ball]) + :: read parent config (../../config.json from tool proc) + ;< parent-config=json bind:m + =/ m (fiber:fiber:nexus ,json) + =/ road=road:tarball (agent-road './config.json') + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m *json) + (pure:m (fall (mole |.(!<(json q.sage.p.seen))) *json)) + =/ child-config-road=road:tarball + (agent-road (crip "{pfx}/config.json")) + ;< cfg-exists=? bind:m (peek-exists:io child-config-road) + ;< ~ bind:m + ?: cfg-exists + (over:io child-config-road [[/ %json] !>(parent-config)]) + (make:io child-config-road |+[%.n [[/ %json] !>(parent-config)] ~]) + :: write task prompt with finish instructions + =/ base-instructions=@t + %- crip + ;: weld + "You are running as a subtask of a parent nexus.\0a" + "When you have completed your work, you MUST call the `outbox` tool " + "with your result text in the `result` parameter.\0a" + "This is the ONLY way to return your result to the parent. " + "Do not just respond with text -- call `outbox`.\0a" + == + =/ full-prompt=@t + =/ user-prompt=(unit @t) (get-arg st 'prompt') + ?~ user-prompt base-instructions + (crip "{(trip base-instructions)}\0a{(trip u.user-prompt)}") + =/ prompt-road=road:tarball + (agent-road (crip "{pfx}/context/prompts/task.txt")) + =/ prompt-wain=wain (to-wain:format full-prompt) + ;< ~ bind:m + =/ m (fiber:fiber:nexus ,~) + ;< pex=? bind:m (peek-exists:io prompt-road) + ?: pex + (over:io prompt-road [[/ %txt] !>(prompt-wain)]) + (make:io prompt-road |+[%.n [[/ %txt] !>(prompt-wain)] ~]) + :: poke child with message + =/ msg-json=json + (pairs:enjs:format ~[['action' s+'message'] ['content' s+u.message]]) + =/ child-sig-road=road:tarball + (agent-road (crip "{pfx}/chats/main/chat.json")) + ;< ~ bind:m + (send-dart:io [%node /spawn-task child-sig-road %poke [[/ %json] !>(msg-json)]]) + :: ack -- store pfx in data so we can resume on restart + =/ ack-data=json + %- pairs:enjs:format + :~ ['type' s+'text'] + ['text' s+(crip "Task started at ./children/{tid-t}/")] + ['pfx' s+(crip pfx)] + == + ;< ~ bind:m + (replace:io !>(`tool-state:nex-tools`[tool.st args.st %ack ack-data `ack-data])) + :: subscribe and wait for result + (await-child-result pfx) + -- +:: +++ grep-files-tool + ^- tool:nex-tools + |% + ++ name 'grep' + ++ description + ^~ %- crip + ;: weld + "Search file contents for a string. Returns matching lines with " + "file paths and line numbers. Optionally filter by path, name, or mark pattern." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['pattern' [%string 'Text string to search for']] + ['path' [%string 'Directory path glob filter (e.g. "/context/*")']] + ['name' [%string 'Filename glob filter (e.g. "*config*")']] + ['mark' [%string 'Mark/extension glob filter (e.g. "hoon", "json")']] + == + ++ required ~['pattern'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'pattern') + (pure:m [%error 'Missing required argument: pattern']) + =/ search=tape (trip u.raw) + =/ pat-path=(unit @t) (get-arg st 'path') + =/ pat-name=(unit @t) (get-arg st 'name') + =/ pat-mark=(unit @t) (get-arg st 'mark') + :: browse agent root + ;< agent-root=road:tarball bind:m (ancestor-road:io [/claw %agent] [%| /]) + ;< =seen:nexus bind:m (peek:io agent-root ~) + ?. ?=([%& %ball *] seen) + (pure:m [%error 'Could not read ball']) + =/ candidates=(list [rail:tarball content:tarball]) + %+ skim ~(tap ba:tarball ball.p.seen) + |= [=rail:tarball =content:tarball] + =/ fp=tape ?~(path.rail "/" (trip (spat path.rail))) + =/ fn=tape (trip name.rail) + =/ fm=tape (trip name.p.sage.content) + ?& ?~(pat-path %.y (glob-match:nex-tools (trip u.pat-path) fp)) + ?~(pat-name %.y (glob-match:nex-tools (trip u.pat-name) fn)) + ?~(pat-mark %.y (glob-match:nex-tools (trip u.pat-mark) fm)) + == + =| results=(list tape) + =/ total=@ud 0 + |- + ?~ candidates + ?~ results + (pure:m [%text 'No matches found']) + =/ out=tape (zing (flop results)) + (pure:m [%text (crip "Found {} matches:{out}")]) + =/ [=rail:tarball =content:tarball] i.candidates + =/ label=tape + =/ pax=tape ?~(path.rail "/" (trip (spat path.rail))) + "{pax}/{(trip name.rail)}" + ;< file-road=road:tarball bind:m (ancestor-road:io [/claw %agent] [%& rail]) + ;< file-seen=seen:nexus bind:m (peek:io file-road ~) + ?. ?=([%& %file *] file-seen) + $(candidates t.candidates) + ;< =mime bind:m (sage-to-mime:io sage.p.file-seen) + =/ text=tape (trip ;;(@t q.q.mime)) + =/ lines=(list tape) (to-lines text) + =/ line-num=@ud 1 + =/ hits=(list tape) ~ + |- + ?~ lines + =/ new-results=(list tape) + ?~ hits results + (weld (flop hits) results) + ^$(candidates t.candidates, results new-results, total (add total (lent hits))) + =? hits !=(~ (find search i.lines)) + :_ hits + "\0a{label}:{}: {i.lines}" + $(lines t.lines, line-num +(line-num)) + -- +:: +++ glob-files-tool + ^- tool:nex-tools + |% + ++ name 'glob' + ++ description + ^~ %- crip + ;: weld + "Search for files by path, name, and/or mark. " + "All patterns support * wildcards. Omitted filters match everything." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['path' [%string 'Directory path glob filter (e.g. "/context/*")']] + ['name' [%string 'Filename glob filter (e.g. "*config*")']] + ['mark' [%string 'Mark/extension glob filter (e.g. "hoon", "json")']] + == + ++ required ~ + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + =/ pat-path=(unit @t) (get-arg st 'path') + =/ pat-name=(unit @t) (get-arg st 'name') + =/ pat-mark=(unit @t) (get-arg st 'mark') + ;< agent-root=road:tarball bind:m (ancestor-road:io [/claw %agent] [%| /]) + ;< =seen:nexus bind:m (peek:io agent-root ~) + ?. ?=([%& %ball *] seen) + (pure:m [%error 'Could not read ball']) + =/ matches=(list [rail:tarball @tas]) + %+ murn ~(tap ba:tarball ball.p.seen) + |= [=rail:tarball =content:tarball] + =/ fp=tape ?~(path.rail "/" (trip (spat path.rail))) + =/ fn=tape (trip name.rail) + =/ fm=tape (trip name.p.sage.content) + ?. ?& ?~(pat-path %.y (glob-match:nex-tools (trip u.pat-path) fp)) + ?~(pat-name %.y (glob-match:nex-tools (trip u.pat-name) fn)) + ?~(pat-mark %.y (glob-match:nex-tools (trip u.pat-mark) fm)) + == + ~ + `[rail name.p.sage.content] + ?~ matches + (pure:m [%text 'No matches found']) + =/ result=tape + %- zing + %+ turn matches + |= [=rail:tarball mark=@tas] + =/ pax=tape ?~(path.rail "/" (trip (spat path.rail))) + "\0a{pax}/{(trip name.rail)}" + (pure:m [%text (crip "Found {<(lent matches)>} matches:{result}")]) + -- +:: +++ grep-history-tool + ^- tool:nex-tools + |% + ++ name 'grep_history' + ++ description + ^~ %- crip + ;: weld + "Search the full conversation history (including messages outside the current " + "context window) for a substring. Returns matching entries with their index, " + "role, and the matching line. Use recall_messages to pull specific results " + "into the current context." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + ~[['query' [%string 'Substring to search for (case-insensitive)']]] + ++ required ~['query'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ raw=(get-arg st 'query') + (pure:m [%error 'Missing required argument: query']) + =/ query=tape (cass (trip u.raw)) + ;< here=rail:tarball bind:m get-here-abs:io + =/ chat-name=@ta (get-tool-chat-name here) + =/ conv-road=road:tarball (agent-road (crip "./chats/{(trip chat-name)}/chat.json")) + ;< =seen:nexus bind:m (peek:io conv-road ~) + ?. ?=([%& %file *] seen) + (pure:m [%text 'Could not read chat.']) + =/ jon=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + =/ conv=convo (parse-convo jon) + =/ results=tape ~ + =/ idx=@ud 0 + =/ walk=convo conv + |- + ?~ walk + ?~ results + (pure:m [%text 'No matches found.']) + (pure:m [%text (crip results)]) + =/ e=entry i.walk + =/ content=tape + ?- -.e + %msg (trip content.e) + %tool-use (weld "tool_use: " (trip name.e)) + %tool-result (trip content.e) + == + =/ role=tape + ?- -.e + %msg (trip role.e) + %tool-use "assistant" + %tool-result "tool_result" + == + :: search each line of content + =/ lines=(list tape) (to-lines content) + =/ line-hits=tape + %- zing + %+ murn lines + |= line=tape + ^- (unit tape) + =/ lower=tape (cass line) + ?~ (find query lower) ~ + =/ display=tape ?:((gth (lent line) 200) (weld (scag 200 line) "...") line) + `:(weld "[" (a-co:co idx) "] " role ": " display "\0a") + %= $ + walk t.walk + idx +(idx) + results (weld results line-hits) + == + -- +:: +++ recall-messages-tool + ^- tool:nex-tools + |% + ++ name 'recall_messages' + ++ description + ^~ %- crip + ;: weld + "Include messages from the conversation history by index range. " + "The content is resolved at assembly time from the full stored history. " + "Use grep_history first to find relevant message indices." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['from' [%number 'Start message index (inclusive)']] + ['to' [%number 'End message index (inclusive)']] + == + ++ required ~['from' 'to'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + =/ from=@ud + =/ v (~(get by args.st) 'from') + ?~ v 0 + ?: ?=(%n -.u.v) (fall (rush p.u.v dem) 0) + ?: ?=(%s -.u.v) (fall (rush p.u.v dem) 0) + 0 + =/ to=@ud + =/ v (~(get by args.st) 'to') + ?~ v 0 + ?: ?=(%n -.u.v) (fall (rush p.u.v dem) 0) + ?: ?=(%s -.u.v) (fall (rush p.u.v dem) 0) + 0 + ?: (gth from to) + (pure:m [%error '"from" must be <= "to"']) + (pure:m [%text (crip "[ref:{(a-co:co from)}-{(a-co:co to)}]")]) + -- +:: +++ summarize-tool + ^- tool:nex-tools + |% + ++ name 'summarize' + ++ description + ^~ %- crip + ;: weld + "Summarize conversation messages by sending them to the LLM. " + "Accepts one or more message ranges (e.g. '0-5,20-30,50-60'). " + "Gaps between ranges are visible to the LLM via index numbers. " + "Use grep_history first to identify relevant message indices. " + "Always specify what kind of summary you need in the prompt: " + "process (step-by-step what happened), decisions (choices and reasoning), " + "technical (tools/code/configs), or action-items (what's next). " + "Summaries are saved to /summaries/ for future reference." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + ^- (list [@t parameter-def:nex-tools]) + :~ ['ranges' [%string 'Message ranges: "0-5" or "0-5,20-30,50-60"']] + ['prompt' [%string 'What kind of summary: process, decisions, technical, action-items, or custom instruction']] + == + ++ required ~['ranges'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + =/ ranges-raw=@t (fall (get-arg st 'ranges') '') + =/ ranges=(list [@ud @ud]) (parse-ranges ranges-raw) + ?~ ranges + (pure:m [%error 'Could not parse ranges. Use format: "0-5" or "0-5,20-30"']) + =/ user-prompt=@t + (fall (get-arg st 'prompt') 'Provide a concise chronological summary of what happened.') + :: read conversation + ;< here=rail:tarball bind:m get-here-abs:io + =/ chat-name=@ta (get-tool-chat-name here) + =/ conv-road=road:tarball (agent-road (crip "./chats/{(trip chat-name)}/chat.json")) + ;< =seen:nexus bind:m (peek:io conv-road ~) + ?. ?=([%& %file *] seen) + (pure:m [%error 'Could not read chat.']) + =/ jon=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + =/ full=convo (parse-convo jon) + :: slice all ranges and build transcript + =/ transcript=tape + %- zing + %+ turn ranges + |= [from=@ud to=@ud] + (render-range full from to) + ?: =(~ transcript) + (pure:m [%error 'No messages in specified ranges.']) + :: read config for model + proxy + context window + =/ cfg-road=road:tarball (agent-road './config.json') + ;< cfg-seen=seen:nexus bind:m (peek:io cfg-road ~) + =/ config=json + ?. ?=([%& %file *] cfg-seen) *json + (fall (mole |.(!<(json q.sage.p.cfg-seen))) *json) + =/ model=@t + =/ m (get-str config 'model') + ?:(=('' m) 'claude-sonnet-4-20250514' m) + =/ api-name=@t + =/ p (get-str config 'api-proxy') + ?:(=('' p) 'anthropic' p) + =/ ctx-window=@ud (get-num config 'context_window' 80.000) + :: truncate transcript to context window (~4 chars/token) + =/ max-chars=@ud (mul ctx-window 4) + =/ truncated=? (gth (lent transcript) max-chars) + =? transcript truncated (scag max-chars transcript) + :: build ranges label for header + =/ ranges-label=tape + %- zing + %+ join "," + ^- (list tape) + %+ turn ranges + |= [from=@ud to=@ud] + "{(a-co:co from)}-{(a-co:co to)}" + =? ranges-label truncated + "{ranges-label} (TRUNCATED to ~{(a-co:co ctx-window)} tokens)" + :: build request + =/ payload=json + %- pairs:enjs:format + :~ ['model' s+model] + ['max_tokens' (numb:enjs:format 4.096)] + :- 'system' + :- %s + %- crip + =/ total=@ud (lent full) + ;: weld + "You are summarizing selected message ranges [{ranges-label}] " + "from a conversation with {(a-co:co total)} messages total. " + "Gaps in indices mean messages were skipped. " + "Focus on the provided messages only.\0a\0a" + "Rules:\0a" + "- Use third-person perspective (never first-person)\0a" + "- Be chronological and concrete\0a" + "- Note problems encountered, changes in behavior, and breakthroughs\0a" + "- Preserve key details and context, not just conclusions\0a\0a" + "User instruction: " + (trip user-prompt) + == + :- 'messages' + :- %a + :~ %- pairs:enjs:format + :~ ['role' s+'user'] + ['content' s+(crip transcript)] + == + == + == + ;< proxy=road:tarball bind:m + (ancestor-road:io [/claw %app] [%& /apis/[api-name] %'main.sig']) + ;< eny=@uvJ bind:m get-entropy:io + =/ call-id=@t (scot %uv (end [3 8] eny)) + ;< call-road=road:tarball bind:m + (ancestor-road:io [/claw %app] [%& /apis/[api-name]/calls (crip "{(trip call-id)}.json")]) + ;< * bind:m (keep:io /sum-call call-road ~) + =/ poke-body=json + (pairs:enjs:format ~[['id' s+call-id] ['body' payload]]) + ;< ~ bind:m (poke:io proxy [/ %json] !>(poke-body)) + ;< resp=json bind:m (await-sum-call /sum-call) + ;< ~ bind:m (drop:io /sum-call call-road) + =/ parsed=(unit api-response) (parse-json-response resp) + ?~ parsed + (pure:m [%error 'Failed to parse API response.']) + =/ text=@t + %- crip + %- zing + %+ turn content-blocks.u.parsed + |= =content-block + ?+ -.content-block "" + %text (trip text.content-block) + == + =/ header=@t + %- crip + ;: weld + "[Summary of messages [{ranges-label}] from " + (a-co:co (lent full)) + " total]\0a" + == + =/ summary-text=@t (crip :(weld (trip header) (trip text))) + :: save to /summaries/ + =/ sum-id=@t (scot %uv (end [3 8] eny)) + =/ sum-json=json + %- pairs:enjs:format + :~ ['ranges' s+ranges-raw] + ['prompt' s+user-prompt] + ['summary' s+summary-text] + == + ;< sum-dir=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%| /chats/[chat-name]/summaries]) + ;< dir-exists=? bind:m (peek-exists:io sum-dir) + ;< ~ bind:m + ?. dir-exists + (make:io sum-dir &+[*sand:nexus *gain:nexus [~ ~]]) + (pure:(fiber:fiber:nexus ,~) ~) + =/ sum-file=@ta (crip "{(trip sum-id)}.json") + ;< sum-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%& /chats/[chat-name]/summaries sum-file]) + ;< ~ bind:m (make:io sum-road |+[%.n [[/ %json] !>(sum-json)] ~]) + (pure:m [%text summary-text]) + -- +:: +:: +cord-to-path: split "foo/bar/baz" into /foo/bar/baz +:: +++ cord-to-path + |= src=@t + ^- path + =/ t=tape (trip src) + ?~ t / + =/ pax=path + %+ scan t + (more fas (cook crip (star ;~(less fas next)))) + (skip pax |=(s=@ta =('' s))) +:: +:: +render-range: render a slice of convo as indexed transcript +:: +++ render-range + |= [full=convo from=@ud to=@ud] + ^- tape + =/ sliced=convo (scag (add (sub to from) 1) (slag from full)) + %- zing + =/ idx=@ud from + |- + ?~ sliced ~ + =/ e=entry i.sliced + =/ line=tape + ?- -.e + %msg :(weld "[" (a-co:co idx) "] " (trip role.e) ": " (trip content.e) "\0a") + %tool-use :(weld "[" (a-co:co idx) "] tool_use: " (trip name.e) "\0a") + %tool-result :(weld "[" (a-co:co idx) "] tool_result: " (trip content.e) "\0a") + == + [line $(sliced t.sliced, idx +(idx))] +:: +:: +parse-ranges: parse "0-5,20-30" into (list [@ud @ud]) +:: +++ parse-ranges + |= raw=@t + ^- (list [@ud @ud]) + =/ t=tape (trip raw) + :: strip whitespace + =. t (skip t |=(c=@t =(c ' '))) + ?~ t ~ + %+ murn + (split-on t ',') + |= seg=tape + ^- (unit [@ud @ud]) + =/ parts=(list tape) (split-on seg '-') + ?+ (lent parts) ~ + %1 + =/ n=(unit @ud) (rush (crip (snag 0 parts)) dem) + ?~ n ~ + `[u.n u.n] + %2 + =/ a=(unit @ud) (rush (crip (snag 0 parts)) dem) + =/ b=(unit @ud) (rush (crip (snag 1 parts)) dem) + ?~ a ~ + ?~ b ~ + ?: (gth u.a u.b) ~ + `[u.a u.b] + == +:: +:: +split-on: split tape on a character +:: +++ split-on + |= [t=tape c=@t] + ^- (list tape) + =/ acc=(list tape) ~ + =/ cur=tape ~ + |- + ?~ t + (flop [(flop cur) acc]) + ?: =(i.t c) + $(t t.t, acc [(flop cur) acc], cur ~) + $(t t.t, cur [i.t cur]) +:: +:: +await-sum-call: wait for API call to reach status=done, return response +:: +++ await-sum-call + |= =wire + =/ m (fiber:fiber:nexus ,json) + ^- form:m + |- + ;< upd=view:nexus bind:m (take-news:io wire) + ?. ?=([%file *] upd) $ + =/ j=json (fall (mole |.(!<(json q.sage.upd))) *json) + ?. ?=(%o -.j) $ + =/ status=(unit json) (~(get by p.j) 'status') + ?. ?=([~ %s %'done'] status) $ + (pure:m (fall (~(get by p.j) 'response') [%o ~])) +:: +++ list-agents-tool + ^- tool:nex-tools + |% + ++ name 'list_agents' + ++ description + ^~ %- crip + ;: weld + "List all sibling agents and their about.txt descriptions. " + "Returns each agent's name and self-description so you can " + "find the right agent to talk to for a task." + == + ++ parameters *(map @t parameter-def:nex-tools) + ++ required *(list @t) + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ;< here=rail:tarball bind:m get-here-abs:io + :: path is .../agents/[name]/proc/tools; agent name is 3rd from end + =/ self-name=@ta + =/ p=path path.here + =/ l=@ (lent p) + ?: (lth l 3) *@ta + (snag (sub l 3) p) + :: peek at ../ (agents dir from agent root) + =/ agents-road=road:tarball (agent-road '../') + ;< =seen:nexus bind:m (peek:io agents-road ~) + ?. ?=([%& %ball *] seen) + (pure:m [%error 'Could not read agents directory']) + =/ names=(list @ta) + (sort ~(tap in ~(key by dir.ball.p.seen)) aor) + =/ out=(list tape) ~ + |- + ?~ names + ?~ out + (pure:m [%text 'No agents found.']) + (pure:m [%text (crip (zing (flop out)))]) + =/ name=@ta i.names + =/ about-road=road:tarball + (agent-road (crip "../{(trip name)}/about.txt")) + ;< about-seen=seen:nexus bind:m (peek:io about-road ~) + =/ about=tape + ?. ?=([%& %file *] about-seen) "(no about.txt)" + =/ wn=(each wain tang) (mule |.(!<(wain q.sage.p.about-seen))) + ?. ?=(%& -.wn) "(unreadable)" + (trip (of-wain:format p.wn)) + =/ tag=tape ?:(=(name self-name) " [self]" "") + =/ line=tape "{(trip name)}{tag}: {about}\0a" + $(names t.names, out [line out]) + -- +:: +++ search-agents-tool + ^- tool:nex-tools + |% + ++ name 'search_agents' + ++ description + ^~ %- crip + ;: weld + "Search sibling agents' about.txt files for a keyword. " + "Returns matching agents with their descriptions. " + "Use this to find an agent with specific capabilities." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['query' [%string 'Keyword to search for in agent descriptions']]]) + ++ required ~['query'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ query=(get-arg st 'query') + (pure:m [%error 'Missing required argument: query']) + ;< here=rail:tarball bind:m get-here-abs:io + =/ self-name=@ta + =/ p=path path.here + =/ l=@ (lent p) + ?: (lth l 3) *@ta + (snag (sub l 3) p) + =/ needle=tape (cass:so (trip u.query)) + =/ agents-road=road:tarball (agent-road '../') + ;< =seen:nexus bind:m (peek:io agents-road ~) + ?. ?=([%& %ball *] seen) + (pure:m [%error 'Could not read agents directory']) + =/ names=(list @ta) + (sort ~(tap in ~(key by dir.ball.p.seen)) aor) + =/ out=(list tape) ~ + |- + ?~ names + ?~ out + (pure:m [%text (crip "No agents matching '{(trip u.query)}'.")]) + (pure:m [%text (crip (zing (flop out)))]) + =/ name=@ta i.names + =/ about-road=road:tarball + (agent-road (crip "../{(trip name)}/about.txt")) + ;< about-seen=seen:nexus bind:m (peek:io about-road ~) + =/ about=tape + ?. ?=([%& %file *] about-seen) "" + =/ wn=(each wain tang) (mule |.(!<(wain q.sage.p.about-seen))) + ?. ?=(%& -.wn) "" + (trip (of-wain:format p.wn)) + :: case-insensitive match + ?. !=(~ (find needle (cass:so about))) + $(names t.names) + =/ tag=tape ?:(=(name self-name) " [self]" "") + =/ line=tape "{(trip name)}{tag}: {about}\0a" + $(names t.names, out [line out]) + -- +:: +++ cron-add-tool + ^- tool:nex-tools + |% + ++ name 'cron_add' + ++ description + ^~ %- crip + ;: weld + "Add a scheduled cron job. The job fires a message to a chat on a " + "recurring schedule. Cron format: 'min hour dom month dow' " + "(e.g. '0 9 * * *' for daily at 9am, '*/5 * * * *' for every 5 min). " + "dow: 0=Sun..6=Sat." + == + ++ parameters + ^- (map @t parameter-def:nex-tools) + %- malt + :~ ['schedule' [%string 'Cron expression (5 fields: min hour dom month dow)']] + ['chat' [%string 'Target chat name to send the message to']] + ['message' [%string 'Message content to send when the cron fires']] + ['id' [%string 'Optional job ID (auto-generated if omitted)']] + == + ++ required ~['schedule' 'chat' 'message'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ schedule=(get-arg st 'schedule') + (pure:m [%error 'Missing required argument: schedule']) + ?~ chat=(get-arg st 'chat') + (pure:m [%error 'Missing required argument: chat']) + ?~ message=(get-arg st 'message') + (pure:m [%error 'Missing required argument: message']) + :: validate cron expression + ;< now=@da bind:m get-time:io + =/ next=(unit @da) (next-cron-fire:cron u.schedule now) + ?~ next + (pure:m [%error (crip "Invalid cron expression: {(trip u.schedule)}")]) + :: generate or use provided ID + =/ job-id=@ta + =/ raw=(unit @t) (get-arg st 'id') + ?^ raw (crip (cass:so (trip u.raw))) + (scot %uv (mix now (mug u.schedule))) + :: create proc/cron/{id} with state + =/ cron-state=json + %- pairs:enjs:format + :~ ['schedule' s+u.schedule] + ['chat' s+u.chat] + ['message' s+u.message] + == + ;< cron-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%& /proc/cron job-id]) + ;< ~ bind:m (make:io cron-road |+[%.n [[/ %json] !>(cron-state)] ~]) + =/ msg=@t + %- crip + ;: weld + "Cron job '{(trip job-id)}' created.\0a" + "Schedule: {(trip u.schedule)}\0a" + "Chat: {(trip u.chat)}\0a" + "Next fire: {(scow %da u.next)}" + == + (pure:m [%text msg]) + -- +:: +++ cron-list-tool + ^- tool:nex-tools + |% + ++ name 'cron_list' + ++ description 'List all active cron jobs with their schedules, target chats, and messages.' + ++ parameters *(map @t parameter-def:nex-tools) + ++ required *(list @t) + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ;< cron-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%| /proc/cron]) + ;< =seen:nexus bind:m (peek:io cron-road ~) + ?. ?=([%& %ball *] seen) + (pure:m [%text 'No cron jobs.']) + ?~ fil.ball.p.seen + (pure:m [%text 'No cron jobs.']) + =/ jobs=(list [@ta *]) ~(tap by contents.u.fil.ball.p.seen) + =/ out=(list tape) ~ + |- + ?~ jobs + ?~ out + (pure:m [%text 'No cron jobs.']) + (pure:m [%text (crip (zing (flop out)))]) + =/ [job-name=@ta *] i.jobs + =/ job-road=road:tarball + (agent-road (crip "./proc/cron/{(trip job-name)}")) + ;< job-seen=seen:nexus bind:m (peek:io job-road `[/ %json]) + =/ line=tape + ?. ?=([%& %file *] job-seen) + "{(trip job-name)}: (unreadable)\0a" + =/ j=json (fall (mole |.(!<(json q.sage.p.job-seen))) *json) + ?. ?=(%o -.j) "{(trip job-name)}: (invalid state)\0a" + =/ sched=@t (fall (bind (~(get by p.j) 'schedule') |=(=json ?>(?=(%s -.json) p.json))) '?') + =/ chat=@t (fall (bind (~(get by p.j) 'chat') |=(=json ?>(?=(%s -.json) p.json))) '?') + =/ msg=@t (fall (bind (~(get by p.j) 'message') |=(=json ?>(?=(%s -.json) p.json))) '?') + "{(trip job-name)}: [{(trip sched)}] -> {(trip chat)} \"{(trip (end 3^60 msg))}\"\0a" + $(jobs t.jobs, out [line out]) + -- +:: +++ cron-remove-tool + ^- tool:nex-tools + |% + ++ name 'cron_remove' + ++ description 'Remove a cron job by its ID. Use cron_list to see active jobs.' + ++ parameters + ^- (map @t parameter-def:nex-tools) + (malt ~[['id' [%string 'The cron job ID to remove']]]) + ++ required ~['id'] + ++ handler + ^- tool-handler:nex-tools + =/ m (fiber:fiber:nexus ,tool-result:nex-tools) + ^- form:m + ;< st=tool-state:nex-tools bind:m (get-state-as:io ,tool-state:nex-tools) + ?~ id=(get-arg st 'id') + (pure:m [%error 'Missing required argument: id']) + =/ job-id=@ta (crip (cass:so (trip u.id))) + ;< cron-road=road:tarball bind:m + (ancestor-road:io [/claw %agent] [%& /proc/cron job-id]) + ;< exists=? bind:m (peek-exists:io cron-road) + ?. exists + (pure:m [%error (crip "Cron job not found: {(trip job-id)}")]) + ;< ~ bind:m (cull:io cron-road) + (pure:m [%text (crip "Cron job '{(trip job-id)}' removed.")]) + -- +-- diff --git a/desk/gub/nex/claw/api/anthropic.hoon b/desk/gub/nex/claw/api/anthropic.hoon new file mode 100644 index 0000000..659b219 --- /dev/null +++ b/desk/gub/nex/claw/api/anthropic.hoon @@ -0,0 +1,619 @@ +:: claw/api/anthropic: Anthropic API proxy nexus +:: +:: Standard API: +:: config.json -- api-key, url +:: main.sig -- poke with {id, body} to create a call +:: calls/ -- per-request lifecycle files +:: +:: Flow: +:: 1. Caller subscribes (keep) to calls/[id].json before it exists +:: 2. Caller pokes main.sig with {"id": "...", "body": {...}} +:: 3. main.sig creates calls/[id].json with {status: "pending", request: body} +:: 4. calls/[id].json fiber starts, reads config, makes HTTP call +:: 5. Fiber overwrites self with {status: "done", response: ...} +:: 6. Caller gets news, reads response, drops subscription +:: +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + =/ default-rates=json + %- pairs:enjs:format + :~ :- 'claude-opus-4-7' + (pairs:enjs:format ~[['in' s+'5.00'] ['out' s+'25.00']]) + :- 'claude-sonnet-4-6' + (pairs:enjs:format ~[['in' s+'3.00'] ['out' s+'15.00']]) + :- 'claude-haiku-4-5-20251001' + (pairs:enjs:format ~[['in' s+'1.00'] ['out' s+'5.00']]) + :- 'claude-opus-4-6' + (pairs:enjs:format ~[['in' s+'5.00'] ['out' s+'25.00']]) + :- 'claude-sonnet-4-5-20250929' + (pairs:enjs:format ~[['in' s+'3.00'] ['out' s+'15.00']]) + :- 'claude-opus-4-5-20251101' + (pairs:enjs:format ~[['in' s+'5.00'] ['out' s+'25.00']]) + :- 'claude-opus-4-1-20250805' + (pairs:enjs:format ~[['in' s+'15.00'] ['out' s+'75.00']]) + :- 'claude-sonnet-4-20250514' + (pairs:enjs:format ~[['in' s+'3.00'] ['out' s+'15.00']]) + :- 'claude-opus-4-20250514' + (pairs:enjs:format ~[['in' s+'15.00'] ['out' s+'75.00']]) + == + =/ default-config=json + %- pairs:enjs:format + :~ ['api-key' s+''] + ['url' s+'https://api.anthropic.com/v1/messages'] + == + =/ default-usage=json + %- pairs:enjs:format + :~ ['input-tokens' (numb:enjs:format 0)] + ['output-tokens' (numb:enjs:format 0)] + ['cache-read-tokens' (numb:enjs:format 0)] + ['cache-write-tokens' (numb:enjs:format 0)] + ['requests' (numb:enjs:format 0)] + ['calls' [%a ~]] + == + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/ %'config.json'] %.n [~ [/ %json] !>(default-config)]] + [%fall %& [/ %'rates.json'] %.n [~ [/ %json] !>(default-rates)]] + [%fall %& [/ %'usage.json'] %.n [~ [/ %json] !>(default-usage)]] + [%fall %| /calls [~ ~] [~ ~] empty-dir:loader] + [%over %& [/ %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html usage-page)))]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /main.sig: accept poke with {id, body}, create calls/[id].json + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%api/anthropic: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + =/ jon=json (fall (mole |.(!<(json q.sage))) *json) + ?. ?=(%o -.jon) $ + =/ id=@t + (fall (bind (~(get by p.jon) 'id') |=(=json ?>(?=(%s -.json) p.json))) '') + =/ body=(unit json) (~(get by p.jon) 'body') + ?: |(=('' id) ?=(~ body)) + ~& >>> "%api/anthropic: missing id or body in poke" + $ + :: extract caller identity from poke source + =/ caller=@t (from-to-cord from) + ~& > ["%api/anthropic: creating call" id caller] + =/ call-road=road:tarball + (cord-to-road:tarball (crip "./calls/{(trip id)}.json")) + =/ call-content=json + %- pairs:enjs:format + :~ ['status' s+'pending'] + ['request' u.body] + ['from' s+caller] + == + ;< ~ bind:m (make:io call-road |+[%.n [[/ %json] !>(call-content)] ~]) + $ + :: /calls/[id].json: read request, make HTTP call, write response + :: + [[%calls ~] *] + ;< ~ bind:m (rise-wait:io prod "%api/anthropic call: failed") + :: read own content (the pending request) + ;< own=json bind:m (get-state-as:io ,json) + ?. ?=(%o -.own) + ~& >>> "%api/anthropic call: bad content" + (pure:m ~) + =/ request=(unit json) (~(get by p.own) 'request') + =/ caller=@t + =/ f=(unit json) (~(get by p.own) 'from') + ?~ f '' + ?. ?=(%s -.u.f) '' + p.u.f + ?~ request + ~& >>> "%api/anthropic call: no request in content" + (pure:m ~) + :: read config for credentials + ;< cfg=api-config bind:m read-config + ?: =('' api-key.cfg) + ~& >>> "%api/anthropic call: no api-key" + =/ err=json + (pairs:enjs:format ~[['status' s+'done'] ['response' (pairs:enjs:format ~[['error' s+'no api-key configured']])]]) + ;< ~ bind:m (replace:io !>(err)) + (pure:m ~) + :: build and send HTTP request + =/ body-cord=@t (en:json:html u.request) + =/ hed=(list [key=@t value=@t]) + :~ ['content-type' 'application/json'] + ['x-api-key' api-key.cfg] + ['anthropic-version' '2023-06-01'] + == + ~& > "%api/anthropic call: sending HTTP request" + ;< ~ bind:m + (send-request:io [%'POST' url.cfg hed `(as-octs:mimes:html body-cord)]) + ;< resp=client-response:iris bind:m take-http-response + :: extract response body + =/ resp-json=json + ?. ?=(%finished -.resp) + (pairs:enjs:format ~[['error' s+'HTTP request failed']]) + ?~ full-file.resp + (pairs:enjs:format ~[['error' s+'empty response']]) + =/ body=@t q.data.u.full-file.resp + (fall (mole |.((need (de:json:html body)))) (pairs:enjs:format ~[['error' s+'JSON parse failed']])) + :: extract and accumulate usage + ;< ~ bind:m (accumulate-usage resp-json caller) + :: write response — this triggers news for subscribers + =/ result=json + (pairs:enjs:format ~[['status' s+'done'] ['response' resp-json]]) + ~& > "%api/anthropic call: writing response" + ;< ~ bind:m (replace:io !>(result)) + :: done — fiber exits, file remains for caller to read and clean up + (pure:m ~) + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Directory under the Anthropic API proxy.' + ~ + %- crip + ;: weld + "ANTHROPIC API PROXY\0a\0a" + "Proxies requests to the Anthropic Messages API.\0a" + "Holds API key and URL in config.json.\0a\0a" + "Poke main.sig with \{\"id\": \"call-id\", \"body\": \{...api body...}}.\0a" + "Subscribe to calls/[id].json before poking to get the response.\0a" + "Response arrives as \{\"status\": \"done\", \"response\": \{...}}.\0a" + == + [%calls ~] + 'Per-request lifecycle files. Each call gets its own file and fiber.' + == + %| + ?+ rail.p.mana 'File under the Anthropic API proxy.' + [~ %'config.json'] 'API config: api-key, url, input-cost, output-cost (per million tokens).' + [~ %'main.sig'] 'Poke with JSON (id + body) to create a call in calls/.' + [~ %'usage.json'] 'Cumulative API usage: tokens, requests, cost. Auto-updated per call.' + [~ %'page.html'] 'Usage dashboard UI.' + [[%calls ~] *] 'API call lifecycle file. Created by main.sig, runs HTTP, writes response.' + == + == + -- +:: +|% +:: ++$ api-config + $: api-key=@t + url=@t + == +:: +++ read-config + =/ m (fiber:fiber:nexus ,api-config) + ^- form:m + =/ road=road:tarball (cord-to-road:tarball '../config.json') + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) + (pure:m ['' '']) + =/ cfg=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + ?. ?=(%o -.cfg) + (pure:m ['' '']) + =/ get + |= key=@t + ^- @t + =/ v (~(get by p.cfg) key) + ?. ?=([~ %s *] v) '' + p.u.v + (pure:m [(get 'api-key') (get 'url')]) +:: +:: +accumulate-usage: extract usage from API response and add to usage.json +:: +++ accumulate-usage + |= [resp=json caller=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. ?=(%o -.resp) (pure:m ~) + =/ usage=(unit json) (~(get by p.resp) 'usage') + ?~ usage (pure:m ~) + ?. ?=(%o -.u.usage) (pure:m ~) + =/ in-tok=@ud (get-num u.usage 'input_tokens') + =/ out-tok=@ud (get-num u.usage 'output_tokens') + =/ cache-read=@ud (get-num u.usage 'cache_read_input_tokens') + =/ cache-write=@ud (get-num u.usage 'cache_creation_input_tokens') + :: read model from response + =/ model=@t + =/ req=(unit json) (~(get by p.resp) 'model') + ?~ req '' + ?. ?=(%s -.u.req) '' + p.u.req + :: read current usage + =/ usage-road=road:tarball (cord-to-road:tarball '../usage.json') + ;< usage-seen=seen:nexus bind:m (peek:io usage-road `[/ %json]) + =/ cur=json + ?. ?=([%& %file *] usage-seen) [%o ~] + (fall (mole |.(!<(json q.sage.p.usage-seen))) [%o ~]) + ?. ?=(%o -.cur) (pure:m ~) + :: build call entry + updated call log + =/ old-calls=(list json) + =/ c=(unit json) (~(get by p.cur) 'calls') + ?~ c ~ + ?. ?=(%a -.u.c) ~ + p.u.c + ;< now=@da bind:m get-time:io + =/ entry=json + %- pairs:enjs:format + :~ ['in' (numb:enjs:format in-tok)] + ['out' (numb:enjs:format out-tok)] + ['cache-read' (numb:enjs:format cache-read)] + ['cache-write' (numb:enjs:format cache-write)] + ['model' s+model] + ['from' s+caller] + ['time' (sect:enjs:format now)] + == + =/ new-calls=json [%a [entry old-calls]] + :: accumulate totals + =/ new=json + %- pairs:enjs:format + :~ ['input-tokens' (numb:enjs:format (add in-tok (get-num cur 'input-tokens')))] + ['output-tokens' (numb:enjs:format (add out-tok (get-num cur 'output-tokens')))] + ['cache-read-tokens' (numb:enjs:format (add cache-read (get-num cur 'cache-read-tokens')))] + ['cache-write-tokens' (numb:enjs:format (add cache-write (get-num cur 'cache-write-tokens')))] + ['requests' (numb:enjs:format (add 1 (get-num cur 'requests')))] + ['calls' new-calls] + == + ;< ~ bind:m (over:io usage-road [/ %json] !>(new)) + (pure:m ~) +:: +:: +from-to-cord: convert poke source to a readable identifier +:: +++ from-to-cord + |= =from:fiber:nexus + ^- @t + ?- -.from + %| (crip "ext:{(scow %p src.p.from)}") + %& =/ =rail:tarball q.p.from + %- crip + =/ parts=(list @ta) (snoc path.rail name.rail) + =| acc=tape + |- + ?~ parts acc + ?~ acc $(parts t.parts, acc (trip i.parts)) + $(parts t.parts, acc (weld acc `tape`['/' (trip i.parts)])) + == +:: +++ get-num + |= [obj=json key=@t] + ^- @ud + ?. ?=(%o -.obj) 0 + =/ v=(unit json) (~(get by p.obj) key) + ?~ v 0 + ?+ -.u.v 0 + %n (fall (rush p.u.v dem) 0) + == +:: +:: +usage-page: UI for viewing API usage stats +:: +++ usage-page + ^- manx + ;html + ;head + ;title: API Usage + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;style + ;+ ;/ %- trip + %- crip + ;: weld + "* \{ margin: 0; padding: 0; box-sizing: border-box; }" + "body \{ font-family: -apple-system, system-ui, sans-serif; background: #111; color: #eee; height: 100vh; }" + "#app \{ display: flex; flex-direction: column; height: 100vh; }" + "#header \{ padding: 12px 16px; border-bottom: 1px solid #333; flex-shrink: 0; display: flex; justify-content: space-between; align-items: flex-start; }" + "#header h1 \{ font-size: 20px; font-weight: 700; }" + "#header > div \{ display: flex; gap: 6px; }" + ".f3 \{ color: #888; }" + ".mono \{ font-family: monospace; }" + ".s-2 \{ font-size: 12px; }" + ".hdr-btn \{ font-size: 11px; padding: 4px 10px; border-radius: 4px; border: 1px solid #444; background: none; color: #888; cursor: pointer; font-family: inherit; }" + ".hdr-btn:hover \{ color: #eee; border-color: #666; }" + ".hdr-btn.danger \{ border-color: #a33; color: #f66; }" + ".hdr-btn.danger:hover \{ color: #f87171; border-color: #f87171; background: rgba(248,113,113,0.08); }" + "#content \{ flex: 1; overflow-y: auto; max-width: 700px; width: 100%; margin: 0 auto; padding: 16px; }" + ".stats \{ display: grid; grid-template-columns: repeat(auto-fit, minmax(180px, 1fr)); gap: 12px; margin-bottom: 24px; }" + ".stat \{ background: #1a1a1a; border: 1px solid #333; border-radius: 6px; padding: 14px; }" + ".stat .label \{ color: #888; font-size: 11px; text-transform: uppercase; margin-bottom: 4px; }" + ".stat .value \{ color: #fff; font-size: 22px; font-weight: bold; font-family: monospace; }" + ".cost \{ color: #4ade80; }" + "h2 \{ font-size: 14px; font-weight: 600; color: #888; text-transform: uppercase; margin-bottom: 8px; }" + "table \{ width: 100%; border-collapse: collapse; }" + "th \{ text-align: left; color: #666; font-size: 11px; text-transform: uppercase; padding: 6px 8px; border-bottom: 1px solid #333; }" + "td \{ padding: 6px 8px; border-bottom: 1px solid #222; font-size: 13px; font-family: monospace; }" + "td.caller \{ max-width: 160px; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }" + "#error \{ color: #f87171; margin: 8px 16px; font-size: 13px; }" + "#flash \{ color: #4ade80; font-size: 12px; margin-left: 8px; }" + :: modal shared styles + ".modal-bg \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 100; }" + ".modal-bg.open \{ display: flex; align-items: center; justify-content: center; }" + ".modal \{ background: #1a1a1a; border: 1px solid #333; border-radius: 8px; width: 90%; max-width: 400px; padding: 20px; }" + ".modal-hdr \{ display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; }" + ".modal-hdr span \{ font-size: 14px; font-weight: 600; }" + ".modal-hdr div \{ display: flex; gap: 6px; }" + ".modal-status \{ margin-top: 10px; font-size: 12px; color: #4ade80; }" + ".cfg-label \{ display: block; font-size: 12px; color: #888; margin: 12px 0 4px; }" + ".cfg-label:first-child \{ margin-top: 0; }" + ".cfg-input \{ width: 100%; padding: 8px 10px; border-radius: 6px; border: 1px solid #333; background: #111; color: #eee; font-size: 13px; font-family: monospace; outline: none; box-sizing: border-box; }" + ".cfg-input:focus \{ border-color: #2563eb; }" + "textarea.cfg-input \{ resize: vertical; }" + ".rate-row \{ display: flex; gap: 6px; align-items: center; margin-bottom: 6px; }" + ".rate-row .r-model \{ flex: 2; }" + ".rate-row .r-price \{ flex: 1; }" + ".rate-row .r-del \{ width: 24px; height: 24px; display: flex; align-items: center; justify-content: center; cursor: pointer; color: #555; font-size: 16px; line-height: 1; border: none; background: none; border-radius: 4px; }" + ".rate-row .r-del:hover \{ color: #f87171; background: rgba(248,113,113,0.08); }" + ".rate-hdr \{ display: flex; gap: 6px; margin-bottom: 6px; }" + ".rate-hdr span \{ font-size: 10px; color: #666; text-transform: uppercase; }" + ".rate-hdr .r-model \{ flex: 2; }" + ".rate-hdr .r-price \{ flex: 1; }" + ".rate-hdr .r-del \{ width: 24px; }" + == + == + == + ;body + ;div(id "app") + ;div(id "header") + ;div + ;h1: API Usage + ;div(class "f3 mono s-2"): anthropic proxy + == + ;div + ;button(class "hdr-btn", onclick "openConfig()"): config + ;button(class "hdr-btn", onclick "openRates()"): rates + ;button(class "hdr-btn danger", onclick "resetUsage()"): reset + ;span(id "flash"); + == + == + ;div(id "error"); + :: config modal (api-key, url) + ;div(id "cfg-backdrop", class "modal-bg") + ;div(class "modal") + ;div(class "modal-hdr") + ;span: Config + ;div + ;button(class "hdr-btn", onclick "saveConfig()"): save + ;button(class "hdr-btn", onclick "closeModal('cfg-backdrop')"): close + == + == + ;label(class "cfg-label"): API Key + ;input(id "cfg-key", class "cfg-input", type "password", placeholder "sk-ant-..."); + ;label(class "cfg-label"): URL + ;input(id "cfg-url", class "cfg-input", type "text", placeholder "https://api.anthropic.com/v1/messages"); + ;div(id "cfg-status", class "modal-status"); + == + == + :: rates modal (per-model table) + ;div(id "rates-backdrop", class "modal-bg") + ;div(class "modal", style "max-width: 520px;") + ;div(class "modal-hdr") + ;span: Rates ($/million tokens) + ;div + ;button(class "hdr-btn", onclick "saveRates()"): save + ;button(class "hdr-btn", onclick "closeModal('rates-backdrop')"): close + == + == + ;div(id "rates-rows"); + ;div(style "margin-top: 10px;") + ;button(class "hdr-btn", onclick "addRateRow('','',' ')"): + add model + == + ;div(id "rates-status", class "modal-status"); + == + == + ;div(id "content") + ;div(class "stats") + ;div(class "stat") + ;div(class "label"): Input Tokens + ;div(class "value", id "in-tok"): - + == + ;div(class "stat") + ;div(class "label"): Output Tokens + ;div(class "value", id "out-tok"): - + == + ;div(class "stat") + ;div(class "label"): Cache Read + ;div(class "value", id "cache-read"): - + == + ;div(class "stat") + ;div(class "label"): Cache Write + ;div(class "value", id "cache-write"): - + == + ;div(class "stat") + ;div(class "label"): Requests + ;div(class "value", id "requests"): - + == + ;div(class "stat") + ;div(class "label"): Estimated Cost + ;div(class "value cost", id "total-cost"): - + == + == + ;h2: Cost by Caller + ;table + ;thead + ;tr + ;th: Caller + ;th: Requests + ;th: In + ;th: Out + ;th: Cost + == + == + ;tbody(id "caller-log"); + == + ;h2(style "margin-top: 24px;"): Recent Calls + ;table + ;thead + ;tr + ;th: # + ;th: Time + ;th: Caller + ;th: Model + ;th: In + ;th: Cache R + ;th: Cache W + ;th: Out + ;th: Cost + == + == + ;tbody(id "call-log"); + == + == + == + ;script + ;+ ;/ %- trip + %- crip + ;: weld + "var P=location.pathname.replace(/page\\.html$/,'');\0a" + "var OVER=P.replace('/ball/','/api/over/');\0a" + "var RATES=null;\0a" + "function fmt(n)\{ return n.toLocaleString(); }\0a" + "function fmtTime(t)\{ if(!t) return '-'; var d=new Date(t*1000); return d.toLocaleDateString()+' '+d.toLocaleTimeString(); }\0a" + "function $(id)\{ return document.getElementById(id); }\0a" + "function rate(model,dir)\{\0a" + " if(!RATES||!RATES[model]) return 0;\0a" + " return parseFloat(RATES[model][dir]||'0');\0a" + "}\0a" + "function callCost(c)\{\0a" + " var ri=rate(c.model,'in'), ro=rate(c.model,'out');\0a" + " var cr=(c['cache-read']||0), cw=(c['cache-write']||0);\0a" + " return ((c.in||0)/1e6)*ri + (cr/1e6)*(ri*0.1) + (cw/1e6)*(ri*1.25) + ((c.out||0)/1e6)*ro;\0a" + "}\0a" + "function load()\{\0a" + " Promise.all([\0a" + " fetch(P+'usage.json').then(r=>r.json()),\0a" + " fetch(P+'rates.json').then(r=>r.json())\0a" + " ]).then(([u,r])=>\{\0a" + " RATES=r;\0a" + " $('in-tok').textContent=fmt(u['input-tokens']||0);\0a" + " $('out-tok').textContent=fmt(u['output-tokens']||0);\0a" + " $('cache-read').textContent=fmt(u['cache-read-tokens']||0);\0a" + " $('cache-write').textContent=fmt(u['cache-write-tokens']||0);\0a" + " $('requests').textContent=fmt(u['requests']||0);\0a" + " var totalCost=0;\0a" + " (u.calls||[]).forEach(function(cl)\{ totalCost+=callCost(cl); });\0a" + " $('total-cost').textContent='$'+totalCost.toFixed(4);\0a" + " var callers=Object.create(null);\0a" + " (u.calls||[]).forEach(function(cl)\{\0a" + " var f=cl.from||'unknown';\0a" + " if(!callers[f]) callers[f]=\{reqs:0,in:0,out:0,cost:0};\0a" + " callers[f].reqs++; callers[f].in+=(cl.in||0); callers[f].out+=(cl.out||0); callers[f].cost+=callCost(cl);\0a" + " });\0a" + " var ct=$('caller-log'); ct.innerHTML='';\0a" + " Object.keys(callers).sort().forEach(function(f)\{\0a" + " var c=callers[f]; var r=document.createElement('tr');\0a" + " r.innerHTML=''+f+''+c.reqs+''+fmt(c.in)+''+fmt(c.out)+'$'+c.cost.toFixed(4)+'';\0a" + " ct.appendChild(r);\0a" + " });\0a" + " var tb=$('call-log'); tb.innerHTML='';\0a" + " (u.calls||[]).forEach(function(cl,i)\{\0a" + " var r=document.createElement('tr');\0a" + " var cc=callCost(cl);\0a" + " var cf=cl.from||'-';\0a" + " r.innerHTML=''+(i+1)+''+fmtTime(cl.time)+''+cf+''+(cl.model||'-')+''+fmt(cl.in||0)+''+fmt(cl['cache-read']||0)+''+fmt(cl['cache-write']||0)+''+fmt(cl.out||0)+'$'+cc.toFixed(4)+'';\0a" + " tb.appendChild(r);\0a" + " });\0a" + " }).catch(e=>\{ $('error').textContent='Failed to load: '+e; });\0a" + "}\0a" + :: modal helpers + "function closeModal(id)\{ $(id).classList.remove('open'); }\0a" + "document.querySelectorAll('.modal-bg').forEach(bg=>\{\0a" + " bg.onclick=function(e)\{ if(e.target===bg) bg.classList.remove('open'); };\0a" + "});\0a" + :: config modal + "function openConfig()\{\0a" + " $('cfg-status').textContent='';\0a" + " fetch(P+'config.json').then(r=>r.json()).then(c=>\{\0a" + " $('cfg-key').value=c['api-key']||'';\0a" + " $('cfg-url').value=c.url||'';\0a" + " }).catch(()=>\{});\0a" + " $('cfg-backdrop').classList.add('open');\0a" + "}\0a" + "function saveConfig()\{\0a" + " var key=$('cfg-key').value.trim();\0a" + " var url=$('cfg-url').value.trim()||'https://api.anthropic.com/v1/messages';\0a" + " fetch(OVER+'config.json?mark=json',\{method:'POST',headers:\{'content-type':'application/json'},\0a" + " body:JSON.stringify(\{'api-key':key,url:url})\0a" + " }).then(r=>\{\0a" + " var s=$('cfg-status');\0a" + " if(r.ok)\{ s.textContent='saved'; s.style.color='#4ade80'; setTimeout(()=>closeModal('cfg-backdrop'),800); }\0a" + " else\{ s.textContent='save failed'; s.style.color='#f87171'; }\0a" + " });\0a" + "}\0a" + :: rates modal + "function addRateRow(model,inR,outR)\{\0a" + " var c=$('rates-rows');\0a" + " var d=document.createElement('div'); d.className='rate-row';\0a" + " d.innerHTML=''\0a" + " +''\0a" + " +''\0a" + " +'';\0a" + " c.appendChild(d);\0a" + "}\0a" + "function openRates()\{\0a" + " $('rates-status').textContent='';\0a" + " $('rates-rows').innerHTML='
ModelInOut
';\0a" + " fetch(P+'rates.json').then(r=>r.json()).then(j=>\{\0a" + " Object.keys(j).forEach(m=>addRateRow(m,j[m].in||'0',j[m].out||'0'));\0a" + " }).catch(()=>\{});\0a" + " $('rates-backdrop').classList.add('open');\0a" + "}\0a" + "function saveRates()\{\0a" + " var rows=$('rates-rows').querySelectorAll('.rate-row');\0a" + " var obj=Object.create(null);\0a" + " rows.forEach(r=>\{\0a" + " var inputs=r.querySelectorAll('input');\0a" + " var m=inputs[0].value.trim(); if(!m) return;\0a" + " obj[m]=\{in:inputs[1].value||'0',out:inputs[2].value||'0'};\0a" + " });\0a" + " fetch(OVER+'rates.json?mark=json',\{method:'POST',headers:\{'content-type':'application/json'},body:JSON.stringify(obj)\0a" + " }).then(r=>\{\0a" + " var s=$('rates-status');\0a" + " if(r.ok)\{ s.textContent='saved'; s.style.color='#4ade80'; setTimeout(()=>closeModal('rates-backdrop'),600); load(); }\0a" + " else\{ s.textContent='save failed'; s.style.color='#f87171'; }\0a" + " });\0a" + "}\0a" + :: reset + "function resetUsage()\{\0a" + " if(!confirm('Reset all usage data? This cannot be undone.')) return;\0a" + " fetch(OVER+'usage.json?mark=json',\{method:'POST',headers:\{'content-type':'application/json'},\0a" + " body:JSON.stringify(\{'input-tokens':0,'output-tokens':0,'cache-read-tokens':0,'cache-write-tokens':0,'requests':0,'calls':[]})\0a" + " }).then(r=>\{\0a" + " if(!r.ok)\{ $('error').textContent='Reset failed'; return; }\0a" + " flash('Reset'); load();\0a" + " }).catch(e=>\{ $('error').textContent='Reset failed: '+e; });\0a" + "}\0a" + "function flash(t)\{ $('flash').textContent=t; setTimeout(()=>$('flash').textContent='',2000); }\0a" + "load(); setInterval(load, 5000);\0a" + == + == + == + == +:: +++ take-http-response + =/ m (fiber:fiber:nexus ,client-response:iris) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error:io dart.u.in)] + [~ %poke * *] + ?. =([/ %http-response] p.sage.u.in) [%skip ~] + =/ resp=client-response:iris !<(client-response:iris q.sage.u.in) + ?: ?=(%cancel -.resp) + [%fail ~[leaf+"HTTP request cancelled"]] + [%done resp] + == +-- diff --git a/desk/gub/nex/claw/app.hoon b/desk/gub/nex/claw/app.hoon new file mode 100644 index 0000000..20dca8a --- /dev/null +++ b/desk/gub/nex/claw/app.hoon @@ -0,0 +1,671 @@ +:: claw/app: agent container nexus +:: +:: Creates and manages claw agents in /agents/. Each agent runs +:: /claw/agent code with a read-only weir (peek everywhere, no +:: writes or pokes outside their own tree). +:: +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %| /apis [~ ~] [~ ~] empty-dir:loader] + [%fall %| /apis/anthropic [~ ~] [~ ~] [`[~ `[/claw/api %anthropic] ~] ~]] + [%fall %| /agents [~ ~] [~ ~] empty-dir:loader] + [%fall %| /agents/main [`main-agent-weir ~] [~ ~] [`[~ `[/claw %agent] ~] ~]] + [%fall %| /channels [~ ~] [~ ~] empty-dir:loader] + [%fall %| /channels/telegram/main-bot [~ ~] [~ ~] [`[~ `[/claw/channel %telegram] ~] ~]] + [%fall %| /ui/sse [~ ~] [~ ~] empty-dir:loader] + [%over %& [/ui/sse %'agents.html'] %.n [~ [/ %html] !>((crip (en-xml:html (agents-fragment "" ~))))]] + [%over %& [/ui/sse %'channels.html'] %.n [~ [/ %html] !>((crip (en-xml:html (channels-fragment "" ~))))]] + [%over %& [/ui/sse %'apis.html'] %.n [~ [/ %html] !>((crip (en-xml:html (apis-fragment "" ~))))]] + [%over %& [/ %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html (dashboard-page "" ~ ~ ~))))]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: + [~ %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%claw/app page: failed") + ;< here=rail:tarball bind:m get-here-abs:io + =/ ball-id=tape (path-to-ball-id path.here) + ;< agents=view:nexus bind:m + (keep:io /agents (cord-to-road:tarball './agents/') ~) + ;< channels=view:nexus bind:m + (keep:io /channels (cord-to-road:tarball './channels/') ~) + ;< apis=view:nexus bind:m + (keep:io /apis (cord-to-road:tarball './apis/') ~) + ;< ~ bind:m + (replace:io !>((crip (en-xml:html (dashboard-page ball-id (read-names agents) (read-entities channels) (read-entities apis)))))) + |- + ;< [tag=?(%agents %channels %apis) =view:nexus] bind:m + (take-any-news /agents /channels /apis) + =? agents =(tag %agents) view + =? channels =(tag %channels) view + =? apis =(tag %apis) view + ;< ~ bind:m + (replace:io !>((crip (en-xml:html (dashboard-page ball-id (read-names agents) (read-entities channels) (read-entities apis)))))) + $ + :: + [[%ui %sse ~] %'agents.html'] + ;< ~ bind:m (rise-wait:io prod "%claw/app sse/agents: failed") + ;< here=rail:tarball bind:m get-here-abs:io + =/ ball-id=tape (path-to-ball-id (snip (snip path.here))) + ;< init=view:nexus bind:m + (keep:io /agents (cord-to-road:tarball '../../agents/') ~) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (agents-fragment ball-id (read-names init)))))) + |- + ;< upd=view:nexus bind:m (take-news:io /agents) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (agents-fragment ball-id (read-names upd)))))) + $ + :: + [[%ui %sse ~] %'channels.html'] + ;< ~ bind:m (rise-wait:io prod "%claw/app sse/channels: failed") + ;< here=rail:tarball bind:m get-here-abs:io + =/ ball-id=tape (path-to-ball-id (snip (snip path.here))) + ;< init=view:nexus bind:m + (keep:io /channels (cord-to-road:tarball '../../channels/') ~) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (channels-fragment ball-id (read-entities init)))))) + |- + ;< upd=view:nexus bind:m (take-news:io /channels) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (channels-fragment ball-id (read-entities upd)))))) + $ + :: + [[%ui %sse ~] %'apis.html'] + ;< ~ bind:m (rise-wait:io prod "%claw/app sse/apis: failed") + ;< here=rail:tarball bind:m get-here-abs:io + =/ ball-id=tape (path-to-ball-id (snip (snip path.here))) + ;< init=view:nexus bind:m + (keep:io /apis (cord-to-road:tarball '../../apis/') ~) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (apis-fragment ball-id (read-entities init)))))) + |- + ;< upd=view:nexus bind:m (take-news:io /apis) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (apis-fragment ball-id (read-entities upd)))))) + $ + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%claw/app main: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + =/ jon=json (fall (mole |.(!<(json q.sage))) *json) + ?~ jon $ + ?. ?=(%o -.jon) $ + =/ act=@t + (fall (bind (~(get by p.jon) 'action') |=(=json ?>(?=(%s -.json) p.json))) '') + ?+ act $ + %'create' + =/ name=@t + (fall (bind (~(get by p.jon) 'name') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: =('' name) $ + =/ agent-road=road:tarball + (cord-to-road:tarball (crip "./agents/{(trip name)}/")) + =/ new-ball=ball:tarball [`[~ `[/claw %agent] ~] ~] + =/ new-sand=sand:nexus [`agents-weir ~] + ;< ~ bind:m (make:io agent-road &+[new-sand *gain:nexus new-ball]) + =/ agent-cfg=json + %- pairs:enjs:format + :~ ['model' s+'claude-sonnet-4-20250514'] + ['api-proxy' s+'anthropic'] + ['context_window' (numb:enjs:format 80.000)] + ['message_cap' (numb:enjs:format 20.000)] + ['channel' s+''] + == + =/ cfg-road=road:tarball + (cord-to-road:tarball (crip "./agents/{(trip name)}/config.json")) + ;< ~ bind:m (over:io cfg-road [[/ %json] !>(agent-cfg)]) + $ + :: + %'delete' + =/ name=@t + (fall (bind (~(get by p.jon) 'name') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: =('' name) $ + =/ agent-road=road:tarball + (cord-to-road:tarball (crip "./agents/{(trip name)}/")) + ;< ~ bind:m (cull:io agent-road) + $ + :: + %'create-channel' + =/ name=@t + (fall (bind (~(get by p.jon) 'name') |=(=json ?>(?=(%s -.json) p.json))) '') + =/ chan-type=@t + (fall (bind (~(get by p.jon) 'type') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: |(=('' name) =('' chan-type)) + ~& >>> "%claw/app: create-channel missing name or type" + $ + =/ chan-road=road:tarball + (cord-to-road:tarball (crip "./channels/{(trip name)}/")) + =/ neck=neck:tarball [/claw/channel (slav %tas chan-type)] + =/ new-ball=ball:tarball [`[~ `neck ~] ~] + ;< ~ bind:m (make:io chan-road &+[*sand:nexus *gain:nexus new-ball]) + $ + :: + %'delete-channel' + =/ name=@t + (fall (bind (~(get by p.jon) 'name') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: =('' name) $ + ;< ~ bind:m (cull:io (cord-to-road:tarball (crip "./channels/{(trip name)}/"))) + $ + :: + %'create-api' + =/ name=@t + (fall (bind (~(get by p.jon) 'name') |=(=json ?>(?=(%s -.json) p.json))) '') + =/ api-type=@t + (fall (bind (~(get by p.jon) 'type') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: |(=('' name) =('' api-type)) + ~& >>> "%claw/app: create-api missing name or type" + $ + =/ api-road=road:tarball + (cord-to-road:tarball (crip "./apis/{(trip name)}/")) + =/ neck=neck:tarball [/claw/api (slav %tas api-type)] + =/ new-ball=ball:tarball [`[~ `neck ~] ~] + ;< ~ bind:m (make:io api-road &+[*sand:nexus *gain:nexus new-ball]) + $ + :: + %'delete-api' + =/ name=@t + (fall (bind (~(get by p.jon) 'name') |=(=json ?>(?=(%s -.json) p.json))) '') + ?: =('' name) $ + ;< ~ bind:m (cull:io (cord-to-road:tarball (crip "./apis/{(trip name)}/"))) + $ + == + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Directory under the claw agent container.' + ~ + %- crip + ;: weld + "CLAW AGENT CONTAINER\0a\0a" + "Manages claw agent nexuses in /agents/ and channels in /channels/.\0a" + "Each agent runs /claw/agent code with a read-only weir.\0a" + "Channels exist independently; agents link to them via their config.\0a\0a" + "Poke main.sig with JSON:\0a" + " \{\"action\": \"create\", \"name\": \"my-agent\"}\0a" + " \{\"action\": \"delete\", \"name\": \"my-agent\"}\0a" + " \{\"action\": \"create-channel\", \"name\": \"tg\", \"type\": \"telegram\"}\0a" + " \{\"action\": \"delete-channel\", \"name\": \"tg\"}\0a" + " \{\"action\": \"create-api\", \"name\": \"openai\", \"type\": \"openai\"}\0a" + " \{\"action\": \"delete-api\", \"name\": \"openai\"}\0a\0a" + "API proxy nexuses in /apis/ handle HTTP for sandboxed agents.\0a" + == + [%agents ~] + 'Agent nexuses. Each subdirectory is a claw agent with /claw/agent code.' + [%apis ~] + 'API proxy nexuses. Each subdirectory is a proxy nexus (e.g. anthropic/).' + [%ui %sse ~] + 'SSE fragments for live dashboard updates.' + == + %| + ?+ rail.p.mana 'File under the claw agent container.' + [~ %'main.sig'] + 'Management process. Poke with JSON to create or delete agents.' + [~ %'page.html'] + 'Dashboard page. Lists all agents with links to their UIs.' + [[%apis ~] %'anthropic'] + 'Anthropic API proxy nexus. Contains config.json (api-key, url) and main.sig (poke endpoint).' + [[%ui %sse ~] %'agents.html'] + 'Agent list HTML fragment for SSE live updates.' + [[%ui %sse ~] %'channels.html'] + 'Channel list HTML fragment for SSE live updates.' + [[%ui %sse ~] %'apis.html'] + 'API list HTML fragment for SSE live updates.' + == + == + -- +:: +|% +:: +agents-weir: weir for individual agent at ./agents/{name}/ +:: +++ agents-weir + ^- weir:nexus + :+ ~ + (sy ~[&+[%| /sys/bowl] |+[2 |+/apis] |+[2 |+/channels] &+[%& /sys/behn %'main.timer-state']]) + (sy ~[&+[%| /]]) +:: +main-agent-weir: agents-weir + make/poke on /agents +:: +++ main-agent-weir + ^- weir:nexus + :+ (sy ~[|+[2 |+/agents]]) + (sy ~[&+[%| /sys/bowl] |+[2 |+/apis] |+[2 |+/channels] |+[2 |+/agents] &+[%& /sys/behn %'main.timer-state']]) + (sy ~[&+[%| /]]) +:: +path-to-ball-id: join a path into a slash-separated tape for URLs +:: +++ path-to-ball-id + |= =path + ^- tape + (zing (join "/" ^-((list tape) (turn path trip)))) +:: +:: +read-names: extract top-level names from a directory view +:: +++ read-names + |= =view:nexus + ^- (list @ta) + ?. ?=(%ball -.view) ~ + %+ turn ~(tap by dir.ball.view) + |= [name=@ta *] name +:: +:: +read-entities: find nexus instances (balls with necks) in a tree +:: returns [name type] pairs like ['telegram/main-bot' 'telegram'] +:: +++ read-entities + |= =view:nexus + ^- (list [name=@ta type=@ta]) + ?. ?=(%ball -.view) ~ + (walk-ball ~ dir.ball.view) +:: +++ walk-ball + |= [prefix=path entries=(map @ta ball:tarball)] + ^- (list [name=@ta type=@ta]) + %- zing + %+ turn ~(tap by entries) + |= [name=@ta sub=ball:tarball] + =/ full=path (snoc prefix name) + ?: ?& ?=(^ fil.sub) + ?=(^ neck.u.fil.sub) + == + =/ nk=neck:tarball u.neck.u.fil.sub + :_ ~ + :_ name.nk + (crip (zing (join "/" (turn full trip)))) + (walk-ball full dir.sub) +:: +:: +agents-fragment: just the agent list HTML for SSE updates +:: +++ agents-fragment + |= [ball-id=tape agents=(list @ta)] + ^- manx + =/ sorted=(list @ta) (sort agents aor) + ;div(id "sse-agents") + ;* ?~ sorted + =/ empty=manx ;div.empty: no agents yet + ~[empty] + (turn sorted |=(n=@ta (agent-card ball-id n))) + == +:: +:: +dashboard-page: render the agent dashboard +:: +++ dashboard-page + |= $: ball-id=tape + agents=(list @ta) + channels=(list [name=@ta type=@ta]) + apis=(list [name=@ta type=@ta]) + == + ^- manx + =/ sorted-agents=(list @ta) (sort agents aor) + =/ sorted-channels=(list [name=@ta type=@ta]) + (sort channels |=([[a=@ta *] [b=@ta *]] (aor a b))) + =/ sorted-apis=(list [name=@ta type=@ta]) + (sort apis |=([[a=@ta *] [b=@ta *]] (aor a b))) + ;html + ;head + ;title: claw + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;style + ;+ ;/ style-text + == + == + ;body + ;div#app + ;div#header + ;div + ;h1: claw + ;div.f3.mono.s-2: agent container + == + == + ;div#cfg-backdrop + ;div#cfg-modal + ;div#cfg-header + ;span#cfg-title: Config + ;div + ;button#cfg-save.hdr-btn: save + ;button#cfg-close.hdr-btn: close + == + == + ;textarea#cfg-json(rows "8", placeholder "\{}", style "width:100%;font-family:monospace;font-size:12px;border:1px solid #333;border-radius:6px;padding:10px;resize:vertical;background:#111;color:#eee;outline:none;"); + ;div#cfg-status; + == + == + ;div.section-header + ;h2.section-title: agents + == + ;div.create-bar + ;input.create-name(id "agent-name", type "text", placeholder "agent name...", autocomplete "off"); + ;button.create-btn(onclick "createEntity('agents')"): + new + == + ;div#agents + ;* ?~ sorted-agents + =/ empty=manx ;div.empty: no agents yet + ~[empty] + (turn sorted-agents |=(n=@ta (agent-card ball-id n))) + == + ;div.section-header + ;h2.section-title: apis + == + ;div.create-bar + ;input.create-name(id "api-name", type "text", placeholder "name...", autocomplete "off"); + ;input.create-type(id "api-type", type "text", placeholder "type (e.g. anthropic)", autocomplete "off"); + ;button.create-btn(onclick "createEntity('apis')"): + new + == + ;div#apis + ;* ?~ sorted-apis + =/ empty=manx ;div.empty: no apis yet + ~[empty] + (turn sorted-apis |=([n=@ta t=@ta] (api-card ball-id n t))) + == + ;div.section-header + ;h2.section-title: channels + == + ;div.create-bar + ;input.create-name(id "ch-name", type "text", placeholder "name...", autocomplete "off"); + ;input.create-type(id "ch-type", type "text", placeholder "type (e.g. telegram)", autocomplete "off"); + ;button.create-btn(onclick "createEntity('channels')"): + new + == + ;div#channels + ;* ?~ sorted-channels + =/ empty=manx ;div.empty: no channels yet + ~[empty] + (turn sorted-channels |=([n=@ta t=@ta] (channel-card ball-id n t))) + == + == + ;script + ;+ ;/ (script-text ball-id) + == + == + == +:: +++ agent-card + |= [ball-id=tape name=@ta] + ^- manx + =/ n=tape (trip name) + ;div.agent-card(data-agent n) + ;a.agent-name(href "/grubbery/ball/{ball-id}/agents/{n}/page.html"): {n} + ;div.card-actions + ;button.hdr-btn(onclick "openConfig('agents','{n}')"): config + ;button.delete-btn(onclick "deleteEntity('agents','{n}')"): delete + == + == +:: +++ channel-card + |= [ball-id=tape name=@ta ntype=@ta] + ^- manx + =/ n=tape (trip name) + =/ t=tape (trip ntype) + ;div.entity-card(data-channel n) + ;div.entity-info + ;span.channel-name: {n} + ;span.entity-type.channel-type: {t} + == + ;div.card-actions + ;button.hdr-btn(onclick "openConfig('channels','{n}')"): config + ;button.delete-btn(onclick "deleteEntity('channels','{n}')"): delete + == + == +:: +++ api-card + |= [ball-id=tape name=@ta ntype=@ta] + ^- manx + =/ n=tape (trip name) + =/ t=tape (trip ntype) + ;div.entity-card(data-api n) + ;div.entity-info + ;span.api-name: {n} + ;span.entity-type.api-type: {t} + == + ;div.card-actions + ;button.hdr-btn(onclick "openConfig('apis','{n}')"): config + ;button.delete-btn(onclick "deleteEntity('apis','{n}')"): delete + == + == +:: +++ apis-fragment + |= [ball-id=tape apis=(list [name=@ta type=@ta])] + ^- manx + =/ sorted=(list [name=@ta type=@ta]) + (sort apis |=([[a=@ta *] [b=@ta *]] (aor a b))) + ;div(id "sse-apis") + ;* ?~ sorted + =/ empty=manx ;div.empty: no apis yet + ~[empty] + (turn sorted |=([n=@ta t=@ta] (api-card ball-id n t))) + == +:: +++ channels-fragment + |= [ball-id=tape channels=(list [name=@ta type=@ta])] + ^- manx + =/ sorted=(list [name=@ta type=@ta]) + (sort channels |=([[a=@ta *] [b=@ta *]] (aor a b))) + ;div(id "sse-channels") + ;* ?~ sorted + =/ empty=manx ;div.empty: no channels yet + ~[empty] + (turn sorted |=([n=@ta t=@ta] (channel-card ball-id n t))) + == +:: +++ take-any-news + |= [a=wire b=wire c=wire] + =/ m (fiber:fiber:nexus ,[?(%agents %channels %apis) view:nexus]) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %news * *] + ?: =(a wire.u.in) [%done %agents view.u.in] + ?: =(b wire.u.in) [%done %channels view.u.in] + ?: =(c wire.u.in) [%done %apis view.u.in] + [%skip ~] + == +:: +++ style-text + ^- tape + """ + * \{ margin: 0; padding: 0; box-sizing: border-box; } + body \{ font-family: -apple-system, system-ui, sans-serif; background: #111; color: #eee; height: 100vh; } + #app \{ display: flex; flex-direction: column; height: 100vh; max-width: 700px; margin: 0 auto; padding: 16px; } + #header \{ display: flex; justify-content: space-between; align-items: flex-start; padding: 12px 0; border-bottom: 1px solid #333; margin-bottom: 16px; flex-shrink: 0; } + #header h1 \{ font-size: 20px; font-weight: 700; } + .f3 \{ color: #888; } + .mono \{ font-family: monospace; } + .s-2 \{ font-size: 12px; } + .hdr-btn \{ font-size: 11px; padding: 4px 10px; border-radius: 4px; border: 1px solid #444; background: none; color: #888; cursor: pointer; } + .hdr-btn:hover \{ color: #eee; border-color: #666; } + #cfg-backdrop \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 100; } + #cfg-backdrop.open \{ display: flex; align-items: center; justify-content: center; } + #cfg-modal \{ background: #1a1a1a; border: 1px solid #333; border-radius: 8px; width: 90%; max-width: 400px; padding: 20px; } + #cfg-header \{ display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } + #cfg-header span \{ font-size: 14px; font-weight: 600; } + #cfg-header div \{ display: flex; gap: 6px; } + #cfg-status \{ margin-top: 10px; font-size: 12px; color: #4ade80; } + .create-bar \{ display: flex; gap: 8px; margin-bottom: 12px; } + .create-name \{ flex: 1; padding: 8px 12px; border-radius: 8px; border: 1px solid #333; background: #1a1a1a; color: #eee; font-size: 13px; outline: none; } + .create-name:focus \{ border-color: #2563eb; } + .create-type \{ width: 140px; padding: 8px 12px; border-radius: 8px; border: 1px solid #333; background: #1a1a1a; color: #eee; font-size: 13px; outline: none; } + .create-type:focus \{ border-color: #2563eb; } + .create-btn \{ padding: 8px 16px; border-radius: 8px; border: none; background: #2563eb; color: white; font-size: 13px; cursor: pointer; white-space: nowrap; } + .create-btn:hover \{ background: #1d4ed8; } + .entity-card, .agent-card \{ display: flex; justify-content: space-between; align-items: center; padding: 10px 14px; border-radius: 8px; background: #1a1a1a; border: 1px solid #222; margin-bottom: 6px; } + .entity-card:hover, .agent-card:hover \{ border-color: #444; } + .entity-info \{ display: flex; align-items: center; gap: 10px; } + .entity-type \{ font-size: 12px; color: #444; } + .card-actions \{ display: flex; gap: 6px; } + .agent-name \{ color: #60a5fa; text-decoration: none; font-size: 14px; font-weight: 500; } + .agent-name:hover \{ text-decoration: underline; } + .channel-name \{ color: #a78bfa; font-size: 14px; font-weight: 500; } + .api-name \{ color: #34d399; font-size: 14px; font-weight: 500; } + .delete-btn \{ font-size: 11px; padding: 4px 10px; border-radius: 4px; border: 1px solid transparent; background: none; color: #555; cursor: pointer; } + .delete-btn:hover \{ color: #f87171; border-color: #f87171; } + .empty \{ color: #555; font-size: 14px; padding: 20px 0; text-align: center; } + .section-header \{ margin-top: 20px; margin-bottom: 8px; } + .section-title \{ font-size: 13px; font-weight: 600; color: #888; text-transform: uppercase; letter-spacing: 0.05em; } + #cfg-json:focus \{ border-color: #2563eb; } + """ +:: +++ script-text + |= ball-id=tape + ^- tape + ;: weld + "var API='/grubbery/api';var BALL='{ball-id}';\0a" + """ + var ACTIONS = \{ + agents: \{create: 'create', del: 'delete', nameId: 'agent-name', dataAttr: 'data-agent'}, + apis: \{create: 'create-api', del: 'delete-api', nameId: 'api-name', dataAttr: 'data-api'}, + channels: \{create: 'create-channel', del: 'delete-channel', nameId: 'ch-name', dataAttr: 'data-channel'} + }; + + function createEntity(section) \{ + var a = ACTIONS[section]; + var nameEl = document.getElementById(a.nameId); + var name = nameEl.value.trim(); + if (!name) return; + var body = \{action: a.create, name: name}; + if (section !== 'agents') \{ + var typeEl = document.getElementById(section === 'apis' ? 'api-type' : 'ch-type'); + var type = typeEl.value.trim(); + if (!type) \{ alert('Type required'); return; } + body.type = type; + typeEl.value = ''; + } + nameEl.value = ''; + fetch(API + '/poke/' + BALL + '/main.sig?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(body) + }); + } + + function deleteEntity(section, name) \{ + if (!confirm('Delete ' + name + '?')) return; + var a = ACTIONS[section]; + fetch(API + '/poke/' + BALL + '/main.sig?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: a.del, name: name}) + }); + var el = document.querySelector('[' + a.dataAttr + '="' + name + '"]'); + if (el) el.remove(); + } + + // Config modal + var cfgBack = document.getElementById('cfg-backdrop'); + var cfgTitle = document.getElementById('cfg-title'); + var cfgJson = document.getElementById('cfg-json'); + var cfgStatus = document.getElementById('cfg-status'); + var cfgSection = ''; + var cfgName = ''; + + function openConfig(section, name) \{ + cfgSection = section; + cfgName = name; + cfgTitle.textContent = name + ' config'; + cfgStatus.textContent = ''; + cfgStatus.style.color = '#4ade80'; + fetch(API + '/file/' + BALL + '/' + section + '/' + name + '/config.json?mark=json') + .then(function(r) \{ return r.json() }) + .then(function(j) \{ cfgJson.value = JSON.stringify(j, null, 2); }) + .catch(function() \{ cfgJson.value = '\{}'; }); + cfgBack.classList.add('open'); + } + + document.getElementById('cfg-close').onclick = function() \{ + cfgBack.classList.remove('open'); + }; + + cfgBack.onclick = function(e) \{ + if (e.target === cfgBack) cfgBack.classList.remove('open'); + }; + + document.getElementById('cfg-save').onclick = async function() \{ + var parsed; + try \{ parsed = JSON.parse(cfgJson.value); } catch(e) \{ + cfgStatus.textContent = 'Invalid JSON'; + cfgStatus.style.color = '#f87171'; + return; + } + var r = await fetch(API + '/over/' + BALL + '/' + cfgSection + '/' + cfgName + '/config.json?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(parsed) + }); + if (r.ok) \{ + cfgStatus.textContent = 'Saved'; + cfgStatus.style.color = '#4ade80'; + setTimeout(function() \{ cfgBack.classList.remove('open'); }, 600); + } else \{ + cfgStatus.textContent = 'Save failed'; + cfgStatus.style.color = '#f87171'; + } + }; + + var SSE_URL = API + '/keep/' + BALL + '/ui/sse?mark=txt'; + var sseCtrl = null; + var sseRdr = null; + + async function connectSSE() \{ + if (sseRdr) try \{ sseRdr.cancel(); } catch(e) \{} + if (sseCtrl) sseCtrl.abort(); + sseCtrl = new AbortController(); + try \{ + var r = await fetch(SSE_URL, \{ + headers: \{Accept: 'text/event-stream'}, + signal: sseCtrl.signal + }); + sseRdr = r.body.getReader(); + var dec = new TextDecoder(); + var buf = ''; + while (true) \{ + var chunk = await sseRdr.read(); + if (chunk.done) break; + buf += dec.decode(chunk.value, \{stream: true}); + var parts = buf.split('\\n\\n'); + buf = parts.pop(); + for (var i = 0; i < parts.length; i++) \{ + var lines = parts[i].split('\\n'); + for (var j = 0; j < lines.length; j++) \{ + if (lines[j].indexOf('data:') === 0) \{ + var html = lines[j].slice(5).trim(); + var tmp = document.createElement('div'); + tmp.innerHTML = html; + var frag = tmp.firstElementChild; + if (frag && frag.id === 'sse-agents') \{ + var el = document.getElementById('agents'); + if (el) el.innerHTML = frag.innerHTML; + } else if (frag && frag.id === 'sse-channels') \{ + var el = document.getElementById('channels'); + if (el) el.innerHTML = frag.innerHTML; + } else if (frag && frag.id === 'sse-apis') \{ + var el = document.getElementById('apis'); + if (el) el.innerHTML = frag.innerHTML; + } + } + } + } + } + } catch (e) \{ + if (e.name !== 'AbortError') setTimeout(connectSSE, 2000); + } + } + window.addEventListener('beforeunload', function() \{ + if (sseRdr) try \{ sseRdr.cancel(); } catch(e) \{} + if (sseCtrl) sseCtrl.abort(); + }); + connectSSE(); + """ + == +-- diff --git a/desk/gub/nex/claw/channel.hoon b/desk/gub/nex/claw/channel.hoon new file mode 100644 index 0000000..5eea8c8 --- /dev/null +++ b/desk/gub/nex/claw/channel.hoon @@ -0,0 +1,259 @@ +:: channel nexus: standard messaging channel with pluggable source :: +:: +:: Standard API: +:: inbox.json -- append-only list of inbound messages (channel writes) +:: send.sig -- poke endpoint for outbound messages (agent pokes) +:: config.json -- source-specific config +:: relay.sig -- internal fiber bridging source to inbox +:: +:: Inbox message format: +:: [{"text": "...", "from": "...", "ts": "..."}] +:: +:: Send message format (poke send.sig with json): +:: {"text": "..."} +:: +:: Config (telegram source): +:: source: road to telegram-bot (relative to parent /claw/app) +:: chat-id: telegram chat ID +:: +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + =/ default-config=json + %- pairs:enjs:format + :~ ['source' s+''] + ['chat-id' s+''] + == + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'config.json'] %.n [~ [/ %json] !>(default-config)]] + [%fall %& [/ %'inbox.json'] %.n [~ [/ %json] !>([%a ~])]] + [%over %& [/ %'send.sig'] %.n [~ [/ %sig] !>(~)]] + [%over %& [/ %'relay.sig'] %.n [~ [/ %sig] !>(~)]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /send.sig: outbound message handler + :: agent pokes here with {"text": "..."}, forwards to source + :: + [~ %'send.sig'] + ~& >> "%channel send.sig: fiber starting" + ;< ~ bind:m (rise-wait:io prod "%channel send: failed") + ;< cfg=channel-config bind:m read-config + ?: |(=('' source.cfg) =('' chat-id.cfg)) + ~& >>> "%channel send: missing config" + stay:m + =/ source-fold=path (source-to-fold source.cfg) + ;< bot-send=road:tarball bind:m + (ancestor-road:io [/claw %app] [%& source-fold %'send.sig']) + |- + ;< =sage:tarball bind:m take-poke:io + =/ jon=json (fall (mole |.(!<(json q.sage))) *json) + ?. ?=(%o -.jon) + ~& >>> "%channel send: expected json object" + $ + :: pass through typing indicator directly to source + =/ action=(unit json) (~(get by p.jon) 'action') + ?: ?& ?=([~ %s *] action) + =('typing' p.u.action) + == + =/ typing-body=json + %- pairs:enjs:format + :~ ['action' s+'typing'] + ['chat_id' s+chat-id.cfg] + == + ;< ~ bind:m (poke:io bot-send [/ %json] !>(typing-body)) + $ + :: handle normal message send + =/ text=(unit json) (~(get by p.jon) 'text') + ?. ?=([~ %s *] text) + ~& >>> "%channel send: missing text field" + $ + =/ send-body=json + %- pairs:enjs:format + :~ ['message' u.text] + ['chat_id' s+chat-id.cfg] + == + ~& > ["%channel send: forwarding via" source-fold] + ;< ~ bind:m (poke:io bot-send [/ %json] !>(send-body)) + $ + :: /relay.sig: bridge source inbound messages to inbox + :: + [~ %'relay.sig'] + ~& >> "%channel relay: fiber starting" + ;< ~ bind:m (rise-wait:io prod "%channel relay: failed") + ;< cfg=channel-config bind:m read-config + ~& >> ["%channel relay: config" source.cfg chat-id.cfg] + ?: |(=('' source.cfg) =('' chat-id.cfg)) + ~& >>> "%channel relay: missing config fields" + stay:m + =/ msg-file=@ta (crip "{(trip chat-id.cfg)}.json") + ;< bot-msgs=road:tarball bind:m + =/ source-fold=path (source-to-fold source.cfg) + (ancestor-road:io [/claw %app] [%& (weld source-fold /messages) msg-file]) + ~& >> ["%channel relay: subscribing to" bot-msgs] + :: watch source messages + ;< bot-view=view:nexus bind:m (keep:io /bot-msgs bot-msgs ~) + ~& >> ["%channel relay: initial view" -.bot-view] + =/ seen-count=@ud (count-incoming bot-view) + ~& >> ["%channel relay: started, seen" seen-count "messages"] + |- + ~& >> "%channel relay: waiting for take-news..." + ;< upd=view:nexus bind:m (take-news:io /bot-msgs) + ~& >> ["%channel relay: got news!" -.upd] + =/ new-count=@ud (count-incoming upd) + ~& >> ["%channel relay: new-count" new-count "seen-count" seen-count] + =/ new-msgs=(list [text=@t from=@t]) + (get-incoming-after upd seen-count) + =. seen-count new-count + ?~ new-msgs + ~& >> "%channel relay: no new incoming msgs after filter" + $ + ~& >>> ["%channel relay: NEW MESSAGES" (lent new-msgs)] + :: append to inbox + ;< now=@da bind:m get-time:io + =/ inbox-road=road:tarball (cord-to-road:tarball './inbox.json') + ;< cur-seen=seen:nexus bind:m (peek:io inbox-road ~) + =/ cur-inbox=(list json) + ?. ?=([%& %file *] cur-seen) ~ + =/ j=json (fall (mole |.(!<(json q.sage.p.cur-seen))) *json) + ?. ?=(%a -.j) ~ + p.j + =/ new-entries=(list json) + %+ turn new-msgs + |= [text=@t from=@t] + %- pairs:enjs:format + :~ ['text' s+text] + ['from' s+from] + ['ts' s+(scot %da now)] + == + =/ updated=json [%a (weld cur-inbox new-entries)] + ~& >>> ["%channel relay: writing" (lent new-entries) "entries to inbox"] + ;< ~ bind:m (over:io inbox-road [[/ %json] !>(updated)]) + ~& >>> "%channel relay: inbox updated!" + $ + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Channel instance.' + ~ + 'Chat channel with standard API. Bridges external sources to claw agents.' + == + %| + ?+ rail.p.mana 'File under channel.' + [~ %'config.json'] 'Channel config: source road (relative to /claw/app) and chat-id.' + [~ %'inbox.json'] 'Append-only inbound message list. Subscribe here for new messages.' + [~ %'send.sig'] 'Poke with {"text": "..."} to send outbound messages via source.' + [~ %'relay.sig'] 'Internal relay: watches source, writes to inbox.' + == + == + -- +:: +|% +:: ++$ channel-config + $: source=@t + chat-id=@t + == +:: +++ read-config + =/ m (fiber:fiber:nexus ,channel-config) + ^- form:m + =/ road=road:tarball (cord-to-road:tarball './config.json') + ;< =seen:nexus bind:m (peek:io road `[/ %json]) + ?. ?=([%& %file *] seen) + (pure:m ['' '']) + =/ cfg=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + ?. ?=(%o -.cfg) + (pure:m ['' '']) + =/ get + |= key=@t + ^- @t + =/ v (~(get by p.cfg) key) + ?. ?=([~ %s *] v) '' + p.u.v + (pure:m [(get 'source') (get 'chat-id')]) +:: +:: parse source config string to a fold (path within ancestor) +:: +++ source-to-fold + |= src=@t + ^- path + =/ t=tape (trip src) + ?~ t / + =/ pax=path + %+ scan t + (more fas (cook crip (star ;~(less fas next)))) + (skip pax |=(s=@ta =('' s))) +:: +:: count incoming (non-bot) messages in a telegram message file view +:: +++ count-incoming + |= =view:nexus + ^- @ud + =/ msgs=(list json) (extract-msgs view) + %+ roll msgs + |= [msg=json acc=@ud] + ?. ?=([%o *] msg) acc + =/ dir (~(get by p.msg) 'dir') + ?: ?=([~ %s %'out'] dir) acc + +(acc) +:: +:: get incoming messages after a given count, with sender info +:: +++ get-incoming-after + |= [=view:nexus skip=@ud] + ^- (list [text=@t from=@t]) + =/ msgs=(list json) (extract-msgs view) + =/ idx=@ud 0 + =/ acc=(list [text=@t from=@t]) ~ + |- + ?~ msgs (flop acc) + =/ msg=json i.msgs + ?. ?=([%o *] msg) + $(msgs t.msgs) + =/ dir (~(get by p.msg) 'dir') + ?: ?=([~ %s %'out'] dir) + $(msgs t.msgs) + ?: (lth idx skip) + $(msgs t.msgs, idx +(idx)) + =/ text (~(get by p.msg) 'text') + ?. ?=([~ %s *] text) + $(msgs t.msgs, idx +(idx)) + =/ from=@t + =/ f (~(get by p.msg) 'from') + ?: ?=([~ %s *] f) p.u.f + =/ fn (~(get by p.msg) 'from_name') + ?: ?=([~ %s *] fn) p.u.fn + 'unknown' + $(msgs t.msgs, idx +(idx), acc [[p.u.text from] acc]) +:: +:: extract messages list from a telegram message file view +:: +++ extract-msgs + |= =view:nexus + ^- (list json) + ?. ?=([%file *] view) ~ + =/ dat=json (fall (mole |.(!<(json q.sage.view))) *json) + ?: ?=([%a *] dat) p.dat + ?. ?=([%o *] dat) ~ + =/ v (~(get by p.dat) 'messages') + ?. ?=([~ %a *] v) ~ + p.u.v +-- diff --git a/desk/gub/nex/claw/channel/telegram.hoon b/desk/gub/nex/claw/channel/telegram.hoon new file mode 100644 index 0000000..e52295b --- /dev/null +++ b/desk/gub/nex/claw/channel/telegram.hoon @@ -0,0 +1,293 @@ +:: claw/channel/telegram: telegram channel with direct API integration +:: +:: Standard channel API: +:: inbox.json -- append-only inbound messages +:: send.sig -- poke with {"text": "..."} to send outbound +:: config.json -- bot-token, chat-id +:: poller.sig -- long-polls telegram getUpdates +:: +:: Config: +:: bot-token: telegram bot API token +:: chat-id: telegram chat ID to bridge +:: +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + =/ default-config=json + %- pairs:enjs:format + :~ ['bot-token' s+''] + ['chat-id' s+''] + == + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'config.json'] %.n [~ [/ %json] !>(default-config)]] + [%fall %& [/ %'inbox.json'] %.n [~ [/ %json] !>([%a ~])]] + [%fall %& [/ %'send.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/ %'poller.sig'] %.n [~ [/ %sig] !>(~)]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /poller.sig: long-poll telegram getUpdates, write to inbox + :: + [~ %'poller.sig'] + ;< ~ bind:m (rise-wait:io prod "%tg-channel poller: failed") + ;< cfg=tg-config bind:m read-config + ?: |(=('' bot-token.cfg) =('' chat-id.cfg)) + ~& >>> "%tg-channel: missing bot-token or chat-id" + stay:m + ~& >> ["%tg-channel: polling chat" chat-id.cfg] + :: read existing inbox to not re-append old messages + =/ offset=@ud 0 + |- + =/ url=@t + %+ rap 3 + :~ 'https://api.telegram.org/bot' + bot-token.cfg + '/getUpdates?timeout=25' + ?:(=(0 offset) '' (cat 3 '&offset=' (crip (a-co:co offset)))) + == + =/ =request:http + [%'GET' url ~[['Accept' 'application/json']] ~] + ~& >> ["%tg-channel: sending getUpdates, offset" offset] + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + ~& >> ["%tg-channel: response" -.client-response ?:(?=(%finished -.client-response) status-code.response-header.client-response 0)] + ?. ?=(%finished -.client-response) + ~& >>> "%tg-channel: not finished, retrying" + $ + =/ body=@t + ?~(full-file.client-response '' q.data.u.full-file.client-response) + =/ parsed=(each json tang) (mule |.((need (de:json:html body)))) + ?: ?=(%| -.parsed) + ~& >>> ["%tg-channel: JSON parse failed, body" (scag 200 (trip body))] + $ + =/ resp=json p.parsed + ?. ?=([%o *] resp) $ + =/ results=(unit json) (~(get by p.resp) 'result') + ?. ?=([~ %a *] results) $ + ?~ p.u.results $ + :: extract messages for our chat-id + =/ new-msgs=(list [text=@t from=@t]) + %+ murn p.u.results + |= upd=json + ?. ?=([%o *] upd) ~ + =/ msg=(unit json) (~(get by p.upd) 'message') + ?~ msg ~ + ?. ?=([%o *] u.msg) ~ + =/ chat=(unit json) (~(get by p.u.msg) 'chat') + =/ cid=@t + ?. ?=([~ %o *] chat) '' + =/ v (~(get by p.u.chat) 'id') + ?. ?=([~ %n *] v) '' + p.u.v + :: only messages for our chat + ?. =(cid chat-id.cfg) ~ + =/ text=(unit json) (~(get by p.u.msg) 'text') + ?~ text ~ + ?. ?=([%s *] u.text) ~ + =/ from=(unit json) (~(get by p.u.msg) 'from') + =/ from-name=@t + ?. ?=([~ %o *] from) 'unknown' + =/ first (~(get by p.u.from) 'first_name') + ?. ?=([~ %s *] first) 'unknown' + p.u.first + `[p.u.text from-name] + :: compute new offset + =/ new-offset=@ud + =/ max-id=@ud 0 + =/ updates=(list json) p.u.results + |- + ?~ updates ?:(=(0 max-id) offset +(max-id)) + =/ upd=json i.updates + ?. ?=([%o *] upd) $(updates t.updates) + =/ uid=(unit json) (~(get by p.upd) 'update_id') + ?. ?=([~ %n *] uid) $(updates t.updates) + =/ parsed=(unit @ud) (rush p.u.uid dem) + ?~ parsed $(updates t.updates) + $(updates t.updates, max-id (max max-id u.parsed)) + =. offset new-offset + :: append to inbox + ?~ new-msgs $ + ~& >> ["%tg-channel: new messages" (lent new-msgs)] + ;< now=@da bind:m get-time:io + =/ inbox-road=road:tarball (cord-to-road:tarball './inbox.json') + ;< cur-seen=seen:nexus bind:m (peek:io inbox-road ~) + =/ cur-inbox=(list json) + ?. ?=([%& %file *] cur-seen) ~ + =/ j=json (fall (mole |.(!<(json q.sage.p.cur-seen))) *json) + ?. ?=(%a -.j) ~ + p.j + =/ new-entries=(list json) + %+ turn new-msgs + |= [text=@t from=@t] + %- pairs:enjs:format + :~ ['text' s+text] + ['from' s+from] + ['ts' s+(scot %da now)] + == + =/ updated=json [%a (weld cur-inbox new-entries)] + ;< ~ bind:m (over:io inbox-road [[/ %json] !>(updated)]) + ~& >> ["%tg-channel: inbox updated," (lent new-entries) "new"] + $ + :: /send.sig: send outbound messages via telegram API + :: + [~ %'send.sig'] + ;< ~ bind:m (rise-wait:io prod "%tg-channel send: failed") + ;< cfg=tg-config bind:m read-config + ?: |(=('' bot-token.cfg) =('' chat-id.cfg)) + ~& >>> "%tg-channel send: missing config" + stay:m + |- + ;< =sage:tarball bind:m take-poke:io + =/ jon=json (fall (mole |.(!<(json q.sage))) *json) + ?. ?=([%o *] jon) $ + =/ action=(unit json) (~(get by p.jon) 'action') + :: typing: enter typing loop, re-send every 4s until next poke + ?: =([~ s+'typing'] action) + ;< ~ bind:m (send-typing bot-token.cfg chat-id.cfg) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s4)) + |- + ;< result=poke-or-wake bind:m take-poke-or-wake + ?- -.result + %wake + ;< ~ bind:m (send-typing bot-token.cfg chat-id.cfg) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s4)) + $ + %poke + :: got a real poke while typing — send message and return to main loop + =/ jon=json (fall (mole |.(!<(json q.p.result))) *json) + ?. ?=(%o -.jon) ^$ + =/ text=(unit json) (~(get by p.jon) 'text') + ?. ?=([~ %s *] text) ^$ + ;< ~ bind:m (send-msg bot-token.cfg chat-id.cfg p.u.text) + ^$ + == + :: normal message send + =/ text=(unit json) (~(get by p.jon) 'text') + ?. ?=([~ %s *] text) $ + ;< ~ bind:m (send-msg bot-token.cfg chat-id.cfg p.u.text) + $ + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Telegram channel instance.' + ~ + 'Telegram channel. Polls getUpdates, writes inbox, sends via bot API.' + == + %| + ?+ rail.p.mana 'File under telegram channel.' + [~ %'config.json'] 'Channel config: bot-token and chat-id.' + [~ %'inbox.json'] 'Append-only inbound message list.' + [~ %'send.sig'] 'Poke with {"text": "..."} to send via telegram.' + [~ %'poller.sig'] 'Long-polling loop for incoming messages.' + == + == + -- +:: +|% +:: ++$ tg-config + $: bot-token=@t + chat-id=@t + == +:: ++$ poke-or-wake + $% [%poke p=sage:tarball] + [%wake ~] + == +:: +:: +take-poke-or-wake: race a poke against a timer wake +:: +++ take-poke-or-wake + =/ m (fiber:fiber:nexus ,poke-or-wake) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error:io dart.u.in)] + [~ %poke * *] + ?: =([/ %timer-wake] p.sage.u.in) + [%done %wake ~] + [%done %poke sage.u.in] + == +:: +:: +send-typing: fire sendChatAction typing +:: +++ send-typing + |= [bot-token=@t chat-id=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ url=@t + (rap 3 ~['https://api.telegram.org/bot' bot-token '/sendChatAction']) + =/ req-body=@t + (rap 3 ~['chat_id=' chat-id '&action=typing']) + =/ =request:http + :* %'POST' + url + ~[['content-type' 'application/x-www-form-urlencoded']] + `(as-octs:mimes:html req-body) + == + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + (pure:m ~) +:: +:: +send-msg: send a text message via telegram bot API +:: +++ send-msg + |= [bot-token=@t chat-id=@t text=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ~& >> ["%tg-channel send:" text] + =/ url=@t + (rap 3 ~['https://api.telegram.org/bot' bot-token '/sendMessage']) + =/ req-body=@t + (rap 3 ~['chat_id=' chat-id '&text=' text]) + =/ =request:http + :* %'POST' + url + ~[['content-type' 'application/x-www-form-urlencoded']] + `(as-octs:mimes:html req-body) + == + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + ~& >> "%tg-channel send: done" + (pure:m ~) +:: +++ read-config + =/ m (fiber:fiber:nexus ,tg-config) + ^- form:m + =/ road=road:tarball (cord-to-road:tarball './config.json') + ;< =seen:nexus bind:m (peek:io road `[/ %json]) + ?. ?=([%& %file *] seen) + (pure:m ['' '']) + =/ cfg=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + ?. ?=(%o -.cfg) + (pure:m ['' '']) + =/ get + |= key=@t + ^- @t + =/ v (~(get by p.cfg) key) + ?. ?=([~ %s *] v) '' + p.u.v + (pure:m [(get 'bot-token') (get 'chat-id')]) +-- diff --git a/desk/nex/counter.hoon b/desk/gub/nex/counter.hoon similarity index 84% rename from desk/nex/counter.hoon rename to desk/gub/nex/counter.hoon index 39aebde..6e2068d 100644 --- a/desk/nex/counter.hoon +++ b/desk/gub/nex/counter.hoon @@ -1,7 +1,5 @@ :: counter nexus: many auto-incrementing counters identified by @da :: -/+ nexus, tarball, io=fiberio, server, http-utils, feather, nex-server, loader -!: :: turn on stack trace =< ^- nexus:nexus |% ++ on-load @@ -13,14 +11,14 @@ %+ spin:loader [sand gain ball] :~ (ver-row:loader 0) [%fall %| /counters [~ ~] [~ ~] empty-dir:loader] - [%fall %& [/ui/views %'page.html'] %.n [~ %manx !>((counter-page ~))]] - [%fall %& [/ui %'main.sig'] %.n [~ %sig !>(~)]] + [%over %& [/ui/views %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html (counter-page ~))))]] + [%fall %& [/ui %'main.sig'] %.n [~ [/ %sig] !>(~)]] [%fall %| /ui/requests [~ ~] [~ ~] empty-dir:loader] == == :: ++ on-file - |= [=rail:tarball =mark] + |= [=rail:tarball =blot:tarball] ^- spool:fiber:nexus |= =prod:fiber:nexus =/ m (fiber:fiber:nexus ,~) @@ -48,22 +46,18 @@ =/ =lump:tarball (fall fil.ball.upd *lump:tarball) %+ murn ~(tap by contents.lump) |= [name=@ta =content:tarball] - ?. ?=(%ud p.cage.content) ~ - `[name !<(@ud q.cage.content)] + ?. ?=(%ud name.p.sage.content) ~ + `[name !<(@ud q.sage.content)] =/ page=manx (counter-page counters) - ;< ~ bind:m (replace:io !>(page)) + ;< ~ bind:m (replace:io !>((crip (en-xml:html page)))) $ - :: /ui/main.sig: bind /grubbery/counters/ as a separate HTTP - :: endpoint and dispatch requests into /ui/requests/. - :: Nexuses can bind their own endpoints independently of - :: the central /grubbery/api. + :: /ui/main.sig: bind HTTP endpoint and dispatch requests + :: into /ui/requests/. URL derived from tree position. :: [[%ui ~] %'main.sig'] ;< ~ bind:m (rise-wait:io prod "%counter /ui/main: failed") - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - =/ prefix=path (url-prefix (snip path.here.bowl)) - ;< ~ bind:m (bind-http:nex-server [~ prefix]) - (http-dispatch:nex-server %counter) + ;< ~ bind:m (bind-http:io [~ /grubbery/counters]) + (http-dispatch:io %counter) :: /ui/requests/*: individual request handlers :: [[%ui %requests ~] @] @@ -74,16 +68,15 @@ ?. =(src our) ;< ~ bind:m (send-simple:srv eyre-id [[403 ~] `(as-octs:mimes:html 'Forbidden')]) (pure:m ~) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - =/ prefix=path (url-prefix (snip (snip path.here.bowl))) + =/ prefix=path /grubbery/counters =/ site=path site:(parse-url:http-utils url.request.req) =/ suffix=path (slag (lent prefix) site) :: Serve counter page from view grub - ;< =seen:nexus bind:m (peek:io /peek [%| 2 %& /ui/views %'page.html'] `%mime) + ;< =seen:nexus bind:m (peek:io [%| 2 %& /ui/views %'page.html'] `[/ %mime]) ?. ?=([%& %file *] seen) ;< ~ bind:m (send-simple:srv eyre-id [[500 ~] `(as-octs:mimes:html 'View not ready')]) (pure:m ~) - =/ =mime !<(mime q.cage.p.seen) + =/ =mime !<(mime q.sage.p.seen) ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils mime)) (pure:m ~) == @@ -132,26 +125,18 @@ == -- |% -:: Derive URL prefix from nexus root path -:: e.g. / -> /grubbery/counters, /foo -> /grubbery/counters/foo -:: -++ url-prefix - |= root=path - ^- path - (weld /grubbery/counters root) :: HTTP response door (road from /ui/requests/* to /ui/main.sig) :: -++ srv ~(. res:nex-server [%| 1 %& ~ %'main.sig']) +++ srv ~(. http-res:io [%| 1 %& ~ %'main.sig']) :: ++ counter-page |= counters=(list [@ta @ud]) ^- manx - =/ api=tape "/grubbery/api/file/counter.counter/counters" - =/ keep=tape "/grubbery/api/keep/counter.counter/counters" =/ js=tape ;: weld - "var API='{api}';" - "var KEEP='{keep}';" + "var P=window.location.pathname;" + "var API,KEEP;" + "if(P.indexOf('/ball/')>=0)\{API=P.replace('/ball/','/api/file/').replace('/ui/views/page.html','/counters');KEEP=P.replace('/ball/','/api/keep/').replace('/ui/views/page.html','/counters')}else\{API='/grubbery/api/file/apps/counter.counter/counters';KEEP='/grubbery/api/keep/apps/counter.counter/counters'}" "document.getElementById('create').onclick=function()\{fetch(API+'/'+Date.now().toString(36)+'?mark=ud',\{method:'PUT',headers:\{'Content-Type':'text/plain'},body:'0'})};" "function removeCounter(n)\{var e=document.getElementById('c-'+n);if(e)e.remove();if(!document.querySelector('.counter'))document.getElementById('counters').textContent='No counters'}" "function deleteCounter(n)\{fetch(API+'/'+n,\{method:'DELETE'});removeCounter(n)}" diff --git a/desk/gub/nex/explorer.hoon b/desk/gub/nex/explorer.hoon new file mode 100644 index 0000000..f151f59 --- /dev/null +++ b/desk/gub/nex/explorer.hoon @@ -0,0 +1,1378 @@ +:: explorer nexus: tarball tree browser +:: +/< feather /lib/feather.hoon +/< iso-8601 /lib/iso-8601.hoon +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %| /requests [~ ~] [~ ~] empty-dir:loader] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%explorer /main: failed, poke to restart") + ~& > "%explorer /main: binding /grubbery/ball and /grubbery/split" + ;< ~ bind:m (bind-http:io [~ /grubbery/ball]) + ;< ~ bind:m (bind-http:io [~ /grubbery/split]) + ~& > "%explorer /main: ready" + (http-dispatch:io %explorer) + [[%requests ~] @] + ;< ~ bind:m (rise-wait:io prod "%explorer /requests: failed, poke to restart") + =/ eyre-id=@ta name.rail + ;< [src=@p req=inbound-request:eyre] bind:m (get-state-as:io ,[src=@p inbound-request:eyre]) + ;< our=@p bind:m get-our:io + ?. =(src our) + ;< ~ bind:m (send-simple:srv eyre-id [[403 ~] `(as-octs:mimes:html 'Forbidden')]) + (pure:m ~) + ~& > [%explorer-request eyre-id url.request.req] + =/ [site=path args=quay:eyre] (parse-url:http-utils url.request.req) + ?: ?=([%grubbery %split *] site) + =/ bod=octs (manx-to-octs:server render-split) + ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils [/text/html bod])) + (pure:m ~) + =/ raw-path=path + ?. ?=([%grubbery %ball *] site) ~ + t.t.site + + ?: ?=([%stream ~] raw-path) + =/ watch-path=path + =/ p=(unit @t) (get-key:kv:html-utils 'path' args) + ?~ p ~ + (stab u.p) + (handle-stream eyre-id req watch-path) + ;< root-seen=seen:nexus bind:m (peek:io [%& %| ~] ~) + ?. ?=([%& %ball *] root-seen) + ;< ~ bind:m (send-simple:srv eyre-id [[500 ~] `(as-octs:mimes:html 'Peek failed')]) + (pure:m ~) + =/ root=ball:tarball ball.p.root-seen + =/ root-born=born:nexus born.p.root-seen + =/ root-sand=sand:nexus sand.p.root-seen + =/ tree-path=path (resolve-url-path raw-path root) + ?: =('POST' method.request.req) + (handle-post eyre-id tree-path root-sand req) + (handle-get eyre-id tree-path root root-born root-sand args) + == + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the explorer nexus.' + ~ + %- crip + """ + EXPLORER NEXUS — web-based tarball file browser + + Serves directory listings and file contents over HTTP with a + full CRUD interface: create, delete, upload, rename, and symlink. + Streams live directory changes via SSE so the browser updates + without polling. + + FILES: + main.sig HTTP binding process. Registers /grubbery/ + with the server nexus. + ver.ud Schema version. + + DIRECTORIES: + requests/ Per-request fibers for active HTTP connections. + """ + [%requests ~] + 'Active HTTP request fibers. Each inbound request spawns a fiber here; cleaned up on completion.' + == + %| + ?+ rail.p.mana 'File under the explorer nexus.' + [~ %'main.sig'] 'Explorer HTTP binding process. Mark: sig. Registers URL prefix with the server nexus and dispatches inbound requests to per-request fibers in /requests/.' + [~ %'ver.ud'] 'Schema version counter. Mark: ud.' + == + == + -- +:: +|% +:: HTTP response door (road from /explorer.explorer/requests/* to /explorer.explorer/main.sig) +:: +++ srv ~(. http-res:io [%| 1 %& ~ %'main.sig']) +++ split-fas + |= t=@t + ^- path + =/ chars=tape (trip t) + =| [seg=tape out=path] + |- ^- path + ?~ chars + ?~ seg (flop out) + (flop [(crip seg) out]) + ?: =(i.chars '/') + ?~ seg $(chars t.chars) + $(chars t.chars, seg ~, out [(crip seg) out]) + $(chars t.chars, seg (snoc seg i.chars)) +:: +parse-road-input: parse "../../foo/bar" into a proper road +:: Counts leading "../" as relative steps, remainder as the lane. +:: +++ parse-road-input + |= road-path=@t + ^- road:tarball + =/ raw=tape (trip road-path) + =/ is-dir=? &(?=(^ raw) =('/' (rear raw))) + =/ segs=path (split-fas road-path) + =/ ups=@ud 0 + |- + ?: &(?=(^ segs) =(%'..' i.segs)) + $(segs t.segs, ups +(ups)) + =/ =lane:tarball + ?: is-dir + [%| segs] + ?~ segs [%| /] + [%& (snip `path`segs) (rear segs)] + ?:(=(0 ups) &+lane |+[ups lane]) +:: Handle GET requests +:: +++ handle-get + |= [eyre-id=@ta tree-path=path root=ball:tarball root-born=born:nexus root-sand=sand:nexus args=(list [key=@t value=@t])] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ~& > [%explorer-peek tree-path] + =/ download-param=(unit @t) (get-key:kv:html-utils 'download' args) + =/ sub=(unit ball:tarball) (~(dap ba:tarball root) tree-path) + ?: ?=(^ sub) + ?: ?&(?=(^ download-param) =(u.download-param 'tar')) + (serve-tarball eyre-id tree-path u.sub) + ;< now=@da bind:m get-time:io + ;< conversions=(map bars:tarball tube:clay) bind:m + (get-blot-conversions-shallow:io u.sub) + :: Resolve governing /code namespace for blot & nexus links. + :: get-font returns a bend relative to this fiber's location, + :: so we resolve it with our own `here` rail to get the absolute path. + ;< font=(unit bend:tarball) bind:m + (get-font:io [%& %| tree-path]) + ;< here=rail:tarball bind:m get-here-abs:io + =/ code-namespace=(unit path) + ?~ font ~ + =/ ns=(unit lane:tarball) + (lane-from-bend:tarball [%& here] u.font) + ?~ ns ~ + ?. ?=(%| -.u.ns) ~ + `p.u.ns + :: Get bang state for this directory + ;< bang-res=(each bangs:nexus (unit tang)) bind:m + (get-bang:io [%& %| tree-path]) + =/ dir-bangs=bangs:nexus + ?:(?=(%& -.bang-res) p.bang-res *bangs:nexus) + =/ bod=octs (manx-to-octs:server (render-dir tree-path root root-born root-sand now conversions code-namespace dir-bangs)) + ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils [/text/html bod])) + (pure:m ~) + :: Not a directory — try as grub + ?~ tree-path + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Not found')]) + (pure:m ~) + =/ parent=path (snip `path`tree-path) + =/ name=@ta (rear tree-path) + =/ parent-ball=ball:tarball (~(dip ba:tarball root) parent) + =/ content-data=(unit content:tarball) + ?~ fil.parent-ball ~ + (find-grub name u.fil.parent-ball) + ?~ content-data + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Not found')]) + (pure:m ~) + =/ =sage:tarball sage.u.content-data + =/ pretty-param=(unit @t) (get-key:kv:html-utils 'pretty' args) + ?^ pretty-param + :: ?pretty: render noun as text instead of binary download + =/ bod=octs (as-octs:mimes:html (crip (noah q.sage))) + ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils [/text/plain bod])) + (pure:m ~) + ;< =mime bind:m (sage-to-mime:io sage) + ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils [p.mime q.mime])) + (pure:m ~) +:: Handle POST requests (delete actions) +:: +++ handle-post + |= [eyre-id=@ta tree-path=path root-sand=sand:nexus req=inbound-request:eyre] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + :: Check for multipart upload + =/ content-type=(unit @t) + (get-header:http 'content-type' header-list.request.req) + ?: ?& ?=(^ content-type) + =('multipart/form-data; boundary=' (end 3^30 u.content-type)) + == + (handle-upload eyre-id tree-path req) + :: Form-encoded POST + =/ args=key-value-list:kv:html-utils (parse-body:kv:html-utils body.request.req) + =/ action=(unit @t) (get-key:kv:html-utils 'action' args) + =/ redirect-url=tape + ?~(tree-path "/grubbery/ball" "/grubbery/ball{(trip (spat tree-path))}") + ?~ action + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing action')]) + (pure:m ~) + ?+ u.action + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Unknown action')]) + (pure:m ~) + :: + %'delete-grub' + =/ filename=@t (fall (get-key:kv:html-utils 'filename' args) '') + :: cull road: up 3 from /explorer.explorer/requests/[id] to root, then file + ;< ~ bind:m (cull:io [%& %& tree-path filename]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'delete-folder' + =/ foldername=@t (fall (get-key:kv:html-utils 'foldername' args) '') + =/ folder-path=path (snoc tree-path foldername) + ;< ~ bind:m (cull:io [%& %| folder-path]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'create-folder' + =/ foldername=@t (fall (get-key:kv:html-utils 'foldername' args) '') + =/ dir-name=@ta foldername + =/ dir-neck=(unit neck:tarball) + (bind (parse-extension:tarball dir-name) ext-to-neck:tarball) + =/ folder-path=path (snoc tree-path dir-name) + =/ new-ball=ball:tarball [`[~ dir-neck ~] ~] + ;< ~ bind:m (make:io [%& %| folder-path] &+[[~ ~] [~ ~] new-ball]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'create-symlink' + =/ linkname=@t (fall (get-key:kv:html-utils 'linkname' args) '') + ?: =('' linkname) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing linkname')]) + (pure:m ~) + =/ target=@t (fall (get-key:kv:html-utils 'target' args) '') + ?: =('' target) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing target')]) + (pure:m ~) + =/ sym=(unit symlink:tarball) (parse-symlink:tarball target) + ?~ sym + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid symlink target')]) + (pure:m ~) + ;< ~ bind:m (make:io [%& %& tree-path linkname] |+[%.n [[/ %symlink] !>(u.sym)] ~]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'add-weir-road' + =/ category=@t (fall (get-key:kv:html-utils 'category' args) '') + =/ road-path=@t (fall (get-key:kv:html-utils 'road-path' args) '') + ?: |(=('' category) =('' road-path)) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing fields')]) + (pure:m ~) + =/ new-road=road:tarball (parse-road-input road-path) + =/ dir-sand=sand:nexus (~(dip of root-sand) tree-path) + =/ cur=weir:nexus (fall fil.dir-sand [~ ~ ~]) + =/ new=weir:nexus + ?+ category cur + %'write' cur(make (~(put in make.cur) new-road)) + %'poke' cur(poke (~(put in poke.cur) new-road)) + %'read' cur(peek (~(put in peek.cur) new-road)) + == + ;< ~ bind:m (sand:io [%& %| tree-path] `new) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'del-weir-road' + =/ category=@t (fall (get-key:kv:html-utils 'category' args) '') + =/ road-path=@t (fall (get-key:kv:html-utils 'road-path' args) '') + ?: =('' category) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing category')]) + (pure:m ~) + =/ del-road=road:tarball (parse-road-input road-path) + =/ dir-sand=sand:nexus (~(dip of root-sand) tree-path) + =/ cur=weir:nexus (fall fil.dir-sand [~ ~ ~]) + =/ new=weir:nexus + ?+ category cur + %'write' cur(make (~(del in make.cur) del-road)) + %'poke' cur(poke (~(del in poke.cur) del-road)) + %'read' cur(peek (~(del in peek.cur) del-road)) + == + ;< ~ bind:m (sand:io [%& %| tree-path] `new) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'clear-weir' + ;< ~ bind:m (sand:io [%& %| tree-path] ~) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'reload-nexus' + ;< ~ bind:m (reload:io [%& %| tree-path]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'rename-grub' + =/ filename=@t (fall (get-key:kv:html-utils 'filename' args) '') + =/ newname=@t (fall (get-key:kv:html-utils 'newname' args) '') + ?: |(=('' filename) =('' newname)) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing filename or newname')]) + (pure:m ~) + ;< ~ bind:m (move-grub:io [%& %& tree-path filename] [%& %& tree-path newname]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'rename-folder' + =/ foldername=@t (fall (get-key:kv:html-utils 'foldername' args) '') + =/ newname=@t (fall (get-key:kv:html-utils 'newname' args) '') + ?: |(=('' foldername) =('' newname)) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing foldername or newname')]) + (pure:m ~) + ;< ~ bind:m (move-fold:io [%& %| (snoc tree-path foldername)] [%& %| (snoc tree-path newname)]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'move-grub' + =/ filename=@t (fall (get-key:kv:html-utils 'filename' args) '') + =/ dest=@t (fall (get-key:kv:html-utils 'dest' args) '') + ?: |(=('' filename) =('' dest)) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing filename or dest')]) + (pure:m ~) + =/ dest-path=path (stab dest) + ?~ dest-path + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid dest path')]) + (pure:m ~) + =/ dst-dir=path (snip `path`dest-path) + =/ dst-name=@ta (rear dest-path) + ;< ~ bind:m (move-grub:io [%& %& tree-path filename] [%& %& dst-dir dst-name]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'move-folder' + =/ foldername=@t (fall (get-key:kv:html-utils 'foldername' args) '') + =/ dest=@t (fall (get-key:kv:html-utils 'dest' args) '') + ?: |(=('' foldername) =('' dest)) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing foldername or dest')]) + (pure:m ~) + =/ dest-path=path (stab dest) + ;< ~ bind:m (move-fold:io [%& %| (snoc tree-path foldername)] [%& %| dest-path]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'copy-grub' + =/ filename=@t (fall (get-key:kv:html-utils 'filename' args) '') + =/ dest=@t (fall (get-key:kv:html-utils 'dest' args) '') + ?: |(=('' filename) =('' dest)) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing filename or dest')]) + (pure:m ~) + =/ dest-path=path (stab dest) + ?~ dest-path + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid dest path')]) + (pure:m ~) + =/ dst-dir=path (snip `path`dest-path) + =/ dst-name=@ta (rear dest-path) + ;< ~ bind:m (copy-grub:io [%& %& tree-path filename] [%& %& dst-dir dst-name]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + :: + %'copy-folder' + =/ foldername=@t (fall (get-key:kv:html-utils 'foldername' args) '') + =/ dest=@t (fall (get-key:kv:html-utils 'dest' args) '') + ?: |(=('' foldername) =('' dest)) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing foldername or dest')]) + (pure:m ~) + =/ dest-path=path (stab dest) + ;< ~ bind:m (copy-fold:io [%& %| (snoc tree-path foldername)] [%& %| dest-path]) + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) + == +:: Handle multipart file upload +:: +++ handle-upload + |= [eyre-id=@ta tree-path=path req=inbound-request:eyre] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ parts=(unit (list [@t part:multipart])) + (de-request:multipart header-list.request.req body.request.req) + ?~ parts + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid multipart data')]) + (pure:m ~) + :: Build mime→mark tubes for uploaded file extensions + ;< now=@da bind:m get-time:io + =/ exts=(set @ta) + %- ~(gas in *(set @ta)) + %+ murn u.parts + |= [field-name=@t =part:multipart] + ?. =('file' field-name) ~ + ?~ file.part ~ + (parse-extension:tarball u.file.part) + ;< conversions=(map bars:tarball tube:clay) bind:m + =/ m (fiber:fiber:nexus ,(map bars:tarball tube:clay)) + =/ ext-list=(list @ta) ~(tap in exts) + =| convs=(map bars:tarball tube:clay) + |- ^- form:m + ?~ ext-list (pure:m convs) + =/ =bars:tarball [[/ %mime] [/ i.ext-list]] + ;< tube=(unit tube:clay) bind:m + (get-tube:io [%& %| /code] bars) + =? convs ?=(^ tube) + (~(put by convs) bars u.tube) + $(ext-list t.ext-list) + :: Build ball from multipart using from-parts + =/ new=ball:tarball + (from-parts:tarball *ball:tarball ~ u.parts now conversions) + :: Make each top-level entry: files then directories + =/ files=(list [@ta content:tarball]) + ?~ fil.new ~ + ~(tap by contents.u.fil.new) + |- + ?^ files + =/ [name=@ta =content:tarball] i.files + ;< ~ bind:m + (make:io [%& %& tree-path name] |+[%.n sage.content ~]) + $(files t.files) + =/ dirs=(list [@ta ball:tarball]) ~(tap by dir.new) + |- + ?^ dirs + =/ [name=@ta sub=ball:tarball] i.dirs + ;< ~ bind:m + (make:io [%& %| (snoc tree-path name)] &+[[~ ~] [~ ~] sub]) + $(dirs t.dirs) + =/ redirect-url=tape + ?~(tree-path "/grubbery/ball" "/grubbery/ball{(trip (spat tree-path))}") + ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) + (pure:m ~) +:: Serve a directory as a tarball download +:: +++ serve-tarball + |= [eyre-id=@ta tree-path=path b=ball:tarball] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< now=@da bind:m get-time:io + ;< conversions=(map bars:tarball tube:clay) bind:m + (get-blot-conversions:io b) + =/ tar=tarball:tarball + (~(make-tarball gen:tarball [now conversions]) tree-path b) + =/ tar-data=octs (encode-tarball:tarball tar) + =/ dir-name=tape + ?~(tree-path "root" (trip (rear tree-path))) + =/ headers=header-list:http + :~ ['content-type' 'application/x-tar'] + ['content-disposition' (crip "attachment; filename=\"{dir-name}.tar\"")] + == + ;< ~ bind:m (send-simple:srv eyre-id [[200 headers] `tar-data]) + (pure:m ~) +:: Find a grub by exact name in a lump +:: +++ find-grub + |= [seg=@ta =lump:tarball] + ^- (unit content:tarball) + (~(get by contents.lump) seg) +:: Handle SSE stream: subscribe to root, push change events +:: +++ handle-stream + |= [eyre-id=@ta req=inbound-request:eyre watch-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. (is-sse-request:http-utils req) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'SSE only')]) + (pure:m ~) + ;< ~ bind:m (send-header:srv eyre-id sse-header:http-utils) + ;< initial-seen=seen:nexus bind:m (peek:io [%& %| ~] ~) + =/ prev-born=born:nexus + ?. ?&(?=(%& -.initial-seen) ?=(%ball -.p.initial-seen)) + *born:nexus + born.p.initial-seen + =/ prev-weir=(unit weir:nexus) + ?. ?&(?=(%& -.initial-seen) ?=(%ball -.p.initial-seen)) + ~ + =/ s (~(dip of sand.p.initial-seen) watch-path) + fil.s + ;< * bind:m (keep:io /ball [%& %| ~] ~) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + |- + ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /ball) + ?- -.nw + %wake + ;< ~ bind:m (send-data:srv eyre-id `sse-keep-alive:http-utils) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + $ + %news + ?. ?=([%ball *] view.nw) $ + =/ root=ball:tarball ball.view.nw + =/ root-born=born:nexus born.view.nw + =/ root-sand=sand:nexus sand.view.nw + =/ watch-sand=sand:nexus (~(dip of root-sand) watch-path) + =/ new-weir=(unit weir:nexus) fil.watch-sand + =/ what=(set lane:tarball) (diff-born-state:nexus prev-born root-born) + =. prev-born root-born + =/ par=ball:tarball (~(dip ba:tarball root) watch-path) + =/ par-born=born:nexus (~(dip of root-born) watch-path) + =/ url-prefix=tape (build-url watch-path) + :: Resolve governing /code namespace so SSE-pushed rows get + :: the same blot & nexus links as the initial page render. + :: The bend is relative to this fiber, so resolve with `here`. + ;< font=(unit bend:tarball) bind:m + (get-font:io [%& %| watch-path]) + ;< here=rail:tarball bind:m get-here-abs:io + =/ code-namespace=(unit path) + ?~ font ~ + =/ ns=(unit lane:tarball) + (lane-from-bend:tarball [%& here] u.font) + ?~ ns ~ + ?. ?=(%| -.u.ns) ~ + `p.u.ns + ;< now=@da bind:m get-time:io + :: Only build tubes for marks of files that changed in watched dir + =/ changed-blots=(set blot:tarball) + %- ~(gas in *(set blot:tarball)) + %+ murn ~(tap in what) + |= =lane:tarball + ^- (unit blot:tarball) + ?. ?=(%& -.lane) ~ + ?. =(path.p.lane watch-path) ~ + ?~ fil.par ~ + =/ ct=(unit content:tarball) (~(get by contents.u.fil.par) name.p.lane) + ?~ ct ~ + `p.sage.u.ct + ;< conversions=(map bars:tarball tube:clay) bind:m + (build-blot-conversions:io changed-blots) + =/ lanes=(list lane:tarball) ~(tap in what) + |- + ?~ lanes + :: Check if watched directory was deleted + =/ still-exists=? + ?| =(~ watch-path) + ?=(^ (~(dap ba:tarball root) watch-path)) + == + ?. still-exists + =/ =json + (pairs:enjs:format ~[['action' s+'deleted']]) + =/ =sse-event:http-utils [~ `'ball-change' [(en:json:html json)]~] + =/ data=octs (sse-encode:http-utils ~[sse-event]) + ;< ~ bind:m (send-data:srv eyre-id `data) + (pure:m ~) + :: Check for weir change + ?. =(prev-weir new-weir) + =. prev-weir new-weir + =/ weir-html=tape + (zing (turn (render-weir new-weir url-prefix) en-xml:html)) + =/ =json + %- pairs:enjs:format + :~ ['action' s+'weir'] + ['html' s+(crip weir-html)] + == + =/ =sse-event:http-utils [~ `'ball-change' [(en:json:html json)]~] + =/ data=octs (sse-encode:http-utils ~[sse-event]) + ;< ~ bind:m (send-data:srv eyre-id `data) + ^$ + ^$ + =/ [parent=path item=@ta is-file=?] + ?- -.i.lanes + %& [path.p.i.lanes name.p.i.lanes %.y] + %| ?~ p.i.lanes [~ %$ %.n] + [(snip `path`p.i.lanes) (rear p.i.lanes) %.n] + == + :: Skip lanes not matching watched directory + ?. =(parent watch-path) + $(lanes t.lanes) + =/ exists=? + ?: is-file + ?~ fil.par %.n + (~(has by contents.u.fil.par) item) + (~(has by dir.par) item) + ?: exists + :: Add: render full row HTML + =/ row-html=tape + ?: is-file + ?~ fil.par "" + =/ ct=(unit content:tarball) (~(get by contents.u.fil.par) item) + ?~ ct "" + (en-xml:html (render-grub-row item u.ct url-prefix watch-path par-born now conversions code-namespace ~)) + =/ sub=(unit ball:tarball) (~(get by dir.par) item) + ?~ sub "" + (en-xml:html (render-dir-row item u.sub url-prefix ~)) + =/ =json + %- pairs:enjs:format + :~ ['action' s+'add'] + ['name' s+item] + ['html' s+(crip row-html)] + == + =/ =sse-event:http-utils [~ `'ball-change' [(en:json:html json)]~] + =/ data=octs (sse-encode:http-utils ~[sse-event]) + ;< ~ bind:m (send-data:srv eyre-id `data) + $(lanes t.lanes) + :: Delete: send name + =/ =json + %- pairs:enjs:format + :~ ['action' s+'del'] + ['name' s+item] + == + =/ =sse-event:http-utils [~ `'ball-change' [(en:json:html json)]~] + =/ data=octs (sse-encode:http-utils ~[sse-event]) + ;< ~ bind:m (send-data:srv eyre-id `data) + $(lanes t.lanes) + == +:: Resolve URL path — direct match only +:: +++ resolve-url-path + |= [raw=path root=ball:tarball] + ^- path + =/ current=ball:tarball root + =/ result=path ~ + |- + ?~ raw result + =/ child=(unit ball:tarball) (~(get by dir.current) i.raw) + ?^ child + $(raw t.raw, result (snoc result i.raw), current u.child) + :: No match — keep segment as-is + $(raw t.raw, result (snoc result i.raw)) +:: Build URL path from segments +:: +++ build-url + |= pax=path + ^- tape + =/ acc=tape "/grubbery/ball" + |- + ?~ pax acc + $(pax t.pax, acc (weld acc "/{(trip i.pax)}")) +:: +++ page-head + |= title=tape + ^- manx + ;head + ;title: {title} + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;link(rel "icon", href "data:,"); + ;style + ; body { font-family: monospace; margin: 20px; } + ; h1 { font-size: 18px; } + ; table { border-collapse: collapse; width: 100%; } + ; th, td { text-align: left; padding: 8px; } + ; th { border-bottom: 1px solid #ccc; } + ; a { color: #0366d6; text-decoration: none; } + ; a:hover { text-decoration: underline; } + ; .breadcrumb { margin-bottom: 10px; } + ; .breadcrumb a { margin: 0 2px; } + ; .info { margin: 10px 0; padding: 10px; background: #f6f8fa; border-radius: 6px; } + ; .info dt { font-weight: bold; float: left; width: 100px; } + ; .info dd { margin-left: 110px; margin-bottom: 4px; } + ; button { padding: 2px 8px; cursor: pointer; font-family: monospace; font-size: 12px; } + ; .del-form { display: inline; } + ; .symlink-target { color: #6a737d; } + ; .mark-mismatch { color: #cb2431; font-weight: bold; } + ; .action-row { margin: 6px 0; display: flex; gap: 6px; align-items: center; } + ; .action-row label { font-weight: bold; min-width: 110px; } + ; .inline-form { display: flex; gap: 4px; align-items: center; } + ; .inline-form input[type="text"] { padding: 2px 4px; font-family: monospace; font-size: 12px; width: 120px; } + ; .weir-system { color: #e36209; font-weight: bold; } + ; .weir-label { color: #6a737d; margin-right: 4px; } + ; .weir-roads { color: #6f42c1; } + ; .weir-road-item { margin-right: 8px; } + ; .weir-del { font-size: 10px; padding: 0 4px; margin-left: 2px; color: #cb2431; cursor: pointer; } + ; select { padding: 2px 4px; font-family: monospace; font-size: 12px; } + ; .sortable { cursor: pointer; user-select: none; } + ; .sortable:hover { background: #f0f0f0; } + ; .sortable::after { content: ' \2195'; opacity: 0.3; } + ; .sortable.asc::after { content: ' \2191'; opacity: 1; } + ; .sortable.desc::after { content: ' \2193'; opacity: 1; } + ; .boom-banner { margin: 10px 0; padding: 10px; background: #ffeef0; border: 1px solid #cb2431; border-radius: 6px; cursor: pointer; } + ; .boom-banner:hover { background: #fdd; } + ; .boom-icon { color: #cb2431; font-weight: bold; cursor: pointer; margin-left: 4px; display: inline; } + ; .boom-icon:hover { text-decoration: underline; } + ; .boom-modal-overlay { display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.4); z-index: 1000; } + ; .boom-modal-overlay.active { display: flex; align-items: center; justify-content: center; } + ; .boom-modal { background: #fff; border: 2px solid #cb2431; border-radius: 8px; padding: 16px; max-width: 80vw; max-height: 80vh; overflow: auto; min-width: 400px; } + ; .boom-modal h3 { color: #cb2431; margin: 0 0 8px; } + ; .boom-modal pre { white-space: pre-wrap; font-size: 12px; margin: 0; max-height: 60vh; overflow: auto; background: #ffeef0; padding: 8px; border-radius: 4px; } + == + == +:: +++ breadcrumb + |= pax=path + ^- manx + =/ seg-data=(list [seg=@ta url=tape]) + =/ built=path ~ + =/ acc=(list [seg=@ta url=tape]) ~ + =/ rem=path pax + |- + ?~ rem (flop acc) + =. built (snoc built i.rem) + =/ url=tape (build-url built) + $(rem t.rem, acc [[i.rem url] acc]) + =/ crumbs=(list manx) + :~ ;a/"/grubbery/ball": / + == + =. crumbs + %+ weld crumbs + %+ turn seg-data + |= [seg=@ta url=tape] + ^- manx + ;a/"{url}": {(trip seg)}/ + ;div.breadcrumb + ;* crumbs + == +:: +++ dir-info + |= [b=ball:tarball url-prefix=tape dir-weir=(unit weir:nexus) pax=path neck-url=(unit tape)] + ^- manx + =/ neck-display=tape + ?~ fil.b "-" + ?~ neck.u.fil.b "-" + (trip (spat (rail-to-path:tarball u.neck.u.fil.b))) + =/ nkids=@ud + %+ add + ~(wyt by dir.b) + ?~(fil.b 0 ~(wyt by contents.u.fil.b)) + =/ download-url=tape "{url-prefix}?download=tar" + ;div.info + ;dl + ;dt: nexus + ;dd + ;* ?~ neck-url + :~ ;span: {neck-display} + == + :~ ;a/"{u.neck-url}": {neck-display} + == + == + ;dt: items + ;dd: {(scow %ud nkids)} + ;dt: sandbox + ;dd#sandbox-value + ;* (render-sandbox dir-weir url-prefix pax) + == + == + ;* ?. ?=(^ pax) ~ + :~ ;div.action-row + ;form.inline-form(method "POST", action url-prefix) + ;label: Add to Weir: + ;select(name "category") + ;option(value "write"): write + ;option(value "poke"): poke + ;option(value "read"): read + == + ;input(type "text", name "road-path", placeholder "/path or /path/", required ""); + ;input(type "hidden", name "action", value "add-weir-road"); + ;button(type "submit"): Add + == + == + == + ;* ?. ?&(?=(^ fil.b) ?=(^ neck.u.fil.b)) ~ + :~ ;div.action-row + ;form.inline-form(method "POST", action url-prefix) + ;label: Nexus: + ;input(type "hidden", name "action", value "reload-nexus"); + ;button(type "submit"): Reload + == + == + == + ;div.action-row + ;label: Download: + ;a/"{download-url}" + ;button(type "button"): Download as Tarball + == + == + ;div.action-row + ;form.inline-form(method "POST", action url-prefix) + ;label: Create Folder: + ;input(type "text", name "foldername", placeholder "folder-name", required ""); + ;input(type "hidden", name "action", value "create-folder"); + ;button(type "submit"): Create + == + == + ;div.action-row + ;form.inline-form(method "POST", action url-prefix) + ;label: Create Symlink: + ;input(type "text", name "linkname", placeholder "link-name", required ""); + ;input(type "text", name "target", placeholder "target-path", required ""); + ;input(type "hidden", name "action", value "create-symlink"); + ;button(type "submit"): Create + == + == + ;div.action-row + ;form.inline-form(method "POST", action url-prefix, enctype "multipart/form-data") + ;label: Upload Grub: + ;input(type "file", name "file"); + ;button(type "submit"): Upload + == + == + ;div.action-row + ;form.inline-form(method "POST", action url-prefix, enctype "multipart/form-data") + ;label: Upload Grubs: + ;input(type "file", name "file", multiple ""); + ;button(type "submit"): Upload All + == + == + ;div.action-row + ;form.inline-form(method "POST", action url-prefix, enctype "multipart/form-data") + ;label: Upload Directory: + ;input(type "file", name "file", webkitdirectory "", directory ""); + ;button(type "submit"): Upload Directory + == + == + == +:: +++ render-sandbox + |= [dir-weir=(unit weir:nexus) url-prefix=tape pax=path] + ^- (list manx) + ?. ?=(^ pax) + :~ ;span.weir-system: unrestricted + == + (render-weir dir-weir url-prefix) +:: +++ render-weir + |= [dir-weir=(unit weir:nexus) url-prefix=tape] + ^- (list manx) + ?~ dir-weir + :~ ;span.weir-system: unrestricted + == + =/ items=(list manx) + ;: weld + (render-weir-category "write" make.u.dir-weir url-prefix) + (render-weir-category "poke" poke.u.dir-weir url-prefix) + (render-weir-category "read" peek.u.dir-weir url-prefix) + == + %+ snoc items + ;form.del-form(method "POST", action url-prefix) + ;input(type "hidden", name "action", value "clear-weir"); + ;button.weir-del(type "submit", onclick "return confirm('Remove weir? This gives unrestricted access.')"): clear weir + == +:: +++ render-weir-category + |= [label=tape roads=(set road:tarball) url-prefix=tape] + ^- (list manx) + =/ road-items=(list manx) + %+ turn ~(tap in roads) + |= =road:tarball + ^- manx + =/ road-path=tape (road-to-form road) + ;span.weir-road-item + ;span.weir-roads: {road-path} + ;form.del-form(method "POST", action url-prefix) + ;input(type "hidden", name "action", value "del-weir-road"); + ;input(type "hidden", name "category", value label); + ;input(type "hidden", name "road-path", value road-path); + ;button.weir-del(type "submit"): x + == + == + %+ weld + :~ ;span.weir-label: {label}: + == + ?~ road-items + :~ ;span.weir-roads: - + ;br; + == + (snoc road-items ;br;) +:: +++ render-road + |= =road:tarball + ^- tape + ?- -.road + %& (render-lane p.road) + %| + =/ ups=tape ?:(=(0 p.p.road) "./" (zing (reap p.p.road "../"))) + =/ lane=tape (render-lane q.p.road) + :: strip leading / since ups already provides the prefix + =/ trimmed=tape ?:(&(?=(^ lane) =(i.lane '/')) t.lane lane) + "{ups}{trimmed}" + == +:: +++ road-to-form + |= =road:tarball + ^- tape + ?- -.road + %& (render-lane p.road) + %| + =/ prefix=tape (zing (reap p.p.road "../")) + =/ lane=tape (render-lane q.p.road) + =/ trimmed=tape ?:(&(?=(^ lane) =(i.lane '/')) t.lane lane) + "{prefix}{trimmed}" + == +:: +++ render-lane + |= =lane:tarball + ^- tape + ?- -.lane + %& + ?~ path.p.lane + "/{(trip name.p.lane)}" + "{(trip (spat path.p.lane))}/{(trip name.p.lane)}" + %| + ?~(p.lane "/" "{(trip (spat p.lane))}/") + == +:: +++ render-dir + |= $: pax=path + root=ball:tarball + root-born=born:nexus + root-sand=sand:nexus + now=@da + conversions=(map bars:tarball tube:clay) + code-namespace=(unit path) + =bangs:nexus + == + ^- manx + =/ b=ball:tarball (~(dip ba:tarball root) pax) + =/ b-born=born:nexus (~(dip of root-born) pax) + =/ dir-sand=sand:nexus (~(dip of root-sand) pax) + =/ dir-weir=(unit weir:nexus) fil.dir-sand + :: Nexus source link: combines the governing /code namespace + :: with the directory's neck rail to form a URL to the .hoon source. + :: e.g. /grubbery/ball/code/nex/wallet/account.hoon + =/ neck-url=(unit tape) + ?~ code-namespace ~ + ?~ fil.b ~ + ?~ neck.u.fil.b ~ + `"/grubbery/ball{(trip (spat (weld u.code-namespace /nex)))}{(trip (spat (rail-to-path:tarball u.neck.u.fil.b)))}.hoon" + =/ path-display=tape + ?~ pax "/" + (trip (spat pax)) + =/ kids dir.b + =/ file-contents=(map @ta content:tarball) + ?~ fil.b ~ + contents.u.fil.b + =/ subdirs=(list @ta) ~(tap in ~(key by kids)) + =/ files=(list @ta) ~(tap in ~(key by file-contents)) + =/ url-prefix=tape (build-url pax) + :: Error state at this level + =/ nexus-bang=(unit tang) bang.bangs + =/ file-bangs=(map @ta (unit tang)) err.bangs + ;html + ;+ (page-head "Index of {path-display}") + ;body + ;+ (breadcrumb pax) + ;h1: Index of {path-display} + ;+ (dir-info b url-prefix dir-weir pax neck-url) + ;* ?~ nexus-bang ~ + =/ rendered=tape (render-tang u.nexus-bang) + :~ ;div.boom-banner(data-tang rendered, onclick "showBoom(this)") + nexus crashed — click for details + == + == + ;table#listing(data-path (trip (spat pax))) + ;tr + ;th.sortable(data-col "0", onclick "sortTable(0)"): Name + ;th.sortable(data-col "1", onclick "sortTable(1)"): Blot + ;th.sortable(data-col "2", onclick "sortTable(2)"): Mime Type + ;th.sortable(data-col "3", onclick "sortTable(3)"): Size + ;th.sortable(data-col "4", onclick "sortTable(4)"): Modified + ;th: Actions + == + ;* + =/ rows=(list manx) ~ + :: Parent link + =? rows ?=(^ pax) + =/ parent=path (snip `path`pax) + =/ parent-url=tape (build-url parent) + %+ snoc rows + ;tr + ;td + ;a/"{parent-url}": ../ + == + ;td: - + ;td: - + ;td: - + ;td: - + ;td: - + == + :: Subdirectories + =. rows + %+ weld rows + %+ turn subdirs + |= name=@ta + ^- manx + =/ sub=ball:tarball (~(got by kids) name) + :: TODO: query sub-directory bang state + (render-dir-row name sub url-prefix ~) + :: Grubs + =. rows + %+ weld rows + %+ turn files + |= name=@ta + ^- manx + =/ =content:tarball (~(got by file-contents) name) + =/ file-bang=(unit tang) (fall (~(get by file-bangs) name) ~) + (render-grub-row name content url-prefix pax b-born now conversions code-namespace file-bang) + rows + == + ;div#boom-overlay.boom-modal-overlay + ;div.boom-modal + ;h3: Error + ;pre; + == + == + ;script: {(trip sse-script)} + == + == +:: +++ sse-script + ^- @t + ''' + var sortCol = 0, sortAsc = true; + function getRows() { + var tbl = document.getElementById('listing'); + return Array.from(tbl.querySelectorAll('tr[data-name]')); + } + function sortVal(row, col) { + if (col === 3) return parseInt(row.dataset.size || '0') || 0; + return (row.cells[col] && row.cells[col].textContent || '').toLowerCase(); + } + function doSort() { + var tbl = document.getElementById('listing'); + var tb = tbl.querySelector('tbody') || tbl; + var rows = getRows(); + rows.sort(function(a, b) { + var ta = a.dataset.type || '', tb2 = b.dataset.type || ''; + if (ta !== tb2) { var df = ta === 'dir' ? -1 : 1; return sortAsc ? df : -df; } + var va = sortVal(a, sortCol), vb = sortVal(b, sortCol); + var cmp = (typeof va === 'number') ? va - vb : (va < vb ? -1 : va > vb ? 1 : 0); + return sortAsc ? cmp : -cmp; + }); + rows.forEach(function(r) { tb.appendChild(r); }); + tbl.querySelectorAll('th.sortable').forEach(function(th) { + th.classList.remove('asc', 'desc'); + if (parseInt(th.dataset.col) === sortCol) th.classList.add(sortAsc ? 'asc' : 'desc'); + }); + } + function sortTable(col) { + if (sortCol === col) { sortAsc = !sortAsc; } + else { sortCol = col; sortAsc = true; } + doSort(); + } + (function() { + doSort(); + var tbl = document.getElementById('listing'); + if (!tbl) return; + var tb = tbl.querySelector('tbody') || tbl; + var es = new EventSource('/grubbery/ball/stream?path=' + tbl.dataset.path); + es.addEventListener('ball-change', function(e) { + var d = JSON.parse(e.data); + if (d.action === 'weir') { + var sb = document.getElementById('sandbox-value'); + if (sb) sb.innerHTML = d.html; + return; + } + if (d.action === 'deleted') { + document.body.innerHTML = '

Directory deleted

Back to root

'; + es.close(); + return; + } + var row = tb.querySelector('tr[data-name="' + d.name + '"]'); + if (row) row.remove(); + if (d.action === 'add' && d.html) { + tb.insertAdjacentHTML('beforeend', d.html); + doSort(); + } + }); + window.addEventListener('beforeunload', function() { es.close(); }); + })(); + function doAction(action, params) { + var form = document.createElement('form'); + form.method = 'POST'; + form.action = location.pathname; + var a = document.createElement('input'); + a.type = 'hidden'; a.name = 'action'; a.value = action; + form.appendChild(a); + for (var k in params) { + var i = document.createElement('input'); + i.type = 'hidden'; i.name = k; i.value = params[k]; + form.appendChild(i); + } + document.body.appendChild(form); + form.submit(); + } + function renameItem(type, name) { + var n = prompt('New name for ' + name + ':', name); + if (!n || n === name) return; + doAction('rename-' + type, type === 'grub' ? {filename: name, newname: n} : {foldername: name, newname: n}); + } + function moveItem(type, name) { + var cur = location.pathname.replace('/grubbery/ball', '') || '/'; + var d = prompt('Move ' + name + ' to (full path):', cur + (cur === '/' ? '' : '/') + name); + if (!d) return; + doAction('move-' + type, type === 'grub' ? {filename: name, dest: d} : {foldername: name, dest: d}); + } + function copyItem(type, name) { + var cur = location.pathname.replace('/grubbery/ball', '') || '/'; + var d = prompt('Copy ' + name + ' to (full path):', cur + (cur === '/' ? '' : '/') + name); + if (!d) return; + doAction('copy-' + type, type === 'grub' ? {filename: name, dest: d} : {foldername: name, dest: d}); + } + function showBoom(el) { + var pre = el.dataset.tang; + var ov = document.getElementById('boom-overlay'); + ov.querySelector('pre').textContent = pre; + ov.classList.add('active'); + } + document.addEventListener('click', function(e) { + var ov = document.getElementById('boom-overlay'); + if (e.target === ov) ov.classList.remove('active'); + }); + document.addEventListener('keydown', function(e) { + if (e.key === 'Escape') document.getElementById('boom-overlay').classList.remove('active'); + }); + ''' +:: +++ render-split + ^- manx + ;html + ;head + ;title: grubbery split view + ;meta(charset "utf-8"); + ;link(rel "icon", href "data:,"); + ;style + ; * { box-sizing: border-box; margin: 0; padding: 0; } + ; html, body { height: 100%; font-family: monospace; } + ; .split-header { display: flex; height: 32px; background: #f6f8fa; border-bottom: 1px solid #ccc; } + ; .pane-bar { display: flex; align-items: center; padding: 0 6px; gap: 4px; } + ; .pane-bar.left { flex: 1; border-right: 1px solid #ccc; } + ; .pane-bar.right { flex: 1; } + ; .pane-bar input { flex: 1; font-family: monospace; font-size: 12px; border: 1px solid #ccc; padding: 2px 6px; min-width: 0; } + ; .pane-bar button { background: none; border: 1px solid #ccc; cursor: pointer; font-family: monospace; font-size: 12px; padding: 2px 6px; } + ; .pane-bar button:hover { background: #e1e4e8; } + ; .split-container { display: flex; height: calc(100% - 32px); } + ; .split-container iframe { border: none; height: 100%; } + ; #left-frame { flex: 1; border-right: 1px solid #ccc; } + ; #right-frame { flex: 1; } + == + == + ;body + ;div.split-header + ;div.pane-bar.left + ;button(onclick "goBack('left-frame')"): ← + ;button(onclick "goFwd('left-frame')"): → + ;input#left-url(type "text", value "/grubbery/ball", placeholder "/grubbery/ball/...", onkeydown "if(event.key==='Enter')navLeft()"); + ;button(onclick "navLeft()"): go + ;button(onclick "mirrorRight()"): mirror → + == + ;div.pane-bar.right + ;button(onclick "goBack('right-frame')"): ← + ;button(onclick "goFwd('right-frame')"): → + ;input#right-url(type "text", value "/grubbery/ball", placeholder "/grubbery/ball/...", onkeydown "if(event.key==='Enter')navRight()"); + ;button(onclick "navRight()"): go + ;button(onclick "mirrorLeft()"): mirror ← + == + == + ;div#split.split-container + ;iframe#left-frame(src "/grubbery/ball"); + ;iframe#right-frame(src "/grubbery/ball"); + == + ;script: {(trip split-script)} + == + == +:: +++ split-script + ^- @t + ''' + var hist = { 'left-frame': [], 'right-frame': [] }; + var fwd = { 'left-frame': [], 'right-frame': [] }; + function navTo(id, inputId, url) { + var f = document.getElementById(id); + try { var cur = f.contentWindow.location.href; if (cur && cur !== 'about:blank') hist[id].push(cur); } catch(e) {} + fwd[id] = []; + f.src = url; + document.getElementById(inputId).value = url; + } + function navLeft() { + var url = document.getElementById('left-url').value.trim(); + if (url) navTo('left-frame', 'left-url', url); + } + function navRight() { + var url = document.getElementById('right-url').value.trim(); + if (url) navTo('right-frame', 'right-url', url); + } + function mirrorLeft() { + try { + var loc = document.getElementById('left-frame').contentWindow.location.href; + navTo('right-frame', 'right-url', loc); + } catch(e) {} + } + function mirrorRight() { + try { + var loc = document.getElementById('right-frame').contentWindow.location.href; + navTo('left-frame', 'left-url', loc); + } catch(e) {} + } + function goBack(id) { + if (!hist[id].length) return; + var inputId = id === 'left-frame' ? 'left-url' : 'right-url'; + var f = document.getElementById(id); + try { var cur = f.contentWindow.location.href; if (cur && cur !== 'about:blank') fwd[id].push(cur); } catch(e) {} + var prev = hist[id].pop(); + f.src = prev; + document.getElementById(inputId).value = prev; + } + function goFwd(id) { + if (!fwd[id].length) return; + var inputId = id === 'left-frame' ? 'left-url' : 'right-url'; + var f = document.getElementById(id); + try { var cur = f.contentWindow.location.href; if (cur && cur !== 'about:blank') hist[id].push(cur); } catch(e) {} + var next = fwd[id].pop(); + f.src = next; + document.getElementById(inputId).value = next; + } + function trackFrame(id, inputId) { + var frame = document.getElementById(id); + frame.addEventListener('load', function() { + try { + var loc = frame.contentWindow.location.href; + if (loc && loc !== 'about:blank') { + document.getElementById(inputId).value = loc; + } + } catch(e) {} + }); + } + trackFrame('left-frame', 'left-url'); + trackFrame('right-frame', 'right-url'); + ''' +:: +++ render-tang + |= =tang + ^- tape + %- zing + %+ turn (flop tang) + |=(=tank (weld ~(ram re tank) "\0a")) +:: +++ format-size + |= n=@ud + ^- tape + ?: (lth n 1.024) + "{(scow %ud n)} B" + ?: (lth n 1.048.576) + "{(scow %ud (div n 1.024))} KB" + "{(scow %ud (div n 1.048.576))} MB" +:: +++ render-dir-row + |= [name=@ta sub=ball:tarball url-prefix=tape nexus-bang=(unit tang)] + ^- manx + =/ dir-url=tape "{url-prefix}/{(trip name)}" + ;tr(data-name (trip name), data-type "dir") + ;td + ;a/"{dir-url}": {(trip name)}/ + ;* ?~ nexus-bang ~ + =/ rendered=tape (render-tang u.nexus-bang) + :~ ;span.boom-icon(data-tang rendered, onclick "showBoom(this)"): ! + == + == + ;td: - + ;td: - + ;td: - + ;td: - + ;td + ;a/"{dir-url}?download=tar" + ;button(type "button"): Download + == + ;button(type "button", onclick "renameItem('folder','{(trip name)}')"): Rename + ;button(type "button", onclick "moveItem('folder','{(trip name)}')"): Move + ;button(type "button", onclick "copyItem('folder','{(trip name)}')"): Copy + ;form.del-form(method "POST", action url-prefix) + ;input(type "hidden", name "action", value "delete-folder"); + ;input(type "hidden", name "foldername", value (trip name)); + ;button(type "submit", onclick "return confirm('Delete folder {(trip name)} and all its contents?')"): Delete + == + == + == +:: +++ render-grub-row + |= $: name=@ta + =content:tarball + url-prefix=tape + pax=path + dir-born=born:nexus + now=@da + conversions=(map bars:tarball tube:clay) + code-namespace=(unit path) + file-bang=(unit tang) + == + ^- manx + =/ mtime-display=tape + =/ node=(unit [=tote:nexus bags=(map @ta sack:nexus)]) + (~(get of dir-born) ~) + ?~ node "-" + =/ sk=(unit sack:nexus) (~(get by bags.u.node) name) + ?~ sk "-" + (en:datetime-local:iso-8601 da.file.u.sk) + =/ sag=sage:tarball sage.content + ?: =(%symlink name.p.sag) + =/ sym !<(symlink:tarball q.sag) + =/ target-display=tape (trip (encode-symlink:tarball sym)) + =/ resolved-path=path (resolve-symlink:tarball sym pax) + =/ target-url=tape "/grubbery/ball{(trip (spat resolved-path))}" + ;tr(data-name (trip name), data-type "grub") + ;td + ;a/"{target-url}": {(trip name)} + ;span.symlink-target: -> {target-display} + == + ;td: symlink + ;td: - + ;td: - + ;td: {mtime-display} + ;td + ;form.del-form(method "POST", action url-prefix) + ;input(type "hidden", name "action", value "delete-grub"); + ;input(type "hidden", name "filename", value (trip name)); + ;button(type "submit", onclick "return confirm('Delete {(trip name)}?')"): Delete + == + == + == + =/ display-name=tape (trip name) + =/ file-url=tape "{url-prefix}/{display-name}" + =/ mark-name=tape (spud (rail-to-path:tarball p.sag)) + =/ ext=(unit @ta) (parse-extension:tarball name) + =/ rail-ext=@ta + %- crip %- zing + %+ join "_" + (turn (rail-to-path:tarball p.sag) trip) + =/ mark-matches=? + ?~ ext %.n + =(u.ext rail-ext) + =/ mark-class=tape ?:(mark-matches "" " mark-mismatch") + =/ =mime + ?: =(%mime name.p.sag) + !<(mime q.sag) + (~(sage-to-mime gen:tarball [now conversions]) sag) + =/ mime-raw=tape (trip (spat p.mime)) + =/ mime-display=tape ?~(mime-raw "" (tail mime-raw)) + =/ is-binary=? =(p.mime /application/x-urb-jam) + =/ view-url=tape ?:(is-binary "{file-url}?pretty" file-url) + ;tr(data-name (trip name), data-type "grub", data-size (scow %ud p.q.mime)) + ;td + ;a/"{view-url}": {display-name} + ;* ?~ file-bang ~ + =/ rendered=tape (render-tang u.file-bang) + :~ ;span.boom-icon(data-tang rendered, onclick "showBoom(this)"): ! + == + == + :: Blot link: governing /code namespace + /mar/ + blot rail + ;td(class mark-class) + ;* =/ mark-url=(unit tape) + ?~ code-namespace ~ + =/ mar-path=path (weld u.code-namespace (weld /mar (rail-to-path:tarball p.sag))) + `"/grubbery/ball{(trip (spat mar-path))}.hoon" + ?~ mark-url + :~ ;span: {mark-name} + == + :~ ;a/"{u.mark-url}": {mark-name} + == + == + ;td: {mime-display} + ;td: {(format-size p.q.mime)} + ;td: {mtime-display} + ;td + ;a/"{file-url}"(download display-name) + ;button(type "button"): Download + == + ;button(type "button", onclick "renameItem('grub','{display-name}')"): Rename + ;button(type "button", onclick "moveItem('grub','{display-name}')"): Move + ;button(type "button", onclick "copyItem('grub','{display-name}')"): Copy + ;form.del-form(method "POST", action url-prefix) + ;input(type "hidden", name "action", value "delete-grub"); + ;input(type "hidden", name "filename", value (trip name)); + ;button(type "submit", onclick "return confirm('Delete {(trip name)}?')"): Delete + == + == + == +-- diff --git a/desk/gub/nex/git/data.hoon b/desk/gub/nex/git/data.hoon new file mode 100644 index 0000000..475c97d --- /dev/null +++ b/desk/gub/nex/git/data.hoon @@ -0,0 +1,1275 @@ +:: git/data nexus: git object store + atomic checkout + local commits +:: +:: Stores pack data, index, refs, HEAD. On reload, checks out +:: the tree at HEAD and builds commit log + branch list. +:: +:: Ball layout (inputs — written by parent): +:: packs/pack-N.pack raw pack bytes (mime), N = 0, 1, 2, ... +:: packs/pack-N.idx pack index: "hex-hash offset\n" per line (mime) +:: HEAD "ref: refs/heads/" or raw hash (detached) +:: refs/heads/ local branch ref (mime, hash text) +:: refs/remotes/origin/ remote tracking ref (mime, hash text) +:: refs/stash most recent stash commit hash +:: commit-request.json if present, create commit from current tree/ +:: stash-request.sig if present, stash dirty tree and reset +:: stash-pop-request.sig if present, pop stash onto working tree +:: objects/ loose git objects (persisted across reloads) +:: INDEX git index: "mode hash\tpath\n" per entry +:: +:: Ball layout (outputs — built by on-load): +:: tree/ checked out files +:: ui/commits.json commit log from branch tip (50 max) +:: ui/branches.json branch name list +:: ui/current.json {"hash": ""} +:: +/< git-obj /lib/git/object.hoon +/< git-pack /lib/git/pack.hoon +/< git-repo /lib/git/repository.hoon +/< git-transport /lib/git/transport.hoon +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + :: load all packs from packs/ directory + =/ archive=(list pack:git-pack) (load-packs ball) + ?~ archive [sand gain ball] + :: check for HEAD + =/ parsed-head=(unit [branch=(unit @t) hash=@ux]) + (parse-head ball) + ?~ parsed-head [sand gain ball] + =/ commit-hash=@ux hash.u.parsed-head + :: read refs from refs/ namespace + =/ built-refs=(axal ref:git-repo) + (read-refs-from-ns ball) + :: read loose objects from objects/ dir + =/ loose=(map hash:git-repo object:git-obj) + (read-loose-from-ball ball) + =/ repo=repository:git-repo + [%sha-1 [loose archive] built-refs ~ ~] + =/ sto store:~(. git-repo repo) + :: + :: === stash request handling === + :: create a commit from index, write refs/stash + reflog, reset tree + :: + =/ stash-req=(unit content:tarball) + (~(get ba:tarball ball) [/ %'stash-request.sig']) + ?^ stash-req + ~& >> "%git/data: stash request" + =/ full-idx=(map path [hash:git-repo mtime=@t]) (read-index ball) + =/ idx=(map path hash:git-repo) (idx-hashes full-idx) + =/ parent-com=(unit commit:git-repo) (get-commit:sto commit-hash) + =/ parent-tree-hash=hash:git-repo + ?~(parent-com 0x0 tree.u.parent-com) + :: build tree + commit from current index + =/ stash-result + (git-commit idx parent-tree-hash commit-hash (pairs:enjs:format ~[['message' s+'stash']])) + ?~ stash-result + ~& >> "%git/data: nothing to stash (clean)" + =. ball (~(del ba:tarball ball) / %'stash-request.sig') + [sand gain ball] + :: merge loose objects + =. ball (write-loose-to-ball ball new-loose.u.stash-result) + :: write refs/stash + =/ stash-hex=tape (print-hash-sha-1:git-transport new-hash.u.stash-result) + =/ stash-octs=octs (as-octt:bytestream stash-hex) + =. ball + %+ ~(put ba:tarball ball) [/refs %'stash'] + [~ [/ %mime] !>([/text/plain stash-octs])] + :: append stash reflog + =/ old-stash-hex=tape + =/ old=(unit hash:git-repo) (read-ref-file ball /refs 'stash') + ?~ old (reap 40 '0') + (print-hash-sha-1:git-transport u.old) + =. ball (append-stash-reflog ball old-stash-hex stash-hex "stash") + :: clear request + =. ball (~(del ba:tarball ball) / %'stash-request.sig') + :: full checkout from HEAD — reset tree + index + UI + =/ get-tree=$-(@ux (unit tree-dir:git-repo)) + |=(h=@ux (get-tree:sto h)) + =/ get-blob=$-(@ux (unit octs)) + |=(h=@ux (get-blob:sto h)) + =/ head-idx=(map path [hash:git-repo mtime=@t]) + (build-index-from-tree get-tree parent-tree-hash) + =. ball (write-index ball head-idx) + =/ files=(list [path octs]) + (checkout:git-transport get-tree get-blob parent-tree-hash) + =/ tree-ball=ball:tarball (files-to-ball files) + =. ball ball(dir (~(put by dir.ball) 'tree' tree-ball)) + =. ball (write-ui-outputs ball sto commit-hash parsed-head head-idx parent-tree-hash) + ~& >> ["%git/data: stashed at" (scag 7 stash-hex)] + [sand gain ball] + :: + :: === stash pop request handling === + :: read refs/stash commit, apply its tree to index, drop stash + :: + =/ pop-req=(unit content:tarball) + (~(get ba:tarball ball) [/ %'stash-pop-request.sig']) + ?^ pop-req + ~& >> "%git/data: stash pop request" + =/ stash-hash=(unit hash:git-repo) + (read-ref-file ball /refs 'stash') + ?~ stash-hash + ~& >>> "%git/data: no stash to pop" + =. ball (~(del ba:tarball ball) / %'stash-pop-request.sig') + [sand gain ball] + =/ stash-com=(unit commit:git-repo) (get-commit:sto u.stash-hash) + ?~ stash-com + ~& >>> "%git/data: stash commit not found in store" + =. ball (~(del ba:tarball ball) / %'stash-pop-request.sig') + [sand gain ball] + :: get HEAD commit tree for status comparison + =/ head-com=(unit commit:git-repo) (get-commit:sto commit-hash) + =/ head-tree-hash=hash:git-repo + ?~(head-com 0x0 tree.u.head-com) + :: restore index from stash commit tree + =/ get-tree=$-(@ux (unit tree-dir:git-repo)) + |=(h=@ux (get-tree:sto h)) + =/ get-blob=$-(@ux (unit octs)) + |=(h=@ux (get-blob:sto h)) + =/ stash-idx=(map path [hash:git-repo mtime=@t]) + (build-index-from-tree get-tree tree.u.stash-com) + =. ball (write-index ball stash-idx) + :: checkout stash tree into tree/ + =/ files=(list [path octs]) + (checkout:git-transport get-tree get-blob tree.u.stash-com) + =. ball ball(dir (~(put by dir.ball) 'tree' (files-to-ball files))) + :: pop reflog — drop last entry, get previous stash hash + =/ pop-result=[prev=(unit hash:git-repo) =ball:tarball] + (pop-stash-reflog ball) + =. ball ball.pop-result + :: update refs/stash: point to previous stash or delete if empty + =. ball + ?~ prev.pop-result + (~(del ba:tarball ball) /refs %'stash') + =/ prev-hex=tape (print-hash-sha-1:git-transport u.prev.pop-result) + =/ prev-octs=octs (as-octt:bytestream prev-hex) + %+ ~(put ba:tarball ball) [/refs %'stash'] + [~ [/ %mime] !>([/text/plain prev-octs])] + :: clear request + =. ball (~(del ba:tarball ball) / %'stash-pop-request.sig') + :: build UI outputs — status will show stash diff against HEAD + =. ball (write-ui-outputs ball sto commit-hash parsed-head stash-idx head-tree-hash) + ~& >> ["%git/data: popped stash" (scag 7 (print-hash-sha-1:git-transport u.stash-hash))] + [sand gain ball] + :: + :: === add request handling === + :: if add-request.json exists, stage files into INDEX + :: + =/ add-req=(unit json) (read-add-request ball) + ?^ add-req + ~& >> "%git/data: add request found" + ?> ?=(%o -.u.add-req) + =/ req-map=(map @t json) p.u.add-req + =/ current-tree=ball:tarball + (fall (~(get by dir.ball) 'tree') [~ ~]) + =/ old-idx=(map path [hash:git-repo mtime=@t]) (read-index ball) + :: determine which files to stage + =/ add-paths=(unit (set path)) + =/ p (~(get by req-map) 'paths') + ?. ?=([~ %a *] p) ~ + :- ~ + %- silt + %+ turn p.u.p + |= j=json + ?. ?=(%s -.j) / + (stab (crip (weld "/" (trip p.j)))) + =/ add-result=[idx=(map path [hash:git-repo mtime=@t]) new-loose=(map hash:git-repo object:git-obj)] + ?~ add-paths + :: add all + (git-add current-tree old-idx) + :: add specific paths only + (git-add-paths current-tree old-idx u.add-paths) + :: write only new loose objects (existing ones already in ball) + =. ball (write-loose-to-ball ball new-loose.add-result) + =. ball (write-index ball idx.add-result) + =. ball (~(del ba:tarball ball) / %'add-request.json') + :: rebuild status after staging + =/ get-tree=$-(@ux (unit tree-dir:git-repo)) + |=(h=@ux (get-tree:sto h)) + =/ parent-com=(unit commit:git-repo) (get-commit:sto commit-hash) + =/ head-tree-idx=(map path hash:git-repo) + ?~ parent-com ~ + (idx-hashes (build-index-from-tree get-tree tree.u.parent-com)) + =/ status=json (build-status ball idx.add-result head-tree-idx) + =. ball + (~(put ba:tarball ball) [/ui %'status.json'] [~ [/ %json] !>(status)]) + ~& >> "%git/data: staged files" + [sand gain ball] + :: + :: === commit request handling === + :: if commit-request.json exists, create a local commit + :: from the current tree/ state (don't overwrite it) + :: + =/ commit-req=(unit json) (read-commit-request ball) + ?^ commit-req + ~& >> "%git/data: commit request found" + :: read index as-is (staging is done by add-request) + =/ full-idx=(map path [hash:git-repo mtime=@t]) (read-index ball) + =/ idx=(map path hash:git-repo) (idx-hashes full-idx) + =/ parent-com=(unit commit:git-repo) (get-commit:sto commit-hash) + =/ parent-tree-hash=hash:git-repo + ?~(parent-com 0x0 tree.u.parent-com) + =/ commit-result + (git-commit idx parent-tree-hash commit-hash u.commit-req) + ?~ commit-result + ~& >> "%git/data: no changes, skipping commit" + =. ball (~(del ba:tarball ball) / %'commit-request.json') + [sand gain ball] + :: merge new loose objects + =/ all-loose=(map hash:git-repo object:git-obj) + (~(uni by loose) new-loose.u.commit-result) + =. repo repo(loose.object-store all-loose) + =. sto store:~(. git-repo repo) + :: advance HEAD (branch ref or detached) + =/ new-head-text=tape (print-hash-sha-1:git-transport new-hash.u.commit-result) + =/ hash-octs=octs (as-octt:bytestream new-head-text) + =/ branch-name=@t (fall branch.u.parsed-head '') + :: on a branch — update refs/heads/, HEAD stays symbolic + =? ball ?=(^ branch.u.parsed-head) + %+ ~(put ba:tarball ball) [/refs/heads (crip (trip u.branch.u.parsed-head))] + [~ [/ %mime] !>([/text/plain hash-octs])] + :: detached HEAD — update HEAD hash directly + =? ball ?=(~ branch.u.parsed-head) + %+ ~(put ba:tarball ball) [/ %'HEAD'] + [~ [/ %mime] !>([/text/plain hash-octs])] + :: append reflog if on a branch + =? ball ?=(^ branch.u.parsed-head) + =/ old-hex=tape (print-hash-sha-1:git-transport commit-hash) + =/ msg=tape + ?. ?=(%o -.u.commit-req) "commit" + =/ m (~(get by p.u.commit-req) 'message') + ?. ?=([~ %s *] m) "commit" + "commit: {(take-first-line (trip p.u.m))}" + (append-reflog ball (crip (trip u.branch.u.parsed-head)) old-hex new-head-text msg) + :: persist only new loose objects (existing ones already in ball) + =. ball (write-loose-to-ball ball new-loose.u.commit-result) + :: clear commit request + =. ball (~(del ba:tarball ball) / %'commit-request.json') + :: rebuild outputs with new HEAD + =/ ref-labels=(map hash:git-repo (list @t)) (build-ref-labels ball) + =/ new-commits=json (build-commit-log sto new-hash.u.commit-result 50 ref-labels) + =/ branches=json (build-branch-list ball) + =/ new-hex=@t (crip new-head-text) + =/ new-current=json (build-current ball new-hex branch-name) + :: after commit, HEAD tree = index, so staged is clean + =/ new-status=json (build-status ball full-idx idx) + =. ball + (~(put ba:tarball ball) [/ui %'commits.json'] [~ [/ %json] !>(new-commits)]) + =. ball + (~(put ba:tarball ball) [/ui %'branches.json'] [~ [/ %json] !>(branches)]) + =. ball + (~(put ba:tarball ball) [/ui %'current.json'] [~ [/ %json] !>(new-current)]) + =. ball + (~(put ba:tarball ball) [/ui %'status.json'] [~ [/ %json] !>(new-status)]) + [sand gain ball] + :: + :: === normal checkout === + :: + =/ com-maybe=(unit commit:git-repo) (get-commit:sto commit-hash) + ?~ com-maybe + :: HEAD points to unreachable commit (stale loose objects?) + :: clear objects/ and bail — next sync will restore + ~& >>> "%git/data: HEAD not found in store, clearing stale objects" + =. ball ball(dir (~(del by dir.ball) 'objects')) + [sand gain ball] + =/ com=commit:git-repo u.com-maybe + =/ head-text=tape (print-hash-sha-1:git-transport commit-hash) + ~& >> ["%git/data: checkout" (scag 7 head-text)] + =/ get-tree=$-(@ux (unit tree-dir:git-repo)) + |=(h=@ux (get-tree:sto h)) + =/ get-blob=$-(@ux (unit octs)) + |=(h=@ux (get-blob:sto h)) + :: checkout tree + =/ files=(list [path octs]) + (checkout:git-transport get-tree get-blob tree.com) + ~& >> ["%git/data: checked out" (lent files) "files"] + =/ tree-ball=ball:tarball (files-to-ball files) + :: build index from commit tree (path -> blob-hash flat map) + =/ idx=(map path [hash:git-repo mtime=@t]) + (build-index-from-tree get-tree tree.com) + =. ball (write-index ball idx) + :: write tree into ball BEFORE computing status + =. ball ball(dir (~(put by dir.ball) 'tree' tree-ball)) + =. ball (write-ui-outputs ball sto commit-hash parsed-head idx tree.com) + [sand gain ball] + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + stay:m + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Git repository data.' + ~ + 'Git object store. Stores pack, index, refs. Checkout via reload.' + == + %| + ?+ rail.p.mana 'File under git/data.' + [~ %'HEAD'] 'Git HEAD: "ref: refs/heads/" or raw commit hash (detached).' + [~ %'stash-request.sig'] 'Poke to stash dirty index and reset to HEAD.' + [~ %'stash-pop-request.sig'] 'Poke to pop the most recent stash.' + == + == + -- +:: +|% +:: +append-reflog: append an entry to the reflog for a branch +:: +:: Format: "old-hash new-hash message\n" per entry. +:: Stored at logs/heads/ as mime. +:: +++ append-reflog + |= [=ball:tarball branch=@ta old-hex=tape new-hex=tape msg=tape] + ^- ball:tarball + =/ entry=tape "{old-hex} {new-hex} {msg}\0a" + =/ log-path=path /logs/heads + =/ existing=(unit content:tarball) + (~(get ba:tarball ball) [log-path branch]) + =/ old-text=tape + ?~ existing "" + =/ m=mime !<(mime q.sage.u.existing) + (trip q.q.m) + =/ new-text=tape (weld old-text entry) + =/ new-octs=octs (as-octt:bytestream new-text) + %+ ~(put ba:tarball ball) [log-path branch] + [~ [/ %mime] !>([/text/plain new-octs])] +:: +++ append-stash-reflog + |= [=ball:tarball old-hex=tape new-hex=tape msg=tape] + ^- ball:tarball + =/ entry=tape "{old-hex} {new-hex} {msg}\0a" + =/ existing=(unit content:tarball) + (~(get ba:tarball ball) [/logs %'stash']) + =/ old-text=tape + ?~ existing "" + =/ m=mime !<(mime q.sage.u.existing) + (trip q.q.m) + =/ new-text=tape (weld old-text entry) + =/ new-octs=octs (as-octt:bytestream new-text) + %+ ~(put ba:tarball ball) [/logs %'stash'] + [~ [/ %mime] !>([/text/plain new-octs])] +:: +++ pop-stash-reflog + |= =ball:tarball + ^- [prev=(unit hash:git-repo) ball:tarball] + =/ existing=(unit content:tarball) + (~(get ba:tarball ball) [/logs %'stash']) + ?~ existing [~ ball] + =/ text=tape (trip q.q:!<(mime q.sage.u.existing)) + :: split on newlines, drop empty, drop last entry + =/ lines=(list @t) + %+ skip (to-wain:format (crip text)) + |=(t=@t =('' t)) + =/ count=@ud (lent lines) + ?: (lte count 1) + [~ (~(del ba:tarball ball) /logs %'stash')] + =/ kept=(list @t) (scag (dec count) lines) + :: extract previous stash hash from last remaining entry + :: format: "old-hash new-hash message" — new-hash starts at char 41 + =/ last-line=tape (trip (snag (dec (lent kept)) kept)) + =/ prev-hash=(unit hash:git-repo) + ?. (gte (lent last-line) 81) ~ + (rust (scag 40 (slag 41 last-line)) parse-hash-sha-1:git-transport) + =/ new-text=tape + %+ roll kept + |=([line=@t acc=tape] (weld acc (weld (trip line) "\0a"))) + =/ new-octs=octs (as-octt:bytestream new-text) + :- prev-hash + %+ ~(put ba:tarball ball) [/logs %'stash'] + [~ [/ %mime] !>([/text/plain new-octs])] +:: +:: +parse-head: read HEAD file and return branch or detached hash +:: +:: HEAD contains either "ref: refs/heads/" (on a branch) +:: or a raw hex hash (detached HEAD). Returns the branch name +:: and resolved hash, or just the hash if detached. +:: +++ parse-head + |= =ball:tarball + ^- (unit [branch=(unit @t) hash=@ux]) + =/ head-content=(unit content:tarball) + (~(get ba:tarball ball) [/ %'HEAD']) + ?~ head-content ~ + =/ head-mim=mime !<(mime q.sage.u.head-content) + =/ head-text=tape (trip q.q.head-mim) + ?: =("ref: " (scag 5 head-text)) + :: symbolic ref — extract branch name and resolve + =/ ref-path=tape (slag 5 head-text) + =/ branch=@t + ?. =("refs/heads/" (scag 11 ref-path)) + (crip ref-path) + (crip (slag 11 ref-path)) + =/ hash=(unit hash:git-repo) + (read-ref-file ball /refs/heads (crip (trip branch))) + ?~ hash ~ + `[`branch u.hash] + :: raw hash — detached HEAD + =/ hash=(unit @ux) + (rust head-text parse-hash-sha-1:git-transport) + ?~ hash ~ + `[~ u.hash] +:: +:: +read-add-request: check for add-request.json +:: +++ read-add-request + |= =ball:tarball + ^- (unit json) + =/ req=(unit content:tarball) + (~(get ba:tarball ball) [/ %'add-request.json']) + ?~ req ~ + =/ j=json (fall (mole |.(!<(json q.sage.u.req))) *json) + ?. ?=(%o -.j) ~ + `j +:: +:: +read-commit-request: check for commit-request.json +:: +++ read-commit-request + |= =ball:tarball + ^- (unit json) + =/ req=(unit content:tarball) + (~(get ba:tarball ball) [/ %'commit-request.json']) + ?~ req ~ + =/ j=json (fall (mole |.(!<(json q.sage.u.req))) *json) + ?. ?=(%o -.j) ~ + ?: =(~ p.j) ~ + `j +:: +:: +read-loose-from-ball: load persisted loose objects from objects/ dir +:: +++ read-loose-from-ball + |= =ball:tarball + ^- (map hash:git-repo object:git-obj) + =/ obj-dir=(unit ball:tarball) + (~(get by dir.ball) 'objects') + ?~ obj-dir ~ + ?~ fil.u.obj-dir ~ + =/ entries=(list [name=@t =content:tarball]) + ~(tap by contents.u.fil.u.obj-dir) + %+ roll entries + |= [[name=@t =content:tarball] acc=(map hash:git-repo object:git-obj)] + =/ h=(unit hash:git-repo) + (rust (trip name) parse-hash-sha-1:git-transport) + ?~ h acc + =/ m=mime !<(mime q.sage.content) + =/ raw=raw-object:git-obj (raw-from-octs:git-obj q.m) + =/ obj=object:git-obj (parse-raw:git-obj %sha-1 raw) + (~(put by acc) u.h obj) +:: +:: +write-loose-to-ball: persist loose objects as files in objects/ dir +:: +++ write-loose-to-ball + |= [=ball:tarball loose=(map hash:git-repo object:git-obj)] + ^- ball:tarball + =/ entries=(list [=hash:git-repo obj=object:git-obj]) + ~(tap by loose) + |- + ?~ entries ball + =/ name=@t (crip (print-hash-sha-1:git-transport hash.i.entries)) + =/ raw=raw-object:git-obj (obj-to-raw:git-obj %sha-1 obj.i.entries) + =/ raw-octs=octs (raw-to-octs:git-obj raw) + =/ =content:tarball [*metadata:tarball [/ %mime] !>([/application/octet-stream raw-octs])] + $(entries t.entries, ball (~(put ba:tarball ball) [/objects name] content)) +:: +:: +build-index-from-tree: walk commit tree, return flat path->blob-hash +:: +:: Populates the git index on checkout. Walks tree recursively, +:: records each blob's path and hash. Skips gitlinks. +:: +++ build-index-from-tree + |= [get-tree=$-(hash:git-repo (unit tree-dir:git-repo)) tree-hash=hash:git-repo] + ^- (map path [hash:git-repo mtime=@t]) + =/ tree=(unit tree-dir:git-repo) (get-tree tree-hash) + ?~ tree ~ + (walk-tree-for-index get-tree / u.tree) +:: +++ walk-tree-for-index + |= [get-tree=$-(hash:git-repo (unit tree-dir:git-repo)) here=path dir=tree-dir:git-repo] + ^- (map path [hash:git-repo mtime=@t]) + %+ roll dir + |= [ent=tree-entry:git-obj acc=(map path [hash:git-repo mtime=@t])] + ?: (is-gitlink:git-obj ent) acc + ?: (is-dir:git-obj ent) + =/ sub=(unit tree-dir:git-repo) (get-tree hash.ent) + ?~ sub acc + (~(uni by acc) (walk-tree-for-index get-tree (snoc here name.ent) u.sub)) + (~(put by acc) (snoc here name.ent) [hash.ent '']) +:: +:: +write-index: serialize index as flat file into ball +:: +:: Format: "mode hash mtime\tpath\n" per entry +:: mtime is optional — missing means no cached mtime. +:: Stored as INDEX mime file. +:: +++ write-index + |= [=ball:tarball idx=(map path [hash:git-repo mtime=@t])] + ^- ball:tarball + =/ lines=tape + %- zing + %+ turn ~(tap by idx) + |= [=path h=hash:git-repo mtime=@t] + =/ hex=tape (print-hash-sha-1:git-transport h) + =/ pax=tape (zing (join "/" (turn path trip))) + =/ mt=tape (trip mtime) + "100644 {hex} {mt}\09{pax}\0a" + =/ idx-octs=octs (as-octt:bytestream lines) + %+ ~(put ba:tarball ball) [/ %'INDEX'] + [~ [/ %mime] !>([/application/octet-stream idx-octs])] +:: +:: +read-index: parse INDEX file back to path->[hash mtime] map +:: +++ read-index + |= =ball:tarball + ^- (map path [hash:git-repo mtime=@t]) + =/ idx-content=(unit content:tarball) + (~(get ba:tarball ball) [/ %'INDEX']) + ?~ idx-content ~ + =/ m=mime !<(mime q.sage.u.idx-content) + ?: =(0 p.q.m) ~ + =/ lines=(list tape) + (split:git-transport (trip q.q.m) `@t`10) + %+ roll lines + |= [line=tape acc=(map path [hash:git-repo mtime=@t])] + ?: =(~ line) acc + :: parse: "mode hash mtime\tpath" + =/ tab=(unit @ud) (find "\09" line) + ?~ tab acc + =/ pax=path + (turn (split:git-transport (slag +(u.tab) line) '/') crip) + :: hash is chars 7-46 (after "100644 ") + =/ hex=tape (swag [7 40] line) + =/ h=(unit @ux) (rust hex parse-hash-sha-1:git-transport) + ?~ h acc + :: mtime is chars 48 to tab (after "100644 " + 40-char hash + " ") + =/ mt=@t (crip (swag [48 (sub u.tab 48)] line)) + (~(put by acc) pax [u.h mt]) +:: +:: +idx-hashes: extract just path->hash from index (drop mtime) +:: +++ idx-hashes + |= idx=(map path [hash:git-repo mtime=@t]) + ^- (map path hash:git-repo) + %- ~(run by idx) + |=([h=hash:git-repo m=@t] h) +:: +:: +git-add: walk working tree, hash blobs, update index +:: +:: For each file in tree/: check mtime against index cache. +:: If mtime matches, skip (unchanged). If different or new, +:: hash as git blob, create loose object, update index. +:: Returns updated index + new loose objects. +:: +++ git-add + |= [tree-ball=ball:tarball old-idx=(map path [hash:git-repo mtime=@t])] + ^- [idx=(map path [hash:git-repo mtime=@t]) new-loose=(map hash:git-repo object:git-obj)] + =| new-loose=(map hash:git-repo object:git-obj) + =/ new-idx=(map path [hash:git-repo mtime=@t]) old-idx + =/ working=(list [=path data=octs mtime=@t]) + (ball-to-files-mt tree-ball /) + :: prune deleted files: remove index entries not in working tree + =/ working-paths=(set path) + (silt (turn working |=([=path *] path))) + =. new-idx + %- ~(rep by new-idx) + |= [[p=path h=hash:git-repo m=@t] acc=(map path [hash:git-repo mtime=@t])] + ?. (~(has in working-paths) p) acc + (~(put by acc) p [h m]) + :: add/update files + |- + ?~ working [new-idx new-loose] + =/ file-mtime=@t mtime.i.working + :: fast path: if mtime matches index, skip hashing + =/ old-entry=(unit [hash:git-repo mtime=@t]) (~(get by new-idx) path.i.working) + ?: &(?=(^ old-entry) !=('' +.u.old-entry) =(+.u.old-entry file-mtime)) + $(working t.working) + :: mtime changed or new file — hash the blob + =/ data=octs data.i.working + =/ blob=object:git-obj [%blob p.data data] + =/ blob-hash=hash:git-repo (hash-obj:git-obj %sha-1 blob) + ?: &(?=(^ old-entry) =(-.u.old-entry blob-hash)) + :: hash same despite mtime change — update mtime only + $(working t.working, new-idx (~(put by new-idx) path.i.working [blob-hash file-mtime])) + :: new or changed — store blob, update index + %= $ + new-loose (~(put by new-loose) blob-hash blob) + new-idx (~(put by new-idx) path.i.working [blob-hash file-mtime]) + working t.working + == +:: +:: +git-add-paths: stage specific paths from working tree into index +:: +:: Only touches files whose paths are in the given set. +:: Adds/updates them if present in tree/, removes from index if not. +:: +++ git-add-paths + |= [tree-ball=ball:tarball old-idx=(map path [hash:git-repo mtime=@t]) paths=(set path)] + ^- [idx=(map path [hash:git-repo mtime=@t]) new-loose=(map hash:git-repo object:git-obj)] + =| new-loose=(map hash:git-repo object:git-obj) + =/ new-idx=(map path [hash:git-repo mtime=@t]) old-idx + =/ working=(list [=path data=octs mtime=@t]) + (ball-to-files-mt tree-ball /) + =/ working-map=(map path [octs @t]) + (malt (turn working |=([=path data=octs mtime=@t] [path data mtime]))) + =/ todo=(list path) ~(tap in paths) + |- + ?~ todo [new-idx new-loose] + =/ pax=path i.todo + =/ file-data=(unit [octs @t]) (~(get by working-map) pax) + ?~ file-data + :: file not in working tree — remove from index + $(todo t.todo, new-idx (~(del by new-idx) pax)) + :: file exists — hash and stage + =/ data=octs -.u.file-data + =/ file-mtime=@t +.u.file-data + =/ blob=object:git-obj [%blob p.data data] + =/ blob-hash=hash:git-repo (hash-obj:git-obj %sha-1 blob) + =/ old-entry=(unit [hash:git-repo mtime=@t]) (~(get by new-idx) pax) + ?: &(?=(^ old-entry) =(-.u.old-entry blob-hash)) + :: unchanged hash — update mtime + $(todo t.todo, new-idx (~(put by new-idx) pax [blob-hash file-mtime])) + %= $ + new-loose (~(put by new-loose) blob-hash blob) + new-idx (~(put by new-idx) pax [blob-hash file-mtime]) + todo t.todo + == +:: +:: +ball-to-files: flatten ball tree to list of [path octs] +:: +++ ball-to-files + |= [=ball:tarball here=path] + ^- (list [=path data=octs]) + =/ files=(list [=path data=octs]) + ?~ fil.ball ~ + %+ turn ~(tap by contents.u.fil.ball) + |= [name=@t =content:tarball] + =/ m=mime !<(mime q.sage.content) + [(snoc here name) q.m] + =/ sub-files=(list [=path data=octs]) + %- zing + %+ turn ~(tap by dir.ball) + |= [name=@t sub=ball:tarball] + (ball-to-files sub (snoc here name)) + (weld files sub-files) +:: +:: +ball-to-files-mt: flatten ball tree with mtime from metadata +:: +++ ball-to-files-mt + |= [=ball:tarball here=path] + ^- (list [=path data=octs mtime=@t]) + =/ files=(list [=path data=octs mtime=@t]) + ?~ fil.ball ~ + %+ turn ~(tap by contents.u.fil.ball) + |= [name=@t =content:tarball] + =/ m=mime !<(mime q.sage.content) + =/ mt=@t (fall (~(get by metadata.content) 'mtime') '') + [(snoc here name) q.m mt] + =/ sub-files=(list [=path data=octs mtime=@t]) + %- zing + %+ turn ~(tap by dir.ball) + |= [name=@t sub=ball:tarball] + (ball-to-files-mt sub (snoc here name)) + (weld files sub-files) +:: +:: +git-commit: build trees from index, create commit object +:: +:: Reads the index (path -> blob-hash), groups entries by directory, +:: builds tree objects bottom-up. Compares root tree hash to parent. +:: Returns ~ if nothing changed. Never touches tree/. +:: +++ git-commit + |= $: idx=(map path hash:git-repo) + parent-tree-hash=hash:git-repo + parent=hash:git-repo + req=json + == + ^- (unit [new-hash=hash:git-repo new-loose=(map hash:git-repo object:git-obj)]) + ?. ?=(%o -.req) !! + =/ get-str + |= [key=@t default=@t] + ^- @t + =/ v (~(get by p.req) key) + ?. ?=([~ %s *] v) default + p.u.v + =/ message=tape (trip (get-str 'message' 'commit')) + =/ author-name=tape (trip (get-str 'author_name' 'grubbery')) + =/ author-email=tape (trip (get-str 'author_email' 'grubbery@urbit.org')) + =/ date=@da + =/ d (~(get by p.req) 'date') + ?. ?=([~ %s *] d) *@da + (fall (slaw %da p.u.d) *@da) + :: build tree objects from index entries + =| new-loose=(map hash:git-repo object:git-obj) + =^ root-hash=hash:git-repo new-loose + (build-trees-from-index idx new-loose) + :: bail if root tree matches parent — nothing changed + ?: =(root-hash parent-tree-hash) ~ + :: create commit object + =/ com=commit:git-obj + :_ message + :* root-hash + ~[parent] + [author-name author-email] + [date [%.y ~h0]] + [author-name author-email] + [date [%.y ~h0]] + ~ + == + =/ com-obj=object:git-obj [%commit 0 com] + =/ raw=raw-object:git-obj (obj-to-raw:git-obj %sha-1 com-obj) + =. size.com-obj size.raw + =/ com-hash=hash:git-repo (hash-raw:git-obj %sha-1 raw) + =. new-loose (~(put by new-loose) com-hash com-obj) + `[com-hash new-loose] +:: +:: +build-trees-from-index: group index entries by directory, build trees +:: +:: Takes the flat index (path -> blob-hash) and reconstructs the +:: git tree hierarchy. Each directory becomes a tree object. +:: Returns root tree hash + all tree objects as loose. +:: +++ build-trees-from-index + |= [idx=(map path hash:git-repo) loose=(map hash:git-repo object:git-obj)] + ^- [hash:git-repo (map hash:git-repo object:git-obj)] + :: group entries by first path segment + =/ entries=(list [=path h=hash:git-repo]) ~(tap by idx) + (build-tree-at / entries loose) +:: +++ build-tree-at + |= [here=path entries=(list [=path h=hash:git-repo]) loose=(map hash:git-repo object:git-obj)] + ^- [hash:git-repo (map hash:git-repo object:git-obj)] + :: separate blobs (files in this dir) from subtrees (files in subdirs) + =/ depth=@ud (lent here) + =| tree-entries=(list tree-entry:git-obj) + =| subdirs=(map @ta (list [=path h=hash:git-repo])) + =/ todo=_entries entries + |- + ?^ todo + =/ rel=path (slag depth path.i.todo) + ?~ rel $(todo t.todo) + ?~ t.rel + :: file directly in this directory + %= $ + tree-entries [[i.rel 0x81a4 h.i.todo] tree-entries] + todo t.todo + == + :: file in a subdirectory — group by first segment + =/ dir-name=@ta i.rel + =/ existing=(list [=path h=hash:git-repo]) + (fall (~(get by subdirs) dir-name) ~) + %= $ + subdirs (~(put by subdirs) dir-name [i.todo existing]) + todo t.todo + == + :: recursively build each subdirectory tree + =/ sub-list=(list [@ta (list [=path h=hash:git-repo])]) + ~(tap by subdirs) + |- + ?^ sub-list + =^ sub-hash=hash:git-repo loose + (build-tree-at (snoc here -.i.sub-list) +.i.sub-list loose) + %= $ + tree-entries [[-.i.sub-list 0x4000 sub-hash] tree-entries] + sub-list t.sub-list + == + :: sort entries (git byte-string comparison) + =. tree-entries (sort tree-entries git-entry-lth) + :: create tree object + =/ tree=object:git-obj [%tree 0 tree-entries] + =/ raw=raw-object:git-obj (obj-to-raw:git-obj %sha-1 tree) + =. size.tree size.raw + =/ tree-hash=hash:git-repo (hash-raw:git-obj %sha-1 raw) + =. loose (~(put by loose) tree-hash tree) + [tree-hash loose] +:: +:: +:: +read-ref-file: read a single ref hash from refs// +:: +++ read-ref-file + |= [=ball:tarball dir=path name=@ta] + ^- (unit hash:git-repo) + =/ content=(unit content:tarball) + (~(get ba:tarball ball) [dir name]) + ?~ content ~ + =/ m=mime !<(mime q.sage.u.content) + ?: =(0 p.q.m) ~ + (rust (trip q.q.m) parse-hash-sha-1:git-transport) +:: +:: +read-hash-from-content: extract a hash from a mime content entry +:: +++ read-hash-from-content + |= =content:tarball + ^- (unit hash:git-repo) + =/ m=mime !<(mime q.sage.content) + ?: =(0 p.q.m) ~ + (rust (trip q.q.m) parse-hash-sha-1:git-transport) +:: +:: +get-sub-ball: walk into a ball by path +:: +++ get-sub-ball + |= [=ball:tarball =path] + ^- ball:tarball + ?~ path ball + =/ sub=(unit ball:tarball) (~(get by dir.ball) i.path) + ?~ sub [~ ~] + $(ball u.sub, path t.path) +:: +:: +read-refs-from-ns: read all refs from refs/ namespace +:: +++ read-refs-from-ns + |= =ball:tarball + ^- (axal ref:git-repo) + =/ result=(axal ref:git-repo) [~ ~] + =/ heads-sub=ball:tarball (get-sub-ball ball /refs/heads) + =. result + ?~ fil.heads-sub result + %+ roll ~(tap by contents.u.fil.heads-sub) + |= [[name=@t =content:tarball] r=(axal ref:git-repo)] + =/ h=(unit @ux) (read-hash-from-content content) + ?~ h r + (~(put of r) [~['refs' 'heads' name] u.h]) + =/ remote-sub=ball:tarball (get-sub-ball ball /refs/remotes/origin) + ?~ fil.remote-sub result + %+ roll ~(tap by contents.u.fil.remote-sub) + |= [[name=@t =content:tarball] r=(axal ref:git-repo)] + =/ h=(unit @ux) (read-hash-from-content content) + ?~ h r + (~(put of r) [~['refs' 'remotes' 'origin' name] u.h]) +:: +:: +load-packs: read all pack-N.pack + pack-N.idx pairs from packs/ directory +:: +:: Returns packs in order (pack-0 first). Empty list if no packs found. +:: +++ load-packs + |= =ball:tarball + ^- (list pack:git-pack) + :: get packs/ subdirectory from ball + =/ packs-ball=(unit ball:tarball) + (~(get by dir.ball) 'packs') + ?~ packs-ball ~ + :: find all .pack files — extract N from "pack-N.pack" + =/ packs-dir=ball:tarball u.packs-ball + ?~ fil.packs-dir ~ + =/ all-files=(list @ta) ~(tap in ~(key by contents.u.fil.packs-dir)) + =/ pack-nums=(list @ud) + %+ murn all-files + |= name=@ta + =/ t=tape (trip name) + ?. =("pack-" (scag 5 t)) ~ + ?. =(".pack" (slag (sub (lent t) 5) t)) ~ + =/ num-text=tape (slag 5 (scag (sub (lent t) 5) t)) + (rust num-text dem) + =/ sorted=(list @ud) (sort pack-nums lth) + :: load each pack+idx pair + %+ murn sorted + |= n=@ud + ^- (unit pack:git-pack) + =/ pack-name=@ta (crip "pack-{(a-co:co n)}.pack") + =/ idx-name=@ta (crip "pack-{(a-co:co n)}.idx") + =/ pack-content=(unit content:tarball) + (~(get ba:tarball packs-dir) [/ pack-name]) + =/ idx-content=(unit content:tarball) + (~(get ba:tarball packs-dir) [/ idx-name]) + ?~ pack-content ~ + ?~ idx-content ~ + =/ pack-mim=mime !<(mime q.sage.u.pack-content) + ?: =(0 p.q.pack-mim) ~ + =/ idx-mim=mime !<(mime q.sage.u.idx-content) + =/ idx-text=tape (trip q.q.idx-mim) + =/ idx=pack-index:git-pack + (rebuild-index (split:git-transport idx-text `@t`10)) + =/ sea=bays:bytestream (from-octs:bytestream q.pack-mim) + =/ entries=(list [key=hash:git-repo val=@ud]) + (tap:pack-on:git-pack idx) + `[%sha-1 (lent entries) idx p.q.pack-mim sea] +:: +:: +rebuild-index: parse index text lines into pack-index +:: +++ rebuild-index + |= lines=(list tape) + ^- pack-index:git-pack + =| idx=pack-index:git-pack + |- + ?~ lines idx + =/ line=tape i.lines + ?: =(~ line) $(lines t.lines) + =/ parts=(list tape) (split:git-transport line ' ') + ?. =((lent parts) 2) $(lines t.lines) + =/ hex=tape (snag 0 parts) + =/ off=tape (snag 1 parts) + =/ h=hash:git-repo (scan hex parse-hash-sha-1:git-transport) + =/ o=@ud (scan off dum:ag) + $(lines t.lines, idx (put:pack-on:git-pack idx h o)) +:: +:: +build-commit-log: walk parent chain, return JSON array +:: +++ build-commit-log + |= $: sto=_store:~(. git-repo *repository:git-repo) + start=hash:git-repo + max=@ud + labels=(map hash:git-repo (list @t)) + == + ^- json + =| acc=(list json) + =| count=@ud + =/ h=hash:git-repo start + |- + ?: (gte count max) [%a (flop acc)] + =/ com=(unit commit:git-repo) (get-commit:sto h) + ?~ com [%a (flop acc)] + =/ hex=@t (crip (print-hash-sha-1:git-transport h)) + =/ short=@t (crip (scag 7 (print-hash-sha-1:git-transport h))) + =/ msg=@t (crip (scag 72 (take-first-line message.u.com))) + =/ full-msg=@t (crip message.u.com) + =/ author-name=@t (crip name.author.u.com) + =/ author-email=@t (crip email.author.u.com) + =/ committer-name=@t (crip name.committer.u.com) + =/ committer-email=@t (crip email.committer.u.com) + =/ tree-hex=@t (crip (print-hash-sha-1:git-transport tree.u.com)) + =/ parent-hashes=(list json) + (turn parents.u.com |=(p=@ux s+(crip (print-hash-sha-1:git-transport p)))) + =/ refs-json=(list json) + (turn (fall (~(get by labels) h) ~) |=(r=@t s+r)) + =/ entry=json + %- pairs:enjs:format + :~ ['hash' s+hex] + ['short' s+short] + ['message' s+msg] + ['body' s+full-msg] + ['author' s+author-name] + ['authorEmail' s+author-email] + ['date' (time:enjs:format date.author-time.u.com)] + ['committer' s+committer-name] + ['committerEmail' s+committer-email] + ['commitDate' (time:enjs:format date.commit-time.u.com)] + ['tree' s+tree-hex] + ['parents' [%a parent-hashes]] + ['refs' [%a refs-json]] + == + ?~ parents.u.com [%a (flop [entry acc])] + $(h i.parents.u.com, count +(count), acc [entry acc]) +:: +++ take-first-line + |= t=tape + ^- tape + =/ idx=(unit @ud) (find "\0a" t) + ?~ idx t + (scag u.idx t) +:: +:: +build-branch-list: list branch names from refs/heads/ +:: +:: +build-ref-labels: build hash -> label list map from all refs +:: +++ build-ref-labels + |= =ball:tarball + ^- (map hash:git-repo (list @t)) + =| result=(map hash:git-repo (list @t)) + :: helper: add a label to the map for a given hash + =* add-label + |= [r=(map hash:git-repo (list @t)) h=hash:git-repo label=@t] + (~(put by r) h (snoc (fall (~(get by r) h) ~) label)) + :: add HEAD + =/ head-content=(unit content:tarball) + (~(get ba:tarball ball) [/ %'HEAD']) + =? result ?=(^ head-content) + =/ h=(unit @ux) + (rust (trip q.q:!<(mime q.sage.u.head-content)) parse-hash-sha-1:git-transport) + ?~ h result + (add-label result u.h 'HEAD') + :: add local branches (refs/heads/*) + =/ heads=ball:tarball (get-sub-ball ball /refs/heads) + =? result ?=(^ fil.heads) + =/ entries=(list [@t content:tarball]) ~(tap by contents.u.fil.heads) + |- + ?~ entries result + =/ h=(unit @ux) (read-hash-from-content +.i.entries) + =? result ?=(^ h) + (add-label result u.h (crip "refs/heads/{(trip -.i.entries)}")) + $(entries t.entries) + :: add remote tracking (refs/remotes/origin/*) + =/ remotes=ball:tarball (get-sub-ball ball /refs/remotes/origin) + =? result ?=(^ fil.remotes) + =/ entries=(list [@t content:tarball]) ~(tap by contents.u.fil.remotes) + |- + ?~ entries result + =/ h=(unit @ux) (read-hash-from-content +.i.entries) + =? result ?=(^ h) + (add-label result u.h (crip "refs/remotes/origin/{(trip -.i.entries)}")) + $(entries t.entries) + result +:: +:: +write-ui-outputs: build and write commits, branches, current, status to ball +:: +:: Expects tree/ to already be set in ball before calling. +:: idx is the current index (may differ from HEAD for staged changes). +:: +++ write-ui-outputs + |= $: =ball:tarball + sto=_store:~(. git-repo *repository:git-repo) + head-hash=hash:git-repo + parsed-head=(unit [branch=(unit @t) hash=@ux]) + idx=(map path [hash:git-repo mtime=@t]) + head-tree-hash=hash:git-repo + == + ^- ball:tarball + =/ branch-name=@t (fall ?~(parsed-head ~ branch.u.parsed-head) '') + =/ log-start=hash:git-repo + ?~ parsed-head head-hash + ?~ branch.u.parsed-head head-hash + (fall (read-ref-file ball /refs/heads (crip (trip u.branch.u.parsed-head))) head-hash) + =/ ref-labels=(map hash:git-repo (list @t)) (build-ref-labels ball) + =/ commits=json (build-commit-log sto log-start 50 ref-labels) + =/ branches=json (build-branch-list ball) + =/ hex=@t (crip (print-hash-sha-1:git-transport head-hash)) + =/ current=json (build-current ball hex branch-name) + :: build status: compare current index against HEAD commit tree + =/ get-tree=$-(@ux (unit tree-dir:git-repo)) + |=(h=@ux (get-tree:sto h)) + =/ head-tree-idx=(map path hash:git-repo) + (idx-hashes (build-index-from-tree get-tree head-tree-hash)) + =/ status=json (build-status ball idx head-tree-idx) + =. ball + (~(put ba:tarball ball) [/ui %'commits.json'] [~ [/ %json] !>(commits)]) + =. ball + (~(put ba:tarball ball) [/ui %'branches.json'] [~ [/ %json] !>(branches)]) + =. ball + (~(put ba:tarball ball) [/ui %'current.json'] [~ [/ %json] !>(current)]) + =. ball + (~(put ba:tarball ball) [/ui %'status.json'] [~ [/ %json] !>(status)]) + ball +:: +:: +build-current: build current.json with HEAD, branch, and remote tracking info +:: +++ build-current + |= [=ball:tarball head-hex=@t branch=@t] + ^- json + =/ remote-hash=(unit hash:git-repo) + ?: =('' branch) ~ + (read-ref-file ball /refs/remotes/origin (crip (trip branch))) + =/ remote-hex=@t + ?~ remote-hash '' + (crip (print-hash-sha-1:git-transport u.remote-hash)) + %- pairs:enjs:format + :~ ['hash' s+head-hex] + ['branch' s+branch] + ['remote' s+remote-hex] + == +:: +:: +build-branch-list: list branch names from refs/heads/ +:: +++ build-branch-list + |= =ball:tarball + ^- json + =/ heads=ball:tarball (get-sub-ball ball /refs/heads) + ?~ fil.heads [%a ~] + [%a (turn ~(tap in ~(key by contents.u.fil.heads)) |=(n=@t s+n))] +:: +:: +build-status: compare working tree vs index vs HEAD tree +:: +:: Staged = files in INDEX that differ from HEAD tree. +:: Unstaged = files in working tree that differ from INDEX (tracked). +:: Untracked = files in working tree not in INDEX at all. +:: +++ build-status + |= $: =ball:tarball + idx=(map path [hash:git-repo mtime=@t]) + head-tree-idx=(map path hash:git-repo) + == + ^- json + :: staged: INDEX vs HEAD tree + =/ idx-h=(map path hash:git-repo) (idx-hashes idx) + =/ staged=(list json) + =/ all-paths=(set path) + (~(uni in ~(key by idx-h)) ~(key by head-tree-idx)) + %+ murn ~(tap in all-paths) + |= =path + ^- (unit json) + =/ in-idx=(unit hash:git-repo) (~(get by idx-h) path) + =/ in-head=(unit hash:git-repo) (~(get by head-tree-idx) path) + ?: =(in-idx in-head) ~ + =/ status=@t + ?~ in-head 'new' + ?~ in-idx 'deleted' + 'modified' + :- ~ + %- pairs:enjs:format + :~ ['path' s+(crip (zing (join "/" (turn path trip))))] + ['status' s+status] + == + :: working tree comparison + =/ tree-ball=ball:tarball + (fall (~(get by dir.ball) 'tree') [~ ~]) + =/ working=(list [=path data=octs mtime=@t]) + (ball-to-files-mt tree-ball /) + =/ working-hashes=(map path hash:git-repo) + %- malt + %+ turn working + |= [=path data=octs mtime=@t] + =/ blob=object:git-obj [%blob p.data data] + [path (hash-obj:git-obj %sha-1 blob)] + :: unstaged: in INDEX and working tree, but different + :: untracked: in working tree but not in INDEX + =/ all-work-paths=(set path) + (~(uni in ~(key by working-hashes)) ~(key by idx-h)) + =| unstaged=(list json) + =| untracked=(list json) + =/ todo=(list path) ~(tap in all-work-paths) + |- + ?^ todo + =/ =path i.todo + =/ in-work=(unit hash:git-repo) (~(get by working-hashes) path) + =/ in-idx=(unit hash:git-repo) (~(get by idx-h) path) + ?: =(in-work in-idx) $(todo t.todo) + =/ pax=@t (crip (zing (join "/" (turn path trip)))) + ?~ in-idx + :: not in INDEX — untracked + %= $ + todo t.todo + untracked :_(untracked (pairs:enjs:format ~[['path' s+pax] ['status' s+'new']])) + == + =/ status=@t + ?~ in-work 'deleted' + 'modified' + %= $ + todo t.todo + unstaged :_(unstaged (pairs:enjs:format ~[['path' s+pax] ['status' s+status]])) + == + :: ahead/behind: count commits between local and remote + =/ phead=(unit [branch=(unit @t) hash=@ux]) (parse-head ball) + =/ branch=@t (fall ?~(phead ~ branch.u.phead) '') + =/ local-hash=(unit hash:git-repo) + ?~(phead ~ `hash.u.phead) + =/ remote-hash=(unit hash:git-repo) + ?: =('' branch) ~ + (read-ref-file ball /refs/remotes/origin (crip (trip branch))) + =/ ahead=@ud + ?~ local-hash 0 + ?~ remote-hash 0 + (count-ahead ball u.local-hash u.remote-hash) + =/ behind=@ud + ?~ local-hash 0 + ?~ remote-hash 0 + (count-ahead ball u.remote-hash u.local-hash) + %- pairs:enjs:format + :~ ['staged' [%a staged]] + ['unstaged' [%a unstaged]] + ['untracked' [%a untracked]] + ['ahead' (numb:enjs:format ahead)] + ['behind' (numb:enjs:format behind)] + ['clean' b+&(=(~ staged) =(~ unstaged) =(~ untracked))] + == +:: +:: +count-ahead: count commits reachable from A but not from B +:: +:: Walk parent chain from A, stop when we hit B or run out. +:: Simple linear walk — doesn't handle merge commits fully, +:: but correct for linear histories. +:: +++ count-ahead + |= [=ball:tarball from=hash:git-repo to=hash:git-repo] + ^- @ud + =/ loose=(map hash:git-repo object:git-obj) + (read-loose-from-ball ball) + =| count=@ud + =/ h=hash:git-repo from + |- + ?: =(h to) count + ?: =(h 0x0) count + =/ obj=(unit object:git-obj) (~(get by loose) h) + ?~ obj count + ?. ?=(%commit -.u.obj) count + =. count +(count) + ?~ parents.commit.u.obj count + $(h i.parents.commit.u.obj) +:: +:: +files-to-ball: convert checkout output to ball tree +:: +++ files-to-ball + |= files=(list [=path data=octs]) + ^- ball:tarball + =| tree=ball:tarball + |- + ?~ files tree + =/ file-path=path path.i.files + ?~ file-path $(files t.files) + =/ name=@ta (rear file-path) + =/ dir=path (snip `path`file-path) + =/ content-type=path (guess-mime name) + =/ =mime [content-type data.i.files] + =/ =content:tarball [*metadata:tarball [/ %mime] !>(mime)] + =/ segs=(list @t) + ?~ dir ~[name] + (weld dir ~[name]) + =. tree (insert-file tree segs content) + $(files t.files) +:: +++ insert-file + |= [tree=ball:tarball segs=(list @ta) =content:tarball] + ^- ball:tarball + ?~ segs tree + ?~ t.segs + =/ =lump:tarball + (fall fil.tree [*metadata:tarball ~ ~]) + =. contents.lump (~(put by contents.lump) i.segs content) + tree(fil `lump) + =/ kid=ball:tarball + (fall (~(get by dir.tree) i.segs) [~ ~]) + =. kid $(tree kid, segs t.segs) + tree(dir (~(put by dir.tree) i.segs kid)) +:: +++ guess-mime + |= filename=@t + ^- path + =/ ext=@t + =/ =tape (trip filename) + =/ idx=(unit @ud) (find "." (flop tape)) + ?~ idx '' + (crip (slag (sub (lent tape) u.idx) tape)) + ?+ ext /application/octet-stream + %hoon /text/plain + %txt /text/plain + %md /text/plain + %json /application/json + %html /text/html + %css /text/css + %js /application/javascript + %ts /text/plain + %py /text/plain + %rs /text/plain + %c /text/plain + %h /text/plain + %go /text/plain + %toml /text/plain + %yaml /text/plain + %yml /text/plain + %xml /text/xml + %svg /image/'svg+xml' + %sh /text/plain + %nix /text/plain + == +:: +:: +git-entry-lth: git tree entry sort comparator +:: +:: Git sorts entries by name bytes, appending "/" for directories. +:: +++ git-entry-lth + |= [a=tree-entry:git-obj b=tree-entry:git-obj] + ^- ? + =/ an=tape (weld (trip name.a) ?:(=(mode.a 0x4000) "/" "")) + =/ bn=tape (weld (trip name.b) ?:(=(mode.b 0x4000) "/" "")) + (tape-lth an bn) +:: +++ tape-lth + |= [a=tape b=tape] + ^- ? + ?~ a ?=(^ b) + ?~ b %.n + ?: =(i.a i.b) $(a t.a, b t.b) + (lth `@`i.a `@`i.b) +-- diff --git a/desk/gub/nex/git/repo.hoon b/desk/gub/nex/git/repo.hoon new file mode 100644 index 0000000..c50141e --- /dev/null +++ b/desk/gub/nex/git/repo.hoon @@ -0,0 +1,2101 @@ +:: git/repo nexus: clone a public repo via git smart HTTP +:: +:: Config: /config.json with fields: +:: repo: owner/repo (e.g. "urbit/urbit") +:: ref: branch, tag, or commit sha (e.g. "main") +:: +:: Git data lives in the /data sub-nexus. On clone, we write +:: pack + index + refs + HEAD into /data, then reload it. +:: The data nexus's on-load atomically checks out the tree. +:: +:: Poke sync.sig to trigger a re-fetch. +:: Poke checkout.sig with a commit hash to checkout. +:: +/< git-bundle /lib/git/bundle.hoon +/< git-obj /lib/git/object.hoon +/< git-pack /lib/git/pack.hoon +/< git-repo /lib/git/repository.hoon +/< git-transport /lib/git/transport.hoon +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + =/ default-config=json + %- pairs:enjs:format + :~ ['repo' s+''] + ['ref' s+''] + ['token' s+''] + == + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'config.json'] %.n [~ [/ %json] !>(default-config)]] + [%fall %& [/actions %'sync.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'switch.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'checkout.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'diff.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'add.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'commit.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'import.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'branch.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'delete-branch.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'stash.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'stash-pop.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/actions %'push.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %| /ui [~ ~] [~ ~] empty-dir:loader] + [%fall %& [/ui %'status.json'] %.n [~ [/ %json] !>((pairs:enjs:format ~[['status' s+'idle']]))]] + [%fall %& [/ui %'commit.json'] %.n [~ [/ %json] !>([%a ~])]] + [%over %& [/ %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html (repo-page '' '' '' ~ ~ [%a ~] [%o ~] clean-status))))]] + [%fall %| /data [~ ~] [~ ~] [`[~ `[/git %data] ~] ~]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /actions/branch.sig: create a new branch at HEAD + :: + [[%actions ~] %'branch.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo branch: failed") + |- + ;< poke-sage=sage:tarball bind:m take-poke:io + =/ branch=@t (of-wain:format !<(wain q.poke-sage)) + ?: =('' branch) + ~& >>> "%git/repo: branch requires a name" + $ + :: resolve current HEAD to a commit hash + ;< head-hash=@t bind:m resolve-head + ?: =('' head-hash) + ~& >>> "%git/repo: no HEAD to branch from" + $ + :: check branch doesn't already exist + ;< exists-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/refs/heads (crip (trip branch))]) + ;< exists=? bind:m (peek-exists:io exists-rd) + ?: exists + ~& >>> ["%git/repo: branch already exists:" branch] + $ + :: create refs/heads/ pointing to HEAD + =/ ref-octs=octs (as-octt:bytestream (trip head-hash)) + ;< ref-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/refs/heads (crip (trip branch))]) + ;< ~ bind:m (over:io ref-rd [[/ %mime] !>([/text/plain ref-octs])]) + ~& >> ["%git/repo: created branch" branch "at" head-hash] + :: reload data to rebuild branch list + ;< data-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io data-rd) + $ + :: + :: /actions/delete-branch.sig: delete a local branch + :: + [[%actions ~] %'delete-branch.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo delete-branch: failed") + |- + ;< poke-sage=sage:tarball bind:m take-poke:io + =/ branch=@t (of-wain:format !<(wain q.poke-sage)) + ?: =('' branch) + ~& >>> "%git/repo: delete-branch requires a name" + $ + :: read current branch from HEAD to prevent deleting active branch + ;< current-branch=@t bind:m read-head-branch + ?: =(branch current-branch) + ~& >>> ["%git/repo: cannot delete current branch:" branch] + $ + :: delete refs/heads/ + ;< del-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/refs/heads (crip (trip branch))]) + ;< exists=? bind:m (peek-exists:io del-rd) + ?. exists + ~& >>> ["%git/repo: branch not found:" branch] + $ + ;< ~ bind:m (drop:io /delete-branch del-rd) + ~& >> ["%git/repo: deleted branch" branch] + :: reload data to rebuild branch list + ;< data-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io data-rd) + $ + :: + :: /actions/stash.sig: stash dirty index and reset to HEAD + :: + [[%actions ~] %'stash.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo stash: failed") + |- + ;< * bind:m take-poke:io + ~& >> "%git/repo: stashing" + :: write stash-request.sig into data ball, reload + ;< req-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data %'stash-request.sig']) + ;< ~ bind:m (write-repo-file req-rd [[/ %sig] !>(~)]) + ;< data-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io data-rd) + $ + :: + :: /actions/stash-pop.sig: pop the most recent stash + :: + [[%actions ~] %'stash-pop.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo stash-pop: failed") + |- + ;< * bind:m take-poke:io + ~& >> "%git/repo: popping stash" + :: write stash-pop-request.sig into data ball, reload + ;< req-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data %'stash-pop-request.sig']) + ;< ~ bind:m (write-repo-file req-rd [[/ %sig] !>(~)]) + ;< data-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io data-rd) + $ + :: + :: /actions/import.sig: bundle import — poke with octs to parse + :: + [[%actions ~] %'import.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo import: failed") + ~& >> "%git/repo: bundle import ready" + |- + ;< poke=* bind:m take-poke:io + ~& >> "%git/repo: import poke received" + =/ bun=bundle:git-bundle + (read:git-bundle (from-octs:bytestream ;;(octs poke))) + =/ repo=repository:git-repo + (~(clone-from-bundle git-repo *repository:git-repo) bun) + ~& >> ["%git/repo: bundle parsed" count.pack.bun "objects"] + ~& >> ["%git/repo: refs" (turn refs.header.bun |=([p=* q=*] p))] + $ + :: /page.html: watches config + repo data, re-renders + :: + [~ %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%git/repo /page: failed") + ;< here=rail:tarball bind:m get-here-abs:io + =/ api=@t + (crip "/grubbery/api/file{(spud path.here)}") + ;< cfg-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& / %'config.json']) + ;< init-cfg=view:nexus bind:m (keep:io /cfg cfg-rd `[/ %json]) + ;< tree-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%| /data/tree]) + ;< init-tree=view:nexus bind:m (keep:io /tree tree-rd ~) + ;< status-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /ui %'status.json']) + ;< init-status=view:nexus bind:m (keep:io /status status-rd `[/ %json]) + ;< branches-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/ui %'branches.json']) + ;< init-branches=view:nexus bind:m (keep:io /branches branches-rd `[/ %json]) + ;< commits-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/ui %'commits.json']) + ;< init-commits=view:nexus bind:m (keep:io /commits commits-rd `[/ %json]) + ;< current-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/ui %'current.json']) + ;< init-current=view:nexus bind:m (keep:io /current current-rd `[/ %json]) + ;< status-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/ui %'status.json']) + ;< init-status=view:nexus bind:m (keep:io /status status-rd `[/ %json]) + =/ cfg=repo-config (view-to-config init-cfg) + =/ files=(list @t) (view-to-files init-tree) + =/ branches=(list @t) (view-to-branches init-branches) + =/ commits=json (view-to-json init-commits) + =/ current=json (view-to-json init-current) + =/ status=json (view-to-json init-status) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (repo-page api repo.cfg ref.cfg branches files commits current status))))) + |- + ;< evt=page-event bind:m take-page-event + ?- -.evt + %fell $ + %news + =? cfg =(/cfg wire.evt) (view-to-config view.evt) + =? files =(/tree wire.evt) (view-to-files view.evt) + =? branches =(/branches wire.evt) (view-to-branches view.evt) + =? commits =(/commits wire.evt) (view-to-json view.evt) + =? current =(/current wire.evt) (view-to-json view.evt) + =? status =(/status wire.evt) (view-to-json view.evt) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (repo-page api repo.cfg ref.cfg branches files commits current status))))) + $ + == + :: /actions/checkout.sig: checkout a specific commit by hash + :: + [[%actions ~] %'checkout.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo checkout: failed") + |- + ;< =sage:tarball bind:m take-poke:io + =/ hash-text=@t (of-wain:format !<(wain q.sage)) + :: block checkout if working tree is dirty + ;< status-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/ui %'status.json']) + ;< status-seen=seen:nexus bind:m (peek:io status-rd `[/ %json]) + =/ is-clean=? + ?. ?=([%.y *] status-seen) %.y + =/ status-json=json (view-to-json p.status-seen) + ?. ?=(%o -.status-json) %.y + =/ cl (~(get by p.status-json) 'clean') + ?+ cl %.n + [~ %b %.y] %.y + == + ?. is-clean + ~& >>> "%git/repo: checkout blocked — working tree is dirty" + ~& >>> "commit or reset your changes first" + $ + ~& >> ["%git/repo: checkout poke" hash-text] + ;< ~ bind:m (set-status 'syncing') + :: write new HEAD and reload repo + ;< ~ bind:m (write-head hash-text) + ;< data-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io data-rd) + ;< ~ bind:m (set-status 'idle') + $ + :: /actions/switch.sig: switch branch locally + :: + :: poke with branch name (text). Reads refs/heads/, + :: updates HEAD + ref, reloads data nexus for checkout. + :: + [[%actions ~] %'switch.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo switch: failed") + |- + ;< =sage:tarball bind:m take-poke:io + =/ branch=@t (text-from-sage sage) + ?: =('' branch) + ~& >>> "%git/repo: switch requires a branch name" + $ + :: block if dirty + ;< status-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/ui %'status.json']) + ;< status-seen=seen:nexus bind:m (peek:io status-rd `[/ %json]) + =/ is-clean=? + ?. ?=([%.y *] status-seen) %.y + =/ status-json=json (view-to-json p.status-seen) + ?. ?=(%o -.status-json) %.y + =/ cl (~(get by p.status-json) 'clean') + ?+ cl %.n + [~ %b %.y] %.y + == + ?. is-clean + ~& >>> "%git/repo: switch blocked — working tree is dirty" + $ + :: resolve branch ref + ;< ref-hash=@t bind:m (resolve-ref branch) + ?: =('' ref-hash) + ~& >>> ["%git/repo: branch not found:" branch] + $ + ~& >> ["%git/repo: switching to" branch] + ;< ~ bind:m (set-status 'syncing') + ;< ~ bind:m (write-head (crip "ref: refs/heads/{(trip branch)}")) + ;< data-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io data-rd) + ;< ~ bind:m (set-status 'idle') + $ + :: /actions/diff.sig: compute diff for a commit + :: + [[%actions ~] %'diff.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo diff: failed") + |- + ;< =sage:tarball bind:m take-poke:io + =/ hash-text=@t (of-wain:format !<(wain q.sage)) + ~& >> ["%git/repo: diff for" hash-text] + =/ target-hash=(unit @ux) + (rust (trip hash-text) parse-hash-sha-1:git-transport) + ?~ target-hash + ~& >>> "%git/repo: invalid commit hash" + $ + ;< repo=repository:git-repo bind:m load-repo-from-ns + =/ sto store:~(. git-repo repo) + =/ com=(unit commit:git-repo) (get-commit:sto u.target-hash) + ?~ com + ~& >>> "%git/repo: commit not found" + $ + :: get parent tree for diff (~ for first commit) + =/ parent-tree=(unit @ux) + ?~ parents.u.com ~ + =/ par=(unit commit:git-repo) (get-commit:sto i.parents.u.com) + ?~ par ~ + `tree.u.par + =/ get-tree=$-(@ux (unit tree-dir:git-repo)) + |=(h=@ux (get-tree:sto h)) + =/ get-blob=$-(@ux (unit octs)) + |=(h=@ux (get-blob:sto h)) + =/ changes=(list tree-change:git-transport) + ?~ parent-tree + :: first commit: all files are additions + =/ top-tree=(unit tree-dir:git-repo) (get-tree tree.u.com) + ?~ top-tree ~ + %+ turn (all-blobs:git-transport get-tree / u.top-tree) + |=([p=path h=@ux] `tree-change:git-transport`[%add p h]) + (diff-trees:git-transport get-tree u.parent-tree tree.u.com) + ~& >> ["%git/repo: diff" (lent changes) "files changed"] + =/ result=json + %- pairs:enjs:format + :~ ['hash' s+hash-text] + ['short' s+(crip (scag 7 (trip hash-text)))] + ['message' s+(crip message.u.com)] + ['author' s+(crip name.author.u.com)] + ['files' (build-diff-json get-blob changes)] + == + ;< commit-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%& /ui %'commit.json']) + ;< ~ bind:m (over:io commit-rd [[/ %json] !>(result)]) + $ + :: /actions/add.sig: stage files into index + :: + :: poke with json: {"all": true} or {"paths": ["/path/one", ...]} + :: empty poke = add all + :: + [[%actions ~] %'add.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo add: failed") + |- + ;< =sage:tarball bind:m take-poke:io + :: parse poke — json with paths/all, or empty sig = add all + =/ req=json + =/ j (mole |.(!<(json q.sage))) + ?~ j (pairs:enjs:format ~[['all' b+%.y]]) + ?. ?=(%o -.u.j) (pairs:enjs:format ~[['all' b+%.y]]) + u.j + ~& >> "%git/repo: staging files" + :: write add-request.json into data nexus + ;< req-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%& /data %'add-request.json']) + ;< ~ bind:m (write-repo-file req-rd [[/ %json] !>(req)]) + :: reload data to process add + ;< data-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io data-rd) + ~& >> "%git/repo: files staged" + $ + :: /actions/commit.sig: create a local git commit from current tree state + :: + [[%actions ~] %'commit.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo commit: failed") + |- + ;< =sage:tarball bind:m take-poke:io + =/ message=@t (of-wain:format !<(wain q.sage)) + ?: =('' message) + ~& >>> "%git/repo commit: empty message" + $ + ~& >> ["%git/repo: committing:" message] + ;< cfg=repo-config bind:m read-config + :: build commit-request.json + ;< now=@da bind:m get-time:io + =/ req=json + %- pairs:enjs:format + :~ ['message' s+message] + ['author_name' s+'grubbery'] + ['author_email' s+'grubbery@urbit.org'] + ['date' s+(scot %da now)] + == + :: write commit-request.json into data nexus + ;< req-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%& /data %'commit-request.json']) + ;< ~ bind:m (write-repo-file req-rd [[/ %json] !>(req)]) + :: reload data to trigger commit creation + ;< data-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io data-rd) + ~& >> "%git/repo: commit created" + $ + :: /actions/sync.sig: clone or re-checkout + :: + [[%actions ~] %'sync.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo sync: failed") + ~& >> "%git/repo: sync fiber started, waiting for poke" + ;< * bind:m take-poke:io + |- + ;< cfg=repo-config bind:m read-config + ?: =('' repo.cfg) + ~& >>> "%git/repo: no repo configured" + ;< * bind:m take-poke:io + $ + ;< ~ bind:m (set-status 'syncing') + :: discover remote refs + ;< disc=discovery:git-transport bind:m + (fetch-discovery repo.cfg) + ~& >> ["%git/repo: found" (lent refs.disc) "refs"] + =? ref.cfg =('' ref.cfg) + (fall (default-branch:git-transport caps.disc) 'main') + ;< sync-cfg-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& / %'config.json']) + ;< ~ bind:m + (over:io sync-cfg-rd [[/ %json] !>((pairs:enjs:format ~[['repo' s+repo.cfg] ['ref' s+ref.cfg] ['token' s+token.cfg]]))]) + :: check if we already have packs (incremental vs full clone) + ;< repo-result=(unit repository:git-repo) bind:m load-repo-maybe + ?^ repo-result + :: === incremental fetch === + ~& >> "%git/repo: incremental fetch..." + =/ repo=repository:git-repo u.repo-result + :: collect all known hashes as haves + =/ have-hashes=(list @ux) + %+ roll archive.object-store.repo + |= [=pack:git-pack acc=(list @ux)] + (weld (turn (tap:pack-on:git-pack index.pack) head) acc) + =/ have-set=(set @ux) (silt have-hashes) + :: compute wants: remote ref hashes we don't have + =/ want-hashes=(list @ux) + %+ murn refs.disc + |= r=git-ref:git-transport + ?: (~(has in have-set) hash.r) ~ + `hash.r + ?~ want-hashes + ~& >> "%git/repo: already up to date" + ;< ~ bind:m (set-status 'idle') + ;< * bind:m take-poke:io + $ + ~& >> ["%git/repo: fetching" (lent want-hashes) "new objects"] + ;< pack-body=octs bind:m + (fetch-pack repo.cfg (build-want:git-transport want-hashes ~['side-band-64k' 'ofs-delta'] ~ have-hashes)) + ~& >> ["%git/repo: pack received" p.pack-body "bytes"] + =/ new-pack-data=octs + (extract-pack:git-transport pack-body %.y) + ~& >> ["%git/repo: extracted" p.new-pack-data "bytes"] + ?: =(0 p.new-pack-data) + ~& >> "%git/repo: empty pack, already up to date" + ;< ~ bind:m (update-refs disc ref.cfg) + ;< sync-data-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io sync-data-rd) + ;< ~ bind:m (set-status 'idle') + ;< * bind:m take-poke:io + $ + :: parse new pack to build its index + =/ new-pack=pack:git-pack + (read:git-pack (from-octs:bytestream new-pack-data)) + ~& >> ["%git/repo: unpacked" count.new-pack "new objects"] + :: build index text for new pack + =/ new-entries=(list [key=hash:git-repo val=@ud]) + (tap:pack-on:git-pack index.new-pack) + =/ idx-text=tape + %- zing + %+ turn new-entries + |= [key=hash:git-repo val=@ud] + "{(print-hash-sha-1:git-transport key)} {(a-co:co val)}\0a" + :: next pack number = count of existing packs + =/ pack-num=@ud (lent archive.object-store.repo) + :: extract branch refs + =/ branch-refs=(list [name=@t hash=hash:git-repo]) + %+ murn refs.disc + |= r=git-ref:git-transport + ?. =(`(list @t)`~['refs' 'heads'] (scag 2 refname.r)) ~ + =/ branch-name=@t + (crip (join:git-transport '/' (turn (slag 2 refname.r) trip))) + `[branch-name hash.r] + :: resolve HEAD + =/ active-ref=@t ?:(=('' ref.cfg) 'main' ref.cfg) + =/ head-hash=@ux + =/ match=(unit hash:git-repo) + %- ~(rep by (malt branch-refs)) + |= [[name=@t =hash:git-repo] found=(unit hash:git-repo)] + ?^ found found + ?: =(name active-ref) `hash + ~ + (fall match 0x0) + =/ head-text=@t (crip (print-hash-sha-1:git-transport head-hash)) + ~& >> ["%git/repo: saving as pack-" pack-num] + ;< ~ bind:m (save-repo new-pack-data idx-text pack-num branch-refs head-text active-ref) + ;< sync-data-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io sync-data-rd) + ~& >> "%git/repo: incremental fetch complete" + ;< ~ bind:m (set-status 'idle') + ;< * bind:m take-poke:io + $ + :: === full clone === + ;< ~ bind:m (do-full-clone cfg disc) + ;< * bind:m take-poke:io + $ + :: /actions/push.sig: push files to GitHub via REST API + :: + [[%actions ~] %'push.sig'] + ;< ~ bind:m (rise-wait:io prod "%git/repo push: failed") + |- + ;< * bind:m take-poke:io + ;< cfg=repo-config bind:m read-config + ?: =('' repo.cfg) + ~& >>> "%git/repo push: no repo configured" + $ + ?: =('' token.cfg) + ~& >>> "%git/repo push: no token configured" + $ + ;< ~ bind:m (set-status 'pushing') + =/ branch=@t ?:(=('' ref.cfg) 'main' ref.cfg) + :: load repo from namespace + ;< repo=repository:git-repo bind:m load-repo-from-ns + =/ sto store:~(. git-repo repo) + :: read local and remote refs + ;< local-ref=@t bind:m (resolve-ref ref.cfg) + ;< remote-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/refs/remotes/origin (crip (trip branch))]) + ;< remote-seen=seen:nexus bind:m (peek:io remote-rd `[/ %mime]) + =/ remote-ref=@t + ?. ?=([%& %file *] remote-seen) '' + =/ mim=mime !<(mime q.sage.p.remote-seen) + (crip (trip q.q.mim)) + ?: =(local-ref remote-ref) + ~& >> "%git/repo push: nothing to push" + ;< ~ bind:m (set-status 'idle') + $ + :: parse hashes + =/ local-hash=(unit @ux) + (rust (trip local-ref) parse-hash-sha-1:git-transport) + ?~ local-hash + ~& >>> "%git/repo push: invalid local ref" + ;< ~ bind:m (set-status 'idle') + $ + =/ remote-hash=@ux + ?: =('' remote-ref) 0x0 + (fall (rust (trip remote-ref) parse-hash-sha-1:git-transport) 0x0) + :: walk commits from local back to remote, collect chain + =/ chain=(list hash:git-repo) + =| acc=(list hash:git-repo) + =/ h=hash:git-repo u.local-hash + |- + ?: =(h remote-hash) acc + ?: =(h 0x0) acc + =/ com=(unit commit:git-repo) (get-commit:sto h) + ?~ com acc + =/ new-acc=(list hash:git-repo) [h acc] + ?~ parents.u.com new-acc + $(h i.parents.u.com, acc new-acc) + ?~ chain + ~& >> "%git/repo push: no new commits" + ;< ~ bind:m (set-status 'idle') + $ + ~& >> ["%git/repo push:" (lent chain) "commits to push"] + :: push each commit via GitHub API + =/ api=@t 'https://api.github.com' + =/ headers=(list [key=@t value=@t]) (gh-headers token.cfg) + =/ parent-sha=@t remote-ref + =/ get-tree=$-(@ux (unit tree-dir:git-repo)) + |=(h=@ux (get-tree:sto h)) + =/ get-blob=$-(@ux (unit octs)) + |=(h=@ux (get-blob:sto h)) + =/ remaining=(list hash:git-repo) chain + |- + ?~ remaining + :: all commits pushed — update remote ref on GitHub + =/ update-url=@t + (cat 3 api (cat 3 '/repos/' (cat 3 repo.cfg (cat 3 '/git/refs/heads/' branch)))) + =/ update-body=json + (pairs:enjs:format ~[['sha' s+parent-sha] ['force' b+%.n]]) + ;< * bind:m (gh-patch update-url headers update-body) + ~& >> ["%git/repo push: updated" branch "to" (crip (scag 7 (trip parent-sha)))] + :: update local remote tracking ref + ;< track-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/refs/remotes/origin (crip (trip branch))]) + =/ track-octs=octs (as-octt:bytestream (trip parent-sha)) + ;< ~ bind:m (write-repo-file track-rd [[/ %mime] !>([/text/plain track-octs])]) + :: reload data to refresh UI + ;< data-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io data-rd) + ;< ~ bind:m (set-status 'idle') + ~& >> "%git/repo push: done" + ^$ + :: push current commit + =/ commit-hash=hash:git-repo i.remaining + =/ com=(unit commit:git-repo) (get-commit:sto commit-hash) + ?~ com + ~& >>> ["%git/repo push: commit not found" commit-hash] + ;< ~ bind:m (set-status 'idle') + ^$ + ~& >> ["%git/repo push: pushing" (crip (scag 7 (print-hash-sha-1:git-transport commit-hash)))] + :: get tree changes: diff parent tree vs this commit's tree + =/ parent-tree=@ux + ?~ parents.u.com 0x0 + =/ par=(unit commit:git-repo) (get-commit:sto i.parents.u.com) + ?~ par 0x0 + tree.u.par + =/ changes=(list tree-change:git-transport) + ?: =(0x0 parent-tree) + :: first commit: all files are additions + =/ top-tree=(unit tree-dir:git-repo) (get-tree tree.u.com) + ?~ top-tree ~ + %+ turn (all-blobs:git-transport get-tree / u.top-tree) + |=([p=path h=@ux] `tree-change:git-transport`[%add p h]) + (diff-trees:git-transport get-tree parent-tree tree.u.com) + :: create blobs on GitHub for added/modified files + =/ blob-url=@t + (cat 3 api (cat 3 '/repos/' (cat 3 repo.cfg '/git/blobs'))) + =| tree-entries=(list json) + =/ changes-remaining=(list tree-change:git-transport) changes + |- + ?~ changes-remaining + :: create tree on GitHub + :: get parent tree SHA — use GitHub's version + ;< parent-commit-resp=json bind:m + ?: =('' parent-sha) + =/ mj (fiber:fiber:nexus ,json) + (pure:mj *json) + (gh-get (cat 3 api (cat 3 '/repos/' (cat 3 repo.cfg (cat 3 '/git/commits/' parent-sha)))) headers) + =/ base-tree-sha=(unit @t) + ?. ?=(%o -.parent-commit-resp) ~ + =/ tree (~(get by p.parent-commit-resp) 'tree') + ?. ?=([~ %o *] tree) ~ + =/ sha (~(get by p.u.tree) 'sha') + ?. ?=([~ %s *] sha) ~ + `p.u.sha + =/ tree-pairs=(list [@t json]) + :~ ['tree' [%a (flop tree-entries)]] + == + =/ tree-pairs=(list [@t json]) + ?~ base-tree-sha tree-pairs + [['base_tree' s+u.base-tree-sha] tree-pairs] + =/ tree-body=json + (pairs:enjs:format tree-pairs) + =/ tree-url=@t + (cat 3 api (cat 3 '/repos/' (cat 3 repo.cfg '/git/trees'))) + ;< tree-resp=json bind:m (gh-post tree-url headers tree-body) + ?. ?=(%o -.tree-resp) + ~| "%git/repo push: tree create failed" !! + =/ new-tree-sha=@t (get-sha tree-resp) + :: create commit on GitHub + =/ commit-body=json + %- pairs:enjs:format + :~ ['message' s+(crip message.u.com)] + ['tree' s+new-tree-sha] + ['parents' [%a ?:(=('' parent-sha) ~ ~[s+parent-sha])]] + :- 'author' + %- pairs:enjs:format + :~ ['name' s+(crip name.author.u.com)] + ['email' s+(crip email.author.u.com)] + ['date' s+(timestamp-iso date.author-time.u.com)] + == + :- 'committer' + %- pairs:enjs:format + :~ ['name' s+(crip name.committer.u.com)] + ['email' s+(crip email.committer.u.com)] + ['date' s+(timestamp-iso date.commit-time.u.com)] + == + == + =/ commit-url=@t + (cat 3 api (cat 3 '/repos/' (cat 3 repo.cfg '/git/commits'))) + ;< commit-resp=json bind:m (gh-post commit-url headers commit-body) + ?. ?=(%o -.commit-resp) + ~| "%git/repo push: commit create failed" !! + =/ new-sha=@t (get-sha commit-resp) + ~& >> ["%git/repo push: created" (crip (scag 7 (trip new-sha)))] + ^$(remaining t.remaining, parent-sha new-sha) + :: process current change + =/ change=tree-change:git-transport i.changes-remaining + ?- -.change + %del + :: delete: add entry with sha null + =/ entry=json + %- pairs:enjs:format + :~ ['path' s+(path-to-github path.change)] + ['mode' s+'100644'] + ['type' s+'blob'] + ['sha' ~] + == + $(changes-remaining t.changes-remaining, tree-entries [entry tree-entries]) + :: + %add + =/ blob-data=(unit octs) (get-blob hash.change) + ?~ blob-data + $(changes-remaining t.changes-remaining) + =/ blob-body=json + %- pairs:enjs:format + :~ ['content' s+(crip (trip q.u.blob-data))] + ['encoding' s+'utf-8'] + == + ;< blob-resp=json bind:m (gh-post blob-url headers blob-body) + ?. ?=(%o -.blob-resp) + ~| "%git/repo push: blob create failed" !! + =/ entry=json + %- pairs:enjs:format + :~ ['path' s+(path-to-github path.change)] + ['mode' s+'100644'] + ['type' s+'blob'] + ['sha' s+(get-sha blob-resp)] + == + $(changes-remaining t.changes-remaining, tree-entries [entry tree-entries]) + :: + %mod + =/ blob-data=(unit octs) (get-blob new.change) + ?~ blob-data + $(changes-remaining t.changes-remaining) + =/ blob-body=json + %- pairs:enjs:format + :~ ['content' s+(crip (trip q.u.blob-data))] + ['encoding' s+'utf-8'] + == + ;< blob-resp=json bind:m (gh-post blob-url headers blob-body) + ?. ?=(%o -.blob-resp) + ~| "%git/repo push: blob create failed" !! + =/ entry=json + %- pairs:enjs:format + :~ ['path' s+(path-to-github path.change)] + ['mode' s+'100644'] + ['type' s+'blob'] + ['sha' s+(get-sha blob-resp)] + == + $(changes-remaining t.changes-remaining, tree-entries [entry tree-entries]) + == + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Git repo clone.' + ~ + 'Clone a public git repo into the namespace. Config: repo, ref.' + == + %| + ?+ rail.p.mana 'File under git/repo.' + [~ %'config.json'] 'Config: repo (owner/repo), ref (branch/tag/sha), token.' + [[%actions ~] %'sync.sig'] 'Poke to fetch from remote.' + [[%actions ~] %'switch.sig'] 'Poke to switch branch locally.' + [[%actions ~] %'checkout.sig'] 'Poke with commit hash to checkout.' + [[%actions ~] %'diff.sig'] 'Poke with commit hash to compute diff.' + [[%actions ~] %'add.sig'] 'Stage files. Poke with json {all: true} or {paths: [...]}.' + [[%actions ~] %'commit.sig'] 'Poke with commit message to create local commit.' + [[%actions ~] %'branch.sig'] 'Poke with branch name to create at HEAD.' + [[%actions ~] %'delete-branch.sig'] 'Poke with branch name to delete.' + [[%actions ~] %'stash.sig'] 'Poke to stash dirty index and reset to HEAD.' + [[%actions ~] %'stash-pop.sig'] 'Poke to pop the most recent stash.' + [[%actions ~] %'push.sig'] 'Poke to push files to GitHub via REST API.' + [~ %'push.json'] 'Push request: {message, files: [{path, content}]}.' + [~ %'page.html'] 'Dashboard page. Shows config, sync button, file tree.' + == + == + -- +:: +|% +:: ++$ repo-config + $: repo=@t + ref=@t + token=@t + == +:: +++ read-config + =/ m (fiber:fiber:nexus ,repo-config) + ^- form:m + ;< road=road:tarball bind:m (ancestor-road:io [/git %repo] [%& / %'config.json']) + ;< =seen:nexus bind:m (peek:io road `[/ %json]) + ?. ?=([%& %file *] seen) + (pure:m ['' 'main' '']) + =/ cfg=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + ?. ?=(%o -.cfg) + (pure:m ['' 'main' '']) + =/ get + |= [key=@t default=@t] + ^- @t + =/ v (~(get by p.cfg) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + (pure:m [(get 'repo' '') (get 'ref' '') (get 'token' '')]) +:: +:: +write-repo-file: write or create a file in the repo sub-nexus +:: +++ write-repo-file + |= [=road:tarball =sage:tarball] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< exists=? bind:m (peek-exists:io road) + ?: exists + (over:io road sage) + (make:io road |+[%.n sage ~]) +:: +:: +do-full-clone: full clone from discovery +:: +++ do-full-clone + |= [cfg=repo-config disc=discovery:git-transport] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ~& >> "%git/repo: full clone..." + ~& >> "%git/repo: fetching pack..." + =/ want-hashes=(list @ux) + (turn refs.disc |=(r=git-ref:git-transport hash.r)) + ;< pack-body=octs bind:m + (fetch-pack repo.cfg (build-want:git-transport want-hashes ~['side-band-64k' 'ofs-delta'] ~ ~)) + ~& >> ["%git/repo: pack received" p.pack-body "bytes"] + =/ pack-data=octs + (extract-pack:git-transport pack-body %.y) + ~& >> "%git/repo: parsing pack..." + =/ =pack:git-pack + (read:git-pack (from-octs:bytestream pack-data)) + ~& >> ["%git/repo: unpacked" count.pack "objects"] + =/ repo=repository:git-repo + (~(clone-from-pack git-repo *repository:git-repo) pack refs.disc) + :: build index text + ?< ?=(~ archive.object-store.repo) + =/ pak=pack:git-pack i.archive.object-store.repo + =/ all-entries=(list [key=hash:git-repo val=@ud]) + (tap:pack-on:git-pack index.pak) + =/ idx-text=tape + %- zing + %+ turn all-entries + |= [key=hash:git-repo val=@ud] + "{(print-hash-sha-1:git-transport key)} {(a-co:co val)}\0a" + :: extract branch refs + =/ branch-refs=(list [name=@t hash=hash:git-repo]) + %+ murn refs.disc + |= r=git-ref:git-transport + ?. =(`(list @t)`~['refs' 'heads'] (scag 2 refname.r)) ~ + =/ branch-name=@t + (crip (join:git-transport '/' (turn (slag 2 refname.r) trip))) + `[branch-name hash.r] + :: resolve HEAD hash + =/ active-ref=@t ?:(=('' ref.cfg) 'main' ref.cfg) + =/ ref-hash=(unit @ux) + =+ got=(get:refs:~(. git-repo repo) ~[active-ref]) + ?^ got got + (get:refs:~(. git-repo repo) ~['refs' 'heads' active-ref]) + =/ head-hash=@ux (fall ref-hash 0x0) + =/ head-text=@t (crip (print-hash-sha-1:git-transport head-hash)) + ~& >> "%git/repo: saving to data nexus" + :: clear old packs before writing fresh clone + ;< packs-rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data/packs]) + ;< * bind:m (cull-soft:io packs-rd) + ;< ~ bind:m (save-repo pack-data idx-text 0 branch-refs head-text active-ref) + ;< sync-data-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%| /data]) + ;< ~ bind:m (reload:io sync-data-rd) + ~& >> "%git/repo: clone complete" + (set-status 'idle') +:: +:: +update-refs: write updated remote refs without touching pack +:: +++ update-refs + |= [disc=discovery:git-transport active-ref=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ branch-refs=(list [name=@t hash=hash:git-repo]) + %+ murn refs.disc + |= r=git-ref:git-transport + ?. =(`(list @t)`~['refs' 'heads'] (scag 2 refname.r)) ~ + =/ branch-name=@t + (crip (join:git-transport '/' (turn (slag 2 refname.r) trip))) + `[branch-name hash.r] + |- + ?~ branch-refs (pure:m ~) + =/ hash-text=tape (print-hash-sha-1:git-transport hash.i.branch-refs) + =/ hash-octs=octs (as-octt:bytestream hash-text) + =/ bname=@ta (crip (trip name.i.branch-refs)) + ;< remote-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/refs/remotes/origin bname]) + ;< ~ bind:m (write-repo-file remote-rd [[/ %mime] !>([/text/plain hash-octs])]) + $(branch-refs t.branch-refs) +:: +:: +save-repo: write pack + index + refs + HEAD into repo sub-nexus +:: +:: pack-num is the pack slot to write (0 for full clone, N for incremental) +:: +++ save-repo + |= $: pack-data=octs + idx-text=tape + pack-num=@ud + branch-refs=(list [name=@t hash=hash:git-repo]) + head-text=@t + ref-name=@t + == + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ idx-octs=octs (as-octt:bytestream idx-text) + =/ pack-name=@ta (crip "pack-{(a-co:co pack-num)}.pack") + =/ idx-name=@ta (crip "pack-{(a-co:co pack-num)}.idx") + :: HEAD = "ref: refs/heads/" + =/ head-octs=octs (as-octt:bytestream "ref: refs/heads/{(trip ref-name)}") + ;< rd1=road:tarball bind:m (ancestor-road:io [/git %repo] [%& /data/packs pack-name]) + ;< ~ bind:m (write-repo-file rd1 [[/ %mime] !>([/application/octet-stream pack-data])]) + ;< rd2=road:tarball bind:m (ancestor-road:io [/git %repo] [%& /data/packs idx-name]) + ;< ~ bind:m (write-repo-file rd2 [[/ %mime] !>([/text/plain idx-octs])]) + ;< rd4=road:tarball bind:m (ancestor-road:io [/git %repo] [%& /data %'HEAD']) + ;< ~ bind:m (write-repo-file rd4 [[/ %mime] !>([/text/plain head-octs])]) + :: write individual ref files — both local and remote tracking + |- + ?~ branch-refs (pure:m ~) + =/ hash-text=tape (print-hash-sha-1:git-transport hash.i.branch-refs) + =/ hash-octs=octs (as-octt:bytestream hash-text) + =/ bname=@ta (crip (trip name.i.branch-refs)) + ;< head-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/refs/heads bname]) + ;< ~ bind:m (write-repo-file head-rd [[/ %mime] !>([/text/plain hash-octs])]) + ;< remote-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/refs/remotes/origin bname]) + ;< ~ bind:m (write-repo-file remote-rd [[/ %mime] !>([/text/plain hash-octs])]) + $(branch-refs t.branch-refs) +:: +:: +write-head: update HEAD in repo sub-nexus +:: +:: For a branch: writes "ref: refs/heads/" +:: For detached: writes raw commit hash +:: +++ write-head + |= value=@t + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ head-octs=octs (as-octt:bytestream (trip value)) + ;< rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%& /data %'HEAD']) + (over:io rd [[/ %mime] !>([/text/plain head-octs])]) +:: +:: +resolve-head: read HEAD, follow ref if symbolic, return commit hash +:: +++ resolve-head + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< head-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data %'HEAD']) + ;< head-seen=seen:nexus bind:m (peek:io head-rd `[/ %mime]) + ?. ?=([%.y %file *] head-seen) + (pure:m '') + =/ head-mim=mime !<(mime q.sage.p.head-seen) + =/ head-text=tape (trip q.q.head-mim) + ?. =("ref: " (scag 5 head-text)) + :: raw hash (detached HEAD) + (pure:m (crip head-text)) + :: symbolic ref — extract branch and resolve + =/ ref-path=tape (slag 5 head-text) + =/ branch=@t + ?. =("refs/heads/" (scag 11 ref-path)) + (crip ref-path) + (crip (slag 11 ref-path)) + (resolve-ref branch) +:: +:: +read-head-branch: return current branch name, or '' if detached +:: +++ read-head-branch + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< head-rd=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data %'HEAD']) + ;< head-seen=seen:nexus bind:m (peek:io head-rd `[/ %mime]) + ?. ?=([%.y %file *] head-seen) + (pure:m '') + =/ head-mim=mime !<(mime q.sage.p.head-seen) + =/ head-text=tape (trip q.q.head-mim) + ?. =("ref: " (scag 5 head-text)) + (pure:m '') + =/ ref-path=tape (slag 5 head-text) + ?. =("refs/heads/" (scag 11 ref-path)) + (pure:m (crip ref-path)) + (pure:m (crip (slag 11 ref-path))) +:: +:: +resolve-ref: read ref hash from refs/heads/ +:: +++ resolve-ref + |= ref=@t + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + =/ active=@ta ?:(=('' ref) 'main' (crip (trip ref))) + ;< road=road:tarball bind:m + (ancestor-road:io [/git %repo] [%& /data/refs/heads active]) + ;< =seen:nexus bind:m (peek:io road `[/ %mime]) + ?. ?=([%& %file *] seen) + ~& >>> ["%git/repo: ref not found:" active] + (pure:m '') + =/ mim=mime !<(mime q.sage.p.seen) + (pure:m (crip (trip q.q.mim))) +:: +++ set-status + |= s=@t + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< rd=road:tarball bind:m (ancestor-road:io [/git %repo] [%& /ui %'status.json']) + (over:io rd [[/ %json] !>((pairs:enjs:format ~[['status' s+s]]))]) +:: +:: +load-repo-maybe: rebuild repository from ./data/ if packs exist +:: +:: Returns ~ if no packs found (triggers full clone). +:: +++ load-repo-maybe + =/ m (fiber:fiber:nexus ,(unit repository:git-repo)) + ^- form:m + ;< packs-road=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data/packs]) + ;< packs-seen=seen:nexus bind:m (peek:io packs-road ~) + ?. ?=([%& %ball *] packs-seen) (pure:m ~) + =/ archive=(list pack:git-pack) + (load-packs-from-ball ball.p.packs-seen) + ?~ archive (pure:m ~) + ;< heads-road=road:tarball bind:m + (ancestor-road:io [/git %repo] [%| /data/refs/heads]) + ;< heads-seen=seen:nexus bind:m (peek:io heads-road ~) + =/ built-refs=(axal ref:git-repo) + ?. ?=([%& %ball *] heads-seen) [~ ~] + (refs-from-ball ball.p.heads-seen ~['refs' 'heads']) + ;< obj-road=road:tarball bind:m (ancestor-road:io [/git %repo] [%| /data/objects]) + ;< obj-seen=seen:nexus bind:m (peek:io obj-road ~) + =/ loose=(map hash:git-repo object:git-obj) + ?. ?=([%& %ball *] obj-seen) ~ + (read-loose-from-ball ball.p.obj-seen) + =/ repo=repository:git-repo + [%sha-1 [loose archive] built-refs ~ ~] + (pure:m `repo) +:: +:: +load-repo-from-ns: rebuild git repository from ./data/ namespace files +:: +++ load-repo-from-ns + =/ m (fiber:fiber:nexus ,repository:git-repo) + ^- form:m + ;< result=(unit repository:git-repo) bind:m load-repo-maybe + ?~ result ~|("%git/repo: no pack data" !!) + (pure:m u.result) +:: +:: +refs-from-ball: read ref files from a ball directory into axal +:: +++ refs-from-ball + |= [=ball:tarball prefix=path] + ^- (axal ref:git-repo) + ?~ fil.ball [~ ~] + %+ roll ~(tap by contents.u.fil.ball) + |= [[name=@t =content:tarball] r=(axal ref:git-repo)] + =/ m=mime !<(mime q.sage.content) + ?: =(0 p.q.m) r + =/ h=(unit @ux) + (rust (trip q.q.m) parse-hash-sha-1:git-transport) + ?~ h r + (~(put of r) [(weld prefix ~[name]) u.h]) +:: +++ read-loose-from-ball + |= =ball:tarball + ^- (map hash:git-repo object:git-obj) + ?~ fil.ball ~ + =/ entries=(list [name=@t =content:tarball]) + ~(tap by contents.u.fil.ball) + %+ roll entries + |= [[name=@t =content:tarball] acc=(map hash:git-repo object:git-obj)] + =/ h=(unit hash:git-repo) + (rust (trip name) parse-hash-sha-1:git-transport) + ?~ h acc + =/ m=mime !<(mime q.sage.content) + =/ raw=raw-object:git-obj (raw-from-octs:git-obj q.m) + =/ obj=object:git-obj (parse-raw:git-obj %sha-1 raw) + (~(put by acc) u.h obj) +:: +:: +load-packs-from-ball: read all pack-N.pack + pack-N.idx pairs from a packs ball +:: +++ load-packs-from-ball + |= =ball:tarball + ^- (list pack:git-pack) + ?~ fil.ball ~ + =/ all-files=(list @ta) ~(tap in ~(key by contents.u.fil.ball)) + =/ pack-nums=(list @ud) + %+ murn all-files + |= name=@ta + =/ t=tape (trip name) + ?. =("pack-" (scag 5 t)) ~ + ?. =(".pack" (slag (sub (lent t) 5) t)) ~ + =/ num-text=tape (slag 5 (scag (sub (lent t) 5) t)) + (rust num-text dem) + =/ sorted=(list @ud) (sort pack-nums lth) + %+ murn sorted + |= n=@ud + ^- (unit pack:git-pack) + =/ pack-name=@ta (crip "pack-{(a-co:co n)}.pack") + =/ idx-name=@ta (crip "pack-{(a-co:co n)}.idx") + =/ pack-content=(unit content:tarball) + (~(get by contents.u.fil.ball) pack-name) + =/ idx-content=(unit content:tarball) + (~(get by contents.u.fil.ball) idx-name) + ?~ pack-content ~ + ?~ idx-content ~ + =/ pack-mim=mime !<(mime q.sage.u.pack-content) + ?: =(0 p.q.pack-mim) ~ + =/ idx-mim=mime !<(mime q.sage.u.idx-content) + =/ idx-text=tape (trip q.q.idx-mim) + =/ idx=pack-index:git-pack + (rebuild-index (split:git-transport idx-text `@t`10)) + =/ sea=bays:bytestream (from-octs:bytestream q.pack-mim) + =/ entries=(list [key=hash:git-repo val=@ud]) + (tap:pack-on:git-pack idx) + `[%sha-1 (lent entries) idx p.q.pack-mim sea] +:: +++ rebuild-index + |= lines=(list tape) + ^- pack-index:git-pack + =| idx=pack-index:git-pack + |- + ?~ lines idx + =/ line=tape i.lines + ?: =(~ line) $(lines t.lines) + =/ parts=(list tape) (split:git-transport line ' ') + ?. =((lent parts) 2) $(lines t.lines) + =/ hex=tape (snag 0 parts) + =/ off=tape (snag 1 parts) + =/ h=hash:git-repo (scan hex parse-hash-sha-1:git-transport) + =/ o=@ud (scan off dum:ag) + $(lines t.lines, idx (put:pack-on:git-pack idx h o)) +:: +:: +build-diff-json: convert tree changes to JSON with line-level diffs +:: +++ build-diff-json + |= [get-blob=$-(@ux (unit octs)) changes=(list tree-change:git-transport)] + ^- json + :- %a + %+ turn changes + |= c=tree-change:git-transport + ^- json + ?- -.c + %add + =/ blob=(unit octs) (get-blob hash.c) + =/ lines=wain ?~(blob ~ (to-wain:format q.u.blob)) + %- pairs:enjs:format + :~ ['path' s+(spat path.c)] + ['status' s+'add'] + ['lines' [%a (turn lines |=(l=@t (pairs:enjs:format ~[['t' s+'add'] ['v' s+l]])))]] + == + :: + %del + =/ blob=(unit octs) (get-blob hash.c) + =/ lines=wain ?~(blob ~ (to-wain:format q.u.blob)) + %- pairs:enjs:format + :~ ['path' s+(spat path.c)] + ['status' s+'del'] + ['lines' [%a (turn lines |=(l=@t (pairs:enjs:format ~[['t' s+'del'] ['v' s+l]])))]] + == + :: + %mod + =/ old-blob=(unit octs) (get-blob old.c) + =/ new-blob=(unit octs) (get-blob new.c) + =/ old-lines=wain ?~(old-blob ~ (to-wain:format q.u.old-blob)) + =/ new-lines=wain ?~(new-blob ~ (to-wain:format q.u.new-blob)) + =/ diff=(urge:clay cord) + (lusk:differ old-lines new-lines (loss:differ old-lines new-lines)) + %- pairs:enjs:format + :~ ['path' s+(spat path.c)] + ['status' s+'mod'] + ['lines' (urge-to-json old-lines diff)] + == + == +:: +:: +urge-to-json: convert (urge:clay cord) diff to JSON line array with types +:: +++ urge-to-json + |= [old=wain urg=(urge:clay cord)] + ^- json + =| pos=@ud + =| acc=(list json) + |- + ?~ urg [%a acc] + ?- -.i.urg + %& + =/ ctx=(list @t) (swag [pos p.i.urg] old) + =/ ctx-json=(list json) + (turn ctx |=(l=@t (pairs:enjs:format ~[['t' s+'ctx'] ['v' s+l]]))) + $(urg t.urg, pos (add pos p.i.urg), acc (weld acc ctx-json)) + :: + %| + =/ del-json=(list json) + (turn (flop p.i.urg) |=(l=@t (pairs:enjs:format ~[['t' s+'del'] ['v' s+l]]))) + =/ add-json=(list json) + (turn (flop q.i.urg) |=(l=@t (pairs:enjs:format ~[['t' s+'add'] ['v' s+l]]))) + %= $ + urg t.urg + pos (add pos (lent p.i.urg)) + acc (weld acc (weld del-json add-json)) + == + == +:: +:: +fetch-with-redirect: GET a URL, follow one redirect +:: +++ fetch-with-redirect + |= [=request:http] + =/ m (fiber:fiber:nexus ,octs) + ^- form:m + ~& > ["%git/repo: HTTP" method.request url.request] + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) + ~| "%git/repo: request failed (not finished)" !! + =/ status status-code.response-header.client-response + ~& > ["%git/repo: HTTP response" status] + ?: ?| =(status 301) + =(status 302) + =(status 307) + == + =/ location=(unit @t) + (~(get by (malt headers.response-header.client-response)) 'location') + ?~ location + ~| "%git/repo: redirect without location header" !! + ~& > ["%git/repo: following redirect to" u.location] + =/ redir=request:http + [%'GET' u.location ~[['User-Agent' 'grubbery']] ~] + ;< ~ bind:m (send-request:io redir) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) + ~| "%git/repo: redirect failed" !! + ?. =(200 status-code.response-header.client-response) + ~& >>> ["%git/repo: redirect status" status-code.response-header.client-response] + ~| "%git/repo: non-200 after redirect" !! + ?~ full-file.client-response + ~| "%git/repo: empty response after redirect" !! + (pure:m data.u.full-file.client-response) + ?. =(200 status) + ~& >>> ["%git/repo: HTTP failed" status method.request url.request] + ~| "%git/repo: unexpected status {}" !! + ?~ full-file.client-response + ~| "%git/repo: empty response" !! + (pure:m data.u.full-file.client-response) +:: +:: +fetch-discovery: GET /info/refs for a repo +:: +++ fetch-discovery + |= repo=@t + =/ m (fiber:fiber:nexus ,discovery:git-transport) + ^- form:m + =/ url=@t + (rap 3 ~['https://github.com/' repo '.git/info/refs?service=git-upload-pack']) + =/ =request:http + [%'GET' url ~[['User-Agent' 'grubbery']] ~] + ;< body=octs bind:m (fetch-with-redirect request) + (pure:m (parse-discovery:git-transport body)) +:: +:: +fetch-pack: POST /git-upload-pack for a repo +:: +++ fetch-pack + |= [repo=@t want-body=octs] + =/ m (fiber:fiber:nexus ,octs) + ^- form:m + =/ url=@t + (rap 3 ~['https://github.com/' repo '.git/git-upload-pack']) + =/ =request:http + :^ %'POST' url + :~ ['Content-Type' 'application/x-git-upload-pack-request'] + ['User-Agent' 'grubbery'] + == + `want-body + ;< body=octs bind:m (fetch-with-redirect request) + (pure:m body) +:: +:: +gh-request: make a GitHub REST API request, follow redirects +:: +++ gh-request + |= [method=method:http url=@t headers=(list [key=@t value=@t]) bod=(unit octs)] + =/ m (fiber:fiber:nexus ,json) + ^- form:m + =/ =request:http [method url headers bod] + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) + ~| "%git/repo: GitHub API request did not finish" !! + =/ status=@ud status-code.response-header.client-response + ?: ?| =(301 status) + =(302 status) + =(307 status) + == + =/ location=(unit @t) + (~(get by (malt headers.response-header.client-response)) 'location') + ?~ location + ~| "%git/repo: GitHub API redirect without location" !! + (gh-request method u.location headers bod) + ?~ full-file.client-response + ~| "%git/repo: GitHub API empty response (status {})" !! + =/ body=@t q.data.u.full-file.client-response + ?. ?& (gte status 200) + (lth status 300) + == + ~| "%git/repo: GitHub API error (status {}): {(trip body)}" !! + =/ parsed=(unit json) (de:json:html body) + ?~ parsed + ~| "%git/repo: GitHub API invalid JSON" !! + (pure:m u.parsed) +:: +++ gh-get + |= [url=@t headers=(list [key=@t value=@t])] + (gh-request %'GET' url headers ~) +:: +++ gh-post + |= [url=@t headers=(list [key=@t value=@t]) body=json] + =/ body-octs=octs (as-octs:mimes:html (en:json:html body)) + (gh-request %'POST' url headers `body-octs) +:: +++ gh-patch + |= [url=@t headers=(list [key=@t value=@t]) body=json] + =/ body-octs=octs (as-octs:mimes:html (en:json:html body)) + (gh-request %'PATCH' url headers `body-octs) +:: +++ gh-headers + |= token=@t + ^- (list [key=@t value=@t]) + :~ ['User-Agent' 'grubbery'] + ['Authorization' (cat 3 'token ' token)] + ['Accept' 'application/vnd.github.v3+json'] + ['Content-Type' 'application/json'] + == +:: +get-sha: extract 'sha' string from a GitHub API JSON object +:: +++ get-sha + |= =json + ^- @t + ?> ?=(%o -.json) + =/ sha (~(get by p.json) 'sha') + ?> ?=([~ %s *] sha) + p.u.sha +:: +timestamp-iso: convert @da to ISO 8601 string for GitHub API +:: +++ timestamp-iso + |= d=@da + ^- @t + =/ dt=date (yore d) + =/ y=@ud y.dt + =/ mo=@ud m.dt + =/ da=@ud d.t.dt + =/ h=@ud h.t.dt + =/ mi=@ud m.t.dt + =/ s=@ud s.t.dt + %- crip + "{(a-co:co y)}-{(pad mo)}-{(pad da)}T{(pad h)}:{(pad mi)}:{(pad s)}Z" +:: +pad: zero-pad a number to 2 digits +:: +++ pad + |= n=@ud + ^- tape + ?:((lth n 10) "0{(a-co:co n)}" (a-co:co n)) +:: +path-to-github: convert urbit path to GitHub-style path string +:: /foo/bar/txt -> foo/bar/txt (strips leading /) +:: +++ path-to-github + |= pax=path + ^- @t + =/ t=tape (trip (spat pax)) + ?~ t '' + ?:(=('/' i.t) (crip t.t) (crip t)) +:: ++$ page-event + $% [%news =wire =view:nexus] + [%fell =wire] + == +:: +++ take-page-event + =/ m (fiber:fiber:nexus ,page-event) + ^- form:m + |= =input:fiber:nexus + :+ ~ state.input + ?+ in.input [%skip ~] + ~ [%wait ~] + [~ %news * *] + [%done %news [wire view]:u.in.input] + [~ %fell *] + [%done %fell wire.u.in.input] + == +:: +++ view-to-config + |= =view:nexus + ^- repo-config + ?. ?=([%file *] view) ['' 'main' ''] + =/ cfg=json (fall (mole |.(!<(json q.sage.view))) *json) + ?. ?=(%o -.cfg) ['' 'main' ''] + =/ get + |= [key=@t default=@t] + ^- @t + =/ v (~(get by p.cfg) key) + ?. ?=([~ %s *] v) default + ?:(=('' p.u.v) default p.u.v) + [(get 'repo' '') (get 'ref' '') (get 'token' '')] +:: +text-from-sage: extract text from a poke sage (wain or mime) +:: +++ text-from-sage + |= =sage:tarball + ^- @t + ?: =([/ %mime] p.sage) + q.q:!<(mime q.sage) + (of-wain:format !<(wain q.sage)) +:: +++ view-to-branches + |= =view:nexus + ^- (list @t) + ?. ?=([%file *] view) ~ + =/ j=json (fall (mole |.(!<(json q.sage.view))) *json) + ?. ?=(%a -.j) ~ + (murn p.j |=(v=json ?.(?=(%s -.v) ~ `p.v))) +:: +++ view-to-json + |= =view:nexus + ^- json + ?. ?=([%file *] view) [%a ~] + (fall (mole |.(!<(json q.sage.view))) [%a ~]) +:: +++ view-to-files + |= =view:nexus + ^- (list @t) + ?. ?=([%ball *] view) ~ + (collect-files '' ball.view) +:: +++ collect-files + |= [prefix=@t =ball:tarball] + ^- (list @t) + =/ file-names=(list @t) + ?~ fil.ball ~ + %+ turn ~(tap by contents.u.fil.ball) + |= [name=@ta *] + ?:(=('' prefix) name (crip "{(trip prefix)}/{(trip name)}")) + =/ dir-files=(list @t) + %- zing + %+ turn ~(tap by dir.ball) + |= [name=@ta sub=ball:tarball] + =/ sub-prefix=@t + ?:(=('' prefix) name (crip "{(trip prefix)}/{(trip name)}")) + (collect-files sub-prefix sub) + (weld file-names dir-files) +:: +++ page-css + ^- tape + %- zing + ^- (list tape) + :~ "*\{box-sizing:border-box;margin:0;padding:0}" + "body\{font-family:-apple-system,system-ui,monospace;color:#1a1a1a;" + "font-size:14px;line-height:1.5;height:100vh}" + :: -- setup screen (no files yet) -- + ".setup\{display:flex;align-items:center;justify-content:center;" + "height:100vh;flex-direction:column;gap:1rem}" + ".setup h1\{font-size:1.2rem;font-weight:500}" + ".setup .form\{display:flex;flex-direction:column;gap:.5rem;width:320px}" + ".setup label\{font-size:12px;opacity:.5}" + ".setup input\{padding:.4rem .6rem;border:1px solid #ccc;" + "border-radius:3px;font:inherit;font-size:14px;width:100%}" + ".setup .row\{display:flex;gap:.5rem}" + ".setup .row input\{flex:1}" + :: -- browser screen (files present) -- + ".browser\{display:flex;flex-direction:column;height:100vh}" + ".toolbar\{display:flex;gap:.5rem;padding:.4rem .75rem;" + "border-bottom:1px solid #e0e0e0;align-items:center;" + "background:#fafafa;flex-shrink:0}" + ".toolbar input\{padding:.3rem .5rem;border:1px solid #ccc;" + "border-radius:3px;font:inherit;font-size:13px}" + ".toolbar .repo\{flex:1;min-width:160px}" + ".toolbar select.ref\{padding:.3rem .5rem;border:1px solid #ccc;" + "border-radius:3px;font:inherit;font-size:13px;max-width:200px}" + ".btn\{padding:.3rem .75rem;border:1px solid #ccc;border-radius:3px;" + "background:#fff;font:inherit;font-size:13px;cursor:pointer;" + "white-space:nowrap}" + ".btn:hover\{background:#f0f0f0}" + ".btn.primary\{background:#1a1a1a;color:#fff;border-color:#1a1a1a}" + ".btn.primary:hover\{background:#333}" + ".btn:disabled\{opacity:.4;cursor:default}" + ".info\{font-size:12px;opacity:.4;margin-left:auto}" + ".panes\{display:flex;flex:1;overflow:hidden}" + ".tree-pane\{width:260px;min-width:0;border-right:1px solid #e0e0e0;" + "overflow-y:auto;padding:.25rem 0;flex-shrink:0;" + "transition:width .15s}" + ".tree-pane.collapsed\{width:0;padding:0;border:0;overflow:hidden}" + ".toggle-tree\{background:none;border:none;border-right:1px solid #e0e0e0;" + "cursor:pointer;padding:0 6px;font-size:16px;opacity:.4;" + "flex-shrink:0}" + ".toggle-tree:hover\{opacity:.7;background:#f5f5f5}" + ".content-pane\{flex:1;overflow-y:auto;padding:1rem}" + :: -- tree -- + ".dir\{cursor:pointer;user-select:none}" + ".dir-label\{display:flex;align-items:center;padding:2px 8px}" + ".dir-label:hover\{background:#f0f0f0}" + ".dir-label .arrow\{width:14px;font-size:9px;flex-shrink:0;" + "transition:transform .1s}" + ".dir-label .arrow.open\{transform:rotate(90deg)}" + ".dir-children\{display:none}" + ".dir.open>.dir-children\{display:block}" + ".file\{padding:2px 8px;cursor:pointer;font-size:13px}" + ".file:hover\{background:#f0f0f0}" + ".file.active\{background:#e8f0fe}" + :: -- file viewer -- + ".file-view .path\{font-size:12px;opacity:.4;margin-bottom:.75rem}" + ".file-view pre\{white-space:pre-wrap;word-break:break-all;" + "font-size:13px;line-height:1.6}" + ".placeholder\{opacity:.3;padding:3rem;text-align:center}" + ".syncing\{display:flex;align-items:center;gap:8px;padding:8px 10px;" + "font-size:13px;opacity:.5}" + "@keyframes spin\{to\{transform:rotate(360deg)}}" + ".spinner\{display:inline-block;width:14px;height:14px;" + "border:2px solid #ccc;border-top-color:#333;border-radius:50%;" + "animation:spin .6s linear infinite}" + :: -- commit log -- + ".commit-pane\{border-top:1px solid #e0e0e0;max-height:220px;" + "overflow-y:auto;flex-shrink:0}" + ".commit-pane .header\{display:flex;align-items:center;" + "padding:6px 12px;font-size:12px;font-weight:600;" + "background:#fafafa;border-bottom:1px solid #e0e0e0;" + "cursor:pointer;user-select:none;position:sticky;top:0;z-index:1}" + ".commit-pane .header .arrow\{margin-right:6px;font-size:9px;" + "transition:transform .1s}" + ".commit-pane .header .arrow.open\{transform:rotate(90deg)}" + ".commit-pane.collapsed .commit-list\{display:none}" + ".commit-entry\{display:flex;align-items:baseline;gap:8px;" + "padding:4px 12px;font-size:12px;cursor:pointer;" + "border-bottom:1px solid #f0f0f0}" + ".commit-entry:hover\{background:#f5f8ff}" + ".commit-entry.active\{background:#e8f0fe}" + ".commit-entry.head\{background:#f0fdf4}" + ".commit-entry.head .hash:after\{content:'HEAD';margin-left:4px;" + "font-size:10px;background:#1a7f37;color:#fff;padding:0 4px;" + "border-radius:3px;font-family:-apple-system,system-ui,sans-serif}" + ".commit-entry .hash\{font-family:monospace;color:#0969da;" + "flex-shrink:0}" + ".commit-entry .msg\{flex:1;overflow:hidden;" + "text-overflow:ellipsis;white-space:nowrap}" + ".commit-entry .author\{opacity:.5;flex-shrink:0}" + ".head-bar\{display:flex;align-items:center;gap:8px;" + "padding:3px 12px;border-bottom:1px solid #e0e0e0;" + "background:#f0fdf4;font-size:12px;cursor:pointer;flex-shrink:0}" + ".head-bar:hover\{background:#dcfce7}" + ".head-bar .hash\{font-family:monospace;color:#1a7f37;font-weight:600}" + ".head-bar .msg\{opacity:.7;overflow:hidden;" + "text-overflow:ellipsis;white-space:nowrap}" + ".head-bar .badge\{font-size:10px;background:#1a7f37;color:#fff;" + "padding:0 4px;border-radius:3px;flex-shrink:0}" + ".status-bar\{display:none;align-items:center;gap:6px;" + "padding:4px 12px;border-bottom:1px solid #e0e0e0;" + "background:#fffbeb;font-size:12px;flex-shrink:0;cursor:pointer}" + ".status-bar:hover\{background:#fef3c7}" + ".status-bar.dirty,.status-bar.sync\{display:flex}" + ".status-bar .staged\{color:#1a7f37;font-weight:500}" + ".status-bar .unstaged\{color:#9a6700;font-weight:500}" + ".status-bar .untracked\{color:#656d76;font-weight:500}" + ".status-bar .ahead-behind\{opacity:.6;font-size:11px}" + ".status-bar .files\{opacity:.6;font-size:11px}" + ".commit-popup\{position:fixed;top:0;left:0;right:0;bottom:0;" + "background:rgba(0,0,0,.3);display:flex;align-items:center;" + "justify-content:center;z-index:100}" + ".commit-popup .card\{background:#fff;border-radius:6px;padding:1rem;" + "max-width:560px;width:90%;max-height:80vh;overflow-y:auto;" + "box-shadow:0 4px 24px rgba(0,0,0,.15)}" + ".commit-popup .card h3\{font-size:14px;margin-bottom:.5rem}" + ".commit-popup .card .meta\{font-size:12px;margin-bottom:.75rem;" + "border-collapse:collapse;width:100%}" + ".commit-popup .card .meta td\{padding:2px 8px 2px 0;vertical-align:top}" + ".commit-popup .card .meta td:first-child\{opacity:.5;white-space:nowrap;" + "font-weight:500;width:90px}" + ".commit-popup .card .meta code\{font-size:11px;background:#f5f5f5;" + "padding:1px 4px;border-radius:2px;word-break:break-all}" + ".commit-popup .card .body\{font-size:13px;white-space:pre-wrap;" + "line-height:1.6;font-family:monospace}" + ".commit-popup .card .close\{float:right;background:none;border:none;" + "font-size:18px;cursor:pointer;opacity:.4;padding:0 4px}" + ".commit-popup .card .close:hover\{opacity:.8}" + :: -- diff view -- + ".diff-view\{font-size:13px}" + ".diff-header\{padding:0 0 .75rem;display:flex;align-items:center;gap:8px}" + ".diff-header .hash\{font-family:monospace;color:#0969da;font-weight:600}" + ".diff-header .msg\{opacity:.7}" + ".diff-file\{margin-bottom:1rem;border:1px solid #e0e0e0;" + "border-radius:4px;overflow:hidden}" + ".diff-file-header\{padding:6px 12px;background:#f6f8fa;" + "border-bottom:1px solid #e0e0e0;font-size:12px;" + "display:flex;align-items:center;gap:8px;cursor:pointer}" + ".diff-file-header:hover\{background:#eef1f5}" + ".diff-file-header .badge\{font-size:10px;padding:0 4px;" + "border-radius:3px;color:#fff;flex-shrink:0}" + ".badge-add\{background:#1a7f37}" + ".badge-del\{background:#cf222e}" + ".badge-mod\{background:#9a6700}" + ".diff-lines\{font-family:monospace;font-size:12px;line-height:1.5;" + "overflow-x:auto;display:none}" + ".diff-file.open .diff-lines\{display:block}" + ".diff-line\{padding:0 12px;white-space:pre-wrap;word-break:break-all}" + ".diff-line.ctx\{background:#fff}" + ".diff-line.add\{background:#e6ffec}" + ".diff-line.del\{background:#ffebe9}" + ".diff-line .pre\{opacity:.4;display:inline-block;width:12px;" + "text-align:center;margin-right:4px;user-select:none}" + == +:: +++ page-script + |= [api=@t repo=@t ref=@t] + ^- tape + %- zing + ^- (list tape) + :~ "var A='{(trip api)}';" + "var R='{(trip repo)}';" + "var F='{(trip ref)}';" + "var _files=window._FILES||[];" + :: fetch: pull latest from remote + "function doFetch()\{" + "var r=document.getElementById('repo').value;" + "var sel=document.getElementById('ref');" + "var f=sel?(sel.value||''):(''||'');" + "if(!r)\{return}" + "var btn=document.getElementById('fetch-btn');" + "if(btn)\{btn.disabled=true;btn.textContent='\\u21bb'}" + "fetch(A.replace('/file/','/over/')+'/config.json?mark=json'," + "\{method:'POST',headers:\{'Content-Type':'application/json'}," + "body:JSON.stringify(\{repo:r,ref:f})})" + ".then(function()\{" + "return fetch(A.replace('/file/','/poke/')+'/actions/sync.sig'," + "\{method:'POST',headers:\{'Content-Type':'text/plain'},body:'sync'})" + "}).catch(function()\{" + "if(btn)\{btn.disabled=false}" + "})}" + :: branch switch: local only — just poke switch.sig + "function doSwitch()\{" + "var sel=document.getElementById('ref');" + "var f=sel?(sel.value||''):(''||'');" + "if(!f)\{return}" + "if(sel)\{sel.disabled=true}" + "fetch(A.replace('/file/','/poke/')+'/actions/switch.sig'," + "\{method:'POST',headers:\{'Content-Type':'text/plain'},body:f})" + ".catch(function()\{" + "if(sel)\{sel.disabled=false}" + "})}" + "var refSel=document.getElementById('ref');" + "if(refSel)\{refSel.onchange=doSwitch}" + :: build tree from flat file list + "function buildTree(files)\{" + "var root=\{_f:[],_d:\{}};" + "files.forEach(function(f)\{" + "var p=f.split('/'),n=root;" + "for(var i=0;i" + "
Loading...
';" + "fetch(A+'/data/tree/'+path).then(function(r)\{" + "if(!r.ok)throw new Error(r.status);" + "var ct=r.headers.get('content-type')||'';" + "if(ct.indexOf('text')>=0||ct.indexOf('json')>=0" + "||ct.indexOf('javascript')>=0)" + "return r.text().then(function(t)\{" + "pane.querySelector('pre').textContent=t});" + "pane.querySelector('pre').textContent='[binary '+ct+']'" + "}).catch(function(e)\{" + "pane.querySelector('pre').textContent='Error: '+e.message})}" + :: bind fetch button + setup clone button + "var fb=document.getElementById('fetch-btn');" + "if(fb)\{fb.onclick=doFetch}" + "document.querySelectorAll('.btn.primary').forEach(" + "function(b)\{b.onclick=doFetch});" + :: sidebar toggle + "var tgl=document.getElementById('toggle-tree');" + "var tpane=document.getElementById('tree-pane');" + "if(tgl&&tpane)\{tgl.onclick=function()\{" + "tpane.classList.toggle('collapsed')}}" + :: render tree if files exist + "var tp=document.getElementById('tree');" + "if(tp&&_files.length)\{" + "renderTree(buildTree(_files),tp,0,'')}" + :: SSE: watch status.json for syncing indicator + "var SK=A.replace('/file/','/keep/')+'/ui/status.json';" + "function watchStatus()\{" + "fetch(SK+'?mark=json',\{headers:\{Accept:'text/event-stream'}})" + ".then(function(r)\{" + "var rd=r.body.getReader(),dec=new TextDecoder(),buf='';" + "function pump()\{" + "rd.read().then(function(res)\{" + "if(res.done)return;" + "buf+=dec.decode(res.value,\{stream:true});" + "var ps=buf.split('\\n\\n');buf=ps.pop();" + "for(var i=0;i" + "'+headRefs.map(function(r)\{return r.replace('refs/heads/','').replace('refs/remotes/','')}).join(', ')+'':'';" + "hb.innerHTML='HEAD" + "'+curCommit.short+'" + "'+curCommit.message+''+refTxt;" + "hb.onclick=function()\{showCommitPopup(curCommit)}}" + "function refBadges(refs)\{" + "if(!refs||!refs.length)return '';" + "return refs.filter(function(r)\{return r!=='HEAD'}).map(function(r)\{" + "var label=r.replace('refs/heads/','').replace('refs/remotes/','');" + "var bg=r.indexOf('remotes')>=0?'#0969da':'#6e40c9';" + "return ''+label+''" + "}).join('')}" + "window._COMMITS.forEach(function(c,i)\{" + "var d=document.createElement('div');" + "var isHead=(c.refs||[]).indexOf('HEAD')>=0;" + "d.className='commit-entry'+(isHead?' head':'');" + "d.innerHTML=''+c.short+''" + "+refBadges(c.refs)+" + "''+c.message+'" + "'+c.author+'';" + "d.onclick=function()\{" + "document.querySelectorAll('.commit-entry.active').forEach(" + "function(e)\{e.classList.remove('active')});" + "d.classList.add('active');" + "viewCommitDiff(c.hash)};" + "cl.appendChild(d)});" + "if(window._COMMITS.length>=50)\{" + "var m=document.createElement('div');" + "m.style.cssText='padding:6px 12px;font-size:11px;opacity:.4;text-align:center;border-top:1px solid #e0e0e0';" + "m.textContent='older commits not shown...';" + "cl.appendChild(m)}}" + "function checkoutCommit(hash)\{" + "fetch(A.replace('/file/','/poke/')+'/actions/checkout.sig?mark=txt'," + "\{method:'POST',headers:\{'Content-Type':'text/plain'},body:hash})" + ".catch(function()\{})}" + "function showCommitPopup(c)\{" + "var bg=document.createElement('div');bg.className='commit-popup';" + "var rows='';" + "rows+='commit'+c.hash+'';" + "if(c.tree)rows+='tree'+c.tree+'';" + "if(c.parents&&c.parents.length)" + "rows+='parent'+(c.parents.length>1?'s':'')+''+c.parents.join('
')+'
';" + "var ae=c.authorEmail?' <'+c.authorEmail+'>':'';" + "rows+='author'+c.author+''+ae+'';" + "if(c.date)rows+='authored'+new Date(c.date).toLocaleString()+'';" + "if(c.committer&&c.committer!==c.author)\{" + "var ce=c.committerEmail?' <'+c.committerEmail+'>':'';" + "rows+='committer'+c.committer+''+ce+''}" + "if(c.commitDate)rows+='committed'+new Date(c.commitDate).toLocaleString()+'';" + "var body=(c.body||c.message||'').trim();" + "var title=body.split('\\n')[0];" + "var rest=body.split('\\n').slice(1).join('\\n').trim();" + "bg.innerHTML='
" + "" + "

'+title+'

" + "'+rows+'
" + "'+( rest?'
'+rest+'
':'' )+'
';" + "bg.querySelector('.close').onclick=function()\{bg.remove()};" + "bg.onclick=function(e)\{if(e.target===bg)bg.remove()};" + "document.body.appendChild(bg)}" + "renderCommits();" + :: status bar + popup + "function renderStatus()\{" + "var sb=document.getElementById('status-bar');" + "if(!sb||!window._STATUS)return;" + "var s=window._STATUS;" + "if(s.clean&&!s.ahead&&!s.behind)\{sb.className='status-bar';sb.innerHTML='';return}" + "sb.className=s.clean?'status-bar sync':'status-bar dirty';" + "var ns=s.staged?s.staged.length:0;" + "var nu=s.unstaged?s.unstaged.length:0;" + "var nt=s.untracked?s.untracked.length:0;" + "var parts=[];" + "if(ns)parts.push(''+ns+' staged');" + "if(nu)parts.push(''+nu+' modified');" + "if(nt)parts.push(''+nt+' untracked');" + "var h=parts.join(' | ');" + "if(s.ahead||s.behind)\{" + "h+='';" + "if(s.ahead)h+=' \\u2191'+s.ahead;" + "if(s.behind)h+=' \\u2193'+s.behind;" + "h+=''}" + "sb.innerHTML=h;sb.onclick=showStatusPopup}" + "function showStatusPopup()\{" + "var s=window._STATUS;if(!s)return;" + "var CI=window._CURRENT||\{hash:'',branch:'',remote:''};" + "var bg=document.createElement('div');" + "bg.className='commit-popup';" + "var h='
';" + "h+='';" + "h+='

status

';" + "h+='';" + "h+='';" + "if(CI.remote)\{" + "h+=''}" + "h+='
branch'+CI.branch+'
remote'+CI.remote.slice(0,7)+'';" + "if(s.ahead)h+=' \\u2191'+s.ahead;" + "if(s.behind)h+=' \\u2193'+s.behind;" + "h+='
';" + :: staged files + "if(s.staged&&s.staged.length)\{" + "h+='
Staged ('+s.staged.length+')
';" + "h+='
';" + "s.staged.forEach(function(f)\{" + "var bc=f.status==='new'?'badge-add':f.status==='deleted'?'badge-del':'badge-mod';" + "h+='
'+f.status+''+f.path+'
'});" + "h+='
'}" + :: unstaged files + "if(s.unstaged&&s.unstaged.length)\{" + "h+='
Unstaged ('+s.unstaged.length+')
';" + "h+='
';" + "s.unstaged.forEach(function(f)\{" + "var bc=f.status==='new'?'badge-add':f.status==='deleted'?'badge-del':'badge-mod';" + "h+='
'+f.status+''+f.path+'
'});" + "h+='
'}" + :: untracked files + "if(s.untracked&&s.untracked.length)\{" + "h+='
Untracked ('+s.untracked.length+')
';" + "h+='
';" + "s.untracked.forEach(function(f)\{" + "h+='
new'+f.path+'
'});" + "h+='
'}" + :: clean state + "if(s.clean)h+='
" + "working tree clean
';" + "h+='
';" + "bg.innerHTML=h;" + "bg.querySelector('.close').onclick=function()\{bg.remove()};" + "bg.onclick=function(e)\{if(e.target===bg)bg.remove()};" + "document.body.appendChild(bg)}" + "renderStatus();" + :: diff view: poke commit.sig, watch commit.json, render + "function viewCommitDiff(hash)\{" + "document.querySelectorAll('.file.active').forEach(" + "function(e)\{e.classList.remove('active')});" + "var pane=document.getElementById('content');" + "pane.innerHTML='
" + " computing diff...
';" + "fetch(A.replace('/file/','/poke/')+'/actions/diff.sig?mark=txt'," + "\{method:'POST',headers:\{'Content-Type':'text/plain'},body:hash})}" + :: + "function escHtml(s)\{" + "return s.replace(/&/g,'\\&').replace(//g,'\\>')}" + :: + "function clearDiff()\{" + "var pane=document.getElementById('content');" + "pane.innerHTML='
select a file
';" + "document.querySelectorAll('.commit-entry.active').forEach(" + "function(e)\{e.classList.remove('active')})}" + :: + "function renderDiff(d)\{" + "var pane=document.getElementById('content');" + "var h='
';" + "h+='
';" + "h+='';" + "h+=''+d.short+'';" + "h+=''+escHtml(d.message)+'';" + "h+=''+escHtml(d.author)+'';" + "h+='';" + "h+='
';" + "if(!d.files||!d.files.length)\{" + "h+='
no file changes
'}" + "else\{d.files.forEach(function(f)\{" + "var bc=f.status==='add'?'badge-add':" + "f.status==='del'?'badge-del':'badge-mod';" + "h+='
';" + "h+='
';" + "h+=''+f.status+'';" + "h+=escHtml(f.path)+'
';" + "h+='
';" + "if(f.lines)\{f.lines.forEach(function(l)\{" + "var pre=l.t==='add'?'+':l.t==='del'?'-':' ';" + "h+='
" + "'+pre+''+escHtml(l.v)+'
'})}" + "h+='
'})}" + "h+='
';pane.innerHTML=h}" + :: SSE: watch commit.json for diff results + "var CK=A.replace('/file/','/keep/')+'/ui/commit.json';" + "function watchCommit()\{" + "fetch(CK+'?mark=json',\{headers:\{Accept:'text/event-stream'}})" + ".then(function(r)\{" + "var rd=r.body.getReader(),dec=new TextDecoder(),buf='';" + "function pump()\{" + "rd.read().then(function(res)\{" + "if(res.done)return;" + "buf+=dec.decode(res.value,\{stream:true});" + "var ps=buf.split('\\n\\n');buf=ps.pop();" + "for(var i=0;i.goal-store each store is a flat file +:: +:: == GOAL DECOMPOSITION & AUDIT == +:: +:: the purpose of this system is to achieve the root goal — completely, +:: thoroughly, and efficiently. every node in the tree exists only to +:: serve that purpose. do not decompose for the sake of decomposing. +:: do not create subgoals to fill out a symmetrical tree. if a goal +:: can be achieved without further breakdown, leave it alone. if a +:: branch doesn't move the root forward, it shouldn't exist. +:: +:: not everything needs to be elaborated upfront. a goal can be a +:: placeholder that invites its own decomposition later — "plan the +:: dinner party menu" is a valid actionable goal whose output is +:: more goals. decompose just enough to act, then let the work +:: itself reveal the next level of structure. +:: +:: a goal is a predicate over states — a condition that is either met or +:: not. prospectively it's a goal, retrospectively it's a criterion. each +:: goal's start and end nodes encode this: the start node marks entry into +:: the work, the end node marks the completion condition being satisfied. +:: +:: every goal's summary MUST describe a state of the world, not an +:: activity. the summary is the criterion — reading it should tell +:: you exactly what's true when this goal is done. the description +:: field holds longer context, rationale, or notes. +:: +:: tense and voice depend on the goal's level: +:: - intermediate goals: present tense, as if evaluating from +:: within the achieved state. "fish is a normal weeknight +:: protein" not "learned to cook fish." you are there, looking +:: around, checking whether it's true. +:: - actionable goals: imperative, action-oriented. "make apple +:: tart with pate brisee from scratch" not "made apple tart." +:: these are tasks — something you sit down and do. +:: +:: -- actionable goals -- +:: +:: an actionable goal is a concrete task that can be undertaken in a +:: single focused session. for a human, this means one ultradian +:: rhythm: roughly 90 minutes, at most 4 hours. for an LLM, this +:: means completable before context compression becomes necessary — +:: a single session's worth of coherent work. if it can't be started +:: and finished (or meaningfully advanced to a clear stopping point) +:: in that window, it needs further decomposition. +:: +:: CRITICAL: a goal that describes a state requiring weeks or months +:: of effort is NOT actionable, even if it has no children yet. "can +:: make 10 weeknight dinners from memory" is an intermediate goal +:: that needs decomposition into session-sized tasks like "cook the +:: cherry tomato pasta without checking the recipe." do not confuse +:: "describes a concrete state" with "is actionable." a goal can be +:: concrete, state-based, and well-defined while still being far too +:: large for a single session. only mark actionable when someone +:: could literally sit down right now and do it. +:: +:: -- decomposing a goal (top-down) -- +:: +:: to decompose a goal one level down: factor the parent predicate into +:: component predicates along a single axis. +:: +:: each subgoal must be: +:: - strictly smaller: governs a proper subset of the parent's concern +:: - independent: satisfiable without reference to sibling implementation +:: - obviously contributing: the relationship to the parent is +:: self-evident, not argued for +:: +:: the decomposition should be maximally coarse. find the biggest pieces +:: that are still strictly smaller than the parent and can't be merged +:: without reconstituting it. this prevents skipping levels. +:: +:: at every level, a subgoal describes a state to achieve, not a step to +:: take. even at the bottom — where the solution space collapses to one +:: and the subgoal becomes a task — it's still a predicate, just narrow. +:: +:: test for correct level: if the subgoal could be satisfied by multiple +:: implementations, it's still at goal level. solution space of one = leaf +:: task. both are valid, but grain should be roughly uniform per level. +:: +:: test for skipped levels: if any subset of subgoals can be coherently +:: aggregated into an unnamed goal smaller than the parent but larger than +:: them — that intermediate was skipped. name it, insert it. +:: +:: in this system: decomposition = creating children under a parent. the +:: containment edges (parent.start -> child.start, child.end -> +:: parent.end) encode the "strict subset" relationship structurally. +:: +:: -- auditing a goal tree (bottom-up) -- +:: +:: given an existing tree, verify structural coherence from leaves to root. +:: at each node, three checks: +:: +:: 1. does every child obviously contribute to this parent? +:: look at each child: is it immediately clear what part of the parent +:: it serves? if you have to construct an argument, the child is +:: misplaced or the decomposition axis is wrong. +:: +:: 2. could any subset of children be grouped under an unnamed intermediate? +:: if yes, a level was skipped. that group should exist as a node. +:: +:: 3. are the children jointly sufficient? +:: if all children are satisfied, is there a scenario where the parent +:: still isn't? if so, a child is missing. +:: +:: 4. is each goal well-specified? +:: can you evaluate whether this goal is met without ambiguity? +:: if children seem incoherent or hard to audit, the problem may +:: not be the children — the parent itself may be vague. a fuzzy +:: parent produces fuzzy decompositions. if decomposition is +:: difficult and the difficulty traces to a lack of clarity in +:: the parent, sharpen the parent. +:: +:: recurse upward. at every level the parent-child relationship should be +:: boring — self-evident, no surprises. +:: +:: failure modes: +:: - orphan goals: children that don't obviously serve their parent. +:: reparent or delete. +:: - missing goals: a parent whose children can't jointly satisfy it. +:: add what's missing. +:: - skipped levels: children that aggregate into natural unnamed groups. +:: insert intermediate nodes. +:: - wrong axis: children that are all coupled or overlapping. the +:: decomposition cut the wrong joint. restructure. +:: +:: -- frontier health -- +:: +:: the utility of a structured goals container is in surfacing a +:: frontier that is substantial enough to offer real choice and +:: compact enough to reflect useful prioritization. if everything +:: is on the frontier, nothing is. +:: +:: for an achievable multi-session project undertaken by a single +:: agent (human or LLM), a healthy frontier is 5–12 goals. below 5, +:: one external blocker leaves you stuck. above 12, you're browsing +:: a backlog, not choosing what to do next. 5–12 maps to working +:: memory — you can scan the options and pick without scrolling. +:: +:: frontier size is a quality metric for the graph. a well-structured +:: store with real precedence links naturally produces a tight +:: frontier because the DAG is doing work — filtering the full tree +:: down to what's actually unblocked. a sloppy store produces a wide +:: frontier because everything looks independent when you haven't +:: thought about ordering. +:: +:: if the frontier is too large: +:: - add precedence links: some goals probably do depend on each +:: other, and encoding that shrinks the frontier. +:: - group siblings under intermediates: a level was skipped, +:: and inserting it sequences work naturally. +:: - accept genuine parallelism: some projects really do have +:: many independent tracks. but verify this is true, not just +:: an artifact of missing structure. +:: +:: if the frontier is too small: +:: - decompose blocked goals: something on the frontier may be +:: too large and hiding actionable sub-work. +:: - check for over-sequencing: precedence links should encode +:: real dependencies, not just preferred order. +:: +/< goals /lib/goals.hoon +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0] [~ %1]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 1) + [%fall %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/ %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html (goals-page ~ ~))))]] + [%fall %| /store [~ ~] [~ ~] empty-dir:loader] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /main.sig: create/delete stores, route JSON action pokes + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%goals /main: failed, poke to restart") + ~& > "%goals /main: ready" + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + ?+ name.p.sage + ~& > [%goals-main %unknown-mark name.p.sage] + $ + %goal-create-store + =/ name=@ta !<(@ta q.sage) + ~& > [%goals-main %creating name] + ;< now=@da bind:m get-time:io + =/ store=goal-store:goals (create-store:goals now) + =/ fname=@ta (store-fname name) + ;< ~ bind:m + (make:io [%| 0 %& /store fname] |+[%.n [[/ %goal-store] !>(store)] `[/ %goal-store]]) + $ + %goal-delete-store + =/ name=@ta !<(@ta q.sage) + ~& > [%goals-main %deleting name] + ;< ~ bind:m (cull:io [%| 0 %& /store (store-fname name)]) + $ + :: JSON pokes for web UI actions + :: + %json + =/ jon=json !<(json q.sage) + ?. ?=([%o *] jon) $ + =/ act-type=@t + (~(dug jo:json-utils jon) /action so:dejs:format '') + ?+ act-type $ + %'create-store' + =/ name=@ta (~(dog jo:json-utils jon) /name so:dejs:format) + ~& > [%goals-main %creating name] + ;< now=@da bind:m get-time:io + =/ store=goal-store:goals (create-store:goals now) + =/ fname=@ta (store-fname name) + ;< ~ bind:m + (make:io [%| 0 %& /store fname] |+[%.n [[/ %goal-store] !>(store)] `[/ %goal-store]]) + $ + %'delete-store' + =/ name=@ta (~(dog jo:json-utils jon) /name so:dejs:format) + ~& > [%goals-main %deleting name] + ;< ~ bind:m (cull:io [%| 0 %& /store (store-fname name)]) + $ + %'goal-action' + =/ store-name=@ta (~(dog jo:json-utils jon) /store so:dejs:format) + =/ act-name=@t (~(dog jo:json-utils jon) /type so:dejs:format) + ;< now=@da bind:m get-time:io + =/ act=action:goals + ?+ act-name ~|([%unknown-goal-action act-name] !!) + %'create' + :* %create + '' + (~(dug jo:json-utils jon) /parent so:dejs:format '0') + ^- (map @t json) + =/ summary=(unit @t) + (~(deg jo:json-utils jon) /summary so:dejs:format) + ?~ summary ~ + (malt ~[['summary' s+u.summary]]) + == + %'delete' + [%delete (~(dog jo:json-utils jon) /id so:dejs:format)] + %'done' + [%done (~(dog jo:json-utils jon) /id so:dejs:format) %end] + %'undone' + [%undone (~(dog jo:json-utils jon) /id so:dejs:format) %end] + %'set-actionable' + :+ %set-actionable + (~(dog jo:json-utils jon) /id so:dejs:format) + (~(dug jo:json-utils jon) /value bo:dejs:format %.y) + %'reorder' + :+ %reorder + (~(dog jo:json-utils jon) /id so:dejs:format) + (~(deg jo:json-utils jon) /before so:dejs:format) + %'update' + :+ %update + (~(dog jo:json-utils jon) /id so:dejs:format) + ^- (map @t json) + =/ data-text=(unit @t) + (~(deg jo:json-utils jon) /data so:dejs:format) + ?~ data-text ~ + =/ data-jon=json (need (de:json:html u.data-text)) + ((om:dejs:format same:dejs:format) data-jon) + == + ;< ~ bind:m + (poke:io [%| 0 %& /store (store-fname store-name)] [[/ %goal-action] !>(act)]) + $ + == + == + :: /page.html: server-rendered view, watches store/ for changes + :: + [~ %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%goals /page: failed") + ;< init=view:nexus bind:m + (keep:io /stores (cord-to-road:tarball './store/') ~) + =/ stores=(map @ta goal-store:goals) + (view-to-stores init) + =/ store-names=(list @ta) (sort ~(tap in ~(key by stores)) aor) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (goals-page store-names stores))))) + |- + ;< upd=view:nexus bind:m (take-news:io /stores) + =/ stores=(map @ta goal-store:goals) + (view-to-stores upd) + =/ store-names=(list @ta) (sort ~(tap in ~(key by stores)) aor) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (goals-page store-names stores))))) + $ + :: /store/*.goal-store: per-store process + :: + [[%store ~] @] + ?: !=(name.blot %goal-store) stay:m + ;< ~ bind:m (rise-wait:io prod "%goals /store: failed, poke to restart") + =/ store-name=@ta (store-name-from-fname name.rail) + ~& > [%goals-store store-name %ready] + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + ?. =(%goal-action name.p.sage) + ~& > [%goals-store store-name %unknown-mark name.p.sage] + $ + =/ act=action:goals !<(action:goals q.sage) + ;< store=goal-store:goals bind:m (get-state-as:io ,goal-store:goals) + ;< now=@da bind:m get-time:io + :: auto-generate ID for create with empty id + =/ act=action:goals + ?. ?=(%create -.act) act + ?. =('' id.act) act + =/ n=@da now + |- + =/ gid=@ta (crip (scow %uv `@uv`(mug n))) + ?. (~(has by store) gid) + act(id gid) + $(n (add n ~s0..0001)) + =/ result (apply:goals store act now) + ;< ~ bind:m (replace:io !>(-.result)) + ~& > [%goals-store store-name %applied -.act] + $ + == + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the goals nexus.' + ~ + %- crip + """ + GOALS NEXUS — DAG-based goal tracking with web UI + + Manages goal stores, each containing a directed acyclic graph of + goals. Page at /grubbery/api/peek/goals.goals/page.html?mark=mime + + FILES: + main.sig Store management + JSON action routing. + page.html Server-rendered goal view (manx). + + DIRECTORIES: + store/ Goal stores (flat files). + """ + [%store ~] + 'Goal stores. Each file is an independent goal collection.' + == + %| + ?+ rail.p.mana 'File under the goals nexus.' + [~ %'main.sig'] 'Goals main process. Store management + JSON action routing.' + [~ %'page.html'] 'Server-rendered goals page. Re-renders on store changes.' + == + == + -- +|% +:: store-fname: build filename from store name (e.g. 'test' -> 'test.goal-store') +:: +++ store-fname + |= name=@ta + ^- @ta + (crip "{(trip name)}.goal-store") +:: store-name-from-fname: extract store name from filename +:: +++ store-name-from-fname + |= fname=@ta + ^- @ta + =/ full=tape (trip fname) + =/ suf=tape ".goal-store" + (crip (scag (sub (lent full) (lent suf)) full)) +:: Peek a store file, return the goal-store +:: Extract stores from a view (directory subscription) +:: +++ view-to-stores + |= =view:nexus + ^- (map @ta goal-store:goals) + ?. ?=([%ball *] view) ~ + ?~ fil.ball.view ~ + =/ entries=(list [@ta content:tarball]) + ~(tap by contents.u.fil.ball.view) + =/ out=(map @ta goal-store:goals) ~ + |- + ?~ entries out + =/ [fname=@ta ct=content:tarball] i.entries + ?. =(%goal-store name.p.sage.ct) $(entries t.entries) + =/ store=goal-store:goals !<(goal-store:goals q.sage.ct) + =/ sname=@ta (store-name-from-fname fname) + $(entries t.entries, out (~(put by out) sname store)) +:: Render the full goals page +:: +++ goals-page + |= [store-names=(list @ta) stores=(map @ta goal-store:goals)] + ^- manx + =/ api=tape "/grubbery/api" + =/ base=tape "goals.goals" + ;html + ;head + ;title: Goals + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;style + ;+ ;/ style-text + == + == + ;body + ;div.container + :: store list view + :: + ;div#store-list + ;h1: Goals + ;* ?~ store-names + :~ ;p.muted: No stores yet. + == + %+ turn store-names + |= name=@ta + ^- manx + =/ store=goal-store:goals (~(got by stores) name) + =/ count=@ud + (dec ~(wyt by store)) + ;div.store-card(onclick "showStore('{(trip name)}')") + ;div.store-card-info + ;span.store-name: {(trip name)} + ;span.muted: {} goals + == + ;button.btn-del(onclick "event.stopPropagation();deleteStore('{(trip name)}')"): x + == + ;div.form-row + ;input#new-store.input(type "text", placeholder "store-name"); + ;button.btn(onclick "createStore()"): New Store + == + == + :: per-store views (hidden by default) + :: + ;* %+ turn store-names + |= name=@ta + ^- manx + =/ store=goal-store:goals (~(got by stores) name) + (render-store name store) + == + ;script + ;+ ;/ + ;: weld + "var API='{api}';var BASE='{base}';" + js-text + == + == + == + == +:: Render a single store view (hidden by default, shown via JS) +:: +++ render-store + |= [name=@ta store=goal-store:goals] + ^- manx + =/ sn=tape (trip name) + =/ root=goal:goals (get-goal:goals store root-id:goals) + =/ front=(list goal:goals) (frontier:goals store root-id:goals) + =/ tree-kids=(list manx) + ?~ children.root + :~ ;p.muted: No goals yet. + == + (render-children name store children.root 0) + =/ frontier-manx=(list manx) + ?~ front ~ + :~ ;div.frontier + ;h3.sub-header: frontier + ;* (turn front |=(g=goal:goals (render-goal-row name g 0))) + == + == + =/ root-summary=tape + =/ sv=(unit json) (~(get by data.root) 'summary') + ?. ?=([~ %s *] sv) "" + (trip p.u.sv) + =/ root-desc=tape + =/ dv=(unit json) (~(get by data.root) 'description') + ?. ?=([~ %s *] dv) "" + (trip p.u.dv) + ;div.store-view(id "store-{sn}", style "display:none") + ;div.store-header + ;button.btn(onclick "showList()"): back + ;h2: {sn} + ;div.tab-bar + ;button.tab.tab-active(id "tab-{sn}-tree", onclick "switchTab('{sn}','tree')"): tree + ;button.tab(id "tab-{sn}-gantt", onclick "switchTab('{sn}','gantt')"): gantt + == + == + ;div.store-meta(id "meta-{sn}") + ;+ ?. =(root-summary "") + ;p.store-summary: {root-summary} + ;p.store-summary.muted: No summary. + ;+ ?. =(root-desc "") + ;details.store-details + ;summary: details + ;p.store-desc: {root-desc} + == + ;span; + ;button.btn-sm(onclick "editMeta('{sn}')"): edit + == + ;div.tab-panel(id "panel-{sn}-tree") + ;* frontier-manx + ;div.tree-section + ;h3.sub-header: tree + ;* tree-kids + == + ;+ (make-add-row sn "0" 0) + ;button.btn-sm.add-btn(onclick "startAdd('{sn}','0',0)"): + add goal + == + ;div.tab-panel(id "panel-{sn}-gantt", style "display:none") + ;+ (render-gantt name store) + == + == +:: Render children recursively as a tree +:: +++ render-children + |= [store-name=@ta store=goal-store:goals ids=(list goal-id:goals) depth=@ud] + ^- (list manx) + =/ out=(list manx) ~ + =/ sn=tape (trip store-name) + =/ par-id=tape + ?~ ids "0" + =/ g=goal:goals (get-goal:goals store i.ids) + ?~ parent.g "0" + (trip u.parent.g) + |- + ?~ ids + =/ final-slot=manx (make-move-slot sn par-id "" depth) + (flop [final-slot out]) + =/ g=goal:goals (get-goal:goals store i.ids) + =/ gid=tape (trip id.g) + =/ slot=manx (make-move-slot sn par-id gid depth) + =/ row=manx (render-goal-row store-name g depth) + =/ child-depth=@ud +(depth) + =/ add=manx + (make-add-row sn gid child-depth) + =/ kids=(list manx) + ?~ children.g ~ + (render-children store-name store children.g child-depth) + =/ nested=(list manx) + ?~ kids [slot row add ~] + =/ kids-id=tape "kids-{sn}-{gid}" + :~ slot + row + ;div.kids-wrap(id kids-id) + ;+ add + ;* kids + == + == + $(ids t.ids, out (weld (flop nested) out)) +:: Render a move-target slot (hidden by default, shown in move mode) +:: +++ make-move-slot + |= [sn=tape par-id=tape before=tape depth=@ud] + ^- manx + =/ pad=@t (crip (scow %ud (mul depth 24))) + =/ slot-id=tape "slot-{sn}-{par-id}-{before}" + =/ onclick=tape "doMove('{sn}','{before}')" + ;div.move-slot(id slot-id, style "display:none;padding-left:{(trip pad)}px", onclick onclick) + ;span.slot-line: -- drop here -- + == +:: Render an inline add-child input row +:: +++ make-add-row + |= [sn=tape gid=tape depth=@ud] + ^- manx + =/ pad=@t (crip (scow %ud (mul depth 24))) + =/ row-id=@t (crip "add-{sn}-{gid}") + =/ sty=@t (crip "display:none;padding-left:{(trip pad)}px") + =/ onkey=@t (crip "addKey(event,'{sn}','{gid}')") + =/ oncancel=@t (crip "cancelAdd('{sn}','{gid}')") + ;div(class "add-row", id (trip row-id), style (trip sty)) + ;input(class "input add-input", type "text", placeholder "new child...", onkeydown (trip onkey)); + ;button(class "btn-sm", onclick (trip oncancel)): esc + == +:: Render a single goal row with indentation +:: +++ render-goal-row + |= [store-name=@ta g=goal:goals depth=@ud] + ^- manx + =/ is-done=? done.i.status.end.g + =/ is-started=? done.i.status.start.g + =/ summary=tape + =/ s=(unit json) (~(get by data.g) 'summary') + ?. ?=([~ %s *] s) "" + (trip p.u.s) + =/ status-class=tape + ?: is-done "goal-done" + ?: is-started "goal-started" + "" + =/ indent=tape (reap (mul depth 24) ' ') + =/ sn=tape (trip store-name) + =/ gid=tape (trip id.g) + =/ par-id=tape ?~(parent.g "0" (trip u.parent.g)) + =/ has-kids=? !=(~ children.g) + ;div.goal-row(class status-class, style "padding-left: {(scow %ud (mul depth 24))}px") + ;div.goal-info + ;* ?. has-kids ~ + :~ ;span.tree-toggle(onclick "toggleKids('{sn}','{gid}')", id "tog-{sn}-{gid}"): v + == + ;button.btn-copy(onclick "copyId('{gid}')", title "{gid}"): # + ;* ?. !=('' (crip summary)) ~ + :~ ;span.goal-summary: {summary} + == + ;* ?. actionable.g ~ + :~ ;span.tag: actionable + == + ;* ?. is-done ~ + :~ ;span.tag-done: done + == + ;* ?. &(is-started !is-done) ~ + :~ ;span.tag-started: started + == + == + ;div.goal-actions + ;* ?. is-done + :~ ;button.btn-sm(onclick "goalAct('{sn}','done','{gid}')"): done + == + :~ ;button.btn-sm(onclick "goalAct('{sn}','undone','{gid}')"): undo + == + ;* ?. actionable.g ~ + :~ ;button.btn-sm(onclick "goalAct('{sn}','set-actionable','{gid}',false)"): unset + == + ;* ?. !actionable.g ~ + :~ ;button.btn-sm(onclick "goalAct('{sn}','set-actionable','{gid}',true)"): actionable + == + ;button.btn-sm(onclick "startAdd('{sn}','{gid}',{(scow %ud +(depth))})"): + + ;button.btn-sm(onclick "startMove('{sn}','{gid}','{par-id}')"): m + ;button.btn-del(onclick "goalAct('{sn}','delete','{gid}')"): x + == + == +:: Render Gantt chart — position by longest dependency chain +:: +++ render-gantt + |= [name=@ta store=goal-store:goals] + ^- manx + =/ depths=(map @t @ud) (node-depths:goals store) + =/ max-depth=@ud + %+ roll ~(val by depths) + |=([d=@ud acc=@ud] (max d acc)) + =/ max-depth=@ud (max max-depth 1) + :: flatten tree with nesting depth + =/ gds=(list [goal:goals @ud]) + %- flop + =/ gid=goal-id:goals root-id:goals + =/ lvl=@ud 0 + =| acc=(list [goal:goals @ud]) + |- + =/ g=goal:goals (get-goal:goals store gid) + =/ acc ?. =(gid root-id:goals) [[g lvl] acc] acc + =/ kids=(list goal-id:goals) children.g + %+ roll (flop kids) + |= [kid=goal-id:goals acc=_acc] + ^$(gid kid, lvl +(lvl), acc acc) + ?~ gds + ;div.gantt: No goals to chart. + =/ cols=@ud +(max-depth) + =/ sn=tape (trip name) + ;div.gantt(id "gantt-{sn}", data-cols (scow %ud cols)) + ;div.gantt-controls + ;button.btn-sm(onclick "ganttZoom('{sn}',-1)"): - + ;button.btn-sm(onclick "ganttZoom('{sn}',1)"): + + ;button.btn-sm(onclick "ganttFit('{sn}')"): fit + == + ;div.gantt-scroll + ;div.gantt-row.gantt-header + ;div.gantt-label.gantt-label-header: goal + ;div.gantt-track.gantt-cols + ;* %+ turn (gulf 0 max-depth) + |= n=@ud + ;span.gantt-col: {(scow %ud n)} + == + == + ;* %+ turn gds + |= [g=goal:goals lvl=@ud] + =/ skey=@t (nkey:goals [id.g %start]) + =/ ekey=@t (nkey:goals [id.g %end]) + =/ s=@ud (~(gut by depths) skey 0) + =/ e=@ud (~(gut by depths) ekey 0) + =/ summary=tape + =/ sv=(unit json) (~(get by data.g) 'summary') + ?. ?=([~ %s *] sv) (trip id.g) + (trip p.u.sv) + =/ is-done=? done.i.status.end.g + =/ bar-class=tape + %+ weld "gantt-bar" + ?:(is-done " gantt-bar-done" "") + =/ indent=tape (scow %ud (mul lvl 12)) + =/ has-kids=? !=(~ children.g) + =/ toggle=tape + ?: has-kids "ganttToggle(this.parentNode)" + "" + =/ lbl-class=tape + ?: has-kids "gantt-label gantt-label-toggle" + "gantt-label" + ;div.gantt-row(data-lvl (scow %ud lvl)) + ;div(class lbl-class, title "{summary}", style "text-indent: {indent}px", onclick toggle): {summary} + ;div.gantt-track + ;div(class bar-class, data-start (scow %ud s), data-end (scow %ud e)) + ;+ ;/ summary + == + == + == + == + == +:: +++ js-text + ^- tape + """ + function poke(body,cb)\{ + return fetch(API+'/poke/'+BASE+'/main.sig?mark=json',\{ + method:'POST', + headers:\{'Content-Type':'application/json'}, + body:JSON.stringify(body) + }).then(function()\{setTimeout(cb||function()\{location.reload()},300)}) + } + function showStore(name)\{ + document.getElementById('store-list').style.display='none'; + document.getElementById('store-'+name).style.display='block'; + location.hash=name; + } + function showList()\{ + document.querySelectorAll('.store-view').forEach(function(e)\{e.style.display='none'}); + document.getElementById('store-list').style.display='block'; + location.hash=''; + } + function createStore()\{ + var n=document.getElementById('new-store').value.trim(); + if(!n)return; + poke(\{action:'create-store',name:n}) + } + function deleteStore(n)\{ + if(!confirm('Delete store '+n+'?'))return; + poke(\{action:'delete-store',name:n}) + } + function startAdd(store,parent,depth)\{ + var row=document.getElementById('add-'+store+'-'+parent); + row.style.display='flex'; + row.querySelector('input').focus(); + } + function cancelAdd(store,parent)\{ + var row=document.getElementById('add-'+store+'-'+parent); + row.style.display='none'; + row.querySelector('input').value=''; + } + function addKey(e,store,parent)\{ + if(e.key=='Escape')\{cancelAdd(store,parent);return} + if(e.key!='Enter')return; + var inp=e.target; + var summary=inp.value.trim(); + var b=\{action:'goal-action',store:store,type:'create',parent:parent}; + if(summary)b.summary=summary; + inp.disabled=true; + poke(b,function()\{location.hash=store;location.reload()}) + } + function copyId(id)\{ + navigator.clipboard.writeText(id).then(function()\{},function()\{prompt('Goal ID:',id)}) + } + function toggleKids(store,id)\{ + var el=document.getElementById('kids-'+store+'-'+id); + var tog=document.getElementById('tog-'+store+'-'+id); + if(!el)return; + if(el.style.display==='none')\{el.style.display='';tog.textContent='v'} + else\{el.style.display='none';tog.textContent='>'} + } + var moveState=null; + function startMove(store,id,parent)\{ + cancelMove(); + moveState=\{store:store,id:id,parent:parent}; + document.querySelectorAll('[id^="slot-'+store+'-'+parent+'-"]').forEach(function(el)\{ + el.style.display='flex' + }); + document.body.classList.add('moving'); + } + function cancelMove()\{ + if(!moveState)return; + document.querySelectorAll('.move-slot').forEach(function(el)\{el.style.display='none'}); + document.body.classList.remove('moving'); + moveState=null; + } + function doMove(store,before)\{ + if(!moveState)return; + var id=moveState.id; + cancelMove(); + var b=\{action:'goal-action',store:store,type:'reorder',id:id}; + if(before)b.before=before; + poke(b,function()\{location.hash=store;location.reload()}) + } + document.addEventListener('keydown',function(e)\{if(e.key==='Escape')cancelMove()}); + function switchTab(store,tab)\{ + document.querySelectorAll('#store-'+store+' .tab-panel').forEach(function(el)\{el.style.display='none'}); + document.getElementById('panel-'+store+'-'+tab).style.display='block'; + document.querySelectorAll('#store-'+store+' .tab').forEach(function(el)\{el.classList.remove('tab-active')}); + document.getElementById('tab-'+store+'-'+tab).classList.add('tab-active'); + if(tab==='gantt')\{if(!ganttScales[store])ganttFit(store);else ganttRender(store)} + } + var ganttScales=\{}; + function ganttRender(store)\{ + var el=document.getElementById('gantt-'+store); + if(!el)return; + var cols=parseInt(el.dataset.cols); + var scale=ganttScales[store]||40; + var w=cols*scale; + el.querySelectorAll('.gantt-track').forEach(function(t)\{t.style.width=w+'px'}); + el.querySelectorAll('.gantt-col').forEach(function(c)\{c.style.width=scale+'px'}); + el.querySelectorAll('.gantt-bar').forEach(function(b)\{ + var s=parseInt(b.dataset.start); + var e=parseInt(b.dataset.end); + b.style.left=(s*scale)+'px'; + b.style.width=(Math.max(1,(e-s+1))*scale)+'px'; + }); + } + function ganttZoom(store,dir)\{ + var scale=ganttScales[store]||40; + scale=Math.max(10,Math.min(200,scale+(dir*10))); + ganttScales[store]=scale; + ganttRender(store); + } + function ganttFit(store)\{ + var el=document.getElementById('gantt-'+store); + if(!el)return; + var cols=parseInt(el.dataset.cols); + var scroll=el.querySelector('.gantt-scroll'); + var labelW=120; + var avail=scroll.clientWidth-labelW; + ganttScales[store]=Math.max(10,Math.floor(avail/cols)); + ganttRender(store); + } + function ganttToggle(row)\{ + var lvl=parseInt(row.dataset.lvl); + var collapsed=row.classList.toggle('gantt-collapsed'); + var sib=row.nextElementSibling; + while(sib&&parseInt(sib.dataset.lvl)>lvl)\{ + sib.style.display=collapsed?'none':'flex'; + if(collapsed)sib.classList.remove('gantt-collapsed'); + sib=sib.nextElementSibling; + } + } + function editMeta(store)\{ + var meta=document.getElementById('meta-'+store); + var sumEl=meta.querySelector('.store-summary'); + var curSum=sumEl&&!sumEl.classList.contains('muted')?sumEl.textContent:''; + var descEl=meta.querySelector('.store-desc'); + var curDesc=descEl?descEl.textContent:''; + meta.innerHTML='
' + +'' + +'' + +'
' + +'' + +'' + +'
'; + } + function saveMeta(store)\{ + var summary=document.getElementById('meta-summary-'+store).value; + var desc=document.getElementById('meta-desc-'+store).value; + var data=\{}; + if(summary)data.summary=summary; + if(desc)data.description=desc; + poke(\{action:'goal-action',store:store,type:'update',id:'0',data:JSON.stringify(data)}, + function()\{location.hash=store;location.reload()}); + } + function goalAct(store,type,id,val)\{ + var b=\{action:'goal-action',store:store,type:type,id:id}; + if(val!==undefined)b.value=val; + poke(b,function()\{location.hash=store;location.reload()}) + } + (function()\{ + var h=location.hash.slice(1); + if(h)\{var el=document.getElementById('store-'+h);if(el)\{showStore(h)}} + })(); + """ +:: +++ style-text + ^- tape + ;: weld + "body \{ font-family: monospace; margin: 0; padding: 0; background: #fafafa; } " + ".container \{ max-width: 700px; margin: 0 auto; padding: 2rem; } " + "h1 \{ font-size: 1.4rem; margin: 0 0 1rem; } " + "h2 \{ font-size: 1.1rem; margin: 0; } " + ".sub-header \{ font-size: 0.85rem; margin: 0 0 4px; opacity: 0.5; } " + ".muted \{ opacity: 0.5; font-size: 0.85rem; } " + ".input \{ font-family: monospace; font-size: 0.85rem; padding: 4px 6px; border: 1px solid #ccc; border-radius: 3px; } " + ".btn \{ font-family: monospace; font-size: 0.85rem; padding: 4px 10px; cursor: pointer; border: 1px solid #ccc; border-radius: 3px; background: #fff; } " + ".btn:hover \{ background: #eee; } " + ".btn-sm \{ font-family: monospace; font-size: 0.75rem; padding: 2px 6px; cursor: pointer; border: 1px solid #ccc; border-radius: 3px; background: #fff; } " + ".btn-sm:hover \{ background: #eee; } " + ".btn-del \{ font-family: monospace; font-size: 0.75rem; padding: 2px 6px; cursor: pointer; border: 1px solid #daa; border-radius: 3px; background: #fff; color: #a33; } " + ".btn-del:hover \{ background: #fee; } " + ".store-card \{ display: flex; justify-content: space-between; align-items: center; " + "padding: 10px 14px; border: 1px solid #ddd; border-radius: 6px; background: #fff; " + "margin-bottom: 6px; cursor: pointer; } " + ".store-card:hover \{ background: #f4f8ff; border-color: #aac; } " + ".store-card-info \{ display: flex; gap: 12px; align-items: center; } " + ".store-name \{ font-weight: bold; } " + ".store-view \{ } " + ".store-header \{ display: flex; gap: 12px; align-items: center; margin-bottom: 8px; } " + ".store-meta \{ margin-bottom: 12px; display: flex; align-items: baseline; gap: 8px; flex-wrap: wrap; } " + ".store-summary \{ font-size: 0.85rem; color: #555; margin: 0; } " + ".store-details \{ width: 100%; font-size: 0.8rem; color: #666; } " + ".store-details summary \{ cursor: pointer; opacity: 0.6; font-size: 0.75rem; } " + ".store-desc \{ margin: 4px 0 0; } " + ".tree-section \{ margin-bottom: 12px; } " + ".tree-toggle \{ opacity: 0.4; font-size: 0.7rem; cursor: pointer; user-select: none; } " + ".tree-toggle:hover \{ opacity: 1; } " + ".frontier \{ margin-bottom: 12px; padding: 8px; background: #f0f8ff; border-radius: 4px; } " + ".goal-row \{ display: flex; justify-content: space-between; align-items: center; " + "padding: 4px 6px; border: 1px solid #eee; border-radius: 3px; margin-bottom: 2px; gap: 8px; } " + ".goal-done \{ opacity: 0.4; background: #f0fff0; } " + ".goal-started \{ background: #fffff0; } " + ".goal-info \{ display: flex; flex-wrap: wrap; gap: 6px; align-items: center; flex: 1; min-width: 0; } " + ".btn-copy \{ font-family: monospace; font-size: 0.65rem; padding: 1px 4px; cursor: pointer; " + "border: 1px solid #ddd; border-radius: 2px; background: #f8f8f8; color: #999; opacity: 0.5; } " + ".btn-copy:hover \{ opacity: 1; background: #eef; color: #369; } " + ".goal-actions \{ display: flex; gap: 2px; flex-shrink: 0; } " + ".tag \{ font-size: 0.7rem; padding: 1px 4px; border: 1px solid #acd; border-radius: 2px; color: #369; background: #eef; } " + ".tag-done \{ font-size: 0.7rem; padding: 1px 4px; border: 1px solid #ada; border-radius: 2px; color: #363; background: #efe; } " + ".tag-started \{ font-size: 0.7rem; padding: 1px 4px; border: 1px solid #dda; border-radius: 2px; color: #663; background: #ffe; } " + ".form-row \{ display: flex; gap: 6px; align-items: center; margin-top: 8px; } " + ".add-row \{ display: flex; gap: 6px; align-items: center; padding: 3px 6px; } " + ".add-input \{ flex: 1; } " + ".add-btn \{ margin-top: 6px; opacity: 0.5; } " + ".add-btn:hover \{ opacity: 1; } " + ".move-slot \{ padding: 2px 6px; margin: 1px 0; cursor: pointer; border: 1px dashed #aac; " + "border-radius: 3px; background: #f4f8ff; display: none; } " + ".move-slot:hover \{ background: #ddeeff; border-color: #69c; } " + ".slot-line \{ font-size: 0.7rem; opacity: 0.5; } " + ".moving .goal-row \{ opacity: 0.7; } " + ".tab-bar \{ display: flex; gap: 4px; margin-left: auto; } " + ".tab \{ font-family: monospace; font-size: 0.75rem; padding: 2px 8px; cursor: pointer; " + "border: 1px solid #ccc; border-radius: 3px; background: #fff; } " + ".tab:hover \{ background: #eee; } " + ".tab-active \{ background: #333; color: #fff; border-color: #333; } " + ".tab-active:hover \{ background: #444; } " + ".gantt \{ margin-top: 8px; border: 1px solid #ddd; border-radius: 6px; " + "background: #fff; padding: 10px; } " + ".gantt-controls \{ display: flex; gap: 4px; margin-bottom: 8px; } " + ".gantt-scroll \{ overflow-x: auto; } " + ".gantt-row \{ display: flex; align-items: center; margin-bottom: 2px; } " + ".gantt-label \{ width: 120px; min-width: 120px; flex-shrink: 0; " + "position: sticky; left: 0; background: #fff; z-index: 1; padding-right: 6px; " + "font-size: 0.75rem; height: 30px; line-height: 30px; " + "overflow: hidden; text-overflow: ellipsis; white-space: nowrap; cursor: default; } " + ".gantt-label-header \{ font-size: 0.7rem; opacity: 0.5; height: 16px; line-height: 16px; } " + ".gantt-track \{ position: relative; height: 30px; background: #f8f8f8; border-radius: 2px; flex-shrink: 0; } " + ".gantt-header .gantt-label \{ height: 16px; line-height: 16px; } " + ".gantt-header .gantt-track \{ display: flex; background: none; height: 16px; } " + ".gantt-col \{ text-align: center; font-size: 0.6rem; opacity: 0.4; " + "border-left: 1px solid #eee; } " + ".gantt-bar \{ position: absolute; top: 2px; bottom: 2px; background: #69c; " + "border-radius: 2px; font-size: 0.65rem; color: #fff; padding: 0 4px; " + "overflow: hidden; white-space: nowrap; text-overflow: ellipsis; line-height: 26px; } " + ".gantt-bar-done \{ background: #9c9; opacity: 0.6; } " + ".gantt-label-toggle \{ cursor: pointer; } " + ".gantt-label-toggle::before \{ content: '\\25BE'; margin-right: 4px; opacity: 0.5; } " + ".gantt-collapsed .gantt-label-toggle::before \{ content: '\\25B8'; } " + == +-- diff --git a/desk/gub/nex/groundwire.hoon b/desk/gub/nex/groundwire.hoon new file mode 100644 index 0000000..5a2b8ec --- /dev/null +++ b/desk/gub/nex/groundwire.hoon @@ -0,0 +1,1858 @@ +:: groundwire nexus: poll bitcoind RPC for block height, live web UI. +:: Uses the default /api/* surface — no custom HTTP binding. +:: +/< btc /lib/sur/bitcoin.hoon +/< urb /lib/sur/urb.hoon +/< btc-tx /lib/btc-tx.hoon +/< btc-rpc /lib/btc-rpc.hoon +/< urb-core /lib/urb-core.hoon +/< gw /lib/groundwire.hoon +/< unv /lib/unv.hoon +/< b173 /lib/bip/b173.hoon +/< bip32 /lib/bip32.hoon +=, btc +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'config.json'] %.n [~ [/ %json] !>(default-config)]] + [%fall %& [/ %'height.ud'] %.n [~ [/ %ud] !>(`@ud`0)]] + [%fall %& [/ %'urb-state.urb-state'] %.y [~ [/ %urb-state] !>(*state:urb)]] + [%fall %& [/ %'latest.json'] %.n [~ [/ %json] !>((pairs:enjs:format ~))]] + [%fall %& [/ %'udiffs.urb-udiffs'] %.y [~ [/ %urb-udiffs] !>(*udiffs:point:jael)]] + [%fall %| /events [~ ~] [~ ~] empty-dir:loader] + [%fall %& [/events %'main.urb-event'] %.y [~ [/ %urb-event] !>(~)]] + [%fall %| /events/ships [~ ~] [~ ~] empty-dir:loader] + [%fall %& [/ %'trace.txt'] %.n [~ [/ %txt] !>(*wain)]] + [%fall %| /wallets [~ ~] [~ ~] empty-dir:loader] + [%fall %| /points [~ ~] [~ ~] empty-dir:loader] + [%over %& [/ %'rpc.sig'] %.n [~ [/ %sig] !>(~)]] + [%over %& [/ %'reg-tester.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %| /ui/sse [~ ~] [~ ~] empty-dir:loader] + [%over %& [/ui/sse %'stats.html'] %.n [~ [/ %html] !>((crip (en-xml:html ;div;)))]] + [%over %& [/ %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html (btc-page "" ;div; ~ ~))))]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /height.ud: poll bitcoind every 2s, replace with latest block count + :: + [~ %'height.ud'] + ;< ~ bind:m (rise-wait:io prod "%groundwire /height: process failed") + :: Register as jael PKI source on startup + ;< our=@p bind:m get-our:io + ;< self=rail:tarball bind:m get-here-abs:io + ;< ~ bind:m + %- send-cards:io + =/ src=rail:tarball [path.self %'udiffs.urb-udiffs'] + [%pass /jael-src %agent [our dap:io] %poke %set-jael-source !>(src)]~ + :: + ;< cfg-seen=seen:nexus bind:m + (peek:io [%| 1 %& / %'config.json'] `[/ %json]) + =/ [url=@t auth=@t] (read-config cfg-seen) + |- + =/ req=request:http + (rpc-request:btc-rpc url auth 'getblockcount' '[]') + ;< ~ bind:m (send-request:io req) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) + ;< ~ bind:m (sleep:io ~s2) + $ + ?~ full-file.client-response + ;< ~ bind:m (sleep:io ~s2) + $ + =/ body=@t q.data.u.full-file.client-response + =/ jon=(unit json) (de:json:html body) + ?~ jon + ;< ~ bind:m (sleep:io ~s2) + $ + =/ h=(unit @ud) (parse-height:btc-rpc u.jon) + ?~ h + ;< ~ bind:m (sleep:io ~s2) + $ + ;< ~ bind:m (replace:io !>(u.h)) + ;< ~ bind:m (sleep:io ~s2) + $ + :: /urb-state.urb-state: block walker + PKI state machine. + :: Watches /height.ud for tip updates, fetches and processes + :: blocks through urb-core, and replace:io's its own state. + :: The cursor is num.block-id inside the state — no separate + :: processed.ud file needed. gain is on so anything can + :: keep:io this file for live PKI updates. + :: + [~ %'urb-state.urb-state'] + ;< ~ bind:m (rise-wait:io prod "%groundwire /urb-state: failed") + ;< cfg-seen=seen:nexus bind:m + (peek:io (cord-to-road:tarball './config.json') `[/ %json]) + =/ [url=@t auth=@t] (read-config cfg-seen) + ;< urb-state=state:urb bind:m (get-state-as:io ,state:urb) + =/ processed=@ud num.block-id.urb-state + ;< init=view:nexus bind:m + (keep:io /t (cord-to-road:tarball './height.ud') ~) + =/ tip=@ud + ?. ?=([%file *] init) 0 + =/ res=(each @ud tang) (mule |.(!<(@ud q.sage.init))) + ?:(?=(%& -.res) p.res 0) + |- + :: chain reset detection: if tip < processed, the chain was + :: blown away (e.g. regtest restart). reset our own state and + :: reprocess from 0. safe because we own this file. + ?: &((gth processed 0) (lth tip processed)) + ~& > [%groundwire-walker %chain-reset tip=tip processed=processed] + =. urb-state *state:urb + =. processed 0 + ;< ~ bind:m (replace:io !>(urb-state)) + $ + :: caught up — wait for the tip poller to advance + ?: (lte tip processed) + ;< upd=view:nexus bind:m (take-news:io /t) + ?. ?=([%file *] upd) $ + =/ new-tip=@ud !<(@ud q.sage.upd) + $(tip new-tip) + :: fetch the hash of the next block + =/ next=@ud +(processed) + =/ params=@t (en:json:html [%a ~[(numb:enjs:format next)]]) + =/ req=request:http + (rpc-request:btc-rpc url auth 'getblockhash' params) + ;< ~ bind:m (send-request:io req) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) + ~& > [%groundwire-walker %no-response next] + ;< ~ bind:m (sleep:io ~s2) + $ + ?~ full-file.client-response + ~& > [%groundwire-walker %empty-response next] + ;< ~ bind:m (sleep:io ~s2) + $ + =/ body=@t q.data.u.full-file.client-response + =/ jon=(unit json) (de:json:html body) + ?~ jon + ~& > [%groundwire-walker %bad-json next] + ;< ~ bind:m (sleep:io ~s2) + $ + =/ hash=(unit @t) (parse-string-result:btc-rpc u.jon) + ?~ hash + :: "Block height out of range" means the chain was reset + :: (e.g. regtest blown away). reset our state and restart. + ?: ?=(^ (find "out of range" (trip body))) + ~& > [%groundwire-walker %chain-reset-detected next] + =. urb-state *state:urb + =. processed 0 + ;< ~ bind:m (replace:io !>(urb-state)) + =/ height-road=road:tarball + (cord-to-road:tarball './height.ud') + ;< ~ bind:m (over:io height-road [[/ %ud] !>(`@ud`0)]) + =. tip 0 + $ + ~& > [%groundwire-walker %no-hash next body] + ;< ~ bind:m (sleep:io ~s2) + $ + :: fetch the full block contents via getblock 2 + =/ blk-params=@t + (rap 3 ~['["' u.hash '",2]']) + =/ blk-req=request:http + (rpc-request:btc-rpc url auth 'getblock' blk-params) + ;< ~ bind:m (send-request:io blk-req) + ;< blk-resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.blk-resp) + ~& > [%groundwire-walker %no-block-response next] + ;< ~ bind:m (sleep:io ~s2) + $ + ?~ full-file.blk-resp + ~& > [%groundwire-walker %empty-block-response next] + ;< ~ bind:m (sleep:io ~s2) + $ + =/ blk-body=@t q.data.u.full-file.blk-resp + =/ blk-jon=(unit json) (de:json:html blk-body) + ?~ blk-jon + ~& > [%groundwire-walker %bad-block-json next] + ;< ~ bind:m (sleep:io ~s2) + $ + =/ mblk=(unit block:btc) (parse-block:btc-rpc u.blk-jon) + ?~ mblk + ~& > [%groundwire-walker %bad-block next] + ;< ~ bind:m (sleep:io ~s2) + $ + =/ blk u.mblk + ~& > :* %groundwire-walker + %block + height.blk + hax.blk + reward=reward.blk + txs=(lent txs.blk) + == + :: run the block through urb-core pipeline + :: + =/ revs-and-block + (find-block-reveals:(abed:urb-core:urb-core urb-state) blk) + =/ init-reveals -.revs-and-block + =/ filtered-block=block:btc +.revs-and-block + ;< reveals-and-block=[reveals=(map [txid:ord:urb vout:ord:urb] [sots=(list raw-sotx:urb) value=(unit @ud)]) blk=block:btc] + bind:m + (enrich-reveals url auth init-reveals filtered-block) + =/ reveals reveals.reveals-and-block + =/ enriched=block:btc blk.reveals-and-block + ;< ~ bind:m (append-trace blk ~(wyt by reveals)) + =/ ublk=urb-block:urb + %- apply-prevouts-and-urbify:(abed:urb-core:urb-core urb-state) + [enriched reveals] + ;< precommits=(map [txid:ord:urb vout:ord:urb] [commit=urb-tx:urb precommit=urb-tx:urb]) + bind:m + (find-precommits url auth ublk) + =/ [fx=(list [id:block:btc effect:urb]) new-urb-state=state:urb] + =< abet + (handle-block:(abed:urb-core:urb-core urb-state) ublk precommits) + =. hax.block-id.new-urb-state hax.blk + ~& > [%groundwire-walker %urb-state num.block-id.new-urb-state fx=(lent fx)] + :: write per-ship point files for any effects that touched points + :: + ;< ~ bind:m (write-point-effects fx new-urb-state) + :: publish each observed sotx as a urb-event + :: + ;< ~ bind:m (emit-events ublk) + :: publish udiffs for subscribers + :: + =/ uds=udiffs:point:jael (fx-to-udiffs fx) + =/ udiffs-road=road:tarball (cord-to-road:tarball './udiffs.urb-udiffs') + ;< ~ bind:m + ?~ uds (pure:m ~) + (over:io udiffs-road [[/ %urb-udiffs] !>(uds)]) + :: publish latest block summary + :: + =/ latest-road=road:tarball (cord-to-road:tarball './latest.json') + =/ latest-jon=json + %- pairs:enjs:format + :~ ['height' (numb:enjs:format height.blk)] + ['hash' s+(en:base16:mimes:html 32^hax.blk)] + ['reward' (numb:enjs:format reward.blk)] + ['txs' (numb:enjs:format (lent txs.blk))] + == + ;< ~ bind:m (over:io latest-road [[/ %json] !>(latest-jon)]) + :: update our own state — this is the cursor AND the PKI + :: + =. urb-state new-urb-state + =. processed next + ;< ~ bind:m (replace:io !>(urb-state)) + $ + :: /rpc.sig: poke receiver for RPC proxy actions. + :: Action "mine" does getnewaddress → generatetoaddress 1. + :: + [~ %'rpc.sig'] + ;< ~ bind:m (rise-wait:io prod "%groundwire /rpc: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + ?+ name.p.sage + ~& > [%groundwire-main %unknown-mark name.p.sage] + $ + %json + =/ jon=json !<(json q.sage) + ?. ?=([%o *] jon) $ + $ + == + :: /reg-tester.sig: poke receiver for sotx test batches. + :: Takes a noun poke or JSON. For noun: + :: [sed=@uw init-utxo=(unit utxo:unv) many=many:skim-sotx:urb] + :: For JSON: {"action":"spawn","sed":N} or + :: {"action":"keys","ship":"~sampel"} (seed looked up from /seeds/). + :: Walks through each single sotx, dispatching to the right + :: commit/reveal/mine/broadcast chain. + :: + [~ %'reg-tester.sig'] + ;< ~ bind:m (rise-wait:io prod "%groundwire /reg-tester: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + =/ margs=(unit [sed=@uw acting=(unit @p) init-utxo=(unit utxo:unv) many=many:skim-sotx:urb]) + ?+ name.p.sage + ~& >>> [%reg-tester %unknown-mark name.p.sage] + ~ + %noun + =/ raw !<([sed=@uw init-utxo=(unit utxo:unv) many=many:skim-sotx:urb] q.sage) + `[sed.raw ~ init-utxo.raw many.raw] + %json + (parse-reg-tester-json !<(json q.sage)) + == + ?~ margs $ + =/ args u.margs + :: resolve acting ship -> sed + utxo by peeking wallet file + ;< [resolved-sed=@uw resolved-twk=@ resolved-utxo=(unit utxo:unv)] bind:m + =/ m (fiber:fiber:nexus ,[@uw @ (unit utxo:unv)]) + ^- form:m + ?~ acting.args (pure:m [sed.args 0 init-utxo.args]) + =/ wal-road=road:tarball + (cord-to-road:tarball (cat 3 './wallets/' (cat 3 (scot %p u.acting.args) '.urb-wallet'))) + ;< wal-seen=seen:nexus bind:m (peek:io wal-road ~) + ?. ?=([%& %file *] wal-seen) + ~& >>> [%reg-tester %no-wallet-for-ship u.acting.args] !! + =/ w !<([seed=$%([%t =@t] [%uw =@uw] [%ux =@ux]) twk=@ utxo=(unit utxo:unv)] q.sage.p.wal-seen) + =/ sd=@uw ?-(-.seed.w %uw uw.seed.w, %ux `@uw`ux.seed.w, %t `@uw`(need (rush t.seed.w dem))) + (pure:m [sd twk.w utxo.w]) + =. sed.args resolved-sed + ;< cfg-seen=seen:nexus bind:m + (peek:io [%| 1 %& / %'config.json'] `[/ %json]) + =/ [url=@t auth=@t] (read-config cfg-seen) + =/ batch=(list single:skim-sotx:urb) + ?: ?=([%batch *] many.args) bat.many.args + ~[many.args] + ~& > [%reg-tester %got-poke sed=resolved-sed acting=acting.args steps=(lent batch)] + =| cur-utxo=(unit utxo:unv) + =. cur-utxo resolved-utxo + |- ^- form:m + ?~ batch + ~& > [%reg-tester %batch-done cur-utxo] + :: save updated wallet utxo for attest actions + ;< ~ bind:m + ?~ acting.args (pure:m ~) + ?~ cur-utxo (pure:m ~) + =/ wal-road=road:tarball + (cord-to-road:tarball (cat 3 './wallets/' (cat 3 (scot %p u.acting.args) '.urb-wallet'))) + =/ wal-sage=sage:tarball [[/ %urb-wallet] !>([[%uw sed.args] resolved-twk cur-utxo])] + (over:io wal-road wal-sage) + ^$ + =* sot i.batch + ~& > [%reg-tester %dispatch -.sot] + :: derive wallet keypair from the seed, then the taproot + :: address we mine rewards to / confirm reveals against. + :: + =+ ^= [kp i] + %*(derive wallet:unv sed sed.args) + =/ tw=keypair:gw + ~(tweak-keypair p2tr:gw `x.pub.kp ~ `priv.kp) + =/ address=@t + (need (encode-taproot:b173 %regtest 32^x.pub.tw)) + ?- -.sot + %spawn + :: spawn flow — matching gw-onboard.py's 2-tx chain: + :: commit (key-path spend of funding) → + :: reveal (script-path spend exposing urb envelope) + :: + :: key0 (i=0): funding — mine to this, sign commit + :: key1 (i=1): commit internal key — tapscript key, sign reveal + :: key2 (i=2): reveal destination + :: + =/ hd (from-seed:bip32 32^sed.args) + =/ key0=keypair:gw [pub prv]:(derive-sequence:hd ~[0 0 0]) + =/ key1=keypair:gw [pub prv]:(derive-sequence:hd ~[1 0 0]) + =/ key2=keypair:gw [pub prv]:(derive-sequence:hd ~[2 0 0]) + =/ addr0=@t + %- need + (encode-taproot:b173 %regtest 32^x.q:~(tweak-pubkey p2tr:gw `x.pub.key0 ~ ~)) + :: + :: mine 1 block to key0's address + =/ gen1-params=@t (rap 3 ~['[1,"' addr0 '"]']) + =/ gen1-req=request:http + (rpc-request:btc-rpc url auth 'generatetoaddress' gen1-params) + ;< ~ bind:m (send-request:io gen1-req) + ;< gen1-resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.gen1-resp) + ~& >>> [%reg-tester %spawn-mine1-fail] !! + ?~ full-file.gen1-resp + ~& >>> [%reg-tester %spawn-mine1-empty] !! + =/ gen1-body=@t q.data.u.full-file.gen1-resp + =/ gen1-jon=(unit json) (de:json:html gen1-body) + ?~ gen1-jon + ~& >>> [%reg-tester %spawn-mine1-bad-json] !! + =/ hashes=(unit (list @ux)) (parse-hash-list:btc-rpc u.gen1-jon) + ?. ?=([~ ^] hashes) + ~& >>> [%reg-tester %spawn-mine1-no-hashes] !! + =/ block-hash=@ux i.u.hashes + :: + :: mine 100 for coinbase maturity + ;< ~ bind:m (mine-n url auth addr0 100) + :: + :: fetch funding block, parse coinbase output + =/ blk-params=@t + (rap 3 ~['["' (render-hex-octs:btc-rpc 32^block-hash) '",2]']) + =/ blk-req=request:http + (rpc-request:btc-rpc url auth 'getblock' blk-params) + ;< ~ bind:m (send-request:io blk-req) + ;< blk-resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.blk-resp) + ~& >>> [%reg-tester %spawn-getblock-fail] !! + ?~ full-file.blk-resp + ~& >>> [%reg-tester %spawn-getblock-empty] !! + =/ blk-body=@t q.data.u.full-file.blk-resp + =/ blk-jon=(unit json) (de:json:html blk-body) + ?~ blk-jon + ~& >>> [%reg-tester %spawn-getblock-bad-json] !! + =/ mblk=(unit block:btc) (parse-block:btc-rpc u.blk-jon) + ?~ mblk + ~& >>> [%reg-tester %spawn-parse-failed] !! + =/ blk u.mblk + ?~ txs.blk + ~& >>> [%reg-tester %spawn-no-txs] !! + =/ coinbase i.txs.blk + ?~ os.+.coinbase + ~& >>> [%reg-tester %spawn-no-outs] !! + =/ cb-out i.os.+.coinbase + ~& > [%reg-tester %funding-spk wid.script-pubkey.cb-out dat.script-pubkey.cb-out] + ~& > [%reg-tester %funding-value value.cb-out] + :: + :: build walt for ed25519 sotx signing — uses PARSED + :: on-chain scriptpubkey so spkh matches what the reader sees + =/ funding-out=output:gw + =| o=output:gw + o(script-pubkey script-pubkey.cb-out, value value.cb-out, internal-keys key0) + =/ funding-utxo=utxo:unv + [`outpoint:gw`[id.coinbase 0] funding-out] + =/ twk=@ + (rap 3 ~[%9 ~tyr %urb-watcher %btc %gw %9 id.coinbase 0 0]) + =/ wal + (nu-twk:walt:unv 0 twk (nu:wallet:unv sed.args 3 funding-utxo)) + :: + :: build spawn sotx — walt signs with ed25519 identity + =/ spawn-sot=sotx:urb + (spawn:unv-tx:wal [*output:gw `0 0 0]) + ~& > [%reg-tester %ship fig:wal] + :: + :: build urb envelope script + tapscript spend script + =/ envelope-script + (make-unv-script:unv spawn-sot ~) + =/ spend-scr + (make-spend-script:unv x.pub.key1 envelope-script) + :: + :: commit output: tapscript(key1, spend-scr) + =/ commit-spk=octs + ~(scriptpubkey p2tr:gw `x.pub.key1 `spend-scr ~) + =/ commit-value=@ud + (sub value.cb-out 224) + =/ commit-out=output:gw + =| o=output:gw + %_ o + script-pubkey commit-spk + value commit-value + spend-script `spend-scr + internal-keys key1 + == + :: + :: build commit tx: key-path spend of coinbase → commit output + =/ cb-prevout=outpoint:gw [id.coinbase 0] + =| commit-tx=tx:gw + =. commit-tx + (~(add-input-1 build:gw commit-tx) [cb-prevout funding-out] ~ ~) + =. commit-tx + (~(add-output-1 build:gw commit-tx) commit-out) + =/ eny=@ (shas %reg-tester-eny sed.args) + =^ commit-tx eny (~(finalize build:gw commit-tx) eny) + =/ commit-raw=octs (txn:encode:gw commit-tx) + =/ commit-txid=@ux (txid:encode:gw commit-tx) + ~& > [%reg-tester %commit-txid commit-txid] + :: + :: reveal output: plain P2TR to key2 + =/ reveal-spk=octs + ~(scriptpubkey p2tr:gw `x.pub.key2 ~ ~) + =/ reveal-value=@ud + (sub commit-value 600) + =/ reveal-out=output:gw + =| o=output:gw + o(script-pubkey reveal-spk, value reveal-value, internal-keys key2) + :: + :: build reveal tx: script-path spend of commit → reveal output + =/ cm-prevout=outpoint:gw [commit-txid 0] + =| reveal-tx=tx:gw + =. reveal-tx + (~(add-input-1 build:gw reveal-tx) [cm-prevout commit-out] ~ ~) + =. reveal-tx + (~(add-output-1 build:gw reveal-tx) reveal-out) + =^ reveal-tx eny (~(finalize build:gw reveal-tx) eny) + =/ reveal-raw=octs (txn:encode:gw reveal-tx) + =/ reveal-txid=@ux (txid:encode:gw reveal-tx) + ~& > [%reg-tester %reveal-txid reveal-txid] + :: + :: broadcast commit then reveal, mine 8 confirmations + ;< ~ bind:m (broadcast-raw-tx url auth commit-raw) + ;< ~ bind:m (broadcast-raw-tx url auth reveal-raw) + ;< ~ bind:m (mine-n url auth addr0 8) + ~& > [%reg-tester %spawn-done] + :: save wallet (seed + utxo) for this ship + =/ spawn-ship=@p fig:wal + =/ final-utxo=utxo:unv [`outpoint:gw`[reveal-txid 0] reveal-out] + =/ wal-road=road:tarball + (cord-to-road:tarball (cat 3 './wallets/' (cat 3 (scot %p spawn-ship) '.urb-wallet'))) + =/ wal-sage=sage:tarball [[/ %urb-wallet] !>([[%uw sed.args] twk `final-utxo])] + ;< wal-seen=seen:nexus bind:m (peek:io wal-road ~) + ;< ~ bind:m + ?: ?=([%& %file *] wal-seen) + (over:io wal-road wal-sage) + (make:io wal-road [%| gain=%.n wal-sage ~]) + ~& > [%reg-tester %saved-wallet spawn-ship] + $(batch t.batch, cur-utxo `final-utxo) + :: + %keys + ?~ cur-utxo + ~& >>> [%reg-tester %keys-needs-utxo] !! + =/ wal (nu-twk:walt:unv 0 resolved-twk (nu:wallet:unv sed.args i u.cur-utxo)) + =^ keys-commit-out wal (keys:btc:wal breach.sot) + =^ keys-reveal-tx wal (spend:btc:wal keys-commit-out) + =^ keyspend-commit-out wal make-key-out:btc:wal + =^ keyspend-reveal-tx wal (spend:btc:wal keyspend-commit-out) + =/ final-utxo=utxo:unv utxo:wal:wal + ;< ~ bind:m (broadcast-raw-tx url auth keys-reveal-tx) + ;< ~ bind:m (broadcast-raw-tx url auth keyspend-reveal-tx) + ;< ~ bind:m (mine-n url auth address 8) + ~& > [%reg-tester %keys-done] + $(batch t.batch, cur-utxo `final-utxo) + :: + %adopt + ?~ cur-utxo + ~& >>> [%reg-tester %adopt-needs-utxo] !! + =/ wal (nu-twk:walt:unv 0 resolved-twk (nu:wallet:unv sed.args i u.cur-utxo)) + =^ adopt-commit-out wal (adopt:btc:wal ship.sot) + =^ adopt-reveal-tx wal (spend:btc:wal adopt-commit-out) + =^ keyspend-commit-out wal make-key-out:btc:wal + =^ keyspend-reveal-tx wal (spend:btc:wal keyspend-commit-out) + =/ final-utxo=utxo:unv utxo:wal:wal + ;< ~ bind:m (broadcast-raw-tx url auth adopt-reveal-tx) + ;< ~ bind:m (broadcast-raw-tx url auth keyspend-reveal-tx) + ;< ~ bind:m (mine-n url auth address 8) + ~& > [%reg-tester %adopt-done] + $(batch t.batch, cur-utxo `final-utxo) + :: + %escape + ?~ cur-utxo + ~& >>> [%reg-tester %escape-needs-utxo] !! + =/ wal (nu-twk:walt:unv 0 resolved-twk (nu:wallet:unv sed.args i u.cur-utxo)) + =^ escape-commit-out wal (escape:btc:wal parent.sot) + =^ escape-reveal-tx wal (spend:btc:wal escape-commit-out) + =^ keyspend-commit-out wal make-key-out:btc:wal + =^ keyspend-reveal-tx wal (spend:btc:wal keyspend-commit-out) + =/ final-utxo=utxo:unv utxo:wal:wal + ;< ~ bind:m (broadcast-raw-tx url auth escape-reveal-tx) + ;< ~ bind:m (broadcast-raw-tx url auth keyspend-reveal-tx) + ;< ~ bind:m (mine-n url auth address 8) + ~& > [%reg-tester %escape-done] + $(batch t.batch, cur-utxo `final-utxo) + :: + %fief + ?~ cur-utxo + ~& >>> [%reg-tester %fief-needs-utxo] !! + =/ wal (nu-twk:walt:unv 0 resolved-twk (nu:wallet:unv sed.args i u.cur-utxo)) + =^ fief-commit-out wal (fief:btc:wal fief.sot) + =^ fief-reveal-tx wal (spend:btc:wal fief-commit-out) + =^ keyspend-commit-out wal make-key-out:btc:wal + =^ keyspend-reveal-tx wal (spend:btc:wal keyspend-commit-out) + =/ final-utxo=utxo:unv utxo:wal:wal + ;< ~ bind:m (broadcast-raw-tx url auth fief-reveal-tx) + ;< ~ bind:m (broadcast-raw-tx url auth keyspend-reveal-tx) + ;< ~ bind:m (mine-n url auth address 8) + ~& > [%reg-tester %fief-done] + $(batch t.batch, cur-utxo `final-utxo) + :: + %cancel-escape + ?~ cur-utxo + ~& >>> [%reg-tester %cancel-escape-needs-utxo] !! + =/ wal (nu-twk:walt:unv 0 resolved-twk (nu:wallet:unv sed.args i u.cur-utxo)) + =/ cancel-sot=sotx:urb (cancel-escape:unv-tx:wal parent.sot) + =/ [cancel-commit-out=output:gw new-inner=_wal:wal] + (build-output:wal:wal `(make-unv-script:unv cancel-sot ~)) + =. wal wal(wal new-inner) + =^ cancel-reveal-tx wal (spend:btc:wal cancel-commit-out) + =^ keyspend-commit-out wal make-key-out:btc:wal + =^ keyspend-reveal-tx wal (spend:btc:wal keyspend-commit-out) + =/ final-utxo=utxo:unv utxo:wal:wal + ;< ~ bind:m (broadcast-raw-tx url auth cancel-reveal-tx) + ;< ~ bind:m (broadcast-raw-tx url auth keyspend-reveal-tx) + ;< ~ bind:m (mine-n url auth address 8) + ~& > [%reg-tester %cancel-escape-done] + $(batch t.batch, cur-utxo `final-utxo) + :: + %reject + ?~ cur-utxo + ~& >>> [%reg-tester %reject-needs-utxo] !! + =/ wal (nu-twk:walt:unv 0 resolved-twk (nu:wallet:unv sed.args i u.cur-utxo)) + =/ reject-sot=sotx:urb (reject:unv-tx:wal ship.sot) + =/ [reject-commit-out=output:gw new-inner=_wal:wal] + (build-output:wal:wal `(make-unv-script:unv reject-sot ~)) + =. wal wal(wal new-inner) + =^ reject-reveal-tx wal (spend:btc:wal reject-commit-out) + =^ keyspend-commit-out wal make-key-out:btc:wal + =^ keyspend-reveal-tx wal (spend:btc:wal keyspend-commit-out) + =/ final-utxo=utxo:unv utxo:wal:wal + ;< ~ bind:m (broadcast-raw-tx url auth reject-reveal-tx) + ;< ~ bind:m (broadcast-raw-tx url auth keyspend-reveal-tx) + ;< ~ bind:m (mine-n url auth address 8) + ~& > [%reg-tester %reject-done] + $(batch t.batch, cur-utxo `final-utxo) + :: + %detach + ?~ cur-utxo + ~& >>> [%reg-tester %detach-needs-utxo] !! + =/ wal (nu-twk:walt:unv 0 resolved-twk (nu:wallet:unv sed.args i u.cur-utxo)) + =/ detach-sot=sotx:urb (detach:unv-tx:wal ship.sot) + =/ [detach-commit-out=output:gw new-inner=_wal:wal] + (build-output:wal:wal `(make-unv-script:unv detach-sot ~)) + =. wal wal(wal new-inner) + =^ detach-reveal-tx wal (spend:btc:wal detach-commit-out) + =^ keyspend-commit-out wal make-key-out:btc:wal + =^ keyspend-reveal-tx wal (spend:btc:wal keyspend-commit-out) + =/ final-utxo=utxo:unv utxo:wal:wal + ;< ~ bind:m (broadcast-raw-tx url auth detach-reveal-tx) + ;< ~ bind:m (broadcast-raw-tx url auth keyspend-reveal-tx) + ;< ~ bind:m (mine-n url auth address 8) + ~& > [%reg-tester %detach-done] + $(batch t.batch, cur-utxo `final-utxo) + :: + %set-mang + ?~ cur-utxo + ~& >>> [%reg-tester %set-mang-needs-utxo] !! + =/ wal (nu-twk:walt:unv 0 resolved-twk (nu:wallet:unv sed.args i u.cur-utxo)) + =/ mang-sot=sotx:urb (set-mang:unv-tx:wal mang.sot) + =/ [mang-commit-out=output:gw new-inner=_wal:wal] + (build-output:wal:wal `(make-unv-script:unv mang-sot ~)) + =. wal wal(wal new-inner) + =^ mang-reveal-tx wal (spend:btc:wal mang-commit-out) + =^ keyspend-commit-out wal make-key-out:btc:wal + =^ keyspend-reveal-tx wal (spend:btc:wal keyspend-commit-out) + =/ final-utxo=utxo:unv utxo:wal:wal + ;< ~ bind:m (broadcast-raw-tx url auth mang-reveal-tx) + ;< ~ bind:m (broadcast-raw-tx url auth keyspend-reveal-tx) + ;< ~ bind:m (mine-n url auth address 8) + ~& > [%reg-tester %set-mang-done] + $(batch t.batch, cur-utxo `final-utxo) + == + :: /ui/sse/stats.html: aggregated stats fragment served over + :: SSE to the dashboard. Watches all chain + urb files and + :: re-renders a single HTML fragment so the browser only + :: needs one event-stream connection. + :: + [[%ui %sse ~] %'stats.html'] + ;< ~ bind:m (rise-wait:io prod "%groundwire /ui/sse/stats: failed") + ;< height=view:nexus bind:m + (keep:io /h (cord-to-road:tarball '../../height.ud') ~) + ;< urb=view:nexus bind:m + (keep:io /u (cord-to-road:tarball '../../urb-state.urb-state') ~) + ;< ~ bind:m + %- replace:io + !>((crip (en-xml:html (stats-fragment (extract-ud height) (extract-urb urb))))) + |- + ;< [tag=?(%h %u) =view:nexus] bind:m + (take-stats-news /h /u) + =? height =(tag %h) view + =? urb =(tag %u) view + ;< ~ bind:m + %- replace:io + !>((crip (en-xml:html (stats-fragment (extract-ud height) (extract-urb urb))))) + $ + :: /page.html: static shell with reg-tester forms. Re-renders + :: when SSE fragments or seeds directory change. + :: + [~ %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%groundwire /page: failed") + ;< here=rail:tarball bind:m get-here-abs:io + =/ nexus-root=tape (spud path.here) + ;< sse=view:nexus bind:m + (keep:io /sse (cord-to-road:tarball './ui/sse/') ~) + ;< seeds=view:nexus bind:m + (keep:io /seeds (cord-to-road:tarball './wallets/') ~) + ;< points=view:nexus bind:m + (keep:io /points (cord-to-road:tarball './points/') ~) + ;< ~ bind:m + (replace:io !>((crip (en-xml:html (btc-page nexus-root (extract-sse-manx sse 'stats.html') (extract-ships seeds) (extract-points points)))))) + |- + ;< [tag=?(%sse %seeds %points) =view:nexus] bind:m + (take-any-news /sse /seeds /points) + =? sse =(tag %sse) view + =? seeds =(tag %seeds) view + =? points =(tag %points) view + ;< ~ bind:m + (replace:io !>((crip (en-xml:html (btc-page nexus-root (extract-sse-manx sse 'stats.html') (extract-ships seeds) (extract-points points)))))) + $ + == + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the bitcoind nexus.' + ~ + %- crip + """ + BITCOIND NEXUS — Bitcoin PKI state machine with live web UI + + Maintains urb protocol PKI state by scanning Bitcoin blocks. + The walker fiber at /urb-state.urb-state owns the PKI state + and uses replace:io — gain is on so anything can keep:io it + for live updates. Per-ship point files live under /points/. + + FILES: + config.json RPC connection settings (url, auth). + height.ud Tip poller — polls getblockcount every 2s. + urb-state.urb-state Walker + PKI state. Cursor is + num.block-id inside the state. + Gain on — subscribable. + points/ Per-ship point files. Gain on. + latest.json Last processed block summary. + rpc.sig RPC proxy poke receiver. + reg-tester.sig Spawn/test poke receiver. + page.html Dashboard shell. + + Usage from the browser: + GET /grubbery/api/file/groundwire.groundwire/page.html + SSE /grubbery/api/keep/groundwire.groundwire/urb-state.urb-state?mark=json + POKE /grubbery/api/poke/groundwire.groundwire/reg-tester.sig?mark=json + """ + == + %| + ?+ rail.p.mana 'File under the bitcoind nexus.' + [~ %'ver.ud'] 'Schema version. Mark: ud.' + [~ %'config.json'] 'RPC connection settings (url, auth). Mark: json.' + [~ %'height.ud'] 'Tip poller. Mark: ud. Polls every 2s.' + [~ %'urb-state.urb-state'] 'Walker + PKI state. Gain on. Mark: urb-state.' + [~ %'latest.json'] 'Last processed block summary. Mark: json.' + [~ %'rpc.sig'] 'RPC proxy poke receiver. Mark: sig.' + [~ %'reg-tester.sig'] 'Spawn/test poke receiver. Mark: sig.' + [~ %'page.html'] 'Dashboard shell. Mark: manx.' + == + == + -- +|% +:: +:: Wait for news on either stats-fragment dependency (height or +:: urb state). Returns a tag indicating which file bumped. +:: +++ take-stats-news + |= [h=wire u=wire] + =/ m (fiber:fiber:nexus ,[?(%h %u) view:nexus]) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %news * *] + ?: =(h wire.u.in) [%done %h view.u.in] + ?: =(u wire.u.in) [%done %u view.u.in] + [%skip ~] + == +:: +:: Extract a @ud from a kept file view, defaulting to 0 on missing +:: or mismatched shape. +:: +++ extract-ud + |= =view:nexus + ^- @ud + ?. ?=([%file *] view) 0 + (fall (mole |.(!<(@ud q.sage.view))) 0) +:: +:: Extract a urb state:urb from a kept urb-state file view. +:: +++ extract-urb + |= =view:nexus + ^- state:urb + ?. ?=([%file *] view) *state:urb + (fall (mole |.(!<(state:urb q.sage.view))) *state:urb) +:: +:: Extract a named manx fragment from a kept sse directory view, +:: defaulting to an empty div. +:: +++ extract-sse-manx + |= [=view:nexus name=@ta] + ^- manx + ?. ?=([%ball *] view) ;div; + =/ =lump:tarball (fall fil.ball.view *lump:tarball) + =/ ct=(unit content:tarball) (~(get by contents.lump) name) + ?~ ct ;div; + (fall (mole |.((need (de-xml:html !<(@t q.sage.u.ct))))) ;div;) +:: +:: Extract ship names from a kept wallets directory view. +:: +++ extract-ships + |= =view:nexus + ^- (list @p) + ?. ?=([%ball *] view) ~ + =/ =lump:tarball (fall fil.ball.view *lump:tarball) + %+ murn ~(tap by contents.lump) + |= [name=@ta =content:tarball] + ?. ?=(%urb-wallet name.p.sage.content) ~ + =/ raw=tape (trip name) + =/ ext=tape ".urb-wallet" + (slaw %p (crip (scag (sub (lent raw) (lent ext)) raw))) +:: +:: Extract ship names from a kept points directory view. +:: +++ extract-points + |= =view:nexus + ^- (list @p) + ?. ?=([%ball *] view) ~ + =/ =lump:tarball (fall fil.ball.view *lump:tarball) + %+ murn ~(tap by contents.lump) + |= [name=@ta =content:tarball] + ?. ?=(%json name.p.sage.content) ~ + =/ raw=tape (trip name) + =/ ext=tape ".json" + (slaw %p (crip (scag (sub (lent raw) (lent ext)) raw))) +:: +:: Fiber: wait for news on /sse, /seeds, or /points wire. +:: +++ take-any-news + |= [a=wire b=wire c=wire] + =/ m (fiber:fiber:nexus ,[?(%sse %seeds %points) view:nexus]) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %news * *] + ?: =(a wire.u.in) [%done %sse view.u.in] + ?: =(b wire.u.in) [%done %seeds view.u.in] + ?: =(c wire.u.in) [%done %points view.u.in] + [%skip ~] + == +:: +:: Default bitcoind connection: regtest on localhost, spvwallet creds. +:: +++ default-config + ^- json + %- pairs:enjs:format + :~ ['url' s+'http://localhost:18443/'] + ['auth' s+'Basic Yml0Y29pbnJwYzpiaXRjb2lucnBj'] + == +:: +:: Extract (url, auth) from a peeked config.json seen, falling back +:: to default values for any missing or malformed field. +:: +++ read-config + |= =seen:nexus + ^- [url=@t auth=@t] + =/ fallback [url='http://localhost:18443/' auth='Basic Yml0Y29pbnJwYzpiaXRjb2lucnBj'] + ?. ?=([%& %file *] seen) fallback + =/ jon !<(json q.sage.p.seen) + ?. ?=([%o *] jon) fallback + =/ url=@t + =/ u=(unit json) (~(get by p.jon) 'url') + ?~ u url.fallback + ?. ?=([%s *] u.u) url.fallback + p.u.u + =/ auth=@t + =/ a=(unit json) (~(get by p.jon) 'auth') + ?~ a auth.fallback + ?. ?=([%s *] u.a) auth.fallback + p.u.a + [url auth] +:: +:: Parse a reg-tester json poke into the args shape. +:: Spawn: {"action":"spawn","sed":N} +:: Others: {"action":"keys","ship":"~sampel"} — sed resolved from seeds dir. +:: escape adds "parent", adopt adds "adoptee", fief adds "ip"/"port". +:: +++ parse-reg-tester-json + |= =json + ^- (unit [sed=@uw acting=(unit @p) init-utxo=(unit utxo:unv) many=many:skim-sotx:urb]) + ?. ?=([%o *] json) ~ + =/ act-j=(unit ^json) (~(get by p.json) 'action') + ?~ act-j ~ + ?. ?=([%s *] u.act-j) ~ + :: parse optional sed (required for spawn) + =/ sed-j=(unit ^json) (~(get by p.json) 'sed') + =/ sed=@uw + ?~ sed-j `@uw`0 + ?: ?=([%n *] u.sed-j) + `@uw`(need (rush p.u.sed-j dem)) + ?: ?=([%s *] u.sed-j) + `@uw`(need (rush p.u.sed-j dem)) + `@uw`0 + :: parse optional ship (required for non-spawn actions) + =/ ship-j=(unit ^json) (~(get by p.json) 'ship') + =/ acting=(unit @p) + ?~ ship-j ~ + ?. ?=([%s *] u.ship-j) ~ + (slaw %p p.u.ship-j) + ?+ p.u.act-j ~ + %spawn + ?: =(sed `@uw`0) ~ :: sed required for spawn + `[sed ~ ~ [%spawn 0 ~ 0x0 ~ 0 0]] + :: + %keys + `[`@uw`0 acting ~ [%keys *pass %.n]] + :: + %'keys-breach' + `[`@uw`0 acting ~ [%keys *pass %.y]] + :: + %escape + =/ parent-j=(unit ^json) (~(get by p.json) 'parent') + =/ parent=ship + ?~ parent-j ~tyr + ?. ?=([%s *] u.parent-j) ~tyr + (fall (slaw %p p.u.parent-j) ~tyr) + `[`@uw`0 acting ~ [%escape parent ~]] + :: + %adopt + =/ adoptee-j=(unit ^json) (~(get by p.json) 'adoptee') + ?~ adoptee-j ~ + ?. ?=([%s *] u.adoptee-j) ~ + =/ adoptee=ship (need (slaw %p p.u.adoptee-j)) + `[`@uw`0 acting ~ [%adopt adoptee]] + :: + %fief + =/ type-j=(unit ^json) (~(get by p.json) 'fief-type') + =/ port-j=(unit ^json) (~(get by p.json) 'port') + =/ port=@ud + ?~ port-j 8.080 + ?. ?=([%n *] u.port-j) 8.080 + (fall (rush p.u.port-j dem) 8.080) + =/ type=@t ?~(type-j 'if' ?:(?=([%s *] u.type-j) p.u.type-j 'if')) + ?+ type + `[`@uw`0 acting ~ [%fief ~]] + :: + %if + =/ ip-j=(unit ^json) (~(get by p.json) 'addr') + =/ ip=@if + ?~ ip-j .1.2.3.4 + ?. ?=([%s *] u.ip-j) .1.2.3.4 + (fall (slaw %if (cat 3 '.' p.u.ip-j)) .1.2.3.4) + `[`@uw`0 acting ~ [%fief `[%if ip port]]] + :: + %is + =/ ip-j=(unit ^json) (~(get by p.json) 'addr') + =/ ip=@is + ?~ ip-j `@is`1 + ?. ?=([%s *] u.ip-j) `@is`1 + (fall (slaw %is (cat 3 '.' p.u.ip-j)) `@is`1) + `[`@uw`0 acting ~ [%fief `[%is ip port]]] + :: + %turf + =/ dom-j=(unit ^json) (~(get by p.json) 'addr') + =/ dom=@t + ?~ dom-j 'example.com' + ?. ?=([%s *] u.dom-j) 'example.com' + p.u.dom-j + :: split domain on '.' and reverse for tld-first turf + =/ parts=(list @t) + %+ turn + (flop (rash dom (more dot (cook crip (star ;~(less dot prn)))))) + |=(a=@t a) + `[`@uw`0 acting ~ [%fief `[%turf ~[parts] port]]] + == + :: + %'cancel-escape' + =/ parent-j=(unit ^json) (~(get by p.json) 'parent') + =/ parent=ship + ?~ parent-j ~tyr + ?. ?=([%s *] u.parent-j) ~tyr + (fall (slaw %p p.u.parent-j) ~tyr) + `[`@uw`0 acting ~ [%cancel-escape parent]] + :: + %reject + =/ ship-j=(unit ^json) (~(get by p.json) 'rejectee') + ?~ ship-j ~ + ?. ?=([%s *] u.ship-j) ~ + =/ rej=^ship (need (slaw %p p.u.ship-j)) + `[`@uw`0 acting ~ [%reject rej]] + :: + %detach + =/ ship-j=(unit ^json) (~(get by p.json) 'detachee') + ?~ ship-j ~ + ?. ?=([%s *] u.ship-j) ~ + =/ det=^ship (need (slaw %p p.u.ship-j)) + `[`@uw`0 acting ~ [%detach det]] + :: + %'set-mang' + =/ mang-type-j=(unit ^json) (~(get by p.json) 'mang-type') + =/ mang-type=@t ?~(mang-type-j 'clear' ?:(?=([%s *] u.mang-type-j) p.u.mang-type-j 'clear')) + ?+ mang-type + `[`@uw`0 acting ~ [%set-mang ~]] + %clear `[`@uw`0 acting ~ [%set-mang ~]] + %pass + =/ pass-j=(unit ^json) (~(get by p.json) 'mang-pass') + ?~ pass-j `[`@uw`0 acting ~ [%set-mang ~]] + ?. ?=([%s *] u.pass-j) `[`@uw`0 acting ~ [%set-mang ~]] + =/ p=(unit @ux) (slaw %ux p.u.pass-j) + ?~ p `[`@uw`0 acting ~ [%set-mang ~]] + `[`@uw`0 acting ~ [%set-mang `[%pass u.p]]] + :: + %sont + =/ txid-j=(unit ^json) (~(get by p.json) 'mang-txid') + =/ vout-j=(unit ^json) (~(get by p.json) 'mang-vout') + =/ off-j=(unit ^json) (~(get by p.json) 'mang-off') + ?~ txid-j `[`@uw`0 acting ~ [%set-mang ~]] + ?. ?=([%s *] u.txid-j) `[`@uw`0 acting ~ [%set-mang ~]] + =/ txid=(unit @ux) (slaw %ux p.u.txid-j) + ?~ txid `[`@uw`0 acting ~ [%set-mang ~]] + =/ vout=@ud + ?~ vout-j 0 + ?. ?=([%n *] u.vout-j) 0 + (fall (rush p.u.vout-j dem) 0) + =/ off=@ud + ?~ off-j 0 + ?. ?=([%n *] u.off-j) 0 + (fall (rush p.u.off-j dem) 0) + `[`@uw`0 acting ~ [%set-mang `[%sont u.txid vout off]]] + == + == +:: +:: Fiber helper: POST sendrawtransaction with a raw tx (octs). +:: Crashes on network or RPC failure. +:: +++ broadcast-raw-tx + |= [url=@t auth=@t raw=octs] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ params=@t + (rap 3 ~['["' (render-hex-octs:btc-rpc raw) '"]']) + =/ req=request:http + (rpc-request:btc-rpc url auth 'sendrawtransaction' params) + ;< ~ bind:m (send-request:io req) + ;< resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.resp) + ~& >>> [%broadcast-raw-tx %no-response] !! + ?~ full-file.resp + ~& >>> [%broadcast-raw-tx %empty-response] !! + =/ body=@t q.data.u.full-file.resp + =/ jon=(unit json) (de:json:html body) + ?~ jon + ~& >>> [%broadcast-raw-tx %bad-json body] !! + =/ txid=(unit @t) (parse-string-result:btc-rpc u.jon) + ?~ txid + ~& >>> [%broadcast-raw-tx %no-txid body] !! + ~& > [%broadcast-raw-tx %ok u.txid] + (pure:m ~) +:: +:: Fiber helper: getrawtransaction false → tx:btc. +:: Uses verbose=false so the result is a hex string which we +:: decode via decodew:txu:btc-tx. +:: +++ get-raw-tx + |= [url=@t auth=@t =txid:ord:urb] + =/ m (fiber:fiber:nexus ,(unit tx:btc)) + ^- form:m + =/ params=@t + (rap 3 ~['["' (render-hex-octs:btc-rpc 32^txid) '",false]']) + =/ req=request:http + (rpc-request:btc-rpc url auth 'getrawtransaction' params) + ;< ~ bind:m (send-request:io req) + ;< resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.resp) (pure:m ~) + ?~ full-file.resp (pure:m ~) + =/ body=@t q.data.u.full-file.resp + =/ jon=(unit json) (de:json:html body) + ?~ jon (pure:m ~) + =/ hex=(unit @t) (parse-string-result:btc-rpc u.jon) + ?~ hex (pure:m ~) + =/ raw=hexb (hex-cord-to-hexb:btc-rpc u.hex) + (pure:m `[txid (decodew:txu:btc-tx raw)]) +:: +:: Fiber helper: enrich a reveals map by fetching the prev-tx +:: for each input whose reveal entry is missing its input value. +:: Ported from groundwire's urb-watcher +convert-block loop. +:: +++ enrich-reveals + |= $: url=@t + auth=@t + reveals=(map [txid:ord:urb vout:ord:urb] [sots=(list raw-sotx:urb) value=(unit @ud)]) + blk=block:btc + == + =/ m + %- fiber:fiber:nexus + ,[reveals=(map [txid:ord:urb vout:ord:urb] [sots=(list raw-sotx:urb) value=(unit @ud)]) blk=block:btc] + ^- form:m + ?~ txs.blk (pure:m [reveals blk]) + :: skip the coinbase tx; it has no prevouts + =/ txs t.txs.blk + |- ^- form:m + ?~ txs (pure:m [reveals blk]) + =/ inputs is.i.txs + |- ^- form:m + ?~ inputs ^$(txs t.txs) + =/ rev (~(get by reveals) [txid pos]:i.inputs) + ?: &(?=(^ rev) ?=(^ value.u.rev)) + $(inputs t.inputs) + ;< prev-tx=(unit tx:btc) bind:m + (get-raw-tx url auth txid.i.inputs) + ?~ prev-tx + ~& >>> [%enrich-reveals %prev-tx-missing txid.i.inputs] !! + =/ prev-outputs os.u.prev-tx + =| pos=@ud + |- ^- form:m + ?~ prev-outputs ^$(inputs t.inputs) + =/ rev2 (~(get by reveals) [id.u.prev-tx pos]) + ?: &(?=(^ rev2) ?=(^ value.u.rev2)) + $(prev-outputs t.prev-outputs, pos +(pos)) + =/ sots=(list raw-sotx:urb) ?~(rev2 ~ sots.u.rev2) + %= $ + prev-outputs t.prev-outputs + pos +(pos) + reveals (~(put by reveals) [id.u.prev-tx pos] [sots `value.i.prev-outputs]) + == +:: +:: Fiber helper: convert a tx:btc to urb-tx:urb by fetching +:: prevout values for each input via getrawtransaction. +:: Ported from groundwire's urb-watcher ++convert-tx. +:: +++ convert-tx + |= [url=@t auth=@t old-tx=tx:btc] + =/ m (fiber:fiber:nexus ,urb-tx:urb) + ^- form:m + =/ old-inputs is.old-tx + =| new-inputs=(list input:urb-tx:urb) + |- + ^- form:m + ?~ old-inputs + %- pure:m + ^- urb-tx:urb + :* id.old-tx + (flop new-inputs) + os.old-tx + locktime.old-tx + nversion.old-tx + segwit.old-tx + == + :: coinbase inputs (txid=0) can't be fetched; use sum of outputs + :: as the input value since input = output for coinbase txs. + ?: =(0x0 txid.i.old-inputs) + =/ total-out=@ud (roll os.old-tx |=([[* a=@] b=@] (add a b))) + =/ new-input=input:urb-tx:urb [[~ total-out] i.old-inputs] + $(old-inputs t.old-inputs, new-inputs [new-input new-inputs]) + ;< prev-tx=(unit tx:btc) bind:m + (get-raw-tx url auth txid.i.old-inputs) + ?~ prev-tx + ~& >>> [%convert-tx %prev-tx-missing txid.i.old-inputs] + =/ new-input=input:urb-tx:urb [[~ 0] i.old-inputs] + $(old-inputs t.old-inputs, new-inputs [new-input new-inputs]) + =/ prev-outputs os.u.prev-tx + =| pos=@ud + |- + ^- form:m + ?~ prev-outputs + ^$(old-inputs t.old-inputs) + ?. ?& =(id.u.prev-tx txid.i.old-inputs) + =(pos pos.i.old-inputs) + == + $(prev-outputs t.prev-outputs, pos +(pos)) + =/ new-input=input:urb-tx:urb [[~ value.i.prev-outputs] i.old-inputs] + %= ^$ + old-inputs t.old-inputs + new-inputs [new-input new-inputs] + == +:: +:: Fiber helper: scan an urb-block for %spawn sotx and build +:: the precommits map by fetching commit and precommit txs. +:: Ported from groundwire's urb-watcher spawn detection loop. +:: +++ find-precommits + |= [url=@t auth=@t ublk=urb-block:urb] + =/ m + %- fiber:fiber:nexus + ,(map [txid:ord:urb vout:ord:urb] [commit=urb-tx:urb precommit=urb-tx:urb]) + ^- form:m + =| precommits=(map [txid:ord:urb vout:ord:urb] [commit=urb-tx:urb precommit=urb-tx:urb]) + =/ txs txs.ublk + :: iterate all txs looking for %spawn sotx in inputs + |- + ^- form:m + ?~ txs (pure:m precommits) + =/ tx-inputs is.i.txs + |- + ^- form:m + ?~ tx-inputs ^$(txs t.txs) + =/ sots sots.i.tx-inputs + ?~ sots $(tx-inputs t.tx-inputs) + =/ singles=(list single:skim-sotx:urb) + ?: ?=(%batch +<.sot.i.sots) + bat.sot.i.sots + ~[+.sot.i.sots] + |- + ^- form:m + ?~ singles ^$(tx-inputs t.tx-inputs) + ?. ?=(%spawn -.i.singles) + $(singles t.singles) + :: found a spawn — fetch the commit tx (created this input) + ;< commit-tx=(unit tx:btc) bind:m + (get-raw-tx url auth txid.i.tx-inputs) + ?~ commit-tx + ~& >>> [%find-precommits %commit-tx-missing txid.i.tx-inputs] + $(singles t.singles) + ;< commit-urb-tx=urb-tx:urb bind:m + (convert-tx url auth u.commit-tx) + :: find the commit tx input matching the attested spkh + =/ spkh spkh.to.i.singles + ~& >> [%find-precommits %looking-for-spkh spkh] + =/ inputs is.commit-urb-tx + |- + ^- form:m + ?~ inputs + ~& >> [%find-precommits %no-matching-spkh] + ^$(singles t.singles) + ;< precommit-tx=(unit tx:btc) bind:m + (get-raw-tx url auth txid.i.inputs) + ?~ precommit-tx + ~& >>> [%find-precommits %precommit-tx-missing txid.i.inputs] + $(inputs t.inputs) + =/ outputs os.u.precommit-tx + |- + ^- form:m + ?~ outputs ^$(inputs t.inputs) + =/ en-out (can 3 script-pubkey.i.outputs 8^value.i.outputs ~) + =/ computed-spkh (shay (add 8 wid.script-pubkey.i.outputs) en-out) + ~& >> :* %find-precommits + %candidate + computed=computed-spkh + wanted=spkh + value=value.i.outputs + spk-wid=wid.script-pubkey.i.outputs + == + ?. =(spkh computed-spkh) + $(outputs t.outputs) + :: found matching precommit output — convert and save + ;< precommit-urb-tx=urb-tx:urb bind:m + (convert-tx url auth u.precommit-tx) + %= ^^^$ + tx-inputs t.tx-inputs + precommits %+ ~(put by precommits) + [txid.i.tx-inputs pos.i.tx-inputs] + [commit-urb-tx precommit-urb-tx] + == +:: +:: Fiber helper: peek /trace.txt, append trace-block output, over it +:: back. No-op on coinbase-only blocks. +:: +++ append-trace + |= [blk=block:btc reveals-count=@ud] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ new-lines=wain (trace-block:btc-rpc blk reveals-count) + ?~ new-lines (pure:m ~) + =/ trace-road=road:tarball (cord-to-road:tarball './trace.txt') + ;< prev-seen=seen:nexus bind:m (peek:io trace-road `[/ %txt]) + =/ prev-lines=wain + ?: ?=([%& %file *] prev-seen) !<(wain q.sage.p.prev-seen) + ~ + =/ combined=wain (weld prev-lines new-lines) + ;< ~ bind:m (over:io trace-road [[/ %txt] !>(combined)]) + (pure:m ~) +:: +:: Emit each sotx observed in an urb-block as a urb-event. +:: Writes to events/main.urb-event (global stream) and +:: events/ships/.urb-event (per-ship). All gain-enabled. +:: Iterates txs → inputs → sots in order. +:: +++ emit-events + |= ublk=urb-block:urb + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ main-road=road:tarball (cord-to-road:tarball './events/main.urb-event') + =/ txs=(list urb-tx:urb) txs.ublk + |- ^- form:m + ?~ txs (pure:m ~) + =/ tx=urb-tx:urb i.txs + =/ ins=(list input:urb-tx:urb) is.tx + ;< ~ bind:m + |- ^- form:m + ?~ ins (pure:m ~) + =/ sots=(list raw-sotx:urb) sots.i.ins + ;< ~ bind:m + |- ^- form:m + ?~ sots (pure:m ~) + =/ evt=(unit [height=@ud txid=@ux =ship =sotx:urb os=(list output:tx:btc)]) + `[height.ublk id.tx ship.sot.i.sots sot.i.sots os.tx] + =/ evt-sage=sage:tarball [[/ %urb-event] !>(evt)] + :: write to global stream + ;< ~ bind:m (over:io main-road evt-sage) + :: write to per-ship file (create on first event) + =/ ship-road=road:tarball + (cord-to-road:tarball (cat 3 './events/ships/' (cat 3 (scot %p ship.sot.i.sots) '.urb-event'))) + ;< ship-seen=seen:nexus bind:m (peek:io ship-road ~) + ;< ~ bind:m + ?: ?=([%& %file *] ship-seen) + (over:io ship-road evt-sage) + (make:io ship-road [%| gain=%.y evt-sage ~]) + $(sots t.sots) + $(ins t.ins) + $(txs t.txs) +:: +:: Convert urb-core effects to jael-style udiffs. +:: +++ fx-to-udiffs + |= fx=(list [id:block:btc effect:urb]) + ^- udiffs:point:jael + %+ murn fx + |= [=id:block:btc eu=effect:urb] + ^- (unit [ship udiff:point:jael]) + ?. ?=(%point -.eu) ~ + =/ pdiff (tail (tail eu)) + ?+ -.pdiff ~ + %rift + `[ship.eu id %rift rift.pdiff %.n] + :: + %sponsor + `[ship.eu id %spon sponsor.pdiff] + :: + %keys + `[ship.eu id %keys [life.pdiff (sub (end 3 pass.pdiff) 'a') pass.pdiff] %.y] + :: + %fief + `[ship.eu id %fief fief.pdiff] + == +:: +:: Fiber helper: write per-ship point files for any %point effects. +:: Each ship that was touched gets its own file under /points/. +:: +++ write-point-effects + |= [fx=(list [id:block:btc effect:urb]) us=state:urb] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ ships=(list @p) + %+ murn fx + |= [* =effect:urb] + ?. ?=(%point -.effect) ~ + `ship.effect + |- + ^- form:m + ?~ ships (pure:m ~) + =/ pt (~(get by unv-ids.us) i.ships) + ?~ pt $(ships t.ships) + =/ name=@ta (crip "{(trip (scot %p i.ships))}.json") + =/ road=road:tarball (cord-to-road:tarball (crip "./points/{(trip name)}")) + =/ pt-json=json + %- pairs:enjs:format + :~ ['ship' s+(scot %p i.ships)] + ['rift' (numb:enjs:format rift.net.u.pt)] + ['life' (numb:enjs:format life.net.u.pt)] + ['pass' s+(scot %ux pass.net.u.pt)] + ['sponsor' ?.(has.sponsor.net.u.pt ~ s+(scot %p who.sponsor.net.u.pt))] + ['escape' ?~(escape.net.u.pt ~ s+(scot %p u.escape.net.u.pt))] + :- 'owner' + %- pairs:enjs:format + :~ ['txid' s+(scot %ux txid.sont.own.u.pt)] + ['vout' (numb:enjs:format vout.sont.own.u.pt)] + ['off' (numb:enjs:format off.sont.own.u.pt)] + == + :- 'mang' + ?~ mang.own.u.pt ~ + ?- -.u.mang.own.u.pt + %sont %- pairs:enjs:format + :~ ['type' s+'sont'] + ['txid' s+(scot %ux txid.sont.u.mang.own.u.pt)] + ['vout' (numb:enjs:format vout.sont.u.mang.own.u.pt)] + ['off' (numb:enjs:format off.sont.u.mang.own.u.pt)] + == + %pass %- pairs:enjs:format + :~ ['type' s+'pass'] + ['pass' s+(scot %ux pass.u.mang.own.u.pt)] + == + == + :- 'fief' + ?~ fief.net.u.pt ~ + ?- -.u.fief.net.u.pt + %turf %- pairs:enjs:format + :~ ['type' s+'turf'] + :- 'domains' + :- %a + %+ turn p.u.fief.net.u.pt + |=(t=turf:urb [%a (turn t |=(d=@t s+d))]) + ['port' (numb:enjs:format q.u.fief.net.u.pt)] + == + %if %- pairs:enjs:format + :~ ['type' s+'if'] + ['ip' s+(scot %if p.u.fief.net.u.pt)] + ['port' (numb:enjs:format q.u.fief.net.u.pt)] + == + %is %- pairs:enjs:format + :~ ['type' s+'is'] + ['ip' s+(scot %is p.u.fief.net.u.pt)] + ['port' (numb:enjs:format q.u.fief.net.u.pt)] + == + == + == + ;< =seen:nexus bind:m (peek:io road ~) + ;< ~ bind:m + ?: ?=([%& %file *] seen) + (over:io road [[/ %json] !>(pt-json)]) + (make:io road [%| gain=%.n [[/ %json] !>(pt-json)] ~]) + $(ships t.ships) +:: +:: Fiber helper: generatetoaddress N , ignoring result. +:: +++ mine-n + |= [url=@t auth=@t address=@t n=@ud] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ params=@t + (rap 3 ~['[' (ud-to-cord:btc-rpc n) ',"' address '"]']) + =/ req=request:http + (rpc-request:btc-rpc url auth 'generatetoaddress' params) + ;< ~ bind:m (send-request:io req) + ;< resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.resp) + ~& >>> [%mine-n %no-response] !! + (pure:m ~) +:: +:: Render HTML shell for the bitcoind dashboard. Everything that +:: changes with chain/urb state lives inside the stats fragment, +:: which is refreshed over a single SSE connection on the browser. +:: +++ btc-page + |= [nexus-root=tape stats=manx ships=(list @p) known-points=(list @p)] + ^- manx + =/ sse=tape "/grubbery/api/keep{nexus-root}/ui/sse?mark=txt" + =/ reg-poke=tape "/grubbery/api/poke{nexus-root}/reg-tester.sig?mark=json" + =/ sorted-ships=(list @p) (sort ships lth) + =/ sorted-points=(list @p) (sort known-points lth) + =/ point-options=(list manx) + %+ turn sorted-points + |= =ship + =/ s=tape (scow %p ship) + ;option(value s): {s} + ;html + ;head + ;title: Grubbery Bitcoind + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;style + ;+ ;/ page-style + == + == + ;body + ;h1: bitcoind · regtest + ;div#stats-container + ;+ stats + == + :: reg-tester: top tabs (spawn / attest), attest has sub-tabs + :: todo: random seed, sponsor-targeted random seed + ;div.label: reg-tester + ;div.tabs + ;button.tab.active(onclick "switchTop('spawn')"): spawn + ;button.tab(onclick "switchTop('attest')"): attest + == + :: spawn panel + ;div#panel-spawn.panel + ;form.row(onsubmit "submitSpawn(event)") + ;div.col + ;input(type "number", name "sed", value "42", min "1", placeholder "seed"); + ;div.sublabel: wallet seed + == + ;div.col + ;button(type "submit"): spawn + == + == + == + :: attest panel + ;div#panel-attest.panel(style "display:none") + ;div.row + ;div.col + ;select#ship-select + ;option(value ""): -- select ship -- + ;* %+ turn sorted-ships + |= =ship + =/ s=tape (scow %p ship) + ;option(value s): {s} + == + == + == + ;div.subtabs + ;button.subtab.active(onclick "switchSub('keys')"): keys + ;button.subtab(onclick "switchSub('sponsor')"): sponsor + ;button.subtab(onclick "switchSub('fief')"): fief + ;button.subtab(onclick "switchSub('manager')"): manager + == + :: keys category + ;div#sub-keys.subpanel + ;div.row + ;div.col + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "keys"); + ;button(type "submit"): rotate keys + == + == + ;div.col + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "keys-breach"); + ;button(type "submit"): breach + == + == + == + == + :: sponsor category + ;div#sub-sponsor.subpanel(style "display:none") + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "escape"); + ;div.row + ;div.col + ;select(name "parent") + ;option(value ""): -- select sponsor -- + ;* point-options + == + ;div.sublabel: escape to + == + ;div.col + ;button(type "submit"): escape + == + == + == + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "cancel-escape"); + ;div.row + ;div.col + ;select(name "parent") + ;option(value ""): -- select sponsor -- + ;* point-options + == + ;div.sublabel: cancel escape to + == + ;div.col + ;button(type "submit"): cancel escape + == + == + == + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "adopt"); + ;div.row + ;div.col + ;select(name "adoptee") + ;option(value ""): -- select ship -- + ;* point-options + == + ;div.sublabel: ship to adopt + == + ;div.col + ;button(type "submit"): adopt + == + == + == + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "reject"); + ;div.row + ;div.col + ;select(name "rejectee") + ;option(value ""): -- select ship -- + ;* point-options + == + ;div.sublabel: ship to reject + == + ;div.col + ;button(type "submit"): reject + == + == + == + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "detach"); + ;div.row + ;div.col + ;select(name "detachee") + ;option(value ""): -- select ship -- + ;* point-options + == + ;div.sublabel: ship to detach + == + ;div.col + ;button(type "submit"): detach + == + == + == + == + :: fief category + ;div#sub-fief.subpanel(style "display:none") + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "fief"); + ;input(type "hidden", name "fief-type", value "if"); + ;div.row + ;div.col + ;input(type "text", name "addr", value "1.2.3.4", placeholder "1.2.3.4"); + ;div.sublabel: ipv4 address + == + ;div.col + ;input(type "number", name "port", value "8080", placeholder "port"); + ;div.sublabel: port + == + ;div.col + ;button(type "submit"): set ipv4 + == + == + == + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "fief"); + ;input(type "hidden", name "fief-type", value "is"); + ;div.row + ;div.col + ;input(type "text", name "addr", value "::1", placeholder "::1"); + ;div.sublabel: ipv6 address + == + ;div.col + ;input(type "number", name "port", value "8080", placeholder "port"); + ;div.sublabel: port + == + ;div.col + ;button(type "submit"): set ipv6 + == + == + == + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "fief"); + ;input(type "hidden", name "fief-type", value "turf"); + ;div.row + ;div.col + ;input(type "text", name "addr", value "example.com", placeholder "example.com"); + ;div.sublabel: domain + == + ;div.col + ;input(type "number", name "port", value "8080", placeholder "port"); + ;div.sublabel: port + == + ;div.col + ;button(type "submit"): set turf + == + == + == + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "fief"); + ;input(type "hidden", name "fief-type", value "clear"); + ;button(type "submit"): clear fief + == + == + :: manager category + ;div#sub-manager.subpanel(style "display:none") + ;div.sublabel: set by public key + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "set-mang"); + ;input(type "hidden", name "mang-type", value "pass"); + ;div.row + ;div.col + ;input(type "text", name "mang-pass", placeholder "0x...", value ""); + ;div.sublabel: public key + == + ;div.col + ;button(type "submit"): set pass + == + == + == + ;hr; + ;div.sublabel: set by satpoint + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "set-mang"); + ;input(type "hidden", name "mang-type", value "sont"); + ;div.row + ;div.col + ;input(type "text", name "mang-txid", placeholder "0x...", value ""); + ;div.sublabel: txid + == + ;div.col + ;input(type "number", name "mang-vout", value "0", placeholder "0"); + ;div.sublabel: vout + == + ;div.col + ;input(type "number", name "mang-off", value "0", placeholder "0"); + ;div.sublabel: offset + == + ;div.col + ;button(type "submit"): set sont + == + == + == + ;hr; + ;div.sublabel: remove manager proxy + ;form.action-form(onsubmit "submitAttest(event)") + ;input(type "hidden", name "action", value "set-mang"); + ;input(type "hidden", name "mang-type", value "clear"); + ;button(type "submit"): clear manager + == + == + == + ;pre#status: _ + ;div.footer: walker polls bitcoind via /height.ud every 2s + ;script + ;+ ;/ (page-script sse reg-poke) + == + == + == +:: +:: Dynamic stats block rendered into the page shell (and into the +:: /ui/sse/stats.html fragment each time the underlying files change). +:: +++ stats-fragment + |= [tip=@ud us=state:urb] + ^- manx + =/ processed=@ud num.block-id.us + =/ gap=@ud ?:((gte processed tip) 0 (sub tip processed)) + =/ gap-text=tape + ?: =(gap 0) "synced" + (weld (scow %ud gap) (weld " block" ?:(=(gap 1) " behind" "s behind"))) + =/ gap-class=tape + ?: =(gap 0) "status synced" + "status lagging" + =/ last-hash-full=tape + (trip (en:base16:mimes:html 32^hax.block-id.us)) + =/ last-hash-short=tape + ?: (lth (lent last-hash-full) 16) last-hash-full + %+ weld (scag 8 last-hash-full) + (weld "…" (slag (sub (lent last-hash-full) 8) last-hash-full)) + =/ pts ~(tap by unv-ids.us) + =/ urb-points=tape (scow %ud (lent pts)) + =/ urb-sonts=tape (scow %ud ~(wyt by sont-map.us)) + =/ urb-inscs=tape (scow %ud ~(wyt by insc-ids.us)) + ;div + ;div.label: chain + ;div.row + ;+ (num-col (scow %ud tip) "tip") + ;+ (num-col (scow %ud processed) "processed") + == + ;div + ;span(class gap-class): {gap-text} + == + ;div.label: last block + ;div.hash(title last-hash-full): {last-hash-short} + ;div.label: urb state + ;div.row + ;+ (num-col urb-points "points") + ;+ (num-col urb-sonts "sonts") + ;+ (num-col urb-inscs "inscriptions") + == + ;div.label: points + ;+ (points-table pts) + == +:: +:: Render the points table, or a placeholder if unv-ids is empty. +:: Columns: ship, rift, life, sponsor, escape. One row per point. +:: +++ points-table + |= pts=(list (pair @p point:urb)) + ^- manx + ?~ pts + ;div.empty: (none yet) + ;table.points + ;thead + ;tr + ;th: ship + ;th: rift + ;th: life + ;th: sponsor + ;th: escape + ;th: fief + ;th: mang + == + == + ;tbody + ;* %+ turn pts + |= [her=@p =point:urb] + ^- manx + (point-row her point) + == + == +:: +:: Single point row. Dashes render for missing sponsor / escape. +:: +++ point-row + |= [her=@p =point:urb] + ^- manx + =/ spn=manx + ?: has.sponsor.net.point + ;span: {(scow %p who.sponsor.net.point)} + ;span.dash: - + =/ esc=manx + ?~ escape.net.point + ;span.dash: - + ;span: {(scow %p u.escape.net.point)} + =/ fie=manx + ?~ fief.net.point + ;span.dash: - + ?- -.u.fief.net.point + %if ;span: {(scow %if p.u.fief.net.point)}:{(scow %ud q.u.fief.net.point)} + %is ;span: {(scow %is p.u.fief.net.point)}:{(scow %ud q.u.fief.net.point)} + %turf ;span: turf:{(scow %ud q.u.fief.net.point)} + == + =/ mgr=manx + ?~ mang.own.point + ;span.dash: - + ?- -.u.mang.own.point + %sont ;span: sont + %pass ;span: pass + == + ;tr + ;td.ship: {(scow %p her)} + ;td: {(scow %ud rift.net.point)} + ;td: {(scow %ud life.net.point)} + ;td + ;+ spn + == + ;td + ;+ esc + == + ;td + ;+ fie + == + ;td + ;+ mgr + == + == +:: +:: Single numeric column for stats-fragment: large value with a +:: small sublabel underneath. +:: +++ num-col + |= [val=tape label=tape] + ^- manx + ;div.col + ;div.num: {val} + ;div.sublabel: {label} + == +:: +:: Inline CSS for the dashboard shell. Kept flat for readability. +:: +++ page-style + ^- tape + %- zing + :~ "body \{ font-family: monospace; max-width: 600px; margin: 2rem auto; padding: 2rem; color: #eee; background: #111; } " + "h1 \{ font-weight: normal; font-size: 1rem; opacity: 0.6; margin: 0 0 2rem 0; text-transform: uppercase; letter-spacing: 0.15em; } " + ".label \{ opacity: 0.4; font-size: 0.75rem; text-transform: uppercase; letter-spacing: 0.1em; margin-top: 2rem; } " + ".row \{ display: flex; gap: 3rem; margin-top: 0.25rem; align-items: stretch; } " + ".col \{ flex: 1; display: flex; flex-direction: column; } " + ".num \{ font-size: 3rem; font-weight: bold; font-variant-numeric: tabular-nums; line-height: 1; } " + ".hash \{ font-size: 1.25rem; font-weight: bold; font-variant-numeric: tabular-nums; line-height: 1; overflow: hidden; text-overflow: ellipsis; } " + ".sublabel \{ opacity: 0.35; font-size: 0.65rem; text-transform: uppercase; letter-spacing: 0.1em; margin-top: 0.4rem; } " + "hr \{ border: none; border-top: 1px solid #333; margin: 0.75rem 0; } " + ".status \{ font-size: 0.85rem; margin-top: 1.25rem; letter-spacing: 0.05em; } " + ".status.synced \{ color: #6f6; } " + ".status.lagging \{ color: #fc6; } " + "form \{ margin: 0; } " + "input, select \{ font-family: inherit; background: #222; color: #eee; border: 1px solid #444; padding: 0.5rem; font-size: 0.8rem; width: 100%; box-sizing: border-box; } " + "select \{ cursor: pointer; } " + ".tabs, .subtabs \{ display: flex; gap: 0; margin-top: 0.5rem; border-bottom: 1px solid #333; } " + ".tab, .subtab \{ font-family: inherit; background: none; color: #666; border: none; padding: 0.5rem 1rem; cursor: pointer; text-transform: uppercase; letter-spacing: 0.1em; font-size: 0.75rem; border-bottom: 2px solid transparent; margin-bottom: -1px; } " + ".tab:hover, .subtab:hover \{ color: #aaa; } " + ".tab.active, .subtab.active \{ color: #eee; border-bottom-color: #eee; } " + ".subtabs \{ margin-top: 0.75rem; } " + ".panel \{ margin-top: 0.5rem; } " + ".subpanel \{ margin-top: 0.75rem; } " + "button \{ font-family: inherit; background: #222; color: #eee; border: 1px solid #444; padding: 0.75rem 1.25rem; cursor: pointer; text-transform: uppercase; letter-spacing: 0.1em; font-size: 0.8rem; flex: 1; } " + "button:hover:not(:disabled) \{ background: #333; border-color: #666; } " + "button:disabled \{ opacity: 0.4; cursor: wait; } " + "pre#status \{ background: #000; border: 1px solid #333; padding: 0.75rem; margin-top: 1.5rem; font-size: 0.75rem; white-space: pre-wrap; word-break: break-all; min-height: 1rem; opacity: 0.7; } " + "table.points \{ width: 100%; margin-top: 0.5rem; border-collapse: collapse; font-size: 0.75rem; } " + "table.points th \{ text-align: left; opacity: 0.35; text-transform: uppercase; letter-spacing: 0.1em; font-weight: normal; padding: 0.4rem 0.5rem; border-bottom: 1px solid #333; } " + "table.points td \{ padding: 0.4rem 0.5rem; border-bottom: 1px solid #222; font-variant-numeric: tabular-nums; } " + "table.points td.ship \{ font-weight: bold; } " + "table.points .dash \{ opacity: 0.25; } " + ".empty \{ opacity: 0.4; font-size: 0.75rem; margin-top: 0.5rem; font-style: italic; } " + ".footer \{ margin-top: 3rem; opacity: 0.3; font-size: 0.7rem; }" + == +:: +:: Inline JS for the dashboard shell. Mine/runSpawn fire pokes; +:: connectSSE subscribes to /ui/sse with proper cleanup via an +:: AbortController + beforeunload handler, so reloading the page +:: doesn't accumulate stale SSE connections. +:: +++ page-script + |= [sse=tape reg-poke=tape] + ^- tape + %- zing + :~ "var SSE='{sse}';" + "var REG_POKE='{reg-poke}';" + + "async function submitSpawn(e)\{e.preventDefault();var r=document.getElementById('status');var btn=e.target.querySelector('button');var sed=parseInt(new FormData(e.target).get('sed'),10);if(!sed||sed<1)\{r.textContent='need a positive seed';return}btn.disabled=true;btn.textContent='running…';r.textContent='spawn sed='+sed+'…';try\{var res=await fetch(REG_POKE,\{method:'POST',headers:\{'Content-Type':'application/json'},body:JSON.stringify(\{action:'spawn',sed:sed})});r.textContent=res.ok?'ok — spawn running; watch the walker':('poke failed: '+res.status)}catch(x)\{r.textContent=String(x)}btn.disabled=false;btn.textContent='spawn'}" + "async function submitAttest(e)\{e.preventDefault();var r=document.getElementById('status');var btn=e.target.querySelector('button');var ship=document.getElementById('ship-select').value;if(!ship)\{r.textContent='select a ship first';return}var data=\{ship:ship};new FormData(e.target).forEach(function(v,k)\{data[k]=v});var act=data.action;var orig=btn.textContent;btn.disabled=true;btn.textContent='running…';r.textContent=act+' '+ship+'…';try\{var res=await fetch(REG_POKE,\{method:'POST',headers:\{'Content-Type':'application/json'},body:JSON.stringify(data)});r.textContent=res.ok?'ok — '+act+' running; watch the walker':('poke failed: '+res.status)}catch(x)\{r.textContent=String(x)}btn.disabled=false;btn.textContent=orig}" + "function switchTop(id)\{document.querySelectorAll('.panel').forEach(function(p)\{p.style.display='none'});document.getElementById('panel-'+id).style.display='';document.querySelectorAll('.tab').forEach(function(t)\{t.classList.remove('active')});event.target.classList.add('active')}" + "function switchSub(id)\{document.querySelectorAll('.subpanel').forEach(function(p)\{p.style.display='none'});document.getElementById('sub-'+id).style.display='';document.querySelectorAll('.subtab').forEach(function(t)\{t.classList.remove('active')});event.target.classList.add('active')}" + "var sseController=null;var sseReader=null;" + "async function connectSSE()\{if(sseReader)try\{sseReader.cancel()}catch(e)\{}if(sseController)sseController.abort();sseController=new AbortController();try\{var r=await fetch(SSE,\{headers:\{Accept:'text/event-stream'},signal:sseController.signal});sseReader=r.body.getReader();var dec=new TextDecoder();var buf='';while(true)\{var chunk=await sseReader.read();if(chunk.done)break;buf+=dec.decode(chunk.value,\{stream:true});var evts=buf.split('\\n\\n');buf=evts.pop();for(var i=0;i(default-config)]] + [%fall %& [/ %'tip.ud'] %.n [~ [/ %ud] !>(`@ud`0)]] + [%over %& [/ %'poller.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %| /blocks [~ ~] [~ ~] empty-dir:loader] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /poller.sig: poll bitcoind for chain tip, fetch new blocks + :: + [~ %'poller.sig'] + ;< ~ bind:m (rise-wait:io prod "%indexer /poller: failed") + :: read config + ;< cfg-seen=seen:nexus bind:m + (peek:io (cord-to-road:tarball './config.json') `[/ %json]) + =/ [url=@t auth=@t interval=@dr] (read-config cfg-seen) + |- + :: fetch current block count + =/ req=request:http + (rpc-request:btc-rpc url auth 'getblockcount' '[]') + ;< ~ bind:m (send-request:io req) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) + ;< ~ bind:m (sleep:io interval) + $ + ?~ full-file.client-response + ;< ~ bind:m (sleep:io interval) + $ + =/ body=@t q.data.u.full-file.client-response + =/ jon=(unit json) (de:json:html body) + ?~ jon + ;< ~ bind:m (sleep:io interval) + $ + =/ tip=(unit @ud) (parse-height:btc-rpc u.jon) + ?~ tip + ;< ~ bind:m (sleep:io interval) + $ + :: update tip file + =/ tip-road=road:tarball (cord-to-road:tarball './tip.ud') + ;< ~ bind:m (over:io tip-road [[/ %ud] !>(u.tip)]) + :: check what we've already cached + ;< blocks-seen=seen:nexus bind:m + (peek:io (cord-to-road:tarball './blocks/') ~) + =/ cached-heights=(list @ud) + ?. ?=([%& %ball *] blocks-seen) ~ + %+ murn ~(tap by dir.ball.p.blocks-seen) + |= [name=@ta *] + (rush name dem) + =/ max-cached=@ud + (roll cached-heights |=([a=@ud b=@ud] (max a b))) + :: fetch any blocks we're missing from max-cached+1 to tip + =/ next=@ud ?:(=(0 max-cached) 1 +(max-cached)) + |- + ?: (gth next u.tip) + :: caught up — sleep and poll again + ;< ~ bind:m (sleep:io interval) + ^$ + :: fetch block hash + =/ hash-params=@t + (en:json:html [%a ~[(numb:enjs:format next)]]) + =/ hash-req=request:http + (rpc-request:btc-rpc url auth 'getblockhash' hash-params) + ;< ~ bind:m (send-request:io hash-req) + ;< hash-resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.hash-resp) + ~& > [%indexer %no-hash-response next] + ;< ~ bind:m (sleep:io ~s2) + ^$ + ?~ full-file.hash-resp + ~& > [%indexer %empty-hash-response next] + ;< ~ bind:m (sleep:io ~s2) + ^$ + =/ hash-body=@t q.data.u.full-file.hash-resp + =/ hash-jon=(unit json) (de:json:html hash-body) + ?~ hash-jon + ~& > [%indexer %bad-hash-json next] + ;< ~ bind:m (sleep:io ~s2) + ^$ + =/ hash=(unit @t) (parse-string-result:btc-rpc u.hash-jon) + ?~ hash + :: block height out of range — chain may have reset + ?: ?=(^ (find "out of range" (trip hash-body))) + ~& > [%indexer %chain-reset-detected next] + ;< ~ bind:m (over:io tip-road [[/ %ud] !>(`@ud`0)]) + ^$ + ~& > [%indexer %no-hash next] + ;< ~ bind:m (sleep:io ~s2) + ^$ + :: fetch full block (verbosity 2) + =/ blk-params=@t (rap 3 ~['["' u.hash '",2]']) + =/ blk-req=request:http + (rpc-request:btc-rpc url auth 'getblock' blk-params) + ;< ~ bind:m (send-request:io blk-req) + ;< blk-resp=client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.blk-resp) + ~& > [%indexer %no-block-response next] + ;< ~ bind:m (sleep:io ~s2) + ^$ + ?~ full-file.blk-resp + ~& > [%indexer %empty-block-response next] + ;< ~ bind:m (sleep:io ~s2) + ^$ + =/ blk-body=@t q.data.u.full-file.blk-resp + =/ blk-jon=(unit json) (de:json:html blk-body) + ?~ blk-jon + ~& > [%indexer %bad-block-json next] + ;< ~ bind:m (sleep:io ~s2) + ^$ + =/ mblk=(unit block:btc) (parse-block:btc-rpc u.blk-jon) + ?~ mblk + ~& > [%indexer %bad-block-parse next] + ;< ~ bind:m (sleep:io ~s2) + ^$ + =/ blk u.mblk + ~& > [%indexer %cached-block height.blk txs=(lent txs.blk)] + :: write block into the ball + ;< ~ bind:m (write-block next u.hash blk) + $(next +(next)) + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the indexer nexus.' + ~ + %- crip + """ + INDEXER NEXUS — bitcoind block cache + + Polls a bitcoind node and caches block data in the ball namespace. + Pure cache layer — no script-hash matching or account awareness. + + FILES: + config.json RPC connection settings (url, auth, poll-interval). + tip.ud Current chain height from bitcoind. + poller.sig Poll loop process. + + DIRECTORIES: + blocks/ Cached block data keyed by height. + """ + [%blocks ~] + 'Cached block data. Each subdirectory is a block height containing header.json and txs/.' + == + %| + ?+ rail.p.mana 'File under the indexer nexus.' + [~ %'config.json'] 'RPC connection: url, auth, poll-interval.' + [~ %'tip.ud'] 'Current chain height.' + [~ %'poller.sig'] 'Poll loop process.' + == + == + -- +:: indexer helpers +:: +|% +++ read-config + |= =seen:nexus + ^- [url=@t auth=@t interval=@dr] + =/ fallback=[url=@t auth=@t interval=@dr] ['http://localhost:18443/' 'Basic dXJiaXQ6dXJiaXQxMjM=' ~s5] + ?. ?=([%& %file *] seen) fallback + =/ jon !<(json q.sage.p.seen) + ?. ?=([%o *] jon) fallback + =/ url=@t + =/ u=(unit json) (~(get by p.jon) 'url') + ?~ u url.fallback + ?. ?=([%s *] u.u) url.fallback + p.u.u + =/ auth=@t + =/ a=(unit json) (~(get by p.jon) 'auth') + ?~ a auth.fallback + ?. ?=([%s *] u.a) auth.fallback + p.u.a + =/ interval=@dr + =/ i=(unit json) (~(get by p.jon) 'poll-interval') + ?~ i interval.fallback + ?. ?=([%s *] u.i) interval.fallback + (fall (slaw %dr p.u.i) interval.fallback) + [url auth interval] +:: +++ write-block + |= [height=@ud hash-hex=@t blk=block:btc] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ height-dir=@ta (crip ((d-co:co 1) height)) + =/ block-road (cord-to-road:tarball (cat 3 './blocks/' height-dir)) + :: build header json + =/ header-json=json + %- pairs:enjs:format + :~ ['hash' s+hash-hex] + ['height' (numb:enjs:format height)] + ['txCount' (numb:enjs:format (lent txs.blk))] + ['reward' (numb:enjs:format reward.blk)] + == + :: build txs directory: lump with one json content entry per tx + =/ tx-map=(map @ta content:tarball) + %- ~(gas by *(map @ta content:tarball)) + %+ turn txs.blk + |= t=tx:btc + ^- [@ta content:tarball] + =/ txid-hex=@t (render-hex-octs:btc-rpc 32^id.t) + =/ fname=@ta (cat 3 txid-hex '.json') + =/ tx-json=json (tx-to-json t) + [fname [~ [/ %json] !>(tx-json)]] + =/ txs-lump=lump:tarball [~ ~ tx-map] + :: assemble block ball: header.json in lump, txs/ as subdir + =/ header-contents=(map @ta content:tarball) + (~(put by *(map @ta content:tarball)) %'header.json' [~ [/ %json] !>(header-json)]) + =/ block-lump=lump:tarball [~ ~ header-contents] + =/ block-ball=ball:tarball + [`block-lump (~(put by *(map @ta ball:tarball)) %txs [`txs-lump ~])] + ;< * bind:m + (make-soft:io (cord-to-road:tarball (cat 3 './blocks/' (cat 3 height-dir '/'))) &+[*sand:nexus *gain:nexus block-ball]) + (pure:m ~) +:: +++ tx-to-json + |= t=tx:btc + ^- json + =/ txid-hex=@t (render-hex-octs:btc-rpc 32^id.t) + %- pairs:enjs:format + :~ ['txid' s+txid-hex] + ['inputs' [%a (turn is.t input-to-json)]] + ['outputs' [%a (turn os.t output-to-json)]] + == +:: +++ input-to-json + |= iw=inputw:tx:btc + ^- json + %- pairs:enjs:format + :~ ['prevTxid' s+(render-hex-octs:btc-rpc 32^txid.iw)] + ['prevVout' (numb:enjs:format pos.iw)] + ['sequence' s+(render-hex-octs:btc-rpc sequence.iw)] + == +:: +++ output-to-json + |= o=output:tx:btc + ^- json + %- pairs:enjs:format + :~ ['value' (numb:enjs:format value.o)] + ['scriptPubKey' s+(render-hex-octs:btc-rpc script-pubkey.o)] + == +-- diff --git a/desk/gub/nex/mcp.hoon b/desk/gub/nex/mcp.hoon new file mode 100644 index 0000000..801e04e --- /dev/null +++ b/desk/gub/nex/mcp.hoon @@ -0,0 +1,254 @@ +:: mcp nexus: MCP JSON-RPC endpoint for grubbery +:: +:: Tree layout: +:: /main.sig bind HTTP path, dispatch requests +:: /requests/{id} parse HTTP, route protocol vs tools/call +:: /tools/{id} tool execution grub (mark %tool-state) +:: +/< nex-mcp /lib/nex/mcp.hoon +/< nex-tools /lib/nex/tools.hoon +=> |% + ++ srv ~(. http-res:io [%| 1 %& ~ %'main.sig']) + :: On crash, write error to tool state so MCP returns it. + :: On normal startup, continue. + :: + ++ rise-tool + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. ?=(%rise -.prod) (pure:m ~) + %- (slog leaf+"%mcp tool crashed" tang.prod) + ;< st=tool-state:nex-tools bind:m + (get-state-as:io ,tool-state:nex-tools) + =/ err-msg=@t (render-tang:build tang.prod) + =/ result-data=json + (pairs:enjs:format ~[['type' s+'error'] ['message' s+(crip "crash\0a{(trip err-msg)}")]]) + (replace:io !>(`tool-state:nex-tools`[tool.st args.st %done data.st `result-data])) + :: Strip .hoon suffix from grub name + :: + ++ strip-hoon + |= name=@ta + ^- @ta + =/ t=tape (trip name) + =/ len=@ud (lent t) + ?. (gth len 5) name + ?. =(".hoon" (slag (sub len 5) t)) name + (crip (scag (sub len 5) t)) + :: Get all compiled tools from bins via %code darts. + :: Peeks ball mirror for source filenames, then looks up each. + :: + ++ get-dynamic-tools + =/ m (fiber:fiber:nexus ,(map @t tool:nex-tools)) + ^- form:m + ;< src-seen=seen:nexus bind:m + (peek:io [%& %| /code/lib/mcp] ~) + ?. ?=([%& %ball *] src-seen) + (pure:m ~) + ?~ fil.ball.p.src-seen + (pure:m ~) + =/ names=(list @ta) + %+ turn ~(tap by contents.u.fil.ball.p.src-seen) + |=([name=@ta *] (strip-hoon name)) + =/ result=(map @t tool:nex-tools) ~ + |- + ?~ names (pure:m result) + =/ name=@ta i.names + ;< res=built:nexus bind:m (get-code-full:io [%& %& /code/lib/mcp name]) + ?. ?=(%vase -.res) $(names t.names) + =/ got=(each tool:nex-tools tang) + (mule |.(!<(tool:nex-tools vase.res))) + ?. ?=(%& -.got) $(names t.names) + $(names t.names, result (~(put by result) name:p.got p.got)) + :: +await-tool: look up a compiled tool handler by name + :: + :: Converts underscores to hyphens (get_ship → get-ship) and + :: looks up the compiled artifact from bins via %code dart. + :: + ++ await-tool + |= tool-name=@t + =/ m (fiber:fiber:nexus ,(each tool:nex-tools tang)) + ^- form:m + =/ file-name=@ta + (crip (turn (trip tool-name) |=(c=@t ?:(=(c '_') '-' c)))) + ;< res=built:nexus bind:m (get-code-full:io [%& %& /code/lib/mcp file-name]) + ?. ?=(%vase -.res) + (pure:m [%| ?:(?=(%tang -.res) tang.res ~[leaf+"not a vase"])]) + =/ got=(each tool:nex-tools tang) + (mule |.(!<(tool:nex-tools vase.res))) + ?: ?=(%& -.got) + (pure:m [%& p.got]) + (pure:m [%| p.got]) + -- +^- nexus:nexus +|% +++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 1) + [%fall %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %| /requests [~ ~] [~ ~] empty-dir:loader] + [%fall %| /tools [~ ~] [~ ~] empty-dir:loader] + == + [~ %1] + [sand gain ball] + == +:: +++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%mcp /main: failed") + ;< ~ bind:m (bind-http:io [~ /grubbery/mcp]) + ~& > "%mcp /main: ready, bound /grubbery/mcp" + (http-dispatch:io %mcp) + :: /requests/{eyre-id}: parse HTTP, dispatch + :: + [[%requests ~] @] + ;< ~ bind:m (rise-wait:io prod "%mcp request failed") + =/ eyre-id=@ta name.rail + ;< [src=@p req=inbound-request:eyre] bind:m + (get-state-as:io ,[src=@p inbound-request:eyre]) + ;< our=@p bind:m get-our:io + ?. =(src our) + (send-simple:srv eyre-id [[403 ~] `(as-octs:mimes:html 'Forbidden')]) + :: Parse JSON body + =/ bod=(unit octs) body.request.req + ?~ bod + (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing body')]) + =/ parsed=(unit json) (de:json:html q.u.bod) + ?~ parsed + (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid JSON')]) + :: tools/call: create tool grub, watch for result, respond + =/ method=(unit json) (~(get jo:json-utils u.parsed) /method) + ?: ?=([~ %s %'tools/call'] method) + =/ id=(unit json) (~(get jo:json-utils u.parsed) /id) + =/ params=(unit json) (~(get jo:json-utils u.parsed) /params) + ?~ params + (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing params')]) + =/ tool-name=(unit json) (~(get jo:json-utils u.params) /name) + =/ arguments=(unit json) (~(get jo:json-utils u.params) /arguments) + ?~ tool-name + (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing tool name')]) + ?. ?=([%s *] u.tool-name) + (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid tool name')]) + =/ tool-args=(map @t json) + ?~ arguments ~ + ?. ?=([%o *] u.arguments) ~ + p.u.arguments + =/ ts=tool-state:nex-tools + [p.u.tool-name tool-args %start ~ ~] + :: Create tool grub and subscribe + =/ tid=@ta eyre-id + =/ tool-road=road:tarball [%| 1 %& /tools tid] + ;< exists=? bind:m (peek-exists:io tool-road) + ;< =kept:nexus bind:m get-kept:io + ;< ~ bind:m + ?. =(~ kept) + (pure:m ~) + ;< * bind:m + (keep:io /watch tool-road ~) + ?. exists + (make:io tool-road |+[%.n [[/ %tool-state] !>(ts)] ~]) + (pure:m ~) + :: Wait for tool to finish + |- + ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /watch) + ?: ?=(%wake -.nw) $ + ?. ?=(%file -.view.nw) $ + =/ st=tool-state:nex-tools + !<(tool-state:nex-tools q.sage.view.nw) + ?. =(%done step.st) $ + ?~ update.st $ + :: Done — build JSON-RPC response from update + =/ result-type=(unit json) + (~(get jo:json-utils u.update.st) /type) + =/ rpc-result=json + ?: ?=([~ %s %'error'] result-type) + =/ msg=@t + (~(dog jo:json-utils u.update.st) /message so:dejs:format) + (rpc-error:nex-mcp rpc-internal-error:nex-mcp msg id) + =/ txt=@t + (~(dog jo:json-utils u.update.st) /text so:dejs:format) + (mcp-text-result:nex-mcp txt id) + =/ json-bytes=octs + (as-octs:mimes:html (en:json:html rpc-result)) + %- send-simple:srv + [eyre-id [[200 ~[['content-type' 'application/json']]] `json-bytes]] + :: Protocol methods (initialize, tools/list, etc.): handle inline + ;< dynamic=(map @t tool:nex-tools) bind:m get-dynamic-tools + ;< response=(unit json) bind:m (handle-request:nex-mcp u.parsed dynamic) + ?~ response + (send-simple:srv eyre-id [[202 ~] ~]) + =/ json-bytes=octs (as-octs:mimes:html (en:json:html u.response)) + %- send-simple:srv + [eyre-id [[200 ~[['content-type' 'application/json']]] `json-bytes]] + :: /tools/{id}: tool process + :: Reads tool-state, looks up handler from bins, runs it, writes %done. + :: + [[%tools ~] @] + ;< ~ bind:m (rise-tool prod) + ;< st=tool-state:nex-tools bind:m + (get-state-as:io ,tool-state:nex-tools) + ?: =(%done step.st) (pure:m ~) + :: Look up tool handler from bins + ;< got=(each tool:nex-tools tang) bind:m (await-tool tool.st) + ?: ?=(%| -.got) + =/ err-msg=@t (render-tang:build p.got) + =/ result-data=json + (pairs:enjs:format ~[['type' s+'error'] ['message' s+err-msg]]) + (replace:io !>(`tool-state:nex-tools`[tool.st args.st %done data.st `result-data])) + =/ tl=tool:nex-tools p.got + ;< result=tool-result:nex-tools bind:m handler.tl + =/ result-json=json + ?- -.result + %text (pairs:enjs:format ~[['type' s+'text'] ['text' s+text.result]]) + %error (pairs:enjs:format ~[['type' s+'error'] ['message' s+message.result]]) + == + (replace:io !>(`tool-state:nex-tools`[tool.st args.st %done data.st `result-json])) + == +++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the MCP nexus.' + ~ + %- crip + """ + MCP NEXUS — Model Context Protocol JSON-RPC tool server + + Exposes Hoon-defined tools to AI clients (Claude Code, etc.) via + the MCP JSON-RPC protocol. Tools are compiled by the standard + build pipeline (gub/lib/mcp/) and looked up from bins at runtime. + + FILES: + main.sig HTTP binding process. Registers /grubbery/mcp + with the server, handles JSON-RPC dispatch. + ver.ud Schema version. + + DIRECTORIES: + tools/ Running tool instances. Each active tool call + gets a fiber here (tool-state mark). Cleaned + up on completion. + requests/ Per-request fibers for active HTTP connections. + """ + [%tools ~] + 'Running tool instances. Each active tool call gets a fiber here with its state (tool-state mark). Cleaned up on completion.' + [%requests ~] + 'Per-request fibers for active MCP HTTP connections.' + == + %| + ?+ rail.p.mana 'File under the MCP nexus.' + [~ %'main.sig'] 'MCP HTTP binding process. Mark: sig. Registers /grubbery/mcp with the server, parses JSON-RPC requests, dispatches to tool fibers in /tools/.' + [~ %'ver.ud'] 'Schema version counter. Mark: ud.' + == + == +-- diff --git a/desk/gub/nex/oneshot.hoon b/desk/gub/nex/oneshot.hoon new file mode 100644 index 0000000..8b3135f --- /dev/null +++ b/desk/gub/nex/oneshot.hoon @@ -0,0 +1,588 @@ +:: oneshot nexus: playground for one-shot LLM composition +:: +/< oneshot /lib/oneshot.hoon +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + =/ default-claude=json + %- pairs:enjs:format + :~ ['api_key' s+''] + ['model' s+'claude-sonnet-4-20250514'] + ['max_tokens' (numb:enjs:format 4.096)] + == + =/ default-brave=json + (pairs:enjs:format ~[['api_key' s+'']]) + =/ default-descs=json + %- pairs:enjs:format + %+ turn ~(tap by descs:oneshot) + |= [k=@t v=@t] + [k s+v] + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/config %'claude.json'] %.n [~ [/ %json] !>(default-claude)]] + [%fall %& [/config %'brave.json'] %.n [~ [/ %json] !>(default-brave)]] + [%over %& [/ %'descs.json'] %.n [~ [/ %json] !>(default-descs)]] + [%fall %& [/ %'request.json'] %.n [~ [/ %json] !>((pairs:enjs:format ~))]] + [%fall %& [/ %'result.json'] %.n [~ [/ %json] !>((pairs:enjs:format ~[['status' s+'idle']]))]] + [%fall %& [/ %'briefing.json'] %.n [~ [/ %json] !>((pairs:enjs:format ~[['step' s+'idle']]))]] + [%fall %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%over %& [/ui %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html (oneshot-page '' ~))))]] + [%over %& [/ui %'briefing.html'] %.n [~ [/ %html] !>((crip (en-xml:html briefing-page)))]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /main.sig: accept pokes, run one-shot calls, store result + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%oneshot: failed") + |- + ;< =sage:tarball bind:m take-poke:io + ?. ?=(%json name.p.sage) + ~& > [%oneshot-unknown-mark name.p.sage] + $ + =/ req=json !<(json q.sage) + ?. ?=(%o -.req) $ + =/ request-road=road:tarball (cord-to-road:tarball './request.json') + =/ result-road=road:tarball (cord-to-road:tarball './result.json') + :: check for save-only (no prompt, just persist fields) + =/ action=@t + =/ v (~(get by p.req) 'action') + ?. ?=([~ %s *] v) 'call' + p.u.v + ?: =(action 'save') + ;< ~ bind:m (over:io request-road [[/ %json] !>(req)]) + $ + ?: =(action 'search') + =/ query=@t + =/ v (~(get by p.req) 'prompt') + ?. ?=([~ %s *] v) '' + p.u.v + ?: =('' query) $ + ;< ~ bind:m + (over:io result-road [[/ %json] !>((pairs:enjs:format ~[['status' s+'loading']]))]) + ;< brave-key=@t bind:m read-brave-key + ?: =('' brave-key) + ;< ~ bind:m + (over:io result-road [[/ %json] !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'No Brave API key configured']]))]) + $ + ;< results=@t bind:m (~(web search:oneshot brave-key) query) + ;< ~ bind:m + (over:io result-road [[/ %json] !>((pairs:enjs:format ~[['status' s+'ok'] ['output' s+results] ['mark' s+'search']]))]) + $ + ?: =(action 'brief') + =/ topic=@t + =/ v (~(get by p.req) 'prompt') + ?. ?=([~ %s *] v) '' + p.u.v + ?: =('' topic) $ + =/ brief-road=road:tarball (cord-to-road:tarball './briefing.json') + :: step 1: generating queries + :: + ;< ~ bind:m + (over:io brief-road [[/ %json] !>((pairs:enjs:format ~[['step' s+'generating-queries'] ['topic' s+topic]]))]) + ;< cfg=claude-config:oneshot bind:m read-claude-config + ?: =('' api-key.cfg) + ;< ~ bind:m + (over:io brief-road [[/ %json] !>((pairs:enjs:format ~[['step' s+'error'] ['error' s+'No API key configured']]))]) + $ + ;< brave-key=@t bind:m read-brave-key + ?: =('' brave-key) + ;< ~ bind:m + (over:io brief-road [[/ %json] !>((pairs:enjs:format ~[['step' s+'error'] ['error' s+'No Brave API key configured']]))]) + $ + =/ brfng ~(. briefing:oneshot [cfg brave-key]) + ;< queries=(list @t) bind:m (generate-queries:brfng topic) + ?~ queries + ;< ~ bind:m + (over:io brief-road [[/ %json] !>((pairs:enjs:format ~[['step' s+'error'] ['error' s+'No queries generated']]))]) + $ + :: step 2: searching (show queries) + :: + =/ query-json=json [%a (turn queries |=(q=@t s+q))] + =/ total=@t (crip (a-co:co (lent queries))) + ;< ~ bind:m + (over:io brief-road [[/ %json] !>((pairs:enjs:format ~[['step' s+'searching'] ['topic' s+topic] ['queries' query-json] ['completed' s+'0'] ['total' s+total]]))]) + ;< research=@t bind:m (run-searches:brfng queries) + :: step 3: synthesizing + :: + ;< ~ bind:m + (over:io brief-road [[/ %json] !>((pairs:enjs:format ~[['step' s+'synthesizing'] ['topic' s+topic] ['queries' query-json] ['research' s+research]]))]) + ;< =result:oneshot bind:m + (synthesize:brfng topic research [%txt 'Write a clear, analytical briefing.']) + :: done + :: + =/ resp=json + %- pairs:enjs:format + ?: ?=(%& -.result) + :~ ['step' s+'done'] + ['topic' s+topic] + ['queries' query-json] + ['research' s+research] + ['briefing' s+raw.p.result] + == + ~[['step' s+'error'] ['topic' s+topic] ['error' s+'Synthesis failed']] + ;< ~ bind:m (over:io brief-road [[/ %json] !>(resp)]) + $ + :: extract fields + =/ system=@t + =/ v (~(get by p.req) 'system') + ?. ?=([~ %s *] v) '' + p.u.v + =/ prompt=@t + =/ v (~(get by p.req) 'prompt') + ?. ?=([~ %s *] v) '' + p.u.v + =/ out-mark=@t + =/ v (~(get by p.req) 'mark') + ?. ?=([~ %s *] v) 'txt' + p.u.v + =/ out-desc=@t + =/ v (~(get by p.req) 'desc') + ?. ?=([~ %s *] v) 'Respond with plain text.' + p.u.v + ?: =('' prompt) $ + :: save request, set loading state + ;< ~ bind:m (over:io request-road [[/ %json] !>(req)]) + ;< ~ bind:m + (over:io result-road [[/ %json] !>((pairs:enjs:format ~[['status' s+'loading']]))]) + :: read config + ;< cfg=claude-config:oneshot bind:m read-claude-config + ?: =('' api-key.cfg) + ~& >>> %oneshot-no-api-key + ;< ~ bind:m + (over:io result-road [[/ %json] !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'No API key configured']]))]) + $ + ;< =result:oneshot bind:m + (~(call agent:oneshot cfg) [system prompt [out-mark out-desc]]) + =/ resp=json + %- pairs:enjs:format + ?: ?=(%& -.result) + ~[['status' s+'ok'] ['output' s+raw.p.result] ['mark' s+out-mark]] + ?- -.p.result + %& :~ ['status' s+'error'] + ['mark' s+out-mark] + ['output' s+raw.p.p.result] + :- 'error' + s+(of-wain:format (turn tang.p.p.result |=(=tank (crip ~(ram re tank))))) + == + %| ~[['status' s+'error'] ['error' s+p.p.result]] + == + ;< ~ bind:m (over:io result-road [[/ %json] !>(resp)]) + $ + :: /ui/page.html: watches result.json, peeks request.json on render + :: + [[%ui ~] %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%oneshot page: failed") + ;< init=view:nexus bind:m + (keep:io /res (cord-to-road:tarball '../result.json') ~) + =/ res=@t + ?. ?=([%file *] init) '' + (render-result !<(json q.sage.init)) + ;< req=json bind:m (read-request '../request.json') + ;< ~ bind:m (replace:io !>((crip (en-xml:html (oneshot-page res req))))) + |- + ;< upd=view:nexus bind:m (take-news:io /res) + ?. ?=([%file *] upd) $ + =/ res=@t (render-result !<(json q.sage.upd)) + ;< req=json bind:m (read-request '../request.json') + ;< ~ bind:m (replace:io !>((crip (en-xml:html (oneshot-page res req))))) + $ + :: /ui/briefing.html: watches briefing.json for live progress + :: + [[%ui ~] %'briefing.html'] + ;< ~ bind:m (rise-wait:io prod "%briefing page: failed") + ;< init=view:nexus bind:m + (keep:io /brf (cord-to-road:tarball '../briefing.json') ~) + =/ state=json + ?. ?=([%file *] init) ~ + !<(json q.sage.init) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (briefing-page-live state))))) + |- + ;< upd=view:nexus bind:m (take-news:io /brf) + ?. ?=([%file *] upd) $ + =/ state=json !<(json q.sage.upd) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (briefing-page-live state))))) + $ + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the oneshot nexus.' + ~ + %- crip + """ + ONESHOT NEXUS — playground for one-shot LLM composition + + Experimental nexus for building and testing composed one-shot + LLM call pipelines. Each call is independent with no chat history. + + Poke /main.sig with %json containing system and prompt fields. + View UI at /ui/page.html. + """ + == + %| + ?+ rail.p.mana 'File under the oneshot nexus.' + [~ %'ver.ud'] 'Schema version. Mark: ud.' + [~ %'descs.json'] 'Mark format descriptions for LLM output constraining. Mark: json.' + [~ %'request.json'] 'Saved request fields (system, prompt, mark, desc). Mark: json.' + [~ %'main.sig'] 'Accepts JSON pokes with system/prompt/mark/desc, runs one-shot call.' + == + == + -- +|% +++ read-request + |= rel=@t + =/ m (fiber:fiber:nexus ,json) + ^- form:m + ;< =seen:nexus bind:m + (peek:io (cord-to-road:tarball rel) `[/ %json]) + ?. ?=([%& %file *] seen) + (pure:m ~) + (pure:m !<(json q.sage.p.seen)) +:: +++ read-claude-config + =/ m (fiber:fiber:nexus ,claude-config:oneshot) + ^- form:m + ;< =seen:nexus bind:m + (peek:io (cord-to-road:tarball './config/claude.json') `[/ %json]) + ?. ?=([%& %file *] seen) + (pure:m ['' 'claude-sonnet-4-20250514' 4.096]) + =/ cfg=json !<(json q.sage.p.seen) + ?. ?=(%o -.cfg) + (pure:m ['' 'claude-sonnet-4-20250514' 4.096]) + =/ api-key=@t + =/ v (~(get by p.cfg) 'api_key') + ?. ?=([~ %s *] v) '' + p.u.v + =/ model=@t + =/ v (~(get by p.cfg) 'model') + ?. ?=([~ %s *] v) 'claude-sonnet-4-20250514' + p.u.v + =/ max-tokens=@ud + =/ v (~(get by p.cfg) 'max_tokens') + ?. ?=([~ %n *] v) 4.096 + (fall (rush p.u.v dem) 4.096) + (pure:m [api-key model max-tokens]) +:: +++ read-brave-key + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< =seen:nexus bind:m + (peek:io (cord-to-road:tarball './config/brave.json') `[/ %json]) + ?. ?=([%& %file *] seen) + (pure:m '') + =/ cfg=json !<(json q.sage.p.seen) + ?. ?=(%o -.cfg) + (pure:m '') + =/ v (~(get by p.cfg) 'api_key') + ?. ?=([~ %s *] v) (pure:m '') + (pure:m p.u.v) +:: +++ render-result + |= state=json + ^- @t + ?. ?=(%o -.state) '' + =/ status=(unit json) (~(get by p.state) 'status') + ?+ status '' + [~ %s %'loading'] 'Thinking...' + [~ %s %'error'] + =/ err=(unit json) (~(get by p.state) 'error') + =/ out=(unit json) (~(get by p.state) 'output') + %+ rap 3 + :~ 'Error: ' + ?:(?=([~ %s *] err) p.u.err 'Unknown error') + ?:(?=([~ %s *] out) (cat 3 '\0a\0aRaw output:\0a' p.u.out) '') + == + [~ %s %'ok'] + =/ out=(unit json) (~(get by p.state) 'output') + ?. ?=([~ %s *] out) '' + p.u.out + == +:: +++ oneshot-page + |= [result=@t req=json] + ^- manx + =/ api=tape "/grubbery/api" + =/ base=tape "oneshot.oneshot" + =/ sys=tape (trip (~(dug jo:json-utils req) /system so:dejs:format 'You are a helpful assistant. Reply concisely.')) + =/ prm=tape (trip (~(dug jo:json-utils req) /prompt so:dejs:format '')) + =/ mrk=tape (trip (~(dug jo:json-utils req) /mark so:dejs:format 'txt')) + =/ dsc=tape (trip (~(dug jo:json-utils req) /desc so:dejs:format 'Respond with plain text.')) + ;html + ;head + ;title: Oneshot + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;style + ;+ ;/ + ;: weld + "body \{ font-family: monospace; max-width: 600px; margin: 0 auto; padding: 2rem; } " + "textarea \{ width: 100%; box-sizing: border-box; font-family: monospace; padding: 0.5rem; } " + "#output \{ white-space: pre-wrap; padding: 1rem; border: 1px solid #ccc; margin-top: 1rem; min-height: 4rem; max-height: 30vh; overflow-y: auto; background: #f9f9f9; word-break: break-word; } " + "#status \{ margin-top: 0.5rem; padding: 0.4rem 0.6rem; font-size: 0.8rem; border-radius: 3px; display: none; } " + "#status.ok \{ display: block; background: #e6f4ea; color: #1e7e34; border: 1px solid #b7dfbf; } " + "#status.error \{ display: block; background: #fce8e6; color: #c62828; border: 1px solid #f5c6cb; } " + "#status.loading \{ display: block; background: #fff3e0; color: #e65100; border: 1px solid #ffe0b2; } " + "input \{ font-family: monospace; padding: 0.5rem; box-sizing: border-box; width: 100%; } " + "button \{ padding: 0.5rem 1rem; margin-top: 0.5rem; cursor: pointer; font-family: monospace; } " + ".muted \{ opacity: 0.5; } " + "label \{ display: block; margin-top: 1rem; } " + "#header \{ display: flex; justify-content: space-between; align-items: baseline; } " + ".hdr-btn \{ font-size: 0.65rem; text-transform: uppercase; opacity: 0.4; padding: 0.15rem 0.4rem; border: 1px solid #ccc; border-radius: 3px; background: none; cursor: pointer; margin-left: 0.4rem; } " + ".hdr-btn:hover \{ opacity: 0.8; } " + "#cfg-backdrop \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.3); z-index: 100; } " + "#cfg-backdrop.open \{ display: flex; align-items: center; justify-content: center; } " + "#cfg-modal \{ background: #fff; border: 1px solid #ccc; border-radius: 4px; width: 90%; max-width: 500px; height: 40vh; display: flex; flex-direction: column; padding: 1rem; } " + "#cfg-header \{ display: flex; justify-content: space-between; align-items: baseline; margin-bottom: 0.75rem; } " + "#cfg-header span \{ font-size: 0.8rem; font-weight: bold; text-transform: uppercase; opacity: 0.5; } " + "#cfg-actions button \{ font-size: 0.7rem; margin-left: 0.5rem; } " + "#cfg-tabs \{ display: flex; gap: 0.3rem; margin-bottom: 0.5rem; } " + ".cfg-tab \{ font-size: 0.75rem; padding: 0.2rem 0.5rem; border: 1px solid #ccc; border-radius: 3px; background: none; cursor: pointer; font-family: monospace; } " + ".cfg-tab.active \{ background: #333; color: #fff; border-color: #333; } " + "#cfg-editor \{ flex: 1; font-family: monospace; font-size: 0.8rem; line-height: 1.5; border: 1px solid #ccc; border-radius: 4px; padding: 0.5rem; resize: none; } " + "#descs-backdrop \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.3); z-index: 100; } " + "#descs-backdrop.open \{ display: flex; align-items: center; justify-content: center; } " + "#descs-modal \{ background: #fff; border: 1px solid #ccc; border-radius: 4px; width: 90%; max-width: 600px; height: 60vh; display: flex; flex-direction: column; padding: 1rem; } " + "#descs-list \{ display: flex; gap: 0.3rem; flex-wrap: wrap; margin-bottom: 0.5rem; } " + "#descs-list button \{ font-size: 0.75rem; padding: 0.2rem 0.5rem; border: 1px solid #ccc; border-radius: 3px; background: none; cursor: pointer; font-family: monospace; } " + "#descs-list button.active \{ background: #333; color: #fff; border-color: #333; } " + "#descs-editor \{ flex: 1; font-family: monospace; font-size: 0.8rem; line-height: 1.5; border: 1px solid #ccc; border-radius: 4px; padding: 0.5rem; resize: none; } " + == + == + == + ;body + ;div#header + ;h1: Oneshot + ;div + ;a.hdr-btn(href "briefing.html"): briefing + ;button#descs-btn.hdr-btn: marks + ;button#config-btn.hdr-btn: config + == + == + ;label: System prompt + ;textarea#system(rows "3"): {sys} + ;label: Prompt + ;textarea#prompt(rows "4", placeholder "Ask something..."): {prm} + ;label: Output mark + ;input#mark(type "text", value "{mrk}", style "width: 100%; box-sizing: border-box"); + ;label: Format description + ;textarea#desc(rows "2"): {dsc} + ;button#send: Send + ;button#search-btn: Search + ;div#status; + ;div#output + ;+ ;/ ?:(=('' result) "Response will appear here." (trip result)) + == + ;div#cfg-backdrop + ;div#cfg-modal + ;div#cfg-header + ;span: Config + ;div#cfg-actions + ;button#cfg-save: save + ;button#cfg-close: close + == + == + ;div#cfg-tabs + ;button.cfg-tab.active(data-file "config/claude.json", onclick "cfgLoad(this.dataset.file)"): claude + ;button.cfg-tab(data-file "config/brave.json", onclick "cfgLoad(this.dataset.file)"): brave + == + ;textarea#cfg-editor; + == + == + ;div#descs-backdrop + ;div#descs-modal + ;div#cfg-header + ;span: Mark Descriptions + ;button#descs-close.hdr-btn: close + == + ;div#descs-list; + ;textarea#descs-editor; + == + == + ;script + ;+ ;/ + ;: weld + "var API='{api}';var BASE='{base}';" + :: load mark descriptions and auto-populate on mark change + "var DESCS=\{};(async function()\{try\{var r=await fetch(API+'/file/'+BASE+'/descs.json?mark=json');if(r.ok)DESCS=JSON.parse(await r.text())}catch(e)\{}})();document.getElementById('mark').addEventListener('blur',function()\{var m=this.value.trim();if(DESCS[m])document.getElementById('desc').value=DESCS[m]});" + :: load latest request on init (server-side may be stale) + "(async function()\{try\{var r=await fetch(API+'/file/'+BASE+'/request.json?mark=json');if(!r.ok)return;var j=JSON.parse(await r.text());if(j.system)document.getElementById('system').value=j.system;if(j.prompt)document.getElementById('prompt').value=j.prompt;if(j.mark)document.getElementById('mark').value=j.mark;if(j.desc)document.getElementById('desc').value=j.desc}catch(e)\{}})();" + :: send: include mark and desc + "document.getElementById('send').onclick=async function()\{var s=document.getElementById('system').value;var p=document.getElementById('prompt').value.trim();var m=document.getElementById('mark').value.trim()||'txt';var d=document.getElementById('desc').value;if(!p)\{document.getElementById('prompt').style.border='2px solid #c62828';return}document.getElementById('prompt').style.border='';document.getElementById('output').textContent='Sending...';document.getElementById('output').className='muted';await fetch(API+'/poke/'+BASE+'/main.sig?mark=json',\{method:'POST',headers:\{'Content-Type':'application/json'},body:JSON.stringify(\{system:s,prompt:p,mark:m,desc:d})})};" + :: search button + "document.getElementById('search-btn').onclick=async function()\{var p=document.getElementById('prompt').value.trim();if(!p)\{document.getElementById('prompt').style.border='2px solid #c62828';return}document.getElementById('prompt').style.border='';document.getElementById('output').textContent='Searching...';document.getElementById('output').className='muted';await fetch(API+'/poke/'+BASE+'/main.sig?mark=json',\{method:'POST',headers:\{'Content-Type':'application/json'},body:JSON.stringify(\{action:'search',prompt:p})})};" + :: live-save: persist fields on blur + "function saveFields()\{var b=\{action:'save',system:document.getElementById('system').value,prompt:document.getElementById('prompt').value,mark:document.getElementById('mark').value,desc:document.getElementById('desc').value};fetch(API+'/poke/'+BASE+'/main.sig?mark=json',\{method:'POST',headers:\{'Content-Type':'application/json'},body:JSON.stringify(b)})}['system','prompt','mark','desc'].forEach(function(id)\{document.getElementById(id).addEventListener('input',saveFields)});" + :: config modal: tabs for claude/brave + "var cfgBack=document.getElementById('cfg-backdrop'),cfgEditor=document.getElementById('cfg-editor'),cfgFile='config/claude.json';" + "function cfgLoad(f)\{cfgFile=f;document.querySelectorAll('.cfg-tab').forEach(function(b)\{b.className='cfg-tab'+(b.dataset.file===f?' active':'')});fetch(API+'/file/'+BASE+'/'+f+'?mark=json').then(function(r)\{return r.ok?r.text():''}).then(function(t)\{try\{cfgEditor.value=JSON.stringify(JSON.parse(t),null,2)}catch(e)\{cfgEditor.value=t}})}" + "document.getElementById('config-btn').onclick=function()\{cfgBack.classList.add('open');cfgLoad('config/claude.json')};" + "document.getElementById('cfg-save').onclick=async function()\{try\{var j=JSON.parse(cfgEditor.value);var r=await fetch(API+'/over/'+BASE+'/'+cfgFile+'?mark=json',\{method:'POST',headers:\{'Content-Type':'application/json'},body:JSON.stringify(j)});if(r.ok)\{cfgBack.classList.remove('open')}else\{alert('Save failed: '+r.status)}}catch(e)\{alert('Invalid JSON: '+e.message)}};" + "document.getElementById('cfg-close').onclick=function()\{cfgBack.classList.remove('open')};" + "cfgBack.onclick=function(e)\{if(e.target===cfgBack)cfgBack.classList.remove('open')};" + :: descs modal + "var descsBack=document.getElementById('descs-backdrop'),descsList=document.getElementById('descs-list'),descsEditor=document.getElementById('descs-editor'),curMark='';" + "function renderDescsList()\{descsList.innerHTML='';Object.keys(DESCS).sort().forEach(function(k)\{var b=document.createElement('button');b.textContent='%'+k;if(k===curMark)b.className='active';b.onclick=function()\{curMark=k;descsEditor.value=DESCS[k];renderDescsList()};descsList.appendChild(b)})}" + "document.getElementById('descs-btn').onclick=function()\{descsBack.classList.add('open');curMark='';descsEditor.value='Select a mark to view its description.';descsEditor.readOnly=true;renderDescsList()};" + "document.getElementById('descs-close').onclick=function()\{descsBack.classList.remove('open')};" + "descsBack.onclick=function(e)\{if(e.target===descsBack)descsBack.classList.remove('open')};" + :: SSE: stream result updates + "async function connect()\{try\{var r=await fetch(API+'/keep/'+BASE+'/result.json?mark=txt',\{headers:\{Accept:'text/event-stream'}});var R=r.body.getReader();var d=new TextDecoder();var buf='';while(true)\{var c=await R.read();if(c.done)break;buf+=d.decode(c.value,\{stream:true});var ps=buf.split('\\n\\n');buf=ps.pop();for(var i=0;i(~)]] + [%fall %| /requests [~ ~] [~ ~] empty-dir:loader] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%peers /main: failed") + ;< ~ bind:m (bind-http:io [~ /grubbery/peers]) + (http-dispatch:io %peers) + [[%requests ~] @] + ;< ~ bind:m (rise-wait:io prod "%peers /requests: failed") + =/ eyre-id=@ta name.rail + ;< [src=@p req=inbound-request:eyre] bind:m (get-state-as:io ,[src=@p inbound-request:eyre]) + ;< our=@p bind:m get-our:io + ?. =(src our) + ;< ~ bind:m (send-simple:srv eyre-id [[403 ~] `(as-octs:mimes:html 'Forbidden')]) + (pure:m ~) + =/ [site=path args=quay:eyre] (parse-url:http-utils url.request.req) + =/ suffix=path (slag 2 site) :: strip /grubbery/peers + ?: =('POST' method.request.req) + (handle-post eyre-id suffix req) + (handle-get eyre-id suffix) + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Directory under peers.' + ~ + 'Peer management UI. Usergroups and ship permissions at /grubbery/peers/.' + [%requests ~] + 'Per-request HTTP fibers.' + == + %| + ?+ rail.p.mana 'File under peers.' + [~ %'main.sig'] 'HTTP binding process for /grubbery/peers/.' + == + == + -- +:: +|% +++ srv ~(. http-res:io [%| 1 %& ~ %'main.sig']) +++ peer-base /sys/ames +:: +++ abs-file + |= [=path name=@ta] + ^- road:tarball + [%& %& [(weld peer-base path) name]] +:: +++ abs-dir + |= =path + ^- road:tarball + [%& %| (weld peer-base path)] +:: +:: HTTP handlers +:: +++ handle-get + |= [eyre-id=@ta suffix=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + :: read all peer data + ;< ug-seen=seen:nexus bind:m (peek:io (abs-dir /usergroups) ~) + ;< ships-seen=seen:nexus bind:m (peek:io (abs-dir /ships) ~) + =/ ug-ball=ball:tarball + ?. ?=([%& %ball *] ug-seen) [~ ~] + ball.p.ug-seen + =/ groups=(list group-info) (read-groups ug-ball) + =/ ships=(list @ta) + ?. ?=([%& %ball *] ships-seen) ~ + (sort ~(tap in ~(key by dir.ball.p.ships-seen)) aor) + =/ page=manx (render-page groups ships suffix) + =/ bod=octs (as-octs:mimes:html (crip (en-xml:html page))) + ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils [/text/html bod])) + (pure:m ~) +:: +++ handle-post + |= [eyre-id=@ta suffix=path req=inbound-request:eyre] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ body=@t + ?~ body.request.req '' + q.u.body.request.req + ?+ suffix + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Not found')]) + (pure:m ~) + :: + [%create ~] + =/ name=@t body + ?: =('' name) + (redirect eyre-id) + =/ nam=@ta (crip (trip name)) + =/ who-road=road:tarball (abs-file /usergroups/[nam] %'who.ships') + =/ how-road=road:tarball (abs-file /usergroups/[nam] %'how.weir') + ;< * bind:m (make-soft:io who-road |+[%.n [[/ %ships] !>(*(set @p))] ~]) + ;< * bind:m (make-soft:io how-road |+[%.n [[/ %weir] !>(*weir:nexus)] ~]) + (redirect eyre-id) + :: + [%delete ~] + =/ nam=@ta (crip (trip body)) + ;< * bind:m (cull-soft:io (abs-dir /usergroups/[nam])) + (redirect eyre-id) + :: + [%members ~] + :: body = "name\0amember1\0amember2..." + =/ lines=(list @t) (split-lines body) + ?~ lines (redirect eyre-id) + =/ nam=@ta (crip (trip i.lines)) + =/ ships=(set @p) + %- ~(gas in *(set @p)) + (murn t.lines |=(t=@t (slaw %p t))) + ;< ~ bind:m (over:io (abs-file /usergroups/[nam] %'who.ships') [[/ %ships] !>(ships)]) + (redirect eyre-id) + :: + [%permissions ~] + :: body = "name\0amake:path1,path2\0apoke:path1\0apeek:path1" + =/ lines=(list @t) (split-lines body) + ?~ lines (redirect eyre-id) + =/ nam=@ta (crip (trip i.lines)) + =/ =weir:nexus (parse-weir-lines t.lines) + ;< ~ bind:m (over:io (abs-file /usergroups/[nam] %'how.weir') [[/ %weir] !>(weir)]) + (redirect eyre-id) + == +:: +++ redirect + |= eyre-id=@ta + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ hed=response-header:http [303 ~[['location' '/grubbery/peers/']]] + ;< ~ bind:m (send-header:srv eyre-id hed) + ;< ~ bind:m (send-data:srv eyre-id ~) + (pure:m ~) +:: +:: Data reading +:: ++$ group-info + $: name=@ta + members=(set @p) + =weir:nexus + == +:: +++ read-groups + |= ug-ball=ball:tarball + ^- (list group-info) + =/ names=(list @ta) + (sort ~(tap in ~(key by dir.ug-ball)) aor) + %+ murn names + |= name=@ta + ^- (unit group-info) + =/ grp=ball:tarball (~(dip ba:tarball ug-ball) /[name]) + =/ who-c=(unit content:tarball) (~(get ba:tarball grp) [/ %'who.ships']) + =/ how-c=(unit content:tarball) (~(get ba:tarball grp) [/ %'how.weir']) + ?~ who-c ~ + =/ who-res (mule |.(!<((set @p) q.sage.u.who-c))) + =/ members=(set @p) ?:(?=(%| -.who-res) ~ p.who-res) + =/ =weir:nexus + ?~ how-c *weir:nexus + =/ res (mule |.(!<(weir:nexus q.sage.u.how-c))) + ?:(?=(%| -.res) *weir:nexus p.res) + `[name members weir] +:: +:: Parsing helpers +:: +++ split-lines + |= t=@t + ^- (list @t) + =/ tape=(list @) (trip t) + =| acc=(list @t) + =| cur=(list @) + |- + ?~ tape (flop [(crip (flop cur)) acc]) + ?: =(i.tape 10) + $(tape t.tape, acc [(crip (flop cur)) acc], cur ~) + $(tape t.tape, cur [i.tape cur]) +:: +++ parse-road-text + |= t=@t + ^- road:tarball + =/ pax=path (fall (rush t stap) /) + ?~ pax [%& %| /] + =/ last=tape (trip (rear pax)) + ?~ (find "." last) + [%& %| pax] + [%& %& (snip `path`pax) (rear pax)] +:: +++ road-to-text + |= =road:tarball + ^- tape + ?- -.road + %& + ?- -.p.road + %& "{(spud path.p.p.road)}/{(trip name.p.p.road)}" + %| (spud p.p.road) + == + %| + ?- -.q.p.road + %& "{(spud path.p.q.p.road)}/{(trip name.p.q.p.road)}" + %| (spud p.q.p.road) + == + == +:: +++ parse-weir-lines + |= lines=(list @t) + ^- weir:nexus + =| mk=(set road:tarball) + =| pk=(set road:tarball) + =| pe=(set road:tarball) + |- + ?~ lines [mk pk pe] + =/ line=tape (trip i.lines) + ?: =("make:" (scag 5 line)) + =/ roads=(list road:tarball) + (turn (split-commas (crip (slag 5 line))) parse-road-text) + $(lines t.lines, mk (~(uni in mk) (silt roads))) + ?: =("poke:" (scag 5 line)) + =/ roads=(list road:tarball) + (turn (split-commas (crip (slag 5 line))) parse-road-text) + $(lines t.lines, pk (~(uni in pk) (silt roads))) + ?: =("peek:" (scag 5 line)) + =/ roads=(list road:tarball) + (turn (split-commas (crip (slag 5 line))) parse-road-text) + $(lines t.lines, pe (~(uni in pe) (silt roads))) + $(lines t.lines) +:: +++ split-commas + |= t=@t + ^- (list @t) + =/ tape=(list @) (trip t) + =| acc=(list @t) + =| cur=(list @) + |- + ?~ tape + =/ s=@t (crip (flop cur)) + ?:(=('' s) (flop acc) (flop [s acc])) + ?: =(i.tape ',') + $(tape t.tape, acc [(crip (flop cur)) acc], cur ~) + $(tape t.tape, cur [i.tape cur]) +:: +:: HTML rendering +:: +++ render-page + |= [groups=(list group-info) ships=(list @ta) suffix=path] + ^- manx + ;html + ;head + ;title: Peers + ;meta(charset "utf-8"); + ;style + ;+ ;/ %- trip %- crip + ;: weld + "* \{ margin:0; padding:0; box-sizing:border-box; }" + "body \{ font-family:monospace; max-width:720px; margin:0 auto; padding:2rem; background:#fafafa; color:#111; }" + "h1 \{ font-size:1.4rem; margin-bottom:1.5rem; }" + "h2 \{ font-size:1rem; margin-bottom:.5rem; color:#555; }" + ".group \{ background:#fff; border:1px solid #ddd; border-radius:6px; padding:1rem; margin-bottom:1rem; }" + ".group-hdr \{ display:flex; align-items:center; gap:.75rem; margin-bottom:.75rem; }" + ".group-hdr strong \{ font-size:.95rem; }" + ".group-hdr .count \{ color:#888; font-size:.8rem; }" + ".members \{ display:flex; flex-wrap:wrap; gap:4px; margin-bottom:.75rem; }" + ".ship \{ background:#eef; border:1px solid #ccd; border-radius:3px; padding:1px 6px; font-size:.75rem; }" + ".perms \{ font-size:.75rem; color:#666; }" + ".perms span \{ display:inline-block; background:#f0f0f0; border-radius:3px; padding:1px 5px; margin:1px; }" + "label \{ display:block; font-size:.7rem; color:#888; text-transform:uppercase; margin-top:.5rem; margin-bottom:.25rem; }" + "textarea \{ width:100%; font-family:monospace; font-size:.8rem; padding:.5rem; border:1px solid #ccc; border-radius:4px; resize:vertical; min-height:2.5rem; }" + "button \{ font-family:monospace; font-size:.8rem; padding:.25rem .75rem; border:1px solid #ccc; border-radius:4px; background:#fff; cursor:pointer; }" + "button:hover \{ background:#eee; }" + ".btn-red \{ color:#c44; border-color:#c44; }" + ".btn-red:hover \{ background:#fdd; }" + ".btn-grn \{ color:#2a2; border-color:#2a2; }" + ".btn-grn:hover \{ background:#dfd; }" + ".actions \{ display:flex; gap:.5rem; margin-top:.5rem; }" + ".create-form \{ display:flex; gap:.5rem; margin-bottom:1.5rem; }" + ".create-form input \{ font-family:monospace; font-size:.85rem; padding:.25rem .5rem; border:1px solid #ccc; border-radius:4px; }" + ".ships-section \{ margin-top:2rem; }" + ".ship-list \{ display:flex; flex-wrap:wrap; gap:4px; }" + ".empty \{ color:#999; font-size:.85rem; }" + == + == + == + ;body + ;h1: Peers + :: create group form + ;div(class "create-form") + ;input(id "new-name", type "text", placeholder "group name"); + ;button(class "btn-grn", onclick "createGroup()"): + New Group + == + :: groups + ;div + ;* (render-groups groups) + == + :: ships + ;div(class "ships-section") + ;h2: Ships ({(a-co:co (lent ships))}) + ;div(class "ship-list") + ;* (render-ships ships) + == + == + ;script + ;+ ;/ %- trip %- crip + ;: weld + "var BASE='/grubbery/peers/';\0a" + "function createGroup()\{\0a" + " var n=document.getElementById('new-name').value.trim();\0a" + " if(!n) return;\0a" + " fetch(BASE+'create',\{method:'POST',body:n}).then(()=>location.reload());\0a" + "}\0a" + "function deleteGroup(name)\{\0a" + " if(!confirm('Delete group '+name+'?')) return;\0a" + " fetch(BASE+'delete',\{method:'POST',body:name}).then(()=>location.reload());\0a" + "}\0a" + "function saveMembers(name)\{\0a" + " var ta=document.getElementById('mem-'+name);\0a" + " var lines=ta.value.split('\\n').map(s=>s.trim()).filter(s=>s);\0a" + " fetch(BASE+'members',\{method:'POST',body:name+'\\n'+lines.join('\\n')}).then(()=>location.reload());\0a" + "}\0a" + "function savePerms(name)\{\0a" + " var mk=document.getElementById('make-'+name).value.trim();\0a" + " var pk=document.getElementById('poke-'+name).value.trim();\0a" + " var pe=document.getElementById('peek-'+name).value.trim();\0a" + " var body=name;\0a" + " if(mk) body+='\\nmake:'+mk;\0a" + " if(pk) body+='\\npoke:'+pk;\0a" + " if(pe) body+='\\npeek:'+pe;\0a" + " fetch(BASE+'permissions',\{method:'POST',body:body}).then(()=>location.reload());\0a" + "}\0a" + == + == + == + == +:: +++ render-groups + |= groups=(list group-info) + ^- marl + ?~ groups + =/ m=manx ;span(class "empty"): No usergroups + ~[m] + (turn groups render-group) +:: +++ render-ships + |= ships=(list @ta) + ^- marl + ?~ ships + =/ m=manx ;span(class "empty"): No ships + ~[m] + %+ turn ships + |= s=@ta + ^- manx + ;span(class "ship"): {(trip s)} +:: +++ render-group + |= =group-info + ^- manx + =/ n=tape (trip name.group-info) + =/ mem-list=(list @p) (sort ~(tap in members.group-info) aor) + =/ mem-text=tape + %+ join "\0a" + (turn mem-list |=(s=@p (trip (scot %p s)))) + =/ make-text=tape + %+ join "," + (turn ~(tap in make.weir.group-info) road-to-text) + =/ poke-text=tape + %+ join "," + (turn ~(tap in poke.weir.group-info) road-to-text) + =/ peek-text=tape + %+ join "," + (turn ~(tap in peek.weir.group-info) road-to-text) + ;div(class "group") + ;div(class "group-hdr") + ;strong: {n} + ;span(class "count"): {(a-co:co (lent mem-list))} members + ;button(class "btn-red", onclick "deleteGroup('{n}')"): x + == + ;label: Members (one ~ship per line) + ;textarea(id "mem-{n}", rows "3"): {mem-text} + ;div(class "actions") + ;button(class "btn-grn", onclick "saveMembers('{n}')"): Save Members + == + ;label: Make permissions (comma-separated paths) + ;input(id "make-{n}", type "text", value "{make-text}", style "width:100%;font-family:monospace;font-size:.8rem;padding:.25rem .5rem;border:1px solid #ccc;border-radius:4px;"); + ;label: Poke permissions + ;input(id "poke-{n}", type "text", value "{poke-text}", style "width:100%;font-family:monospace;font-size:.8rem;padding:.25rem .5rem;border:1px solid #ccc;border-radius:4px;"); + ;label: Peek permissions + ;input(id "peek-{n}", type "text", value "{peek-text}", style "width:100%;font-family:monospace;font-size:.8rem;padding:.25rem .5rem;border:1px solid #ccc;border-radius:4px;"); + ;div(class "actions") + ;button(class "btn-grn", onclick "savePerms('{n}')"): Save Permissions + == + == +:: +++ join + |= [del=tape ts=(list tape)] + ^- tape + ?~ ts ~ + ?~ t.ts i.ts + :(weld i.ts del $(ts t.ts)) +-- diff --git a/desk/gub/nex/rhizome.hoon b/desk/gub/nex/rhizome.hoon new file mode 100644 index 0000000..533b427 --- /dev/null +++ b/desk/gub/nex/rhizome.hoon @@ -0,0 +1,778 @@ +:: rhizome nexus: wiki-linked markdown notes with backlink tracking +:: +:: /rhizome.rhizome/ +:: main.sig watches vault, maintains backlink index +:: page.html rendered note list with backlinks +:: vault/ +:: .md markdown notes with [[wiki links]] +:: metadata/ +:: .json backlink metadata per note +:: +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/ %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html ;div:"rhizome loading...")))]] + [%fall %| /vault [~ ~] [~ ~] empty-dir:loader] + [%fall %| /metadata [~ ~] [~ ~] empty-dir:loader] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: main.sig: watch vault, compute wiki links, sync metadata + :: + :: state: (map @ta (set @ta)) — forward index + :: keys are note filenames (e.g. 'pasta.md'), + :: values are sets of link targets (e.g. 'sauce') + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%rhizome /main: failed") + ~& > "%rhizome /main: starting" + ;< init=view:nexus bind:m + (keep:io /vault (cord-to-road:tarball './vault/') ~) + =/ old-ball=ball:tarball (ball-from-view init) + =/ notes=(map @ta @t) (files-from-ball old-ball) + =/ fwd=fwd-index + %- ~(run by notes) + |=(txt=@t (extract-wiki-links txt)) + =/ back=back-index (invert-index fwd) + :: on startup, create metadata for all notes + =/ creates=(list @ta) ~(tap in ~(key by fwd)) + ;< ~ bind:m + |- ^- form:m + ?~ creates (pure:m ~) + =/ fname=@ta i.creates + =/ mname=@ta (note-to-meta-name fname) + =/ link-name=@ta (fname-to-link fname) + ;< ~ bind:m + (make:io (meta-road mname) |+[%.n [[/ %json] !>((meta-json (~(gut by fwd) fname ~) (~(gut by back) link-name ~)))] `[/ %json]]) + $(creates t.creates) + ~& > "%rhizome /main: indexed {<~(wyt by notes)>} notes" + :: main loop + |- + ;< upd=view:nexus bind:m (take-news:io /vault) + =/ new-ball=ball:tarball (ball-from-view upd) + =/ changed=(set @ta) + (file-names-from-lanes (changed-lanes:nexus old-ball new-ball)) + =/ new-notes=(map @ta @t) (files-from-ball new-ball) + :: only reparse files that changed + =/ new-fwd=fwd-index + %- ~(rep by new-notes) + |= [[fname=@ta txt=@t] out=fwd-index] + ?. (~(has in changed) fname) + (~(put by out) fname (~(gut by fwd) fname ~)) + (~(put by out) fname (extract-wiki-links txt)) + :: also drop deleted files from fwd + =/ deleted=(list @ta) + %+ murn ~(tap in changed) + |=(f=@ta ?:((~(has by new-notes) f) ~ `f)) + =. new-fwd + %- ~(rep in (silt deleted)) + |=([f=@ta out=_new-fwd] (~(del by out) f)) + =/ new-back=back-index (invert-index new-fwd) + =/ ops=(list meta-op) (compute-meta-ops fwd new-fwd new-back) + ;< ~ bind:m + |- ^- form:m + ?~ ops (pure:m ~) + ?- -.i.ops + %create + ;< ~ bind:m + (make:io (meta-road mname.i.ops) |+[%.n [[/ %json] !>(json.i.ops)] `[/ %json]]) + $(ops t.ops) + %update + ;< ~ bind:m + (poke:io (meta-road mname.i.ops) [[/ %json] !>(json.i.ops)]) + $(ops t.ops) + %delete + ;< ~ bind:m + (cull:io (meta-road mname.i.ops)) + $(ops t.ops) + == + $(fwd new-fwd, old-ball new-ball) + :: + :: page.html: render note index with backlinks + :: + [~ %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%rhizome /page: failed") + ;< vault-view=view:nexus bind:m + (keep:io /vault (cord-to-road:tarball './vault/') ~) + =/ notes=(map @ta @t) (files-from-ball (ball-from-view vault-view)) + =/ fwd=fwd-index + %- ~(run by notes) + |=(txt=@t (extract-wiki-links txt)) + =/ back=back-index (invert-index fwd) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (rhizome-page notes fwd back))))) + |- + ;< upd=view:nexus bind:m (take-news:io /vault) + =/ notes=(map @ta @t) (files-from-ball (ball-from-view upd)) + =/ fwd=fwd-index + %- ~(run by notes) + |=(txt=@t (extract-wiki-links txt)) + =/ back=back-index (invert-index fwd) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (rhizome-page notes fwd back))))) + $ + :: + :: metadata/*.json: accept metadata updates from main.sig + :: + [[%metadata ~] @] + ;< ~ bind:m (rise-wait:io prod "%rhizome /metadata: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + ?. =(%json name.p.sage) $ + ;< ~ bind:m (replace:io q.sage) + $ + :: + :: vault/*.md: passive notes, accept content pokes + :: + [[%vault ~] @] + ;< ~ bind:m (rise-wait:io prod "%rhizome /vault: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + ;< ~ bind:m (replace:io q.sage) + $ + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the rhizome nexus.' + ~ + %- crip + """ + RHIZOME NEXUS — wiki-linked markdown notes with backlink tracking + + Store markdown notes in /vault/ with [[wiki links]]. The system + automatically parses links and maintains a /metadata/ directory + with forward links (links-to) and backlinks (linked-from) for + each note. Page at page.html renders the full index. + + FILES: + main.sig Vault watcher. Parses [[wiki links]], syncs metadata. + page.html Rendered note index with backlinks (manx). + + DIRECTORIES: + vault/ Markdown notes. Create .md files here. + metadata/ Auto-generated backlink metadata (JSON). + """ + [%vault ~] + 'Markdown notes with [[wiki links]]. Create .md files here.' + [%metadata ~] + 'Auto-generated backlink metadata. One JSON file per note.' + == + %| + ?+ rail.p.mana 'File under the rhizome nexus.' + [~ %'main.sig'] 'Vault watcher. Parses wiki links and syncs metadata.' + [~ %'page.html'] 'Rendered note index with backlinks.' + == + == + -- +:: +:: helper core +:: +|% ++$ fwd-index (map @ta (set @ta)) :: note-fname → set of link targets ++$ back-index (map @ta (set @ta)) :: link-target → set of source fnames ++$ meta-op $% [%create mname=@ta =json] + [%update mname=@ta =json] + [%delete mname=@ta] + == +:: +:: extract-wiki-links: scan text for [[link]] patterns +:: returns set of link targets (bare names, no extension) +:: +++ extract-wiki-links + |= txt=@t + ^- (set @ta) + =/ t=tape (trip txt) + =| links=(set @ta) + |- ^- (set @ta) + ?~ t links + ?. ?=([%'[' %'[' *] t) + $(t +.t) + =/ rest=tape +.+.t + =| name=tape + |- ^- (set @ta) + ?~ rest ^$(t +.t) + ?: ?=([%']' %']' *] rest) + =/ link=@ta (crip name) + ?: =('' link) ^$(t +.+.rest) + ^$(t +.+.rest, links (~(put in links) link)) + ?: =('\0a' i.rest) ^$(t +.t) :: no newlines in links + $(rest +.rest, name (snoc name i.rest)) +:: +:: invert-index: forward index → backlinks index +:: 'pasta.md' links to 'sauce' → 'sauce' is linked-from 'pasta.md' +:: +++ invert-index + |= fwd=fwd-index + ^- back-index + %- ~(rep by fwd) + |= [[src=@ta targets=(set @ta)] out=back-index] + =/ tgts=(list @ta) ~(tap in targets) + |- ^- back-index + ?~ tgts out + =/ existing=(set @ta) (~(gut by out) i.tgts ~) + $(tgts t.tgts, out (~(put by out) i.tgts (~(put in existing) src))) +:: +:: ball-from-view: extract ball from a view +:: +++ ball-from-view + |= =view:nexus + ^- ball:tarball + ?. ?=([%ball *] view) *ball:tarball + ball.view +:: +:: files-from-ball: recursively extract txt files from a ball +:: returns map of relative paths (e.g. 'cooking/pasta.md') to text +:: +++ files-from-ball + |= =ball:tarball + ^- (map @ta @t) + (files-from-ball-at '' ball) +:: +++ files-from-ball-at + |= [prefix=@ta =ball:tarball] + ^- (map @ta @t) + =| out=(map @ta @t) + :: files at this level + =. out + =/ =lump:tarball (fall fil.ball *lump:tarball) + %- ~(rep by contents.lump) + |= [[name=@ta =content:tarball] acc=(map @ta @t)] + ?. =(%txt name.p.sage.content) acc + =/ key=@ta ?:(=('' prefix) name (crip "{(trip prefix)}/{(trip name)}")) + (~(put by acc) key (of-wain:format !<(wain q.sage.content))) + :: recurse into subdirectories + =/ kids=(list [@ta ball:tarball]) ~(tap by dir.ball) + |- ^- (map @ta @t) + ?~ kids out + =/ [dname=@ta kid=ball:tarball] i.kids + =/ kid-prefix=@ta ?:(=('' prefix) dname (crip "{(trip prefix)}/{(trip dname)}")) + =/ kid-files=(map @ta @t) (files-from-ball-at kid-prefix kid) + =. out (~(uni by out) kid-files) + $(kids t.kids) +:: +:: file-names-from-lanes: extract relative paths from lane set +:: e.g. lane &+[/cooking %'pasta.md'] → 'cooking/pasta.md' +:: +++ file-names-from-lanes + |= lanes=(set lane:tarball) + ^- (set @ta) + %- ~(rep in lanes) + |= [=lane:tarball out=(set @ta)] + ?. ?=([%& *] lane) out + =/ segs=(list @ta) (snoc path.p.lane name.p.lane) + =/ relpath=@ta (crip (zing (join "/" (turn segs trip)))) + (~(put in out) relpath) +:: +:: note-to-meta-name: 'pasta.md' → 'pasta.json' +:: also works with paths: 'cooking/pasta.md' → 'cooking/pasta.json' +:: +++ note-to-meta-name + |= fname=@ta + ^- @ta + =/ t=tape (trip fname) + =/ base=tape + ?. =(".md" (slag (sub (lent t) 3) t)) t + (scag (sub (lent t) 3) t) + (crip (weld base ".json")) +:: +:: meta-road: build road to metadata file from relative path cord +:: e.g. 'cooking/pasta.json' → [%| 0 %& /metadata/cooking %'pasta.json'] +:: +++ meta-road + |= relpath=@ta + ^- road:tarball + =/ parts=(list @ta) (split-fas relpath) + [%| 0 %& (weld /metadata (snip parts)) (rear parts)] +:: +:: split-fas: split a cord on '/' into segments +:: e.g. 'cooking/pasta.json' → ~['cooking' 'pasta.json'] +:: 'pasta.json' → ~['pasta.json'] +:: +++ split-fas + |= t=@ta + ^- (list @ta) + =/ chars=tape (trip t) + =| [seg=tape out=(list @ta)] + |- ^- (list @ta) + ?~ chars (flop [(crip seg) out]) + ?: =(i.chars '/') + $(chars t.chars, seg ~, out [(crip seg) out]) + $(chars t.chars, seg (snoc seg i.chars)) +:: +:: fname-to-link: 'pasta.md' → 'pasta' +:: +++ fname-to-link + |= fname=@ta + ^- @ta + =/ t=tape (trip fname) + ?. =(".md" (slag (sub (lent t) 3) t)) fname + (crip (scag (sub (lent t) 3) t)) +:: +:: link-to-fname: 'pasta' → 'pasta.md' +:: +++ link-to-fname + |= link=@ta + ^- @ta + (crip (weld (trip link) ".md")) +:: +:: meta-json: build metadata json for a note +:: +++ meta-json + |= [links-to=(set @ta) linked-from=(set @ta)] + ^- json + %- pairs:enjs:format + :~ ['links-to' (set-to-json links-to)] + ['linked-from' (set-to-json linked-from)] + == +:: +++ set-to-json + |= s=(set @ta) + ^- json + [%a (turn ~(tap in s) |=(t=@ta s+t))] +:: +:: compute-meta-ops: pure function that diffs indices and returns ops +:: +++ compute-meta-ops + |= [old=fwd-index new=fwd-index back=back-index] + ^- (list meta-op) + :: notes that need metadata created (new) + =/ to-create=(list @ta) + %+ murn ~(tap in ~(key by new)) + |=(fname=@ta ?.((~(has by old) fname) `fname ~)) + :: notes that need metadata updated (changed links) + =/ to-update=(list @ta) + %+ murn ~(tap in ~(key by new)) + |= fname=@ta + =/ old-links (~(gut by old) fname ~) + =/ new-links (~(gut by new) fname ~) + ?. &((~(has by old) fname) !=(old-links new-links)) + ~ + `fname + :: notes that need metadata deleted (removed) + =/ to-delete=(list @ta) + %+ murn ~(tap in ~(key by old)) + |=(fname=@ta ?:((~(has by new) fname) ~ `fname)) + :: also update metadata for all targets whose backlinks changed + =/ affected=(set @ta) + %- ~(rep in (~(uni in (silt to-create)) (~(uni in (silt to-update)) (silt to-delete)))) + |= [fname=@ta out=(set @ta)] + =/ old-targets (~(gut by old) fname ~) + =/ new-targets (~(gut by new) fname ~) + (~(uni in out) (~(uni in old-targets) new-targets)) + :: affected targets that aren't already handled + =/ targets-to-update=(list @ta) + %+ murn ~(tap in affected) + |= link-name=@ta + =/ fname=@ta (link-to-fname link-name) + ?: (~(has in (silt to-create)) fname) ~ + ?: (~(has in (silt to-update)) fname) ~ + ?: (~(has in (silt to-delete)) fname) ~ + ?. (~(has by old) fname) + ?. (~(has by new) fname) ~ + ~ + `fname + :: build op list + =/ ops=(list meta-op) ~ + :: creates + =. ops + %- welp :_ ops + %+ turn to-create + |= fname=@ta + =/ link-name=@ta (fname-to-link fname) + :* %create + (note-to-meta-name fname) + (meta-json (~(gut by new) fname ~) (~(gut by back) link-name ~)) + == + :: updates + =. ops + %- welp :_ ops + %+ turn to-update + |= fname=@ta + =/ link-name=@ta (fname-to-link fname) + :* %update + (note-to-meta-name fname) + (meta-json (~(gut by new) fname ~) (~(gut by back) link-name ~)) + == + :: affected target updates + =. ops + %- welp :_ ops + %+ turn targets-to-update + |= fname=@ta + =/ link-name=@ta (fname-to-link fname) + :* %update + (note-to-meta-name fname) + (meta-json (~(gut by new) fname ~) (~(gut by back) link-name ~)) + == + :: deletes + =. ops + %- welp :_ ops + %+ turn to-delete + |=(fname=@ta [%delete (note-to-meta-name fname)]) + ops +:: +:: rhizome-page: render the note editor page +:: +++ rhizome-page + |= [notes=(map @ta @t) fwd=fwd-index back=back-index] + ^- manx + ;html + ;head + ;title: Rhizome + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;link(rel "icon", href "data:,"); + ;style + ;+ ;/ page-css + == + == + ;body + ;div.toolbar + ;span.title: Rhizome + ;span.info: {<~(wyt by notes)>} notes + ;input#new-name(type "text", placeholder "new-note"); + ;button#new-btn.btn: + New + == + ;div.panes + ;div#tree-pane.tree-pane + ;div#tree; + == + ;div#content.content-pane + ;div.placeholder: select a note + == + == + ;script + ;+ ;/ (notes-json notes) + == + ;script + ;+ ;/ (links-json fwd back) + == + ;script + ;+ ;/ page-js + == + == + == +:: +:: notes-json: inject note text as JS object +:: +++ notes-json + |= notes=(map @ta @t) + ^- tape + =/ pairs=(list [@ta @t]) + (sort ~(tap by notes) |=([[a=@ta *] [b=@ta *]] (aor a b))) + =/ out=tape "window._NOTES=\{" + =/ first=? %.y + |- ^- tape + ?~ pairs (weld out "};") + =/ [fname=@ta txt=@t] i.pairs + =/ escaped=tape (escape-js (trip txt)) + =. out + ;: weld out + ?:(first "" ",") + "\"{(trip fname)}\":\"{escaped}\"" + == + $(pairs t.pairs, first %.n) +:: +:: links-json: inject forward and back links as JS objects +:: +++ links-json + |= [fwd=fwd-index back=back-index] + ^- tape + ;: weld + "window._FWD=" (index-to-js fwd) ";" + "window._BACK=" (index-to-js back) ";" + == +:: +++ index-to-js + |= idx=(map @ta (set @ta)) + ^- tape + =/ pairs=(list [@ta (set @ta)]) ~(tap by idx) + =/ out=tape "\{" + |- ^- tape + ?~ pairs (weld out "}") + =/ [k=@ta v=(set @ta)] i.pairs + =/ arr=tape + =/ items=(list @ta) (sort ~(tap in v) aor) + =/ a=tape "[" + |- ^- tape + ?~ items (weld a "]") + =/ sep=tape ?~(t.items "" ",") + $(items t.items, a ;:(weld a "\"{(trip i.items)}\"" sep)) + =. out ;:(weld out "\"{(trip k)}\":" arr) + ?~ t.pairs (weld out "}") + $(pairs t.pairs, out (weld out ",")) +:: +++ escape-js + |= t=tape + ^- tape + =| out=tape + |- ^- tape + ?~ t out + =/ c=@t i.t + =. out + ?+ c (snoc out c) + %'\\' (weld out "\\\\") + %'"' (weld out "\\\"") + %'\0a' (weld out "\\n") + %'\0d' (weld out "\\r") + == + $(t +.t) +:: +++ page-css + ^- tape + ;: weld + "* \{ box-sizing: border-box; margin: 0; padding: 0; }" + " html, body \{ height: 100%; font-family: monospace; }" + " body \{ display: flex; flex-direction: column; }" + " .toolbar \{ display: flex; align-items: center; gap: 8px; padding: 8px 12px; " + " border-bottom: 1px solid #e0e0e0; background: #fafafa; flex-shrink: 0; }" + " .toolbar .title \{ font-weight: bold; font-size: 14px; }" + " .toolbar .info \{ opacity: 0.5; font-size: 12px; }" + " .toolbar input \{ font-family: monospace; font-size: 12px; border: 1px solid #ccc; " + " padding: 2px 6px; width: 140px; margin-left: auto; }" + " .btn \{ font-family: monospace; font-size: 12px; border: 1px solid #ccc; " + " padding: 2px 8px; cursor: pointer; background: none; }" + " .btn:hover \{ background: #e8e8e8; }" + " .panes \{ display: flex; flex: 1; overflow: hidden; }" + " .tree-pane \{ width: 220px; border-right: 1px solid #e0e0e0; overflow-y: auto; " + " padding: 4px 0; flex-shrink: 0; }" + " .content-pane \{ flex: 1; display: flex; flex-direction: column; overflow: hidden; min-width: 0; }" + " .dir-label \{ display: flex; align-items: center; padding: 2px 8px; cursor: pointer; font-size: 13px; }" + " .dir-label:hover \{ background: #f0f0f0; }" + " .dir-label .arrow \{ width: 14px; font-size: 9px; flex-shrink: 0; transition: transform 0.1s; }" + " .dir-label .arrow.open \{ transform: rotate(90deg); }" + " .dir-children \{ display: none; }" + " .dir.open > .dir-children \{ display: block; }" + " .file \{ padding: 4px 12px; cursor: pointer; font-size: 13px; }" + " .file:hover \{ background: #f0f0f0; }" + " .file.active \{ background: #e8f0fe; }" + " .muted \{ opacity: 0.4; padding: 12px; font-size: 12px; }" + " .placeholder \{ opacity: 0.3; padding: 3rem; text-align: center; }" + " .editor-wrap \{ display: flex; flex-direction: column; height: 100%; }" + " .editor-header \{ display: flex; align-items: center; gap: 8px; padding: 8px 12px; " + " border-bottom: 1px solid #e0e0e0; flex-shrink: 0; }" + " .editor-header .fname \{ font-weight: bold; font-size: 13px; }" + " .editor-header .saved \{ opacity: 0.4; font-size: 11px; }" + " .editor-header .dirty \{ color: #cb2431; font-size: 11px; }" + " .split-edit \{ display: flex; flex: 1; overflow: hidden; }" + " .edit-pane \{ flex: 1; display: flex; flex-direction: column; min-width: 0; }" + " .edit-pane textarea \{ flex: 1; border: none; outline: none; resize: none; padding: 12px; " + " font-family: monospace; font-size: 13px; line-height: 1.6; border-right: 1px solid #e0e0e0; }" + " .preview-pane \{ flex: 1; overflow-y: auto; padding: 12px; font-size: 13px; " + " line-height: 1.6; min-width: 0; }" + " .preview-pane h1 \{ font-size: 1.4em; margin: 0.5em 0 0.3em; }" + " .preview-pane h2 \{ font-size: 1.2em; margin: 0.5em 0 0.3em; }" + " .preview-pane h3 \{ font-size: 1.05em; margin: 0.5em 0 0.3em; }" + " .preview-pane p \{ margin: 0.4em 0; }" + " .preview-pane code \{ background: #f0f0f0; padding: 1px 4px; border-radius: 3px; font-size: 12px; }" + " .preview-pane pre code \{ display: block; padding: 8px; overflow-x: auto; }" + " .preview-pane ul, .preview-pane ol \{ margin: 0.4em 0; padding-left: 1.5em; }" + " .preview-pane blockquote \{ border-left: 3px solid #ccc; padding-left: 8px; opacity: 0.7; margin: 0.4em 0; }" + " .preview-pane .wiki-link \{ color: #0366d6; cursor: pointer; }" + " .preview-pane .wiki-link:hover \{ text-decoration: underline; }" + " .preview-pane .wiki-link.broken \{ color: #cb2431; }" + " .links-bar \{ border-top: 1px solid #e0e0e0; padding: 8px 12px; font-size: 12px; " + " flex-shrink: 0; max-height: 120px; overflow-y: auto; }" + " .links-bar .section \{ margin-bottom: 4px; }" + " .links-bar .label \{ font-weight: bold; margin-right: 4px; }" + " .links-bar .link \{ color: #0366d6; cursor: pointer; margin-right: 6px; }" + " .links-bar .link:hover \{ text-decoration: underline; }" + == +:: +++ page-js + ^- tape + ;: weld + "var cur=null,dirty=false;" + "var MAKE=window.location.pathname.replace('/ball/','/api/file/').replace('page.html','vault/');" + "var OVER=window.location.pathname.replace('/ball/','/api/over/').replace('page.html','vault/');" + "" + "function selectNote(fname)\{" + " if(dirty&&!confirm('Discard changes?'))return;" + " document.querySelectorAll('.file.active').forEach(function(e)\{e.classList.remove('active')});" + " var el=document.querySelector('.file[data-name=\"'+fname+'\"]');" + " if(el)el.classList.add('active');" + " cur=fname;" + " dirty=false;" + " var pane=document.getElementById('content');" + " var txt=window._NOTES[fname]||'';" + " var linkName=fname.replace(/\\.md$/,'');" + " var fwdLinks=(window._FWD[fname]||[]);" + " var backLinks=(window._BACK[linkName]||[]);" + " pane.innerHTML=" + " '
'+" + " '
'+" + " ''+fname+''+" + " ''+" + " 'saved'+" + " '
'+" + " '
'+" + " '
'+" + " '
'+" + " '
'+" + " '
';" + " renderPreview(txt);" + " document.getElementById('editor').oninput=function()\{" + " dirty=true;" + " document.getElementById('status').className='dirty';" + " document.getElementById('status').textContent='unsaved';" + " renderPreview(this.value);" + " };" + " document.getElementById('editor').onkeydown=function(e)\{" + " if((e.ctrlKey||e.metaKey)&&e.key==='s')\{e.preventDefault();saveNote()}" + " };" + "}" + "" + "function navLink(name)\{" + " var fname=name+'.md';" + " if(window._NOTES[fname]!=null)selectNote(fname);" + "}" + "" + "function escHtml(s)\{" + " var d=document.createElement('div');d.textContent=s;return d.innerHTML;" + "}" + "" + "function saveNote()\{" + " if(!cur)return;" + " var txt=document.getElementById('editor').value;" + " fetch(OVER+cur+'?mark=txt',\{method:'POST'," + " headers:\{'Content-Type':'text/plain'},body:txt" + " }).then(function(r)\{" + " if(r.ok)\{" + " dirty=false;" + " document.getElementById('status').className='saved';" + " document.getElementById('status').textContent='saved';" + " window._NOTES[cur]=txt;" + " }else\{" + " document.getElementById('status').textContent='error '+r.status;" + " }" + " });" + "}" + "" + "function createNote()\{" + " var inp=document.getElementById('new-name');" + " var name=inp.value.trim();" + " if(!name)return;" + " if(!name.endsWith('.md'))name+='.md';" + " fetch(MAKE+name+'?mark=txt',\{method:'PUT'," + " headers:\{'Content-Type':'text/plain'},body:' '" + " }).then(function(r)\{" + " if(r.ok)\{" + " window._NOTES[name]='';" + " inp.value='';" + " rebuildTree();" + " selectNote(name);" + " }" + " });" + "}" + "" + "function renderPreview(src)\{" + " var el=document.getElementById('preview');" + " if(!el)return;" + " el.innerHTML=renderMd(src);" + "}" + "" + "function renderMd(s)\{" + " var lines=s.split('\\n'),out=[],inCode=false,codeBuf=[];" + " for(var i=0;i'+escHtml(codeBuf.join('\\n'))+'');codeBuf=[];inCode=false}" + " else\{inCode=true}" + " continue" + " }" + " if(inCode)\{codeBuf.push(L);continue}" + " if(L.match(/^### /)) \{out.push('

'+inline(L.slice(4))+'

');continue}" + " if(L.match(/^## /)) \{out.push('

'+inline(L.slice(3))+'

');continue}" + " if(L.match(/^# /)) \{out.push('

'+inline(L.slice(2))+'

');continue}" + " if(L.match(/^> /)) \{out.push('
'+inline(L.slice(2))+'
');continue}" + " if(L.match(/^- /)) \{out.push('
  • '+inline(L.slice(2))+'
');continue}" + " if(L.match(/^\\d+\\. /)) \{out.push('
  1. '+inline(L.replace(/^\\d+\\. /,''))+'
');continue}" + " if(L.trim()==='') \{out.push('');continue}" + " out.push('

'+inline(L)+'

')" + " }" + " if(inCode)out.push('
'+escHtml(codeBuf.join('\\n'))+'
');" + " return out.join('\\n')" + "}" + "" + "function inline(s)\{" + " s=escHtml(s);" + " s=s.replace(/\\[\\[([^\\]]+)\\]\\]/g,function(_,n)\{" + " var fname=n+'.md';" + " var cls=window._NOTES[fname]!=null?'wiki-link':'wiki-link broken';" + " return '' + n + ''" + " });" + " s=s.replace(/`([^`]+)`/g,'$1');" + " s=s.replace(/\\*\\*([^*]+)\\*\\*/g,'$1');" + " s=s.replace(/\\*([^*]+)\\*/g,'$1');" + " s=s.replace(/\\[([^\\]]+)\\]\\(([^)]+)\\)/g,'$1');" + " return s" + "}" + "" + "function buildTree(files)\{" + " var root=\{_f:[],_d:\{}};" + " files.forEach(function(f)\{" + " var p=f.split('/'),n=root;" + " for(var i=0;i((pairs:enjs:format ~[['status' s+'idle']]))]] + [%fall %& [/ %'config.json'] %.n [~ [/ %json] !>(default-config)]] + [%fall %& [/ %'mounts.json'] %.n [~ [/ %json] !>([%o ~])]] + [%fall %| /mounts [~ ~] [~ ~] empty-dir:loader] + [%over %& [/ %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html s3-page)))]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + [~ %'main.json'] + ;< ~ bind:m (rise-wait:io prod "%s3: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + =/ jon=json (fall (mole |.(!<(json q.sage))) *json) + ?. ?=(%o -.jon) $ + =/ op=@t (get-str jon 'op') + ?: =('' op) $ + :: mark as working + ;< ~ bind:m (replace:io !>((pairs:enjs:format ~[['status' s+'working'] ['op' s+op]]))) + :: read config + ;< cfg=s3-config bind:m read-config + ?: ?& !=(op 'add-mount') + !=(op 'remove-mount') + !=(op 'get-mounts') + |(=('' access-key.cfg) =('' secret-key.cfg) =('' bucket.cfg) =('' endpoint.cfg)) + == + ;< ~ bind:m (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'missing S3 credentials']]))) + $ + :: read mounts + ;< mounts=(map @t @t) bind:m read-mounts + :: dispatch + ;< ~ bind:m + ?+ op + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+(crip "unknown op: {(trip op)}")]]))) + :: + %'get-mounts' + =/ entries=(list [@t json]) + %+ turn ~(tap by mounts) + |=([n=@t p=@t] [n s+p]) + %- replace:io !> + %- pairs:enjs:format + :~ ['status' s+'done'] + ['op' s+'get-mounts'] + ['mounts' [%o (malt entries)]] + == + :: + %'add-mount' + =/ name=@t (get-str jon 'name') + =/ prefix=@t (get-str jon 'prefix') + ?: |(=('' name) =('' prefix)) + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'name and prefix required']]))) + =/ new-mounts=(map @t @t) (~(put by mounts) name prefix) + ;< ~ bind:m (write-mounts new-mounts) + :: create mount directory + ;< mount-road=road:tarball bind:m + (ancestor-road:io [/ %s3] [%| /mounts/[name]]) + ;< exists=? bind:m (peek-exists:io mount-road) + ;< * bind:m + ?. exists + (make-soft:io mount-road &+[*sand:nexus *gain:nexus `ball:tarball`[~ ~]]) + (pure:m ~) + %- replace:io !> + %- pairs:enjs:format + :~ ['status' s+'done'] + ['op' s+'add-mount'] + ['name' s+name] + ['prefix' s+prefix] + == + :: + %'remove-mount' + =/ name=@t (get-str jon 'name') + ?: =('' name) + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'name required']]))) + =/ new-mounts=(map @t @t) (~(del by mounts) name) + ;< ~ bind:m (write-mounts new-mounts) + %- replace:io !> + %- pairs:enjs:format + :~ ['status' s+'done'] + ['op' s+'remove-mount'] + ['name' s+name] + == + :: + %'list-all' + (do-list cfg '' '') + :: + %list + =/ name=@t (get-str jon 'name') + =/ prefix=@t (fall (~(get by mounts) name) '') + ?: =('' prefix) + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+(crip "unknown mount: {(trip name)}")]]))) + (do-list cfg prefix name) + :: + %refresh + =/ name=@t (get-str jon 'name') + =/ prefix=@t (fall (~(get by mounts) name) '') + ?: =('' prefix) + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+(crip "unknown mount: {(trip name)}")]]))) + (do-refresh cfg prefix name) + :: + %pull + =/ name=@t (get-str jon 'name') + =/ key=@t (get-str jon 'key') + =/ prefix=@t (fall (~(get by mounts) name) '') + ?: =('' prefix) + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+(crip "unknown mount: {(trip name)}")]]))) + (do-pull cfg key name) + :: + %delete + =/ name=@t (get-str jon 'name') + =/ key=@t (get-str jon 'key') + (do-delete cfg key name) + == + $ + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Directory under S3 storage.' + ~ + 'S3-compatible object storage. Pull/push between S3 and the ball namespace.' + [%mounts ~] + 'Mount directories, each synced to an S3 prefix.' + == + %| + ?+ rail.p.mana 'File under S3 storage.' + [~ %'config.json'] 'S3 credentials: access-key, secret-key, region, bucket, endpoint.' + [~ %'main.json'] 'Poke with JSON {op, ...} to run S3 operations.' + [~ %'mounts.json'] 'Map of mount name to S3 prefix.' + [~ %'page.html'] 'S3 control panel.' + == + == + -- +:: +:: helpers +:: +|% ++$ s3-config + $: access-key=@t + secret-key=@t + region=@t + bucket=@t + endpoint=@t + == +:: +++ read-config + =/ m (fiber:fiber:nexus ,s3-config) + ^- form:m + ;< cfg-road=road:tarball bind:m + (ancestor-road:io [/ %s3] [%& / %'config.json']) + ;< cfg-seen=seen:nexus bind:m (peek:io cfg-road ~) + =/ jon=json + ?. ?=([%& %file *] cfg-seen) [%o ~] + (fall (mole |.(!<(json q.sage.p.cfg-seen))) [%o ~]) + ?. ?=(%o -.jon) + (pure:m *s3-config) + %- pure:m + :* (get-str jon 'access-key') + (get-str jon 'secret-key') + (get-str jon 'region') + (get-str jon 'bucket') + (get-str jon 'endpoint') + == +:: +++ read-mounts + =/ m (fiber:fiber:nexus ,(map @t @t)) + ^- form:m + ;< rd=road:tarball bind:m + (ancestor-road:io [/ %s3] [%& / %'mounts.json']) + ;< seen=seen:nexus bind:m (peek:io rd ~) + =/ jon=json + ?. ?=([%& %file *] seen) [%o ~] + (fall (mole |.(!<(json q.sage.p.seen))) [%o ~]) + ?. ?=(%o -.jon) + (pure:m *(map @t @t)) + %- pure:m + %- ~(gas by *(map @t @t)) + %+ murn ~(tap by p.jon) + |= [k=@t v=json] + ?. ?=(%s -.v) ~ + `[k p.v] +:: +++ write-mounts + |= mounts=(map @t @t) + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ entries=(list [@t json]) + %+ turn ~(tap by mounts) + |=([n=@t p=@t] [n s+p]) + ;< rd=road:tarball bind:m + (ancestor-road:io [/ %s3] [%& / %'mounts.json']) + (over:io rd [[/ %json] !>([%o (malt entries)])]) +:: +++ get-str + |= [jon=json key=@t] + ^- @t + ?. ?=(%o -.jon) '' + =/ val=(unit json) (~(get by p.jon) key) + ?~ val '' + ?. ?=(%s -.u.val) '' + p.u.val +:: +++ s3-request + |= [cfg=s3-config method=@t key=@t qs=@t content=(unit @t)] + =/ m (fiber:fiber:nexus ,client-response:iris) + ^- form:m + ;< now=@da bind:m get-time:io + =/ [amz-date=@t payload-hash=@t authorization=@t] + %: build-signature + method=method + access-key=access-key.cfg + secret-key=secret-key.cfg + region=region.cfg + endpoint=endpoint.cfg + bucket=bucket.cfg + object-key=key + query-string=qs + content=content + now=now + == + =/ url=@t (build-url endpoint.cfg bucket.cfg key ?:(=('' qs) ~ `qs)) + =/ hed=(list [@t @t]) (build-headers method payload-hash amz-date authorization) + =/ bod=(unit octs) (bind content |=(c=@t (as-octs:mimes:html c))) + =/ meth=method:http ;;(method:http method) + ;< ~ bind:m (send-request:io [meth url hed bod]) + take-client-response:io +:: +:: ops +:: +++ do-list + |= [cfg=s3-config prefix=@t name=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ qs=@t (build-list-query prefix) + ;< resp=client-response:iris bind:m (s3-request cfg 'GET' '' qs ~) + ?. ?=(%finished -.resp) + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'request failed']]))) + ?~ full-file.resp + (replace:io !>((pairs:enjs:format ~[['status' s+'done'] ['op' s+'list'] ['name' s+name] ['keys' [%a ~]]]))) + =/ body=@t q.data.u.full-file.resp + =/ keys=(list @t) (parse-list-response body) + %- replace:io !> + %- pairs:enjs:format + :~ ['status' s+'done'] + ['op' s+'list'] + ['name' s+name] + ['keys' [%a (turn keys |=(k=@t s+k))]] + ['count' (numb:enjs:format (lent keys))] + == +:: +++ do-refresh + |= [cfg=s3-config prefix=@t name=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + :: list all objects under prefix + =/ qs=@t (build-list-query prefix) + ;< resp=client-response:iris bind:m (s3-request cfg 'GET' '' qs ~) + ?. ?=(%finished -.resp) + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'list failed']]))) + ?~ full-file.resp + (replace:io !>((pairs:enjs:format ~[['status' s+'done'] ['op' s+'refresh'] ['name' s+name] ['pulled' (numb:enjs:format 0)]]))) + =/ body=@t q.data.u.full-file.resp + =/ keys=(list @t) (parse-list-response body) + :: pull each object + =/ pulled=@ud 0 + |- + ?~ keys + %- replace:io !> + %- pairs:enjs:format + :~ ['status' s+'done'] + ['op' s+'refresh'] + ['name' s+name] + ['pulled' (numb:enjs:format pulled)] + == + =/ key=@t i.keys + :: strip prefix from key to get relative path + =/ rel=@t + =/ pre=tape (trip prefix) + =/ k=tape (trip key) + ?: =(pre (scag (lent pre) k)) + (crip (slag (lent pre) k)) + key + :: skip "directory" keys (ending in /) + ?: |(=('' rel) =('/' (rear (trip rel)))) + $(keys t.keys) + ;< ~ bind:m (pull-one cfg key rel name) + $(keys t.keys, pulled +(pulled)) +:: +++ pull-one + |= [cfg=s3-config key=@t rel=@t name=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< resp=client-response:iris bind:m (s3-request cfg 'GET' key '' ~) + ?. ?=(%finished -.resp) (pure:m ~) + ?~ full-file.resp (pure:m ~) + =/ content=@t q.data.u.full-file.resp + =/ ct=(unit @t) (extract-content-type headers.response-header.resp) + =/ filename=@ta (extract-filename rel) + =/ rel-path=path (key-to-path rel) + =/ mtype=path (determine-mime-type:tarball ct filename) + =/ file-mime=mime [mtype (as-octs:mimes:html content)] + =/ full-path=path (weld /mounts/[name] rel-path) + ;< file-road=road:tarball bind:m + (ancestor-road:io [/ %s3] [%& full-path filename]) + ;< exists=? bind:m (peek-exists:io file-road) + ?: exists + (over:io file-road [[/ %mime] !>(file-mime)]) + =/ ext=(unit blot:tarball) (bind (parse-extension:tarball filename) |=(e=@ta [/ e])) + ;< err=(unit tang) bind:m + (make-soft:io file-road |+[%.n [[/ %mime] !>(file-mime)] ext]) + ?~ err (pure:m ~) + :: mark not found, retry as plain mime + (make:io file-road |+[%.n [[/ %mime] !>(file-mime)] ~]) +:: +++ do-pull + |= [cfg=s3-config key=@t name=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< resp=client-response:iris bind:m (s3-request cfg 'GET' key '' ~) + ?. ?=(%finished -.resp) + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'download failed']]))) + ?~ full-file.resp + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'empty response']]))) + =/ content=@t q.data.u.full-file.resp + =/ ct=(unit @t) (extract-content-type headers.response-header.resp) + =/ filename=@ta (extract-filename key) + =/ rel-path=path (key-to-path key) + =/ mtype=path (determine-mime-type:tarball ct filename) + =/ file-mime=mime [mtype (as-octs:mimes:html content)] + =/ full-path=path (weld /mounts/[name] rel-path) + ;< file-road=road:tarball bind:m + (ancestor-road:io [/ %s3] [%& full-path filename]) + ;< exists=? bind:m (peek-exists:io file-road) + ;< ~ bind:m + ?: exists + (over:io file-road [[/ %mime] !>(file-mime)]) + =/ ext=(unit blot:tarball) (bind (parse-extension:tarball filename) |=(e=@ta [/ e])) + ;< err=(unit tang) bind:m + (make-soft:io file-road |+[%.n [[/ %mime] !>(file-mime)] ext]) + ?~ err (pure:m ~) + (make:io file-road |+[%.n [[/ %mime] !>(file-mime)] ~]) + %- replace:io !> + %- pairs:enjs:format + :~ ['status' s+'done'] + ['op' s+'pull'] + ['key' s+key] + ['name' s+name] + == +:: +++ do-delete + |= [cfg=s3-config key=@t name=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< resp=client-response:iris bind:m (s3-request cfg 'DELETE' key '' ~) + ?. ?=(%finished -.resp) + (replace:io !>((pairs:enjs:format ~[['status' s+'error'] ['error' s+'delete failed']]))) + =/ code=@ud status-code.response-header.resp + %- replace:io !> + %- pairs:enjs:format + :~ ['status' s+'done'] + ['op' s+'delete'] + ['key' s+key] + ['name' s+name] + ['ok' [%b (lth code 300)]] + == +:: +++ key-to-path + |= key=@t + ^- path + =/ parts=(list @t) (split-cord key '/') + ?: (lte (lent parts) 1) / + (turn (snip `(list @t)`parts) |=(s=@t `@ta`s)) +:: +++ split-cord + |= [t=@t del=@t] + ^- (list @t) + (split (trip t) del) +:: +++ split + |= [t=tape del=@t] + ^- (list @t) + =| acc=(list @t) + =| cur=tape + |- + ?~ t (flop [(crip (flop cur)) acc]) + ?: =(i.t del) + $(t t.t, acc [(crip (flop cur)) acc], cur ~) + $(t t.t, cur [i.t cur]) +:: +:: page +:: +++ s3-page + ^- manx + ;html + ;head + ;title: S3 Storage + ;meta(charset "utf-8"); + ;style + ;+ ;/ %- trip %- crip + ;: weld + "* \{ margin: 0; padding: 0; box-sizing: border-box; }" + "body \{ font-family: -apple-system, system-ui, sans-serif; background: #0a0a0a; color: #eee; padding: 24px; max-width: 900px; margin: 0 auto; }" + "h1 \{ font-size: 18px; margin-bottom: 16px; }" + "h2 \{ font-size: 14px; color: #888; margin-top: 20px; margin-bottom: 8px; }" + ".hdr \{ display: flex; align-items: center; gap: 12px; margin-bottom: 20px; }" + ".btn \{ background: none; border: 1px solid #333; color: #aaa; padding: 4px 12px; border-radius: 6px; cursor: pointer; font-size: 12px; }" + ".btn:hover \{ border-color: #666; color: #fff; }" + ".btn:disabled \{ opacity: 0.4; cursor: default; }" + ".btn-grn \{ border-color: #2a5a2a; color: #6c6; }" + ".btn-grn:hover \{ border-color: #4a8a4a; }" + ".btn-red \{ border-color: #5a2a2a; color: #c66; }" + ".btn-red:hover \{ border-color: #8a4a4a; }" + "table \{ width: 100%; border-collapse: collapse; margin-top: 8px; }" + "th \{ text-align: left; color: #666; font-size: 11px; text-transform: uppercase; padding: 6px 8px; border-bottom: 1px solid #333; }" + "td \{ padding: 6px 8px; border-bottom: 1px solid #1a1a1a; font-size: 13px; font-family: monospace; }" + "#msg \{ font-size: 12px; margin-bottom: 8px; min-height: 16px; }" + ".mount \{ border: 1px solid #222; border-radius: 8px; padding: 12px; margin-bottom: 12px; }" + ".mount-hdr \{ display: flex; align-items: center; gap: 8px; margin-bottom: 8px; }" + ".mount-name \{ font-weight: bold; font-size: 14px; }" + ".mount-prefix \{ color: #666; font-size: 12px; font-family: monospace; }" + ".modal-bg \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 100; align-items: center; justify-content: center; }" + ".modal-bg.open \{ display: flex; }" + ".modal \{ background: #111; border: 1px solid #333; border-radius: 12px; padding: 20px; width: 420px; }" + ".modal h2 \{ margin-top: 0; }" + ".lbl \{ display: block; color: #888; font-size: 11px; text-transform: uppercase; margin-bottom: 4px; margin-top: 12px; }" + ".inp \{ width: 100%; padding: 8px 10px; border-radius: 6px; border: 1px solid #333; background: #111; color: #eee; font-size: 13px; font-family: monospace; outline: none; box-sizing: border-box; }" + ".modal .btn \{ margin-top: 16px; }" + == + == + == + ;body + ;div(class "hdr") + ;h1: S3 Storage + ;button(class "btn", onclick "openConfig()"): Config + ;button(class "btn", onclick "doListAll()"): List All + ;button(class "btn btn-grn", onclick "openAddMount()"): + Mount + == + ;div(id "msg"); + ;div(id "mounts"); + :: config modal + ;div(class "modal-bg", id "cfg-bg") + ;div(class "modal") + ;h2: S3 Configuration + ;label(class "lbl"): Access Key + ;input(class "inp", id "cfg-ak", type "text"); + ;label(class "lbl"): Secret Key + ;input(class "inp", id "cfg-sk", type "password"); + ;label(class "lbl"): Region + ;input(class "inp", id "cfg-rg", type "text"); + ;label(class "lbl"): Bucket + ;input(class "inp", id "cfg-bk", type "text"); + ;label(class "lbl"): Endpoint + ;input(class "inp", id "cfg-ep", type "text"); + ;button(class "btn", onclick "saveConfig()"): Save + ;div(id "cfg-msg", style "font-size: 12px; margin-top: 8px;"); + == + == + :: add mount modal + ;div(class "modal-bg", id "mount-bg") + ;div(class "modal") + ;h2: Add Mount + ;label(class "lbl"): Name + ;input(class "inp", id "mount-name", type "text", placeholder "e.g. blog-images"); + ;label(class "lbl"): S3 Prefix + ;input(class "inp", id "mount-prefix", type "text", placeholder "e.g. blog-images/"); + ;button(class "btn btn-grn", onclick "addMount()"): Create + ;div(id "mount-msg", style "font-size: 12px; margin-top: 8px;"); + == + == + ;script + ;+ ;/ %- trip %- crip + ;: weld + "var P=location.pathname.replace(/page\\.html$/,'');\0a" + "var OVER=P.replace('/ball/','/api/over/');\0a" + "var POKE=P.replace('/ball/','/api/poke/');\0a" + "function $(id)\{ return document.getElementById(id); }\0a" + "var busy=false;\0a" + :: + "function msg(t,err)\{ $('msg').textContent=t; $('msg').style.color=err?'#f55':'#666'; }\0a" + :: + :: modals + :: + "document.querySelectorAll('.modal-bg').forEach(bg=>\{\0a" + " bg.onclick=function(e)\{ if(e.target===bg) bg.classList.remove('open'); };\0a" + "});\0a" + :: + :: config + :: + "function openConfig()\{\0a" + " $('cfg-msg').textContent='';\0a" + " fetch(P+'config.json').then(r=>r.json()).then(c=>\{\0a" + " $('cfg-ak').value=c['access-key']||'';\0a" + " $('cfg-sk').value=c['secret-key']||'';\0a" + " $('cfg-rg').value=c.region||'';\0a" + " $('cfg-bk').value=c.bucket||'';\0a" + " $('cfg-ep').value=c.endpoint||'';\0a" + " }).catch(()=>\{});\0a" + " $('cfg-bg').classList.add('open');\0a" + "}\0a" + "function saveConfig()\{\0a" + " fetch(OVER+'config.json?mark=json',\{method:'POST',headers:\{'content-type':'application/json'},\0a" + " body:JSON.stringify(\{\0a" + " 'access-key':$('cfg-ak').value.trim(),\0a" + " 'secret-key':$('cfg-sk').value.trim(),\0a" + " region:$('cfg-rg').value.trim()||'us-east-1',\0a" + " bucket:$('cfg-bk').value.trim(),\0a" + " endpoint:$('cfg-ep').value.trim()\0a" + " })\0a" + " }).then(r=>\{\0a" + " $('cfg-msg').textContent=r.ok?'Saved':'Error';\0a" + " $('cfg-msg').style.color=r.ok?'#4f4':'#f55';\0a" + " if(r.ok) setTimeout(()=>$('cfg-bg').classList.remove('open'),600);\0a" + " });\0a" + "}\0a" + :: + :: poke + sse + :: + "var KEEP=P.replace('/ball/','/api/keep/');\0a" + "function poke(payload,cb)\{\0a" + " if(busy)\{ msg('Busy...', false); return; }\0a" + " busy=true;\0a" + " msg('Working...', false);\0a" + " fetch(POKE+'main.json?mark=json',\{method:'POST',headers:\{'content-type':'application/json'},\0a" + " body:JSON.stringify(payload)\0a" + " }).then(r=>\{\0a" + " if(!r.ok)\{ msg('Poke failed (HTTP '+r.status+')', true); busy=false; return; }\0a" + " watchResult(cb);\0a" + " }).catch(e=>\{ msg('Request failed: '+e, true); busy=false; });\0a" + "}\0a" + "function watchResult(cb)\{\0a" + " fetch(KEEP+'main.json?mark=json',\{headers:\{Accept:'text/event-stream'}})\0a" + " .then(r=>\{\0a" + " var rd=r.body.getReader(),dec=new TextDecoder(),buf='';\0a" + " function pump()\{\0a" + " rd.read().then(res=>\{\0a" + " if(res.done)\{ busy=false; return; }\0a" + " buf+=dec.decode(res.value,\{stream:true});\0a" + " var ps=buf.split('\\n\\n'); buf=ps.pop();\0a" + " for(var i=0;i\{ busy=false; });\0a" + " }\0a" + " pump();\0a" + " }).catch(e=>\{ msg('SSE failed: '+e,true); busy=false; });\0a" + "}\0a" + :: + :: mounts + :: + "function openAddMount()\{\0a" + " $('mount-msg').textContent='';\0a" + " $('mount-name').value='';\0a" + " $('mount-prefix').value='';\0a" + " $('mount-bg').classList.add('open');\0a" + "}\0a" + "function addMount()\{\0a" + " var n=$('mount-name').value.trim();\0a" + " var p=$('mount-prefix').value.trim();\0a" + " if(!n||!p)\{ $('mount-msg').textContent='Name and prefix required'; $('mount-msg').style.color='#f55'; return; }\0a" + " poke(\{op:'add-mount',name:n,prefix:p},function(d)\{\0a" + " $('mount-bg').classList.remove('open');\0a" + " msg('Mount added: '+n, false);\0a" + " loadMounts();\0a" + " });\0a" + "}\0a" + "function removeMount(name)\{\0a" + " if(!confirm('Remove mount '+name+'?')) return;\0a" + " poke(\{op:'remove-mount',name:name},function()\{\0a" + " msg('Removed '+name, false);\0a" + " loadMounts();\0a" + " });\0a" + "}\0a" + "function loadMounts()\{\0a" + " poke(\{op:'get-mounts'},function(d)\{\0a" + " var el=$('mounts'); el.innerHTML='';\0a" + " var m=d.mounts||\{};\0a" + " var names=Object.keys(m);\0a" + " if(names.length===0)\{ msg('No mounts. Click + Mount to add one.', false); return; }\0a" + " msg(names.length+' mount'+(names.length===1?'':'s'), false);\0a" + " names.forEach(function(n)\{\0a" + " var div=document.createElement('div');\0a" + " div.className='mount';\0a" + " div.id='mount-'+n;\0a" + " div.innerHTML='
'\0a" + " +''+n+''\0a" + " +''+m[n]+''\0a" + " +''\0a" + " +''\0a" + " +''\0a" + " +'
'\0a" + " +'
';\0a" + " el.appendChild(div);\0a" + " });\0a" + " });\0a" + "}\0a" + :: + :: list all + :: + "function doListAll()\{\0a" + " poke(\{op:'list-all'},function(d)\{\0a" + " var keys=d.keys||[];\0a" + " var el=$('mounts');\0a" + " if(keys.length===0)\{ msg('Bucket is empty', false); return; }\0a" + " msg(keys.length+' object'+(keys.length===1?'':'s')+' in bucket', false);\0a" + " var h='
All Objects
';\0a" + " h+='';\0a" + " keys.forEach(function(k)\{\0a" + " h+='';\0a" + " });\0a" + " h+='
Key
'+k+'
';\0a" + " el.insertAdjacentHTML('afterbegin',h);\0a" + " });\0a" + "}\0a" + :: + :: list mount contents + :: + "function doListMount(name)\{\0a" + " poke(\{op:'list',name:name},function(d)\{\0a" + " var el=$('files-'+name); if(!el) return;\0a" + " var keys=d.keys||[];\0a" + " if(keys.length===0)\{ el.innerHTML='
Empty
'; return; }\0a" + " var h='';\0a" + " keys.forEach(function(k)\{\0a" + " h+='';\0a" + " });\0a" + " h+='
Key
'+k+''\0a" + " +' '\0a" + " +''\0a" + " +'
';\0a" + " el.innerHTML=h;\0a" + " });\0a" + "}\0a" + :: + :: refresh + :: + "function doRefresh(name)\{\0a" + " poke(\{op:'refresh',name:name},function(d)\{\0a" + " msg('Refreshed '+name+': '+(d.pulled||0)+' files pulled', false);\0a" + " });\0a" + "}\0a" + :: + :: pull single + :: + "function doPull(name,key)\{\0a" + " poke(\{op:'pull',name:name,key:key},function(d)\{\0a" + " msg('Pulled '+key, false);\0a" + " });\0a" + "}\0a" + :: + :: delete + :: + "function doDel(name,key)\{\0a" + " if(!confirm('Delete '+key+' from S3?')) return;\0a" + " poke(\{op:'delete',name:name,key:key},function(d)\{\0a" + " if(d.ok) \{ msg('Deleted '+key, false); doListMount(name); }\0a" + " else msg('Delete failed', true);\0a" + " });\0a" + "}\0a" + :: + :: init + :: + "loadMounts();\0a" + == + == + == + == +-- diff --git a/desk/gub/nex/s3/bridge.hoon b/desk/gub/nex/s3/bridge.hoon new file mode 100644 index 0000000..e388534 --- /dev/null +++ b/desk/gub/nex/s3/bridge.hoon @@ -0,0 +1,1533 @@ +:: s3/bridge: bidirectional S3 sync +:: +:: TODO: Sometimes when the nexus code is updated, live nexus instances +:: don't reload. BUG in reload-changed-nexuses or build-code propagation. +:: +:: TODO: Replace ball-file-mugs with born diffing. The %ball view includes +:: born with per-file version timestamps — diff old born vs new born to get +:: changed files directly instead of mugging every file on every update. +:: +:: creds.json -- s3 credentials +:: source.json -- s3 key for remote mappings (optional) +:: mapping.json -- bridge definitions (id, s3-prefix, local-path) +:: sync/mappings.json -- live sync: watches mapping.json, pushes to source key +:: sync/[id].json -- live sync: watches local path, pushes diffs to s3 +:: log.json -- activity log +:: browse.json -- cached bucket listing +:: main.sig -- poke to pull/sync/unsync/add/delete/browse +:: page.html -- control panel +:: +/< * /lib/s3.hoon +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + =/ default-creds=json + %- pairs:enjs:format + :~ ['access_key' s+''] + ['secret_key' s+''] + ['region' s+'us-east-1'] + ['bucket' s+''] + ['endpoint' s+''] + == + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/ %'creds.json'] %.n [~ [/ %json] !>(default-creds)]] + [%fall %& [/ %'source.json'] %.n [~ [/ %json] !>(s+'')]] + [%fall %& [/ %'mapping.json'] %.n [~ [/ %json] !>([%a ~])]] + [%fall %& [/ %'log.json'] %.n [~ [/ %json] !>([%a ~])]] + [%fall %& [/ %'browse.json'] %.n [~ [/ %json] !>([%o ~])]] + [%fall %& [/ %'sync-status.json'] %.n [~ [/ %json] !>([%a ~])]] + [%fall %| /sync [~ ~] [~ ~] empty-dir:loader] + [%over %& [/ %'page.html'] %.n [~ [/ %html] !>((manx-to-html (bridge-page ~)))]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: + [~ %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%s3-bridge page: failed") + ;< map-rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'mapping.json']) + ;< mappings=view:nexus bind:m (keep:io /mapping map-rd ~) + ;< ~ bind:m (replace:io !>((manx-to-html (bridge-page (read-bridges mappings))))) + |- + ;< upd=view:nexus bind:m (take-news:io /mapping) + ;< ~ bind:m (replace:io !>((manx-to-html (bridge-page (read-bridges upd))))) + $ + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%s3-bridge: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + =/ jon=json (fall (mole |.(!<(json q.sage))) *json) + ?. ?=(%o -.jon) $ + =/ action=@t (get-str jon 'action') + ?: =('' action) $ + ?+ action $ + :: Mapping management + :: + %log + =/ level=@t (get-str jon 'level') + =/ message=@t (get-str jon 'message') + ?: |(=('' level) =('' message)) $ + ;< ~ bind:m (log-msg level message) + $ + :: + %'add-mapping' + =/ s3-prefix=@t (get-str jon 's3-prefix') + =/ local-path=@t (ensure-slash (get-str jon 'local-path')) + ?: |(=('' s3-prefix) =('' local-path)) $ + ;< existing=(list bridge-entry) bind:m read-mapping + =/ id=@t (next-id existing) + =/ new=(list bridge-entry) (snoc existing [id s3-prefix local-path]) + ;< ~ bind:m (write-mapping new) + ;< ~ bind:m + (log-msg 'info' (crip "Added mapping #{(trip id)}: {(trip s3-prefix)} -> {(trip local-path)}")) + $ + :: + %'delete-mapping' + =/ id=@t (get-str jon 'id') + ?: =('' id) $ + :: unsync first if active + ;< ~ bind:m (unsync-mapping id) + ;< existing=(list bridge-entry) bind:m read-mapping + =/ new=(list bridge-entry) + (skip existing |=(b=bridge-entry =(id id.b))) + ;< ~ bind:m (write-mapping new) + ;< ~ bind:m (log-msg 'info' (crip "Deleted mapping #{(trip id)}")) + $ + :: + %'edit-mapping' + =/ id=@t (get-str jon 'id') + =/ s3-prefix=@t (get-str jon 's3-prefix') + =/ local-path=@t (ensure-slash (get-str jon 'local-path')) + ?: |(=('' id) =('' s3-prefix) =('' local-path)) $ + ;< existing=(list bridge-entry) bind:m read-mapping + =/ new=(list bridge-entry) + %+ turn existing + |= b=bridge-entry + ?. =(id id.b) b + b(s3-prefix s3-prefix, local-path local-path) + ;< ~ bind:m (write-mapping new) + ;< ~ bind:m + (log-msg 'info' (crip "Edited mapping #{(trip id)}: {(trip s3-prefix)} -> {(trip local-path)}")) + $ + :: + %sync + =/ id=@t (get-str jon 'id') + ?: =('' id) $ + ;< ~ bind:m (sync-mapping id) + $ + :: + %unsync + =/ id=@t (get-str jon 'id') + ?: =('' id) $ + ;< ~ bind:m (unsync-mapping id) + $ + :: S3 operations (need creds) + :: + %'pull-source' + ;< creds=s3-creds bind:m read-creds + ?: (missing-creds creds) + ;< ~ bind:m (log-msg 'error' 'Pull source failed: missing S3 credentials') + $ + ;< ~ bind:m (pull-source creds) + $ + :: + %'push-source' + ;< creds=s3-creds bind:m read-creds + ?: (missing-creds creds) + ;< ~ bind:m (log-msg 'error' 'Push source failed: missing S3 credentials') + $ + ;< ~ bind:m (push-source creds) + $ + :: + %browse + ;< creds=s3-creds bind:m read-creds + ?: (missing-creds creds) + ;< ~ bind:m (log-msg 'error' 'Browse failed: missing S3 credentials') + $ + ;< resp=client-response:iris bind:m + (s3-request creds 'GET' '' (build-list-query '') ~) + ?. ?=(%finished -.resp) + ;< ~ bind:m (log-msg 'error' 'Browse failed: request did not finish') + $ + =/ keys=(list @t) + ?~(full-file.resp ~ (parse-list-response q.data.u.full-file.resp)) + ;< now=@da bind:m get-time:io + =/ browse-jon=json + %- pairs:enjs:format + :~ ['keys' [%a (turn keys |=(k=@t s+k))]] + ['fetched' (sect:enjs:format now)] + ['count' (numb:enjs:format (lent keys))] + == + ;< brd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'browse.json']) + ;< ~ bind:m (over:io brd [[/ %json] !>(browse-jon)]) + ;< ~ bind:m (log-msg 'info' (crip "Browsed bucket: {<(lent keys)>} objects")) + $ + :: + %pull + ;< creds=s3-creds bind:m read-creds + ?: (missing-creds creds) + ;< ~ bind:m (log-msg 'error' 'Pull failed: missing S3 credentials') + $ + =/ id=@t (get-str jon 'id') + ;< mappings=(list bridge-entry) bind:m read-mapping + =/ bridge=(unit bridge-entry) (find-bridge id mappings) + ?~ bridge + ;< ~ bind:m (log-msg 'warn' (crip "Pull failed: mapping #{(trip id)} not found")) + $ + ;< ~ bind:m (do-pull creds u.bridge) + $ + :: + %'pull-all' + ;< creds=s3-creds bind:m read-creds + ?: (missing-creds creds) + ;< ~ bind:m (log-msg 'error' 'Pull All failed: missing S3 credentials') + $ + ;< ~ bind:m (pull-source creds) + ;< mappings=(list bridge-entry) bind:m read-mapping + =/ remaining=(list bridge-entry) mappings + |- + ?~ remaining ^$ + ;< ~ bind:m (do-pull creds i.remaining) + $(remaining t.remaining) + :: + %'sync-all' + ;< mappings=(list bridge-entry) bind:m read-mapping + =/ remaining=(list bridge-entry) mappings + |- + ?~ remaining ^$ + ;< ~ bind:m (sync-mapping id.i.remaining) + $(remaining t.remaining) + :: + %'unsync-all' + ;< mappings=(list bridge-entry) bind:m read-mapping + =/ remaining=(list bridge-entry) mappings + |- + ?~ remaining ^$ + ;< ~ bind:m (unsync-mapping id.i.remaining) + $(remaining t.remaining) + == + :: + :: sync process: watches local path, pushes diffs to S3 + :: + :: Matches sync/[id].json files (not sync/mappings.json). + :: Created by %sync action, killed by %unsync via cull:io. + :: + [[%sync ~] *] + =/ name=@ta +.rail + ;< ~ bind:m (rise-wait:io prod "%s3-bridge sync: failed") + ?: =(name %'mappings.json') + :: Source sync: watch mapping.json, push to S3 source key on change + ;< src=@t bind:m read-source + ?: =('' src) + ;< ~ bind:m (log-msg 'error' 'Source sync: no source key configured') + stay:m + ;< map-rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'mapping.json']) + ;< init=view:nexus bind:m (keep:io /source-sync map-rd ~) + ;< creds=s3-creds bind:m read-creds + ;< ~ bind:m (push-source creds) + ;< ~ bind:m (log-msg 'info' (crip "Source sync started, watching mapping.json -> {(trip src)}")) + |- + ;< upd=view:nexus bind:m (take-news:io /source-sync) + ;< creds=s3-creds bind:m read-creds + ;< ~ bind:m (push-source creds) + ;< ~ bind:m (log-msg 'info' 'Source sync: pushed mapping.json') + $ + =/ id=@t (extract-id name) + ;< creds=s3-creds bind:m read-creds + ?: (missing-creds creds) + ;< ~ bind:m (log-msg 'error' (crip "Sync #{(trip id)}: missing S3 credentials")) + stay:m + ;< mappings=(list bridge-entry) bind:m read-mapping + =/ bridge=(unit bridge-entry) (find-bridge id mappings) + ?~ bridge + ;< ~ bind:m (log-msg 'error' (crip "Sync #{(trip id)}: mapping not found")) + stay:m + =/ entry=bridge-entry u.bridge + ;< self-overlap=? bind:m (check-self-overlap local-path.entry) + ?: self-overlap + ;< ~ bind:m (log-msg 'error' (crip "Sync #{(trip id)}: local path overlaps this bridge's namespace")) + stay:m + =/ local-road=road:tarball [%& %| (text-to-path local-path.entry)] + ;< init=view:nexus bind:m (keep:io /sync local-road ~) + =/ current=(map @t @ud) (ball-file-mugs init entry) + ;< ~ bind:m (push-changed creds entry current ~) + ;< ~ bind:m + (log-msg 'info' (crip "Sync #{(trip id)} watching {(trip local-path.entry)} ({<~(wyt by current)>} files)")) + =/ known=(map @t @ud) current + |- + ;< upd=view:nexus bind:m (take-news:io /sync) + ;< creds=s3-creds bind:m read-creds + =/ now=(map @t @ud) (ball-file-mugs upd entry) + =/ changed=(list @t) + %+ murn ~(tap by now) + |= [key=@t mug=@ud] + =/ old=(unit @ud) (~(get by known) key) + ?~ old `key + ?: =(u.old mug) ~ + `key + =/ deleted=(list @t) + %+ murn ~(tap by known) + |= [key=@t *] + ?^ (~(get by now) key) ~ + `key + ?: &(=(~ changed) =(~ deleted)) + $(known now) + ;< ~ bind:m (push-keys creds entry changed upd) + ;< ~ bind:m (delete-keys creds deleted) + ;< ~ bind:m + (log-msg 'info' (crip "Sync #{(trip id)}: {<(lent changed)>} updated, {<(lent deleted)>} deleted")) + $(known now) + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'S3 bridge sync directory.' + ~ + 'Bidirectional S3 sync. Pull from and push to S3 buckets.' + == + %| + ?+ rail.p.mana 'S3 bridge file.' + [~ %'creds.json'] 'S3 credentials (access_key, secret_key, region, bucket, endpoint).' + [~ %'source.json'] 'S3 key for remote mapping source. Empty string = disabled.' + [~ %'mapping.json'] 'Bridge definitions: id, s3-prefix, local-path.' + [~ %'log.json'] 'Operation log: [{time, level, message}...], newest first, max 50.' + [~ %'browse.json'] 'Cached S3 bucket listing with fetch timestamp.' + [~ %'main.sig'] 'Poke with JSON {action} to pull/sync/unsync/add/delete/browse.' + [~ %'page.html'] 'S3 bridge control panel.' + == + == + -- +:: +:: types + helpers +:: +|% ++$ s3-creds + $: access-key=@t + secret-key=@t + region=@t + bucket=@t + endpoint=@t + == ++$ bridge-entry + $: id=@t + s3-prefix=@t + local-path=@t + == +++ next-id + |= entries=(list bridge-entry) + ^- @t + =/ n=@ud 0 + |- + =/ candidate=@t (crip (a-co:co n)) + ?: =(~ (find-bridge candidate entries)) + candidate + $(n +(n)) +:: +++ extract-id + |= name=@ta + ^- @t + =/ t=tape (trip name) + =/ len=@ud (lent t) + ?: (lth len 6) name + (crip (scag (sub len 5) t)) +:: +++ missing-creds + |= c=s3-creds + |(=('' access-key.c) =('' bucket.c) =('' endpoint.c)) +:: +++ read-creds + =/ m (fiber:fiber:nexus ,s3-creds) + ^- form:m + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'creds.json']) + ;< =seen:nexus bind:m (peek:io rd ~) + =/ jon=json + ?. ?=([%& %file *] seen) [%o ~] + (fall (mole |.(!<(json q.sage.p.seen))) [%o ~]) + ?. ?=(%o -.jon) (pure:m *s3-creds) + %- pure:m + :* (get-str jon 'access_key') + (get-str jon 'secret_key') + (fall (bind (~(get by p.jon) 'region') |=(j=json ?>(?=(%s -.j) p.j))) 'us-east-1') + (get-str jon 'bucket') + (get-str jon 'endpoint') + == +:: +++ read-source + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'source.json']) + ;< =seen:nexus bind:m (peek:io rd ~) + ?. ?=([%& %file *] seen) (pure:m '') + =/ jon=json (fall (mole |.(!<(json q.sage.p.seen))) s+'') + ?. ?=(%s -.jon) (pure:m '') + (pure:m p.jon) +:: +++ pull-source + |= cfg=s3-creds + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< src=@t bind:m read-source + ?: =('' src) (pure:m ~) + ;< resp=client-response:iris bind:m (s3-request cfg 'GET' src '' ~) + ?. ?=(%finished -.resp) + ;< ~ bind:m (log-msg 'error' (crip "Pull source failed: request error for {(trip src)}")) + (pure:m ~) + ?~ full-file.resp + ;< ~ bind:m (log-msg 'warn' (crip "Pull source: empty response for {(trip src)}")) + (pure:m ~) + =/ body=@t q.data.u.full-file.resp + =/ jon=json (fall (de:json:html body) [%a ~]) + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'mapping.json']) + ;< ~ bind:m (over:io rd [[/ %json] !>(jon)]) + ;< ~ bind:m (log-msg 'info' (crip "Pulled mapping source from {(trip src)}")) + (pure:m ~) +:: +++ push-source + |= cfg=s3-creds + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< src=@t bind:m read-source + ?: =('' src) (pure:m ~) + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'mapping.json']) + ;< =seen:nexus bind:m (peek:io rd ~) + ?. ?=([%& %file *] seen) (pure:m ~) + =/ jon=json (fall (mole |.(!<(json q.sage.p.seen))) [%a ~]) + =/ body=@t (en:json:html jon) + ;< resp=client-response:iris bind:m (s3-request cfg 'PUT' src '' `body) + ?. ?=(%finished -.resp) + ;< ~ bind:m (log-msg 'error' (crip "Push source failed: request error for {(trip src)}")) + (pure:m ~) + ;< ~ bind:m (log-msg 'info' (crip "Pushed mapping source to {(trip src)}")) + (pure:m ~) +:: +++ read-mapping + =/ m (fiber:fiber:nexus ,(list bridge-entry)) + ^- form:m + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'mapping.json']) + ;< =seen:nexus bind:m (peek:io rd ~) + =/ jon=json + ?. ?=([%& %file *] seen) [%a ~] + (fall (mole |.(!<(json q.sage.p.seen))) [%a ~]) + ?. ?=(%a -.jon) (pure:m ~) + %- pure:m + %+ murn p.jon + |= j=json + ?. ?=(%o -.j) ~ + =/ id=@t (get-str j 'id') + =/ s3-prefix=@t (get-str j 's3-prefix') + =/ local-path=@t (ensure-slash (get-str j 'local-path')) + ?: |(=('' id) =('' s3-prefix) =('' local-path)) ~ + `[id s3-prefix local-path] +:: +++ write-mapping + |= entries=(list bridge-entry) + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ jon=json + :- %a + %+ turn entries + |= =bridge-entry + %- pairs:enjs:format + :~ ['id' s+id.bridge-entry] + ['s3-prefix' s+s3-prefix.bridge-entry] + ['local-path' s+local-path.bridge-entry] + == + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'mapping.json']) + (over:io rd [[/ %json] !>(jon)]) +:: +++ sync-mapping + |= id=@t + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ name=@ta (crip "{(trip id)}.json") + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& /sync name]) + ;< exists=? bind:m (peek-exists:io rd) + ?: exists + ;< ~ bind:m (log-msg 'warn' (crip "Sync #{(trip id)}: already synced")) + (pure:m ~) + ;< ~ bind:m (make:io rd |+[%.n [[/ %json] !>([%o ~])] ~]) + ;< ~ bind:m (log-msg 'info' (crip "Sync #{(trip id)} started")) + (update-sync-status id %.y) +:: +++ unsync-mapping + |= id=@t + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ name=@ta (crip "{(trip id)}.json") + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& /sync name]) + ;< exists=? bind:m (peek-exists:io rd) + ?. exists (pure:m ~) + ;< ~ bind:m (cull:io rd) + ;< ~ bind:m (log-msg 'info' (crip "Sync #{(trip id)} stopped")) + (update-sync-status id %.n) +:: +++ update-sync-status + |= [id=@t add=?] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'sync-status.json']) + ;< =seen:nexus bind:m (peek:io rd ~) + =/ existing=(set @t) + ?. ?=([%& %file *] seen) ~ + =/ jon=json (fall (mole |.(!<(json q.sage.p.seen))) [%a ~]) + ?. ?=(%a -.jon) ~ + %- ~(gas in *(set @t)) + (murn p.jon |=(j=json ?.(?=(%s -.j) ~ `p.j))) + =/ updated=(set @t) + ?: add (~(put in existing) id) + (~(del in existing) id) + =/ jon=json [%a (turn ~(tap in updated) |=(t=@t s+t))] + (over:io rd [[/ %json] !>(jon)]) +:: +++ log-msg + |= [level=@t message=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< now=@da bind:m get-time:io + =/ entry=json + %- pairs:enjs:format + :~ ['time' (sect:enjs:format now)] + ['level' s+level] + ['message' s+message] + == + ;< rd=road:tarball bind:m + (ancestor-road:io [/s3 %bridge] [%& / %'log.json']) + ;< =seen:nexus bind:m (peek:io rd ~) + =/ existing=(list json) + ?. ?=([%& %file *] seen) ~ + =/ jon=json (fall (mole |.(!<(json q.sage.p.seen))) [%a ~]) + ?. ?=(%a -.jon) ~ + p.jon + =/ new=(list json) (scag 50 ^-((list json) [entry existing])) + (over:io rd [[/ %json] !>([%a new])]) +:: +++ read-bridges + |= =view:nexus + ^- (list bridge-entry) + ?. ?=(%file -.view) ~ + =/ jon=json + (fall (mole |.(!<(json q.sage.view))) [%a ~]) + ?. ?=(%a -.jon) ~ + %+ murn p.jon + |= j=json + ?. ?=(%o -.j) ~ + =/ id=@t (get-str j 'id') + =/ s3-prefix=@t (get-str j 's3-prefix') + =/ local-path=@t (ensure-slash (get-str j 'local-path')) + ?: |(=('' id) =('' s3-prefix) =('' local-path)) ~ + `[id s3-prefix local-path] +:: +++ find-bridge + |= [id=@t bridges=(list bridge-entry)] + ^- (unit bridge-entry) + ?~ bridges ~ + ?: =(id id.i.bridges) `i.bridges + $(bridges t.bridges) +:: +++ get-str + |= [jon=json key=@t] + ^- @t + ?. ?=(%o -.jon) '' + =/ val=(unit json) (~(get by p.jon) key) + ?~ val '' + ?. ?=(%s -.u.val) '' + p.u.val +:: +++ ensure-slash + |= t=@t + ^- @t + ?: =('' t) t + (spat (text-to-path t)) +:: text-to-path: split cord on '/' into path, skipping empties +:: e.g. '/docs/' → /docs, 'docs' → /docs +:: +++ text-to-path + |= t=@t + ^- path + %+ turn + (skip (split (trip t) '/') |=(s=@t =('' s))) + |=(s=@t `@ta`s) +:: check-self-overlap: true if local-path overlaps this bridge's namespace +:: +++ check-self-overlap + |= local=@t + =/ m (fiber:fiber:nexus ,?) + ^- form:m + ;< here=rail:tarball bind:m get-here-abs:io + =/ self-path=path path.here + =/ local-path=path (text-to-path local) + %- pure:m + ?| =(self-path local-path) + =((scag (lent local-path) self-path) local-path) + =((scag (lent self-path) local-path) self-path) + == +:: +:: ext-to-blot: convert filename extension to blot +:: e.g. 'json' → [/ %json], 'my_mark' → [/my %mark] +:: +++ ext-to-blot + |= ext=@ta + ^- blot:tarball + =/ segs=(list @t) (split (trip ext) '_') + =/ segs=(list @ta) (turn segs |=(s=@t `@ta`s)) + ?~ segs [/ ext] + ?~ t.segs [/ i.segs] + [(snip `path`segs) (rear segs)] +:: +:: known-mark: marks we know how to sync +:: %text marks store @t, %wain marks store wain, %mime marks store mime +:: ~ means unknown — skip this file +:: +++ known-mark + |= =blot:tarball + ^- (unit ?(%text %wain %mime)) + ?. =(/ path.blot) ~ + ?+ name.blot ~ + ?(%json %html %hoon %css %js %md) `%text + %txt `%wain + %mime `%mime + == +:: build-s3-key: join prefix, relative path, and filename into an s3 key +:: +++ build-s3-key + |= [prefix=@t rel=path name=@ta] + ^- @t + =/ segs=path + :(weld (text-to-path prefix) rel ~[name]) + (crip (slag 1 (spud segs))) +:: serialize-for-s3: convert content to @t for S3 upload +:: Returns ~ for unknown marks (caller should skip) +:: +++ serialize-for-s3 + |= =content:tarball + ^- (unit @t) + =/ kind=(unit ?(%text %wain %mime)) (known-mark p.sage.content) + ?~ kind ~ + =/ res=(each @t tang) + %- mule |. + ?- u.kind + %text !<(@t q.sage.content) + %wain (of-wain:format !<(wain q.sage.content)) + %mime q.q:!<(mime q.sage.content) + == + ?:(?=(%& -.res) `p.res ~) +:: +++ s3-request + |= [cfg=s3-creds method=@t key=@t qs=@t content=(unit @t)] + =/ m (fiber:fiber:nexus ,client-response:iris) + ^- form:m + ;< now=@da bind:m get-time:io + =/ [amz-date=@t payload-hash=@t authorization=@t] + %: build-signature + method=method + access-key=access-key.cfg + secret-key=secret-key.cfg + region=region.cfg + endpoint=endpoint.cfg + bucket=bucket.cfg + object-key=key + query-string=qs + content=content + now=now + == + =/ url=@t (build-url endpoint.cfg bucket.cfg key ?:(=('' qs) ~ `qs)) + =/ hed=(list [@t @t]) (build-headers method payload-hash amz-date authorization) + =/ bod=(unit octs) (bind content |=(c=@t (as-octs:mimes:html c))) + =/ meth=method:http ;;(method:http method) + ;< ~ bind:m (send-request:io [meth url hed bod]) + take-client-response:io +:: +++ do-pull + |= [cfg=s3-creds =bridge-entry] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< self-overlap=? bind:m (check-self-overlap local-path.bridge-entry) + ?: self-overlap + ;< ~ bind:m (log-msg 'error' (crip "Pull #{(trip id.bridge-entry)}: local path overlaps this bridge's namespace")) + (pure:m ~) + =/ qs=@t (build-list-query s3-prefix.bridge-entry) + ;< resp=client-response:iris bind:m (s3-request cfg 'GET' '' qs ~) + ?. ?=(%finished -.resp) + ;< ~ bind:m (log-msg 'error' (crip "Pull #{(trip id.bridge-entry)}: list request failed")) + (pure:m ~) + ?~ full-file.resp + ;< ~ bind:m (log-msg 'warn' (crip "Pull #{(trip id.bridge-entry)}: empty response")) + (pure:m ~) + =/ body=@t q.data.u.full-file.resp + =/ keys=(list @t) (parse-list-response body) + =/ =ball:tarball *ball:tarball + =/ pulled=@ud 0 + |- + ?~ keys + =/ dest=path (text-to-path local-path.bridge-entry) + =/ root-ball=ball:tarball ball + =/ local-road=road:tarball [%& %| dest] + ;< exists=? bind:m (peek-exists:io local-road) + ;< ~ bind:m ?. exists (pure:m ~) + (cull:io local-road) + ;< ~ bind:m (make:io local-road &+[*sand:nexus *gain:nexus root-ball]) + ;< ~ bind:m + (log-msg 'info' (crip "Pulled {} files for #{(trip id.bridge-entry)}")) + (pure:m ~) + =/ key=@t i.keys + =/ rel=@t + =/ pre=tape (trip s3-prefix.bridge-entry) + =/ k=tape (trip key) + ?: =(pre (scag (lent pre) k)) + (crip (slag (lent pre) k)) + key + ?: |(=('' rel) =('/' (rear (trip rel)))) + $(keys t.keys) + =/ filename=@ta (extract-filename rel) + =/ rel-path=path (key-to-path rel) + =/ ext=(unit @ta) (parse-extension:tarball filename) + =/ =blot:tarball ?~(ext [/ %mime] (ext-to-blot u.ext)) + =/ kind=?(%text %wain %mime) + (fall (known-mark blot) %mime) + =? blot =(%mime kind) [/ %mime] + ;< resp=client-response:iris bind:m (s3-request cfg 'GET' key '' ~) + ?. ?=(%finished -.resp) $(keys t.keys) + ?~ full-file.resp $(keys t.keys) + =/ body=octs data.u.full-file.resp + =/ ct=(unit @t) (extract-content-type headers.response-header.resp) + =/ =sage:tarball + ?- kind + %text [blot !>(q.body)] + %wain [blot !>((to-wain:format q.body))] + %mime + =/ mtype=path (determine-mime-type:tarball ct filename) + [blot !>(`mime`[mtype body])] + == + =/ =content:tarball [~ sage] + $(keys t.keys, pulled +(pulled), ball (~(put ba:tarball ball) [rel-path filename] content)) +:: +:: sync push helpers +:: +:: Build map of s3-key -> mug from a namespace view +:: +++ ball-file-mugs + |= [=view:nexus =bridge-entry] + ^- (map @t @ud) + ?. ?=(%ball -.view) ~ + =/ files=(list [=rail:tarball =content:tarball]) + (list-ball-files ball.view (text-to-path local-path.bridge-entry)) + %- malt + %+ murn files + |= [=rail:tarball =content:tarball] + =/ kind=(unit ?(%text %wain %mime)) (known-mark p.sage.content) + ?~ kind ~ + =/ rel-path=path + =/ base=path (text-to-path local-path.bridge-entry) + (slag (lent base) path.rail) + =/ s3-key=@t (build-s3-key s3-prefix.bridge-entry rel-path name.rail) + `[s3-key (mug q.sage.content)] +:: +:: Push only specific keys from a view +:: +++ push-keys + |= [cfg=s3-creds =bridge-entry keys=(list @t) =view:nexus] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. ?=(%ball -.view) (pure:m ~) + =/ files=(list [=rail:tarball =content:tarball]) + (list-ball-files ball.view (text-to-path local-path.bridge-entry)) + =/ key-set=(set @t) (silt keys) + =/ remaining=(list [rail:tarball content:tarball]) + %+ skim files + |= [=rail:tarball =content:tarball] + =/ rel-path=path + =/ base=path (text-to-path local-path.bridge-entry) + (slag (lent base) path.rail) + =/ s3-key=@t (build-s3-key s3-prefix.bridge-entry rel-path name.rail) + (~(has in key-set) s3-key) + |- + ?~ remaining (pure:m ~) + =/ [=rail:tarball =content:tarball] i.remaining + =/ rel-path=path + =/ base=path (text-to-path local-path.bridge-entry) + (slag (lent base) path.rail) + =/ s3-key=@t (build-s3-key s3-prefix.bridge-entry rel-path name.rail) + =/ body=(unit @t) (serialize-for-s3 content) + ?~ body $(remaining t.remaining) + ;< resp=client-response:iris bind:m (s3-request cfg 'PUT' s3-key '' body) + $(remaining t.remaining) +:: +:: Push all files (initial sync) +:: +++ push-changed + |= [cfg=s3-creds =bridge-entry current=(map @t @ud) prev=(map @t @ud)] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ local-road=road:tarball [%& %| (text-to-path local-path.bridge-entry)] + ;< =seen:nexus bind:m (peek:io local-road ~) + ?. ?=([%& %ball *] seen) (pure:m ~) + =/ files=(list [=rail:tarball =content:tarball]) + (list-ball-files ball.p.seen (text-to-path local-path.bridge-entry)) + |- + ?~ files (pure:m ~) + =/ [=rail:tarball =content:tarball] i.files + =/ rel-path=path + =/ base=path (text-to-path local-path.bridge-entry) + (slag (lent base) path.rail) + =/ s3-key=@t (build-s3-key s3-prefix.bridge-entry rel-path name.rail) + =/ body=(unit @t) (serialize-for-s3 content) + ?~ body $(files t.files) + ;< resp=client-response:iris bind:m (s3-request cfg 'PUT' s3-key '' body) + $(files t.files) +:: +:: Delete S3 keys that no longer exist locally +:: +++ delete-keys + |= [cfg=s3-creds keys=(list @t)] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?~ keys (pure:m ~) + ;< resp=client-response:iris bind:m (s3-request cfg 'DELETE' i.keys '' ~) + $(keys t.keys) +:: +++ list-ball-files + |= [=ball:tarball base=path] + ^- (list [rail:tarball content:tarball]) + =/ acc=(list [rail:tarball content:tarball]) ~ + =? acc ?=(^ fil.ball) + =/ fils=(list [@ta content:tarball]) ~(tap by contents.u.fil.ball) + %+ weld acc + %+ turn fils + |=([name=@ta =content:tarball] [[base name] content]) + =/ dirs=(list [@ta ball:tarball]) ~(tap by dir.ball) + |- + ?~ dirs acc + =/ [dname=@ta sub=ball:tarball] i.dirs + $(dirs t.dirs, acc (weld acc (list-ball-files sub (snoc base dname)))) +:: +++ tank-to-tape + |= =tank + ^- tape + ~(ram re tank) +:: +++ extract-content-type + |= headers=(list [key=@t value=@t]) + ^- (unit @t) + =/ ct=(list @t) + %+ murn headers + |= [key=@t value=@t] + ?: =('content-type' (cass:co (trip key))) + `value + ~ + ?~ ct ~ + `i.ct +:: +++ extract-filename + |= key=@t + ^- @ta + =/ parts=(list @t) (split-cord key '/') + ?~ parts key + `@ta`(rear parts) +:: +++ key-to-path + |= key=@t + ^- path + =/ parts=(list @t) (skip (split-cord key '/') |=(s=@t =('' s))) + ?: (lte (lent parts) 1) / + (turn (snip `(list @t)`parts) |=(s=@t `@ta`s)) +:: +++ split-cord + |= [t=@t del=@t] + ^- (list @t) + (split (trip t) del) +:: +++ split + |= [t=tape del=@t] + ^- (list @t) + =| acc=(list @t) + =| cur=tape + |- + ?~ t (flop [(crip (flop cur)) acc]) + ?: =(i.t del) + $(t t.t, acc [(crip (flop cur)) acc], cur ~) + $(t t.t, cur [i.t cur]) +:: +:: +++ manx-to-html + |= m=manx + ^- @t + (crip (en-xml:html m)) +:: page +:: +++ bridge-page + |= bridges=(list bridge-entry) + ^- manx + ;html + ;head + ;title: S3 Bridge + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;style + ;+ ;/ style-text + == + == + ;body + ;div#app + ;div#header + ;div + ;h1: S3 Bridge + ;div.f3.mono.s-2: bidirectional S3 sync + == + == + ;div#log-bar(onclick "openLog()") + ;span#log-latest.f3.mono.s-2: no activity yet + == + ;div#log-backdrop + ;div#log-modal + ;div#log-header + ;span: Activity Log + ;div + ;button#log-close.hdr-btn: close + == + == + ;div#log-list; + == + == + ;div#browse-backdrop + ;div#browse-modal + ;div#browse-header + ;span: Bucket Contents + ;div + ;span#browse-age.f3.s-2; + ;button#browse-refresh.hdr-btn: refresh + ;button#browse-close.hdr-btn: close + == + == + ;div#browse-list; + == + == + ;div#creds-backdrop + ;div#creds-modal + ;div#creds-header + ;span: S3 Credentials + ;div + ;button#creds-save.hdr-btn: save + ;button#creds-close.hdr-btn: close + == + == + ;textarea#creds-json(rows "8", placeholder "\{}"); + ;div#creds-status; + == + == + ;div#edit-backdrop + ;div#edit-modal + ;div#edit-header + ;span: Edit Mapping + ;div + ;button#edit-save.hdr-btn: save + ;button#edit-close.hdr-btn: close + == + == + ;input#edit-id(type "hidden"); + ;div.edit-field + ;label: s3 prefix + ;input#edit-prefix.create-input(type "text", autocomplete "off"); + == + ;div.edit-field + ;label: local path + ;input#edit-path.create-input(type "text", autocomplete "off"); + == + == + == + ;div.section-header + ;div.section-row + ;h2.section-title: credentials + ;button.hdr-btn(onclick "openCreds()"): edit + ;button.hdr-btn(onclick "openBrowse()"): browse bucket + == + == + ;div.section-header + ;div.section-row + ;h2.section-title: mappings + == + == + ;div.source-bar + ;span.source-label: source + ;input.source-input(id "m-source", type "text", placeholder "s3 key for remote mappings (optional)", autocomplete "off"); + ;button.hdr-btn(onclick "saveSource()"): save + ;button.btn.btn-grn(onclick "pullSource()"): pull + ;button.sync-btn(id "source-sync-btn", onclick "toggleSourceSync()"): sync + == + ;div.bulk-actions + ;button.btn.btn-grn(onclick "pullAll()"): Pull All + ;button.btn.btn-grn(onclick "syncAll()"): Sync All + ;button.btn.btn-grn(onclick "unsyncAll()"): Unsync All + == + ;div.create-bar + ;input.create-input(id "m-prefix", type "text", placeholder "s3 prefix (e.g. photos/)", autocomplete "off"); + ;input.create-input(id "m-path", type "text", placeholder "local path (e.g. /media/photos)", autocomplete "off"); + ;button.create-btn(onclick "addMapping()"): + add + == + ;div#bridges + ;* ?~ bridges + :~ ;div.empty: No mappings configured. + == + %+ turn bridges + bridge-card + == + == + ;script + ;+ ;/ script-text + == + == + == +:: +++ bridge-card + |= =bridge-entry + ^- manx + =/ i=tape (trip id.bridge-entry) + =/ pre=tape (trip s3-prefix.bridge-entry) + =/ loc=tape (trip local-path.bridge-entry) + ;div.bridge-card(data-bridge i) + ;div.bridge-left + ;span.bridge-id: #{i} + ;div.bridge-info + ;span.bridge-detail: s3://{pre} -> {loc} + == + == + ;div.card-actions + ;button.hdr-btn(onclick "openEdit('{i}','{pre}','{loc}')"): edit + ;button.btn.btn-grn(onclick "pull('{i}')"): pull + ;button.sync-btn(data-id i, onclick "toggleSync('{i}')"): sync + ;button.delete-btn(onclick "deleteMapping('{i}')"): delete + == + == +:: +++ style-text + ^- tape + """ + * \{ margin: 0; padding: 0; box-sizing: border-box; } + body \{ font-family: -apple-system, system-ui, sans-serif; background: #111; color: #eee; height: 100vh; } + #app \{ display: flex; flex-direction: column; height: 100vh; max-width: 700px; margin: 0 auto; padding: 16px; } + #header \{ display: flex; justify-content: space-between; align-items: flex-start; padding: 12px 0; border-bottom: 1px solid #333; margin-bottom: 16px; flex-shrink: 0; } + #header h1 \{ font-size: 20px; font-weight: 700; } + .f3 \{ color: #888; } + .mono \{ font-family: monospace; } + .s-2 \{ font-size: 12px; } + .hdr-btn \{ font-size: 11px; padding: 4px 10px; border-radius: 4px; border: 1px solid #444; background: none; color: #888; cursor: pointer; } + .hdr-btn:hover \{ color: #eee; border-color: #666; } + .btn \{ background: none; border: 1px solid #333; color: #aaa; padding: 4px 12px; border-radius: 6px; cursor: pointer; font-size: 11px; } + .btn:hover \{ border-color: #666; color: #fff; } + .btn-grn \{ border-color: #2a5a2a; color: #6c6; } + .btn-grn:hover \{ border-color: #4a8a4a; } + .btn-blue \{ border-color: #2a2a5a; color: #66c; } + .btn-blue:hover \{ border-color: #4a4a8a; } + #browse-backdrop \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 100; } + #browse-backdrop.open \{ display: flex; align-items: center; justify-content: center; } + #browse-modal \{ background: #1a1a1a; border: 1px solid #333; border-radius: 8px; width: 90%; max-width: 500px; max-height: 80vh; padding: 20px; display: flex; flex-direction: column; } + #browse-header \{ display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; flex-shrink: 0; } + #browse-header span \{ font-size: 14px; font-weight: 600; } + #browse-header div \{ display: flex; gap: 6px; align-items: center; } + #browse-list \{ overflow-y: auto; font-family: monospace; font-size: 12px; color: #aaa; line-height: 1.6; } + .browse-dir \{ cursor: pointer; padding: 2px 0; user-select: none; } + .browse-dir:hover \{ color: #eee; } + .browse-dir::before \{ content: '\\25B6 '; font-size: 9px; display: inline-block; width: 14px; transition: transform 0.1s; } + .browse-dir.open::before \{ transform: rotate(90deg); } + .browse-children \{ display: none; padding-left: 16px; } + .browse-dir.open + .browse-children \{ display: block; } + .browse-file \{ padding: 2px 0; padding-left: 14px; } + .browse-file:hover \{ color: #eee; } + .browse-empty \{ color: #555; padding: 20px 0; text-align: center; } + #edit-backdrop \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 100; } + #edit-backdrop.open \{ display: flex; align-items: center; justify-content: center; } + #edit-modal \{ background: #1a1a1a; border: 1px solid #333; border-radius: 8px; width: 90%; max-width: 400px; padding: 20px; } + #edit-header \{ display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; } + .edit-field \{ margin-bottom: 10px; } + .edit-field label \{ display: block; color: #888; font-size: 11px; margin-bottom: 4px; } + .edit-field input \{ width: 100%; } + #creds-backdrop \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 100; } + #creds-backdrop.open \{ display: flex; align-items: center; justify-content: center; } + #creds-modal \{ background: #1a1a1a; border: 1px solid #333; border-radius: 8px; width: 90%; max-width: 400px; padding: 20px; } + #creds-header \{ display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px; } + #creds-header span \{ font-size: 14px; font-weight: 600; } + #creds-header div \{ display: flex; gap: 6px; } + #creds-json \{ width: 100%; font-family: monospace; font-size: 12px; border: 1px solid #333; border-radius: 6px; padding: 10px; resize: vertical; background: #111; color: #eee; outline: none; } + #creds-json:focus \{ border-color: #2563eb; } + #creds-status \{ margin-top: 10px; font-size: 12px; color: #4ade80; } + .section-header \{ margin-top: 16px; margin-bottom: 8px; } + .section-row \{ display: flex; align-items: center; gap: 8px; } + .section-title \{ font-size: 13px; font-weight: 600; color: #888; text-transform: uppercase; letter-spacing: 0.05em; } + .source-bar \{ display: flex; align-items: center; gap: 8px; margin-bottom: 8px; } + .source-label \{ color: #555; font-size: 11px; font-family: monospace; text-transform: uppercase; flex-shrink: 0; } + .source-input \{ flex: 1; padding: 6px 10px; border-radius: 6px; border: 1px solid #222; background: #1a1a1a; color: #888; font-size: 12px; font-family: monospace; outline: none; } + .source-input:focus \{ border-color: #2563eb; color: #eee; } + .bulk-actions \{ display: flex; justify-content: center; gap: 10px; margin-bottom: 10px; } + .create-bar \{ display: flex; gap: 8px; margin-bottom: 12px; } + .create-input \{ flex: 1; padding: 8px 12px; border-radius: 8px; border: 1px solid #333; background: #1a1a1a; color: #eee; font-size: 13px; outline: none; } + .create-input:focus \{ border-color: #2563eb; } + .create-btn \{ padding: 8px 16px; border-radius: 8px; border: none; background: #2563eb; color: white; font-size: 13px; cursor: pointer; white-space: nowrap; } + .create-btn:hover \{ background: #1d4ed8; } + .bridge-card \{ display: flex; justify-content: space-between; align-items: center; padding: 10px 14px; border-radius: 8px; background: #1a1a1a; border: 1px solid #222; margin-bottom: 6px; } + .bridge-card:hover \{ border-color: #444; } + .bridge-card.synced \{ border-color: #2a5a2a; } + .bridge-left \{ display: flex; align-items: center; gap: 8px; min-width: 0; } + .bridge-id \{ color: #444; font-size: 11px; font-family: monospace; flex-shrink: 0; } + .bridge-info \{ display: flex; flex-direction: column; gap: 2px; min-width: 0; } + .bridge-detail \{ color: #888; font-size: 12px; font-family: monospace; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } + .card-actions \{ display: flex; gap: 6px; flex-shrink: 0; } + .sync-btn \{ font-size: 11px; padding: 4px 10px; border-radius: 4px; border: 1px solid #2a5a2a; background: none; color: #6c6; cursor: pointer; } + .sync-btn:hover \{ border-color: #4a8a4a; } + .sync-btn.active \{ background: #2a5a2a; color: #fff; } + .delete-btn \{ font-size: 11px; padding: 4px 10px; border-radius: 4px; border: 1px solid transparent; background: none; color: #555; cursor: pointer; } + .delete-btn:hover \{ color: #f87171; border-color: #f87171; } + .empty \{ color: #555; font-size: 14px; padding: 20px 0; text-align: center; } + #log-bar \{ padding: 8px 12px; border-radius: 6px; background: #1a1a1a; border: 1px solid #222; cursor: pointer; margin-bottom: 8px; display: flex; align-items: center; gap: 8px; } + #log-bar:hover \{ border-color: #444; } + .log-dot \{ width: 6px; height: 6px; border-radius: 50%; flex-shrink: 0; } + .log-dot-info \{ background: #4ade80; } + .log-dot-warn \{ background: #facc15; } + .log-dot-error \{ background: #f87171; } + #log-backdrop \{ display: none; position: fixed; top: 0; left: 0; right: 0; bottom: 0; background: rgba(0,0,0,0.6); z-index: 100; } + #log-backdrop.open \{ display: flex; align-items: center; justify-content: center; } + #log-modal \{ background: #1a1a1a; border: 1px solid #333; border-radius: 8px; width: 90%; max-width: 550px; max-height: 80vh; padding: 20px; display: flex; flex-direction: column; } + #log-header \{ display: flex; justify-content: space-between; align-items: center; margin-bottom: 12px; flex-shrink: 0; } + #log-header span \{ font-size: 14px; font-weight: 600; } + #log-list \{ overflow-y: auto; font-family: monospace; font-size: 12px; line-height: 1.8; } + .log-entry \{ display: flex; align-items: flex-start; gap: 8px; padding: 2px 0; } + .log-time \{ color: #555; white-space: nowrap; } + .log-msg-info \{ color: #aaa; } + .log-msg-warn \{ color: #facc15; } + .log-msg-error \{ color: #f87171; } + """ +:: +++ script-text + ^- tape + """ + var P = location.pathname.replace(/page[.]html$/, ''); + var POKE = P.replace('/ball/', '/api/poke/'); + var OVER = P.replace('/ball/', '/api/over/'); + var KEEP = P.replace('/ball/', '/api/keep/'); + + function poke(payload) \{ + fetch(POKE + 'main.sig?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(payload) + }); + } + + // Creds modal + var credsBack = document.getElementById('creds-backdrop'); + var credsJson = document.getElementById('creds-json'); + var credsStatus = document.getElementById('creds-status'); + + function openCreds() \{ + credsStatus.textContent = ''; + credsStatus.style.color = '#4ade80'; + fetch(P + 'creds.json').then(function(r) \{ return r.json(); }) + .then(function(j) \{ credsJson.value = JSON.stringify(j, null, 2); }) + .catch(function() \{ credsJson.value = '\{}'; }); + credsBack.classList.add('open'); + } + + document.getElementById('creds-close').onclick = function() \{ + credsBack.classList.remove('open'); + }; + + credsBack.onclick = function(e) \{ + if (e.target === credsBack) credsBack.classList.remove('open'); + }; + + document.getElementById('creds-save').onclick = async function() \{ + var parsed; + try \{ parsed = JSON.parse(credsJson.value); } catch(e) \{ + credsStatus.textContent = 'Invalid JSON'; + credsStatus.style.color = '#f87171'; + return; + } + var r = await fetch(OVER + 'creds.json?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(parsed) + }); + if (r.ok) \{ + credsStatus.textContent = 'Saved'; + credsStatus.style.color = '#4ade80'; + poke(\{action: 'log', level: 'info', message: 'S3 credentials saved'}); + setTimeout(function() \{ credsBack.classList.remove('open'); }, 600); + } else \{ + credsStatus.textContent = 'Save failed'; + credsStatus.style.color = '#f87171'; + } + }; + + // Edit modal + var editBack = document.getElementById('edit-backdrop'); + + function openEdit(id, prefix, path) \{ + document.getElementById('edit-id').value = id; + document.getElementById('edit-prefix').value = prefix; + document.getElementById('edit-path').value = path; + editBack.classList.add('open'); + } + + document.getElementById('edit-close').onclick = function() \{ + editBack.classList.remove('open'); + }; + + editBack.onclick = function(e) \{ + if (e.target === editBack) editBack.classList.remove('open'); + }; + + document.getElementById('edit-save').onclick = function() \{ + var id = document.getElementById('edit-id').value; + var prefix = document.getElementById('edit-prefix').value.trim(); + var path = document.getElementById('edit-path').value.trim(); + if (!prefix || !path) return; + poke(\{action: 'edit-mapping', id: id, 's3-prefix': prefix, 'local-path': path}); + editBack.classList.remove('open'); + }; + + // Browse modal + var browseBack = document.getElementById('browse-backdrop'); + + function openBrowse() \{ + browseBack.classList.add('open'); + loadBrowse(); + } + + document.getElementById('browse-close').onclick = function() \{ + browseBack.classList.remove('open'); + }; + + browseBack.onclick = function(e) \{ + if (e.target === browseBack) browseBack.classList.remove('open'); + }; + + document.getElementById('browse-refresh').onclick = function() \{ + poke(\{action: 'browse'}); + document.getElementById('browse-list').innerHTML = '
loading...
'; + setTimeout(loadBrowse, 2000); + }; + + function loadBrowse() \{ + fetch(P + 'browse.json').then(function(r) \{ return r.json(); }) + .then(function(data) \{ + var keys = data.keys || []; + var fetched = data.fetched; + var count = data.count || keys.length; + var age = document.getElementById('browse-age'); + if (fetched) \{ + var secs = Math.floor(Date.now() / 1000) - fetched; + var ago; + if (secs < 60) ago = secs + 's ago'; + else if (secs < 3600) ago = Math.floor(secs / 60) + 'm ago'; + else ago = Math.floor(secs / 3600) + 'h ago'; + age.textContent = count + ' objects, ' + ago; + } else \{ + age.textContent = 'never fetched'; + } + var list = document.getElementById('browse-list'); + if (!keys.length) \{ + list.innerHTML = '
empty bucket (or not yet fetched)
'; + return; + } + var tree = \{}; + for (var i = 0; i < keys.length; i++) \{ + var parts = keys[i].split('/'); + var node = tree; + for (var j = 0; j < parts.length; j++) \{ + if (!parts[j]) continue; + if (j === parts.length - 1 && !keys[i].endsWith('/')) \{ + if (!node._files) node._files = []; + node._files.push(parts[j]); + } else \{ + if (!node[parts[j]]) node[parts[j]] = \{}; + node = node[parts[j]]; + } + } + } + list.innerHTML = renderTree(tree); + }) + .catch(function() \{ + document.getElementById('browse-list').innerHTML = + '
failed to load
'; + }); + } + + function renderTree(node) \{ + var html = ''; + var dirs = [], files = node._files || []; + for (var k in node) if (k !== '_files') dirs.push(k); + dirs.sort(); + files.sort(); + for (var i = 0; i < dirs.length; i++) \{ + html += '
' + dirs[i] + '/
'; + html += '
' + renderTree(node[dirs[i]]) + '
'; + } + for (var i = 0; i < files.length; i++) \{ + html += '
' + files[i] + '
'; + } + return html; + } + + // Mapping management + function addMapping() \{ + var prefix = document.getElementById('m-prefix').value.trim(); + var path = document.getElementById('m-path').value.trim(); + if (!prefix || !path) return; + poke(\{action: 'add-mapping', 's3-prefix': prefix, 'local-path': path}); + document.getElementById('m-prefix').value = ''; + document.getElementById('m-path').value = ''; + } + + function deleteMapping(id) \{ + if (!confirm('Delete this mapping?')) return; + poke(\{action: 'delete-mapping', id: id}); + } + + // Source + fetch(P + 'source.json').then(function(r) \{ return r.json(); }) + .then(function(v) \{ if (v) document.getElementById('m-source').value = v; }) + .catch(function() \{}); + + function saveSource() \{ + var val = document.getElementById('m-source').value.trim(); + fetch(OVER + 'source.json?mark=json', \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(val) + }).then(function() \{ + poke(\{action: 'log', level: 'info', message: val ? 'Source set to ' + val : 'Source cleared'}); + }); + } + + // S3 actions + function pullSource() \{ poke(\{action: 'pull-source'}); } + var sourceSynced = false; + function toggleSourceSync() \{ + if (sourceSynced) \{ + poke(\{action: 'unsync', id: 'mappings'}); + sourceSynced = false; + } else \{ + poke(\{action: 'sync', id: 'mappings'}); + sourceSynced = true; + } + updateSyncUI(); + } + function pull(id) \{ + if (!confirm('Pull will overwrite everything at the local path. Continue?')) return; + poke(\{action: 'pull', id: id}); + } + function pullAll() \{ + if (!confirm('Pull All will overwrite all local paths. Continue?')) return; + poke(\{action: 'pull-all'}); + } + function syncAll() \{ poke(\{action: 'sync-all'}); } + function unsyncAll() \{ poke(\{action: 'unsync-all'}); } + + // Sync toggle + var syncedIds = \{}; + + function toggleSync(id) \{ + if (syncedIds[id]) \{ + poke(\{action: 'unsync', id: id}); + syncedIds[id] = false; + } else \{ + poke(\{action: 'sync', id: id}); + syncedIds[id] = true; + } + updateSyncUI(); + } + + function updateSyncUI() \{ + var cards = document.querySelectorAll('.bridge-card'); + for (var i = 0; i < cards.length; i++) \{ + var id = cards[i].getAttribute('data-bridge'); + var btn = cards[i].querySelector('.sync-btn'); + if (syncedIds[id]) \{ + cards[i].classList.add('synced'); + if (btn) \{ btn.classList.add('active'); btn.textContent = 'unsync'; } + } else \{ + cards[i].classList.remove('synced'); + if (btn) \{ btn.classList.remove('active'); btn.textContent = 'sync'; } + } + } + var srcBtn = document.getElementById('source-sync-btn'); + if (srcBtn) \{ + srcBtn.textContent = sourceSynced ? 'unsync' : 'sync'; + srcBtn.classList.toggle('active', sourceSynced); + } + } + + function updateSyncState(ids) \{ + syncedIds = \{}; + for (var i = 0; i < ids.length; i++) syncedIds[ids[i]] = true; + updateSyncUI(); + } + + // SSE: live-update bridges when sync/mappings.json changes + function renderBridges(entries) \{ + var el = document.getElementById('bridges'); + if (!entries || !entries.length) \{ + el.innerHTML = '
No mappings configured.
'; + return; + } + var html = ''; + for (var i = 0; i < entries.length; i++) \{ + var b = entries[i]; + var id = b.id || ''; + var pre = b['s3-prefix'] || ''; + var loc = b['local-path'] || ''; + var isSynced = syncedIds[id]; + html += '
' + + '
' + + '#' + id + '' + + '
' + + 's3://' + pre + ' -> ' + loc + '' + + '
' + + '
' + + '' + + '' + + '' + + '' + + '
'; + } + el.innerHTML = html; + } + + var mapEs = new EventSource(KEEP + 'mapping.json?mark=json'); + mapEs.addEventListener('upd mapping.json', function(e) \{ + try \{ renderBridges(JSON.parse(e.data)); } catch(x) \{} + }); + + function applySyncStatus(ids) \{ + sourceSynced = false; + var mapped = []; + for (var i = 0; i < ids.length; i++) \{ + if (ids[i] === 'mappings') \{ sourceSynced = true; } + else \{ mapped.push(ids[i]); } + } + updateSyncState(mapped); + } + + // SSE: live-update sync status + var syncEs = new EventSource(KEEP + 'sync-status.json?mark=json'); + syncEs.addEventListener('upd sync-status.json', function(e) \{ + try \{ applySyncStatus(JSON.parse(e.data)); } catch(x) \{} + }); + + // Initial load + fetch(P + 'sync-status.json').then(function(r) \{ return r.json(); }) + .then(function(ids) \{ applySyncStatus(ids || []); }) + .catch(function() \{}); + + // Log bar + modal + var logBack = document.getElementById('log-backdrop'); + + function openLog() \{ + logBack.classList.add('open'); + loadLog(); + } + + document.getElementById('log-close').onclick = function() \{ + logBack.classList.remove('open'); + }; + + logBack.onclick = function(e) \{ + if (e.target === logBack) logBack.classList.remove('open'); + }; + + function fmtTime(ts) \{ + var d = new Date(ts * 1000); + var h = d.getHours(), m = d.getMinutes(), s = d.getSeconds(); + return (h < 10 ? '0' : '') + h + ':' + (m < 10 ? '0' : '') + m + ':' + (s < 10 ? '0' : '') + s; + } + + function updateLogBar(entries) \{ + var bar = document.getElementById('log-bar'); + var el = document.getElementById('log-latest'); + if (!entries || !entries.length) \{ + el.textContent = 'no activity yet'; + var dot = bar.querySelector('.log-dot'); + if (dot) dot.remove(); + return; + } + var e = entries[0]; + var lvl = e.level || 'info'; + el.textContent = e.message || ''; + var dot = bar.querySelector('.log-dot'); + if (!dot) \{ + dot = document.createElement('span'); + dot.className = 'log-dot'; + bar.insertBefore(dot, el); + } + dot.className = 'log-dot log-dot-' + lvl; + } + + function renderLog(entries) \{ + var el = document.getElementById('log-list'); + if (!entries || !entries.length) \{ + el.innerHTML = '
No log entries.
'; + return; + } + var html = ''; + for (var i = 0; i < entries.length; i++) \{ + var e = entries[i]; + var lvl = e.level || 'info'; + var t = e.time ? fmtTime(e.time) : ''; + html += '
' + + '' + t + '' + + '' + + '' + (e.message || '') + '' + + '
'; + } + el.innerHTML = html; + } + + function loadLog() \{ + fetch(P + 'log.json').then(function(r) \{ return r.json(); }) + .then(function(entries) \{ + updateLogBar(entries); + renderLog(entries); + }) + .catch(function() \{}); + } + + var logEs = new EventSource(KEEP + 'log.json?mark=json'); + logEs.addEventListener('upd log.json', function(e) \{ + try \{ + var entries = JSON.parse(e.data); + updateLogBar(entries); + if (logBack.classList.contains('open')) renderLog(entries); + } catch(x) \{} + }); + + loadLog(); + window.addEventListener('beforeunload', function() \{ mapEs.close(); logEs.close(); syncEs.close(); }); + """ +-- diff --git a/desk/gub/nex/telegram-bot.hoon b/desk/gub/nex/telegram-bot.hoon new file mode 100644 index 0000000..89012de --- /dev/null +++ b/desk/gub/nex/telegram-bot.hoon @@ -0,0 +1,568 @@ +:: telegram-bot nexus: chat interface for a single Telegram bot +:: +:: Polls Telegram's getUpdates API via long polling, stores messages +:: per-chat in messages/{chat-id}.json files. +:: +:: Each message file: {"name": "...", "chat-id": "...", "messages": [...]} +:: Config: /config.json with bot-token field. +:: +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + =/ default-config=json + %- pairs:enjs:format + ~[['bot-token' s+'']] + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'config.json'] %.n [~ [/ %json] !>(default-config)]] + [%fall %& [/ %'offset.ud'] %.n [~ [/ %ud] !>(0)]] + [%fall %& [/ %'send.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %& [/ %'poller.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %| /messages [~ ~] [~ ~] empty-dir:loader] + [%fall %| /ui/sse [~ ~] [~ ~] empty-dir:loader] + [%over %& [/ui/sse %'data.html'] %.n [~ [/ %html] !>((crip (en-xml:html (sse-data ~ ~))))]] + [%over %& [/ui %'chat.html'] %.n [~ [/ %html] !>((crip (en-xml:html (chat-page "" *(map @t @t) *(list json)))))]] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /poller.sig: long-poll getUpdates loop + :: + [~ %'poller.sig'] + ;< ~ bind:m (rise-wait:io prod "%telegram-bot poller: failed") + ;< bot-token=@t bind:m read-bot-token + ?: =('' bot-token) + ~& >>> %telegram-bot-no-token + stay:m + ;< offset=@ud bind:m read-offset + |- + :: long-poll getUpdates (25s timeout) + :: + =/ url=@t + %+ rap 3 + :~ 'https://api.telegram.org/bot' + bot-token + '/getUpdates?timeout=25' + ?:(=(0 offset) '' (cat 3 '&offset=' (crip (a-co:co offset)))) + == + =/ =request:http + [%'GET' url ~[['Accept' 'application/json']] ~] + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + ?. ?=(%finished -.client-response) $ + =/ body=@t + ?~(full-file.client-response '' q.data.u.full-file.client-response) + =/ parsed=(each json tang) (mule |.((need (de:json:html body)))) + ?: ?=(%| -.parsed) $ + =/ resp=json p.parsed + ?. ?=([%o *] resp) $ + =/ results=(unit json) (~(get by p.resp) 'result') + ?. ?=([~ %a *] results) $ + ?~ p.u.results $ + ~& >> ["%telegram-bot: got" (lent p.u.results) "updates from getUpdates"] + :: process updates, extract messages + :: + =/ new-messages=(list json) + %+ murn p.u.results + |= upd=json + ?. ?=([%o *] upd) ~ + =/ msg=(unit json) (~(get by p.upd) 'message') + ?~ msg ~ + ?. ?=([%o *] u.msg) ~ + =/ text=(unit json) (~(get by p.u.msg) 'text') + =/ from=(unit json) (~(get by p.u.msg) 'from') + =/ chat=(unit json) (~(get by p.u.msg) 'chat') + =/ from-name=@t + ?. ?=([~ %o *] from) 'unknown' + =/ first (~(get by p.u.from) 'first_name') + ?. ?=([~ %s *] first) 'unknown' + p.u.first + =/ chat-id=@t + ?. ?=([~ %o *] chat) '' + =/ cid (~(get by p.u.chat) 'id') + ?. ?=([~ %n *] cid) '' + p.u.cid + =/ chat-title=@t + ?. ?=([~ %o *] chat) '' + =/ ttl (~(get by p.u.chat) 'title') + ?. ?=([~ %s *] ttl) + =/ first (~(get by p.u.chat) 'first_name') + ?. ?=([~ %s *] first) '' + p.u.first + p.u.ttl + =/ date=(unit json) (~(get by p.u.msg) 'date') + ?~ text ~ + ?. ?=([%s *] u.text) ~ + :- ~ + %- pairs:enjs:format + :~ ['from' s+from-name] + ['text' u.text] + ['chat-id' s+chat-id] + ['chat-title' s+chat-title] + ['date' (fall date (numb:enjs:format 0))] + ['dir' s+'in'] + == + :: compute new offset: max update_id + 1 + :: + ~& >> ["%telegram-bot: extracted" (lent new-messages) "new messages total"] + =/ new-offset=@ud + =/ max-id=@ud 0 + =/ updates=(list json) p.u.results + |- + ?~ updates ?:(=(0 max-id) offset +(max-id)) + =/ upd=json i.updates + ?. ?=([%o *] upd) + $(updates t.updates) + =/ uid=(unit json) (~(get by p.upd) 'update_id') + ?. ?=([~ %n *] uid) + $(updates t.updates) + =/ parsed=(unit @ud) (rush p.u.uid dem) + ?~ parsed $(updates t.updates) + $(updates t.updates, max-id (max max-id u.parsed)) + :: group messages by chat-id + :: + =/ by-chat=(map @t (list json)) + %+ roll new-messages + |= [msg=json acc=(map @t (list json))] + ?. ?=([%o *] msg) acc + =/ v (~(get by p.msg) 'chat-id') + ?. ?=([~ %s *] v) acc + =/ cid=@t p.u.v + =/ existing=(list json) (fall (~(get by acc) cid) ~) + (~(put by acc) cid (snoc existing msg)) + :: write per-chat message files (with chat name) + :: + ;< ~ bind:m + =/ chat-list=(list [cid=@t msgs=(list json)]) ~(tap by by-chat) + |- + ?~ chat-list (pure:(fiber:fiber:nexus ,~) ~) + =/ cid=@t cid.i.chat-list + =/ msgs=(list json) msgs.i.chat-list + ;< existing=json bind:m (read-chat-file cid) + =/ old-name=@t (get-chat-name existing cid) + =/ old-msgs=(list json) (get-chat-msgs existing) + :: use chat-title from first new message if we have no name yet + =/ chat-name=@t + ?. =(old-name cid) old-name + ?~ msgs cid + ?. ?=([%o *] i.msgs) cid + =/ v (~(get by p.i.msgs) 'chat-title') + ?. ?=([~ %s *] v) cid + ?: =('' p.u.v) cid + p.u.v + ~& >> ["%telegram-bot: writing" (lent msgs) "msgs to chat" cid chat-name] + ;< ~ bind:m (write-chat-file cid chat-name (weld old-msgs msgs)) + $(chat-list t.chat-list) + :: update offset + :: + =/ offset-road=road:tarball (cord-to-road:tarball './offset.ud') + ;< ~ bind:m (over:io offset-road [[/ %ud] !>(new-offset)]) + $(offset new-offset) + :: /send.sig: accept pokes to send messages as the bot + :: + [~ %'send.sig'] + ~& > "%telegram-bot send.sig: on-file triggered" + ;< ~ bind:m (rise-wait:io prod "%telegram-bot send: failed") + |- + ;< =sage:tarball bind:m take-poke:io + ~& > ["%telegram-bot send.sig: got poke, mark" name.p.sage] + ?. ?=(%json name.p.sage) $ + =/ req=json !<(json q.sage) + ?. ?=([%o *] req) $ + =/ message=@t + =/ v (~(get by p.req) 'message') + ?. ?=([~ %s *] v) '' + p.u.v + =/ chat-id=@t + =/ v (~(get by p.req) 'chat_id') + ?. ?=([~ %s *] v) '' + p.u.v + ?: |(=('' message) =('' chat-id)) $ + ;< bot-token=@t bind:m read-bot-token + ?: =('' bot-token) $ + :: send via telegram API + :: + =/ url=@t + (rap 3 ~['https://api.telegram.org/bot' bot-token '/sendMessage']) + =/ body=@t + (rap 3 ~['chat_id=' chat-id '&text=' message]) + =/ =request:http + :* %'POST' + url + ~[['content-type' 'application/x-www-form-urlencoded']] + `(as-octs:mimes:html body) + == + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-client-response:io + :: log our outbound message + :: + =/ out-msg=json + %- pairs:enjs:format + :~ ['from' s+'bot'] + ['text' s+message] + ['chat-id' s+chat-id] + ['date' (numb:enjs:format 0)] + ['dir' s+'out'] + == + ;< existing=json bind:m (read-chat-file chat-id) + =/ old-name=@t (get-chat-name existing chat-id) + =/ old-msgs=(list json) (get-chat-msgs existing) + ;< ~ bind:m (write-chat-file chat-id old-name (snoc old-msgs out-msg)) + $ + :: /ui/sse/data.html: SSE fragment with messages data + :: + [[%ui %sse ~] %'data.html'] + ;< ~ bind:m (rise-wait:io prod "%telegram-bot sse: failed") + ;< here=rail:tarball bind:m get-here-abs:io + =/ ball-id=tape (trip (snag 0 path.here)) + ;< init=view:nexus bind:m + (keep:io /msgs (cord-to-road:tarball '../../messages/') ~) + =/ chat-data=[(map @t @t) (list json)] (view-to-chat-data init) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (sse-data -.chat-data +.chat-data))))) + |- + ;< upd=view:nexus bind:m (take-news:io /msgs) + =/ chat-data=[(map @t @t) (list json)] (view-to-chat-data upd) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (sse-data -.chat-data +.chat-data))))) + $ + :: /ui/chat.html: live chat view + :: + [[%ui ~] %'chat.html'] + ;< ~ bind:m (rise-wait:io prod "%telegram-bot chat: failed") + :: compute base path for API calls + ;< here=rail:tarball bind:m get-here-abs:io + =/ base=tape + :: path.here keys already contain dots for necks + :: e.g. /telegram.telegram/bots/claude-1/ui + :: snip /ui, then join with / + =/ pax=path (snip path.here) + =/ acc=tape "" + |- + ?~ pax acc + =/ seg=tape (trip i.pax) + ?~ acc $(pax t.pax, acc seg) + $(pax t.pax, acc (weld acc (weld "/" seg))) + ;< init=view:nexus bind:m + (keep:io /msgs [%| 1 %| /messages] ~) + =/ chat-data=[(map @t @t) (list json)] (view-to-chat-data init) + ;< ~ bind:m + (replace:io !>((crip (en-xml:html (chat-page base -.chat-data +.chat-data))))) + |- + ;< upd=view:nexus bind:m (take-news:io /msgs) + =/ chat-data=[(map @t @t) (list json)] (view-to-chat-data upd) + ;< ~ bind:m + (replace:io !>((crip (en-xml:html (chat-page base -.chat-data +.chat-data))))) + $ + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the telegram-bot nexus.' + ~ + %- crip + """ + TELEGRAM BOT — chat interface for a single Telegram bot + + Long-polls Telegram's getUpdates API and maintains per-chat + message logs in messages/[chat-id].json. + + Each file: \{"name": "...", "chat-id": "...", "messages": [...]} + + Configure /config.json with bot-token. + View chat at /ui/chat.html. + """ + == + %| + ?+ rail.p.mana 'File under the telegram-bot nexus.' + [~ %'offset.ud'] 'Telegram update offset. Mark: ud.' + [~ %'config.json'] 'Bot config: bot-token. Mark: json.' + [~ %'send.sig'] 'Accepts JSON pokes with chat_id and message. Sends as bot.' + [~ %'poller.sig'] 'Long-polling loop for incoming messages.' + == + == + -- +|% +:: +++ read-bot-token + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ;< =seen:nexus bind:m + (peek:io (cord-to-road:tarball './config.json') `[/ %json]) + ?. ?=([%& %file *] seen) + (pure:m '') + =/ cfg=json !<(json q.sage.p.seen) + ?. ?=(%o -.cfg) + (pure:m '') + =/ v (~(get by p.cfg) 'bot-token') + ?. ?=([~ %s *] v) (pure:m '') + (pure:m p.u.v) +:: +++ read-offset + =/ m (fiber:fiber:nexus ,@ud) + ^- form:m + ;< =seen:nexus bind:m + (peek:io (cord-to-road:tarball './offset.ud') `[/ %ud]) + ?. ?=([%& %file *] seen) + (pure:m 0) + (pure:m !<(@ud q.sage.p.seen)) +:: +++ read-chat-file + |= cid=@t + =/ m (fiber:fiber:nexus ,json) + ^- form:m + ;< =seen:nexus bind:m + (peek:io (cord-to-road:tarball (rap 3 ~['./messages/' cid '.json'])) `[/ %json]) + ?. ?=([%& %file *] seen) + (pure:m [%o ~]) + (pure:m !<(json q.sage.p.seen)) +:: +++ get-chat-name + |= [dat=json default=@t] + ^- @t + ?. ?=([%o *] dat) default + =/ v (~(get by p.dat) 'name') + ?. ?=([~ %s *] v) default + p.u.v +:: +++ get-chat-msgs + |= dat=json + ^- (list json) + ?: ?=([%a *] dat) p.dat + ?. ?=([%o *] dat) ~ + =/ v (~(get by p.dat) 'messages') + ?. ?=([~ %a *] v) ~ + p.u.v +:: +++ write-chat-file + |= [cid=@t name=@t msgs=(list json)] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ file-road=road:tarball + (cord-to-road:tarball (rap 3 ~['./messages/' cid '.json'])) + =/ dat=json + %- pairs:enjs:format + :~ ['name' s+name] + ['chat-id' s+cid] + ['messages' [%a msgs]] + == + ;< =seen:nexus bind:m + (peek:io file-road ~) + ?: ?=([%& %file *] seen) + (over:io file-road [[/ %json] !>(dat)]) + (make:io file-road [%| gain=%.n [[/ %json] !>(dat)] ~]) +:: +:: Extract chat names and messages from the messages/ directory view. +:: Files live in fil.ball.view → contents (not dir, which is subdirs). +:: +++ view-to-chat-data + |= =view:nexus + ^- [(map @t @t) (list json)] + ?. ?=([%ball *] view) [~ ~] + ?~ fil.ball.view [~ ~] + =/ files=(list [key=@ta =content:tarball]) + ~(tap by contents.u.fil.ball.view) + %+ roll files + |= [[key=@ta =content:tarball] chats=(map @t @t) msgs=(list json)] + ?. ?=(%json name.p.sage.content) [chats msgs] + =/ dat=json !<(json q.sage.content) + :: handle old format: [%a msgs] — derive chat-id from first message + ?: ?=([%a *] dat) + =/ old-msgs=(list json) p.dat + =/ cid=@t + ?~ old-msgs '' + ?. ?=([%o *] i.old-msgs) '' + =/ v (~(get by p.i.old-msgs) 'chat-id') + ?. ?=([~ %s *] v) '' + p.u.v + ?: =('' cid) [chats (weld msgs old-msgs)] + [(~(put by chats) cid cid) (weld msgs old-msgs)] + :: new format: {"name": ..., "chat-id": ..., "messages": [...]} + ?. ?=([%o *] dat) [chats msgs] + =/ cid=@t + =/ v (~(get by p.dat) 'chat-id') + ?. ?=([~ %s *] v) '' + p.u.v + =/ name=@t + =/ v (~(get by p.dat) 'name') + ?. ?=([~ %s *] v) cid + p.u.v + =/ file-msgs=(list json) + =/ v (~(get by p.dat) 'messages') + ?. ?=([~ %a *] v) ~ + p.u.v + [(~(put by chats) cid name) (weld msgs file-msgs)] +:: +++ sse-data + |= [chats=(map @t @t) messages=(list json)] + ^- manx + =/ chats-json=tape + %- trip + %- en:json:html + %- pairs:enjs:format + %+ turn ~(tap by chats) + |=([id=@t name=@t] [id s+name]) + =/ msgs-json=tape (trip (en:json:html [%a messages])) + ;div(id "sse-data", data-chats chats-json, data-messages msgs-json); +:: +++ chat-page + |= [base=tape chats=(map @t @t) messages=(list json)] + ^- manx + =/ api=tape "/grubbery/api" + =/ msgs-json=tape (trip (en:json:html [%a messages])) + ;html + ;head + ;title: Telegram Bot + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;style + ;+ ;/ + ;: weld + "* \{ box-sizing: border-box; } " + "body \{ font-family: monospace; margin: 0; padding: 0; height: 100vh; display: flex; flex-direction: column; } " + "#header \{ display: flex; justify-content: space-between; align-items: baseline; padding: 0.75rem 1rem; border-bottom: 1px solid #ccc; } " + "#header h1 \{ margin: 0; font-size: 1rem; } " + "#layout \{ display: flex; flex: 1; overflow: hidden; } " + "#sidebar \{ width: 200px; border-right: 1px solid #ccc; display: flex; flex-direction: column; } " + "#chat-list \{ flex: 1; overflow-y: auto; } " + ".chat-item \{ padding: 0.5rem 0.75rem; cursor: pointer; font-size: 0.8rem; border-bottom: 1px solid #eee; white-space: nowrap; overflow: hidden; text-overflow: ellipsis; } " + ".chat-item:hover \{ background: #f0f0f0; } " + ".chat-item.active \{ background: #e3f2fd; font-weight: bold; } " + ".chat-item.all \{ opacity: 0.5; font-style: italic; } " + "#chat-actions \{ padding: 0.5rem; border-top: 1px solid #ccc; display: flex; flex-direction: column; gap: 0.3rem; } " + "#chat-actions input \{ font-family: monospace; padding: 0.25rem; border: 1px solid #ccc; border-radius: 3px; font-size: 0.75rem; width: 100%; } " + "#chat-actions button \{ font-family: monospace; padding: 0.25rem; border: 1px solid #ccc; border-radius: 3px; background: none; cursor: pointer; font-size: 0.7rem; } " + "#chat-actions button:hover \{ background: #eee; } " + "#chat-actions button.del \{ border-color: #c62828; color: #c62828; } " + "#chat-actions button.del:hover \{ background: #fce8e6; } " + "#main \{ flex: 1; display: flex; flex-direction: column; overflow: hidden; } " + "#messages \{ flex: 1; padding: 0.75rem; overflow-y: auto; background: #f9f9f9; display: flex; flex-direction: column; gap: 0.4rem; } " + ".msg \{ padding: 0.4rem 0.6rem; border-radius: 6px; max-width: 80%; font-size: 0.85rem; line-height: 1.4; word-break: break-word; } " + ".msg.in \{ background: #e3f2fd; align-self: flex-start; } " + ".msg.out \{ background: #e8f5e9; align-self: flex-end; } " + ".msg .from \{ font-size: 0.7rem; font-weight: bold; opacity: 0.6; margin-bottom: 0.15rem; } " + "#compose \{ display: flex; gap: 0.5rem; padding: 0.5rem 0.75rem; border-top: 1px solid #ccc; } " + "#compose input \{ flex: 1; font-family: monospace; padding: 0.4rem; border: 1px solid #ccc; border-radius: 4px; } " + "#compose button \{ padding: 0.4rem 0.75rem; font-family: monospace; cursor: pointer; border: 1px solid #ccc; border-radius: 4px; background: #333; color: #fff; } " + "#compose button:hover \{ background: #555; } " + ".empty \{ opacity: 0.4; text-align: center; padding: 2rem; } " + ".hdr-btn \{ font-size: 0.65rem; text-transform: uppercase; opacity: 0.4; padding: 0.15rem 0.4rem; border: 1px solid #ccc; border-radius: 3px; background: none; cursor: pointer; margin-left: 0.4rem; text-decoration: none; color: inherit; } " + ".hdr-btn:hover \{ opacity: 0.8; } " + == + == + == + ;body + ;div#header + ;h1: Telegram Bot + ;a.hdr-btn(href "../../../ui/manage.html"): bots + == + ;div#layout + ;div#sidebar + ;div#chat-list + ;div.chat-item.all(data-id "all"): All chats + ;* %+ turn ~(tap by chats) + |= [id=@t name=@t] + =/ cid=tape (trip id) + =/ display=tape (trip name) + ;div.chat-item(data-id cid): {display} + == + ;div#chat-actions + ;input#add-chat-id(type "text", placeholder "Chat ID"); + ;input#add-chat-name(type "text", placeholder "Name"); + ;button#add-chat-btn: + add chat + ;button#del-chat-btn.del: - delete selected + == + == + ;div#main + ;div#messages + ;span.empty: Loading... + == + ;div#compose + ;input#input(type "text", placeholder "Type a message...", autocomplete "off"); + ;button#send: Send + == + == + == + ;script + ;+ ;/ + ;: weld + "var API='{api}';var BASE='{base}';" + "var allMsgs={msgs-json};var curChat='all';" + :: chat sidebar selection + "var items=document.querySelectorAll('.chat-item');" + "var first=document.querySelector('.chat-item:not(.all)');" + "if(first)\{first.classList.add('active');curChat=first.dataset.id}" + "else\{document.querySelector('.chat-item.all').classList.add('active')}" + "items.forEach(function(el)\{el.onclick=function()\{items.forEach(function(x)\{x.classList.remove('active')});el.classList.add('active');curChat=el.dataset.id;renderMsgs()}});" + :: render messages filtered by selected chat + "function renderMsgs()\{var filtered=curChat==='all'?allMsgs:allMsgs.filter(function(m)\{return(m['chat-id']||'')==curChat});var el=document.getElementById('messages');el.innerHTML='';if(filtered.length===0)\{el.innerHTML='No messages yet.';return}filtered.forEach(function(m)\{var d=document.createElement('div');d.className='msg '+(m.dir||'in');d.innerHTML='
'+esc(m.from||'unknown')+'
'+esc(m.text||'')+'';el.appendChild(d)});scrollBottom()}" + "renderMsgs();" + :: send message + "function doSend()\{var i=document.getElementById('input');var m=i.value.trim();if(!m)return;if(curChat==='all')\{alert('Select a specific chat to send to');return}i.value='';fetch(API+'/poke/'+BASE+'/send.sig?mark=json',\{method:'POST',headers:\{'Content-Type':'application/json'},body:JSON.stringify(\{message:m,chat_id:curChat})})}" + "document.getElementById('send').onclick=doSend;" + "document.getElementById('input').onkeydown=function(e)\{if(e.key==='Enter')doSend()};" + :: helpers + "function scrollBottom()\{var m=document.getElementById('messages');m.scrollTop=m.scrollHeight}" + "function esc(s)\{var d=document.createElement('div');d.textContent=s;return d.innerHTML}" + :: chat management — create/delete message files directly + "document.getElementById('add-chat-btn').onclick=async function()\{var id=document.getElementById('add-chat-id').value.trim();var name=document.getElementById('add-chat-name').value.trim()||id;if(!id)\{alert('Chat ID required');return}await fetch(API+'/file/'+BASE+'/messages/'+id+'.json?mark=json',\{method:'PUT',headers:\{'Content-Type':'application/json'},body:JSON.stringify(\{name:name,'chat-id':id,messages:[]})});location.reload()};" + "document.getElementById('del-chat-btn').onclick=async function()\{if(curChat==='all')\{alert('Select a chat first');return}var el=document.querySelector('.chat-item.active');var name=el?el.textContent:curChat;if(!confirm('Delete chat \"'+name+'\" ('+curChat+')?'))return;await fetch(API+'/file/'+BASE+'/messages/'+curChat+'.json',\{method:'DELETE'});location.reload()};" + :: SSE live updates + "var sseCtrl=null,sseRdr=null;" + "function initSidebar()\{var items=document.querySelectorAll('.chat-item');items.forEach(function(el)\{el.onclick=function()\{items.forEach(function(x)\{x.classList.remove('active')});el.classList.add('active');curChat=el.dataset.id;renderMsgs()}})};" + "async function connectSSE()\{" + "if(sseRdr)try\{sseRdr.cancel()}catch(e)\{}" + "if(sseCtrl)sseCtrl.abort();" + "sseCtrl=new AbortController();" + "try\{" + "var r=await fetch(API+'/keep/'+BASE+'/ui/sse?mark=txt',\{headers:\{Accept:'text/event-stream'},signal:sseCtrl.signal});" + "sseRdr=r.body.getReader();" + "var dec=new TextDecoder();var buf='';" + "while(true)\{" + "var chunk=await sseRdr.read();" + "if(chunk.done)break;" + "buf+=dec.decode(chunk.value,\{stream:true});" + "var evts=buf.split('\\n\\n');" + "buf=evts.pop();" + "for(var i=0;i'+esc(newChats[cid])+''}" + "cl.innerHTML=html;" + "initSidebar();" + "var prev=document.querySelector('.chat-item[data-id=\"'+curChat+'\"]');" + "if(prev)prev.classList.add('active');" + "else\{document.querySelector('.chat-item.all').classList.add('active');curChat='all'}" + "renderMsgs();" + "}catch(e)\{console.error('SSE parse error',e)}" + "}" + "}" + "}catch(e)\{if(e.name!=='AbortError')setTimeout(connectSSE,3000)}" + "}" + "window.addEventListener('beforeunload',function()\{if(sseRdr)try\{sseRdr.cancel()}catch(e)\{};if(sseCtrl)sseCtrl.abort()});" + "connectSSE();" + == + == + == + == +-- diff --git a/desk/gub/nex/telegram.hoon b/desk/gub/nex/telegram.hoon new file mode 100644 index 0000000..2ef2023 --- /dev/null +++ b/desk/gub/nex/telegram.hoon @@ -0,0 +1,211 @@ +:: telegram nexus: parent nexus for managing Telegram bots +:: +:: Each subdirectory is a telegram-bot nexus instance. +:: UI at /ui/manage.html for adding/deleting bots. +:: +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%fall %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%over %& [/ui %'manage.html'] %.n [~ [/ %html] !>((crip (en-xml:html (manage-page ~))))]] + [%fall %| /bots [~ ~] [~ ~] empty-dir:loader] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /main.sig: handle add/delete bot pokes + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%telegram main: failed") + |- + ;< =sage:tarball bind:m take-poke:io + ?. ?=(%json name.p.sage) $ + =/ req=json !<(json q.sage) + ?. ?=([%o *] req) $ + =/ action=@t + =/ v (~(get by p.req) 'action') + ?. ?=([~ %s *] v) '' + p.u.v + ?+ action $ + %add + =/ bot-name=@t + =/ v (~(get by p.req) 'name') + ?. ?=([~ %s *] v) '' + p.u.v + =/ bot-token=@t + =/ v (~(get by p.req) 'token') + ?. ?=([~ %s *] v) '' + p.u.v + ?: |(=('' bot-name) =('' bot-token)) $ + :: sanitize name: lowercase, replace spaces with hyphens, + :: keep only a-z 0-9 and hyphens + =/ dir-name=@ta + %- crip + ^- tape + %+ murn `tape`(cass (trip bot-name)) + |= c=@tD + ^- (unit @tD) + ?: &((gte c 'a') (lte c 'z')) `c + ?: &((gte c '0') (lte c '9')) `c + ?: |(=(c ' ') =(c '-') =(c '_')) `'-' + ~ + ?: =('' dir-name) $ + :: check if bot already exists + ;< =seen:nexus bind:m + (peek:io [%| 0 %| /bots/[dir-name]] ~) + ?. ?=([%& %none *] seen) + ~& >> [%telegram-bot-already-exists dir-name] + $ + =/ new-ball=ball:tarball [`[~ `[/ %telegram-bot] ~] ~] + ;< ~ bind:m + (make:io [%| 0 %| /bots/[dir-name]] &+[*sand:nexus *gain:nexus new-ball]) + :: write the bot token into its config + =/ cfg=json + (pairs:enjs:format ~[['bot-token' s+bot-token]]) + =/ cfg-road=road:tarball + (cord-to-road:tarball (rap 3 ~['./bots/' dir-name '/config.json'])) + ;< ~ bind:m (over:io cfg-road [[/ %json] !>(cfg)]) + $ + :: + %delete + =/ bot-name=@t + =/ v (~(get by p.req) 'name') + ?. ?=([~ %s *] v) '' + p.u.v + ?: =('' bot-name) $ + =/ dir-name=@ta bot-name + ;< ~ bind:m (cull:io [%| 0 %| /bots/[dir-name]]) + $ + == + :: /ui/manage.html: bot management view + :: + [[%ui ~] %'manage.html'] + ;< ~ bind:m (rise-wait:io prod "%telegram manage: failed") + ;< init=view:nexus bind:m + (keep:io /bots [%| 1 %| /bots] ~) + =/ bot-names=(list @ta) (view-to-bot-names init) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (manage-page bot-names))))) + |- + ;< upd=view:nexus bind:m (take-news:io /bots) + =/ bot-names=(list @ta) (view-to-bot-names upd) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (manage-page bot-names))))) + $ + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'A telegram-bot instance.' + ~ + %- crip + """ + TELEGRAM — parent nexus for Telegram bots + + Each subdirectory is a telegram-bot nexus instance with its own + config, message log, and polling loop. + + Manage bots at /ui/manage.html. + """ + == + %| + ?+ rail.p.mana 'File under the telegram nexus.' + [~ %'main.sig'] 'Handles add/delete bot pokes.' + [[%ui ~] %'manage.html'] 'Bot management UI.' + == + == + -- +|% +:: +++ view-to-bot-names + |= =view:nexus + ^- (list @ta) + ?. ?=([%ball *] view) ~ + ~(tap in ~(key by dir.ball.view)) +:: +++ manage-page + |= bots=(list @ta) + ^- manx + =/ api=tape "/grubbery/api" + =/ ball=tape "/grubbery/ball/telegram.telegram/bots" + =/ base=tape "telegram.telegram" + ;html + ;head + ;title: Telegram Bots + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;style + ;+ ;/ + ;: weld + "body \{ font-family: monospace; max-width: 700px; margin: 0 auto; padding: 2rem; } " + "#header \{ display: flex; justify-content: space-between; align-items: baseline; } " + ".bot-list \{ margin: 1rem 0; } " + ".bot-item \{ display: flex; justify-content: space-between; align-items: center; padding: 0.5rem 0.75rem; border: 1px solid #ccc; border-radius: 4px; margin-bottom: 0.5rem; } " + ".bot-item a \{ color: #333; text-decoration: none; font-weight: bold; } " + ".bot-item a:hover \{ text-decoration: underline; } " + ".bot-item button \{ font-size: 0.7rem; padding: 0.2rem 0.5rem; border: 1px solid #c62828; border-radius: 3px; background: none; color: #c62828; cursor: pointer; font-family: monospace; } " + ".bot-item button:hover \{ background: #fce8e6; } " + "#add-form \{ border: 1px solid #ccc; border-radius: 4px; padding: 1rem; margin-top: 1rem; } " + "#add-form h3 \{ margin: 0 0 0.75rem 0; font-size: 0.85rem; text-transform: uppercase; opacity: 0.5; } " + "#add-form label \{ display: block; margin-top: 0.5rem; font-size: 0.8rem; opacity: 0.6; } " + "#add-form input \{ width: 100%; box-sizing: border-box; font-family: monospace; padding: 0.4rem; border: 1px solid #ccc; border-radius: 4px; margin-top: 0.2rem; } " + "#add-form button \{ margin-top: 0.75rem; padding: 0.5rem 1rem; font-family: monospace; cursor: pointer; border: 1px solid #ccc; border-radius: 4px; background: #333; color: #fff; } " + "#add-form button:hover \{ background: #555; } " + ".empty \{ opacity: 0.4; text-align: center; padding: 2rem; } " + == + == + == + ;body + ;div#header + ;h1: Telegram Bots + == + ;div.bot-list + ;* ?~ bots + =/ empty=manx ;span.empty: No bots configured + ~[empty] + %+ turn bots + |= id=@ta + =/ dir=tape (trip id) + =/ href=tape + "{ball}/{dir}/ui/chat.html" + ;div.bot-item + ;a(href href): {dir} + ;button(onclick "deletBot('{dir}')"): delete + == + == + ;div#add-form + ;h3: Add Bot + ;label: Name + ;input#bot-name(type "text", placeholder "mybot", autocomplete "off"); + ;label: Bot Token + ;input#bot-token(type "text", placeholder "123456:ABC-DEF...", autocomplete "off"); + ;button#add-btn: Create Bot + == + ;script + ;+ ;/ + ;: weld + "var API='{api}';var BASE='{base}';" + "function sanitize(s)\{return s.toLowerCase().replace(/[^a-z0-9]/g,'-').replace(/-+/g,'-').replace(/^-|-$/g,'')}" + "var nameInput=document.getElementById('bot-name');" + "nameInput.oninput=function()\{var s=sanitize(this.value);this.title=s?'Will create: '+s:''};" + "document.getElementById('add-btn').onclick=async function()\{var n=sanitize(document.getElementById('bot-name').value);var t=document.getElementById('bot-token').value.trim();if(!n||!t)\{alert('Name and token are required');return}await fetch(API+'/poke/'+BASE+'/main.sig?mark=json',\{method:'POST',headers:\{'Content-Type':'application/json'},body:JSON.stringify(\{action:'add',name:n,token:t})});location.reload()};" + "function deletBot(name)\{if(!confirm('Delete bot '+name+'?'))return;fetch(API+'/poke/'+BASE+'/main.sig?mark=json',\{method:'POST',headers:\{'Content-Type':'application/json'},body:JSON.stringify(\{action:'delete',name:name})}).then(function()\{location.reload()})}" + == + == + == + == +-- diff --git a/desk/gub/nex/wallet/account.hoon b/desk/gub/nex/wallet/account.hoon new file mode 100644 index 0000000..7b22ccd --- /dev/null +++ b/desk/gub/nex/wallet/account.hoon @@ -0,0 +1,1109 @@ +:: per-account nexus: individual BIP44 account instance +:: +:: Each account directory contains: +:: data.account account-data (name, xprv, script-type, addresses) +:: data.draft transaction draft state +:: main.sig poke handler for derive-next + send actions +:: +/< wt /lib/wallet-types.hoon +/< bip32 /lib/bip32.hoon +/< bech32 /lib/bech32.hoon +/< drft /lib/tx/draft.hoon +/< fees /lib/tx/fees.hoon +/< utxo-sel /lib/tx/select.hoon +/< txb /lib/tx/build.hoon +/< bcu /lib/bitcoin-utils.hoon +/< acct-ui /lib/wallet-account-ui.hoon +=, wt +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%stay %& [/ %'data.wallet_account']] + [%over %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %| /addresses [~ ~] [~ ~] empty-dir:loader] + [%fall %| /proc [~ ~] [~ ~] empty-dir:loader] + [%stay %& [/proc %'scan.json']] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /main.sig: handle pokes — dispatches to process files + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%account /main: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + ~& ["%account main.sig poke" name.p.sage] + ?+ name.p.sage $ + %json + =/ jon=json !<(json q.sage) + ?. ?=([%o *] jon) $ + =/ act=@t (~(dug jo:json-utils jon) /action so:dejs:format '') + ~& ["%account main.sig action" act] + ?+ act $ + %'derive-next' + =/ chain=@t + (~(dug jo:json-utils jon) /chain so:dejs:format 'receiving') + ;< acct-seen=seen:nexus bind:m + (peek:io (cord-to-road:tarball './data.wallet_account') ~) + ?. ?=(%& -.acct-seen) $ + ?. ?=([%file *] p.acct-seen) $ + =/ acct=(unit account-data) + (mole |.(!<(account-data q.sage.p.acct-seen))) + ?~ acct $ + =/ is-change=? =(chain 'change') + =/ chain-tag=?(%recv %chng) ?:(is-change %chng %recv) + :: read existing mop for this chain + ;< mop=addr-mop bind:m (read-mop "." active-network.u.acct chain-tag) + =/ next-idx=@ud + =/ top=(unit [idx=@ud address-data]) + (pry:((on @ud address-data) gth) mop) + ?~ top 0 + +(idx.u.top) + =/ new-addr=(unit @t) + %: derive-addr + xprv.u.acct + script-type.u.acct + active-network.u.acct + ?:(is-change 1 0) + next-idx + == + ?~ new-addr $ + :: put address into mop and write + =/ dat=address-data [u.new-addr %.n ~ ~ ~] + =/ updated=addr-mop + (put:((on @ud address-data) gth) mop next-idx dat) + ;< ~ bind:m (write-mop "." active-network.u.acct chain-tag updated) + :: auto-refresh the newly derived address + =/ net=@ta ;;(@ta active-network.u.acct) + =/ proc-name=@t + (crip "refresh-{(trip net)}-{(trip chain-tag)}-{(scow %ud next-idx)}.json") + =/ proc-road=road:tarball + (cord-to-road:tarball (crip "./proc/{(trip proc-name)}")) + =/ proc-json=json + %- pairs:enjs:format + :~ ['network' s+net] + ['chain' s+chain-tag] + ['index' (numb:enjs:format next-idx)] + == + ;< ~ bind:m + (make:io proc-road |+[%.n [[/ %json] !>(proc-json)] ~]) + $ + :: + %'delete-address' + =/ chain=@t + (~(dug jo:json-utils jon) /chain so:dejs:format 'recv') + =/ idx=@ud + (~(dug jo:json-utils jon) /index ni:dejs:format 0) + =/ chain-tag=?(%recv %chng) + ?:(?=(%recv ;;(?(%recv %chng) (slav %tas chain))) %recv %chng) + ;< acct-seen=seen:nexus bind:m + (peek:io (cord-to-road:tarball './data.wallet_account') ~) + ?. ?=(%& -.acct-seen) $ + ?. ?=([%file *] p.acct-seen) $ + =/ acct=(unit account-data) + (mole |.(!<(account-data q.sage.p.acct-seen))) + ?~ acct $ + ;< mop=addr-mop bind:m (read-mop "." active-network.u.acct chain-tag) + =/ updated=addr-mop + +:(del:((on @ud address-data) gth) mop idx) + ;< ~ bind:m (write-mop "." active-network.u.acct chain-tag updated) + $ + :: + %'set-network' + =/ net=@t + (~(dug jo:json-utils jon) /network so:dejs:format '') + =/ new-network=?(%main %testnet3 %testnet4 %signet %regtest) + ;;(?(%main %testnet3 %testnet4 %signet %regtest) (slav %tas net)) + ;< acct-seen=seen:nexus bind:m + (peek:io (cord-to-road:tarball './data.wallet_account') ~) + ?. ?=(%& -.acct-seen) $ + ?. ?=([%file *] p.acct-seen) $ + =/ acct=(unit account-data) + (mole |.(!<(account-data q.sage.p.acct-seen))) + ?~ acct $ + :: ensure address dir exists for the new network + ;< ~ bind:m (ensure-net-dir new-network) + =/ updated=account-data u.acct(active-network new-network) + ;< ~ bind:m + (over:io (cord-to-road:tarball './data.wallet_account') [[/wallet %account] !>(updated)]) + $ + :: + %'full-scan' + =/ proc-json=json + %- pairs:enjs:format + :~ ['phase' s+'recv'] + ['idx' (numb:enjs:format 0)] + ['gap' (numb:enjs:format 0)] + == + ;< ~ bind:m + (make:io (cord-to-road:tarball './proc/scan.json') |+[%.n [[/ %json] !>(proc-json)] ~]) + $ + :: + %'pause-scan' + :: fire-and-forget: don't wait for ack so main.sig stays responsive + =/ pause-json=json + (pairs:enjs:format ~[['action' s+'pause']]) + ;< ~ bind:m + (send-dart:io [%node /pause (cord-to-road:tarball './proc/scan.json') %poke [[/ %json] !>(pause-json)]]) + $ + :: + %'resume-scan' + =/ resume-json=json + (pairs:enjs:format ~[['action' s+'resume']]) + ;< ~ bind:m + (send-dart:io [%node /resume (cord-to-road:tarball './proc/scan.json') %poke [[/ %json] !>(resume-json)]]) + $ + :: + %'cancel-scan' + ;< * bind:m + (cull-soft:io (cord-to-road:tarball './proc/scan.json')) + ;< * bind:m + (cull-soft:io (cord-to-road:tarball './scan-paused.json')) + $ + :: + %'refresh' + =/ chain=@t + (~(dug jo:json-utils jon) /chain so:dejs:format 'recv') + =/ idx=@ud + (~(dug jo:json-utils jon) /index ni:dejs:format 0) + =/ chain-tag=?(%recv %chng) + ?:(?=(%recv ;;(?(%recv %chng) (slav %tas chain))) %recv %chng) + ;< acct-seen=seen:nexus bind:m + (peek:io (cord-to-road:tarball './data.wallet_account') ~) + ?. ?=([%& %file *] acct-seen) $ + =/ acct=(unit account-data) + (mole |.(!<(account-data q.sage.p.acct-seen))) + ?~ acct $ + :: spawn refresh process file + =/ net=@ta ;;(@ta active-network.u.acct) + =/ proc-name=@t + (crip "refresh-{(trip net)}-{(trip chain-tag)}-{(scow %ud idx)}.json") + =/ proc-road=road:tarball + (cord-to-road:tarball (crip "./proc/{(trip proc-name)}")) + =/ proc-json=json + %- pairs:enjs:format + :~ ['network' s+net] + ['chain' s+chain-tag] + ['index' (numb:enjs:format idx)] + == + ~& > [%refresh %spawning proc-name] + ;< ~ bind:m + (make:io proc-road |+[%.n [[/ %json] !>(proc-json)] ~]) + $ + :: + :: === Draft transaction actions === + :: + %'add-output' + =/ address=@t (so:dejs:format (need (~(get by p.jon) 'address'))) + =/ amount=@ud (ni:dejs:format (need (~(get by p.jon) 'amount'))) + ;< now=@da bind:m get-time:io + ;< existing=(unit transaction:drft) bind:m read-draft-file + =/ dr=transaction:drft + ?~ existing + [~ ~ ~ `%random now now] + u.existing(modified now) + =. outputs.dr (snoc outputs.dr [address amount]) + ;< ~ bind:m (write-draft dr) + $ + :: + %'delete-output' + =/ idx=@ud (ni:dejs:format (need (~(get by p.jon) 'index'))) + ;< existing=(unit transaction:drft) bind:m read-draft-file + ?~ existing $ + ;< now=@da bind:m get-time:io + =/ dr=transaction:drft u.existing(modified now) + =. outputs.dr (oust [idx 1] outputs.dr) + ;< ~ bind:m (write-draft dr) + $ + :: + %'clear-draft' + =/ draft-road=road:tarball + (cord-to-road:tarball './data.wallet_draft') + ;< exists=? bind:m (peek-exists:io draft-road) + ?. exists $ + ;< * bind:m (cull-soft:io draft-road) + $ + :: + %'set-change-config' + =/ fee-rate=@ud (ni:dejs:format (need (~(get by p.jon) 'fee-rate'))) + =/ chg-addr=@t (so:dejs:format (need (~(get by p.jon) 'change-address'))) + ;< now=@da bind:m get-time:io + ;< existing=(unit transaction:drft) bind:m read-draft-file + =/ dr=transaction:drft + ?~ existing + [~ ~ ~ `%random now now] + u.existing(modified now) + =. change.dr `[fee-rate chg-addr] + ;< ~ bind:m (write-draft dr) + $ + :: + %'clear-change-config' + ;< existing=(unit transaction:drft) bind:m read-draft-file + ?~ existing $ + ;< now=@da bind:m get-time:io + =. change.u.existing ~ + ;< ~ bind:m (write-draft u.existing(modified now)) + $ + :: + %'set-auto-select-mode' + =/ mode-text=@t (so:dejs:format (need (~(get by p.jon) 'mode'))) + =/ new-auto=(unit select-mode:drft) + ?: =('disabled' mode-text) ~ + ?: =('largest-first' mode-text) `%largest-first + `%random + ;< now=@da bind:m get-time:io + ;< existing=(unit transaction:drft) bind:m read-draft-file + =/ dr=transaction:drft + ?~ existing + [~ ~ ~ new-auto now now] + u.existing(auto-select new-auto, modified now) + ;< ~ bind:m (write-draft dr) + $ + :: + %'run-auto-select' + ;< acct-seen=seen:nexus bind:m + (peek:io (cord-to-road:tarball './data.wallet_account') ~) + ?. ?=(%& -.acct-seen) $ + ?. ?=([%file *] p.acct-seen) $ + =/ acct=(unit account-data) + (mole |.(!<(account-data q.sage.p.acct-seen))) + ?~ acct $ + ;< existing=(unit transaction:drft) bind:m read-draft-file + ?~ existing $ + =/ mode=select-mode:drft + (fall auto-select.u.existing %random) + =/ fee-rate=@ud + ?~ change.u.existing 1 + fee-rate.u.change.u.existing + :: collect UTXOs from all addresses + ;< recv=addr-mop bind:m (read-mop "." active-network.u.acct %recv) + ;< chng=addr-mop bind:m (read-mop "." active-network.u.acct %chng) + =/ utxos=(list utxo-input:drft) + (collect-utxo-inputs recv chng script-type.u.acct) + =/ total-outputs=@ud (sum-outputs:drft outputs.u.existing) + ?: =(0 total-outputs) + :: nothing to fund, clear inputs + ;< now=@da bind:m get-time:io + ;< ~ bind:m (write-draft u.existing(inputs ~, modified now)) + $ + :: calculate output vbytes for selection + =/ output-vbytes=@ud + %+ add + %+ roll outputs.u.existing + |= [out=output:drft sum=@ud] + (add sum (output-vbytes:fees (address-to-spend:drft address.out))) + ?~ change.u.existing 0 + (output-vbytes:fees (address-to-spend:drft address.u.change.u.existing)) + :: convert to selectables and run selection + =/ selectables=(list utxo-input:drft) + (turn utxos |=(u=utxo-input:drft [txid.u vout.u amount.u spend.u])) + ;< eny=@uvJ bind:m get-entropy:io + =/ sel-result=(unit (list utxo-input:drft)) + ?- mode + %largest-first (largest-first:utxo-sel selectables total-outputs output-vbytes fee-rate) + %random (random:utxo-sel selectables total-outputs output-vbytes fee-rate eny) + == + ?~ sel-result $ :: insufficient funds + =/ selected=(list utxo-input:drft) + %+ turn u.sel-result + |= s=utxo-input:drft + =/ match (skim utxos |=(u=utxo-input:drft &(=(txid.u txid.s) =(vout.u vout.s)))) + ?>(?=(^ match) i.match) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (write-draft u.existing(inputs selected, modified now)) + $ + :: + %'add-input' + =/ utxo-txid=@t (so:dejs:format (need (~(get by p.jon) 'utxo-txid'))) + =/ utxo-vout=@ud (ni:dejs:format (need (~(get by p.jon) 'utxo-vout'))) + =/ utxo-value=@ud (ni:dejs:format (need (~(get by p.jon) 'utxo-value'))) + =/ utxo-spend=@t (so:dejs:format (need (~(get by p.jon) 'utxo-spend'))) + ;< now=@da bind:m get-time:io + ;< existing=(unit transaction:drft) bind:m read-draft-file + =/ dr=transaction:drft + ?~ existing + [~ ~ ~ `%random now now] + u.existing(modified now) + =/ spend=spend:fees ;;(spend:fees (slav %tas utxo-spend)) + =/ new-input=utxo-input:drft [utxo-txid utxo-vout utxo-value spend] + =. inputs.dr (snoc inputs.dr new-input) + ;< ~ bind:m (write-draft dr) + $ + :: + %'remove-input' + =/ utxo-txid=@t (so:dejs:format (need (~(get by p.jon) 'utxo-txid'))) + =/ utxo-vout=@ud (ni:dejs:format (need (~(get by p.jon) 'utxo-vout'))) + ;< existing=(unit transaction:drft) bind:m read-draft-file + ?~ existing $ + ;< now=@da bind:m get-time:io + =. inputs.u.existing + %+ skip inputs.u.existing + |= input=utxo-input:drft + &(=(txid.input utxo-txid) =(vout.input utxo-vout)) + ;< ~ bind:m (write-draft u.existing(modified now)) + $ + :: + %'build-transaction' + ~& >> "=== BUILD AND BROADCAST TRANSACTION ===" + :: read account data + ;< acct-seen=seen:nexus bind:m + (peek:io (cord-to-road:tarball './data.wallet_account') ~) + ?. ?=(%& -.acct-seen) $ + ?. ?=([%file *] p.acct-seen) $ + =/ acct=(unit account-data) + (mole |.(!<(account-data q.sage.p.acct-seen))) + ?~ acct + ~& >>> "account data not found" + $ + :: read draft + ;< existing=(unit transaction:drft) bind:m read-draft-file + ?~ existing + ~& >>> "no draft transaction" + $ + ?: =(~ inputs.u.existing) + ~& >>> "no inputs in draft" + $ + ?: =(~ outputs.u.existing) + ~& >>> "no outputs in draft" + $ + :: load address mops to map UTXOs → derivation paths + ;< recv=addr-mop bind:m (read-mop "." active-network.u.acct %recv) + ;< chng=addr-mop bind:m (read-mop "." active-network.u.acct %chng) + :: build address → [chain index] lookup + =/ addr-lookup=(map @t [chain=@ud idx=@ud]) + =/ m=(map @t [chain=@ud idx=@ud]) ~ + =. m + =/ entries=(list [@ud address-data]) + (flop (tap:((on @ud address-data) gth) recv)) + |- + ?~ entries m + =. m (~(put by m) addr.i.entries [0 -.i.entries]) + $(entries t.entries) + =/ entries=(list [@ud address-data]) + (flop (tap:((on @ud address-data) gth) chng)) + |- + ?~ entries m + =. m (~(put by m) addr.i.entries [1 -.i.entries]) + $(entries t.entries) + :: build UTXO → address lookup from mops + =/ utxo-to-addr=(map [@t @ud] @t) + =/ m=(map [@t @ud] @t) ~ + =/ all=(list [@ud address-data]) + (weld (mop-to-list recv) (mop-to-list chng)) + |- + ?~ all m + =/ [idx=@ud a=address-data] i.all + =. m + |- + ?~ utxos.a m + =. m (~(put by m) [txid.i.utxos.a vout.i.utxos.a] addr.a) + $(utxos.a t.utxos.a) + $(all t.all) + :: create account-level bip32 wallet from xprv + =/ account-wallet (from-extended:bip32 (trip xprv.u.acct)) + :: build tx inputs + =/ tx-inputs=(list input:ap:tt:txb) + %+ turn inputs.u.existing + |= in=utxo-input:drft + :: find which address owns this UTXO + =/ owner=(unit @t) (~(get by utxo-to-addr) [txid.in vout.in]) + ?~ owner ~|("UTXO owner not found: {}:{}" !!) + =/ path=(unit [chain=@ud idx=@ud]) (~(get by addr-lookup) u.owner) + ?~ path ~|("address path not found: {}" !!) + :: derive signing key + =/ derived (derive:(derive:account-wallet chain.u.path) idx.u.path) + =/ privkey=@ux prv.derived + =/ pubkey=@ux (ser-p:derived pub.derived) + :: convert txid from hex string to little-endian @ux + =/ txid-display=@ux (rash txid.in hex) + =/ txid=@ux dat:(flip:byt:bcu [32 txid-display]) + :: convert spend type + =/ spend=spend-type:tt:txb + ?- spend.in + %p2pkh [%p2pkh ~] + %p2sh-p2wpkh [%p2sh-p2wpkh ~] + %p2wpkh [%p2wpkh ~] + %p2tr [%p2tr %key-path ~] + == + [privkey pubkey txid vout.in amount.in `@ud`0xffff.ffff spend] + :: build outputs (including change) + =/ tx-outputs=(list output:ap:tt:txb) + (incorporate-change:drft u.existing) + :: build and sign transaction + ~& >> "building tx: {<(lent tx-inputs)>} inputs, {<(lent tx-outputs)>} outputs" + =/ tx-hex=tape + (build-transaction:txb active-network.u.acct 2 tx-inputs tx-outputs 0) + =/ tx-hex-cord=@t (crip tx-hex) + ~& >> "tx hex: {}" + :: broadcast via mempool.space API + =/ broadcast-url=@t + ?- active-network.u.acct + %main 'https://mempool.space/api/tx' + %testnet3 'https://mempool.space/testnet/api/tx' + %testnet4 'https://mempool.space/testnet4/api/tx' + %signet 'https://mempool.space/signet/api/tx' + %regtest 'http://localhost:3000/tx' + == + =/ =request:http + :* %'POST' + broadcast-url + ~[['content-type' 'text/plain']] + `(as-octs:mimes:html tx-hex-cord) + == + ;< ~ bind:m (send-request:io request) + ;< =client-response:iris bind:m take-http + =/ broadcast-result=cord + ?+ client-response 'broadcast-failed' + [%finished * [~ [* [p=@ q=@]]]] + q.data.u.full-file.client-response + == + ~& >> "broadcast result: {}" + :: clear draft on success + =/ draft-road=road:tarball + (cord-to-road:tarball './data.wallet_draft') + ;< exists=? bind:m (peek-exists:io draft-road) + ?. exists $ + ;< * bind:m (cull-soft:io draft-road) + $ + == + == + :: + :: /proc/scan.json: full scan process (must be before generic @) + :: + [[%proc ~] %'scan.json'] + ;< ~ bind:m (rise-wait:io prod "%scan: failed") + =/ data-road=road:tarball (cord-to-road:tarball '../data.wallet_account') + ;< cur=view:nexus bind:m + (keep:io /acct (cord-to-road:tarball '../') ~) + =/ acct=(unit account-data) (extract-account cur) + ?~ acct (pure:m ~) + :: read existing progress to resume where we left off + ;< prev-state=vase bind:m get-state:io + =/ prev-json=json (fall (mole |.(!<(json prev-state))) *json) + =/ prev=scan-progress (parse-scan-progress prev-json) + =/ recv-start-idx=@ud + ?: =('recv' phase.prev) idx.prev + ?: =('chng' phase.prev) 0 :: recv already done + 0 + =/ recv-start-gap=@ud + ?: =('recv' phase.prev) gap.prev + 0 + =/ skip-recv=? =('chng' phase.prev) + :: scan receiving then change + ;< ~ bind:m + ?: skip-recv =/(m (fiber:fiber:nexus ,~) (pure:m ~)) + (scan-chain u.acct %receiving active-network.u.acct recv-start-idx recv-start-gap) + =/ chng-start-idx=@ud + ?: =('chng' phase.prev) idx.prev + 0 + =/ chng-start-gap=@ud + ?: =('chng' phase.prev) gap.prev + 0 + ;< ~ bind:m + (scan-chain u.acct %change active-network.u.acct chng-start-idx chng-start-gap) + (pure:m ~) + :: /proc/refresh-*.json: per-address refresh process + :: + [[%proc ~] @] + ;< ~ bind:m (rise-wait:io prod "%refresh: failed") + :: parse params from state + ;< state=vase bind:m get-state:io + =/ params=json (fall (mole |.(!<(json state))) *json) + ?. ?=([%o *] params) stay:m + ?. (~(has by p.params) 'network') stay:m + =/ network=?(%main %testnet3 %testnet4 %signet %regtest) + ;;(?(%main %testnet3 %testnet4 %signet %regtest) (slav %tas (~(dog jo:json-utils params) /network so:dejs:format))) + =/ chain-tag=?(%recv %chng) + ;;(?(%recv %chng) (slav %tas (~(dog jo:json-utils params) /chain so:dejs:format))) + =/ idx=@ud (~(dog jo:json-utils params) /index ni:dejs:format) + ~& > [%refresh %start network=network chain=chain-tag idx=idx] + :: set loading flag + ;< mop=addr-mop bind:m (read-mop ".." network chain-tag) + =/ dat=(unit address-data) + (get:((on @ud address-data) gth) mop idx) + ?~ dat ~&(>>> [%refresh %bail-no-addr-at-idx idx=idx] (pure:m ~)) + =/ loading-mop=addr-mop + (put:((on @ud address-data) gth) mop idx u.dat(loading %.y)) + ;< ~ bind:m (write-mop ".." network chain-tag loading-mop) + :: fetch address info + =/ base=tape (mempool-base-url network) + =/ addr-url=@t (crip (weld base (trip addr.u.dat))) + ~& > [%refresh %fetching addr=addr.u.dat] + ;< ~ bind:m (send-request:io [%'GET' addr-url ~[['Accept' 'application/json']] ~]) + ;< info-resp=client-response:iris bind:m take-http + ;< now=@da bind:m get-time:io + =/ info=(unit address-info) + (parse-info-response info-resp now) + :: fetch UTXOs + =/ utxo-url=@t (crip (weld (weld base (trip addr.u.dat)) "/utxo")) + ;< ~ bind:m (send-request:io [%'GET' utxo-url ~[['Accept' 'application/json']] ~]) + ;< utxo-resp=client-response:iris bind:m take-http + =/ new-utxos=(list utxo) (parse-utxo-response utxo-resp) + :: fetch txs + =/ txs-url=@t (crip (weld (weld base (trip addr.u.dat)) "/txs")) + ;< ~ bind:m (send-request:io [%'GET' txs-url ~[['Accept' 'application/json']] ~]) + ;< txs-resp=client-response:iris bind:m take-http + =/ new-txs=(list transaction) (parse-txs-response txs-resp) + :: clear loading, write results + =/ updated=address-data u.dat(loading %.n, info info, utxos new-utxos) + ;< fresh-mop=addr-mop bind:m (read-mop ".." network chain-tag) + =/ new-mop=addr-mop + (put:((on @ud address-data) gth) fresh-mop idx updated) + ;< ~ bind:m (write-mop ".." network chain-tag new-mop) + :: merge new txs into tx-map + ;< existing-txs=tx-map bind:m (read-txs ".." network) + =/ merged=tx-map + %- ~(gas by existing-txs) + (turn new-txs |=(=transaction [txid.transaction transaction])) + ;< ~ bind:m (write-txs ".." network merged) + ~& > [%refresh %done network=network chain=chain-tag idx=idx info=?=(^ info) utxos=(lent new-utxos) txs=(lent new-txs)] + (pure:m ~) + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under this account.' + ~ + 'Individual BIP44 account. Derives and displays Bitcoin addresses.' + == + %| + ?+ rail.p.mana 'File under this account.' + [~ %'data.wallet_account'] 'Account data: name, xprv, script-type, addresses. Mark: account.' + [~ %'main.sig'] 'Poke handler for account actions. Mark: sig.' + [~ %'ver.ud'] 'Schema version.' + == + == + -- +:: types and rendering +:: +|% +++ data-to-page + |= [gn=? ct=content:tarball] + ^- [? content:tarball] + ?: =(ct *content:tarball) [%.n ct] + ?: =([/ %boom] p.sage.ct) [%.n ct] + =/ acct=account-data !<(account-data q.sage.ct) + [%.n [~ [/ %html] !>((crip (en-xml:html (detail-page:acct-ui acct *addr-mop *addr-mop *@da %none ~ ~ ''))))]] +:: +++ extract-account + |= =view:nexus + ^- (unit account-data) + ?. ?=([%ball *] view) ~ + =/ =lump:tarball (fall fil.ball.view *lump:tarball) + =/ ct=(unit content:tarball) (~(get by contents.lump) 'data.wallet_account') + ?~ ct ~ + ?. ?=(%account name.p.sage.u.ct) ~ + (mole |.(!<(account-data q.sage.u.ct))) +:: +++ read-draft-file + =/ m (fiber:fiber:nexus ,(unit transaction:drft)) + ^- form:m + =/ draft-road=road:tarball + (cord-to-road:tarball './data.wallet_draft') + ;< exists=? bind:m (peek-exists:io draft-road) + ?. exists (pure:m ~) + ;< seen=seen:nexus bind:m (peek:io draft-road ~) + ?. ?=(%& -.seen) (pure:m ~) + ?. ?=([%file *] p.seen) (pure:m ~) + (pure:m (mole |.(!<(transaction:drft q.sage.p.seen)))) +:: +++ write-draft + |= dr=transaction:drft + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ road=road:tarball (cord-to-road:tarball './data.wallet_draft') + ;< exists=? bind:m (peek-exists:io road) + ?: exists + (over:io road [[/wallet %draft] !>(dr)]) + (make:io road |+[%.n [[/wallet %draft] !>(dr)] ~]) +:: +++ read-wallet-name + |= wallet-fp=@ux + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + =/ fp-hex=tape (hexn:http-utils wallet-fp) + =/ wal-road=road:tarball + (cord-to-road:tarball (crip "../../wallets/{fp-hex}.wallet_wallet/main.wallet_wallet")) + ;< exists=? bind:m (peek-exists:io wal-road) + ?. exists (pure:m '') + ;< seen=seen:nexus bind:m (peek:io wal-road ~) + ?. ?=(%& -.seen) (pure:m '') + ?. ?=([%file *] p.seen) (pure:m '') + =/ wal=(unit wallet-data) (mole |.(!<(wallet-data q.sage.p.seen))) + ?~ wal (pure:m '') + (pure:m name.u.wal) +:: +++ collect-utxo-inputs + |= [recv=addr-mop chng=addr-mop =script-type] + ^- (list utxo-input:drft) + =/ spend=spend:fees script-type + =/ all=(list [@ud address-data]) + (weld (mop-to-list recv) (mop-to-list chng)) + %- zing + %+ turn all + |= [idx=@ud a=address-data] + %+ turn utxos.a + |= u=utxo + ^- utxo-input:drft + [txid.u vout.u value.u spend] +:: ++$ scan-progress [phase=@t idx=@ud gap=@ud] +:: +++ parse-scan-progress + |= jon=json + ^- scan-progress + ?. ?=([%o *] jon) ['' 0 0] + =/ phase=(unit json) (~(get by p.jon) 'phase') + =/ idx-j=(unit json) (~(get by p.jon) 'idx') + =/ gap-j=(unit json) (~(get by p.jon) 'gap') + ?. &(?=([~ %s *] phase) ?=([~ %n *] idx-j) ?=([~ %n *] gap-j)) + ['' 0 0] + =/ idx=(unit @ud) (rush p.u.idx-j dem) + =/ gap=(unit @ud) (rush p.u.gap-j dem) + ?: |(?=(~ idx) ?=(~ gap)) ['' 0 0] + [p.u.phase u.idx u.gap] +:: +++ derive-addr + |= [xprv=@t =script-type network=?(%main %testnet3 %testnet4 %signet %regtest) chain=@ud index=@ud] + ^- (unit @t) + =/ acct-key (from-extended:bip32 (trip xprv)) + =/ chain-key (derive:acct-key chain) + =/ addr-key (derive:chain-key index) + =/ pubkey=@ public-key:addr-key + =/ bip-net (to-bip-network:wt network) + ?- script-type + %p2wpkh (encode-pubkey:bech32 bip-net [33 pubkey]) + %p2tr (encode-taproot:bech32 bip-net [32 (end [3 32] pubkey)]) + %p2pkh ~ + %p2sh-p2wpkh ~ + == +:: +:: +extract-mops: pull recv and chng addr-mops from a ball view +:: +++ extract-mops + |= [=view:nexus network=?(%main %testnet3 %testnet4 %signet %regtest)] + ^- [recv=addr-mop chng=addr-mop] + ?. ?=([%ball *] view) [*addr-mop *addr-mop] + =/ addrs-ball=(unit ball:tarball) (~(get by dir.ball.view) 'addresses') + ?~ addrs-ball [*addr-mop *addr-mop] + =/ net-ball=(unit ball:tarball) (~(get by dir.u.addrs-ball) ;;(@ta network)) + ?~ net-ball [*addr-mop *addr-mop] + ?~ fil.u.net-ball [*addr-mop *addr-mop] + =/ recv=addr-mop + =/ ct=(unit content:tarball) (~(get by contents.u.fil.u.net-ball) 'recv.wallet_addresses') + ?~ ct *addr-mop + (fall (mole |.(!<(addr-mop q.sage.u.ct))) *addr-mop) + =/ chng=addr-mop + =/ ct=(unit content:tarball) (~(get by contents.u.fil.u.net-ball) 'chng.wallet_addresses') + ?~ ct *addr-mop + (fall (mole |.(!<(addr-mop q.sage.u.ct))) *addr-mop) + [recv chng] +:: +addr-road: compute road to a chain's mop file +:: +++ addr-road + |= [base=tape network=?(%main %testnet3 %testnet4 %signet %regtest) chain=?(%recv %chng)] + ^- road:tarball + (cord-to-road:tarball (crip "{base}/addresses/{(trip ;;(@ta network))}/{(trip chain)}.wallet_addresses")) +:: +read-mop: fiber that reads a single mop file +:: +++ read-mop + |= [base=tape network=?(%main %testnet3 %testnet4 %signet %regtest) chain=?(%recv %chng)] + =/ m (fiber:fiber:nexus ,addr-mop) + ^- form:m + =/ road=road:tarball (addr-road base network chain) + ~& >> [%read-mop %road road network=network chain=chain] + ;< exists=? bind:m (peek-exists:io road) + ~& >> [%read-mop %exists exists] + ?. exists ~&(>>> [%read-mop %no-file-returning-empty] (pure:m *addr-mop)) + ;< seen=seen:nexus bind:m (peek:io road ~) + ~& >> [%read-mop %seen-type ?=([%& %file *] seen)] + ?. ?=([%& %file *] seen) ~&(>>> [%read-mop %not-file-node] (pure:m *addr-mop)) + =/ result=addr-mop (fall (mole |.(!<(addr-mop q.sage.p.seen))) *addr-mop) + ~& >> [%read-mop %ok size=(lent (tap:((on @ud address-data) gth) result))] + (pure:m result) +:: +write-mop: fiber that writes a mop file (creates dir structure if needed) +:: +++ write-mop + |= [base=tape network=?(%main %testnet3 %testnet4 %signet %regtest) chain=?(%recv %chng) mop=addr-mop] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ road=road:tarball (addr-road base network chain) + ~& >> [%write-mop %road road network=network chain=chain] + ;< exists=? bind:m (peek-exists:io road) + ~& >> [%write-mop %exists exists] + ?: exists + ~& >> [%write-mop %overwriting] + (over:io road [[/wallet %addresses] !>(mop)]) + ~& >> [%write-mop %creating] + (make:io road |+[%.n [[/wallet %addresses] !>(mop)] ~]) +:: +txs-road: compute road to the tx-map file +:: +++ txs-road + |= [base=tape network=?(%main %testnet3 %testnet4 %signet %regtest)] + ^- road:tarball + (cord-to-road:tarball (crip "{base}/addresses/{(trip ;;(@ta network))}/txs.wallet_txs")) +:: +read-txs: fiber that reads the tx-map file +:: +++ read-txs + |= [base=tape network=?(%main %testnet3 %testnet4 %signet %regtest)] + =/ m (fiber:fiber:nexus ,tx-map) + ^- form:m + =/ road=road:tarball (txs-road base network) + ;< exists=? bind:m (peek-exists:io road) + ?. exists (pure:m *tx-map) + ;< seen=seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m *tx-map) + (pure:m (fall (mole |.(!<(tx-map q.sage.p.seen))) *tx-map)) +:: +write-txs: fiber that writes the tx-map file +:: +++ write-txs + |= [base=tape network=?(%main %testnet3 %testnet4 %signet %regtest) txs=tx-map] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ road=road:tarball (txs-road base network) + ;< exists=? bind:m (peek-exists:io road) + ?: exists + (over:io road [[/wallet %txs] !>(txs)]) + (make:io road |+[%.n [[/wallet %txs] !>(txs)] ~]) +:: +ensure-net-dir: create network dir + empty mop files if needed +:: +++ ensure-net-dir + |= network=?(%main %testnet3 %testnet4 %signet %regtest) + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ recv-road=road:tarball (addr-road "." network %recv) + ;< exists=? bind:m (peek-exists:io recv-road) + ?: exists (pure:m ~) + ;< ~ bind:m (write-mop "." network %recv *addr-mop) + ;< ~ bind:m (write-mop "." network %chng *addr-mop) + (write-txs "." network *tx-map) +:: +mop-to-list: tap mop to indexed list (ascending by index) +:: +++ mop-to-list + |= mop=addr-mop + ^- (list [@ud address-data]) + (flop (tap:((on @ud address-data) gth) mop)) +:: +:: scan event: either an HTTP response or a pause/resume poke +:: ++$ scan-event + $% [%http =client-response:iris] + [%pause ~] + [%resume ~] + == +:: +++ take-scan-event + =/ m (fiber:fiber:nexus ,scan-event) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error:io dart.u.in)] + [~ %poke * *] + ?: =([/ %http-response] p.sage.u.in) + =/ resp=client-response:iris !<(client-response:iris q.sage.u.in) + ?: ?=(%cancel -.resp) + [%fail leaf+"http-request-cancelled" ~] + [%done %http resp] + =/ res=(unit json) (mole |.(!<(json q.sage.u.in))) + ?~ res [%skip ~] + ?. ?=([%o *] u.res) [%skip ~] + =/ act=(unit json) (~(get by p.u.res) 'action') + ?: =(`s+'pause' act) [%done %pause ~] + ?: =(`s+'resume' act) [%done %resume ~] + [%skip ~] + == +:: +++ mempool-base-url + |= network=?(%main %testnet3 %testnet4 %signet %regtest) + ^- tape + ?- network + %main "https://mempool.space/api/address/" + %testnet3 "https://mempool.space/testnet/api/address/" + %testnet4 "https://mempool.space/testnet4/api/address/" + %signet "https://mempool.space/signet/api/address/" + %regtest "http://localhost:3000/address/" + == +:: +scan-fetch: like fetch-address-info but pausable during HTTP wait +:: +++ scan-fetch + |= [address=@t network=?(%main %testnet3 %testnet4 %signet %regtest)] + =/ m (fiber:fiber:nexus ,(unit address-info)) + ^- form:m + =/ url=@t + (crip (weld (mempool-base-url network) (trip address))) + =/ =request:http + [%'GET' url ~[['Accept' 'application/json']] ~] + ;< ~ bind:m (send-request:io request) + |- + ;< evt=scan-event bind:m take-scan-event + ?- -.evt + %pause ;< ~ bind:m pause-loop $ + %resume $ + %http (parse-address-response client-response.evt) + == +:: +parse-address-response: extract address-info from HTTP response +:: +++ parse-address-response + |= =client-response:iris + =/ m (fiber:fiber:nexus ,(unit address-info)) + ^- form:m + ?. ?=(%finished -.client-response) + (pure:m ~) + ?~ full-file.client-response + (pure:m ~) + =/ body=@t q.data.u.full-file.client-response + =/ parsed=(each json tang) (mule |.((need (de:json:html body)))) + ?: ?=(%| -.parsed) (pure:m ~) + =/ data=json p.parsed + =/ tx-count=(unit @ud) + (mole |.((ni:dejs:format (~(got jo:json-utils data) /'chain_stats'/'tx_count')))) + =/ funded=(unit @ud) + (mole |.((ni:dejs:format (~(got jo:json-utils data) /'chain_stats'/'funded_txo_sum')))) + =/ spent=(unit @ud) + (mole |.((ni:dejs:format (~(got jo:json-utils data) /'chain_stats'/'spent_txo_sum')))) + ?~ tx-count (pure:m ~) + ?~ funded (pure:m ~) + ?~ spent (pure:m ~) + ;< now=@da bind:m get-time:io + (pure:m `[u.tx-count u.funded u.spent now]) +:: +take-http: simple HTTP response handler for non-cancellable requests +:: +++ take-http + =/ m (fiber:fiber:nexus ,client-response:iris) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %poke * *] + ?. =([/ %http-response] p.sage.u.in) [%skip ~] + =/ resp=client-response:iris !<(client-response:iris q.sage.u.in) + [%done resp] + == +:: +parse-info-response: extract address-info from HTTP response (non-fiber) +:: +++ parse-info-response + |= [=client-response:iris now=@da] + ^- (unit address-info) + ?. ?=(%finished -.client-response) ~ + ?~ full-file.client-response ~ + =/ body=@t q.data.u.full-file.client-response + =/ parsed=(each json tang) (mule |.((need (de:json:html body)))) + ?: ?=(%| -.parsed) ~ + =/ data=json p.parsed + =/ tc=(unit @ud) (mole |.((ni:dejs:format (~(got jo:json-utils data) /'chain_stats'/'tx_count')))) + =/ funded=(unit @ud) (mole |.((ni:dejs:format (~(got jo:json-utils data) /'chain_stats'/'funded_txo_sum')))) + =/ spent=(unit @ud) (mole |.((ni:dejs:format (~(got jo:json-utils data) /'chain_stats'/'spent_txo_sum')))) + ?: |(?=(~ tc) ?=(~ funded) ?=(~ spent)) ~ + `[u.tc u.funded u.spent now] +:: +parse-utxo-response: extract UTXOs from HTTP response +:: +++ parse-utxo-response + |= =client-response:iris + ^- (list utxo) + ?. ?=(%finished -.client-response) ~ + ?~ full-file.client-response ~ + =/ body=@t q.data.u.full-file.client-response + =/ parsed=(each json tang) (mule |.((need (de:json:html body)))) + ?: ?=(%| -.parsed) ~ + ?. ?=(%a -.p.parsed) ~ + %+ murn p.p.parsed + |= j=json + ^- (unit utxo) + =/ txid=(unit @t) + (mole |.((so:dejs:format (~(got jo:json-utils j) /txid)))) + =/ vout=(unit @ud) + (mole |.((ni:dejs:format (~(got jo:json-utils j) /vout)))) + =/ value=(unit @ud) + (mole |.((ni:dejs:format (~(got jo:json-utils j) /value)))) + ?~ txid ~ + ?~ vout ~ + ?~ value ~ + =/ status=tx-status + =/ sj=(unit json) (mole |.((~(got jo:json-utils j) /status))) + ?~ sj [%unconfirmed ~] + (parse-tx-status u.sj) + `[u.txid u.vout u.value status] +:: +++ parse-tx-status + |= sj=json + ^- tx-status + =/ conf=(unit ?) + (mole |.((bo:dejs:format (~(got jo:json-utils sj) /confirmed)))) + ?~ conf [%unconfirmed ~] + ?. u.conf [%unconfirmed ~] + =/ bh=(unit @t) + (mole |.((so:dejs:format (~(got jo:json-utils sj) /'block_hash')))) + =/ ht=(unit @ud) + (mole |.((ni:dejs:format (~(got jo:json-utils sj) /'block_height')))) + ?~ bh [%unconfirmed ~] + ?~ ht [%unconfirmed ~] + [%confirmed u.bh u.ht] +:: +parse-txs-response: extract transactions from HTTP response +:: +++ parse-txs-response + |= =client-response:iris + ^- (list transaction) + ?. ?=(%finished -.client-response) ~ + ?~ full-file.client-response ~ + =/ body=@t q.data.u.full-file.client-response + =/ parsed=(each json tang) (mule |.((need (de:json:html body)))) + ?: ?=(%| -.parsed) ~ + ?. ?=(%a -.p.parsed) ~ + %+ murn p.p.parsed + |= tj=json + ^- (unit transaction) + =/ txid=(unit @t) + (mole |.((so:dejs:format (~(got jo:json-utils tj) /txid)))) + ?~ txid ~ + =/ vin-json=(unit json) (mole |.((~(got jo:json-utils tj) /vin))) + =/ inputs=(list tx-input) + ?~ vin-json ~ + ?. ?=(%a -.u.vin-json) ~ + %+ murn p.u.vin-json + |= ij=json + ^- (unit tx-input) + =/ st=(unit @t) (mole |.((so:dejs:format (~(got jo:json-utils ij) /txid)))) + =/ sv=(unit @ud) (mole |.((ni:dejs:format (~(got jo:json-utils ij) /vout)))) + ?~ st ~ + ?~ sv ~ + =/ prevout=(unit tx-output) + =/ pj=(unit json) (mole |.((~(got jo:json-utils ij) /prevout))) + ?~ pj ~ + =/ pv=(unit @ud) (mole |.((ni:dejs:format (~(got jo:json-utils u.pj) /value)))) + =/ pa=(unit @t) (mole |.((so:dejs:format (~(got jo:json-utils u.pj) /'scriptpubkey_address')))) + ?~ pv ~ + ?~ pa ~ + `[u.pv u.pa] + `[u.st u.sv prevout] + =/ vout-json=(unit json) (mole |.((~(got jo:json-utils tj) /vout))) + =/ outputs=(list tx-output) + ?~ vout-json ~ + ?. ?=(%a -.u.vout-json) ~ + %+ murn p.u.vout-json + |= oj=json + ^- (unit tx-output) + =/ v=(unit @ud) (mole |.((ni:dejs:format (~(got jo:json-utils oj) /value)))) + =/ a=(unit @t) (mole |.((so:dejs:format (~(got jo:json-utils oj) /'scriptpubkey_address')))) + ?~ v ~ + ?~ a ~ + `[u.v u.a] + =/ sj=(unit json) (mole |.((~(got jo:json-utils tj) /status))) + =/ status=tx-status + ?~ sj [%unconfirmed ~] + (parse-tx-status u.sj) + =/ fee=(unit @ud) (mole |.((ni:dejs:format (~(got jo:json-utils tj) /fee)))) + =/ size=(unit @ud) (mole |.((ni:dejs:format (~(got jo:json-utils tj) /size)))) + `[u.txid inputs outputs status fee size] +:: +:: +pause-loop: block until resumed, managing marker file +:: +++ take-pause-event + =/ m (fiber:fiber:nexus ,?) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error:io dart.u.in)] + [~ %poke * *] + =/ res=(unit json) (mole |.(!<(json q.sage.u.in))) + ?~ res [%skip ~] + ?. ?=([%o *] u.res) [%skip ~] + =/ act=(unit json) (~(get by p.u.res) 'action') + ?: =(`s+'resume' act) [%done %.y] + [%skip ~] + == +:: +++ pause-loop + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ marker-json=json (pairs:enjs:format ~[['paused' b+%.y]]) + ;< ~ bind:m + (make:io (cord-to-road:tarball '../scan-paused.json') |+[%.n [[/ %json] !>(marker-json)] ~]) + |- + ;< resumed=? bind:m take-pause-event + ?. resumed $ + ;< * bind:m (cull-soft:io (cord-to-road:tarball '../scan-paused.json')) + (pure:m ~) +:: +++ scan-chain + |= $: acct=account-data + chain=?(%receiving %change) + network=?(%main %testnet3 %testnet4 %signet %regtest) + start-idx=@ud + start-gap=@ud + == + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ is-change=? =(chain %change) + =/ chain-tag=?(%recv %chng) ?:(is-change %chng %recv) + =/ gap-limit=@ud 20 + =/ scan-idx=@ud start-idx + =/ gap=@ud start-gap + |- + ?: (gte gap gap-limit) + (pure:m ~) + =/ new-addr=(unit @t) + %: derive-addr + xprv.acct + script-type.acct + network + ?:(is-change 1 0) + scan-idx + == + ?~ new-addr + (pure:m ~) + :: update scan progress in proc file + =/ phase-tape=@t ?:(is-change 'chng' 'recv') + =/ scan-prog=json + %- pairs:enjs:format + :~ ['phase' s+phase-tape] + ['idx' (numb:enjs:format scan-idx)] + ['gap' (numb:enjs:format gap)] + == + ;< ~ bind:m (replace:io !>(scan-prog)) + :: write address with loading flag before fetch + =/ loading-dat=address-data [u.new-addr %.y ~ ~ ~] + ;< pre-mop=addr-mop bind:m (read-mop ".." network chain-tag) + =/ pre-updated=addr-mop + (put:((on @ud address-data) gth) pre-mop scan-idx loading-dat) + ;< ~ bind:m (write-mop ".." network chain-tag pre-updated) + ;< ~ bind:m (sleep:io `@dr`(div ~s1 1.000)) + :: fetch address info + ;< new-info=(unit address-info) bind:m + (scan-fetch u.new-addr network) + :: clear loading, write results + =/ addr-dat=address-data [u.new-addr %.n ~ new-info ~] + ;< mop=addr-mop bind:m (read-mop ".." network chain-tag) + =/ updated=addr-mop + (put:((on @ud address-data) gth) mop scan-idx addr-dat) + ;< ~ bind:m (write-mop ".." network chain-tag updated) + :: check gap + ?~ new-info + $(scan-idx +(scan-idx), gap +(gap)) + ?: =(0 tx-count.u.new-info) + $(scan-idx +(scan-idx), gap +(gap)) + $(scan-idx +(scan-idx), gap 0) +-- diff --git a/desk/gub/nex/wallet/app.hoon b/desk/gub/nex/wallet/app.hoon new file mode 100644 index 0000000..1599a1e --- /dev/null +++ b/desk/gub/nex/wallet/app.hoon @@ -0,0 +1,1937 @@ +:: wallet nexus: bitcoin SPV wallet management UI +:: +/< feather /lib/feather.hoon +/< fi /lib/feather-icons.hoon +/< wt /lib/wallet-types.hoon +/< bip39 /lib/bip39.hoon +/< bip32 /lib/bip32.hoon +/< seed-phrases /lib/seed-phrases.hoon +/< bech32 /lib/bech32.hoon +/< acct-ui /lib/wallet-account-ui.hoon +/< drft /lib/tx/draft.hoon +=, wt +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + =/ [wal-dir=@ta wal-ball=ball:tarball acct-dir=@ta acct-ball=ball:tarball] + (make-dev-wallet 'Dev Wallet' [%t 'abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about'] %testnet4) + =/ [fau-wal-dir=@ta fau-wal-ball=ball:tarball fau-acct-dir=@ta fau-acct-ball=ball:tarball] + (make-dev-wallet 'Fauceted Wallet' [%t 'injury idea term fox crop movie type critic hello inquiry lottery agree'] %testnet3) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%over %& [/ %'main.sig'] %.n [~ [/ %sig] !>(~)]] + [%over %& [/ %'page.html'] %.n [~ [/ %html] !>((crip (en-xml:html (wallet-page "" ~))))]] + [%fall %| /wallets [~ ~] [~ ~] empty-dir:loader] + [%fall %| /accounts [~ ~] [~ ~] empty-dir:loader] + [%fall %| /ui/sse [~ ~] [~ ~] empty-dir:loader] + [%over %& [/ui/sse %'wallets.html'] %.n [~ [/ %html] !>((crip (en-xml:html (wallet-list-html ~))))]] + [%fall %& [/ui %'http.sig'] %.n [~ [/ %sig] !>(~)]] + [%fall %| /ui/requests [~ ~] [~ ~] empty-dir:loader] + [%fall %| (snoc /wallets wal-dir) [~ ~] [~ ~] wal-ball] + [%fall %| (snoc /accounts acct-dir) [~ ~] [~ ~] acct-ball] + [%fall %| (snoc /wallets fau-wal-dir) [~ ~] [~ ~] fau-wal-ball] + [%fall %| (snoc /accounts fau-acct-dir) [~ ~] [~ ~] fau-acct-ball] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /main.sig: receive pokes for wallet actions + :: + [~ %'main.sig'] + ;< ~ bind:m (rise-wait:io prod "%wallet /main: failed") + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + ?+ name.p.sage + ~& > [%wallet-main %unknown-mark name.p.sage] + $ + %json + =/ jon=json !<(json q.sage) + ?. ?=([%o *] jon) $ + =/ act=@t (~(dug jo:json-utils jon) /action so:dejs:format '') + ?+ act + ~& > [%wallet-main %unknown-action act] + $ + %'add-wallet' + =/ wallet-name=@t + (~(dog jo:json-utils jon) /wallet-name so:dejs:format) + =/ seed-phrase=@t + (~(dog jo:json-utils jon) /seed-phrase so:dejs:format) + =/ seed-format=@t + (~(dug jo:json-utils jon) /seed-format so:dejs:format 'bip39') + :: validate + =/ sd=(unit seed) + ?: =(seed-format 'q') + =/ parsed=(unit @q) (slaw %q seed-phrase) + ?~ parsed + ~& > [%wallet-main %invalid-q-format] + ~ + `[%q u.parsed] + ?. (validate-seed-phrase:seed-phrases seed-phrase) + ~& > [%wallet-main %invalid-seed-phrase] + ~ + `[%t seed-phrase] + ?~ sd $ + =/ pubkey=@ux (seed-to-pubkey u.sd) + =/ wallet-key=@ta (crip (hexn:http-utils pubkey)) + =/ wal=wallet-data [wallet-name u.sd pubkey ~] + =/ wallet-dir=@ta (cat 3 wallet-key '.wallet_wallet') + =/ wal-lump=lump:tarball + :+ ~ `[/wallet %wallet] + (~(put by *(map @ta content:tarball)) %'main.wallet_wallet' [~ [/wallet %wallet] !>(wal)]) + =/ wal-ball=ball:tarball [`wal-lump ~] + ;< ~ bind:m + (make:io [%| 0 %| (snoc /wallets wallet-dir)] &+[*sand:nexus *gain:nexus wal-ball]) + $ + %'add-wallet-from-entropy' + =/ wallet-name=@t + (~(dog jo:json-utils jon) /wallet-name so:dejs:format) + ;< eny=@uvJ bind:m get-entropy:io + =/ seed-phrase=cord + (gen-seed:seed-phrases eny %128) + =/ pubkey=@ux (seed-to-pubkey [%t seed-phrase]) + =/ wallet-key=@ta (crip (hexn:http-utils pubkey)) + =/ wal=wallet-data [wallet-name [%t seed-phrase] pubkey ~] + =/ wallet-dir=@ta (cat 3 wallet-key '.wallet_wallet') + =/ wal-lump=lump:tarball + :+ ~ `[/wallet %wallet] + (~(put by *(map @ta content:tarball)) %'main.wallet_wallet' [~ [/wallet %wallet] !>(wal)]) + =/ wal-ball=ball:tarball [`wal-lump ~] + ;< ~ bind:m + (make:io [%| 0 %| (snoc /wallets wallet-dir)] &+[*sand:nexus *gain:nexus wal-ball]) + $ + %'remove-wallet' + =/ pubkey=@t + (~(dog jo:json-utils jon) /pubkey so:dejs:format) + =/ wallet-key=@ta (crip (trip pubkey)) + =/ wallet-dir=@ta (cat 3 wallet-key '.wallet_wallet') + ;< ~ bind:m + (cull:io [%| 0 %| (snoc /wallets wallet-dir)]) + $ + == + == + :: /page.html: render wallet list, re-render on /wallets/ changes + :: + [~ %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%wallet /page: failed") + ;< here=rail:tarball bind:m get-here-abs:io + =/ nexus-root=tape (spud path.here) + ;< init=view:nexus bind:m + (keep:io /wallets (cord-to-road:tarball './wallets/') ~) + =/ wals=(list wallet-data) (view-to-wallets init) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (wallet-page nexus-root wals))))) + |- + ;< upd=view:nexus bind:m (take-news:io /wallets) + =/ wals=(list wallet-data) (view-to-wallets upd) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (wallet-page nexus-root wals))))) + $ + :: /ui/sse/wallets.html: wallet list HTML fragment for SSE + :: + [[%ui %sse ~] %'wallets.html'] + ;< ~ bind:m (rise-wait:io prod "%wallet /ui/sse/wallets: failed") + ;< init=view:nexus bind:m + (keep:io /wallets (cord-to-road:tarball '../../wallets/') ~) + =/ wals=(list wallet-data) (view-to-wallets init) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (wallet-list-html wals))))) + |- + ;< upd=view:nexus bind:m (take-news:io /wallets) + =/ wals=(list wallet-data) (view-to-wallets upd) + ;< ~ bind:m (replace:io !>((crip (en-xml:html (wallet-list-html wals))))) + $ + :: /ui/http.sig: bind /groundwire/wallet/ and dispatch requests + :: + [[%ui ~] %'http.sig'] + ;< ~ bind:m (rise-wait:io prod "%wallet /ui/http: failed") + =/ prefix=path /groundwire/wallet + ;< ~ bind:m (bind-http:io [~ prefix]) + (http-dispatch:io %wallet) + :: /ui/requests/*: individual HTTP request handlers + :: + [[%ui %requests ~] @] + ;< ~ bind:m (rise-wait:io prod "%wallet /ui/requests: failed") + =/ eyre-id=@ta name.rail + ;< [src=@p req=inbound-request:eyre] bind:m (get-state-as:io ,[src=@p inbound-request:eyre]) + ;< our=@p bind:m get-our:io + ?. =(src our) + ;< ~ bind:m (send-simple:srv eyre-id [[403 ~] `(as-octs:mimes:html 'Forbidden')]) + (pure:m ~) + ;< here=rail:tarball bind:m get-here-abs:io + =/ nexus-root=tape (spud (snip (snip path.here))) + =/ site=path site:(parse-url:http-utils url.request.req) + =/ prefix=path /groundwire/wallet + =/ suffix=path + %+ skip (slag (lent prefix) site) + |=(s=@ta =('' s)) + :: route: / → wallet list page + ?~ suffix + ;< wals=(list wallet-data) bind:m load-wallets + ;< ~ bind:m (send-html eyre-id (wallet-page nexus-root wals)) + (pure:m ~) + :: route: /w// → wallet detail page + ?: ?& ?=([%w @ *] suffix) + =(~ t.t.suffix) + == + =/ wal-key=@ta (cat 3 i.t.suffix '.wallet_wallet') + ;< ~ bind:m + (serve-page-html eyre-id (crip "../../wallets/{(trip wal-key)}/page.html")) + (pure:m ~) + :: route: /a// → account page + ?: ?& ?=([%a @ *] suffix) + =(~ t.t.suffix) + == + =/ acct-key=@ta (cat 3 i.t.suffix '.wallet_account') + ;< acct=(unit account-data) bind:m (load-account acct-key) + ?~ acct + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Account not found')]) + (pure:m ~) + ;< recv=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %recv) + ;< chng=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %chng) + ;< now=@da bind:m get-time:io + ;< [scan=?(%active %paused %none) progress=(unit scan-progress:acct-ui)] bind:m + (load-scan-state acct-key) + ;< wal-name=@t bind:m (load-wallet-name wallet.u.acct) + ;< ~ bind:m (send-html eyre-id (detail-page:acct-ui u.acct recv chng now scan progress ~ wal-name)) + (pure:m ~) + :: route: /a//send → send page + ?: ?=([%a @ %send ~] suffix) + =/ acct-key=@ta (cat 3 i.t.suffix '.wallet_account') + ;< acct=(unit account-data) bind:m (load-account acct-key) + ?~ acct + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Account not found')]) + (pure:m ~) + ;< recv=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %recv) + ;< chng=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %chng) + ;< now=@da bind:m get-time:io + ;< dr=(unit transaction:drft) bind:m (load-draft acct-key) + ;< wal-name=@t bind:m (load-wallet-name wallet.u.acct) + ;< ~ bind:m (send-html eyre-id (send-page:acct-ui u.acct recv chng dr now wal-name)) + (pure:m ~) + :: route: /a//send/stream → SSE for send page + ?: ?=([%a @ %send %stream ~] suffix) + =/ acct-key=@ta (cat 3 i.t.suffix '.wallet_account') + (handle-send-stream eyre-id req acct-key) + :: route: /a//stream → SSE for live updates + ?: ?=([%a @ %stream ~] suffix) + =/ acct-key=@ta (cat 3 i.t.suffix '.wallet_account') + (handle-account-stream eyre-id req acct-key) + :: route: /a//addr///stream → SSE for address + ?: ?=([%a @ %addr @ @ %stream ~] suffix) + =/ acct-key=@ta (cat 3 i.t.suffix '.wallet_account') + =/ chain=@ta i.t.t.t.suffix + =/ idx-ta=@ta i.t.t.t.t.suffix + =/ chain-tag=?(%recv %chng) ?:(?=(%recv chain) %recv %chng) + =/ idx=@ud (fall (slaw %ud idx-ta) 0) + (handle-addr-stream eyre-id req acct-key chain-tag idx i.t.suffix) + :: route: /a//addr// → address detail + ?: ?=([%a @ %addr @ @ ~] suffix) + =/ acct-key=@ta (cat 3 i.t.suffix '.wallet_account') + =/ chain=@ta i.t.t.t.suffix + =/ idx-ta=@ta i.t.t.t.t.suffix + ;< acct=(unit account-data) bind:m (load-account acct-key) + ?~ acct + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Account not found')]) + (pure:m ~) + =/ chain-tag=?(%recv %chng) ?:(?=(%recv chain) %recv %chng) + =/ idx=@ud (fall (slaw %ud idx-ta) 0) + ;< mop=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct chain-tag) + =/ dat=(unit address-data) + (get:((on @ud address-data) gth) mop idx) + ?~ dat + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Address not found')]) + (pure:m ~) + =/ akh=tape (trip i.t.suffix) + ;< txs=tx-map bind:m (load-txs acct-key active-network.u.acct) + ;< ~ bind:m (send-html eyre-id (addr-detail-page nexus-root idx u.dat chain-tag u.acct akh txs)) + (pure:m ~) + :: route: /a//tx/ → transaction detail + ?: ?=([%a @ %tx @ ~] suffix) + =/ acct-key=@ta (cat 3 i.t.suffix '.wallet_account') + =/ txid=@ta i.t.t.t.suffix + ;< acct=(unit account-data) bind:m (load-account acct-key) + ?~ acct + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Account not found')]) + (pure:m ~) + ;< txs=tx-map bind:m (load-txs acct-key active-network.u.acct) + =/ tx=(unit transaction) (~(get by txs) txid) + ?~ tx + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Transaction not found')]) + (pure:m ~) + ;< recv=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %recv) + ;< chng=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %chng) + =/ hit=(unit [idx=@ud chain=?(%recv %chng) address-data]) + (find-tx-addr u.tx recv chng) + =/ akh=tape (trip i.t.suffix) + =/ [hit-idx=@ud hit-chain=?(%recv %chng) dat=address-data] + (fall hit [0 %recv *address-data]) + ;< ~ bind:m (send-html eyre-id (tx-detail-page u.tx hit-idx hit-chain dat u.acct akh txs)) + (pure:m ~) + :: unknown route + ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Not found')]) + (pure:m ~) + == + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the wallet nexus.' + ~ + %- crip + """ + WALLET NEXUS — Bitcoin SPV wallet management + + Manages Bitcoin wallets, watch-only accounts, and signing + accounts. View at /grubbery/api/file/wallet.wallet_app/page.html + + FILES: + main.sig Poke handler for wallet actions. + page.html Server-rendered wallet page (manx). + ver.ud Schema version. + + DIRECTORIES: + wallets/ Per-wallet nexuses. Each keyed by pubkey fingerprint. + ui/sse/ SSE streams. Sanitized data for live UI updates. + """ + [%wallets ~] + 'Per-wallet nexuses. Each directory keyed by pubkey fingerprint.' + [%accounts ~] + 'Per-account nexuses. Each directory keyed by account pubkey. Sibling to wallets.' + [%ui %sse ~] + 'SSE streams. Sanitized wallet data for live UI updates via keep endpoint.' + == + %| + ?+ rail.p.mana 'File under the wallet nexus.' + [~ %'main.sig'] 'Poke handler for wallet actions. Mark: sig.' + [~ %'page.html'] 'Server-rendered wallet page. Mark: manx.' + [~ %'ver.ud'] 'Schema version.' + [[%ui %sse ~] %'wallets.html'] 'Wallet list HTML fragment for SSE. Mark: manx.' + == + == + -- +:: wallet helpers +:: +|% +:: HTTP response helpers — road from /ui/requests/* to /ui/http.sig +:: +++ srv ~(. http-res:io [%| 1 %& ~ %'http.sig']) +:: +++ send-html + |= [eyre-id=@ta page=manx] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ bod=@t (crip (en-xml:html page)) + =/ =octs (as-octs:mimes:html bod) + (send-simple:srv eyre-id [[200 ~[['content-type' 'text/html']]] `octs]) +:: +serve-page-html: peek a page.html manx from the ball and serve it +:: +++ serve-page-html + |= [eyre-id=@ta road-cord=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ =road:tarball (cord-to-road:tarball road-cord) + ;< =seen:nexus bind:m (peek:io road `[/ %mime]) + ?. ?=([%& %file *] seen) + (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Page not found')]) + =/ =mime !<(mime q.sage.p.seen) + (send-simple:srv eyre-id (mime-response:http-utils mime)) +:: +load-account: peek account data by key +:: +++ load-account + |= acct-key=@ta + =/ m (fiber:fiber:nexus ,(unit account-data)) + ^- form:m + =/ =road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/data.wallet_account")) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m ~) + (pure:m (mole |.(!<(account-data q.sage.p.seen)))) +:: +++ load-wallets + =/ m (fiber:fiber:nexus ,(list wallet-data)) + ^- form:m + ;< =seen:nexus bind:m (peek:io (cord-to-road:tarball '../../wallets/') ~) + ?. ?=(%& -.seen) (pure:m ~) + (pure:m (view-to-wallets p.seen)) +:: +:: +load-addr-mop: read an addr-mop file from an account ball +:: +++ load-addr-mop + |= [acct-key=@ta network=?(%main %testnet3 %testnet4 %signet %regtest) chain=?(%recv %chng)] + =/ m (fiber:fiber:nexus ,addr-mop) + ^- form:m + =/ =road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/addresses/{(trip ;;(@ta network))}/{(trip chain)}.wallet_addresses")) + ;< exists=? bind:m (peek-exists:io road) + ?. exists (pure:m *addr-mop) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m *addr-mop) + (pure:m (fall (mole |.(!<(addr-mop q.sage.p.seen))) *addr-mop)) +:: +load-txs: load tx-map from an account's network directory (app-level) +:: +++ load-txs + |= [acct-key=@ta network=?(%main %testnet3 %testnet4 %signet %regtest)] + =/ m (fiber:fiber:nexus ,tx-map) + ^- form:m + =/ =road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/addresses/{(trip ;;(@ta network))}/txs.wallet_txs")) + ;< exists=? bind:m (peek-exists:io road) + ?. exists (pure:m *tx-map) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m *tx-map) + (pure:m (fall (mole |.(!<(tx-map q.sage.p.seen))) *tx-map)) +:: +load-scan-state: peek scan process file and paused marker +:: +++ load-scan-state + |= acct-key=@ta + =/ m (fiber:fiber:nexus ,[?(%active %paused %none) (unit scan-progress:acct-ui)]) + ^- form:m + =/ scan-road=road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/proc/scan.json")) + ;< scan-exists=? bind:m (peek-exists:io scan-road) + ?. scan-exists (pure:m [%none ~]) + ;< =seen:nexus bind:m (peek:io scan-road ~) + ?. ?=([%& %file *] seen) (pure:m [%none ~]) + =/ jon=json (fall (mole |.(!<(json q.sage.p.seen))) *json) + =/ progress=scan-progress:acct-ui + ?. ?=([%o *] jon) ['' 0 0] + =/ phase=(unit json) (~(get by p.jon) 'phase') + =/ idx-j=(unit json) (~(get by p.jon) 'idx') + =/ gap-j=(unit json) (~(get by p.jon) 'gap') + ?. &(?=([~ %s *] phase) ?=([~ %n *] idx-j) ?=([~ %n *] gap-j)) + ['' 0 0] + =/ idx=(unit @ud) (rush p.u.idx-j dem) + =/ gap=(unit @ud) (rush p.u.gap-j dem) + ?: |(?=(~ idx) ?=(~ gap)) ['' 0 0] + [p.u.phase u.idx u.gap] + :: check for paused marker + =/ pause-road=road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/scan-paused.json")) + ;< paused=? bind:m (peek-exists:io pause-road) + (pure:m [?:(paused %paused %active) `progress]) +:: +load-wallet-name: peek wallet name from wallet data +:: +++ load-wallet-name + |= wallet-fp=@ux + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + =/ fp-hex=tape (hexn:http-utils wallet-fp) + =/ =road:tarball + (cord-to-road:tarball (crip "../../wallets/{fp-hex}.wallet_wallet/main.wallet_wallet")) + ;< exists=? bind:m (peek-exists:io road) + ?. exists (pure:m '') + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m '') + =/ wal=(unit wallet-data) (mole |.(!<(wallet-data q.sage.p.seen))) + ?~ wal (pure:m '') + (pure:m name.u.wal) +:: +load-draft: peek draft transaction from account +:: +++ load-draft + |= acct-key=@ta + =/ m (fiber:fiber:nexus ,(unit transaction:drft)) + ^- form:m + =/ =road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/data.wallet_draft")) + ;< exists=? bind:m (peek-exists:io road) + ?. exists (pure:m ~) + ;< =seen:nexus bind:m (peek:io road ~) + ?. ?=([%& %file *] seen) (pure:m ~) + (pure:m (mole |.(!<(transaction:drft q.sage.p.seen)))) +:: +send-sse-fragment: send a single SSE fragment targeting a DOM element +:: +++ send-sse-fragment + |= [eyre-id=@ta target=@t content=manx] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ =json + (pairs:enjs:format ~[['target' s+target] ['html' s+(crip (en-xml:html content))]]) + =/ =sse-event:http-utils [~ `'fragment' [(en:json:html json)]~] + =/ data=octs (sse-encode:http-utils ~[sse-event]) + (send-data:srv eyre-id `data) +:: +send-sse-prepend: prepend a row to a DOM element if rowId doesn't exist +:: +++ send-sse-prepend + |= [eyre-id=@ta target=@t row-id=@t content=manx] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ =json + %- pairs:enjs:format + :~ ['target' s+target] + ['html' s+(crip (en-xml:html content))] + ['action' s+'prepend'] + ['rowId' s+row-id] + == + =/ =sse-event:http-utils [~ `'fragment' [(en:json:html json)]~] + =/ data=octs (sse-encode:http-utils ~[sse-event]) + (send-data:srv eyre-id `data) +:: +send-sse-update: update an existing row by ID (outerHTML replace) +:: +++ send-sse-update + |= [eyre-id=@ta target=@t row-id=@t content=manx] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ =json + %- pairs:enjs:format + :~ ['target' s+target] + ['html' s+(crip (en-xml:html content))] + ['action' s+'update'] + ['rowId' s+row-id] + == + =/ =sse-event:http-utils [~ `'fragment' [(en:json:html json)]~] + =/ data=octs (sse-encode:http-utils ~[sse-event]) + (send-data:srv eyre-id `data) +:: +send-addr-rows: prepend new rows, update existing ones in-place +:: +++ send-addr-rows + |= [eyre-id=@ta acct=account-data chain-tag=?(%recv %chng) mop=addr-mop now=@da] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ entries=(list [@ud address-data]) (mop-to-list:acct-ui mop) + =/ chain=tape ?:(?=(%recv chain-tag) "receiving" "change") + =/ acct-key (from-extended:bip32 (trip xprv.acct)) + =/ key-hex=tape (hexn:http-utils public-key:acct-key) + =/ list-id=@t (crip "addr-list-{(trip chain-tag)}") + |- + ?~ entries (pure:m ~) + =/ [idx=@ud a=address-data] i.entries + =/ row-id=@t (crip "addr-{(trip chain-tag)}-{(scow %ud idx)}") + =/ row=manx (address-row:acct-ui idx a now chain chain-tag active-network.acct key-hex) + ;< ~ bind:m (send-sse-prepend eyre-id list-id row-id row) + ;< ~ bind:m (send-sse-update eyre-id list-id row-id row) + $(entries t.entries) +:: +handle-account-stream: SSE stream for account detail page +:: +++ handle-account-stream + |= [eyre-id=@ta req=inbound-request:eyre acct-key=@ta] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. (is-sse-request:http-utils req) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'SSE only')]) + (pure:m ~) + ;< ~ bind:m (send-header:srv eyre-id sse-header:http-utils) + :: watch the account ball + =/ acct-road=road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/")) + ;< * bind:m (keep:io /acct-stream acct-road ~) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + |- + ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /acct-stream) + ?- -.nw + %wake + ;< ~ bind:m (send-data:srv eyre-id `sse-keep-alive:http-utils) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + $ + %news + :: reload all account data and re-render fragments + ;< acct=(unit account-data) bind:m (load-account acct-key) + ?~ acct $ + ;< recv=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %recv) + ;< chng=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %chng) + ;< now=@da bind:m get-time:io + ;< [scan=?(%active %paused %none) progress=(unit scan-progress:acct-ui)] bind:m + (load-scan-state acct-key) + :: send granular fragments to preserve scroll position + :: update receive modal address + =/ next-addr=(unit @t) (next-unused-addr:acct-ui recv) + ;< ~ bind:m + ?~ next-addr (pure:m ~) + =/ =sse-event:http-utils [~ `'receive-addr' [u.next-addr]~] + =/ data=octs (sse-encode:http-utils ~[sse-event]) + (send-data:srv eyre-id `data) + ;< ~ bind:m + (send-sse-fragment eyre-id 'account-summary-wrap' (account-summary-ui:acct-ui recv chng)) + ;< ~ bind:m + (send-sse-fragment eyre-id 'scan-status-wrap' (scan-status-ui:acct-ui scan progress)) + ;< ~ bind:m (send-addr-rows eyre-id u.acct %recv recv now) + ;< ~ bind:m (send-addr-rows eyre-id u.acct %chng chng now) + ;< ~ bind:m + (send-sse-fragment eyre-id 'receiving-derive' (derive-button:acct-ui "receiving" recv)) + ;< ~ bind:m + (send-sse-fragment eyre-id 'change-derive' (derive-button:acct-ui "change" chng)) + =/ recv-count=@ud (lent (mop-to-list:acct-ui recv)) + =/ chng-count=@ud (lent (mop-to-list:acct-ui chng)) + ;< ~ bind:m + (send-sse-fragment eyre-id 'tab-bar' (tab-bar:acct-ui recv-count chng-count)) + ;< ~ bind:m + (send-sse-fragment eyre-id 'network-badge-wrap' (network-badge-ui:acct-ui active-network.u.acct q.coin-type.u.acct)) + $ + == +:: +handle-send-stream: SSE stream for send page +:: +++ handle-send-stream + |= [eyre-id=@ta req=inbound-request:eyre acct-key=@ta] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. (is-sse-request:http-utils req) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'SSE only')]) + (pure:m ~) + ;< ~ bind:m (send-header:srv eyre-id sse-header:http-utils) + =/ acct-road=road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/")) + ;< * bind:m (keep:io /send-stream acct-road ~) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + |- + ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /send-stream) + ?- -.nw + %wake + ;< ~ bind:m (send-data:srv eyre-id `sse-keep-alive:http-utils) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + $ + %news + ;< acct=(unit account-data) bind:m (load-account acct-key) + ?~ acct $ + ;< recv=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %recv) + ;< chng=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct %chng) + ;< dr=(unit transaction:drft) bind:m (load-draft acct-key) + =/ fi=fee-calc:acct-ui (compute-fee-info:acct-ui dr) + =/ utxos=(list [addr=@t u=utxo chain=?(%recv %chng) idx=@ud]) + %+ weld + ^- (list [addr=@t u=utxo chain=?(%recv %chng) idx=@ud]) + %- zing + %+ turn (mop-to-list:acct-ui recv) + |= [idx=@ud a=address-data] + (turn utxos.a |=(u=utxo [addr.a u %recv idx])) + ^- (list [addr=@t u=utxo chain=?(%recv %chng) idx=@ud]) + %- zing + %+ turn (mop-to-list:acct-ui chng) + |= [idx=@ud a=address-data] + (turn utxos.a |=(u=utxo [addr.a u %chng idx])) + =/ total-balance=@ud + %+ roll utxos + |= [[addr=@t u=utxo chain=?(%recv %chng) idx=@ud] sum=@ud] + (add sum value.u) + =/ next-chg=(unit @t) (next-unused-change-addr:acct-ui chng) + =/ auto-mode=(unit select-mode:drft) + ?~ dr ~ + auto-select.u.dr + =/ has-auto=? ?=(^ auto-mode) + =/ is-random=? =(auto-mode `%random) + =/ is-largest=? =(auto-mode `%largest-first) + =/ spend=spend:fees:acct-ui script-type.u.acct + =/ utxo-rows=(list manx) + ?~ utxos + :~ ;div.p3.b1.br2.f3: No UTXOs available + == + %+ turn utxos + |= [addr=@t u=utxo chain=?(%recv %chng) idx=@ud] + =/ is-sel=? + ?~ dr %.n + %+ lien inputs.u.dr + |=(i=utxo-input:drft &(=(txid.i txid.u) =(vout.i vout.u))) + (utxo-row-ui:acct-ui txid.u vout.u value.u addr spend is-sel) + :: send balance + ;< ~ bind:m + =/ bal=manx ;span: Available: {(scow %ud total-balance)} sats + (send-sse-fragment eyre-id 'send-balance' bal) + :: send fee info + ;< ~ bind:m + (send-sse-fragment eyre-id 'send-fee-info' (fee-info-ui:acct-ui fi)) + :: send auto-select + ;< ~ bind:m + (send-sse-fragment eyre-id 'send-auto-select' (auto-select-ui:acct-ui has-auto is-random is-largest (add total-outputs.fi est-fee.fi))) + :: send utxo list + ;< ~ bind:m + =/ utxo-manx=manx [[%div [%class "fc"]~] utxo-rows] + (send-sse-fragment eyre-id 'utxo-list' utxo-manx) + :: send change section + ;< ~ bind:m + (send-sse-fragment eyre-id 'send-change-section' (change-section-ui:acct-ui has-change-config.fi fee-rate.fi est-fee.fi est-vbytes.fi change-result.fi next-chg)) + :: send output list + ;< ~ bind:m + (send-sse-fragment eyre-id 'output-list' (output-list-ui:acct-ui dr)) + $ + == +:: +handle-addr-stream: SSE stream for address detail page +:: +++ handle-addr-stream + |= [eyre-id=@ta req=inbound-request:eyre acct-key=@ta chain-tag=?(%recv %chng) idx=@ud akh-ta=@ta] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. (is-sse-request:http-utils req) + ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'SSE only')]) + (pure:m ~) + ;< ~ bind:m (send-header:srv eyre-id sse-header:http-utils) + :: watch the account ball + =/ acct-road=road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/")) + ;< * bind:m (keep:io /addr-stream acct-road ~) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + |- + ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /addr-stream) + ?- -.nw + %wake + ;< ~ bind:m (send-data:srv eyre-id `sse-keep-alive:http-utils) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + $ + %news + :: reload address data and re-render live content + ;< acct=(unit account-data) bind:m (load-account acct-key) + ?~ acct $ + ;< mop=addr-mop bind:m (load-addr-mop acct-key active-network.u.acct chain-tag) + =/ dat=(unit address-data) + (get:((on @ud address-data) gth) mop idx) + ?~ dat $ + =/ akh=tape (trip akh-ta) + =/ net=@ta ;;(@ta active-network.u.acct) + =/ proc-name=@t + (crip "refresh-{(trip net)}-{(trip chain-tag)}-{(scow %ud idx)}.json") + =/ proc-road=road:tarball + (cord-to-road:tarball (crip "../../accounts/{(trip acct-key)}/proc/{(trip proc-name)}")) + ;< loading=? bind:m (peek-exists:io proc-road) + ;< txs=tx-map bind:m (load-txs acct-key active-network.u.acct) + =/ addr-txs=(list transaction) + %- sort-txs + %+ murn ~(val by txs) + |= =transaction + =/ in-out=? + ?| %+ lien outputs.transaction + |=(=tx-output =(address.tx-output addr.u.dat)) + :: + %+ lien inputs.transaction + |= =tx-input + ?~ prevout.tx-input %.n + =(address.u.prevout.tx-input addr.u.dat) + == + ?:(in-out `transaction ~) + ;< ~ bind:m + (send-sse-fragment eyre-id 'live-content' (addr-live-content u.dat loading akh addr-txs)) + $ + == +:: +find-tx-addr: given a tx, find first address in mops that it touches +:: +++ find-tx-addr + |= [tx=transaction recv=addr-mop chng=addr-mop] + ^- (unit [idx=@ud chain=?(%recv %chng) address-data]) + =/ all-addrs=(set @t) + %- ~(gas in *(set @t)) + %+ weld + (turn outputs.tx |=(=tx-output address.tx-output)) + %+ murn inputs.tx + |=(=tx-input ?~(prevout.tx-input ~ `address.u.prevout.tx-input)) + =/ recv-list=(list [@ud address-data]) + (flop (tap:((on @ud address-data) gth) recv)) + =/ res=(unit [idx=@ud chain=?(%recv %chng) address-data]) + |- + ?~ recv-list ~ + =/ [idx=@ud a=address-data] i.recv-list + ?: (~(has in all-addrs) addr.a) `[idx %recv a] + $(recv-list t.recv-list) + ?^ res res + =/ chng-list=(list [@ud address-data]) + (flop (tap:((on @ud address-data) gth) chng)) + |- + ?~ chng-list ~ + =/ [idx=@ud a=address-data] i.chng-list + ?: (~(has in all-addrs) addr.a) `[idx %chng a] + $(chng-list t.chng-list) +:: +++ format-sats + |= n=@ud + ^- tape + =/ digits=tape (a-co:co n) + =/ len=@ud (lent digits) + ?: (lte len 3) digits + =/ rev=tape (flop digits) + =/ out=tape ~ + =/ i=@ud 0 + |- + ?~ rev out + =? out &((gth i 0) =(0 (mod i 3))) + [',' out] + $(rev t.rev, out [i.rev out], i +(i)) +:: +++ sort-txs + |= txs=(list transaction) + ^- (list transaction) + %+ sort txs + |= [a=transaction b=transaction] + :: unconfirmed first, then by descending block height + ?: ?=(%unconfirmed -.tx-status.a) + ?: ?=(%unconfirmed -.tx-status.b) %.y + %.y + ?: ?=(%unconfirmed -.tx-status.b) %.n + (gth block-height.tx-status.a block-height.tx-status.b) +:: +++ truncate-txid + |= txid=@t + ^- tape + =/ full=tape (trip txid) + =/ len=@ud (lent full) + ?: (lte len 16) full + :(weld (scag 8 full) "..." (slag (sub len 8) full)) +:: +++ mk-acct-base + |= [nexus-root=tape akh=tape] + ^- tape + "{(slag 1 nexus-root)}/accounts/{akh}.wallet_account" +:: +addr-detail-page: render address detail from inline data +:: +++ addr-detail-page + |= [nexus-root=tape idx=@ud dat=address-data chain-tag=?(%recv %chng) acct=account-data akh=tape txs=tx-map] + ^- manx + =/ network active-network.acct + =/ acct-base=tape (mk-acct-base nexus-root akh) + =/ addr-text=tape (trip addr.dat) + =/ chain-label=tape + ?:(?=(%recv chain-tag) "Receiving" "Change") + =/ network-label=tape + ?-(network %main "Mainnet", %testnet3 "Testnet3", %testnet4 "Testnet4", %signet "Signet", %regtest "Regtest") + =/ addr-txs=(list transaction) + %- sort-txs + %+ murn ~(val by txs) + |= =transaction + =/ in-out=? + ?| %+ lien outputs.transaction + |=(=tx-output =(address.tx-output addr.dat)) + :: + %+ lien inputs.transaction + |= =tx-input + ?~ prevout.tx-input %.n + =(address.u.prevout.tx-input addr.dat) + == + ?:(in-out `transaction ~) + ;html + ;head + ;title: Address {(scag 12 addr-text)}... + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;+ feather:feather + ;style + ;+ ;/ addr-style-text + == + == + ;body + ;div(style "min-width: 650px; height: 100%;") + ;div.fc.g3.p5.ma.mw-page(style "height: 100%; overflow: hidden;") + :: back link + ;div(style "flex-shrink: 0;") + ;a.hover.pointer(id "back-link", href "#", onclick "goBack(); return false;", style "color: var(--f3); text-decoration: none;"): ← Back to Account + == + :: header + ;div.p4.b1.br2(style "flex-shrink: 0;") + ;div(style "display: flex; align-items: center; gap: 8px; margin-bottom: 8px;") + ;span.s-2.bold.f3(style "background: var(--b2); padding: 2px 8px; border-radius: 4px;"): {chain-label} #{(a-co:co idx)} + ;span.s-2.f3(style "background: var(--b2); padding: 2px 8px; border-radius: 4px;"): {network-label} + == + ;div(style "display: flex; align-items: center; gap: 8px;") + ;code.mono.s-1(style "word-break: break-all; flex: 1;"): {addr-text} + ;button.p1.b0.br1.hover.pointer + =data-addr addr-text + =onclick "copyToClipboard(this.dataset.addr)" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 28px; height: 28px; justify-content: center; outline: none; flex-shrink: 0;" + ;div(style "width: 14px; height: 14px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'copy') + == + == + == + == + :: live content + ;+ (addr-live-content dat %.n akh addr-txs) + == + == + ;script + ;+ ;/ (addr-script-text acct-base (trip chain-tag) (scow %ud idx)) + == + == + == +:: +addr-live-content: balance, UTXOs, and tx list for address page +:: +++ addr-live-content + |= [dat=address-data is-loading=? akh=tape addr-txs=(list transaction)] + ^- manx + =/ balance=@ud + ?~ info.dat 0 + (sub funded.u.info.dat spent.u.info.dat) + ;div#live-content.fc.g3(style "flex: 1; min-height: 0; overflow: hidden;") + :: balance stats + ;div.p4.b2.br2(style "flex-shrink: 0; overflow: hidden;") + ;h2.s0.bold.mb2: Balance + ;div(style "display: grid; grid-template-columns: repeat(4, 1fr); gap: 16px;") + ;div + ;div.f3.s-2: Balance + ;div.s0.bold.mono: {(format-sats balance)} sats + == + ;div + ;div.f3.s-2: Funded + ;div.s-1.mono: {?~(info.dat "—" (format-sats funded.u.info.dat))} + == + ;div + ;div.f3.s-2: Spent + ;div.s-1.mono: {?~(info.dat "—" (format-sats spent.u.info.dat))} + == + ;div + ;div.f3.s-2: Transactions + ;div.s-1.mono: {?~(info.dat "—" (a-co:co tx-count.u.info.dat))} + == + == + ;div(style "display: flex; justify-content: space-between; align-items: center; margin-top: 12px;") + ;span.f3.s-2: {?~(info.dat "Never checked" "Last: {(scow %da last-check.u.info.dat)}")} + ;+ ?: is-loading + ;div(style "display: flex; gap: 4px;") + ;div.p2.b1.br1(style "background: rgba(100, 150, 255, 0.2); border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; height: 32px; padding: 0 8px; justify-content: center;") + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center; animation: spin 1s linear infinite;") + ;+ (make:fi 'loader') + == + == + == + ;button.p2.b1.br1.hover.pointer + =onclick "doRefresh()" + =style "border: 1px solid var(--b3); color: var(--f2); display: flex; align-items: center; gap: 6px; outline: none;" + ;div(style "width: 14px; height: 14px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'refresh-cw') + == + ;span.s-2: Refresh + == + == + == + :: error banner + ;+ ?~ last-error.dat + ;span; + ;div.p3.br1.fc.g1(style "background: rgba(255, 80, 80, 0.15); border: 1px solid rgba(255, 80, 80, 0.3); color: #ff5050;") + ;span.s-1.bold: Refresh failed + ;* %+ turn u.last-error.dat + |= =tank + ;pre.s-2.mono(style "margin: 0; white-space: pre-wrap; word-break: break-all;") + ; {~(ram re tank)} + == + == + :: UTXOs + ;div.p4.b1.br2(style "flex: 1; min-height: 0; display: flex; flex-direction: column;") + ;h2.s0.bold.mb2(style "flex-shrink: 0;"): UTXOs ({(a-co:co (lent utxos.dat))}) + ;+ ?: =(~ utxos.dat) + ;div.p3.b2.br2.tc.f3.s-1: No unspent outputs + ;div.fc.g1(style "flex: 1; min-height: 0; overflow-y: auto;") + ;* =/ akh akh + %+ turn utxos.dat + |= =utxo + ^- manx + ;div.p3.b2.br2(style "display: flex; justify-content: space-between; align-items: center;") + ;div(style "min-width: 0; flex: 1;") + ;div(style "display: flex; align-items: center; gap: 6px;") + ;a.mono.s-2.f2(href "/groundwire/wallet/a/{akh}/tx/{(trip txid.utxo)}", style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--f2); text-decoration: none;"): {(truncate-txid txid.utxo)}:{(a-co:co vout.utxo)} + ;+ ?- -.tx-status.utxo + %confirmed + ;span.s-2(style "color: #10b981; font-size: 11px;"): ✓ + %unconfirmed + ;span.s-2(style "color: #f59e0b; font-size: 11px;"): ○ + == + == + == + ;span.mono.s-1.bold: {(format-sats value.utxo)} sats + == + == + == + :: transactions + ;div.p4.b1.br2(style "flex: 1; min-height: 0; display: flex; flex-direction: column;") + ;h2.s0.bold.mb2(style "flex-shrink: 0;"): Transactions ({(a-co:co (lent addr-txs))}) + ;+ ?: =(~ addr-txs) + ;div.p3.b2.br2.tc.f3.s-1: No transactions + ;div.fc.g1(style "flex: 1; min-height: 0; overflow-y: auto;") + ;* =/ akh akh + %+ turn addr-txs + |= =transaction + ^- manx + =/ is-incoming=? + %+ lien outputs.transaction + |=(=tx-output =(address.tx-output addr.dat)) + =/ is-outgoing=? + %+ lien inputs.transaction + |= =tx-input + ?~ prevout.tx-input %.n + =(address.u.prevout.tx-input addr.dat) + =/ direction=tape + ?: &(is-incoming is-outgoing) "↕ Self" + ?:(is-incoming "↓ Recv" "↑ Send") + =/ dir-color=tape + ?: &(is-incoming is-outgoing) "#888" + ?:(is-incoming "#10b981" "#ef4444") + =/ recv-amt=@ud + %+ roll outputs.transaction + |= [=tx-output total=@ud] + ?. =(address.tx-output addr.dat) total + (add total value.tx-output) + =/ send-amt=@ud + %+ roll inputs.transaction + |= [=tx-input total=@ud] + ?~ prevout.tx-input total + ?. =(address.u.prevout.tx-input addr.dat) total + (add total value.u.prevout.tx-input) + =/ net-text=tape + ?: (gte recv-amt send-amt) + "+{(format-sats (sub recv-amt send-amt))}" + "-{(format-sats (sub send-amt recv-amt))}" + ;div.p3.b2.br2(style "display: flex; justify-content: space-between; align-items: center;") + ;div(style "min-width: 0; flex: 1;") + ;div(style "display: flex; align-items: center; gap: 8px;") + ;span.s-1.bold(style "color: {dir-color};"): {direction} + ;a.mono.s-2.f2(href "/groundwire/wallet/a/{akh}/tx/{(trip txid.transaction)}", style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--f2); text-decoration: none; display: flex; align-items: center; gap: 4px;") + ;span(style "overflow: hidden; text-overflow: ellipsis;"): {(truncate-txid txid.transaction)} + ;div(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center; flex-shrink: 0;") + ;+ (make:fi 'external-link') + == + == + ;+ ?- -.tx-status.transaction + %confirmed + ;span.s-2(style "color: #10b981; font-size: 11px;"): ✓ block {(a-co:co block-height.tx-status.transaction)} + %unconfirmed + ;span.s-2(style "color: #f59e0b; font-size: 11px;"): ○ pending + == + == + ;div.f3.s-2(style "display: flex; gap: 12px; margin-top: 2px;") + ;span: {(a-co:co (lent inputs.transaction))} in → {(a-co:co (lent outputs.transaction))} out + ;+ ?~ fee.transaction ;span; + ;span: fee: {(format-sats u.fee.transaction)} + == + == + ;span.mono.s-1.bold(style "color: {dir-color}; white-space: nowrap;"): {net-text} sats + == + == + == + == +:: +tx-detail-page: render transaction detail from inline data +:: +++ tx-detail-page + |= [tx=transaction addr-idx=@ud addr-chain=?(%recv %chng) dat=address-data acct=account-data akh=tape txs=tx-map] + ^- manx + =/ network active-network.acct + =/ txid-text=tape (trip txid.tx) + =/ confirmed=? ?=(%confirmed -.tx-status.tx) + =/ block-height=(unit @ud) + ?:(?=(%unconfirmed -.tx-status.tx) ~ `block-height.tx-status.tx) + =/ fee=@ud (fall fee.tx 0) + =/ size=@ud (fall size.tx 0) + =/ network-label=tape + ?-(network %main "Mainnet", %testnet3 "Testnet3", %testnet4 "Testnet4", %signet "Signet", %regtest "Regtest") + =/ status-color=tape ?:(confirmed "rgba(50, 200, 100, 0.3)" "rgba(255, 180, 50, 0.3)") + =/ status-text=tape ?:(confirmed "Confirmed" "Unconfirmed") + =/ indexed-outputs=(list [vout-index=@ud output=tx-output]) + =/ idx=@ud 0 + =/ outs=(list tx-output) outputs.tx + |- ^- (list [vout-index=@ud output=tx-output]) + ?~ outs ~ + [[idx i.outs] $(outs t.outs, idx +(idx))] + =/ utxo-set=(set [@t @ud]) + %- ~(gas in *(set [@t @ud])) + (turn utxos.dat |=(=utxo [txid.utxo vout.utxo])) + =/ known-txids=(set @t) ~(key by txs) + ;html + ;head + ;title: Transaction: {(scag 12 txid-text)}... + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;+ feather:feather + ;style + ;+ ;/ addr-style-text + == + == + ;body + ;div(style "min-width: 650px; height: 100%;") + ;div.fc.g3.p5.ma.mw-page(style "height: 100%; overflow-y: auto;") + ;script + ;+ ;/ tx-script-text + == + ;a.hover.pointer(id "back-link", href "#", onclick "goBackToAddr(); return false;", style "color: var(--f3); text-decoration: none;"): ← Back to Address + ;div(style "display: flex; align-items: center; gap: 8px;") + ;h1: Transaction Details + ;span.s-2.f3(style "background: var(--b2); padding: 2px 8px; border-radius: 4px;"): {network-label} + == + :: Transaction ID + ;div.p3.b2.br2 + ;div.f3.s-2.pb2: Transaction ID + ;div(style "display: flex; align-items: center; gap: 8px;") + ;div.mono.f2(style "overflow: hidden; text-overflow: ellipsis; white-space: nowrap; flex: 1;"): {txid-text} + ;button.p1.b0.br1.hover.pointer + =data-txid txid-text + =onclick "copyToClipboard(this.dataset.txid)" + =title "Copy transaction ID" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 24px; height: 24px; justify-content: center; outline: none;" + ;div(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'copy') + == + == + == + == + :: Transaction Info + ;div.p3.b2.br2 + ;div.f3.s-2.pb2: Transaction Info + ;div(style "display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr)); gap: 16px;") + ;div + ;div.f3.s-1(style "opacity: 0.8; margin-bottom: 4px;"): Status + ;span.f3.s-2.p2.br1(style "background: {status-color}; display: inline-block;"): {status-text} + == + ;div + ;div.f3.s-1(style "opacity: 0.8; margin-bottom: 4px;"): Block + ;+ ?~ block-height + ;div.f3: Pending + ;div.f3: {(a-co:co u.block-height)} + == + ;div + ;div.f3.s-1(style "opacity: 0.8; margin-bottom: 4px;"): Fee + ;div.f3: {(format-sats fee)} sats + == + ;div + ;div.f3.s-1(style "opacity: 0.8; margin-bottom: 4px;"): Size + ;div.f3: {(a-co:co size)} bytes + == + == + == + :: Inputs + ;div.p3.b2.br2 + ;div.f3.s-2.pb2: Inputs ({(a-co:co (lent inputs.tx))}) + ;div(style "max-height: 400px; overflow-y: auto;") + ;div.fc.g2 + ;* =/ akh akh + %+ turn inputs.tx + |= =tx-input + ^- manx + =/ in-txid=tape (trip spent-txid.tx-input) + =/ vout=@ud spent-vout.tx-input + ?~ prevout.tx-input + ;div.p3.b1.br2(style "display: flex; justify-content: space-between; align-items: center;") + ;span.f3(style "opacity: 0.5;"): [Prevout data not available] + == + =/ value=@ud value.u.prevout.tx-input + =/ address=tape (trip address.u.prevout.tx-input) + =/ is-ours=? =(address.u.prevout.tx-input addr.dat) + ;div.p3.b1.br2(style "display: flex; justify-content: space-between; align-items: center; gap: 12px;") + ;div(style "flex: 1; min-width: 0;") + ;div(style "display: flex; align-items: center; gap: 8px; margin-bottom: 8px;") + ;button.p1.b0.br1.hover.pointer + =data-txid in-txid + =onclick "copyToClipboard(this.dataset.txid)" + =title "Copy transaction ID" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 24px; height: 24px; justify-content: center; outline: none; flex-shrink: 0;" + ;div(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'copy') + == + == + ;+ ?: (~(has in known-txids) spent-txid.tx-input) + ;a.mono.f2.s-1(href "/groundwire/wallet/a/{akh}/tx/{in-txid}", style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--f2); text-decoration: none; display: flex; align-items: center; gap: 4px; flex: 1; min-width: 0;") + ;span(style "overflow: hidden; text-overflow: ellipsis;"): {(truncate-txid (crip in-txid))}:{(a-co:co vout)} + ;div(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center; flex-shrink: 0;") + ;+ (make:fi 'external-link') + == + == + ;div.mono.f2.s-1(style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--f3); flex: 1; min-width: 0;"): {(truncate-txid (crip in-txid))}:{(a-co:co vout)} + == + ;div(style "display: flex; align-items: center; gap: 8px;") + ;button.p1.b0.br1.hover.pointer + =data-addr address + =onclick "copyToClipboard(this.dataset.addr)" + =title "Copy address" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 24px; height: 24px; justify-content: center; outline: none; flex-shrink: 0;" + ;div(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'copy') + == + == + ;+ ?: is-ours + ;a.mono.f2.s-1(href "/groundwire/wallet/a/{akh}/addr/{(trip addr-chain)}/{(scow %ud addr-idx)}", style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: #10b981; text-decoration: none; flex: 1; min-width: 0;"): {address} + ;span.mono.f2.s-1(style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--f3); flex: 1; min-width: 0;"): {address} + == + == + ;div.f3.s-2(style "white-space: nowrap; flex-shrink: 0;"): {(format-sats value)} sats + == + == + == + == + :: Outputs + ;div.p3.b2.br2 + ;div.f3.s-2.pb2: Outputs ({(a-co:co (lent outputs.tx))}) + ;div(style "max-height: 400px; overflow-y: auto;") + ;div.fc.g2 + ;* =/ akh akh + %+ turn indexed-outputs + |= [vout-index=@ud output=tx-output] + ^- manx + =/ value=@ud value.output + =/ address=tape (trip address.output) + =/ is-ours=? =(address.output addr.dat) + =/ is-utxo=? + (~(has in utxo-set) [txid.tx vout-index]) + =/ row-bg=tape + ?:(is-utxo "background: rgba(255, 200, 50, 0.15);" "background: var(--b1);") + ;div.p3.b1.br2(style "display: flex; justify-content: space-between; align-items: center; gap: 12px; {row-bg}") + ;div(style "flex: 1; min-width: 0;") + ;div(style "display: flex; align-items: center; gap: 8px;") + ;button.p1.b0.br1.hover.pointer + =data-addr address + =onclick "copyToClipboard(this.dataset.addr)" + =title "Copy address" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 24px; height: 24px; justify-content: center; outline: none; flex-shrink: 0;" + ;div(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'copy') + == + == + ;span.f3.s-2.mono(style "opacity: 0.8; white-space: nowrap; flex-shrink: 0;"): Output #{(a-co:co vout-index)} + ;+ ?: is-ours + ;a.mono.f2.s-1(href "/groundwire/wallet/a/{akh}/addr/{(trip addr-chain)}/{(scow %ud addr-idx)}", style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: #10b981; text-decoration: none; flex: 1; min-width: 0;"): {address} + ;span.mono.f2.s-1(style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; color: var(--f3); flex: 1; min-width: 0;"): {address} + == + == + ;div(style "display: flex; align-items: center; gap: 8px; flex-shrink: 0;") + ;+ ?: is-utxo + ;div(style "width: 14px; height: 14px; display: flex; align-items: center; justify-content: center;", title "UTXO") + ;+ (make:fi 'star') + == + ;div; + ;div.f3.s-2(style "white-space: nowrap;"): {(format-sats value)} sats + == + == + == + == + == + == + == + == + == +:: +++ addr-style-text + ^- tape + """ + html, body \{ + height: 100vh !important; + overflow: hidden !important; + margin: 0 !important; + } + @keyframes spin \{ + from \{ transform: rotate(0deg); } + to \{ transform: rotate(360deg); } + } + """ +:: +++ tx-script-text + ^- tape + """ + var path = window.location.pathname; + + function goBackToAddr() \{ + var m = path.match(/^(\\/groundwire\\/wallet\\/a\\/[^/]+)/); + if (m) \{ + window.location.href = m[1]; + } else \{ + history.back(); + } + } + + function copyToClipboard(text) \{ + navigator.clipboard.writeText(text); + } + """ +:: +++ addr-script-text + |= [acct-base=tape chain=tape idx=tape] + ^- tape + """ + var API = '/grubbery/api'; + var acctBase = '{acct-base}'; + + function goBack() \{ + var path = window.location.pathname; + var m = path.match(/^\\/groundwire\\/wallet\\/a\\/([^/]+)/); + if (m) \{ + window.location.href = '/groundwire/wallet/a/' + m[1]; + } else \{ + history.back(); + } + } + + function copyToClipboard(text) \{ + navigator.clipboard.writeText(text); + } + + function doRefresh() \{ + var url = API + '/poke/' + acctBase + '/main.sig?mark=json'; + fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'refresh', chain: '{chain}', index: {idx}}) + }).then(function(r) \{ + if (!r.ok) return r.text().then(function(t) \{ console.error('refresh error', t) }); + }).catch(function(e) \{ console.error('refresh failed', e) }); + } + + function connectSSE() \{ + var path = window.location.pathname; + var url = path + (path.endsWith('/') ? 'stream' : '/stream'); + var es = new EventSource(url); + es.addEventListener('fragment', function(e) \{ + try \{ + var data = JSON.parse(e.data); + var el = document.getElementById(data.target); + if (!el) return; + el.innerHTML = data.html; + } catch(err) \{ console.error('SSE fragment error', err); } + }); + es.onerror = function() \{ + es.close(); + setTimeout(connectSSE, 3000); + }; + } + connectSSE(); + """ +:: +++ seed-to-pubkey + |= =seed + ^- @ux + =/ seed-bytes=byts + ?- -.seed + %t 64^(to-seed:bip39 (trip phrase.seed) "") + %q =/ val=@ `@`secret.seed + [(met 3 val) val] + == + public-key:(from-seed:bip32 seed-bytes) +:: +++ make-dev-wallet + |= [name=@t =seed network=?(%main %testnet3 %testnet4 %signet %regtest)] + ^- [@ta ball:tarball @ta ball:tarball] + =/ seed-bytes=byts + ?- -.seed + %t 64^(to-seed:bip39 (trip phrase.seed) "") + %q =/ val=@ `@`secret.seed [(met 3 val) val] + == + =/ master (from-seed:bip32 seed-bytes) + =/ fp=@ux public-key:master + =/ coin=@ud ?:(=(%main network) 0 1) + =/ derived (derive-path:master "m/84'/{(scow %ud coin)}'/0'") + =/ bip-net (to-bip-network:wt network) + =/ xprv=@t (crip (prv-extended:derived bip-net)) + =/ apk=@ux public-key:derived + =/ addr=(unit @t) + (encode-pubkey:bech32 bip-net [33 public-key:(derive:(derive:derived 0) 0)]) + =/ apath=account [[%.y 84] [%.y coin] [%.y 0]] + =/ wal=wallet-data [name seed fp (~(put by *(map account @ux)) apath apk)] + :: build account data (no inline addresses) + =/ acct=account-data ['Default' fp %p2wpkh network [%.y 84] [%.y coin] [%.y 0] xprv] + :: build initial recv mop with first address + =/ init-addr=address-data + ?~ addr ['' %.n ~ ~ ~] + [u.addr %.n ~ ~ ~] + =/ recv-mop=addr-mop + (put:((on @ud address-data) gth) *addr-mop 0 init-addr) + :: build account ball with address mop files + =/ wdir=@ta (cat 3 (crip (hexn:http-utils fp)) '.wallet_wallet') + =/ adir=@ta (cat 3 (crip (hexn:http-utils apk)) '.wallet_account') + =/ net-dir=@ta ;;(@ta network) + =/ acct-lump=lump:tarball + :+ ~ `[/wallet %account] + (~(put by *(map @ta content:tarball)) %'data.wallet_account' [~ [/wallet %account] !>(acct)]) + :: build addresses/[network]/ ball with recv + chng mop files + =/ chain-lump=lump:tarball + :+ ~ ~ + %- ~(gas by *(map @ta content:tarball)) + :~ ['recv.wallet_addresses' [~ [/wallet %addresses] !>(recv-mop)]] + ['chng.wallet_addresses' [~ [/wallet %addresses] !>(*addr-mop)]] + ['txs.wallet_txs' [~ [/wallet %txs] !>(*tx-map)]] + == + =/ net-ball=ball:tarball [`chain-lump ~] + =/ addr-dir=ball:tarball [~ (~(put by *(map @ta ball:tarball)) net-dir net-ball)] + =/ acct-ball=ball:tarball + [`acct-lump (~(put by *(map @ta ball:tarball)) 'addresses' addr-dir)] + :^ wdir + :- `[~ `[/wallet %wallet] (~(put by *(map @ta content:tarball)) %'main.wallet_wallet' [~ [/wallet %wallet] !>(wal)])] + ~ + adir + acct-ball +:: +++ wallet-to-json + |= wal=wallet-data + ^- json + %- pairs:enjs:format + :~ ['name' s+name.wal] + ['fingerprint' s+(crip (hexn:http-utils fingerprint.wal))] + :- 'seed' + %- pairs:enjs:format + ?- -.seed.wal + %t ~[['type' s+'bip39'] ['value' s+phrase.seed.wal]] + %q ~[['type' s+'q'] ['value' s+(scot %q secret.seed.wal)]] + == + == +:: +++ json-to-wallet-data + |= jon=json + ^- (unit wallet-data) + =/ m (mole |.((pairs-to-wallet jon))) + ?~ m ~ + `u.m +:: +++ pairs-to-wallet + |= jon=json + ^- wallet-data + ?> ?=([%o *] jon) + =/ name=json (~(got by p.jon) 'name') + ?> ?=([%s *] name) + =/ fp=json (~(got by p.jon) 'fingerprint') + ?> ?=([%s *] fp) + =/ seed-jon=json (~(got by p.jon) 'seed') + ?> ?=([%o *] seed-jon) + =/ stype=json (~(got by p.seed-jon) 'type') + ?> ?=([%s *] stype) + =/ sval=json (~(got by p.seed-jon) 'value') + ?> ?=([%s *] sval) + =/ =seed + ?: =('bip39' p.stype) [%t p.sval] + [%q (slav %q p.sval)] + =/ fingerprint=@ux (scan (trip p.fp) hex) + [p.name seed fingerprint ~] +:: +++ view-to-wallets + |= =view:nexus + ^- (list wallet-data) + ?. ?=([%ball *] view) ~ + %+ murn ~(tap by dir.ball.view) + |= [name=@ta sub=ball:tarball] + =/ sub-lump=lump:tarball (fall fil.sub *lump:tarball) + =/ ct=(unit content:tarball) (~(get by contents.sub-lump) 'main.wallet_wallet') + ?~ ct ~ + ?. ?=(%wallet name.p.sage.u.ct) ~ + (mole |.(!<(wallet-data q.sage.u.ct))) +:: +++ seed-to-cord + |= =seed + ^- @t + ?- -.seed + %t phrase.seed + %q (scot %q secret.seed) + == +:: +++ mask-seed + |= =seed + ^- tape + ?- -.seed + %t + =/ words=(list tape) (split-words:seed-phrases (trip phrase.seed)) + =/ first=(list tape) (scag 3 words) + =/ rest=@ud (sub (lent words) 3) + =/ stars=(list tape) (reap rest "****") + =/ all=(list tape) (welp first stars) + (zing (join " " all)) + %q + =/ text=tape (scow %q secret.seed) + =/ show=@ud (min 12 (lent text)) + (weld (scag show text) "...") + == +++ wallet-list-html + |= wals=(list wallet-data) + ^- manx + ?~ wals + ;div.p4.b1.br2.tc + ;div.s0.f2.mb2: No wallets yet + ;div.f3.s-1: Generate a new wallet or restore from a seed phrase below + == + =/ sorted=(list wallet-data) + (sort wals |=([a=wallet-data b=wallet-data] (aor name.a name.b))) + ;div.fc.g2 + ;* (turn sorted wallet-card) + == +:: page rendering +:: +++ wallet-page + |= [nexus-root=tape wals=(list wallet-data)] + ^- manx + ;html + ;head + ;title: Bitcoin Wallet + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;+ feather:feather + ;style + ;+ ;/ style-text + == + == + ;body + ;div(style "min-width: 650px; height: 100%;") + ;div.fc(style "height: 100%;") + :: Fixed header + ;div.p5.ma.mw-page(style "flex-shrink: 0; padding-bottom: 0; width: 100%;") + ;div.tc.mb2 + ;h1.s3.bold: ₿ Bitcoin Wallet + ;p.f2.s-1: Manage your Bitcoin wallets and accounts + == + == + :: Scrollable content + ;div.fc.g3.p5.ma.mw-page(style "flex: 1; min-height: 0; overflow-y: auto; padding-top: 0; width: 100%;") + ;+ (tab-container wals) + == + == + == + ;+ delete-modal + ;script + ;+ ;/ (script-text nexus-root) + == + == + == +:: +++ tab-container + |= wals=(list wallet-data) + ^- manx + ;div.tab-container.b0.br2(data-active-tab "wallets", style "box-shadow: 0 4px 12px rgba(0,0,0,0.15); overflow: hidden; display: flex; flex-direction: column; min-height: 0; flex: 1; width: 100%;") + :: Tab buttons + ;div.fr.b1(style "flex-shrink: 0;") + ;button.tab-button.p4.grow.hover.pointer(data-tab "wallets", style "border: none; background: var(--b0); color: var(--f0); border-bottom: 3px solid var(--f-3); outline: none; flex: 1;"): Full Wallets + ;button.tab-button.p4.grow.hover.pointer(data-tab "watch", style "border: none; background: var(--b1); color: var(--f2); border-bottom: 3px solid transparent; outline: none; flex: 1;"): Watch-Only + ;button.tab-button.p4.grow.hover.pointer(data-tab "signing", style "border: none; background: var(--b1); color: var(--f2); border-bottom: 3px solid transparent; outline: none; flex: 1;"): Signing + == + :: Tab content + ;div.p3.b0(style "flex: 1; min-height: 0; display: flex; flex-direction: column;") + ;div#content-wallets.tab-content(style "display: flex; flex-direction: column; flex: 1; min-height: 0;") + ;+ (wallets-panel wals) + == + ;div#content-watch.tab-content(style "display: none;") + ;+ watch-only-panel + == + ;div#content-signing.tab-content(style "display: none;") + ;+ signing-panel + == + == + == +:: Full Wallets tab +:: +++ wallets-panel + |= wals=(list wallet-data) + ^- manx + ;div.fc.g2(style "flex: 1; min-height: 0;") + ;div#wallet-list-container.p4.b0.br2(style "flex: 1; min-height: 0; overflow-y: auto;") + ;+ (wallet-list-html wals) + == + ;div.p4.b2.br2(style "flex-shrink: 0;") + ;div.s0.bold.tc.hover.pointer(onclick "toggleAddPanel(this)", style "display: flex; align-items: center; justify-content: center; gap: 8px; padding-bottom: 4px;") + ; Add New Wallet + ;div.add-chevron(style "width: 16px; height: 16px; display: flex; align-items: center; transition: transform 0.2s;") + ;+ (make:fi 'chevron-down') + == + == + ;div.add-panel(style "display: none;") + :: Generate / Restore sub-tabs + ;div.tab-container(data-active-tab "generate") + ;div.fr.g2(style "margin-bottom: 12px;") + ;button.tab-button.p2.grow.b0.br1.hover.pointer.bold(data-tab "generate", style "border: 1px solid var(--b3); outline: none;"): Generate + ;button.tab-button.p2.grow.b1.br1.hover.pointer.bold(data-tab "restore", style "border: 1px solid var(--b3); outline: none;"): Restore + == + ;div#content-generate.tab-content(style "display: block;") + ;+ generate-wallet-form + == + ;div#content-restore.tab-content(style "display: none;") + ;+ restore-wallet-form + == + == + == + == + == +:: +++ wallet-card + |= wal=wallet-data + ^- manx + =/ wallet-key=tape (hexn:http-utils fingerprint.wal) + =/ detail-url=tape + "/groundwire/wallet/w/{wallet-key}" + ;div.p3.b1.br2.hover.pointer + =onclick "window.location.href='{detail-url}'" + =style "display: flex; justify-content: space-between; align-items: center; gap: 12px;" + ;div(style "flex: 1; min-width: 0;") + ;div.s0.bold.mb-1: {(trip name.wal)} + ;div(style "display: flex; align-items: center; gap: 8px;") + ;button.p1.b0.br1.hover.pointer + =data-seed (trip (seed-to-cord seed.wal)) + =onclick "event.preventDefault(); event.stopPropagation(); copyToClipboard(this.dataset.seed);" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 24px; height: 24px; justify-content: center; outline: none;" + =title "Copy seed phrase" + ;div(style "width: 12px; height: 12px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'copy') + == + == + ;div.f3.s-2.mono(style "white-space: nowrap; overflow: hidden; text-overflow: ellipsis; flex: 1;"): {(mask-seed seed.wal)} + == + == + ;button.p2.b1.br1.hover.pointer + =data-wallet-name (trip name.wal) + =data-pubkey (hexn:http-utils fingerprint.wal) + =onclick "event.stopPropagation(); showDeleteModal(this.dataset.walletName, this.dataset.pubkey)" + =style "background: var(--b2); border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 32px; height: 32px; justify-content: center; outline: none; flex-shrink: 0;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'trash-2') + == + == + == +:: +++ delete-modal + ^- manx + ;div(id "delete-modal", style "display: none; position: fixed; top: 0; left: 0; width: 100%; height: 100%; background: rgba(0,0,0,0.5); z-index: 1000; align-items: center; justify-content: center;") + ;div.b0.br3.p5(style "max-width: 400px;") + ;h3.mb2: Delete Wallet + ;p.f2.mb2(id "delete-confirm-text"): Are you sure you want to delete this wallet? + ;div.mb2 + ;label.s-1.bold: Type wallet name to confirm: + ;input.p2.b1.br1.wf(id "confirm-name", type "text", placeholder "Wallet name", oninput "validateDeleteName()"); + ;div.f-1.s-2.mt-1(id "name-error", style "display: none;"): Wallet name does not match + == + ;div(style "display: flex; gap: 12px; justify-content: flex-end;") + ;button.p2.b2.br2.hover.pointer(onclick "hideDeleteModal()", style "outline: none;"): Cancel + ;button.p2.br2.hover.pointer(id "confirm-delete-btn", onclick "confirmDelete()", style "background: var(--f-1); color: var(--b0); outline: none;", disabled "true"): Delete + == + == + == +:: +++ generate-wallet-form + ^- manx + ;form(method "post") + ;div.fc.g1 + ;input(type "hidden", name "action", value "add-wallet-from-entropy"); + ;div + ;label.s-1.bold: Wallet Name + ;input.p2.b1.br1.wf(type "text", name "wallet-name", placeholder "My Bitcoin Wallet", required "true"); + == + ;button.p3.b-3.f-3.br2.hover.pointer(type "submit", style "outline: none;"): Generate Wallet + == + == +:: +++ restore-wallet-form + ^- manx + ;div + ;form(method "post") + ;div.fc.g1 + ;input(type "hidden", name "action", value "add-wallet"); + ;div + ;label.s-1.bold: Wallet Name + ;input.p2.b1.br1.wf(type "text", name "wallet-name", placeholder "My Restored Wallet", required "true"); + == + ;div + ;label.s-1.bold: Seed Format + ;div(style "display: flex; gap: 16px; margin-top: 4px;") + ;label(style "display: flex; align-items: center; gap: 4px; cursor: pointer;") + ;input(type "radio", name "seed-format", value "bip39", checked "true", onchange "updateSeedInput(this.value)"); + ; BIP39 Mnemonic + == + ;label(style "display: flex; align-items: center; gap: 4px; cursor: pointer;") + ;input(type "radio", name "seed-format", value "q", onchange "updateSeedInput(this.value)"); + ; Urbit @q + == + == + == + ;div + ;label.s-1.bold(id "seed-label"): Seed Phrase + ;textarea.p2.b1.br1.wf(id "seed-input", name "seed-phrase", placeholder "abandon abandon abandon...", rows "3", required "true", style "font-family: monospace;", oninput "this.value = this.value.replace(/[^a-z ]/g, '')"); + == + ;button.p3.b-3.f-3.br2.hover.pointer(type "submit", style "outline: none;"): Restore Wallet + == + == + == +:: Watch-Only tab +:: +++ watch-only-panel + ^- manx + ;div.fc.g2(style "flex: 1; min-height: 0;") + ;div#watch-only-list-container.p4.b0.br2(style "flex: 1; min-height: 0; overflow-y: auto;") + ;div.p4.b1.br2.tc + ;div.s0.f2.mb2: No watch-only accounts yet + ;div.f3.s-1: Import xpubs or addresses to track balances + == + == + ;div.p4.b2.br2(style "flex-shrink: 0;") + ;div.s0.bold.tc.hover.pointer(onclick "toggleAddPanel(this)", style "display: flex; align-items: center; justify-content: center; gap: 8px;") + ; Add Watch-Only Account + ;div.add-chevron(style "width: 16px; height: 16px; display: flex; align-items: center; transition: transform 0.2s;") + ;+ (make:fi 'chevron-down') + == + == + ;div.add-panel(style "display: none;") + ;form(method "post") + ;div.fc.g1 + ;input(type "hidden", name "action", value "add-watch-only"); + ;div + ;label.s-1.bold: Account Name + ;input.p2.b1.br1.wf(type "text", name "account-name", placeholder "Hardware Wallet", required "true"); + == + ;div + ;label.s-1.bold: Extended Public Key (xpub/tpub) + ;textarea.p2.b1.br1.wf(name "xpub", placeholder "xpub...", rows "1", required "true", style "font-family: monospace;"); + == + ;+ script-type-select + ;+ network-select + ;button.p3.b-3.f-3.br2.hover.pointer(type "submit", style "outline: none;"): Add Account + == + == + == + == + == +:: Signing tab +:: +++ signing-panel + ^- manx + ;div.fc.g2(style "flex: 1; min-height: 0;") + ;div#signing-list-container.p4.b0.br2(style "flex: 1; min-height: 0; overflow-y: auto;") + ;div.p4.b1.br2.tc + ;div.s0.f2.mb2: No signing accounts yet + ;div.f3.s-1: Import private keys or connect hardware wallets + == + == + ;div.p4.b2.br2(style "flex-shrink: 0;") + ;div.s0.bold.tc.hover.pointer(onclick "toggleAddPanel(this)", style "display: flex; align-items: center; justify-content: center; gap: 8px;") + ; Add Signing Account + ;div.add-chevron(style "width: 16px; height: 16px; display: flex; align-items: center; transition: transform 0.2s;") + ;+ (make:fi 'chevron-down') + == + == + ;div.add-panel(style "display: none;") + ;form(method "post") + ;div.fc.g1 + ;input(type "hidden", name "action", value "add-signing"); + ;div + ;label.s-1.bold: Account Name + ;input.p2.b1.br1.wf(type "text", name "account-name", placeholder "Hot Wallet", required "true"); + == + ;div + ;label.s-1.bold: Extended Private Key (xprv/tprv) + ;textarea.p2.b1.br1.wf(name "xprv", placeholder "xprv...", rows "1", required "true", style "font-family: monospace;"); + == + ;+ script-type-select + ;+ network-select + ;button.p3.b-3.f-3.br2.hover.pointer(type "submit", style "outline: none;"): Add Account + == + == + == + == + == +:: Shared form components +:: +++ script-type-select + ^- manx + ;div + ;label.s-1.bold: Script Type + ;select.p2.b1.br1.wf.hover.pointer(name "script-type", required "true", style "outline: none;") + ;option(value "p2wpkh", selected "selected"): Native SegWit (P2WPKH) + ;option(value "p2sh-p2wpkh"): Wrapped SegWit (P2SH-P2WPKH) + ;option(value "p2pkh"): Legacy (P2PKH) + ;option(value "p2tr"): Taproot (P2TR) + == + == +:: +++ network-select + ^- manx + ;div + ;label.s-1.bold: Network + ;select.p2.b1.br1.wf.hover.pointer(name "network", required "true", style "outline: none;") + ;option(value "main", selected "selected"): Bitcoin Mainnet + ;option(value "testnet"): Bitcoin Testnet + == + == +:: +++ style-text + ^- tape + """ + html, body \{ + height: 100vh !important; + overflow: hidden !important; + margin: 0 !important; + } + """ +:: +++ script-text + |= nexus-root=tape + ^- tape + ;: weld + "var API = '/' + window.location.pathname.split('/')[1] + '/'+'api';\0a" + "var BASE = '{(slag 1 nexus-root)}';\0a" + """ + + function poke(body, cb) \{ + var url = API + '/'+'poke/' + BASE + '/'+'main.sig?mark=json'; + console.log('POKE', url, body); + return fetch(url, \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(body) + }).then(function(r) \{ + console.log('POKE response', r.status); + if (!r.ok) return r.text().then(function(t) \{ console.error('POKE error', t) }); + if (cb) setTimeout(cb, 300); + }).catch(function(e) \{ console.error('POKE failed', e) }) + } + + document.querySelectorAll('form[method="post"]').forEach(function(form) \{ + form.addEventListener('submit', function(e) \{ + e.preventDefault(); + var data = \{}; + new FormData(form).forEach(function(v, k) \{ data[k] = v; }); + poke(data); + }); + }); + + function toggleAddPanel(el) \{ + var panel = el.parentElement.querySelector('.add-panel'); + var chevron = el.querySelector('.add-chevron'); + if (panel.style.display === 'none' || !panel.style.display) \{ + panel.style.display = 'block'; + chevron.style.transform = 'rotate(180deg)'; + } else \{ + panel.style.display = 'none'; + chevron.style.transform = ''; + } + } + + function updateSeedInput(format) \{ + var input = document.getElementById('seed-input'); + var label = document.getElementById('seed-label'); + if (format === 'q') \{ + label.textContent = 'Urbit @q'; + input.placeholder = '~sampel-palnet or ~sampel-palnet-sampel-palnet...'; + input.oninput = function() \{ this.value = this.value.replace(/[^a-z~.-]/g, ''); }; + } else \{ + label.textContent = 'Seed Phrase'; + input.placeholder = 'abandon abandon abandon...'; + input.oninput = function() \{ this.value = this.value.replace(/[^a-z ]/g, ''); }; + } + input.value = ''; + } + + function copyToClipboard(text) \{ + navigator.clipboard.writeText(text).then(function() \{ + console.log('Copied to clipboard'); + }).catch(function(err) \{ + console.error('Failed to copy:', err); + }); + } + + var _deleteWalletName = ''; + var _deletePubkey = ''; + + function showDeleteModal(name, pubkey) \{ + _deleteWalletName = name; + _deletePubkey = pubkey; + document.getElementById('delete-confirm-text').textContent = + 'Are you sure you want to delete "' + name + '"?'; + document.getElementById('confirm-name').value = ''; + document.getElementById('name-error').style.display = 'none'; + document.getElementById('confirm-delete-btn').disabled = true; + var modal = document.getElementById('delete-modal'); + modal.style.display = 'flex'; + } + + function hideDeleteModal() \{ + document.getElementById('delete-modal').style.display = 'none'; + } + + function validateDeleteName() \{ + var input = document.getElementById('confirm-name').value; + var matches = (input === _deleteWalletName); + document.getElementById('name-error').style.display = matches ? 'none' : 'block'; + document.getElementById('confirm-delete-btn').disabled = !matches; + } + + function confirmDelete() \{ + poke(\{action: 'remove-wallet', pubkey: _deletePubkey, 'wallet-name': _deleteWalletName}); + hideDeleteModal(); + } + + (function() \{ + function activateTab(container, tabName) \{ + container.querySelectorAll('.tab-content').forEach(function(c) \{ + c.style.display = 'none'; + }); + var target = container.querySelector('#content-' + tabName); + if (target) \{ + target.style.display = 'flex'; + target.style.flexDirection = 'column'; + target.style.flex = '1'; + target.style.minHeight = '0'; + } + container.querySelectorAll(':scope > .fr > .tab-button, :scope > .tab-button').forEach(function(b) \{ + b.style.background = 'var(--b1)'; + b.style.color = 'var(--f2)'; + b.style.borderBottom = '3px solid transparent'; + }); + var activeBtn = container.querySelector('.tab-button[data-tab="' + tabName + '"]'); + if (activeBtn) \{ + activeBtn.style.background = 'var(--b0)'; + activeBtn.style.color = 'var(--f0)'; + activeBtn.style.borderBottom = '3px solid var(--f-3)'; + } + container.setAttribute('data-active-tab', tabName); + } + + document.querySelectorAll('.tab-button').forEach(function(btn) \{ + btn.addEventListener('click', function() \{ + var tabName = this.getAttribute('data-tab'); + var container = this.closest('.tab-container'); + activateTab(container, tabName); + }); + }); + + document.querySelectorAll('.tab-container').forEach(function(container) \{ + var activeTab = container.getAttribute('data-active-tab'); + if (activeTab) \{ + activateTab(container, activeTab); + } + }); + })(); + + var SSE = API + '/'+'keep/' + BASE + '/'+'ui/sse?mark=txt'; + var sseController = null; + var sseReader = null; + + async function connectSSE() \{ + if (sseReader) try \{ sseReader.cancel(); } catch(e) \{} + if (sseController) sseController.abort(); + sseController = new AbortController(); + try \{ + var r = await fetch(SSE, \{ + headers: \{Accept: 'text/event-stream'}, + signal: sseController.signal + }); + sseReader = r.body.getReader(); + var dec = new TextDecoder(); + var buf = ''; + while (true) \{ + var chunk = await sseReader.read(); + if (chunk.done) break; + buf += dec.decode(chunk.value, \{stream: true}); + var parts = buf.split('\\n\\n'); + buf = parts.pop(); + for (var i = 0; i < parts.length; i++) \{ + if (!parts[i].trim()) continue; + var ev = '', data = '', lines = parts[i].split('\\n'); + for (var j = 0; j < lines.length; j++) \{ + if (lines[j].indexOf('event: ') === 0) ev = lines[j].slice(7); + else if (lines[j].indexOf('data: ') === 0) data = lines[j].slice(6); + } + if (!ev) continue; + var sp = ev.indexOf(' '); + if (sp < 0) continue; + var act = ev.slice(0, sp); + var name = ev.slice(sp + 2); + if (act === 'old') continue; + if (name === 'wallets.html' && data) \{ + var container = document.getElementById('wallet-list-container'); + if (container) container.innerHTML = data; + } + } + } + } catch (e) \{ + if (e.name !== 'AbortError') \{ + setTimeout(connectSSE, 2000); + } + } + } + window.addEventListener('beforeunload', function() \{ + if (sseReader) try \{ sseReader.cancel(); } catch(e) \{} + if (sseController) sseController.abort(); + }); + connectSSE(); + """ + == +-- diff --git a/desk/gub/nex/wallet/wallet.hoon b/desk/gub/nex/wallet/wallet.hoon new file mode 100644 index 0000000..f9d867f --- /dev/null +++ b/desk/gub/nex/wallet/wallet.hoon @@ -0,0 +1,1049 @@ +:: per-wallet nexus: individual bitcoin wallet instance +:: +:: Each wallet directory contains: +:: main.wallet_wallet wallet-data + poke handler (name, seed, fingerprint, accounts) +:: page.html rendered detail page (manx) +:: accounts/ per-account nexuses +:: +:: +/< feather /lib/feather.hoon +/< fi /lib/feather-icons.hoon +/< wt /lib/wallet-types.hoon +/< seed-phrases /lib/seed-phrases.hoon +/< bip32 /lib/bip32.hoon +/< bip39 /lib/bip39.hoon +/< bech32 /lib/bech32.hoon +=, wt +=< ^- nexus:nexus + |% + ++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%stay %& [/ %'main.wallet_wallet']] + [%fall %| /ui/sse [~ ~] [~ ~] empty-dir:loader] + [%over %& [/ui/sse %'accounts.html'] %.n [~ [/ %html] !>((crip (en-xml:html ;div;)))]] + [%over %& [/ui/sse %'error.html'] %.n [~ [/ %html] !>((crip (en-xml:html ;div;)))]] + [%over %& [/ui/sse %'loading.html'] %.n [~ [/ %html] !>((crip (en-xml:html ;div;)))]] + [%load %& [/ %'main.wallet_wallet'] [/ %'page.html'] data-to-page] + == + == + :: + ++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /page.html: render wallet detail, re-render on changes + :: + [~ %'page.html'] + ;< ~ bind:m (rise-wait:io prod "%wallet detail: failed") + ;< data=view:nexus bind:m + (keep:io /data (cord-to-road:tarball './') ~) + ;< accts=view:nexus bind:m + (keep:io /accts (cord-to-road:tarball '../../accounts/') ~) + ;< sse=view:nexus bind:m + (keep:io /sse (cord-to-road:tarball './ui/sse/') ~) + =/ wal=(unit wallet-data) (extract-wallet data) + =/ acct-list=(list account-data) (extract-accounts accts wal) + ?~ wal stay:m + =/ err=manx (extract-sse-manx sse 'error.html') + =/ load=manx (extract-sse-manx sse 'loading.html') + ;< ~ bind:m (replace:io !>((crip (en-xml:html (detail-page u.wal acct-list err load))))) + |- + ;< [tag=?(%data %accts %sse) =view:nexus] bind:m + (take-any-news /data /accts /sse) + =? data =(tag %data) view + =? accts =(tag %accts) view + =? sse =(tag %sse) view + =/ wal=(unit wallet-data) (extract-wallet data) + =/ acct-list=(list account-data) (extract-accounts accts wal) + ?~ wal stay:m + =/ err=manx (extract-sse-manx sse 'error.html') + =/ load=manx (extract-sse-manx sse 'loading.html') + ;< ~ bind:m (replace:io !>((crip (en-xml:html (detail-page u.wal acct-list err load))))) + $ + :: /ui/sse/accounts.html: rendered account list for SSE + :: + [[%ui %sse ~] %'accounts.html'] + ;< ~ bind:m (rise-wait:io prod "%wallet /ui/sse: failed") + ;< data=view:nexus bind:m + (keep:io /data (cord-to-road:tarball '../../') ~) + ;< accts=view:nexus bind:m + (keep:io /accts (cord-to-road:tarball '../../../../accounts/') ~) + =/ wal=(unit wallet-data) (extract-wallet data) + =/ acct-list=(list account-data) (extract-accounts accts wal) + ?~ wal stay:m + ;< ~ bind:m (replace:io !>((crip (en-xml:html (accounts-fragment acct-list))))) + |- + ;< [tag=?(%data %accts) =view:nexus] bind:m + (take-either-news /data /accts) + =? data =(tag %data) view + =? accts =(tag %accts) view + =/ wal=(unit wallet-data) (extract-wallet data) + =/ acct-list=(list account-data) (extract-accounts accts wal) + ?~ wal stay:m + ;< ~ bind:m (replace:io !>((crip (en-xml:html (accounts-fragment acct-list))))) + $ + :: /main.wallet_wallet: wallet data + poke handler + :: + [~ %'main.wallet_wallet'] + ;< ~ bind:m (rise-wait:io prod "%wallet /main: failed") + |- + ;< wal=wallet-data bind:m (get-state-as:io wallet-data) + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from:io + ?+ name.p.sage + ~& > [%wallet-main %unknown-mark name.p.sage] + $ + %json + =/ jon=json !<(json q.sage) + ?. ?=([%o *] jon) $ + =/ act=@t (~(dug jo:json-utils jon) /action so:dejs:format '') + ?+ act + ~& > [%wallet-main %unknown-action act] + $ + %'add-account' + =/ account-name=@t + (~(dog jo:json-utils jon) /account-name so:dejs:format) + =/ purpose-select=@t + (~(dug jo:json-utils jon) /purpose-select so:dejs:format '84') + =/ purpose=@ud + ?: =(purpose-select 'custom') + (rash (~(dog jo:json-utils jon) /purpose-custom so:dejs:format) dem) + (rash purpose-select dem) + =/ coin-type-select=@t + (~(dug jo:json-utils jon) /coin-type-select so:dejs:format '0') + =/ coin-type=@ud + ?: =(coin-type-select 'custom') + (rash (~(dog jo:json-utils jon) /coin-type-custom so:dejs:format) dem) + (rash coin-type-select dem) + =/ account-idx=@ud + (rash (~(dug jo:json-utils jon) /account-number so:dejs:format '0') dem) + =/ =script-type (purpose-to-script purpose) + :: clear error + show loading + =/ err-road=road:tarball (cord-to-road:tarball './ui/sse/error.html') + =/ load-road=road:tarball (cord-to-road:tarball './ui/sse/loading.html') + ;< ~ bind:m (over:io err-road [[/ %html] !>((crip (en-xml:html ;div;)))]) + ;< ~ bind:m (over:io load-road [[/ %html] !>((crip (en-xml:html loading-bar)))]) + ;< ~ bind:m (sleep:io `@dr`(div ~s1 10)) + :: derive account key from master seed + =/ network=?(%main %testnet3 %testnet4 %signet %regtest) + ?: =(1 coin-type) %testnet4 %main + =/ master (from-seed:bip32 (seed-to-bytes seed.wal)) + =/ pax=tape + "m/{(scow %ud purpose)}'/{(scow %ud coin-type)}'/{(scow %ud account-idx)}'" + =/ derived (derive-path:master pax) + =/ xprv=@t (crip (prv-extended:derived (to-bip-network:wt network))) + :: create account data with empty inline addresses + =/ acct=account-data + [account-name fingerprint.wal script-type network [%.y purpose] [%.y coin-type] [%.y account-idx] xprv] + =/ acct-pubkey=@ux public-key:derived + =/ acct-key=@ta (crip (hexn:http-utils acct-pubkey)) + =/ acct-dir=@ta (cat 3 acct-key '.wallet_account') + =/ acct-lump=lump:tarball + :+ ~ `[/wallet %account] + (~(put by *(map @ta content:tarball)) %'data.wallet_account' [~ [/wallet %account] !>(acct)]) + =/ acct-ball=ball:tarball [`acct-lump ~] + ;< err=(unit tang) bind:m + (make-soft:io [%| 2 %| (snoc /accounts acct-dir)] &+[*sand:nexus *gain:nexus acct-ball]) + + ?^ err + ;< ~ bind:m + (over:io load-road [[/ %html] !>((crip (en-xml:html ;div;)))]) + ;< ~ bind:m + (over:io err-road [[/ %html] !>((crip (en-xml:html (render-error u.err))))]) + $ + :: clear loading + update wallet accounts map + ;< ~ bind:m (over:io load-road [[/ %html] !>((crip (en-xml:html ;div;)))]) + =/ acct-path=account:wt [[%.y purpose] [%.y coin-type] [%.y account-idx]] + =. wal wal(accounts (~(put by accounts.wal) acct-path acct-pubkey)) + ;< ~ bind:m (replace:io !>(wal)) + $ + %'remove-account' + =/ acct-key=@t + (~(dog jo:json-utils jon) /account-key so:dejs:format) + =/ acct-pubkey=@ux (scan (trip acct-key) hex) + =/ acct-dir=@ta (cat 3 (crip (trip acct-key)) '.wallet_account') + :: clear error + show loading + =/ err-road=road:tarball (cord-to-road:tarball './ui/sse/error.html') + =/ load-road=road:tarball (cord-to-road:tarball './ui/sse/loading.html') + ;< ~ bind:m (over:io err-road [[/ %html] !>((crip (en-xml:html ;div;)))]) + ;< ~ bind:m (over:io load-road [[/ %html] !>((crip (en-xml:html loading-bar)))]) + ;< ~ bind:m (sleep:io `@dr`(div ~s1 10)) + ;< err=(unit tang) bind:m + (cull-soft:io [%| 2 %| (snoc /accounts acct-dir)]) + + ?^ err + ;< ~ bind:m + (over:io load-road [[/ %html] !>((crip (en-xml:html ;div;)))]) + ;< ~ bind:m + (over:io err-road [[/ %html] !>((crip (en-xml:html (render-error u.err))))]) + $ + :: clear loading + remove from wallet accounts map + ;< ~ bind:m (over:io load-road [[/ %html] !>((crip (en-xml:html ;div;)))]) + =. wal + %= wal + accounts + %- ~(gas by *(map account:wt @ux)) + %+ skip ~(tap by accounts.wal) + |=([* pk=@ux] =(pk acct-pubkey)) + == + ;< ~ bind:m (replace:io !>(wal)) + $ + %'discover-accounts' + =/ purpose-select=@t + (~(dug jo:json-utils jon) /purpose-select so:dejs:format '84') + =/ purpose=@ud + ?:(=(purpose-select 'custom') (rash (~(dog jo:json-utils jon) /purpose-custom so:dejs:format) dem) (rash purpose-select dem)) + =/ coin-type-select=@t + (~(dug jo:json-utils jon) /coin-type-select so:dejs:format '0') + =/ coin-type=@ud + ?:(=(coin-type-select 'custom') (rash (~(dog jo:json-utils jon) /coin-type-custom so:dejs:format) dem) (rash coin-type-select dem)) + =/ disc-json=json + %- pairs:enjs:format + :~ ['purpose' (numb:enjs:format purpose)] + ['coin-type' (numb:enjs:format coin-type)] + ['account-idx' (numb:enjs:format 0)] + == + ;< ~ bind:m + (make:io (cord-to-road:tarball './proc/discover.json') |+[%.n [[/ %json] !>(disc-json)] ~]) + $ + :: + %'cancel-discovery' + ;< * bind:m + (cull-soft:io (cord-to-road:tarball './proc/discover.json')) + =/ load-road=road:tarball (cord-to-road:tarball './ui/sse/loading.html') + ;< ~ bind:m (over:io load-road [[/ %html] !>((crip (en-xml:html ;div;)))]) + $ + :: + %'clear-error' + =/ err-road=road:tarball (cord-to-road:tarball './ui/sse/error.html') + ;< ~ bind:m (over:io err-road [[/ %html] !>((crip (en-xml:html ;div;)))]) + $ + == + == + :: /proc/discover.json: account discovery process + :: + [[%proc ~] %'discover.json'] + ;< ~ bind:m (rise-wait:io prod "%discover: failed") + ;< wal-view=view:nexus bind:m + (keep:io /wal (cord-to-road:tarball '../') ~) + =/ wal=(unit wallet-data) (extract-wallet wal-view) + ?~ wal (pure:m ~) + :: read progress from proc state + ;< prev-state=vase bind:m get-state:io + =/ prev=json (fall (mole |.(!<(json prev-state))) *json) + =/ purpose=@ud + (fall (mole |.((ni:dejs:format (~(got jo:json-utils prev) /'purpose')))) 84) + =/ coin-type=@ud + (fall (mole |.((ni:dejs:format (~(got jo:json-utils prev) /'coin-type')))) 0) + =/ start-idx=@ud + (fall (mole |.((ni:dejs:format (~(got jo:json-utils prev) /'account-idx')))) 0) + =/ =script-type (purpose-to-script purpose) + =/ network=?(%main %testnet3 %testnet4 %signet %regtest) + ?:(=(1 coin-type) %testnet4 %main) + =/ account-idx=@ud start-idx + =/ load-road=road:tarball (cord-to-road:tarball '../ui/sse/loading.html') + |- + :: update progress in proc state + =/ prog=json + %- pairs:enjs:format + :~ ['purpose' (numb:enjs:format purpose)] + ['coin-type' (numb:enjs:format coin-type)] + ['account-idx' (numb:enjs:format account-idx)] + == + ;< ~ bind:m (replace:io !>(prog)) + :: show progress in loading bar + ;< ~ bind:m + (over:io load-road [[/ %html] !>((crip (en-xml:html (discover-loading purpose coin-type account-idx))))]) + :: derive xprv for this account index + =/ master (from-seed:bip32 (seed-to-bytes seed.u.wal)) + =/ pax=tape + "m/{(scow %ud purpose)}'/{(scow %ud coin-type)}'/{(scow %ud account-idx)}'" + =/ derived (derive-path:master pax) + =/ xprv=@t (crip (prv-extended:derived (to-bip-network:wt network))) + :: check recv + change chains for any activity + ;< recv-active=? bind:m + (discover-check-chain xprv script-type network 0) + ;< chng-active=? bind:m + (discover-check-chain xprv script-type network 1) + :: no activity = discovery complete + ?. |(recv-active chng-active) + ;< ~ bind:m (over:io load-road [[/ %html] !>((crip (en-xml:html ;div;)))]) + (pure:m ~) + :: account has activity — create it + =/ acct-name=@t (crip "Account {(scow %ud account-idx)}") + =/ acct=account-data:wt + [acct-name fingerprint.u.wal script-type network [%.y purpose] [%.y coin-type] [%.y account-idx] xprv] + =/ acct-pubkey=@ux public-key:derived + =/ acct-key=@ta (crip (hexn:http-utils acct-pubkey)) + =/ acct-dir=@ta (cat 3 acct-key '.wallet_account') + =/ acct-lump=lump:tarball + :+ ~ `[/wallet %account] + (~(put by *(map @ta content:tarball)) %'data.wallet_account' [~ [/wallet %account] !>(acct)]) + =/ acct-ball=ball:tarball [`acct-lump ~] + ;< err=(unit tang) bind:m + (make-soft:io [%| 3 %| (snoc /accounts acct-dir)] &+[*sand:nexus *gain:nexus acct-ball]) + ?^ err + ~&(>>> [%discover %account-create-failed] (pure:m ~)) + :: update wallet accounts map + =/ acct-path=account:wt [[%.y purpose] [%.y coin-type] [%.y account-idx]] + =. u.wal u.wal(accounts (~(put by accounts.u.wal) acct-path acct-pubkey)) + ;< ~ bind:m + (over:io (cord-to-road:tarball '../main.wallet_wallet') [[/wallet %wallet] !>(u.wal)]) + :: kick off full scan on the new account + =/ scan-json=json + %- pairs:enjs:format + ~[['phase' s+'recv'] ['idx' (numb:enjs:format 0)] ['gap' (numb:enjs:format 0)]] + ;< ~ bind:m + (make:io (cord-to-road:tarball (crip "../../../accounts/{(trip acct-dir)}/proc/scan.json")) |+[%.n [[/ %json] !>(scan-json)] ~]) + :: continue to next account + $(account-idx +(account-idx)) + == + :: + ++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under this wallet.' + ~ + 'Individual Bitcoin wallet. Contains wallet data and rendered detail page.' + == + %| + ?+ rail.p.mana 'File under this wallet.' + [~ %'main.wallet_wallet'] 'Wallet data + poke handler: name, seed, fingerprint, accounts.' + [~ %'page.html'] 'Rendered wallet detail page. Mark: manx.' + [~ %'ver.ud'] 'Schema version.' + == + == + -- +:: types and rendering +:: +|% +++ take-either-news + |= [a=wire b=wire] + =/ m (fiber:fiber:nexus ,[?(%data %accts) view:nexus]) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %news * *] + ?: =(a wire.u.in) [%done %data view.u.in] + ?: =(b wire.u.in) [%done %accts view.u.in] + [%skip ~] + == +:: +++ take-any-news + |= [a=wire b=wire c=wire] + =/ m (fiber:fiber:nexus ,[?(%data %accts %sse) view:nexus]) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %news * *] + ?: =(a wire.u.in) [%done %data view.u.in] + ?: =(b wire.u.in) [%done %accts view.u.in] + ?: =(c wire.u.in) [%done %sse view.u.in] + [%skip ~] + == +:: +++ extract-sse-manx + |= [=view:nexus name=@ta] + ^- manx + ?. ?=([%ball *] view) ;div; + =/ =lump:tarball (fall fil.ball.view *lump:tarball) + =/ ct=(unit content:tarball) (~(get by contents.lump) name) + ?~ ct ;div; + =/ result=(unit manx) (mole |.((need (de-xml:html !<(@t q.sage.u.ct))))) + (fall result ;div;) +:: +++ loading-bar + ^- manx + ;div(style "height: 2px; background: #e0e0e0; overflow: hidden; border-radius: 1px;") + ;div(style "height: 100%; width: 30%; background: #888; animation: slide 1s ease-in-out infinite;"); + == +:: +++ render-error + |= =tang + ^- manx + =/ lines=(list tape) + %+ turn (flop tang) + |=(=tank ~(ram re tank)) + =/ message=tape + =/ msgs=(list tape) + %+ skim lines + |= l=tape + ?& !=(l "") + !=('/' (snag 0 l)) + == + ?~ msgs "Something went wrong" + =/ raw=tape i.msgs + =/ stripped=tape + ?. ?& (gte (lent raw) 2) + =('"' (snag 0 raw)) + =('"' (rear raw)) + == + raw + (scag (sub (lent raw) 2) (slag 1 raw)) + (weld "Error: " stripped) + ;details(style "background: #fce8e6; color: #c62828; padding: 6px 10px; border-radius: 3px; border: 1px solid #f5c6cb; font-size: 13px;") + ;summary(style "display: flex; align-items: center; gap: 6px; cursor: pointer; list-style: none;") + ;span(style "flex: 1;"): {message} + ;button + =onclick "clearError()" + =style "background: none; border: none; color: #c62828; cursor: pointer; padding: 0; display: flex; align-items: center; justify-content: center; opacity: 0.6;" + ;div(style "width: 14px; height: 14px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'x') + == + == + ;div(style "width: 14px; height: 14px; display: flex; align-items: center; justify-content: center; flex-shrink: 0;") + ;+ (make:fi 'chevron-down') + == + == + ;pre(style "margin-top: 6px; white-space: pre-wrap; font-family: monospace; font-size: 11px; max-height: 160px; overflow-y: auto; opacity: 0.8;") + ;* %+ turn lines + |= line=tape + ^- manx + ;div: {line} + == + == +:: +++ discover-loading + |= [purpose=@ud coin-type=@ud account-idx=@ud] + ^- manx + =/ pax=tape + "m/{(scow %ud purpose)}'/{(scow %ud coin-type)}'/{(scow %ud account-idx)}'" + ;div(style "display: flex; align-items: center; gap: 12px; padding: 8px 12px; border: 2px solid rgba(100, 150, 255, 0.4); background: rgba(100, 150, 255, 0.1); border-radius: 6px;") + ;div(style "width: 20px; height: 20px; display: flex; align-items: center; justify-content: center; animation: spin 1s linear infinite;") + ;+ (make:fi 'loader') + == + ;div(style "flex: 1;") + ;div.s-1.bold: Discovering accounts... + ;div.s-2.f3: Scanning {pax} + == + ;button.p2.b1.br1.hover.pointer(onclick "cancelDiscovery()", style "outline: none; border: 1px solid rgba(255,80,80,0.4); background: rgba(255,80,80,0.1); color: #ff5050;") + ; Cancel + == + == +:: +++ discover-check-chain + |= [xprv=@t =script-type network=?(%main %testnet3 %testnet4 %signet %regtest) chain=@ud] + =/ m (fiber:fiber:nexus ,?) + ^- form:m + =/ gap-limit=@ud 20 + =/ idx=@ud 0 + =/ gap=@ud 0 + =/ found=? %.n + |- + ?: (gte gap gap-limit) (pure:m found) + =/ addr=(unit @t) (derive-acct-addr xprv script-type network chain idx) + ?~ addr (pure:m found) + =/ url=@t (crip (weld (disc-mempool-url network) (trip u.addr))) + ;< ~ bind:m (send-request:io [%'GET' url ~[['Accept' 'application/json']] ~]) + ;< resp=client-response:iris bind:m disc-take-http + =/ tc=@ud (disc-parse-tx-count resp) + ;< ~ bind:m (sleep:io `@dr`(div ~s1 1.000)) + ?: (gth tc 0) + $(idx +(idx), gap 0, found %.y) + $(idx +(idx), gap +(gap)) +:: +++ disc-mempool-url + |= network=?(%main %testnet3 %testnet4 %signet %regtest) + ^- tape + ?- network + %main "https://mempool.space/api/address/" + %testnet3 "https://mempool.space/testnet/api/address/" + %testnet4 "https://mempool.space/testnet4/api/address/" + %signet "https://mempool.space/signet/api/address/" + %regtest "http://localhost:3000/address/" + == +:: +++ disc-take-http + =/ m (fiber:fiber:nexus ,client-response:iris) + ^- form:m + |= input:fiber:nexus + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %poke * *] + ?. =([/ %http-response] p.sage.u.in) [%skip ~] + =/ resp=client-response:iris !<(client-response:iris q.sage.u.in) + [%done resp] + == +:: +++ disc-parse-tx-count + |= =client-response:iris + ^- @ud + ?. ?=(%finished -.client-response) 0 + ?~ full-file.client-response 0 + =/ body=@t q.data.u.full-file.client-response + =/ parsed=(each json tang) (mule |.((need (de:json:html body)))) + ?: ?=(%| -.parsed) 0 + (fall (mole |.((ni:dejs:format (~(got jo:json-utils p.parsed) /'chain_stats'/'tx_count')))) 0) +:: +++ data-to-page + |= [gn=? ct=content:tarball] + ^- [? content:tarball] + ?: =(ct *content:tarball) [%.n ct] + ?: =([/ %boom] p.sage.ct) [%.n ct] + =/ wal=wallet-data !<(wallet-data q.sage.ct) + [%.n [~ [/ %html] !>((crip (en-xml:html (detail-page wal ~ ;div; ;div;))))]] +:: +++ extract-wallet + |= =view:nexus + ^- (unit wallet-data) + ?. ?=([%ball *] view) ~ + =/ =lump:tarball (fall fil.ball.view *lump:tarball) + =/ ct=(unit content:tarball) (~(get by contents.lump) 'main.wallet_wallet') + ?~ ct ~ + ?. ?=(%wallet name.p.sage.u.ct) ~ + (mole |.(!<(wallet-data q.sage.u.ct))) +:: +++ extract-accounts + |= [=view:nexus wal=(unit wallet-data)] + ^- (list account-data) + ?~ wal ~ + ?. ?=([%ball *] view) ~ + %+ murn ~(tap by dir.ball.view) + |= [name=@ta sub=ball:tarball] + =/ sub-lump=lump:tarball (fall fil.sub *lump:tarball) + =/ ct=(unit content:tarball) (~(get by contents.sub-lump) 'data.wallet_account') + ?~ ct ~ + ?. ?=(%account name.p.sage.u.ct) ~ + =/ acct=(unit account-data) (mole |.(!<(account-data q.sage.u.ct))) + ?~ acct ~ + ?. =(wallet.u.acct fingerprint.u.wal) ~ + acct +:: +++ seed-to-cord + |= =seed + ^- @t + ?- -.seed + %t phrase.seed + %q (scot %q secret.seed) + == +:: +++ seed-to-bytes + |= =seed + ^- byts + ?- -.seed + %t [64 (to-seed:bip39 (trip phrase.seed) "")] + %q =/ val=@ `@`secret.seed + [(met 3 val) val] + == +:: +++ purpose-to-script + |= p=@ud + ^- script-type + ?+ p %p2wpkh + %44 %p2pkh + %49 %p2sh-p2wpkh + %84 %p2wpkh + %86 %p2tr + == +:: +++ derive-acct-addr + |= [xprv=@t =script-type network=?(%main %testnet3 %testnet4 %signet %regtest) chain=@ud index=@ud] + ^- (unit @t) + =/ acct-key (from-extended:bip32 (trip xprv)) + =/ chain-key (derive:acct-key chain) + =/ addr-key (derive:chain-key index) + =/ pubkey=@ public-key:addr-key + =/ bip-net (to-bip-network:wt network) + ?- script-type + %p2wpkh (encode-pubkey:bech32 bip-net [33 pubkey]) + %p2tr (encode-taproot:bech32 bip-net [32 (end [3 32] pubkey)]) + %p2pkh ~ + %p2sh-p2wpkh ~ + == +:: +++ mask-seed + |= =seed + ^- tape + ?- -.seed + %t + =/ words=(list tape) (split-words:seed-phrases (trip phrase.seed)) + =/ first=(list tape) (scag 3 words) + =/ rest=@ud (sub (lent words) 3) + =/ stars=(list tape) (reap rest "****") + =/ all=(list tape) (welp first stars) + (zing (join " " all)) + %q + =/ text=tape (scow %q secret.seed) + =/ show=@ud (min 12 (lent text)) + (weld (scag show text) "...") + == +:: +++ format-account-path + |= [purpose=seg coin-type=seg account-idx=seg] + ^- tape + =/ [ph=? pi=@ud] purpose + =/ [ch=? ci=@ud] coin-type + =/ [ah=? ai=@ud] account-idx + %+ welp "m/" + %+ welp (scow %ud pi) + %+ welp ?:(ph "'" "") + %+ welp "/" + %+ welp (scow %ud ci) + %+ welp ?:(ch "'" "") + %+ welp "/" + %+ welp (scow %ud ai) + ?:(ah "'" "") +:: +++ purpose-badge + |= purpose=seg + ^- manx + =/ [hardened=? index=@ud] purpose + =/ tooltip=tape + ?+ index (scow %ud index) + %86 "Taproot (BIP86) - 86" + %84 "Native SegWit (BIP84) - 84" + %49 "Wrapped SegWit (BIP49) - 49" + %44 "Legacy (BIP44) - 44" + == + =/ [color=tape label=tape] + ?+ index ["#888" (scow %ud index)] + %86 ["#9333ea" "86"] + %84 ["#10b981" "84"] + %49 ["#f59e0b" "49"] + %44 ["#6b7280" "44"] + == + ;div(title "{tooltip}", style "display: inline-flex; align-items: center; justify-content: center; width: 18px; height: 18px; border-radius: 50%; background: {color}; color: white; font-size: 10px; font-weight: bold; font-family: monospace; cursor: default;"): {label} +:: +++ coin-type-badge + |= coin-type=seg + ^- manx + =/ [hardened=? index=@ud] coin-type + =/ tooltip=tape + ?+ index (scow %ud index) + %0 "Bitcoin Mainnet - 0" + %1 "Bitcoin Testnet - 1" + == + =/ badge=manx + ?+ index + %- need %- de-xml:html + '' + :: + %0 + %- need %- de-xml:html + '' + :: + %1 + %- need %- de-xml:html + '' + == + ;span(title "{tooltip}", style "cursor: default;") + ;+ badge + == +:: +++ account-card + |= acct=account-data + ^- manx + =/ acct-key (from-extended:bip32 (trip xprv.acct)) + =/ acct-pubkey=@ux public-key:acct-key + =/ key-hex=tape (hexn:http-utils acct-pubkey) + =/ detail-url=tape + "/groundwire/wallet/a/{key-hex}" + =/ account-path-str=tape + (format-account-path purpose.acct coin-type.acct account-idx.acct) + ;div.p3.b1.br2.hover(style "display: flex; justify-content: space-between; align-items: center; gap: 12px;") + ;a.pointer(href detail-url, style "flex: 1; min-width: 0; text-decoration: none; color: inherit; outline: none !important;") + ;div(style "display: flex; align-items: center; gap: 8px;") + ;+ (purpose-badge purpose.acct) + ;span.s0.bold: {(trip name.acct)} + == + ;div(style "display: flex; align-items: center; gap: 8px;") + ;+ (coin-type-badge coin-type.acct) + ;div.f3.s-2.mono: {account-path-str} + == + == + ;div(style "display: flex; gap: 4px;") + ;button.p2.b1.br1.hover.pointer + =data-key key-hex + =data-name (trip name.acct) + =onclick "event.preventDefault(); event.stopPropagation(); if(confirm('Delete account ' + this.dataset.name + '?')) removeAccount(this.dataset.key)" + =style "background: var(--b2); border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; width: 32px; height: 32px; justify-content: center; outline: none;" + ;div(style "width: 16px; height: 16px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'trash-2') + == + == + == + == +:: +++ discover-form + ^- manx + ;div.p4.b2.br2.add-account-form + ;div.s0.bold.tc.hover.pointer(onclick "toggleAddPanel(this)", style "display: flex; align-items: center; justify-content: center; gap: 8px; padding-bottom: 4px;") + ; Discover Accounts + ;div.add-chevron(style "width: 16px; height: 16px; display: flex; align-items: center; transition: transform 0.2s;") + ;+ (make:fi 'chevron-down') + == + == + ;div.add-panel(style "display: none;") + ;p.f3.s-2.mb2: Scan for existing accounts by checking addresses on-chain + ;form(method "post", onsubmit "submitDiscover(event)") + ;div.fc.g2 + ;div + ;label.s-1.bold.f3: Purpose + ;select.purpose-select.p2.b1.br1.wf.hover.pointer(name "purpose-select", required "true", style "outline: none;") + ;option(value "84", selected "selected"): Native SegWit (BIP84) - 84 + ;option(value "49"): Wrapped SegWit (BIP49) - 49 + ;option(value "44"): Legacy (BIP44) - 44 + ;option(value "86"): Taproot (BIP86) - 86 + ;option(value "custom"): Custom... + == + ;div.custom-purpose-container.fc.g1(style "display: none; margin-top: 8px;") + ;input.custom-purpose-input.p2.b1.br1.wf(type "number", name "purpose-custom", placeholder "Enter purpose number", min "0", max "2147483647"); + == + == + ;div + ;label.s-1.bold.f3: Coin Type + ;select.coin-type-select.p2.b1.br1.wf.hover.pointer(name "coin-type-select", required "true", style "outline: none;") + ;option(value "0", selected "selected"): Bitcoin Mainnet - 0 + ;option(value "1"): Bitcoin Testnet - 1 + ;option(value "custom"): Custom... + == + ;div.custom-coin-type-container.fc.g1(style "display: none; margin-top: 8px;") + ;input.custom-coin-type-input.p2.b1.br1.wf(type "number", name "coin-type-custom", placeholder "Enter coin type (SLIP-44)", min "0", max "2147483647"); + == + == + ;input(type "hidden", name "action", value "discover-accounts"); + ;button.p3.b-3.f-3.br2.hover.pointer(type "submit", style "outline: none; border: none;"): Discover + == + == + == + == +:: +++ add-account-form + ^- manx + ;div.p4.b2.br2.add-account-form + ;div.s0.bold.tc.hover.pointer(onclick "toggleAddPanel(this)", style "display: flex; align-items: center; justify-content: center; gap: 8px; padding-bottom: 4px;") + ; Add Account + ;div.add-chevron(style "width: 16px; height: 16px; display: flex; align-items: center; transition: transform 0.2s;") + ;+ (make:fi 'chevron-down') + == + == + ;div.add-panel(style "display: none;") + ;p.f3.s-2.mb2: Add an account at a specific derivation path + ;form(method "post", onsubmit "submitAddAccount(event)") + ;div.fc.g2 + ;div + ;label.s-1.bold.f3: Account Name + ;input.p2.b1.br1.wf(type "text", name "account-name", placeholder "My Account", required "true"); + == + ;div + ;label.s-1.bold.f3: Purpose + ;select.purpose-select.p2.b1.br1.wf.hover.pointer(name "purpose-select", required "true", style "outline: none;") + ;option(value "84", selected "selected"): Native SegWit (BIP84) - 84 + ;option(value "49"): Wrapped SegWit (BIP49) - 49 + ;option(value "44"): Legacy (BIP44) - 44 + ;option(value "86"): Taproot (BIP86) - 86 + ;option(value "custom"): Custom... + == + ;div.custom-purpose-container.fc.g1(style "display: none; margin-top: 8px;") + ;input.custom-purpose-input.p2.b1.br1.wf(type "number", name "purpose-custom", placeholder "Enter purpose number", min "0", max "2147483647"); + ;div.f3.s-2(style "color: var(--f-2);"): Non-standard purposes may not work with other wallets + == + == + ;div + ;label.s-1.bold.f3: Coin Type + ;select.coin-type-select.p2.b1.br1.wf.hover.pointer(name "coin-type-select", required "true", style "outline: none;") + ;option(value "0", selected "selected"): Bitcoin Mainnet - 0 + ;option(value "1"): Bitcoin Testnet - 1 + ;option(value "custom"): Custom... + == + ;div.custom-coin-type-container.fc.g1(style "display: none; margin-top: 8px;") + ;input.custom-coin-type-input.p2.b1.br1.wf(type "number", name "coin-type-custom", placeholder "Enter coin type (SLIP-44)", min "0", max "2147483647"); + ;div.f3.s-2(style "color: var(--f-2);"): See SLIP-44 registry for valid coin types + == + == + ;div + ;label.s-1.bold.f3: Account Number + ;input.p2.b1.br1.wf(type "number", name "account-number", placeholder "0", min "0", max "2147483647", required "true", value "0"); + == + ;input(type "hidden", name "action", value "add-account"); + ;button.p3.b-3.f-3.br2.hover.pointer(type "submit", style "outline: none; border: none;"): Add Account + == + == + == + == +:: +++ accounts-fragment + |= accts=(list account-data) + ^- manx + =/ sorted=(list account-data) + %+ sort accts + |=([a=account-data b=account-data] (aor name.a name.b)) + ?: =(~ sorted) + ;div.p3.b1.br2.tc.f3.s-1.empty-msg: No accounts yet. Add one below. + ;div.fc.g1 + ;* %+ turn sorted + |= acct=account-data + =/ acct-key (from-extended:bip32 (trip xprv.acct)) + =/ key-hex=tape (hexn:http-utils public-key:acct-key) + ;div(id "card-{key-hex}") + ;+ (account-card acct) + == + == +:: +++ detail-page + |= [wal=wallet-data accts=(list account-data) err=manx load=manx] + ^- manx + =/ back-url=tape + "/groundwire/wallet" + ;html + ;head + ;title: {(trip name.wal)} + ;meta(charset "utf-8"); + ;meta(name "viewport", content "width=device-width, initial-scale=1"); + ;+ feather:feather + ;style + ;+ ;/ style-text + == + == + ;body + ;div(style "min-width: 650px; height: 100%;") + ;div.fc.g3.p5.ma.mw-page(style "height: 100%;") + ;div(style "flex-shrink: 0; display: flex; justify-content: space-between; align-items: center; margin-bottom: 16px;") + ;a.hover.pointer(href back-url, style "color: var(--f3); text-decoration: none;"): ← Back to Wallets + == + ;div.p4.b1.br2.mb2(style "flex-shrink: 0;") + ;h1.s2.bold.mb1: {(trip name.wal)} + ;div(style "display: flex; gap: 8px; align-items: center;") + ;span.f3.s-1: Seed: + ;code.mono.s-2.p2.b2.br1: {(mask-seed seed.wal)} + ;button.p1.b0.br1.hover.pointer + =data-seed (trip (seed-to-cord seed.wal)) + =onclick "copyToClipboard(this.dataset.seed)" + =style "background: transparent; border: 1px solid var(--b3); color: var(--f3); display: flex; align-items: center; justify-content: center; outline: none;" + ;div(style "width: 14px; height: 14px; display: flex; align-items: center; justify-content: center;") + ;+ (make:fi 'copy') + == + == + == + == + :: accounts section + ;div.fc.g2(style "flex: 1; min-height: 0;") + ;h2.s1.bold: Accounts + ;div(id "accounts-container", style "flex: 1; min-height: 0; overflow-y: auto;") + ;+ (accounts-fragment accts) + == + ;div(id "loading-container") + ;+ load + == + ;div(id "error-container") + ;+ err + == + ;+ discover-form + ;+ add-account-form + == + == + == + ;script + ;+ ;/ script-text + == + == + == +:: +++ style-text + ^- tape + """ + html, body \{ + height: 100vh !important; + overflow: hidden !important; + margin: 0 !important; + } + @keyframes slide \{ + 0% \{ transform: translateX(-100%) } + 100% \{ transform: translateX(400%) } + } + @keyframes spin \{ + from \{ transform: rotate(0deg) } + to \{ transform: rotate(360deg) } + } + """ +:: +++ script-text + ^- tape + """ + var path = window.location.pathname; + var m = path.match(/^(\\/\\w+)\\/(?:api\\/file|ball)\\/(.*?)\\/page\\.html/); + var API = m ? m[1] + '/api' : '/grubbery/api'; + var walBase = m ? m[2] : ''; + + function getPokeUrl() \{ + return API + '/poke/' + walBase + '/main.wallet_wallet?mark=json'; + } + + function submitAddAccount(e) \{ + e.preventDefault(); + var data = \{}; + new FormData(e.target).forEach(function(v, k) \{ data[k] = v; }); + fetch(getPokeUrl(), \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(data) + }).then(function(r) \{ + if (!r.ok) return r.text().then(function(t) \{ console.error('add-account error', t) }); + e.target.reset(); + }).catch(function(e) \{ console.error('add-account failed', e) }); + } + + (function() \{ + var containers = document.querySelectorAll('.add-account-form'); + containers.forEach(function(container) \{ + var purposeSelect = container.querySelector('.purpose-select'); + if (purposeSelect) purposeSelect.onchange = function() \{ + var cc = this.parentElement.querySelector('.custom-purpose-container'); + var ci = cc.querySelector('.custom-purpose-input'); + if (this.value === 'custom') \{ + cc.style.display = 'flex'; + ci.required = true; + } else \{ + cc.style.display = 'none'; + ci.required = false; + } + }; + var coinTypeSelect = container.querySelector('.coin-type-select'); + if (coinTypeSelect) coinTypeSelect.onchange = function() \{ + var cc = this.parentElement.querySelector('.custom-coin-type-container'); + var ci = cc.querySelector('.custom-coin-type-input'); + if (this.value === 'custom') \{ + cc.style.display = 'flex'; + ci.required = true; + } else \{ + cc.style.display = 'none'; + ci.required = false; + } + }; + }); + })(); + + function clearError() \{ + fetch(getPokeUrl(), \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'clear-error'}) + }); + } + + function removeAccount(key) \{ + fetch(getPokeUrl(), \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'remove-account', 'account-key': key}) + }).then(function(r) \{ + if (!r.ok) return r.text().then(function(t) \{ console.error('remove-account error', t) }); + }).catch(function(e) \{ console.error('remove-account failed', e) }); + } + + function submitDiscover(e) \{ + e.preventDefault(); + var data = \{}; + new FormData(e.target).forEach(function(v, k) \{ data[k] = v; }); + fetch(getPokeUrl(), \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(data) + }).then(function(r) \{ + if (!r.ok) return r.text().then(function(t) \{ console.error('discover error', t) }); + }).catch(function(e) \{ console.error('discover failed', e) }); + } + + function cancelDiscovery() \{ + fetch(getPokeUrl(), \{ + method: 'POST', + headers: \{'Content-Type': 'application/json'}, + body: JSON.stringify(\{action: 'cancel-discovery'}) + }); + } + + function toggleAddPanel(el) \{ + var panel = el.parentElement.querySelector('.add-panel'); + var chevron = el.querySelector('.add-chevron'); + if (panel.style.display === 'none' || !panel.style.display) \{ + panel.style.display = 'block'; + chevron.style.transform = 'rotate(180deg)'; + } else \{ + panel.style.display = 'none'; + chevron.style.transform = ''; + } + } + + function copyToClipboard(text) \{ + navigator.clipboard.writeText(text); + } + + var SSE = API + '/keep/' + walBase + '/ui/sse?mark=txt'; + var sseController = null; + var sseReader = null; + + async function connectSSE() \{ + if (sseReader) try \{ sseReader.cancel(); } catch(e) \{} + if (sseController) sseController.abort(); + sseController = new AbortController(); + console.log('SSE: connecting to', SSE); + try \{ + var r = await fetch(SSE, \{ + headers: \{Accept: 'text/event-stream'}, + signal: sseController.signal + }); + console.log('SSE: connected, status', r.status); + sseReader = r.body.getReader(); + var dec = new TextDecoder(); + var buf = ''; + while (true) \{ + var chunk = await sseReader.read(); + if (chunk.done) break; + buf += dec.decode(chunk.value, \{stream: true}); + var evts = buf.split('\\n\\n'); + buf = evts.pop(); + for (var i = 0; i < evts.length; i++) \{ + if (!evts[i].trim()) continue; + var ev = '', data = [], lines = evts[i].split('\\n'); + for (var j = 0; j < lines.length; j++) \{ + if (lines[j].indexOf('event: ') === 0) ev = lines[j].slice(7); + else if (lines[j].indexOf('data: ') === 0) data.push(lines[j].slice(6)); + } + if (!ev) continue; + var sp = ev.indexOf(' '); + if (sp < 0) continue; + var act = ev.slice(0, sp); + var name = ev.slice(sp + 2); + var html = data.join('\\n'); + console.log('SSE:', act, name, html.length + ' chars'); + if (name === 'accounts.html') \{ + var el = document.getElementById('accounts-container'); + if (el) el.innerHTML = html; + } else if (name === 'error.html') \{ + var el = document.getElementById('error-container'); + if (el) el.innerHTML = html; + } else if (name === 'loading.html') \{ + var el = document.getElementById('loading-container'); + if (el) el.innerHTML = html; + } + } + } + } catch (e) \{ + if (e.name !== 'AbortError') \{ + console.error('SSE: error', e); + setTimeout(connectSSE, 2000); + } + } + } + window.addEventListener('beforeunload', function() \{ + if (sseReader) try \{ sseReader.cancel(); } catch(e) \{} + if (sseController) sseController.abort(); + }); + connectSSE(); + """ +-- diff --git a/desk/gub/sys.kelvin b/desk/gub/sys.kelvin new file mode 100644 index 0000000..ce8a2e8 --- /dev/null +++ b/desk/gub/sys.kelvin @@ -0,0 +1 @@ +[%grubbery 21.000.000] diff --git a/desk/lib/ball-api.hoon b/desk/lib/ball-api.hoon new file mode 100644 index 0000000..17a95b1 --- /dev/null +++ b/desk/lib/ball-api.hoon @@ -0,0 +1,675 @@ +:: lib/ball-api: HTTP API handlers for the grubbery namespace +:: +:: Provides request fiber logic for /grubbery/api/* endpoints. +:: Used by root nexus on-file for /sys/eyre/requests/ fibers. +:: +/+ nexus, tarball, server, multipart, http-utils, html-utils, + json-utils, zlib, bytestream, io=fiberio +|% +:: HTTP response helper — pokes /sys/eyre/main.server-state +:: +++ srv ~(. http-res:io &+&+[/sys/eyre %'main.server-state']) +:: +dispatch: entry point for request fibers +:: +++ dispatch + |= [eyre-id=@ta src=@p req=inbound-request:eyre site=path args=quay:eyre] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< our=@p bind:m get-our:io + ?. =(src our) + (send-error eyre-id 403 'Forbidden') + ?> ?=([%grubbery %api *] site) + ~& >> ["%ball-api: dispatch" method.request.req site] + =/ rest=path t.t.site + :: Route by first segment: file, kids, tree, tar, dir + ?~ rest + (send-error eyre-id 400 'Missing endpoint: file, kids, tree, tar, dir') + =/ endpoint=@tas i.rest + =/ api-path=path t.rest + ?+ [method.request.req endpoint] + (send-error eyre-id 405 'Method Not Allowed') + :: GET /file/... — peek file, convert to mime + [%'GET' %file] (serve-file-peek eyre-id api-path args) + :: GET /kids/... — immediate children (files + subdirs) + [%'GET' %kids] (serve-kids eyre-id api-path) + :: GET /tree/... — recursive tree with marks + [%'GET' %tree] (serve-tree eyre-id api-path) + :: GET /tar/... — tarball download + [%'GET' %tar] (serve-tar eyre-id api-path) + :: PUT /file/... — create file + [%'PUT' %file] (serve-file-make eyre-id api-path args body.request.req) + :: PUT /dir/... — create directory + [%'PUT' %dir] (serve-dir-make eyre-id api-path) + :: POST /poke/... — poke file process + [%'POST' %poke] (serve-post eyre-id api-path args body.request.req %poke) + :: POST /over/... — overwrite file content + [%'POST' %over] (serve-post eyre-id api-path args body.request.req %over) + :: GET /keep/... — SSE stream of changes + [%'GET' %keep] (serve-keep eyre-id api-path args req) + :: DELETE /file/... — delete file + [%'DELETE' %file] (serve-file-cull eyre-id api-path) + :: DELETE /dir/... — delete directory + [%'DELETE' %dir] (serve-dir-cull eyre-id api-path) + :: GET /sand/... — get directory permissions as JSON + [%'GET' %sand] (serve-sand-peek eyre-id api-path) + :: GET /weir/... — get single directory weir as JSON + [%'GET' %weir] (serve-weir-peek eyre-id api-path) + :: PUT /weir/... — replace weir with JSON body + [%'PUT' %weir] (serve-weir-put eyre-id api-path body.request.req) + :: DELETE /weir/... — clear weir + [%'DELETE' %weir] (serve-weir-del eyre-id api-path) + :: POST /upload/... — multipart file/directory upload + [%'POST' %upload] (serve-upload eyre-id api-path req) + :: GET /manu/... — documentation for a path + [%'GET' %manu] (serve-manu eyre-id api-path) + == +:: +send-error: respond with HTTP error +:: +++ send-error + |= [eyre-id=@ta code=@ud msg=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + (send-simple:srv eyre-id [[code ~] `(as-octs:mimes:html msg)]) +:: +send-ok: respond with 200 and message +:: +++ send-ok + |= [eyre-id=@ta msg=@t] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + (send-simple:srv eyre-id [[200 ~] `(as-octs:mimes:html msg)]) +:: +send-created: respond with 201 Created +:: +++ send-created + |= eyre-id=@ta + =/ m (fiber:fiber:nexus ,~) + ^- form:m + (send-simple:srv eyre-id [[201 ~] `(as-octs:mimes:html 'Created')]) +:: +send-mime: respond with 200 and mime body +:: +++ send-mime + |= [eyre-id=@ta =mime] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + (send-simple:srv eyre-id (mime-response:http-utils mime)) +:: +maybe-convert: optionally convert cage through ?mark= param +:: Returns ~ on error (error response already sent). +:: +++ maybe-convert + |= [eyre-id=@ta =sage:tarball mark-param=(unit @t)] + =/ m (fiber:fiber:nexus ,(unit sage:tarball)) + ^- form:m + ?~ mark-param (pure:m `sage) + =/ target-mark=@tas u.mark-param + ?: =(name.p.sage target-mark) (pure:m `sage) + ;< tube=(unit tube:clay) bind:m (get-tube:io [%& %| /code] [p.sage [/ target-mark]]) + ?~ tube + ;< ~ bind:m (send-error eyre-id 400 'No tube for mark conversion') + (pure:m ~) + =/ result=(each vase tang) (mule |.((u.tube q.sage))) + ?: ?=(%| -.result) + ;< ~ bind:m (send-error eyre-id 500 'Mark conversion failed') + (pure:m ~) + (pure:m `[[/ target-mark] p.result]) +:: +send-json: respond with JSON body +:: +++ send-json + |= [eyre-id=@ta =json] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ bod=octs (as-octs:mimes:html (en:json:html json)) + (send-simple:srv eyre-id (mime-response:http-utils [/application/json bod])) +:: +peek-root: peek the root ball +:: +++ peek-root + =/ m (fiber:fiber:nexus ,(unit ball:tarball)) + ^- form:m + ;< root-seen=seen:nexus bind:m (peek:io [%& %| ~] ~) + ?. ?=([%& %ball *] root-seen) + (pure:m ~) + (pure:m `ball.p.root-seen) +:: +serve-file-peek: GET /file — peek grub, convert to mime +:: +++ serve-file-peek + |= [eyre-id=@ta api-path=path args=(list [key=@t value=@t])] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?~ api-path + (send-error eyre-id 400 'File path required') + ;< root=(unit ball:tarball) bind:m peek-root + ?~ root + (send-error eyre-id 500 'Peek failed') + =/ parent=path (snip `path`api-path) + =/ name=@ta (rear api-path) + =/ parent-ball=ball:tarball (~(dip ba:tarball u.root) parent) + =/ content-data=(unit content:tarball) + ?~ fil.parent-ball ~ + (~(get by contents.u.fil.parent-ball) name) + ?~ content-data + (send-error eyre-id 404 'Not found') + =/ =sage:tarball sage.u.content-data + =/ mark-param=(unit @t) (get-key:kv:html-utils 'mark' args) + ;< converted=(unit sage:tarball) bind:m (maybe-convert eyre-id sage mark-param) + ?~ converted (pure:m ~) + ;< =mime bind:m (sage-to-mime:io u.converted) + (send-mime eyre-id mime) +:: +serve-kids: GET /kids — immediate children (files + subdirs) +:: +++ serve-kids + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< root=(unit ball:tarball) bind:m peek-root + ?~ root + (send-error eyre-id 500 'Peek failed') + =/ sub=(unit ball:tarball) (~(dap ba:tarball u.root) api-path) + ?~ sub + (send-error eyre-id 404 'Not found') + =/ files=(list @ta) (~(lis ba:tarball u.sub) /) + =/ subs=(list @ta) (~(lss ba:tarball u.sub) /) + %+ send-json eyre-id + %- pairs:enjs:format + :~ ['files' [%a (turn files |=(n=@ta s+n))]] + ['dirs' [%a (turn subs |=(n=@ta s+n))]] + == +:: +serve-tree: GET /tree — recursive tree with marks +:: +++ serve-tree + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< root=(unit ball:tarball) bind:m peek-root + ?~ root + (send-error eyre-id 500 'Peek failed') + =/ sub=(unit ball:tarball) (~(dap ba:tarball u.root) api-path) + ?~ sub + (send-error eyre-id 404 'Not found') + (send-json eyre-id (tree-to-json:tarball (ball-to-tree:tarball u.sub))) +:: +serve-tar: GET /tar — tarball download +:: +++ serve-tar + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< root-seen=seen:nexus bind:m (peek:io [%& %| ~] ~) + ?. ?=([%& %ball *] root-seen) + (send-error eyre-id 500 'Peek failed') + =/ root=ball:tarball ball.p.root-seen + =/ sub=(unit ball:tarball) (~(dap ba:tarball root) api-path) + ?~ sub + (send-error eyre-id 404 'Not found') + ;< now=@da bind:m get-time:io + ;< conversions=(map bars:tarball tube:clay) bind:m + (get-blot-conversions:io u.sub) + =/ tar=tarball:tarball + (~(make-tarball gen:tarball [now conversions]) api-path u.sub) + =/ tar-data=octs (encode-tarball:tarball tar) + =/ dir-name=tape + ?~(api-path "root" (trip (rear api-path))) + =/ headers=header-list:http + :~ ['content-type' 'application/x-tar'] + ['content-disposition' (crip "attachment; filename=\"{dir-name}.tar\"")] + == + (send-simple:srv eyre-id [[200 headers] `tar-data]) +:: +serve-file-make: PUT /file — create file +:: +++ serve-file-make + |= [eyre-id=@ta api-path=path args=(list [key=@t value=@t]) body=(unit octs)] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?~ api-path + (send-error eyre-id 400 'File path required') + ?~ body + (send-error eyre-id 400 'Missing body') + =/ =rail:tarball [(snip `path`api-path) (rear api-path)] + =/ =road:tarball [%& %& rail] + ;< exists=? bind:m (peek-exists:io road) + ?: exists + (send-error eyre-id 409 'Already exists') + =/ mark-param=(unit @t) (get-key:kv:html-utils 'mark' args) + =/ gain=? =('true' (fall (get-key:kv:html-utils 'gain' args) '')) + =/ mime-sage=sage:tarball [[/ %mime] !>(`mime`[/application/octet-stream u.body])] + ;< converted=(unit sage:tarball) bind:m (maybe-convert eyre-id mime-sage mark-param) + ?~ converted (pure:m ~) + ;< ~ bind:m (make:io road [%| gain u.converted ~]) + (send-created eyre-id) +:: +serve-dir-make: PUT /dir — create directory +:: +++ serve-dir-make + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?~ api-path + (send-error eyre-id 400 'Directory path required') + =/ dir-name=@ta (rear api-path) + =/ dir-path=path (snoc (snip `path`api-path) dir-name) + =/ =road:tarball [%& %| dir-path] + ;< exists=? bind:m (peek-exists:io road) + ?: exists + (send-error eyre-id 409 'Already exists') + =/ init-ball=ball:tarball [`[~ ~ ~] ~] + ;< ~ bind:m (make:io road &+[[~ ~] [~ ~] init-ball]) + (send-created eyre-id) +:: +serve-post: POST /poke, /over — send dart to file +:: +++ serve-post + |= [eyre-id=@ta api-path=path args=(list [key=@t value=@t]) body=(unit octs) op=?(%poke %over)] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?~ api-path + (send-error eyre-id 400 'File path required') + ?~ body + (send-error eyre-id 400 'Missing body') + =/ =road:tarball [%& %& (snip `path`api-path) (rear api-path)] + ;< exists=? bind:m (peek-exists:io road) + ?. exists + (send-error eyre-id 404 'Not found') + =/ mark-param=(unit @t) (get-key:kv:html-utils 'mark' args) + =/ mime-sage=sage:tarball [[/ %mime] !>(`mime`[/application/octet-stream u.body])] + ;< converted=(unit sage:tarball) bind:m (maybe-convert eyre-id mime-sage mark-param) + ?~ converted (pure:m ~) + ~& >> ["%ball-api: serve-post" op road p.u.converted] + ;< ~ bind:m + ?- op + %poke (poke:io road u.converted) + %over (over:io road u.converted) + == + ~& >> "%ball-api: serve-post done" + (send-ok eyre-id 'OK') +:: +serve-file-cull: DELETE /file — delete file +:: +++ serve-file-cull + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?~ api-path + (send-error eyre-id 400 'File path required') + =/ =road:tarball [%& %& (snip `path`api-path) (rear api-path)] + ;< exists=? bind:m (peek-exists:io road) + ?. exists + (send-error eyre-id 404 'Not found') + ;< ~ bind:m (cull:io road) + (send-ok eyre-id 'Deleted') +:: +serve-dir-cull: DELETE /dir — delete directory +:: +++ serve-dir-cull + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?~ api-path + (send-error eyre-id 400 'Directory path required') + =/ =road:tarball [%& %| api-path] + ;< exists=? bind:m (peek-exists:io road) + ?. exists + (send-error eyre-id 404 'Not found') + ;< ~ bind:m (cull:io road) + (send-ok eyre-id 'Deleted') +:: +ensure-parents: create parent directories if they don't exist +:: +++ ensure-parents + |= [base=path segments=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?~ segments (pure:m ~) + =/ next=path (snoc base i.segments) + =/ dir-road=road:tarball [%& %| next] + ;< exists=? bind:m (peek-exists:io dir-road) + ?. exists + ;< ~ bind:m + (make:io dir-road &+[[~ ~] [~ ~] `[~ ~ ~] ~]) + (ensure-parents next t.segments) + (ensure-parents next t.segments) +:: +serve-upload: POST /upload — multipart file/directory upload +:: +++ serve-upload + |= [eyre-id=@ta tree-path=path req=inbound-request:eyre] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ parts=(unit (list [@t part:multipart])) + (de-request:multipart header-list.request.req body.request.req) + ?~ parts + (send-error eyre-id 400 'Invalid multipart data') + :: Build mime->mark tubes for uploaded file extensions + =/ exts=(set @ta) + %- ~(gas in *(set @ta)) + %+ murn u.parts + |= [field-name=@t =part:multipart] + ?. =('file' field-name) ~ + ?~ file.part ~ + (parse-extension:tarball u.file.part) + ;< conversions=(map bars:tarball tube:clay) bind:m + =/ m (fiber:fiber:nexus ,(map bars:tarball tube:clay)) + =/ ext-list=(list @ta) ~(tap in exts) + =| convs=(map bars:tarball tube:clay) + |- ^- form:m + ?~ ext-list (pure:m convs) + =/ =bars:tarball [[/ %mime] [/ i.ext-list]] + ;< tube=(unit tube:clay) bind:m + (get-tube:io [%& %| /code] bars) + =? convs ?=(^ tube) + (~(put by convs) bars u.tube) + $(ext-list t.ext-list) + :: Process each file part directly + =| created=(list @t) + =/ remaining u.parts + |- + ?~ remaining + =/ response=json + %- pairs:enjs:format + :~ ['path' s+?~(tree-path '/' (spat tree-path))] + ['created' [%a (turn (flop created) |=(n=@t s+n))]] + == + =/ bod=octs (as-octs:mimes:html (en:json:html response)) + (send-simple:srv eyre-id [[201 ~[['content-type' 'application/json']]] `bod]) + =/ [field-name=@t file-part=part:multipart] i.remaining + ?. =('file' field-name) + $(remaining t.remaining) + =/ filename-raw=@t + (fall file.file-part 'uploaded-file') + :: Parse filename — may include path for directory uploads + =/ filename-path=path + (fall (rush (crip (weld "/" (trip filename-raw))) stap) ~) + ?~ filename-path + $(remaining t.remaining) + :: Split into parent dirs and leaf filename + =/ [file-parent=path file-name=@ta] + ?~ t.filename-path + [~ i.filename-path] + [(snip `(list @ta)`filename-path) (rear filename-path)] + =/ full-path=path (weld tree-path file-parent) + :: Build mime cage and try mark conversion + =/ file-mime=mime + :_ (as-octs:mimes:html body.file-part) + (fall type.file-part /application/octet-stream) + =/ mime-sage=sage:tarball [[/ %mime] !>(file-mime)] + =/ ext=(unit @ta) (parse-extension:tarball file-name) + =/ final-sage=sage:tarball + ?~ ext mime-sage + =/ =bars:tarball [[/ %mime] [/ u.ext]] + =/ tube=(unit tube:clay) (~(get by conversions) bars) + ?~ tube mime-sage + =/ result=(each vase tang) (mule |.((u.tube q.mime-sage))) + ?: ?=(%| -.result) mime-sage + [[/ u.ext] p.result] + :: Ensure parent dirs exist + ;< ~ bind:m (ensure-parents tree-path file-parent) + :: Create or overwrite file — keep full filename + =/ =road:tarball [%& %& full-path file-name] + ;< exists=? bind:m (peek-exists:io road) + ?: exists + ;< ~ bind:m (over:io road final-sage) + $(remaining t.remaining, created [filename-raw created]) + ;< ~ bind:m (make:io road |+[%.n final-sage ~]) + $(remaining t.remaining, created [filename-raw created]) +:: +serve-sand-peek: GET /sand — directory permissions as JSON +:: +++ serve-sand-peek + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< dir-seen=seen:nexus bind:m (peek:io [%& %| api-path] ~) + ?. ?=([%& %ball *] dir-seen) + (send-error eyre-id 404 'Not found') + (send-json eyre-id (sand-to-json:nexus sand.p.dir-seen)) +:: +serve-weir-peek: GET /weir — single directory weir as JSON +:: +++ serve-weir-peek + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< dir-seen=seen:nexus bind:m (peek:io [%& %| api-path] ~) + ?. ?=([%& %ball *] dir-seen) + (send-error eyre-id 404 'Not found') + =/ =weir:nexus (fall fil.sand.p.dir-seen *weir:nexus) + (send-json eyre-id (weir-to-json:nexus weir)) +:: +serve-weir-put: PUT /weir — replace weir from JSON body +:: +++ serve-weir-put + |= [eyre-id=@ta api-path=path body=(unit octs)] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?~ body + (send-error eyre-id 400 'Missing body') + =/ jon=(unit json) (de:json:html q.u.body) + ?~ jon + (send-error eyre-id 400 'Invalid JSON') + =/ parsed=(each weir:nexus tang) + (mule |.((weir-from-json:nexus u.jon))) + ?: ?=(%| -.parsed) + (send-error eyre-id 400 'Invalid weir JSON') + ;< ~ bind:m (sand:io [%& %| api-path] `p.parsed) + (send-ok eyre-id 'OK') +:: +serve-weir-del: DELETE /weir — clear weir +:: +++ serve-weir-del + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ;< ~ bind:m (sand:io [%& %| api-path] ~) + (send-ok eyre-id 'Deleted') +:: +serve-manu: GET /manu — documentation for a path +:: +++ serve-manu + |= [eyre-id=@ta api-path=path] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + =/ file-road=(unit road:tarball) + ?~ api-path ~ + `[%& %& (snip `path`api-path) (rear api-path)] + ;< is-file=? bind:m + ?~ file-road (pure:(fiber:fiber:nexus ,?) %.n) + (peek-exists:io u.file-road) + =/ =road:tarball + ?: is-file (need file-road) + [%& %| api-path] + ;< text=@t bind:m (manu-road:io road) + ?: =('' text) + (send-ok eyre-id 'No documentation') + (send-ok eyre-id text) +:: +serve-keep: GET /keep — SSE stream of changes +:: +++ serve-keep + |= [eyre-id=@ta api-path=path args=(list [key=@t value=@t]) req=inbound-request:eyre] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + ?. (is-sse-request:http-utils req) + (send-error eyre-id 400 'Requires Accept: text/event-stream') + =/ mark-param=(unit @t) (get-key:kv:html-utils 'mark' args) + :: Send SSE response header + ;< ~ bind:m + (send-header:srv eyre-id sse-header:http-utils) + :: Determine road: check if api-path points to a file + =/ file-road=(unit road:tarball) + ?~ api-path ~ + `[%& %& (snip `path`api-path) (rear api-path)] + ;< is-file=? bind:m + ?~ file-road (pure:(fiber:fiber:nexus ,?) %.n) + (peek-exists:io u.file-road) + =/ =road:tarball + ?: is-file (need file-road) + [%& %| api-path] + :: Subscribe to changes — bond returns initial view + ;< init=view:nexus bind:m (keep:io /keep road ~) + =/ prev-born=born:nexus + ?. ?=([%ball *] init) *born:nexus + born.init + :: Send "old" events for initial state + ;< ~ bind:m + ?+ init (pure:m ~) + :: Single file — send one "old" event + [%file *] + =/ file-name=@t + ?~ api-path '/' + (rear api-path) + =/ id=@t (scot %ud ud.file.sack.init) + =/ event-name=@t (crip "old {(trip file-name)}") + ;< body=@t bind:m (sage-to-txt sage.init mark-param) + =/ data=wain (to-wain:format body) + =/ =sse-event:http-utils [`id `event-name data] + (send-data:srv eyre-id `(sse-encode:http-utils ~[sse-event])) + :: Directory — send "old" for each file + [%ball *] + =/ root=ball:tarball ball.init + (send-old-dir eyre-id root born.init / mark-param) + == + :: Start keep-alive timer + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + :: Event loop + |- + ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /keep) + ?- -.nw + %wake + ;< ~ bind:m + (send-data:srv eyre-id `sse-keep-alive:http-utils) + ;< now=@da bind:m get-time:io + ;< ~ bind:m (send-wait:io (add now ~s30)) + $ + :: + %news + ?+ view.nw $ + :: Single file changed + [%file *] + =/ =sage:tarball sage.view.nw + =/ id=@t (scot %ud ud.file.sack.view.nw) + =/ file-name=@t + ?~ api-path '/' + (rear api-path) + =/ event-name=@t (crip "upd {(trip file-name)}") + ;< body=@t bind:m (sage-to-txt sage mark-param) + =/ data=wain (to-wain:format body) + =/ =sse-event:http-utils [`id `event-name data] + ;< ~ bind:m + (send-data:srv eyre-id `(sse-encode:http-utils ~[sse-event])) + $ + :: Directory changed — diff born to find changed lanes + [%ball *] + =/ root=ball:tarball ball.view.nw + =/ root-born=born:nexus born.view.nw + =/ what=(set lane:tarball) (diff-born-state:nexus prev-born root-born) + =/ old-born=born:nexus prev-born + =. prev-born root-born + =/ lanes=(list lane:tarball) ~(tap in what) + |- + ?~ lanes ^$ + :: Skip directory lanes (TBD) + ?: ?=(%| -.i.lanes) + $(lanes t.lanes) + :: Lanes are relative to the subscribed subtree + =/ file-path=path path.p.i.lanes + =/ file-name=@ta name.p.i.lanes + =/ lane-path=@t (spat (snoc file-path file-name)) + :: Get file cass from new born for event ID + =/ sub-born=born:nexus (~(dip of root-born) file-path) + =/ file-sack=(unit sack:nexus) + ?~ fil.sub-born ~ + (~(get by bags.u.fil.sub-born) file-name) + =/ id=@t + ?~ file-sack '0' + (scot %ud ud.file.u.file-sack) + :: Check if lane existed in old born + =/ old-sub=born:nexus (~(dip of old-born) file-path) + =/ old-sack=(unit sack:nexus) + ?~ fil.old-sub ~ + (~(get by bags.u.fil.old-sub) file-name) + :: Get file content from the ball + =/ sub=ball:tarball (~(dip ba:tarball root) file-path) + =/ ct=(unit content:tarball) + ?~ fil.sub ~ + (~(get by contents.u.fil.sub) file-name) + ?~ ct + :: File gone — send delete event + =/ event-name=@t (crip "del {(trip lane-path)}") + =/ =sse-event:http-utils [`id `event-name ~['']] + ;< ~ bind:m + (send-data:srv eyre-id `(sse-encode:http-utils ~[sse-event])) + $(lanes t.lanes) + :: File exists — new or upd + =/ action=@t ?~(old-sack 'new' 'upd') + =/ event-name=@t (crip "{(trip action)} {(trip lane-path)}") + =/ =sage:tarball sage.u.ct + ;< body=@t bind:m (sage-to-txt sage mark-param) + =/ data=wain (to-wain:format body) + =/ =sse-event:http-utils [`id `event-name data] + ;< ~ bind:m + (send-data:srv eyre-id `(sse-encode:http-utils ~[sse-event])) + $(lanes t.lanes) + == + == +:: +send-old-dir: send "old" SSE events for all files in a ball +:: +++ send-old-dir + |= [eyre-id=@ta b=ball:tarball =born:nexus here=path mark-param=(unit @t)] + =/ m (fiber:fiber:nexus ,~) + ^- form:m + :: Send "old" for files in this directory + ;< ~ bind:m + ?~ fil.b (pure:m ~) + =/ files=(list [@ta content:tarball]) ~(tap by contents.u.fil.b) + |- + ?~ files (pure:m ~) + =/ [file-name=@ta =content:tarball] i.files + =/ lane-path=@t (spat (snoc here file-name)) + =/ sub-born=born:nexus (~(dip of born) here) + =/ file-sack=(unit sack:nexus) + ?~ fil.sub-born ~ + (~(get by bags.u.fil.sub-born) file-name) + =/ id=@t + ?~ file-sack '0' + (scot %ud ud.file.u.file-sack) + =/ event-name=@t (crip "old {(trip lane-path)}") + ;< body=@t bind:m (sage-to-txt sage.content mark-param) + =/ data=wain (to-wain:format body) + =/ =sse-event:http-utils [`id `event-name data] + ;< ~ bind:m + (send-data:srv eyre-id `(sse-encode:http-utils ~[sse-event])) + $(files t.files) + :: Recurse into subdirectories + =/ dirs=(list [@ta ball:tarball]) ~(tap by dir.b) + |- + ?~ dirs (pure:m ~) + =/ [dir-name=@ta sub=ball:tarball] i.dirs + ;< ~ bind:m (send-old-dir eyre-id sub born (snoc here dir-name) mark-param) + $(dirs t.dirs) +:: +:: +sage-to-txt: convert sage to text for SSE data +:: +:: With mark param: sage -> target mark -> txt +:: Without: sage -> txt directly +:: Falls back to mime body extraction if no txt tube exists. +:: +++ sage-to-txt + |= [=sage:tarball mark-param=(unit @t)] + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + :: Step 1: optionally convert to intermediate mark + ?~ mark-param + (sage-to-txt-raw sage) + =/ target-mark=@tas u.mark-param + ?: =(name.p.sage target-mark) + (sage-to-txt-raw sage) + ;< tube=(unit tube:clay) bind:m (get-tube:io [%& %| /code] [p.sage [/ target-mark]]) + ?~ tube + (sage-to-txt-raw sage) + =/ result=(each vase tang) (mule |.((u.tube q.sage))) + ?: ?=(%| -.result) + (sage-to-txt-raw sage) + (sage-to-txt-raw [[/ target-mark] p.result]) +:: +sage-to-txt-raw: convert a single sage to @t +:: +++ sage-to-txt-raw + |= =sage:tarball + =/ m (fiber:fiber:nexus ,@t) + ^- form:m + ?: =(%txt name.p.sage) + (pure:m (of-wain:format !<(wain q.sage))) + ;< tube=(unit tube:clay) bind:m (get-tube:io [%& %| /code] [p.sage [/ %txt]]) + ?~ tube + :: Fallback: convert to mime and extract body as text + ;< =mime bind:m (sage-to-mime:io sage) + (pure:m `@t`(end [3 p.q.mime] q.q.mime)) + =/ result=(each vase tang) (mule |.((u.tube q.sage))) + ?: ?=(%| -.result) + ;< =mime bind:m (sage-to-mime:io sage) + (pure:m `@t`(end [3 p.q.mime] q.q.mime)) + (pure:m (of-wain:format !<(wain p.result))) +-- diff --git a/desk/lib/build.hoon b/desk/lib/build.hoon index 7d5dbd3..ae6b600 100644 --- a/desk/lib/build.hoon +++ b/desk/lib/build.hoon @@ -12,10 +12,18 @@ :: local/bar.hoon relative (0 up, same as ./) :: ../../lib/baz.hoon relative (2 up) :: -/+ tarball +/+ tarball, nexus, marks |% -+$ import [name=@tas =road:tarball] -+$ resolved-import [name=@tas =rail:tarball] ++$ import + $% [%file name=@tas =road:tarball] :: /< name path + [%bare =road:tarball] :: /< * path + [%mime name=@tas =road:tarball] :: /& name path + == ++$ resolved-import + $% [%file name=@tas =rail:tarball] + [%bare =rail:tarball] + [%mime name=@tas =lane:tarball] :: file rail or dir fold + == +$ source-map (map rail:tarball @t) +$ file-info $: src=@t @@ -31,6 +39,19 @@ deps=(map rail:tarball (set rail:tarball)) keys=(map rail:tarball @uv) == +:: +bins-to-cache: reconstruct input-keyed build-cache +:: Looks up each input ckey directly in bins. +:: +++ bins-to-cache + |= [=keys:nexus =bins:nexus] + ^- build-cache + %+ roll ~(tap by keys) + |= [[=rail:tarball input-ckey=@uv] acc=build-cache] + ?: (~(has by acc) input-ckey) acc + =/ entry=(unit [refs=@ud =built:nexus]) (~(get by bins) input-ckey) + ?~ entry acc + ?. ?=(%vase -.built.u.entry) acc + (~(put by acc) input-ckey vase.built.u.entry) :: +parse-imports: extract /< imports from source text :: :: Returns list of imports and remaining source (as cord). @@ -50,8 +71,11 @@ :: Skip blank lines and comments between imports ?: |(=(~ line) =("" (strip line)) (is-comment line)) $(lines t.lines) - :: Try to parse an import line - =/ parsed=(unit import) (rust line import-rule) + :: Try each import rune: /< /& /$ /% + =/ parsed=(unit import) + =/ try (rust line import-rule) + ?^ try try + (rust line mime-rule) ?~ parsed :: Not an import — rest is body [%& [(flop imports) (of-wain:format lines)]] @@ -68,20 +92,70 @@ ?~ t | ?~ t.t | &(=(i.t ':') =(i.t.t ':')) -:: +import-rule: parse a single /< name path line +:: +import parsers :: -:: /lib/foo.hoon → [%& %& /lib %foo.hoon] -:: ./foo/bar.hoon → [%| 0 %& /foo %bar.hoon] -:: foo/bar.hoon → [%| 0 %& /foo %bar.hoon] -:: ../../foo/bar.hoon → [%| 2 %& /foo %bar.hoon] +:: /< name path file import with face +:: /< * path file import without face (bare) +:: /& name path mime import (file or directory) +:: /* name %mark path import file as mark type +:: /$ name %a %b tube import (mark conversion gate) :: ++ seg (cook crip (plus ;~(pose aln hep dot))) :: ++ import-rule + ;~ pose + bare-rule + named-import-rule + == +:: /< name path — named file import +:: +++ named-import-rule + %+ cook |=(i=[name=@tas =road:tarball] [%file i]) ;~ pfix ;~(plug fas gal gap) ;~(plug sym ;~(pfix gap ;~(pose abs-path rel-path))) == +:: /< * path — bare file import (no face) +:: +++ bare-rule + %+ cook |=(r=road:tarball [%bare r]) + ;~ pfix + ;~(plug fas gal gap tar gap) + ;~(pose abs-path rel-path) + == +:: /& name path — mime import (file or directory) +:: +:: /& name /assets/logo.png → file: single mime +:: /& name /assets/images/ → directory: (axal (map @ta mime)) +:: Trailing / distinguishes directory from file. +:: +++ mime-rule + %+ cook |=(i=[name=@tas =road:tarball] [%mime i]) + ;~ pfix + ;~(plug fas pam gap) + ;~(plug sym ;~(pfix gap ;~(pose abs-dir rel-dir abs-path rel-path))) + == +:: +++ abs-dir + %+ cook + |= pax=path + ^- road:tarball + [%& %| pax] + ;~(pfix fas ;~(sfix (most fas seg) fas)) +:: +++ rel-dir + %+ cook + |= [ups=@ud =path] + ^- road:tarball + [%| ups %| path] + ;~ plug + ;~ pose + (cook lent (plus ;~(sfix (jest '..') fas))) + (cold 0 ;~(plug dot fas)) + (easy 0) + == + ;~(sfix (most fas seg) fas) + == :: ++ abs-path %+ cook @@ -117,20 +191,21 @@ :: source line and caret pointer on parse failure. :: ++ parse-hoon - |= [pax=path src=@t] + |= [pax=path src=@t line-offset=@ud] ^- (each hoon tang) =/ vaz (vang & pax) =/ vex=(like hoon) - ((full (ifix [gay gay] tall:vaz)) [1 1] (trip src)) + ((full (ifix [gay gay] tall:vaz)) [(add 1 line-offset) 1] (trip src)) ?^ q.vex [%& p.u.q.vex] =/ lyn=@ud p.p.vex =/ col=@ud q.p.vex =/ =wain (to-wain:format src) + =/ body-lyn=@ud (sub lyn line-offset) :- %| :~ [%leaf (runt [(dec col) '-'] "^")] - ?: (gth lyn (lent wain)) + ?: (gth body-lyn (lent wain)) [%leaf "<>"] - [%leaf (trip (snag (dec lyn) wain))] + [%leaf (trip (snag (dec body-lyn) wain))] [%leaf "syntax error at [{} {}] in {(spud pax)}"] == :: +compile-hoon: compile a hoon AST against a subject vase @@ -155,21 +230,21 @@ :: Convenience arm that chains +parse-hoon and +compile-hoon. :: ++ build-hoon - |= [sut=vase pax=path src=@t] + |= [sut=vase pax=path src=@t line-offset=@ud] ^- (each vase tang) - =/ parsed (parse-hoon pax src) + =/ parsed (parse-hoon pax src line-offset) ?: ?=(%| -.parsed) parsed (compile-hoon sut pax p.parsed) -:: +extract-src: extract source text from a cage +:: +extract-src: extract source text from a sage :: :: Handles %hoon and %txt marks. :: ++ extract-src - |= =cage + |= =sage:tarball ^- @t - ?+ p.cage !! - %hoon !<(@t q.cage) - %txt (of-wain:format !<(wain q.cage)) + ?+ name.p.sage !! + %hoon !<(@t q.sage) + %txt (of-wain:format !<(wain q.sage)) == :: +render-tang: render a tang to text for display :: @@ -187,11 +262,25 @@ ++ resolve-import |= [here=rail:tarball =import] ^- (unit resolved-import) - =/ res=(unit lane:tarball) - (lane-from-road:tarball [%& here] road.import) - ?~ res ~ - ?. ?=(%& -.u.res) ~ - `[name.import p.u.res] + ?- -.import + %file + =/ res=(unit lane:tarball) + (lane-from-road:tarball [%& here] road.import) + ?~ res ~ + ?. ?=(%& -.u.res) ~ + `[%file name.import p.u.res] + %bare + =/ res=(unit lane:tarball) + (lane-from-road:tarball [%& here] road.import) + ?~ res ~ + ?. ?=(%& -.u.res) ~ + `[%bare p.u.res] + %mime + =/ res=(unit lane:tarball) + (lane-from-road:tarball [%& here] road.import) + ?~ res ~ + `[%mime name.import u.res] + == :: +find-hoon-sources: extract source text from all %hoon files in a ball :: ++ find-hoon-sources @@ -200,9 +289,9 @@ %- ~(gas by *source-map) %+ murn ~(tap ba:tarball ball) |= [=rail:tarball =content:tarball] - ?. =(%hoon p.cage.content) ~ + ?. =([/ %hoon] p.sage.content) ~ ?. (has-hoon-ext name.rail) ~ - `[rail !<(@t q.cage.content)] + `[rail !<(@t q.sage.content)] :: +has-hoon-ext: check if filename ends in .hoon :: ++ has-hoon-ext @@ -255,14 +344,27 @@ :: paths, topologically sorts, and compiles bottom-up. Each file's :: imports are added as named faces in its compilation subject. :: -:: Cache keys are content-based: hash of (source hash + sorted dep -:: cache keys). Same content + same deps = cache hit regardless of path. +:: Cache keys are content-based: hash of (subject + source + path + +:: sorted dep cache keys). Same inputs = same key = cache hit. +:: +:: Every file gets a key regardless of compilation outcome — parse +:: errors, cycle errors, dep failures, and compile failures all +:: produce deterministic keys from their inputs. This ensures the +:: reload-changed-nexuses invariant holds: same key ↔ same artifact. :: ++ build-all |= [sut=vase =ball:tarball =build-cache] ^- build-out =/ sut-hash=@uv (sham q.sut) =/ sources=source-map (find-hoon-sources ball) + :: Collect mimes from ball — self-compiled artifacts + :: + =/ mimes=(map rail:tarball vase) + %- ~(gas by *(map rail:tarball vase)) + %+ murn ~(tap ba:tarball ball) + |= [=rail:tarball =content:tarball] + ?. =([/ %mime] p.sage.content) ~ + `[rail q.sage.content] :: Phase 1: Parse and resolve all sources :: =/ prep @@ -278,24 +380,60 @@ (murn raw |=(=import (resolve-import rail import))) ?. =((lent raw) (lent resolved)) [files (~(put by errors) rail ~[leaf+"unresolved import in {(spud (snoc path.rail name.rail))}"])] + =/ has-file + |= =rail:tarball + |((~(has by sources) rail) (~(has by mimes) rail)) =/ missing=(list resolved-import) - (skip resolved |=(r=resolved-import (~(has by sources) rail.r))) + %+ skip resolved + |= r=resolved-import + ?- -.r + %file (has-file rail.r) + %bare (has-file rail.r) + %mime %.y :: resolved at compile time from ball + == ?. =(~ missing) - [files (~(put by errors) rail ~[leaf+"missing import in {(spud (snoc path.rail name.rail))}"])] + =/ miss-paths=tape + %- zing + ^- (list tape) + %+ join ", " + %+ turn missing + |= r=resolved-import + ?- -.r + %file (spud (snoc path.rail.r name.rail.r)) + %bare (spud (snoc path.rail.r name.rail.r)) + %mime "mime" + == + [files (~(put by errors) rail ~[leaf+"missing import in {(spud (snoc path.rail name.rail))}: {miss-paths}"])] [(~(put by files) rail [src (sham src) resolved body.p.res]) errors] =/ files=(map rail:tarball file-info) files.prep =/ errors=(map rail:tarball tang) errors.prep :: Phase 2: Topological sort :: =/ deps=(map rail:tarball (set rail:tarball)) + %- ~(uni by (~(run by mimes) |=(* *(set rail:tarball)))) %- ~(run by files) |= fi=file-info - (~(gas in *(set rail:tarball)) (turn imports.fi |=(r=resolved-import rail.r))) + %- ~(gas in *(set rail:tarball)) + %- zing + %+ turn imports.fi + |= r=resolved-import + ^- (list rail:tarball) + ?- -.r + %file ~[rail.r] + %bare ~[rail.r] + %mime + ?- -.lane.r + %& ~[p.lane.r] + %| ~ + == + == =/ sort-res (topo-sort deps) :: Phase 3: Compile in topological order :: + :: Seed results with mimes (self-compiled) and errors =/ results=(map rail:tarball build-result) - (~(run by errors) |=(t=tang [%| t])) + %- ~(uni by `(map rail:tarball build-result)`(~(run by mimes) |=(v=vase `build-result`[%& v]))) + `(map rail:tarball build-result)`(~(run by errors) |=(t=tang `build-result`[%| t])) :: Add cycle errors =. results %+ roll ~(tap in cycle.sort-res) @@ -308,25 +446,37 @@ %+ join ", " %+ turn ~(tap in cycle-deps) |=(d=rail:tarball (spud (snoc path.d name.d))) - (~(put by acc) r [%| ~[leaf+"circular dependency in {(spud (snoc path.r name.r))} on {dep-paths}"]]) - =| key-map=(map rail:tarball @uv) + =/ err=tang ~[leaf+"circular dependency in {(spud (snoc path.r name.r))} on {dep-paths}"] + (~(put by acc) r [%| err]) + :: Seed key-map: mime content hashes + all pre-loop error tang hashes + =/ key-map=(map rail:tarball @uv) + %+ roll ~(tap by results) + |= [[=rail:tarball =build-result] acc=(map rail:tarball @uv)] + ?: ?=(%& -.build-result) + (~(put by acc) rail (sham q.p.build-result)) + (~(put by acc) rail (sham p.build-result)) |- ?~ order.sort-res [results build-cache deps key-map] =/ =rail:tarball i.order.sort-res + :: Mimes are already in results — skip + ?: (~(has by mimes) rail) + $(order.sort-res t.order.sort-res) =/ fi=file-info (~(got by files) rail) :: Check if any dep failed + =/ my-deps=(set rail:tarball) (~(gut by deps) rail ~) =/ dep-failed=? - %+ lien imports.fi - |= r=resolved-import - !?=([~ %& *] (~(get by results) rail.r)) + %+ lien ~(tap in my-deps) + |=(d=rail:tarball !?=([~ %& *] (~(get by results) d))) + :: Compute cache key: own hash + sorted dep cache keys + =/ dep-keys=(list @uv) + (turn ~(tap in my-deps) |=(d=rail:tarball (~(got by key-map) d))) ?: dep-failed + =/ ckey=@uv (sham [sut-hash src-hash.fi (snoc path.rail name.rail) (sort dep-keys lth)]) %= $ order.sort-res t.order.sort-res results (~(put by results) rail [%| ~[leaf+"dep failed in {(spud (snoc path.rail name.rail))}"]]) + key-map (~(put by key-map) rail ckey) == - :: Compute cache key: own hash + sorted dep cache keys - =/ dep-keys=(list @uv) - (turn imports.fi |=(r=resolved-import (~(got by key-map) rail.r))) =/ ckey=@uv (sham [sut-hash src-hash.fi (snoc path.rail name.rail) (sort dep-keys lth)]) :: Cache hit → reuse ?: (~(has by build-cache) ckey) @@ -339,16 +489,63 @@ =/ aug=vase %+ roll imports.fi |= [r=resolved-import acc=_sut] - =/ dep-res=build-result (~(got by results) rail.r) - ?> ?=(%& -.dep-res) - =/ dep=vase p.dep-res - (slop [[%face name.r p.dep] q.dep] acc) + ?- -.r + %file + =/ dep-res=build-result (~(got by results) rail.r) + ?> ?=(%& -.dep-res) + =/ dep=vase p.dep-res + (slop [[%face name.r p.dep] q.dep] acc) + %bare + =/ dep-res=build-result (~(got by results) rail.r) + ?> ?=(%& -.dep-res) + (slop p.dep-res acc) + %mime + ?- -.lane.r + %& :: file: single mime + =/ dep-res=(unit build-result) (~(get by results) p.lane.r) + ?~ dep-res + ~| %mime-not-found + ~| " /& {(trip name.r)} {(spud (snoc path.p.lane.r name.p.lane.r))}" + ~| " file does not exist (for a directory, add trailing /)" + !! + ?> ?=(%& -.u.dep-res) + =/ dep=vase p.u.dep-res + (slop [[%face name.r p.dep] q.dep] acc) + %| :: directory: (axal (map @ta mime)) + =/ sub=ball:tarball (~(dip ba:tarball ball) p.lane.r) + =/ axl=(axal (map @ta mime)) + %+ roll + %+ murn ~(tap ba:tarball sub) + |= [=rail:tarball =content:tarball] + ?. =([/ %mime] p.sage.content) ~ + `[path.rail name.rail !<(mime q.sage.content)] + |= [[pax=path nam=@ta mym=mime] acc=(axal (map @ta mime))] + =/ nod=(map @ta mime) + (fall (~(get of acc) pax) *(map @ta mime)) + (~(put of acc) pax (~(put by nod) nam mym)) + =/ dep=vase !>(axl) + (slop [[%face name.r p.dep] q.dep] acc) + == + == :: Compile - =/ res=build-result (build-hoon aug (snoc path.rail name.rail) body.fi) + =/ import-lines=@ud + (sub (lent (to-wain:format src.fi)) (lent (to-wain:format body.fi))) + =/ res=build-result + =/ r (mule |.((build-hoon aug (snoc path.rail name.rail) body.fi import-lines))) + ?:(?=(%& -.r) p.r [%| ~[leaf+"crash compiling {(spud (snoc path.rail name.rail))}"]]) + :: For marks: compile raw door into marc + =. res + ?. ?& ?=(%& -.res) + ?=([%mar *] path.rail) + == + res + =/ marc-res=(each marc:tarball tang) + (mule |.((build-marc:marks p.res))) + ?:(?=(%| -.marc-res) [%| p.marc-res] [%& !>(p.marc-res)]) %= $ order.sort-res t.order.sort-res results (~(put by results) rail res) - key-map ?:(?=(%& -.res) (~(put by key-map) rail ckey) key-map) + key-map (~(put by key-map) rail ckey) build-cache ?:(?=(%& -.res) (~(put by build-cache) ckey p.res) build-cache) == -- diff --git a/desk/lib/bytestream.hoon b/desk/lib/bytestream.hoon new file mode 100644 index 0000000..263c0a2 --- /dev/null +++ b/desk/lib/bytestream.hoon @@ -0,0 +1,794 @@ +|% +:: $bays: bytestream +:: +:: .pos: relative cursor into .data +:: .data: octs stream +:: ++$ bays $+ bays + $: pos=@ud + data=octs + == +:: $bits: bitstream +:: +:: .num: number of bits in the acculumalator +:: .bit: accumulator +:: .bays: bytestream +:: ++$ bits $+ bits + $: num=@ud + bit=@ub + =bays + == +-- +:: bytestream: read and write sequence of bytes +:: +:: A bytestream is a pair of a cursor and octs data. +:: The cursor points at the next byte to be read or written. +:: +:: There are three families of functions: for reading, +:: writing and appending to a bytestream. they operate +:: upon three kinds of data: a singular byte, a sequence of +:: bytes (octs), or a text (cord). +:: +:: A combined operation of reading from a source bytestream +:: and writing the resulting data to a target bytestream is called +:: a 'write-read'. +:: +:: A write or append to a bytestream always succeeds. +:: A read can fail if the source bytestream is exhausted: +:: reading arms either crash on failure, or return a unit (maybe). +:: +:: Each read advances the cursor by a corresponding +:: number of bytes read; peek functions do not advance the stream. +:: +:: Each write advances the cursor by a corresponding +:: number of bytes written; append functions do not advance the stream. +:: +~% %bytestream-v0 ..part ~ +|% +:: Utilities +:: ++| %utilities +++ rip-octs + ~/ %rip-octs + |= a=octs + ^- (list @) + ?: =(p.a 0) + ~ + =| hun=(list @) + =+ i=p.a + |- + ?: =(i 0) + hun + %= $ + i (dec i) + hun :_(hun (cut 3 [(dec i) 1] q.a)) + == +++ cat-octs + ~/ %cat-octs + |= [a=octs b=octs] + :- (add p.a p.b) + (can 3 ~[a b]) +++ cut-octs + |= [pin=@ud len=@ud data=octs] + ^- octs + [len (cut 3 [pin len] q.data)] +++ can-octs + ~/ %can-octs + |= a=(list octs) + ^- octs + ?: =(~ a) [0 0] + =- [- (can 3 a)] + %+ reel a + |= [=octs size=@ud] + (add size p.octs) +++ as-octs as-octs:mimes:html +++ as-octt as-octt:mimes:html +++ as-byts + |= =octs + ^- byts + [p.octs (rev 3 octs)] +:: Conversion +:: ++| %conversion +++ from-octs + |= =octs + ^- bays + [0 octs] +++ to-octs + |= sea=bays + ^- octs + data.sea +++ at-octs + |= [n=@ud =octs] + ^- bays + [n octs] +++ from-txt + |= txt=@t + (from-octs [(met 3 txt) txt]) +++ to-txt + |= sea=bays + ^- @t + q.data.sea +++ to-atom + |= sea=bays + ^- @ + q.data.sea +:: Check bytestream status +:: ++| %status +:: +exceed: whether .sea is out of bound +++ exceed + |= sea=bays + ^- ? + (gte pos.sea p.data.sea) +:: +exceed-at: whether .pos is out of bound +:: +++ exceed-at + |= [pos=@ud sea=bays] + ^- ? + (gte pos p.data.sea) +:: +still-by: whether .n bytes can be read +:: +++ still-by + |= [n=@ud sea=bays] + ^- ? + (lte (add pos.sea n) p.data.sea) +:: +still-byte: whether a byte can be read +:: +++ still-byte + |= sea=bays + ^- ? + (lte +(pos.sea) p.data.sea) +:: +is-empty: is bytestream empty? +:: +++ is-empty + |= sea=bays + (gte pos.sea p.data.sea) +:: +size: total bytes +:: +++ size + |= sea=bays + ^- @ud + p.data.sea +:: +out-size: bytes read +:: +++ out-size + |= sea=bays + ^- @ud + pos.sea +:: +in-size: remaining bytes +:: +++ in-size + |= sea=bays + ^- @ud + (sub p.data.sea pos.sea) +:: Navigation +:: ++| %navigation +++ rewind + |= sea=bays + ^- bays + sea(pos 0) +:: +seek-to: navigate to .pos +:: +++ seek-to + |= [pos=@ud sea=bays] + ^- bays + sea(pos pos) +:: +seek-end: navigate to the end of stream +:: +++ seek-end + |= sea=bays + ^- bays + sea(pos p.data.sea) +:: +skip-by: advance by .n bytes +:: +++ skip-by + |= [n=@ud sea=bays] + ^- bays + ?> (lte (add pos.sea n) p.data.sea) + sea(pos (add pos.sea n)) +:: +skip-by: advance by one byte +:: +++ skip-byte + |= sea=bays + (skip-by 1 sea) +:: +back-by: retreat by .n bytes +:: +++ back-by + |= [n=@ud sea=bays] + ^- bays + ?< (lth pos.sea n) + sea(pos (sub pos.sea n)) +:: +back-byte: retreat by one byte +:: +++ back-byte + |= [n=@ud sea=bays] + ^- bays + (back-by 1 sea) +:: +skip-line: advance to the beginning of next line +++ skip-line + ~/ %skip-line + |= sea=bays + ^- bays + =+ i=pos.sea + |- + ?: (exceed-at i sea) + (seek-end sea) + ?: =('\0a' (cut 3 [i 1] q.data.sea)) + sea(pos +(i)) + $(i +(i)) +:: +find-byte: find the index of first occurence of byte .byt +:: +++ find-byte + ~/ %find-byte + |= [bat=@D sea=bays] + ^- (unit @ud) + =+ i=pos.sea + |- + ?: (exceed-at i sea) + ~ + ?: =(bat (cut 3 [i 1] q.data.sea)) + (some i) + $(i +(i)) +:: +seek-byte: seek stream to first occurence of byte .byt +:: +++ seek-byte + ~/ %seek-byte + |= [bat=@D sea=bays] + ^- [(unit @ud) bays] + =/ idx (find-byte bat sea) + ?~ idx + [~ sea] + [idx sea(pos u.idx)] +:: +:: ++ find-octs !! +:: ++ seek-octs !! +:: ++ find-txt !! +:: ++ seek-txt !! +:: +:: Read byte +:: ++| %read-byte +:: +:: +read-byte: read a byte and advance the stream +:: +++ read-byte + ~/ %read-byte + |= sea=bays + ^- [@D bays] + ?> (still-byte sea) + :_ sea(pos +(pos.sea)) + (cut 3 [pos.sea 1] q.data.sea) +:: +read-byte-maybe: maybe read a byte and advance the stream +:: +++ read-byte-maybe + :: return a byte unit and advanced stream + :: + |= sea=bays :: .sea: source bytestream + ^- [(unit @D) bays] + ?. (still-byte sea) + [~ sea] + :_ sea(pos +(pos.sea)) + (some (cut 3 [pos.sea 1] q.data.sea)) +:: +peek-byte-maybe: read a byte, do not advance +:: +++ peek-byte + |= sea=bays + ^- @D + ?> (still-byte sea) + (cut 3 [pos.sea 1] q.data.sea) +:: +peek-byte-maybe: maybe read a byte, do not advance +:: +++ peek-byte-maybe + |= sea=bays + ^- (unit @D) + ?. (still-byte sea) + ~ + (some (cut 3 [pos.sea 1] q.data.sea)) +:: Read octs +:: ++| %read-octs +:: +:: +read-octs: read .n octs +:: +++ read-octs + ~/ %read-octs + |= [n=@ud sea=bays] + ^- [octs bays] + ?> (still-by n sea) + :_ (skip-by n sea) + [n (cut 3 [pos.sea n] q.data.sea)] +++ read-octs-maybe + |= [n=@ud sea=bays] + ^- [(unit octs) bays] + ?. (still-by n sea) + [~ sea] + :_ (skip-by n sea) + %- some + [n (cut 3 [pos.sea n] q.data.sea)] +:: +read-octs-until: read octs until byte at position .sop +:: +++ read-octs-until + |= [sop=@ud sea=bays] + ^- [octs bays] + ?< (exceed-at (dec sop) sea) + =+ len=(sub sop pos.sea) + :_ sea(pos sop) + [len (cut 3 [pos.sea len] q.data.sea)] +++ read-octs-until-maybe + |= [sop=@ud sea=bays] + ^- [(unit octs) bays] + ?: (exceed-at (dec sop) sea) + [~ sea] + =+ len=(sub sop pos.sea) + :_ sea(pos sop) + %- some + [len (cut 3 [pos.sea len] q.data.sea)] +:: +read-octs-end: read octs until end of stream +:: +++ read-octs-end + |= sea=bays + ^- [octs bays] + =+ len=(in-size sea) + :_ (seek-end sea) + [len (cut 3 [pos.sea len] q.data.sea)] +++ peek-octs + |= [n=@ud sea=bays] + ^- octs + ?> (still-by n sea) + [n (cut 3 [pos.sea n] q.data.sea)] +++ peek-octs-maybe + |= [n=@ud sea=bays] + ^- (unit octs) + ?. (still-by n sea) + ~ + %- some + [n (cut 3 [pos.sea n] q.data.sea)] +++ peek-octs-end + |= sea=bays + ^- octs + =+ len=(in-size sea) + [len (cut 3 [pos.sea len] q.data.sea)] +:: +peek-octs-until: peek octs until .pos +:: +++ peek-octs-until + |= [pos=@ud sea=bays] + ^- octs + ?: =(pos 0) + [0 0] + ?> (lte pos p.data.sea) + =+ len=(sub pos pos.sea) + [len (cut 3 [pos.sea len] q.data.sea)] +:: Read atom +:: ++| %read-atom +:: +read-lsb: read atom in LSB order +:: +++ read-lsb + |= [n=@ud sea=bays] + ^- [@ bays] + =^ num sea (read-octs n sea) + :_ sea + q.num +++ peek-lsb + |= [n=@ud sea=bays] + ^- @ + q:(peek-octs n sea) +:: +read-msb: read atom in MSB order +:: +++ read-msb + |= [n=@ud sea=bays] + ^- [@ bays] + =^ num sea (read-octs n sea) + :_ sea + (rev 3 num) +++ read-msb-maybe + |= [n=@ud sea=bays] + ^- [(unit @) bays] + =^ num sea (read-octs-maybe n sea) + ?~ num [~ sea] + :_ sea + (some (rev 3 u.num)) +++ peek-msb + |= [n=@ud sea=bays] + ^- @ + =/ num (peek-octs n sea) + (rev 3 num) +:: +read-txt: read cord +:: +++ read-txt read-lsb +:: Read text +:: ++| %read-txt +:: +:: +read-line: read line of text +:: +:: Read bytes until newline is found, or until stream +:: is exhausted. +:: +++ read-line + |= sea=bays + ^- [@t bays] + =/ pin (find-byte 0xa sea) + ?~ pin + :: newline not found, return whole stream + :: + =^ data sea (read-octs-end sea) + :_ sea + q.data + =^ data sea (read-octs-until u.pin sea) + :_ sea(pos +(u.pin)) + q.data +:: +read-line-maybe: maybe read a line of text +:: +++ read-line-maybe + |= sea=bays + ^- [(unit @t) bays] + =/ pin (find-byte 0xa sea) + ?~ pin + :: newline not found, return whole stream + :: + =^ data sea (read-octs-end sea) + :_ sea + (some q.data) + =^ data sea (read-octs-until u.pin sea) + :_ sea(pos +(u.pin)) + (some q.data) +:: +peek-line: peek a line of text +:: read bytes until newline is found, or until stream +:: is exhausted. +:: +++ peek-line + |= sea=bays + ^- @t + =/ pin (find-byte 0xa sea) + ?~ pin + :: newline not found, return whole stream + :: + =/ data (peek-octs-end sea) + q.data + =/ data (peek-octs-until u.pin sea) + q.data +:: +peek-line-maybe: maybe peek a line of text +:: +++ peek-line-maybe + |= sea=bays + ^- (unit @t) + =/ pin (find-byte 0xa sea) + ?~ pin + :: newline not found, return whole stream + :: + =/ data (peek-octs-end sea) + (some q.data) + =/ data (peek-octs-until u.pin sea) + (some q.data) +:: Write data at the cursor position +:: ++| %write +++ write-byte + |= [sea=bays bat=@D] + ^- bays + %= sea + pos +(pos.sea) + p.data +(p.data.sea) + q.data (sew 3 [pos.sea 1 bat] q.data.sea) + == +++ write-octs + |= [sea=bays =octs] + ^- bays + %= sea + pos (add pos.sea p.octs) + p.data (add p.octs p.data.sea) + q.data (sew 3 [pos.sea p.octs q.octs] q.data.sea) + == +++ write-txt + |= [sea=bays txt=@t] + (write-octs sea [(met 3 txt) txt]) +:: Append data +:: ++| %append +++ append-byte + |= [sea=bays bat=@D] + ^- bays + sea(data (cat-octs data.sea [1 bat])) +++ append-octs + |= [sea=bays data=octs] + ^- bays + sea(data (cat-octs data.sea data)) +++ append-txt + |= [sea=bays txt=@t] + ^- bays + (append-octs sea [(met 3 txt) txt]) +:: Read source data and write to target +:: +:: read data from a source bytestream and write it to a +:: target bytestream. +:: ++| %write-read +:: +++ write-read-byte + |= [red=bays sea=bays] + ^- [bays bays] + =^ bat=@D sea (read-byte sea) + :_ sea + (write-byte red bat) +++ write-read-octs + |= [red=bays sea=bays n=@ud] + ^- [bays bays] + =^ =octs sea (read-octs n sea) + :_ sea + (write-octs red octs) +++ write-read-line + |= [red=bays sea=bays] + ^- [bays bays] + =^ line=@t sea (read-line sea) + :_ sea + (write-txt red (cat 3 line '\0a')) +:: +++ write-peek-byte + |= [red=bays sea=bays] + ^- bays + =/ bat=@D (peek-byte sea) + (write-byte red bat) +++ write-peek-octs + |= [red=bays sea=bays n=@ud] + ^- bays + =/ =octs (peek-octs n sea) + (write-octs red octs) +++ write-peek-line + |= [red=bays sea=bays] + ^- bays + =/ line=@t (peek-line sea) + (write-txt red (cat 3 line '\0a')) +++ append-read-byte + |= [red=bays sea=bays] + ^- [bays bays] + =^ bat=@D sea (read-byte sea) + :_ sea + (append-byte red bat) +++ append-read-octs + |= [red=bays sea=bays n=@ud] + ^- [bays bays] + =^ =octs sea (read-octs n sea) + :_ sea + (append-octs red octs) +++ append-read-line + |= [red=bays sea=bays] + ^- [bays bays] + =^ line=@t sea (read-line sea) + :_ sea + (append-txt red (cat 3 line '\0a')) +++ append-peek-byte + |= [red=bays sea=bays] + ^- bays + =/ bat=@D (peek-byte sea) + (append-byte red bat) +++ append-peek-octs + |= [red=bays sea=bays n=@ud] + ^- bays + =/ =octs (peek-octs n sea) + (append-octs red octs) +++ append-peek-line + |= [red=bays sea=bays] + ^- bays + =/ line=@t (peek-line sea) + (append-txt red (cat 3 line '\0a')) +:: Transformation +:: ++| %transformation +:: +chunk: cut the bytestream into chunks of .siz bytes +:: +:: If the bytestream is not evenly divided into chunks, +:: the final chunk is a remainder. +:: +++ chunk + ~/ %chunk + |= [size=@ud sea=bays] + ^- (list octs) + ?: =(size 0) + ~ + =| hun=(list octs) + |- + =+ rem=(in-size sea) + ?: =(0 rem) + (flop hun) + ?: (lth rem size) + =^ octs sea (read-octs rem sea) + (flop [octs hun]) + =^ octs sea (read-octs size sea) + $(hun [octs hun]) +:: +:: +extract: extract a list of octs from bytestream +:: +:: Repeatedly calls the user supplied gate .rac to +:: determine the offset and length of each octs chunk. +:: +:: .rac accepts a bytestream and returns a pair +:: of an offset and chunk length to extract. Chunks +:: of zero length are skipped. +:: +:: The process continues until either the stream is exhausted, +:: or the gate returns a pair of [0 0] +:: +++ extract + ~/ %extract + |= [sea=bays rac=$-(bays [@ud @ud])] + ^- [(list octs) bays] + =| dal=(list octs) + |- + ?: (is-empty sea) + :_ sea + (flop dal) + =/ [sip=@ud len=@ud] + (rac sea) + ?: &(=(0 sip) =(0 len)) + :_ sea + (flop dal) + =. sea (skip-by sip sea) + ?. (gth len 0) + $ + =^ data=octs sea (read-octs len sea) + $(dal [data dal]) +:: +fuse-extract: extract and fuse the resulting octs list +:: +++ fuse-extract + ~/ %fuse-extract + |= [sea=bays rac=$-(bays [@ud @ud])] + ^- [octs bays] + =| dal=(list octs) + |- + ?: (is-empty sea) + :_ sea + (can-octs (flop dal)) + =/ [sip=@ud len=@ud] + (rac sea) + ?: &(=(0 sip) =(0 len)) + :_ sea + (can-octs (flop dal)) + =. sea (skip-by sip sea) + ?. (gth len 0) + $ + =^ data=octs sea (read-octs len sea) + $(dal [data dal]) +:: +split: split bytestream into a list of octs +:: +:: repeatedly calls the user supplied gate .pit +:: to determine the current chunk length +:: +:: the process continues until either the stream +:: is exhausted or the gate returns a chunk of length 0. +:: +++ split + |= [sea=bays pit=$-(bays @ud)] + ^- [(list octs) bays] + %+ extract sea + |= sea=bays + [0 (pit sea)] +:: +++ fuse-split + |= [sea=bays pit=$-(bays @ud)] + ^- [octs bays] + %+ fuse-extract sea + |= sea=bays + [0 (pit sea)] +:: Read and write bits on a bytestream +:: ++| %bitstream +:: +++ bits-from-bays + |= sea=bays + ^- bits + [num=0 bit=0b0 sea] +++ bays-from-bits + |= pea=bits + ^- bays + bays.pea +++ bits-is-empty + |= pea=bits + ^- ? + =(0 (bits-in-size pea)) +:: +in-size: remaining bits +:: +++ bits-in-size + |= pea=bits + ^- @ud + %+ add + num.pea + (mul 8 (in-size bays.pea)) +:: +out-size: bits read +:: +++ bits-out-size + |= pea=bits + ^- @ud + (sub (mul 8 (out-size bays.pea)) num.pea) +:: +need-bits: require .n bits to be available +:: +++ need-bits + ~/ %need-bits + |= [n=@ud pea=bits] + ^- bits + ?: (gte num.pea n) + pea + :: how many bytes needed + :: + =+ nib=(sub n num.pea) + =/ neb=@ud (div nib 8) + =? neb !=(0 (mod nib 8)) + +(neb) + |- + ?: =(neb 0) + pea + =^ bat bays.pea (read-byte bays.pea) + %= $ + num.pea (add num.pea 8) + bit.pea + (add bit.pea (lsh [0 num.pea] bat)) + neb (dec neb) + == +:: +drop-bits: drop low .n bits +:: +++ drop-bits + ~/ %drop-bits + |= [n=@ud pea=bits] + ^- bits + ?: =(n 0) + pea + %= pea + bit (rsh [0 n] bit.pea) + num + ?. (gth num.pea n) + 0 + (sub num.pea n) + == +++ skip-bits + |= [n=@ud pea=bits] + ^- bits + =. pea (need-bits n pea) + (drop-bits n pea) +:: +peek-bits: peek low .n bits +:: +++ peek-bits + ~/ %peek-bits + |= [n=@ud pea=bits] + ^- @ + ?> (gte num.pea n) + ?: =(n 0) + 0 + %+ dis bit.pea + (sub (lsh [0 n] 1) 1) +:: +read-bits: read low .n bits, then drop +:: +++ read-bits + ~/ %read-bits + |= [n=@ud pea=bits] + ^- [@ bits] + ?> (gte num.pea n) + :_ (drop-bits n pea) + %+ dis bit.pea + (sub (lsh [0 n] 1) 1) +:: +read-need-bits: read low .n bits, requiring if necessary +:: +++ read-need-bits + |= [n=@ud pea=bits] + ^- [@ bits] + =? pea (lth num.pea n) + (need-bits n pea) + :_ (drop-bits n pea) + %+ dis bit.pea + (sub (lsh [0 n] 1) 1) +:: +byte-bits: remove 0 to 7 bits to reach byte boundary +:: +++ byte-bits + ~/ %byte-bits + |= pea=bits + ^- bits + =+ rem=(dis num.pea 0x7) + ?: =(rem 0) + pea + %= pea + num (sub num.pea rem) + bit (rsh [0 rem] bit.pea) + == +-- diff --git a/desk/lib/feather-2.hoon b/desk/lib/feather-2.hoon deleted file mode 100644 index 23e6631..0000000 --- a/desk/lib/feather-2.hoon +++ /dev/null @@ -1,1693 +0,0 @@ -:: borrowed from ~migrev-dolseg's %hawk -:: -|% -++ feather - ;style - ; /* feather.css : terse utility classes */ - ; - ; - ; /* part 1: resets */ - ; - ; - ; *, - ; *::before, - ; *::after { - ; box-sizing: border-box; - ; margin: 0; - ; } - ; :not(:defined) { /* hide undefined web components */ - ; display: none; - ; } - ; html { - ; -moz-text-size-adjust: none; - ; -webkit-text-size-adjust: none; - ; text-size-adjust: none; - ; overflow: hidden; - ; font-size: 14px; - ; } - ; body, h1, h2, h3, h4, p, - ; figure, blockquote, dl, dd { - ; margin-block-end: 0; - ; } - ; ul[role='list'], - ; ol[role='list'] { - ; list-style: none; - ; } - ; h1, h2, h3, h4, h5, h6, - ; button, input, label, select { - ; line-height: inherit; - ; } - ; button, summary { - ; cursor: pointer; - ; touch-action: manipulation; - ; } - ; h1, h2, h3, - ; h4, h5, h6 { - ; text-wrap: balance; - ; font-size: 1em; - ; } - ; a { - ; text-decoration: none; - ; color: inherit; - ; } - ; iframe { - ; border: none; - ; background: white; - ; } - ; img, - ; picture { - ; max-width: 100%; - ; display: block; - ; } - ; hr { - ; border: none; - ; height: 1px; - ; width: 100%; - ; background-color: var(--f8) - ; } - ; input, button, - ; textarea, select { - ; padding: unset; - ; font-family: unset; - ; font-size: 1em; - ; background: unset; - ; border: unset; - ; border-radius: unset; - ; color: unset; - ; letter-spacing: unset; - ; line-height: inherit; - ; outline: none; } - ; textarea { resize: none; } - ; b, strong { font-weight: bold; } - ; i { font-style: italic; } - ; - ; - ; /* part 2: variables */ - ; - ; - ; :root, :host { - ; --font-mono: Consolas, "SF Mono", Menlo, Monaco, "Liberation Mono", "DejaVu Mono", "Courier New", monospace; - ; --font-serif: "Georgia", "Times New Roman", "Liberation Serif", "DejaVu Serif", Times, serif; - ; --font-sans: Roboto, "Helvetica Neue", Helvetica, Arial, "Liberation Sans", "DejaVu Sans", sans-serif; - ; --mono-scale: 0.9; - ; --kerning: 0.024em; - ; --line-height: 1; - ; - ; --s0: 0px; - ; --s1: 2px; - ; --s2: 4px; - ; --s3: 8px; - ; --s4: 12px; - ; --s5: 16px; - ; --s6: 20px; - ; --s7: 25px; - ; --s8: 30px; - ; --s9: 36px; - ; --s10: 44px; - ; --s11: 52px; - ; --s12: 62px; - ; --s13: 74px; - ; --s14: 88px; - ; --s15: 104px; - ; --s16: 122px; - ; --s17: 143px; - ; --s18: 168px; - ; --s19: 196px; - ; --s20: 228px; - ; --s21: 265px; - ; --s22: 308px; - ; --s23: 358px; - ; --s24: 416px; - ; --s25: 484px; - ; --s26: 560px; - ; --s27: 648px; - ; --s28: 750px; - ; --s29: 870px; - ; --s30: 1000px; - ; - ; --p-page: 36px 12px clamp(100px, 36vh, 400px) 12px; - ; - ; --zinc-50: #fafafa; - ; --zinc-100: #f4f4f5; - ; --zinc-200: #e4e4e7; - ; --zinc-300: #d4d4d8; - ; --zinc-400: #A3A3A3; - ; --zinc-500: #838383; - ; --zinc-600: #727272; - ; --zinc-700: #3f3f46; - ; --zinc-800: #27272a; - ; --zinc-900: #18181b; - ; --zinc-950: #0f0f0f; - ; - ; --sky-50: #f0f9ff; - ; --sky-100: #e0f2fe; - ; --sky-200: #bae6fd; - ; --sky-300: #7dd3fc; - ; --sky-400: #38bdf8; - ; --sky-500: #0ea5e9; - ; --sky-600: #0284c7; - ; --sky-700: #0369a1; - ; --sky-800: #075985; - ; --sky-900: #0c4a6e; - ; --sky-950: #082f49; - ; - ; --amber-50: #fffbeb; - ; --amber-100: #fef3c7; - ; --amber-200: #fde68a; - ; --amber-300: #fcd34d; - ; --amber-400: #fbbf24; - ; --amber-500: #f59e0b; - ; --amber-600: #d97706; - ; --amber-700: #b45309; - ; --amber-800: #92400e; - ; --amber-900: #78350f; - ; --amber-950: #451a03; - ; - ; --lime-50: #f7fee7; - ; --lime-100: #ecfccb; - ; --lime-200: #d9f99d; - ; --lime-300: #bef264; - ; --lime-400: #a3e635; - ; --lime-500: #84cc16; - ; --lime-600: #65a30d; - ; --lime-700: #4d7c0f; - ; --lime-800: #3f6212; - ; --lime-900: #365314; - ; --lime-950: #1a2e05; - ; - ; --red-50: #fef2f2; - ; --red-100: #fee2e2; - ; --red-200: #fecaca; - ; --red-300: #fca5a5; - ; --red-400: #f87171; - ; --red-500: #ef4444; - ; --red-600: #dc2626; - ; --red-700: #b91c1c; - ; --red-800: #991b1b; - ; --red-900: #7f1d1d; - ; --red-950: #450a0a; - ; - ; --light-f-4: #334dde; - ; --light-f-3: #286e2c; - ; --light-f-2: #e87800; - ; --light-f-1: #d32f2f; - ; - ; --light-b-4: #bbdefb; - ; --light-b-3: #c8e6c9; - ; --light-b-2: #fff9c4; - ; --light-b-1: #ffccbc; - ; - ; --dark-f-4: #8899ff; - ; --dark-f-3: #66f699; - ; --dark-f-2: #ffeb6b; - ; --dark-f-1: #ff6d40; - ; - ; --dark-b-4: #1a237e; - ; --dark-b-3: #1b5e20; - ; --dark-b-2: #472e12; - ; --dark-b-1: #560c0c; - ; } - ; :root, :host { - ; --focus-color: #0000ff77; - ; --active-offset: 10%; - ; --percent-scale: 50%; - ; - ; --f-1: var(--light-f-1); - ; --f-2: var(--light-f-2); - ; --f-3: var(--light-f-3); - ; --f-4: var(--light-f-4); - ; - ; --b-1: var(--light-b-1); - ; --b-2: var(--light-b-2); - ; --b-3: var(--light-b-3); - ; --b-4: var(--light-b-4); - ; - ; --b0: var(--zinc-50); - ; --b1: var(--zinc-100); - ; --b2: var(--zinc-200); - ; --b3: var(--zinc-300); - ; --b4: var(--zinc-400); - ; --b5: var(--zinc-500); - ; --b6: var(--zinc-600); - ; --b7: var(--zinc-700); - ; --b8: var(--zinc-800); - ; --b9: var(--zinc-900); - ; --b10: var(--zinc-950); - ; - ; --f0: var(--zinc-950); - ; --f1: var(--zinc-900); - ; --f2: var(--zinc-800); - ; --f3: var(--zinc-700); - ; --f4: var(--zinc-600); - ; --f5: var(--zinc-500); - ; --f6: var(--zinc-400); - ; --f7: var(--zinc-300); - ; --f8: var(--zinc-200); - ; --f9: var(--zinc-100); - ; --f10: var(--zinc-50); - ; - ; .spring { - ; --b0: var(--lime-50); - ; --b1: var(--lime-100); - ; --b2: var(--lime-200); - ; --b3: var(--lime-300); - ; --b4: var(--lime-400); - ; --b5: var(--lime-500); - ; --b6: var(--lime-600); - ; --b7: var(--lime-700); - ; --b8: var(--lime-800); - ; --b9: var(--lime-900); - ; --b10: var(--lime-950); - ; --f0: var(--lime-950); - ; --f1: var(--lime-900); - ; --f2: var(--lime-800); - ; --f3: var(--lime-700); - ; --f4: var(--lime-600); - ; --f5: var(--lime-500); - ; --f6: var(--lime-400); - ; --f7: var(--lime-300); - ; --f8: var(--lime-200); - ; --f9: var(--lime-100); - ; --f10: var(--lime-50); - ; } - ; .summer { - ; --b0: var(--red-50); - ; --b1: var(--red-100); - ; --b2: var(--red-200); - ; --b3: var(--red-300); - ; --b4: var(--red-400); - ; --b5: var(--red-500); - ; --b6: var(--red-600); - ; --b7: var(--red-700); - ; --b8: var(--red-800); - ; --b9: var(--red-900); - ; --b10: var(--red-950); - ; --f0: var(--red-950); - ; --f1: var(--red-900); - ; --f2: var(--red-800); - ; --f3: var(--red-700); - ; --f4: var(--red-600); - ; --f5: var(--red-500); - ; --f6: var(--red-400); - ; --f7: var(--red-300); - ; --f8: var(--red-200); - ; --f9: var(--red-100); - ; --f10: var(--red-50); - ; } - ; .autumn { - ; --b0: var(--amber-50); - ; --b1: var(--amber-100); - ; --b2: var(--amber-200); - ; --b3: var(--amber-300); - ; --b4: var(--amber-400); - ; --b5: var(--amber-500); - ; --b6: var(--amber-600); - ; --b7: var(--amber-700); - ; --b8: var(--amber-800); - ; --b9: var(--amber-900); - ; --b10: var(--amber-950); - ; --f0: var(--amber-950); - ; --f1: var(--amber-900); - ; --f2: var(--amber-800); - ; --f3: var(--amber-700); - ; --f4: var(--amber-600); - ; --f5: var(--amber-500); - ; --f6: var(--amber-400); - ; --f7: var(--amber-300); - ; --f8: var(--amber-200); - ; --f9: var(--amber-100); - ; --f10: var(--amber-50); - ; } - ; .winter { - ; --b0: var(--sky-50); - ; --b1: var(--sky-100); - ; --b2: var(--sky-200); - ; --b3: var(--sky-300); - ; --b4: var(--sky-400); - ; --b5: var(--sky-500); - ; --b6: var(--sky-600); - ; --b7: var(--sky-700); - ; --b8: var(--sky-800); - ; --b9: var(--sky-900); - ; --b10: var(--sky-950); - ; --f0: var(--sky-950); - ; --f1: var(--sky-900); - ; --f2: var(--sky-800); - ; --f3: var(--sky-700); - ; --f4: var(--sky-600); - ; --f5: var(--sky-500); - ; --f6: var(--sky-400); - ; --f7: var(--sky-300); - ; --f8: var(--sky-200); - ; --f9: var(--sky-100); - ; --f10: var(--sky-50); - ; } - ; } - ; @media (prefers-color-scheme: dark) { - ; :root, :host { - ; --focus-color: #6666ff77; - ; --active-offset: 10%; - ; --percent-scale: 150%; - ; - ; --f-1: var(--dark-f-1); - ; --f-2: var(--dark-f-2); - ; --f-3: var(--dark-f-3); - ; --f-4: var(--dark-f-4); - ; - ; --b-1: var(--dark-b-1); - ; --b-2: var(--dark-b-2); - ; --b-3: var(--dark-b-3); - ; --b-4: var(--dark-b-4); - ; - ; --f0: var(--zinc-50); - ; --f1: var(--zinc-100); - ; --f2: var(--zinc-200); - ; --f3: var(--zinc-300); - ; --f4: var(--zinc-400); - ; --f5: var(--zinc-500); - ; --f6: var(--zinc-600); - ; --f7: var(--zinc-700); - ; --f8: var(--zinc-800); - ; --f9: var(--zinc-900); - ; --f10: var(--zinc-950); - ; - ; --b0: var(--zinc-950); - ; --b1: var(--zinc-900); - ; --b2: var(--zinc-800); - ; --b3: var(--zinc-700); - ; --b4: var(--zinc-600); - ; --b5: var(--zinc-500); - ; --b6: var(--zinc-400); - ; --b7: var(--zinc-300); - ; --b8: var(--zinc-200); - ; --b9: var(--zinc-100); - ; --b10: var(--zinc-50); - ; - ; .spring { - ; --f0: var(--lime-50); - ; --f1: var(--lime-100); - ; --f2: var(--lime-200); - ; --f3: var(--lime-300); - ; --f4: var(--lime-400); - ; --f5: var(--lime-500); - ; --f6: var(--lime-600); - ; --f7: var(--lime-700); - ; --f8: var(--lime-800); - ; --f9: var(--lime-900); - ; --f10: var(--lime-950); - ; - ; --b0: var(--lime-950); - ; --b1: var(--lime-900); - ; --b2: var(--lime-800); - ; --b3: var(--lime-700); - ; --b4: var(--lime-600); - ; --b5: var(--lime-500); - ; --b6: var(--lime-400); - ; --b7: var(--lime-300); - ; --b8: var(--lime-200); - ; --b9: var(--lime-100); - ; --b10: var(--lime-50); - ; } - ; .summer { - ; --f0: var(--red-50); - ; --f1: var(--red-100); - ; --f2: var(--red-200); - ; --f3: var(--red-300); - ; --f4: var(--red-400); - ; --f5: var(--red-500); - ; --f6: var(--red-600); - ; --f7: var(--red-700); - ; --f8: var(--red-800); - ; --f9: var(--red-900); - ; --f10: var(--red-950); - ; - ; --b0: var(--red-950); - ; --b1: var(--red-900); - ; --b2: var(--red-800); - ; --b3: var(--red-700); - ; --b4: var(--red-600); - ; --b5: var(--red-500); - ; --b6: var(--red-400); - ; --b7: var(--red-300); - ; --b8: var(--red-200); - ; --b9: var(--red-100); - ; --b10: var(--red-50); - ; } - ; .autumn { - ; --f0: var(--amber-50); - ; --f1: var(--amber-100); - ; --f2: var(--amber-200); - ; --f3: var(--amber-300); - ; --f4: var(--amber-400); - ; --f5: var(--amber-500); - ; --f6: var(--amber-600); - ; --f7: var(--amber-700); - ; --f8: var(--amber-800); - ; --f9: var(--amber-900); - ; --f10: var(--amber-950); - ; - ; --b0: var(--amber-950); - ; --b1: var(--amber-900); - ; --b2: var(--amber-800); - ; --b3: var(--amber-700); - ; --b4: var(--amber-600); - ; --b5: var(--amber-500); - ; --b6: var(--amber-400); - ; --b7: var(--amber-300); - ; --b8: var(--amber-200); - ; --b9: var(--amber-100); - ; --b10: var(--amber-50); - ; } - ; .winter { - ; --f0: var(--sky-50); - ; --f1: var(--sky-100); - ; --f2: var(--sky-200); - ; --f3: var(--sky-300); - ; --f4: var(--sky-400); - ; --f5: var(--sky-500); - ; --f6: var(--sky-600); - ; --f7: var(--sky-700); - ; --f8: var(--sky-800); - ; --f9: var(--sky-900); - ; --f10: var(--sky-950); - ; - ; --b0: var(--sky-950); - ; --b1: var(--sky-900); - ; --b2: var(--sky-800); - ; --b3: var(--sky-700); - ; --b4: var(--sky-600); - ; --b5: var(--sky-500); - ; --b6: var(--sky-400); - ; --b7: var(--sky-300); - ; --b8: var(--sky-200); - ; --b9: var(--sky-100); - ; --b10: var(--sky-50); - ; } - ; } - ; } - ; - ; - ; /* part 3: page styling */ - ; - ; - ; html { height: 100%; - ; font-family: var(--font-sans) } - ; body { margin: 0; - ; height: 100%; - ; color: var(--f0); - ; overflow: auto; - ; position: relative; - ; background: var(--b0); - ; font-feature-settings: normal; - ; font-variation-settings: normal; - ; min-height: 100%; - ; letter-spacing: var(--letter-spacing); - ; line-height: var(--line-height); } - ; - ; - ; /* part 4: utility classes */ - ; - ; - ; .break-word { word-break: break-word; } - ; .break-all { word-break: break-all; } - ; .break-none { word-break: keep-all; } - ; .action { touch-action: manipulation; } - ; .invisible { visibility: hidden; } - ; .hidden { display: none !important; } - ; *[hidden] { display: none !important; } - ; .jc { justify-content: center; } - ; .jb { justify-content: space-between; } - ; .ja { justify-content: space-around; } - ; .js { justify-content: start; } - ; .je { justify-content: end; } - ; .as { align-items: start; } - ; .af { align-items: stretch; } - ; .ae { align-items: end; } - ; .ac { align-items: center; } - ; .wfc { width: fit-content; } - ; .wf { width: 100%; } - ; .wn { width: 0; } - ; .mwf { max-width: 100%; } - ; .mw-page { max-width: 650px; } - ; - ; .w0 { width: var(--s0); } - ; .w1 { width: var(--s1); } - ; .w2 { width: var(--s2); } - ; .w3 { width: var(--s3); } - ; .w4 { width: var(--s4); } - ; .w5 { width: var(--s5); } - ; .w6 { width: var(--s6); } - ; .w7 { width: var(--s7); } - ; .w8 { width: var(--s8); } - ; .w9 { width: var(--s9); } - ; .w10 { width: var(--s10); } - ; .w11 { width: var(--s11); } - ; .w12 { width: var(--s12); } - ; .w13 { width: var(--s13); } - ; .w14 { width: var(--s14); } - ; .w15 { width: var(--s15); } - ; .w16 { width: var(--s16); } - ; .w17 { width: var(--s17); } - ; .w18 { width: var(--s18); } - ; .w19 { width: var(--s19); } - ; .w20 { width: var(--s20); } - ; .w21 { width: var(--s21); } - ; .w22 { width: var(--s22); } - ; .w23 { width: var(--s23); } - ; .w24 { width: var(--s24); } - ; .w25 { width: var(--s25); } - ; .w26 { width: var(--s26); } - ; .w27 { width: var(--s27); } - ; .w28 { width: var(--s28); } - ; .w29 { width: var(--s29); } - ; .w30 { width: var(--s30); } - ; .min-w0 { min-width: var(--s0); } - ; .min-w1 { min-width: var(--s1); } - ; .min-w2 { min-width: var(--s2); } - ; .min-w3 { min-width: var(--s3); } - ; .min-w4 { min-width: var(--s4); } - ; .min-w5 { min-width: var(--s5); } - ; .min-w6 { min-width: var(--s6); } - ; .min-w7 { min-width: var(--s7); } - ; .min-w8 { min-width: var(--s8); } - ; .min-w9 { min-width: var(--s9); } - ; .min-w10 { min-width: var(--s10); } - ; .min-w11 { min-width: var(--s11); } - ; .min-w12 { min-width: var(--s12); } - ; .min-w13 { min-width: var(--s13); } - ; .min-w14 { min-width: var(--s14); } - ; .min-w15 { min-width: var(--s15); } - ; .min-w16 { min-width: var(--s16); } - ; .min-w17 { min-width: var(--s17); } - ; .min-w18 { min-width: var(--s18); } - ; .min-w19 { min-width: var(--s19); } - ; .min-w20 { min-width: var(--s20); } - ; .min-w21 { min-width: var(--s21); } - ; .min-w22 { min-width: var(--s22); } - ; .min-w23 { min-width: var(--s23); } - ; .min-w24 { min-width: var(--s24); } - ; .min-w25 { min-width: var(--s25); } - ; .min-w26 { min-width: var(--s26); } - ; .min-w27 { min-width: var(--s27); } - ; .min-w28 { min-width: var(--s28); } - ; .min-w29 { min-width: var(--s29); } - ; .min-w30 { min-width: var(--s30); } - ; .max-w0 { max-width: var(--s0); } - ; .max-w1 { max-width: var(--s1); } - ; .max-w2 { max-width: var(--s2); } - ; .max-w3 { max-width: var(--s3); } - ; .max-w4 { max-width: var(--s4); } - ; .max-w5 { max-width: var(--s5); } - ; .max-w6 { max-width: var(--s6); } - ; .max-w7 { max-width: var(--s7); } - ; .max-w8 { max-width: var(--s8); } - ; .max-w9 { max-width: var(--s9); } - ; .max-w10 { max-width: var(--s10); } - ; .max-w11 { max-width: var(--s11); } - ; .max-w12 { max-width: var(--s12); } - ; .max-w13 { max-width: var(--s13); } - ; .max-w14 { max-width: var(--s14); } - ; .max-w15 { max-width: var(--s15); } - ; .max-w16 { max-width: var(--s16); } - ; .max-w17 { max-width: var(--s17); } - ; .max-w18 { max-width: var(--s18); } - ; .max-w19 { max-width: var(--s19); } - ; .max-w20 { max-width: var(--s20); } - ; .max-w21 { max-width: var(--s21); } - ; .max-w22 { max-width: var(--s22); } - ; .max-w23 { max-width: var(--s23); } - ; .max-w24 { max-width: var(--s24); } - ; .max-w25 { max-width: var(--s25); } - ; .max-w26 { max-width: var(--s26); } - ; .max-w27 { max-width: var(--s27); } - ; .max-w28 { max-width: var(--s28); } - ; .max-w29 { max-width: var(--s29); } - ; .max-w30 { max-width: var(--s30); } - ; - ; .hf { height: 100%; } - ; .mhf { max-height: 100%; } - ; .hfc { height: fit-content; } - ; - ; .h0 { height: var(--s0); } - ; .h1 { height: var(--s1); } - ; .h2 { height: var(--s2); } - ; .h3 { height: var(--s3); } - ; .h4 { height: var(--s4); } - ; .h5 { height: var(--s5); } - ; .h6 { height: var(--s6); } - ; .h7 { height: var(--s7); } - ; .h8 { height: var(--s8); } - ; .h9 { height: var(--s9); } - ; .h10 { height: var(--s10); } - ; .h11 { height: var(--s11); } - ; .h12 { height: var(--s12); } - ; .h13 { height: var(--s13); } - ; .h14 { height: var(--s14); } - ; .h15 { height: var(--s15); } - ; .h16 { height: var(--s16); } - ; .h17 { height: var(--s17); } - ; .h18 { height: var(--s18); } - ; .h19 { height: var(--s19); } - ; .h20 { height: var(--s20); } - ; .h21 { height: var(--s21); } - ; .h22 { height: var(--s22); } - ; .h23 { height: var(--s23); } - ; .h24 { height: var(--s24); } - ; .h25 { height: var(--s25); } - ; .h26 { height: var(--s26); } - ; .h27 { height: var(--s27); } - ; .h28 { height: var(--s28); } - ; .h29 { height: var(--s29); } - ; .h30 { height: var(--s30); } - ; .min-h0 { min-height: var(--s0); } - ; .min-h1 { min-height: var(--s1); } - ; .min-h2 { min-height: var(--s2); } - ; .min-h3 { min-height: var(--s3); } - ; .min-h4 { min-height: var(--s4); } - ; .min-h5 { min-height: var(--s5); } - ; .min-h6 { min-height: var(--s6); } - ; .min-h7 { min-height: var(--s7); } - ; .min-h8 { min-height: var(--s8); } - ; .min-h9 { min-height: var(--s9); } - ; .min-h10 { min-height: var(--s10); } - ; .min-h11 { min-height: var(--s11); } - ; .min-h12 { min-height: var(--s12); } - ; .min-h13 { min-height: var(--s13); } - ; .min-h14 { min-height: var(--s14); } - ; .min-h15 { min-height: var(--s15); } - ; .min-h16 { min-height: var(--s16); } - ; .min-h17 { min-height: var(--s17); } - ; .min-h18 { min-height: var(--s18); } - ; .min-h19 { min-height: var(--s19); } - ; .min-h20 { min-height: var(--s20); } - ; .min-h21 { min-height: var(--s21); } - ; .min-h22 { min-height: var(--s22); } - ; .min-h23 { min-height: var(--s23); } - ; .min-h24 { min-height: var(--s24); } - ; .min-h25 { min-height: var(--s25); } - ; .min-h26 { min-height: var(--s26); } - ; .min-h27 { min-height: var(--s27); } - ; .min-h28 { min-height: var(--s28); } - ; .min-h29 { min-height: var(--s29); } - ; .min-h30 { min-height: var(--s30); } - ; .max-h0 { max-height: var(--s0); } - ; .max-h1 { max-height: var(--s1); } - ; .max-h2 { max-height: var(--s2); } - ; .max-h3 { max-height: var(--s3); } - ; .max-h4 { max-height: var(--s4); } - ; .max-h5 { max-height: var(--s5); } - ; .max-h6 { max-height: var(--s6); } - ; .max-h7 { max-height: var(--s7); } - ; .max-h8 { max-height: var(--s8); } - ; .max-h9 { max-height: var(--s9); } - ; .max-h10 { max-height: var(--s10); } - ; .max-h11 { max-height: var(--s11); } - ; .max-h12 { max-height: var(--s12); } - ; .max-h13 { max-height: var(--s13); } - ; .max-h14 { max-height: var(--s14); } - ; .max-h15 { max-height: var(--s15); } - ; .max-h16 { max-height: var(--s16); } - ; .max-h17 { max-height: var(--s17); } - ; .max-h18 { max-height: var(--s18); } - ; .max-h19 { max-height: var(--s19); } - ; .max-h20 { max-height: var(--s20); } - ; .max-h21 { max-height: var(--s21); } - ; .max-h22 { max-height: var(--s22); } - ; .max-h23 { max-height: var(--s23); } - ; .max-h24 { max-height: var(--s24); } - ; .max-h25 { max-height: var(--s25); } - ; .max-h26 { max-height: var(--s26); } - ; .max-h27 { max-height: var(--s27); } - ; .max-h28 { max-height: var(--s28); } - ; .max-h29 { max-height: var(--s29); } - ; .max-h30 { max-height: var(--s30); } - ; - ; .pe-none { pointer-events: none; } - ; .pe-auto { pointer-events: auto; } - ; - ; .mono { font-family: var(--font-mono); } - ; .serif { font-family: var(--font-serif); } - ; .sans { font-family: var(--font-sans); } - ; .italic { font-style: italic; } - ; .underline { text-decoration: underline; } - ; .no-underline { text-decoration: none !important; } - ; .bold { font-weight: bold; } - ; .strike { text-decoration: line-through; } - ; .pre { white-space: pre; } - ; .pre-line { white-space: pre-line; } - ; .pre-wrap { white-space: pre-wrap; } - ; .nowrap { white-space: nowrap; } - ; .tl { text-align: left; } - ; .tc { text-align: center; } - ; .tr { text-align: right; } - ; .contain { object-fit: contain; } - ; .middle { vertical-align: middle; } - ; .right { float: right; } - ; .block { display: block; } - ; .inline { display: inline } - ; .inline-block { display: inline-block } - ; .fc { display: flex; - ; flex-direction: column; } - ; .fcr { display: flex; - ; flex-direction: column-reverse; } - ; .fcw { display: flex; - ; flex-direction: column; - ; flex-wrap: wrap; } - ; .fr { display: flex; - ; flex-direction: row; } - ; .frw { display: flex; - ; flex-direction: row; - ; flex-wrap: wrap; } - ; .frrw { display: flex; - ; flex-direction: row-reverse; - ; flex-wrap: wrap; } - ; .frr { display: flex; - ; flex-direction: row-reverse; } - ; .basis-full { flex-basis: 100%; } - ; .basis-half { flex-basis: 50%; flex-shrink: 0; } - ; .basis-none { flex-basis: 0%; flex-shrink: 1; } - ; .shrink-none { flex-shrink: 0; } - ; .relative { position: relative; } - ; .absolute { position: absolute; } - ; .fixed { position: fixed; } - ; .sticky { position: sticky; } - ; .top0 { top: 0; } - ; .left0 { left: 0; } - ; .right0 { right: 0; } - ; .bottom0 { bottom: 0; } - ; .z-2 { z-index: -20; } - ; .z-1 { z-index: -10; } - ; .z0 { z-index: 0; } - ; .z1 { z-index: 10; } - ; .z2 { z-index: 20; } - ; .grow { flex-grow: 1; } - ; - ; - ; .g0 { gap: var(--s0); } - ; .g1 { gap: var(--s1); } - ; .g2 { gap: var(--s2); } - ; .g3 { gap: var(--s3); } - ; .g4 { gap: var(--s4); } - ; .g5 { gap: var(--s5); } - ; .g6 { gap: var(--s6); } - ; .g7 { gap: var(--s7); } - ; .g8 { gap: var(--s8); } - ; .g9 { gap: var(--s9); } - ; .g10 { gap: var(--s10); } - ; .g11 { gap: var(--s11); } - ; .g12 { gap: var(--s12); } - ; .g13 { gap: var(--s13); } - ; .g14 { gap: var(--s14); } - ; .g15 { gap: var(--s15); } - ; .g16 { gap: var(--s16); } - ; .g17 { gap: var(--s17); } - ; .g18 { gap: var(--s18); } - ; .g19 { gap: var(--s19); } - ; .g20 { gap: var(--s20); } - ; .g21 { gap: var(--s21); } - ; .g22 { gap: var(--s22); } - ; .g23 { gap: var(--s23); } - ; .g24 { gap: var(--s24); } - ; .g25 { gap: var(--s25); } - ; .g26 { gap: var(--s26); } - ; .g27 { gap: var(--s27); } - ; .g28 { gap: var(--s28); } - ; .g29 { gap: var(--s29); } - ; .g30 { gap: var(--s30); } - ; - ; .p-page { padding: var(--p-page); } - ; - ; .p0 { padding: var(--s0); } - ; .p1 { padding: var(--s1); } - ; .p2 { padding: var(--s2); } - ; .p3 { padding: var(--s3); } - ; .p4 { padding: var(--s4); } - ; .p5 { padding: var(--s5); } - ; .p6 { padding: var(--s6); } - ; .p7 { padding: var(--s7); } - ; .p8 { padding: var(--s8); } - ; .p9 { padding: var(--s9); } - ; .p10 { padding: var(--s10); } - ; .p11 { padding: var(--s11); } - ; .p12 { padding: var(--s12); } - ; .p13 { padding: var(--s13); } - ; .p14 { padding: var(--s14); } - ; .p15 { padding: var(--s15); } - ; .p16 { padding: var(--s16); } - ; .p17 { padding: var(--s17); } - ; .p18 { padding: var(--s18); } - ; .p19 { padding: var(--s19); } - ; .p20 { padding: var(--s20); } - ; .p21 { padding: var(--s21); } - ; .p22 { padding: var(--s22); } - ; .p23 { padding: var(--s23); } - ; .p24 { padding: var(--s24); } - ; .p25 { padding: var(--s25); } - ; .p26 { padding: var(--s26); } - ; .p27 { padding: var(--s27); } - ; .p28 { padding: var(--s28); } - ; .p29 { padding: var(--s29); } - ; .p30 { padding: var(--s30); } - ; - ; .px0 { padding-left: var(--s0); padding-right: var(--s0); } - ; .px1 { padding-left: var(--s1); padding-right: var(--s1); } - ; .px2 { padding-left: var(--s2); padding-right: var(--s2); } - ; .px3 { padding-left: var(--s3); padding-right: var(--s3); } - ; .px4 { padding-left: var(--s4); padding-right: var(--s4); } - ; .px5 { padding-left: var(--s5); padding-right: var(--s5); } - ; .px6 { padding-left: var(--s6); padding-right: var(--s6); } - ; .px7 { padding-left: var(--s7); padding-right: var(--s7); } - ; .px8 { padding-left: var(--s8); padding-right: var(--s8); } - ; .px9 { padding-left: var(--s9); padding-right: var(--s9); } - ; .px10 { padding-left: var(--s10); padding-right: var(--s10); } - ; .px11 { padding-left: var(--s11); padding-right: var(--s11); } - ; .px12 { padding-left: var(--s12); padding-right: var(--s12); } - ; .px13 { padding-left: var(--s13); padding-right: var(--s13); } - ; .px14 { padding-left: var(--s14); padding-right: var(--s14); } - ; .px15 { padding-left: var(--s15); padding-right: var(--s15); } - ; .px16 { padding-left: var(--s16); padding-right: var(--s16); } - ; .px17 { padding-left: var(--s17); padding-right: var(--s17); } - ; .px18 { padding-left: var(--s18); padding-right: var(--s18); } - ; .px19 { padding-left: var(--s19); padding-right: var(--s19); } - ; .px20 { padding-left: var(--s20); padding-right: var(--s20); } - ; .px21 { padding-left: var(--s21); padding-right: var(--s21); } - ; .px22 { padding-left: var(--s22); padding-right: var(--s22); } - ; .px23 { padding-left: var(--s23); padding-right: var(--s23); } - ; .px24 { padding-left: var(--s24); padding-right: var(--s24); } - ; .px25 { padding-left: var(--s25); padding-right: var(--s25); } - ; .px26 { padding-left: var(--s26); padding-right: var(--s26); } - ; .px27 { padding-left: var(--s27); padding-right: var(--s27); } - ; .px28 { padding-left: var(--s28); padding-right: var(--s28); } - ; .px29 { padding-left: var(--s29); padding-right: var(--s29); } - ; .px30 { padding-left: var(--s30); padding-right: var(--s30); } - ; - ; .py0 { padding-top: var(--s0); padding-bottom: var(--s0); } - ; .py1 { padding-top: var(--s1); padding-bottom: var(--s1); } - ; .py2 { padding-top: var(--s2); padding-bottom: var(--s2); } - ; .py3 { padding-top: var(--s3); padding-bottom: var(--s3); } - ; .py4 { padding-top: var(--s4); padding-bottom: var(--s4); } - ; .py5 { padding-top: var(--s5); padding-bottom: var(--s5); } - ; .py6 { padding-top: var(--s6); padding-bottom: var(--s6); } - ; .py7 { padding-top: var(--s7); padding-bottom: var(--s7); } - ; .py8 { padding-top: var(--s8); padding-bottom: var(--s8); } - ; .py9 { padding-top: var(--s9); padding-bottom: var(--s9); } - ; .py10 { padding-top: var(--s10); padding-bottom: var(--s10); } - ; .py11 { padding-top: var(--s11); padding-bottom: var(--s11); } - ; .py12 { padding-top: var(--s12); padding-bottom: var(--s12); } - ; .py13 { padding-top: var(--s13); padding-bottom: var(--s13); } - ; .py14 { padding-top: var(--s14); padding-bottom: var(--s14); } - ; .py15 { padding-top: var(--s15); padding-bottom: var(--s15); } - ; .py16 { padding-top: var(--s16); padding-bottom: var(--s16); } - ; .py17 { padding-top: var(--s17); padding-bottom: var(--s17); } - ; .py18 { padding-top: var(--s18); padding-bottom: var(--s18); } - ; .py19 { padding-top: var(--s19); padding-bottom: var(--s19); } - ; .py20 { padding-top: var(--s20); padding-bottom: var(--s20); } - ; .py21 { padding-top: var(--s21); padding-bottom: var(--s21); } - ; .py22 { padding-top: var(--s22); padding-bottom: var(--s22); } - ; .py23 { padding-top: var(--s23); padding-bottom: var(--s23); } - ; .py24 { padding-top: var(--s24); padding-bottom: var(--s24); } - ; .py25 { padding-top: var(--s25); padding-bottom: var(--s25); } - ; .py26 { padding-top: var(--s26); padding-bottom: var(--s26); } - ; .py27 { padding-top: var(--s27); padding-bottom: var(--s27); } - ; .py28 { padding-top: var(--s28); padding-bottom: var(--s28); } - ; .py29 { padding-top: var(--s29); padding-bottom: var(--s29); } - ; .py30 { padding-top: var(--s30); padding-bottom: var(--s30); } - ; - ; .pl0 { padding-left: var(--s0); } - ; .pl1 { padding-left: var(--s1); } - ; .pl2 { padding-left: var(--s2); } - ; .pl3 { padding-left: var(--s3); } - ; .pl4 { padding-left: var(--s4); } - ; .pl5 { padding-left: var(--s5); } - ; .pl6 { padding-left: var(--s6); } - ; .pl7 { padding-left: var(--s7); } - ; .pl8 { padding-left: var(--s8); } - ; .pl9 { padding-left: var(--s9); } - ; .pl10 { padding-left: var(--s10); } - ; .pl11 { padding-left: var(--s11); } - ; .pl12 { padding-left: var(--s12); } - ; .pl13 { padding-left: var(--s13); } - ; .pl14 { padding-left: var(--s14); } - ; .pl15 { padding-left: var(--s15); } - ; .pl16 { padding-left: var(--s16); } - ; .pl17 { padding-left: var(--s17); } - ; .pl18 { padding-left: var(--s18); } - ; .pl19 { padding-left: var(--s19); } - ; .pl20 { padding-left: var(--s20); } - ; .pl21 { padding-left: var(--s21); } - ; .pl22 { padding-left: var(--s22); } - ; .pl23 { padding-left: var(--s23); } - ; .pl24 { padding-left: var(--s24); } - ; .pl25 { padding-left: var(--s25); } - ; .pl26 { padding-left: var(--s26); } - ; .pl27 { padding-left: var(--s27); } - ; .pl28 { padding-left: var(--s28); } - ; .pl29 { padding-left: var(--s29); } - ; .pl30 { padding-left: var(--s30); } - ; - ; .pr0 { padding-right: var(--s0); } - ; .pr1 { padding-right: var(--s1); } - ; .pr2 { padding-right: var(--s2); } - ; .pr3 { padding-right: var(--s3); } - ; .pr4 { padding-right: var(--s4); } - ; .pr5 { padding-right: var(--s5); } - ; .pr6 { padding-right: var(--s6); } - ; .pr7 { padding-right: var(--s7); } - ; .pr8 { padding-right: var(--s8); } - ; .pr9 { padding-right: var(--s9); } - ; .pr10 { padding-right: var(--s10); } - ; .pr11 { padding-right: var(--s11); } - ; .pr12 { padding-right: var(--s12); } - ; .pr13 { padding-right: var(--s13); } - ; .pr14 { padding-right: var(--s14); } - ; .pr15 { padding-right: var(--s15); } - ; .pr16 { padding-right: var(--s16); } - ; .pr17 { padding-right: var(--s17); } - ; .pr18 { padding-right: var(--s18); } - ; .pr19 { padding-right: var(--s19); } - ; .pr20 { padding-right: var(--s20); } - ; .pr21 { padding-right: var(--s21); } - ; .pr22 { padding-right: var(--s22); } - ; .pr23 { padding-right: var(--s23); } - ; .pr24 { padding-right: var(--s24); } - ; .pr25 { padding-right: var(--s25); } - ; .pr26 { padding-right: var(--s26); } - ; .pr27 { padding-right: var(--s27); } - ; .pr28 { padding-right: var(--s28); } - ; .pr29 { padding-right: var(--s29); } - ; .pr30 { padding-right: var(--s30); } - ; - ; .pt0 { padding-top: var(--s0); } - ; .pt1 { padding-top: var(--s1); } - ; .pt2 { padding-top: var(--s2); } - ; .pt3 { padding-top: var(--s3); } - ; .pt4 { padding-top: var(--s4); } - ; .pt5 { padding-top: var(--s5); } - ; .pt6 { padding-top: var(--s6); } - ; .pt7 { padding-top: var(--s7); } - ; .pt8 { padding-top: var(--s8); } - ; .pt9 { padding-top: var(--s9); } - ; .pt10 { padding-top: var(--s10); } - ; .pt11 { padding-top: var(--s11); } - ; .pt12 { padding-top: var(--s12); } - ; .pt13 { padding-top: var(--s13); } - ; .pt14 { padding-top: var(--s14); } - ; .pt15 { padding-top: var(--s15); } - ; .pt16 { padding-top: var(--s16); } - ; .pt17 { padding-top: var(--s17); } - ; .pt18 { padding-top: var(--s18); } - ; .pt19 { padding-top: var(--s19); } - ; .pt20 { padding-top: var(--s20); } - ; .pt21 { padding-top: var(--s21); } - ; .pt22 { padding-top: var(--s22); } - ; .pt23 { padding-top: var(--s23); } - ; .pt24 { padding-top: var(--s24); } - ; .pt25 { padding-top: var(--s25); } - ; .pt26 { padding-top: var(--s26); } - ; .pt27 { padding-top: var(--s27); } - ; .pt28 { padding-top: var(--s28); } - ; .pt29 { padding-top: var(--s29); } - ; .pt30 { padding-top: var(--s30); } - ; - ; .pb0 { padding-bottom: var(--s0); } - ; .pb1 { padding-bottom: var(--s1); } - ; .pb2 { padding-bottom: var(--s2); } - ; .pb3 { padding-bottom: var(--s3); } - ; .pb4 { padding-bottom: var(--s4); } - ; .pb5 { padding-bottom: var(--s5); } - ; .pb6 { padding-bottom: var(--s6); } - ; .pb7 { padding-bottom: var(--s7); } - ; .pb8 { padding-bottom: var(--s8); } - ; .pb9 { padding-bottom: var(--s9); } - ; .pb10 { padding-bottom: var(--s10); } - ; .pb11 { padding-bottom: var(--s11); } - ; .pb12 { padding-bottom: var(--s12); } - ; .pb13 { padding-bottom: var(--s13); } - ; .pb14 { padding-bottom: var(--s14); } - ; .pb15 { padding-bottom: var(--s15); } - ; .pb16 { padding-bottom: var(--s16); } - ; .pb17 { padding-bottom: var(--s17); } - ; .pb18 { padding-bottom: var(--s18); } - ; .pb19 { padding-bottom: var(--s19); } - ; .pb20 { padding-bottom: var(--s20); } - ; .pb21 { padding-bottom: var(--s21); } - ; .pb22 { padding-bottom: var(--s22); } - ; .pb23 { padding-bottom: var(--s23); } - ; .pb24 { padding-bottom: var(--s24); } - ; .pb25 { padding-bottom: var(--s25); } - ; .pb26 { padding-bottom: var(--s26); } - ; .pb27 { padding-bottom: var(--s27); } - ; .pb28 { padding-bottom: var(--s28); } - ; .pb29 { padding-bottom: var(--s29); } - ; .pb30 { padding-bottom: var(--s30); } - ; - ; .ma { margin: auto; } - ; - ; .m0 { margin: var(--s0); } - ; .m1 { margin: var(--s1); } - ; .m2 { margin: var(--s2); } - ; .m3 { margin: var(--s3); } - ; .m4 { margin: var(--s4); } - ; .m5 { margin: var(--s5); } - ; .m6 { margin: var(--s6); } - ; .m7 { margin: var(--s7); } - ; .m8 { margin: var(--s8); } - ; .m9 { margin: var(--s9); } - ; .m10 { margin: var(--s10); } - ; .m11 { margin: var(--s11); } - ; .m12 { margin: var(--s12); } - ; .m13 { margin: var(--s13); } - ; .m14 { margin: var(--s14); } - ; .m15 { margin: var(--s15); } - ; .m16 { margin: var(--s16); } - ; .m17 { margin: var(--s17); } - ; .m18 { margin: var(--s18); } - ; .m19 { margin: var(--s19); } - ; .m20 { margin: var(--s20); } - ; .m21 { margin: var(--s21); } - ; .m22 { margin: var(--s22); } - ; .m23 { margin: var(--s23); } - ; .m24 { margin: var(--s24); } - ; .m25 { margin: var(--s25); } - ; .m26 { margin: var(--s26); } - ; .m27 { margin: var(--s27); } - ; .m28 { margin: var(--s28); } - ; .m29 { margin: var(--s29); } - ; .m30 { margin: var(--s30); } - ; - ; .ml0 { margin-left: var(--s0); } - ; .ml1 { margin-left: var(--s1); } - ; .ml2 { margin-left: var(--s2); } - ; .ml3 { margin-left: var(--s3); } - ; .ml4 { margin-left: var(--s4); } - ; .ml5 { margin-left: var(--s5); } - ; .ml6 { margin-left: var(--s6); } - ; .ml7 { margin-left: var(--s7); } - ; .ml8 { margin-left: var(--s8); } - ; .ml9 { margin-left: var(--s9); } - ; .ml10 { margin-left: var(--s10); } - ; .ml11 { margin-left: var(--s11); } - ; .ml12 { margin-left: var(--s12); } - ; .ml13 { margin-left: var(--s13); } - ; .ml14 { margin-left: var(--s14); } - ; .ml15 { margin-left: var(--s15); } - ; .ml16 { margin-left: var(--s16); } - ; .ml17 { margin-left: var(--s17); } - ; .ml18 { margin-left: var(--s18); } - ; .ml19 { margin-left: var(--s19); } - ; .ml20 { margin-left: var(--s20); } - ; .ml21 { margin-left: var(--s21); } - ; .ml22 { margin-left: var(--s22); } - ; .ml23 { margin-left: var(--s23); } - ; .ml24 { margin-left: var(--s24); } - ; .ml25 { margin-left: var(--s25); } - ; .ml26 { margin-left: var(--s26); } - ; .ml27 { margin-left: var(--s27); } - ; .ml28 { margin-left: var(--s28); } - ; .ml29 { margin-left: var(--s29); } - ; .ml30 { margin-left: var(--s30); } - ; - ; .mr0 { margin-right: var(--s0); } - ; .mr1 { margin-right: var(--s1); } - ; .mr2 { margin-right: var(--s2); } - ; .mr3 { margin-right: var(--s3); } - ; .mr4 { margin-right: var(--s4); } - ; .mr5 { margin-right: var(--s5); } - ; .mr6 { margin-right: var(--s6); } - ; .mr7 { margin-right: var(--s7); } - ; .mr8 { margin-right: var(--s8); } - ; .mr9 { margin-right: var(--s9); } - ; .mr10 { margin-right: var(--s10); } - ; .mr11 { margin-right: var(--s11); } - ; .mr12 { margin-right: var(--s12); } - ; .mr13 { margin-right: var(--s13); } - ; .mr14 { margin-right: var(--s14); } - ; .mr15 { margin-right: var(--s15); } - ; .mr16 { margin-right: var(--s16); } - ; .mr17 { margin-right: var(--s17); } - ; .mr18 { margin-right: var(--s18); } - ; .mr19 { margin-right: var(--s19); } - ; .mr20 { margin-right: var(--s20); } - ; .mr21 { margin-right: var(--s21); } - ; .mr22 { margin-right: var(--s22); } - ; .mr23 { margin-right: var(--s23); } - ; .mr24 { margin-right: var(--s24); } - ; .mr25 { margin-right: var(--s25); } - ; .mr26 { margin-right: var(--s26); } - ; .mr27 { margin-right: var(--s27); } - ; .mr28 { margin-right: var(--s28); } - ; .mr29 { margin-right: var(--s29); } - ; .mr30 { margin-right: var(--s30); } - ; - ; .mt0 { margin-top: var(--s0); } - ; .mt1 { margin-top: var(--s1); } - ; .mt2 { margin-top: var(--s2); } - ; .mt3 { margin-top: var(--s3); } - ; .mt4 { margin-top: var(--s4); } - ; .mt5 { margin-top: var(--s5); } - ; .mt6 { margin-top: var(--s6); } - ; .mt7 { margin-top: var(--s7); } - ; .mt8 { margin-top: var(--s8); } - ; .mt9 { margin-top: var(--s9); } - ; .mt10 { margin-top: var(--s10); } - ; .mt11 { margin-top: var(--s11); } - ; .mt12 { margin-top: var(--s12); } - ; .mt13 { margin-top: var(--s13); } - ; .mt14 { margin-top: var(--s14); } - ; .mt15 { margin-top: var(--s15); } - ; .mt16 { margin-top: var(--s16); } - ; .mt17 { margin-top: var(--s17); } - ; .mt18 { margin-top: var(--s18); } - ; .mt19 { margin-top: var(--s19); } - ; .mt20 { margin-top: var(--s20); } - ; .mt21 { margin-top: var(--s21); } - ; .mt22 { margin-top: var(--s22); } - ; .mt23 { margin-top: var(--s23); } - ; .mt24 { margin-top: var(--s24); } - ; .mt25 { margin-top: var(--s25); } - ; .mt26 { margin-top: var(--s26); } - ; .mt27 { margin-top: var(--s27); } - ; .mt28 { margin-top: var(--s28); } - ; .mt29 { margin-top: var(--s29); } - ; .mt30 { margin-top: var(--s30); } - ; - ; .mb0 { margin-bottom: var(--s0); } - ; .mb1 { margin-bottom: var(--s1); } - ; .mb2 { margin-bottom: var(--s2); } - ; .mb3 { margin-bottom: var(--s3); } - ; .mb4 { margin-bottom: var(--s4); } - ; .mb5 { margin-bottom: var(--s5); } - ; .mb6 { margin-bottom: var(--s6); } - ; .mb7 { margin-bottom: var(--s7); } - ; .mb8 { margin-bottom: var(--s8); } - ; .mb9 { margin-bottom: var(--s9); } - ; .mb10 { margin-bottom: var(--s10); } - ; .mb11 { margin-bottom: var(--s11); } - ; .mb12 { margin-bottom: var(--s12); } - ; .mb13 { margin-bottom: var(--s13); } - ; .mb14 { margin-bottom: var(--s14); } - ; .mb15 { margin-bottom: var(--s15); } - ; .mb16 { margin-bottom: var(--s16); } - ; .mb17 { margin-bottom: var(--s17); } - ; .mb18 { margin-bottom: var(--s18); } - ; .mb19 { margin-bottom: var(--s19); } - ; .mb20 { margin-bottom: var(--s20); } - ; .mb21 { margin-bottom: var(--s21); } - ; .mb22 { margin-bottom: var(--s22); } - ; .mb23 { margin-bottom: var(--s23); } - ; .mb24 { margin-bottom: var(--s24); } - ; .mb25 { margin-bottom: var(--s25); } - ; .mb26 { margin-bottom: var(--s26); } - ; .mb27 { margin-bottom: var(--s27); } - ; .mb28 { margin-bottom: var(--s28); } - ; .mb29 { margin-bottom: var(--s29); } - ; .mb30 { margin-bottom: var(--s30); } - ; - ; .o0 { opacity: 0%; } - ; .o1 { opacity: 10%; } - ; .o2 { opacity: 20%; } - ; .o3 { opacity: 30%; } - ; .o4 { opacity: 40%; } - ; .o5 { opacity: 50%; } - ; .o6 { opacity: 60%; } - ; .o7 { opacity: 70%; } - ; .o8 { opacity: 80%; } - ; .o9 { opacity: 90%; } - ; .o10 { opacity: 100%; } - ; - ; .scroll-y { overflow-y: auto; } - ; .scroll-x { overflow-x: auto; } - ; .scroll-none { overflow: hidden; } - ; - ; ::-webkit-scrollbar { width: 12px; } - ; ::-webkit-scrollbar:horizontal { height: 12px; } - ; ::-webkit-scrollbar-thumb { - ; background-color: var(--b4); - ; filter: brightness(var(--percent-scale)); - ; } - ; ::-webkit-scrollbar-track { - ; background: var(--b1); - ; filter: brightness(var(--percent-scale)); - ; } - ; ::-webkit-scrollbar-corner { - ; background: var(--b1); - ; filter: brightness(var(--percent-scale)); - ; } - ; - ; .f-4 { color: var(--f-4); } - ; .f-3 { color: var(--f-3); } - ; .f-2 { color: var(--f-2); } - ; .f-1 { color: var(--f-1); } - ; - ; .f0 { color: var(--f0); } - ; .f1 { color: var(--f1); } - ; .f2 { color: var(--f2); } - ; .f3 { color: var(--f3); } - ; .f4 { color: var(--f4); } - ; .f5 { color: var(--f5); } - ; .f6 { color: var(--f6); } - ; .f7 { color: var(--f7); } - ; .f8 { color: var(--f8); } - ; .f9 { color: var(--f9); } - ; .f10 { color: var(--f10); } - ; - ; .b-none { background-color: none; } - ; - ; .b-4 { background-color: var(--b-4); } - ; .b-3 { background-color: var(--b-3); } - ; .b-2 { background-color: var(--b-2); } - ; .b-1 { background-color: var(--b-1); } - ; - ; .b0 { background-color: var(--b0); } - ; .b1 { background-color: var(--b1); } - ; .b2 { background-color: var(--b2); } - ; .b3 { background-color: var(--b3); } - ; .b4 { background-color: var(--b4); } - ; .b5 { background-color: var(--b5); } - ; .b6 { background-color: var(--b6); } - ; .b7 { background-color: var(--b7); } - ; .b8 { background-color: var(--b8); } - ; .b9 { background-color: var(--b9); } - ; .b10 { background-color: var(--b10); } - ; - ; .fs-4 { font-size: 0.6rem; } - ; .fs-3 { font-size: 0.7rem; } - ; .fs-2 { font-size: 0.8rem; } - ; .fs-1 { font-size: 0.9rem; } - ; .fs-0 { font-size: 1rem; } - ; .fs0 { font-size: 1rem; } - ; .fs1 { font-size: 1.15rem; } - ; .fs2 { font-size: 1.3rem; } - ; .fs3 { font-size: 1.45rem; } - ; .fs4 { font-size: 1.6rem; } - ; .fs5 { font-size: 2rem; } - ; .fs6 { font-size: 2.4rem; } - ; .fs7 { font-size: 2.8rem; } - ; .fs8 { font-size: 3.4rem; } - ; .fs9 { font-size: 4.4rem; } - ; .fs10 { font-size: 5.4rem; } - ; - ; .lh0 { line-height: 1; } - ; .lh1 { line-height: 1.1; } - ; .lh2 { line-height: 1.2; } - ; .lh3 { line-height: 1.3; } - ; .lh4 { line-height: 1.4; } - ; .lh5 { line-height: 1.5; } - ; .lh6 { line-height: 1.6; } - ; .lh7 { line-height: 1.7; } - ; .lh8 { line-height: 1.8; } - ; .lh9 { line-height: 1.9; } - ; .lh10 { line-height: 2; } - ; - ; .bd0 { border: none; } - ; .bd1 { border: 1px solid var(--f5); } - ; .bd2 { border: 2px solid var(--f5); } - ; .bd3 { border: 4px solid var(--f5); } - ; - ; .bdt0 { border-top: none; } - ; .bdt1 { border-top: 1px solid var(--f5); } - ; .bdt2 { border-top: 2px solid var(--f5); } - ; .bdt3 { border-top: 4px solid var(--f5); } - ; - ; .bdb0 { border-bottom: none; } - ; .bdb1 { border-bottom: 1px solid var(--f5); } - ; .bdb2 { border-bottom: 2px solid var(--f5); } - ; .bdb3 { border-bottom: 4px solid var(--f5); } - ; - ; .bdl0 { border-left: none; } - ; .bdl1 { border-left: 1px solid var(--f5); } - ; .bdl2 { border-left: 2px solid var(--f5); } - ; .bdl3 { border-left: 4px solid var(--f5); } - ; - ; .bdr0 { border-right: none; } - ; .bdr1 { border-right: 1px solid var(--f5); } - ; .bdr2 { border-right: 2px solid var(--f5); } - ; .bdr3 { border-right: 4px solid var(--f5); } - ; - ; .br0 { border-radius: var(--s0); } - ; .br1 { border-radius: var(--s1); } - ; .br2 { border-radius: var(--s2); } - ; .br3 { border-radius: var(--s3); } - ; .br4 { border-radius: var(--s4); } - ; .br5 { border-radius: var(--s5); } - ; .br6 { border-radius: var(--s6); } - ; .br7 { border-radius: var(--s7); } - ; .br8 { border-radius: var(--s8); } - ; .br9 { border-radius: var(--s9); } - ; .br10 { border-radius: var(--s10); } - ; - ; .btrr0 { border-top-right-radius: var(--s0); } - ; .btrr1 { border-top-right-radius: var(--s1); } - ; .btrr2 { border-top-right-radius: var(--s2); } - ; .btrr3 { border-top-right-radius: var(--s3); } - ; .btrr4 { border-top-right-radius: var(--s4); } - ; .btrr5 { border-top-right-radius: var(--s5); } - ; .btrr6 { border-top-right-radius: var(--s6); } - ; .btrr7 { border-top-right-radius: var(--s7); } - ; .btrr8 { border-top-right-radius: var(--s8); } - ; .btrr9 { border-top-right-radius: var(--s9); } - ; .btrr10 { border-top-right-radius: var(--s10); } - ; - ; .btlr0 { border-top-left-radius: var(--s0); } - ; .btlr1 { border-top-left-radius: var(--s1); } - ; .btlr2 { border-top-left-radius: var(--s2); } - ; .btlr3 { border-top-left-radius: var(--s3); } - ; .btlr4 { border-top-left-radius: var(--s4); } - ; .btlr5 { border-top-left-radius: var(--s5); } - ; .btlr6 { border-top-left-radius: var(--s6); } - ; .btlr7 { border-top-left-radius: var(--s7); } - ; .btlr8 { border-top-left-radius: var(--s8); } - ; .btlr9 { border-top-left-radius: var(--s9); } - ; .btlr10 { border-top-left-radius: var(--s10); } - ; - ; .bbrr0 { border-bottom-right-radius: var(--s0); } - ; .bbrr1 { border-bottom-right-radius: var(--s1); } - ; .bbrr2 { border-bottom-right-radius: var(--s2); } - ; .bbrr3 { border-bottom-right-radius: var(--s3); } - ; .bbrr4 { border-bottom-right-radius: var(--s4); } - ; .bbrr5 { border-bottom-right-radius: var(--s5); } - ; .bbrr6 { border-bottom-right-radius: var(--s6); } - ; .bbrr7 { border-bottom-right-radius: var(--s7); } - ; .bbrr8 { border-bottom-right-radius: var(--s8); } - ; .bbrr9 { border-bottom-right-radius: var(--s9); } - ; .bbrr10 { border-bottom-right-radius: var(--s10); } - ; - ; .bblr0 { border-bottom-left-radius: var(--s0); } - ; .bblr1 { border-bottom-left-radius: var(--s1); } - ; .bblr2 { border-bottom-left-radius: var(--s2); } - ; .bblr3 { border-bottom-left-radius: var(--s3); } - ; .bblr4 { border-bottom-left-radius: var(--s4); } - ; .bblr5 { border-bottom-left-radius: var(--s5); } - ; .bblr6 { border-bottom-left-radius: var(--s6); } - ; .bblr7 { border-bottom-left-radius: var(--s7); } - ; .bblr8 { border-bottom-left-radius: var(--s8); } - ; .bblr9 { border-bottom-left-radius: var(--s9); } - ; .bblr10 { border-bottom-left-radius: var(--s10); } - ; - ; .bc-4 { border-color: var(--f-4); } - ; .bc-3 { border-color: var(--f-3); } - ; .bc-2 { border-color: var(--f-2); } - ; .bc-1 { border-color: var(--f-1); } - ; .bc0 { border-color: var(--f0); } - ; .bc1 { border-color: var(--f1); } - ; .bc2 { border-color: var(--f2); } - ; .bc3 { border-color: var(--f3); } - ; .bc4 { border-color: var(--f4); } - ; .bc5 { border-color: var(--f5); } - ; .bc6 { border-color: var(--f6); } - ; .bc7 { border-color: var(--f7); } - ; .bc8 { border-color: var(--f8); } - ; .bc9 { border-color: var(--f9); } - ; .bc10 { border-color: var(--f10); } - ; - ; .toggled { background: var(--f0); - ; color: var(--b0); } - ; .toggled.b0 { background-color: var(--f0); } - ; .toggled.b1 { background-color: var(--f1); } - ; .toggled.b2 { background-color: var(--f2); } - ; .toggled.b3 { background-color: var(--f3); } - ; .toggled.b4 { background-color: var(--f4); } - ; .toggled.b-1 { background-color: var(--f-1); } - ; .toggled.b-2 { background-color: var(--f-2); } - ; .toggled.b-3 { background-color: var(--f-3); } - ; .toggled.b-4 { background-color: var(--f-4); } - ; .toggled.f0 { color: var(--b0); } - ; .toggled.f1 { color: var(--b1); } - ; .toggled.f2 { color: var(--b2); } - ; .toggled.f3 { color: var(--b3); } - ; .toggled.f4 { color: var(--b4); } - ; .toggled.f-1 { color: var(--b-1); } - ; .toggled.f-2 { color: var(--b-2); } - ; .toggled.f-3 { color: var(--b-3); } - ; .toggled.f-4 { color: var(--b-4); } - ; .active { filter: invert(var(--active-offset)); } - ; *:disabled { opacity: 0.4; cursor: not-allowed; pointer-events: none; transition: opacity 0.3s ease; } - ; .disabled { opacity: 0.4; cursor: not-allowed; pointer-events: none; transition: opacity 0.3s ease; } - ; - ; - ; /* desktop hovers */ - ; - ; - ; @media (min-width: 700px) { - ; .hover:hover { filter: invert(17%); } - ; .hover-fg:hover { color: var(--f0); } - ; .hover-bd:hover { border-color: var(--f0); } - ; .hover-f:hover { color: var(--f0); border-color: var(--f0); } - ; .hover.active:hover { filter: invert(25%); } - ; .hover:disabled { filter: none; } - ; } - ; - ; .focus:focus { - ; outline: none; - ; box-shadow: inset 1px 1px var(--focus-color), - ; inset -1px -1px var(--focus-color); - ; } - ; - ; .pointer { cursor: pointer; } - ; .grabber { cursor: grab; } - ; .no-select { user-select: none; - ; -webkit-user-select: none; } - ; .page { - ; padding: var(--p-page); - ; margin: auto; - ; max-width: 650px; - ; } - ; .page-wide { - ; padding: var(--p-page); - ; margin: auto; - ; max-width: 880px; - ; } - ; .prose h1 { - ; font-size: 1.45em; - ; margin: 1rem 0; - ; } - ; .prose h2 { - ; font-size: 1.3em; - ; margin: 1rem 0; - ; } - ; .prose h3 { - ; font-size: 1.15em; - ; margin: 1rem 0; - ; } - ; .prose h1, .prose h2, .prose h3 { - ; font-weight: bold; - ; } - ; .prose p { - ; margin: 1rem 0; - ; line-height: 1.5; - ; overflow-wrap: break-word; - ; } - ; .prose img { - ; margin: 1rem 0; - ; max-width: 100%; - ; display: block; - ; max-height: 350px; - ; } - ; .prose details { - ; margin: 1rem 0; - ; } - ; .prose a { - ; text-decoration: underline; - ; } - ; .prose blockquote { - ; margin: 1rem 0; - ; margin-left: 10px; - ; border-left: 2px solid var(--b3); - ; padding: 4px; - ; padding-left: 12px; - ; color: var(--f2); - ; } - ; .prose pre { - ; font-family: var(--font-mono); - ; font-size: calc(1em * var(--mono-scale)); - ; overflow-x: auto; - ; width: 100%; - ; display: block; - ; padding: 8px; - ; margin: 1rem 0; - ; background-color: var(--b1); - ; } - ; .prose code { - ; font-family: var(--font-mono); - ; font-size: calc(1em * var(--mono-scale)); - ; color: var(--f2); - ; } - ; .prose hr { - ; margin: 2rem 0; - ; } - ; .prose > ul, - ; .prose > ol { - ; margin: 1rem 0; - ; } - ; .prose ul, - ; .prose ol { - ; padding-left: 29px; - ; margin: 0; - ; } - ; .prose ul p, - ; .prose ol p { - ; margin: 0.5rem 0; - ; line-height: calc(calc(1 + var(--line-height)) / 2); - ; } - ; .prose ul p:first-child, - ; .prose ol p:first-child { - ; margin: 0; - ; margin-bottom: 0.5rem; - ; } - ; .prose ul p:last-child, - ; .prose ol p:last-child { - ; margin: 0; - ; margin-top: 0.5rem; - ; } - ; .prose li { - ; margin: 0.5rem 0; - ; } - ; .prose ul ul, - ; .prose ol ul, - ; .prose ul ol, - ; .prose ol ol { - ; margin-bottom: 0; - ; } - ; .prose summary { - ; user-select: none; - ; -webkit-user-select: none; - ; } - ; .prose table { - ; border-collapse: collapse; - ; border-radius: 0.3em; - ; th, td { - ; border: 1px solid var(--f3); - ; padding: 0.5em 1em; - ; } - ; } - ; - ; - ; /* part 5: form/input/actionable styling */ - ; - ; - ; .loader { position: relative; display: flex; } - ; .loading { - ; position: absolute; - ; top: 50%; - ; left: 50%; - ; transform: translate(-50%, -50%); - ; pointer-events: none; - ; } - ; .loader .loading { - ; opacity: 0; - ; transition: opacity 300ms; - ; } - ; .is-loading.loader { - ; pointer-events: none; - ; } - ; .is-loading .loader .loading, - ; .loader.is-loading .loading { - ; opacity: 1; - ; } - ; .loader .loaded { - ; opacity: 1; - ; transition: opacity 300ms; - ; } - ; .is-loading .loader .loaded, - ; .loader.is-loading .loaded { - ; opacity: 0; - ; } - ; .is-requesting { - ; animation: requestPulse 2s ease-out infinite; - ; } - ; @keyframes requestPulse { - ; 0% { - ; filter: invert(0%); - ; } - ; 50% { - ; filter: invert(100%); - ; } - ; 100% { - ; filter: invert(0%); - ; } - ; } - ; ::placeholder { - ; color: var(--f5); - ; opacity: 0.5; - ; } - ; input[type="checkbox"] { - ; appearance: none; - ; -webkit-appearance: none; - ; width: 1em; - ; height: 1em; - ; border: 1.5px solid currentColor; - ; border-radius: 20%; - ; display: inline-block; - ; vertical-align: middle; - ; cursor: pointer; - ; position: relative; - ; } - ; input[type="checkbox"]:checked::before { - ; content: ''; - ; position: absolute; - ; top: 50%; - ; left: 50%; - ; width: 0.5em; - ; height: 0.5em; - ; background: currentColor; - ; border-radius: 20%; - ; transform: translate(-50%, -50%); - ; } - ; input[type="radio"] { - ; appearance: none; - ; -webkit-appearance: none; - ; width: 1em; - ; height: 1em; - ; border: 1.5px solid currentColor; - ; border-radius: 50%; - ; display: inline-block; - ; vertical-align: middle; - ; cursor: pointer; - ; position: relative; - ; } - ; input[type="radio"]:checked::before { - ; content: ''; - ; position: absolute; - ; top: 50%; - ; left: 50%; - ; width: 0.5em; - ; height: 0.5em; - ; background: currentColor; - ; border-radius: 50%; - ; transform: translate(-50%, -50%); - ; } - ; input[type=range] { - ; -webkit-appearance: none; - ; appearance: none; - ; width: 100%; - ; height: 5px; - ; background: var(--f4); - ; outline: none; - ; border-radius: 5px; - ; } - ; /* Style the slider thumb */ - ; input[type=range]::-webkit-slider-thumb { - ; -webkit-appearance: none; - ; appearance: none; - ; width: 0.8em; - ; height: 0.8em; - ; background: var(--f0); - ; cursor: pointer; - ; border-radius: 50%; - ; border: none; - ; } - ; input[type=range]::-moz-range-thumb { - ; width: 0.8em; - ; height: 0.8em; - ; background: var(--f0); - ; cursor: pointer; - ; border-radius: 50%; - ; border: none; - ; } - ; details summary.no-arrow::-webkit-details-marker, - ; details summary.no-arrow::marker { - ; display: none; - ; content: ""; - ; } - == --- diff --git a/desk/lib/fiberio.hoon b/desk/lib/fiberio.hoon index a876f4e..63512c6 100644 --- a/desk/lib/fiberio.hoon +++ b/desk/lib/fiberio.hoon @@ -11,11 +11,9 @@ |= =dart ^- tang ?- -.dart - %sysc ~[leaf+"vetoed syscall"] - %scry ~[leaf+"vetoed scry on wire {(spud wire.dart)}"] - %bowl ~[leaf+"vetoed bowl request on wire {(spud wire.dart)}"] + %here ~[leaf+"vetoed here request on wire {(spud wire.dart)}"] %kept ~[leaf+"vetoed kept request on wire {(spud wire.dart)}"] - %node ~[leaf+"vetoed node operation on wire {(spud wire.dart)}"] + %node ~[leaf+"vetoed node operation on wire {(spud wire.dart)} dest {} load {<-.load.dart>}"] %manu ~[leaf+"vetoed manu request on wire {(spud wire.dart)}"] == :: @@ -32,17 +30,6 @@ ^- form:m (send-darts dart ~) :: -++ send-card - |= =card:agent:gall - =/ m (fiber ,~) - ^- form:m - (send-dart %sysc card) -:: -++ send-cards - |= cards=(list card:agent:gall) - =/ m (fiber ,~) - ^- form:m - (send-darts (turn cards |=(=card:agent:gall [%sysc card]))) :: ++ trace |= =tang @@ -103,16 +90,43 @@ |= input [~ state %done in] :: -++ get-bowl +++ find-in-here + |= [=here:nexus target=(unit neck:tarball)] + ^- (unit @ud) + :: Scan pant from nearest ancestor (end) for matching neck. + :: Returns steps up from grub to ancestor nexus. + :: Value is directly usable as bend step count in lane-from-bend. + =/ rev=pant:nexus (flop pant.here) + =/ steps=@ud 0 + |- + ?~ rev ~ + ?~ neck.i.rev $(rev t.rev, steps +(steps)) + ?: ?& ?=(^ target) + !=(u.target u.neck.i.rev) + == + $(rev t.rev, steps +(steps)) + `steps +:: +ancestor-road: resolve a lane relative to an ancestor nexus +:: +:: Finds the nearest ancestor with the given code-id (e.g. [/claw %agent]) +:: via find-in-here, then builds a road to the given lane within it. +:: Works from any depth — no hardcoded offsets needed. +:: +++ ancestor-road + |= [code-id=[=path name=@tas] =lane:tarball] + =/ m (fiber ,road:tarball) + ^- form:m + ;< ~ bind:m (send-dart %here /ancestor) + ;< =here:nexus bind:m (take-here-raw /ancestor) + =/ steps=(unit @ud) (find-in-here here `code-id) + ?~ steps + ~& >>> ["fiberio: couldn't find ancestor" code-id] + (pure:m [%& lane]) + (pure:m [%| u.steps lane]) +:: +++ take-here-raw |= =wire - =/ m (fiber ,bowl:nexus) - ^- form:m - ;< ~ bind:m (send-dart %bowl wire) - (take-bowl wire) -:: -++ take-bowl - |= =wire - =/ m (fiber ,bowl:nexus) + =/ m (fiber ,here:nexus) ^- form:m |= input :+ ~ state @@ -120,18 +134,23 @@ ~ [%wait ~] [~ %veto *] [%fail (veto-error dart.u.in)] - [~ %bowl * *] + [~ %here * *] ?. =(wire wire.u.in) [%skip ~] - [%done bowl.u.in] + [%done here.u.in] == :: +++ coerce-here + |= =here:nexus + ^- rail:tarball + ?> root.here + [(turn pant.here |=([dir=@ta *] dir)) name.here] +:: ++ get-kept - |= =wire =/ m (fiber ,kept:nexus) ^- form:m - ;< ~ bind:m (send-dart %kept wire) - (take-kept wire) + ;< ~ bind:m (send-dart %kept /kept) + (take-kept /kept) :: ++ take-kept |= =wire @@ -160,13 +179,13 @@ ^- form:m ?. ?=(%rise -.prod) (pure:m ~) %- (slog leaf+msg tang.prod) - ;< =cage bind:m take-poke - ?: ?=(%sig p.cage) + ;< =sage:tarball bind:m take-poke + ?: =([/ %sig] p.sage) (pure:m ~) - (trace leaf+"strange restart mark: {}" ~) + (trace leaf+"strange restart mark: {}" ~) :: ++ take-poke - =/ m (fiber ,cage) + =/ m (fiber ,sage:tarball) ^- form:m |= input :+ ~ state @@ -175,19 +194,19 @@ [~ %veto *] [%fail (veto-error dart.u.in)] [~ %poke * *] - [%done cage.u.in] + [%done sage.u.in] == :: Take a poke and return both its source and payload :: -:: Returns [from cage] where: +:: Returns [from sage] where: :: from: %.y bend for internal (relative), %.n prov for external -:: cage: the poke payload +:: sage: the poke payload :: :: The from is relative to the current file's location. :: Use this when you need to verify the poke source for security. :: ++ take-poke-from - =/ m (fiber ,[from:fiber:nexus cage]) + =/ m (fiber ,[from:fiber:nexus sage:tarball]) ^- form:m |= input :+ ~ state @@ -196,66 +215,10 @@ [~ %veto *] [%fail (veto-error dart.u.in)] [~ %poke * *] - [%done [from cage]:u.in] + [%done [from sage]:u.in] == :: -++ take-watch - =/ m (fiber ,path) - ^- form:m - |= input - :+ ~ state - ?+ in [%skip ~] - ~ [%wait ~] - [~ %veto *] - [%fail (veto-error dart.u.in)] - [~ %watch *] - [%done path.u.in] - == -:: -++ take-leave - =/ m (fiber ,path) - ^- form:m - |= input - :+ ~ state - ?+ in [%skip ~] - ~ [%wait ~] - [~ %veto *] - [%fail (veto-error dart.u.in)] - [~ %leave *] - [%done path.u.in] - == :: -++ take-arvo - |= =wire - =/ m (fiber ,sign-arvo) - ^- form:m - |= input - :+ ~ state - ?+ in [%skip ~] - ~ [%wait ~] - [~ %veto *] - [%fail (veto-error dart.u.in)] - [~ %arvo * *] - ?. =(wire wire.u.in) - [%skip ~] - [%done sign.u.in] - == -:: -++ take-agent - |= =wire - =/ m (fiber ,sign:agent:gall) - ^- form:m - |= input - :+ ~ state - ?+ in [%skip ~] - ~ [%wait ~] - [~ %veto *] - [%fail (veto-error dart.u.in)] - [~ %agent * *] - ?. =(wire wire.u.in) - [%skip ~] - [%done sign.u.in] - == :: ++ take-made |= =wire @@ -311,50 +274,83 @@ :: File operations: make, poke, peek, cull, sand :: ++ make - |= [=wire =road:tarball =make:nexus] + |= [=road:tarball =make:nexus] =/ m (fiber ,~) ^- form:m - ;< ~ bind:m (send-dart %node wire road %make make) - (take-made wire) + ;< ~ bind:m (send-dart %node /make road %make make) + (take-made /make) +:: +++ make-soft + |= [=road:tarball =make:nexus] + =/ m (fiber ,(unit tang)) + ^- form:m + ;< ~ bind:m (send-dart %node /make road %make make) + |= input + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error dart.u.in)] + [~ %made * *] + ?. =(/make wire.u.in) + [%skip ~] + [%done err.u.in] + == :: ++ poke - |= [=wire =road:tarball =cage] + |= [=road:tarball =sage:tarball] =/ m (fiber ,~) ^- form:m - ;< ~ bind:m (send-dart %node wire road %poke cage) - (take-pack wire) + ;< ~ bind:m (send-dart %node /poke road %poke sage) + (take-pack /poke) :: ++ peek - |= [=wire =road:tarball mark=(unit mark)] + |= [=road:tarball blot=(unit blot:tarball)] =/ m (fiber ,seen:nexus) ^- form:m - ;< ~ bind:m (send-dart %node wire road %peek mark ~ %.n) - (take-peek wire) + ;< ~ bind:m (send-dart %node /peek road %peek blot ~ %.n) + (take-peek /peek) :: :: Peek at a historical version of a file :: ++ peek-at - |= [=wire =road:tarball mark=(unit mark) =case:nexus] + |= [=road:tarball blot=(unit blot:tarball) =case:nexus] =/ m (fiber ,seen:nexus) ^- form:m - ;< ~ bind:m (send-dart %node wire road %peek mark `case %.n) - (take-peek wire) + ;< ~ bind:m (send-dart %node /peek road %peek blot `case %.n) + (take-peek /peek) :: :: Check if a target (file or directory) exists at a road. :: Returns %.n on peek failure or %none view, %.y otherwise. :: ++ peek-exists - |= [=wire =road:tarball] + |= =road:tarball =/ m (fiber ,?) ^- form:m - ;< =seen:nexus bind:m (peek wire road ~) + ;< =seen:nexus bind:m (peek road ~) (pure:m ?&(?=(%& -.seen) !?=(%none -.p.seen))) :: +:: Direct manu: query a known nexus by neck +:: ++ manu - |= [=wire target=(each [=neck:tarball =mana:nexus] road:tarball)] + |= [=neck:tarball =mana:nexus] + =/ m (fiber ,@t) + ^- form:m + ;< ~ bind:m (send-dart %manu /manu neck mana) + (take-manu /manu) +:: Road manu: query docs for a path (system resolves nexus) +:: +++ manu-road + |= =road:tarball + =/ m (fiber ,@t) + ^- form:m + ;< ~ bind:m (send-dart %node /manu road %manu ~) + (take-manu /manu) +:: +++ take-manu + |= =wire =/ m (fiber ,@t) ^- form:m - ;< ~ bind:m (send-dart %manu wire target) |= input :+ ~ state ?+ in [%skip ~] @@ -370,10 +366,10 @@ == :: ++ cull - |= [=wire =road:tarball] + |= =road:tarball =/ m (fiber ,~) ^- form:m - ;< ~ bind:m (send-dart %node wire road %cull ~) + ;< ~ bind:m (send-dart %node /cull road %cull ~) |= input :+ ~ state ?+ in [%skip ~] @@ -381,18 +377,37 @@ [~ %veto *] [%fail (veto-error dart.u.in)] [~ %gone * *] - ?. =(wire wire.u.in) + ?. =(/cull wire.u.in) [%skip ~] ?~ err.u.in [%done ~] [%fail %cull-failed >road< u.err.u.in] == +:: Like +cull but logs and continues on error instead of crashing. +:: Use for best-effort cleanup where the target may already be gone. +:: +++ cull-soft + |= =road:tarball + =/ m (fiber ,(unit tang)) + ^- form:m + ;< ~ bind:m (send-dart %node /cull road %cull ~) + |= input + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error dart.u.in)] + [~ %gone * *] + ?. =(/cull wire.u.in) + [%skip ~] + [%done err.u.in] + == :: ++ sand - |= [=wire =road:tarball weir=(unit weir:nexus)] + |= [=road:tarball weir=(unit weir:nexus)] =/ m (fiber ,~) ^- form:m - ;< ~ bind:m (send-dart %node wire road %sand weir) + ;< ~ bind:m (send-dart %node /sand road %sand weir) |= input :+ ~ state ?+ in [%skip ~] @@ -400,18 +415,18 @@ [~ %veto *] [%fail (veto-error dart.u.in)] [~ %sand * *] - ?. =(wire wire.u.in) + ?. =(/sand wire.u.in) [%skip ~] ?~ err.u.in [%done ~] [%fail %sand-failed u.err.u.in] == :: -++ set-gain - |= [=wire =road:tarball flag=?] +++ gain + |= [=road:tarball flag=?] =/ m (fiber ,~) ^- form:m - ;< ~ bind:m (send-dart %node wire road %gain flag) + ;< ~ bind:m (send-dart %node /gain road %gain flag) |= input :+ ~ state ?+ in [%skip ~] @@ -419,7 +434,7 @@ [~ %veto *] [%fail (veto-error dart.u.in)] [~ %gain * *] - ?. =(wire wire.u.in) + ?. =(/gain wire.u.in) [%skip ~] ?~ err.u.in [%done ~] @@ -427,10 +442,10 @@ == :: ++ lose - |= [=wire =road:tarball =lose:nexus] + |= [=road:tarball =lose:nexus] =/ m (fiber ,~) ^- form:m - ;< ~ bind:m (send-dart %node wire road %lose lose) + ;< ~ bind:m (send-dart %node /lose road %lose lose) |= input :+ ~ state ?+ in [%skip ~] @@ -438,7 +453,7 @@ [~ %veto *] [%fail (veto-error dart.u.in)] [~ %lost * *] - ?. =(wire wire.u.in) + ?. =(/lose wire.u.in) [%skip ~] ?~ err.u.in [%done ~] @@ -446,10 +461,10 @@ == :: ++ seek - |= [=wire =road:tarball =lobe:clay] + |= [=road:tarball =lobe:clay] =/ m (fiber ,(each (list [=rail:tarball =cass:clay]) tang)) ^- form:m - ;< ~ bind:m (send-dart %node wire road %seek lobe) + ;< ~ bind:m (send-dart %node /seek road %seek lobe) |= input :+ ~ state ?+ in [%skip ~] @@ -457,16 +472,16 @@ [~ %veto *] [%fail (veto-error dart.u.in)] [~ %seek * *] - ?. =(wire wire.u.in) + ?. =(/seek wire.u.in) [%skip ~] [%done res.u.in] == :: ++ peep - |= [=wire =road:tarball =find:nexus] - =/ m (fiber ,(each (list [=cass:clay =cage]) tang)) + |= [=road:tarball =find:nexus] + =/ m (fiber ,(each (list [=cass:clay =sage:tarball]) tang)) ^- form:m - ;< ~ bind:m (send-dart %node wire road %peep find) + ;< ~ bind:m (send-dart %node /peep road %peep find) |= input :+ ~ state ?+ in [%skip ~] @@ -474,17 +489,17 @@ [~ %veto *] [%fail (veto-error dart.u.in)] [~ %peep * *] - ?. =(wire wire.u.in) + ?. =(/peep wire.u.in) [%skip ~] [%done res.u.in] == :: ++ over - |= [=wire =road:tarball =cage] + |= [=road:tarball =sage:tarball] =/ m (fiber ,~) ^- form:m - ;< ~ bind:m (send-dart %node wire road %over cage) - (take-over wire) + ;< ~ bind:m (send-dart %node /over road %over sage) + (take-over /over) :: ++ take-over |= =wire @@ -504,36 +519,11 @@ [%fail %over-failed u.err.u.in] == :: -++ diff - |= [=wire =road:tarball =cage] - =/ m (fiber ,~) - ^- form:m - ;< ~ bind:m (send-dart %node wire road %diff cage) - (take-diff wire) -:: -++ take-diff - |= =wire - =/ m (fiber ,~) - ^- form:m - |= input - :+ ~ state - ?+ in [%skip ~] - ~ [%wait ~] - [~ %veto *] - [%fail (veto-error dart.u.in)] - [~ %diff * *] - ?. =(wire wire.u.in) - [%skip ~] - ?~ err.u.in - [%done ~] - [%fail %diff-failed u.err.u.in] - == -:: ++ reload - |= [=wire =road:tarball] + |= =road:tarball =/ m (fiber ,~) ^- form:m - ;< ~ bind:m (send-dart %node wire road %load ~) + ;< ~ bind:m (send-dart %node /load road %load ~) |= input :+ ~ state ?+ in [%skip ~] @@ -541,7 +531,7 @@ [~ %veto *] [%fail (veto-error dart.u.in)] [~ %load * *] - ?. =(wire wire.u.in) + ?. =(/load wire.u.in) [%skip ~] ?~ err.u.in [%done ~] @@ -550,10 +540,10 @@ :: Subscription operations: keep, drop :: ++ keep - |= [=wire =road:tarball mark=(unit mark)] + |= [=wire =road:tarball blot=(unit blot:tarball)] =/ m (fiber ,view:nexus) ^- form:m - ;< ~ bind:m (send-dart %node wire road %keep mark) + ;< ~ bind:m (send-dart %node wire road %keep blot) (take-bond wire) :: ++ drop @@ -608,267 +598,314 @@ [%skip ~] [%done view.u.in] == -:: Scry helper +:: Scry via /sys/scry/ runtime service :: -++ do-scry - |* [=mold =wire =path] +++ scry + |* [=mold =path] =/ m (fiber ,mold) ^- form:m - ;< ~ bind:m (send-dart %scry wire `[mold path]) + ;< ~ bind:m + (poke &+&+[/sys/scry %'main.sig'] [[/ %scry-request] !>(`^path`path)]) + |= input + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error dart.u.in)] + [~ %poke * *] + ?. =([/ %scry-response] p.sage.u.in) [%skip ~] + [%done !<(mold q.sage.u.in)] + == +:: Create a new desk via /sys/clay/ runtime service +:: +++ create-desk + |= dek=desk + =/ m (fiber ,~) + ^- form:m + (poke &+&+[/sys/clay %'main.clay-state'] [[/ %new-desk] !>(dek)]) +:: Write/delete files in a Clay desk via /sys/clay/ runtime service. +:: No vases — the runtime clams through marks on the destination desk. +:: +++ clay-info + |= [dek=desk changes=(list [path ?([%ins @tas *] [%del ~])])] + =/ m (fiber ,~) + ^- form:m + (poke &+&+[/sys/clay %'main.clay-state'] [[/ %clay-info] !>([dek changes])]) +:: Send a belt to a dill session via /sys/dill/ runtime service +:: +++ send-belt + |= [session=@tas =belt:dill] + =/ m (fiber ,~) + ^- form:m + (poke &+&+[/sys/dill %'main.sig'] [[/ %dill-belt] !>([session belt])]) +:: +get-code: peek the code (bins) slice at a road +:: +++ get-code + |= =road:tarball + =/ m (fiber ,(unit vase)) + ^- form:m + ;< ~ bind:m (send-dart %node /code road %code ~) + (take-code /code) +:: +++ take-code + |= =wire + =/ m (fiber ,(unit vase)) + ^- form:m |= input :+ ~ state ?+ in [%skip ~] ~ [%wait ~] [~ %veto *] [%fail (veto-error dart.u.in)] - [~ %scry * *] + [~ %code * *] ?. =(wire wire.u.in) [%skip ~] - [%done !<(mold vase.u.in)] + ?. ?=(%| -.res.u.in) + [%skip ~] + ?: ?=(%vase -.p.res.u.in) + [%done `vase.p.res.u.in] + [%done ~] == -:: Clay operations +:: +get-code-full: peek code slice, returning full built :: -++ warp - |= [=ship =riff:clay] - =/ m (fiber ,riot:clay) +++ get-code-full + |= =road:tarball + =/ m (fiber ,built:nexus) ^- form:m - ;< ~ bind:m (send-card %pass /warp %arvo %c %warp ship riff) - ;< =sign-arvo bind:m (take-arvo /warp) - ?> ?=([%clay %writ *] sign-arvo) - (pure:m +>.sign-arvo) + ;< ~ bind:m (send-dart %node /code road %code ~) + |= input + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error dart.u.in)] + [~ %code * *] + ?. =(/code wire.u.in) + [%skip ~] + ?. ?=(%| -.res.u.in) + [%skip ~] + [%done p.res.u.in] + == +:: +get-code-tree: peek code slice subtree at a directory road :: -:: +get-tube: look up a cached tube from /sys/tubes/ +++ get-code-tree + |= =road:tarball + =/ m (fiber ,(axal (map @ta built:nexus))) + ^- form:m + ;< ~ bind:m (send-dart %node /code road %code ~) + |= input + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error dart.u.in)] + [~ %code * *] + ?. =(/code wire.u.in) + [%skip ~] + ?. ?=(%& -.res.u.in) + [%skip ~] + [%done p.res.u.in] + == +:: +get-bang: query error state at a road :: -++ get-tube - |= =mars:clay - =/ m (fiber ,(unit tube:clay)) +++ get-bang + |= =road:tarball + =/ m (fiber ,(each bangs:nexus (unit tang))) ^- form:m - =/ =road:tarball [%& %& /sys/tubes/[a.mars] b.mars] - ;< =seen:nexus bind:m (peek /tube road ~) - ?. ?=([%& %file *] seen) - (pure:m ~) - (pure:m `!<(tube:clay q.cage.p.seen)) -:: +get-dais: look up a cached dais from /sys/daises/ + ;< ~ bind:m (send-dart %node /bang road %bang ~) + |= input + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error dart.u.in)] + [~ %bang * *] + ?. =(/bang wire.u.in) + [%skip ~] + [%done res.u.in] + == +:: +get-font: find code responsible for a node +:: Returns bend to code namespace (relative to asker) + source rail within :: -++ get-dais - |= mak=mark - =/ m (fiber ,(unit dais:clay)) +++ get-font + |= =road:tarball + =/ m (fiber ,(unit bend:tarball)) ^- form:m - =/ =road:tarball [%& %& /sys/daises mak] - ;< =seen:nexus bind:m (peek /dais road ~) - ?. ?=([%& %file *] seen) - (pure:m ~) - (pure:m `!<(dais:clay q.cage.p.seen)) -:: +get-nexus: look up a cached nexus from /sys/nexuses/ + ;< ~ bind:m (send-dart %node /font road %font ~) + |= input + :+ ~ state + ?+ in [%skip ~] + ~ [%wait ~] + [~ %veto *] + [%fail (veto-error dart.u.in)] + [~ %font * *] + ?. =(/font wire.u.in) + [%skip ~] + [%done res.u.in] + == +:: +get-marc: look up a compiled marc from bins +:: +++ get-marc + |= [cod=road:tarball =blot:tarball] + =/ m (fiber ,(unit marc:tarball)) + ^- form:m + =/ =road:tarball (extend-road:tarball cod (weld /mar path.blot) name.blot) + ;< res=(unit vase) bind:m (get-code road) + ?~ res (pure:m ~) + (pure:m `!<(marc:tarball u.res)) +:: +get-tube: look up a tube via marc grow/grab +:: +:: Tries source.grow(target) first, then target.grab(source). +:: +++ get-tube + |= [cod=road:tarball =bars:tarball] + =/ m (fiber ,(unit tube:clay)) + ^- form:m + ;< src-marc=(unit marc:tarball) bind:m (get-marc cod a.bars) + =/ grow-tube=(unit tube:clay) + ?~ src-marc ~ + (mole |.((grow.u.src-marc b.bars))) + ?^ grow-tube (pure:m grow-tube) + :: Fallback: try target.grab(source) + ;< dst-marc=(unit marc:tarball) bind:m (get-marc cod b.bars) + ?~ dst-marc (pure:m ~) + =/ grab-tube=(unit tube:clay) + (mole |.((grab.u.dst-marc a.bars))) + (pure:m grab-tube) +:: +get-vale: look up a vale via marc +:: +++ get-vale + |= [cod=road:tarball =blot:tarball] + =/ m (fiber ,(unit $-(* vase))) + ^- form:m + ;< marc-res=(unit marc:tarball) bind:m (get-marc cod blot) + ?~ marc-res (pure:m ~) + (pure:m `vale.u.marc-res) +:: +get-nexus: look up a compiled nexus from bins :: ++ get-nexus - |= neck=@tas + |= [cod=road:tarball =neck:tarball] =/ m (fiber ,(unit nexus:nexus)) ^- form:m - =/ =road:tarball [%& %& /sys/nexuses neck] - ;< =seen:nexus bind:m (peek /nexus road ~) - ?. ?=([%& %file *] seen) - (pure:m ~) - (pure:m `!<(nexus:nexus q.cage.p.seen)) -:: +collect-marks: collect all marks used in cages within a ball (deep) + =/ =road:tarball (extend-road:tarball cod (weld /nex path.neck) name.neck) + ;< res=(unit vase) bind:m (get-code road) + ?~ res (pure:m ~) + (pure:m `!<(nexus:nexus u.res)) +:: +collect-blots: collect all blots used in sages within a ball (deep) :: -++ collect-marks +++ collect-blots |= =ball:tarball - ^- (set mark) - =/ marks=(set mark) ~ - :: Collect marks from current node's contents - =? marks ?=(^ fil.ball) + ^- (set blot:tarball) + =/ blots=(set blot:tarball) ~ + =? blots ?=(^ fil.ball) =/ entries=(list (pair @ta content:tarball)) ~(tap by contents.u.fil.ball) - |- ^- (set mark) - ?~ entries marks + |- ^- (set blot:tarball) + ?~ entries blots =* content q.i.entries - ?: =(%temp p.cage.content) - $(entries t.entries) - $(entries t.entries, marks (~(put in marks) p.cage.content)) - :: Recurse into subdirectories + $(entries t.entries, blots (~(put in blots) p.sage.content)) =/ subdirs=(list (pair @ta ball:tarball)) ~(tap by dir.ball) - |- ^- (set mark) - ?~ subdirs marks - =/ submarks=(set mark) ^$(ball q.i.subdirs) - $(subdirs t.subdirs, marks (~(uni in marks) submarks)) -:: +collect-marks-shallow: collect marks only from immediate files (no recurse) + |- ^- (set blot:tarball) + ?~ subdirs blots + =/ sub=(set blot:tarball) ^$(ball q.i.subdirs) + $(subdirs t.subdirs, blots (~(uni in blots) sub)) +:: +collect-blots-shallow: collect blots only from immediate files (no recurse) :: -++ collect-marks-shallow +++ collect-blots-shallow |= =ball:tarball - ^- (set mark) + ^- (set blot:tarball) ?~ fil.ball ~ =/ entries=(list (pair @ta content:tarball)) ~(tap by contents.u.fil.ball) - =/ marks=(set mark) ~ - |- ^- (set mark) - ?~ entries marks + =/ blots=(set blot:tarball) ~ + |- ^- (set blot:tarball) + ?~ entries blots =* ct q.i.entries - ?: =(%temp p.cage.ct) - $(entries t.entries) - $(entries t.entries, marks (~(put in marks) p.cage.ct)) -:: +build-mark-conversions: build conversions map for a set of marks + $(entries t.entries, blots (~(put in blots) p.sage.ct)) +:: +build-blot-conversions: build conversions map for a set of blots :: -++ build-mark-conversions - |= marks=(set mark) - =/ m (fiber ,(map mars:clay tube:clay)) +++ build-blot-conversions + |= blots=(set blot:tarball) + =/ m (fiber ,(map bars:tarball tube:clay)) ^- form:m - =/ mark-list=(list mark) ~(tap in marks) - =/ conversions=(map mars:clay tube:clay) ~ + =/ blot-list=(list blot:tarball) ~(tap in blots) + =/ conversions=(map bars:tarball tube:clay) ~ |- ^- form:m - ?~ mark-list + ?~ blot-list (pure:m conversions) - =/ =mars:clay [i.mark-list %mime] + =/ =bars:tarball [i.blot-list [/ %mime]] ;< tube-result=(unit tube:clay) bind:m - (get-tube mars) + (get-tube [%& %| /code] bars) =? conversions ?=(^ tube-result) - (~(put by conversions) mars u.tube-result) - $(mark-list t.mark-list) -:: +get-mark-conversions: build mark conversions for all marks in ball (deep) + (~(put by conversions) bars u.tube-result) + $(blot-list t.blot-list) +:: +get-blot-conversions: build blot conversions for all blots in ball (deep) :: -++ get-mark-conversions +++ get-blot-conversions |= =ball:tarball - =/ m (fiber ,(map mars:clay tube:clay)) + =/ m (fiber ,(map bars:tarball tube:clay)) ^- form:m - (build-mark-conversions (collect-marks ball)) -:: +get-mark-conversions-shallow: build conversions for immediate files only + (build-blot-conversions (collect-blots ball)) +:: +get-blot-conversions-shallow: build conversions for immediate files only :: -++ get-mark-conversions-shallow +++ get-blot-conversions-shallow |= =ball:tarball - =/ m (fiber ,(map mars:clay tube:clay)) + =/ m (fiber ,(map bars:tarball tube:clay)) ^- form:m - (build-mark-conversions (collect-marks-shallow ball)) -:: +cage-to-mime: convert cage to mime, falling back to jam + (build-blot-conversions (collect-blots-shallow ball)) +:: +sage-to-mime: convert sage to mime, falling back to jam :: -++ cage-to-mime - |= =cage +++ sage-to-mime + |= =sage:tarball =/ m (fiber ,mime) ^- form:m - ?: =(%mime p.cage) - (pure:m !<(mime q.cage)) - ?: =(%temp p.cage) - (pure:m [/application/x-urb-jam (as-octs:mimes:html (jam q.cage))]) - =/ =mars:clay [p.cage %mime] + ?: =([/ %mime] p.sage) + (pure:m !<(mime q.sage)) + =/ =bars:tarball [p.sage [/ %mime]] ;< tube=(unit tube:clay) bind:m - (get-tube mars) + (get-tube [%& %| /code] bars) ?~ tube - (pure:m [/application/x-urb-jam (as-octs:mimes:html (jam q.cage))]) - =/ result=(each vase tang) (mule |.((u.tube q.cage))) + (pure:m [/application/x-urb-jam (as-octs:mimes:html (jam q.sage))]) + =/ result=(each vase tang) (mule |.((u.tube q.sage))) ?: ?=(%| -.result) - (pure:m [/application/x-urb-jam (as-octs:mimes:html (jam q.cage))]) + (pure:m [/application/x-urb-jam (as-octs:mimes:html (jam q.sage))]) =/ extracted (mule |.(!<(mime p.result))) ?: ?=(%| -.extracted) - (pure:m [/application/x-urb-jam (as-octs:mimes:html (jam q.cage))]) + (pure:m [/application/x-urb-jam (as-octs:mimes:html (jam q.sage))]) (pure:m p.extracted) -:: Gall agent operations (via syscalls) +:: Gall agent operations (via /sys/gall/ runtime service) :: ++ gall-poke - |= [=wire =dock =cage] - =/ m (fiber ,~) - ^- form:m - =/ =card:agent:gall [%pass wire %agent dock %poke cage] - ;< ~ bind:m (send-card card) - (take-gall-poke-ack wire) -:: -++ take-gall-poke-ack - |= =wire - =/ m (fiber ,~) - ^- form:m - |= input - :+ ~ state - ?+ in [%skip ~] - ~ [%wait ~] - [~ %veto *] - [%fail (veto-error dart.u.in)] - [~ %agent * *] - ?. =(wire wire.u.in) - [%skip ~] - ?. ?=(%poke-ack -.sign.u.in) - [%skip ~] - ?~ p.sign.u.in - [%done ~] - [%fail %poke-failed u.p.sign.u.in] - == -:: -++ gall-watch - |= [=wire =dock =path] - =/ m (fiber ,~) - ^- form:m - =/ =card:agent:gall [%pass wire %agent dock %watch path] - ;< ~ bind:m (send-card card) - (take-watch-ack wire) -:: -++ take-watch-ack - |= =wire - =/ m (fiber ,~) - ^- form:m - |= input - :+ ~ state - ?+ in [%skip ~] - ~ [%wait ~] - [~ %veto *] - [%fail (veto-error dart.u.in)] - [~ %agent * *] - ?. =(wire wire.u.in) - [%skip ~] - ?. ?=(%watch-ack -.sign.u.in) - [%skip ~] - ?~ p.sign.u.in - [%done ~] - [%fail %watch-failed u.p.sign.u.in] - == -:: -++ take-fact - |= =wire - =/ m (fiber ,cage) - ^- form:m - |= input - :+ ~ state - ?+ in [%skip ~] - ~ [%wait ~] - [~ %veto *] - [%fail (veto-error dart.u.in)] - [~ %agent * *] - ?. =(wire wire.u.in) - [%skip ~] - ?. ?=(%fact -.sign.u.in) - [%skip ~] - [%done cage.sign.u.in] - == -:: -++ take-kick - |= =wire + |= [=dock =page] =/ m (fiber ,~) ^- form:m + ;< ~ bind:m + (poke &+&+[/sys/gall %'main.sig'] [[/ %gall-poke] !>([dock page])]) |= input :+ ~ state ?+ in [%skip ~] ~ [%wait ~] [~ %veto *] [%fail (veto-error dart.u.in)] - [~ %agent * *] - ?. =(wire wire.u.in) - [%skip ~] - ?. ?=(%kick -.sign.u.in) - [%skip ~] - [%done ~] + [~ %poke * *] + ?. =([/ %poke-ack] p.sage.u.in) [%skip ~] + =/ err=(unit tang) !<((unit tang) q.sage.u.in) + ?~ err [%done ~] + [%fail %poke-failed u.err] == +:: Timer helpers — poke /sys/behn/main.timer-state, receive timer-wake back :: -++ gall-leave - |= [=wire =dock] +++ set-timer + |= [=wire until=@da] =/ m (fiber ,~) ^- form:m - =/ =card:agent:gall [%pass wire %agent dock %leave ~] - (send-card card) -:: Timer helpers + (poke &+&+[/sys/behn %'main.timer-state'] [[/ %timer-set] !>(`[^wire @da]`[wire until])]) :: ++ send-wait |= until=@da =/ m (fiber ,~) ^- form:m - =/ =card:agent:gall - [%pass /wait/(scot %da until) %arvo %b %wait until] - (send-card card) + (set-timer /wait/(scot %da until) until) :: ++ take-wake |= until=(unit @da) @@ -880,12 +917,13 @@ ~ [%wait ~] [~ %veto *] [%fail (veto-error dart.u.in)] - [~ %arvo [%wait @ ~] %behn %wake *] - ?. |(?=(~ until) =(`u.until (slaw %da i.t.wire.u.in))) + [~ %poke * *] + ?. =([/ %timer-wake] p.sage.u.in) [%skip ~] - ?~ error.sign.u.in - [%done ~] - [%fail %timer-error u.error.sign.u.in] + =/ wak=path !<(path q.sage.u.in) + ?. |(?=(~ until) ?&(?=([%wait @ ~] wak) =(u.until (slav %da i.t.wak)))) + [%skip ~] + [%done ~] == :: ++ wait @@ -899,64 +937,77 @@ |= for=@dr =/ m (fiber ,~) ^- form:m - ;< =bowl:nexus bind:m (get-bowl /sleep) - (wait (add now.bowl for)) -:: Convenience bowl accessors + ;< now=@da bind:m get-time + (wait (add now for)) +:: Convenience accessors :: ++ get-our =/ m (fiber ,ship) ^- form:m - ;< =bowl:nexus bind:m (get-bowl /get-our) - (pure:m our.bowl) + ;< =seen:nexus bind:m (peek [%& %& /sys/bowl %our] ~) + ?. ?=([%& %file *] seen) + (pure:m *ship) + (pure:m !<(ship q.sage.p.seen)) :: ++ get-time =/ m (fiber ,@da) ^- form:m - ;< =bowl:nexus bind:m (get-bowl /get-time) - (pure:m now.bowl) + ;< =seen:nexus bind:m (peek [%& %& /sys/bowl %now] ~) + ?. ?=([%& %file *] seen) + (pure:m *@da) + (pure:m !<(@da q.sage.p.seen)) :: ++ get-entropy =/ m (fiber ,@uvJ) ^- form:m - ;< =bowl:nexus bind:m (get-bowl /get-entropy) - (pure:m eny.bowl) + ;< =seen:nexus bind:m (peek [%& %& /sys/bowl %eny] ~) + ?. ?=([%& %file *] seen) + (pure:m *@uvJ) + (pure:m !<(@uvJ q.sage.p.seen)) :: ++ get-here - =/ m (fiber ,rail:tarball) + =/ m (fiber ,here:nexus) ^- form:m - ;< =bowl:nexus bind:m (get-bowl /get-here) - (pure:m here.bowl) + ;< ~ bind:m (send-dart %here /here) + (take-here-raw /here) +:: +get-here-abs: get absolute rail, crashes if blocked from root :: -++ get-agent - =/ m (fiber ,dude:gall) +++ get-here-abs + =/ m (fiber ,rail:tarball) ^- form:m - ;< =bowl:nexus bind:m (get-bowl /get-agent) - (pure:m dap.bowl) + ;< =here:nexus bind:m get-here + (pure:m (coerce-here here)) +:: +++ dap %grubbery +++ dek %grubbery +:: :: ++ get-beak =/ m (fiber ,beak) ^- form:m - ;< =bowl:nexus bind:m (get-bowl /get-beak) - (pure:m byk.bowl) + ;< our=@p bind:m get-our + ;< now=@da bind:m get-time + (pure:m [our dek da+now]) :: ++ get-desk =/ m (fiber ,desk) ^- form:m - ;< =bowl:nexus bind:m (get-bowl /get-desk) - (pure:m q.byk.bowl) + (pure:m dek) :: ++ get-case =/ m (fiber ,case) ^- form:m - ;< =bowl:nexus bind:m (get-bowl /get-case) - (pure:m r.byk.bowl) + ;< now=@da bind:m get-time + (pure:m da+now) +:: :: HTTP client (iris) helpers +:: Requests go through /sys/iris/ runtime service. :: ++ send-request |= =request:http =/ m (fiber ,~) ^- form:m - (send-card %pass /request %arvo %i %request request *outbound-config:iris) + (poke &+&+[/sys/iris %'main.iris-state'] [[/ %http-request] !>(request)]) :: ++ take-client-response =/ m (fiber ,client-response:iris) @@ -967,10 +1018,12 @@ ~ [%wait ~] [~ %veto *] [%fail (veto-error dart.u.in)] - [~ %arvo [%request ~] %iris %http-response %cancel *] - [%fail leaf+"http-request-cancelled" ~] - [~ %arvo [%request ~] %iris %http-response %finished *] - [%done client-response.sign.u.in] + [~ %poke * *] + ?. =([/ %http-response] p.sage.u.in) [%skip ~] + =/ resp=client-response:iris !<(client-response:iris q.sage.u.in) + ?: ?=(%cancel -.resp) + [%fail leaf+"http-request-cancelled" ~] + [%done resp] == :: ++ extract-body @@ -992,77 +1045,30 @@ :: Poke our own ship :: ++ gall-poke-our - |= [=dude:gall =cage] + |= [=dude:gall =page] =/ m (fiber ,~) ^- form:m ;< our=@p bind:m get-our - (gall-poke /poke [our dude] cage) + (gall-poke [our dude] page) :: Poke our own ship, returning nack as (unit tang) instead of crashing :: ++ gall-poke-or-nack - |= [=dude:gall =cage] + |= [=dude:gall =page] =/ m (fiber ,(unit tang)) ^- form:m ;< our=@p bind:m get-our - =/ =card:agent:gall [%pass /poke %agent [our dude] %poke cage] - ;< ~ bind:m (send-card card) + ;< ~ bind:m + (poke &+&+[/sys/gall %'main.sig'] [[/ %gall-poke] !>([[our dude] page])]) |= input :+ ~ state ?+ in [%skip ~] ~ [%wait ~] [~ %veto *] [%fail (veto-error dart.u.in)] - [~ %agent * *] - ?. =(/poke wire.u.in) - [%skip ~] - ?. ?=(%poke-ack -.sign.u.in) - [%skip ~] - [%done p.sign.u.in] + [~ %poke * *] + ?. =([/ %poke-ack] p.sage.u.in) [%skip ~] + [%done !<((unit tang) q.sage.u.in)] == -:: -++ give-response-header - |= [eyre-id=@ta =response-header:http] - =/ m (fiber ,~) - ^- form:m - (send-card (give-response-header:hu eyre-id response-header)) -:: -++ give-response-data - |= [eyre-id=@ta data=(unit octs)] - =/ m (fiber ,~) - ^- form:m - (send-card (give-response-data:hu eyre-id data)) -:: -++ give-simple-payload - |= [eyre-id=@ta =simple-payload:http] - =/ m (fiber ,~) - ^- form:m - %- send-cards - (give-simple-payload:app:server eyre-id simple-payload) -:: -++ kick-eyre - |= eyre-id=@ta - =/ m (fiber ,~) - ^- form:m - (send-card (kick-eyre-sub:hu eyre-id)) -:: SSE helpers -:: -++ give-sse-header - |= eyre-id=@ta - =/ m (fiber ,~) - ^- form:m - (send-card (give-sse-header:hu eyre-id)) -:: -++ give-sse-event - |= [eyre-id=@ta =sse-event:hu] - =/ m (fiber ,~) - ^- form:m - (send-card (give-sse-event:hu eyre-id sse-event)) -:: -++ give-sse-keep-alive - |= eyre-id=@ta - =/ m (fiber ,~) - ^- form:m - (send-card (give-sse-keep-alive:hu eyre-id)) :: +take-news-or-wake: wait for subscription news or timer wake :: :: Use this in SSE loops to multiplex between data events and @@ -1085,10 +1091,10 @@ ?. =(news-wire wire.u.in) [%skip ~] [%done %news view.u.in] - [~ %arvo [%wait @ ~] %behn %wake *] - ?~ error.sign.u.in - [%done %wake ~] - [%fail %timer-error u.error.sign.u.in] + [~ %poke * *] + ?. =([/ %timer-wake] p.sage.u.in) + [%skip ~] + [%done %wake ~] == :: Clay file helpers :: @@ -1126,4 +1132,143 @@ ;< now=@da bind:m get-time =/ base=path /(scot %p our)/[dek]/(scot %da now) (pure:m .^(? %cu (weld base pax))) +:: +copy-grub: copy a file from src to dst +:: +++ copy-grub + |= [src=road:tarball dst=road:tarball] + =/ m (fiber ,~) + ^- form:m + ;< =seen:nexus bind:m (peek src ~) + ?. ?=([%& %file *] seen) + ~|(%copy-grub-src-not-found !!) + (make dst |+[%.n sage.p.seen ~]) +:: +copy-fold: copy a directory from src to dst +:: +++ copy-fold + |= [src=road:tarball dst=road:tarball] + =/ m (fiber ,~) + ^- form:m + ;< =seen:nexus bind:m (peek src ~) + ?. ?=([%& %ball *] seen) + ~|(%copy-fold-src-not-found !!) + (make dst &+[sand.p.seen gain.p.seen ball.p.seen]) +:: +move-grub: move a file from src to dst (copy + delete) +:: +++ move-grub + |= [src=road:tarball dst=road:tarball] + =/ m (fiber ,~) + ^- form:m + ;< ~ bind:m (copy-grub src dst) + (cull src) +:: +move-fold: move a directory from src to dst (copy + delete) +:: +++ move-fold + |= [src=road:tarball dst=road:tarball] + =/ m (fiber ,~) + ^- form:m + ;< ~ bind:m (copy-fold src dst) + (cull src) +:: +:: HTTP BINDING + RESPONSE PRIMITIVES +:: +:: +bind-http: register an eyre binding, sender is the handler. +:: Resolves caller's absolute position as the handler rail. +:: +++ bind-http + |= =binding:eyre + =/ m (fiber ,~) + ^- form:m + ;< here=rail:tarball bind:m get-here-abs + (eyre-poke [%bind binding here]) +:: +unbind-http: remove a binding +:: +++ unbind-http + |= =binding:eyre + =/ m (fiber ,~) + ^- form:m + (eyre-poke [%unbind binding]) +:: +++ server-road `road:tarball`[%& %& /sys/eyre %'main.server-state'] +:: +++ eyre-poke + |= act=eyre-action:nexus + =/ m (fiber ,~) + ^- form:m + (poke server-road [[/ %eyre-action] !>(act)]) +:: HTTP response helpers, parameterized on dispatcher road. +:: Sends route through the dispatcher (main.sig) so the server fiber +:: sees from=main.sig for cancel-back on orphaned connections. +:: Usage: =/ srv ~(. http-res:io [%| 1 %& ~ %'main.sig']) +:: (send-simple:srv eyre-id payload) +:: +++ http-res + |_ main=road:tarball + ++ send + |= [eyre-id=@ta =eyre-update:nexus] + =/ m (fiber ,~) + ^- form:m + (poke main [[/ %eyre-action] !>(`eyre-action:nexus`[%send eyre-id eyre-update])]) + :: + ++ send-simple + |= [eyre-id=@ta =simple-payload:http] + =/ m (fiber ,~) + ^- form:m + (send eyre-id %simple simple-payload) + :: + ++ send-header + |= [eyre-id=@ta =response-header:http] + =/ m (fiber ,~) + ^- form:m + (send eyre-id %header response-header) + :: + ++ send-data + |= [eyre-id=@ta data=(unit octs)] + =/ m (fiber ,~) + ^- form:m + (send eyre-id %data data) + :: + ++ send-kick + |= eyre-id=@ta + =/ m (fiber ,~) + ^- form:m + (send eyre-id %kick ~) + -- +:: Standard HTTP dispatcher loop for nexuses with /requests/ sub-dir. +:: Spawns per-request processes, forwards responses, handles cancels. +:: +++ http-dispatch + |= label=@tas + =/ m (fiber ,~) + ^- form:m + |- + ;< [=from:fiber:nexus =sage:tarball] bind:m take-poke-from + ?+ name.p.sage $ + %handle-http-request + =/ [eyre-id=@ta src=@p req=inbound-request:eyre] + !<([eyre-id=@ta @p inbound-request:eyre] q.sage) + ~& > [label %dispatch eyre-id url.request.req] + ;< ~ bind:m (make [%| 0 %& /requests eyre-id] |+[%.n [[/ %http-request] !>([src req])] ~]) + $ + %handle-http-cancel + =/ eyre-id=@ta !<(@ta q.sage) + ~& > [label %cancel eyre-id] + ;< ~ bind:m (cull [%| 0 %& /requests eyre-id]) + $ + %eyre-action + ;< ~ bind:m (poke server-road sage) + $ + == +:: +resolve-bend: resolve a fiber bend to an absolute rail +:: +++ resolve-bend + |= [here=rail:tarball =bend:fiber:nexus] + ^- rail:tarball + =/ base=path path.here + =/ up=@ud p.bend + =/ resolved=path + |- + ?: =(0 up) base + ?~ base ~ + $(up (dec up), base (snip `path`base)) + [(weld resolved path.q.bend) name.q.bend] -- diff --git a/desk/lib/http-utils.hoon b/desk/lib/http-utils.hoon index 19592a0..a06985f 100644 --- a/desk/lib/http-utils.hoon +++ b/desk/lib/http-utils.hoon @@ -85,13 +85,15 @@ ++ parse-url |= url=@t ^- [site=path args=quay:eyre] - %+ fall - %+ rush url - ;~ plug - ;~(pfix fas (more fas smeg:de-purl:html)) - yque:de-purl:html - == - [~ ~] + =/ result=[site=path args=quay:eyre] + %+ fall + %+ rush url + ;~ plug + ;~(pfix fas (more fas smeg:de-purl:html)) + yque:de-purl:html + == + [~ ~] + result :: :: URL encoding :: diff --git a/desk/lib/loader.hoon b/desk/lib/loader.hoon index 29720c4..3fd614f 100644 --- a/desk/lib/loader.hoon +++ b/desk/lib/loader.hoon @@ -18,6 +18,8 @@ |% +$ file-load $-([? content:tarball] [? content:tarball]) +$ fold-load $-([sand:nexus gain:nexus ball:tarball] [sand:nexus gain:nexus ball:tarball]) +++ same-file |=([? content:tarball] +<) +++ same-fold |=([sand:nexus gain:nexus ball:tarball] +<) :: +$ row $% [%stay %& =rail:tarball] @@ -27,7 +29,7 @@ [%over %& =rail:tarball gain=? =content:tarball] [%over %| =path =sand:nexus =gain:nexus =ball:tarball] [%load %& from=rail:tarball to=rail:tarball =file-load] - [%load %| from=path to=path =fold-load] + [%load %| from=fold:tarball to=fold:tarball =fold-load] == :: +$ ver (unit @ud) @@ -41,7 +43,7 @@ ^- ver =/ ct=(unit content:tarball) (~(get ba:tarball ball) [/ %'ver.ud']) ?~ ct ~ - `!<(@ud q.cage.u.ct) + `!<(@ud q.sage.u.ct) :: +ver-row: convenience row to set the version file :: ++ empty-dir [`[~ ~ ~] ~] @@ -49,7 +51,7 @@ ++ ver-row |= ver=@ud ^- row - [%over %& [/ %'ver.ud'] %.n [~ %ud !>(ver)]] + [%over %& [/ %'ver.ud'] %.n [~ [/ %ud] !>(ver)]] :: +put-sand: place a sub-sand at a path :: ++ put-sand diff --git a/desk/lib/marks.hoon b/desk/lib/marks.hoon index 1174a4c..3de128e 100644 --- a/desk/lib/marks.hoon +++ b/desk/lib/marks.hoon @@ -1,343 +1,62 @@ -:: marks: synchronous tube and dais builder +:: marks: marc builder :: -:: Reproduces Clay's tube/dais-building logic using only safe scries. -:: All mark files are listed via %cy and built via %ca — we only -:: scry for files we KNOW exist because we listed them ourselves. -:: Tube gates are composed from grab/grow arms using slap/slam/slob, -:: exactly as Clay does internally in +build-cast. -:: Daises are built inline (like Clay's build-dais) using the -:: build-nave → build-dais pipeline with slap instead of slub. +:: Compiles a mark source core into a marc:tarball dispatch core. +:: Each marc is a pure function of its own source — no dependency on +:: other marks. Transitive conversion chains are the caller's job. :: /+ nexus, tarball |% -:: +rebuild-tubes: rebuild /sys/tubes/ sub-ball +:: +build-marc: compile a mark source core into a marc dispatch core :: -++ rebuild-tubes - |= [our=@p =desk now=@da] - ^- ball:tarball - =/ tubs=(map mars:clay tube:clay) - (build-tubes our desk now) - ~& > [%tubes-rebuilt ~(wyt by tubs)] - %+ roll ~(tap by tubs) - |= [[=mars:clay =tube:clay] acc=ball:tarball] - (~(put ba:tarball acc) [/[a.mars] b.mars] [~ %temp !>(tube)]) -:: +rebuild-daises: rebuild /sys/daises/ sub-ball -:: -++ rebuild-daises - |= [our=@p =desk now=@da] - ^- ball:tarball - =/ cores=(map mark vase) (build-mark-cores our desk now) - =/ daises=(map mark dais:clay) - %- ~(gas by *(map mark dais:clay)) - %+ murn ~(tap by cores) - |= [=mark cor=vase] - ^- (unit [^mark dais:clay]) - =/ res=(each dais:clay tang) - (mule |.((build-dais cores mark cor))) - ?: ?=(%& -.res) `[mark p.res] - %- (%*(. slog pri 3) leaf+"{}: dais build failed" (flop p.res)) - ~ - ~& > [%daises-rebuilt ~(wyt by daises)] - %+ roll ~(tap by daises) - |= [[=mark =dais:clay] acc=ball:tarball] - (~(put ba:tarball acc) [/ mark] [~ %temp !>(dais)]) -:: +build-dais: build a dais from a raw mark core -:: -:: Reproduces Clay's build-nave then build-dais, using slap -:: instead of slub (which is kernel-only). -:: -:: +build-nave: build statically typed nave from mark core -:: -:: Mirrors Clay's build-nave. Core-grad builds from grad arms -:: directly. Atom-grad delegates to another mark's nave via tubes. -:: -++ build-nave - |= [cores=(map mark vase) mak=mark cor=vase] - ^- vase - =/ gad=vase (slap cor limb/%grad) - ?@ q.gad - :: Atom grad — delegate to another mark's nave + tubes. - =/ mok=mark !<(mark gad) - =/ deg=vase (build-nave cores mok (~(got by cores) mok)) - =/ tub=vase (build-cast cores mak mok ~) - =/ but=vase (build-cast cores mok mak ~) - %+ slap - (with-faces deg+deg tub+tub but+but cor+cor nave+!>(nave:clay) ~) - !, *hoon - =/ typ _+<.cor - =/ dif _*diff:deg - ^- (nave typ dif) - |% - ++ diff - |= [old=typ new=typ] - ^- dif - (diff:deg (tub old) (tub new)) - ++ form form:deg - ++ join join:deg - ++ mash mash:deg - ++ pact - |= [v=typ d=dif] - ^- typ - (but (pact:deg (tub v) d)) - ++ vale noun:grab:cor - -- - :: Core grad — build full nave from grad arms. - %+ slap (slop (with-face %cor cor) !>(..zuse)) - !, *hoon - =/ typ _+<.cor - =/ dif _*diff:grad:cor - ^- (nave:clay typ dif) +++ build-marc + |= cor=vase + ^- marc:tarball |% - ++ diff |=([old=typ new=typ] (diff:~(grad cor old) new)) - ++ form form:grad:cor - ++ join - |= [a=dif b=dif] - ^- (unit (unit dif)) - ?: =(a b) ~ - `(join:grad:cor a b) - ++ mash - |= [a=[=ship =desk =dif] b=[=ship =desk =dif]] - ^- (unit dif) - ?: =(dif.a dif.b) ~ - `(mash:grad:cor a b) - ++ pact |=([v=typ d=dif] (pact:~(grad cor v) d)) - ++ vale noun:grab:cor + ++ vale (build-vale cor) + ++ grow (build-grow cor) + ++ grab (build-grab cor) -- -:: +build-dais: build a dais from a raw mark core -:: -:: Mirrors Clay's build-nave → build-dais pipeline. -:: -++ build-dais - |= [cores=(map mark vase) mak=mark cor=vase] - ^- dais:clay - =/ gad=vase (slap cor limb/%grad) - =/ frm=vase - ?@ q.gad gad - (slap gad limb/%form) - =/ frm-mark=mark !<(mark frm) - =/ nav=vase (build-nave cores mak cor) - :: Wrap nave as dais (dynamically typed door). - => [nav=nav frm-mark=frm-mark ..zuse] - ^- dais:clay - |_ sam=vase - ++ diff - |= new=vase - (slam (slap nav limb/%diff) (slop sam new)) - ++ form frm-mark - ++ join - |= [a=vase b=vase] - ^- (unit (unit vase)) - =/ res=vase (slam (slap nav limb/%join) (slop a b)) - ?~ q.res ~ - ?~ +.q.res [~ ~] - ``(slap res !,(*hoon ?>(?=([~ ~ *] .) u.u))) - ++ mash - |= [a=[=ship =desk diff=vase] b=[=ship =desk diff=vase]] - ^- (unit vase) - =/ res=vase - %+ slam (slap nav limb/%mash) - %+ slop - :(slop [[%atom %p ~] ship.a] [[%atom %tas ~] desk.a] diff.a) - :(slop [[%atom %p ~] ship.b] [[%atom %tas ~] desk.b] diff.b) - ?~ q.res ~ - `(slap res !,(*hoon ?>((^ .) u))) - ++ pact - |= diff=vase - (slam (slap nav limb/%pact) (slop sam diff)) - ++ vale - |= noun=* - (slam (slap nav limb/%vale) !>(noun)) - -- -:: +rebuild-nexuses: rebuild /sys/nexuses/ sub-ball -:: -:: Lists /nex/*.hoon files and compiles each via %ca scry. -:: Nexuses are cached by neck (filename without .hoon). -:: Uses segments:clay for hyphenated neck resolution (e.g. -:: neck %foo-bar tries /nex/foo-bar.hoon then /nex/foo/bar.hoon). -:: -++ rebuild-nexuses - |= [our=@p =desk now=@da] - ^- ball:tarball - =/ base=path /(scot %p our)/[desk]/(scot %da now) - =/ =arch .^(arch %cy (weld base /nex)) - :: Collect all .hoon files recursively, building neck from path - =/ entries=(list [neck=@tas =path]) - (collect-nex-files /nex arch base) - ~& > [%nexus-files (lent entries)] - =/ acc=ball:tarball *ball:tarball - |- - ?~ entries acc - =/ [neck=@tas pax=path] i.entries - =/ res=(each vase tang) - (mule |.(.^(vase %ca (weld base pax)))) - ?: ?=(%| -.res) - %- (%*(. slog pri 3) leaf+"{}: nexus build failed" (flop p.res)) - $(entries t.entries) - =/ nex-res=(each nexus:nexus tang) - (mule |.(!<(nexus:nexus p.res))) - ?: ?=(%| -.nex-res) - %- (%*(. slog pri 3) leaf+"{}: nexus type mismatch" (flop p.nex-res)) - $(entries t.entries) - $(entries t.entries, acc (~(put ba:tarball acc) [/ neck] [~ %temp !>(p.nex-res)])) -:: +collect-nex-files: recursively collect nexus .hoon files from arch +:: +build-vale: extract noun validator from a mark core :: -:: Builds neck by joining path segments with hep, e.g. -:: /nex/foo/bar.hoon → neck %foo-bar +:: Pulls +noun:grab from the mark core as a $-(* vase) gate. :: -++ collect-nex-files - |= [prefix=path =arch base=path] - ^- (list [neck=@tas =path]) - =/ kids=(list [@tas ^arch]) - %+ murn ~(tap by dir.arch) - |= [name=@tas *] - ^- (unit [@tas ^arch]) - =/ sub=^arch .^(^arch %cy (weld base (snoc prefix name))) - `[name sub] - %- zing - %+ turn kids - |= [name=@tas sub=^arch] - =/ sub-prefix=path (snoc prefix name) - :: If this dir has a hoon file, it's a nexus - ?: (~(has by dir.sub) %hoon) - =/ neck=@tas - =/ segs=path (slag 1 sub-prefix) :: drop /nex - (rap 3 (join '-' segs)) - [neck (snoc sub-prefix %hoon)]~ - :: Otherwise recurse - (collect-nex-files sub-prefix sub base) -:: +build-mark-cores: list and compile all mark cores for a desk +++ build-vale + |= cor=vase + ^- $-(* vase) + =/ gat=vase + (slap cor !,(*hoon |=(noun=* (noun:grab noun)))) + |=(noun=* (slam gat !>(noun))) +:: +build-grow: build dispatch gate for outbound conversions :: -++ build-mark-cores - |= [our=@p =desk now=@da] - ^- (map mark vase) - =/ base=path /(scot %p our)/[desk]/(scot %da now) - =/ =arch .^(arch %cy (weld base /mar)) - =/ mark-names=(list mark) - %+ murn ~(tap by dir.arch) - |= [name=@tas *] - ^- (unit mark) - ?. .^(? %cu (weld base /mar/[name]/hoon)) ~ - `name - %- ~(gas by *(map mark vase)) - %+ murn mark-names - |= =mark - ^- (unit [^mark vase]) - `[mark .^(vase %ca (weld base /mar/[mark]/hoon))] -:: +build-tubes: build all tube conversions for a desk +:: Returns a gate: given a target blot, produce a tube. +:: Converts blot to arm name via rail-to-arm for the slap. :: -:: Returns a map from [from-mark to-mark] to tube gate. -:: Runs synchronously — safe for on-load. -:: -++ build-tubes - |= [our=@p =desk now=@da] - ^- (map mars:clay tube:clay) - =/ cores=(map mark vase) (build-mark-cores our desk now) - :: Discover all conversion pairs from grab/grow arms - =/ all-marks=(set mark) ~(key by cores) - =/ pairs=(list mars:clay) - %- zing - %+ turn ~(tap by cores) - |= [=mark =vase] - ^- (list mars:clay) - =/ [grab=(list ^mark) grow=(list ^mark)] - :- ?. (slob %grab -:vase) ~ - (sloe -:(slap vase [%limb %grab])) - ?. (slob %grow -:vase) ~ - (sloe -:(slap vase [%limb %grow])) - ;: weld - (murn grab |=(m=^mark ?.((~(has in all-marks) m) ~ `[m mark]))) - (murn grow |=(m=^mark ?.((~(has in all-marks) m) ~ `[mark m]))) - == - :: Build tubes for each valid pair - =/ tubes=(map mars:clay tube:clay) ~ - |- - ?~ pairs tubes - =/ =mars:clay i.pairs - ?: (~(has by tubes) mars) - $(pairs t.pairs) - =/ tub=(unit tube:clay) - (try-build-tube cores mars) - =? tubes ?=(^ tub) - (~(put by tubes) mars u.tub) - $(pairs t.pairs) -:: +try-build-tube: attempt to build a single tube, return ~ on failure -:: -++ try-build-tube - |= [cores=(map mark vase) =mars:clay] - ^- (unit tube:clay) - =/ res=(each tube:clay tang) - (mule |.((build-tube cores mars))) - ?: ?=(%& -.res) `p.res - ~& >>> [%tube-build-failed mars] - ~ -:: +build-tube: build a $-(vase vase) tube gate from mark cores -:: -++ build-tube - |= [cores=(map mark vase) =mars:clay] +++ build-grow + |= cor=vase + ^- $-(blot:tarball tube:clay) + |= to=blot:tarball ^- tube:clay - =/ gat=vase (build-cast cores a.mars b.mars ~) - =>([gat=gat ..zuse] |=(v=vase (slam gat v))) -:: +build-cast: produce a gate to convert mark a to mark b -:: -:: Reproduces Clay's +build-cast priority: -:: 1. Identity (a == b) -:: 2. %mime -> %hoon shortcut -:: 3. +b:grow on source mark -:: 4. +a:grab on target mark (direct gate) -:: 5. +jump on source mark (intermediary) -:: 6. +grab return as intermediary mark -:: 7. Anything -> %noun is identity -:: -++ build-cast - |= [cores=(map mark vase) a=mark b=mark cycle=(set mars:clay)] - ^- vase - ?: (~(has in cycle) [a b]) - ~|(cycle+cast+[a b] !!) - =. cycle (~(put in cycle) [a b]) - ?: =(a b) !>(same) - ?: =([%mime %hoon] [a b]) - !>(|=(m=mime q.q.m)) - =/ old=vase (~(got by cores) a) - ?: (has-arm %grow b old) - %+ slap (with-faces cor+old ~) + =/ arm=@tas (rail-to-arm:tarball to) + =/ gat=vase + %+ slap (with-faces cor+cor ~) ^- hoon :+ %brcl !,(*hoon v=+<.cor) - :+ %tsgl limb/b + :+ %tsgl [%limb arm] !,(*hoon ~(grow cor v)) - =/ new=vase (~(got by cores) b) - =/ arm=? (has-arm %grab a new) - =/ rab - %- mule |. - (slap new tsgl/[limb/a limb/%grab]) - ?: &(arm ?=(%& -.rab) ?=(^ q.p.rab)) - p.rab - =/ jum (mule |.((slap old tsgl/[limb/b limb/%jump]))) - ?: &((slob %jump -:old) ?=(%& -.jum)) - =/ via !<(mark p.jum) - (compose-casts cores a via b cycle) - ?: &(arm ?=(%& -.rab)) - =/ via !<(mark p.rab) - (compose-casts cores a via b cycle) - ?: ?=(%noun b) !>(same) - ~|(no-cast-from+[a b] !!) + =>([gat=gat ..zuse] |=(v=vase (slam gat v))) +:: +build-grab: build dispatch gate for inbound conversions :: -++ compose-casts - |= [cores=(map mark vase) a=mark y=mark b=mark cycle=(set mars:clay)] - ^- vase - =/ uno=vase (build-cast cores a y cycle) - =/ dos=vase (build-cast cores y b cycle) - %+ slap - (with-faces uno+uno dos+dos ~) - !,(*hoon |=(_+<.uno (dos (uno +<)))) +:: Returns a gate: given a source blot, produce a tube. +:: Converts blot to arm name via rail-to-arm for the slap. :: -++ has-arm - |= [arm=@tas =mark core=vase] - ^- ? - =/ rib (mule |.((slap core [%wing ~[arm]]))) - ?: ?=(%| -.rib) %.n - =/ lab (mule |.((slob mark p.p.rib))) - ?: ?=(%| -.lab) %.n - p.lab +++ build-grab + |= cor=vase + ^- $-(blot:tarball tube:clay) + |= from=blot:tarball + ^- tube:clay + =/ arm=@tas (rail-to-arm:tarball from) + =/ gat=vase (slap cor tsgl/[[%limb arm] limb/%grab]) + =>([gat=gat ..zuse] |=(v=vase (slam gat v))) :: ++ with-face |= [face=@tas =vase] diff --git a/desk/lib/mcp.hoon b/desk/lib/mcp.hoon deleted file mode 100644 index fe22268..0000000 --- a/desk/lib/mcp.hoon +++ /dev/null @@ -1,191 +0,0 @@ -/+ io=sailboxio, server, json-utils, tools -|% -:: MCP (Model Context Protocol) - JSON-RPC 2.0 Protocol Adapter -:: This library provides a thin protocol layer that: -:: - Converts tool definitions from lib/tools to MCP JSON-RPC format -:: - Handles MCP protocol-specific requests (initialize, tools/list, tools/call) -:: - Delegates tool execution to lib/tools -:: -:: JSON-RPC 2.0 error codes -:: -++ rpc-parse-error ~.-32700 -++ rpc-invalid-request ~.-32600 -++ rpc-method-not-found ~.-32601 -++ rpc-invalid-params ~.-32602 -++ rpc-internal-error ~.-32603 -:: JSON-RPC helper functions -:: -++ rpc-error - |= [code=@ta message=@t id=(unit json)] - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - :- 'error' - %- pairs:enjs:format - :~ ['code' n+code] - ['message' s+message] - == - == -:: -++ rpc-result - |= [result=json id=(unit json)] - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - ['result' result] - == -:: MCP-specific response helpers -:: -++ mcp-text-result - |= [text=@t id=(unit json)] - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - :- 'result' - %- pairs:enjs:format - :~ :- 'content' - :- %a - :~ %- pairs:enjs:format - :~ ['type' s+'text'] - ['text' s+text] - == - == - == - == -:: -++ mcp-initialize - |= [server-name=@t version=@t id=(unit json)] - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - :- 'result' - %- pairs:enjs:format - :~ ['protocolVersion' s+'2024-11-05'] - :- 'capabilities' - %- pairs:enjs:format - :~ :- 'tools' - (pairs:enjs:format ~[['listChanged' b+%.n]]) - == - :- 'serverInfo' - %- pairs:enjs:format - :~ ['name' s+server-name] - ['version' s+version] - == - == - == -:: -++ mcp-tools-list - |= id=(unit json) - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - :- 'result' - %- pairs:enjs:format - :~ ['tools' [%a tool-definitions]] - == - == -:: -:: Convert parameter-type to JSON type string -:: -++ param-type-to-json - |= type=parameter-type:tools - ^- @t - ?- type - %string 'string' - %number 'number' - %boolean 'boolean' - %array 'array' - %object 'object' - == -:: -:: Convert tool-def from lib/tools to MCP JSON format -:: -++ tool-def-to-mcp - |= tool=tool-def:tools - ^- json - :: Convert parameters map to properties list - =/ properties=(map @t json) - %- ~(run by parameters.tool) - |= param=parameter-def:tools - %- pairs:enjs:format - :~ ['type' s+(param-type-to-json type.param)] - ['description' s+description.param] - == - :: Convert required list to JSON array - =/ required-array=(list json) - (turn required.tool |=(f=@t s+f)) - :: Build MCP tool definition - %- pairs:enjs:format - :~ ['name' s+name.tool] - ['description' s+description.tool] - :- 'inputSchema' - %- pairs:enjs:format - :~ ['type' s+'object'] - ['properties' [%o properties]] - ['required' [%a required-array]] - == - == -:: -:: MCP Tool Registry - Converts all tools from lib/tools to MCP format -:: -++ tool-definitions - ^- (list json) - (turn all-tools:tools tool-def-to-mcp) -:: -:: Main MCP request handler -:: -++ handle-request - |= jon=json - =/ m (fiber:io ,(unit json)) - ^- form:m - :: Parse JSON-RPC request using json-utils - =/ method=(unit json) (~(get jo:json-utils jon) /method) - =/ id=(unit json) (~(get jo:json-utils jon) /id) - :: Route by JSON-RPC method - ?+ method - :: Unknown method - (pure:m `(rpc-error rpc-method-not-found 'Method not found' id)) - :: - [~ [%s %'initialize']] - :: MCP initialization handshake - (pure:m `(mcp-initialize 'grubbery' '2.0.0' id)) - :: - [~ [%s %'notifications/initialized']] - :: Client finished initialization - no response needed - (pure:m ~) - :: - [~ [%s %'tools/list']] - :: Return list of available tools - (pure:m `(mcp-tools-list id)) - :: - [~ [%s %'tools/call']] - :: Execute tool call - extract nested params with jo - =/ tool-name=(unit json) (~(get jo:json-utils jon) /params/name) - ?~ tool-name - (pure:m `(rpc-error rpc-invalid-params 'Missing tool name' id)) - ?. ?=([%s *] u.tool-name) - (pure:m `(rpc-error rpc-invalid-params 'Invalid tool name' id)) - :: Extract arguments as map - =/ arguments=(unit json) (~(get jo:json-utils jon) /params/arguments) - ?~ arguments - (pure:m `(rpc-error rpc-invalid-params 'Missing arguments' id)) - ?. ?=([%o *] u.arguments) - (pure:m `(rpc-error rpc-invalid-params 'Invalid arguments' id)) - :: Extract optional chat-id from _meta and inject into arguments if present - =/ arguments-with-meta=(map @t json) - =/ meta=(unit json) (~(get jo:json-utils jon) /params/'_meta'/'chat_id') - ?~ meta p.u.arguments - (~(put by p.u.arguments) '_chat_id' u.meta) - :: Delegate execution to lib/tools - ;< result=tool-result:tools bind:m (execute-tool:tools p.u.tool-name arguments-with-meta) - ?- -.result - %text (pure:m `(mcp-text-result text.result id)) - %error (pure:m `(rpc-error rpc-internal-error message.result id)) - == - == --- diff --git a/desk/lib/multipart.hoon b/desk/lib/multipart.hoon index 4f047ae..e4f8cd4 100644 --- a/desk/lib/multipart.hoon +++ b/desk/lib/multipart.hoon @@ -1,5 +1,12 @@ :: multipart: multipart/form-data request decoding :: +:: NOTE: Rewritten from upstream parser-combinator version. +:: The original used (rush body ...) which converts the entire payload +:: to a tape and matches content byte-by-byte with +star/+less, causing +:: out-of-memory on large uploads (40MB+). This version finds boundary +:: positions via atom slicing (cut 3) so body content never becomes a +:: tape. Only small header sections are parsed as tapes. +:: |% +$ part $: file=(unit @t) :: filename @@ -14,36 +21,110 @@ ?~ body ~ ?~ cot=(get-header:http 'content-type' header-list) ~ ?. =('multipart/form-data; boundary=' (end 3^30 u.cot)) ~ - %+ rush q.u.body - (dep (rsh 3^30 u.cot)) -:: -++ dep - |= del=@t - |^ - %+ knee *(list [@t part]) |. ~+ - ;~ pose (cold ~ (full tip)) :: end, or - ;~ pfix dim nip :: section start - ;~ plug ;~ plug :: containing: - (ifix [cof doq] nom) :: name - (punt (ifix [cup doq] nod)) :: filename - (punt ;~(pfix nip cut nab)) :: content-type - (punt ;~(pfix nip cue nom)) :: con-tra-encoding - (ifix [sip nip] nag) :: content - == ^$ == == == - :: - ++ cof (jest 'Content-Disposition: form-data; name="') - ++ cue (jest 'Content-Transfer-Encoding: ') - ++ cup (jest '; filename="') - ++ cut (jest 'Content-Type: ') - ++ dim (jest (cat 3 '--' del)) - ++ nip (jest '\0d\0a') - ++ nab (more fas (cook (cury rap 3) (plus qit))) - ++ nag (dine ;~(less ;~(plug nip dim) next)) - ++ nod (dine ;~(less doq next)) - ++ nom (dine alp) - ++ sip ;~(plug nip nip) - ++ tip ;~(plug dim hep hep nip) - :: - ++ dine |*(r=rule (cook (cury rep 3) (star r))) - -- + =/ del=@t (rsh 3^30 u.cot) + (de-parts q.u.body p.u.body del) +:: +:: Find boundaries via atom byte scanning, extract content with cut. +:: +++ de-parts + |= [raw=@ len=@ud del=@t] + ^- (unit (list [@t part])) + =/ bnd=@ (cat 3 '--' del) + =/ bnd-len=@ud (met 3 bnd) + =/ crlf-bnd=@ (cat 3 '\0d\0a' bnd) + =/ crlf-bnd-len=@ud (add 2 bnd-len) + :: Find first boundary + =/ first=(unit @ud) (find-in bnd bnd-len raw len 0) + ?~ first ~ + :: Start after first boundary + \r\n + =/ cur=@ud (add u.first (add bnd-len 2)) + =| acc=(list [@t part]) + |- + ?: (gte cur len) `(flop acc) + :: Find next boundary (\r\n--boundary) + =/ nxt=(unit @ud) (find-in crlf-bnd crlf-bnd-len raw len cur) + ?~ nxt `(flop acc) + :: Find header/body separator (\r\n\r\n) within this part + =/ sep=(unit @ud) + (find-in (cat 3 '\0d\0a' '\0d\0a') 4 raw u.nxt cur) + ?~ sep `(flop acc) + :: Extract header (small, tape is fine) and body (atom slice) + =/ hdr=@t (cut 3 [cur (sub u.sep cur)] raw) + =/ body-off=@ud (add u.sep 4) + =/ bod=@t (cut 3 [body-off (sub u.nxt body-off)] raw) + :: Parse part headers + =/ parsed=(unit [@t part]) (de-part-header hdr bod) + :: Advance past \r\n--boundary + =/ after=@ud (add u.nxt crlf-bnd-len) + :: Check for end marker (--) + ?: &((lte (add after 2) len) =((cut 3 [after 2] raw) '--')) + ?~ parsed `(flop acc) + `(flop [u.parsed acc]) + :: More parts: skip \r\n after boundary + =? acc ?=(^ parsed) [u.parsed acc] + $(cur (add after 2)) +:: +:: Find byte pattern in atom, starting at offset. +:: Uses first-byte filter to skip most positions. +:: +++ find-in + |= [pat=@ pat-len=@ud hay=@ hay-len=@ud off=@ud] + ^- (unit @ud) + =/ fb=@ (end 3^1 pat) + |- + ?: (gth (add off pat-len) hay-len) ~ + ?. =((cut 3 [off 1] hay) fb) + $(off +(off)) + ?: =((cut 3 [off pat-len] hay) pat) `off + $(off +(off)) +:: +:: Parse a part's header lines to extract name, filename, type, encoding. +:: +++ de-part-header + |= [hdr=@t bod=@t] + ^- (unit [@t part]) + =/ hed=tape (trip hdr) + =/ lines=wall (split-crlf hed) + ?~ lines ~ + :: First line: Content-Disposition — extract name="..." + =/ disp=tape i.lines + =/ np=(unit @ud) (find "name=\"" disp) + ?~ np ~ + =/ nr=tape (slag (add u.np 6) disp) + =/ ne=(unit @ud) (find "\"" nr) + ?~ ne ~ + =/ name=@t (crip (scag u.ne nr)) + :: Extract filename="..." (optional) + =/ file=(unit @t) + =/ fp=(unit @ud) (find "filename=\"" disp) + ?~ fp ~ + =/ fr=tape (slag (add u.fp 10) disp) + =/ fe=(unit @ud) (find "\"" fr) + ?~ fe ~ + `(crip (scag u.fe fr)) + :: Remaining lines: content-type, encoding + =| typ=(unit mite) + =| cod=(unit @t) + =/ rest=wall t.lines + |- + ?~ rest `[name file typ cod bod] + =/ line=tape i.rest + =? typ &(?=(~ typ) ?=(^ (find "Content-Type: " line))) + (rush (crip (slag 14 line)) (more fas (cook (cury rap 3) (plus qit)))) + =? cod &(?=(~ cod) ?=(^ (find "Content-Transfer-Encoding: " line))) + `(crip (slag 27 line)) + $(rest t.rest) +:: +++ split-crlf + |= t=tape + ^- wall + =| acc=wall + =| cur=tape + |- + ?~ t + ?~ cur (flop acc) + (flop [(flop cur) acc]) + ?: &(=(i.t '\0d') ?=(^ t.t) =(i.t.t '\0a')) + $(t t.t.t, acc [(flop cur) acc], cur ~) + $(t t.t, cur [i.t cur]) -- diff --git a/desk/lib/nex/mcp.hoon b/desk/lib/nex/mcp.hoon deleted file mode 100644 index f713f3d..0000000 --- a/desk/lib/nex/mcp.hoon +++ /dev/null @@ -1,156 +0,0 @@ -:: lib/nex/mcp: MCP (Model Context Protocol) JSON-RPC 2.0 adapter -:: -:: Thin protocol layer that converts tool definitions from lib/nex/tools -:: to MCP JSON-RPC format and routes MCP requests to tool handlers. -:: -/+ nexus, tarball, io=fiberio, json-utils, tools=nex-tools -|% -:: JSON-RPC 2.0 error codes -:: -++ rpc-parse-error ~.-32700 -++ rpc-invalid-request ~.-32600 -++ rpc-method-not-found ~.-32601 -++ rpc-invalid-params ~.-32602 -++ rpc-internal-error ~.-32603 -:: -++ rpc-error - |= [code=@ta message=@t id=(unit json)] - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - :- 'error' - %- pairs:enjs:format - :~ ['code' n+code] - ['message' s+message] - == - == -:: -++ rpc-result - |= [result=json id=(unit json)] - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - ['result' result] - == -:: -++ mcp-text-result - |= [text=@t id=(unit json)] - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - :- 'result' - %- pairs:enjs:format - :~ :- 'content' - :- %a - :~ %- pairs:enjs:format - :~ ['type' s+'text'] - ['text' s+text] - == - == - == - == -:: -++ mcp-initialize - |= [server-name=@t version=@t id=(unit json)] - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - :- 'result' - %- pairs:enjs:format - :~ ['protocolVersion' s+'2024-11-05'] - :- 'capabilities' - %- pairs:enjs:format - :~ :- 'tools' - (pairs:enjs:format ~[['listChanged' b+%.y]]) - == - :- 'serverInfo' - %- pairs:enjs:format - :~ ['name' s+server-name] - ['version' s+version] - == - == - == -:: -++ param-type-to-json - |= type=parameter-type:tools - ^- @t - ?- type - %string 'string' - %number 'number' - %boolean 'boolean' - %array 'array' - %object 'object' - == -:: -++ tool-def-to-mcp - |= =tool:tools - ^- json - =/ properties=(map @t json) - %- ~(run by parameters:tool) - |= param=parameter-def:tools - %- pairs:enjs:format - :~ ['type' s+(param-type-to-json type.param)] - ['description' s+description.param] - == - =/ required-array=(list json) - (turn required:tool |=(f=@t s+f)) - %- pairs:enjs:format - :~ ['name' s+name:tool] - ['description' s+description:tool] - :- 'inputSchema' - %- pairs:enjs:format - :~ ['type' s+'object'] - ['properties' [%o properties]] - ['required' [%a required-array]] - == - == -:: -++ tool-definitions - |= dynamic=(map @t tool:tools) - ^- (list json) - (turn ~(val by dynamic) tool-def-to-mcp) -:: -++ mcp-tools-list - |= [dynamic=(map @t tool:tools) id=(unit json)] - %- pairs:enjs:format - %+ welp - ?~(id ~ ['id' u.id]~) - :~ ['jsonrpc' s+'2.0'] - :- 'result' - %- pairs:enjs:format - :~ ['tools' [%a (tool-definitions dynamic)]] - == - == -:: Main MCP request handler -:: -++ handle-request - |= [jon=json dynamic=(map @t tool:tools)] - =/ m (fiber:fiber:nexus ,(unit json)) - ^- form:m - =/ method=(unit json) (~(get jo:json-utils jon) /method) - =/ id=(unit json) (~(get jo:json-utils jon) /id) - ?+ method - (pure:m `(rpc-error rpc-method-not-found 'Method not found' id)) - :: - [~ [%s %'initialize']] - (pure:m `(mcp-initialize 'urbit-grubbery' '1.0.0' id)) - :: - [~ [%s %'notifications/initialized']] - (pure:m ~) - :: - [~ [%s %'tools/list']] - =/ advertised=(map @t tool:tools) - %- ~(gas by *(map @t tool:tools)) - %+ skim ~(tap by dynamic) - |= [name=@t *] - ?| =(name 'list_tools') - =(name 'call_tool') - =(name 'echo') - == - (pure:m `(mcp-tools-list advertised id)) - == --- diff --git a/desk/lib/nex/mcp/tools/add-mcp-tool.hoon b/desk/lib/nex/mcp/tools/add-mcp-tool.hoon deleted file mode 100644 index 063b5d0..0000000 --- a/desk/lib/nex/mcp/tools/add-mcp-tool.hoon +++ /dev/null @@ -1,85 +0,0 @@ -:: add-mcp-tool: add a custom MCP tool to /lib/cus/ -:: -:: Writes Hoon source to the MCP nexus custom tools directory. -:: Waits for the builder to compile it and returns the result. -:: -=> |% - ++ await-compile - |= [tool-name=@ta sub-path=path] - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - |- - ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /await) - ?: ?=(%wake -.nw) $ - ?. ?=([%ball *] view.nw) $ - :: Look for our file in /bin/cus/ - =/ bin-ball=ball:tarball ball.view.nw - =/ cus=ball:tarball (~(gut by dir.bin-ball) %cus *ball:tarball) - =/ sub=ball:tarball (~(dip ba:tarball cus) sub-path) - ?~ fil.sub $ - =/ ct=(unit content:tarball) - (~(get by contents.u.fil.sub) tool-name) - ?~ ct $ - ?: =(%temp p.cage.u.ct) - (pure:m [%text (crip "Tool {(trip tool-name)} compiled and registered at /lib/cus{(spud sub-path)}")]) - ?. =(%tang p.cage.u.ct) $ - =/ err=tang !<(tang q.cage.u.ct) - =/ msg=@t - %- crip - %- zing - %+ turn (flop err) - |=(=tank (weld ~(ram re tank) "\0a")) - (pure:m [%error msg]) - -- -!: -^- tool:tools -|% -++ name 'add_mcp_tool' -++ description - ^~ %- crip - ;: weld - "Add a custom MCP tool by writing Hoon source to the " - "MCP nexus custom tools directory (/lib/cus/). The builder " - "automatically compiles and registers it. " - "Path is relative within cus/ (e.g. '/' for top-level, " - "'/my-category' for nested). " - "The source must produce a valid tool:tools. " - "Returns compile errors if the source fails to build." - == -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['name' [%string 'Tool filename without extension (e.g. "my-tool")']] - ['source' [%string 'Hoon source code that produces a tool:tools']] - ['path' [%string 'Path within cus/ (e.g. "/" for top-level, "/subdir" for nested). Defaults to "/".']] - == -++ required ~['name' 'source'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ tool-name=@ta - (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) - =/ source=@t - (~(dog jo:json-utils [%o args.st]) /source so:dejs:format) - =/ sub-path=path - =/ raw=(unit @t) - ?~ p=(~(get jo:json-utils [%o args.st]) /path) ~ - ?. ?=([%s *] u.p) ~ - ?: =('' p.u.p) ~ - `p.u.p - ?~ raw / - (stab u.raw) - =/ full-path=path (weld /lib/cus sub-path) - =/ road=road:tarball [%| 1 %& full-path tool-name] - :: Subscribe to /bin/ BEFORE writing source (no race with builder) - ;< init=view:nexus bind:m (keep:io /await [%| 1 %| /bin] ~) - :: Write source - ;< exists=? bind:m (peek-exists:io /chk road) - ?: exists - ;< ~ bind:m (over:io /write road hoon+!>(source)) - (await-compile tool-name sub-path) - ;< ~ bind:m (make:io /write road |+[%.n hoon+!>(source) ~]) - (await-compile tool-name sub-path) --- diff --git a/desk/lib/nex/mcp/tools/add-weir.hoon b/desk/lib/nex/mcp/tools/add-weir.hoon deleted file mode 100644 index 72c53cb..0000000 --- a/desk/lib/nex/mcp/tools/add-weir.hoon +++ /dev/null @@ -1,49 +0,0 @@ -:: add-weir: add a sandbox rule to a directory -:: -!: -^- tool:tools -|% -++ name 'add_weir' -++ description 'Add a sandbox (weir) rule to a directory. Categories: write, poke, read. Road types: dir, file.' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['path' [%string 'Directory to add the weir rule to (e.g. "/mcp.mcp")']] - ['category' [%string 'Rule category: "write", "poke", or "read"']] - ['road_path' [%string 'Allowed road path (e.g. "/")']] - ['road_type' [%string 'Road type: "dir" or "file"']] - == -++ required ~['path' 'category' 'road_path'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ weir-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - =/ category=@t (~(dog jo:json-utils [%o args.st]) /category so:dejs:format) - =/ road-path=@t (~(dog jo:json-utils [%o args.st]) /'road_path' so:dejs:format) - =/ road-type=@t - ?~ rt=(~(get jo:json-utils [%o args.st]) /'road_type') 'dir' - ?. ?=([%s *] u.rt) 'dir' - p.u.rt - =/ pax=path (stab road-path) - =/ new-road=road:tarball - ?: =('file' road-type) - ?~ pax [%& %| /] - [%& %& (snip `path`pax) (rear pax)] - [%& %| pax] - =/ dir-pax=path (stab weir-path) - ;< dir-seen=seen:nexus bind:m (peek:io /weir [%& %| dir-pax] ~) - =/ cur=weir:nexus - ?. ?=([%& %ball *] dir-seen) [~ ~ ~] - =/ dir-sand=sand:nexus sand.p.dir-seen - (fall fil.dir-sand [~ ~ ~]) - =/ new=weir:nexus - ?+ category cur - %'write' cur(make (~(put in make.cur) new-road)) - %'poke' cur(poke (~(put in poke.cur) new-road)) - %'read' cur(peek (~(put in peek.cur) new-road)) - == - ;< ~ bind:m (sand:io /weir [%& %| dir-pax] `new) - (pure:m [%text (crip "Added {(trip category)} rule to {(trip weir-path)}")]) --- diff --git a/desk/lib/nex/mcp/tools/browse.hoon b/desk/lib/nex/mcp/tools/browse.hoon deleted file mode 100644 index 1c67e9c..0000000 --- a/desk/lib/nex/mcp/tools/browse.hoon +++ /dev/null @@ -1,42 +0,0 @@ -:: browse: list files and subdirectories at a path in the grubbery ball -:: -!: -^- tool:tools -|% -++ name 'browse' -++ description 'List files and subdirectories at a path in the grubbery ball' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['path' [%string 'Directory path (e.g. "/" or "/config/creds")']]]) -++ required ~['path'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ dir-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - =/ pax=path (stab dir-path) - ;< =seen:nexus bind:m (peek:io /browse [%& %| pax] ~) - ?. ?=([%& %ball *] seen) - (pure:m [%error (crip "Directory not found: {(trip dir-path)}")]) - =/ neck-text=tape - ?~ fil.ball.p.seen "" - ?~ neck.u.fil.ball.p.seen "" - "\0aNexus: {(trip u.neck.u.fil.ball.p.seen)}" - =/ sub-dirs=(list @ta) ~(tap in ~(key by dir.ball.p.seen)) - =/ files=(list [@ta @tas]) - ?~ fil.ball.p.seen ~ - %+ turn ~(tap by contents.u.fil.ball.p.seen) - |=([n=@ta c=content:tarball] [n p.cage.c]) - =/ dir-text=tape - ?~ sub-dirs "" - %- zing - %+ turn sub-dirs - |=(d=@ta "\0a {(trip d)}/") - =/ file-text=tape - ?~ files "" - %- zing - %+ turn files - |=([n=@ta m=@tas] "\0a {(trip n)}") - (pure:m [%text (crip "{(trip dir-path)}{neck-text}{dir-text}{file-text}")]) --- diff --git a/desk/lib/nex/mcp/tools/call-tool.hoon b/desk/lib/nex/mcp/tools/call-tool.hoon deleted file mode 100644 index 99f6a4a..0000000 --- a/desk/lib/nex/mcp/tools/call-tool.hoon +++ /dev/null @@ -1,83 +0,0 @@ -:: call-tool: invoke any tool by name, including dynamically added ones -:: -=> |% - ++ find-tool - |= [tn=@t b=ball:tarball] - ^- (unit tool:tools) - =/ dirs=(list @ta) ~[%std %cus] - |- - ?~ dirs ~ - =/ sub=ball:tarball (~(gut by dir.b) i.dirs *ball:tarball) - =/ found=(unit tool:tools) (search tn sub) - ?^ found found - $(dirs t.dirs) - :: - ++ search - |= [tn=@t b=ball:tarball] - ^- (unit tool:tools) - =/ from-files=(unit tool:tools) - ?. ?=(^ fil.b) ~ - =/ files=(list [@ta content:tarball]) - ~(tap by contents.u.fil.b) - |- - ?~ files ~ - =/ [* =content:tarball] i.files - ?. =(%temp p.cage.content) $(files t.files) - =/ got=(each tool:tools tang) - (mule |.(!<(tool:tools q.cage.content))) - ?. ?=(%& -.got) $(files t.files) - ?: =(tn name:p.got) `p.got - $(files t.files) - ?^ from-files from-files - =/ dirs=(list [@ta ball:tarball]) ~(tap by dir.b) - |- - ?~ dirs ~ - =/ [* sub=ball:tarball] i.dirs - =/ found=(unit tool:tools) (search tn sub) - ?^ found found - $(dirs t.dirs) - -- -!: -^- tool:tools -|% -++ name 'call_tool' -++ description - ^~ %- crip - ;: weld - "Call any MCP tool by name, including dynamically added tools " - "that are not in your cached tools/list. Use list_tools to " - "discover available tools first. Pass the tool name and its " - "arguments as a JSON object." - == -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['tool_name' [%string 'Name of the tool to call (e.g. "echo", "my_custom_tool")']] - ['tool_args' [%object 'Arguments to pass to the tool as a JSON object']] - == -++ required ~['tool_name'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ tool-name=@t - (~(dog jo:json-utils [%o args.st]) /'tool_name' so:dejs:format) - =/ tool-args=(map @t json) - =/ v (~(get jo:json-utils [%o args.st]) /'tool_args') - ?~ v ~ - ?. ?=([%o *] u.v) ~ - p.u.v - :: Look up compiled tool from /bin/ - ;< bin-seen=seen:nexus bind:m (peek:io /bin [%| 1 %| /bin] ~) - ?. ?=([%& %ball *] bin-seen) - (pure:m [%error 'Could not read /bin/']) - =/ found=(unit tool:tools) - (find-tool tool-name ball.p.bin-seen) - ?~ found - (pure:m [%error (crip "Tool not found: {(trip tool-name)}")]) - :: Swap state to target tool's args and update tool name - ;< ~ bind:m - (replace:io !>(`tool-state:tools`[tool-name tool-args %start *json ~])) - handler.u.found --- diff --git a/desk/lib/nex/mcp/tools/clear-weir.hoon b/desk/lib/nex/mcp/tools/clear-weir.hoon deleted file mode 100644 index 155ed61..0000000 --- a/desk/lib/nex/mcp/tools/clear-weir.hoon +++ /dev/null @@ -1,20 +0,0 @@ -:: clear-weir: clear all sandbox rules from a directory -:: -!: -^- tool:tools -|% -++ name 'clear_weir' -++ description 'Clear all sandbox (weir) rules from a directory, giving it unrestricted access' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['path' [%string 'Directory to clear the weir from']]]) -++ required ~['path'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ weir-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - ;< ~ bind:m (sand:io /weir [%& %| (stab weir-path)] ~) - (pure:m [%text (crip "Cleared weir from {(trip weir-path)}")]) --- diff --git a/desk/lib/nex/mcp/tools/commit.hoon b/desk/lib/nex/mcp/tools/commit.hoon deleted file mode 100644 index 998088f..0000000 --- a/desk/lib/nex/mcp/tools/commit.hoon +++ /dev/null @@ -1,57 +0,0 @@ -:: commit: commit a mounted desk and return version info with logs -:: -!: -^- tool:tools -|% -++ name 'commit' -++ description 'Commit a mounted desk and return version info with logs' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['mount_point' [%string 'Mount point name (e.g. "base")']] - ['timeout_seconds' [%number 'Timeout in seconds to wait for logs (default: 30)']] - == -++ required ~['mount_point'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - ?+ step.st (pure:m [%error 'Unknown commit step']) - %start - =/ mount-point-json=(unit json) - (~(get by args.st) 'mount_point') - ?~ mount-point-json - (pure:m [%error 'Missing required argument: mount_point']) - ?. ?=([%s *] u.mount-point-json) - (pure:m [%error 'mount_point must be a string']) - =/ mount-point=@tas (slav %tas p.u.mount-point-json) - =/ timeout-seconds=@ud - ?~ timeout-json=(~(get by args.st) 'timeout_seconds') - 30 - ?. ?=([%n *] u.timeout-json) - 30 - (rash p.u.timeout-json dem) - =/ timeout=@dr (mul timeout-seconds ~s1) - ;< initial=cass:clay bind:m (do-scry:io cass:clay /scry /cw/[mount-point]) - =/ commit-data=json - %- pairs:enjs:format - :~ ['initial-ud' (numb:enjs:format ud.initial)] - ['initial-da' s+(scot %da da.initial)] - ['logs' a+~] - == - ;< ~ bind:m - (replace:io !>([tool.st args.st %committing commit-data ~])) - ;< * bind:m (keep:io /dill/logs [%& %& /sys/dill %'logs.dill-told'] ~) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - ;< ~ bind:m - (send-card:io %pass /commit-timeout %arvo %b %wait (add now.bowl timeout)) - ;< ~ bind:m (gall-poke-our:io %hood kiln-commit+!>([mount-point %.n])) - ;< ~ bind:m collect-logs:tools - ;< ~ bind:m (drop:io /dill/logs [%& %& /sys/dill %'logs.dill-told']) - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - (finish-commit:tools args.st data.st) - %committing - (finish-commit:tools args.st data.st) - == --- diff --git a/desk/lib/nex/mcp/tools/create-folder.hoon b/desk/lib/nex/mcp/tools/create-folder.hoon deleted file mode 100644 index d7a6b90..0000000 --- a/desk/lib/nex/mcp/tools/create-folder.hoon +++ /dev/null @@ -1,27 +0,0 @@ -:: create-folder: create a folder in the grubbery ball -:: -!: -^- tool:tools -|% -++ name 'create_folder' -++ description 'Create a folder in the grubbery ball.' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['path' [%string 'Parent directory path (e.g. "/")']] - ['name' [%string 'Folder name']] - == -++ required ~['path' 'name'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ parent-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - =/ folder-name=@t (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) - =/ dir-name=@ta folder-name - =/ folder-path=path (snoc (stab parent-path) dir-name) - =/ new-ball=ball:tarball [`[~ ~ ~] ~] - ;< ~ bind:m (make:io /mkdir [%& %| folder-path] &+[*sand:nexus *gain:nexus new-ball]) - (pure:m [%text (crip "Created folder {(spud folder-path)}")]) --- diff --git a/desk/lib/nex/mcp/tools/create-symlink.hoon b/desk/lib/nex/mcp/tools/create-symlink.hoon deleted file mode 100644 index dc85b70..0000000 --- a/desk/lib/nex/mcp/tools/create-symlink.hoon +++ /dev/null @@ -1,30 +0,0 @@ -:: create-symlink: create a symlink in the grubbery ball -:: -!: -^- tool:tools -|% -++ name 'create_symlink' -++ description 'Create a symlink in the grubbery ball. Target is an absolute path like "/some/file" or a relative path like "^^/sibling".' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['path' [%string 'Directory to create the symlink in (e.g. "/")']] - ['name' [%string 'Symlink name']] - ['target' [%string 'Target path (e.g. "/some/path" for absolute, "^^/sibling" for relative)']] - == -++ required ~['path' 'name' 'target'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ link-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - =/ link-name=@t (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) - =/ target=@t (~(dog jo:json-utils [%o args.st]) /target so:dejs:format) - =/ sym=(unit symlink:tarball) (parse-symlink:tarball target) - ?~ sym - (pure:m [%error (crip "Invalid symlink target: {(trip target)}")]) - ;< ~ bind:m - (make:io /symlink [%& %& (stab link-path) link-name] |+[%.n [%symlink !>(u.sym)] ~]) - (pure:m [%text (crip "Created symlink {(trip link-path)}/{(trip link-name)} -> {(trip target)}")]) --- diff --git a/desk/lib/nex/mcp/tools/del-weir.hoon b/desk/lib/nex/mcp/tools/del-weir.hoon deleted file mode 100644 index 3ec7e35..0000000 --- a/desk/lib/nex/mcp/tools/del-weir.hoon +++ /dev/null @@ -1,49 +0,0 @@ -:: del-weir: remove a sandbox rule from a directory -:: -!: -^- tool:tools -|% -++ name 'del_weir' -++ description 'Remove a sandbox (weir) rule from a directory' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['path' [%string 'Directory to remove the weir rule from']] - ['category' [%string 'Rule category: "write", "poke", or "read"']] - ['road_path' [%string 'Road path to remove']] - ['road_type' [%string 'Road type: "dir" or "file"']] - == -++ required ~['path' 'category' 'road_path'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ weir-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - =/ category=@t (~(dog jo:json-utils [%o args.st]) /category so:dejs:format) - =/ road-path=@t (~(dog jo:json-utils [%o args.st]) /'road_path' so:dejs:format) - =/ road-type=@t - ?~ rt=(~(get jo:json-utils [%o args.st]) /'road_type') 'dir' - ?. ?=([%s *] u.rt) 'dir' - p.u.rt - =/ pax=path (stab road-path) - =/ del-road=road:tarball - ?: =('file' road-type) - ?~ pax [%& %| /] - [%& %& (snip `path`pax) (rear pax)] - [%& %| pax] - =/ dir-pax=path (stab weir-path) - ;< dir-seen=seen:nexus bind:m (peek:io /weir [%& %| dir-pax] ~) - =/ cur=weir:nexus - ?. ?=([%& %ball *] dir-seen) [~ ~ ~] - =/ dir-sand=sand:nexus sand.p.dir-seen - (fall fil.dir-sand [~ ~ ~]) - =/ new=weir:nexus - ?+ category cur - %'write' cur(make (~(del in make.cur) del-road)) - %'poke' cur(poke (~(del in poke.cur) del-road)) - %'read' cur(peek (~(del in peek.cur) del-road)) - == - ;< ~ bind:m (sand:io /weir [%& %| dir-pax] `new) - (pure:m [%text (crip "Removed {(trip category)} rule from {(trip weir-path)}")]) --- diff --git a/desk/lib/nex/mcp/tools/delete-folder.hoon b/desk/lib/nex/mcp/tools/delete-folder.hoon deleted file mode 100644 index fc85541..0000000 --- a/desk/lib/nex/mcp/tools/delete-folder.hoon +++ /dev/null @@ -1,20 +0,0 @@ -:: delete-folder: delete a folder and all its contents -:: -!: -^- tool:tools -|% -++ name 'delete_folder' -++ description 'Delete a folder and all its contents from the grubbery ball' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['path' [%string 'Path of the folder to delete (e.g. "/old/stuff")']]]) -++ required ~['path'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ folder-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - ;< ~ bind:m (cull:io /delete [%& %| (stab folder-path)]) - (pure:m [%text (crip "Deleted folder {(trip folder-path)}")]) --- diff --git a/desk/lib/nex/mcp/tools/delete-grub.hoon b/desk/lib/nex/mcp/tools/delete-grub.hoon deleted file mode 100644 index d907174..0000000 --- a/desk/lib/nex/mcp/tools/delete-grub.hoon +++ /dev/null @@ -1,24 +0,0 @@ -:: delete-grub: delete a grub (file) from the grubbery ball -:: -!: -^- tool:tools -|% -++ name 'delete_grub' -++ description 'Delete a grub (file) from the grubbery ball' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['path' [%string 'Directory containing the grub (e.g. "/mcp.mcp/tools")']] - ['name' [%string 'Grub filename to delete']] - == -++ required ~['path' 'name'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ file-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - =/ file-name=@t (~(dog jo:json-utils [%o args.st]) /name so:dejs:format) - ;< ~ bind:m (cull:io /delete [%& %& (stab file-path) file-name]) - (pure:m [%text (crip "Deleted {(trip file-path)}/{(trip file-name)}")]) --- diff --git a/desk/lib/nex/mcp/tools/desk-version.hoon b/desk/lib/nex/mcp/tools/desk-version.hoon deleted file mode 100644 index d991aa4..0000000 --- a/desk/lib/nex/mcp/tools/desk-version.hoon +++ /dev/null @@ -1,26 +0,0 @@ -:: desk-version: get the current version of a desk -:: -!: -^- tool:tools -|% -++ name 'desk_version' -++ description 'Get the current version of a desk' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['desk' [%string 'Desk name (e.g. "base")']]]) -++ required ~['desk'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ dek=@tas (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) - ;< =cass:clay bind:m (do-scry:io cass:clay /scry /cw/[dek]) - =/ result=tape - ;: weld - "Desk: {(trip dek)}\0a" - "Version: {}\0a" - "Date: {(scow %da da.cass)}" - == - (pure:m [%text (crip result)]) --- diff --git a/desk/lib/nex/mcp/tools/echo.hoon b/desk/lib/nex/mcp/tools/echo.hoon deleted file mode 100644 index 4db5cff..0000000 --- a/desk/lib/nex/mcp/tools/echo.hoon +++ /dev/null @@ -1,19 +0,0 @@ -:: echo: simple test tool that echoes back its input -:: -!: -^- tool:tools -|% -++ name 'echo' -++ description 'Echoes back the provided message' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['message' [%string 'The message to echo back']]]) -++ required ~['message'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ msg=@t (~(dog jo:json-utils [%o args.st]) /message so:dejs:format) - (pure:m [%text msg]) --- diff --git a/desk/lib/nex/mcp/tools/install-app.hoon b/desk/lib/nex/mcp/tools/install-app.hoon deleted file mode 100644 index 2d6e29f..0000000 --- a/desk/lib/nex/mcp/tools/install-app.hoon +++ /dev/null @@ -1,30 +0,0 @@ -:: install-app: install a desk (local or from a remote ship) -:: -!: -^- tool:tools -|% -++ name 'install_app' -++ description 'Install a desk (local or from a remote ship)' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['desk' [%string 'Desk name to install']] - ['ship' [%string 'Source ship (optional, defaults to own ship)']] - == -++ required ~['desk'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ desk=@t (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) - =/ dek=@tas (slav %tas desk) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - =/ src=@p - ?~ ship-json=(~(get jo:json-utils [%o args.st]) /ship) - our.bowl - ?. ?=([%s *] u.ship-json) our.bowl - (slav %p p.u.ship-json) - ;< ~ bind:m (gall-poke-our:io %hood kiln-install+!>([dek src dek])) - (pure:m [%text (crip "Installing %{(trip dek)} from {}")]) --- diff --git a/desk/lib/nex/mcp/tools/list-clay-files.hoon b/desk/lib/nex/mcp/tools/list-clay-files.hoon deleted file mode 100644 index 29055c0..0000000 --- a/desk/lib/nex/mcp/tools/list-clay-files.hoon +++ /dev/null @@ -1,31 +0,0 @@ -:: list-clay-files: list files in Clay under a given path -:: -!: -^- tool:tools -|% -++ name 'list_clay_files' -++ description 'List files in Clay under a given path' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['desk' [%string 'Desk name (e.g. "base")']] - ['path' [%string 'Path to list (e.g. "/" or "/gen")']] - == -++ required ~['desk' 'path'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ desk=@t (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) - =/ file-path=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - =/ dek=@tas (slav %tas desk) - =/ pax=path (stab file-path) - ;< files=(list path) bind:m - (do-scry:io (list path) /scry [%ct dek pax]) - =/ result=tape - %- zing - %+ turn files - |=(p=path "{(spud p)}\0a") - (pure:m [%text (crip result)]) --- diff --git a/desk/lib/nex/mcp/tools/list-tools.hoon b/desk/lib/nex/mcp/tools/list-tools.hoon deleted file mode 100644 index 3a18ef7..0000000 --- a/desk/lib/nex/mcp/tools/list-tools.hoon +++ /dev/null @@ -1,141 +0,0 @@ -:: list-tools: list all available MCP tools with optional filtering -:: -:: Returns live tool data from /bin/ — includes dynamically added -:: tools that may not be in the MCP client's cached tools/list. -:: -=> |% - ++ collect-all - |= b=ball:tarball - ^- (list tool:tools) - =/ result=(list tool:tools) ~ - =/ dirs=(list @ta) ~[%std %cus] - |- - ?~ dirs result - =/ sub=ball:tarball (~(gut by dir.b) i.dirs *ball:tarball) - =. result (weld result (collect-from sub)) - $(dirs t.dirs) - :: - ++ collect-from - |= b=ball:tarball - ^- (list tool:tools) - =/ result=(list tool:tools) ~ - :: Files in this directory - =? result ?=(^ fil.b) - =/ files=(list [@ta content:tarball]) - ~(tap by contents.u.fil.b) - |- - ?~ files result - =/ [* =content:tarball] i.files - ?. =(%temp p.cage.content) $(files t.files) - =/ got=(each tool:tools tang) - (mule |.(!<(tool:tools q.cage.content))) - ?. ?=(%& -.got) $(files t.files) - $(files t.files, result [p.got result]) - :: Recurse into subdirectories - =/ dirs=(list [@ta ball:tarball]) ~(tap by dir.b) - |- - ?~ dirs result - =/ [* sub=ball:tarball] i.dirs - $(dirs t.dirs, result (weld result (collect-from sub))) - :: +has-substr: case-insensitive substring search - :: - ++ has-substr - |= [needle=tape haystack=tape] - ^- ? - ?~ needle %.y - =/ nlow=tape (cass needle) - =/ hlow=tape (cass haystack) - =/ nlen=@ud (lent nlow) - |- - ?~ hlow %.n - ?: =(nlow (scag nlen `tape`hlow)) %.y - $(hlow t.hlow) - -- -!: -^- tool:tools -|% -++ name 'list_tools' -++ description - ^~ %- crip - ;: weld - "List all available MCP tools from the live compiled tool registry. " - "This reflects the current state and includes dynamically added tools " - "that may not appear in your cached tools/list. Use this to discover " - "tools added via add_mcp_tool. " - "Use 'name' to glob tool names (* wildcards), 'search' to grep " - "descriptions (substring match). Set names_only for compact output." - == -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['name' [%string 'Glob filter on tool names (* wildcards, e.g. "*clay*", "get_*")']] - ['search' [%string 'Substring search in tool descriptions (case-insensitive, e.g. "clay", "custom")']] - ['names_only' [%boolean 'If true, return only tool names (compact listing)']] - == -++ required ~ -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ pat-name=(unit @t) - ?~ p=(~(get jo:json-utils [%o args.st]) /name) ~ - ?. ?=([%s *] u.p) ~ - ?: =('' p.u.p) ~ - `p.u.p - =/ pat-search=(unit @t) - ?~ p=(~(get jo:json-utils [%o args.st]) /search) ~ - ?. ?=([%s *] u.p) ~ - ?: =('' p.u.p) ~ - `p.u.p - =/ v (~(get jo:json-utils [%o args.st]) /'names_only') - =/ names-only=? - ?~ v %.n - ?=([%b %.y] u.v) - :: Peek /bin/ to get all compiled tools - ;< bin-seen=seen:nexus bind:m (peek:io /bin [%| 1 %| /bin] ~) - ?. ?=([%& %ball *] bin-seen) - (pure:m [%error 'Could not read /bin/']) - =/ all-tools=(list tool:tools) - (collect-all ball.p.bin-seen) - :: Filter by name glob and description search - =/ matches=(list tool:tools) - %+ skim all-tools - |= =tool:tools - =/ name-ok=? - ?~ pat-name %.y - (glob-match:tools (trip u.pat-name) (trip name:tool)) - =/ search-ok=? - ?~ pat-search %.y - (has-substr (trip u.pat-search) (trip description:tool)) - &(name-ok search-ok) - ?~ matches - (pure:m [%text 'No tools found']) - ?: names-only - =/ result=tape - (zing (turn matches |=(=tool:tools "\0a{(trip name:tool)}"))) - (pure:m [%text (crip "{<(lent matches)>} tools:{result}")]) - =/ result=tape - %- zing - %+ turn matches - |= =tool:tools - =/ params=(list @t) - (turn ~(tap by parameters:tool) |=([n=@t *] n)) - =/ req=(list @t) required:tool - =/ out=tape - "\0a\0a{(trip name:tool)}\0a {(trip description:tool)}" - =? out ?=(^ params) - =/ param-text=tape - %- zing - ^- (list tape) - (join ", " (turn params trip)) - (weld out "\0a params: {param-text}") - =? out ?=(^ req) - =/ req-text=tape - %- zing - ^- (list tape) - (join ", " (turn req trip)) - (weld out "\0a required: {req-text}") - out - (pure:m [%text (crip "{<(lent matches)>} tools found:{result}")]) --- diff --git a/desk/lib/nex/mcp/tools/manu.hoon b/desk/lib/nex/mcp/tools/manu.hoon deleted file mode 100644 index 3aa8988..0000000 --- a/desk/lib/nex/mcp/tools/manu.hoon +++ /dev/null @@ -1,23 +0,0 @@ -:: manu: look up documentation for any path in the grubbery ball -:: -!: -^- tool:tools -|% -++ name 'read_manual' -++ description 'Look up documentation for a path in the grubbery ball. Returns the on-manu documentation from the nexus responsible for that path. Use this to understand what a directory or file is, what processes run there, and how things are structured.' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['path' [%string 'Path to look up (e.g. "/" or "/claude.claude/" or "/claude.claude/config.json")']]]) -++ required ~['path'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ pax=@t (~(dog jo:json-utils [%o args.st]) /path so:dejs:format) - =/ =road:tarball (cord-to-road:tarball pax) - ;< doc=@t bind:m (manu:io /manu |+road) - ?: =('' doc) - (pure:m [%text (crip "No documentation found for {(trip pax)}")]) - (pure:m [%text doc]) --- diff --git a/desk/lib/nex/mcp/tools/mount-desk.hoon b/desk/lib/nex/mcp/tools/mount-desk.hoon deleted file mode 100644 index 0356ae4..0000000 --- a/desk/lib/nex/mcp/tools/mount-desk.hoon +++ /dev/null @@ -1,23 +0,0 @@ -:: mount-desk: mount a desk to the Unix filesystem -:: -!: -^- tool:tools -|% -++ name 'mount_desk' -++ description 'Mount a desk to the Unix filesystem' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['desk' [%string 'Desk name (e.g. "base")']]]) -++ required ~['desk'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ desk=@t (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) - =/ dek=@tas (slav %tas desk) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - ;< ~ bind:m - (gall-poke-our:io %hood kiln-mount+!>([/(scot %p our.bowl)/[dek]/(scot %da now.bowl) dek])) - (pure:m [%text (crip "Mounted %{(trip dek)}")]) --- diff --git a/desk/lib/nex/mcp/tools/mount-to-grubbery.hoon b/desk/lib/nex/mcp/tools/mount-to-grubbery.hoon deleted file mode 100644 index 85155ef..0000000 --- a/desk/lib/nex/mcp/tools/mount-to-grubbery.hoon +++ /dev/null @@ -1,27 +0,0 @@ -:: mount-to-grubbery: sync a Clay desk into the grubbery ball -:: -!: -^- tool:tools -|% -++ name 'mount_to_grubbery' -++ description - ^~ %- crip - ;: weld - "Mount a Clay desk into the grubbery ball at /sys/clay/[desk]. " - "Files are synced and kept up to date as the desk changes." - == -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['desk' [%string 'Desk name (e.g. "base")']]]) -++ required ~['desk'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ desk=@t (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) - =/ dek=@tas (slav %tas desk) - ;< ~ bind:m - (gall-poke-our:io %grubbery mount-desk+!>(dek)) - (pure:m [%text (crip "Mounted %{(trip dek)} to /sys/clay/{(trip dek)}")]) --- diff --git a/desk/lib/nex/mcp/tools/new-desk.hoon b/desk/lib/nex/mcp/tools/new-desk.hoon deleted file mode 100644 index 09d9f43..0000000 --- a/desk/lib/nex/mcp/tools/new-desk.hoon +++ /dev/null @@ -1,67 +0,0 @@ -:: new-desk: create a new desk with default provisions -:: -!: -^- tool:tools -|% -++ name 'new_desk' -++ description - ^~ %- crip - ;: weld - "Create a new desk with a default agent, marks, and libraries. " - "The desk will have a minimal Gall agent and standard imports " - "(dbug, default-agent, skeleton, verb)." - == -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['desk' [%string 'Name of the desk to create (e.g. "my-app")']]]) -++ required ~['desk'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ desk=@t (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) - =/ dek=@tas (slav %tas desk) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - :: Scry default files from %base - =/ our=@p our.bowl - =/ now=@da now.bowl - =/ scry-base - |= =path - ^- [^path page:clay] - :- path - :- (rear path) - .^(noun %cx (scot %p our) %base (scot %da now) path) - =/ files=(map path page:clay) - %- ~(gas by *(map path page:clay)) - %+ welp - :: Agent template - :~ :- /app/[dek]/hoon - :- %hoon - .^(noun %cx (scot %p our) %base (scot %da now) /lib/skeleton/hoon) - == - %+ turn - ^- (list path) - :~ /sys/kelvin - /mar/bill/hoon - /mar/hoon/hoon - /mar/mime/hoon - /mar/noun/hoon - /mar/kelvin/hoon - /lib/dbug/hoon - /lib/default-agent/hoon - /lib/verb/hoon - /sur/verb/hoon - == - scry-base - :: Create desk with new-desk:cloy - ;< ~ bind:m - (send-card:io %pass /new-desk %arvo (new-desk:cloy dek ~ files)) - :: Write desk.bill so the agent starts - ;< ~ bind:m - %: send-card:io - %pass /desk-bill %arvo - %c %info dek %& :~ [/desk/bill %ins bill+!>(~[dek])] - == == - (pure:m [%text (crip "Created desk %{(trip dek)}")]) --- diff --git a/desk/lib/nex/mcp/tools/nuke-agent.hoon b/desk/lib/nex/mcp/tools/nuke-agent.hoon deleted file mode 100644 index c28d570..0000000 --- a/desk/lib/nex/mcp/tools/nuke-agent.hoon +++ /dev/null @@ -1,21 +0,0 @@ -:: nuke-agent: permanently wipe the state of a Gall agent -:: -!: -^- tool:tools -|% -++ name 'nuke_agent' -++ description 'Permanently wipe the state of a Gall agent' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['agent' [%string 'Agent name (e.g. "chat-store")']]]) -++ required ~['agent'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ agent=@t (~(dog jo:json-utils [%o args.st]) /agent so:dejs:format) - =/ agt=@tas (slav %tas agent) - ;< ~ bind:m (gall-poke-our:io %hood kiln-nuke+!>([agt %.y])) - (pure:m [%text (crip "Nuked %{(trip agt)}")]) --- diff --git a/desk/lib/nex/mcp/tools/poke-agent.hoon b/desk/lib/nex/mcp/tools/poke-agent.hoon deleted file mode 100644 index 2939617..0000000 --- a/desk/lib/nex/mcp/tools/poke-agent.hoon +++ /dev/null @@ -1,37 +0,0 @@ -:: poke-agent: poke a Gall agent with data of a specified mark -:: -!: -^- tool:tools -|% -++ name 'poke_agent' -++ description 'Poke a Gall agent with data of a specified mark' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['agent' [%string 'Agent name (e.g. "hood")']] - ['mark' [%string 'Poke mark (e.g. "helm-pass")']] - ['data' [%string 'Hoon expression for the poke data (e.g. "\'my-password\'")']] - == -++ required ~['agent' 'mark' 'data'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ agent=@t (~(dog jo:json-utils [%o args.st]) /agent so:dejs:format) - =/ mark=@t (~(dog jo:json-utils [%o args.st]) /mark so:dejs:format) - =/ data=@t (~(dog jo:json-utils [%o args.st]) /data so:dejs:format) - =/ agt=@tas (slav %tas agent) - =/ mar=@tas (slav %tas mark) - =/ res=(each vase tang) - (mule |.((slap !>(..zuse) (ream data)))) - ?: ?=(%| -.res) - =/ lines=wall (zing (turn (flop p.res) |=(=tank (wash [0 80] tank)))) - (pure:m [%error (crip "Bad hoon expression:\0a{(of-wall:format lines)}")]) - ;< err=(unit tang) bind:m - (gall-poke-or-nack:io agt mar^p.res) - ?^ err - =/ lines=wall (zing (turn (flop u.err) |=(=tank (wash [0 80] tank)))) - (pure:m [%error (crip "Poke nacked:\0a{(of-wall:format lines)}")]) - (pure:m [%text (crip "Poked %{(trip agt)} with %{(trip mar)}")]) --- diff --git a/desk/lib/nex/mcp/tools/read-logs.hoon b/desk/lib/nex/mcp/tools/read-logs.hoon deleted file mode 100644 index 82e6f3e..0000000 --- a/desk/lib/nex/mcp/tools/read-logs.hoon +++ /dev/null @@ -1,78 +0,0 @@ -:: read-logs: read dill system logs (slogs, errors, etc.) -:: -:: Reads the current or historical state of the dill logs grub. -:: This captures ~& printfs, stack traces, and system messages. -:: -:: Parameters: -:: version: specific version number to read (optional) -:: from: start version for range query (optional) -:: to: end version for range query (optional) -:: -!: -^- tool:tools -|% -++ name 'read_logs' -++ description - 'Read system logs (slogs, errors, debug output). Returns current logs or historical versions.' -++ parameters - ^- (map @t parameter-def:tools) - %- malt - :~ ['version' [%number 'Specific version number to read']] - ['from' [%number 'Start of version range (inclusive)']] - ['to' [%number 'End of version range (inclusive)']] - == -++ required ~ -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ args=json [%o args.st] - =/ ver=(unit @ud) - =/ v=(unit json) (~(get jo:json-utils args) /version) - ?~ v ~ - `(ni:dejs:format u.v) - =/ from=(unit @ud) - =/ v=(unit json) (~(get jo:json-utils args) /from) - ?~ v ~ - `(ni:dejs:format u.v) - =/ to=(unit @ud) - =/ v=(unit json) (~(get jo:json-utils args) /to) - ?~ v ~ - `(ni:dejs:format u.v) - =/ logs-road=road:tarball - [%& %& /sys/dill %'logs.dill-told'] - :: Specific version - ?^ ver - ;< =seen:nexus bind:m - (peek-at:io /read logs-road ~ [%ud u.ver]) - ?. ?=([%& %file *] seen) - (pure:m [%error 'Logs not found or version does not exist']) - =/ =told:dill !<(told:dill q.cage.p.seen) - (pure:m [%text (crip (format-told:tools told))]) - :: Range query - ?: |(?=(^ from) ?=(^ to)) - ;< res=(each (list [=cass:clay =cage]) tang) bind:m - (peep:io /hist logs-road [%numb from to]) - ?: ?=(%| -.res) - (pure:m [%error (crip (zing (turn (flop p.res) |=(=tank (weld ~(ram re tank) "\0a")))))]) - ?~ p.res - (pure:m [%text 'No log versions found in range']) - =/ out=tape "" - =/ entries=(list [=cass:clay =cage]) p.res - |- - ?~ entries - (pure:m [%text (crip out)]) - =/ =told:dill !<(told:dill q.cage.i.entries) - %= $ - entries t.entries - out (weld out "--- Log {} ---\0a{(format-told:tools told)}\0a") - == - :: Current state - ;< =seen:nexus bind:m - (peek:io /read logs-road ~) - ?. ?=([%& %file *] seen) - (pure:m [%error 'Logs grub not found']) - =/ =told:dill !<(told:dill q.cage.p.seen) - (pure:m [%text (crip (format-told:tools told))]) --- diff --git a/desk/lib/nex/mcp/tools/revive-agent.hoon b/desk/lib/nex/mcp/tools/revive-agent.hoon deleted file mode 100644 index b9017fa..0000000 --- a/desk/lib/nex/mcp/tools/revive-agent.hoon +++ /dev/null @@ -1,21 +0,0 @@ -:: revive-agent: revive (re-initialize) a nuked Gall agent -:: -!: -^- tool:tools -|% -++ name 'revive_agent' -++ description 'Revive (re-initialize) a nuked Gall agent' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['agent' [%string 'Agent name (e.g. "chat-store")']]]) -++ required ~['agent'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ agent=@t (~(dog jo:json-utils [%o args.st]) /agent so:dejs:format) - =/ agt=@tas (slav %tas agent) - ;< ~ bind:m (gall-poke-our:io %hood kiln-revive+!>(agt)) - (pure:m [%text (crip "Revived %{(trip agt)}")]) --- diff --git a/desk/lib/nex/mcp/tools/send-telegram.hoon b/desk/lib/nex/mcp/tools/send-telegram.hoon deleted file mode 100644 index ca80f8d..0000000 --- a/desk/lib/nex/mcp/tools/send-telegram.hoon +++ /dev/null @@ -1,45 +0,0 @@ -:: send-telegram: send a Telegram message via bot API -:: -!: -^- tool:tools -|% -++ name 'send_telegram' -++ description 'Send a Telegram message. Requires config/creds/telegram with bot-token and chat-id.' -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['message' [%string 'Message to send']]]) -++ required ~['message'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ message=@t (~(dog jo:json-utils [%o args.st]) /message so:dejs:format) - :: Read telegram config from ball - ;< creds-seen=seen:nexus bind:m - (peek:io /creds [%& %& /config/creds 'telegram'] ~) - ?. ?=([%& %file *] creds-seen) - (pure:m [%error 'Telegram credentials not configured. Create config/creds/telegram with bot-token and chat-id.']) - =/ jon=json !<(json q.cage.p.creds-seen) - =/ bot-token=@t (~(dog jo:json-utils jon) /bot-token so:dejs:format) - =/ chat-id=@t (~(dog jo:json-utils jon) /chat-id so:dejs:format) - :: POST to Telegram Bot API - =/ url=@t - (crip "{(trip 'https://api.telegram.org/bot')}{(trip bot-token)}/sendMessage") - =/ body=@t - (rap 3 ~['chat_id=' chat-id '&text=' message]) - =/ =request:http - :* %'POST' - url - ~[['content-type' 'application/x-www-form-urlencoded']] - `(as-octs:mimes:html body) - == - ;< ~ bind:m (send-request:io request) - ;< =client-response:iris bind:m take-client-response:io - ?. ?=(%finished -.client-response) - (pure:m [%error 'Telegram request failed']) - =/ code=@ud status-code.response-header.client-response - ?. =(200 code) - (pure:m [%error (crip "Telegram API error: HTTP {}")]) - (pure:m [%text 'Telegram message sent']) --- diff --git a/desk/lib/nex/mcp/tools/toggle-permissions.hoon b/desk/lib/nex/mcp/tools/toggle-permissions.hoon deleted file mode 100644 index 12b2fa2..0000000 --- a/desk/lib/nex/mcp/tools/toggle-permissions.hoon +++ /dev/null @@ -1,31 +0,0 @@ -:: toggle-permissions: make Clay nodes public or private -:: -!: -^- tool:tools -|% -++ name 'toggle_permissions' -++ description 'Make Clay nodes public or private (for publishing desks as apps)' -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['desk' [%string 'Desk name']] - ['path' [%string 'Path within desk (e.g. "/")']] - ['public' [%boolean 'Whether to make public (true) or private (false)']] - == -++ required ~['desk' 'path' 'public'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ desk=@t (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) - =/ dek=@tas (slav %tas desk) - =/ pax=path - (stab (~(dog jo:json-utils [%o args.st]) /path so:dejs:format)) - =/ pub=? - (~(dog jo:json-utils [%o args.st]) /public bo:dejs:format) - ;< ~ bind:m - (gall-poke-our:io %hood kiln-permission+!>([dek pax pub])) - =/ status=tape ?:(pub "public" "private") - (pure:m [%text (crip "Set %{(trip dek)}{(spud pax)} to {status}")]) --- diff --git a/desk/lib/nex/mcp/tools/unmount-from-grubbery.hoon b/desk/lib/nex/mcp/tools/unmount-from-grubbery.hoon deleted file mode 100644 index 100f1dd..0000000 --- a/desk/lib/nex/mcp/tools/unmount-from-grubbery.hoon +++ /dev/null @@ -1,27 +0,0 @@ -:: unmount-from-grubbery: remove a Clay desk mirror from the grubbery ball -:: -!: -^- tool:tools -|% -++ name 'unmount_from_grubbery' -++ description - ^~ %- crip - ;: weld - "Unmount a Clay desk from the grubbery ball. " - "Removes /sys/clay/[desk] and cancels the Clay subscription." - == -++ parameters - ^- (map @t parameter-def:tools) - (malt ~[['desk' [%string 'Desk name (e.g. "test")']]]) -++ required ~['desk'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ desk=@t (~(dog jo:json-utils [%o args.st]) /desk so:dejs:format) - =/ dek=@tas (slav %tas desk) - ;< ~ bind:m - (gall-poke-our:io %grubbery unmount-desk+!>(dek)) - (pure:m [%text (crip "Unmounted %{(trip dek)} from /sys/clay/{(trip dek)}")]) --- diff --git a/desk/lib/nex/mcp/tools/write-grub.hoon b/desk/lib/nex/mcp/tools/write-grub.hoon deleted file mode 100644 index bfedfc4..0000000 --- a/desk/lib/nex/mcp/tools/write-grub.hoon +++ /dev/null @@ -1,81 +0,0 @@ -:: write-grub: write a text file to the grubbery ball -:: -!: -^- tool:tools -|% -++ name 'write_grub' -++ description - ^~ %- crip - ;: weld - "Write a text file to the grubbery ball. " - "Mark is detected from filename extension " - "(e.g. .hoon, .txt, .json). Falls back to %txt if unknown. " - "Set content_type to store as raw mime (e.g. \"text/html\"). " - "Set mark to convert from mime to a specific mark (e.g. \"hoon\"). " - "When using mark, omit the extension from the filename — the mark becomes the extension." - == -++ parameters - ^- (map @t parameter-def:tools) - %- ~(gas by *(map @t parameter-def:tools)) - :~ ['path' [%string 'Directory path (e.g. "/")']] - ['name' [%string 'Filename with extension (e.g. "foo.hoon", "notes.txt"). Omit extension when using mark parameter.']] - ['content' [%string 'Text content to write']] - ['content_type' [%string 'MIME content type (e.g. "text/html"). When set, stores as raw mime.']] - ['mark' [%string 'Destination mark (e.g. "hoon", "txt"). Converts from mime to this mark via warm tube.']] - == -++ required ~['path' 'name' 'content'] -++ handler - ^- tool-handler:tools - =/ m (fiber:fiber:nexus ,tool-result:tools) - ^- form:m - ;< st=tool-state:tools bind:m (get-state-as:io ,tool-state:tools) - =/ file-path=(unit @t) (~(deg jo:json-utils [%o args.st]) /path so:dejs:format) - =/ file-name=(unit @t) (~(deg jo:json-utils [%o args.st]) /name so:dejs:format) - =/ content-raw=(unit @t) (~(deg jo:json-utils [%o args.st]) /content so:dejs:format) - ?~ file-path - (pure:m [%error 'Missing required argument: path']) - ?~ file-name - (pure:m [%error 'Missing required argument: name']) - ?~ content-raw - (pure:m [%error 'Missing required argument: content']) - =/ content-type=(unit @t) - ?~ ct=(~(get jo:json-utils [%o args.st]) /'content_type') ~ - ?. ?=([%s *] u.ct) ~ - ?: =('' p.u.ct) ~ - `p.u.ct - =/ dest-mark=(unit @tas) - ?~ mk=(~(get jo:json-utils [%o args.st]) /mark) ~ - ?. ?=([%s *] u.mk) ~ - ?: =('' p.u.mk) ~ - `p.u.mk - =/ file-path=@t u.file-path - =/ file-name=@t u.file-name - =/ content=@t u.content-raw - =/ pax-parsed=(each path @t) (parse-path:tools file-path) - ?: ?=(%| -.pax-parsed) - (pure:m [%error p.pax-parsed]) - =/ pax=path p.pax-parsed - =/ road=road:tarball [%& %& pax file-name] - :: Explicit content_type: store as raw mime with that content-type - ?^ content-type - =/ mtype=path (stab (cat 3 '/' u.content-type)) - =/ src-mime=mime [mtype (as-octs:mimes:html content)] - ;< exists=? bind:m (peek-exists:io /check road) - ?: exists - ;< ~ bind:m (over:io /write road mime+!>(src-mime)) - (pure:m [%text (crip "Wrote {(trip file-path)}/{(trip file-name)} [{(trip u.content-type)}]")]) - ;< ~ bind:m (make:io /write road |+[%.n mime+!>(src-mime) ~]) - (pure:m [%text (crip "Created {(trip file-path)}/{(trip file-name)} [{(trip u.content-type)}]")]) - :: Build mime cage from content - =/ src-mime=mime [/text/plain (as-octs:mimes:html content)] - ;< exists=? bind:m (peek-exists:io /check road) - ?: exists - :: Existing file: %over converts mime to file's mark via warm tube - ;< ~ bind:m (over:io /write road mime+!>(src-mime)) - (pure:m [%text (crip "Wrote {(trip file-path)}/{(trip file-name)}")]) - :: New file: pass dest-mark so runtime converts mime before storing. - :: If no mark specified, stores as mime. - ;< ~ bind:m (make:io /write road |+[%.n mime+!>(src-mime) dest-mark]) - =/ mark-msg=tape ?~(dest-mark "mime" (trip u.dest-mark)) - (pure:m [%text (crip "Created {(trip file-path)}/{(trip file-name)} [{mark-msg}]")]) --- diff --git a/desk/lib/nex/server.hoon b/desk/lib/nex/server.hoon deleted file mode 100644 index 2b8d77d..0000000 --- a/desk/lib/nex/server.hoon +++ /dev/null @@ -1,147 +0,0 @@ -:: lib/nex/server: shared types + helpers for the server nexus protocol -:: -:: Used by nexuses that communicate with the server nexus -:: (binding HTTP paths, sending responses, dispatching requests). -:: -/+ nexus, tarball, io=fiberio -|% -:: Consolidated poke type for the server nexus -:: -:: %bind: register a URL prefix → handler mapping. The target bend -:: is resolved relative to the sender's position to produce an -:: absolute rail stored in the bindings map. If target is ~, -:: the sender itself is the handler. -:: %unbind: remove a URL prefix binding. -:: %reset: kick all eyre connections and cancel to handlers. -:: %send: forward a response from a handler back through eyre. -:: -+$ server-action - $% [%bind =binding:eyre target=(unit bend:fiber:nexus)] - [%unbind =binding:eyre] - [%reset ~] - [%send eyre-id=@ta =eyre-update] - == -:: -+$ eyre-update - $% [%header =response-header:http] - [%data data=(unit octs)] - [%kick ~] - [%simple =simple-payload:http] - == -:: Server state (versioned for migration) -:: -:: bindings: URL prefix → absolute rail of the handler process. -:: Computed at bind time by resolving the sender's from + target bend -:: into an absolute position in the tree. -:: -:: connections: eyre-id → the binding that owns it. Used to -:: (1) authorize responses — the server checks that a %send-action -:: came from the process that owns the binding, preventing one nexus -:: from responding to another's connections — and (2) clean up on -:: unbind or cancel by knowing which connections to kick and which -:: handler to notify. -:: -+$ server-state - $: %0 - bindings=(map binding:eyre rail:tarball) - connections=(map @ta binding:eyre) - == -:: Absolute road to /server.server/main.server-state -:: -++ server-road `road:tarball`[%& %& /'server.server' %'main.server-state'] -:: Register an eyre binding with the server nexus. -:: Target defaults to the sender (the calling process). -:: -++ bind-http - |= =binding:eyre - =/ m (fiber:fiber:nexus ,~) - ^- form:m - (poke:io /bind server-road server-action+!>([%bind binding ~])) -:: Register an eyre binding targeting a specific process. -:: The target bend is relative to the calling process. -:: -++ bind-http-to - |= [=binding:eyre =bend:fiber:nexus] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - (poke:io /bind server-road server-action+!>([%bind binding `bend])) -:: HTTP response helpers, parameterized on dispatcher road. -:: Usage: =/ srv ~(. res:nex-server [%| 1 %& ~ %'main.sig']) -:: (send-simple:srv eyre-id payload) -:: -++ res - |_ main=road:tarball - ++ send - |= [eyre-id=@ta =eyre-update] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - (poke:io /send main server-action+!>([%send eyre-id eyre-update])) - :: - ++ send-simple - |= [eyre-id=@ta =simple-payload:http] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - (send eyre-id %simple simple-payload) - :: - ++ send-header - |= [eyre-id=@ta =response-header:http] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - (send eyre-id %header response-header) - :: - ++ send-data - |= [eyre-id=@ta data=(unit octs)] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - (send eyre-id %data data) - :: - ++ send-kick - |= eyre-id=@ta - =/ m (fiber:fiber:nexus ,~) - ^- form:m - (send eyre-id %kick ~) - -- -:: Standard HTTP dispatcher loop for nexuses with /requests/ sub-dir. -:: Spawns per-request processes, forwards responses, handles cancels. -:: -++ http-dispatch - |= label=@tas - =/ m (fiber:fiber:nexus ,~) - ^- form:m - |- - ;< [=from:fiber:nexus =cage] bind:m take-poke-from:io - ?+ p.cage $ - %handle-http-request - =/ [eyre-id=@ta src=@p req=inbound-request:eyre] - !<([eyre-id=@ta @p inbound-request:eyre] q.cage) - ~& > [label %dispatch eyre-id url.request.req] - ;< ~ bind:m (make:io /make [%| 0 %& /requests eyre-id] |+[%.n http-request+!>([src req]) ~]) - $ - %server-action - ;< ~ bind:m (poke:io /send server-road cage) - $ - %handle-http-cancel - =/ eyre-id=@ta !<(@ta q.cage) - ~& > [label %cancel eyre-id] - ;< ~ bind:m (cull:io /cancel [%| 0 %& /requests eyre-id]) - $ - == -:: Resolve a fiber bend to an absolute rail, given the resolver's -:: own position (here) and the bend to resolve. -:: -:: A bend is [steps-up=@ud =rail:tarball]. We go up steps-up -:: directory levels from here's parent directory, then append -:: the bend's target path and name. -:: -++ resolve-rail - |= [here=rail:tarball =bend:fiber:nexus] - ^- rail:tarball - =/ base=path path.here - =/ up=@ud p.bend - =/ resolved=path - |- - ?: =(0 up) base - ?~ base ~ - $(up (dec up), base (snip `path`base)) - [(weld resolved path.q.bend) name.q.bend] --- diff --git a/desk/lib/nexus.hoon b/desk/lib/nexus.hoon index 54ff84a..7d98451 100644 --- a/desk/lib/nexus.hoon +++ b/desk/lib/nexus.hoon @@ -1,6 +1,17 @@ /+ tarball |% +$ card card:agent:gall ++$ built + $% [%vase =vase] + [%tang =tang] + [%mime =mime] + == ++$ keys (map rail:tarball @uv) ++$ deps (map rail:tarball (set rail:tarball)) ++$ refs (axal (map @ta @uv)) ++$ lode [=keys =deps =refs] ++$ bins (map @uv [refs=@ud =built]) ++$ code (map fold:tarball lode) :: The ball (tarball) is WYSIWYG: fully materialized, no dedup. :: Every file is stored inline. To deduplicate, make references :: via path+cass rather than copying content. @@ -17,7 +28,6 @@ +$ prov [src=@p sap=path] :: external provenance +$ from (each rail:tarball prov) :: source: [%& rail] internal grub or [%| prov] external +$ give [=from =wire] :: return address (from is always a grub) -+$ scry [=mold =path] +$ take [here=rail:tarball take:fiber] :: localized input (here is always a grub) :: SANDBOXING :: @@ -43,26 +53,22 @@ == +$ sand (axal weir) :: weir at each directory in the tree +$ filt (unit ?) :: filter result (see above) -+$ jump ?(%sysc %make %poke %peek) :: dart category for filtering -:: -+$ bowl - $: now=@da - our=@p - eny=@uvJ - wex=boat:gall - sup=bitt:gall - here=rail:tarball - dap=dude:gall - byk=beak - == ++$ jump ?(%make %poke %peek) :: dart category for filtering +:: +:: pant: ancestry list from outermost dir to innermost, each with +:: its optional neck. here: grub's location in the tree. root=%.y +:: means the walk reached the tarball root; root=%.n means a weir +:: blocked visibility before reaching root (pant is truncated). ++$ pant (list [dir=@ta neck=(unit neck:tarball)]) ++$ here [=pant name=@ta root=?] :: +$ gain (axal (map @ta ?)) -+$ make (each [=sand =gain =ball:tarball] [gain=? =cage mark=(unit mark)]) ++$ make (each [=sand =gain =ball:tarball] [gain=? =sage:tarball blot=(unit blot:tarball)]) +$ kept (set bend:tarball) :: +$ view $% [%ball =sand =gain =born ball=ball:tarball] - [%file =sack gain=? =cage] + [%file =sack gain=? =sage:tarball] [%none ~] == +$ seen (each view tang) @@ -76,45 +82,87 @@ == +$ find lose +$ load - $% [%poke =cage] :: poke a grub + $% [%poke =sage:tarball] :: poke a grub [%make =make] :: create grub or directory - [%over =cage] :: overwrite grub content (runtime mark conversion) - [%diff =cage] :: replace same-mark grub content, notify process + [%over =sage:tarball] :: overwrite grub content (runtime mark conversion) [%cull ~] :: delete grub or directory [%sand weir=(unit weir)] :: set weir [%load ~] :: trigger on-load for a nexus (folds only) [%gain flag=?] :: set gain flag (recursive on directories) - [%peek mark=(unit mark) case=(unit case) clam=?] + [%peek blot=(unit blot:tarball) case=(unit case) clam=?] :: read a grub - :: mark: convert file cage to this mark - :: ver: if set, read historical version - [%keep mark=(unit mark)] :: subscribe to changes at dest (grub or ball per road) - :: mark: if set, convert file cage in news + :: blot: convert file sage to this blot + :: case: if set, read historical version + [%keep blot=(unit blot:tarball)] :: subscribe to changes at dest (grub or ball per road) + :: blot: if set, convert file sage in news [%drop ~] :: unsubscribe from dest [%lose =lose] :: drop hist entries, decrement silo refs [%seek =lobe:clay] :: find all [rail cass] pairs with this hash [%peep =find] + [%manu ~] :: docs for this path (road resolves nexus + query) + [%bang ~] :: query error state at dest + [%code ~] :: look up compiled artifacts at dest + [%font ~] :: find code responsible for dest node == :: manu types — documentation query :: ++$ mury [=rail:tarball =blot:tarball] :: file query: rail + blot +$ mana (each fold:tarball mury) :: directory or file query -+$ mury [=rail:tarball =mark] :: file query: rail + mark +:: :: +$ dart - $% [%sysc =card:agent:gall] :: regular card - [%node =wire road=road:tarball =load] - [%scry =wire scry=(unit scry)] - [%bowl =wire] + $% [%node =wire road=road:tarball =load] + [%here =wire] [%kept =wire] :: see your own outgoing subscriptions - [%manu =wire target=(each [=neck:tarball =mana] road:tarball)] + [%manu =wire =neck:tarball =mana] :: direct docs query to a known nexus == +:: Eyre action: poke payload for HTTP binding/response operations. +:: Nexuses poke %grubbery with %eyre-action to register bindings +:: and send HTTP responses. +:: ++$ eyre-action + $% [%bind =binding:eyre handler=rail:tarball] + [%unbind =binding:eyre] + [%send eyre-id=@ta =eyre-update] + == +:: ++$ eyre-update + $% [%header =response-header:http] + [%data data=(unit octs)] + [%kick ~] + [%simple =simple-payload:http] + == +:: Eyre state: binding registry + active connection tracking. +:: Stored as a grub at /sys/eyre/main.server-state. +:: ++$ server-state + $: %0 + bindings=(map binding:eyre rail:tarball) + conns=(map @ta binding:eyre) + == +:: Timer service state. +:: Stored as a grub at /sys/behn/main.timer-state. +:: ++$ timer-state + [%0 timers=(map [=rail:tarball =wire] @da)] +:: Iris HTTP client service state. +:: Stored as a grub at /sys/iris/main.iris-state. +:: ++$ iris-state + [%0 requests=(map wire [sender=rail:tarball url=@t])] +:: Clay desk sync service state. +:: Stored as a grub at /sys/clay/main.clay-state. +:: Desk mirrors live at /sys/clay/desks/[desk]/. +:: ++$ clay-state + [%0 desks=(set desk)] :: ++ fiber |% +$ proc - $: =process :: running fiber - next=(qeu take) :: queue of held inputs - skip=(qeu take) :: queue of skipped inputs + $: process=(each process tang) :: running fiber or crash error + next=(qeu take) :: queue of held inputs + skip=(qeu take) :: queue of skipped inputs == :: Relative source path for pokes :: @@ -130,7 +178,7 @@ +$ road (each rail:tarball bend) :: +$ intake - $% [%poke =from =cage] :: command for a running process (from is relative) + $% [%poke =from =sage:tarball] :: command for a running process (from is relative) [%peek =wire =seen] :: local read result [%kept =wire =kept] :: your outgoing subscriptions [%made =wire err=(unit tang)] :: response to make @@ -141,23 +189,18 @@ [%gain =wire err=(unit tang)] :: response to gain [%lost =wire err=(unit tang)] :: response to lose [%seek =wire res=(each (list [=rail:tarball =cass:clay]) tang)] :: response to seek - [%peep =wire res=(each (list [=cass:clay =cage]) tang)] :: response to peep + [%peep =wire res=(each (list [=cass:clay =sage:tarball]) tang)] :: response to peep [%manu =wire res=(each @t tang)] :: response to manu + [%bang =wire res=(each bangs (unit tang))] :: directory bangs or file error [%over =wire err=(unit tang)] :: response to over (content overwrite) - [%diff =wire err=(unit tang)] :: response to diff (same-mark replace) - [%writ p=?(%over %diff)] :: notify grub its file was externally modified - [%bond =wire now=(each view tang)] :: subscription ack with initial view + [%writ ~] :: notify grub its file was externally modified by %over + [%bond =wire now=seen] :: subscription ack with initial view [%fell =wire] :: subscription canceled (weir change, deletion, etc) [%news =wire =view] :: state notification [%veto =dart] :: notify that a dart was sandboxed - :: messages from gall and arvo - :: - [%scry =wire =vase] - [%bowl =wire =bowl] - [%arvo =wire sign=sign-arvo] - [%agent =wire =sign:agent:gall] - [%watch =path] - [%leave =path] + [%code =wire res=(each (axal (map @ta built)) built)] :: code subtree or single artifact + [%font =wire res=(unit bend:tarball)] :: bend to governing /code namespace + [%here =wire =here] == :: +$ input @@ -171,7 +214,6 @@ +$ prod $% [%make ~] :: making new file [%load ~] :: nexus was reloaded - [%bump ~] :: zuse got a kelvin bump [%rise =tang] :: failed while running == :: @@ -215,7 +257,8 @@ ^- form |= input ^- output - [~ state %wait ~] + ?~ in [~ state %wait ~] + [~ state %skip ~] :: ++ bind |* b=mold @@ -251,7 +294,7 @@ ++ take =| darts=(list dart) :: effects =| done=(list took) :: consumed takes for acking - |= [=bowl state=vase =proc] + |= [state=vase =proc] ^- [(list dart) (list took) vase _proc result] =^ =^take next.proc ~(get to next.proc) |- :: recursion point so take can be replaced @@ -260,7 +303,8 @@ :: should use hoss :: but double compute and double slogs sucks :: - (mule |.((process.proc state in.take))) + ?> ?=(%& -.process.proc) + (mule |.((p.process.proc state in.take))) ?: ?=(%| -.res) =/ =tang [leaf+"crash" p.res] :- darts :: no output darts on failure @@ -291,7 +335,7 @@ state state.output next.proc (~(gas to next.proc) ~(tap to skip.proc)) skip.proc ~ - process.proc self.next.output + process.proc &+self.next.output take [give.take ~] == :: @@ -341,11 +385,12 @@ -- -- :: -+$ pipe (map @ta proc:fiber) -+$ pool (axal pipe) ++$ pipe [bang=(unit tang) proc=(map @ta proc:fiber)] ++$ pool (axal pipe) ++$ bangs [bang=(unit tang) err=(map @ta (unit tang))] :: Internal subscriptions: process watches tree locations :: -+$ subscribers (map rail:tarball [=wire mark=(unit mark)]) ++$ subscribers (map rail:tarball [=wire blot=(unit blot:tarball)]) +$ subscriptions (set lane:tarball) :: fwd: "who is watching this lane?" → watcher + wire for routing :: rev: "what is this process watching?" → for cleanup on death @@ -361,12 +406,41 @@ :: life: incremented on grub creation (not updates; survives deletion) :: file: incremented on content change :: -+$ tote [weir=cass:clay fold=cass:clay] -+$ sack [proc=cass:clay life=cass:clay file=cass:clay hist=((mop cass:clay lobe:clay) cor)] +:: fold level version information +:: ++$ tote + $: weir=cass:clay + fold=cass:clay + :: hist=((mop cass:clay lobe:clay) cor) + == +:: grub level version information +:: ++$ sack + $: proc=cass:clay :: incremented on process spawn/restart + life=cass:clay :: incremented on grub creation; not updates + file=cass:clay :: incremented on content change + hist=((mop cass:clay lobe:clay) cor) + == +:: +$ born (axal [=tote bags=(map @ta sack)]) -+$ silo (map lobe:clay [refs=@ud =cage]) ++ cor |=([a=cass:clay b=cass:clay] (lth ud.a ud.b)) ++ on-hist ((on cass:clay lobe:clay) cor) +++ silo + =< silo + |% + +$ silo (map lobe:clay [refs=@ud =bask:tarball]) + :: speculative git-like content-addressed storage + :: + +$ tree + $: nek=(unit neck:tarball) + fil=(map @ta lobe:clay) + dir=(map @ta [=lobe:clay weir=(unit weir)]) + == + +$ ject + $% [%tree =tree] + [%blob =bask:tarball] + == + -- :: Resolve a hist case to a lobe from the hist mop :: %ud: exact match on revision number :: %da: latest entry with da <= target date @@ -490,7 +564,11 @@ ++ bump-file |= here=rail:tarball ^- born - =/ sok=sack (need (get here)) + =/ got=(unit sack) (get here) + ?~ got + ~| ["bump-file: missing rail" here] + !! + =/ sok=sack u.got =. born.old (put here [proc.sok life.sok (next-cass file.sok) hist.sok]) (bump-dir path.here) :: Bump weir cass of directory node and propagate fold cass up @@ -556,7 +634,7 @@ :: File in both: check if changed =/ old-content=content:tarball (~(got by old-files) name) =/ new-content=content:tarball (~(got by new-files) name) - ?. =(cage.old-content cage.new-content) + ?. =(sage.old-content sage.new-content) :: Changed: bump (bump-file [here name]) :: No change @@ -586,25 +664,26 @@ -- :: +si: Pure operations on silo (content-addressed object store) :: -:: Hash is computed from the page (mark + noun) for content identity, -:: but the full cage (mark + vase) is stored to avoid re-clamming. +:: Stores pages (mark + noun) rather than cages (mark + vase). +:: Callers must clam on read to reconstruct the vase. +:: This avoids stale types when marks evolve. :: ++ si |_ =silo ++ hash - |= =cage + |= =bask:tarball ^- lobe:clay - `@uvI`(sham [p q.q]:cage) - :: Insert cage, increment refcount if exists. Returns lobe and new silo. + `@uvI`(sham bask) + :: Insert bask, increment refcount if exists. Returns lobe and new silo. :: ++ put - |= =cage + |= =bask:tarball ^- [lobe:clay ^silo] - =/ =lobe:clay (hash cage) + =/ =lobe:clay (hash bask) =/ got (~(get by silo) lobe) ?~ got - [lobe (~(put by silo) lobe [1 cage])] - [lobe (~(put by silo) lobe [+(refs.u.got) cage])] + [lobe (~(put by silo) lobe [1 bask])] + [lobe (~(put by silo) lobe [+(refs.u.got) bask])] :: Decrement refcount, delete if zero. :: ++ drop @@ -614,15 +693,15 @@ ?~ got silo ?: (lte refs.u.got 1) (~(del by silo) lobe) - (~(put by silo) lobe [refs=(dec refs.u.got) cage.u.got]) - :: Look up cage by lobe. + (~(put by silo) lobe [refs=(dec refs.u.got) bask.u.got]) + :: Look up bask by lobe. :: ++ get |= =lobe:clay - ^- (unit cage) + ^- (unit bask:tarball) =/ got (~(get by silo) lobe) ?~ got ~ - `cage.u.got + `bask.u.got :: Drop refs for all lobes in a hist. :: ++ drop-hist @@ -633,7 +712,7 @@ |- ?~ entries silo $(entries t.entries, silo (drop val.i.entries)) - :: Record a cage: insert into silo, update hist per gain flag. + :: Record a bask: insert into silo, update hist per gain flag. :: Returns [lobe new-silo new-hist]. :: :: gain=%.y: append to hist, keeping full history. @@ -643,9 +722,9 @@ :: gain only controls what happens live, not retroactively. :: ++ record - |= [=cage =cass:clay gain=? file=cass:clay hist=((mop cass:clay lobe:clay) cor)] + |= [=bask:tarball =cass:clay gain=? file=cass:clay hist=((mop cass:clay lobe:clay) cor)] ^- [lobe:clay ^silo ((mop cass:clay lobe:clay) cor)] - =/ [=lobe:clay new-silo=^silo] (put cage) + =/ [=lobe:clay new-silo=^silo] (put bask) ?: gain [lobe new-silo (put:on-hist hist cass lobe)] :: !gain: replace current live version only, preserve older history @@ -752,17 +831,78 @@ =. result (~(uni in result) (diff-born-at (snoc here i.all-kids) old-kid new-kid mode)) $(all-kids t.all-kids) -:: External action type for pokes -:: -+$ action - $: [=wire dest=lane:tarball] - $% [%make =make] - [%cull ~] - [%sand weir=(unit weir)] - [%load ~] - [%poke =page] - == - == +:: +changed-lanes: diff two balls, return set of changed lanes +:: +:: Compares content directly (not born metadata). +:: Returns lanes for all added, changed, and deleted files, +:: plus folds for directories that appeared or disappeared. +:: +++ changed-lanes + |= [old=ball:tarball new=ball:tarball] + ^- (set lane:tarball) + (changed-lanes-at / old new) +:: +++ changed-lanes-at + |= [here=fold:tarball old=ball:tarball new=ball:tarball] + ^- (set lane:tarball) + =| result=(set lane:tarball) + =/ old-files=(map @ta content:tarball) + ?~(fil.old ~ contents.u.fil.old) + =/ new-files=(map @ta content:tarball) + ?~(fil.new ~ contents.u.fil.new) + =/ all-names=(list @ta) + ~(tap in (~(uni in ~(key by old-files)) ~(key by new-files))) + =. result + |- ^- (set lane:tarball) + ?~ all-names result + =/ in-old (~(has by old-files) i.all-names) + =/ in-new (~(has by new-files) i.all-names) + =/ file-changed=? + ?: &(in-new !in-old) %.y :: added + ?: &(in-old !in-new) %.y :: deleted + ?& in-old in-new + !=(sage:(~(got by old-files) i.all-names) sage:(~(got by new-files) i.all-names)) + == :: changed + =? result file-changed + (~(put in result) &+[here i.all-names]) + $(all-names t.all-names) + :: dir appeared or disappeared + =/ old-exists=? |(?=(^ fil.old) !=(~ dir.old)) + =/ new-exists=? |(?=(^ fil.new) !=(~ dir.new)) + =? result !=(old-exists new-exists) + (~(put in result) |+here) + :: recurse into subdirs + =/ all-kids=(list @ta) + ~(tap in (~(uni in ~(key by dir.old)) ~(key by dir.new))) + |- ^- (set lane:tarball) + ?~ all-kids result + =/ kid-old=ball:tarball (fall (~(get by dir.old) i.all-kids) *ball:tarball) + =/ kid-new=ball:tarball (fall (~(get by dir.new) i.all-kids) *ball:tarball) + =. result + (~(uni in result) (changed-lanes-at (snoc here i.all-kids) kid-old kid-new)) + $(all-kids t.all-kids) +:: Cross-ship load/intake types +:: Mirrors internal dart load / fiber intake pattern. +:: +++ remote + |% + +$ load + $: [=wire dest=lane:tarball] + $% [%make =make] + [%cull ~] + [%sand weir=(unit weir)] + [%load ~] + [%poke =bask:tarball] + [%peek blot=(unit blot:tarball)] + == + == + +$ make (each [=sand =gain =ball:tarball] [gain=? =bask:tarball blot=(unit blot:tarball)]) + +$ intake + $: =wire + $% [%peek ~] :: TBD + == + == + -- +$ ack (unit tang) :: :: ++ deaf @@ -861,8 +1001,6 @@ |= [=jump =fold:tarball dest=lane:tarball weir=(unit weir)] ^- filt ?~ weir ~ :: no weir = no filter (permissive) - ?: ?=(%sysc jump) - [~ |] :: weirs always block syscalls :- ~ ?- jump %make (filter-roads fold dest ~(tap in make.u.weir)) @@ -901,7 +1039,7 @@ :: is a responsibility of the programmer. :: ++ on-file - |~ [rail:tarball mark] + |~ [rail:tarball blot:tarball] *spool:fiber :: define spool (initializer) for grub at rail :: manual page for a grub or directory. returns documentation text. :: diff --git a/desk/lib/pytz/africa-abidjan.hoon b/desk/lib/pytz/africa-abidjan.hoon deleted file mode 100644 index b1c0f1d..0000000 --- a/desk/lib/pytz/africa-abidjan.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T00:16:08,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-accra.hoon b/desk/lib/pytz/africa-accra.hoon deleted file mode 100644 index 8e9f4b9..0000000 --- a/desk/lib/pytz/africa-accra.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1915-11-02T00:00:52,+00:00,GMT -1919-11-24T00:00:00,+00:20,+0020 -1920-01-01T01:40:00,+00:00,GMT -1920-09-01T02:00:00,+00:20,+0020 -1921-01-01T01:40:00,+00:00,GMT -1921-09-01T02:00:00,+00:20,+0020 -1922-01-01T01:40:00,+00:00,GMT -1922-09-01T02:00:00,+00:20,+0020 -1923-01-01T01:40:00,+00:00,GMT -1923-09-01T02:00:00,+00:20,+0020 -1924-01-01T01:40:00,+00:00,GMT -1924-09-01T02:00:00,+00:20,+0020 -1925-01-01T01:40:00,+00:00,GMT -1925-09-01T02:00:00,+00:20,+0020 -1926-01-01T01:40:00,+00:00,GMT -1926-09-01T02:00:00,+00:20,+0020 -1927-01-01T01:40:00,+00:00,GMT -1927-09-01T02:00:00,+00:20,+0020 -1928-01-01T01:40:00,+00:00,GMT -1928-09-01T02:00:00,+00:20,+0020 -1929-01-01T01:40:00,+00:00,GMT -1929-09-01T02:00:00,+00:20,+0020 -1930-01-01T01:40:00,+00:00,GMT -1930-09-01T02:00:00,+00:20,+0020 -1931-01-01T01:40:00,+00:00,GMT -1931-09-01T02:00:00,+00:20,+0020 -1932-01-01T01:40:00,+00:00,GMT -1932-09-01T02:00:00,+00:20,+0020 -1933-01-01T01:40:00,+00:00,GMT -1933-09-01T02:00:00,+00:20,+0020 -1934-01-01T01:40:00,+00:00,GMT -1934-09-01T02:00:00,+00:20,+0020 -1935-01-01T01:40:00,+00:00,GMT -1935-09-01T02:00:00,+00:20,+0020 -1936-01-01T01:40:00,+00:00,GMT -1936-09-01T02:00:00,+00:20,+0020 -1937-01-01T01:40:00,+00:00,GMT -1937-09-01T02:00:00,+00:20,+0020 -1938-01-01T01:40:00,+00:00,GMT -1938-09-01T02:00:00,+00:20,+0020 -1939-01-01T01:40:00,+00:00,GMT -1939-09-01T02:00:00,+00:20,+0020 -1940-01-01T01:40:00,+00:00,GMT -1940-05-01T02:00:00,+00:20,+0020 -1941-01-01T01:40:00,+00:00,GMT -1941-05-01T02:00:00,+00:20,+0020 -1942-01-01T01:40:00,+00:00,GMT -1942-02-08T00:00:00,+00:30,+0030 -1946-01-05T23:30:00,+00:00,GMT -1950-09-01T02:00:00,+00:30,+0030 -1951-01-01T01:30:00,+00:00,GMT -1951-09-01T02:00:00,+00:30,+0030 -1952-01-01T01:30:00,+00:00,GMT -1952-09-01T02:00:00,+00:30,+0030 -1953-01-01T01:30:00,+00:00,GMT -1953-09-01T02:00:00,+00:30,+0030 -1954-01-01T01:30:00,+00:00,GMT -1954-09-01T02:00:00,+00:30,+0030 -1955-01-01T01:30:00,+00:00,GMT -1955-09-01T02:00:00,+00:30,+0030 -1956-01-01T01:30:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-addis-ababa.hoon b/desk/lib/pytz/africa-addis-ababa.hoon deleted file mode 100644 index 55465ce..0000000 --- a/desk/lib/pytz/africa-addis-ababa.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:35,LMT -1901-12-13T20:45:52,+02:35,ADMT -1936-05-04T21:24:40,+03:00,EAT -''' diff --git a/desk/lib/pytz/africa-algiers.hoon b/desk/lib/pytz/africa-algiers.hoon deleted file mode 100644 index 198d331..0000000 --- a/desk/lib/pytz/africa-algiers.hoon +++ /dev/null @@ -1,39 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:12,LMT -1901-12-13T20:45:52,+00:09,PMT -1911-03-10T23:50:39,+00:00,WET -1916-06-14T23:00:00,+01:00,WEST -1916-10-01T23:00:00,+00:00,WET -1917-03-24T23:00:00,+01:00,WEST -1917-10-07T23:00:00,+00:00,WET -1918-03-09T23:00:00,+01:00,WEST -1918-10-06T23:00:00,+00:00,WET -1919-03-01T23:00:00,+01:00,WEST -1919-10-05T23:00:00,+00:00,WET -1920-02-14T23:00:00,+01:00,WEST -1920-10-23T23:00:00,+00:00,WET -1921-03-14T23:00:00,+01:00,WEST -1921-06-21T23:00:00,+00:00,WET -1939-09-11T23:00:00,+01:00,WEST -1939-11-19T00:00:00,+00:00,WET -1940-02-25T02:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-08T00:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-15T23:00:00,+01:00,CET -1946-10-06T23:00:00,+00:00,WET -1956-01-29T00:00:00,+01:00,CET -1963-04-13T23:00:00,+00:00,WET -1971-04-25T23:00:00,+01:00,WEST -1971-09-26T23:00:00,+00:00,WET -1977-05-06T00:00:00,+01:00,WEST -1977-10-20T23:00:00,+01:00,CET -1978-03-24T00:00:00,+02:00,CEST -1978-09-22T01:00:00,+01:00,CET -1979-10-25T23:00:00,+00:00,WET -1980-04-25T00:00:00,+01:00,WEST -1980-10-31T01:00:00,+00:00,WET -1981-05-01T00:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/africa-asmara.hoon b/desk/lib/pytz/africa-asmara.hoon deleted file mode 100644 index 0fc64a7..0000000 --- a/desk/lib/pytz/africa-asmara.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:36,LMT -1901-12-13T20:45:52,+02:35,ADMT -1936-05-04T21:24:40,+03:00,EAT -''' diff --git a/desk/lib/pytz/africa-bamako.hoon b/desk/lib/pytz/africa-bamako.hoon deleted file mode 100644 index e5d0623..0000000 --- a/desk/lib/pytz/africa-bamako.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T00:32:00,+00:00,GMT -1934-02-26T00:00:00,-01:00,-01 -1960-06-20T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-bangui.hoon b/desk/lib/pytz/africa-bangui.hoon deleted file mode 100644 index 190d007..0000000 --- a/desk/lib/pytz/africa-bangui.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:14,LMT -1911-12-31T22:45:40,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-banjul.hoon b/desk/lib/pytz/africa-banjul.hoon deleted file mode 100644 index 9e35d5b..0000000 --- a/desk/lib/pytz/africa-banjul.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T01:06:36,-02:53,BMT -1933-04-01T01:06:36,-01:00,-01 -1942-02-01T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-bissau.hoon b/desk/lib/pytz/africa-bissau.hoon deleted file mode 100644 index e02910f..0000000 --- a/desk/lib/pytz/africa-bissau.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T01:00:00,-01:00,-01 -1975-01-01T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-blantyre.hoon b/desk/lib/pytz/africa-blantyre.hoon deleted file mode 100644 index 5934f0c..0000000 --- a/desk/lib/pytz/africa-blantyre.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:20,LMT -1911-07-23T21:40:00,+02:21,ZMT -1914-06-29T21:38:50,+02:21,ZMT -1925-06-30T21:39:00,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-brazzaville.hoon b/desk/lib/pytz/africa-brazzaville.hoon deleted file mode 100644 index 2d542eb..0000000 --- a/desk/lib/pytz/africa-brazzaville.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:01,LMT -1911-12-31T22:58:52,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-bujumbura.hoon b/desk/lib/pytz/africa-bujumbura.hoon deleted file mode 100644 index b726aaa..0000000 --- a/desk/lib/pytz/africa-bujumbura.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:57,LMT -1901-12-13T20:45:52,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-cairo.hoon b/desk/lib/pytz/africa-cairo.hoon deleted file mode 100644 index b5b0a06..0000000 --- a/desk/lib/pytz/africa-cairo.hoon +++ /dev/null @@ -1,162 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:05,LMT -1901-12-13T20:45:52,+02:00,EET -1940-07-14T22:00:00,+03:00,EEST -1940-09-30T21:00:00,+02:00,EET -1941-04-14T22:00:00,+03:00,EEST -1941-09-15T21:00:00,+02:00,EET -1942-03-31T22:00:00,+03:00,EEST -1942-10-26T21:00:00,+02:00,EET -1943-03-31T22:00:00,+03:00,EEST -1943-10-31T21:00:00,+02:00,EET -1944-03-31T22:00:00,+03:00,EEST -1944-10-31T21:00:00,+02:00,EET -1945-04-15T22:00:00,+03:00,EEST -1945-10-31T21:00:00,+02:00,EET -1957-05-09T22:00:00,+03:00,EEST -1957-09-30T21:00:00,+02:00,EET -1958-04-30T22:00:00,+03:00,EEST -1958-09-30T21:00:00,+02:00,EET -1959-04-30T23:00:00,+03:00,EEST -1959-09-30T00:00:00,+02:00,EET -1960-04-30T23:00:00,+03:00,EEST -1960-09-30T00:00:00,+02:00,EET -1961-04-30T23:00:00,+03:00,EEST -1961-09-30T00:00:00,+02:00,EET -1962-04-30T23:00:00,+03:00,EEST -1962-09-30T00:00:00,+02:00,EET -1963-04-30T23:00:00,+03:00,EEST -1963-09-30T00:00:00,+02:00,EET -1964-04-30T23:00:00,+03:00,EEST -1964-09-30T00:00:00,+02:00,EET -1965-04-30T23:00:00,+03:00,EEST -1965-09-30T00:00:00,+02:00,EET -1966-04-30T23:00:00,+03:00,EEST -1966-10-01T00:00:00,+02:00,EET -1967-04-30T23:00:00,+03:00,EEST -1967-10-01T00:00:00,+02:00,EET -1968-04-30T23:00:00,+03:00,EEST -1968-10-01T00:00:00,+02:00,EET -1969-04-30T23:00:00,+03:00,EEST -1969-10-01T00:00:00,+02:00,EET -1970-04-30T23:00:00,+03:00,EEST -1970-10-01T00:00:00,+02:00,EET -1971-04-30T23:00:00,+03:00,EEST -1971-10-01T00:00:00,+02:00,EET -1972-04-30T23:00:00,+03:00,EEST -1972-10-01T00:00:00,+02:00,EET -1973-04-30T23:00:00,+03:00,EEST -1973-10-01T00:00:00,+02:00,EET -1974-04-30T23:00:00,+03:00,EEST -1974-10-01T00:00:00,+02:00,EET -1975-04-30T23:00:00,+03:00,EEST -1975-10-01T00:00:00,+02:00,EET -1976-04-30T23:00:00,+03:00,EEST -1976-10-01T00:00:00,+02:00,EET -1977-04-30T23:00:00,+03:00,EEST -1977-10-01T00:00:00,+02:00,EET -1978-04-30T23:00:00,+03:00,EEST -1978-10-01T00:00:00,+02:00,EET -1979-04-30T23:00:00,+03:00,EEST -1979-10-01T00:00:00,+02:00,EET -1980-04-30T23:00:00,+03:00,EEST -1980-10-01T00:00:00,+02:00,EET -1981-04-30T23:00:00,+03:00,EEST -1981-10-01T00:00:00,+02:00,EET -1982-07-24T23:00:00,+03:00,EEST -1982-10-01T00:00:00,+02:00,EET -1983-07-11T23:00:00,+03:00,EEST -1983-10-01T00:00:00,+02:00,EET -1984-04-30T23:00:00,+03:00,EEST -1984-10-01T00:00:00,+02:00,EET -1985-04-30T23:00:00,+03:00,EEST -1985-10-01T00:00:00,+02:00,EET -1986-04-30T23:00:00,+03:00,EEST -1986-10-01T00:00:00,+02:00,EET -1987-04-30T23:00:00,+03:00,EEST -1987-10-01T00:00:00,+02:00,EET -1988-04-30T23:00:00,+03:00,EEST -1988-10-01T00:00:00,+02:00,EET -1989-05-05T23:00:00,+03:00,EEST -1989-10-01T00:00:00,+02:00,EET -1990-04-30T23:00:00,+03:00,EEST -1990-10-01T00:00:00,+02:00,EET -1991-04-30T23:00:00,+03:00,EEST -1991-10-01T00:00:00,+02:00,EET -1992-04-30T23:00:00,+03:00,EEST -1992-10-01T00:00:00,+02:00,EET -1993-04-30T23:00:00,+03:00,EEST -1993-10-01T00:00:00,+02:00,EET -1994-04-30T23:00:00,+03:00,EEST -1994-10-01T00:00:00,+02:00,EET -1995-04-27T22:00:00,+03:00,EEST -1995-09-28T21:00:00,+02:00,EET -1996-04-25T22:00:00,+03:00,EEST -1996-09-26T21:00:00,+02:00,EET -1997-04-24T22:00:00,+03:00,EEST -1997-09-25T21:00:00,+02:00,EET -1998-04-23T22:00:00,+03:00,EEST -1998-09-24T21:00:00,+02:00,EET -1999-04-29T22:00:00,+03:00,EEST -1999-09-30T21:00:00,+02:00,EET -2000-04-27T22:00:00,+03:00,EEST -2000-09-28T21:00:00,+02:00,EET -2001-04-26T22:00:00,+03:00,EEST -2001-09-27T21:00:00,+02:00,EET -2002-04-25T22:00:00,+03:00,EEST -2002-09-26T21:00:00,+02:00,EET -2003-04-24T22:00:00,+03:00,EEST -2003-09-25T21:00:00,+02:00,EET -2004-04-29T22:00:00,+03:00,EEST -2004-09-30T21:00:00,+02:00,EET -2005-04-28T22:00:00,+03:00,EEST -2005-09-29T21:00:00,+02:00,EET -2006-04-27T22:00:00,+03:00,EEST -2006-09-21T21:00:00,+02:00,EET -2007-04-26T22:00:00,+03:00,EEST -2007-09-06T21:00:00,+02:00,EET -2008-04-24T22:00:00,+03:00,EEST -2008-08-28T21:00:00,+02:00,EET -2009-04-23T22:00:00,+03:00,EEST -2009-08-20T21:00:00,+02:00,EET -2010-04-29T22:00:00,+03:00,EEST -2010-08-10T21:00:00,+02:00,EET -2010-09-09T22:00:00,+03:00,EEST -2010-09-30T21:00:00,+02:00,EET -2014-05-15T22:00:00,+03:00,EEST -2014-06-26T21:00:00,+02:00,EET -2014-07-31T22:00:00,+03:00,EEST -2014-09-25T21:00:00,+02:00,EET -2023-04-27T22:00:00,+03:00,EEST -2023-10-26T21:00:00,+02:00,EET -2024-04-25T22:00:00,+03:00,EEST -2024-10-31T21:00:00,+02:00,EET -2025-04-24T22:00:00,+03:00,EEST -2025-10-30T21:00:00,+02:00,EET -2026-04-23T22:00:00,+03:00,EEST -2026-10-29T21:00:00,+02:00,EET -2027-04-29T22:00:00,+03:00,EEST -2027-10-28T21:00:00,+02:00,EET -2028-04-27T22:00:00,+03:00,EEST -2028-10-26T21:00:00,+02:00,EET -2029-04-26T22:00:00,+03:00,EEST -2029-10-25T21:00:00,+02:00,EET -2030-04-25T22:00:00,+03:00,EEST -2030-10-31T21:00:00,+02:00,EET -2031-04-24T22:00:00,+03:00,EEST -2031-10-30T21:00:00,+02:00,EET -2032-04-29T22:00:00,+03:00,EEST -2032-10-28T21:00:00,+02:00,EET -2033-04-28T22:00:00,+03:00,EEST -2033-10-27T21:00:00,+02:00,EET -2034-04-27T22:00:00,+03:00,EEST -2034-10-26T21:00:00,+02:00,EET -2035-04-26T22:00:00,+03:00,EEST -2035-10-25T21:00:00,+02:00,EET -2036-04-24T22:00:00,+03:00,EEST -2036-10-30T21:00:00,+02:00,EET -2037-04-23T22:00:00,+03:00,EEST -2037-10-29T21:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/africa-casablanca.hoon b/desk/lib/pytz/africa-casablanca.hoon deleted file mode 100644 index 9e556bd..0000000 --- a/desk/lib/pytz/africa-casablanca.hoon +++ /dev/null @@ -1,99 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1913-10-26T00:30:20,+00:00,+00 -1939-09-12T00:00:00,+01:00,+01 -1939-11-18T23:00:00,+00:00,+00 -1940-02-25T00:00:00,+01:00,+01 -1945-11-17T23:00:00,+00:00,+00 -1950-06-11T00:00:00,+01:00,+01 -1950-10-28T23:00:00,+00:00,+00 -1967-06-03T12:00:00,+01:00,+01 -1967-09-30T23:00:00,+00:00,+00 -1974-06-24T00:00:00,+01:00,+01 -1974-08-31T23:00:00,+00:00,+00 -1976-05-01T00:00:00,+01:00,+01 -1976-07-31T23:00:00,+00:00,+00 -1977-05-01T00:00:00,+01:00,+01 -1977-09-27T23:00:00,+00:00,+00 -1978-06-01T00:00:00,+01:00,+01 -1978-08-03T23:00:00,+00:00,+00 -1984-03-16T00:00:00,+01:00,+01 -1985-12-31T23:00:00,+00:00,+00 -2008-06-01T00:00:00,+01:00,+01 -2008-08-31T23:00:00,+00:00,+00 -2009-06-01T00:00:00,+01:00,+01 -2009-08-20T23:00:00,+00:00,+00 -2010-05-02T00:00:00,+01:00,+01 -2010-08-07T23:00:00,+00:00,+00 -2011-04-03T00:00:00,+01:00,+01 -2011-07-30T23:00:00,+00:00,+00 -2012-04-29T02:00:00,+01:00,+01 -2012-07-20T02:00:00,+00:00,+00 -2012-08-20T02:00:00,+01:00,+01 -2012-09-30T02:00:00,+00:00,+00 -2013-04-28T02:00:00,+01:00,+01 -2013-07-07T02:00:00,+00:00,+00 -2013-08-10T02:00:00,+01:00,+01 -2013-10-27T02:00:00,+00:00,+00 -2014-03-30T02:00:00,+01:00,+01 -2014-06-28T02:00:00,+00:00,+00 -2014-08-02T02:00:00,+01:00,+01 -2014-10-26T02:00:00,+00:00,+00 -2015-03-29T02:00:00,+01:00,+01 -2015-06-14T02:00:00,+00:00,+00 -2015-07-19T02:00:00,+01:00,+01 -2015-10-25T02:00:00,+00:00,+00 -2016-03-27T02:00:00,+01:00,+01 -2016-06-05T02:00:00,+00:00,+00 -2016-07-10T02:00:00,+01:00,+01 -2016-10-30T02:00:00,+00:00,+00 -2017-03-26T02:00:00,+01:00,+01 -2017-05-21T02:00:00,+00:00,+00 -2017-07-02T02:00:00,+01:00,+01 -2017-10-29T02:00:00,+00:00,+00 -2018-03-25T02:00:00,+01:00,+01 -2018-05-13T02:00:00,+00:00,+00 -2018-06-17T02:00:00,+01:00,+01 -2018-10-28T02:00:00,+01:00,+01 -2019-05-05T02:00:00,+00:00,+00 -2019-06-09T02:00:00,+01:00,+01 -2020-04-19T02:00:00,+00:00,+00 -2020-05-31T02:00:00,+01:00,+01 -2021-04-11T02:00:00,+00:00,+00 -2021-05-16T02:00:00,+01:00,+01 -2022-03-27T02:00:00,+00:00,+00 -2022-05-08T02:00:00,+01:00,+01 -2023-03-19T02:00:00,+00:00,+00 -2023-04-23T02:00:00,+01:00,+01 -2024-03-10T02:00:00,+00:00,+00 -2024-04-14T02:00:00,+01:00,+01 -2025-02-23T02:00:00,+00:00,+00 -2025-04-06T02:00:00,+01:00,+01 -2026-02-15T02:00:00,+00:00,+00 -2026-03-22T02:00:00,+01:00,+01 -2027-02-07T02:00:00,+00:00,+00 -2027-03-14T02:00:00,+01:00,+01 -2028-01-23T02:00:00,+00:00,+00 -2028-03-05T02:00:00,+01:00,+01 -2029-01-14T02:00:00,+00:00,+00 -2029-02-18T02:00:00,+01:00,+01 -2029-12-30T02:00:00,+00:00,+00 -2030-02-10T02:00:00,+01:00,+01 -2030-12-22T02:00:00,+00:00,+00 -2031-01-26T02:00:00,+01:00,+01 -2031-12-14T02:00:00,+00:00,+00 -2032-01-18T02:00:00,+01:00,+01 -2032-11-28T02:00:00,+00:00,+00 -2033-01-09T02:00:00,+01:00,+01 -2033-11-20T02:00:00,+00:00,+00 -2033-12-25T02:00:00,+01:00,+01 -2034-11-05T02:00:00,+00:00,+00 -2034-12-17T02:00:00,+01:00,+01 -2035-10-28T02:00:00,+00:00,+00 -2035-12-09T02:00:00,+01:00,+01 -2036-10-19T02:00:00,+00:00,+00 -2036-11-23T02:00:00,+01:00,+01 -2037-10-04T02:00:00,+00:00,+00 -2037-11-15T02:00:00,+01:00,+01 -''' diff --git a/desk/lib/pytz/africa-ceuta.hoon b/desk/lib/pytz/africa-ceuta.hoon deleted file mode 100644 index 648f9dd..0000000 --- a/desk/lib/pytz/africa-ceuta.hoon +++ /dev/null @@ -1,130 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+00:00,WET -1918-05-06T23:00:00,+01:00,WEST -1918-10-07T22:00:00,+00:00,WET -1924-04-16T23:00:00,+01:00,WEST -1924-10-05T00:00:00,+00:00,WET -1926-04-17T23:00:00,+01:00,WEST -1926-10-03T00:00:00,+00:00,WET -1927-04-09T23:00:00,+01:00,WEST -1927-10-02T00:00:00,+00:00,WET -1928-04-15T00:00:00,+01:00,WEST -1928-10-07T00:00:00,+00:00,WET -1967-06-03T12:00:00,+01:00,WEST -1967-09-30T23:00:00,+00:00,WET -1974-06-24T00:00:00,+01:00,WEST -1974-08-31T23:00:00,+00:00,WET -1976-05-01T00:00:00,+01:00,WEST -1976-07-31T23:00:00,+00:00,WET -1977-05-01T00:00:00,+01:00,WEST -1977-09-27T23:00:00,+00:00,WET -1978-06-01T00:00:00,+01:00,WEST -1978-08-03T23:00:00,+00:00,WET -1984-03-16T00:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/africa-conakry.hoon b/desk/lib/pytz/africa-conakry.hoon deleted file mode 100644 index 57dfd7a..0000000 --- a/desk/lib/pytz/africa-conakry.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T00:54:52,+00:00,GMT -1934-02-26T00:00:00,-01:00,-01 -1960-01-01T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-dakar.hoon b/desk/lib/pytz/africa-dakar.hoon deleted file mode 100644 index 7f41dae..0000000 --- a/desk/lib/pytz/africa-dakar.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T01:09:44,-01:00,-01 -1941-06-01T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-dar-es-salaam.hoon b/desk/lib/pytz/africa-dar-es-salaam.hoon deleted file mode 100644 index f25b85e..0000000 --- a/desk/lib/pytz/africa-dar-es-salaam.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:37,LMT -1930-12-31T21:22:52,+03:00,EAT -1947-12-31T21:00:00,+02:45,+0245 -1960-12-31T21:15:00,+03:00,EAT -''' diff --git a/desk/lib/pytz/africa-djibouti.hoon b/desk/lib/pytz/africa-djibouti.hoon deleted file mode 100644 index 11d2d79..0000000 --- a/desk/lib/pytz/africa-djibouti.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:53,LMT -1911-06-30T21:07:24,+03:00,EAT -''' diff --git a/desk/lib/pytz/africa-douala.hoon b/desk/lib/pytz/africa-douala.hoon deleted file mode 100644 index 6c9ee63..0000000 --- a/desk/lib/pytz/africa-douala.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:39,LMT -1911-12-31T23:21:12,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-el-aaiun.hoon b/desk/lib/pytz/africa-el-aaiun.hoon deleted file mode 100644 index ae43543..0000000 --- a/desk/lib/pytz/africa-el-aaiun.hoon +++ /dev/null @@ -1,88 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1934-01-01T00:52:48,-01:00,-01 -1976-04-14T01:00:00,+00:00,+00 -1976-05-01T00:00:00,+01:00,+01 -1976-07-31T23:00:00,+00:00,+00 -1977-05-01T00:00:00,+01:00,+01 -1977-09-27T23:00:00,+00:00,+00 -1978-06-01T00:00:00,+01:00,+01 -1978-08-03T23:00:00,+00:00,+00 -2008-06-01T00:00:00,+01:00,+01 -2008-08-31T23:00:00,+00:00,+00 -2009-06-01T00:00:00,+01:00,+01 -2009-08-20T23:00:00,+00:00,+00 -2010-05-02T00:00:00,+01:00,+01 -2010-08-07T23:00:00,+00:00,+00 -2011-04-03T00:00:00,+01:00,+01 -2011-07-30T23:00:00,+00:00,+00 -2012-04-29T02:00:00,+01:00,+01 -2012-07-20T02:00:00,+00:00,+00 -2012-08-20T02:00:00,+01:00,+01 -2012-09-30T02:00:00,+00:00,+00 -2013-04-28T02:00:00,+01:00,+01 -2013-07-07T02:00:00,+00:00,+00 -2013-08-10T02:00:00,+01:00,+01 -2013-10-27T02:00:00,+00:00,+00 -2014-03-30T02:00:00,+01:00,+01 -2014-06-28T02:00:00,+00:00,+00 -2014-08-02T02:00:00,+01:00,+01 -2014-10-26T02:00:00,+00:00,+00 -2015-03-29T02:00:00,+01:00,+01 -2015-06-14T02:00:00,+00:00,+00 -2015-07-19T02:00:00,+01:00,+01 -2015-10-25T02:00:00,+00:00,+00 -2016-03-27T02:00:00,+01:00,+01 -2016-06-05T02:00:00,+00:00,+00 -2016-07-10T02:00:00,+01:00,+01 -2016-10-30T02:00:00,+00:00,+00 -2017-03-26T02:00:00,+01:00,+01 -2017-05-21T02:00:00,+00:00,+00 -2017-07-02T02:00:00,+01:00,+01 -2017-10-29T02:00:00,+00:00,+00 -2018-03-25T02:00:00,+01:00,+01 -2018-05-13T02:00:00,+00:00,+00 -2018-06-17T02:00:00,+01:00,+01 -2018-10-28T02:00:00,+01:00,+01 -2019-05-05T02:00:00,+00:00,+00 -2019-06-09T02:00:00,+01:00,+01 -2020-04-19T02:00:00,+00:00,+00 -2020-05-31T02:00:00,+01:00,+01 -2021-04-11T02:00:00,+00:00,+00 -2021-05-16T02:00:00,+01:00,+01 -2022-03-27T02:00:00,+00:00,+00 -2022-05-08T02:00:00,+01:00,+01 -2023-03-19T02:00:00,+00:00,+00 -2023-04-23T02:00:00,+01:00,+01 -2024-03-10T02:00:00,+00:00,+00 -2024-04-14T02:00:00,+01:00,+01 -2025-02-23T02:00:00,+00:00,+00 -2025-04-06T02:00:00,+01:00,+01 -2026-02-15T02:00:00,+00:00,+00 -2026-03-22T02:00:00,+01:00,+01 -2027-02-07T02:00:00,+00:00,+00 -2027-03-14T02:00:00,+01:00,+01 -2028-01-23T02:00:00,+00:00,+00 -2028-03-05T02:00:00,+01:00,+01 -2029-01-14T02:00:00,+00:00,+00 -2029-02-18T02:00:00,+01:00,+01 -2029-12-30T02:00:00,+00:00,+00 -2030-02-10T02:00:00,+01:00,+01 -2030-12-22T02:00:00,+00:00,+00 -2031-01-26T02:00:00,+01:00,+01 -2031-12-14T02:00:00,+00:00,+00 -2032-01-18T02:00:00,+01:00,+01 -2032-11-28T02:00:00,+00:00,+00 -2033-01-09T02:00:00,+01:00,+01 -2033-11-20T02:00:00,+00:00,+00 -2033-12-25T02:00:00,+01:00,+01 -2034-11-05T02:00:00,+00:00,+00 -2034-12-17T02:00:00,+01:00,+01 -2035-10-28T02:00:00,+00:00,+00 -2035-12-09T02:00:00,+01:00,+01 -2036-10-19T02:00:00,+00:00,+00 -2036-11-23T02:00:00,+01:00,+01 -2037-10-04T02:00:00,+00:00,+00 -2037-11-15T02:00:00,+01:00,+01 -''' diff --git a/desk/lib/pytz/africa-freetown.hoon b/desk/lib/pytz/africa-freetown.hoon deleted file mode 100644 index 94c18cc..0000000 --- a/desk/lib/pytz/africa-freetown.hoon +++ /dev/null @@ -1,23 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-01:07,FMT -1913-07-01T00:53:00,-01:00,-01 -1932-12-01T01:00:00,-01:20,-0040 -1933-04-01T00:40:00,-01:00,-01 -1933-09-01T01:00:00,-01:20,-0040 -1934-04-01T00:40:00,-01:00,-01 -1934-09-01T01:00:00,-01:20,-0040 -1935-04-01T00:40:00,-01:00,-01 -1935-09-01T01:00:00,-01:20,-0040 -1936-04-01T00:40:00,-01:00,-01 -1936-09-01T01:00:00,-01:20,-0040 -1937-04-01T00:40:00,-01:00,-01 -1937-09-01T01:00:00,-01:20,-0040 -1938-04-01T00:40:00,-01:00,-01 -1938-09-01T01:00:00,-01:20,-0040 -1939-06-01T00:40:00,-01:00,-01 -1939-09-01T01:00:00,-01:20,-0040 -1939-09-05T00:40:00,-01:00,-01 -1941-12-07T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-gaborone.hoon b/desk/lib/pytz/africa-gaborone.hoon deleted file mode 100644 index 2e0fa66..0000000 --- a/desk/lib/pytz/africa-gaborone.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:44,LMT -1901-12-13T20:45:52,+01:30,SAST -1903-02-28T22:30:00,+02:00,CAT -1943-09-19T00:00:00,+03:00,CAST -1944-03-18T23:00:00,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-harare.hoon b/desk/lib/pytz/africa-harare.hoon deleted file mode 100644 index a62cfe0..0000000 --- a/desk/lib/pytz/africa-harare.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:04,LMT -1903-02-28T21:55:48,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-johannesburg.hoon b/desk/lib/pytz/africa-johannesburg.hoon deleted file mode 100644 index a2b884c..0000000 --- a/desk/lib/pytz/africa-johannesburg.hoon +++ /dev/null @@ -1,11 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:52,LMT -1901-12-13T20:45:52,+01:30,SAST -1903-02-28T22:30:00,+02:00,SAST -1942-09-20T00:00:00,+03:00,SAST -1943-03-20T23:00:00,+02:00,SAST -1943-09-19T00:00:00,+03:00,SAST -1944-03-18T23:00:00,+02:00,SAST -''' diff --git a/desk/lib/pytz/africa-juba.hoon b/desk/lib/pytz/africa-juba.hoon deleted file mode 100644 index 1523aad..0000000 --- a/desk/lib/pytz/africa-juba.hoon +++ /dev/null @@ -1,40 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:06,LMT -1930-12-31T21:53:32,+02:00,CAT -1970-04-30T22:00:00,+03:00,CAST -1970-10-14T21:00:00,+02:00,CAT -1971-04-29T22:00:00,+03:00,CAST -1971-10-14T21:00:00,+02:00,CAT -1972-04-29T22:00:00,+03:00,CAST -1972-10-14T21:00:00,+02:00,CAT -1973-04-28T22:00:00,+03:00,CAST -1973-10-14T21:00:00,+02:00,CAT -1974-04-27T22:00:00,+03:00,CAST -1974-10-14T21:00:00,+02:00,CAT -1975-04-26T22:00:00,+03:00,CAST -1975-10-14T21:00:00,+02:00,CAT -1976-04-24T22:00:00,+03:00,CAST -1976-10-14T21:00:00,+02:00,CAT -1977-04-23T22:00:00,+03:00,CAST -1977-10-14T21:00:00,+02:00,CAT -1978-04-29T22:00:00,+03:00,CAST -1978-10-14T21:00:00,+02:00,CAT -1979-04-28T22:00:00,+03:00,CAST -1979-10-14T21:00:00,+02:00,CAT -1980-04-26T22:00:00,+03:00,CAST -1980-10-14T21:00:00,+02:00,CAT -1981-04-25T22:00:00,+03:00,CAST -1981-10-14T21:00:00,+02:00,CAT -1982-04-24T22:00:00,+03:00,CAST -1982-10-14T21:00:00,+02:00,CAT -1983-04-23T22:00:00,+03:00,CAST -1983-10-14T21:00:00,+02:00,CAT -1984-04-28T22:00:00,+03:00,CAST -1984-10-14T21:00:00,+02:00,CAT -1985-04-27T22:00:00,+03:00,CAST -1985-10-14T21:00:00,+02:00,CAT -2000-01-15T10:00:00,+03:00,EAT -2021-01-31T21:00:00,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-kampala.hoon b/desk/lib/pytz/africa-kampala.hoon deleted file mode 100644 index 848ab00..0000000 --- a/desk/lib/pytz/africa-kampala.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:10,LMT -1928-06-30T21:50:20,+03:00,EAT -1929-12-31T21:00:00,+02:30,+0230 -1947-12-31T21:30:00,+02:45,+0245 -1956-12-31T21:15:00,+03:00,EAT -''' diff --git a/desk/lib/pytz/africa-khartoum.hoon b/desk/lib/pytz/africa-khartoum.hoon deleted file mode 100644 index ee64ba8..0000000 --- a/desk/lib/pytz/africa-khartoum.hoon +++ /dev/null @@ -1,40 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:10,LMT -1930-12-31T21:49:52,+02:00,CAT -1970-04-30T22:00:00,+03:00,CAST -1970-10-14T21:00:00,+02:00,CAT -1971-04-29T22:00:00,+03:00,CAST -1971-10-14T21:00:00,+02:00,CAT -1972-04-29T22:00:00,+03:00,CAST -1972-10-14T21:00:00,+02:00,CAT -1973-04-28T22:00:00,+03:00,CAST -1973-10-14T21:00:00,+02:00,CAT -1974-04-27T22:00:00,+03:00,CAST -1974-10-14T21:00:00,+02:00,CAT -1975-04-26T22:00:00,+03:00,CAST -1975-10-14T21:00:00,+02:00,CAT -1976-04-24T22:00:00,+03:00,CAST -1976-10-14T21:00:00,+02:00,CAT -1977-04-23T22:00:00,+03:00,CAST -1977-10-14T21:00:00,+02:00,CAT -1978-04-29T22:00:00,+03:00,CAST -1978-10-14T21:00:00,+02:00,CAT -1979-04-28T22:00:00,+03:00,CAST -1979-10-14T21:00:00,+02:00,CAT -1980-04-26T22:00:00,+03:00,CAST -1980-10-14T21:00:00,+02:00,CAT -1981-04-25T22:00:00,+03:00,CAST -1981-10-14T21:00:00,+02:00,CAT -1982-04-24T22:00:00,+03:00,CAST -1982-10-14T21:00:00,+02:00,CAT -1983-04-23T22:00:00,+03:00,CAST -1983-10-14T21:00:00,+02:00,CAT -1984-04-28T22:00:00,+03:00,CAST -1984-10-14T21:00:00,+02:00,CAT -1985-04-27T22:00:00,+03:00,CAST -1985-10-14T21:00:00,+02:00,CAT -2000-01-15T10:00:00,+03:00,EAT -2017-10-31T21:00:00,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-kigali.hoon b/desk/lib/pytz/africa-kigali.hoon deleted file mode 100644 index 679b912..0000000 --- a/desk/lib/pytz/africa-kigali.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:00,LMT -1935-05-31T21:59:44,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-kinshasa.hoon b/desk/lib/pytz/africa-kinshasa.hoon deleted file mode 100644 index 7e40969..0000000 --- a/desk/lib/pytz/africa-kinshasa.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:01,LMT -1901-12-13T20:45:52,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-lagos.hoon b/desk/lib/pytz/africa-lagos.hoon deleted file mode 100644 index 673c01a..0000000 --- a/desk/lib/pytz/africa-lagos.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:14,LMT -1905-06-30T23:46:25,+00:00,GMT -1908-07-01T00:00:00,+00:14,LMT -1913-12-31T23:46:25,+00:30,+0030 -1919-08-31T23:30:00,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-libreville.hoon b/desk/lib/pytz/africa-libreville.hoon deleted file mode 100644 index 88c593e..0000000 --- a/desk/lib/pytz/africa-libreville.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:38,LMT -1911-12-31T23:22:12,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-lome.hoon b/desk/lib/pytz/africa-lome.hoon deleted file mode 100644 index 545ef1d..0000000 --- a/desk/lib/pytz/africa-lome.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:05,LMT -1901-12-13T20:45:52,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-luanda.hoon b/desk/lib/pytz/africa-luanda.hoon deleted file mode 100644 index 84af5cc..0000000 --- a/desk/lib/pytz/africa-luanda.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:53,LMT -1901-12-13T20:45:52,+00:52,LMT -1911-12-31T23:00:00,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-lubumbashi.hoon b/desk/lib/pytz/africa-lubumbashi.hoon deleted file mode 100644 index be584c0..0000000 --- a/desk/lib/pytz/africa-lubumbashi.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:50,LMT -1901-12-13T20:45:52,+01:00,WAT -1920-04-24T23:00:00,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-lusaka.hoon b/desk/lib/pytz/africa-lusaka.hoon deleted file mode 100644 index 0243f72..0000000 --- a/desk/lib/pytz/africa-lusaka.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:53,LMT -1903-02-28T22:06:52,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-malabo.hoon b/desk/lib/pytz/africa-malabo.hoon deleted file mode 100644 index c0ead48..0000000 --- a/desk/lib/pytz/africa-malabo.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:35,LMT -1911-12-31T23:24:52,+00:00,GMT -1963-12-15T00:00:00,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-maputo.hoon b/desk/lib/pytz/africa-maputo.hoon deleted file mode 100644 index 48bc9f1..0000000 --- a/desk/lib/pytz/africa-maputo.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:10,LMT -1908-12-31T21:49:42,+02:00,CAT -''' diff --git a/desk/lib/pytz/africa-maseru.hoon b/desk/lib/pytz/africa-maseru.hoon deleted file mode 100644 index c5559f2..0000000 --- a/desk/lib/pytz/africa-maseru.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:50,LMT -1903-02-28T22:10:00,+02:00,SAST -1943-09-19T00:00:00,+03:00,SAST -1944-03-18T23:00:00,+02:00,SAST -''' diff --git a/desk/lib/pytz/africa-mbabane.hoon b/desk/lib/pytz/africa-mbabane.hoon deleted file mode 100644 index 73fedd3..0000000 --- a/desk/lib/pytz/africa-mbabane.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:04,LMT -1903-02-28T21:55:36,+02:00,SAST -''' diff --git a/desk/lib/pytz/africa-mogadishu.hoon b/desk/lib/pytz/africa-mogadishu.hoon deleted file mode 100644 index fa24437..0000000 --- a/desk/lib/pytz/africa-mogadishu.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:01,LMT -1901-12-13T20:45:52,+03:00,EAT -1930-12-31T21:00:00,+02:30,+0230 -1956-12-31T21:30:00,+03:00,EAT -''' diff --git a/desk/lib/pytz/africa-monrovia.hoon b/desk/lib/pytz/africa-monrovia.hoon deleted file mode 100644 index 266bd1b..0000000 --- a/desk/lib/pytz/africa-monrovia.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-01:17,MMT -1919-03-01T00:43:08,-01:16,MMT -1972-01-07T00:44:30,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-nairobi.hoon b/desk/lib/pytz/africa-nairobi.hoon deleted file mode 100644 index f656267..0000000 --- a/desk/lib/pytz/africa-nairobi.hoon +++ /dev/null @@ -1,10 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:27,LMT -1908-04-30T21:32:44,+02:30,+0230 -1928-06-30T21:30:00,+03:00,EAT -1930-01-04T21:00:00,+02:30,+0230 -1936-12-31T21:30:00,+02:45,+0245 -1942-07-31T21:15:00,+03:00,EAT -''' diff --git a/desk/lib/pytz/africa-ndjamena.hoon b/desk/lib/pytz/africa-ndjamena.hoon deleted file mode 100644 index 27e3358..0000000 --- a/desk/lib/pytz/africa-ndjamena.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:00,LMT -1911-12-31T22:59:48,+01:00,WAT -1979-10-13T23:00:00,+02:00,WAST -1980-03-07T22:00:00,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-niamey.hoon b/desk/lib/pytz/africa-niamey.hoon deleted file mode 100644 index 53a7b92..0000000 --- a/desk/lib/pytz/africa-niamey.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:08,LMT -1911-12-31T23:51:32,-01:00,-01 -1934-02-26T01:00:00,+00:00,GMT -1960-01-01T00:00:00,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-nouakchott.hoon b/desk/lib/pytz/africa-nouakchott.hoon deleted file mode 100644 index 4e7ff21..0000000 --- a/desk/lib/pytz/africa-nouakchott.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T01:03:48,+00:00,GMT -1934-02-26T00:00:00,-01:00,-01 -1960-11-28T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-ouagadougou.hoon b/desk/lib/pytz/africa-ouagadougou.hoon deleted file mode 100644 index b4e1a64..0000000 --- a/desk/lib/pytz/africa-ouagadougou.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T00:06:04,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-porto-novo.hoon b/desk/lib/pytz/africa-porto-novo.hoon deleted file mode 100644 index f73de51..0000000 --- a/desk/lib/pytz/africa-porto-novo.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:10,LMT -1911-12-31T23:49:32,+00:00,GMT -1934-02-26T00:00:00,+01:00,WAT -''' diff --git a/desk/lib/pytz/africa-sao-tome.hoon b/desk/lib/pytz/africa-sao-tome.hoon deleted file mode 100644 index df53ffc..0000000 --- a/desk/lib/pytz/africa-sao-tome.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:27,LMT -1901-12-13T20:45:52,-01:23,LMT -1912-01-01T00:00:00,+00:00,GMT -2018-01-01T01:00:00,+01:00,WAT -2019-01-01T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-timbuktu.hoon b/desk/lib/pytz/africa-timbuktu.hoon deleted file mode 100644 index e5d0623..0000000 --- a/desk/lib/pytz/africa-timbuktu.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T00:32:00,+00:00,GMT -1934-02-26T00:00:00,-01:00,-01 -1960-06-20T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/africa-tripoli.hoon b/desk/lib/pytz/africa-tripoli.hoon deleted file mode 100644 index 5f916ee..0000000 --- a/desk/lib/pytz/africa-tripoli.hoon +++ /dev/null @@ -1,37 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:53,LMT -1919-12-31T23:07:16,+01:00,CET -1951-10-14T01:00:00,+02:00,CEST -1951-12-31T22:00:00,+01:00,CET -1953-10-09T01:00:00,+02:00,CEST -1953-12-31T22:00:00,+01:00,CET -1955-09-29T23:00:00,+02:00,CEST -1955-12-31T22:00:00,+01:00,CET -1958-12-31T23:00:00,+02:00,EET -1981-12-31T22:00:00,+01:00,CET -1982-03-31T23:00:00,+02:00,CEST -1982-09-30T22:00:00,+01:00,CET -1983-03-31T23:00:00,+02:00,CEST -1983-09-30T22:00:00,+01:00,CET -1984-03-31T23:00:00,+02:00,CEST -1984-09-30T22:00:00,+01:00,CET -1985-04-05T23:00:00,+02:00,CEST -1985-09-30T22:00:00,+01:00,CET -1986-04-03T23:00:00,+02:00,CEST -1986-10-02T22:00:00,+01:00,CET -1987-03-31T23:00:00,+02:00,CEST -1987-09-30T22:00:00,+01:00,CET -1988-03-31T23:00:00,+02:00,CEST -1988-09-30T22:00:00,+01:00,CET -1989-03-31T23:00:00,+02:00,CEST -1989-09-30T22:00:00,+01:00,CET -1990-05-03T23:00:00,+02:00,EET -1996-09-29T22:00:00,+01:00,CET -1997-04-03T23:00:00,+02:00,CEST -1997-10-03T22:00:00,+02:00,EET -2012-11-10T00:00:00,+01:00,CET -2013-03-29T00:00:00,+02:00,CEST -2013-10-25T00:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/africa-tunis.hoon b/desk/lib/pytz/africa-tunis.hoon deleted file mode 100644 index 7580c21..0000000 --- a/desk/lib/pytz/africa-tunis.hoon +++ /dev/null @@ -1,39 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:41,LMT -1901-12-13T20:45:52,+00:09,PMT -1911-03-10T23:50:39,+01:00,CET -1939-04-15T22:00:00,+02:00,CEST -1939-11-18T22:00:00,+01:00,CET -1940-02-25T22:00:00,+02:00,CEST -1941-10-05T22:00:00,+01:00,CET -1942-03-08T23:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-04-17T00:00:00,+01:00,CET -1943-04-25T01:00:00,+02:00,CEST -1943-10-04T00:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-07T22:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-15T22:00:00,+01:00,CET -1977-04-29T23:00:00,+02:00,CEST -1977-09-23T23:00:00,+01:00,CET -1978-04-30T23:00:00,+02:00,CEST -1978-09-30T23:00:00,+01:00,CET -1988-05-31T23:00:00,+02:00,CEST -1988-09-24T23:00:00,+01:00,CET -1989-03-25T23:00:00,+02:00,CEST -1989-09-23T23:00:00,+01:00,CET -1990-04-30T23:00:00,+02:00,CEST -1990-09-29T23:00:00,+01:00,CET -2005-04-30T23:00:00,+02:00,CEST -2005-09-30T00:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/africa-windhoek.hoon b/desk/lib/pytz/africa-windhoek.hoon deleted file mode 100644 index a69109e..0000000 --- a/desk/lib/pytz/africa-windhoek.hoon +++ /dev/null @@ -1,58 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:08,LMT -1901-12-13T20:45:52,+01:30,+0130 -1903-02-28T22:30:00,+02:00,SAST -1942-09-20T00:00:00,+03:00,SAST -1943-03-20T23:00:00,+02:00,SAST -1990-03-20T22:00:00,+02:00,CAT -1994-03-20T22:00:00,+01:00,WAT -1994-09-04T01:00:00,+02:00,CAT -1995-04-02T00:00:00,+01:00,WAT -1995-09-03T01:00:00,+02:00,CAT -1996-04-07T00:00:00,+01:00,WAT -1996-09-01T01:00:00,+02:00,CAT -1997-04-06T00:00:00,+01:00,WAT -1997-09-07T01:00:00,+02:00,CAT -1998-04-05T00:00:00,+01:00,WAT -1998-09-06T01:00:00,+02:00,CAT -1999-04-04T00:00:00,+01:00,WAT -1999-09-05T01:00:00,+02:00,CAT -2000-04-02T00:00:00,+01:00,WAT -2000-09-03T01:00:00,+02:00,CAT -2001-04-01T00:00:00,+01:00,WAT -2001-09-02T01:00:00,+02:00,CAT -2002-04-07T00:00:00,+01:00,WAT -2002-09-01T01:00:00,+02:00,CAT -2003-04-06T00:00:00,+01:00,WAT -2003-09-07T01:00:00,+02:00,CAT -2004-04-04T00:00:00,+01:00,WAT -2004-09-05T01:00:00,+02:00,CAT -2005-04-03T00:00:00,+01:00,WAT -2005-09-04T01:00:00,+02:00,CAT -2006-04-02T00:00:00,+01:00,WAT -2006-09-03T01:00:00,+02:00,CAT -2007-04-01T00:00:00,+01:00,WAT -2007-09-02T01:00:00,+02:00,CAT -2008-04-06T00:00:00,+01:00,WAT -2008-09-07T01:00:00,+02:00,CAT -2009-04-05T00:00:00,+01:00,WAT -2009-09-06T01:00:00,+02:00,CAT -2010-04-04T00:00:00,+01:00,WAT -2010-09-05T01:00:00,+02:00,CAT -2011-04-03T00:00:00,+01:00,WAT -2011-09-04T01:00:00,+02:00,CAT -2012-04-01T00:00:00,+01:00,WAT -2012-09-02T01:00:00,+02:00,CAT -2013-04-07T00:00:00,+01:00,WAT -2013-09-01T01:00:00,+02:00,CAT -2014-04-06T00:00:00,+01:00,WAT -2014-09-07T01:00:00,+02:00,CAT -2015-04-05T00:00:00,+01:00,WAT -2015-09-06T01:00:00,+02:00,CAT -2016-04-03T00:00:00,+01:00,WAT -2016-09-04T01:00:00,+02:00,CAT -2017-04-02T00:00:00,+01:00,WAT -2017-09-03T01:00:00,+02:00,CAT -''' diff --git a/desk/lib/pytz/america-adak.hoon b/desk/lib/pytz/america-adak.hoon deleted file mode 100644 index 77695c8..0000000 --- a/desk/lib/pytz/america-adak.hoon +++ /dev/null @@ -1,149 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:13,LMT -1901-12-13T20:45:52,-11:00,NST -1942-02-09T13:00:00,-10:00,NWT -1945-08-14T23:00:00,-10:00,NPT -1945-09-30T12:00:00,-11:00,NST -1967-04-01T11:00:00,-11:00,BST -1969-04-27T13:00:00,-10:00,BDT -1969-10-26T12:00:00,-11:00,BST -1970-04-26T13:00:00,-10:00,BDT -1970-10-25T12:00:00,-11:00,BST -1971-04-25T13:00:00,-10:00,BDT -1971-10-31T12:00:00,-11:00,BST -1972-04-30T13:00:00,-10:00,BDT -1972-10-29T12:00:00,-11:00,BST -1973-04-29T13:00:00,-10:00,BDT -1973-10-28T12:00:00,-11:00,BST -1974-01-06T13:00:00,-10:00,BDT -1974-10-27T12:00:00,-11:00,BST -1975-02-23T13:00:00,-10:00,BDT -1975-10-26T12:00:00,-11:00,BST -1976-04-25T13:00:00,-10:00,BDT -1976-10-31T12:00:00,-11:00,BST -1977-04-24T13:00:00,-10:00,BDT -1977-10-30T12:00:00,-11:00,BST -1978-04-30T13:00:00,-10:00,BDT -1978-10-29T12:00:00,-11:00,BST -1979-04-29T13:00:00,-10:00,BDT -1979-10-28T12:00:00,-11:00,BST -1980-04-27T13:00:00,-10:00,BDT -1980-10-26T12:00:00,-11:00,BST -1981-04-26T13:00:00,-10:00,BDT -1981-10-25T12:00:00,-11:00,BST -1982-04-25T13:00:00,-10:00,BDT -1982-10-31T12:00:00,-11:00,BST -1983-04-24T13:00:00,-10:00,BDT -1983-10-30T12:00:00,-10:00,AHST -1983-11-30T10:00:00,-10:00,HST -1984-04-29T12:00:00,-09:00,HDT -1984-10-28T11:00:00,-10:00,HST -1985-04-28T12:00:00,-09:00,HDT -1985-10-27T11:00:00,-10:00,HST -1986-04-27T12:00:00,-09:00,HDT -1986-10-26T11:00:00,-10:00,HST -1987-04-05T12:00:00,-09:00,HDT -1987-10-25T11:00:00,-10:00,HST -1988-04-03T12:00:00,-09:00,HDT -1988-10-30T11:00:00,-10:00,HST -1989-04-02T12:00:00,-09:00,HDT -1989-10-29T11:00:00,-10:00,HST -1990-04-01T12:00:00,-09:00,HDT -1990-10-28T11:00:00,-10:00,HST -1991-04-07T12:00:00,-09:00,HDT -1991-10-27T11:00:00,-10:00,HST -1992-04-05T12:00:00,-09:00,HDT -1992-10-25T11:00:00,-10:00,HST -1993-04-04T12:00:00,-09:00,HDT -1993-10-31T11:00:00,-10:00,HST -1994-04-03T12:00:00,-09:00,HDT -1994-10-30T11:00:00,-10:00,HST -1995-04-02T12:00:00,-09:00,HDT -1995-10-29T11:00:00,-10:00,HST -1996-04-07T12:00:00,-09:00,HDT -1996-10-27T11:00:00,-10:00,HST -1997-04-06T12:00:00,-09:00,HDT -1997-10-26T11:00:00,-10:00,HST -1998-04-05T12:00:00,-09:00,HDT -1998-10-25T11:00:00,-10:00,HST -1999-04-04T12:00:00,-09:00,HDT -1999-10-31T11:00:00,-10:00,HST -2000-04-02T12:00:00,-09:00,HDT -2000-10-29T11:00:00,-10:00,HST -2001-04-01T12:00:00,-09:00,HDT -2001-10-28T11:00:00,-10:00,HST -2002-04-07T12:00:00,-09:00,HDT -2002-10-27T11:00:00,-10:00,HST -2003-04-06T12:00:00,-09:00,HDT -2003-10-26T11:00:00,-10:00,HST -2004-04-04T12:00:00,-09:00,HDT -2004-10-31T11:00:00,-10:00,HST -2005-04-03T12:00:00,-09:00,HDT -2005-10-30T11:00:00,-10:00,HST -2006-04-02T12:00:00,-09:00,HDT -2006-10-29T11:00:00,-10:00,HST -2007-03-11T12:00:00,-09:00,HDT -2007-11-04T11:00:00,-10:00,HST -2008-03-09T12:00:00,-09:00,HDT -2008-11-02T11:00:00,-10:00,HST -2009-03-08T12:00:00,-09:00,HDT -2009-11-01T11:00:00,-10:00,HST -2010-03-14T12:00:00,-09:00,HDT -2010-11-07T11:00:00,-10:00,HST -2011-03-13T12:00:00,-09:00,HDT -2011-11-06T11:00:00,-10:00,HST -2012-03-11T12:00:00,-09:00,HDT -2012-11-04T11:00:00,-10:00,HST -2013-03-10T12:00:00,-09:00,HDT -2013-11-03T11:00:00,-10:00,HST -2014-03-09T12:00:00,-09:00,HDT -2014-11-02T11:00:00,-10:00,HST -2015-03-08T12:00:00,-09:00,HDT -2015-11-01T11:00:00,-10:00,HST -2016-03-13T12:00:00,-09:00,HDT -2016-11-06T11:00:00,-10:00,HST -2017-03-12T12:00:00,-09:00,HDT -2017-11-05T11:00:00,-10:00,HST -2018-03-11T12:00:00,-09:00,HDT -2018-11-04T11:00:00,-10:00,HST -2019-03-10T12:00:00,-09:00,HDT -2019-11-03T11:00:00,-10:00,HST -2020-03-08T12:00:00,-09:00,HDT -2020-11-01T11:00:00,-10:00,HST -2021-03-14T12:00:00,-09:00,HDT -2021-11-07T11:00:00,-10:00,HST -2022-03-13T12:00:00,-09:00,HDT -2022-11-06T11:00:00,-10:00,HST -2023-03-12T12:00:00,-09:00,HDT -2023-11-05T11:00:00,-10:00,HST -2024-03-10T12:00:00,-09:00,HDT -2024-11-03T11:00:00,-10:00,HST -2025-03-09T12:00:00,-09:00,HDT -2025-11-02T11:00:00,-10:00,HST -2026-03-08T12:00:00,-09:00,HDT -2026-11-01T11:00:00,-10:00,HST -2027-03-14T12:00:00,-09:00,HDT -2027-11-07T11:00:00,-10:00,HST -2028-03-12T12:00:00,-09:00,HDT -2028-11-05T11:00:00,-10:00,HST -2029-03-11T12:00:00,-09:00,HDT -2029-11-04T11:00:00,-10:00,HST -2030-03-10T12:00:00,-09:00,HDT -2030-11-03T11:00:00,-10:00,HST -2031-03-09T12:00:00,-09:00,HDT -2031-11-02T11:00:00,-10:00,HST -2032-03-14T12:00:00,-09:00,HDT -2032-11-07T11:00:00,-10:00,HST -2033-03-13T12:00:00,-09:00,HDT -2033-11-06T11:00:00,-10:00,HST -2034-03-12T12:00:00,-09:00,HDT -2034-11-05T11:00:00,-10:00,HST -2035-03-11T12:00:00,-09:00,HDT -2035-11-04T11:00:00,-10:00,HST -2036-03-09T12:00:00,-09:00,HDT -2036-11-02T11:00:00,-10:00,HST -2037-03-08T12:00:00,-09:00,HDT -2037-11-01T11:00:00,-10:00,HST -''' diff --git a/desk/lib/pytz/america-anchorage.hoon b/desk/lib/pytz/america-anchorage.hoon deleted file mode 100644 index d6ac134..0000000 --- a/desk/lib/pytz/america-anchorage.hoon +++ /dev/null @@ -1,149 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+14:00,LMT -1901-12-13T20:45:52,-10:00,AST -1942-02-09T12:00:00,-09:00,AWT -1945-08-14T23:00:00,-09:00,APT -1945-09-30T11:00:00,-10:00,AST -1967-04-01T10:00:00,-10:00,AHST -1969-04-27T12:00:00,-09:00,AHDT -1969-10-26T11:00:00,-10:00,AHST -1970-04-26T12:00:00,-09:00,AHDT -1970-10-25T11:00:00,-10:00,AHST -1971-04-25T12:00:00,-09:00,AHDT -1971-10-31T11:00:00,-10:00,AHST -1972-04-30T12:00:00,-09:00,AHDT -1972-10-29T11:00:00,-10:00,AHST -1973-04-29T12:00:00,-09:00,AHDT -1973-10-28T11:00:00,-10:00,AHST -1974-01-06T12:00:00,-09:00,AHDT -1974-10-27T11:00:00,-10:00,AHST -1975-02-23T12:00:00,-09:00,AHDT -1975-10-26T11:00:00,-10:00,AHST -1976-04-25T12:00:00,-09:00,AHDT -1976-10-31T11:00:00,-10:00,AHST -1977-04-24T12:00:00,-09:00,AHDT -1977-10-30T11:00:00,-10:00,AHST -1978-04-30T12:00:00,-09:00,AHDT -1978-10-29T11:00:00,-10:00,AHST -1979-04-29T12:00:00,-09:00,AHDT -1979-10-28T11:00:00,-10:00,AHST -1980-04-27T12:00:00,-09:00,AHDT -1980-10-26T11:00:00,-10:00,AHST -1981-04-26T12:00:00,-09:00,AHDT -1981-10-25T11:00:00,-10:00,AHST -1982-04-25T12:00:00,-09:00,AHDT -1982-10-31T11:00:00,-10:00,AHST -1983-04-24T12:00:00,-09:00,AHDT -1983-10-30T11:00:00,-09:00,YST -1983-11-30T09:00:00,-09:00,AKST -1984-04-29T11:00:00,-08:00,AKDT -1984-10-28T10:00:00,-09:00,AKST -1985-04-28T11:00:00,-08:00,AKDT -1985-10-27T10:00:00,-09:00,AKST -1986-04-27T11:00:00,-08:00,AKDT -1986-10-26T10:00:00,-09:00,AKST -1987-04-05T11:00:00,-08:00,AKDT -1987-10-25T10:00:00,-09:00,AKST -1988-04-03T11:00:00,-08:00,AKDT -1988-10-30T10:00:00,-09:00,AKST -1989-04-02T11:00:00,-08:00,AKDT -1989-10-29T10:00:00,-09:00,AKST -1990-04-01T11:00:00,-08:00,AKDT -1990-10-28T10:00:00,-09:00,AKST -1991-04-07T11:00:00,-08:00,AKDT -1991-10-27T10:00:00,-09:00,AKST -1992-04-05T11:00:00,-08:00,AKDT -1992-10-25T10:00:00,-09:00,AKST -1993-04-04T11:00:00,-08:00,AKDT -1993-10-31T10:00:00,-09:00,AKST -1994-04-03T11:00:00,-08:00,AKDT -1994-10-30T10:00:00,-09:00,AKST -1995-04-02T11:00:00,-08:00,AKDT -1995-10-29T10:00:00,-09:00,AKST -1996-04-07T11:00:00,-08:00,AKDT -1996-10-27T10:00:00,-09:00,AKST -1997-04-06T11:00:00,-08:00,AKDT -1997-10-26T10:00:00,-09:00,AKST -1998-04-05T11:00:00,-08:00,AKDT -1998-10-25T10:00:00,-09:00,AKST -1999-04-04T11:00:00,-08:00,AKDT -1999-10-31T10:00:00,-09:00,AKST -2000-04-02T11:00:00,-08:00,AKDT -2000-10-29T10:00:00,-09:00,AKST -2001-04-01T11:00:00,-08:00,AKDT -2001-10-28T10:00:00,-09:00,AKST -2002-04-07T11:00:00,-08:00,AKDT -2002-10-27T10:00:00,-09:00,AKST -2003-04-06T11:00:00,-08:00,AKDT -2003-10-26T10:00:00,-09:00,AKST -2004-04-04T11:00:00,-08:00,AKDT -2004-10-31T10:00:00,-09:00,AKST -2005-04-03T11:00:00,-08:00,AKDT -2005-10-30T10:00:00,-09:00,AKST -2006-04-02T11:00:00,-08:00,AKDT -2006-10-29T10:00:00,-09:00,AKST -2007-03-11T11:00:00,-08:00,AKDT -2007-11-04T10:00:00,-09:00,AKST -2008-03-09T11:00:00,-08:00,AKDT -2008-11-02T10:00:00,-09:00,AKST -2009-03-08T11:00:00,-08:00,AKDT -2009-11-01T10:00:00,-09:00,AKST -2010-03-14T11:00:00,-08:00,AKDT -2010-11-07T10:00:00,-09:00,AKST -2011-03-13T11:00:00,-08:00,AKDT -2011-11-06T10:00:00,-09:00,AKST -2012-03-11T11:00:00,-08:00,AKDT -2012-11-04T10:00:00,-09:00,AKST -2013-03-10T11:00:00,-08:00,AKDT -2013-11-03T10:00:00,-09:00,AKST -2014-03-09T11:00:00,-08:00,AKDT -2014-11-02T10:00:00,-09:00,AKST -2015-03-08T11:00:00,-08:00,AKDT -2015-11-01T10:00:00,-09:00,AKST -2016-03-13T11:00:00,-08:00,AKDT -2016-11-06T10:00:00,-09:00,AKST -2017-03-12T11:00:00,-08:00,AKDT -2017-11-05T10:00:00,-09:00,AKST -2018-03-11T11:00:00,-08:00,AKDT -2018-11-04T10:00:00,-09:00,AKST -2019-03-10T11:00:00,-08:00,AKDT -2019-11-03T10:00:00,-09:00,AKST -2020-03-08T11:00:00,-08:00,AKDT -2020-11-01T10:00:00,-09:00,AKST -2021-03-14T11:00:00,-08:00,AKDT -2021-11-07T10:00:00,-09:00,AKST -2022-03-13T11:00:00,-08:00,AKDT -2022-11-06T10:00:00,-09:00,AKST -2023-03-12T11:00:00,-08:00,AKDT -2023-11-05T10:00:00,-09:00,AKST -2024-03-10T11:00:00,-08:00,AKDT -2024-11-03T10:00:00,-09:00,AKST -2025-03-09T11:00:00,-08:00,AKDT -2025-11-02T10:00:00,-09:00,AKST -2026-03-08T11:00:00,-08:00,AKDT -2026-11-01T10:00:00,-09:00,AKST -2027-03-14T11:00:00,-08:00,AKDT -2027-11-07T10:00:00,-09:00,AKST -2028-03-12T11:00:00,-08:00,AKDT -2028-11-05T10:00:00,-09:00,AKST -2029-03-11T11:00:00,-08:00,AKDT -2029-11-04T10:00:00,-09:00,AKST -2030-03-10T11:00:00,-08:00,AKDT -2030-11-03T10:00:00,-09:00,AKST -2031-03-09T11:00:00,-08:00,AKDT -2031-11-02T10:00:00,-09:00,AKST -2032-03-14T11:00:00,-08:00,AKDT -2032-11-07T10:00:00,-09:00,AKST -2033-03-13T11:00:00,-08:00,AKDT -2033-11-06T10:00:00,-09:00,AKST -2034-03-12T11:00:00,-08:00,AKDT -2034-11-05T10:00:00,-09:00,AKST -2035-03-11T11:00:00,-08:00,AKDT -2035-11-04T10:00:00,-09:00,AKST -2036-03-09T11:00:00,-08:00,AKDT -2036-11-02T10:00:00,-09:00,AKST -2037-03-08T11:00:00,-08:00,AKDT -2037-11-01T10:00:00,-09:00,AKST -''' diff --git a/desk/lib/pytz/america-anguilla.hoon b/desk/lib/pytz/america-anguilla.hoon deleted file mode 100644 index b137634..0000000 --- a/desk/lib/pytz/america-anguilla.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-03-02T04:12:16,-04:00,AST -''' diff --git a/desk/lib/pytz/america-antigua.hoon b/desk/lib/pytz/america-antigua.hoon deleted file mode 100644 index 5ea9c3d..0000000 --- a/desk/lib/pytz/america-antigua.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-03-02T04:07:12,-05:00,EST -1951-01-01T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-araguaina.hoon b/desk/lib/pytz/america-araguaina.hoon deleted file mode 100644 index 0fee189..0000000 --- a/desk/lib/pytz/america-araguaina.hoon +++ /dev/null @@ -1,55 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T03:12:48,-03:00,-03 -1931-10-03T14:00:00,-02:00,-02 -1932-04-01T02:00:00,-03:00,-03 -1932-10-03T03:00:00,-02:00,-02 -1933-04-01T02:00:00,-03:00,-03 -1949-12-01T03:00:00,-02:00,-02 -1950-04-16T03:00:00,-03:00,-03 -1950-12-01T03:00:00,-02:00,-02 -1951-04-01T02:00:00,-03:00,-03 -1951-12-01T03:00:00,-02:00,-02 -1952-04-01T02:00:00,-03:00,-03 -1952-12-01T03:00:00,-02:00,-02 -1953-03-01T02:00:00,-03:00,-03 -1963-12-09T03:00:00,-02:00,-02 -1964-03-01T02:00:00,-03:00,-03 -1965-01-31T03:00:00,-02:00,-02 -1965-03-31T02:00:00,-03:00,-03 -1965-12-01T03:00:00,-02:00,-02 -1966-03-01T02:00:00,-03:00,-03 -1966-11-01T03:00:00,-02:00,-02 -1967-03-01T02:00:00,-03:00,-03 -1967-11-01T03:00:00,-02:00,-02 -1968-03-01T02:00:00,-03:00,-03 -1985-11-02T03:00:00,-02:00,-02 -1986-03-15T02:00:00,-03:00,-03 -1986-10-25T03:00:00,-02:00,-02 -1987-02-14T02:00:00,-03:00,-03 -1987-10-25T03:00:00,-02:00,-02 -1988-02-07T02:00:00,-03:00,-03 -1988-10-16T03:00:00,-02:00,-02 -1989-01-29T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-02-11T02:00:00,-03:00,-03 -1995-10-15T03:00:00,-02:00,-02 -1996-02-11T02:00:00,-03:00,-03 -1996-10-06T03:00:00,-02:00,-02 -1997-02-16T02:00:00,-03:00,-03 -1997-10-06T03:00:00,-02:00,-02 -1998-03-01T02:00:00,-03:00,-03 -1998-10-11T03:00:00,-02:00,-02 -1999-02-21T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-02:00,-02 -2000-02-27T02:00:00,-03:00,-03 -2000-10-08T03:00:00,-02:00,-02 -2001-02-18T02:00:00,-03:00,-03 -2001-10-14T03:00:00,-02:00,-02 -2002-02-17T02:00:00,-03:00,-03 -2002-11-03T03:00:00,-02:00,-02 -2003-02-16T02:00:00,-03:00,-03 -2012-10-21T03:00:00,-02:00,-02 -2013-02-17T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-buenos-aires.hoon b/desk/lib/pytz/america-argentina-buenos-aires.hoon deleted file mode 100644 index 194150c..0000000 --- a/desk/lib/pytz/america-argentina-buenos-aires.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-03T02:00:00,-03:00,-03 -1991-10-20T03:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -2008-10-19T03:00:00,-02:00,-02 -2009-03-15T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-catamarca.hoon b/desk/lib/pytz/america-argentina-catamarca.hoon deleted file mode 100644 index 48d8a85..0000000 --- a/desk/lib/pytz/america-argentina-catamarca.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-03T02:00:00,-04:00,-04 -1991-10-20T04:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2004-06-01T03:00:00,-04:00,-04 -2004-06-20T04:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-cordoba.hoon b/desk/lib/pytz/america-argentina-cordoba.hoon deleted file mode 100644 index 6a397a7..0000000 --- a/desk/lib/pytz/america-argentina-cordoba.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-03T02:00:00,-04:00,-04 -1991-10-20T04:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -2008-10-19T03:00:00,-02:00,-02 -2009-03-15T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-jujuy.hoon b/desk/lib/pytz/america-argentina-jujuy.hoon deleted file mode 100644 index 1dd3773..0000000 --- a/desk/lib/pytz/america-argentina-jujuy.hoon +++ /dev/null @@ -1,63 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-04:00,-04 -1990-10-28T04:00:00,-03:00,-03 -1991-03-17T03:00:00,-04:00,-04 -1991-10-06T04:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-la-rioja.hoon b/desk/lib/pytz/america-argentina-la-rioja.hoon deleted file mode 100644 index 8faa624..0000000 --- a/desk/lib/pytz/america-argentina-la-rioja.hoon +++ /dev/null @@ -1,66 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-01T02:00:00,-04:00,-04 -1991-05-07T04:00:00,-03:00,-03 -1991-10-20T03:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2004-06-01T03:00:00,-04:00,-04 -2004-06-20T04:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-mendoza.hoon b/desk/lib/pytz/america-argentina-mendoza.hoon deleted file mode 100644 index 331731b..0000000 --- a/desk/lib/pytz/america-argentina-mendoza.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-04:00,-04 -1990-10-15T04:00:00,-03:00,-03 -1991-03-01T03:00:00,-04:00,-04 -1991-10-15T04:00:00,-03:00,-03 -1992-03-01T03:00:00,-04:00,-04 -1992-10-18T04:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2004-05-23T03:00:00,-04:00,-04 -2004-09-26T04:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-rio-gallegos.hoon b/desk/lib/pytz/america-argentina-rio-gallegos.hoon deleted file mode 100644 index 9630ee5..0000000 --- a/desk/lib/pytz/america-argentina-rio-gallegos.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-03T02:00:00,-03:00,-03 -1991-10-20T03:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2004-06-01T03:00:00,-04:00,-04 -2004-06-20T04:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-salta.hoon b/desk/lib/pytz/america-argentina-salta.hoon deleted file mode 100644 index 5e608f2..0000000 --- a/desk/lib/pytz/america-argentina-salta.hoon +++ /dev/null @@ -1,63 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-03T02:00:00,-04:00,-04 -1991-10-20T04:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-san-juan.hoon b/desk/lib/pytz/america-argentina-san-juan.hoon deleted file mode 100644 index 2864e60..0000000 --- a/desk/lib/pytz/america-argentina-san-juan.hoon +++ /dev/null @@ -1,66 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-01T02:00:00,-04:00,-04 -1991-05-07T04:00:00,-03:00,-03 -1991-10-20T03:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2004-05-31T03:00:00,-04:00,-04 -2004-07-25T04:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-san-luis.hoon b/desk/lib/pytz/america-argentina-san-luis.hoon deleted file mode 100644 index 5cd1647..0000000 --- a/desk/lib/pytz/america-argentina-san-luis.hoon +++ /dev/null @@ -1,66 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-14T02:00:00,-04:00,-04 -1990-10-15T04:00:00,-03:00,-03 -1991-03-01T03:00:00,-04:00,-04 -1991-06-01T04:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2004-05-31T03:00:00,-04:00,-04 -2004-07-25T04:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-01-21T02:00:00,-03:00,-03 -2008-03-09T03:00:00,-04:00,-04 -2008-10-12T04:00:00,-03:00,-03 -2009-03-08T03:00:00,-04:00,-04 -2009-10-11T04:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-tucuman.hoon b/desk/lib/pytz/america-argentina-tucuman.hoon deleted file mode 100644 index d32e729..0000000 --- a/desk/lib/pytz/america-argentina-tucuman.hoon +++ /dev/null @@ -1,67 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-03T02:00:00,-04:00,-04 -1991-10-20T04:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2004-06-01T03:00:00,-04:00,-04 -2004-06-13T04:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -2008-10-19T03:00:00,-02:00,-02 -2009-03-15T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-argentina-ushuaia.hoon b/desk/lib/pytz/america-argentina-ushuaia.hoon deleted file mode 100644 index 63abebd..0000000 --- a/desk/lib/pytz/america-argentina-ushuaia.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:43,CMT -1920-05-01T04:16:48,-04:00,-04 -1930-12-01T04:00:00,-03:00,-03 -1931-04-01T03:00:00,-04:00,-04 -1931-10-15T04:00:00,-03:00,-03 -1932-03-01T03:00:00,-04:00,-04 -1932-11-01T04:00:00,-03:00,-03 -1933-03-01T03:00:00,-04:00,-04 -1933-11-01T04:00:00,-03:00,-03 -1934-03-01T03:00:00,-04:00,-04 -1934-11-01T04:00:00,-03:00,-03 -1935-03-01T03:00:00,-04:00,-04 -1935-11-01T04:00:00,-03:00,-03 -1936-03-01T03:00:00,-04:00,-04 -1936-11-01T04:00:00,-03:00,-03 -1937-03-01T03:00:00,-04:00,-04 -1937-11-01T04:00:00,-03:00,-03 -1938-03-01T03:00:00,-04:00,-04 -1938-11-01T04:00:00,-03:00,-03 -1939-03-01T03:00:00,-04:00,-04 -1939-11-01T04:00:00,-03:00,-03 -1940-03-01T03:00:00,-04:00,-04 -1940-07-01T04:00:00,-03:00,-03 -1941-06-15T03:00:00,-04:00,-04 -1941-10-15T04:00:00,-03:00,-03 -1943-08-01T03:00:00,-04:00,-04 -1943-10-15T04:00:00,-03:00,-03 -1946-03-01T03:00:00,-04:00,-04 -1946-10-01T04:00:00,-03:00,-03 -1963-10-01T03:00:00,-04:00,-04 -1963-12-15T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1964-10-15T04:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1988-12-01T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-03-04T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-03T02:00:00,-03:00,-03 -1991-10-20T03:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-03-07T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-03:00,-03 -2000-03-03T03:00:00,-03:00,-03 -2004-05-30T03:00:00,-04:00,-04 -2004-06-20T04:00:00,-03:00,-03 -2007-12-30T03:00:00,-02:00,-02 -2008-03-16T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-aruba.hoon b/desk/lib/pytz/america-aruba.hoon deleted file mode 100644 index 2e67c8b..0000000 --- a/desk/lib/pytz/america-aruba.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-02-12T04:40:24,-05:30,-0430 -1965-01-01T04:30:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-asuncion.hoon b/desk/lib/pytz/america-asuncion.hoon deleted file mode 100644 index 008a545..0000000 --- a/desk/lib/pytz/america-asuncion.hoon +++ /dev/null @@ -1,108 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-04:09,AMT -1931-10-10T03:50:40,-04:00,-04 -1972-10-01T04:00:00,-03:00,-03 -1974-04-01T03:00:00,-04:00,-04 -1975-10-01T04:00:00,-03:00,-03 -1976-03-01T03:00:00,-04:00,-04 -1976-10-01T04:00:00,-03:00,-03 -1977-03-01T03:00:00,-04:00,-04 -1977-10-01T04:00:00,-03:00,-03 -1978-03-01T03:00:00,-04:00,-04 -1978-10-01T04:00:00,-03:00,-03 -1979-04-01T03:00:00,-04:00,-04 -1979-10-01T04:00:00,-03:00,-03 -1980-04-01T03:00:00,-04:00,-04 -1980-10-01T04:00:00,-03:00,-03 -1981-04-01T03:00:00,-04:00,-04 -1981-10-01T04:00:00,-03:00,-03 -1982-04-01T03:00:00,-04:00,-04 -1982-10-01T04:00:00,-03:00,-03 -1983-04-01T03:00:00,-04:00,-04 -1983-10-01T04:00:00,-03:00,-03 -1984-04-01T03:00:00,-04:00,-04 -1984-10-01T04:00:00,-03:00,-03 -1985-04-01T03:00:00,-04:00,-04 -1985-10-01T04:00:00,-03:00,-03 -1986-04-01T03:00:00,-04:00,-04 -1986-10-01T04:00:00,-03:00,-03 -1987-04-01T03:00:00,-04:00,-04 -1987-10-01T04:00:00,-03:00,-03 -1988-04-01T03:00:00,-04:00,-04 -1988-10-01T04:00:00,-03:00,-03 -1989-04-01T03:00:00,-04:00,-04 -1989-10-22T04:00:00,-03:00,-03 -1990-04-01T03:00:00,-04:00,-04 -1990-10-01T04:00:00,-03:00,-03 -1991-04-01T03:00:00,-04:00,-04 -1991-10-06T04:00:00,-03:00,-03 -1992-03-01T03:00:00,-04:00,-04 -1992-10-05T04:00:00,-03:00,-03 -1993-03-31T03:00:00,-04:00,-04 -1993-10-01T04:00:00,-03:00,-03 -1994-02-27T03:00:00,-04:00,-04 -1994-10-01T04:00:00,-03:00,-03 -1995-02-26T03:00:00,-04:00,-04 -1995-10-01T04:00:00,-03:00,-03 -1996-03-01T03:00:00,-04:00,-04 -1996-10-06T04:00:00,-03:00,-03 -1997-02-23T03:00:00,-04:00,-04 -1997-10-05T04:00:00,-03:00,-03 -1998-03-01T03:00:00,-04:00,-04 -1998-10-04T04:00:00,-03:00,-03 -1999-03-07T03:00:00,-04:00,-04 -1999-10-03T04:00:00,-03:00,-03 -2000-03-05T03:00:00,-04:00,-04 -2000-10-01T04:00:00,-03:00,-03 -2001-03-04T03:00:00,-04:00,-04 -2001-10-07T04:00:00,-03:00,-03 -2002-04-07T03:00:00,-04:00,-04 -2002-09-01T04:00:00,-03:00,-03 -2003-04-06T03:00:00,-04:00,-04 -2003-09-07T04:00:00,-03:00,-03 -2004-04-04T03:00:00,-04:00,-04 -2004-10-17T04:00:00,-03:00,-03 -2005-03-13T03:00:00,-04:00,-04 -2005-10-16T04:00:00,-03:00,-03 -2006-03-12T03:00:00,-04:00,-04 -2006-10-15T04:00:00,-03:00,-03 -2007-03-11T03:00:00,-04:00,-04 -2007-10-21T04:00:00,-03:00,-03 -2008-03-09T03:00:00,-04:00,-04 -2008-10-19T04:00:00,-03:00,-03 -2009-03-08T03:00:00,-04:00,-04 -2009-10-18T04:00:00,-03:00,-03 -2010-04-11T03:00:00,-04:00,-04 -2010-10-03T04:00:00,-03:00,-03 -2011-04-10T03:00:00,-04:00,-04 -2011-10-02T04:00:00,-03:00,-03 -2012-04-08T03:00:00,-04:00,-04 -2012-10-07T04:00:00,-03:00,-03 -2013-03-24T03:00:00,-04:00,-04 -2013-10-06T04:00:00,-03:00,-03 -2014-03-23T03:00:00,-04:00,-04 -2014-10-05T04:00:00,-03:00,-03 -2015-03-22T03:00:00,-04:00,-04 -2015-10-04T04:00:00,-03:00,-03 -2016-03-27T03:00:00,-04:00,-04 -2016-10-02T04:00:00,-03:00,-03 -2017-03-26T03:00:00,-04:00,-04 -2017-10-01T04:00:00,-03:00,-03 -2018-03-25T03:00:00,-04:00,-04 -2018-10-07T04:00:00,-03:00,-03 -2019-03-24T03:00:00,-04:00,-04 -2019-10-06T04:00:00,-03:00,-03 -2020-03-22T03:00:00,-04:00,-04 -2020-10-04T04:00:00,-03:00,-03 -2021-03-28T03:00:00,-04:00,-04 -2021-10-03T04:00:00,-03:00,-03 -2022-03-27T03:00:00,-04:00,-04 -2022-10-02T04:00:00,-03:00,-03 -2023-03-26T03:00:00,-04:00,-04 -2023-10-01T04:00:00,-03:00,-03 -2024-03-24T03:00:00,-04:00,-04 -2024-10-06T04:00:00,-03:00,-03 -2024-10-15T03:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-atikokan.hoon b/desk/lib/pytz/america-atikokan.hoon deleted file mode 100644 index 7980a7b..0000000 --- a/desk/lib/pytz/america-atikokan.hoon +++ /dev/null @@ -1,11 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-04-14T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1940-09-29T06:00:00,-05:00,CDT -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-atka.hoon b/desk/lib/pytz/america-atka.hoon deleted file mode 100644 index 77695c8..0000000 --- a/desk/lib/pytz/america-atka.hoon +++ /dev/null @@ -1,149 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:13,LMT -1901-12-13T20:45:52,-11:00,NST -1942-02-09T13:00:00,-10:00,NWT -1945-08-14T23:00:00,-10:00,NPT -1945-09-30T12:00:00,-11:00,NST -1967-04-01T11:00:00,-11:00,BST -1969-04-27T13:00:00,-10:00,BDT -1969-10-26T12:00:00,-11:00,BST -1970-04-26T13:00:00,-10:00,BDT -1970-10-25T12:00:00,-11:00,BST -1971-04-25T13:00:00,-10:00,BDT -1971-10-31T12:00:00,-11:00,BST -1972-04-30T13:00:00,-10:00,BDT -1972-10-29T12:00:00,-11:00,BST -1973-04-29T13:00:00,-10:00,BDT -1973-10-28T12:00:00,-11:00,BST -1974-01-06T13:00:00,-10:00,BDT -1974-10-27T12:00:00,-11:00,BST -1975-02-23T13:00:00,-10:00,BDT -1975-10-26T12:00:00,-11:00,BST -1976-04-25T13:00:00,-10:00,BDT -1976-10-31T12:00:00,-11:00,BST -1977-04-24T13:00:00,-10:00,BDT -1977-10-30T12:00:00,-11:00,BST -1978-04-30T13:00:00,-10:00,BDT -1978-10-29T12:00:00,-11:00,BST -1979-04-29T13:00:00,-10:00,BDT -1979-10-28T12:00:00,-11:00,BST -1980-04-27T13:00:00,-10:00,BDT -1980-10-26T12:00:00,-11:00,BST -1981-04-26T13:00:00,-10:00,BDT -1981-10-25T12:00:00,-11:00,BST -1982-04-25T13:00:00,-10:00,BDT -1982-10-31T12:00:00,-11:00,BST -1983-04-24T13:00:00,-10:00,BDT -1983-10-30T12:00:00,-10:00,AHST -1983-11-30T10:00:00,-10:00,HST -1984-04-29T12:00:00,-09:00,HDT -1984-10-28T11:00:00,-10:00,HST -1985-04-28T12:00:00,-09:00,HDT -1985-10-27T11:00:00,-10:00,HST -1986-04-27T12:00:00,-09:00,HDT -1986-10-26T11:00:00,-10:00,HST -1987-04-05T12:00:00,-09:00,HDT -1987-10-25T11:00:00,-10:00,HST -1988-04-03T12:00:00,-09:00,HDT -1988-10-30T11:00:00,-10:00,HST -1989-04-02T12:00:00,-09:00,HDT -1989-10-29T11:00:00,-10:00,HST -1990-04-01T12:00:00,-09:00,HDT -1990-10-28T11:00:00,-10:00,HST -1991-04-07T12:00:00,-09:00,HDT -1991-10-27T11:00:00,-10:00,HST -1992-04-05T12:00:00,-09:00,HDT -1992-10-25T11:00:00,-10:00,HST -1993-04-04T12:00:00,-09:00,HDT -1993-10-31T11:00:00,-10:00,HST -1994-04-03T12:00:00,-09:00,HDT -1994-10-30T11:00:00,-10:00,HST -1995-04-02T12:00:00,-09:00,HDT -1995-10-29T11:00:00,-10:00,HST -1996-04-07T12:00:00,-09:00,HDT -1996-10-27T11:00:00,-10:00,HST -1997-04-06T12:00:00,-09:00,HDT -1997-10-26T11:00:00,-10:00,HST -1998-04-05T12:00:00,-09:00,HDT -1998-10-25T11:00:00,-10:00,HST -1999-04-04T12:00:00,-09:00,HDT -1999-10-31T11:00:00,-10:00,HST -2000-04-02T12:00:00,-09:00,HDT -2000-10-29T11:00:00,-10:00,HST -2001-04-01T12:00:00,-09:00,HDT -2001-10-28T11:00:00,-10:00,HST -2002-04-07T12:00:00,-09:00,HDT -2002-10-27T11:00:00,-10:00,HST -2003-04-06T12:00:00,-09:00,HDT -2003-10-26T11:00:00,-10:00,HST -2004-04-04T12:00:00,-09:00,HDT -2004-10-31T11:00:00,-10:00,HST -2005-04-03T12:00:00,-09:00,HDT -2005-10-30T11:00:00,-10:00,HST -2006-04-02T12:00:00,-09:00,HDT -2006-10-29T11:00:00,-10:00,HST -2007-03-11T12:00:00,-09:00,HDT -2007-11-04T11:00:00,-10:00,HST -2008-03-09T12:00:00,-09:00,HDT -2008-11-02T11:00:00,-10:00,HST -2009-03-08T12:00:00,-09:00,HDT -2009-11-01T11:00:00,-10:00,HST -2010-03-14T12:00:00,-09:00,HDT -2010-11-07T11:00:00,-10:00,HST -2011-03-13T12:00:00,-09:00,HDT -2011-11-06T11:00:00,-10:00,HST -2012-03-11T12:00:00,-09:00,HDT -2012-11-04T11:00:00,-10:00,HST -2013-03-10T12:00:00,-09:00,HDT -2013-11-03T11:00:00,-10:00,HST -2014-03-09T12:00:00,-09:00,HDT -2014-11-02T11:00:00,-10:00,HST -2015-03-08T12:00:00,-09:00,HDT -2015-11-01T11:00:00,-10:00,HST -2016-03-13T12:00:00,-09:00,HDT -2016-11-06T11:00:00,-10:00,HST -2017-03-12T12:00:00,-09:00,HDT -2017-11-05T11:00:00,-10:00,HST -2018-03-11T12:00:00,-09:00,HDT -2018-11-04T11:00:00,-10:00,HST -2019-03-10T12:00:00,-09:00,HDT -2019-11-03T11:00:00,-10:00,HST -2020-03-08T12:00:00,-09:00,HDT -2020-11-01T11:00:00,-10:00,HST -2021-03-14T12:00:00,-09:00,HDT -2021-11-07T11:00:00,-10:00,HST -2022-03-13T12:00:00,-09:00,HDT -2022-11-06T11:00:00,-10:00,HST -2023-03-12T12:00:00,-09:00,HDT -2023-11-05T11:00:00,-10:00,HST -2024-03-10T12:00:00,-09:00,HDT -2024-11-03T11:00:00,-10:00,HST -2025-03-09T12:00:00,-09:00,HDT -2025-11-02T11:00:00,-10:00,HST -2026-03-08T12:00:00,-09:00,HDT -2026-11-01T11:00:00,-10:00,HST -2027-03-14T12:00:00,-09:00,HDT -2027-11-07T11:00:00,-10:00,HST -2028-03-12T12:00:00,-09:00,HDT -2028-11-05T11:00:00,-10:00,HST -2029-03-11T12:00:00,-09:00,HDT -2029-11-04T11:00:00,-10:00,HST -2030-03-10T12:00:00,-09:00,HDT -2030-11-03T11:00:00,-10:00,HST -2031-03-09T12:00:00,-09:00,HDT -2031-11-02T11:00:00,-10:00,HST -2032-03-14T12:00:00,-09:00,HDT -2032-11-07T11:00:00,-10:00,HST -2033-03-13T12:00:00,-09:00,HDT -2033-11-06T11:00:00,-10:00,HST -2034-03-12T12:00:00,-09:00,HDT -2034-11-05T11:00:00,-10:00,HST -2035-03-11T12:00:00,-09:00,HDT -2035-11-04T11:00:00,-10:00,HST -2036-03-09T12:00:00,-09:00,HDT -2036-11-02T11:00:00,-10:00,HST -2037-03-08T12:00:00,-09:00,HDT -2037-11-01T11:00:00,-10:00,HST -''' diff --git a/desk/lib/pytz/america-bahia-banderas.hoon b/desk/lib/pytz/america-bahia-banderas.hoon deleted file mode 100644 index a074ead..0000000 --- a/desk/lib/pytz/america-bahia-banderas.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1927-06-10T07:00:00,-06:00,CST -1930-11-15T06:00:00,-07:00,MST -1931-04-30T07:00:00,-06:00,MDT -1931-10-01T06:00:00,-07:00,MST -1932-04-01T07:00:00,-06:00,CST -1942-04-24T06:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-05-06T09:00:00,-06:00,MDT -2001-09-30T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-04-01T09:00:00,-06:00,MDT -2007-10-28T08:00:00,-07:00,MST -2008-04-06T09:00:00,-06:00,MDT -2008-10-26T08:00:00,-07:00,MST -2009-04-05T09:00:00,-06:00,MDT -2009-10-25T08:00:00,-07:00,MST -2010-04-04T09:00:00,-05:00,CDT -2010-10-31T07:00:00,-06:00,CST -2011-04-03T08:00:00,-05:00,CDT -2011-10-30T07:00:00,-06:00,CST -2012-04-01T08:00:00,-05:00,CDT -2012-10-28T07:00:00,-06:00,CST -2013-04-07T08:00:00,-05:00,CDT -2013-10-27T07:00:00,-06:00,CST -2014-04-06T08:00:00,-05:00,CDT -2014-10-26T07:00:00,-06:00,CST -2015-04-05T08:00:00,-05:00,CDT -2015-10-25T07:00:00,-06:00,CST -2016-04-03T08:00:00,-05:00,CDT -2016-10-30T07:00:00,-06:00,CST -2017-04-02T08:00:00,-05:00,CDT -2017-10-29T07:00:00,-06:00,CST -2018-04-01T08:00:00,-05:00,CDT -2018-10-28T07:00:00,-06:00,CST -2019-04-07T08:00:00,-05:00,CDT -2019-10-27T07:00:00,-06:00,CST -2020-04-05T08:00:00,-05:00,CDT -2020-10-25T07:00:00,-06:00,CST -2021-04-04T08:00:00,-05:00,CDT -2021-10-31T07:00:00,-06:00,CST -2022-04-03T08:00:00,-05:00,CDT -2022-10-30T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-bahia.hoon b/desk/lib/pytz/america-bahia.hoon deleted file mode 100644 index de354b0..0000000 --- a/desk/lib/pytz/america-bahia.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T02:34:04,-03:00,-03 -1931-10-03T14:00:00,-02:00,-02 -1932-04-01T02:00:00,-03:00,-03 -1932-10-03T03:00:00,-02:00,-02 -1933-04-01T02:00:00,-03:00,-03 -1949-12-01T03:00:00,-02:00,-02 -1950-04-16T03:00:00,-03:00,-03 -1950-12-01T03:00:00,-02:00,-02 -1951-04-01T02:00:00,-03:00,-03 -1951-12-01T03:00:00,-02:00,-02 -1952-04-01T02:00:00,-03:00,-03 -1952-12-01T03:00:00,-02:00,-02 -1953-03-01T02:00:00,-03:00,-03 -1963-12-09T03:00:00,-02:00,-02 -1964-03-01T02:00:00,-03:00,-03 -1965-01-31T03:00:00,-02:00,-02 -1965-03-31T02:00:00,-03:00,-03 -1965-12-01T03:00:00,-02:00,-02 -1966-03-01T02:00:00,-03:00,-03 -1966-11-01T03:00:00,-02:00,-02 -1967-03-01T02:00:00,-03:00,-03 -1967-11-01T03:00:00,-02:00,-02 -1968-03-01T02:00:00,-03:00,-03 -1985-11-02T03:00:00,-02:00,-02 -1986-03-15T02:00:00,-03:00,-03 -1986-10-25T03:00:00,-02:00,-02 -1987-02-14T02:00:00,-03:00,-03 -1987-10-25T03:00:00,-02:00,-02 -1988-02-07T02:00:00,-03:00,-03 -1988-10-16T03:00:00,-02:00,-02 -1989-01-29T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-02-11T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-02-17T02:00:00,-03:00,-03 -1991-10-20T03:00:00,-02:00,-02 -1992-02-09T02:00:00,-03:00,-03 -1992-10-25T03:00:00,-02:00,-02 -1993-01-31T02:00:00,-03:00,-03 -1993-10-17T03:00:00,-02:00,-02 -1994-02-20T02:00:00,-03:00,-03 -1994-10-16T03:00:00,-02:00,-02 -1995-02-19T02:00:00,-03:00,-03 -1995-10-15T03:00:00,-02:00,-02 -1996-02-11T02:00:00,-03:00,-03 -1996-10-06T03:00:00,-02:00,-02 -1997-02-16T02:00:00,-03:00,-03 -1997-10-06T03:00:00,-02:00,-02 -1998-03-01T02:00:00,-03:00,-03 -1998-10-11T03:00:00,-02:00,-02 -1999-02-21T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-02:00,-02 -2000-02-27T02:00:00,-03:00,-03 -2000-10-08T03:00:00,-02:00,-02 -2001-02-18T02:00:00,-03:00,-03 -2001-10-14T03:00:00,-02:00,-02 -2002-02-17T02:00:00,-03:00,-03 -2002-11-03T03:00:00,-02:00,-02 -2003-02-16T02:00:00,-03:00,-03 -2011-10-16T03:00:00,-02:00,-02 -2012-02-26T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-barbados.hoon b/desk/lib/pytz/america-barbados.hoon deleted file mode 100644 index a080ff1..0000000 --- a/desk/lib/pytz/america-barbados.hoon +++ /dev/null @@ -1,19 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-08-28T03:58:29,-04:00,AST -1942-04-19T05:00:00,-03:00,ADT -1942-08-31T06:00:00,-04:00,AST -1943-05-02T05:00:00,-03:00,ADT -1943-09-05T06:00:00,-04:00,AST -1944-04-10T05:00:00,-04:30,-0330 -1944-09-10T06:00:00,-04:00,AST -1977-06-12T06:00:00,-03:00,ADT -1977-10-02T05:00:00,-04:00,AST -1978-04-16T06:00:00,-03:00,ADT -1978-10-01T05:00:00,-04:00,AST -1979-04-15T06:00:00,-03:00,ADT -1979-09-30T05:00:00,-04:00,AST -1980-04-20T06:00:00,-03:00,ADT -1980-09-25T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-belem.hoon b/desk/lib/pytz/america-belem.hoon deleted file mode 100644 index 9025ec8..0000000 --- a/desk/lib/pytz/america-belem.hoon +++ /dev/null @@ -1,33 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T03:13:56,-03:00,-03 -1931-10-03T14:00:00,-02:00,-02 -1932-04-01T02:00:00,-03:00,-03 -1932-10-03T03:00:00,-02:00,-02 -1933-04-01T02:00:00,-03:00,-03 -1949-12-01T03:00:00,-02:00,-02 -1950-04-16T03:00:00,-03:00,-03 -1950-12-01T03:00:00,-02:00,-02 -1951-04-01T02:00:00,-03:00,-03 -1951-12-01T03:00:00,-02:00,-02 -1952-04-01T02:00:00,-03:00,-03 -1952-12-01T03:00:00,-02:00,-02 -1953-03-01T02:00:00,-03:00,-03 -1963-12-09T03:00:00,-02:00,-02 -1964-03-01T02:00:00,-03:00,-03 -1965-01-31T03:00:00,-02:00,-02 -1965-03-31T02:00:00,-03:00,-03 -1965-12-01T03:00:00,-02:00,-02 -1966-03-01T02:00:00,-03:00,-03 -1966-11-01T03:00:00,-02:00,-02 -1967-03-01T02:00:00,-03:00,-03 -1967-11-01T03:00:00,-02:00,-02 -1968-03-01T02:00:00,-03:00,-03 -1985-11-02T03:00:00,-02:00,-02 -1986-03-15T02:00:00,-03:00,-03 -1986-10-25T03:00:00,-02:00,-02 -1987-02-14T02:00:00,-03:00,-03 -1987-10-25T03:00:00,-02:00,-02 -1988-02-07T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-belize.hoon b/desk/lib/pytz/america-belize.hoon deleted file mode 100644 index fec72f4..0000000 --- a/desk/lib/pytz/america-belize.hoon +++ /dev/null @@ -1,102 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-04-01T05:52:48,-06:00,CST -1918-10-06T06:00:00,-06:30,-0530 -1919-02-09T05:30:00,-06:00,CST -1919-10-05T06:00:00,-06:30,-0530 -1920-02-15T05:30:00,-06:00,CST -1920-10-03T06:00:00,-06:30,-0530 -1921-02-13T05:30:00,-06:00,CST -1921-10-02T06:00:00,-06:30,-0530 -1922-02-12T05:30:00,-06:00,CST -1922-10-08T06:00:00,-06:30,-0530 -1923-02-11T05:30:00,-06:00,CST -1923-10-07T06:00:00,-06:30,-0530 -1924-02-10T05:30:00,-06:00,CST -1924-10-05T06:00:00,-06:30,-0530 -1925-02-15T05:30:00,-06:00,CST -1925-10-04T06:00:00,-06:30,-0530 -1926-02-14T05:30:00,-06:00,CST -1926-10-03T06:00:00,-06:30,-0530 -1927-02-13T05:30:00,-06:00,CST -1927-10-02T06:00:00,-06:30,-0530 -1928-02-12T05:30:00,-06:00,CST -1928-10-07T06:00:00,-06:30,-0530 -1929-02-10T05:30:00,-06:00,CST -1929-10-06T06:00:00,-06:30,-0530 -1930-02-09T05:30:00,-06:00,CST -1930-10-05T06:00:00,-06:30,-0530 -1931-02-15T05:30:00,-06:00,CST -1931-10-04T06:00:00,-06:30,-0530 -1932-02-14T05:30:00,-06:00,CST -1932-10-02T06:00:00,-06:30,-0530 -1933-02-12T05:30:00,-06:00,CST -1933-10-08T06:00:00,-06:30,-0530 -1934-02-11T05:30:00,-06:00,CST -1934-10-07T06:00:00,-06:30,-0530 -1935-02-10T05:30:00,-06:00,CST -1935-10-06T06:00:00,-06:30,-0530 -1936-02-09T05:30:00,-06:00,CST -1936-10-04T06:00:00,-06:30,-0530 -1937-02-14T05:30:00,-06:00,CST -1937-10-03T06:00:00,-06:30,-0530 -1938-02-13T05:30:00,-06:00,CST -1938-10-02T06:00:00,-06:30,-0530 -1939-02-12T05:30:00,-06:00,CST -1939-10-08T06:00:00,-06:30,-0530 -1940-02-11T05:30:00,-06:00,CST -1940-10-06T06:00:00,-06:30,-0530 -1941-02-09T05:30:00,-06:00,CST -1941-10-05T06:00:00,-06:30,-0530 -1942-02-15T05:30:00,-06:00,CST -1942-06-28T06:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-12-16T05:00:00,-06:00,CST -1947-10-05T06:00:00,-06:30,-0530 -1948-02-15T05:30:00,-06:00,CST -1948-10-03T06:00:00,-06:30,-0530 -1949-02-13T05:30:00,-06:00,CST -1949-10-02T06:00:00,-06:30,-0530 -1950-02-12T05:30:00,-06:00,CST -1950-10-08T06:00:00,-06:30,-0530 -1951-02-11T05:30:00,-06:00,CST -1951-10-07T06:00:00,-06:30,-0530 -1952-02-10T05:30:00,-06:00,CST -1952-10-05T06:00:00,-06:30,-0530 -1953-02-15T05:30:00,-06:00,CST -1953-10-04T06:00:00,-06:30,-0530 -1954-02-14T05:30:00,-06:00,CST -1954-10-03T06:00:00,-06:30,-0530 -1955-02-13T05:30:00,-06:00,CST -1955-10-02T06:00:00,-06:30,-0530 -1956-02-12T05:30:00,-06:00,CST -1956-10-07T06:00:00,-06:30,-0530 -1957-02-10T05:30:00,-06:00,CST -1957-10-06T06:00:00,-06:30,-0530 -1958-02-09T05:30:00,-06:00,CST -1958-10-05T06:00:00,-06:30,-0530 -1959-02-15T05:30:00,-06:00,CST -1959-10-04T06:00:00,-06:30,-0530 -1960-02-14T05:30:00,-06:00,CST -1960-10-02T06:00:00,-06:30,-0530 -1961-02-12T05:30:00,-06:00,CST -1961-10-08T06:00:00,-06:30,-0530 -1962-02-11T05:30:00,-06:00,CST -1962-10-07T06:00:00,-06:30,-0530 -1963-02-10T05:30:00,-06:00,CST -1963-10-06T06:00:00,-06:30,-0530 -1964-02-09T05:30:00,-06:00,CST -1964-10-04T06:00:00,-06:30,-0530 -1965-02-14T05:30:00,-06:00,CST -1965-10-03T06:00:00,-06:30,-0530 -1966-02-13T05:30:00,-06:00,CST -1966-10-02T06:00:00,-06:30,-0530 -1967-02-12T05:30:00,-06:00,CST -1967-10-08T06:00:00,-06:30,-0530 -1968-02-11T05:30:00,-06:00,CST -1973-12-05T06:00:00,-05:00,CDT -1974-02-09T05:00:00,-06:00,CST -1982-12-18T06:00:00,-05:00,CDT -1983-02-12T05:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-blanc-sablon.hoon b/desk/lib/pytz/america-blanc-sablon.hoon deleted file mode 100644 index ad8b756..0000000 --- a/desk/lib/pytz/america-blanc-sablon.hoon +++ /dev/null @@ -1,10 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-04:00,AST -1918-04-14T06:00:00,-03:00,ADT -1918-10-27T05:00:00,-04:00,AST -1942-02-09T06:00:00,-03:00,AWT -1945-08-14T23:00:00,-03:00,APT -1945-09-30T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-boa-vista.hoon b/desk/lib/pytz/america-boa-vista.hoon deleted file mode 100644 index 59266b5..0000000 --- a/desk/lib/pytz/america-boa-vista.hoon +++ /dev/null @@ -1,37 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T04:02:40,-04:00,-04 -1931-10-03T15:00:00,-03:00,-03 -1932-04-01T03:00:00,-04:00,-04 -1932-10-03T04:00:00,-03:00,-03 -1933-04-01T03:00:00,-04:00,-04 -1949-12-01T04:00:00,-03:00,-03 -1950-04-16T04:00:00,-04:00,-04 -1950-12-01T04:00:00,-03:00,-03 -1951-04-01T03:00:00,-04:00,-04 -1951-12-01T04:00:00,-03:00,-03 -1952-04-01T03:00:00,-04:00,-04 -1952-12-01T04:00:00,-03:00,-03 -1953-03-01T03:00:00,-04:00,-04 -1963-12-09T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1965-01-31T04:00:00,-03:00,-03 -1965-03-31T03:00:00,-04:00,-04 -1965-12-01T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-11-01T04:00:00,-03:00,-03 -1967-03-01T03:00:00,-04:00,-04 -1967-11-01T04:00:00,-03:00,-03 -1968-03-01T03:00:00,-04:00,-04 -1985-11-02T04:00:00,-03:00,-03 -1986-03-15T03:00:00,-04:00,-04 -1986-10-25T04:00:00,-03:00,-03 -1987-02-14T03:00:00,-04:00,-04 -1987-10-25T04:00:00,-03:00,-03 -1988-02-07T03:00:00,-04:00,-04 -1999-10-03T04:00:00,-03:00,-03 -2000-02-27T03:00:00,-04:00,-04 -2000-10-08T04:00:00,-03:00,-03 -2000-10-15T03:00:00,-04:00,-04 -''' diff --git a/desk/lib/pytz/america-bogota.hoon b/desk/lib/pytz/america-bogota.hoon deleted file mode 100644 index 4cd9ea4..0000000 --- a/desk/lib/pytz/america-bogota.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:04,BMT -1914-11-23T04:56:16,-05:00,-05 -1992-05-03T05:00:00,-04:00,-04 -1993-02-07T04:00:00,-05:00,-05 -''' diff --git a/desk/lib/pytz/america-boise.hoon b/desk/lib/pytz/america-boise.hoon deleted file mode 100644 index c118ff0..0000000 --- a/desk/lib/pytz/america-boise.hoon +++ /dev/null @@ -1,155 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-08:00,PST -1918-03-31T10:00:00,-07:00,PDT -1918-10-27T09:00:00,-08:00,PST -1919-03-30T10:00:00,-07:00,PDT -1919-10-26T09:00:00,-08:00,PST -1923-05-13T10:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1967-04-30T09:00:00,-06:00,MDT -1967-10-29T08:00:00,-07:00,MST -1968-04-28T09:00:00,-06:00,MDT -1968-10-27T08:00:00,-07:00,MST -1969-04-27T09:00:00,-06:00,MDT -1969-10-26T08:00:00,-07:00,MST -1970-04-26T09:00:00,-06:00,MDT -1970-10-25T08:00:00,-07:00,MST -1971-04-25T09:00:00,-06:00,MDT -1971-10-31T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,MDT -1972-10-29T08:00:00,-07:00,MST -1973-04-29T09:00:00,-06:00,MDT -1973-10-28T08:00:00,-07:00,MST -1974-02-03T09:00:00,-06:00,MDT -1974-10-27T08:00:00,-07:00,MST -1975-02-23T09:00:00,-06:00,MDT -1975-10-26T08:00:00,-07:00,MST -1976-04-25T09:00:00,-06:00,MDT -1976-10-31T08:00:00,-07:00,MST -1977-04-24T09:00:00,-06:00,MDT -1977-10-30T08:00:00,-07:00,MST -1978-04-30T09:00:00,-06:00,MDT -1978-10-29T08:00:00,-07:00,MST -1979-04-29T09:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-07:00,MST -1993-04-04T09:00:00,-06:00,MDT -1993-10-31T08:00:00,-07:00,MST -1994-04-03T09:00:00,-06:00,MDT -1994-10-30T08:00:00,-07:00,MST -1995-04-02T09:00:00,-06:00,MDT -1995-10-29T08:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-04-01T09:00:00,-06:00,MDT -2001-10-28T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-03-11T09:00:00,-06:00,MDT -2007-11-04T08:00:00,-07:00,MST -2008-03-09T09:00:00,-06:00,MDT -2008-11-02T08:00:00,-07:00,MST -2009-03-08T09:00:00,-06:00,MDT -2009-11-01T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-07:00,MST -2011-03-13T09:00:00,-06:00,MDT -2011-11-06T08:00:00,-07:00,MST -2012-03-11T09:00:00,-06:00,MDT -2012-11-04T08:00:00,-07:00,MST -2013-03-10T09:00:00,-06:00,MDT -2013-11-03T08:00:00,-07:00,MST -2014-03-09T09:00:00,-06:00,MDT -2014-11-02T08:00:00,-07:00,MST -2015-03-08T09:00:00,-06:00,MDT -2015-11-01T08:00:00,-07:00,MST -2016-03-13T09:00:00,-06:00,MDT -2016-11-06T08:00:00,-07:00,MST -2017-03-12T09:00:00,-06:00,MDT -2017-11-05T08:00:00,-07:00,MST -2018-03-11T09:00:00,-06:00,MDT -2018-11-04T08:00:00,-07:00,MST -2019-03-10T09:00:00,-06:00,MDT -2019-11-03T08:00:00,-07:00,MST -2020-03-08T09:00:00,-06:00,MDT -2020-11-01T08:00:00,-07:00,MST -2021-03-14T09:00:00,-06:00,MDT -2021-11-07T08:00:00,-07:00,MST -2022-03-13T09:00:00,-06:00,MDT -2022-11-06T08:00:00,-07:00,MST -2023-03-12T09:00:00,-06:00,MDT -2023-11-05T08:00:00,-07:00,MST -2024-03-10T09:00:00,-06:00,MDT -2024-11-03T08:00:00,-07:00,MST -2025-03-09T09:00:00,-06:00,MDT -2025-11-02T08:00:00,-07:00,MST -2026-03-08T09:00:00,-06:00,MDT -2026-11-01T08:00:00,-07:00,MST -2027-03-14T09:00:00,-06:00,MDT -2027-11-07T08:00:00,-07:00,MST -2028-03-12T09:00:00,-06:00,MDT -2028-11-05T08:00:00,-07:00,MST -2029-03-11T09:00:00,-06:00,MDT -2029-11-04T08:00:00,-07:00,MST -2030-03-10T09:00:00,-06:00,MDT -2030-11-03T08:00:00,-07:00,MST -2031-03-09T09:00:00,-06:00,MDT -2031-11-02T08:00:00,-07:00,MST -2032-03-14T09:00:00,-06:00,MDT -2032-11-07T08:00:00,-07:00,MST -2033-03-13T09:00:00,-06:00,MDT -2033-11-06T08:00:00,-07:00,MST -2034-03-12T09:00:00,-06:00,MDT -2034-11-05T08:00:00,-07:00,MST -2035-03-11T09:00:00,-06:00,MDT -2035-11-04T08:00:00,-07:00,MST -2036-03-09T09:00:00,-06:00,MDT -2036-11-02T08:00:00,-07:00,MST -2037-03-08T09:00:00,-06:00,MDT -2037-11-01T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-cambridge-bay.hoon b/desk/lib/pytz/america-cambridge-bay.hoon deleted file mode 100644 index dc93285..0000000 --- a/desk/lib/pytz/america-cambridge-bay.hoon +++ /dev/null @@ -1,142 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1920-01-01T00:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,MDT -1972-10-29T08:00:00,-07:00,MST -1973-04-29T09:00:00,-06:00,MDT -1973-10-28T08:00:00,-07:00,MST -1974-04-28T09:00:00,-06:00,MDT -1974-10-27T08:00:00,-07:00,MST -1975-04-27T09:00:00,-06:00,MDT -1975-10-26T08:00:00,-07:00,MST -1976-04-25T09:00:00,-06:00,MDT -1976-10-31T08:00:00,-07:00,MST -1977-04-24T09:00:00,-06:00,MDT -1977-10-30T08:00:00,-07:00,MST -1978-04-30T09:00:00,-06:00,MDT -1978-10-29T08:00:00,-07:00,MST -1979-04-29T09:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-07:00,MST -1993-04-04T09:00:00,-06:00,MDT -1993-10-31T08:00:00,-07:00,MST -1994-04-03T09:00:00,-06:00,MDT -1994-10-30T08:00:00,-07:00,MST -1995-04-02T09:00:00,-06:00,MDT -1995-10-29T08:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-05:00,EST -2000-11-05T05:00:00,-06:00,CST -2001-04-01T09:00:00,-06:00,MDT -2001-10-28T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-03-11T09:00:00,-06:00,MDT -2007-11-04T08:00:00,-07:00,MST -2008-03-09T09:00:00,-06:00,MDT -2008-11-02T08:00:00,-07:00,MST -2009-03-08T09:00:00,-06:00,MDT -2009-11-01T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-07:00,MST -2011-03-13T09:00:00,-06:00,MDT -2011-11-06T08:00:00,-07:00,MST -2012-03-11T09:00:00,-06:00,MDT -2012-11-04T08:00:00,-07:00,MST -2013-03-10T09:00:00,-06:00,MDT -2013-11-03T08:00:00,-07:00,MST -2014-03-09T09:00:00,-06:00,MDT -2014-11-02T08:00:00,-07:00,MST -2015-03-08T09:00:00,-06:00,MDT -2015-11-01T08:00:00,-07:00,MST -2016-03-13T09:00:00,-06:00,MDT -2016-11-06T08:00:00,-07:00,MST -2017-03-12T09:00:00,-06:00,MDT -2017-11-05T08:00:00,-07:00,MST -2018-03-11T09:00:00,-06:00,MDT -2018-11-04T08:00:00,-07:00,MST -2019-03-10T09:00:00,-06:00,MDT -2019-11-03T08:00:00,-07:00,MST -2020-03-08T09:00:00,-06:00,MDT -2020-11-01T08:00:00,-07:00,MST -2021-03-14T09:00:00,-06:00,MDT -2021-11-07T08:00:00,-07:00,MST -2022-03-13T09:00:00,-06:00,MDT -2022-11-06T08:00:00,-07:00,MST -2023-03-12T09:00:00,-06:00,MDT -2023-11-05T08:00:00,-07:00,MST -2024-03-10T09:00:00,-06:00,MDT -2024-11-03T08:00:00,-07:00,MST -2025-03-09T09:00:00,-06:00,MDT -2025-11-02T08:00:00,-07:00,MST -2026-03-08T09:00:00,-06:00,MDT -2026-11-01T08:00:00,-07:00,MST -2027-03-14T09:00:00,-06:00,MDT -2027-11-07T08:00:00,-07:00,MST -2028-03-12T09:00:00,-06:00,MDT -2028-11-05T08:00:00,-07:00,MST -2029-03-11T09:00:00,-06:00,MDT -2029-11-04T08:00:00,-07:00,MST -2030-03-10T09:00:00,-06:00,MDT -2030-11-03T08:00:00,-07:00,MST -2031-03-09T09:00:00,-06:00,MDT -2031-11-02T08:00:00,-07:00,MST -2032-03-14T09:00:00,-06:00,MDT -2032-11-07T08:00:00,-07:00,MST -2033-03-13T09:00:00,-06:00,MDT -2033-11-06T08:00:00,-07:00,MST -2034-03-12T09:00:00,-06:00,MDT -2034-11-05T08:00:00,-07:00,MST -2035-03-11T09:00:00,-06:00,MDT -2035-11-04T08:00:00,-07:00,MST -2036-03-09T09:00:00,-06:00,MDT -2036-11-02T08:00:00,-07:00,MST -2037-03-08T09:00:00,-06:00,MDT -2037-11-01T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-campo-grande.hoon b/desk/lib/pytz/america-campo-grande.hoon deleted file mode 100644 index 8dd8bb0..0000000 --- a/desk/lib/pytz/america-campo-grande.hoon +++ /dev/null @@ -1,95 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T03:38:28,-04:00,-04 -1931-10-03T15:00:00,-03:00,-03 -1932-04-01T03:00:00,-04:00,-04 -1932-10-03T04:00:00,-03:00,-03 -1933-04-01T03:00:00,-04:00,-04 -1949-12-01T04:00:00,-03:00,-03 -1950-04-16T04:00:00,-04:00,-04 -1950-12-01T04:00:00,-03:00,-03 -1951-04-01T03:00:00,-04:00,-04 -1951-12-01T04:00:00,-03:00,-03 -1952-04-01T03:00:00,-04:00,-04 -1952-12-01T04:00:00,-03:00,-03 -1953-03-01T03:00:00,-04:00,-04 -1963-12-09T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1965-01-31T04:00:00,-03:00,-03 -1965-03-31T03:00:00,-04:00,-04 -1965-12-01T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-11-01T04:00:00,-03:00,-03 -1967-03-01T03:00:00,-04:00,-04 -1967-11-01T04:00:00,-03:00,-03 -1968-03-01T03:00:00,-04:00,-04 -1985-11-02T04:00:00,-03:00,-03 -1986-03-15T03:00:00,-04:00,-04 -1986-10-25T04:00:00,-03:00,-03 -1987-02-14T03:00:00,-04:00,-04 -1987-10-25T04:00:00,-03:00,-03 -1988-02-07T03:00:00,-04:00,-04 -1988-10-16T04:00:00,-03:00,-03 -1989-01-29T03:00:00,-04:00,-04 -1989-10-15T04:00:00,-03:00,-03 -1990-02-11T03:00:00,-04:00,-04 -1990-10-21T04:00:00,-03:00,-03 -1991-02-17T03:00:00,-04:00,-04 -1991-10-20T04:00:00,-03:00,-03 -1992-02-09T03:00:00,-04:00,-04 -1992-10-25T04:00:00,-03:00,-03 -1993-01-31T03:00:00,-04:00,-04 -1993-10-17T04:00:00,-03:00,-03 -1994-02-20T03:00:00,-04:00,-04 -1994-10-16T04:00:00,-03:00,-03 -1995-02-19T03:00:00,-04:00,-04 -1995-10-15T04:00:00,-03:00,-03 -1996-02-11T03:00:00,-04:00,-04 -1996-10-06T04:00:00,-03:00,-03 -1997-02-16T03:00:00,-04:00,-04 -1997-10-06T04:00:00,-03:00,-03 -1998-03-01T03:00:00,-04:00,-04 -1998-10-11T04:00:00,-03:00,-03 -1999-02-21T03:00:00,-04:00,-04 -1999-10-03T04:00:00,-03:00,-03 -2000-02-27T03:00:00,-04:00,-04 -2000-10-08T04:00:00,-03:00,-03 -2001-02-18T03:00:00,-04:00,-04 -2001-10-14T04:00:00,-03:00,-03 -2002-02-17T03:00:00,-04:00,-04 -2002-11-03T04:00:00,-03:00,-03 -2003-02-16T03:00:00,-04:00,-04 -2003-10-19T04:00:00,-03:00,-03 -2004-02-15T03:00:00,-04:00,-04 -2004-11-02T04:00:00,-03:00,-03 -2005-02-20T03:00:00,-04:00,-04 -2005-10-16T04:00:00,-03:00,-03 -2006-02-19T03:00:00,-04:00,-04 -2006-11-05T04:00:00,-03:00,-03 -2007-02-25T03:00:00,-04:00,-04 -2007-10-14T04:00:00,-03:00,-03 -2008-02-17T03:00:00,-04:00,-04 -2008-10-19T04:00:00,-03:00,-03 -2009-02-15T03:00:00,-04:00,-04 -2009-10-18T04:00:00,-03:00,-03 -2010-02-21T03:00:00,-04:00,-04 -2010-10-17T04:00:00,-03:00,-03 -2011-02-20T03:00:00,-04:00,-04 -2011-10-16T04:00:00,-03:00,-03 -2012-02-26T03:00:00,-04:00,-04 -2012-10-21T04:00:00,-03:00,-03 -2013-02-17T03:00:00,-04:00,-04 -2013-10-20T04:00:00,-03:00,-03 -2014-02-16T03:00:00,-04:00,-04 -2014-10-19T04:00:00,-03:00,-03 -2015-02-22T03:00:00,-04:00,-04 -2015-10-18T04:00:00,-03:00,-03 -2016-02-21T03:00:00,-04:00,-04 -2016-10-16T04:00:00,-03:00,-03 -2017-02-19T03:00:00,-04:00,-04 -2017-10-15T04:00:00,-03:00,-03 -2018-02-18T03:00:00,-04:00,-04 -2018-11-04T04:00:00,-03:00,-03 -2019-02-17T03:00:00,-04:00,-04 -''' diff --git a/desk/lib/pytz/america-cancun.hoon b/desk/lib/pytz/america-cancun.hoon deleted file mode 100644 index db715b4..0000000 --- a/desk/lib/pytz/america-cancun.hoon +++ /dev/null @@ -1,47 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T06:00:00,-06:00,CST -1981-12-26T08:00:00,-05:00,EST -1983-01-04T05:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-08-02T06:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-06:00,CST -2001-05-06T08:00:00,-05:00,CDT -2001-09-30T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-04-01T08:00:00,-05:00,CDT -2007-10-28T07:00:00,-06:00,CST -2008-04-06T08:00:00,-05:00,CDT -2008-10-26T07:00:00,-06:00,CST -2009-04-05T08:00:00,-05:00,CDT -2009-10-25T07:00:00,-06:00,CST -2010-04-04T08:00:00,-05:00,CDT -2010-10-31T07:00:00,-06:00,CST -2011-04-03T08:00:00,-05:00,CDT -2011-10-30T07:00:00,-06:00,CST -2012-04-01T08:00:00,-05:00,CDT -2012-10-28T07:00:00,-06:00,CST -2013-04-07T08:00:00,-05:00,CDT -2013-10-27T07:00:00,-06:00,CST -2014-04-06T08:00:00,-05:00,CDT -2014-10-26T07:00:00,-06:00,CST -2015-02-01T08:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-caracas.hoon b/desk/lib/pytz/america-caracas.hoon deleted file mode 100644 index cdfcbfb..0000000 --- a/desk/lib/pytz/america-caracas.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:32,CMT -1912-02-12T04:27:40,-05:30,-0430 -1965-01-01T04:30:00,-04:00,-04 -2007-12-09T07:00:00,-05:30,-0430 -2016-05-01T07:00:00,-04:00,-04 -''' diff --git a/desk/lib/pytz/america-cayenne.hoon b/desk/lib/pytz/america-cayenne.hoon deleted file mode 100644 index 6ea0fd9..0000000 --- a/desk/lib/pytz/america-cayenne.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-07-01T03:29:20,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-cayman.hoon b/desk/lib/pytz/america-cayman.hoon deleted file mode 100644 index ee2c6be..0000000 --- a/desk/lib/pytz/america-cayman.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:53,KMT -1912-02-01T05:07:10,-05:00,EST -''' diff --git a/desk/lib/pytz/america-chicago.hoon b/desk/lib/pytz/america-chicago.hoon deleted file mode 100644 index 6cb2573..0000000 --- a/desk/lib/pytz/america-chicago.hoon +++ /dev/null @@ -1,240 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1920-06-13T08:00:00,-05:00,CDT -1920-10-31T07:00:00,-06:00,CST -1921-03-27T08:00:00,-05:00,CDT -1921-10-30T07:00:00,-06:00,CST -1922-04-30T08:00:00,-05:00,CDT -1922-09-24T07:00:00,-06:00,CST -1923-04-29T08:00:00,-05:00,CDT -1923-09-30T07:00:00,-06:00,CST -1924-04-27T08:00:00,-05:00,CDT -1924-09-28T07:00:00,-06:00,CST -1925-04-26T08:00:00,-05:00,CDT -1925-09-27T07:00:00,-06:00,CST -1926-04-25T08:00:00,-05:00,CDT -1926-09-26T07:00:00,-06:00,CST -1927-04-24T08:00:00,-05:00,CDT -1927-09-25T07:00:00,-06:00,CST -1928-04-29T08:00:00,-05:00,CDT -1928-09-30T07:00:00,-06:00,CST -1929-04-28T08:00:00,-05:00,CDT -1929-09-29T07:00:00,-06:00,CST -1930-04-27T08:00:00,-05:00,CDT -1930-09-28T07:00:00,-06:00,CST -1931-04-26T08:00:00,-05:00,CDT -1931-09-27T07:00:00,-06:00,CST -1932-04-24T08:00:00,-05:00,CDT -1932-09-25T07:00:00,-06:00,CST -1933-04-30T08:00:00,-05:00,CDT -1933-09-24T07:00:00,-06:00,CST -1934-04-29T08:00:00,-05:00,CDT -1934-09-30T07:00:00,-06:00,CST -1935-04-28T08:00:00,-05:00,CDT -1935-09-29T07:00:00,-06:00,CST -1936-03-01T08:00:00,-05:00,EST -1936-11-15T07:00:00,-06:00,CST -1937-04-25T08:00:00,-05:00,CDT -1937-09-26T07:00:00,-06:00,CST -1938-04-24T08:00:00,-05:00,CDT -1938-09-25T07:00:00,-06:00,CST -1939-04-30T08:00:00,-05:00,CDT -1939-09-24T07:00:00,-06:00,CST -1940-04-28T08:00:00,-05:00,CDT -1940-09-29T07:00:00,-06:00,CST -1941-04-27T08:00:00,-05:00,CDT -1941-09-28T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1946-04-28T08:00:00,-05:00,CDT -1946-09-29T07:00:00,-06:00,CST -1947-04-27T08:00:00,-05:00,CDT -1947-09-28T07:00:00,-06:00,CST -1948-04-25T08:00:00,-05:00,CDT -1948-09-26T07:00:00,-06:00,CST -1949-04-24T08:00:00,-05:00,CDT -1949-09-25T07:00:00,-06:00,CST -1950-04-30T08:00:00,-05:00,CDT -1950-09-24T07:00:00,-06:00,CST -1951-04-29T08:00:00,-05:00,CDT -1951-09-30T07:00:00,-06:00,CST -1952-04-27T08:00:00,-05:00,CDT -1952-09-28T07:00:00,-06:00,CST -1953-04-26T08:00:00,-05:00,CDT -1953-09-27T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,CDT -1954-09-26T07:00:00,-06:00,CST -1955-04-24T08:00:00,-05:00,CDT -1955-10-30T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-10-28T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-10-27T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-10-26T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-10-25T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-10-30T07:00:00,-06:00,CST -1961-04-30T08:00:00,-05:00,CDT -1961-10-29T07:00:00,-06:00,CST -1962-04-29T08:00:00,-05:00,CDT -1962-10-28T07:00:00,-06:00,CST -1963-04-28T08:00:00,-05:00,CDT -1963-10-27T07:00:00,-06:00,CST -1964-04-26T08:00:00,-05:00,CDT -1964-10-25T07:00:00,-06:00,CST -1965-04-25T08:00:00,-05:00,CDT -1965-10-31T07:00:00,-06:00,CST -1966-04-24T08:00:00,-05:00,CDT -1966-10-30T07:00:00,-06:00,CST -1967-04-30T08:00:00,-05:00,CDT -1967-10-29T07:00:00,-06:00,CST -1968-04-28T08:00:00,-05:00,CDT -1968-10-27T07:00:00,-06:00,CST -1969-04-27T08:00:00,-05:00,CDT -1969-10-26T07:00:00,-06:00,CST -1970-04-26T08:00:00,-05:00,CDT -1970-10-25T07:00:00,-06:00,CST -1971-04-25T08:00:00,-05:00,CDT -1971-10-31T07:00:00,-06:00,CST -1972-04-30T08:00:00,-05:00,CDT -1972-10-29T07:00:00,-06:00,CST -1973-04-29T08:00:00,-05:00,CDT -1973-10-28T07:00:00,-06:00,CST -1974-01-06T08:00:00,-05:00,CDT -1974-10-27T07:00:00,-06:00,CST -1975-02-23T08:00:00,-05:00,CDT -1975-10-26T07:00:00,-06:00,CST -1976-04-25T08:00:00,-05:00,CDT -1976-10-31T07:00:00,-06:00,CST -1977-04-24T08:00:00,-05:00,CDT -1977-10-30T07:00:00,-06:00,CST -1978-04-30T08:00:00,-05:00,CDT -1978-10-29T07:00:00,-06:00,CST -1979-04-29T08:00:00,-05:00,CDT -1979-10-28T07:00:00,-06:00,CST -1980-04-27T08:00:00,-05:00,CDT -1980-10-26T07:00:00,-06:00,CST -1981-04-26T08:00:00,-05:00,CDT -1981-10-25T07:00:00,-06:00,CST -1982-04-25T08:00:00,-05:00,CDT -1982-10-31T07:00:00,-06:00,CST -1983-04-24T08:00:00,-05:00,CDT -1983-10-30T07:00:00,-06:00,CST -1984-04-29T08:00:00,-05:00,CDT -1984-10-28T07:00:00,-06:00,CST -1985-04-28T08:00:00,-05:00,CDT -1985-10-27T07:00:00,-06:00,CST -1986-04-27T08:00:00,-05:00,CDT -1986-10-26T07:00:00,-06:00,CST -1987-04-05T08:00:00,-05:00,CDT -1987-10-25T07:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T07:00:00,-06:00,CST -1989-04-02T08:00:00,-05:00,CDT -1989-10-29T07:00:00,-06:00,CST -1990-04-01T08:00:00,-05:00,CDT -1990-10-28T07:00:00,-06:00,CST -1991-04-07T08:00:00,-05:00,CDT -1991-10-27T07:00:00,-06:00,CST -1992-04-05T08:00:00,-05:00,CDT -1992-10-25T07:00:00,-06:00,CST -1993-04-04T08:00:00,-05:00,CDT -1993-10-31T07:00:00,-06:00,CST -1994-04-03T08:00:00,-05:00,CDT -1994-10-30T07:00:00,-06:00,CST -1995-04-02T08:00:00,-05:00,CDT -1995-10-29T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-06:00,CST -2001-04-01T08:00:00,-05:00,CDT -2001-10-28T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-chihuahua.hoon b/desk/lib/pytz/america-chihuahua.hoon deleted file mode 100644 index 91e596f..0000000 --- a/desk/lib/pytz/america-chihuahua.hoon +++ /dev/null @@ -1,64 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1927-06-10T07:00:00,-06:00,CST -1930-11-15T06:00:00,-07:00,MST -1931-04-30T07:00:00,-06:00,MDT -1931-10-01T06:00:00,-07:00,MST -1932-04-01T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-05-06T09:00:00,-06:00,MDT -2001-09-30T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-04-01T09:00:00,-06:00,MDT -2007-10-28T08:00:00,-07:00,MST -2008-04-06T09:00:00,-06:00,MDT -2008-10-26T08:00:00,-07:00,MST -2009-04-05T09:00:00,-06:00,MDT -2009-10-25T08:00:00,-07:00,MST -2010-04-04T09:00:00,-06:00,MDT -2010-10-31T08:00:00,-07:00,MST -2011-04-03T09:00:00,-06:00,MDT -2011-10-30T08:00:00,-07:00,MST -2012-04-01T09:00:00,-06:00,MDT -2012-10-28T08:00:00,-07:00,MST -2013-04-07T09:00:00,-06:00,MDT -2013-10-27T08:00:00,-07:00,MST -2014-04-06T09:00:00,-06:00,MDT -2014-10-26T08:00:00,-07:00,MST -2015-04-05T09:00:00,-06:00,MDT -2015-10-25T08:00:00,-07:00,MST -2016-04-03T09:00:00,-06:00,MDT -2016-10-30T08:00:00,-07:00,MST -2017-04-02T09:00:00,-06:00,MDT -2017-10-29T08:00:00,-07:00,MST -2018-04-01T09:00:00,-06:00,MDT -2018-10-28T08:00:00,-07:00,MST -2019-04-07T09:00:00,-06:00,MDT -2019-10-27T08:00:00,-07:00,MST -2020-04-05T09:00:00,-06:00,MDT -2020-10-25T08:00:00,-07:00,MST -2021-04-04T09:00:00,-06:00,MDT -2021-10-31T08:00:00,-07:00,MST -2022-04-03T09:00:00,-06:00,MDT -2022-10-30T08:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-ciudad-juarez.hoon b/desk/lib/pytz/america-ciudad-juarez.hoon deleted file mode 100644 index b6be9a4..0000000 --- a/desk/lib/pytz/america-ciudad-juarez.hoon +++ /dev/null @@ -1,95 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1927-06-10T07:00:00,-06:00,CST -1930-11-15T06:00:00,-07:00,MST -1931-04-30T07:00:00,-06:00,MDT -1931-10-01T06:00:00,-07:00,MST -1932-04-01T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-05-06T09:00:00,-06:00,MDT -2001-09-30T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-04-01T09:00:00,-06:00,MDT -2007-10-28T08:00:00,-07:00,MST -2008-04-06T09:00:00,-06:00,MDT -2008-10-26T08:00:00,-07:00,MST -2009-04-05T09:00:00,-06:00,MDT -2009-10-25T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-07:00,MST -2011-03-13T09:00:00,-06:00,MDT -2011-11-06T08:00:00,-07:00,MST -2012-03-11T09:00:00,-06:00,MDT -2012-11-04T08:00:00,-07:00,MST -2013-03-10T09:00:00,-06:00,MDT -2013-11-03T08:00:00,-07:00,MST -2014-03-09T09:00:00,-06:00,MDT -2014-11-02T08:00:00,-07:00,MST -2015-03-08T09:00:00,-06:00,MDT -2015-11-01T08:00:00,-07:00,MST -2016-03-13T09:00:00,-06:00,MDT -2016-11-06T08:00:00,-07:00,MST -2017-03-12T09:00:00,-06:00,MDT -2017-11-05T08:00:00,-07:00,MST -2018-03-11T09:00:00,-06:00,MDT -2018-11-04T08:00:00,-07:00,MST -2019-03-10T09:00:00,-06:00,MDT -2019-11-03T08:00:00,-07:00,MST -2020-03-08T09:00:00,-06:00,MDT -2020-11-01T08:00:00,-07:00,MST -2021-03-14T09:00:00,-06:00,MDT -2021-11-07T08:00:00,-07:00,MST -2022-03-13T09:00:00,-06:00,MDT -2022-10-30T08:00:00,-06:00,CST -2022-11-30T06:00:00,-07:00,MST -2023-03-12T09:00:00,-06:00,MDT -2023-11-05T08:00:00,-07:00,MST -2024-03-10T09:00:00,-06:00,MDT -2024-11-03T08:00:00,-07:00,MST -2025-03-09T09:00:00,-06:00,MDT -2025-11-02T08:00:00,-07:00,MST -2026-03-08T09:00:00,-06:00,MDT -2026-11-01T08:00:00,-07:00,MST -2027-03-14T09:00:00,-06:00,MDT -2027-11-07T08:00:00,-07:00,MST -2028-03-12T09:00:00,-06:00,MDT -2028-11-05T08:00:00,-07:00,MST -2029-03-11T09:00:00,-06:00,MDT -2029-11-04T08:00:00,-07:00,MST -2030-03-10T09:00:00,-06:00,MDT -2030-11-03T08:00:00,-07:00,MST -2031-03-09T09:00:00,-06:00,MDT -2031-11-02T08:00:00,-07:00,MST -2032-03-14T09:00:00,-06:00,MDT -2032-11-07T08:00:00,-07:00,MST -2033-03-13T09:00:00,-06:00,MDT -2033-11-06T08:00:00,-07:00,MST -2034-03-12T09:00:00,-06:00,MDT -2034-11-05T08:00:00,-07:00,MST -2035-03-11T09:00:00,-06:00,MDT -2035-11-04T08:00:00,-07:00,MST -2036-03-09T09:00:00,-06:00,MDT -2036-11-02T08:00:00,-07:00,MST -2037-03-08T09:00:00,-06:00,MDT -2037-11-01T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-coral-harbour.hoon b/desk/lib/pytz/america-coral-harbour.hoon deleted file mode 100644 index 7980a7b..0000000 --- a/desk/lib/pytz/america-coral-harbour.hoon +++ /dev/null @@ -1,11 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-04-14T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1940-09-29T06:00:00,-05:00,CDT -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-costa-rica.hoon b/desk/lib/pytz/america-costa-rica.hoon deleted file mode 100644 index 54d866d..0000000 --- a/desk/lib/pytz/america-costa-rica.hoon +++ /dev/null @@ -1,14 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:24,SJMT -1921-01-15T05:36:13,-06:00,CST -1979-02-25T06:00:00,-05:00,CDT -1979-06-03T05:00:00,-06:00,CST -1980-02-24T06:00:00,-05:00,CDT -1980-06-01T05:00:00,-06:00,CST -1991-01-19T06:00:00,-05:00,CDT -1991-07-01T05:00:00,-06:00,CST -1992-01-18T06:00:00,-05:00,CDT -1992-03-15T05:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-coyhaique.hoon b/desk/lib/pytz/america-coyhaique.hoon deleted file mode 100644 index 7dbcd94..0000000 --- a/desk/lib/pytz/america-coyhaique.hoon +++ /dev/null @@ -1,137 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:17,SMT -1910-01-10T04:42:45,-05:00,-05 -1916-07-01T05:00:00,-05:17,SMT -1918-09-10T04:42:45,-04:00,-04 -1919-07-01T04:00:00,-05:17,SMT -1927-09-01T04:42:45,-04:00,-04 -1928-04-01T04:00:00,-05:00,-05 -1928-09-01T05:00:00,-04:00,-04 -1929-04-01T04:00:00,-05:00,-05 -1929-09-01T05:00:00,-04:00,-04 -1930-04-01T04:00:00,-05:00,-05 -1930-09-01T05:00:00,-04:00,-04 -1931-04-01T04:00:00,-05:00,-05 -1931-09-01T05:00:00,-04:00,-04 -1932-04-01T04:00:00,-05:00,-05 -1932-09-01T05:00:00,-04:00,-04 -1942-06-01T04:00:00,-05:00,-05 -1942-08-01T05:00:00,-04:00,-04 -1946-08-29T04:00:00,-04:00,-04 -1947-04-01T04:00:00,-05:00,-05 -1947-05-22T04:00:00,-04:00,-04 -1968-11-03T04:00:00,-03:00,-03 -1969-03-30T03:00:00,-04:00,-04 -1969-11-23T04:00:00,-03:00,-03 -1970-03-29T03:00:00,-04:00,-04 -1970-10-11T04:00:00,-03:00,-03 -1971-03-14T03:00:00,-04:00,-04 -1971-10-10T04:00:00,-03:00,-03 -1972-03-12T03:00:00,-04:00,-04 -1972-10-15T04:00:00,-03:00,-03 -1973-03-11T03:00:00,-04:00,-04 -1973-09-30T04:00:00,-03:00,-03 -1974-03-10T03:00:00,-04:00,-04 -1974-10-13T04:00:00,-03:00,-03 -1975-03-09T03:00:00,-04:00,-04 -1975-10-12T04:00:00,-03:00,-03 -1976-03-14T03:00:00,-04:00,-04 -1976-10-10T04:00:00,-03:00,-03 -1977-03-13T03:00:00,-04:00,-04 -1977-10-09T04:00:00,-03:00,-03 -1978-03-12T03:00:00,-04:00,-04 -1978-10-15T04:00:00,-03:00,-03 -1979-03-11T03:00:00,-04:00,-04 -1979-10-14T04:00:00,-03:00,-03 -1980-03-09T03:00:00,-04:00,-04 -1980-10-12T04:00:00,-03:00,-03 -1981-03-15T03:00:00,-04:00,-04 -1981-10-11T04:00:00,-03:00,-03 -1982-03-14T03:00:00,-04:00,-04 -1982-10-10T04:00:00,-03:00,-03 -1983-03-13T03:00:00,-04:00,-04 -1983-10-09T04:00:00,-03:00,-03 -1984-03-11T03:00:00,-04:00,-04 -1984-10-14T04:00:00,-03:00,-03 -1985-03-10T03:00:00,-04:00,-04 -1985-10-13T04:00:00,-03:00,-03 -1986-03-09T03:00:00,-04:00,-04 -1986-10-12T04:00:00,-03:00,-03 -1987-04-12T03:00:00,-04:00,-04 -1987-10-11T04:00:00,-03:00,-03 -1988-03-13T03:00:00,-04:00,-04 -1988-10-09T04:00:00,-03:00,-03 -1989-03-12T03:00:00,-04:00,-04 -1989-10-15T04:00:00,-03:00,-03 -1990-03-11T03:00:00,-04:00,-04 -1990-09-16T04:00:00,-03:00,-03 -1991-03-10T03:00:00,-04:00,-04 -1991-10-13T04:00:00,-03:00,-03 -1992-03-15T03:00:00,-04:00,-04 -1992-10-11T04:00:00,-03:00,-03 -1993-03-14T03:00:00,-04:00,-04 -1993-10-10T04:00:00,-03:00,-03 -1994-03-13T03:00:00,-04:00,-04 -1994-10-09T04:00:00,-03:00,-03 -1995-03-12T03:00:00,-04:00,-04 -1995-10-15T04:00:00,-03:00,-03 -1996-03-10T03:00:00,-04:00,-04 -1996-10-13T04:00:00,-03:00,-03 -1997-03-30T03:00:00,-04:00,-04 -1997-10-12T04:00:00,-03:00,-03 -1998-03-15T03:00:00,-04:00,-04 -1998-09-27T04:00:00,-03:00,-03 -1999-04-04T03:00:00,-04:00,-04 -1999-10-10T04:00:00,-03:00,-03 -2000-03-12T03:00:00,-04:00,-04 -2000-10-15T04:00:00,-03:00,-03 -2001-03-11T03:00:00,-04:00,-04 -2001-10-14T04:00:00,-03:00,-03 -2002-03-10T03:00:00,-04:00,-04 -2002-10-13T04:00:00,-03:00,-03 -2003-03-09T03:00:00,-04:00,-04 -2003-10-12T04:00:00,-03:00,-03 -2004-03-14T03:00:00,-04:00,-04 -2004-10-10T04:00:00,-03:00,-03 -2005-03-13T03:00:00,-04:00,-04 -2005-10-09T04:00:00,-03:00,-03 -2006-03-12T03:00:00,-04:00,-04 -2006-10-15T04:00:00,-03:00,-03 -2007-03-11T03:00:00,-04:00,-04 -2007-10-14T04:00:00,-03:00,-03 -2008-03-30T03:00:00,-04:00,-04 -2008-10-12T04:00:00,-03:00,-03 -2009-03-15T03:00:00,-04:00,-04 -2009-10-11T04:00:00,-03:00,-03 -2010-04-04T03:00:00,-04:00,-04 -2010-10-10T04:00:00,-03:00,-03 -2011-05-08T03:00:00,-04:00,-04 -2011-08-21T04:00:00,-03:00,-03 -2012-04-29T03:00:00,-04:00,-04 -2012-09-02T04:00:00,-03:00,-03 -2013-04-28T03:00:00,-04:00,-04 -2013-09-08T04:00:00,-03:00,-03 -2014-04-27T03:00:00,-04:00,-04 -2014-09-07T04:00:00,-03:00,-03 -2016-05-15T03:00:00,-04:00,-04 -2016-08-14T04:00:00,-03:00,-03 -2017-05-14T03:00:00,-04:00,-04 -2017-08-13T04:00:00,-03:00,-03 -2018-05-13T03:00:00,-04:00,-04 -2018-08-12T04:00:00,-03:00,-03 -2019-04-07T03:00:00,-04:00,-04 -2019-09-08T04:00:00,-03:00,-03 -2020-04-05T03:00:00,-04:00,-04 -2020-09-06T04:00:00,-03:00,-03 -2021-04-04T03:00:00,-04:00,-04 -2021-09-05T04:00:00,-03:00,-03 -2022-04-03T03:00:00,-04:00,-04 -2022-09-11T04:00:00,-03:00,-03 -2023-04-02T03:00:00,-04:00,-04 -2023-09-03T04:00:00,-03:00,-03 -2024-04-07T03:00:00,-04:00,-04 -2024-09-08T04:00:00,-03:00,-03 -2025-03-20T03:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-creston.hoon b/desk/lib/pytz/america-creston.hoon deleted file mode 100644 index 194b5bf..0000000 --- a/desk/lib/pytz/america-creston.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-07:00,MST -1916-10-01T07:00:00,-08:00,PST -1918-06-02T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-cuiaba.hoon b/desk/lib/pytz/america-cuiaba.hoon deleted file mode 100644 index 0d9064f..0000000 --- a/desk/lib/pytz/america-cuiaba.hoon +++ /dev/null @@ -1,93 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T03:44:20,-04:00,-04 -1931-10-03T15:00:00,-03:00,-03 -1932-04-01T03:00:00,-04:00,-04 -1932-10-03T04:00:00,-03:00,-03 -1933-04-01T03:00:00,-04:00,-04 -1949-12-01T04:00:00,-03:00,-03 -1950-04-16T04:00:00,-04:00,-04 -1950-12-01T04:00:00,-03:00,-03 -1951-04-01T03:00:00,-04:00,-04 -1951-12-01T04:00:00,-03:00,-03 -1952-04-01T03:00:00,-04:00,-04 -1952-12-01T04:00:00,-03:00,-03 -1953-03-01T03:00:00,-04:00,-04 -1963-12-09T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1965-01-31T04:00:00,-03:00,-03 -1965-03-31T03:00:00,-04:00,-04 -1965-12-01T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-11-01T04:00:00,-03:00,-03 -1967-03-01T03:00:00,-04:00,-04 -1967-11-01T04:00:00,-03:00,-03 -1968-03-01T03:00:00,-04:00,-04 -1985-11-02T04:00:00,-03:00,-03 -1986-03-15T03:00:00,-04:00,-04 -1986-10-25T04:00:00,-03:00,-03 -1987-02-14T03:00:00,-04:00,-04 -1987-10-25T04:00:00,-03:00,-03 -1988-02-07T03:00:00,-04:00,-04 -1988-10-16T04:00:00,-03:00,-03 -1989-01-29T03:00:00,-04:00,-04 -1989-10-15T04:00:00,-03:00,-03 -1990-02-11T03:00:00,-04:00,-04 -1990-10-21T04:00:00,-03:00,-03 -1991-02-17T03:00:00,-04:00,-04 -1991-10-20T04:00:00,-03:00,-03 -1992-02-09T03:00:00,-04:00,-04 -1992-10-25T04:00:00,-03:00,-03 -1993-01-31T03:00:00,-04:00,-04 -1993-10-17T04:00:00,-03:00,-03 -1994-02-20T03:00:00,-04:00,-04 -1994-10-16T04:00:00,-03:00,-03 -1995-02-19T03:00:00,-04:00,-04 -1995-10-15T04:00:00,-03:00,-03 -1996-02-11T03:00:00,-04:00,-04 -1996-10-06T04:00:00,-03:00,-03 -1997-02-16T03:00:00,-04:00,-04 -1997-10-06T04:00:00,-03:00,-03 -1998-03-01T03:00:00,-04:00,-04 -1998-10-11T04:00:00,-03:00,-03 -1999-02-21T03:00:00,-04:00,-04 -1999-10-03T04:00:00,-03:00,-03 -2000-02-27T03:00:00,-04:00,-04 -2000-10-08T04:00:00,-03:00,-03 -2001-02-18T03:00:00,-04:00,-04 -2001-10-14T04:00:00,-03:00,-03 -2002-02-17T03:00:00,-04:00,-04 -2002-11-03T04:00:00,-03:00,-03 -2003-02-16T03:00:00,-04:00,-04 -2004-11-02T04:00:00,-03:00,-03 -2005-02-20T03:00:00,-04:00,-04 -2005-10-16T04:00:00,-03:00,-03 -2006-02-19T03:00:00,-04:00,-04 -2006-11-05T04:00:00,-03:00,-03 -2007-02-25T03:00:00,-04:00,-04 -2007-10-14T04:00:00,-03:00,-03 -2008-02-17T03:00:00,-04:00,-04 -2008-10-19T04:00:00,-03:00,-03 -2009-02-15T03:00:00,-04:00,-04 -2009-10-18T04:00:00,-03:00,-03 -2010-02-21T03:00:00,-04:00,-04 -2010-10-17T04:00:00,-03:00,-03 -2011-02-20T03:00:00,-04:00,-04 -2011-10-16T04:00:00,-03:00,-03 -2012-02-26T03:00:00,-04:00,-04 -2012-10-21T04:00:00,-03:00,-03 -2013-02-17T03:00:00,-04:00,-04 -2013-10-20T04:00:00,-03:00,-03 -2014-02-16T03:00:00,-04:00,-04 -2014-10-19T04:00:00,-03:00,-03 -2015-02-22T03:00:00,-04:00,-04 -2015-10-18T04:00:00,-03:00,-03 -2016-02-21T03:00:00,-04:00,-04 -2016-10-16T04:00:00,-03:00,-03 -2017-02-19T03:00:00,-04:00,-04 -2017-10-15T04:00:00,-03:00,-03 -2018-02-18T03:00:00,-04:00,-04 -2018-11-04T04:00:00,-03:00,-03 -2019-02-17T03:00:00,-04:00,-04 -''' diff --git a/desk/lib/pytz/america-curacao.hoon b/desk/lib/pytz/america-curacao.hoon deleted file mode 100644 index 4a6d57f..0000000 --- a/desk/lib/pytz/america-curacao.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-02-12T04:35:47,-05:30,-0430 -1965-01-01T04:30:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-danmarkshavn.hoon b/desk/lib/pytz/america-danmarkshavn.hoon deleted file mode 100644 index 48fb301..0000000 --- a/desk/lib/pytz/america-danmarkshavn.hoon +++ /dev/null @@ -1,38 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1916-07-28T01:14:40,-03:00,-03 -1980-04-06T05:00:00,-02:00,-02 -1980-09-28T01:00:00,-03:00,-03 -1981-03-29T01:00:00,-02:00,-02 -1981-09-27T01:00:00,-03:00,-03 -1982-03-28T01:00:00,-02:00,-02 -1982-09-26T01:00:00,-03:00,-03 -1983-03-27T01:00:00,-02:00,-02 -1983-09-25T01:00:00,-03:00,-03 -1984-03-25T01:00:00,-02:00,-02 -1984-09-30T01:00:00,-03:00,-03 -1985-03-31T01:00:00,-02:00,-02 -1985-09-29T01:00:00,-03:00,-03 -1986-03-30T01:00:00,-02:00,-02 -1986-09-28T01:00:00,-03:00,-03 -1987-03-29T01:00:00,-02:00,-02 -1987-09-27T01:00:00,-03:00,-03 -1988-03-27T01:00:00,-02:00,-02 -1988-09-25T01:00:00,-03:00,-03 -1989-03-26T01:00:00,-02:00,-02 -1989-09-24T01:00:00,-03:00,-03 -1990-03-25T01:00:00,-02:00,-02 -1990-09-30T01:00:00,-03:00,-03 -1991-03-31T01:00:00,-02:00,-02 -1991-09-29T01:00:00,-03:00,-03 -1992-03-29T01:00:00,-02:00,-02 -1992-09-27T01:00:00,-03:00,-03 -1993-03-28T01:00:00,-02:00,-02 -1993-09-26T01:00:00,-03:00,-03 -1994-03-27T01:00:00,-02:00,-02 -1994-09-25T01:00:00,-03:00,-03 -1995-03-26T01:00:00,-02:00,-02 -1995-09-24T01:00:00,-03:00,-03 -1996-01-01T03:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/america-dawson-creek.hoon b/desk/lib/pytz/america-dawson-creek.hoon deleted file mode 100644 index d081848..0000000 --- a/desk/lib/pytz/america-dawson-creek.hoon +++ /dev/null @@ -1,62 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-08:00,PST -1918-04-14T10:00:00,-07:00,PDT -1918-10-27T09:00:00,-08:00,PST -1942-02-09T10:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-09-30T09:00:00,-08:00,PST -1947-04-27T10:00:00,-07:00,PDT -1947-09-28T09:00:00,-08:00,PST -1948-04-25T10:00:00,-07:00,PDT -1948-09-26T09:00:00,-08:00,PST -1949-04-24T10:00:00,-07:00,PDT -1949-09-25T09:00:00,-08:00,PST -1950-04-30T10:00:00,-07:00,PDT -1950-09-24T09:00:00,-08:00,PST -1951-04-29T10:00:00,-07:00,PDT -1951-09-30T09:00:00,-08:00,PST -1952-04-27T10:00:00,-07:00,PDT -1952-09-28T09:00:00,-08:00,PST -1953-04-26T10:00:00,-07:00,PDT -1953-09-27T09:00:00,-08:00,PST -1954-04-25T10:00:00,-07:00,PDT -1954-09-26T09:00:00,-08:00,PST -1955-04-24T10:00:00,-07:00,PDT -1955-09-25T09:00:00,-08:00,PST -1956-04-29T10:00:00,-07:00,PDT -1956-09-30T09:00:00,-08:00,PST -1957-04-28T10:00:00,-07:00,PDT -1957-09-29T09:00:00,-08:00,PST -1958-04-27T10:00:00,-07:00,PDT -1958-09-28T09:00:00,-08:00,PST -1959-04-26T10:00:00,-07:00,PDT -1959-09-27T09:00:00,-08:00,PST -1960-04-24T10:00:00,-07:00,PDT -1960-09-25T09:00:00,-08:00,PST -1961-04-30T10:00:00,-07:00,PDT -1961-09-24T09:00:00,-08:00,PST -1962-04-29T10:00:00,-07:00,PDT -1962-10-28T09:00:00,-08:00,PST -1963-04-28T10:00:00,-07:00,PDT -1963-10-27T09:00:00,-08:00,PST -1964-04-26T10:00:00,-07:00,PDT -1964-10-25T09:00:00,-08:00,PST -1965-04-25T10:00:00,-07:00,PDT -1965-10-31T09:00:00,-08:00,PST -1966-04-24T10:00:00,-07:00,PDT -1966-10-30T09:00:00,-08:00,PST -1967-04-30T10:00:00,-07:00,PDT -1967-10-29T09:00:00,-08:00,PST -1968-04-28T10:00:00,-07:00,PDT -1968-10-27T09:00:00,-08:00,PST -1969-04-27T10:00:00,-07:00,PDT -1969-10-26T09:00:00,-08:00,PST -1970-04-26T10:00:00,-07:00,PDT -1970-10-25T09:00:00,-08:00,PST -1971-04-25T10:00:00,-07:00,PDT -1971-10-31T09:00:00,-08:00,PST -1972-04-30T10:00:00,-07:00,PDT -1972-08-30T09:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-dawson.hoon b/desk/lib/pytz/america-dawson.hoon deleted file mode 100644 index 1ed832b..0000000 --- a/desk/lib/pytz/america-dawson.hoon +++ /dev/null @@ -1,97 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-09:00,YST -1918-04-14T11:00:00,-08:00,YDT -1918-10-27T10:00:00,-09:00,YST -1919-05-25T11:00:00,-08:00,YDT -1919-11-01T08:00:00,-09:00,YST -1942-02-09T11:00:00,-08:00,YWT -1945-08-14T23:00:00,-08:00,YPT -1945-09-30T10:00:00,-09:00,YST -1965-04-25T09:00:00,-07:00,YDDT -1965-10-31T09:00:00,-09:00,YST -1973-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-08:00,PST -1984-04-29T10:00:00,-07:00,PDT -1984-10-28T09:00:00,-08:00,PST -1985-04-28T10:00:00,-07:00,PDT -1985-10-27T09:00:00,-08:00,PST -1986-04-27T10:00:00,-07:00,PDT -1986-10-26T09:00:00,-08:00,PST -1987-04-05T10:00:00,-07:00,PDT -1987-10-25T09:00:00,-08:00,PST -1988-04-03T10:00:00,-07:00,PDT -1988-10-30T09:00:00,-08:00,PST -1989-04-02T10:00:00,-07:00,PDT -1989-10-29T09:00:00,-08:00,PST -1990-04-01T10:00:00,-07:00,PDT -1990-10-28T09:00:00,-08:00,PST -1991-04-07T10:00:00,-07:00,PDT -1991-10-27T09:00:00,-08:00,PST -1992-04-05T10:00:00,-07:00,PDT -1992-10-25T09:00:00,-08:00,PST -1993-04-04T10:00:00,-07:00,PDT -1993-10-31T09:00:00,-08:00,PST -1994-04-03T10:00:00,-07:00,PDT -1994-10-30T09:00:00,-08:00,PST -1995-04-02T10:00:00,-07:00,PDT -1995-10-29T09:00:00,-08:00,PST -1996-04-07T10:00:00,-07:00,PDT -1996-10-27T09:00:00,-08:00,PST -1997-04-06T10:00:00,-07:00,PDT -1997-10-26T09:00:00,-08:00,PST -1998-04-05T10:00:00,-07:00,PDT -1998-10-25T09:00:00,-08:00,PST -1999-04-04T10:00:00,-07:00,PDT -1999-10-31T09:00:00,-08:00,PST -2000-04-02T10:00:00,-07:00,PDT -2000-10-29T09:00:00,-08:00,PST -2001-04-01T10:00:00,-07:00,PDT -2001-10-28T09:00:00,-08:00,PST -2002-04-07T10:00:00,-07:00,PDT -2002-10-27T09:00:00,-08:00,PST -2003-04-06T10:00:00,-07:00,PDT -2003-10-26T09:00:00,-08:00,PST -2004-04-04T10:00:00,-07:00,PDT -2004-10-31T09:00:00,-08:00,PST -2005-04-03T10:00:00,-07:00,PDT -2005-10-30T09:00:00,-08:00,PST -2006-04-02T10:00:00,-07:00,PDT -2006-10-29T09:00:00,-08:00,PST -2007-03-11T10:00:00,-07:00,PDT -2007-11-04T09:00:00,-08:00,PST -2008-03-09T10:00:00,-07:00,PDT -2008-11-02T09:00:00,-08:00,PST -2009-03-08T10:00:00,-07:00,PDT -2009-11-01T09:00:00,-08:00,PST -2010-03-14T10:00:00,-07:00,PDT -2010-11-07T09:00:00,-08:00,PST -2011-03-13T10:00:00,-07:00,PDT -2011-11-06T09:00:00,-08:00,PST -2012-03-11T10:00:00,-07:00,PDT -2012-11-04T09:00:00,-08:00,PST -2013-03-10T10:00:00,-07:00,PDT -2013-11-03T09:00:00,-08:00,PST -2014-03-09T10:00:00,-07:00,PDT -2014-11-02T09:00:00,-08:00,PST -2015-03-08T10:00:00,-07:00,PDT -2015-11-01T09:00:00,-08:00,PST -2016-03-13T10:00:00,-07:00,PDT -2016-11-06T09:00:00,-08:00,PST -2017-03-12T10:00:00,-07:00,PDT -2017-11-05T09:00:00,-08:00,PST -2018-03-11T10:00:00,-07:00,PDT -2018-11-04T09:00:00,-08:00,PST -2019-03-10T10:00:00,-07:00,PDT -2019-11-03T09:00:00,-08:00,PST -2020-03-08T10:00:00,-07:00,PDT -2020-11-01T07:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-denver.hoon b/desk/lib/pytz/america-denver.hoon deleted file mode 100644 index 0864cae..0000000 --- a/desk/lib/pytz/america-denver.hoon +++ /dev/null @@ -1,162 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-07:00,MST -1918-03-31T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1919-03-30T09:00:00,-06:00,MDT -1919-10-26T08:00:00,-07:00,MST -1920-03-28T09:00:00,-06:00,MDT -1920-10-31T08:00:00,-07:00,MST -1921-03-27T09:00:00,-06:00,MDT -1921-05-22T08:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1965-04-25T09:00:00,-06:00,MDT -1965-10-31T08:00:00,-07:00,MST -1966-04-24T09:00:00,-06:00,MDT -1966-10-30T08:00:00,-07:00,MST -1967-04-30T09:00:00,-06:00,MDT -1967-10-29T08:00:00,-07:00,MST -1968-04-28T09:00:00,-06:00,MDT -1968-10-27T08:00:00,-07:00,MST -1969-04-27T09:00:00,-06:00,MDT -1969-10-26T08:00:00,-07:00,MST -1970-04-26T09:00:00,-06:00,MDT -1970-10-25T08:00:00,-07:00,MST -1971-04-25T09:00:00,-06:00,MDT -1971-10-31T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,MDT -1972-10-29T08:00:00,-07:00,MST -1973-04-29T09:00:00,-06:00,MDT -1973-10-28T08:00:00,-07:00,MST -1974-01-06T09:00:00,-06:00,MDT -1974-10-27T08:00:00,-07:00,MST -1975-02-23T09:00:00,-06:00,MDT -1975-10-26T08:00:00,-07:00,MST -1976-04-25T09:00:00,-06:00,MDT -1976-10-31T08:00:00,-07:00,MST -1977-04-24T09:00:00,-06:00,MDT -1977-10-30T08:00:00,-07:00,MST -1978-04-30T09:00:00,-06:00,MDT -1978-10-29T08:00:00,-07:00,MST -1979-04-29T09:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-07:00,MST -1993-04-04T09:00:00,-06:00,MDT -1993-10-31T08:00:00,-07:00,MST -1994-04-03T09:00:00,-06:00,MDT -1994-10-30T08:00:00,-07:00,MST -1995-04-02T09:00:00,-06:00,MDT -1995-10-29T08:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-04-01T09:00:00,-06:00,MDT -2001-10-28T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-03-11T09:00:00,-06:00,MDT -2007-11-04T08:00:00,-07:00,MST -2008-03-09T09:00:00,-06:00,MDT -2008-11-02T08:00:00,-07:00,MST -2009-03-08T09:00:00,-06:00,MDT -2009-11-01T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-07:00,MST -2011-03-13T09:00:00,-06:00,MDT -2011-11-06T08:00:00,-07:00,MST -2012-03-11T09:00:00,-06:00,MDT -2012-11-04T08:00:00,-07:00,MST -2013-03-10T09:00:00,-06:00,MDT -2013-11-03T08:00:00,-07:00,MST -2014-03-09T09:00:00,-06:00,MDT -2014-11-02T08:00:00,-07:00,MST -2015-03-08T09:00:00,-06:00,MDT -2015-11-01T08:00:00,-07:00,MST -2016-03-13T09:00:00,-06:00,MDT -2016-11-06T08:00:00,-07:00,MST -2017-03-12T09:00:00,-06:00,MDT -2017-11-05T08:00:00,-07:00,MST -2018-03-11T09:00:00,-06:00,MDT -2018-11-04T08:00:00,-07:00,MST -2019-03-10T09:00:00,-06:00,MDT -2019-11-03T08:00:00,-07:00,MST -2020-03-08T09:00:00,-06:00,MDT -2020-11-01T08:00:00,-07:00,MST -2021-03-14T09:00:00,-06:00,MDT -2021-11-07T08:00:00,-07:00,MST -2022-03-13T09:00:00,-06:00,MDT -2022-11-06T08:00:00,-07:00,MST -2023-03-12T09:00:00,-06:00,MDT -2023-11-05T08:00:00,-07:00,MST -2024-03-10T09:00:00,-06:00,MDT -2024-11-03T08:00:00,-07:00,MST -2025-03-09T09:00:00,-06:00,MDT -2025-11-02T08:00:00,-07:00,MST -2026-03-08T09:00:00,-06:00,MDT -2026-11-01T08:00:00,-07:00,MST -2027-03-14T09:00:00,-06:00,MDT -2027-11-07T08:00:00,-07:00,MST -2028-03-12T09:00:00,-06:00,MDT -2028-11-05T08:00:00,-07:00,MST -2029-03-11T09:00:00,-06:00,MDT -2029-11-04T08:00:00,-07:00,MST -2030-03-10T09:00:00,-06:00,MDT -2030-11-03T08:00:00,-07:00,MST -2031-03-09T09:00:00,-06:00,MDT -2031-11-02T08:00:00,-07:00,MST -2032-03-14T09:00:00,-06:00,MDT -2032-11-07T08:00:00,-07:00,MST -2033-03-13T09:00:00,-06:00,MDT -2033-11-06T08:00:00,-07:00,MST -2034-03-12T09:00:00,-06:00,MDT -2034-11-05T08:00:00,-07:00,MST -2035-03-11T09:00:00,-06:00,MDT -2035-11-04T08:00:00,-07:00,MST -2036-03-09T09:00:00,-06:00,MDT -2036-11-02T08:00:00,-07:00,MST -2037-03-08T09:00:00,-06:00,MDT -2037-11-01T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-detroit.hoon b/desk/lib/pytz/america-detroit.hoon deleted file mode 100644 index 0c3f5d2..0000000 --- a/desk/lib/pytz/america-detroit.hoon +++ /dev/null @@ -1,145 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1905-01-01T05:32:11,-06:00,CST -1915-05-15T08:00:00,-05:00,EST -1942-02-09T07:00:00,-04:00,EWT -1945-08-14T23:00:00,-04:00,EPT -1945-09-30T06:00:00,-05:00,EST -1948-04-25T07:00:00,-04:00,EDT -1948-09-26T06:00:00,-05:00,EST -1967-06-14T05:01:00,-04:00,EDT -1967-10-29T06:00:00,-05:00,EST -1968-04-28T07:00:00,-04:00,EDT -1968-10-27T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-01-06T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-04-27T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-05:00,EST -2000-04-02T07:00:00,-04:00,EDT -2000-10-29T06:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-dominica.hoon b/desk/lib/pytz/america-dominica.hoon deleted file mode 100644 index fe5bef0..0000000 --- a/desk/lib/pytz/america-dominica.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-07-01T04:06:36,-04:00,AST -''' diff --git a/desk/lib/pytz/america-edmonton.hoon b/desk/lib/pytz/america-edmonton.hoon deleted file mode 100644 index 575b3c2..0000000 --- a/desk/lib/pytz/america-edmonton.hoon +++ /dev/null @@ -1,154 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1906-09-01T07:33:52,-07:00,MST -1918-04-14T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1919-04-13T09:00:00,-06:00,MDT -1919-05-27T08:00:00,-07:00,MST -1920-04-25T09:00:00,-06:00,MDT -1920-10-31T08:00:00,-07:00,MST -1921-04-24T09:00:00,-06:00,MDT -1921-09-25T08:00:00,-07:00,MST -1922-04-30T09:00:00,-06:00,MDT -1922-09-24T08:00:00,-07:00,MST -1923-04-29T09:00:00,-06:00,MDT -1923-09-30T08:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1947-04-27T09:00:00,-06:00,MDT -1947-09-28T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,MDT -1972-10-29T08:00:00,-07:00,MST -1973-04-29T09:00:00,-06:00,MDT -1973-10-28T08:00:00,-07:00,MST -1974-04-28T09:00:00,-06:00,MDT -1974-10-27T08:00:00,-07:00,MST -1975-04-27T09:00:00,-06:00,MDT -1975-10-26T08:00:00,-07:00,MST -1976-04-25T09:00:00,-06:00,MDT -1976-10-31T08:00:00,-07:00,MST -1977-04-24T09:00:00,-06:00,MDT -1977-10-30T08:00:00,-07:00,MST -1978-04-30T09:00:00,-06:00,MDT -1978-10-29T08:00:00,-07:00,MST -1979-04-29T09:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-07:00,MST -1993-04-04T09:00:00,-06:00,MDT -1993-10-31T08:00:00,-07:00,MST -1994-04-03T09:00:00,-06:00,MDT -1994-10-30T08:00:00,-07:00,MST -1995-04-02T09:00:00,-06:00,MDT -1995-10-29T08:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-04-01T09:00:00,-06:00,MDT -2001-10-28T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-03-11T09:00:00,-06:00,MDT -2007-11-04T08:00:00,-07:00,MST -2008-03-09T09:00:00,-06:00,MDT -2008-11-02T08:00:00,-07:00,MST -2009-03-08T09:00:00,-06:00,MDT -2009-11-01T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-07:00,MST -2011-03-13T09:00:00,-06:00,MDT -2011-11-06T08:00:00,-07:00,MST -2012-03-11T09:00:00,-06:00,MDT -2012-11-04T08:00:00,-07:00,MST -2013-03-10T09:00:00,-06:00,MDT -2013-11-03T08:00:00,-07:00,MST -2014-03-09T09:00:00,-06:00,MDT -2014-11-02T08:00:00,-07:00,MST -2015-03-08T09:00:00,-06:00,MDT -2015-11-01T08:00:00,-07:00,MST -2016-03-13T09:00:00,-06:00,MDT -2016-11-06T08:00:00,-07:00,MST -2017-03-12T09:00:00,-06:00,MDT -2017-11-05T08:00:00,-07:00,MST -2018-03-11T09:00:00,-06:00,MDT -2018-11-04T08:00:00,-07:00,MST -2019-03-10T09:00:00,-06:00,MDT -2019-11-03T08:00:00,-07:00,MST -2020-03-08T09:00:00,-06:00,MDT -2020-11-01T08:00:00,-07:00,MST -2021-03-14T09:00:00,-06:00,MDT -2021-11-07T08:00:00,-07:00,MST -2022-03-13T09:00:00,-06:00,MDT -2022-11-06T08:00:00,-07:00,MST -2023-03-12T09:00:00,-06:00,MDT -2023-11-05T08:00:00,-07:00,MST -2024-03-10T09:00:00,-06:00,MDT -2024-11-03T08:00:00,-07:00,MST -2025-03-09T09:00:00,-06:00,MDT -2025-11-02T08:00:00,-07:00,MST -2026-03-08T09:00:00,-06:00,MDT -2026-11-01T08:00:00,-07:00,MST -2027-03-14T09:00:00,-06:00,MDT -2027-11-07T08:00:00,-07:00,MST -2028-03-12T09:00:00,-06:00,MDT -2028-11-05T08:00:00,-07:00,MST -2029-03-11T09:00:00,-06:00,MDT -2029-11-04T08:00:00,-07:00,MST -2030-03-10T09:00:00,-06:00,MDT -2030-11-03T08:00:00,-07:00,MST -2031-03-09T09:00:00,-06:00,MDT -2031-11-02T08:00:00,-07:00,MST -2032-03-14T09:00:00,-06:00,MDT -2032-11-07T08:00:00,-07:00,MST -2033-03-13T09:00:00,-06:00,MDT -2033-11-06T08:00:00,-07:00,MST -2034-03-12T09:00:00,-06:00,MDT -2034-11-05T08:00:00,-07:00,MST -2035-03-11T09:00:00,-06:00,MDT -2035-11-04T08:00:00,-07:00,MST -2036-03-09T09:00:00,-06:00,MDT -2036-11-02T08:00:00,-07:00,MST -2037-03-08T09:00:00,-06:00,MDT -2037-11-01T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-eirunepe.hoon b/desk/lib/pytz/america-eirunepe.hoon deleted file mode 100644 index ec4c9bb..0000000 --- a/desk/lib/pytz/america-eirunepe.hoon +++ /dev/null @@ -1,37 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T04:39:28,-05:00,-05 -1931-10-03T16:00:00,-04:00,-04 -1932-04-01T04:00:00,-05:00,-05 -1932-10-03T05:00:00,-04:00,-04 -1933-04-01T04:00:00,-05:00,-05 -1949-12-01T05:00:00,-04:00,-04 -1950-04-16T05:00:00,-05:00,-05 -1950-12-01T05:00:00,-04:00,-04 -1951-04-01T04:00:00,-05:00,-05 -1951-12-01T05:00:00,-04:00,-04 -1952-04-01T04:00:00,-05:00,-05 -1952-12-01T05:00:00,-04:00,-04 -1953-03-01T04:00:00,-05:00,-05 -1963-12-09T05:00:00,-04:00,-04 -1964-03-01T04:00:00,-05:00,-05 -1965-01-31T05:00:00,-04:00,-04 -1965-03-31T04:00:00,-05:00,-05 -1965-12-01T05:00:00,-04:00,-04 -1966-03-01T04:00:00,-05:00,-05 -1966-11-01T05:00:00,-04:00,-04 -1967-03-01T04:00:00,-05:00,-05 -1967-11-01T05:00:00,-04:00,-04 -1968-03-01T04:00:00,-05:00,-05 -1985-11-02T05:00:00,-04:00,-04 -1986-03-15T04:00:00,-05:00,-05 -1986-10-25T05:00:00,-04:00,-04 -1987-02-14T04:00:00,-05:00,-05 -1987-10-25T05:00:00,-04:00,-04 -1988-02-07T04:00:00,-05:00,-05 -1993-10-17T05:00:00,-04:00,-04 -1994-02-20T04:00:00,-05:00,-05 -2008-06-24T05:00:00,-04:00,-04 -2013-11-10T04:00:00,-05:00,-05 -''' diff --git a/desk/lib/pytz/america-el-salvador.hoon b/desk/lib/pytz/america-el-salvador.hoon deleted file mode 100644 index f7bb2bc..0000000 --- a/desk/lib/pytz/america-el-salvador.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1921-01-01T05:56:48,-06:00,CST -1987-05-03T06:00:00,-05:00,CDT -1987-09-27T05:00:00,-06:00,CST -1988-05-01T06:00:00,-05:00,CDT -1988-09-25T05:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-ensenada.hoon b/desk/lib/pytz/america-ensenada.hoon deleted file mode 100644 index 4a7b5c2..0000000 --- a/desk/lib/pytz/america-ensenada.hoon +++ /dev/null @@ -1,159 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1924-01-01T07:00:00,-08:00,PST -1927-06-10T08:00:00,-07:00,MST -1930-11-15T07:00:00,-08:00,PST -1931-04-01T08:00:00,-07:00,PDT -1931-09-30T07:00:00,-08:00,PST -1942-04-24T08:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-11-15T07:00:00,-08:00,PST -1948-04-05T08:00:00,-07:00,PDT -1949-01-14T07:00:00,-08:00,PST -1950-05-01T08:00:00,-07:00,PDT -1950-09-24T07:00:00,-08:00,PST -1951-04-29T10:00:00,-07:00,PDT -1951-09-30T09:00:00,-08:00,PST -1952-04-27T10:00:00,-07:00,PDT -1952-09-28T09:00:00,-08:00,PST -1954-04-25T09:00:00,-07:00,PDT -1954-09-26T09:00:00,-08:00,PST -1955-04-24T09:00:00,-07:00,PDT -1955-09-25T09:00:00,-08:00,PST -1956-04-29T09:00:00,-07:00,PDT -1956-09-30T09:00:00,-08:00,PST -1957-04-28T09:00:00,-07:00,PDT -1957-09-29T09:00:00,-08:00,PST -1958-04-27T09:00:00,-07:00,PDT -1958-09-28T09:00:00,-08:00,PST -1959-04-26T09:00:00,-07:00,PDT -1959-09-27T09:00:00,-08:00,PST -1960-04-24T09:00:00,-07:00,PDT -1960-09-25T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-07:00,PDT -1979-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-08:00,PST -1984-04-29T10:00:00,-07:00,PDT -1984-10-28T09:00:00,-08:00,PST -1985-04-28T10:00:00,-07:00,PDT -1985-10-27T09:00:00,-08:00,PST -1986-04-27T10:00:00,-07:00,PDT -1986-10-26T09:00:00,-08:00,PST -1987-04-05T10:00:00,-07:00,PDT -1987-10-25T09:00:00,-08:00,PST -1988-04-03T10:00:00,-07:00,PDT -1988-10-30T09:00:00,-08:00,PST -1989-04-02T10:00:00,-07:00,PDT -1989-10-29T09:00:00,-08:00,PST -1990-04-01T10:00:00,-07:00,PDT -1990-10-28T09:00:00,-08:00,PST -1991-04-07T10:00:00,-07:00,PDT -1991-10-27T09:00:00,-08:00,PST -1992-04-05T10:00:00,-07:00,PDT -1992-10-25T09:00:00,-08:00,PST -1993-04-04T10:00:00,-07:00,PDT -1993-10-31T09:00:00,-08:00,PST -1994-04-03T10:00:00,-07:00,PDT -1994-10-30T09:00:00,-08:00,PST -1995-04-02T10:00:00,-07:00,PDT -1995-10-29T09:00:00,-08:00,PST -1996-04-07T10:00:00,-07:00,PDT -1996-10-27T09:00:00,-08:00,PST -1997-04-06T10:00:00,-07:00,PDT -1997-10-26T09:00:00,-08:00,PST -1998-04-05T10:00:00,-07:00,PDT -1998-10-25T09:00:00,-08:00,PST -1999-04-04T10:00:00,-07:00,PDT -1999-10-31T09:00:00,-08:00,PST -2000-04-02T10:00:00,-07:00,PDT -2000-10-29T09:00:00,-08:00,PST -2001-04-01T10:00:00,-07:00,PDT -2001-10-28T09:00:00,-08:00,PST -2002-04-07T10:00:00,-07:00,PDT -2002-10-27T09:00:00,-08:00,PST -2003-04-06T10:00:00,-07:00,PDT -2003-10-26T09:00:00,-08:00,PST -2004-04-04T10:00:00,-07:00,PDT -2004-10-31T09:00:00,-08:00,PST -2005-04-03T10:00:00,-07:00,PDT -2005-10-30T09:00:00,-08:00,PST -2006-04-02T10:00:00,-07:00,PDT -2006-10-29T09:00:00,-08:00,PST -2007-04-01T10:00:00,-07:00,PDT -2007-10-28T09:00:00,-08:00,PST -2008-04-06T10:00:00,-07:00,PDT -2008-10-26T09:00:00,-08:00,PST -2009-04-05T10:00:00,-07:00,PDT -2009-10-25T09:00:00,-08:00,PST -2010-03-14T10:00:00,-07:00,PDT -2010-11-07T09:00:00,-08:00,PST -2011-03-13T10:00:00,-07:00,PDT -2011-11-06T09:00:00,-08:00,PST -2012-03-11T10:00:00,-07:00,PDT -2012-11-04T09:00:00,-08:00,PST -2013-03-10T10:00:00,-07:00,PDT -2013-11-03T09:00:00,-08:00,PST -2014-03-09T10:00:00,-07:00,PDT -2014-11-02T09:00:00,-08:00,PST -2015-03-08T10:00:00,-07:00,PDT -2015-11-01T09:00:00,-08:00,PST -2016-03-13T10:00:00,-07:00,PDT -2016-11-06T09:00:00,-08:00,PST -2017-03-12T10:00:00,-07:00,PDT -2017-11-05T09:00:00,-08:00,PST -2018-03-11T10:00:00,-07:00,PDT -2018-11-04T09:00:00,-08:00,PST -2019-03-10T10:00:00,-07:00,PDT -2019-11-03T09:00:00,-08:00,PST -2020-03-08T10:00:00,-07:00,PDT -2020-11-01T09:00:00,-08:00,PST -2021-03-14T10:00:00,-07:00,PDT -2021-11-07T09:00:00,-08:00,PST -2022-03-13T10:00:00,-07:00,PDT -2022-11-06T09:00:00,-08:00,PST -2023-03-12T10:00:00,-07:00,PDT -2023-11-05T09:00:00,-08:00,PST -2024-03-10T10:00:00,-07:00,PDT -2024-11-03T09:00:00,-08:00,PST -2025-03-09T10:00:00,-07:00,PDT -2025-11-02T09:00:00,-08:00,PST -2026-03-08T10:00:00,-07:00,PDT -2026-11-01T09:00:00,-08:00,PST -2027-03-14T10:00:00,-07:00,PDT -2027-11-07T09:00:00,-08:00,PST -2028-03-12T10:00:00,-07:00,PDT -2028-11-05T09:00:00,-08:00,PST -2029-03-11T10:00:00,-07:00,PDT -2029-11-04T09:00:00,-08:00,PST -2030-03-10T10:00:00,-07:00,PDT -2030-11-03T09:00:00,-08:00,PST -2031-03-09T10:00:00,-07:00,PDT -2031-11-02T09:00:00,-08:00,PST -2032-03-14T10:00:00,-07:00,PDT -2032-11-07T09:00:00,-08:00,PST -2033-03-13T10:00:00,-07:00,PDT -2033-11-06T09:00:00,-08:00,PST -2034-03-12T10:00:00,-07:00,PDT -2034-11-05T09:00:00,-08:00,PST -2035-03-11T10:00:00,-07:00,PDT -2035-11-04T09:00:00,-08:00,PST -2036-03-09T10:00:00,-07:00,PDT -2036-11-02T09:00:00,-08:00,PST -2037-03-08T10:00:00,-07:00,PDT -2037-11-01T09:00:00,-08:00,PST -''' diff --git a/desk/lib/pytz/america-fort-nelson.hoon b/desk/lib/pytz/america-fort-nelson.hoon deleted file mode 100644 index af9cf70..0000000 --- a/desk/lib/pytz/america-fort-nelson.hoon +++ /dev/null @@ -1,147 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-08:00,PST -1918-04-14T10:00:00,-07:00,PDT -1918-10-27T09:00:00,-08:00,PST -1942-02-09T10:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-09-30T09:00:00,-08:00,PST -1947-04-27T10:00:00,-07:00,PDT -1947-09-28T09:00:00,-08:00,PST -1948-04-25T10:00:00,-07:00,PDT -1948-09-26T09:00:00,-08:00,PST -1949-04-24T10:00:00,-07:00,PDT -1949-09-25T09:00:00,-08:00,PST -1950-04-30T10:00:00,-07:00,PDT -1950-09-24T09:00:00,-08:00,PST -1951-04-29T10:00:00,-07:00,PDT -1951-09-30T09:00:00,-08:00,PST -1952-04-27T10:00:00,-07:00,PDT -1952-09-28T09:00:00,-08:00,PST -1953-04-26T10:00:00,-07:00,PDT -1953-09-27T09:00:00,-08:00,PST -1954-04-25T10:00:00,-07:00,PDT -1954-09-26T09:00:00,-08:00,PST -1955-04-24T10:00:00,-07:00,PDT -1955-09-25T09:00:00,-08:00,PST -1956-04-29T10:00:00,-07:00,PDT -1956-09-30T09:00:00,-08:00,PST -1957-04-28T10:00:00,-07:00,PDT -1957-09-29T09:00:00,-08:00,PST -1958-04-27T10:00:00,-07:00,PDT -1958-09-28T09:00:00,-08:00,PST -1959-04-26T10:00:00,-07:00,PDT -1959-09-27T09:00:00,-08:00,PST -1960-04-24T10:00:00,-07:00,PDT -1960-09-25T09:00:00,-08:00,PST -1961-04-30T10:00:00,-07:00,PDT -1961-09-24T09:00:00,-08:00,PST -1962-04-29T10:00:00,-07:00,PDT -1962-10-28T09:00:00,-08:00,PST -1963-04-28T10:00:00,-07:00,PDT -1963-10-27T09:00:00,-08:00,PST -1964-04-26T10:00:00,-07:00,PDT -1964-10-25T09:00:00,-08:00,PST -1965-04-25T10:00:00,-07:00,PDT -1965-10-31T09:00:00,-08:00,PST -1966-04-24T10:00:00,-07:00,PDT -1966-10-30T09:00:00,-08:00,PST -1967-04-30T10:00:00,-07:00,PDT -1967-10-29T09:00:00,-08:00,PST -1968-04-28T10:00:00,-07:00,PDT -1968-10-27T09:00:00,-08:00,PST -1969-04-27T10:00:00,-07:00,PDT -1969-10-26T09:00:00,-08:00,PST -1970-04-26T10:00:00,-07:00,PDT -1970-10-25T09:00:00,-08:00,PST -1971-04-25T10:00:00,-07:00,PDT -1971-10-31T09:00:00,-08:00,PST -1972-04-30T10:00:00,-07:00,PDT -1972-10-29T09:00:00,-08:00,PST -1973-04-29T10:00:00,-07:00,PDT -1973-10-28T09:00:00,-08:00,PST -1974-04-28T10:00:00,-07:00,PDT -1974-10-27T09:00:00,-08:00,PST -1975-04-27T10:00:00,-07:00,PDT -1975-10-26T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-07:00,PDT -1979-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-08:00,PST -1984-04-29T10:00:00,-07:00,PDT -1984-10-28T09:00:00,-08:00,PST -1985-04-28T10:00:00,-07:00,PDT -1985-10-27T09:00:00,-08:00,PST -1986-04-27T10:00:00,-07:00,PDT -1986-10-26T09:00:00,-08:00,PST -1987-04-05T10:00:00,-07:00,PDT -1987-10-25T09:00:00,-08:00,PST -1988-04-03T10:00:00,-07:00,PDT -1988-10-30T09:00:00,-08:00,PST -1989-04-02T10:00:00,-07:00,PDT -1989-10-29T09:00:00,-08:00,PST -1990-04-01T10:00:00,-07:00,PDT -1990-10-28T09:00:00,-08:00,PST -1991-04-07T10:00:00,-07:00,PDT -1991-10-27T09:00:00,-08:00,PST -1992-04-05T10:00:00,-07:00,PDT -1992-10-25T09:00:00,-08:00,PST -1993-04-04T10:00:00,-07:00,PDT -1993-10-31T09:00:00,-08:00,PST -1994-04-03T10:00:00,-07:00,PDT -1994-10-30T09:00:00,-08:00,PST -1995-04-02T10:00:00,-07:00,PDT -1995-10-29T09:00:00,-08:00,PST -1996-04-07T10:00:00,-07:00,PDT -1996-10-27T09:00:00,-08:00,PST -1997-04-06T10:00:00,-07:00,PDT -1997-10-26T09:00:00,-08:00,PST -1998-04-05T10:00:00,-07:00,PDT -1998-10-25T09:00:00,-08:00,PST -1999-04-04T10:00:00,-07:00,PDT -1999-10-31T09:00:00,-08:00,PST -2000-04-02T10:00:00,-07:00,PDT -2000-10-29T09:00:00,-08:00,PST -2001-04-01T10:00:00,-07:00,PDT -2001-10-28T09:00:00,-08:00,PST -2002-04-07T10:00:00,-07:00,PDT -2002-10-27T09:00:00,-08:00,PST -2003-04-06T10:00:00,-07:00,PDT -2003-10-26T09:00:00,-08:00,PST -2004-04-04T10:00:00,-07:00,PDT -2004-10-31T09:00:00,-08:00,PST -2005-04-03T10:00:00,-07:00,PDT -2005-10-30T09:00:00,-08:00,PST -2006-04-02T10:00:00,-07:00,PDT -2006-10-29T09:00:00,-08:00,PST -2007-03-11T10:00:00,-07:00,PDT -2007-11-04T09:00:00,-08:00,PST -2008-03-09T10:00:00,-07:00,PDT -2008-11-02T09:00:00,-08:00,PST -2009-03-08T10:00:00,-07:00,PDT -2009-11-01T09:00:00,-08:00,PST -2010-03-14T10:00:00,-07:00,PDT -2010-11-07T09:00:00,-08:00,PST -2011-03-13T10:00:00,-07:00,PDT -2011-11-06T09:00:00,-08:00,PST -2012-03-11T10:00:00,-07:00,PDT -2012-11-04T09:00:00,-08:00,PST -2013-03-10T10:00:00,-07:00,PDT -2013-11-03T09:00:00,-08:00,PST -2014-03-09T10:00:00,-07:00,PDT -2014-11-02T09:00:00,-08:00,PST -2015-03-08T10:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-fortaleza.hoon b/desk/lib/pytz/america-fortaleza.hoon deleted file mode 100644 index 3b130c4..0000000 --- a/desk/lib/pytz/america-fortaleza.hoon +++ /dev/null @@ -1,43 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T02:34:00,-03:00,-03 -1931-10-03T14:00:00,-02:00,-02 -1932-04-01T02:00:00,-03:00,-03 -1932-10-03T03:00:00,-02:00,-02 -1933-04-01T02:00:00,-03:00,-03 -1949-12-01T03:00:00,-02:00,-02 -1950-04-16T03:00:00,-03:00,-03 -1950-12-01T03:00:00,-02:00,-02 -1951-04-01T02:00:00,-03:00,-03 -1951-12-01T03:00:00,-02:00,-02 -1952-04-01T02:00:00,-03:00,-03 -1952-12-01T03:00:00,-02:00,-02 -1953-03-01T02:00:00,-03:00,-03 -1963-12-09T03:00:00,-02:00,-02 -1964-03-01T02:00:00,-03:00,-03 -1965-01-31T03:00:00,-02:00,-02 -1965-03-31T02:00:00,-03:00,-03 -1965-12-01T03:00:00,-02:00,-02 -1966-03-01T02:00:00,-03:00,-03 -1966-11-01T03:00:00,-02:00,-02 -1967-03-01T02:00:00,-03:00,-03 -1967-11-01T03:00:00,-02:00,-02 -1968-03-01T02:00:00,-03:00,-03 -1985-11-02T03:00:00,-02:00,-02 -1986-03-15T02:00:00,-03:00,-03 -1986-10-25T03:00:00,-02:00,-02 -1987-02-14T02:00:00,-03:00,-03 -1987-10-25T03:00:00,-02:00,-02 -1988-02-07T02:00:00,-03:00,-03 -1988-10-16T03:00:00,-02:00,-02 -1989-01-29T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-02-11T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-02:00,-02 -2000-02-27T02:00:00,-03:00,-03 -2000-10-08T03:00:00,-02:00,-02 -2000-10-22T02:00:00,-03:00,-03 -2001-10-14T03:00:00,-02:00,-02 -2002-02-17T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-glace-bay.hoon b/desk/lib/pytz/america-glace-bay.hoon deleted file mode 100644 index c6fa776..0000000 --- a/desk/lib/pytz/america-glace-bay.hoon +++ /dev/null @@ -1,144 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1902-06-15T03:59:48,-04:00,AST -1918-04-14T06:00:00,-03:00,ADT -1918-10-27T05:00:00,-04:00,AST -1942-02-09T06:00:00,-03:00,AWT -1945-08-14T23:00:00,-03:00,APT -1945-09-30T05:00:00,-04:00,AST -1953-04-26T06:00:00,-03:00,ADT -1953-09-27T05:00:00,-04:00,AST -1972-04-30T06:00:00,-03:00,ADT -1972-10-29T05:00:00,-04:00,AST -1973-04-29T06:00:00,-03:00,ADT -1973-10-28T05:00:00,-04:00,AST -1974-04-28T06:00:00,-03:00,ADT -1974-10-27T05:00:00,-04:00,AST -1975-04-27T06:00:00,-03:00,ADT -1975-10-26T05:00:00,-04:00,AST -1976-04-25T06:00:00,-03:00,ADT -1976-10-31T05:00:00,-04:00,AST -1977-04-24T06:00:00,-03:00,ADT -1977-10-30T05:00:00,-04:00,AST -1978-04-30T06:00:00,-03:00,ADT -1978-10-29T05:00:00,-04:00,AST -1979-04-29T06:00:00,-03:00,ADT -1979-10-28T05:00:00,-04:00,AST -1980-04-27T06:00:00,-03:00,ADT -1980-10-26T05:00:00,-04:00,AST -1981-04-26T06:00:00,-03:00,ADT -1981-10-25T05:00:00,-04:00,AST -1982-04-25T06:00:00,-03:00,ADT -1982-10-31T05:00:00,-04:00,AST -1983-04-24T06:00:00,-03:00,ADT -1983-10-30T05:00:00,-04:00,AST -1984-04-29T06:00:00,-03:00,ADT -1984-10-28T05:00:00,-04:00,AST -1985-04-28T06:00:00,-03:00,ADT -1985-10-27T05:00:00,-04:00,AST -1986-04-27T06:00:00,-03:00,ADT -1986-10-26T05:00:00,-04:00,AST -1987-04-05T06:00:00,-03:00,ADT -1987-10-25T05:00:00,-04:00,AST -1988-04-03T06:00:00,-03:00,ADT -1988-10-30T05:00:00,-04:00,AST -1989-04-02T06:00:00,-03:00,ADT -1989-10-29T05:00:00,-04:00,AST -1990-04-01T06:00:00,-03:00,ADT -1990-10-28T05:00:00,-04:00,AST -1991-04-07T06:00:00,-03:00,ADT -1991-10-27T05:00:00,-04:00,AST -1992-04-05T06:00:00,-03:00,ADT -1992-10-25T05:00:00,-04:00,AST -1993-04-04T06:00:00,-03:00,ADT -1993-10-31T05:00:00,-04:00,AST -1994-04-03T06:00:00,-03:00,ADT -1994-10-30T05:00:00,-04:00,AST -1995-04-02T06:00:00,-03:00,ADT -1995-10-29T05:00:00,-04:00,AST -1996-04-07T06:00:00,-03:00,ADT -1996-10-27T05:00:00,-04:00,AST -1997-04-06T06:00:00,-03:00,ADT -1997-10-26T05:00:00,-04:00,AST -1998-04-05T06:00:00,-03:00,ADT -1998-10-25T05:00:00,-04:00,AST -1999-04-04T06:00:00,-03:00,ADT -1999-10-31T05:00:00,-04:00,AST -2000-04-02T06:00:00,-03:00,ADT -2000-10-29T05:00:00,-04:00,AST -2001-04-01T06:00:00,-03:00,ADT -2001-10-28T05:00:00,-04:00,AST -2002-04-07T06:00:00,-03:00,ADT -2002-10-27T05:00:00,-04:00,AST -2003-04-06T06:00:00,-03:00,ADT -2003-10-26T05:00:00,-04:00,AST -2004-04-04T06:00:00,-03:00,ADT -2004-10-31T05:00:00,-04:00,AST -2005-04-03T06:00:00,-03:00,ADT -2005-10-30T05:00:00,-04:00,AST -2006-04-02T06:00:00,-03:00,ADT -2006-10-29T05:00:00,-04:00,AST -2007-03-11T06:00:00,-03:00,ADT -2007-11-04T05:00:00,-04:00,AST -2008-03-09T06:00:00,-03:00,ADT -2008-11-02T05:00:00,-04:00,AST -2009-03-08T06:00:00,-03:00,ADT -2009-11-01T05:00:00,-04:00,AST -2010-03-14T06:00:00,-03:00,ADT -2010-11-07T05:00:00,-04:00,AST -2011-03-13T06:00:00,-03:00,ADT -2011-11-06T05:00:00,-04:00,AST -2012-03-11T06:00:00,-03:00,ADT -2012-11-04T05:00:00,-04:00,AST -2013-03-10T06:00:00,-03:00,ADT -2013-11-03T05:00:00,-04:00,AST -2014-03-09T06:00:00,-03:00,ADT -2014-11-02T05:00:00,-04:00,AST -2015-03-08T06:00:00,-03:00,ADT -2015-11-01T05:00:00,-04:00,AST -2016-03-13T06:00:00,-03:00,ADT -2016-11-06T05:00:00,-04:00,AST -2017-03-12T06:00:00,-03:00,ADT -2017-11-05T05:00:00,-04:00,AST -2018-03-11T06:00:00,-03:00,ADT -2018-11-04T05:00:00,-04:00,AST -2019-03-10T06:00:00,-03:00,ADT -2019-11-03T05:00:00,-04:00,AST -2020-03-08T06:00:00,-03:00,ADT -2020-11-01T05:00:00,-04:00,AST -2021-03-14T06:00:00,-03:00,ADT -2021-11-07T05:00:00,-04:00,AST -2022-03-13T06:00:00,-03:00,ADT -2022-11-06T05:00:00,-04:00,AST -2023-03-12T06:00:00,-03:00,ADT -2023-11-05T05:00:00,-04:00,AST -2024-03-10T06:00:00,-03:00,ADT -2024-11-03T05:00:00,-04:00,AST -2025-03-09T06:00:00,-03:00,ADT -2025-11-02T05:00:00,-04:00,AST -2026-03-08T06:00:00,-03:00,ADT -2026-11-01T05:00:00,-04:00,AST -2027-03-14T06:00:00,-03:00,ADT -2027-11-07T05:00:00,-04:00,AST -2028-03-12T06:00:00,-03:00,ADT -2028-11-05T05:00:00,-04:00,AST -2029-03-11T06:00:00,-03:00,ADT -2029-11-04T05:00:00,-04:00,AST -2030-03-10T06:00:00,-03:00,ADT -2030-11-03T05:00:00,-04:00,AST -2031-03-09T06:00:00,-03:00,ADT -2031-11-02T05:00:00,-04:00,AST -2032-03-14T06:00:00,-03:00,ADT -2032-11-07T05:00:00,-04:00,AST -2033-03-13T06:00:00,-03:00,ADT -2033-11-06T05:00:00,-04:00,AST -2034-03-12T06:00:00,-03:00,ADT -2034-11-05T05:00:00,-04:00,AST -2035-03-11T06:00:00,-03:00,ADT -2035-11-04T05:00:00,-04:00,AST -2036-03-09T06:00:00,-03:00,ADT -2036-11-02T05:00:00,-04:00,AST -2037-03-08T06:00:00,-03:00,ADT -2037-11-01T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-goose-bay.hoon b/desk/lib/pytz/america-goose-bay.hoon deleted file mode 100644 index 17cf552..0000000 --- a/desk/lib/pytz/america-goose-bay.hoon +++ /dev/null @@ -1,208 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-04:29,NST -1918-04-14T05:30:52,-03:29,NDT -1918-10-27T04:30:52,-04:29,NST -1935-03-30T03:30:52,-04:30,NST -1936-05-11T03:30:00,-03:30,NDT -1936-10-05T02:30:00,-04:30,NST -1937-05-10T03:30:00,-03:30,NDT -1937-10-04T02:30:00,-04:30,NST -1938-05-09T03:30:00,-03:30,NDT -1938-10-03T02:30:00,-04:30,NST -1939-05-15T03:30:00,-03:30,NDT -1939-10-02T02:30:00,-04:30,NST -1940-05-13T03:30:00,-03:30,NDT -1940-10-07T02:30:00,-04:30,NST -1941-05-12T03:30:00,-03:30,NDT -1941-10-06T02:30:00,-04:30,NST -1942-05-11T03:30:00,-03:30,NWT -1945-08-14T23:00:00,-03:30,NPT -1945-09-30T04:30:00,-04:30,NST -1946-05-12T05:30:00,-03:30,NDT -1946-10-06T04:30:00,-04:30,NST -1947-05-11T05:30:00,-03:30,NDT -1947-10-05T04:30:00,-04:30,NST -1948-05-09T05:30:00,-03:30,NDT -1948-10-03T04:30:00,-04:30,NST -1949-05-08T05:30:00,-03:30,NDT -1949-10-02T04:30:00,-04:30,NST -1950-05-14T05:30:00,-03:30,NDT -1950-10-08T04:30:00,-04:30,NST -1951-04-29T05:30:00,-03:30,NDT -1951-09-30T04:30:00,-04:30,NST -1952-04-27T05:30:00,-03:30,NDT -1952-09-28T04:30:00,-04:30,NST -1953-04-26T05:30:00,-03:30,NDT -1953-09-27T04:30:00,-04:30,NST -1954-04-25T05:30:00,-03:30,NDT -1954-09-26T04:30:00,-04:30,NST -1955-04-24T05:30:00,-03:30,NDT -1955-09-25T04:30:00,-04:30,NST -1956-04-29T05:30:00,-03:30,NDT -1956-09-30T04:30:00,-04:30,NST -1957-04-28T05:30:00,-03:30,NDT -1957-09-29T04:30:00,-04:30,NST -1958-04-27T05:30:00,-03:30,NDT -1958-09-28T04:30:00,-04:30,NST -1959-04-26T05:30:00,-03:30,NDT -1959-09-27T04:30:00,-04:30,NST -1960-04-24T05:30:00,-03:30,NDT -1960-10-30T04:30:00,-04:30,NST -1961-04-30T05:30:00,-03:30,NDT -1961-10-29T04:30:00,-04:30,NST -1962-04-29T05:30:00,-03:30,NDT -1962-10-28T04:30:00,-04:30,NST -1963-04-28T05:30:00,-03:30,NDT -1963-10-27T04:30:00,-04:30,NST -1964-04-26T05:30:00,-03:30,NDT -1964-10-25T04:30:00,-04:30,NST -1965-04-25T05:30:00,-03:30,NDT -1965-10-31T04:30:00,-04:30,NST -1966-03-15T05:30:00,-04:00,AST -1966-04-24T06:00:00,-03:00,ADT -1966-10-30T05:00:00,-04:00,AST -1967-04-30T06:00:00,-03:00,ADT -1967-10-29T05:00:00,-04:00,AST -1968-04-28T06:00:00,-03:00,ADT -1968-10-27T05:00:00,-04:00,AST -1969-04-27T06:00:00,-03:00,ADT -1969-10-26T05:00:00,-04:00,AST -1970-04-26T06:00:00,-03:00,ADT -1970-10-25T05:00:00,-04:00,AST -1971-04-25T06:00:00,-03:00,ADT -1971-10-31T05:00:00,-04:00,AST -1972-04-30T06:00:00,-03:00,ADT -1972-10-29T05:00:00,-04:00,AST -1973-04-29T06:00:00,-03:00,ADT -1973-10-28T05:00:00,-04:00,AST -1974-04-28T06:00:00,-03:00,ADT -1974-10-27T05:00:00,-04:00,AST -1975-04-27T06:00:00,-03:00,ADT -1975-10-26T05:00:00,-04:00,AST -1976-04-25T06:00:00,-03:00,ADT -1976-10-31T05:00:00,-04:00,AST -1977-04-24T06:00:00,-03:00,ADT -1977-10-30T05:00:00,-04:00,AST -1978-04-30T06:00:00,-03:00,ADT -1978-10-29T05:00:00,-04:00,AST -1979-04-29T06:00:00,-03:00,ADT -1979-10-28T05:00:00,-04:00,AST -1980-04-27T06:00:00,-03:00,ADT -1980-10-26T05:00:00,-04:00,AST -1981-04-26T06:00:00,-03:00,ADT -1981-10-25T05:00:00,-04:00,AST -1982-04-25T06:00:00,-03:00,ADT -1982-10-31T05:00:00,-04:00,AST -1983-04-24T06:00:00,-03:00,ADT -1983-10-30T05:00:00,-04:00,AST -1984-04-29T06:00:00,-03:00,ADT -1984-10-28T05:00:00,-04:00,AST -1985-04-28T06:00:00,-03:00,ADT -1985-10-27T05:00:00,-04:00,AST -1986-04-27T06:00:00,-03:00,ADT -1986-10-26T05:00:00,-04:00,AST -1987-04-05T04:01:00,-03:00,ADT -1987-10-25T03:01:00,-04:00,AST -1988-04-03T04:01:00,-02:00,ADDT -1988-10-30T02:01:00,-04:00,AST -1989-04-02T04:01:00,-03:00,ADT -1989-10-29T03:01:00,-04:00,AST -1990-04-01T04:01:00,-03:00,ADT -1990-10-28T03:01:00,-04:00,AST -1991-04-07T04:01:00,-03:00,ADT -1991-10-27T03:01:00,-04:00,AST -1992-04-05T04:01:00,-03:00,ADT -1992-10-25T03:01:00,-04:00,AST -1993-04-04T04:01:00,-03:00,ADT -1993-10-31T03:01:00,-04:00,AST -1994-04-03T04:01:00,-03:00,ADT -1994-10-30T03:01:00,-04:00,AST -1995-04-02T04:01:00,-03:00,ADT -1995-10-29T03:01:00,-04:00,AST -1996-04-07T04:01:00,-03:00,ADT -1996-10-27T03:01:00,-04:00,AST -1997-04-06T04:01:00,-03:00,ADT -1997-10-26T03:01:00,-04:00,AST -1998-04-05T04:01:00,-03:00,ADT -1998-10-25T03:01:00,-04:00,AST -1999-04-04T04:01:00,-03:00,ADT -1999-10-31T03:01:00,-04:00,AST -2000-04-02T04:01:00,-03:00,ADT -2000-10-29T03:01:00,-04:00,AST -2001-04-01T04:01:00,-03:00,ADT -2001-10-28T03:01:00,-04:00,AST -2002-04-07T04:01:00,-03:00,ADT -2002-10-27T03:01:00,-04:00,AST -2003-04-06T04:01:00,-03:00,ADT -2003-10-26T03:01:00,-04:00,AST -2004-04-04T04:01:00,-03:00,ADT -2004-10-31T03:01:00,-04:00,AST -2005-04-03T04:01:00,-03:00,ADT -2005-10-30T03:01:00,-04:00,AST -2006-04-02T04:01:00,-03:00,ADT -2006-10-29T03:01:00,-04:00,AST -2007-03-11T04:01:00,-03:00,ADT -2007-11-04T03:01:00,-04:00,AST -2008-03-09T04:01:00,-03:00,ADT -2008-11-02T03:01:00,-04:00,AST -2009-03-08T04:01:00,-03:00,ADT -2009-11-01T03:01:00,-04:00,AST -2010-03-14T04:01:00,-03:00,ADT -2010-11-07T03:01:00,-04:00,AST -2011-03-13T04:01:00,-03:00,ADT -2011-11-06T05:00:00,-04:00,AST -2012-03-11T06:00:00,-03:00,ADT -2012-11-04T05:00:00,-04:00,AST -2013-03-10T06:00:00,-03:00,ADT -2013-11-03T05:00:00,-04:00,AST -2014-03-09T06:00:00,-03:00,ADT -2014-11-02T05:00:00,-04:00,AST -2015-03-08T06:00:00,-03:00,ADT -2015-11-01T05:00:00,-04:00,AST -2016-03-13T06:00:00,-03:00,ADT -2016-11-06T05:00:00,-04:00,AST -2017-03-12T06:00:00,-03:00,ADT -2017-11-05T05:00:00,-04:00,AST -2018-03-11T06:00:00,-03:00,ADT -2018-11-04T05:00:00,-04:00,AST -2019-03-10T06:00:00,-03:00,ADT -2019-11-03T05:00:00,-04:00,AST -2020-03-08T06:00:00,-03:00,ADT -2020-11-01T05:00:00,-04:00,AST -2021-03-14T06:00:00,-03:00,ADT -2021-11-07T05:00:00,-04:00,AST -2022-03-13T06:00:00,-03:00,ADT -2022-11-06T05:00:00,-04:00,AST -2023-03-12T06:00:00,-03:00,ADT -2023-11-05T05:00:00,-04:00,AST -2024-03-10T06:00:00,-03:00,ADT -2024-11-03T05:00:00,-04:00,AST -2025-03-09T06:00:00,-03:00,ADT -2025-11-02T05:00:00,-04:00,AST -2026-03-08T06:00:00,-03:00,ADT -2026-11-01T05:00:00,-04:00,AST -2027-03-14T06:00:00,-03:00,ADT -2027-11-07T05:00:00,-04:00,AST -2028-03-12T06:00:00,-03:00,ADT -2028-11-05T05:00:00,-04:00,AST -2029-03-11T06:00:00,-03:00,ADT -2029-11-04T05:00:00,-04:00,AST -2030-03-10T06:00:00,-03:00,ADT -2030-11-03T05:00:00,-04:00,AST -2031-03-09T06:00:00,-03:00,ADT -2031-11-02T05:00:00,-04:00,AST -2032-03-14T06:00:00,-03:00,ADT -2032-11-07T05:00:00,-04:00,AST -2033-03-13T06:00:00,-03:00,ADT -2033-11-06T05:00:00,-04:00,AST -2034-03-12T06:00:00,-03:00,ADT -2034-11-05T05:00:00,-04:00,AST -2035-03-11T06:00:00,-03:00,ADT -2035-11-04T05:00:00,-04:00,AST -2036-03-09T06:00:00,-03:00,ADT -2036-11-02T05:00:00,-04:00,AST -2037-03-08T06:00:00,-03:00,ADT -2037-11-01T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-grand-turk.hoon b/desk/lib/pytz/america-grand-turk.hoon deleted file mode 100644 index 5ba44bf..0000000 --- a/desk/lib/pytz/america-grand-turk.hoon +++ /dev/null @@ -1,119 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:53,KMT -1912-02-01T05:07:10,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-05:00,EST -2000-04-02T07:00:00,-04:00,EDT -2000-10-29T06:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,AST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-grenada.hoon b/desk/lib/pytz/america-grenada.hoon deleted file mode 100644 index fb9e22d..0000000 --- a/desk/lib/pytz/america-grenada.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-07-01T04:07:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-guadeloupe.hoon b/desk/lib/pytz/america-guadeloupe.hoon deleted file mode 100644 index 21c380c..0000000 --- a/desk/lib/pytz/america-guadeloupe.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-06-08T04:06:08,-04:00,AST -''' diff --git a/desk/lib/pytz/america-guatemala.hoon b/desk/lib/pytz/america-guatemala.hoon deleted file mode 100644 index 45bc8c0..0000000 --- a/desk/lib/pytz/america-guatemala.hoon +++ /dev/null @@ -1,13 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1918-10-05T06:02:04,-06:00,CST -1973-11-25T06:00:00,-05:00,CDT -1974-02-24T05:00:00,-06:00,CST -1983-05-21T06:00:00,-05:00,CDT -1983-09-22T05:00:00,-06:00,CST -1991-03-23T06:00:00,-05:00,CDT -1991-09-07T05:00:00,-06:00,CST -2006-04-30T06:00:00,-05:00,CDT -2006-10-01T05:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-guayaquil.hoon b/desk/lib/pytz/america-guayaquil.hoon deleted file mode 100644 index 070c3aa..0000000 --- a/desk/lib/pytz/america-guayaquil.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:46,QMT -1931-01-01T05:14:00,-05:00,-05 -1992-11-28T05:00:00,-04:00,-04 -1993-02-05T04:00:00,-05:00,-05 -''' diff --git a/desk/lib/pytz/america-guyana.hoon b/desk/lib/pytz/america-guyana.hoon deleted file mode 100644 index 24e91a6..0000000 --- a/desk/lib/pytz/america-guyana.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-08-01T03:52:39,-04:00,-04 -1915-03-01T04:00:00,-04:15,-0345 -1975-08-01T03:45:00,-03:00,-03 -1992-03-29T04:00:00,-04:00,-04 -''' diff --git a/desk/lib/pytz/america-halifax.hoon b/desk/lib/pytz/america-halifax.hoon deleted file mode 100644 index 3187a7f..0000000 --- a/desk/lib/pytz/america-halifax.hoon +++ /dev/null @@ -1,232 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1902-06-15T04:14:24,-04:00,AST -1916-04-01T04:00:00,-03:00,ADT -1916-10-01T03:00:00,-04:00,AST -1918-04-14T06:00:00,-03:00,ADT -1918-10-27T05:00:00,-04:00,AST -1920-05-09T04:00:00,-03:00,ADT -1920-08-29T03:00:00,-04:00,AST -1921-05-06T04:00:00,-03:00,ADT -1921-09-05T03:00:00,-04:00,AST -1922-04-30T04:00:00,-03:00,ADT -1922-09-05T03:00:00,-04:00,AST -1923-05-06T04:00:00,-03:00,ADT -1923-09-04T03:00:00,-04:00,AST -1924-05-04T04:00:00,-03:00,ADT -1924-09-15T03:00:00,-04:00,AST -1925-05-03T04:00:00,-03:00,ADT -1925-09-28T03:00:00,-04:00,AST -1926-05-16T04:00:00,-03:00,ADT -1926-09-13T03:00:00,-04:00,AST -1927-05-01T04:00:00,-03:00,ADT -1927-09-26T03:00:00,-04:00,AST -1928-05-13T04:00:00,-03:00,ADT -1928-09-09T03:00:00,-04:00,AST -1929-05-12T04:00:00,-03:00,ADT -1929-09-03T03:00:00,-04:00,AST -1930-05-11T04:00:00,-03:00,ADT -1930-09-15T03:00:00,-04:00,AST -1931-05-10T04:00:00,-03:00,ADT -1931-09-28T03:00:00,-04:00,AST -1932-05-01T04:00:00,-03:00,ADT -1932-09-26T03:00:00,-04:00,AST -1933-04-30T04:00:00,-03:00,ADT -1933-10-02T03:00:00,-04:00,AST -1934-05-20T04:00:00,-03:00,ADT -1934-09-16T03:00:00,-04:00,AST -1935-06-02T04:00:00,-03:00,ADT -1935-09-30T03:00:00,-04:00,AST -1936-06-01T04:00:00,-03:00,ADT -1936-09-14T03:00:00,-04:00,AST -1937-05-02T04:00:00,-03:00,ADT -1937-09-27T03:00:00,-04:00,AST -1938-05-01T04:00:00,-03:00,ADT -1938-09-26T03:00:00,-04:00,AST -1939-05-28T04:00:00,-03:00,ADT -1939-09-25T03:00:00,-04:00,AST -1940-05-05T04:00:00,-03:00,ADT -1940-09-30T03:00:00,-04:00,AST -1941-05-04T04:00:00,-03:00,ADT -1941-09-29T03:00:00,-04:00,AST -1942-02-09T06:00:00,-03:00,AWT -1945-08-14T23:00:00,-03:00,APT -1945-09-30T05:00:00,-04:00,AST -1946-04-28T06:00:00,-03:00,ADT -1946-09-29T05:00:00,-04:00,AST -1947-04-27T06:00:00,-03:00,ADT -1947-09-28T05:00:00,-04:00,AST -1948-04-25T06:00:00,-03:00,ADT -1948-09-26T05:00:00,-04:00,AST -1949-04-24T06:00:00,-03:00,ADT -1949-09-25T05:00:00,-04:00,AST -1951-04-29T06:00:00,-03:00,ADT -1951-09-30T05:00:00,-04:00,AST -1952-04-27T06:00:00,-03:00,ADT -1952-09-28T05:00:00,-04:00,AST -1953-04-26T06:00:00,-03:00,ADT -1953-09-27T05:00:00,-04:00,AST -1954-04-25T06:00:00,-03:00,ADT -1954-09-26T05:00:00,-04:00,AST -1956-04-29T06:00:00,-03:00,ADT -1956-09-30T05:00:00,-04:00,AST -1957-04-28T06:00:00,-03:00,ADT -1957-09-29T05:00:00,-04:00,AST -1958-04-27T06:00:00,-03:00,ADT -1958-09-28T05:00:00,-04:00,AST -1959-04-26T06:00:00,-03:00,ADT -1959-09-27T05:00:00,-04:00,AST -1962-04-29T06:00:00,-03:00,ADT -1962-10-28T05:00:00,-04:00,AST -1963-04-28T06:00:00,-03:00,ADT -1963-10-27T05:00:00,-04:00,AST -1964-04-26T06:00:00,-03:00,ADT -1964-10-25T05:00:00,-04:00,AST -1965-04-25T06:00:00,-03:00,ADT -1965-10-31T05:00:00,-04:00,AST -1966-04-24T06:00:00,-03:00,ADT -1966-10-30T05:00:00,-04:00,AST -1967-04-30T06:00:00,-03:00,ADT -1967-10-29T05:00:00,-04:00,AST -1968-04-28T06:00:00,-03:00,ADT -1968-10-27T05:00:00,-04:00,AST -1969-04-27T06:00:00,-03:00,ADT -1969-10-26T05:00:00,-04:00,AST -1970-04-26T06:00:00,-03:00,ADT -1970-10-25T05:00:00,-04:00,AST -1971-04-25T06:00:00,-03:00,ADT -1971-10-31T05:00:00,-04:00,AST -1972-04-30T06:00:00,-03:00,ADT -1972-10-29T05:00:00,-04:00,AST -1973-04-29T06:00:00,-03:00,ADT -1973-10-28T05:00:00,-04:00,AST -1974-04-28T06:00:00,-03:00,ADT -1974-10-27T05:00:00,-04:00,AST -1975-04-27T06:00:00,-03:00,ADT -1975-10-26T05:00:00,-04:00,AST -1976-04-25T06:00:00,-03:00,ADT -1976-10-31T05:00:00,-04:00,AST -1977-04-24T06:00:00,-03:00,ADT -1977-10-30T05:00:00,-04:00,AST -1978-04-30T06:00:00,-03:00,ADT -1978-10-29T05:00:00,-04:00,AST -1979-04-29T06:00:00,-03:00,ADT -1979-10-28T05:00:00,-04:00,AST -1980-04-27T06:00:00,-03:00,ADT -1980-10-26T05:00:00,-04:00,AST -1981-04-26T06:00:00,-03:00,ADT -1981-10-25T05:00:00,-04:00,AST -1982-04-25T06:00:00,-03:00,ADT -1982-10-31T05:00:00,-04:00,AST -1983-04-24T06:00:00,-03:00,ADT -1983-10-30T05:00:00,-04:00,AST -1984-04-29T06:00:00,-03:00,ADT -1984-10-28T05:00:00,-04:00,AST -1985-04-28T06:00:00,-03:00,ADT -1985-10-27T05:00:00,-04:00,AST -1986-04-27T06:00:00,-03:00,ADT -1986-10-26T05:00:00,-04:00,AST -1987-04-05T06:00:00,-03:00,ADT -1987-10-25T05:00:00,-04:00,AST -1988-04-03T06:00:00,-03:00,ADT -1988-10-30T05:00:00,-04:00,AST -1989-04-02T06:00:00,-03:00,ADT -1989-10-29T05:00:00,-04:00,AST -1990-04-01T06:00:00,-03:00,ADT -1990-10-28T05:00:00,-04:00,AST -1991-04-07T06:00:00,-03:00,ADT -1991-10-27T05:00:00,-04:00,AST -1992-04-05T06:00:00,-03:00,ADT -1992-10-25T05:00:00,-04:00,AST -1993-04-04T06:00:00,-03:00,ADT -1993-10-31T05:00:00,-04:00,AST -1994-04-03T06:00:00,-03:00,ADT -1994-10-30T05:00:00,-04:00,AST -1995-04-02T06:00:00,-03:00,ADT -1995-10-29T05:00:00,-04:00,AST -1996-04-07T06:00:00,-03:00,ADT -1996-10-27T05:00:00,-04:00,AST -1997-04-06T06:00:00,-03:00,ADT -1997-10-26T05:00:00,-04:00,AST -1998-04-05T06:00:00,-03:00,ADT -1998-10-25T05:00:00,-04:00,AST -1999-04-04T06:00:00,-03:00,ADT -1999-10-31T05:00:00,-04:00,AST -2000-04-02T06:00:00,-03:00,ADT -2000-10-29T05:00:00,-04:00,AST -2001-04-01T06:00:00,-03:00,ADT -2001-10-28T05:00:00,-04:00,AST -2002-04-07T06:00:00,-03:00,ADT -2002-10-27T05:00:00,-04:00,AST -2003-04-06T06:00:00,-03:00,ADT -2003-10-26T05:00:00,-04:00,AST -2004-04-04T06:00:00,-03:00,ADT -2004-10-31T05:00:00,-04:00,AST -2005-04-03T06:00:00,-03:00,ADT -2005-10-30T05:00:00,-04:00,AST -2006-04-02T06:00:00,-03:00,ADT -2006-10-29T05:00:00,-04:00,AST -2007-03-11T06:00:00,-03:00,ADT -2007-11-04T05:00:00,-04:00,AST -2008-03-09T06:00:00,-03:00,ADT -2008-11-02T05:00:00,-04:00,AST -2009-03-08T06:00:00,-03:00,ADT -2009-11-01T05:00:00,-04:00,AST -2010-03-14T06:00:00,-03:00,ADT -2010-11-07T05:00:00,-04:00,AST -2011-03-13T06:00:00,-03:00,ADT -2011-11-06T05:00:00,-04:00,AST -2012-03-11T06:00:00,-03:00,ADT -2012-11-04T05:00:00,-04:00,AST -2013-03-10T06:00:00,-03:00,ADT -2013-11-03T05:00:00,-04:00,AST -2014-03-09T06:00:00,-03:00,ADT -2014-11-02T05:00:00,-04:00,AST -2015-03-08T06:00:00,-03:00,ADT -2015-11-01T05:00:00,-04:00,AST -2016-03-13T06:00:00,-03:00,ADT -2016-11-06T05:00:00,-04:00,AST -2017-03-12T06:00:00,-03:00,ADT -2017-11-05T05:00:00,-04:00,AST -2018-03-11T06:00:00,-03:00,ADT -2018-11-04T05:00:00,-04:00,AST -2019-03-10T06:00:00,-03:00,ADT -2019-11-03T05:00:00,-04:00,AST -2020-03-08T06:00:00,-03:00,ADT -2020-11-01T05:00:00,-04:00,AST -2021-03-14T06:00:00,-03:00,ADT -2021-11-07T05:00:00,-04:00,AST -2022-03-13T06:00:00,-03:00,ADT -2022-11-06T05:00:00,-04:00,AST -2023-03-12T06:00:00,-03:00,ADT -2023-11-05T05:00:00,-04:00,AST -2024-03-10T06:00:00,-03:00,ADT -2024-11-03T05:00:00,-04:00,AST -2025-03-09T06:00:00,-03:00,ADT -2025-11-02T05:00:00,-04:00,AST -2026-03-08T06:00:00,-03:00,ADT -2026-11-01T05:00:00,-04:00,AST -2027-03-14T06:00:00,-03:00,ADT -2027-11-07T05:00:00,-04:00,AST -2028-03-12T06:00:00,-03:00,ADT -2028-11-05T05:00:00,-04:00,AST -2029-03-11T06:00:00,-03:00,ADT -2029-11-04T05:00:00,-04:00,AST -2030-03-10T06:00:00,-03:00,ADT -2030-11-03T05:00:00,-04:00,AST -2031-03-09T06:00:00,-03:00,ADT -2031-11-02T05:00:00,-04:00,AST -2032-03-14T06:00:00,-03:00,ADT -2032-11-07T05:00:00,-04:00,AST -2033-03-13T06:00:00,-03:00,ADT -2033-11-06T05:00:00,-04:00,AST -2034-03-12T06:00:00,-03:00,ADT -2034-11-05T05:00:00,-04:00,AST -2035-03-11T06:00:00,-03:00,ADT -2035-11-04T05:00:00,-04:00,AST -2036-03-09T06:00:00,-03:00,ADT -2036-11-02T05:00:00,-04:00,AST -2037-03-08T06:00:00,-03:00,ADT -2037-11-01T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-havana.hoon b/desk/lib/pytz/america-havana.hoon deleted file mode 100644 index 8001305..0000000 --- a/desk/lib/pytz/america-havana.hoon +++ /dev/null @@ -1,160 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:30,HMT -1925-07-19T17:29:36,-05:00,CST -1928-06-10T05:00:00,-04:00,CDT -1928-10-10T04:00:00,-05:00,CST -1940-06-02T05:00:00,-04:00,CDT -1940-09-01T04:00:00,-05:00,CST -1941-06-01T05:00:00,-04:00,CDT -1941-09-07T04:00:00,-05:00,CST -1942-06-07T05:00:00,-04:00,CDT -1942-09-06T04:00:00,-05:00,CST -1945-06-03T05:00:00,-04:00,CDT -1945-09-02T04:00:00,-05:00,CST -1946-06-02T05:00:00,-04:00,CDT -1946-09-01T04:00:00,-05:00,CST -1965-06-01T05:00:00,-04:00,CDT -1965-09-30T04:00:00,-05:00,CST -1966-05-29T05:00:00,-04:00,CDT -1966-10-02T04:00:00,-05:00,CST -1967-04-08T05:00:00,-04:00,CDT -1967-09-10T04:00:00,-05:00,CST -1968-04-14T05:00:00,-04:00,CDT -1968-09-08T04:00:00,-05:00,CST -1969-04-27T05:00:00,-04:00,CDT -1969-10-26T04:00:00,-05:00,CST -1970-04-26T05:00:00,-04:00,CDT -1970-10-25T04:00:00,-05:00,CST -1971-04-25T05:00:00,-04:00,CDT -1971-10-31T04:00:00,-05:00,CST -1972-04-30T05:00:00,-04:00,CDT -1972-10-08T04:00:00,-05:00,CST -1973-04-29T05:00:00,-04:00,CDT -1973-10-08T04:00:00,-05:00,CST -1974-04-28T05:00:00,-04:00,CDT -1974-10-08T04:00:00,-05:00,CST -1975-04-27T05:00:00,-04:00,CDT -1975-10-26T04:00:00,-05:00,CST -1976-04-25T05:00:00,-04:00,CDT -1976-10-31T04:00:00,-05:00,CST -1977-04-24T05:00:00,-04:00,CDT -1977-10-30T04:00:00,-05:00,CST -1978-05-07T05:00:00,-04:00,CDT -1978-10-08T04:00:00,-05:00,CST -1979-03-18T05:00:00,-04:00,CDT -1979-10-14T04:00:00,-05:00,CST -1980-03-16T05:00:00,-04:00,CDT -1980-10-12T04:00:00,-05:00,CST -1981-05-10T05:00:00,-04:00,CDT -1981-10-11T04:00:00,-05:00,CST -1982-05-09T05:00:00,-04:00,CDT -1982-10-10T04:00:00,-05:00,CST -1983-05-08T05:00:00,-04:00,CDT -1983-10-09T04:00:00,-05:00,CST -1984-05-06T05:00:00,-04:00,CDT -1984-10-14T04:00:00,-05:00,CST -1985-05-05T05:00:00,-04:00,CDT -1985-10-13T04:00:00,-05:00,CST -1986-03-16T05:00:00,-04:00,CDT -1986-10-12T04:00:00,-05:00,CST -1987-03-15T05:00:00,-04:00,CDT -1987-10-11T04:00:00,-05:00,CST -1988-03-20T05:00:00,-04:00,CDT -1988-10-09T04:00:00,-05:00,CST -1989-03-19T05:00:00,-04:00,CDT -1989-10-08T04:00:00,-05:00,CST -1990-04-01T05:00:00,-04:00,CDT -1990-10-14T04:00:00,-05:00,CST -1991-04-07T05:00:00,-04:00,CDT -1991-10-13T05:00:00,-05:00,CST -1992-04-05T05:00:00,-04:00,CDT -1992-10-11T05:00:00,-05:00,CST -1993-04-04T05:00:00,-04:00,CDT -1993-10-10T05:00:00,-05:00,CST -1994-04-03T05:00:00,-04:00,CDT -1994-10-09T05:00:00,-05:00,CST -1995-04-02T05:00:00,-04:00,CDT -1995-10-08T05:00:00,-05:00,CST -1996-04-07T05:00:00,-04:00,CDT -1996-10-06T05:00:00,-05:00,CST -1997-04-06T05:00:00,-04:00,CDT -1997-10-12T05:00:00,-05:00,CST -1998-03-29T05:00:00,-04:00,CDT -1998-10-25T05:00:00,-05:00,CST -1999-03-28T05:00:00,-04:00,CDT -1999-10-31T05:00:00,-05:00,CST -2000-04-02T05:00:00,-04:00,CDT -2000-10-29T05:00:00,-05:00,CST -2001-04-01T05:00:00,-04:00,CDT -2001-10-28T05:00:00,-05:00,CST -2002-04-07T05:00:00,-04:00,CDT -2002-10-27T05:00:00,-05:00,CST -2003-04-06T05:00:00,-04:00,CDT -2003-10-26T05:00:00,-05:00,CST -2004-03-28T05:00:00,-04:00,CDT -2006-10-29T05:00:00,-05:00,CST -2007-03-11T05:00:00,-04:00,CDT -2007-10-28T05:00:00,-05:00,CST -2008-03-16T05:00:00,-04:00,CDT -2008-10-26T05:00:00,-05:00,CST -2009-03-08T05:00:00,-04:00,CDT -2009-10-25T05:00:00,-05:00,CST -2010-03-14T05:00:00,-04:00,CDT -2010-10-31T05:00:00,-05:00,CST -2011-03-20T05:00:00,-04:00,CDT -2011-11-13T05:00:00,-05:00,CST -2012-04-01T05:00:00,-04:00,CDT -2012-11-04T05:00:00,-05:00,CST -2013-03-10T05:00:00,-04:00,CDT -2013-11-03T05:00:00,-05:00,CST -2014-03-09T05:00:00,-04:00,CDT -2014-11-02T05:00:00,-05:00,CST -2015-03-08T05:00:00,-04:00,CDT -2015-11-01T05:00:00,-05:00,CST -2016-03-13T05:00:00,-04:00,CDT -2016-11-06T05:00:00,-05:00,CST -2017-03-12T05:00:00,-04:00,CDT -2017-11-05T05:00:00,-05:00,CST -2018-03-11T05:00:00,-04:00,CDT -2018-11-04T05:00:00,-05:00,CST -2019-03-10T05:00:00,-04:00,CDT -2019-11-03T05:00:00,-05:00,CST -2020-03-08T05:00:00,-04:00,CDT -2020-11-01T05:00:00,-05:00,CST -2021-03-14T05:00:00,-04:00,CDT -2021-11-07T05:00:00,-05:00,CST -2022-03-13T05:00:00,-04:00,CDT -2022-11-06T05:00:00,-05:00,CST -2023-03-12T05:00:00,-04:00,CDT -2023-11-05T05:00:00,-05:00,CST -2024-03-10T05:00:00,-04:00,CDT -2024-11-03T05:00:00,-05:00,CST -2025-03-09T05:00:00,-04:00,CDT -2025-11-02T05:00:00,-05:00,CST -2026-03-08T05:00:00,-04:00,CDT -2026-11-01T05:00:00,-05:00,CST -2027-03-14T05:00:00,-04:00,CDT -2027-11-07T05:00:00,-05:00,CST -2028-03-12T05:00:00,-04:00,CDT -2028-11-05T05:00:00,-05:00,CST -2029-03-11T05:00:00,-04:00,CDT -2029-11-04T05:00:00,-05:00,CST -2030-03-10T05:00:00,-04:00,CDT -2030-11-03T05:00:00,-05:00,CST -2031-03-09T05:00:00,-04:00,CDT -2031-11-02T05:00:00,-05:00,CST -2032-03-14T05:00:00,-04:00,CDT -2032-11-07T05:00:00,-05:00,CST -2033-03-13T05:00:00,-04:00,CDT -2033-11-06T05:00:00,-05:00,CST -2034-03-12T05:00:00,-04:00,CDT -2034-11-05T05:00:00,-05:00,CST -2035-03-11T05:00:00,-04:00,CDT -2035-11-04T05:00:00,-05:00,CST -2036-03-09T05:00:00,-04:00,CDT -2036-11-02T05:00:00,-05:00,CST -2037-03-08T05:00:00,-04:00,CDT -2037-11-01T05:00:00,-05:00,CST -''' diff --git a/desk/lib/pytz/america-hermosillo.hoon b/desk/lib/pytz/america-hermosillo.hoon deleted file mode 100644 index f6a9985..0000000 --- a/desk/lib/pytz/america-hermosillo.hoon +++ /dev/null @@ -1,17 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1927-06-10T07:00:00,-06:00,CST -1930-11-15T06:00:00,-07:00,MST -1931-04-30T07:00:00,-06:00,MDT -1931-10-01T06:00:00,-07:00,MST -1932-04-01T07:00:00,-06:00,CST -1942-04-24T06:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-indiana-indianapolis.hoon b/desk/lib/pytz/america-indiana-indianapolis.hoon deleted file mode 100644 index c9eab0f..0000000 --- a/desk/lib/pytz/america-indiana-indianapolis.hoon +++ /dev/null @@ -1,103 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1941-06-22T08:00:00,-05:00,CDT -1941-09-28T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1946-04-28T08:00:00,-05:00,CDT -1946-09-29T07:00:00,-06:00,CST -1947-04-27T08:00:00,-05:00,CDT -1947-09-28T07:00:00,-06:00,CST -1948-04-25T08:00:00,-05:00,CDT -1948-09-26T07:00:00,-06:00,CST -1949-04-24T08:00:00,-05:00,CDT -1949-09-25T07:00:00,-06:00,CST -1950-04-30T08:00:00,-05:00,CDT -1950-09-24T07:00:00,-06:00,CST -1951-04-29T08:00:00,-05:00,CDT -1951-09-30T07:00:00,-06:00,CST -1952-04-27T08:00:00,-05:00,CDT -1952-09-28T07:00:00,-06:00,CST -1953-04-26T08:00:00,-05:00,CDT -1953-09-27T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,CDT -1954-09-26T07:00:00,-06:00,CST -1955-04-24T08:00:00,-05:00,EST -1957-09-29T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-indiana-knox.hoon b/desk/lib/pytz/america-indiana-knox.hoon deleted file mode 100644 index a108f17..0000000 --- a/desk/lib/pytz/america-indiana-knox.hoon +++ /dev/null @@ -1,158 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1947-04-27T08:00:00,-05:00,CDT -1947-09-28T07:00:00,-06:00,CST -1948-04-25T08:00:00,-05:00,CDT -1948-09-26T07:00:00,-06:00,CST -1949-04-24T08:00:00,-05:00,CDT -1949-09-25T07:00:00,-06:00,CST -1950-04-30T08:00:00,-05:00,CDT -1950-09-24T07:00:00,-06:00,CST -1951-04-29T08:00:00,-05:00,CDT -1951-09-30T07:00:00,-06:00,CST -1952-04-27T08:00:00,-05:00,CDT -1952-09-28T07:00:00,-06:00,CST -1953-04-26T08:00:00,-05:00,CDT -1953-09-27T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,CDT -1954-09-26T07:00:00,-06:00,CST -1955-04-24T08:00:00,-05:00,CDT -1955-10-30T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-10-28T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-09-29T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-09-28T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-10-25T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-10-30T07:00:00,-06:00,CST -1961-04-30T08:00:00,-05:00,CDT -1961-10-29T07:00:00,-06:00,CST -1962-04-29T08:00:00,-05:00,EST -1963-10-27T07:00:00,-06:00,CST -1967-04-30T08:00:00,-05:00,CDT -1967-10-29T07:00:00,-06:00,CST -1968-04-28T08:00:00,-05:00,CDT -1968-10-27T07:00:00,-06:00,CST -1969-04-27T08:00:00,-05:00,CDT -1969-10-26T07:00:00,-06:00,CST -1970-04-26T08:00:00,-05:00,CDT -1970-10-25T07:00:00,-06:00,CST -1971-04-25T08:00:00,-05:00,CDT -1971-10-31T07:00:00,-06:00,CST -1972-04-30T08:00:00,-05:00,CDT -1972-10-29T07:00:00,-06:00,CST -1973-04-29T08:00:00,-05:00,CDT -1973-10-28T07:00:00,-06:00,CST -1974-01-06T08:00:00,-05:00,CDT -1974-10-27T07:00:00,-06:00,CST -1975-02-23T08:00:00,-05:00,CDT -1975-10-26T07:00:00,-06:00,CST -1976-04-25T08:00:00,-05:00,CDT -1976-10-31T07:00:00,-06:00,CST -1977-04-24T08:00:00,-05:00,CDT -1977-10-30T07:00:00,-06:00,CST -1978-04-30T08:00:00,-05:00,CDT -1978-10-29T07:00:00,-06:00,CST -1979-04-29T08:00:00,-05:00,CDT -1979-10-28T07:00:00,-06:00,CST -1980-04-27T08:00:00,-05:00,CDT -1980-10-26T07:00:00,-06:00,CST -1981-04-26T08:00:00,-05:00,CDT -1981-10-25T07:00:00,-06:00,CST -1982-04-25T08:00:00,-05:00,CDT -1982-10-31T07:00:00,-06:00,CST -1983-04-24T08:00:00,-05:00,CDT -1983-10-30T07:00:00,-06:00,CST -1984-04-29T08:00:00,-05:00,CDT -1984-10-28T07:00:00,-06:00,CST -1985-04-28T08:00:00,-05:00,CDT -1985-10-27T07:00:00,-06:00,CST -1986-04-27T08:00:00,-05:00,CDT -1986-10-26T07:00:00,-06:00,CST -1987-04-05T08:00:00,-05:00,CDT -1987-10-25T07:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T07:00:00,-06:00,CST -1989-04-02T08:00:00,-05:00,CDT -1989-10-29T07:00:00,-06:00,CST -1990-04-01T08:00:00,-05:00,CDT -1990-10-28T07:00:00,-06:00,CST -1991-04-07T08:00:00,-05:00,CDT -1991-10-27T07:00:00,-05:00,EST -2006-04-02T07:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-indiana-marengo.hoon b/desk/lib/pytz/america-indiana-marengo.hoon deleted file mode 100644 index 2b47def..0000000 --- a/desk/lib/pytz/america-indiana-marengo.hoon +++ /dev/null @@ -1,107 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1951-04-29T08:00:00,-05:00,CDT -1951-09-30T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,CDT -1954-09-26T07:00:00,-06:00,CST -1955-04-24T08:00:00,-05:00,CDT -1955-09-25T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-09-30T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-09-29T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-09-28T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-09-27T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-09-25T07:00:00,-06:00,CST -1961-04-30T08:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -1971-04-25T07:00:00,-04:00,EDT -1971-10-31T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-01-06T07:00:00,-05:00,CDT -1974-10-27T07:00:00,-05:00,EST -1975-02-23T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-indiana-petersburg.hoon b/desk/lib/pytz/america-indiana-petersburg.hoon deleted file mode 100644 index 629f69b..0000000 --- a/desk/lib/pytz/america-indiana-petersburg.hoon +++ /dev/null @@ -1,120 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1955-05-01T06:00:00,-05:00,CDT -1955-09-25T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-09-30T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-09-29T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-09-28T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-09-27T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-09-25T07:00:00,-06:00,CST -1961-04-30T08:00:00,-05:00,CDT -1961-10-29T07:00:00,-06:00,CST -1962-04-29T08:00:00,-05:00,CDT -1962-10-28T07:00:00,-06:00,CST -1963-04-28T08:00:00,-05:00,CDT -1963-10-27T07:00:00,-06:00,CST -1964-04-26T08:00:00,-05:00,CDT -1964-10-25T07:00:00,-06:00,CST -1965-04-25T08:00:00,-05:00,EST -1966-10-30T07:00:00,-06:00,CST -1967-04-30T08:00:00,-05:00,CDT -1967-10-29T07:00:00,-06:00,CST -1968-04-28T08:00:00,-05:00,CDT -1968-10-27T07:00:00,-06:00,CST -1969-04-27T08:00:00,-05:00,CDT -1969-10-26T07:00:00,-06:00,CST -1970-04-26T08:00:00,-05:00,CDT -1970-10-25T07:00:00,-06:00,CST -1971-04-25T08:00:00,-05:00,CDT -1971-10-31T07:00:00,-06:00,CST -1972-04-30T08:00:00,-05:00,CDT -1972-10-29T07:00:00,-06:00,CST -1973-04-29T08:00:00,-05:00,CDT -1973-10-28T07:00:00,-06:00,CST -1974-01-06T08:00:00,-05:00,CDT -1974-10-27T07:00:00,-06:00,CST -1975-02-23T08:00:00,-05:00,CDT -1975-10-26T07:00:00,-06:00,CST -1976-04-25T08:00:00,-05:00,CDT -1976-10-31T07:00:00,-06:00,CST -1977-04-24T08:00:00,-05:00,CDT -1977-10-30T07:00:00,-05:00,EST -2006-04-02T07:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-indiana-tell-city.hoon b/desk/lib/pytz/america-indiana-tell-city.hoon deleted file mode 100644 index c81e50f..0000000 --- a/desk/lib/pytz/america-indiana-tell-city.hoon +++ /dev/null @@ -1,102 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1955-05-01T06:00:00,-05:00,CDT -1955-09-25T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-09-30T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-09-29T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-09-28T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-09-27T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-09-25T07:00:00,-06:00,CST -1961-04-30T08:00:00,-05:00,CDT -1961-10-29T07:00:00,-06:00,CST -1962-04-29T08:00:00,-05:00,CDT -1962-10-28T07:00:00,-06:00,CST -1963-04-28T08:00:00,-05:00,CDT -1963-10-27T07:00:00,-06:00,CST -1964-04-26T08:00:00,-05:00,EST -1967-10-29T07:00:00,-06:00,CST -1968-04-28T08:00:00,-05:00,CDT -1968-10-27T07:00:00,-06:00,CST -1969-04-27T08:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -2006-04-02T07:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-indiana-vevay.hoon b/desk/lib/pytz/america-indiana-vevay.hoon deleted file mode 100644 index 6547988..0000000 --- a/desk/lib/pytz/america-indiana-vevay.hoon +++ /dev/null @@ -1,85 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -1971-04-25T07:00:00,-04:00,EDT -1971-10-31T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-indiana-vincennes.hoon b/desk/lib/pytz/america-indiana-vincennes.hoon deleted file mode 100644 index 231f7d3..0000000 --- a/desk/lib/pytz/america-indiana-vincennes.hoon +++ /dev/null @@ -1,105 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1946-04-28T08:00:00,-05:00,CDT -1946-09-29T07:00:00,-06:00,CST -1953-04-26T08:00:00,-05:00,CDT -1953-09-27T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,CDT -1954-09-26T07:00:00,-06:00,CST -1955-05-01T06:00:00,-05:00,CDT -1955-09-25T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-09-30T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-09-29T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-09-28T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-09-27T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-10-30T07:00:00,-06:00,CST -1961-04-30T08:00:00,-05:00,CDT -1961-09-24T07:00:00,-06:00,CST -1962-04-29T08:00:00,-05:00,CDT -1962-10-28T07:00:00,-06:00,CST -1963-04-28T08:00:00,-05:00,CDT -1963-10-27T07:00:00,-06:00,CST -1964-04-26T08:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -2006-04-02T07:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-indiana-winamac.hoon b/desk/lib/pytz/america-indiana-winamac.hoon deleted file mode 100644 index b7b72e3..0000000 --- a/desk/lib/pytz/america-indiana-winamac.hoon +++ /dev/null @@ -1,111 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1946-04-28T08:00:00,-05:00,CDT -1946-09-29T07:00:00,-06:00,CST -1947-04-27T08:00:00,-05:00,CDT -1947-09-28T07:00:00,-06:00,CST -1948-04-25T08:00:00,-05:00,CDT -1948-09-26T07:00:00,-06:00,CST -1949-04-24T08:00:00,-05:00,CDT -1949-09-25T07:00:00,-06:00,CST -1950-04-30T08:00:00,-05:00,CDT -1950-09-24T07:00:00,-06:00,CST -1951-04-29T08:00:00,-05:00,CDT -1951-09-30T07:00:00,-06:00,CST -1952-04-27T08:00:00,-05:00,CDT -1952-09-28T07:00:00,-06:00,CST -1953-04-26T08:00:00,-05:00,CDT -1953-09-27T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,CDT -1954-09-26T07:00:00,-06:00,CST -1955-04-24T08:00:00,-05:00,CDT -1955-10-30T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-10-28T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-09-29T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-09-28T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-09-27T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-09-25T07:00:00,-06:00,CST -1961-04-30T08:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -2006-04-02T07:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-inuvik.hoon b/desk/lib/pytz/america-inuvik.hoon deleted file mode 100644 index 7528e2b..0000000 --- a/desk/lib/pytz/america-inuvik.hoon +++ /dev/null @@ -1,138 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1953-01-01T00:00:00,-08:00,PST -1972-04-30T10:00:00,-07:00,PDT -1972-10-29T09:00:00,-08:00,PST -1973-04-29T10:00:00,-07:00,PDT -1973-10-28T09:00:00,-08:00,PST -1974-04-28T10:00:00,-07:00,PDT -1974-10-27T09:00:00,-08:00,PST -1975-04-27T10:00:00,-07:00,PDT -1975-10-26T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-07:00,MST -1993-04-04T09:00:00,-06:00,MDT -1993-10-31T08:00:00,-07:00,MST -1994-04-03T09:00:00,-06:00,MDT -1994-10-30T08:00:00,-07:00,MST -1995-04-02T09:00:00,-06:00,MDT -1995-10-29T08:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-04-01T09:00:00,-06:00,MDT -2001-10-28T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-03-11T09:00:00,-06:00,MDT -2007-11-04T08:00:00,-07:00,MST -2008-03-09T09:00:00,-06:00,MDT -2008-11-02T08:00:00,-07:00,MST -2009-03-08T09:00:00,-06:00,MDT -2009-11-01T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-07:00,MST -2011-03-13T09:00:00,-06:00,MDT -2011-11-06T08:00:00,-07:00,MST -2012-03-11T09:00:00,-06:00,MDT -2012-11-04T08:00:00,-07:00,MST -2013-03-10T09:00:00,-06:00,MDT -2013-11-03T08:00:00,-07:00,MST -2014-03-09T09:00:00,-06:00,MDT -2014-11-02T08:00:00,-07:00,MST -2015-03-08T09:00:00,-06:00,MDT -2015-11-01T08:00:00,-07:00,MST -2016-03-13T09:00:00,-06:00,MDT -2016-11-06T08:00:00,-07:00,MST -2017-03-12T09:00:00,-06:00,MDT -2017-11-05T08:00:00,-07:00,MST -2018-03-11T09:00:00,-06:00,MDT -2018-11-04T08:00:00,-07:00,MST -2019-03-10T09:00:00,-06:00,MDT -2019-11-03T08:00:00,-07:00,MST -2020-03-08T09:00:00,-06:00,MDT -2020-11-01T08:00:00,-07:00,MST -2021-03-14T09:00:00,-06:00,MDT -2021-11-07T08:00:00,-07:00,MST -2022-03-13T09:00:00,-06:00,MDT -2022-11-06T08:00:00,-07:00,MST -2023-03-12T09:00:00,-06:00,MDT -2023-11-05T08:00:00,-07:00,MST -2024-03-10T09:00:00,-06:00,MDT -2024-11-03T08:00:00,-07:00,MST -2025-03-09T09:00:00,-06:00,MDT -2025-11-02T08:00:00,-07:00,MST -2026-03-08T09:00:00,-06:00,MDT -2026-11-01T08:00:00,-07:00,MST -2027-03-14T09:00:00,-06:00,MDT -2027-11-07T08:00:00,-07:00,MST -2028-03-12T09:00:00,-06:00,MDT -2028-11-05T08:00:00,-07:00,MST -2029-03-11T09:00:00,-06:00,MDT -2029-11-04T08:00:00,-07:00,MST -2030-03-10T09:00:00,-06:00,MDT -2030-11-03T08:00:00,-07:00,MST -2031-03-09T09:00:00,-06:00,MDT -2031-11-02T08:00:00,-07:00,MST -2032-03-14T09:00:00,-06:00,MDT -2032-11-07T08:00:00,-07:00,MST -2033-03-13T09:00:00,-06:00,MDT -2033-11-06T08:00:00,-07:00,MST -2034-03-12T09:00:00,-06:00,MDT -2034-11-05T08:00:00,-07:00,MST -2035-03-11T09:00:00,-06:00,MDT -2035-11-04T08:00:00,-07:00,MST -2036-03-09T09:00:00,-06:00,MDT -2036-11-02T08:00:00,-07:00,MST -2037-03-08T09:00:00,-06:00,MDT -2037-11-01T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-iqaluit.hoon b/desk/lib/pytz/america-iqaluit.hoon deleted file mode 100644 index 2fe440b..0000000 --- a/desk/lib/pytz/america-iqaluit.hoon +++ /dev/null @@ -1,140 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1942-08-01T00:00:00,-04:00,EWT -1945-08-14T23:00:00,-04:00,EPT -1945-09-30T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-04-28T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-04-27T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-jamaica.hoon b/desk/lib/pytz/america-jamaica.hoon deleted file mode 100644 index 9b97225..0000000 --- a/desk/lib/pytz/america-jamaica.hoon +++ /dev/null @@ -1,26 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:53,KMT -1912-02-01T05:07:10,-05:00,EST -1974-01-06T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-02-23T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-juneau.hoon b/desk/lib/pytz/america-juneau.hoon deleted file mode 100644 index dfd58b4..0000000 --- a/desk/lib/pytz/america-juneau.hoon +++ /dev/null @@ -1,148 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+15:02,LMT -1901-12-13T20:45:52,-08:00,PST -1942-02-09T10:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-09-30T09:00:00,-08:00,PST -1969-04-27T10:00:00,-07:00,PDT -1969-10-26T09:00:00,-08:00,PST -1970-04-26T10:00:00,-07:00,PDT -1970-10-25T09:00:00,-08:00,PST -1971-04-25T10:00:00,-07:00,PDT -1971-10-31T09:00:00,-08:00,PST -1972-04-30T10:00:00,-07:00,PDT -1972-10-29T09:00:00,-08:00,PST -1973-04-29T10:00:00,-07:00,PDT -1973-10-28T09:00:00,-08:00,PST -1974-01-06T10:00:00,-07:00,PDT -1974-10-27T09:00:00,-08:00,PST -1975-02-23T10:00:00,-07:00,PDT -1975-10-26T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-07:00,PDT -1979-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-08:00,YDT -1980-10-26T10:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-09:00,YST -1983-11-30T09:00:00,-09:00,AKST -1984-04-29T11:00:00,-08:00,AKDT -1984-10-28T10:00:00,-09:00,AKST -1985-04-28T11:00:00,-08:00,AKDT -1985-10-27T10:00:00,-09:00,AKST -1986-04-27T11:00:00,-08:00,AKDT -1986-10-26T10:00:00,-09:00,AKST -1987-04-05T11:00:00,-08:00,AKDT -1987-10-25T10:00:00,-09:00,AKST -1988-04-03T11:00:00,-08:00,AKDT -1988-10-30T10:00:00,-09:00,AKST -1989-04-02T11:00:00,-08:00,AKDT -1989-10-29T10:00:00,-09:00,AKST -1990-04-01T11:00:00,-08:00,AKDT -1990-10-28T10:00:00,-09:00,AKST -1991-04-07T11:00:00,-08:00,AKDT -1991-10-27T10:00:00,-09:00,AKST -1992-04-05T11:00:00,-08:00,AKDT -1992-10-25T10:00:00,-09:00,AKST -1993-04-04T11:00:00,-08:00,AKDT -1993-10-31T10:00:00,-09:00,AKST -1994-04-03T11:00:00,-08:00,AKDT -1994-10-30T10:00:00,-09:00,AKST -1995-04-02T11:00:00,-08:00,AKDT -1995-10-29T10:00:00,-09:00,AKST -1996-04-07T11:00:00,-08:00,AKDT -1996-10-27T10:00:00,-09:00,AKST -1997-04-06T11:00:00,-08:00,AKDT -1997-10-26T10:00:00,-09:00,AKST -1998-04-05T11:00:00,-08:00,AKDT -1998-10-25T10:00:00,-09:00,AKST -1999-04-04T11:00:00,-08:00,AKDT -1999-10-31T10:00:00,-09:00,AKST -2000-04-02T11:00:00,-08:00,AKDT -2000-10-29T10:00:00,-09:00,AKST -2001-04-01T11:00:00,-08:00,AKDT -2001-10-28T10:00:00,-09:00,AKST -2002-04-07T11:00:00,-08:00,AKDT -2002-10-27T10:00:00,-09:00,AKST -2003-04-06T11:00:00,-08:00,AKDT -2003-10-26T10:00:00,-09:00,AKST -2004-04-04T11:00:00,-08:00,AKDT -2004-10-31T10:00:00,-09:00,AKST -2005-04-03T11:00:00,-08:00,AKDT -2005-10-30T10:00:00,-09:00,AKST -2006-04-02T11:00:00,-08:00,AKDT -2006-10-29T10:00:00,-09:00,AKST -2007-03-11T11:00:00,-08:00,AKDT -2007-11-04T10:00:00,-09:00,AKST -2008-03-09T11:00:00,-08:00,AKDT -2008-11-02T10:00:00,-09:00,AKST -2009-03-08T11:00:00,-08:00,AKDT -2009-11-01T10:00:00,-09:00,AKST -2010-03-14T11:00:00,-08:00,AKDT -2010-11-07T10:00:00,-09:00,AKST -2011-03-13T11:00:00,-08:00,AKDT -2011-11-06T10:00:00,-09:00,AKST -2012-03-11T11:00:00,-08:00,AKDT -2012-11-04T10:00:00,-09:00,AKST -2013-03-10T11:00:00,-08:00,AKDT -2013-11-03T10:00:00,-09:00,AKST -2014-03-09T11:00:00,-08:00,AKDT -2014-11-02T10:00:00,-09:00,AKST -2015-03-08T11:00:00,-08:00,AKDT -2015-11-01T10:00:00,-09:00,AKST -2016-03-13T11:00:00,-08:00,AKDT -2016-11-06T10:00:00,-09:00,AKST -2017-03-12T11:00:00,-08:00,AKDT -2017-11-05T10:00:00,-09:00,AKST -2018-03-11T11:00:00,-08:00,AKDT -2018-11-04T10:00:00,-09:00,AKST -2019-03-10T11:00:00,-08:00,AKDT -2019-11-03T10:00:00,-09:00,AKST -2020-03-08T11:00:00,-08:00,AKDT -2020-11-01T10:00:00,-09:00,AKST -2021-03-14T11:00:00,-08:00,AKDT -2021-11-07T10:00:00,-09:00,AKST -2022-03-13T11:00:00,-08:00,AKDT -2022-11-06T10:00:00,-09:00,AKST -2023-03-12T11:00:00,-08:00,AKDT -2023-11-05T10:00:00,-09:00,AKST -2024-03-10T11:00:00,-08:00,AKDT -2024-11-03T10:00:00,-09:00,AKST -2025-03-09T11:00:00,-08:00,AKDT -2025-11-02T10:00:00,-09:00,AKST -2026-03-08T11:00:00,-08:00,AKDT -2026-11-01T10:00:00,-09:00,AKST -2027-03-14T11:00:00,-08:00,AKDT -2027-11-07T10:00:00,-09:00,AKST -2028-03-12T11:00:00,-08:00,AKDT -2028-11-05T10:00:00,-09:00,AKST -2029-03-11T11:00:00,-08:00,AKDT -2029-11-04T10:00:00,-09:00,AKST -2030-03-10T11:00:00,-08:00,AKDT -2030-11-03T10:00:00,-09:00,AKST -2031-03-09T11:00:00,-08:00,AKDT -2031-11-02T10:00:00,-09:00,AKST -2032-03-14T11:00:00,-08:00,AKDT -2032-11-07T10:00:00,-09:00,AKST -2033-03-13T11:00:00,-08:00,AKDT -2033-11-06T10:00:00,-09:00,AKST -2034-03-12T11:00:00,-08:00,AKDT -2034-11-05T10:00:00,-09:00,AKST -2035-03-11T11:00:00,-08:00,AKDT -2035-11-04T10:00:00,-09:00,AKST -2036-03-09T11:00:00,-08:00,AKDT -2036-11-02T10:00:00,-09:00,AKST -2037-03-08T11:00:00,-08:00,AKDT -2037-11-01T10:00:00,-09:00,AKST -''' diff --git a/desk/lib/pytz/america-kentucky-louisville.hoon b/desk/lib/pytz/america-kentucky-louisville.hoon deleted file mode 100644 index 0d872d3..0000000 --- a/desk/lib/pytz/america-kentucky-louisville.hoon +++ /dev/null @@ -1,182 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1921-05-01T08:00:00,-05:00,CDT -1921-09-01T07:00:00,-06:00,CST -1941-04-27T08:00:00,-05:00,CDT -1941-09-28T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1946-04-28T06:01:00,-05:00,CDT -1946-06-02T07:00:00,-06:00,CST -1950-04-30T08:00:00,-05:00,CDT -1950-09-24T07:00:00,-06:00,CST -1951-04-29T08:00:00,-05:00,CDT -1951-09-30T07:00:00,-06:00,CST -1952-04-27T08:00:00,-05:00,CDT -1952-09-28T07:00:00,-06:00,CST -1953-04-26T08:00:00,-05:00,CDT -1953-09-27T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,CDT -1954-09-26T07:00:00,-06:00,CST -1955-04-24T08:00:00,-05:00,CDT -1955-09-25T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-10-28T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-10-27T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-10-26T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-10-25T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-10-30T07:00:00,-06:00,CST -1961-04-30T08:00:00,-05:00,CDT -1961-07-23T07:00:00,-05:00,EST -1968-04-28T07:00:00,-04:00,EDT -1968-10-27T06:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -1971-04-25T07:00:00,-04:00,EDT -1971-10-31T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-01-06T07:00:00,-05:00,CDT -1974-10-27T07:00:00,-05:00,EST -1975-02-23T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-05:00,EST -2000-04-02T07:00:00,-04:00,EDT -2000-10-29T06:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-kentucky-monticello.hoon b/desk/lib/pytz/america-kentucky-monticello.hoon deleted file mode 100644 index 7c85062..0000000 --- a/desk/lib/pytz/america-kentucky-monticello.hoon +++ /dev/null @@ -1,152 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1968-04-28T08:00:00,-05:00,CDT -1968-10-27T07:00:00,-06:00,CST -1969-04-27T08:00:00,-05:00,CDT -1969-10-26T07:00:00,-06:00,CST -1970-04-26T08:00:00,-05:00,CDT -1970-10-25T07:00:00,-06:00,CST -1971-04-25T08:00:00,-05:00,CDT -1971-10-31T07:00:00,-06:00,CST -1972-04-30T08:00:00,-05:00,CDT -1972-10-29T07:00:00,-06:00,CST -1973-04-29T08:00:00,-05:00,CDT -1973-10-28T07:00:00,-06:00,CST -1974-01-06T08:00:00,-05:00,CDT -1974-10-27T07:00:00,-06:00,CST -1975-02-23T08:00:00,-05:00,CDT -1975-10-26T07:00:00,-06:00,CST -1976-04-25T08:00:00,-05:00,CDT -1976-10-31T07:00:00,-06:00,CST -1977-04-24T08:00:00,-05:00,CDT -1977-10-30T07:00:00,-06:00,CST -1978-04-30T08:00:00,-05:00,CDT -1978-10-29T07:00:00,-06:00,CST -1979-04-29T08:00:00,-05:00,CDT -1979-10-28T07:00:00,-06:00,CST -1980-04-27T08:00:00,-05:00,CDT -1980-10-26T07:00:00,-06:00,CST -1981-04-26T08:00:00,-05:00,CDT -1981-10-25T07:00:00,-06:00,CST -1982-04-25T08:00:00,-05:00,CDT -1982-10-31T07:00:00,-06:00,CST -1983-04-24T08:00:00,-05:00,CDT -1983-10-30T07:00:00,-06:00,CST -1984-04-29T08:00:00,-05:00,CDT -1984-10-28T07:00:00,-06:00,CST -1985-04-28T08:00:00,-05:00,CDT -1985-10-27T07:00:00,-06:00,CST -1986-04-27T08:00:00,-05:00,CDT -1986-10-26T07:00:00,-06:00,CST -1987-04-05T08:00:00,-05:00,CDT -1987-10-25T07:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T07:00:00,-06:00,CST -1989-04-02T08:00:00,-05:00,CDT -1989-10-29T07:00:00,-06:00,CST -1990-04-01T08:00:00,-05:00,CDT -1990-10-28T07:00:00,-06:00,CST -1991-04-07T08:00:00,-05:00,CDT -1991-10-27T07:00:00,-06:00,CST -1992-04-05T08:00:00,-05:00,CDT -1992-10-25T07:00:00,-06:00,CST -1993-04-04T08:00:00,-05:00,CDT -1993-10-31T07:00:00,-06:00,CST -1994-04-03T08:00:00,-05:00,CDT -1994-10-30T07:00:00,-06:00,CST -1995-04-02T08:00:00,-05:00,CDT -1995-10-29T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-kralendijk.hoon b/desk/lib/pytz/america-kralendijk.hoon deleted file mode 100644 index 4a6d57f..0000000 --- a/desk/lib/pytz/america-kralendijk.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-02-12T04:35:47,-05:30,-0430 -1965-01-01T04:30:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-la-paz.hoon b/desk/lib/pytz/america-la-paz.hoon deleted file mode 100644 index 1a1d179..0000000 --- a/desk/lib/pytz/america-la-paz.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:27,CMT -1931-10-15T04:32:36,-04:27,BST -1932-03-21T03:32:36,-04:00,-04 -''' diff --git a/desk/lib/pytz/america-lima.hoon b/desk/lib/pytz/america-lima.hoon deleted file mode 100644 index cbed67d..0000000 --- a/desk/lib/pytz/america-lima.hoon +++ /dev/null @@ -1,20 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:51,LMT -1908-07-28T05:08:36,-05:00,-05 -1938-01-01T05:00:00,-04:00,-04 -1938-04-01T04:00:00,-05:00,-05 -1938-09-25T05:00:00,-04:00,-04 -1939-03-26T04:00:00,-05:00,-05 -1939-09-24T05:00:00,-04:00,-04 -1940-03-24T04:00:00,-05:00,-05 -1986-01-01T05:00:00,-04:00,-04 -1986-04-01T04:00:00,-05:00,-05 -1987-01-01T05:00:00,-04:00,-04 -1987-04-01T04:00:00,-05:00,-05 -1990-01-01T05:00:00,-04:00,-04 -1990-04-01T04:00:00,-05:00,-05 -1994-01-01T05:00:00,-04:00,-04 -1994-04-01T04:00:00,-05:00,-05 -''' diff --git a/desk/lib/pytz/america-los-angeles.hoon b/desk/lib/pytz/america-los-angeles.hoon deleted file mode 100644 index cefc944..0000000 --- a/desk/lib/pytz/america-los-angeles.hoon +++ /dev/null @@ -1,190 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-08:00,PST -1918-03-31T10:00:00,-07:00,PDT -1918-10-27T09:00:00,-08:00,PST -1919-03-30T10:00:00,-07:00,PDT -1919-10-26T09:00:00,-08:00,PST -1942-02-09T10:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-09-30T09:00:00,-08:00,PST -1948-03-14T10:01:00,-07:00,PDT -1949-01-01T09:00:00,-08:00,PST -1950-04-30T09:00:00,-07:00,PDT -1950-09-24T09:00:00,-08:00,PST -1951-04-29T09:00:00,-07:00,PDT -1951-09-30T09:00:00,-08:00,PST -1952-04-27T09:00:00,-07:00,PDT -1952-09-28T09:00:00,-08:00,PST -1953-04-26T09:00:00,-07:00,PDT -1953-09-27T09:00:00,-08:00,PST -1954-04-25T09:00:00,-07:00,PDT -1954-09-26T09:00:00,-08:00,PST -1955-04-24T09:00:00,-07:00,PDT -1955-09-25T09:00:00,-08:00,PST -1956-04-29T09:00:00,-07:00,PDT -1956-09-30T09:00:00,-08:00,PST -1957-04-28T09:00:00,-07:00,PDT -1957-09-29T09:00:00,-08:00,PST -1958-04-27T09:00:00,-07:00,PDT -1958-09-28T09:00:00,-08:00,PST -1959-04-26T09:00:00,-07:00,PDT -1959-09-27T09:00:00,-08:00,PST -1960-04-24T09:00:00,-07:00,PDT -1960-09-25T09:00:00,-08:00,PST -1961-04-30T09:00:00,-07:00,PDT -1961-09-24T09:00:00,-08:00,PST -1962-04-29T09:00:00,-07:00,PDT -1962-10-28T09:00:00,-08:00,PST -1963-04-28T09:00:00,-07:00,PDT -1963-10-27T09:00:00,-08:00,PST -1964-04-26T09:00:00,-07:00,PDT -1964-10-25T09:00:00,-08:00,PST -1965-04-25T09:00:00,-07:00,PDT -1965-10-31T09:00:00,-08:00,PST -1966-04-24T09:00:00,-07:00,PDT -1966-10-30T09:00:00,-08:00,PST -1967-04-30T10:00:00,-07:00,PDT -1967-10-29T09:00:00,-08:00,PST -1968-04-28T10:00:00,-07:00,PDT -1968-10-27T09:00:00,-08:00,PST -1969-04-27T10:00:00,-07:00,PDT -1969-10-26T09:00:00,-08:00,PST -1970-04-26T10:00:00,-07:00,PDT -1970-10-25T09:00:00,-08:00,PST -1971-04-25T10:00:00,-07:00,PDT -1971-10-31T09:00:00,-08:00,PST -1972-04-30T10:00:00,-07:00,PDT -1972-10-29T09:00:00,-08:00,PST -1973-04-29T10:00:00,-07:00,PDT -1973-10-28T09:00:00,-08:00,PST -1974-01-06T10:00:00,-07:00,PDT -1974-10-27T09:00:00,-08:00,PST -1975-02-23T10:00:00,-07:00,PDT -1975-10-26T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-07:00,PDT -1979-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-08:00,PST -1984-04-29T10:00:00,-07:00,PDT -1984-10-28T09:00:00,-08:00,PST -1985-04-28T10:00:00,-07:00,PDT -1985-10-27T09:00:00,-08:00,PST -1986-04-27T10:00:00,-07:00,PDT -1986-10-26T09:00:00,-08:00,PST -1987-04-05T10:00:00,-07:00,PDT -1987-10-25T09:00:00,-08:00,PST -1988-04-03T10:00:00,-07:00,PDT -1988-10-30T09:00:00,-08:00,PST -1989-04-02T10:00:00,-07:00,PDT -1989-10-29T09:00:00,-08:00,PST -1990-04-01T10:00:00,-07:00,PDT -1990-10-28T09:00:00,-08:00,PST -1991-04-07T10:00:00,-07:00,PDT -1991-10-27T09:00:00,-08:00,PST -1992-04-05T10:00:00,-07:00,PDT -1992-10-25T09:00:00,-08:00,PST -1993-04-04T10:00:00,-07:00,PDT -1993-10-31T09:00:00,-08:00,PST -1994-04-03T10:00:00,-07:00,PDT -1994-10-30T09:00:00,-08:00,PST -1995-04-02T10:00:00,-07:00,PDT -1995-10-29T09:00:00,-08:00,PST -1996-04-07T10:00:00,-07:00,PDT -1996-10-27T09:00:00,-08:00,PST -1997-04-06T10:00:00,-07:00,PDT -1997-10-26T09:00:00,-08:00,PST -1998-04-05T10:00:00,-07:00,PDT -1998-10-25T09:00:00,-08:00,PST -1999-04-04T10:00:00,-07:00,PDT -1999-10-31T09:00:00,-08:00,PST -2000-04-02T10:00:00,-07:00,PDT -2000-10-29T09:00:00,-08:00,PST -2001-04-01T10:00:00,-07:00,PDT -2001-10-28T09:00:00,-08:00,PST -2002-04-07T10:00:00,-07:00,PDT -2002-10-27T09:00:00,-08:00,PST -2003-04-06T10:00:00,-07:00,PDT -2003-10-26T09:00:00,-08:00,PST -2004-04-04T10:00:00,-07:00,PDT -2004-10-31T09:00:00,-08:00,PST -2005-04-03T10:00:00,-07:00,PDT -2005-10-30T09:00:00,-08:00,PST -2006-04-02T10:00:00,-07:00,PDT -2006-10-29T09:00:00,-08:00,PST -2007-03-11T10:00:00,-07:00,PDT -2007-11-04T09:00:00,-08:00,PST -2008-03-09T10:00:00,-07:00,PDT -2008-11-02T09:00:00,-08:00,PST -2009-03-08T10:00:00,-07:00,PDT -2009-11-01T09:00:00,-08:00,PST -2010-03-14T10:00:00,-07:00,PDT -2010-11-07T09:00:00,-08:00,PST -2011-03-13T10:00:00,-07:00,PDT -2011-11-06T09:00:00,-08:00,PST -2012-03-11T10:00:00,-07:00,PDT -2012-11-04T09:00:00,-08:00,PST -2013-03-10T10:00:00,-07:00,PDT -2013-11-03T09:00:00,-08:00,PST -2014-03-09T10:00:00,-07:00,PDT -2014-11-02T09:00:00,-08:00,PST -2015-03-08T10:00:00,-07:00,PDT -2015-11-01T09:00:00,-08:00,PST -2016-03-13T10:00:00,-07:00,PDT -2016-11-06T09:00:00,-08:00,PST -2017-03-12T10:00:00,-07:00,PDT -2017-11-05T09:00:00,-08:00,PST -2018-03-11T10:00:00,-07:00,PDT -2018-11-04T09:00:00,-08:00,PST -2019-03-10T10:00:00,-07:00,PDT -2019-11-03T09:00:00,-08:00,PST -2020-03-08T10:00:00,-07:00,PDT -2020-11-01T09:00:00,-08:00,PST -2021-03-14T10:00:00,-07:00,PDT -2021-11-07T09:00:00,-08:00,PST -2022-03-13T10:00:00,-07:00,PDT -2022-11-06T09:00:00,-08:00,PST -2023-03-12T10:00:00,-07:00,PDT -2023-11-05T09:00:00,-08:00,PST -2024-03-10T10:00:00,-07:00,PDT -2024-11-03T09:00:00,-08:00,PST -2025-03-09T10:00:00,-07:00,PDT -2025-11-02T09:00:00,-08:00,PST -2026-03-08T10:00:00,-07:00,PDT -2026-11-01T09:00:00,-08:00,PST -2027-03-14T10:00:00,-07:00,PDT -2027-11-07T09:00:00,-08:00,PST -2028-03-12T10:00:00,-07:00,PDT -2028-11-05T09:00:00,-08:00,PST -2029-03-11T10:00:00,-07:00,PDT -2029-11-04T09:00:00,-08:00,PST -2030-03-10T10:00:00,-07:00,PDT -2030-11-03T09:00:00,-08:00,PST -2031-03-09T10:00:00,-07:00,PDT -2031-11-02T09:00:00,-08:00,PST -2032-03-14T10:00:00,-07:00,PDT -2032-11-07T09:00:00,-08:00,PST -2033-03-13T10:00:00,-07:00,PDT -2033-11-06T09:00:00,-08:00,PST -2034-03-12T10:00:00,-07:00,PDT -2034-11-05T09:00:00,-08:00,PST -2035-03-11T10:00:00,-07:00,PDT -2035-11-04T09:00:00,-08:00,PST -2036-03-09T10:00:00,-07:00,PDT -2036-11-02T09:00:00,-08:00,PST -2037-03-08T10:00:00,-07:00,PDT -2037-11-01T09:00:00,-08:00,PST -''' diff --git a/desk/lib/pytz/america-lower-princes.hoon b/desk/lib/pytz/america-lower-princes.hoon deleted file mode 100644 index 4a6d57f..0000000 --- a/desk/lib/pytz/america-lower-princes.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-02-12T04:35:47,-05:30,-0430 -1965-01-01T04:30:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-maceio.hoon b/desk/lib/pytz/america-maceio.hoon deleted file mode 100644 index e3876ef..0000000 --- a/desk/lib/pytz/america-maceio.hoon +++ /dev/null @@ -1,45 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T02:22:52,-03:00,-03 -1931-10-03T14:00:00,-02:00,-02 -1932-04-01T02:00:00,-03:00,-03 -1932-10-03T03:00:00,-02:00,-02 -1933-04-01T02:00:00,-03:00,-03 -1949-12-01T03:00:00,-02:00,-02 -1950-04-16T03:00:00,-03:00,-03 -1950-12-01T03:00:00,-02:00,-02 -1951-04-01T02:00:00,-03:00,-03 -1951-12-01T03:00:00,-02:00,-02 -1952-04-01T02:00:00,-03:00,-03 -1952-12-01T03:00:00,-02:00,-02 -1953-03-01T02:00:00,-03:00,-03 -1963-12-09T03:00:00,-02:00,-02 -1964-03-01T02:00:00,-03:00,-03 -1965-01-31T03:00:00,-02:00,-02 -1965-03-31T02:00:00,-03:00,-03 -1965-12-01T03:00:00,-02:00,-02 -1966-03-01T02:00:00,-03:00,-03 -1966-11-01T03:00:00,-02:00,-02 -1967-03-01T02:00:00,-03:00,-03 -1967-11-01T03:00:00,-02:00,-02 -1968-03-01T02:00:00,-03:00,-03 -1985-11-02T03:00:00,-02:00,-02 -1986-03-15T02:00:00,-03:00,-03 -1986-10-25T03:00:00,-02:00,-02 -1987-02-14T02:00:00,-03:00,-03 -1987-10-25T03:00:00,-02:00,-02 -1988-02-07T02:00:00,-03:00,-03 -1988-10-16T03:00:00,-02:00,-02 -1989-01-29T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-02-11T02:00:00,-03:00,-03 -1995-10-15T03:00:00,-02:00,-02 -1996-02-11T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-02:00,-02 -2000-02-27T02:00:00,-03:00,-03 -2000-10-08T03:00:00,-02:00,-02 -2000-10-22T02:00:00,-03:00,-03 -2001-10-14T03:00:00,-02:00,-02 -2002-02-17T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-managua.hoon b/desk/lib/pytz/america-managua.hoon deleted file mode 100644 index a67e1d5..0000000 --- a/desk/lib/pytz/america-managua.hoon +++ /dev/null @@ -1,20 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:15,MMT -1934-06-23T05:45:12,-06:00,CST -1973-05-01T06:00:00,-05:00,EST -1975-02-16T05:00:00,-06:00,CST -1979-03-18T06:00:00,-05:00,CDT -1979-06-25T05:00:00,-06:00,CST -1980-03-16T06:00:00,-05:00,CDT -1980-06-23T05:00:00,-06:00,CST -1992-01-01T10:00:00,-05:00,EST -1992-09-24T05:00:00,-06:00,CST -1993-01-01T06:00:00,-05:00,EST -1997-01-01T05:00:00,-06:00,CST -2005-04-10T06:00:00,-05:00,CDT -2005-10-02T05:00:00,-06:00,CST -2006-04-30T08:00:00,-05:00,CDT -2006-10-01T06:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-manaus.hoon b/desk/lib/pytz/america-manaus.hoon deleted file mode 100644 index 316ab83..0000000 --- a/desk/lib/pytz/america-manaus.hoon +++ /dev/null @@ -1,35 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T04:00:04,-04:00,-04 -1931-10-03T15:00:00,-03:00,-03 -1932-04-01T03:00:00,-04:00,-04 -1932-10-03T04:00:00,-03:00,-03 -1933-04-01T03:00:00,-04:00,-04 -1949-12-01T04:00:00,-03:00,-03 -1950-04-16T04:00:00,-04:00,-04 -1950-12-01T04:00:00,-03:00,-03 -1951-04-01T03:00:00,-04:00,-04 -1951-12-01T04:00:00,-03:00,-03 -1952-04-01T03:00:00,-04:00,-04 -1952-12-01T04:00:00,-03:00,-03 -1953-03-01T03:00:00,-04:00,-04 -1963-12-09T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1965-01-31T04:00:00,-03:00,-03 -1965-03-31T03:00:00,-04:00,-04 -1965-12-01T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-11-01T04:00:00,-03:00,-03 -1967-03-01T03:00:00,-04:00,-04 -1967-11-01T04:00:00,-03:00,-03 -1968-03-01T03:00:00,-04:00,-04 -1985-11-02T04:00:00,-03:00,-03 -1986-03-15T03:00:00,-04:00,-04 -1986-10-25T04:00:00,-03:00,-03 -1987-02-14T03:00:00,-04:00,-04 -1987-10-25T04:00:00,-03:00,-03 -1988-02-07T03:00:00,-04:00,-04 -1993-10-17T04:00:00,-03:00,-03 -1994-02-20T03:00:00,-04:00,-04 -''' diff --git a/desk/lib/pytz/america-marigot.hoon b/desk/lib/pytz/america-marigot.hoon deleted file mode 100644 index d66fe17..0000000 --- a/desk/lib/pytz/america-marigot.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-03-02T04:06:04,-04:00,AST -''' diff --git a/desk/lib/pytz/america-martinique.hoon b/desk/lib/pytz/america-martinique.hoon deleted file mode 100644 index 7108b62..0000000 --- a/desk/lib/pytz/america-martinique.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:56,FFMT -1911-05-01T04:04:20,-04:00,AST -1980-04-06T04:00:00,-03:00,ADT -1980-09-28T03:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-matamoros.hoon b/desk/lib/pytz/america-matamoros.hoon deleted file mode 100644 index 68aae8a..0000000 --- a/desk/lib/pytz/america-matamoros.hoon +++ /dev/null @@ -1,91 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T06:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-06:00,CST -2001-05-06T08:00:00,-05:00,CDT -2001-09-30T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-04-01T08:00:00,-05:00,CDT -2007-10-28T07:00:00,-06:00,CST -2008-04-06T08:00:00,-05:00,CDT -2008-10-26T07:00:00,-06:00,CST -2009-04-05T08:00:00,-05:00,CDT -2009-10-25T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-mazatlan.hoon b/desk/lib/pytz/america-mazatlan.hoon deleted file mode 100644 index b23abd1..0000000 --- a/desk/lib/pytz/america-mazatlan.hoon +++ /dev/null @@ -1,65 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1927-06-10T07:00:00,-06:00,CST -1930-11-15T06:00:00,-07:00,MST -1931-04-30T07:00:00,-06:00,MDT -1931-10-01T06:00:00,-07:00,MST -1932-04-01T07:00:00,-06:00,CST -1942-04-24T06:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-05-06T09:00:00,-06:00,MDT -2001-09-30T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-04-01T09:00:00,-06:00,MDT -2007-10-28T08:00:00,-07:00,MST -2008-04-06T09:00:00,-06:00,MDT -2008-10-26T08:00:00,-07:00,MST -2009-04-05T09:00:00,-06:00,MDT -2009-10-25T08:00:00,-07:00,MST -2010-04-04T09:00:00,-06:00,MDT -2010-10-31T08:00:00,-07:00,MST -2011-04-03T09:00:00,-06:00,MDT -2011-10-30T08:00:00,-07:00,MST -2012-04-01T09:00:00,-06:00,MDT -2012-10-28T08:00:00,-07:00,MST -2013-04-07T09:00:00,-06:00,MDT -2013-10-27T08:00:00,-07:00,MST -2014-04-06T09:00:00,-06:00,MDT -2014-10-26T08:00:00,-07:00,MST -2015-04-05T09:00:00,-06:00,MDT -2015-10-25T08:00:00,-07:00,MST -2016-04-03T09:00:00,-06:00,MDT -2016-10-30T08:00:00,-07:00,MST -2017-04-02T09:00:00,-06:00,MDT -2017-10-29T08:00:00,-07:00,MST -2018-04-01T09:00:00,-06:00,MDT -2018-10-28T08:00:00,-07:00,MST -2019-04-07T09:00:00,-06:00,MDT -2019-10-27T08:00:00,-07:00,MST -2020-04-05T09:00:00,-06:00,MDT -2020-10-25T08:00:00,-07:00,MST -2021-04-04T09:00:00,-06:00,MDT -2021-10-31T08:00:00,-07:00,MST -2022-04-03T09:00:00,-06:00,MDT -2022-10-30T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-menominee.hoon b/desk/lib/pytz/america-menominee.hoon deleted file mode 100644 index b3d0a32..0000000 --- a/desk/lib/pytz/america-menominee.hoon +++ /dev/null @@ -1,147 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1918-03-31T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1919-03-30T08:00:00,-05:00,CDT -1919-10-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1946-04-28T08:00:00,-05:00,CDT -1946-09-29T07:00:00,-06:00,CST -1966-04-24T08:00:00,-05:00,CDT -1966-10-30T07:00:00,-06:00,CST -1969-04-27T08:00:00,-05:00,EST -1973-04-29T07:00:00,-05:00,CDT -1973-10-28T07:00:00,-06:00,CST -1974-01-06T08:00:00,-05:00,CDT -1974-10-27T07:00:00,-06:00,CST -1975-02-23T08:00:00,-05:00,CDT -1975-10-26T07:00:00,-06:00,CST -1976-04-25T08:00:00,-05:00,CDT -1976-10-31T07:00:00,-06:00,CST -1977-04-24T08:00:00,-05:00,CDT -1977-10-30T07:00:00,-06:00,CST -1978-04-30T08:00:00,-05:00,CDT -1978-10-29T07:00:00,-06:00,CST -1979-04-29T08:00:00,-05:00,CDT -1979-10-28T07:00:00,-06:00,CST -1980-04-27T08:00:00,-05:00,CDT -1980-10-26T07:00:00,-06:00,CST -1981-04-26T08:00:00,-05:00,CDT -1981-10-25T07:00:00,-06:00,CST -1982-04-25T08:00:00,-05:00,CDT -1982-10-31T07:00:00,-06:00,CST -1983-04-24T08:00:00,-05:00,CDT -1983-10-30T07:00:00,-06:00,CST -1984-04-29T08:00:00,-05:00,CDT -1984-10-28T07:00:00,-06:00,CST -1985-04-28T08:00:00,-05:00,CDT -1985-10-27T07:00:00,-06:00,CST -1986-04-27T08:00:00,-05:00,CDT -1986-10-26T07:00:00,-06:00,CST -1987-04-05T08:00:00,-05:00,CDT -1987-10-25T07:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T07:00:00,-06:00,CST -1989-04-02T08:00:00,-05:00,CDT -1989-10-29T07:00:00,-06:00,CST -1990-04-01T08:00:00,-05:00,CDT -1990-10-28T07:00:00,-06:00,CST -1991-04-07T08:00:00,-05:00,CDT -1991-10-27T07:00:00,-06:00,CST -1992-04-05T08:00:00,-05:00,CDT -1992-10-25T07:00:00,-06:00,CST -1993-04-04T08:00:00,-05:00,CDT -1993-10-31T07:00:00,-06:00,CST -1994-04-03T08:00:00,-05:00,CDT -1994-10-30T07:00:00,-06:00,CST -1995-04-02T08:00:00,-05:00,CDT -1995-10-29T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-06:00,CST -2001-04-01T08:00:00,-05:00,CDT -2001-10-28T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-merida.hoon b/desk/lib/pytz/america-merida.hoon deleted file mode 100644 index 3c9efee..0000000 --- a/desk/lib/pytz/america-merida.hoon +++ /dev/null @@ -1,61 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T06:00:00,-06:00,CST -1981-12-26T08:00:00,-05:00,EST -1982-11-02T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-06:00,CST -2001-05-06T08:00:00,-05:00,CDT -2001-09-30T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-04-01T08:00:00,-05:00,CDT -2007-10-28T07:00:00,-06:00,CST -2008-04-06T08:00:00,-05:00,CDT -2008-10-26T07:00:00,-06:00,CST -2009-04-05T08:00:00,-05:00,CDT -2009-10-25T07:00:00,-06:00,CST -2010-04-04T08:00:00,-05:00,CDT -2010-10-31T07:00:00,-06:00,CST -2011-04-03T08:00:00,-05:00,CDT -2011-10-30T07:00:00,-06:00,CST -2012-04-01T08:00:00,-05:00,CDT -2012-10-28T07:00:00,-06:00,CST -2013-04-07T08:00:00,-05:00,CDT -2013-10-27T07:00:00,-06:00,CST -2014-04-06T08:00:00,-05:00,CDT -2014-10-26T07:00:00,-06:00,CST -2015-04-05T08:00:00,-05:00,CDT -2015-10-25T07:00:00,-06:00,CST -2016-04-03T08:00:00,-05:00,CDT -2016-10-30T07:00:00,-06:00,CST -2017-04-02T08:00:00,-05:00,CDT -2017-10-29T07:00:00,-06:00,CST -2018-04-01T08:00:00,-05:00,CDT -2018-10-28T07:00:00,-06:00,CST -2019-04-07T08:00:00,-05:00,CDT -2019-10-27T07:00:00,-06:00,CST -2020-04-05T08:00:00,-05:00,CDT -2020-10-25T07:00:00,-06:00,CST -2021-04-04T08:00:00,-05:00,CDT -2021-10-31T07:00:00,-06:00,CST -2022-04-03T08:00:00,-05:00,CDT -2022-10-30T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-metlakatla.hoon b/desk/lib/pytz/america-metlakatla.hoon deleted file mode 100644 index 19dee33..0000000 --- a/desk/lib/pytz/america-metlakatla.hoon +++ /dev/null @@ -1,85 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+15:14,LMT -1901-12-13T20:45:52,-08:00,PST -1942-02-09T10:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-09-30T09:00:00,-08:00,PST -1969-04-27T10:00:00,-07:00,PDT -1969-10-26T09:00:00,-08:00,PST -1970-04-26T10:00:00,-07:00,PDT -1970-10-25T09:00:00,-08:00,PST -1971-04-25T10:00:00,-07:00,PDT -1971-10-31T09:00:00,-08:00,PST -1972-04-30T10:00:00,-07:00,PDT -1972-10-29T09:00:00,-08:00,PST -1973-04-29T10:00:00,-07:00,PDT -1973-10-28T09:00:00,-08:00,PST -1974-01-06T10:00:00,-07:00,PDT -1974-10-27T09:00:00,-08:00,PST -1975-02-23T10:00:00,-07:00,PDT -1975-10-26T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-07:00,PDT -1979-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-08:00,PST -2015-11-01T10:00:00,-09:00,AKST -2016-03-13T11:00:00,-08:00,AKDT -2016-11-06T10:00:00,-09:00,AKST -2017-03-12T11:00:00,-08:00,AKDT -2017-11-05T10:00:00,-09:00,AKST -2018-03-11T11:00:00,-08:00,AKDT -2018-11-04T10:00:00,-08:00,PST -2019-01-20T10:00:00,-09:00,AKST -2019-03-10T11:00:00,-08:00,AKDT -2019-11-03T10:00:00,-09:00,AKST -2020-03-08T11:00:00,-08:00,AKDT -2020-11-01T10:00:00,-09:00,AKST -2021-03-14T11:00:00,-08:00,AKDT -2021-11-07T10:00:00,-09:00,AKST -2022-03-13T11:00:00,-08:00,AKDT -2022-11-06T10:00:00,-09:00,AKST -2023-03-12T11:00:00,-08:00,AKDT -2023-11-05T10:00:00,-09:00,AKST -2024-03-10T11:00:00,-08:00,AKDT -2024-11-03T10:00:00,-09:00,AKST -2025-03-09T11:00:00,-08:00,AKDT -2025-11-02T10:00:00,-09:00,AKST -2026-03-08T11:00:00,-08:00,AKDT -2026-11-01T10:00:00,-09:00,AKST -2027-03-14T11:00:00,-08:00,AKDT -2027-11-07T10:00:00,-09:00,AKST -2028-03-12T11:00:00,-08:00,AKDT -2028-11-05T10:00:00,-09:00,AKST -2029-03-11T11:00:00,-08:00,AKDT -2029-11-04T10:00:00,-09:00,AKST -2030-03-10T11:00:00,-08:00,AKDT -2030-11-03T10:00:00,-09:00,AKST -2031-03-09T11:00:00,-08:00,AKDT -2031-11-02T10:00:00,-09:00,AKST -2032-03-14T11:00:00,-08:00,AKDT -2032-11-07T10:00:00,-09:00,AKST -2033-03-13T11:00:00,-08:00,AKDT -2033-11-06T10:00:00,-09:00,AKST -2034-03-12T11:00:00,-08:00,AKDT -2034-11-05T10:00:00,-09:00,AKST -2035-03-11T11:00:00,-08:00,AKDT -2035-11-04T10:00:00,-09:00,AKST -2036-03-09T11:00:00,-08:00,AKDT -2036-11-02T10:00:00,-09:00,AKST -2037-03-08T11:00:00,-08:00,AKDT -2037-11-01T10:00:00,-09:00,AKST -''' diff --git a/desk/lib/pytz/america-mexico-city.hoon b/desk/lib/pytz/america-mexico-city.hoon deleted file mode 100644 index 141d03a..0000000 --- a/desk/lib/pytz/america-mexico-city.hoon +++ /dev/null @@ -1,72 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1927-06-10T07:00:00,-06:00,CST -1930-11-15T06:00:00,-07:00,MST -1931-04-30T07:00:00,-06:00,MDT -1931-10-01T06:00:00,-07:00,MST -1932-04-01T07:00:00,-06:00,CST -1939-02-05T06:00:00,-05:00,CDT -1939-06-25T05:00:00,-06:00,CST -1940-12-09T06:00:00,-05:00,CDT -1941-04-01T05:00:00,-06:00,CST -1943-12-16T06:00:00,-05:00,CWT -1944-05-01T05:00:00,-06:00,CST -1950-02-12T06:00:00,-05:00,CDT -1950-07-30T05:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-06:00,CST -2001-05-06T08:00:00,-05:00,CDT -2001-09-30T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-04-01T08:00:00,-05:00,CDT -2007-10-28T07:00:00,-06:00,CST -2008-04-06T08:00:00,-05:00,CDT -2008-10-26T07:00:00,-06:00,CST -2009-04-05T08:00:00,-05:00,CDT -2009-10-25T07:00:00,-06:00,CST -2010-04-04T08:00:00,-05:00,CDT -2010-10-31T07:00:00,-06:00,CST -2011-04-03T08:00:00,-05:00,CDT -2011-10-30T07:00:00,-06:00,CST -2012-04-01T08:00:00,-05:00,CDT -2012-10-28T07:00:00,-06:00,CST -2013-04-07T08:00:00,-05:00,CDT -2013-10-27T07:00:00,-06:00,CST -2014-04-06T08:00:00,-05:00,CDT -2014-10-26T07:00:00,-06:00,CST -2015-04-05T08:00:00,-05:00,CDT -2015-10-25T07:00:00,-06:00,CST -2016-04-03T08:00:00,-05:00,CDT -2016-10-30T07:00:00,-06:00,CST -2017-04-02T08:00:00,-05:00,CDT -2017-10-29T07:00:00,-06:00,CST -2018-04-01T08:00:00,-05:00,CDT -2018-10-28T07:00:00,-06:00,CST -2019-04-07T08:00:00,-05:00,CDT -2019-10-27T07:00:00,-06:00,CST -2020-04-05T08:00:00,-05:00,CDT -2020-10-25T07:00:00,-06:00,CST -2021-04-04T08:00:00,-05:00,CDT -2021-10-31T07:00:00,-06:00,CST -2022-04-03T08:00:00,-05:00,CDT -2022-10-30T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-miquelon.hoon b/desk/lib/pytz/america-miquelon.hoon deleted file mode 100644 index 14b6131..0000000 --- a/desk/lib/pytz/america-miquelon.hoon +++ /dev/null @@ -1,108 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-06-15T03:44:40,-04:00,AST -1980-05-01T04:00:00,-03:00,-03 -1987-04-05T05:00:00,-02:00,-02 -1987-10-25T04:00:00,-03:00,-03 -1988-04-03T05:00:00,-02:00,-02 -1988-10-30T04:00:00,-03:00,-03 -1989-04-02T05:00:00,-02:00,-02 -1989-10-29T04:00:00,-03:00,-03 -1990-04-01T05:00:00,-02:00,-02 -1990-10-28T04:00:00,-03:00,-03 -1991-04-07T05:00:00,-02:00,-02 -1991-10-27T04:00:00,-03:00,-03 -1992-04-05T05:00:00,-02:00,-02 -1992-10-25T04:00:00,-03:00,-03 -1993-04-04T05:00:00,-02:00,-02 -1993-10-31T04:00:00,-03:00,-03 -1994-04-03T05:00:00,-02:00,-02 -1994-10-30T04:00:00,-03:00,-03 -1995-04-02T05:00:00,-02:00,-02 -1995-10-29T04:00:00,-03:00,-03 -1996-04-07T05:00:00,-02:00,-02 -1996-10-27T04:00:00,-03:00,-03 -1997-04-06T05:00:00,-02:00,-02 -1997-10-26T04:00:00,-03:00,-03 -1998-04-05T05:00:00,-02:00,-02 -1998-10-25T04:00:00,-03:00,-03 -1999-04-04T05:00:00,-02:00,-02 -1999-10-31T04:00:00,-03:00,-03 -2000-04-02T05:00:00,-02:00,-02 -2000-10-29T04:00:00,-03:00,-03 -2001-04-01T05:00:00,-02:00,-02 -2001-10-28T04:00:00,-03:00,-03 -2002-04-07T05:00:00,-02:00,-02 -2002-10-27T04:00:00,-03:00,-03 -2003-04-06T05:00:00,-02:00,-02 -2003-10-26T04:00:00,-03:00,-03 -2004-04-04T05:00:00,-02:00,-02 -2004-10-31T04:00:00,-03:00,-03 -2005-04-03T05:00:00,-02:00,-02 -2005-10-30T04:00:00,-03:00,-03 -2006-04-02T05:00:00,-02:00,-02 -2006-10-29T04:00:00,-03:00,-03 -2007-03-11T05:00:00,-02:00,-02 -2007-11-04T04:00:00,-03:00,-03 -2008-03-09T05:00:00,-02:00,-02 -2008-11-02T04:00:00,-03:00,-03 -2009-03-08T05:00:00,-02:00,-02 -2009-11-01T04:00:00,-03:00,-03 -2010-03-14T05:00:00,-02:00,-02 -2010-11-07T04:00:00,-03:00,-03 -2011-03-13T05:00:00,-02:00,-02 -2011-11-06T04:00:00,-03:00,-03 -2012-03-11T05:00:00,-02:00,-02 -2012-11-04T04:00:00,-03:00,-03 -2013-03-10T05:00:00,-02:00,-02 -2013-11-03T04:00:00,-03:00,-03 -2014-03-09T05:00:00,-02:00,-02 -2014-11-02T04:00:00,-03:00,-03 -2015-03-08T05:00:00,-02:00,-02 -2015-11-01T04:00:00,-03:00,-03 -2016-03-13T05:00:00,-02:00,-02 -2016-11-06T04:00:00,-03:00,-03 -2017-03-12T05:00:00,-02:00,-02 -2017-11-05T04:00:00,-03:00,-03 -2018-03-11T05:00:00,-02:00,-02 -2018-11-04T04:00:00,-03:00,-03 -2019-03-10T05:00:00,-02:00,-02 -2019-11-03T04:00:00,-03:00,-03 -2020-03-08T05:00:00,-02:00,-02 -2020-11-01T04:00:00,-03:00,-03 -2021-03-14T05:00:00,-02:00,-02 -2021-11-07T04:00:00,-03:00,-03 -2022-03-13T05:00:00,-02:00,-02 -2022-11-06T04:00:00,-03:00,-03 -2023-03-12T05:00:00,-02:00,-02 -2023-11-05T04:00:00,-03:00,-03 -2024-03-10T05:00:00,-02:00,-02 -2024-11-03T04:00:00,-03:00,-03 -2025-03-09T05:00:00,-02:00,-02 -2025-11-02T04:00:00,-03:00,-03 -2026-03-08T05:00:00,-02:00,-02 -2026-11-01T04:00:00,-03:00,-03 -2027-03-14T05:00:00,-02:00,-02 -2027-11-07T04:00:00,-03:00,-03 -2028-03-12T05:00:00,-02:00,-02 -2028-11-05T04:00:00,-03:00,-03 -2029-03-11T05:00:00,-02:00,-02 -2029-11-04T04:00:00,-03:00,-03 -2030-03-10T05:00:00,-02:00,-02 -2030-11-03T04:00:00,-03:00,-03 -2031-03-09T05:00:00,-02:00,-02 -2031-11-02T04:00:00,-03:00,-03 -2032-03-14T05:00:00,-02:00,-02 -2032-11-07T04:00:00,-03:00,-03 -2033-03-13T05:00:00,-02:00,-02 -2033-11-06T04:00:00,-03:00,-03 -2034-03-12T05:00:00,-02:00,-02 -2034-11-05T04:00:00,-03:00,-03 -2035-03-11T05:00:00,-02:00,-02 -2035-11-04T04:00:00,-03:00,-03 -2036-03-09T05:00:00,-02:00,-02 -2036-11-02T04:00:00,-03:00,-03 -2037-03-08T05:00:00,-02:00,-02 -2037-11-01T04:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-moncton.hoon b/desk/lib/pytz/america-moncton.hoon deleted file mode 100644 index 24d5347..0000000 --- a/desk/lib/pytz/america-moncton.hoon +++ /dev/null @@ -1,211 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:00,EST -1902-06-15T05:00:00,-04:00,AST -1918-04-14T06:00:00,-03:00,ADT -1918-10-27T05:00:00,-04:00,AST -1933-06-11T05:00:00,-03:00,ADT -1933-09-10T04:00:00,-04:00,AST -1934-06-10T05:00:00,-03:00,ADT -1934-09-09T04:00:00,-04:00,AST -1935-06-09T05:00:00,-03:00,ADT -1935-09-08T04:00:00,-04:00,AST -1936-06-07T05:00:00,-03:00,ADT -1936-09-06T04:00:00,-04:00,AST -1937-06-06T05:00:00,-03:00,ADT -1937-09-05T04:00:00,-04:00,AST -1938-06-05T05:00:00,-03:00,ADT -1938-09-04T04:00:00,-04:00,AST -1939-05-27T05:00:00,-03:00,ADT -1939-09-23T04:00:00,-04:00,AST -1940-05-19T05:00:00,-03:00,ADT -1940-09-21T04:00:00,-04:00,AST -1941-05-04T05:00:00,-03:00,ADT -1941-09-27T04:00:00,-04:00,AST -1942-02-09T06:00:00,-03:00,AWT -1945-08-14T23:00:00,-03:00,APT -1945-09-30T05:00:00,-04:00,AST -1946-04-28T06:00:00,-03:00,ADT -1946-09-29T05:00:00,-04:00,AST -1947-04-27T06:00:00,-03:00,ADT -1947-09-28T05:00:00,-04:00,AST -1948-04-25T06:00:00,-03:00,ADT -1948-09-26T05:00:00,-04:00,AST -1949-04-24T06:00:00,-03:00,ADT -1949-09-25T05:00:00,-04:00,AST -1950-04-30T06:00:00,-03:00,ADT -1950-09-24T05:00:00,-04:00,AST -1951-04-29T06:00:00,-03:00,ADT -1951-09-30T05:00:00,-04:00,AST -1952-04-27T06:00:00,-03:00,ADT -1952-09-28T05:00:00,-04:00,AST -1953-04-26T06:00:00,-03:00,ADT -1953-09-27T05:00:00,-04:00,AST -1954-04-25T06:00:00,-03:00,ADT -1954-09-26T05:00:00,-04:00,AST -1955-04-24T06:00:00,-03:00,ADT -1955-09-25T05:00:00,-04:00,AST -1956-04-29T06:00:00,-03:00,ADT -1956-09-30T05:00:00,-04:00,AST -1957-04-28T06:00:00,-03:00,ADT -1957-10-27T05:00:00,-04:00,AST -1958-04-27T06:00:00,-03:00,ADT -1958-10-26T05:00:00,-04:00,AST -1959-04-26T06:00:00,-03:00,ADT -1959-10-25T05:00:00,-04:00,AST -1960-04-24T06:00:00,-03:00,ADT -1960-10-30T05:00:00,-04:00,AST -1961-04-30T06:00:00,-03:00,ADT -1961-10-29T05:00:00,-04:00,AST -1962-04-29T06:00:00,-03:00,ADT -1962-10-28T05:00:00,-04:00,AST -1963-04-28T06:00:00,-03:00,ADT -1963-10-27T05:00:00,-04:00,AST -1964-04-26T06:00:00,-03:00,ADT -1964-10-25T05:00:00,-04:00,AST -1965-04-25T06:00:00,-03:00,ADT -1965-10-31T05:00:00,-04:00,AST -1966-04-24T06:00:00,-03:00,ADT -1966-10-30T05:00:00,-04:00,AST -1967-04-30T06:00:00,-03:00,ADT -1967-10-29T05:00:00,-04:00,AST -1968-04-28T06:00:00,-03:00,ADT -1968-10-27T05:00:00,-04:00,AST -1969-04-27T06:00:00,-03:00,ADT -1969-10-26T05:00:00,-04:00,AST -1970-04-26T06:00:00,-03:00,ADT -1970-10-25T05:00:00,-04:00,AST -1971-04-25T06:00:00,-03:00,ADT -1971-10-31T05:00:00,-04:00,AST -1972-04-30T06:00:00,-03:00,ADT -1972-10-29T05:00:00,-04:00,AST -1974-04-28T06:00:00,-03:00,ADT -1974-10-27T05:00:00,-04:00,AST -1975-04-27T06:00:00,-03:00,ADT -1975-10-26T05:00:00,-04:00,AST -1976-04-25T06:00:00,-03:00,ADT -1976-10-31T05:00:00,-04:00,AST -1977-04-24T06:00:00,-03:00,ADT -1977-10-30T05:00:00,-04:00,AST -1978-04-30T06:00:00,-03:00,ADT -1978-10-29T05:00:00,-04:00,AST -1979-04-29T06:00:00,-03:00,ADT -1979-10-28T05:00:00,-04:00,AST -1980-04-27T06:00:00,-03:00,ADT -1980-10-26T05:00:00,-04:00,AST -1981-04-26T06:00:00,-03:00,ADT -1981-10-25T05:00:00,-04:00,AST -1982-04-25T06:00:00,-03:00,ADT -1982-10-31T05:00:00,-04:00,AST -1983-04-24T06:00:00,-03:00,ADT -1983-10-30T05:00:00,-04:00,AST -1984-04-29T06:00:00,-03:00,ADT -1984-10-28T05:00:00,-04:00,AST -1985-04-28T06:00:00,-03:00,ADT -1985-10-27T05:00:00,-04:00,AST -1986-04-27T06:00:00,-03:00,ADT -1986-10-26T05:00:00,-04:00,AST -1987-04-05T06:00:00,-03:00,ADT -1987-10-25T05:00:00,-04:00,AST -1988-04-03T06:00:00,-03:00,ADT -1988-10-30T05:00:00,-04:00,AST -1989-04-02T06:00:00,-03:00,ADT -1989-10-29T05:00:00,-04:00,AST -1990-04-01T06:00:00,-03:00,ADT -1990-10-28T05:00:00,-04:00,AST -1991-04-07T06:00:00,-03:00,ADT -1991-10-27T05:00:00,-04:00,AST -1992-04-05T06:00:00,-03:00,ADT -1992-10-25T05:00:00,-04:00,AST -1993-04-04T04:01:00,-03:00,ADT -1993-10-31T03:01:00,-04:00,AST -1994-04-03T04:01:00,-03:00,ADT -1994-10-30T03:01:00,-04:00,AST -1995-04-02T04:01:00,-03:00,ADT -1995-10-29T03:01:00,-04:00,AST -1996-04-07T04:01:00,-03:00,ADT -1996-10-27T03:01:00,-04:00,AST -1997-04-06T04:01:00,-03:00,ADT -1997-10-26T03:01:00,-04:00,AST -1998-04-05T04:01:00,-03:00,ADT -1998-10-25T03:01:00,-04:00,AST -1999-04-04T04:01:00,-03:00,ADT -1999-10-31T03:01:00,-04:00,AST -2000-04-02T04:01:00,-03:00,ADT -2000-10-29T03:01:00,-04:00,AST -2001-04-01T04:01:00,-03:00,ADT -2001-10-28T03:01:00,-04:00,AST -2002-04-07T04:01:00,-03:00,ADT -2002-10-27T03:01:00,-04:00,AST -2003-04-06T04:01:00,-03:00,ADT -2003-10-26T03:01:00,-04:00,AST -2004-04-04T04:01:00,-03:00,ADT -2004-10-31T03:01:00,-04:00,AST -2005-04-03T04:01:00,-03:00,ADT -2005-10-30T03:01:00,-04:00,AST -2006-04-02T04:01:00,-03:00,ADT -2006-10-29T03:01:00,-04:00,AST -2007-03-11T06:00:00,-03:00,ADT -2007-11-04T05:00:00,-04:00,AST -2008-03-09T06:00:00,-03:00,ADT -2008-11-02T05:00:00,-04:00,AST -2009-03-08T06:00:00,-03:00,ADT -2009-11-01T05:00:00,-04:00,AST -2010-03-14T06:00:00,-03:00,ADT -2010-11-07T05:00:00,-04:00,AST -2011-03-13T06:00:00,-03:00,ADT -2011-11-06T05:00:00,-04:00,AST -2012-03-11T06:00:00,-03:00,ADT -2012-11-04T05:00:00,-04:00,AST -2013-03-10T06:00:00,-03:00,ADT -2013-11-03T05:00:00,-04:00,AST -2014-03-09T06:00:00,-03:00,ADT -2014-11-02T05:00:00,-04:00,AST -2015-03-08T06:00:00,-03:00,ADT -2015-11-01T05:00:00,-04:00,AST -2016-03-13T06:00:00,-03:00,ADT -2016-11-06T05:00:00,-04:00,AST -2017-03-12T06:00:00,-03:00,ADT -2017-11-05T05:00:00,-04:00,AST -2018-03-11T06:00:00,-03:00,ADT -2018-11-04T05:00:00,-04:00,AST -2019-03-10T06:00:00,-03:00,ADT -2019-11-03T05:00:00,-04:00,AST -2020-03-08T06:00:00,-03:00,ADT -2020-11-01T05:00:00,-04:00,AST -2021-03-14T06:00:00,-03:00,ADT -2021-11-07T05:00:00,-04:00,AST -2022-03-13T06:00:00,-03:00,ADT -2022-11-06T05:00:00,-04:00,AST -2023-03-12T06:00:00,-03:00,ADT -2023-11-05T05:00:00,-04:00,AST -2024-03-10T06:00:00,-03:00,ADT -2024-11-03T05:00:00,-04:00,AST -2025-03-09T06:00:00,-03:00,ADT -2025-11-02T05:00:00,-04:00,AST -2026-03-08T06:00:00,-03:00,ADT -2026-11-01T05:00:00,-04:00,AST -2027-03-14T06:00:00,-03:00,ADT -2027-11-07T05:00:00,-04:00,AST -2028-03-12T06:00:00,-03:00,ADT -2028-11-05T05:00:00,-04:00,AST -2029-03-11T06:00:00,-03:00,ADT -2029-11-04T05:00:00,-04:00,AST -2030-03-10T06:00:00,-03:00,ADT -2030-11-03T05:00:00,-04:00,AST -2031-03-09T06:00:00,-03:00,ADT -2031-11-02T05:00:00,-04:00,AST -2032-03-14T06:00:00,-03:00,ADT -2032-11-07T05:00:00,-04:00,AST -2033-03-13T06:00:00,-03:00,ADT -2033-11-06T05:00:00,-04:00,AST -2034-03-12T06:00:00,-03:00,ADT -2034-11-05T05:00:00,-04:00,AST -2035-03-11T06:00:00,-03:00,ADT -2035-11-04T05:00:00,-04:00,AST -2036-03-09T06:00:00,-03:00,ADT -2036-11-02T05:00:00,-04:00,AST -2037-03-08T06:00:00,-03:00,ADT -2037-11-01T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-monterrey.hoon b/desk/lib/pytz/america-monterrey.hoon deleted file mode 100644 index fb4c370..0000000 --- a/desk/lib/pytz/america-monterrey.hoon +++ /dev/null @@ -1,66 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T06:00:00,-07:00,MST -1927-06-10T07:00:00,-06:00,CST -1930-11-15T06:00:00,-07:00,MST -1931-04-30T07:00:00,-06:00,MDT -1931-10-01T06:00:00,-07:00,MST -1932-04-01T07:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-06:00,CST -2001-05-06T08:00:00,-05:00,CDT -2001-09-30T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-04-01T08:00:00,-05:00,CDT -2007-10-28T07:00:00,-06:00,CST -2008-04-06T08:00:00,-05:00,CDT -2008-10-26T07:00:00,-06:00,CST -2009-04-05T08:00:00,-05:00,CDT -2009-10-25T07:00:00,-06:00,CST -2010-04-04T08:00:00,-05:00,CDT -2010-10-31T07:00:00,-06:00,CST -2011-04-03T08:00:00,-05:00,CDT -2011-10-30T07:00:00,-06:00,CST -2012-04-01T08:00:00,-05:00,CDT -2012-10-28T07:00:00,-06:00,CST -2013-04-07T08:00:00,-05:00,CDT -2013-10-27T07:00:00,-06:00,CST -2014-04-06T08:00:00,-05:00,CDT -2014-10-26T07:00:00,-06:00,CST -2015-04-05T08:00:00,-05:00,CDT -2015-10-25T07:00:00,-06:00,CST -2016-04-03T08:00:00,-05:00,CDT -2016-10-30T07:00:00,-06:00,CST -2017-04-02T08:00:00,-05:00,CDT -2017-10-29T07:00:00,-06:00,CST -2018-04-01T08:00:00,-05:00,CDT -2018-10-28T07:00:00,-06:00,CST -2019-04-07T08:00:00,-05:00,CDT -2019-10-27T07:00:00,-06:00,CST -2020-04-05T08:00:00,-05:00,CDT -2020-10-25T07:00:00,-06:00,CST -2021-04-04T08:00:00,-05:00,CDT -2021-10-31T07:00:00,-06:00,CST -2022-04-03T08:00:00,-05:00,CDT -2022-10-30T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-montevideo.hoon b/desk/lib/pytz/america-montevideo.hoon deleted file mode 100644 index bd223bb..0000000 --- a/desk/lib/pytz/america-montevideo.hoon +++ /dev/null @@ -1,90 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1908-06-10T03:44:51,-04:15,MMT -1920-05-01T03:44:51,-04:00,-04 -1923-10-01T04:00:00,-03:00,-03 -1924-04-01T03:00:00,-04:30,-0330 -1924-10-01T03:30:00,-03:00,-03 -1925-04-01T03:00:00,-04:30,-0330 -1925-10-01T03:30:00,-03:00,-03 -1926-04-01T03:00:00,-04:30,-0330 -1933-10-29T03:30:00,-03:00,-03 -1934-04-01T03:00:00,-04:30,-0330 -1934-10-28T03:30:00,-03:00,-03 -1935-03-31T03:00:00,-04:30,-0330 -1935-10-27T03:30:00,-03:00,-03 -1936-03-29T03:00:00,-04:30,-0330 -1936-10-25T03:30:00,-03:00,-03 -1937-03-28T03:00:00,-04:30,-0330 -1937-10-31T03:30:00,-03:00,-03 -1938-03-27T03:00:00,-04:30,-0330 -1938-10-30T03:30:00,-03:00,-03 -1939-03-26T03:00:00,-04:30,-0330 -1939-10-01T03:30:00,-03:00,-03 -1940-03-31T03:00:00,-04:30,-0330 -1940-10-27T03:30:00,-03:00,-03 -1941-03-30T03:00:00,-04:30,-0330 -1941-08-01T03:30:00,-03:00,-03 -1942-12-14T03:00:00,-03:30,-0230 -1943-03-14T02:30:00,-03:00,-03 -1959-05-24T03:00:00,-03:30,-0230 -1959-11-15T02:30:00,-03:00,-03 -1960-01-17T03:00:00,-02:00,-02 -1960-03-06T02:00:00,-03:00,-03 -1965-04-04T03:00:00,-02:00,-02 -1965-09-26T02:00:00,-03:00,-03 -1968-05-27T03:00:00,-03:30,-0230 -1968-12-01T02:30:00,-03:00,-03 -1970-04-25T03:00:00,-02:00,-02 -1970-06-14T02:00:00,-03:00,-03 -1972-04-23T03:00:00,-02:00,-02 -1972-07-16T02:00:00,-03:00,-03 -1974-01-13T03:00:00,-02:30,-0130 -1974-03-10T01:30:00,-03:30,-0230 -1974-09-01T02:30:00,-03:00,-03 -1974-12-22T03:00:00,-02:00,-02 -1975-03-30T02:00:00,-03:00,-03 -1976-12-19T03:00:00,-02:00,-02 -1977-03-06T02:00:00,-03:00,-03 -1977-12-04T03:00:00,-02:00,-02 -1978-03-05T02:00:00,-03:00,-03 -1978-12-17T03:00:00,-02:00,-02 -1979-03-04T02:00:00,-03:00,-03 -1979-04-29T03:00:00,-02:00,-02 -1980-03-16T02:00:00,-03:00,-03 -1987-12-14T03:00:00,-02:00,-02 -1988-02-28T02:00:00,-03:00,-03 -1988-12-11T03:00:00,-02:00,-02 -1989-03-05T02:00:00,-03:00,-03 -1989-10-29T03:00:00,-02:00,-02 -1990-02-25T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-03-03T02:00:00,-03:00,-03 -1991-10-27T03:00:00,-02:00,-02 -1992-03-01T02:00:00,-03:00,-03 -1992-10-18T03:00:00,-02:00,-02 -1993-02-28T02:00:00,-03:00,-03 -2004-09-19T03:00:00,-02:00,-02 -2005-03-27T04:00:00,-03:00,-03 -2005-10-09T05:00:00,-02:00,-02 -2006-03-12T04:00:00,-03:00,-03 -2006-10-01T05:00:00,-02:00,-02 -2007-03-11T04:00:00,-03:00,-03 -2007-10-07T05:00:00,-02:00,-02 -2008-03-09T04:00:00,-03:00,-03 -2008-10-05T05:00:00,-02:00,-02 -2009-03-08T04:00:00,-03:00,-03 -2009-10-04T05:00:00,-02:00,-02 -2010-03-14T04:00:00,-03:00,-03 -2010-10-03T05:00:00,-02:00,-02 -2011-03-13T04:00:00,-03:00,-03 -2011-10-02T05:00:00,-02:00,-02 -2012-03-11T04:00:00,-03:00,-03 -2012-10-07T05:00:00,-02:00,-02 -2013-03-10T04:00:00,-03:00,-03 -2013-10-06T05:00:00,-02:00,-02 -2014-03-09T04:00:00,-03:00,-03 -2014-10-05T05:00:00,-02:00,-02 -2015-03-08T04:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-montreal.hoon b/desk/lib/pytz/america-montreal.hoon deleted file mode 100644 index 46b9654..0000000 --- a/desk/lib/pytz/america-montreal.hoon +++ /dev/null @@ -1,237 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:00,EST -1918-04-14T07:00:00,-04:00,EDT -1918-10-27T06:00:00,-05:00,EST -1919-03-31T04:30:00,-04:00,EDT -1919-10-26T04:00:00,-05:00,EST -1920-05-02T07:00:00,-04:00,EDT -1920-09-26T04:00:00,-05:00,EST -1921-05-15T07:00:00,-04:00,EDT -1921-09-15T06:00:00,-05:00,EST -1922-05-14T07:00:00,-04:00,EDT -1922-09-17T06:00:00,-05:00,EST -1923-05-13T07:00:00,-04:00,EDT -1923-09-16T06:00:00,-05:00,EST -1924-05-04T07:00:00,-04:00,EDT -1924-09-21T06:00:00,-05:00,EST -1925-05-03T07:00:00,-04:00,EDT -1925-09-20T06:00:00,-05:00,EST -1926-05-02T07:00:00,-04:00,EDT -1926-09-19T06:00:00,-05:00,EST -1927-05-01T07:00:00,-04:00,EDT -1927-09-25T06:00:00,-05:00,EST -1928-04-29T07:00:00,-04:00,EDT -1928-09-30T06:00:00,-05:00,EST -1929-04-28T07:00:00,-04:00,EDT -1929-09-29T06:00:00,-05:00,EST -1930-04-27T07:00:00,-04:00,EDT -1930-09-28T06:00:00,-05:00,EST -1931-04-26T07:00:00,-04:00,EDT -1931-09-27T06:00:00,-05:00,EST -1932-05-01T07:00:00,-04:00,EDT -1932-09-25T06:00:00,-05:00,EST -1933-04-30T07:00:00,-04:00,EDT -1933-10-01T06:00:00,-05:00,EST -1934-04-29T07:00:00,-04:00,EDT -1934-09-30T06:00:00,-05:00,EST -1935-04-28T07:00:00,-04:00,EDT -1935-09-29T06:00:00,-05:00,EST -1936-04-26T07:00:00,-04:00,EDT -1936-09-27T06:00:00,-05:00,EST -1937-04-25T07:00:00,-04:00,EDT -1937-09-26T06:00:00,-05:00,EST -1938-04-24T07:00:00,-04:00,EDT -1938-09-25T06:00:00,-05:00,EST -1939-04-30T07:00:00,-04:00,EDT -1939-09-24T06:00:00,-05:00,EST -1940-04-28T07:00:00,-04:00,EDT -1942-02-09T07:00:00,-04:00,EWT -1945-08-14T23:00:00,-04:00,EPT -1945-09-30T06:00:00,-05:00,EST -1946-04-28T07:00:00,-04:00,EDT -1946-09-29T06:00:00,-05:00,EST -1947-04-27T07:00:00,-04:00,EDT -1947-09-28T06:00:00,-05:00,EST -1948-04-25T07:00:00,-04:00,EDT -1948-09-26T06:00:00,-05:00,EST -1949-04-24T07:00:00,-04:00,EDT -1949-11-27T06:00:00,-05:00,EST -1950-04-30T07:00:00,-04:00,EDT -1950-11-26T06:00:00,-05:00,EST -1951-04-29T07:00:00,-04:00,EDT -1951-09-30T06:00:00,-05:00,EST -1952-04-27T07:00:00,-04:00,EDT -1952-09-28T06:00:00,-05:00,EST -1953-04-26T07:00:00,-04:00,EDT -1953-09-27T06:00:00,-05:00,EST -1954-04-25T07:00:00,-04:00,EDT -1954-09-26T06:00:00,-05:00,EST -1955-04-24T07:00:00,-04:00,EDT -1955-09-25T06:00:00,-05:00,EST -1956-04-29T07:00:00,-04:00,EDT -1956-09-30T06:00:00,-05:00,EST -1957-04-28T07:00:00,-04:00,EDT -1957-10-27T06:00:00,-05:00,EST -1958-04-27T07:00:00,-04:00,EDT -1958-10-26T06:00:00,-05:00,EST -1959-04-26T07:00:00,-04:00,EDT -1959-10-25T06:00:00,-05:00,EST -1960-04-24T07:00:00,-04:00,EDT -1960-10-30T06:00:00,-05:00,EST -1961-04-30T07:00:00,-04:00,EDT -1961-10-29T06:00:00,-05:00,EST -1962-04-29T07:00:00,-04:00,EDT -1962-10-28T06:00:00,-05:00,EST -1963-04-28T07:00:00,-04:00,EDT -1963-10-27T06:00:00,-05:00,EST -1964-04-26T07:00:00,-04:00,EDT -1964-10-25T06:00:00,-05:00,EST -1965-04-25T07:00:00,-04:00,EDT -1965-10-31T06:00:00,-05:00,EST -1966-04-24T07:00:00,-04:00,EDT -1966-10-30T06:00:00,-05:00,EST -1967-04-30T07:00:00,-04:00,EDT -1967-10-29T06:00:00,-05:00,EST -1968-04-28T07:00:00,-04:00,EDT -1968-10-27T06:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -1971-04-25T07:00:00,-04:00,EDT -1971-10-31T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-04-28T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-04-27T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-05:00,EST -2000-04-02T07:00:00,-04:00,EDT -2000-10-29T06:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-montserrat.hoon b/desk/lib/pytz/america-montserrat.hoon deleted file mode 100644 index ead2edf..0000000 --- a/desk/lib/pytz/america-montserrat.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-07-01T04:09:52,-04:00,AST -''' diff --git a/desk/lib/pytz/america-nassau.hoon b/desk/lib/pytz/america-nassau.hoon deleted file mode 100644 index 42e6969..0000000 --- a/desk/lib/pytz/america-nassau.hoon +++ /dev/null @@ -1,158 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-03-02T05:09:30,-05:00,EST -1942-05-02T05:00:00,-04:00,EWT -1945-01-01T04:00:00,-05:00,EST -1945-02-01T05:00:00,-04:00,EWT -1945-08-14T23:00:00,-04:00,EPT -1945-10-18T04:00:00,-05:00,EST -1964-04-26T07:00:00,-04:00,EDT -1964-10-25T06:00:00,-05:00,EST -1965-04-25T07:00:00,-04:00,EDT -1965-10-31T06:00:00,-05:00,EST -1966-04-24T07:00:00,-04:00,EDT -1966-10-30T06:00:00,-05:00,EST -1967-04-30T07:00:00,-04:00,EDT -1967-10-29T06:00:00,-05:00,EST -1968-04-28T07:00:00,-04:00,EDT -1968-10-27T06:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -1971-04-25T07:00:00,-04:00,EDT -1971-10-31T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-04-28T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-04-27T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-05:00,EST -2000-04-02T07:00:00,-04:00,EDT -2000-10-29T06:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-new-york.hoon b/desk/lib/pytz/america-new-york.hoon deleted file mode 100644 index 08b23c3..0000000 --- a/desk/lib/pytz/america-new-york.hoon +++ /dev/null @@ -1,240 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:00,EST -1918-03-31T07:00:00,-04:00,EDT -1918-10-27T06:00:00,-05:00,EST -1919-03-30T07:00:00,-04:00,EDT -1919-10-26T06:00:00,-05:00,EST -1920-03-28T07:00:00,-04:00,EDT -1920-10-31T06:00:00,-05:00,EST -1921-04-24T07:00:00,-04:00,EDT -1921-09-25T06:00:00,-05:00,EST -1922-04-30T07:00:00,-04:00,EDT -1922-09-24T06:00:00,-05:00,EST -1923-04-29T07:00:00,-04:00,EDT -1923-09-30T06:00:00,-05:00,EST -1924-04-27T07:00:00,-04:00,EDT -1924-09-28T06:00:00,-05:00,EST -1925-04-26T07:00:00,-04:00,EDT -1925-09-27T06:00:00,-05:00,EST -1926-04-25T07:00:00,-04:00,EDT -1926-09-26T06:00:00,-05:00,EST -1927-04-24T07:00:00,-04:00,EDT -1927-09-25T06:00:00,-05:00,EST -1928-04-29T07:00:00,-04:00,EDT -1928-09-30T06:00:00,-05:00,EST -1929-04-28T07:00:00,-04:00,EDT -1929-09-29T06:00:00,-05:00,EST -1930-04-27T07:00:00,-04:00,EDT -1930-09-28T06:00:00,-05:00,EST -1931-04-26T07:00:00,-04:00,EDT -1931-09-27T06:00:00,-05:00,EST -1932-04-24T07:00:00,-04:00,EDT -1932-09-25T06:00:00,-05:00,EST -1933-04-30T07:00:00,-04:00,EDT -1933-09-24T06:00:00,-05:00,EST -1934-04-29T07:00:00,-04:00,EDT -1934-09-30T06:00:00,-05:00,EST -1935-04-28T07:00:00,-04:00,EDT -1935-09-29T06:00:00,-05:00,EST -1936-04-26T07:00:00,-04:00,EDT -1936-09-27T06:00:00,-05:00,EST -1937-04-25T07:00:00,-04:00,EDT -1937-09-26T06:00:00,-05:00,EST -1938-04-24T07:00:00,-04:00,EDT -1938-09-25T06:00:00,-05:00,EST -1939-04-30T07:00:00,-04:00,EDT -1939-09-24T06:00:00,-05:00,EST -1940-04-28T07:00:00,-04:00,EDT -1940-09-29T06:00:00,-05:00,EST -1941-04-27T07:00:00,-04:00,EDT -1941-09-28T06:00:00,-05:00,EST -1942-02-09T07:00:00,-04:00,EWT -1945-08-14T23:00:00,-04:00,EPT -1945-09-30T06:00:00,-05:00,EST -1946-04-28T07:00:00,-04:00,EDT -1946-09-29T06:00:00,-05:00,EST -1947-04-27T07:00:00,-04:00,EDT -1947-09-28T06:00:00,-05:00,EST -1948-04-25T07:00:00,-04:00,EDT -1948-09-26T06:00:00,-05:00,EST -1949-04-24T07:00:00,-04:00,EDT -1949-09-25T06:00:00,-05:00,EST -1950-04-30T07:00:00,-04:00,EDT -1950-09-24T06:00:00,-05:00,EST -1951-04-29T07:00:00,-04:00,EDT -1951-09-30T06:00:00,-05:00,EST -1952-04-27T07:00:00,-04:00,EDT -1952-09-28T06:00:00,-05:00,EST -1953-04-26T07:00:00,-04:00,EDT -1953-09-27T06:00:00,-05:00,EST -1954-04-25T07:00:00,-04:00,EDT -1954-09-26T06:00:00,-05:00,EST -1955-04-24T07:00:00,-04:00,EDT -1955-10-30T06:00:00,-05:00,EST -1956-04-29T07:00:00,-04:00,EDT -1956-10-28T06:00:00,-05:00,EST -1957-04-28T07:00:00,-04:00,EDT -1957-10-27T06:00:00,-05:00,EST -1958-04-27T07:00:00,-04:00,EDT -1958-10-26T06:00:00,-05:00,EST -1959-04-26T07:00:00,-04:00,EDT -1959-10-25T06:00:00,-05:00,EST -1960-04-24T07:00:00,-04:00,EDT -1960-10-30T06:00:00,-05:00,EST -1961-04-30T07:00:00,-04:00,EDT -1961-10-29T06:00:00,-05:00,EST -1962-04-29T07:00:00,-04:00,EDT -1962-10-28T06:00:00,-05:00,EST -1963-04-28T07:00:00,-04:00,EDT -1963-10-27T06:00:00,-05:00,EST -1964-04-26T07:00:00,-04:00,EDT -1964-10-25T06:00:00,-05:00,EST -1965-04-25T07:00:00,-04:00,EDT -1965-10-31T06:00:00,-05:00,EST -1966-04-24T07:00:00,-04:00,EDT -1966-10-30T06:00:00,-05:00,EST -1967-04-30T07:00:00,-04:00,EDT -1967-10-29T06:00:00,-05:00,EST -1968-04-28T07:00:00,-04:00,EDT -1968-10-27T06:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -1971-04-25T07:00:00,-04:00,EDT -1971-10-31T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-01-06T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-02-23T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-05:00,EST -2000-04-02T07:00:00,-04:00,EDT -2000-10-29T06:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-nipigon.hoon b/desk/lib/pytz/america-nipigon.hoon deleted file mode 100644 index 46b9654..0000000 --- a/desk/lib/pytz/america-nipigon.hoon +++ /dev/null @@ -1,237 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:00,EST -1918-04-14T07:00:00,-04:00,EDT -1918-10-27T06:00:00,-05:00,EST -1919-03-31T04:30:00,-04:00,EDT -1919-10-26T04:00:00,-05:00,EST -1920-05-02T07:00:00,-04:00,EDT -1920-09-26T04:00:00,-05:00,EST -1921-05-15T07:00:00,-04:00,EDT -1921-09-15T06:00:00,-05:00,EST -1922-05-14T07:00:00,-04:00,EDT -1922-09-17T06:00:00,-05:00,EST -1923-05-13T07:00:00,-04:00,EDT -1923-09-16T06:00:00,-05:00,EST -1924-05-04T07:00:00,-04:00,EDT -1924-09-21T06:00:00,-05:00,EST -1925-05-03T07:00:00,-04:00,EDT -1925-09-20T06:00:00,-05:00,EST -1926-05-02T07:00:00,-04:00,EDT -1926-09-19T06:00:00,-05:00,EST -1927-05-01T07:00:00,-04:00,EDT -1927-09-25T06:00:00,-05:00,EST -1928-04-29T07:00:00,-04:00,EDT -1928-09-30T06:00:00,-05:00,EST -1929-04-28T07:00:00,-04:00,EDT -1929-09-29T06:00:00,-05:00,EST -1930-04-27T07:00:00,-04:00,EDT -1930-09-28T06:00:00,-05:00,EST -1931-04-26T07:00:00,-04:00,EDT -1931-09-27T06:00:00,-05:00,EST -1932-05-01T07:00:00,-04:00,EDT -1932-09-25T06:00:00,-05:00,EST -1933-04-30T07:00:00,-04:00,EDT -1933-10-01T06:00:00,-05:00,EST -1934-04-29T07:00:00,-04:00,EDT -1934-09-30T06:00:00,-05:00,EST -1935-04-28T07:00:00,-04:00,EDT -1935-09-29T06:00:00,-05:00,EST -1936-04-26T07:00:00,-04:00,EDT -1936-09-27T06:00:00,-05:00,EST -1937-04-25T07:00:00,-04:00,EDT -1937-09-26T06:00:00,-05:00,EST -1938-04-24T07:00:00,-04:00,EDT -1938-09-25T06:00:00,-05:00,EST -1939-04-30T07:00:00,-04:00,EDT -1939-09-24T06:00:00,-05:00,EST -1940-04-28T07:00:00,-04:00,EDT -1942-02-09T07:00:00,-04:00,EWT -1945-08-14T23:00:00,-04:00,EPT -1945-09-30T06:00:00,-05:00,EST -1946-04-28T07:00:00,-04:00,EDT -1946-09-29T06:00:00,-05:00,EST -1947-04-27T07:00:00,-04:00,EDT -1947-09-28T06:00:00,-05:00,EST -1948-04-25T07:00:00,-04:00,EDT -1948-09-26T06:00:00,-05:00,EST -1949-04-24T07:00:00,-04:00,EDT -1949-11-27T06:00:00,-05:00,EST -1950-04-30T07:00:00,-04:00,EDT -1950-11-26T06:00:00,-05:00,EST -1951-04-29T07:00:00,-04:00,EDT -1951-09-30T06:00:00,-05:00,EST -1952-04-27T07:00:00,-04:00,EDT -1952-09-28T06:00:00,-05:00,EST -1953-04-26T07:00:00,-04:00,EDT -1953-09-27T06:00:00,-05:00,EST -1954-04-25T07:00:00,-04:00,EDT -1954-09-26T06:00:00,-05:00,EST -1955-04-24T07:00:00,-04:00,EDT -1955-09-25T06:00:00,-05:00,EST -1956-04-29T07:00:00,-04:00,EDT -1956-09-30T06:00:00,-05:00,EST -1957-04-28T07:00:00,-04:00,EDT -1957-10-27T06:00:00,-05:00,EST -1958-04-27T07:00:00,-04:00,EDT -1958-10-26T06:00:00,-05:00,EST -1959-04-26T07:00:00,-04:00,EDT -1959-10-25T06:00:00,-05:00,EST -1960-04-24T07:00:00,-04:00,EDT -1960-10-30T06:00:00,-05:00,EST -1961-04-30T07:00:00,-04:00,EDT -1961-10-29T06:00:00,-05:00,EST -1962-04-29T07:00:00,-04:00,EDT -1962-10-28T06:00:00,-05:00,EST -1963-04-28T07:00:00,-04:00,EDT -1963-10-27T06:00:00,-05:00,EST -1964-04-26T07:00:00,-04:00,EDT -1964-10-25T06:00:00,-05:00,EST -1965-04-25T07:00:00,-04:00,EDT -1965-10-31T06:00:00,-05:00,EST -1966-04-24T07:00:00,-04:00,EDT -1966-10-30T06:00:00,-05:00,EST -1967-04-30T07:00:00,-04:00,EDT -1967-10-29T06:00:00,-05:00,EST -1968-04-28T07:00:00,-04:00,EDT -1968-10-27T06:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -1971-04-25T07:00:00,-04:00,EDT -1971-10-31T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-04-28T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-04-27T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-05:00,EST -2000-04-02T07:00:00,-04:00,EDT -2000-10-29T06:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-nome.hoon b/desk/lib/pytz/america-nome.hoon deleted file mode 100644 index 06ce783..0000000 --- a/desk/lib/pytz/america-nome.hoon +++ /dev/null @@ -1,149 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:58,LMT -1901-12-13T20:45:52,-11:00,NST -1942-02-09T13:00:00,-10:00,NWT -1945-08-14T23:00:00,-10:00,NPT -1945-09-30T12:00:00,-11:00,NST -1967-04-01T11:00:00,-11:00,BST -1969-04-27T13:00:00,-10:00,BDT -1969-10-26T12:00:00,-11:00,BST -1970-04-26T13:00:00,-10:00,BDT -1970-10-25T12:00:00,-11:00,BST -1971-04-25T13:00:00,-10:00,BDT -1971-10-31T12:00:00,-11:00,BST -1972-04-30T13:00:00,-10:00,BDT -1972-10-29T12:00:00,-11:00,BST -1973-04-29T13:00:00,-10:00,BDT -1973-10-28T12:00:00,-11:00,BST -1974-01-06T13:00:00,-10:00,BDT -1974-10-27T12:00:00,-11:00,BST -1975-02-23T13:00:00,-10:00,BDT -1975-10-26T12:00:00,-11:00,BST -1976-04-25T13:00:00,-10:00,BDT -1976-10-31T12:00:00,-11:00,BST -1977-04-24T13:00:00,-10:00,BDT -1977-10-30T12:00:00,-11:00,BST -1978-04-30T13:00:00,-10:00,BDT -1978-10-29T12:00:00,-11:00,BST -1979-04-29T13:00:00,-10:00,BDT -1979-10-28T12:00:00,-11:00,BST -1980-04-27T13:00:00,-10:00,BDT -1980-10-26T12:00:00,-11:00,BST -1981-04-26T13:00:00,-10:00,BDT -1981-10-25T12:00:00,-11:00,BST -1982-04-25T13:00:00,-10:00,BDT -1982-10-31T12:00:00,-11:00,BST -1983-04-24T13:00:00,-10:00,BDT -1983-10-30T12:00:00,-09:00,YST -1983-11-30T09:00:00,-09:00,AKST -1984-04-29T11:00:00,-08:00,AKDT -1984-10-28T10:00:00,-09:00,AKST -1985-04-28T11:00:00,-08:00,AKDT -1985-10-27T10:00:00,-09:00,AKST -1986-04-27T11:00:00,-08:00,AKDT -1986-10-26T10:00:00,-09:00,AKST -1987-04-05T11:00:00,-08:00,AKDT -1987-10-25T10:00:00,-09:00,AKST -1988-04-03T11:00:00,-08:00,AKDT -1988-10-30T10:00:00,-09:00,AKST -1989-04-02T11:00:00,-08:00,AKDT -1989-10-29T10:00:00,-09:00,AKST -1990-04-01T11:00:00,-08:00,AKDT -1990-10-28T10:00:00,-09:00,AKST -1991-04-07T11:00:00,-08:00,AKDT -1991-10-27T10:00:00,-09:00,AKST -1992-04-05T11:00:00,-08:00,AKDT -1992-10-25T10:00:00,-09:00,AKST -1993-04-04T11:00:00,-08:00,AKDT -1993-10-31T10:00:00,-09:00,AKST -1994-04-03T11:00:00,-08:00,AKDT -1994-10-30T10:00:00,-09:00,AKST -1995-04-02T11:00:00,-08:00,AKDT -1995-10-29T10:00:00,-09:00,AKST -1996-04-07T11:00:00,-08:00,AKDT -1996-10-27T10:00:00,-09:00,AKST -1997-04-06T11:00:00,-08:00,AKDT -1997-10-26T10:00:00,-09:00,AKST -1998-04-05T11:00:00,-08:00,AKDT -1998-10-25T10:00:00,-09:00,AKST -1999-04-04T11:00:00,-08:00,AKDT -1999-10-31T10:00:00,-09:00,AKST -2000-04-02T11:00:00,-08:00,AKDT -2000-10-29T10:00:00,-09:00,AKST -2001-04-01T11:00:00,-08:00,AKDT -2001-10-28T10:00:00,-09:00,AKST -2002-04-07T11:00:00,-08:00,AKDT -2002-10-27T10:00:00,-09:00,AKST -2003-04-06T11:00:00,-08:00,AKDT -2003-10-26T10:00:00,-09:00,AKST -2004-04-04T11:00:00,-08:00,AKDT -2004-10-31T10:00:00,-09:00,AKST -2005-04-03T11:00:00,-08:00,AKDT -2005-10-30T10:00:00,-09:00,AKST -2006-04-02T11:00:00,-08:00,AKDT -2006-10-29T10:00:00,-09:00,AKST -2007-03-11T11:00:00,-08:00,AKDT -2007-11-04T10:00:00,-09:00,AKST -2008-03-09T11:00:00,-08:00,AKDT -2008-11-02T10:00:00,-09:00,AKST -2009-03-08T11:00:00,-08:00,AKDT -2009-11-01T10:00:00,-09:00,AKST -2010-03-14T11:00:00,-08:00,AKDT -2010-11-07T10:00:00,-09:00,AKST -2011-03-13T11:00:00,-08:00,AKDT -2011-11-06T10:00:00,-09:00,AKST -2012-03-11T11:00:00,-08:00,AKDT -2012-11-04T10:00:00,-09:00,AKST -2013-03-10T11:00:00,-08:00,AKDT -2013-11-03T10:00:00,-09:00,AKST -2014-03-09T11:00:00,-08:00,AKDT -2014-11-02T10:00:00,-09:00,AKST -2015-03-08T11:00:00,-08:00,AKDT -2015-11-01T10:00:00,-09:00,AKST -2016-03-13T11:00:00,-08:00,AKDT -2016-11-06T10:00:00,-09:00,AKST -2017-03-12T11:00:00,-08:00,AKDT -2017-11-05T10:00:00,-09:00,AKST -2018-03-11T11:00:00,-08:00,AKDT -2018-11-04T10:00:00,-09:00,AKST -2019-03-10T11:00:00,-08:00,AKDT -2019-11-03T10:00:00,-09:00,AKST -2020-03-08T11:00:00,-08:00,AKDT -2020-11-01T10:00:00,-09:00,AKST -2021-03-14T11:00:00,-08:00,AKDT -2021-11-07T10:00:00,-09:00,AKST -2022-03-13T11:00:00,-08:00,AKDT -2022-11-06T10:00:00,-09:00,AKST -2023-03-12T11:00:00,-08:00,AKDT -2023-11-05T10:00:00,-09:00,AKST -2024-03-10T11:00:00,-08:00,AKDT -2024-11-03T10:00:00,-09:00,AKST -2025-03-09T11:00:00,-08:00,AKDT -2025-11-02T10:00:00,-09:00,AKST -2026-03-08T11:00:00,-08:00,AKDT -2026-11-01T10:00:00,-09:00,AKST -2027-03-14T11:00:00,-08:00,AKDT -2027-11-07T10:00:00,-09:00,AKST -2028-03-12T11:00:00,-08:00,AKDT -2028-11-05T10:00:00,-09:00,AKST -2029-03-11T11:00:00,-08:00,AKDT -2029-11-04T10:00:00,-09:00,AKST -2030-03-10T11:00:00,-08:00,AKDT -2030-11-03T10:00:00,-09:00,AKST -2031-03-09T11:00:00,-08:00,AKDT -2031-11-02T10:00:00,-09:00,AKST -2032-03-14T11:00:00,-08:00,AKDT -2032-11-07T10:00:00,-09:00,AKST -2033-03-13T11:00:00,-08:00,AKDT -2033-11-06T10:00:00,-09:00,AKST -2034-03-12T11:00:00,-08:00,AKDT -2034-11-05T10:00:00,-09:00,AKST -2035-03-11T11:00:00,-08:00,AKDT -2035-11-04T10:00:00,-09:00,AKST -2036-03-09T11:00:00,-08:00,AKDT -2036-11-02T10:00:00,-09:00,AKST -2037-03-08T11:00:00,-08:00,AKDT -2037-11-01T10:00:00,-09:00,AKST -''' diff --git a/desk/lib/pytz/america-noronha.hoon b/desk/lib/pytz/america-noronha.hoon deleted file mode 100644 index e72eedf..0000000 --- a/desk/lib/pytz/america-noronha.hoon +++ /dev/null @@ -1,43 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T02:09:40,-02:00,-02 -1931-10-03T13:00:00,-01:00,-01 -1932-04-01T01:00:00,-02:00,-02 -1932-10-03T02:00:00,-01:00,-01 -1933-04-01T01:00:00,-02:00,-02 -1949-12-01T02:00:00,-01:00,-01 -1950-04-16T02:00:00,-02:00,-02 -1950-12-01T02:00:00,-01:00,-01 -1951-04-01T01:00:00,-02:00,-02 -1951-12-01T02:00:00,-01:00,-01 -1952-04-01T01:00:00,-02:00,-02 -1952-12-01T02:00:00,-01:00,-01 -1953-03-01T01:00:00,-02:00,-02 -1963-12-09T02:00:00,-01:00,-01 -1964-03-01T01:00:00,-02:00,-02 -1965-01-31T02:00:00,-01:00,-01 -1965-03-31T01:00:00,-02:00,-02 -1965-12-01T02:00:00,-01:00,-01 -1966-03-01T01:00:00,-02:00,-02 -1966-11-01T02:00:00,-01:00,-01 -1967-03-01T01:00:00,-02:00,-02 -1967-11-01T02:00:00,-01:00,-01 -1968-03-01T01:00:00,-02:00,-02 -1985-11-02T02:00:00,-01:00,-01 -1986-03-15T01:00:00,-02:00,-02 -1986-10-25T02:00:00,-01:00,-01 -1987-02-14T01:00:00,-02:00,-02 -1987-10-25T02:00:00,-01:00,-01 -1988-02-07T01:00:00,-02:00,-02 -1988-10-16T02:00:00,-01:00,-01 -1989-01-29T01:00:00,-02:00,-02 -1989-10-15T02:00:00,-01:00,-01 -1990-02-11T01:00:00,-02:00,-02 -1999-10-03T02:00:00,-01:00,-01 -2000-02-27T01:00:00,-02:00,-02 -2000-10-08T02:00:00,-01:00,-01 -2000-10-15T01:00:00,-02:00,-02 -2001-10-14T02:00:00,-01:00,-01 -2002-02-17T01:00:00,-02:00,-02 -''' diff --git a/desk/lib/pytz/america-north-dakota-beulah.hoon b/desk/lib/pytz/america-north-dakota-beulah.hoon deleted file mode 100644 index c0ad12c..0000000 --- a/desk/lib/pytz/america-north-dakota-beulah.hoon +++ /dev/null @@ -1,154 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-07:00,MST -1918-03-31T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1919-03-30T09:00:00,-06:00,MDT -1919-10-26T08:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1967-04-30T09:00:00,-06:00,MDT -1967-10-29T08:00:00,-07:00,MST -1968-04-28T09:00:00,-06:00,MDT -1968-10-27T08:00:00,-07:00,MST -1969-04-27T09:00:00,-06:00,MDT -1969-10-26T08:00:00,-07:00,MST -1970-04-26T09:00:00,-06:00,MDT -1970-10-25T08:00:00,-07:00,MST -1971-04-25T09:00:00,-06:00,MDT -1971-10-31T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,MDT -1972-10-29T08:00:00,-07:00,MST -1973-04-29T09:00:00,-06:00,MDT -1973-10-28T08:00:00,-07:00,MST -1974-01-06T09:00:00,-06:00,MDT -1974-10-27T08:00:00,-07:00,MST -1975-02-23T09:00:00,-06:00,MDT -1975-10-26T08:00:00,-07:00,MST -1976-04-25T09:00:00,-06:00,MDT -1976-10-31T08:00:00,-07:00,MST -1977-04-24T09:00:00,-06:00,MDT -1977-10-30T08:00:00,-07:00,MST -1978-04-30T09:00:00,-06:00,MDT -1978-10-29T08:00:00,-07:00,MST -1979-04-29T09:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-07:00,MST -1993-04-04T09:00:00,-06:00,MDT -1993-10-31T08:00:00,-07:00,MST -1994-04-03T09:00:00,-06:00,MDT -1994-10-30T08:00:00,-07:00,MST -1995-04-02T09:00:00,-06:00,MDT -1995-10-29T08:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-04-01T09:00:00,-06:00,MDT -2001-10-28T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-03-11T09:00:00,-06:00,MDT -2007-11-04T08:00:00,-07:00,MST -2008-03-09T09:00:00,-06:00,MDT -2008-11-02T08:00:00,-07:00,MST -2009-03-08T09:00:00,-06:00,MDT -2009-11-01T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-north-dakota-center.hoon b/desk/lib/pytz/america-north-dakota-center.hoon deleted file mode 100644 index edd6fde..0000000 --- a/desk/lib/pytz/america-north-dakota-center.hoon +++ /dev/null @@ -1,154 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-07:00,MST -1918-03-31T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1919-03-30T09:00:00,-06:00,MDT -1919-10-26T08:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1967-04-30T09:00:00,-06:00,MDT -1967-10-29T08:00:00,-07:00,MST -1968-04-28T09:00:00,-06:00,MDT -1968-10-27T08:00:00,-07:00,MST -1969-04-27T09:00:00,-06:00,MDT -1969-10-26T08:00:00,-07:00,MST -1970-04-26T09:00:00,-06:00,MDT -1970-10-25T08:00:00,-07:00,MST -1971-04-25T09:00:00,-06:00,MDT -1971-10-31T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,MDT -1972-10-29T08:00:00,-07:00,MST -1973-04-29T09:00:00,-06:00,MDT -1973-10-28T08:00:00,-07:00,MST -1974-01-06T09:00:00,-06:00,MDT -1974-10-27T08:00:00,-07:00,MST -1975-02-23T09:00:00,-06:00,MDT -1975-10-26T08:00:00,-07:00,MST -1976-04-25T09:00:00,-06:00,MDT -1976-10-31T08:00:00,-07:00,MST -1977-04-24T09:00:00,-06:00,MDT -1977-10-30T08:00:00,-07:00,MST -1978-04-30T09:00:00,-06:00,MDT -1978-10-29T08:00:00,-07:00,MST -1979-04-29T09:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-06:00,CST -1993-04-04T08:00:00,-05:00,CDT -1993-10-31T07:00:00,-06:00,CST -1994-04-03T08:00:00,-05:00,CDT -1994-10-30T07:00:00,-06:00,CST -1995-04-02T08:00:00,-05:00,CDT -1995-10-29T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-06:00,CST -2001-04-01T08:00:00,-05:00,CDT -2001-10-28T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-north-dakota-new-salem.hoon b/desk/lib/pytz/america-north-dakota-new-salem.hoon deleted file mode 100644 index 7b9ed33..0000000 --- a/desk/lib/pytz/america-north-dakota-new-salem.hoon +++ /dev/null @@ -1,154 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-07:00,MST -1918-03-31T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1919-03-30T09:00:00,-06:00,MDT -1919-10-26T08:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1967-04-30T09:00:00,-06:00,MDT -1967-10-29T08:00:00,-07:00,MST -1968-04-28T09:00:00,-06:00,MDT -1968-10-27T08:00:00,-07:00,MST -1969-04-27T09:00:00,-06:00,MDT -1969-10-26T08:00:00,-07:00,MST -1970-04-26T09:00:00,-06:00,MDT -1970-10-25T08:00:00,-07:00,MST -1971-04-25T09:00:00,-06:00,MDT -1971-10-31T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,MDT -1972-10-29T08:00:00,-07:00,MST -1973-04-29T09:00:00,-06:00,MDT -1973-10-28T08:00:00,-07:00,MST -1974-01-06T09:00:00,-06:00,MDT -1974-10-27T08:00:00,-07:00,MST -1975-02-23T09:00:00,-06:00,MDT -1975-10-26T08:00:00,-07:00,MST -1976-04-25T09:00:00,-06:00,MDT -1976-10-31T08:00:00,-07:00,MST -1977-04-24T09:00:00,-06:00,MDT -1977-10-30T08:00:00,-07:00,MST -1978-04-30T09:00:00,-06:00,MDT -1978-10-29T08:00:00,-07:00,MST -1979-04-29T09:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-07:00,MST -1993-04-04T09:00:00,-06:00,MDT -1993-10-31T08:00:00,-07:00,MST -1994-04-03T09:00:00,-06:00,MDT -1994-10-30T08:00:00,-07:00,MST -1995-04-02T09:00:00,-06:00,MDT -1995-10-29T08:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-04-01T09:00:00,-06:00,MDT -2001-10-28T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-nuuk.hoon b/desk/lib/pytz/america-nuuk.hoon deleted file mode 100644 index fc02045..0000000 --- a/desk/lib/pytz/america-nuuk.hoon +++ /dev/null @@ -1,120 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1916-07-28T03:26:56,-03:00,-03 -1980-04-06T05:00:00,-02:00,-02 -1980-09-28T01:00:00,-03:00,-03 -1981-03-29T01:00:00,-02:00,-02 -1981-09-27T01:00:00,-03:00,-03 -1982-03-28T01:00:00,-02:00,-02 -1982-09-26T01:00:00,-03:00,-03 -1983-03-27T01:00:00,-02:00,-02 -1983-09-25T01:00:00,-03:00,-03 -1984-03-25T01:00:00,-02:00,-02 -1984-09-30T01:00:00,-03:00,-03 -1985-03-31T01:00:00,-02:00,-02 -1985-09-29T01:00:00,-03:00,-03 -1986-03-30T01:00:00,-02:00,-02 -1986-09-28T01:00:00,-03:00,-03 -1987-03-29T01:00:00,-02:00,-02 -1987-09-27T01:00:00,-03:00,-03 -1988-03-27T01:00:00,-02:00,-02 -1988-09-25T01:00:00,-03:00,-03 -1989-03-26T01:00:00,-02:00,-02 -1989-09-24T01:00:00,-03:00,-03 -1990-03-25T01:00:00,-02:00,-02 -1990-09-30T01:00:00,-03:00,-03 -1991-03-31T01:00:00,-02:00,-02 -1991-09-29T01:00:00,-03:00,-03 -1992-03-29T01:00:00,-02:00,-02 -1992-09-27T01:00:00,-03:00,-03 -1993-03-28T01:00:00,-02:00,-02 -1993-09-26T01:00:00,-03:00,-03 -1994-03-27T01:00:00,-02:00,-02 -1994-09-25T01:00:00,-03:00,-03 -1995-03-26T01:00:00,-02:00,-02 -1995-09-24T01:00:00,-03:00,-03 -1996-03-31T01:00:00,-02:00,-02 -1996-10-27T01:00:00,-03:00,-03 -1997-03-30T01:00:00,-02:00,-02 -1997-10-26T01:00:00,-03:00,-03 -1998-03-29T01:00:00,-02:00,-02 -1998-10-25T01:00:00,-03:00,-03 -1999-03-28T01:00:00,-02:00,-02 -1999-10-31T01:00:00,-03:00,-03 -2000-03-26T01:00:00,-02:00,-02 -2000-10-29T01:00:00,-03:00,-03 -2001-03-25T01:00:00,-02:00,-02 -2001-10-28T01:00:00,-03:00,-03 -2002-03-31T01:00:00,-02:00,-02 -2002-10-27T01:00:00,-03:00,-03 -2003-03-30T01:00:00,-02:00,-02 -2003-10-26T01:00:00,-03:00,-03 -2004-03-28T01:00:00,-02:00,-02 -2004-10-31T01:00:00,-03:00,-03 -2005-03-27T01:00:00,-02:00,-02 -2005-10-30T01:00:00,-03:00,-03 -2006-03-26T01:00:00,-02:00,-02 -2006-10-29T01:00:00,-03:00,-03 -2007-03-25T01:00:00,-02:00,-02 -2007-10-28T01:00:00,-03:00,-03 -2008-03-30T01:00:00,-02:00,-02 -2008-10-26T01:00:00,-03:00,-03 -2009-03-29T01:00:00,-02:00,-02 -2009-10-25T01:00:00,-03:00,-03 -2010-03-28T01:00:00,-02:00,-02 -2010-10-31T01:00:00,-03:00,-03 -2011-03-27T01:00:00,-02:00,-02 -2011-10-30T01:00:00,-03:00,-03 -2012-03-25T01:00:00,-02:00,-02 -2012-10-28T01:00:00,-03:00,-03 -2013-03-31T01:00:00,-02:00,-02 -2013-10-27T01:00:00,-03:00,-03 -2014-03-30T01:00:00,-02:00,-02 -2014-10-26T01:00:00,-03:00,-03 -2015-03-29T01:00:00,-02:00,-02 -2015-10-25T01:00:00,-03:00,-03 -2016-03-27T01:00:00,-02:00,-02 -2016-10-30T01:00:00,-03:00,-03 -2017-03-26T01:00:00,-02:00,-02 -2017-10-29T01:00:00,-03:00,-03 -2018-03-25T01:00:00,-02:00,-02 -2018-10-28T01:00:00,-03:00,-03 -2019-03-31T01:00:00,-02:00,-02 -2019-10-27T01:00:00,-03:00,-03 -2020-03-29T01:00:00,-02:00,-02 -2020-10-25T01:00:00,-03:00,-03 -2021-03-28T01:00:00,-02:00,-02 -2021-10-31T01:00:00,-03:00,-03 -2022-03-27T01:00:00,-02:00,-02 -2022-10-30T01:00:00,-03:00,-03 -2023-03-26T01:00:00,-02:00,-02 -2024-03-31T01:00:00,-01:00,-01 -2024-10-27T01:00:00,-02:00,-02 -2025-03-30T01:00:00,-01:00,-01 -2025-10-26T01:00:00,-02:00,-02 -2026-03-29T01:00:00,-01:00,-01 -2026-10-25T01:00:00,-02:00,-02 -2027-03-28T01:00:00,-01:00,-01 -2027-10-31T01:00:00,-02:00,-02 -2028-03-26T01:00:00,-01:00,-01 -2028-10-29T01:00:00,-02:00,-02 -2029-03-25T01:00:00,-01:00,-01 -2029-10-28T01:00:00,-02:00,-02 -2030-03-31T01:00:00,-01:00,-01 -2030-10-27T01:00:00,-02:00,-02 -2031-03-30T01:00:00,-01:00,-01 -2031-10-26T01:00:00,-02:00,-02 -2032-03-28T01:00:00,-01:00,-01 -2032-10-31T01:00:00,-02:00,-02 -2033-03-27T01:00:00,-01:00,-01 -2033-10-30T01:00:00,-02:00,-02 -2034-03-26T01:00:00,-01:00,-01 -2034-10-29T01:00:00,-02:00,-02 -2035-03-25T01:00:00,-01:00,-01 -2035-10-28T01:00:00,-02:00,-02 -2036-03-30T01:00:00,-01:00,-01 -2036-10-26T01:00:00,-02:00,-02 -2037-03-29T01:00:00,-01:00,-01 -2037-10-25T01:00:00,-02:00,-02 -''' diff --git a/desk/lib/pytz/america-ojinaga.hoon b/desk/lib/pytz/america-ojinaga.hoon deleted file mode 100644 index d0f365f..0000000 --- a/desk/lib/pytz/america-ojinaga.hoon +++ /dev/null @@ -1,94 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1927-06-10T07:00:00,-06:00,CST -1930-11-15T06:00:00,-07:00,MST -1931-04-30T07:00:00,-06:00,MDT -1931-10-01T06:00:00,-07:00,MST -1932-04-01T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-05-06T09:00:00,-06:00,MDT -2001-09-30T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-04-01T09:00:00,-06:00,MDT -2007-10-28T08:00:00,-07:00,MST -2008-04-06T09:00:00,-06:00,MDT -2008-10-26T08:00:00,-07:00,MST -2009-04-05T09:00:00,-06:00,MDT -2009-10-25T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-07:00,MST -2011-03-13T09:00:00,-06:00,MDT -2011-11-06T08:00:00,-07:00,MST -2012-03-11T09:00:00,-06:00,MDT -2012-11-04T08:00:00,-07:00,MST -2013-03-10T09:00:00,-06:00,MDT -2013-11-03T08:00:00,-07:00,MST -2014-03-09T09:00:00,-06:00,MDT -2014-11-02T08:00:00,-07:00,MST -2015-03-08T09:00:00,-06:00,MDT -2015-11-01T08:00:00,-07:00,MST -2016-03-13T09:00:00,-06:00,MDT -2016-11-06T08:00:00,-07:00,MST -2017-03-12T09:00:00,-06:00,MDT -2017-11-05T08:00:00,-07:00,MST -2018-03-11T09:00:00,-06:00,MDT -2018-11-04T08:00:00,-07:00,MST -2019-03-10T09:00:00,-06:00,MDT -2019-11-03T08:00:00,-07:00,MST -2020-03-08T09:00:00,-06:00,MDT -2020-11-01T08:00:00,-07:00,MST -2021-03-14T09:00:00,-06:00,MDT -2021-11-07T08:00:00,-07:00,MST -2022-03-13T09:00:00,-06:00,MDT -2022-10-30T08:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-panama.hoon b/desk/lib/pytz/america-panama.hoon deleted file mode 100644 index e025749..0000000 --- a/desk/lib/pytz/america-panama.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:40,CMT -1908-04-22T05:19:36,-05:00,EST -''' diff --git a/desk/lib/pytz/america-pangnirtung.hoon b/desk/lib/pytz/america-pangnirtung.hoon deleted file mode 100644 index 2fe440b..0000000 --- a/desk/lib/pytz/america-pangnirtung.hoon +++ /dev/null @@ -1,140 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1942-08-01T00:00:00,-04:00,EWT -1945-08-14T23:00:00,-04:00,EPT -1945-09-30T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-04-28T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-04-27T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-paramaribo.hoon b/desk/lib/pytz/america-paramaribo.hoon deleted file mode 100644 index 1bed65b..0000000 --- a/desk/lib/pytz/america-paramaribo.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-01-01T03:40:40,-04:19,PMT -1935-01-01T03:40:52,-04:19,PMT -1945-10-01T03:40:36,-04:30,-0330 -1984-10-01T03:30:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-phoenix.hoon b/desk/lib/pytz/america-phoenix.hoon deleted file mode 100644 index ce358aa..0000000 --- a/desk/lib/pytz/america-phoenix.hoon +++ /dev/null @@ -1,15 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-07:00,MST -1918-03-31T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1919-03-30T09:00:00,-06:00,MDT -1919-10-26T08:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1944-01-01T06:01:00,-07:00,MST -1944-04-01T07:01:00,-06:00,MWT -1944-10-01T06:01:00,-07:00,MST -1967-04-30T09:00:00,-06:00,MDT -1967-10-29T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-port-au-prince.hoon b/desk/lib/pytz/america-port-au-prince.hoon deleted file mode 100644 index 8313ac9..0000000 --- a/desk/lib/pytz/america-port-au-prince.hoon +++ /dev/null @@ -1,90 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:11,PPMT -1917-01-24T16:49:00,-05:00,EST -1983-05-08T05:00:00,-04:00,EDT -1983-10-30T04:00:00,-05:00,EST -1984-04-29T05:00:00,-04:00,EDT -1984-10-28T04:00:00,-05:00,EST -1985-04-28T05:00:00,-04:00,EDT -1985-10-27T04:00:00,-05:00,EST -1986-04-27T05:00:00,-04:00,EDT -1986-10-26T04:00:00,-05:00,EST -1987-04-26T05:00:00,-04:00,EDT -1987-10-25T04:00:00,-05:00,EST -1988-04-03T06:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T06:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T06:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T06:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T06:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T06:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T06:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T06:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T06:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T06:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -2005-04-03T05:00:00,-04:00,EDT -2005-10-30T04:00:00,-05:00,EST -2006-04-02T05:00:00,-04:00,EDT -2006-10-29T04:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-port-of-spain.hoon b/desk/lib/pytz/america-port-of-spain.hoon deleted file mode 100644 index d66fe17..0000000 --- a/desk/lib/pytz/america-port-of-spain.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-03-02T04:06:04,-04:00,AST -''' diff --git a/desk/lib/pytz/america-porto-acre.hoon b/desk/lib/pytz/america-porto-acre.hoon deleted file mode 100644 index ebeb80e..0000000 --- a/desk/lib/pytz/america-porto-acre.hoon +++ /dev/null @@ -1,35 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T04:31:12,-05:00,-05 -1931-10-03T16:00:00,-04:00,-04 -1932-04-01T04:00:00,-05:00,-05 -1932-10-03T05:00:00,-04:00,-04 -1933-04-01T04:00:00,-05:00,-05 -1949-12-01T05:00:00,-04:00,-04 -1950-04-16T05:00:00,-05:00,-05 -1950-12-01T05:00:00,-04:00,-04 -1951-04-01T04:00:00,-05:00,-05 -1951-12-01T05:00:00,-04:00,-04 -1952-04-01T04:00:00,-05:00,-05 -1952-12-01T05:00:00,-04:00,-04 -1953-03-01T04:00:00,-05:00,-05 -1963-12-09T05:00:00,-04:00,-04 -1964-03-01T04:00:00,-05:00,-05 -1965-01-31T05:00:00,-04:00,-04 -1965-03-31T04:00:00,-05:00,-05 -1965-12-01T05:00:00,-04:00,-04 -1966-03-01T04:00:00,-05:00,-05 -1966-11-01T05:00:00,-04:00,-04 -1967-03-01T04:00:00,-05:00,-05 -1967-11-01T05:00:00,-04:00,-04 -1968-03-01T04:00:00,-05:00,-05 -1985-11-02T05:00:00,-04:00,-04 -1986-03-15T04:00:00,-05:00,-05 -1986-10-25T05:00:00,-04:00,-04 -1987-02-14T04:00:00,-05:00,-05 -1987-10-25T05:00:00,-04:00,-04 -1988-02-07T04:00:00,-05:00,-05 -2008-06-24T05:00:00,-04:00,-04 -2013-11-10T04:00:00,-05:00,-05 -''' diff --git a/desk/lib/pytz/america-porto-velho.hoon b/desk/lib/pytz/america-porto-velho.hoon deleted file mode 100644 index 92f03dd..0000000 --- a/desk/lib/pytz/america-porto-velho.hoon +++ /dev/null @@ -1,33 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T04:15:36,-04:00,-04 -1931-10-03T15:00:00,-03:00,-03 -1932-04-01T03:00:00,-04:00,-04 -1932-10-03T04:00:00,-03:00,-03 -1933-04-01T03:00:00,-04:00,-04 -1949-12-01T04:00:00,-03:00,-03 -1950-04-16T04:00:00,-04:00,-04 -1950-12-01T04:00:00,-03:00,-03 -1951-04-01T03:00:00,-04:00,-04 -1951-12-01T04:00:00,-03:00,-03 -1952-04-01T03:00:00,-04:00,-04 -1952-12-01T04:00:00,-03:00,-03 -1953-03-01T03:00:00,-04:00,-04 -1963-12-09T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1965-01-31T04:00:00,-03:00,-03 -1965-03-31T03:00:00,-04:00,-04 -1965-12-01T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-11-01T04:00:00,-03:00,-03 -1967-03-01T03:00:00,-04:00,-04 -1967-11-01T04:00:00,-03:00,-03 -1968-03-01T03:00:00,-04:00,-04 -1985-11-02T04:00:00,-03:00,-03 -1986-03-15T03:00:00,-04:00,-04 -1986-10-25T04:00:00,-03:00,-03 -1987-02-14T03:00:00,-04:00,-04 -1987-10-25T04:00:00,-03:00,-03 -1988-02-07T03:00:00,-04:00,-04 -''' diff --git a/desk/lib/pytz/america-puerto-rico.hoon b/desk/lib/pytz/america-puerto-rico.hoon deleted file mode 100644 index c935668..0000000 --- a/desk/lib/pytz/america-puerto-rico.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-04:00,AST -1942-05-03T04:00:00,-03:00,AWT -1945-08-14T23:00:00,-03:00,APT -1945-09-30T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-punta-arenas.hoon b/desk/lib/pytz/america-punta-arenas.hoon deleted file mode 100644 index 033cb42..0000000 --- a/desk/lib/pytz/america-punta-arenas.hoon +++ /dev/null @@ -1,121 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:17,SMT -1910-01-10T04:42:45,-05:00,-05 -1916-07-01T05:00:00,-05:17,SMT -1918-09-10T04:42:45,-04:00,-04 -1919-07-01T04:00:00,-05:17,SMT -1927-09-01T04:42:45,-04:00,-04 -1928-04-01T04:00:00,-05:00,-05 -1928-09-01T05:00:00,-04:00,-04 -1929-04-01T04:00:00,-05:00,-05 -1929-09-01T05:00:00,-04:00,-04 -1930-04-01T04:00:00,-05:00,-05 -1930-09-01T05:00:00,-04:00,-04 -1931-04-01T04:00:00,-05:00,-05 -1931-09-01T05:00:00,-04:00,-04 -1932-04-01T04:00:00,-05:00,-05 -1932-09-01T05:00:00,-04:00,-04 -1942-06-01T04:00:00,-05:00,-05 -1942-08-01T05:00:00,-04:00,-04 -1946-08-29T04:00:00,-04:00,-04 -1947-04-01T04:00:00,-05:00,-05 -1947-05-22T04:00:00,-04:00,-04 -1968-11-03T04:00:00,-03:00,-03 -1969-03-30T03:00:00,-04:00,-04 -1969-11-23T04:00:00,-03:00,-03 -1970-03-29T03:00:00,-04:00,-04 -1970-10-11T04:00:00,-03:00,-03 -1971-03-14T03:00:00,-04:00,-04 -1971-10-10T04:00:00,-03:00,-03 -1972-03-12T03:00:00,-04:00,-04 -1972-10-15T04:00:00,-03:00,-03 -1973-03-11T03:00:00,-04:00,-04 -1973-09-30T04:00:00,-03:00,-03 -1974-03-10T03:00:00,-04:00,-04 -1974-10-13T04:00:00,-03:00,-03 -1975-03-09T03:00:00,-04:00,-04 -1975-10-12T04:00:00,-03:00,-03 -1976-03-14T03:00:00,-04:00,-04 -1976-10-10T04:00:00,-03:00,-03 -1977-03-13T03:00:00,-04:00,-04 -1977-10-09T04:00:00,-03:00,-03 -1978-03-12T03:00:00,-04:00,-04 -1978-10-15T04:00:00,-03:00,-03 -1979-03-11T03:00:00,-04:00,-04 -1979-10-14T04:00:00,-03:00,-03 -1980-03-09T03:00:00,-04:00,-04 -1980-10-12T04:00:00,-03:00,-03 -1981-03-15T03:00:00,-04:00,-04 -1981-10-11T04:00:00,-03:00,-03 -1982-03-14T03:00:00,-04:00,-04 -1982-10-10T04:00:00,-03:00,-03 -1983-03-13T03:00:00,-04:00,-04 -1983-10-09T04:00:00,-03:00,-03 -1984-03-11T03:00:00,-04:00,-04 -1984-10-14T04:00:00,-03:00,-03 -1985-03-10T03:00:00,-04:00,-04 -1985-10-13T04:00:00,-03:00,-03 -1986-03-09T03:00:00,-04:00,-04 -1986-10-12T04:00:00,-03:00,-03 -1987-04-12T03:00:00,-04:00,-04 -1987-10-11T04:00:00,-03:00,-03 -1988-03-13T03:00:00,-04:00,-04 -1988-10-09T04:00:00,-03:00,-03 -1989-03-12T03:00:00,-04:00,-04 -1989-10-15T04:00:00,-03:00,-03 -1990-03-11T03:00:00,-04:00,-04 -1990-09-16T04:00:00,-03:00,-03 -1991-03-10T03:00:00,-04:00,-04 -1991-10-13T04:00:00,-03:00,-03 -1992-03-15T03:00:00,-04:00,-04 -1992-10-11T04:00:00,-03:00,-03 -1993-03-14T03:00:00,-04:00,-04 -1993-10-10T04:00:00,-03:00,-03 -1994-03-13T03:00:00,-04:00,-04 -1994-10-09T04:00:00,-03:00,-03 -1995-03-12T03:00:00,-04:00,-04 -1995-10-15T04:00:00,-03:00,-03 -1996-03-10T03:00:00,-04:00,-04 -1996-10-13T04:00:00,-03:00,-03 -1997-03-30T03:00:00,-04:00,-04 -1997-10-12T04:00:00,-03:00,-03 -1998-03-15T03:00:00,-04:00,-04 -1998-09-27T04:00:00,-03:00,-03 -1999-04-04T03:00:00,-04:00,-04 -1999-10-10T04:00:00,-03:00,-03 -2000-03-12T03:00:00,-04:00,-04 -2000-10-15T04:00:00,-03:00,-03 -2001-03-11T03:00:00,-04:00,-04 -2001-10-14T04:00:00,-03:00,-03 -2002-03-10T03:00:00,-04:00,-04 -2002-10-13T04:00:00,-03:00,-03 -2003-03-09T03:00:00,-04:00,-04 -2003-10-12T04:00:00,-03:00,-03 -2004-03-14T03:00:00,-04:00,-04 -2004-10-10T04:00:00,-03:00,-03 -2005-03-13T03:00:00,-04:00,-04 -2005-10-09T04:00:00,-03:00,-03 -2006-03-12T03:00:00,-04:00,-04 -2006-10-15T04:00:00,-03:00,-03 -2007-03-11T03:00:00,-04:00,-04 -2007-10-14T04:00:00,-03:00,-03 -2008-03-30T03:00:00,-04:00,-04 -2008-10-12T04:00:00,-03:00,-03 -2009-03-15T03:00:00,-04:00,-04 -2009-10-11T04:00:00,-03:00,-03 -2010-04-04T03:00:00,-04:00,-04 -2010-10-10T04:00:00,-03:00,-03 -2011-05-08T03:00:00,-04:00,-04 -2011-08-21T04:00:00,-03:00,-03 -2012-04-29T03:00:00,-04:00,-04 -2012-09-02T04:00:00,-03:00,-03 -2013-04-28T03:00:00,-04:00,-04 -2013-09-08T04:00:00,-03:00,-03 -2014-04-27T03:00:00,-04:00,-04 -2014-09-07T04:00:00,-03:00,-03 -2016-05-15T03:00:00,-04:00,-04 -2016-08-14T04:00:00,-03:00,-03 -2016-12-04T03:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-rainy-river.hoon b/desk/lib/pytz/america-rainy-river.hoon deleted file mode 100644 index 6a86193..0000000 --- a/desk/lib/pytz/america-rainy-river.hoon +++ /dev/null @@ -1,190 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1916-04-23T06:00:00,-05:00,CDT -1916-09-17T05:00:00,-06:00,CST -1918-04-14T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1937-05-16T08:00:00,-05:00,CDT -1937-09-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1946-05-12T08:00:00,-05:00,CDT -1946-10-13T07:00:00,-06:00,CST -1947-04-27T08:00:00,-05:00,CDT -1947-09-28T07:00:00,-06:00,CST -1948-04-25T08:00:00,-05:00,CDT -1948-09-26T07:00:00,-06:00,CST -1949-04-24T08:00:00,-05:00,CDT -1949-09-25T07:00:00,-06:00,CST -1950-05-01T08:00:00,-05:00,CDT -1950-09-30T07:00:00,-06:00,CST -1951-04-29T08:00:00,-05:00,CDT -1951-09-30T07:00:00,-06:00,CST -1952-04-27T08:00:00,-05:00,CDT -1952-09-28T07:00:00,-06:00,CST -1953-04-26T08:00:00,-05:00,CDT -1953-09-27T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,CDT -1954-09-26T07:00:00,-06:00,CST -1955-04-24T08:00:00,-05:00,CDT -1955-09-25T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-09-30T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-09-29T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-09-28T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-10-25T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-09-25T07:00:00,-06:00,CST -1963-04-28T08:00:00,-05:00,CDT -1963-09-22T07:00:00,-06:00,CST -1966-04-24T08:00:00,-05:00,CDT -1966-10-30T08:00:00,-06:00,CST -1967-04-30T08:00:00,-05:00,CDT -1967-10-29T08:00:00,-06:00,CST -1968-04-28T08:00:00,-05:00,CDT -1968-10-27T08:00:00,-06:00,CST -1969-04-27T08:00:00,-05:00,CDT -1969-10-26T08:00:00,-06:00,CST -1970-04-26T08:00:00,-05:00,CDT -1970-10-25T08:00:00,-06:00,CST -1971-04-25T08:00:00,-05:00,CDT -1971-10-31T08:00:00,-06:00,CST -1972-04-30T08:00:00,-05:00,CDT -1972-10-29T08:00:00,-06:00,CST -1973-04-29T08:00:00,-05:00,CDT -1973-10-28T08:00:00,-06:00,CST -1974-04-28T08:00:00,-05:00,CDT -1974-10-27T08:00:00,-06:00,CST -1975-04-27T08:00:00,-05:00,CDT -1975-10-26T08:00:00,-06:00,CST -1976-04-25T08:00:00,-05:00,CDT -1976-10-31T08:00:00,-06:00,CST -1977-04-24T08:00:00,-05:00,CDT -1977-10-30T08:00:00,-06:00,CST -1978-04-30T08:00:00,-05:00,CDT -1978-10-29T08:00:00,-06:00,CST -1979-04-29T08:00:00,-05:00,CDT -1979-10-28T08:00:00,-06:00,CST -1980-04-27T08:00:00,-05:00,CDT -1980-10-26T08:00:00,-06:00,CST -1981-04-26T08:00:00,-05:00,CDT -1981-10-25T08:00:00,-06:00,CST -1982-04-25T08:00:00,-05:00,CDT -1982-10-31T08:00:00,-06:00,CST -1983-04-24T08:00:00,-05:00,CDT -1983-10-30T08:00:00,-06:00,CST -1984-04-29T08:00:00,-05:00,CDT -1984-10-28T08:00:00,-06:00,CST -1985-04-28T08:00:00,-05:00,CDT -1985-10-27T08:00:00,-06:00,CST -1986-04-27T08:00:00,-05:00,CDT -1986-10-26T08:00:00,-06:00,CST -1987-04-05T08:00:00,-05:00,CDT -1987-10-25T08:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T08:00:00,-06:00,CST -1989-04-02T08:00:00,-05:00,CDT -1989-10-29T08:00:00,-06:00,CST -1990-04-01T08:00:00,-05:00,CDT -1990-10-28T08:00:00,-06:00,CST -1991-04-07T08:00:00,-05:00,CDT -1991-10-27T08:00:00,-06:00,CST -1992-04-05T08:00:00,-05:00,CDT -1992-10-25T08:00:00,-06:00,CST -1993-04-04T08:00:00,-05:00,CDT -1993-10-31T08:00:00,-06:00,CST -1994-04-03T08:00:00,-05:00,CDT -1994-10-30T08:00:00,-06:00,CST -1995-04-02T08:00:00,-05:00,CDT -1995-10-29T08:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T08:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T08:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T08:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T08:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T08:00:00,-06:00,CST -2001-04-01T08:00:00,-05:00,CDT -2001-10-28T08:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T08:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T08:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T08:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T08:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-rankin-inlet.hoon b/desk/lib/pytz/america-rankin-inlet.hoon deleted file mode 100644 index 082d1a4..0000000 --- a/desk/lib/pytz/america-rankin-inlet.hoon +++ /dev/null @@ -1,138 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1957-01-01T00:00:00,-06:00,CST -1972-04-30T08:00:00,-05:00,CDT -1972-10-29T07:00:00,-06:00,CST -1973-04-29T08:00:00,-05:00,CDT -1973-10-28T07:00:00,-06:00,CST -1974-04-28T08:00:00,-05:00,CDT -1974-10-27T07:00:00,-06:00,CST -1975-04-27T08:00:00,-05:00,CDT -1975-10-26T07:00:00,-06:00,CST -1976-04-25T08:00:00,-05:00,CDT -1976-10-31T07:00:00,-06:00,CST -1977-04-24T08:00:00,-05:00,CDT -1977-10-30T07:00:00,-06:00,CST -1978-04-30T08:00:00,-05:00,CDT -1978-10-29T07:00:00,-06:00,CST -1979-04-29T08:00:00,-05:00,CDT -1979-10-28T07:00:00,-06:00,CST -1980-04-27T08:00:00,-05:00,CDT -1980-10-26T07:00:00,-06:00,CST -1981-04-26T08:00:00,-05:00,CDT -1981-10-25T07:00:00,-06:00,CST -1982-04-25T08:00:00,-05:00,CDT -1982-10-31T07:00:00,-06:00,CST -1983-04-24T08:00:00,-05:00,CDT -1983-10-30T07:00:00,-06:00,CST -1984-04-29T08:00:00,-05:00,CDT -1984-10-28T07:00:00,-06:00,CST -1985-04-28T08:00:00,-05:00,CDT -1985-10-27T07:00:00,-06:00,CST -1986-04-27T08:00:00,-05:00,CDT -1986-10-26T07:00:00,-06:00,CST -1987-04-05T08:00:00,-05:00,CDT -1987-10-25T07:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T07:00:00,-06:00,CST -1989-04-02T08:00:00,-05:00,CDT -1989-10-29T07:00:00,-06:00,CST -1990-04-01T08:00:00,-05:00,CDT -1990-10-28T07:00:00,-06:00,CST -1991-04-07T08:00:00,-05:00,CDT -1991-10-27T07:00:00,-06:00,CST -1992-04-05T08:00:00,-05:00,CDT -1992-10-25T07:00:00,-06:00,CST -1993-04-04T08:00:00,-05:00,CDT -1993-10-31T07:00:00,-06:00,CST -1994-04-03T08:00:00,-05:00,CDT -1994-10-30T07:00:00,-06:00,CST -1995-04-02T08:00:00,-05:00,CDT -1995-10-29T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-05:00,EST -2001-04-01T08:00:00,-05:00,CDT -2001-10-28T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-recife.hoon b/desk/lib/pytz/america-recife.hoon deleted file mode 100644 index da0b539..0000000 --- a/desk/lib/pytz/america-recife.hoon +++ /dev/null @@ -1,43 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T02:19:36,-03:00,-03 -1931-10-03T14:00:00,-02:00,-02 -1932-04-01T02:00:00,-03:00,-03 -1932-10-03T03:00:00,-02:00,-02 -1933-04-01T02:00:00,-03:00,-03 -1949-12-01T03:00:00,-02:00,-02 -1950-04-16T03:00:00,-03:00,-03 -1950-12-01T03:00:00,-02:00,-02 -1951-04-01T02:00:00,-03:00,-03 -1951-12-01T03:00:00,-02:00,-02 -1952-04-01T02:00:00,-03:00,-03 -1952-12-01T03:00:00,-02:00,-02 -1953-03-01T02:00:00,-03:00,-03 -1963-12-09T03:00:00,-02:00,-02 -1964-03-01T02:00:00,-03:00,-03 -1965-01-31T03:00:00,-02:00,-02 -1965-03-31T02:00:00,-03:00,-03 -1965-12-01T03:00:00,-02:00,-02 -1966-03-01T02:00:00,-03:00,-03 -1966-11-01T03:00:00,-02:00,-02 -1967-03-01T02:00:00,-03:00,-03 -1967-11-01T03:00:00,-02:00,-02 -1968-03-01T02:00:00,-03:00,-03 -1985-11-02T03:00:00,-02:00,-02 -1986-03-15T02:00:00,-03:00,-03 -1986-10-25T03:00:00,-02:00,-02 -1987-02-14T02:00:00,-03:00,-03 -1987-10-25T03:00:00,-02:00,-02 -1988-02-07T02:00:00,-03:00,-03 -1988-10-16T03:00:00,-02:00,-02 -1989-01-29T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-02-11T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-02:00,-02 -2000-02-27T02:00:00,-03:00,-03 -2000-10-08T03:00:00,-02:00,-02 -2000-10-15T02:00:00,-03:00,-03 -2001-10-14T03:00:00,-02:00,-02 -2002-02-17T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-regina.hoon b/desk/lib/pytz/america-regina.hoon deleted file mode 100644 index 57a12f3..0000000 --- a/desk/lib/pytz/america-regina.hoon +++ /dev/null @@ -1,57 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1905-09-01T06:58:36,-07:00,MST -1918-04-14T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1930-05-04T07:00:00,-06:00,MDT -1930-10-05T06:00:00,-07:00,MST -1931-05-03T07:00:00,-06:00,MDT -1931-10-04T06:00:00,-07:00,MST -1932-05-01T07:00:00,-06:00,MDT -1932-10-02T06:00:00,-07:00,MST -1933-05-07T07:00:00,-06:00,MDT -1933-10-01T06:00:00,-07:00,MST -1934-05-06T07:00:00,-06:00,MDT -1934-10-07T06:00:00,-07:00,MST -1937-04-11T07:00:00,-06:00,MDT -1937-10-10T06:00:00,-07:00,MST -1938-04-10T07:00:00,-06:00,MDT -1938-10-02T06:00:00,-07:00,MST -1939-04-09T07:00:00,-06:00,MDT -1939-10-08T06:00:00,-07:00,MST -1940-04-14T07:00:00,-06:00,MDT -1940-10-13T06:00:00,-07:00,MST -1941-04-13T07:00:00,-06:00,MDT -1941-10-12T06:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1946-04-14T09:00:00,-06:00,MDT -1946-10-13T08:00:00,-07:00,MST -1947-04-27T09:00:00,-06:00,MDT -1947-09-28T08:00:00,-07:00,MST -1948-04-25T09:00:00,-06:00,MDT -1948-09-26T08:00:00,-07:00,MST -1949-04-24T09:00:00,-06:00,MDT -1949-09-25T08:00:00,-07:00,MST -1950-04-30T09:00:00,-06:00,MDT -1950-09-24T08:00:00,-07:00,MST -1951-04-29T09:00:00,-06:00,MDT -1951-09-30T08:00:00,-07:00,MST -1952-04-27T09:00:00,-06:00,MDT -1952-09-28T08:00:00,-07:00,MST -1953-04-26T09:00:00,-06:00,MDT -1953-09-27T08:00:00,-07:00,MST -1954-04-25T09:00:00,-06:00,MDT -1954-09-26T08:00:00,-07:00,MST -1955-04-24T09:00:00,-06:00,MDT -1955-09-25T08:00:00,-07:00,MST -1956-04-29T09:00:00,-06:00,MDT -1956-09-30T08:00:00,-07:00,MST -1957-04-28T09:00:00,-06:00,MDT -1957-09-29T08:00:00,-07:00,MST -1959-04-26T09:00:00,-06:00,MDT -1959-10-25T08:00:00,-07:00,MST -1960-04-24T09:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-resolute.hoon b/desk/lib/pytz/america-resolute.hoon deleted file mode 100644 index 53be3b3..0000000 --- a/desk/lib/pytz/america-resolute.hoon +++ /dev/null @@ -1,138 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1947-08-31T00:00:00,-06:00,CST -1972-04-30T08:00:00,-05:00,CDT -1972-10-29T07:00:00,-06:00,CST -1973-04-29T08:00:00,-05:00,CDT -1973-10-28T07:00:00,-06:00,CST -1974-04-28T08:00:00,-05:00,CDT -1974-10-27T07:00:00,-06:00,CST -1975-04-27T08:00:00,-05:00,CDT -1975-10-26T07:00:00,-06:00,CST -1976-04-25T08:00:00,-05:00,CDT -1976-10-31T07:00:00,-06:00,CST -1977-04-24T08:00:00,-05:00,CDT -1977-10-30T07:00:00,-06:00,CST -1978-04-30T08:00:00,-05:00,CDT -1978-10-29T07:00:00,-06:00,CST -1979-04-29T08:00:00,-05:00,CDT -1979-10-28T07:00:00,-06:00,CST -1980-04-27T08:00:00,-05:00,CDT -1980-10-26T07:00:00,-06:00,CST -1981-04-26T08:00:00,-05:00,CDT -1981-10-25T07:00:00,-06:00,CST -1982-04-25T08:00:00,-05:00,CDT -1982-10-31T07:00:00,-06:00,CST -1983-04-24T08:00:00,-05:00,CDT -1983-10-30T07:00:00,-06:00,CST -1984-04-29T08:00:00,-05:00,CDT -1984-10-28T07:00:00,-06:00,CST -1985-04-28T08:00:00,-05:00,CDT -1985-10-27T07:00:00,-06:00,CST -1986-04-27T08:00:00,-05:00,CDT -1986-10-26T07:00:00,-06:00,CST -1987-04-05T08:00:00,-05:00,CDT -1987-10-25T07:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T07:00:00,-06:00,CST -1989-04-02T08:00:00,-05:00,CDT -1989-10-29T07:00:00,-06:00,CST -1990-04-01T08:00:00,-05:00,CDT -1990-10-28T07:00:00,-06:00,CST -1991-04-07T08:00:00,-05:00,CDT -1991-10-27T07:00:00,-06:00,CST -1992-04-05T08:00:00,-05:00,CDT -1992-10-25T07:00:00,-06:00,CST -1993-04-04T08:00:00,-05:00,CDT -1993-10-31T07:00:00,-06:00,CST -1994-04-03T08:00:00,-05:00,CDT -1994-10-30T07:00:00,-06:00,CST -1995-04-02T08:00:00,-05:00,CDT -1995-10-29T07:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T07:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T07:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T07:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T07:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T07:00:00,-05:00,EST -2001-04-01T08:00:00,-05:00,CDT -2001-10-28T07:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T07:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T07:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T07:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T07:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-05:00,EST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-rio-branco.hoon b/desk/lib/pytz/america-rio-branco.hoon deleted file mode 100644 index ebeb80e..0000000 --- a/desk/lib/pytz/america-rio-branco.hoon +++ /dev/null @@ -1,35 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T04:31:12,-05:00,-05 -1931-10-03T16:00:00,-04:00,-04 -1932-04-01T04:00:00,-05:00,-05 -1932-10-03T05:00:00,-04:00,-04 -1933-04-01T04:00:00,-05:00,-05 -1949-12-01T05:00:00,-04:00,-04 -1950-04-16T05:00:00,-05:00,-05 -1950-12-01T05:00:00,-04:00,-04 -1951-04-01T04:00:00,-05:00,-05 -1951-12-01T05:00:00,-04:00,-04 -1952-04-01T04:00:00,-05:00,-05 -1952-12-01T05:00:00,-04:00,-04 -1953-03-01T04:00:00,-05:00,-05 -1963-12-09T05:00:00,-04:00,-04 -1964-03-01T04:00:00,-05:00,-05 -1965-01-31T05:00:00,-04:00,-04 -1965-03-31T04:00:00,-05:00,-05 -1965-12-01T05:00:00,-04:00,-04 -1966-03-01T04:00:00,-05:00,-05 -1966-11-01T05:00:00,-04:00,-04 -1967-03-01T04:00:00,-05:00,-05 -1967-11-01T05:00:00,-04:00,-04 -1968-03-01T04:00:00,-05:00,-05 -1985-11-02T05:00:00,-04:00,-04 -1986-03-15T04:00:00,-05:00,-05 -1986-10-25T05:00:00,-04:00,-04 -1987-02-14T04:00:00,-05:00,-05 -1987-10-25T05:00:00,-04:00,-04 -1988-02-07T04:00:00,-05:00,-05 -2008-06-24T05:00:00,-04:00,-04 -2013-11-10T04:00:00,-05:00,-05 -''' diff --git a/desk/lib/pytz/america-santa-isabel.hoon b/desk/lib/pytz/america-santa-isabel.hoon deleted file mode 100644 index 4a7b5c2..0000000 --- a/desk/lib/pytz/america-santa-isabel.hoon +++ /dev/null @@ -1,159 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1924-01-01T07:00:00,-08:00,PST -1927-06-10T08:00:00,-07:00,MST -1930-11-15T07:00:00,-08:00,PST -1931-04-01T08:00:00,-07:00,PDT -1931-09-30T07:00:00,-08:00,PST -1942-04-24T08:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-11-15T07:00:00,-08:00,PST -1948-04-05T08:00:00,-07:00,PDT -1949-01-14T07:00:00,-08:00,PST -1950-05-01T08:00:00,-07:00,PDT -1950-09-24T07:00:00,-08:00,PST -1951-04-29T10:00:00,-07:00,PDT -1951-09-30T09:00:00,-08:00,PST -1952-04-27T10:00:00,-07:00,PDT -1952-09-28T09:00:00,-08:00,PST -1954-04-25T09:00:00,-07:00,PDT -1954-09-26T09:00:00,-08:00,PST -1955-04-24T09:00:00,-07:00,PDT -1955-09-25T09:00:00,-08:00,PST -1956-04-29T09:00:00,-07:00,PDT -1956-09-30T09:00:00,-08:00,PST -1957-04-28T09:00:00,-07:00,PDT -1957-09-29T09:00:00,-08:00,PST -1958-04-27T09:00:00,-07:00,PDT -1958-09-28T09:00:00,-08:00,PST -1959-04-26T09:00:00,-07:00,PDT -1959-09-27T09:00:00,-08:00,PST -1960-04-24T09:00:00,-07:00,PDT -1960-09-25T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-07:00,PDT -1979-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-08:00,PST -1984-04-29T10:00:00,-07:00,PDT -1984-10-28T09:00:00,-08:00,PST -1985-04-28T10:00:00,-07:00,PDT -1985-10-27T09:00:00,-08:00,PST -1986-04-27T10:00:00,-07:00,PDT -1986-10-26T09:00:00,-08:00,PST -1987-04-05T10:00:00,-07:00,PDT -1987-10-25T09:00:00,-08:00,PST -1988-04-03T10:00:00,-07:00,PDT -1988-10-30T09:00:00,-08:00,PST -1989-04-02T10:00:00,-07:00,PDT -1989-10-29T09:00:00,-08:00,PST -1990-04-01T10:00:00,-07:00,PDT -1990-10-28T09:00:00,-08:00,PST -1991-04-07T10:00:00,-07:00,PDT -1991-10-27T09:00:00,-08:00,PST -1992-04-05T10:00:00,-07:00,PDT -1992-10-25T09:00:00,-08:00,PST -1993-04-04T10:00:00,-07:00,PDT -1993-10-31T09:00:00,-08:00,PST -1994-04-03T10:00:00,-07:00,PDT -1994-10-30T09:00:00,-08:00,PST -1995-04-02T10:00:00,-07:00,PDT -1995-10-29T09:00:00,-08:00,PST -1996-04-07T10:00:00,-07:00,PDT -1996-10-27T09:00:00,-08:00,PST -1997-04-06T10:00:00,-07:00,PDT -1997-10-26T09:00:00,-08:00,PST -1998-04-05T10:00:00,-07:00,PDT -1998-10-25T09:00:00,-08:00,PST -1999-04-04T10:00:00,-07:00,PDT -1999-10-31T09:00:00,-08:00,PST -2000-04-02T10:00:00,-07:00,PDT -2000-10-29T09:00:00,-08:00,PST -2001-04-01T10:00:00,-07:00,PDT -2001-10-28T09:00:00,-08:00,PST -2002-04-07T10:00:00,-07:00,PDT -2002-10-27T09:00:00,-08:00,PST -2003-04-06T10:00:00,-07:00,PDT -2003-10-26T09:00:00,-08:00,PST -2004-04-04T10:00:00,-07:00,PDT -2004-10-31T09:00:00,-08:00,PST -2005-04-03T10:00:00,-07:00,PDT -2005-10-30T09:00:00,-08:00,PST -2006-04-02T10:00:00,-07:00,PDT -2006-10-29T09:00:00,-08:00,PST -2007-04-01T10:00:00,-07:00,PDT -2007-10-28T09:00:00,-08:00,PST -2008-04-06T10:00:00,-07:00,PDT -2008-10-26T09:00:00,-08:00,PST -2009-04-05T10:00:00,-07:00,PDT -2009-10-25T09:00:00,-08:00,PST -2010-03-14T10:00:00,-07:00,PDT -2010-11-07T09:00:00,-08:00,PST -2011-03-13T10:00:00,-07:00,PDT -2011-11-06T09:00:00,-08:00,PST -2012-03-11T10:00:00,-07:00,PDT -2012-11-04T09:00:00,-08:00,PST -2013-03-10T10:00:00,-07:00,PDT -2013-11-03T09:00:00,-08:00,PST -2014-03-09T10:00:00,-07:00,PDT -2014-11-02T09:00:00,-08:00,PST -2015-03-08T10:00:00,-07:00,PDT -2015-11-01T09:00:00,-08:00,PST -2016-03-13T10:00:00,-07:00,PDT -2016-11-06T09:00:00,-08:00,PST -2017-03-12T10:00:00,-07:00,PDT -2017-11-05T09:00:00,-08:00,PST -2018-03-11T10:00:00,-07:00,PDT -2018-11-04T09:00:00,-08:00,PST -2019-03-10T10:00:00,-07:00,PDT -2019-11-03T09:00:00,-08:00,PST -2020-03-08T10:00:00,-07:00,PDT -2020-11-01T09:00:00,-08:00,PST -2021-03-14T10:00:00,-07:00,PDT -2021-11-07T09:00:00,-08:00,PST -2022-03-13T10:00:00,-07:00,PDT -2022-11-06T09:00:00,-08:00,PST -2023-03-12T10:00:00,-07:00,PDT -2023-11-05T09:00:00,-08:00,PST -2024-03-10T10:00:00,-07:00,PDT -2024-11-03T09:00:00,-08:00,PST -2025-03-09T10:00:00,-07:00,PDT -2025-11-02T09:00:00,-08:00,PST -2026-03-08T10:00:00,-07:00,PDT -2026-11-01T09:00:00,-08:00,PST -2027-03-14T10:00:00,-07:00,PDT -2027-11-07T09:00:00,-08:00,PST -2028-03-12T10:00:00,-07:00,PDT -2028-11-05T09:00:00,-08:00,PST -2029-03-11T10:00:00,-07:00,PDT -2029-11-04T09:00:00,-08:00,PST -2030-03-10T10:00:00,-07:00,PDT -2030-11-03T09:00:00,-08:00,PST -2031-03-09T10:00:00,-07:00,PDT -2031-11-02T09:00:00,-08:00,PST -2032-03-14T10:00:00,-07:00,PDT -2032-11-07T09:00:00,-08:00,PST -2033-03-13T10:00:00,-07:00,PDT -2033-11-06T09:00:00,-08:00,PST -2034-03-12T10:00:00,-07:00,PDT -2034-11-05T09:00:00,-08:00,PST -2035-03-11T10:00:00,-07:00,PDT -2035-11-04T09:00:00,-08:00,PST -2036-03-09T10:00:00,-07:00,PDT -2036-11-02T09:00:00,-08:00,PST -2037-03-08T10:00:00,-07:00,PDT -2037-11-01T09:00:00,-08:00,PST -''' diff --git a/desk/lib/pytz/america-santarem.hoon b/desk/lib/pytz/america-santarem.hoon deleted file mode 100644 index d725dc4..0000000 --- a/desk/lib/pytz/america-santarem.hoon +++ /dev/null @@ -1,34 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T03:38:48,-04:00,-04 -1931-10-03T15:00:00,-03:00,-03 -1932-04-01T03:00:00,-04:00,-04 -1932-10-03T04:00:00,-03:00,-03 -1933-04-01T03:00:00,-04:00,-04 -1949-12-01T04:00:00,-03:00,-03 -1950-04-16T04:00:00,-04:00,-04 -1950-12-01T04:00:00,-03:00,-03 -1951-04-01T03:00:00,-04:00,-04 -1951-12-01T04:00:00,-03:00,-03 -1952-04-01T03:00:00,-04:00,-04 -1952-12-01T04:00:00,-03:00,-03 -1953-03-01T03:00:00,-04:00,-04 -1963-12-09T04:00:00,-03:00,-03 -1964-03-01T03:00:00,-04:00,-04 -1965-01-31T04:00:00,-03:00,-03 -1965-03-31T03:00:00,-04:00,-04 -1965-12-01T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-11-01T04:00:00,-03:00,-03 -1967-03-01T03:00:00,-04:00,-04 -1967-11-01T04:00:00,-03:00,-03 -1968-03-01T03:00:00,-04:00,-04 -1985-11-02T04:00:00,-03:00,-03 -1986-03-15T03:00:00,-04:00,-04 -1986-10-25T04:00:00,-03:00,-03 -1987-02-14T03:00:00,-04:00,-04 -1987-10-25T04:00:00,-03:00,-03 -1988-02-07T03:00:00,-04:00,-04 -2008-06-24T04:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-santiago.hoon b/desk/lib/pytz/america-santiago.hoon deleted file mode 100644 index c5ac84e..0000000 --- a/desk/lib/pytz/america-santiago.hoon +++ /dev/null @@ -1,163 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:17,SMT -1910-01-10T04:42:45,-05:00,-05 -1916-07-01T05:00:00,-05:17,SMT -1918-09-10T04:42:45,-04:00,-04 -1919-07-01T04:00:00,-05:17,SMT -1927-09-01T04:42:45,-04:00,-04 -1928-04-01T04:00:00,-05:00,-05 -1928-09-01T05:00:00,-04:00,-04 -1929-04-01T04:00:00,-05:00,-05 -1929-09-01T05:00:00,-04:00,-04 -1930-04-01T04:00:00,-05:00,-05 -1930-09-01T05:00:00,-04:00,-04 -1931-04-01T04:00:00,-05:00,-05 -1931-09-01T05:00:00,-04:00,-04 -1932-04-01T04:00:00,-05:00,-05 -1932-09-01T05:00:00,-04:00,-04 -1942-06-01T04:00:00,-05:00,-05 -1942-08-01T05:00:00,-04:00,-04 -1946-07-15T04:00:00,-03:00,-03 -1946-08-29T03:00:00,-04:00,-04 -1947-04-01T04:00:00,-05:00,-05 -1947-05-22T04:00:00,-04:00,-04 -1968-11-03T04:00:00,-03:00,-03 -1969-03-30T03:00:00,-04:00,-04 -1969-11-23T04:00:00,-03:00,-03 -1970-03-29T03:00:00,-04:00,-04 -1970-10-11T04:00:00,-03:00,-03 -1971-03-14T03:00:00,-04:00,-04 -1971-10-10T04:00:00,-03:00,-03 -1972-03-12T03:00:00,-04:00,-04 -1972-10-15T04:00:00,-03:00,-03 -1973-03-11T03:00:00,-04:00,-04 -1973-09-30T04:00:00,-03:00,-03 -1974-03-10T03:00:00,-04:00,-04 -1974-10-13T04:00:00,-03:00,-03 -1975-03-09T03:00:00,-04:00,-04 -1975-10-12T04:00:00,-03:00,-03 -1976-03-14T03:00:00,-04:00,-04 -1976-10-10T04:00:00,-03:00,-03 -1977-03-13T03:00:00,-04:00,-04 -1977-10-09T04:00:00,-03:00,-03 -1978-03-12T03:00:00,-04:00,-04 -1978-10-15T04:00:00,-03:00,-03 -1979-03-11T03:00:00,-04:00,-04 -1979-10-14T04:00:00,-03:00,-03 -1980-03-09T03:00:00,-04:00,-04 -1980-10-12T04:00:00,-03:00,-03 -1981-03-15T03:00:00,-04:00,-04 -1981-10-11T04:00:00,-03:00,-03 -1982-03-14T03:00:00,-04:00,-04 -1982-10-10T04:00:00,-03:00,-03 -1983-03-13T03:00:00,-04:00,-04 -1983-10-09T04:00:00,-03:00,-03 -1984-03-11T03:00:00,-04:00,-04 -1984-10-14T04:00:00,-03:00,-03 -1985-03-10T03:00:00,-04:00,-04 -1985-10-13T04:00:00,-03:00,-03 -1986-03-09T03:00:00,-04:00,-04 -1986-10-12T04:00:00,-03:00,-03 -1987-04-12T03:00:00,-04:00,-04 -1987-10-11T04:00:00,-03:00,-03 -1988-03-13T03:00:00,-04:00,-04 -1988-10-09T04:00:00,-03:00,-03 -1989-03-12T03:00:00,-04:00,-04 -1989-10-15T04:00:00,-03:00,-03 -1990-03-11T03:00:00,-04:00,-04 -1990-09-16T04:00:00,-03:00,-03 -1991-03-10T03:00:00,-04:00,-04 -1991-10-13T04:00:00,-03:00,-03 -1992-03-15T03:00:00,-04:00,-04 -1992-10-11T04:00:00,-03:00,-03 -1993-03-14T03:00:00,-04:00,-04 -1993-10-10T04:00:00,-03:00,-03 -1994-03-13T03:00:00,-04:00,-04 -1994-10-09T04:00:00,-03:00,-03 -1995-03-12T03:00:00,-04:00,-04 -1995-10-15T04:00:00,-03:00,-03 -1996-03-10T03:00:00,-04:00,-04 -1996-10-13T04:00:00,-03:00,-03 -1997-03-30T03:00:00,-04:00,-04 -1997-10-12T04:00:00,-03:00,-03 -1998-03-15T03:00:00,-04:00,-04 -1998-09-27T04:00:00,-03:00,-03 -1999-04-04T03:00:00,-04:00,-04 -1999-10-10T04:00:00,-03:00,-03 -2000-03-12T03:00:00,-04:00,-04 -2000-10-15T04:00:00,-03:00,-03 -2001-03-11T03:00:00,-04:00,-04 -2001-10-14T04:00:00,-03:00,-03 -2002-03-10T03:00:00,-04:00,-04 -2002-10-13T04:00:00,-03:00,-03 -2003-03-09T03:00:00,-04:00,-04 -2003-10-12T04:00:00,-03:00,-03 -2004-03-14T03:00:00,-04:00,-04 -2004-10-10T04:00:00,-03:00,-03 -2005-03-13T03:00:00,-04:00,-04 -2005-10-09T04:00:00,-03:00,-03 -2006-03-12T03:00:00,-04:00,-04 -2006-10-15T04:00:00,-03:00,-03 -2007-03-11T03:00:00,-04:00,-04 -2007-10-14T04:00:00,-03:00,-03 -2008-03-30T03:00:00,-04:00,-04 -2008-10-12T04:00:00,-03:00,-03 -2009-03-15T03:00:00,-04:00,-04 -2009-10-11T04:00:00,-03:00,-03 -2010-04-04T03:00:00,-04:00,-04 -2010-10-10T04:00:00,-03:00,-03 -2011-05-08T03:00:00,-04:00,-04 -2011-08-21T04:00:00,-03:00,-03 -2012-04-29T03:00:00,-04:00,-04 -2012-09-02T04:00:00,-03:00,-03 -2013-04-28T03:00:00,-04:00,-04 -2013-09-08T04:00:00,-03:00,-03 -2014-04-27T03:00:00,-04:00,-04 -2014-09-07T04:00:00,-03:00,-03 -2016-05-15T03:00:00,-04:00,-04 -2016-08-14T04:00:00,-03:00,-03 -2017-05-14T03:00:00,-04:00,-04 -2017-08-13T04:00:00,-03:00,-03 -2018-05-13T03:00:00,-04:00,-04 -2018-08-12T04:00:00,-03:00,-03 -2019-04-07T03:00:00,-04:00,-04 -2019-09-08T04:00:00,-03:00,-03 -2020-04-05T03:00:00,-04:00,-04 -2020-09-06T04:00:00,-03:00,-03 -2021-04-04T03:00:00,-04:00,-04 -2021-09-05T04:00:00,-03:00,-03 -2022-04-03T03:00:00,-04:00,-04 -2022-09-11T04:00:00,-03:00,-03 -2023-04-02T03:00:00,-04:00,-04 -2023-09-03T04:00:00,-03:00,-03 -2024-04-07T03:00:00,-04:00,-04 -2024-09-08T04:00:00,-03:00,-03 -2025-04-06T03:00:00,-04:00,-04 -2025-09-07T04:00:00,-03:00,-03 -2026-04-05T03:00:00,-04:00,-04 -2026-09-06T04:00:00,-03:00,-03 -2027-04-04T03:00:00,-04:00,-04 -2027-09-05T04:00:00,-03:00,-03 -2028-04-02T03:00:00,-04:00,-04 -2028-09-03T04:00:00,-03:00,-03 -2029-04-08T03:00:00,-04:00,-04 -2029-09-02T04:00:00,-03:00,-03 -2030-04-07T03:00:00,-04:00,-04 -2030-09-08T04:00:00,-03:00,-03 -2031-04-06T03:00:00,-04:00,-04 -2031-09-07T04:00:00,-03:00,-03 -2032-04-04T03:00:00,-04:00,-04 -2032-09-05T04:00:00,-03:00,-03 -2033-04-03T03:00:00,-04:00,-04 -2033-09-04T04:00:00,-03:00,-03 -2034-04-02T03:00:00,-04:00,-04 -2034-09-03T04:00:00,-03:00,-03 -2035-04-08T03:00:00,-04:00,-04 -2035-09-02T04:00:00,-03:00,-03 -2036-04-06T03:00:00,-04:00,-04 -2036-09-07T04:00:00,-03:00,-03 -2037-04-05T03:00:00,-04:00,-04 -2037-09-06T04:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-santo-domingo.hoon b/desk/lib/pytz/america-santo-domingo.hoon deleted file mode 100644 index d4ab117..0000000 --- a/desk/lib/pytz/america-santo-domingo.hoon +++ /dev/null @@ -1,21 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:20,SDMT -1933-04-01T16:40:00,-05:00,EST -1966-10-30T05:00:00,-04:00,EDT -1967-02-28T04:00:00,-05:00,EST -1969-10-26T05:00:00,-05:30,-0430 -1970-02-21T04:30:00,-05:00,EST -1970-10-25T05:00:00,-05:30,-0430 -1971-01-20T04:30:00,-05:00,EST -1971-10-31T05:00:00,-05:30,-0430 -1972-01-21T04:30:00,-05:00,EST -1972-10-29T05:00:00,-05:30,-0430 -1973-01-21T04:30:00,-05:00,EST -1973-10-28T05:00:00,-05:30,-0430 -1974-01-21T04:30:00,-05:00,EST -1974-10-27T05:00:00,-04:00,AST -2000-10-29T06:00:00,-05:00,EST -2000-12-03T06:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-sao-paulo.hoon b/desk/lib/pytz/america-sao-paulo.hoon deleted file mode 100644 index c77e540..0000000 --- a/desk/lib/pytz/america-sao-paulo.hoon +++ /dev/null @@ -1,95 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1914-01-01T03:06:28,-03:00,-03 -1931-10-03T14:00:00,-02:00,-02 -1932-04-01T02:00:00,-03:00,-03 -1932-10-03T03:00:00,-02:00,-02 -1933-04-01T02:00:00,-03:00,-03 -1949-12-01T03:00:00,-02:00,-02 -1950-04-16T03:00:00,-03:00,-03 -1950-12-01T03:00:00,-02:00,-02 -1951-04-01T02:00:00,-03:00,-03 -1951-12-01T03:00:00,-02:00,-02 -1952-04-01T02:00:00,-03:00,-03 -1952-12-01T03:00:00,-02:00,-02 -1953-03-01T02:00:00,-03:00,-03 -1963-10-23T03:00:00,-02:00,-02 -1964-03-01T02:00:00,-03:00,-03 -1965-01-31T03:00:00,-02:00,-02 -1965-03-31T02:00:00,-03:00,-03 -1965-12-01T03:00:00,-02:00,-02 -1966-03-01T02:00:00,-03:00,-03 -1966-11-01T03:00:00,-02:00,-02 -1967-03-01T02:00:00,-03:00,-03 -1967-11-01T03:00:00,-02:00,-02 -1968-03-01T02:00:00,-03:00,-03 -1985-11-02T03:00:00,-02:00,-02 -1986-03-15T02:00:00,-03:00,-03 -1986-10-25T03:00:00,-02:00,-02 -1987-02-14T02:00:00,-03:00,-03 -1987-10-25T03:00:00,-02:00,-02 -1988-02-07T02:00:00,-03:00,-03 -1988-10-16T03:00:00,-02:00,-02 -1989-01-29T02:00:00,-03:00,-03 -1989-10-15T03:00:00,-02:00,-02 -1990-02-11T02:00:00,-03:00,-03 -1990-10-21T03:00:00,-02:00,-02 -1991-02-17T02:00:00,-03:00,-03 -1991-10-20T03:00:00,-02:00,-02 -1992-02-09T02:00:00,-03:00,-03 -1992-10-25T03:00:00,-02:00,-02 -1993-01-31T02:00:00,-03:00,-03 -1993-10-17T03:00:00,-02:00,-02 -1994-02-20T02:00:00,-03:00,-03 -1994-10-16T03:00:00,-02:00,-02 -1995-02-19T02:00:00,-03:00,-03 -1995-10-15T03:00:00,-02:00,-02 -1996-02-11T02:00:00,-03:00,-03 -1996-10-06T03:00:00,-02:00,-02 -1997-02-16T02:00:00,-03:00,-03 -1997-10-06T03:00:00,-02:00,-02 -1998-03-01T02:00:00,-03:00,-03 -1998-10-11T03:00:00,-02:00,-02 -1999-02-21T02:00:00,-03:00,-03 -1999-10-03T03:00:00,-02:00,-02 -2000-02-27T02:00:00,-03:00,-03 -2000-10-08T03:00:00,-02:00,-02 -2001-02-18T02:00:00,-03:00,-03 -2001-10-14T03:00:00,-02:00,-02 -2002-02-17T02:00:00,-03:00,-03 -2002-11-03T03:00:00,-02:00,-02 -2003-02-16T02:00:00,-03:00,-03 -2003-10-19T03:00:00,-02:00,-02 -2004-02-15T02:00:00,-03:00,-03 -2004-11-02T03:00:00,-02:00,-02 -2005-02-20T02:00:00,-03:00,-03 -2005-10-16T03:00:00,-02:00,-02 -2006-02-19T02:00:00,-03:00,-03 -2006-11-05T03:00:00,-02:00,-02 -2007-02-25T02:00:00,-03:00,-03 -2007-10-14T03:00:00,-02:00,-02 -2008-02-17T02:00:00,-03:00,-03 -2008-10-19T03:00:00,-02:00,-02 -2009-02-15T02:00:00,-03:00,-03 -2009-10-18T03:00:00,-02:00,-02 -2010-02-21T02:00:00,-03:00,-03 -2010-10-17T03:00:00,-02:00,-02 -2011-02-20T02:00:00,-03:00,-03 -2011-10-16T03:00:00,-02:00,-02 -2012-02-26T02:00:00,-03:00,-03 -2012-10-21T03:00:00,-02:00,-02 -2013-02-17T02:00:00,-03:00,-03 -2013-10-20T03:00:00,-02:00,-02 -2014-02-16T02:00:00,-03:00,-03 -2014-10-19T03:00:00,-02:00,-02 -2015-02-22T02:00:00,-03:00,-03 -2015-10-18T03:00:00,-02:00,-02 -2016-02-21T02:00:00,-03:00,-03 -2016-10-16T03:00:00,-02:00,-02 -2017-02-19T02:00:00,-03:00,-03 -2017-10-15T03:00:00,-02:00,-02 -2018-02-18T02:00:00,-03:00,-03 -2018-11-04T03:00:00,-02:00,-02 -2019-02-17T02:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/america-scoresbysund.hoon b/desk/lib/pytz/america-scoresbysund.hoon deleted file mode 100644 index b034867..0000000 --- a/desk/lib/pytz/america-scoresbysund.hoon +++ /dev/null @@ -1,121 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1916-07-28T01:27:52,-02:00,-02 -1980-04-06T04:00:00,-01:00,-01 -1980-09-28T04:00:00,-02:00,-02 -1981-03-29T02:00:00,+00:00,+00 -1981-09-27T01:00:00,-01:00,-01 -1982-03-28T01:00:00,+00:00,+00 -1982-09-26T01:00:00,-01:00,-01 -1983-03-27T01:00:00,+00:00,+00 -1983-09-25T01:00:00,-01:00,-01 -1984-03-25T01:00:00,+00:00,+00 -1984-09-30T01:00:00,-01:00,-01 -1985-03-31T01:00:00,+00:00,+00 -1985-09-29T01:00:00,-01:00,-01 -1986-03-30T01:00:00,+00:00,+00 -1986-09-28T01:00:00,-01:00,-01 -1987-03-29T01:00:00,+00:00,+00 -1987-09-27T01:00:00,-01:00,-01 -1988-03-27T01:00:00,+00:00,+00 -1988-09-25T01:00:00,-01:00,-01 -1989-03-26T01:00:00,+00:00,+00 -1989-09-24T01:00:00,-01:00,-01 -1990-03-25T01:00:00,+00:00,+00 -1990-09-30T01:00:00,-01:00,-01 -1991-03-31T01:00:00,+00:00,+00 -1991-09-29T01:00:00,-01:00,-01 -1992-03-29T01:00:00,+00:00,+00 -1992-09-27T01:00:00,-01:00,-01 -1993-03-28T01:00:00,+00:00,+00 -1993-09-26T01:00:00,-01:00,-01 -1994-03-27T01:00:00,+00:00,+00 -1994-09-25T01:00:00,-01:00,-01 -1995-03-26T01:00:00,+00:00,+00 -1995-09-24T01:00:00,-01:00,-01 -1996-03-31T01:00:00,+00:00,+00 -1996-10-27T01:00:00,-01:00,-01 -1997-03-30T01:00:00,+00:00,+00 -1997-10-26T01:00:00,-01:00,-01 -1998-03-29T01:00:00,+00:00,+00 -1998-10-25T01:00:00,-01:00,-01 -1999-03-28T01:00:00,+00:00,+00 -1999-10-31T01:00:00,-01:00,-01 -2000-03-26T01:00:00,+00:00,+00 -2000-10-29T01:00:00,-01:00,-01 -2001-03-25T01:00:00,+00:00,+00 -2001-10-28T01:00:00,-01:00,-01 -2002-03-31T01:00:00,+00:00,+00 -2002-10-27T01:00:00,-01:00,-01 -2003-03-30T01:00:00,+00:00,+00 -2003-10-26T01:00:00,-01:00,-01 -2004-03-28T01:00:00,+00:00,+00 -2004-10-31T01:00:00,-01:00,-01 -2005-03-27T01:00:00,+00:00,+00 -2005-10-30T01:00:00,-01:00,-01 -2006-03-26T01:00:00,+00:00,+00 -2006-10-29T01:00:00,-01:00,-01 -2007-03-25T01:00:00,+00:00,+00 -2007-10-28T01:00:00,-01:00,-01 -2008-03-30T01:00:00,+00:00,+00 -2008-10-26T01:00:00,-01:00,-01 -2009-03-29T01:00:00,+00:00,+00 -2009-10-25T01:00:00,-01:00,-01 -2010-03-28T01:00:00,+00:00,+00 -2010-10-31T01:00:00,-01:00,-01 -2011-03-27T01:00:00,+00:00,+00 -2011-10-30T01:00:00,-01:00,-01 -2012-03-25T01:00:00,+00:00,+00 -2012-10-28T01:00:00,-01:00,-01 -2013-03-31T01:00:00,+00:00,+00 -2013-10-27T01:00:00,-01:00,-01 -2014-03-30T01:00:00,+00:00,+00 -2014-10-26T01:00:00,-01:00,-01 -2015-03-29T01:00:00,+00:00,+00 -2015-10-25T01:00:00,-01:00,-01 -2016-03-27T01:00:00,+00:00,+00 -2016-10-30T01:00:00,-01:00,-01 -2017-03-26T01:00:00,+00:00,+00 -2017-10-29T01:00:00,-01:00,-01 -2018-03-25T01:00:00,+00:00,+00 -2018-10-28T01:00:00,-01:00,-01 -2019-03-31T01:00:00,+00:00,+00 -2019-10-27T01:00:00,-01:00,-01 -2020-03-29T01:00:00,+00:00,+00 -2020-10-25T01:00:00,-01:00,-01 -2021-03-28T01:00:00,+00:00,+00 -2021-10-31T01:00:00,-01:00,-01 -2022-03-27T01:00:00,+00:00,+00 -2022-10-30T01:00:00,-01:00,-01 -2023-03-26T01:00:00,+00:00,+00 -2023-10-29T01:00:00,-01:00,-01 -2024-03-31T01:00:00,-01:00,-01 -2024-10-27T01:00:00,-02:00,-02 -2025-03-30T01:00:00,-01:00,-01 -2025-10-26T01:00:00,-02:00,-02 -2026-03-29T01:00:00,-01:00,-01 -2026-10-25T01:00:00,-02:00,-02 -2027-03-28T01:00:00,-01:00,-01 -2027-10-31T01:00:00,-02:00,-02 -2028-03-26T01:00:00,-01:00,-01 -2028-10-29T01:00:00,-02:00,-02 -2029-03-25T01:00:00,-01:00,-01 -2029-10-28T01:00:00,-02:00,-02 -2030-03-31T01:00:00,-01:00,-01 -2030-10-27T01:00:00,-02:00,-02 -2031-03-30T01:00:00,-01:00,-01 -2031-10-26T01:00:00,-02:00,-02 -2032-03-28T01:00:00,-01:00,-01 -2032-10-31T01:00:00,-02:00,-02 -2033-03-27T01:00:00,-01:00,-01 -2033-10-30T01:00:00,-02:00,-02 -2034-03-26T01:00:00,-01:00,-01 -2034-10-29T01:00:00,-02:00,-02 -2035-03-25T01:00:00,-01:00,-01 -2035-10-28T01:00:00,-02:00,-02 -2036-03-30T01:00:00,-01:00,-01 -2036-10-26T01:00:00,-02:00,-02 -2037-03-29T01:00:00,-01:00,-01 -2037-10-25T01:00:00,-02:00,-02 -''' diff --git a/desk/lib/pytz/america-shiprock.hoon b/desk/lib/pytz/america-shiprock.hoon deleted file mode 100644 index 0864cae..0000000 --- a/desk/lib/pytz/america-shiprock.hoon +++ /dev/null @@ -1,162 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-07:00,MST -1918-03-31T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1919-03-30T09:00:00,-06:00,MDT -1919-10-26T08:00:00,-07:00,MST -1920-03-28T09:00:00,-06:00,MDT -1920-10-31T08:00:00,-07:00,MST -1921-03-27T09:00:00,-06:00,MDT -1921-05-22T08:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1965-04-25T09:00:00,-06:00,MDT -1965-10-31T08:00:00,-07:00,MST -1966-04-24T09:00:00,-06:00,MDT -1966-10-30T08:00:00,-07:00,MST -1967-04-30T09:00:00,-06:00,MDT -1967-10-29T08:00:00,-07:00,MST -1968-04-28T09:00:00,-06:00,MDT -1968-10-27T08:00:00,-07:00,MST -1969-04-27T09:00:00,-06:00,MDT -1969-10-26T08:00:00,-07:00,MST -1970-04-26T09:00:00,-06:00,MDT -1970-10-25T08:00:00,-07:00,MST -1971-04-25T09:00:00,-06:00,MDT -1971-10-31T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,MDT -1972-10-29T08:00:00,-07:00,MST -1973-04-29T09:00:00,-06:00,MDT -1973-10-28T08:00:00,-07:00,MST -1974-01-06T09:00:00,-06:00,MDT -1974-10-27T08:00:00,-07:00,MST -1975-02-23T09:00:00,-06:00,MDT -1975-10-26T08:00:00,-07:00,MST -1976-04-25T09:00:00,-06:00,MDT -1976-10-31T08:00:00,-07:00,MST -1977-04-24T09:00:00,-06:00,MDT -1977-10-30T08:00:00,-07:00,MST -1978-04-30T09:00:00,-06:00,MDT -1978-10-29T08:00:00,-07:00,MST -1979-04-29T09:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-07:00,MST -1993-04-04T09:00:00,-06:00,MDT -1993-10-31T08:00:00,-07:00,MST -1994-04-03T09:00:00,-06:00,MDT -1994-10-30T08:00:00,-07:00,MST -1995-04-02T09:00:00,-06:00,MDT -1995-10-29T08:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-04-01T09:00:00,-06:00,MDT -2001-10-28T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-03-11T09:00:00,-06:00,MDT -2007-11-04T08:00:00,-07:00,MST -2008-03-09T09:00:00,-06:00,MDT -2008-11-02T08:00:00,-07:00,MST -2009-03-08T09:00:00,-06:00,MDT -2009-11-01T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-07:00,MST -2011-03-13T09:00:00,-06:00,MDT -2011-11-06T08:00:00,-07:00,MST -2012-03-11T09:00:00,-06:00,MDT -2012-11-04T08:00:00,-07:00,MST -2013-03-10T09:00:00,-06:00,MDT -2013-11-03T08:00:00,-07:00,MST -2014-03-09T09:00:00,-06:00,MDT -2014-11-02T08:00:00,-07:00,MST -2015-03-08T09:00:00,-06:00,MDT -2015-11-01T08:00:00,-07:00,MST -2016-03-13T09:00:00,-06:00,MDT -2016-11-06T08:00:00,-07:00,MST -2017-03-12T09:00:00,-06:00,MDT -2017-11-05T08:00:00,-07:00,MST -2018-03-11T09:00:00,-06:00,MDT -2018-11-04T08:00:00,-07:00,MST -2019-03-10T09:00:00,-06:00,MDT -2019-11-03T08:00:00,-07:00,MST -2020-03-08T09:00:00,-06:00,MDT -2020-11-01T08:00:00,-07:00,MST -2021-03-14T09:00:00,-06:00,MDT -2021-11-07T08:00:00,-07:00,MST -2022-03-13T09:00:00,-06:00,MDT -2022-11-06T08:00:00,-07:00,MST -2023-03-12T09:00:00,-06:00,MDT -2023-11-05T08:00:00,-07:00,MST -2024-03-10T09:00:00,-06:00,MDT -2024-11-03T08:00:00,-07:00,MST -2025-03-09T09:00:00,-06:00,MDT -2025-11-02T08:00:00,-07:00,MST -2026-03-08T09:00:00,-06:00,MDT -2026-11-01T08:00:00,-07:00,MST -2027-03-14T09:00:00,-06:00,MDT -2027-11-07T08:00:00,-07:00,MST -2028-03-12T09:00:00,-06:00,MDT -2028-11-05T08:00:00,-07:00,MST -2029-03-11T09:00:00,-06:00,MDT -2029-11-04T08:00:00,-07:00,MST -2030-03-10T09:00:00,-06:00,MDT -2030-11-03T08:00:00,-07:00,MST -2031-03-09T09:00:00,-06:00,MDT -2031-11-02T08:00:00,-07:00,MST -2032-03-14T09:00:00,-06:00,MDT -2032-11-07T08:00:00,-07:00,MST -2033-03-13T09:00:00,-06:00,MDT -2033-11-06T08:00:00,-07:00,MST -2034-03-12T09:00:00,-06:00,MDT -2034-11-05T08:00:00,-07:00,MST -2035-03-11T09:00:00,-06:00,MDT -2035-11-04T08:00:00,-07:00,MST -2036-03-09T09:00:00,-06:00,MDT -2036-11-02T08:00:00,-07:00,MST -2037-03-08T09:00:00,-06:00,MDT -2037-11-01T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-sitka.hoon b/desk/lib/pytz/america-sitka.hoon deleted file mode 100644 index c203c8a..0000000 --- a/desk/lib/pytz/america-sitka.hoon +++ /dev/null @@ -1,148 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+14:59,LMT -1901-12-13T20:45:52,-08:00,PST -1942-02-09T10:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-09-30T09:00:00,-08:00,PST -1969-04-27T10:00:00,-07:00,PDT -1969-10-26T09:00:00,-08:00,PST -1970-04-26T10:00:00,-07:00,PDT -1970-10-25T09:00:00,-08:00,PST -1971-04-25T10:00:00,-07:00,PDT -1971-10-31T09:00:00,-08:00,PST -1972-04-30T10:00:00,-07:00,PDT -1972-10-29T09:00:00,-08:00,PST -1973-04-29T10:00:00,-07:00,PDT -1973-10-28T09:00:00,-08:00,PST -1974-01-06T10:00:00,-07:00,PDT -1974-10-27T09:00:00,-08:00,PST -1975-02-23T10:00:00,-07:00,PDT -1975-10-26T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-07:00,PDT -1979-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-09:00,YST -1983-11-30T09:00:00,-09:00,AKST -1984-04-29T11:00:00,-08:00,AKDT -1984-10-28T10:00:00,-09:00,AKST -1985-04-28T11:00:00,-08:00,AKDT -1985-10-27T10:00:00,-09:00,AKST -1986-04-27T11:00:00,-08:00,AKDT -1986-10-26T10:00:00,-09:00,AKST -1987-04-05T11:00:00,-08:00,AKDT -1987-10-25T10:00:00,-09:00,AKST -1988-04-03T11:00:00,-08:00,AKDT -1988-10-30T10:00:00,-09:00,AKST -1989-04-02T11:00:00,-08:00,AKDT -1989-10-29T10:00:00,-09:00,AKST -1990-04-01T11:00:00,-08:00,AKDT -1990-10-28T10:00:00,-09:00,AKST -1991-04-07T11:00:00,-08:00,AKDT -1991-10-27T10:00:00,-09:00,AKST -1992-04-05T11:00:00,-08:00,AKDT -1992-10-25T10:00:00,-09:00,AKST -1993-04-04T11:00:00,-08:00,AKDT -1993-10-31T10:00:00,-09:00,AKST -1994-04-03T11:00:00,-08:00,AKDT -1994-10-30T10:00:00,-09:00,AKST -1995-04-02T11:00:00,-08:00,AKDT -1995-10-29T10:00:00,-09:00,AKST -1996-04-07T11:00:00,-08:00,AKDT -1996-10-27T10:00:00,-09:00,AKST -1997-04-06T11:00:00,-08:00,AKDT -1997-10-26T10:00:00,-09:00,AKST -1998-04-05T11:00:00,-08:00,AKDT -1998-10-25T10:00:00,-09:00,AKST -1999-04-04T11:00:00,-08:00,AKDT -1999-10-31T10:00:00,-09:00,AKST -2000-04-02T11:00:00,-08:00,AKDT -2000-10-29T10:00:00,-09:00,AKST -2001-04-01T11:00:00,-08:00,AKDT -2001-10-28T10:00:00,-09:00,AKST -2002-04-07T11:00:00,-08:00,AKDT -2002-10-27T10:00:00,-09:00,AKST -2003-04-06T11:00:00,-08:00,AKDT -2003-10-26T10:00:00,-09:00,AKST -2004-04-04T11:00:00,-08:00,AKDT -2004-10-31T10:00:00,-09:00,AKST -2005-04-03T11:00:00,-08:00,AKDT -2005-10-30T10:00:00,-09:00,AKST -2006-04-02T11:00:00,-08:00,AKDT -2006-10-29T10:00:00,-09:00,AKST -2007-03-11T11:00:00,-08:00,AKDT -2007-11-04T10:00:00,-09:00,AKST -2008-03-09T11:00:00,-08:00,AKDT -2008-11-02T10:00:00,-09:00,AKST -2009-03-08T11:00:00,-08:00,AKDT -2009-11-01T10:00:00,-09:00,AKST -2010-03-14T11:00:00,-08:00,AKDT -2010-11-07T10:00:00,-09:00,AKST -2011-03-13T11:00:00,-08:00,AKDT -2011-11-06T10:00:00,-09:00,AKST -2012-03-11T11:00:00,-08:00,AKDT -2012-11-04T10:00:00,-09:00,AKST -2013-03-10T11:00:00,-08:00,AKDT -2013-11-03T10:00:00,-09:00,AKST -2014-03-09T11:00:00,-08:00,AKDT -2014-11-02T10:00:00,-09:00,AKST -2015-03-08T11:00:00,-08:00,AKDT -2015-11-01T10:00:00,-09:00,AKST -2016-03-13T11:00:00,-08:00,AKDT -2016-11-06T10:00:00,-09:00,AKST -2017-03-12T11:00:00,-08:00,AKDT -2017-11-05T10:00:00,-09:00,AKST -2018-03-11T11:00:00,-08:00,AKDT -2018-11-04T10:00:00,-09:00,AKST -2019-03-10T11:00:00,-08:00,AKDT -2019-11-03T10:00:00,-09:00,AKST -2020-03-08T11:00:00,-08:00,AKDT -2020-11-01T10:00:00,-09:00,AKST -2021-03-14T11:00:00,-08:00,AKDT -2021-11-07T10:00:00,-09:00,AKST -2022-03-13T11:00:00,-08:00,AKDT -2022-11-06T10:00:00,-09:00,AKST -2023-03-12T11:00:00,-08:00,AKDT -2023-11-05T10:00:00,-09:00,AKST -2024-03-10T11:00:00,-08:00,AKDT -2024-11-03T10:00:00,-09:00,AKST -2025-03-09T11:00:00,-08:00,AKDT -2025-11-02T10:00:00,-09:00,AKST -2026-03-08T11:00:00,-08:00,AKDT -2026-11-01T10:00:00,-09:00,AKST -2027-03-14T11:00:00,-08:00,AKDT -2027-11-07T10:00:00,-09:00,AKST -2028-03-12T11:00:00,-08:00,AKDT -2028-11-05T10:00:00,-09:00,AKST -2029-03-11T11:00:00,-08:00,AKDT -2029-11-04T10:00:00,-09:00,AKST -2030-03-10T11:00:00,-08:00,AKDT -2030-11-03T10:00:00,-09:00,AKST -2031-03-09T11:00:00,-08:00,AKDT -2031-11-02T10:00:00,-09:00,AKST -2032-03-14T11:00:00,-08:00,AKDT -2032-11-07T10:00:00,-09:00,AKST -2033-03-13T11:00:00,-08:00,AKDT -2033-11-06T10:00:00,-09:00,AKST -2034-03-12T11:00:00,-08:00,AKDT -2034-11-05T10:00:00,-09:00,AKST -2035-03-11T11:00:00,-08:00,AKDT -2035-11-04T10:00:00,-09:00,AKST -2036-03-09T11:00:00,-08:00,AKDT -2036-11-02T10:00:00,-09:00,AKST -2037-03-08T11:00:00,-08:00,AKDT -2037-11-01T10:00:00,-09:00,AKST -''' diff --git a/desk/lib/pytz/america-st-barthelemy.hoon b/desk/lib/pytz/america-st-barthelemy.hoon deleted file mode 100644 index d66fe17..0000000 --- a/desk/lib/pytz/america-st-barthelemy.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-03-02T04:06:04,-04:00,AST -''' diff --git a/desk/lib/pytz/america-st-johns.hoon b/desk/lib/pytz/america-st-johns.hoon deleted file mode 100644 index ce95acc..0000000 --- a/desk/lib/pytz/america-st-johns.hoon +++ /dev/null @@ -1,243 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-04:29,NST -1917-04-08T05:30:52,-03:29,NDT -1917-09-17T04:30:52,-04:29,NST -1918-04-14T05:30:52,-03:29,NDT -1918-10-27T04:30:52,-04:29,NST -1919-05-06T02:30:52,-03:29,NDT -1919-08-13T01:30:52,-04:29,NST -1920-05-03T02:30:52,-03:29,NDT -1920-11-01T01:30:52,-04:29,NST -1921-05-02T02:30:52,-03:29,NDT -1921-10-31T01:30:52,-04:29,NST -1922-05-08T02:30:52,-03:29,NDT -1922-10-30T01:30:52,-04:29,NST -1923-05-07T02:30:52,-03:29,NDT -1923-10-29T01:30:52,-04:29,NST -1924-05-05T02:30:52,-03:29,NDT -1924-10-27T01:30:52,-04:29,NST -1925-05-04T02:30:52,-03:29,NDT -1925-10-26T01:30:52,-04:29,NST -1926-05-03T02:30:52,-03:29,NDT -1926-11-01T01:30:52,-04:29,NST -1927-05-02T02:30:52,-03:29,NDT -1927-10-31T01:30:52,-04:29,NST -1928-05-07T02:30:52,-03:29,NDT -1928-10-29T01:30:52,-04:29,NST -1929-05-06T02:30:52,-03:29,NDT -1929-10-28T01:30:52,-04:29,NST -1930-05-05T02:30:52,-03:29,NDT -1930-10-27T01:30:52,-04:29,NST -1931-05-04T02:30:52,-03:29,NDT -1931-10-26T01:30:52,-04:29,NST -1932-05-02T02:30:52,-03:29,NDT -1932-10-31T01:30:52,-04:29,NST -1933-05-08T02:30:52,-03:29,NDT -1933-10-30T01:30:52,-04:29,NST -1934-05-07T02:30:52,-03:29,NDT -1934-10-29T01:30:52,-04:29,NST -1935-03-30T03:30:52,-04:30,NST -1935-05-06T02:30:00,-03:30,NDT -1935-10-28T01:30:00,-04:30,NST -1936-05-11T03:30:00,-03:30,NDT -1936-10-05T02:30:00,-04:30,NST -1937-05-10T03:30:00,-03:30,NDT -1937-10-04T02:30:00,-04:30,NST -1938-05-09T03:30:00,-03:30,NDT -1938-10-03T02:30:00,-04:30,NST -1939-05-15T03:30:00,-03:30,NDT -1939-10-02T02:30:00,-04:30,NST -1940-05-13T03:30:00,-03:30,NDT -1940-10-07T02:30:00,-04:30,NST -1941-05-12T03:30:00,-03:30,NDT -1941-10-06T02:30:00,-04:30,NST -1942-05-11T03:30:00,-03:30,NWT -1945-08-14T23:00:00,-03:30,NPT -1945-09-30T04:30:00,-04:30,NST -1946-05-12T05:30:00,-03:30,NDT -1946-10-06T04:30:00,-04:30,NST -1947-05-11T05:30:00,-03:30,NDT -1947-10-05T04:30:00,-04:30,NST -1948-05-09T05:30:00,-03:30,NDT -1948-10-03T04:30:00,-04:30,NST -1949-05-08T05:30:00,-03:30,NDT -1949-10-02T04:30:00,-04:30,NST -1950-05-14T05:30:00,-03:30,NDT -1950-10-08T04:30:00,-04:30,NST -1951-04-29T05:30:00,-03:30,NDT -1951-09-30T04:30:00,-04:30,NST -1952-04-27T05:30:00,-03:30,NDT -1952-09-28T04:30:00,-04:30,NST -1953-04-26T05:30:00,-03:30,NDT -1953-09-27T04:30:00,-04:30,NST -1954-04-25T05:30:00,-03:30,NDT -1954-09-26T04:30:00,-04:30,NST -1955-04-24T05:30:00,-03:30,NDT -1955-09-25T04:30:00,-04:30,NST -1956-04-29T05:30:00,-03:30,NDT -1956-09-30T04:30:00,-04:30,NST -1957-04-28T05:30:00,-03:30,NDT -1957-09-29T04:30:00,-04:30,NST -1958-04-27T05:30:00,-03:30,NDT -1958-09-28T04:30:00,-04:30,NST -1959-04-26T05:30:00,-03:30,NDT -1959-09-27T04:30:00,-04:30,NST -1960-04-24T05:30:00,-03:30,NDT -1960-10-30T04:30:00,-04:30,NST -1961-04-30T05:30:00,-03:30,NDT -1961-10-29T04:30:00,-04:30,NST -1962-04-29T05:30:00,-03:30,NDT -1962-10-28T04:30:00,-04:30,NST -1963-04-28T05:30:00,-03:30,NDT -1963-10-27T04:30:00,-04:30,NST -1964-04-26T05:30:00,-03:30,NDT -1964-10-25T04:30:00,-04:30,NST -1965-04-25T05:30:00,-03:30,NDT -1965-10-31T04:30:00,-04:30,NST -1966-04-24T05:30:00,-03:30,NDT -1966-10-30T04:30:00,-04:30,NST -1967-04-30T05:30:00,-03:30,NDT -1967-10-29T04:30:00,-04:30,NST -1968-04-28T05:30:00,-03:30,NDT -1968-10-27T04:30:00,-04:30,NST -1969-04-27T05:30:00,-03:30,NDT -1969-10-26T04:30:00,-04:30,NST -1970-04-26T05:30:00,-03:30,NDT -1970-10-25T04:30:00,-04:30,NST -1971-04-25T05:30:00,-03:30,NDT -1971-10-31T04:30:00,-04:30,NST -1972-04-30T05:30:00,-03:30,NDT -1972-10-29T04:30:00,-04:30,NST -1973-04-29T05:30:00,-03:30,NDT -1973-10-28T04:30:00,-04:30,NST -1974-04-28T05:30:00,-03:30,NDT -1974-10-27T04:30:00,-04:30,NST -1975-04-27T05:30:00,-03:30,NDT -1975-10-26T04:30:00,-04:30,NST -1976-04-25T05:30:00,-03:30,NDT -1976-10-31T04:30:00,-04:30,NST -1977-04-24T05:30:00,-03:30,NDT -1977-10-30T04:30:00,-04:30,NST -1978-04-30T05:30:00,-03:30,NDT -1978-10-29T04:30:00,-04:30,NST -1979-04-29T05:30:00,-03:30,NDT -1979-10-28T04:30:00,-04:30,NST -1980-04-27T05:30:00,-03:30,NDT -1980-10-26T04:30:00,-04:30,NST -1981-04-26T05:30:00,-03:30,NDT -1981-10-25T04:30:00,-04:30,NST -1982-04-25T05:30:00,-03:30,NDT -1982-10-31T04:30:00,-04:30,NST -1983-04-24T05:30:00,-03:30,NDT -1983-10-30T04:30:00,-04:30,NST -1984-04-29T05:30:00,-03:30,NDT -1984-10-28T04:30:00,-04:30,NST -1985-04-28T05:30:00,-03:30,NDT -1985-10-27T04:30:00,-04:30,NST -1986-04-27T05:30:00,-03:30,NDT -1986-10-26T04:30:00,-04:30,NST -1987-04-05T03:31:00,-03:30,NDT -1987-10-25T02:31:00,-04:30,NST -1988-04-03T03:31:00,-02:30,NDDT -1988-10-30T01:31:00,-04:30,NST -1989-04-02T03:31:00,-03:30,NDT -1989-10-29T02:31:00,-04:30,NST -1990-04-01T03:31:00,-03:30,NDT -1990-10-28T02:31:00,-04:30,NST -1991-04-07T03:31:00,-03:30,NDT -1991-10-27T02:31:00,-04:30,NST -1992-04-05T03:31:00,-03:30,NDT -1992-10-25T02:31:00,-04:30,NST -1993-04-04T03:31:00,-03:30,NDT -1993-10-31T02:31:00,-04:30,NST -1994-04-03T03:31:00,-03:30,NDT -1994-10-30T02:31:00,-04:30,NST -1995-04-02T03:31:00,-03:30,NDT -1995-10-29T02:31:00,-04:30,NST -1996-04-07T03:31:00,-03:30,NDT -1996-10-27T02:31:00,-04:30,NST -1997-04-06T03:31:00,-03:30,NDT -1997-10-26T02:31:00,-04:30,NST -1998-04-05T03:31:00,-03:30,NDT -1998-10-25T02:31:00,-04:30,NST -1999-04-04T03:31:00,-03:30,NDT -1999-10-31T02:31:00,-04:30,NST -2000-04-02T03:31:00,-03:30,NDT -2000-10-29T02:31:00,-04:30,NST -2001-04-01T03:31:00,-03:30,NDT -2001-10-28T02:31:00,-04:30,NST -2002-04-07T03:31:00,-03:30,NDT -2002-10-27T02:31:00,-04:30,NST -2003-04-06T03:31:00,-03:30,NDT -2003-10-26T02:31:00,-04:30,NST -2004-04-04T03:31:00,-03:30,NDT -2004-10-31T02:31:00,-04:30,NST -2005-04-03T03:31:00,-03:30,NDT -2005-10-30T02:31:00,-04:30,NST -2006-04-02T03:31:00,-03:30,NDT -2006-10-29T02:31:00,-04:30,NST -2007-03-11T03:31:00,-03:30,NDT -2007-11-04T02:31:00,-04:30,NST -2008-03-09T03:31:00,-03:30,NDT -2008-11-02T02:31:00,-04:30,NST -2009-03-08T03:31:00,-03:30,NDT -2009-11-01T02:31:00,-04:30,NST -2010-03-14T03:31:00,-03:30,NDT -2010-11-07T02:31:00,-04:30,NST -2011-03-13T03:31:00,-03:30,NDT -2011-11-06T04:30:00,-04:30,NST -2012-03-11T05:30:00,-03:30,NDT -2012-11-04T04:30:00,-04:30,NST -2013-03-10T05:30:00,-03:30,NDT -2013-11-03T04:30:00,-04:30,NST -2014-03-09T05:30:00,-03:30,NDT -2014-11-02T04:30:00,-04:30,NST -2015-03-08T05:30:00,-03:30,NDT -2015-11-01T04:30:00,-04:30,NST -2016-03-13T05:30:00,-03:30,NDT -2016-11-06T04:30:00,-04:30,NST -2017-03-12T05:30:00,-03:30,NDT -2017-11-05T04:30:00,-04:30,NST -2018-03-11T05:30:00,-03:30,NDT -2018-11-04T04:30:00,-04:30,NST -2019-03-10T05:30:00,-03:30,NDT -2019-11-03T04:30:00,-04:30,NST -2020-03-08T05:30:00,-03:30,NDT -2020-11-01T04:30:00,-04:30,NST -2021-03-14T05:30:00,-03:30,NDT -2021-11-07T04:30:00,-04:30,NST -2022-03-13T05:30:00,-03:30,NDT -2022-11-06T04:30:00,-04:30,NST -2023-03-12T05:30:00,-03:30,NDT -2023-11-05T04:30:00,-04:30,NST -2024-03-10T05:30:00,-03:30,NDT -2024-11-03T04:30:00,-04:30,NST -2025-03-09T05:30:00,-03:30,NDT -2025-11-02T04:30:00,-04:30,NST -2026-03-08T05:30:00,-03:30,NDT -2026-11-01T04:30:00,-04:30,NST -2027-03-14T05:30:00,-03:30,NDT -2027-11-07T04:30:00,-04:30,NST -2028-03-12T05:30:00,-03:30,NDT -2028-11-05T04:30:00,-04:30,NST -2029-03-11T05:30:00,-03:30,NDT -2029-11-04T04:30:00,-04:30,NST -2030-03-10T05:30:00,-03:30,NDT -2030-11-03T04:30:00,-04:30,NST -2031-03-09T05:30:00,-03:30,NDT -2031-11-02T04:30:00,-04:30,NST -2032-03-14T05:30:00,-03:30,NDT -2032-11-07T04:30:00,-04:30,NST -2033-03-13T05:30:00,-03:30,NDT -2033-11-06T04:30:00,-04:30,NST -2034-03-12T05:30:00,-03:30,NDT -2034-11-05T04:30:00,-04:30,NST -2035-03-11T05:30:00,-03:30,NDT -2035-11-04T04:30:00,-04:30,NST -2036-03-09T05:30:00,-03:30,NDT -2036-11-02T04:30:00,-04:30,NST -2037-03-08T05:30:00,-03:30,NDT -2037-11-01T04:30:00,-04:30,NST -''' diff --git a/desk/lib/pytz/america-st-kitts.hoon b/desk/lib/pytz/america-st-kitts.hoon deleted file mode 100644 index 15a3438..0000000 --- a/desk/lib/pytz/america-st-kitts.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-03-02T04:10:52,-04:00,AST -''' diff --git a/desk/lib/pytz/america-st-lucia.hoon b/desk/lib/pytz/america-st-lucia.hoon deleted file mode 100644 index 34f4257..0000000 --- a/desk/lib/pytz/america-st-lucia.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:56,CMT -1912-01-01T04:04:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-st-thomas.hoon b/desk/lib/pytz/america-st-thomas.hoon deleted file mode 100644 index ba6e03e..0000000 --- a/desk/lib/pytz/america-st-thomas.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-07-01T04:19:44,-04:00,AST -''' diff --git a/desk/lib/pytz/america-st-vincent.hoon b/desk/lib/pytz/america-st-vincent.hoon deleted file mode 100644 index 521548d..0000000 --- a/desk/lib/pytz/america-st-vincent.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:55,KMT -1912-01-01T04:04:56,-04:00,AST -''' diff --git a/desk/lib/pytz/america-swift-current.hoon b/desk/lib/pytz/america-swift-current.hoon deleted file mode 100644 index 6ef539d..0000000 --- a/desk/lib/pytz/america-swift-current.hoon +++ /dev/null @@ -1,27 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1905-09-01T07:11:20,-07:00,MST -1918-04-14T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1946-04-28T09:00:00,-06:00,MDT -1946-10-13T08:00:00,-07:00,MST -1947-04-27T09:00:00,-06:00,MDT -1947-09-28T08:00:00,-07:00,MST -1948-04-25T09:00:00,-06:00,MDT -1948-09-26T08:00:00,-07:00,MST -1949-04-24T09:00:00,-06:00,MDT -1949-09-25T08:00:00,-07:00,MST -1957-04-28T09:00:00,-06:00,MDT -1957-10-27T08:00:00,-07:00,MST -1959-04-26T09:00:00,-06:00,MDT -1959-10-25T08:00:00,-07:00,MST -1960-04-24T09:00:00,-06:00,MDT -1960-09-25T08:00:00,-07:00,MST -1961-04-30T09:00:00,-06:00,MDT -1961-09-24T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-tegucigalpa.hoon b/desk/lib/pytz/america-tegucigalpa.hoon deleted file mode 100644 index 8cbc52e..0000000 --- a/desk/lib/pytz/america-tegucigalpa.hoon +++ /dev/null @@ -1,11 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1921-04-01T05:48:52,-06:00,CST -1987-05-03T06:00:00,-05:00,CDT -1987-09-27T05:00:00,-06:00,CST -1988-05-01T06:00:00,-05:00,CDT -1988-09-25T05:00:00,-06:00,CST -2006-05-07T06:00:00,-05:00,CDT -2006-08-07T05:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-thule.hoon b/desk/lib/pytz/america-thule.hoon deleted file mode 100644 index d3222a0..0000000 --- a/desk/lib/pytz/america-thule.hoon +++ /dev/null @@ -1,99 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1916-07-28T04:35:08,-04:00,AST -1991-03-31T06:00:00,-03:00,ADT -1991-09-29T05:00:00,-04:00,AST -1992-03-29T06:00:00,-03:00,ADT -1992-09-27T05:00:00,-04:00,AST -1993-04-04T06:00:00,-03:00,ADT -1993-10-31T05:00:00,-04:00,AST -1994-04-03T06:00:00,-03:00,ADT -1994-10-30T05:00:00,-04:00,AST -1995-04-02T06:00:00,-03:00,ADT -1995-10-29T05:00:00,-04:00,AST -1996-04-07T06:00:00,-03:00,ADT -1996-10-27T05:00:00,-04:00,AST -1997-04-06T06:00:00,-03:00,ADT -1997-10-26T05:00:00,-04:00,AST -1998-04-05T06:00:00,-03:00,ADT -1998-10-25T05:00:00,-04:00,AST -1999-04-04T06:00:00,-03:00,ADT -1999-10-31T05:00:00,-04:00,AST -2000-04-02T06:00:00,-03:00,ADT -2000-10-29T05:00:00,-04:00,AST -2001-04-01T06:00:00,-03:00,ADT -2001-10-28T05:00:00,-04:00,AST -2002-04-07T06:00:00,-03:00,ADT -2002-10-27T05:00:00,-04:00,AST -2003-04-06T06:00:00,-03:00,ADT -2003-10-26T05:00:00,-04:00,AST -2004-04-04T06:00:00,-03:00,ADT -2004-10-31T05:00:00,-04:00,AST -2005-04-03T06:00:00,-03:00,ADT -2005-10-30T05:00:00,-04:00,AST -2006-04-02T06:00:00,-03:00,ADT -2006-10-29T05:00:00,-04:00,AST -2007-03-11T06:00:00,-03:00,ADT -2007-11-04T05:00:00,-04:00,AST -2008-03-09T06:00:00,-03:00,ADT -2008-11-02T05:00:00,-04:00,AST -2009-03-08T06:00:00,-03:00,ADT -2009-11-01T05:00:00,-04:00,AST -2010-03-14T06:00:00,-03:00,ADT -2010-11-07T05:00:00,-04:00,AST -2011-03-13T06:00:00,-03:00,ADT -2011-11-06T05:00:00,-04:00,AST -2012-03-11T06:00:00,-03:00,ADT -2012-11-04T05:00:00,-04:00,AST -2013-03-10T06:00:00,-03:00,ADT -2013-11-03T05:00:00,-04:00,AST -2014-03-09T06:00:00,-03:00,ADT -2014-11-02T05:00:00,-04:00,AST -2015-03-08T06:00:00,-03:00,ADT -2015-11-01T05:00:00,-04:00,AST -2016-03-13T06:00:00,-03:00,ADT -2016-11-06T05:00:00,-04:00,AST -2017-03-12T06:00:00,-03:00,ADT -2017-11-05T05:00:00,-04:00,AST -2018-03-11T06:00:00,-03:00,ADT -2018-11-04T05:00:00,-04:00,AST -2019-03-10T06:00:00,-03:00,ADT -2019-11-03T05:00:00,-04:00,AST -2020-03-08T06:00:00,-03:00,ADT -2020-11-01T05:00:00,-04:00,AST -2021-03-14T06:00:00,-03:00,ADT -2021-11-07T05:00:00,-04:00,AST -2022-03-13T06:00:00,-03:00,ADT -2022-11-06T05:00:00,-04:00,AST -2023-03-12T06:00:00,-03:00,ADT -2023-11-05T05:00:00,-04:00,AST -2024-03-10T06:00:00,-03:00,ADT -2024-11-03T05:00:00,-04:00,AST -2025-03-09T06:00:00,-03:00,ADT -2025-11-02T05:00:00,-04:00,AST -2026-03-08T06:00:00,-03:00,ADT -2026-11-01T05:00:00,-04:00,AST -2027-03-14T06:00:00,-03:00,ADT -2027-11-07T05:00:00,-04:00,AST -2028-03-12T06:00:00,-03:00,ADT -2028-11-05T05:00:00,-04:00,AST -2029-03-11T06:00:00,-03:00,ADT -2029-11-04T05:00:00,-04:00,AST -2030-03-10T06:00:00,-03:00,ADT -2030-11-03T05:00:00,-04:00,AST -2031-03-09T06:00:00,-03:00,ADT -2031-11-02T05:00:00,-04:00,AST -2032-03-14T06:00:00,-03:00,ADT -2032-11-07T05:00:00,-04:00,AST -2033-03-13T06:00:00,-03:00,ADT -2033-11-06T05:00:00,-04:00,AST -2034-03-12T06:00:00,-03:00,ADT -2034-11-05T05:00:00,-04:00,AST -2035-03-11T06:00:00,-03:00,ADT -2035-11-04T05:00:00,-04:00,AST -2036-03-09T06:00:00,-03:00,ADT -2036-11-02T05:00:00,-04:00,AST -2037-03-08T06:00:00,-03:00,ADT -2037-11-01T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/america-thunder-bay.hoon b/desk/lib/pytz/america-thunder-bay.hoon deleted file mode 100644 index 46b9654..0000000 --- a/desk/lib/pytz/america-thunder-bay.hoon +++ /dev/null @@ -1,237 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:00,EST -1918-04-14T07:00:00,-04:00,EDT -1918-10-27T06:00:00,-05:00,EST -1919-03-31T04:30:00,-04:00,EDT -1919-10-26T04:00:00,-05:00,EST -1920-05-02T07:00:00,-04:00,EDT -1920-09-26T04:00:00,-05:00,EST -1921-05-15T07:00:00,-04:00,EDT -1921-09-15T06:00:00,-05:00,EST -1922-05-14T07:00:00,-04:00,EDT -1922-09-17T06:00:00,-05:00,EST -1923-05-13T07:00:00,-04:00,EDT -1923-09-16T06:00:00,-05:00,EST -1924-05-04T07:00:00,-04:00,EDT -1924-09-21T06:00:00,-05:00,EST -1925-05-03T07:00:00,-04:00,EDT -1925-09-20T06:00:00,-05:00,EST -1926-05-02T07:00:00,-04:00,EDT -1926-09-19T06:00:00,-05:00,EST -1927-05-01T07:00:00,-04:00,EDT -1927-09-25T06:00:00,-05:00,EST -1928-04-29T07:00:00,-04:00,EDT -1928-09-30T06:00:00,-05:00,EST -1929-04-28T07:00:00,-04:00,EDT -1929-09-29T06:00:00,-05:00,EST -1930-04-27T07:00:00,-04:00,EDT -1930-09-28T06:00:00,-05:00,EST -1931-04-26T07:00:00,-04:00,EDT -1931-09-27T06:00:00,-05:00,EST -1932-05-01T07:00:00,-04:00,EDT -1932-09-25T06:00:00,-05:00,EST -1933-04-30T07:00:00,-04:00,EDT -1933-10-01T06:00:00,-05:00,EST -1934-04-29T07:00:00,-04:00,EDT -1934-09-30T06:00:00,-05:00,EST -1935-04-28T07:00:00,-04:00,EDT -1935-09-29T06:00:00,-05:00,EST -1936-04-26T07:00:00,-04:00,EDT -1936-09-27T06:00:00,-05:00,EST -1937-04-25T07:00:00,-04:00,EDT -1937-09-26T06:00:00,-05:00,EST -1938-04-24T07:00:00,-04:00,EDT -1938-09-25T06:00:00,-05:00,EST -1939-04-30T07:00:00,-04:00,EDT -1939-09-24T06:00:00,-05:00,EST -1940-04-28T07:00:00,-04:00,EDT -1942-02-09T07:00:00,-04:00,EWT -1945-08-14T23:00:00,-04:00,EPT -1945-09-30T06:00:00,-05:00,EST -1946-04-28T07:00:00,-04:00,EDT -1946-09-29T06:00:00,-05:00,EST -1947-04-27T07:00:00,-04:00,EDT -1947-09-28T06:00:00,-05:00,EST -1948-04-25T07:00:00,-04:00,EDT -1948-09-26T06:00:00,-05:00,EST -1949-04-24T07:00:00,-04:00,EDT -1949-11-27T06:00:00,-05:00,EST -1950-04-30T07:00:00,-04:00,EDT -1950-11-26T06:00:00,-05:00,EST -1951-04-29T07:00:00,-04:00,EDT -1951-09-30T06:00:00,-05:00,EST -1952-04-27T07:00:00,-04:00,EDT -1952-09-28T06:00:00,-05:00,EST -1953-04-26T07:00:00,-04:00,EDT -1953-09-27T06:00:00,-05:00,EST -1954-04-25T07:00:00,-04:00,EDT -1954-09-26T06:00:00,-05:00,EST -1955-04-24T07:00:00,-04:00,EDT -1955-09-25T06:00:00,-05:00,EST -1956-04-29T07:00:00,-04:00,EDT -1956-09-30T06:00:00,-05:00,EST -1957-04-28T07:00:00,-04:00,EDT -1957-10-27T06:00:00,-05:00,EST -1958-04-27T07:00:00,-04:00,EDT -1958-10-26T06:00:00,-05:00,EST -1959-04-26T07:00:00,-04:00,EDT -1959-10-25T06:00:00,-05:00,EST -1960-04-24T07:00:00,-04:00,EDT -1960-10-30T06:00:00,-05:00,EST -1961-04-30T07:00:00,-04:00,EDT -1961-10-29T06:00:00,-05:00,EST -1962-04-29T07:00:00,-04:00,EDT -1962-10-28T06:00:00,-05:00,EST -1963-04-28T07:00:00,-04:00,EDT -1963-10-27T06:00:00,-05:00,EST -1964-04-26T07:00:00,-04:00,EDT -1964-10-25T06:00:00,-05:00,EST -1965-04-25T07:00:00,-04:00,EDT -1965-10-31T06:00:00,-05:00,EST -1966-04-24T07:00:00,-04:00,EDT -1966-10-30T06:00:00,-05:00,EST -1967-04-30T07:00:00,-04:00,EDT -1967-10-29T06:00:00,-05:00,EST -1968-04-28T07:00:00,-04:00,EDT -1968-10-27T06:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -1971-04-25T07:00:00,-04:00,EDT -1971-10-31T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-04-28T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-04-27T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-05:00,EST -2000-04-02T07:00:00,-04:00,EDT -2000-10-29T06:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-tijuana.hoon b/desk/lib/pytz/america-tijuana.hoon deleted file mode 100644 index 4a7b5c2..0000000 --- a/desk/lib/pytz/america-tijuana.hoon +++ /dev/null @@ -1,159 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-01-01T07:00:00,-07:00,MST -1924-01-01T07:00:00,-08:00,PST -1927-06-10T08:00:00,-07:00,MST -1930-11-15T07:00:00,-08:00,PST -1931-04-01T08:00:00,-07:00,PDT -1931-09-30T07:00:00,-08:00,PST -1942-04-24T08:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-11-15T07:00:00,-08:00,PST -1948-04-05T08:00:00,-07:00,PDT -1949-01-14T07:00:00,-08:00,PST -1950-05-01T08:00:00,-07:00,PDT -1950-09-24T07:00:00,-08:00,PST -1951-04-29T10:00:00,-07:00,PDT -1951-09-30T09:00:00,-08:00,PST -1952-04-27T10:00:00,-07:00,PDT -1952-09-28T09:00:00,-08:00,PST -1954-04-25T09:00:00,-07:00,PDT -1954-09-26T09:00:00,-08:00,PST -1955-04-24T09:00:00,-07:00,PDT -1955-09-25T09:00:00,-08:00,PST -1956-04-29T09:00:00,-07:00,PDT -1956-09-30T09:00:00,-08:00,PST -1957-04-28T09:00:00,-07:00,PDT -1957-09-29T09:00:00,-08:00,PST -1958-04-27T09:00:00,-07:00,PDT -1958-09-28T09:00:00,-08:00,PST -1959-04-26T09:00:00,-07:00,PDT -1959-09-27T09:00:00,-08:00,PST -1960-04-24T09:00:00,-07:00,PDT -1960-09-25T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-07:00,PDT -1979-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-08:00,PST -1984-04-29T10:00:00,-07:00,PDT -1984-10-28T09:00:00,-08:00,PST -1985-04-28T10:00:00,-07:00,PDT -1985-10-27T09:00:00,-08:00,PST -1986-04-27T10:00:00,-07:00,PDT -1986-10-26T09:00:00,-08:00,PST -1987-04-05T10:00:00,-07:00,PDT -1987-10-25T09:00:00,-08:00,PST -1988-04-03T10:00:00,-07:00,PDT -1988-10-30T09:00:00,-08:00,PST -1989-04-02T10:00:00,-07:00,PDT -1989-10-29T09:00:00,-08:00,PST -1990-04-01T10:00:00,-07:00,PDT -1990-10-28T09:00:00,-08:00,PST -1991-04-07T10:00:00,-07:00,PDT -1991-10-27T09:00:00,-08:00,PST -1992-04-05T10:00:00,-07:00,PDT -1992-10-25T09:00:00,-08:00,PST -1993-04-04T10:00:00,-07:00,PDT -1993-10-31T09:00:00,-08:00,PST -1994-04-03T10:00:00,-07:00,PDT -1994-10-30T09:00:00,-08:00,PST -1995-04-02T10:00:00,-07:00,PDT -1995-10-29T09:00:00,-08:00,PST -1996-04-07T10:00:00,-07:00,PDT -1996-10-27T09:00:00,-08:00,PST -1997-04-06T10:00:00,-07:00,PDT -1997-10-26T09:00:00,-08:00,PST -1998-04-05T10:00:00,-07:00,PDT -1998-10-25T09:00:00,-08:00,PST -1999-04-04T10:00:00,-07:00,PDT -1999-10-31T09:00:00,-08:00,PST -2000-04-02T10:00:00,-07:00,PDT -2000-10-29T09:00:00,-08:00,PST -2001-04-01T10:00:00,-07:00,PDT -2001-10-28T09:00:00,-08:00,PST -2002-04-07T10:00:00,-07:00,PDT -2002-10-27T09:00:00,-08:00,PST -2003-04-06T10:00:00,-07:00,PDT -2003-10-26T09:00:00,-08:00,PST -2004-04-04T10:00:00,-07:00,PDT -2004-10-31T09:00:00,-08:00,PST -2005-04-03T10:00:00,-07:00,PDT -2005-10-30T09:00:00,-08:00,PST -2006-04-02T10:00:00,-07:00,PDT -2006-10-29T09:00:00,-08:00,PST -2007-04-01T10:00:00,-07:00,PDT -2007-10-28T09:00:00,-08:00,PST -2008-04-06T10:00:00,-07:00,PDT -2008-10-26T09:00:00,-08:00,PST -2009-04-05T10:00:00,-07:00,PDT -2009-10-25T09:00:00,-08:00,PST -2010-03-14T10:00:00,-07:00,PDT -2010-11-07T09:00:00,-08:00,PST -2011-03-13T10:00:00,-07:00,PDT -2011-11-06T09:00:00,-08:00,PST -2012-03-11T10:00:00,-07:00,PDT -2012-11-04T09:00:00,-08:00,PST -2013-03-10T10:00:00,-07:00,PDT -2013-11-03T09:00:00,-08:00,PST -2014-03-09T10:00:00,-07:00,PDT -2014-11-02T09:00:00,-08:00,PST -2015-03-08T10:00:00,-07:00,PDT -2015-11-01T09:00:00,-08:00,PST -2016-03-13T10:00:00,-07:00,PDT -2016-11-06T09:00:00,-08:00,PST -2017-03-12T10:00:00,-07:00,PDT -2017-11-05T09:00:00,-08:00,PST -2018-03-11T10:00:00,-07:00,PDT -2018-11-04T09:00:00,-08:00,PST -2019-03-10T10:00:00,-07:00,PDT -2019-11-03T09:00:00,-08:00,PST -2020-03-08T10:00:00,-07:00,PDT -2020-11-01T09:00:00,-08:00,PST -2021-03-14T10:00:00,-07:00,PDT -2021-11-07T09:00:00,-08:00,PST -2022-03-13T10:00:00,-07:00,PDT -2022-11-06T09:00:00,-08:00,PST -2023-03-12T10:00:00,-07:00,PDT -2023-11-05T09:00:00,-08:00,PST -2024-03-10T10:00:00,-07:00,PDT -2024-11-03T09:00:00,-08:00,PST -2025-03-09T10:00:00,-07:00,PDT -2025-11-02T09:00:00,-08:00,PST -2026-03-08T10:00:00,-07:00,PDT -2026-11-01T09:00:00,-08:00,PST -2027-03-14T10:00:00,-07:00,PDT -2027-11-07T09:00:00,-08:00,PST -2028-03-12T10:00:00,-07:00,PDT -2028-11-05T09:00:00,-08:00,PST -2029-03-11T10:00:00,-07:00,PDT -2029-11-04T09:00:00,-08:00,PST -2030-03-10T10:00:00,-07:00,PDT -2030-11-03T09:00:00,-08:00,PST -2031-03-09T10:00:00,-07:00,PDT -2031-11-02T09:00:00,-08:00,PST -2032-03-14T10:00:00,-07:00,PDT -2032-11-07T09:00:00,-08:00,PST -2033-03-13T10:00:00,-07:00,PDT -2033-11-06T09:00:00,-08:00,PST -2034-03-12T10:00:00,-07:00,PDT -2034-11-05T09:00:00,-08:00,PST -2035-03-11T10:00:00,-07:00,PDT -2035-11-04T09:00:00,-08:00,PST -2036-03-09T10:00:00,-07:00,PDT -2036-11-02T09:00:00,-08:00,PST -2037-03-08T10:00:00,-07:00,PDT -2037-11-01T09:00:00,-08:00,PST -''' diff --git a/desk/lib/pytz/america-toronto.hoon b/desk/lib/pytz/america-toronto.hoon deleted file mode 100644 index 46b9654..0000000 --- a/desk/lib/pytz/america-toronto.hoon +++ /dev/null @@ -1,237 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:00,EST -1918-04-14T07:00:00,-04:00,EDT -1918-10-27T06:00:00,-05:00,EST -1919-03-31T04:30:00,-04:00,EDT -1919-10-26T04:00:00,-05:00,EST -1920-05-02T07:00:00,-04:00,EDT -1920-09-26T04:00:00,-05:00,EST -1921-05-15T07:00:00,-04:00,EDT -1921-09-15T06:00:00,-05:00,EST -1922-05-14T07:00:00,-04:00,EDT -1922-09-17T06:00:00,-05:00,EST -1923-05-13T07:00:00,-04:00,EDT -1923-09-16T06:00:00,-05:00,EST -1924-05-04T07:00:00,-04:00,EDT -1924-09-21T06:00:00,-05:00,EST -1925-05-03T07:00:00,-04:00,EDT -1925-09-20T06:00:00,-05:00,EST -1926-05-02T07:00:00,-04:00,EDT -1926-09-19T06:00:00,-05:00,EST -1927-05-01T07:00:00,-04:00,EDT -1927-09-25T06:00:00,-05:00,EST -1928-04-29T07:00:00,-04:00,EDT -1928-09-30T06:00:00,-05:00,EST -1929-04-28T07:00:00,-04:00,EDT -1929-09-29T06:00:00,-05:00,EST -1930-04-27T07:00:00,-04:00,EDT -1930-09-28T06:00:00,-05:00,EST -1931-04-26T07:00:00,-04:00,EDT -1931-09-27T06:00:00,-05:00,EST -1932-05-01T07:00:00,-04:00,EDT -1932-09-25T06:00:00,-05:00,EST -1933-04-30T07:00:00,-04:00,EDT -1933-10-01T06:00:00,-05:00,EST -1934-04-29T07:00:00,-04:00,EDT -1934-09-30T06:00:00,-05:00,EST -1935-04-28T07:00:00,-04:00,EDT -1935-09-29T06:00:00,-05:00,EST -1936-04-26T07:00:00,-04:00,EDT -1936-09-27T06:00:00,-05:00,EST -1937-04-25T07:00:00,-04:00,EDT -1937-09-26T06:00:00,-05:00,EST -1938-04-24T07:00:00,-04:00,EDT -1938-09-25T06:00:00,-05:00,EST -1939-04-30T07:00:00,-04:00,EDT -1939-09-24T06:00:00,-05:00,EST -1940-04-28T07:00:00,-04:00,EDT -1942-02-09T07:00:00,-04:00,EWT -1945-08-14T23:00:00,-04:00,EPT -1945-09-30T06:00:00,-05:00,EST -1946-04-28T07:00:00,-04:00,EDT -1946-09-29T06:00:00,-05:00,EST -1947-04-27T07:00:00,-04:00,EDT -1947-09-28T06:00:00,-05:00,EST -1948-04-25T07:00:00,-04:00,EDT -1948-09-26T06:00:00,-05:00,EST -1949-04-24T07:00:00,-04:00,EDT -1949-11-27T06:00:00,-05:00,EST -1950-04-30T07:00:00,-04:00,EDT -1950-11-26T06:00:00,-05:00,EST -1951-04-29T07:00:00,-04:00,EDT -1951-09-30T06:00:00,-05:00,EST -1952-04-27T07:00:00,-04:00,EDT -1952-09-28T06:00:00,-05:00,EST -1953-04-26T07:00:00,-04:00,EDT -1953-09-27T06:00:00,-05:00,EST -1954-04-25T07:00:00,-04:00,EDT -1954-09-26T06:00:00,-05:00,EST -1955-04-24T07:00:00,-04:00,EDT -1955-09-25T06:00:00,-05:00,EST -1956-04-29T07:00:00,-04:00,EDT -1956-09-30T06:00:00,-05:00,EST -1957-04-28T07:00:00,-04:00,EDT -1957-10-27T06:00:00,-05:00,EST -1958-04-27T07:00:00,-04:00,EDT -1958-10-26T06:00:00,-05:00,EST -1959-04-26T07:00:00,-04:00,EDT -1959-10-25T06:00:00,-05:00,EST -1960-04-24T07:00:00,-04:00,EDT -1960-10-30T06:00:00,-05:00,EST -1961-04-30T07:00:00,-04:00,EDT -1961-10-29T06:00:00,-05:00,EST -1962-04-29T07:00:00,-04:00,EDT -1962-10-28T06:00:00,-05:00,EST -1963-04-28T07:00:00,-04:00,EDT -1963-10-27T06:00:00,-05:00,EST -1964-04-26T07:00:00,-04:00,EDT -1964-10-25T06:00:00,-05:00,EST -1965-04-25T07:00:00,-04:00,EDT -1965-10-31T06:00:00,-05:00,EST -1966-04-24T07:00:00,-04:00,EDT -1966-10-30T06:00:00,-05:00,EST -1967-04-30T07:00:00,-04:00,EDT -1967-10-29T06:00:00,-05:00,EST -1968-04-28T07:00:00,-04:00,EDT -1968-10-27T06:00:00,-05:00,EST -1969-04-27T07:00:00,-04:00,EDT -1969-10-26T06:00:00,-05:00,EST -1970-04-26T07:00:00,-04:00,EDT -1970-10-25T06:00:00,-05:00,EST -1971-04-25T07:00:00,-04:00,EDT -1971-10-31T06:00:00,-05:00,EST -1972-04-30T07:00:00,-04:00,EDT -1972-10-29T06:00:00,-05:00,EST -1973-04-29T07:00:00,-04:00,EDT -1973-10-28T06:00:00,-05:00,EST -1974-04-28T07:00:00,-04:00,EDT -1974-10-27T06:00:00,-05:00,EST -1975-04-27T07:00:00,-04:00,EDT -1975-10-26T06:00:00,-05:00,EST -1976-04-25T07:00:00,-04:00,EDT -1976-10-31T06:00:00,-05:00,EST -1977-04-24T07:00:00,-04:00,EDT -1977-10-30T06:00:00,-05:00,EST -1978-04-30T07:00:00,-04:00,EDT -1978-10-29T06:00:00,-05:00,EST -1979-04-29T07:00:00,-04:00,EDT -1979-10-28T06:00:00,-05:00,EST -1980-04-27T07:00:00,-04:00,EDT -1980-10-26T06:00:00,-05:00,EST -1981-04-26T07:00:00,-04:00,EDT -1981-10-25T06:00:00,-05:00,EST -1982-04-25T07:00:00,-04:00,EDT -1982-10-31T06:00:00,-05:00,EST -1983-04-24T07:00:00,-04:00,EDT -1983-10-30T06:00:00,-05:00,EST -1984-04-29T07:00:00,-04:00,EDT -1984-10-28T06:00:00,-05:00,EST -1985-04-28T07:00:00,-04:00,EDT -1985-10-27T06:00:00,-05:00,EST -1986-04-27T07:00:00,-04:00,EDT -1986-10-26T06:00:00,-05:00,EST -1987-04-05T07:00:00,-04:00,EDT -1987-10-25T06:00:00,-05:00,EST -1988-04-03T07:00:00,-04:00,EDT -1988-10-30T06:00:00,-05:00,EST -1989-04-02T07:00:00,-04:00,EDT -1989-10-29T06:00:00,-05:00,EST -1990-04-01T07:00:00,-04:00,EDT -1990-10-28T06:00:00,-05:00,EST -1991-04-07T07:00:00,-04:00,EDT -1991-10-27T06:00:00,-05:00,EST -1992-04-05T07:00:00,-04:00,EDT -1992-10-25T06:00:00,-05:00,EST -1993-04-04T07:00:00,-04:00,EDT -1993-10-31T06:00:00,-05:00,EST -1994-04-03T07:00:00,-04:00,EDT -1994-10-30T06:00:00,-05:00,EST -1995-04-02T07:00:00,-04:00,EDT -1995-10-29T06:00:00,-05:00,EST -1996-04-07T07:00:00,-04:00,EDT -1996-10-27T06:00:00,-05:00,EST -1997-04-06T07:00:00,-04:00,EDT -1997-10-26T06:00:00,-05:00,EST -1998-04-05T07:00:00,-04:00,EDT -1998-10-25T06:00:00,-05:00,EST -1999-04-04T07:00:00,-04:00,EDT -1999-10-31T06:00:00,-05:00,EST -2000-04-02T07:00:00,-04:00,EDT -2000-10-29T06:00:00,-05:00,EST -2001-04-01T07:00:00,-04:00,EDT -2001-10-28T06:00:00,-05:00,EST -2002-04-07T07:00:00,-04:00,EDT -2002-10-27T06:00:00,-05:00,EST -2003-04-06T07:00:00,-04:00,EDT -2003-10-26T06:00:00,-05:00,EST -2004-04-04T07:00:00,-04:00,EDT -2004-10-31T06:00:00,-05:00,EST -2005-04-03T07:00:00,-04:00,EDT -2005-10-30T06:00:00,-05:00,EST -2006-04-02T07:00:00,-04:00,EDT -2006-10-29T06:00:00,-05:00,EST -2007-03-11T07:00:00,-04:00,EDT -2007-11-04T06:00:00,-05:00,EST -2008-03-09T07:00:00,-04:00,EDT -2008-11-02T06:00:00,-05:00,EST -2009-03-08T07:00:00,-04:00,EDT -2009-11-01T06:00:00,-05:00,EST -2010-03-14T07:00:00,-04:00,EDT -2010-11-07T06:00:00,-05:00,EST -2011-03-13T07:00:00,-04:00,EDT -2011-11-06T06:00:00,-05:00,EST -2012-03-11T07:00:00,-04:00,EDT -2012-11-04T06:00:00,-05:00,EST -2013-03-10T07:00:00,-04:00,EDT -2013-11-03T06:00:00,-05:00,EST -2014-03-09T07:00:00,-04:00,EDT -2014-11-02T06:00:00,-05:00,EST -2015-03-08T07:00:00,-04:00,EDT -2015-11-01T06:00:00,-05:00,EST -2016-03-13T07:00:00,-04:00,EDT -2016-11-06T06:00:00,-05:00,EST -2017-03-12T07:00:00,-04:00,EDT -2017-11-05T06:00:00,-05:00,EST -2018-03-11T07:00:00,-04:00,EDT -2018-11-04T06:00:00,-05:00,EST -2019-03-10T07:00:00,-04:00,EDT -2019-11-03T06:00:00,-05:00,EST -2020-03-08T07:00:00,-04:00,EDT -2020-11-01T06:00:00,-05:00,EST -2021-03-14T07:00:00,-04:00,EDT -2021-11-07T06:00:00,-05:00,EST -2022-03-13T07:00:00,-04:00,EDT -2022-11-06T06:00:00,-05:00,EST -2023-03-12T07:00:00,-04:00,EDT -2023-11-05T06:00:00,-05:00,EST -2024-03-10T07:00:00,-04:00,EDT -2024-11-03T06:00:00,-05:00,EST -2025-03-09T07:00:00,-04:00,EDT -2025-11-02T06:00:00,-05:00,EST -2026-03-08T07:00:00,-04:00,EDT -2026-11-01T06:00:00,-05:00,EST -2027-03-14T07:00:00,-04:00,EDT -2027-11-07T06:00:00,-05:00,EST -2028-03-12T07:00:00,-04:00,EDT -2028-11-05T06:00:00,-05:00,EST -2029-03-11T07:00:00,-04:00,EDT -2029-11-04T06:00:00,-05:00,EST -2030-03-10T07:00:00,-04:00,EDT -2030-11-03T06:00:00,-05:00,EST -2031-03-09T07:00:00,-04:00,EDT -2031-11-02T06:00:00,-05:00,EST -2032-03-14T07:00:00,-04:00,EDT -2032-11-07T06:00:00,-05:00,EST -2033-03-13T07:00:00,-04:00,EDT -2033-11-06T06:00:00,-05:00,EST -2034-03-12T07:00:00,-04:00,EDT -2034-11-05T06:00:00,-05:00,EST -2035-03-11T07:00:00,-04:00,EDT -2035-11-04T06:00:00,-05:00,EST -2036-03-09T07:00:00,-04:00,EDT -2036-11-02T06:00:00,-05:00,EST -2037-03-08T07:00:00,-04:00,EDT -2037-11-01T06:00:00,-05:00,EST -''' diff --git a/desk/lib/pytz/america-tortola.hoon b/desk/lib/pytz/america-tortola.hoon deleted file mode 100644 index 4306a09..0000000 --- a/desk/lib/pytz/america-tortola.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-07-01T04:18:28,-04:00,AST -''' diff --git a/desk/lib/pytz/america-vancouver.hoon b/desk/lib/pytz/america-vancouver.hoon deleted file mode 100644 index 2011976..0000000 --- a/desk/lib/pytz/america-vancouver.hoon +++ /dev/null @@ -1,194 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-08:00,PST -1918-04-14T10:00:00,-07:00,PDT -1918-10-27T09:00:00,-08:00,PST -1942-02-09T10:00:00,-07:00,PWT -1945-08-14T23:00:00,-07:00,PPT -1945-09-30T09:00:00,-08:00,PST -1946-04-28T10:00:00,-07:00,PDT -1946-09-29T09:00:00,-08:00,PST -1947-04-27T10:00:00,-07:00,PDT -1947-09-28T09:00:00,-08:00,PST -1948-04-25T10:00:00,-07:00,PDT -1948-09-26T09:00:00,-08:00,PST -1949-04-24T10:00:00,-07:00,PDT -1949-09-25T09:00:00,-08:00,PST -1950-04-30T10:00:00,-07:00,PDT -1950-09-24T09:00:00,-08:00,PST -1951-04-29T10:00:00,-07:00,PDT -1951-09-30T09:00:00,-08:00,PST -1952-04-27T10:00:00,-07:00,PDT -1952-09-28T09:00:00,-08:00,PST -1953-04-26T10:00:00,-07:00,PDT -1953-09-27T09:00:00,-08:00,PST -1954-04-25T10:00:00,-07:00,PDT -1954-09-26T09:00:00,-08:00,PST -1955-04-24T10:00:00,-07:00,PDT -1955-09-25T09:00:00,-08:00,PST -1956-04-29T10:00:00,-07:00,PDT -1956-09-30T09:00:00,-08:00,PST -1957-04-28T10:00:00,-07:00,PDT -1957-09-29T09:00:00,-08:00,PST -1958-04-27T10:00:00,-07:00,PDT -1958-09-28T09:00:00,-08:00,PST -1959-04-26T10:00:00,-07:00,PDT -1959-09-27T09:00:00,-08:00,PST -1960-04-24T10:00:00,-07:00,PDT -1960-09-25T09:00:00,-08:00,PST -1961-04-30T10:00:00,-07:00,PDT -1961-09-24T09:00:00,-08:00,PST -1962-04-29T10:00:00,-07:00,PDT -1962-10-28T09:00:00,-08:00,PST -1963-04-28T10:00:00,-07:00,PDT -1963-10-27T09:00:00,-08:00,PST -1964-04-26T10:00:00,-07:00,PDT -1964-10-25T09:00:00,-08:00,PST -1965-04-25T10:00:00,-07:00,PDT -1965-10-31T09:00:00,-08:00,PST -1966-04-24T10:00:00,-07:00,PDT -1966-10-30T09:00:00,-08:00,PST -1967-04-30T10:00:00,-07:00,PDT -1967-10-29T09:00:00,-08:00,PST -1968-04-28T10:00:00,-07:00,PDT -1968-10-27T09:00:00,-08:00,PST -1969-04-27T10:00:00,-07:00,PDT -1969-10-26T09:00:00,-08:00,PST -1970-04-26T10:00:00,-07:00,PDT -1970-10-25T09:00:00,-08:00,PST -1971-04-25T10:00:00,-07:00,PDT -1971-10-31T09:00:00,-08:00,PST -1972-04-30T10:00:00,-07:00,PDT -1972-10-29T09:00:00,-08:00,PST -1973-04-29T10:00:00,-07:00,PDT -1973-10-28T09:00:00,-08:00,PST -1974-04-28T10:00:00,-07:00,PDT -1974-10-27T09:00:00,-08:00,PST -1975-04-27T10:00:00,-07:00,PDT -1975-10-26T09:00:00,-08:00,PST -1976-04-25T10:00:00,-07:00,PDT -1976-10-31T09:00:00,-08:00,PST -1977-04-24T10:00:00,-07:00,PDT -1977-10-30T09:00:00,-08:00,PST -1978-04-30T10:00:00,-07:00,PDT -1978-10-29T09:00:00,-08:00,PST -1979-04-29T10:00:00,-07:00,PDT -1979-10-28T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-08:00,PST -1984-04-29T10:00:00,-07:00,PDT -1984-10-28T09:00:00,-08:00,PST -1985-04-28T10:00:00,-07:00,PDT -1985-10-27T09:00:00,-08:00,PST -1986-04-27T10:00:00,-07:00,PDT -1986-10-26T09:00:00,-08:00,PST -1987-04-05T10:00:00,-07:00,PDT -1987-10-25T09:00:00,-08:00,PST -1988-04-03T10:00:00,-07:00,PDT -1988-10-30T09:00:00,-08:00,PST -1989-04-02T10:00:00,-07:00,PDT -1989-10-29T09:00:00,-08:00,PST -1990-04-01T10:00:00,-07:00,PDT -1990-10-28T09:00:00,-08:00,PST -1991-04-07T10:00:00,-07:00,PDT -1991-10-27T09:00:00,-08:00,PST -1992-04-05T10:00:00,-07:00,PDT -1992-10-25T09:00:00,-08:00,PST -1993-04-04T10:00:00,-07:00,PDT -1993-10-31T09:00:00,-08:00,PST -1994-04-03T10:00:00,-07:00,PDT -1994-10-30T09:00:00,-08:00,PST -1995-04-02T10:00:00,-07:00,PDT -1995-10-29T09:00:00,-08:00,PST -1996-04-07T10:00:00,-07:00,PDT -1996-10-27T09:00:00,-08:00,PST -1997-04-06T10:00:00,-07:00,PDT -1997-10-26T09:00:00,-08:00,PST -1998-04-05T10:00:00,-07:00,PDT -1998-10-25T09:00:00,-08:00,PST -1999-04-04T10:00:00,-07:00,PDT -1999-10-31T09:00:00,-08:00,PST -2000-04-02T10:00:00,-07:00,PDT -2000-10-29T09:00:00,-08:00,PST -2001-04-01T10:00:00,-07:00,PDT -2001-10-28T09:00:00,-08:00,PST -2002-04-07T10:00:00,-07:00,PDT -2002-10-27T09:00:00,-08:00,PST -2003-04-06T10:00:00,-07:00,PDT -2003-10-26T09:00:00,-08:00,PST -2004-04-04T10:00:00,-07:00,PDT -2004-10-31T09:00:00,-08:00,PST -2005-04-03T10:00:00,-07:00,PDT -2005-10-30T09:00:00,-08:00,PST -2006-04-02T10:00:00,-07:00,PDT -2006-10-29T09:00:00,-08:00,PST -2007-03-11T10:00:00,-07:00,PDT -2007-11-04T09:00:00,-08:00,PST -2008-03-09T10:00:00,-07:00,PDT -2008-11-02T09:00:00,-08:00,PST -2009-03-08T10:00:00,-07:00,PDT -2009-11-01T09:00:00,-08:00,PST -2010-03-14T10:00:00,-07:00,PDT -2010-11-07T09:00:00,-08:00,PST -2011-03-13T10:00:00,-07:00,PDT -2011-11-06T09:00:00,-08:00,PST -2012-03-11T10:00:00,-07:00,PDT -2012-11-04T09:00:00,-08:00,PST -2013-03-10T10:00:00,-07:00,PDT -2013-11-03T09:00:00,-08:00,PST -2014-03-09T10:00:00,-07:00,PDT -2014-11-02T09:00:00,-08:00,PST -2015-03-08T10:00:00,-07:00,PDT -2015-11-01T09:00:00,-08:00,PST -2016-03-13T10:00:00,-07:00,PDT -2016-11-06T09:00:00,-08:00,PST -2017-03-12T10:00:00,-07:00,PDT -2017-11-05T09:00:00,-08:00,PST -2018-03-11T10:00:00,-07:00,PDT -2018-11-04T09:00:00,-08:00,PST -2019-03-10T10:00:00,-07:00,PDT -2019-11-03T09:00:00,-08:00,PST -2020-03-08T10:00:00,-07:00,PDT -2020-11-01T09:00:00,-08:00,PST -2021-03-14T10:00:00,-07:00,PDT -2021-11-07T09:00:00,-08:00,PST -2022-03-13T10:00:00,-07:00,PDT -2022-11-06T09:00:00,-08:00,PST -2023-03-12T10:00:00,-07:00,PDT -2023-11-05T09:00:00,-08:00,PST -2024-03-10T10:00:00,-07:00,PDT -2024-11-03T09:00:00,-08:00,PST -2025-03-09T10:00:00,-07:00,PDT -2025-11-02T09:00:00,-08:00,PST -2026-03-08T10:00:00,-07:00,PDT -2026-11-01T09:00:00,-08:00,PST -2027-03-14T10:00:00,-07:00,PDT -2027-11-07T09:00:00,-08:00,PST -2028-03-12T10:00:00,-07:00,PDT -2028-11-05T09:00:00,-08:00,PST -2029-03-11T10:00:00,-07:00,PDT -2029-11-04T09:00:00,-08:00,PST -2030-03-10T10:00:00,-07:00,PDT -2030-11-03T09:00:00,-08:00,PST -2031-03-09T10:00:00,-07:00,PDT -2031-11-02T09:00:00,-08:00,PST -2032-03-14T10:00:00,-07:00,PDT -2032-11-07T09:00:00,-08:00,PST -2033-03-13T10:00:00,-07:00,PDT -2033-11-06T09:00:00,-08:00,PST -2034-03-12T10:00:00,-07:00,PDT -2034-11-05T09:00:00,-08:00,PST -2035-03-11T10:00:00,-07:00,PDT -2035-11-04T09:00:00,-08:00,PST -2036-03-09T10:00:00,-07:00,PDT -2036-11-02T09:00:00,-08:00,PST -2037-03-08T10:00:00,-07:00,PDT -2037-11-01T09:00:00,-08:00,PST -''' diff --git a/desk/lib/pytz/america-virgin.hoon b/desk/lib/pytz/america-virgin.hoon deleted file mode 100644 index ba6e03e..0000000 --- a/desk/lib/pytz/america-virgin.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1911-07-01T04:19:44,-04:00,AST -''' diff --git a/desk/lib/pytz/america-whitehorse.hoon b/desk/lib/pytz/america-whitehorse.hoon deleted file mode 100644 index 32e1985..0000000 --- a/desk/lib/pytz/america-whitehorse.hoon +++ /dev/null @@ -1,97 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-09:00,YST -1918-04-14T11:00:00,-08:00,YDT -1918-10-27T10:00:00,-09:00,YST -1919-05-25T11:00:00,-08:00,YDT -1919-11-01T08:00:00,-09:00,YST -1942-02-09T11:00:00,-08:00,YWT -1945-08-14T23:00:00,-08:00,YPT -1945-09-30T10:00:00,-09:00,YST -1965-04-25T09:00:00,-07:00,YDDT -1965-10-31T09:00:00,-09:00,YST -1966-02-27T09:00:00,-08:00,PST -1980-04-27T10:00:00,-07:00,PDT -1980-10-26T09:00:00,-08:00,PST -1981-04-26T10:00:00,-07:00,PDT -1981-10-25T09:00:00,-08:00,PST -1982-04-25T10:00:00,-07:00,PDT -1982-10-31T09:00:00,-08:00,PST -1983-04-24T10:00:00,-07:00,PDT -1983-10-30T09:00:00,-08:00,PST -1984-04-29T10:00:00,-07:00,PDT -1984-10-28T09:00:00,-08:00,PST -1985-04-28T10:00:00,-07:00,PDT -1985-10-27T09:00:00,-08:00,PST -1986-04-27T10:00:00,-07:00,PDT -1986-10-26T09:00:00,-08:00,PST -1987-04-05T10:00:00,-07:00,PDT -1987-10-25T09:00:00,-08:00,PST -1988-04-03T10:00:00,-07:00,PDT -1988-10-30T09:00:00,-08:00,PST -1989-04-02T10:00:00,-07:00,PDT -1989-10-29T09:00:00,-08:00,PST -1990-04-01T10:00:00,-07:00,PDT -1990-10-28T09:00:00,-08:00,PST -1991-04-07T10:00:00,-07:00,PDT -1991-10-27T09:00:00,-08:00,PST -1992-04-05T10:00:00,-07:00,PDT -1992-10-25T09:00:00,-08:00,PST -1993-04-04T10:00:00,-07:00,PDT -1993-10-31T09:00:00,-08:00,PST -1994-04-03T10:00:00,-07:00,PDT -1994-10-30T09:00:00,-08:00,PST -1995-04-02T10:00:00,-07:00,PDT -1995-10-29T09:00:00,-08:00,PST -1996-04-07T10:00:00,-07:00,PDT -1996-10-27T09:00:00,-08:00,PST -1997-04-06T10:00:00,-07:00,PDT -1997-10-26T09:00:00,-08:00,PST -1998-04-05T10:00:00,-07:00,PDT -1998-10-25T09:00:00,-08:00,PST -1999-04-04T10:00:00,-07:00,PDT -1999-10-31T09:00:00,-08:00,PST -2000-04-02T10:00:00,-07:00,PDT -2000-10-29T09:00:00,-08:00,PST -2001-04-01T10:00:00,-07:00,PDT -2001-10-28T09:00:00,-08:00,PST -2002-04-07T10:00:00,-07:00,PDT -2002-10-27T09:00:00,-08:00,PST -2003-04-06T10:00:00,-07:00,PDT -2003-10-26T09:00:00,-08:00,PST -2004-04-04T10:00:00,-07:00,PDT -2004-10-31T09:00:00,-08:00,PST -2005-04-03T10:00:00,-07:00,PDT -2005-10-30T09:00:00,-08:00,PST -2006-04-02T10:00:00,-07:00,PDT -2006-10-29T09:00:00,-08:00,PST -2007-03-11T10:00:00,-07:00,PDT -2007-11-04T09:00:00,-08:00,PST -2008-03-09T10:00:00,-07:00,PDT -2008-11-02T09:00:00,-08:00,PST -2009-03-08T10:00:00,-07:00,PDT -2009-11-01T09:00:00,-08:00,PST -2010-03-14T10:00:00,-07:00,PDT -2010-11-07T09:00:00,-08:00,PST -2011-03-13T10:00:00,-07:00,PDT -2011-11-06T09:00:00,-08:00,PST -2012-03-11T10:00:00,-07:00,PDT -2012-11-04T09:00:00,-08:00,PST -2013-03-10T10:00:00,-07:00,PDT -2013-11-03T09:00:00,-08:00,PST -2014-03-09T10:00:00,-07:00,PDT -2014-11-02T09:00:00,-08:00,PST -2015-03-08T10:00:00,-07:00,PDT -2015-11-01T09:00:00,-08:00,PST -2016-03-13T10:00:00,-07:00,PDT -2016-11-06T09:00:00,-08:00,PST -2017-03-12T10:00:00,-07:00,PDT -2017-11-05T09:00:00,-08:00,PST -2018-03-11T10:00:00,-07:00,PDT -2018-11-04T09:00:00,-08:00,PST -2019-03-10T10:00:00,-07:00,PDT -2019-11-03T09:00:00,-08:00,PST -2020-03-08T10:00:00,-07:00,PDT -2020-11-01T07:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/america-winnipeg.hoon b/desk/lib/pytz/america-winnipeg.hoon deleted file mode 100644 index 6a86193..0000000 --- a/desk/lib/pytz/america-winnipeg.hoon +++ /dev/null @@ -1,190 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-06:00,CST -1916-04-23T06:00:00,-05:00,CDT -1916-09-17T05:00:00,-06:00,CST -1918-04-14T08:00:00,-05:00,CDT -1918-10-27T07:00:00,-06:00,CST -1937-05-16T08:00:00,-05:00,CDT -1937-09-26T07:00:00,-06:00,CST -1942-02-09T08:00:00,-05:00,CWT -1945-08-14T23:00:00,-05:00,CPT -1945-09-30T07:00:00,-06:00,CST -1946-05-12T08:00:00,-05:00,CDT -1946-10-13T07:00:00,-06:00,CST -1947-04-27T08:00:00,-05:00,CDT -1947-09-28T07:00:00,-06:00,CST -1948-04-25T08:00:00,-05:00,CDT -1948-09-26T07:00:00,-06:00,CST -1949-04-24T08:00:00,-05:00,CDT -1949-09-25T07:00:00,-06:00,CST -1950-05-01T08:00:00,-05:00,CDT -1950-09-30T07:00:00,-06:00,CST -1951-04-29T08:00:00,-05:00,CDT -1951-09-30T07:00:00,-06:00,CST -1952-04-27T08:00:00,-05:00,CDT -1952-09-28T07:00:00,-06:00,CST -1953-04-26T08:00:00,-05:00,CDT -1953-09-27T07:00:00,-06:00,CST -1954-04-25T08:00:00,-05:00,CDT -1954-09-26T07:00:00,-06:00,CST -1955-04-24T08:00:00,-05:00,CDT -1955-09-25T07:00:00,-06:00,CST -1956-04-29T08:00:00,-05:00,CDT -1956-09-30T07:00:00,-06:00,CST -1957-04-28T08:00:00,-05:00,CDT -1957-09-29T07:00:00,-06:00,CST -1958-04-27T08:00:00,-05:00,CDT -1958-09-28T07:00:00,-06:00,CST -1959-04-26T08:00:00,-05:00,CDT -1959-10-25T07:00:00,-06:00,CST -1960-04-24T08:00:00,-05:00,CDT -1960-09-25T07:00:00,-06:00,CST -1963-04-28T08:00:00,-05:00,CDT -1963-09-22T07:00:00,-06:00,CST -1966-04-24T08:00:00,-05:00,CDT -1966-10-30T08:00:00,-06:00,CST -1967-04-30T08:00:00,-05:00,CDT -1967-10-29T08:00:00,-06:00,CST -1968-04-28T08:00:00,-05:00,CDT -1968-10-27T08:00:00,-06:00,CST -1969-04-27T08:00:00,-05:00,CDT -1969-10-26T08:00:00,-06:00,CST -1970-04-26T08:00:00,-05:00,CDT -1970-10-25T08:00:00,-06:00,CST -1971-04-25T08:00:00,-05:00,CDT -1971-10-31T08:00:00,-06:00,CST -1972-04-30T08:00:00,-05:00,CDT -1972-10-29T08:00:00,-06:00,CST -1973-04-29T08:00:00,-05:00,CDT -1973-10-28T08:00:00,-06:00,CST -1974-04-28T08:00:00,-05:00,CDT -1974-10-27T08:00:00,-06:00,CST -1975-04-27T08:00:00,-05:00,CDT -1975-10-26T08:00:00,-06:00,CST -1976-04-25T08:00:00,-05:00,CDT -1976-10-31T08:00:00,-06:00,CST -1977-04-24T08:00:00,-05:00,CDT -1977-10-30T08:00:00,-06:00,CST -1978-04-30T08:00:00,-05:00,CDT -1978-10-29T08:00:00,-06:00,CST -1979-04-29T08:00:00,-05:00,CDT -1979-10-28T08:00:00,-06:00,CST -1980-04-27T08:00:00,-05:00,CDT -1980-10-26T08:00:00,-06:00,CST -1981-04-26T08:00:00,-05:00,CDT -1981-10-25T08:00:00,-06:00,CST -1982-04-25T08:00:00,-05:00,CDT -1982-10-31T08:00:00,-06:00,CST -1983-04-24T08:00:00,-05:00,CDT -1983-10-30T08:00:00,-06:00,CST -1984-04-29T08:00:00,-05:00,CDT -1984-10-28T08:00:00,-06:00,CST -1985-04-28T08:00:00,-05:00,CDT -1985-10-27T08:00:00,-06:00,CST -1986-04-27T08:00:00,-05:00,CDT -1986-10-26T08:00:00,-06:00,CST -1987-04-05T08:00:00,-05:00,CDT -1987-10-25T08:00:00,-06:00,CST -1988-04-03T08:00:00,-05:00,CDT -1988-10-30T08:00:00,-06:00,CST -1989-04-02T08:00:00,-05:00,CDT -1989-10-29T08:00:00,-06:00,CST -1990-04-01T08:00:00,-05:00,CDT -1990-10-28T08:00:00,-06:00,CST -1991-04-07T08:00:00,-05:00,CDT -1991-10-27T08:00:00,-06:00,CST -1992-04-05T08:00:00,-05:00,CDT -1992-10-25T08:00:00,-06:00,CST -1993-04-04T08:00:00,-05:00,CDT -1993-10-31T08:00:00,-06:00,CST -1994-04-03T08:00:00,-05:00,CDT -1994-10-30T08:00:00,-06:00,CST -1995-04-02T08:00:00,-05:00,CDT -1995-10-29T08:00:00,-06:00,CST -1996-04-07T08:00:00,-05:00,CDT -1996-10-27T08:00:00,-06:00,CST -1997-04-06T08:00:00,-05:00,CDT -1997-10-26T08:00:00,-06:00,CST -1998-04-05T08:00:00,-05:00,CDT -1998-10-25T08:00:00,-06:00,CST -1999-04-04T08:00:00,-05:00,CDT -1999-10-31T08:00:00,-06:00,CST -2000-04-02T08:00:00,-05:00,CDT -2000-10-29T08:00:00,-06:00,CST -2001-04-01T08:00:00,-05:00,CDT -2001-10-28T08:00:00,-06:00,CST -2002-04-07T08:00:00,-05:00,CDT -2002-10-27T08:00:00,-06:00,CST -2003-04-06T08:00:00,-05:00,CDT -2003-10-26T08:00:00,-06:00,CST -2004-04-04T08:00:00,-05:00,CDT -2004-10-31T08:00:00,-06:00,CST -2005-04-03T08:00:00,-05:00,CDT -2005-10-30T08:00:00,-06:00,CST -2006-04-02T08:00:00,-05:00,CDT -2006-10-29T07:00:00,-06:00,CST -2007-03-11T08:00:00,-05:00,CDT -2007-11-04T07:00:00,-06:00,CST -2008-03-09T08:00:00,-05:00,CDT -2008-11-02T07:00:00,-06:00,CST -2009-03-08T08:00:00,-05:00,CDT -2009-11-01T07:00:00,-06:00,CST -2010-03-14T08:00:00,-05:00,CDT -2010-11-07T07:00:00,-06:00,CST -2011-03-13T08:00:00,-05:00,CDT -2011-11-06T07:00:00,-06:00,CST -2012-03-11T08:00:00,-05:00,CDT -2012-11-04T07:00:00,-06:00,CST -2013-03-10T08:00:00,-05:00,CDT -2013-11-03T07:00:00,-06:00,CST -2014-03-09T08:00:00,-05:00,CDT -2014-11-02T07:00:00,-06:00,CST -2015-03-08T08:00:00,-05:00,CDT -2015-11-01T07:00:00,-06:00,CST -2016-03-13T08:00:00,-05:00,CDT -2016-11-06T07:00:00,-06:00,CST -2017-03-12T08:00:00,-05:00,CDT -2017-11-05T07:00:00,-06:00,CST -2018-03-11T08:00:00,-05:00,CDT -2018-11-04T07:00:00,-06:00,CST -2019-03-10T08:00:00,-05:00,CDT -2019-11-03T07:00:00,-06:00,CST -2020-03-08T08:00:00,-05:00,CDT -2020-11-01T07:00:00,-06:00,CST -2021-03-14T08:00:00,-05:00,CDT -2021-11-07T07:00:00,-06:00,CST -2022-03-13T08:00:00,-05:00,CDT -2022-11-06T07:00:00,-06:00,CST -2023-03-12T08:00:00,-05:00,CDT -2023-11-05T07:00:00,-06:00,CST -2024-03-10T08:00:00,-05:00,CDT -2024-11-03T07:00:00,-06:00,CST -2025-03-09T08:00:00,-05:00,CDT -2025-11-02T07:00:00,-06:00,CST -2026-03-08T08:00:00,-05:00,CDT -2026-11-01T07:00:00,-06:00,CST -2027-03-14T08:00:00,-05:00,CDT -2027-11-07T07:00:00,-06:00,CST -2028-03-12T08:00:00,-05:00,CDT -2028-11-05T07:00:00,-06:00,CST -2029-03-11T08:00:00,-05:00,CDT -2029-11-04T07:00:00,-06:00,CST -2030-03-10T08:00:00,-05:00,CDT -2030-11-03T07:00:00,-06:00,CST -2031-03-09T08:00:00,-05:00,CDT -2031-11-02T07:00:00,-06:00,CST -2032-03-14T08:00:00,-05:00,CDT -2032-11-07T07:00:00,-06:00,CST -2033-03-13T08:00:00,-05:00,CDT -2033-11-06T07:00:00,-06:00,CST -2034-03-12T08:00:00,-05:00,CDT -2034-11-05T07:00:00,-06:00,CST -2035-03-11T08:00:00,-05:00,CDT -2035-11-04T07:00:00,-06:00,CST -2036-03-09T08:00:00,-05:00,CDT -2036-11-02T07:00:00,-06:00,CST -2037-03-08T08:00:00,-05:00,CDT -2037-11-01T07:00:00,-06:00,CST -''' diff --git a/desk/lib/pytz/america-yakutat.hoon b/desk/lib/pytz/america-yakutat.hoon deleted file mode 100644 index 14647aa..0000000 --- a/desk/lib/pytz/america-yakutat.hoon +++ /dev/null @@ -1,148 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+14:41,LMT -1901-12-13T20:45:52,-09:00,YST -1942-02-09T11:00:00,-08:00,YWT -1945-08-14T23:00:00,-08:00,YPT -1945-09-30T10:00:00,-09:00,YST -1969-04-27T11:00:00,-08:00,YDT -1969-10-26T10:00:00,-09:00,YST -1970-04-26T11:00:00,-08:00,YDT -1970-10-25T10:00:00,-09:00,YST -1971-04-25T11:00:00,-08:00,YDT -1971-10-31T10:00:00,-09:00,YST -1972-04-30T11:00:00,-08:00,YDT -1972-10-29T10:00:00,-09:00,YST -1973-04-29T11:00:00,-08:00,YDT -1973-10-28T10:00:00,-09:00,YST -1974-01-06T11:00:00,-08:00,YDT -1974-10-27T10:00:00,-09:00,YST -1975-02-23T11:00:00,-08:00,YDT -1975-10-26T10:00:00,-09:00,YST -1976-04-25T11:00:00,-08:00,YDT -1976-10-31T10:00:00,-09:00,YST -1977-04-24T11:00:00,-08:00,YDT -1977-10-30T10:00:00,-09:00,YST -1978-04-30T11:00:00,-08:00,YDT -1978-10-29T10:00:00,-09:00,YST -1979-04-29T11:00:00,-08:00,YDT -1979-10-28T10:00:00,-09:00,YST -1980-04-27T11:00:00,-08:00,YDT -1980-10-26T10:00:00,-09:00,YST -1981-04-26T11:00:00,-08:00,YDT -1981-10-25T10:00:00,-09:00,YST -1982-04-25T11:00:00,-08:00,YDT -1982-10-31T10:00:00,-09:00,YST -1983-04-24T11:00:00,-08:00,YDT -1983-10-30T10:00:00,-09:00,YST -1983-11-30T09:00:00,-09:00,AKST -1984-04-29T11:00:00,-08:00,AKDT -1984-10-28T10:00:00,-09:00,AKST -1985-04-28T11:00:00,-08:00,AKDT -1985-10-27T10:00:00,-09:00,AKST -1986-04-27T11:00:00,-08:00,AKDT -1986-10-26T10:00:00,-09:00,AKST -1987-04-05T11:00:00,-08:00,AKDT -1987-10-25T10:00:00,-09:00,AKST -1988-04-03T11:00:00,-08:00,AKDT -1988-10-30T10:00:00,-09:00,AKST -1989-04-02T11:00:00,-08:00,AKDT -1989-10-29T10:00:00,-09:00,AKST -1990-04-01T11:00:00,-08:00,AKDT -1990-10-28T10:00:00,-09:00,AKST -1991-04-07T11:00:00,-08:00,AKDT -1991-10-27T10:00:00,-09:00,AKST -1992-04-05T11:00:00,-08:00,AKDT -1992-10-25T10:00:00,-09:00,AKST -1993-04-04T11:00:00,-08:00,AKDT -1993-10-31T10:00:00,-09:00,AKST -1994-04-03T11:00:00,-08:00,AKDT -1994-10-30T10:00:00,-09:00,AKST -1995-04-02T11:00:00,-08:00,AKDT -1995-10-29T10:00:00,-09:00,AKST -1996-04-07T11:00:00,-08:00,AKDT -1996-10-27T10:00:00,-09:00,AKST -1997-04-06T11:00:00,-08:00,AKDT -1997-10-26T10:00:00,-09:00,AKST -1998-04-05T11:00:00,-08:00,AKDT -1998-10-25T10:00:00,-09:00,AKST -1999-04-04T11:00:00,-08:00,AKDT -1999-10-31T10:00:00,-09:00,AKST -2000-04-02T11:00:00,-08:00,AKDT -2000-10-29T10:00:00,-09:00,AKST -2001-04-01T11:00:00,-08:00,AKDT -2001-10-28T10:00:00,-09:00,AKST -2002-04-07T11:00:00,-08:00,AKDT -2002-10-27T10:00:00,-09:00,AKST -2003-04-06T11:00:00,-08:00,AKDT -2003-10-26T10:00:00,-09:00,AKST -2004-04-04T11:00:00,-08:00,AKDT -2004-10-31T10:00:00,-09:00,AKST -2005-04-03T11:00:00,-08:00,AKDT -2005-10-30T10:00:00,-09:00,AKST -2006-04-02T11:00:00,-08:00,AKDT -2006-10-29T10:00:00,-09:00,AKST -2007-03-11T11:00:00,-08:00,AKDT -2007-11-04T10:00:00,-09:00,AKST -2008-03-09T11:00:00,-08:00,AKDT -2008-11-02T10:00:00,-09:00,AKST -2009-03-08T11:00:00,-08:00,AKDT -2009-11-01T10:00:00,-09:00,AKST -2010-03-14T11:00:00,-08:00,AKDT -2010-11-07T10:00:00,-09:00,AKST -2011-03-13T11:00:00,-08:00,AKDT -2011-11-06T10:00:00,-09:00,AKST -2012-03-11T11:00:00,-08:00,AKDT -2012-11-04T10:00:00,-09:00,AKST -2013-03-10T11:00:00,-08:00,AKDT -2013-11-03T10:00:00,-09:00,AKST -2014-03-09T11:00:00,-08:00,AKDT -2014-11-02T10:00:00,-09:00,AKST -2015-03-08T11:00:00,-08:00,AKDT -2015-11-01T10:00:00,-09:00,AKST -2016-03-13T11:00:00,-08:00,AKDT -2016-11-06T10:00:00,-09:00,AKST -2017-03-12T11:00:00,-08:00,AKDT -2017-11-05T10:00:00,-09:00,AKST -2018-03-11T11:00:00,-08:00,AKDT -2018-11-04T10:00:00,-09:00,AKST -2019-03-10T11:00:00,-08:00,AKDT -2019-11-03T10:00:00,-09:00,AKST -2020-03-08T11:00:00,-08:00,AKDT -2020-11-01T10:00:00,-09:00,AKST -2021-03-14T11:00:00,-08:00,AKDT -2021-11-07T10:00:00,-09:00,AKST -2022-03-13T11:00:00,-08:00,AKDT -2022-11-06T10:00:00,-09:00,AKST -2023-03-12T11:00:00,-08:00,AKDT -2023-11-05T10:00:00,-09:00,AKST -2024-03-10T11:00:00,-08:00,AKDT -2024-11-03T10:00:00,-09:00,AKST -2025-03-09T11:00:00,-08:00,AKDT -2025-11-02T10:00:00,-09:00,AKST -2026-03-08T11:00:00,-08:00,AKDT -2026-11-01T10:00:00,-09:00,AKST -2027-03-14T11:00:00,-08:00,AKDT -2027-11-07T10:00:00,-09:00,AKST -2028-03-12T11:00:00,-08:00,AKDT -2028-11-05T10:00:00,-09:00,AKST -2029-03-11T11:00:00,-08:00,AKDT -2029-11-04T10:00:00,-09:00,AKST -2030-03-10T11:00:00,-08:00,AKDT -2030-11-03T10:00:00,-09:00,AKST -2031-03-09T11:00:00,-08:00,AKDT -2031-11-02T10:00:00,-09:00,AKST -2032-03-14T11:00:00,-08:00,AKDT -2032-11-07T10:00:00,-09:00,AKST -2033-03-13T11:00:00,-08:00,AKDT -2033-11-06T10:00:00,-09:00,AKST -2034-03-12T11:00:00,-08:00,AKDT -2034-11-05T10:00:00,-09:00,AKST -2035-03-11T11:00:00,-08:00,AKDT -2035-11-04T10:00:00,-09:00,AKST -2036-03-09T11:00:00,-08:00,AKDT -2036-11-02T10:00:00,-09:00,AKST -2037-03-08T11:00:00,-08:00,AKDT -2037-11-01T10:00:00,-09:00,AKST -''' diff --git a/desk/lib/pytz/america-yellowknife.hoon b/desk/lib/pytz/america-yellowknife.hoon deleted file mode 100644 index 575b3c2..0000000 --- a/desk/lib/pytz/america-yellowknife.hoon +++ /dev/null @@ -1,154 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1906-09-01T07:33:52,-07:00,MST -1918-04-14T09:00:00,-06:00,MDT -1918-10-27T08:00:00,-07:00,MST -1919-04-13T09:00:00,-06:00,MDT -1919-05-27T08:00:00,-07:00,MST -1920-04-25T09:00:00,-06:00,MDT -1920-10-31T08:00:00,-07:00,MST -1921-04-24T09:00:00,-06:00,MDT -1921-09-25T08:00:00,-07:00,MST -1922-04-30T09:00:00,-06:00,MDT -1922-09-24T08:00:00,-07:00,MST -1923-04-29T09:00:00,-06:00,MDT -1923-09-30T08:00:00,-07:00,MST -1942-02-09T09:00:00,-06:00,MWT -1945-08-14T23:00:00,-06:00,MPT -1945-09-30T08:00:00,-07:00,MST -1947-04-27T09:00:00,-06:00,MDT -1947-09-28T08:00:00,-07:00,MST -1972-04-30T09:00:00,-06:00,MDT -1972-10-29T08:00:00,-07:00,MST -1973-04-29T09:00:00,-06:00,MDT -1973-10-28T08:00:00,-07:00,MST -1974-04-28T09:00:00,-06:00,MDT -1974-10-27T08:00:00,-07:00,MST -1975-04-27T09:00:00,-06:00,MDT -1975-10-26T08:00:00,-07:00,MST -1976-04-25T09:00:00,-06:00,MDT -1976-10-31T08:00:00,-07:00,MST -1977-04-24T09:00:00,-06:00,MDT -1977-10-30T08:00:00,-07:00,MST -1978-04-30T09:00:00,-06:00,MDT -1978-10-29T08:00:00,-07:00,MST -1979-04-29T09:00:00,-06:00,MDT -1979-10-28T08:00:00,-07:00,MST -1980-04-27T09:00:00,-06:00,MDT -1980-10-26T08:00:00,-07:00,MST -1981-04-26T09:00:00,-06:00,MDT -1981-10-25T08:00:00,-07:00,MST -1982-04-25T09:00:00,-06:00,MDT -1982-10-31T08:00:00,-07:00,MST -1983-04-24T09:00:00,-06:00,MDT -1983-10-30T08:00:00,-07:00,MST -1984-04-29T09:00:00,-06:00,MDT -1984-10-28T08:00:00,-07:00,MST -1985-04-28T09:00:00,-06:00,MDT -1985-10-27T08:00:00,-07:00,MST -1986-04-27T09:00:00,-06:00,MDT -1986-10-26T08:00:00,-07:00,MST -1987-04-05T09:00:00,-06:00,MDT -1987-10-25T08:00:00,-07:00,MST -1988-04-03T09:00:00,-06:00,MDT -1988-10-30T08:00:00,-07:00,MST -1989-04-02T09:00:00,-06:00,MDT -1989-10-29T08:00:00,-07:00,MST -1990-04-01T09:00:00,-06:00,MDT -1990-10-28T08:00:00,-07:00,MST -1991-04-07T09:00:00,-06:00,MDT -1991-10-27T08:00:00,-07:00,MST -1992-04-05T09:00:00,-06:00,MDT -1992-10-25T08:00:00,-07:00,MST -1993-04-04T09:00:00,-06:00,MDT -1993-10-31T08:00:00,-07:00,MST -1994-04-03T09:00:00,-06:00,MDT -1994-10-30T08:00:00,-07:00,MST -1995-04-02T09:00:00,-06:00,MDT -1995-10-29T08:00:00,-07:00,MST -1996-04-07T09:00:00,-06:00,MDT -1996-10-27T08:00:00,-07:00,MST -1997-04-06T09:00:00,-06:00,MDT -1997-10-26T08:00:00,-07:00,MST -1998-04-05T09:00:00,-06:00,MDT -1998-10-25T08:00:00,-07:00,MST -1999-04-04T09:00:00,-06:00,MDT -1999-10-31T08:00:00,-07:00,MST -2000-04-02T09:00:00,-06:00,MDT -2000-10-29T08:00:00,-07:00,MST -2001-04-01T09:00:00,-06:00,MDT -2001-10-28T08:00:00,-07:00,MST -2002-04-07T09:00:00,-06:00,MDT -2002-10-27T08:00:00,-07:00,MST -2003-04-06T09:00:00,-06:00,MDT -2003-10-26T08:00:00,-07:00,MST -2004-04-04T09:00:00,-06:00,MDT -2004-10-31T08:00:00,-07:00,MST -2005-04-03T09:00:00,-06:00,MDT -2005-10-30T08:00:00,-07:00,MST -2006-04-02T09:00:00,-06:00,MDT -2006-10-29T08:00:00,-07:00,MST -2007-03-11T09:00:00,-06:00,MDT -2007-11-04T08:00:00,-07:00,MST -2008-03-09T09:00:00,-06:00,MDT -2008-11-02T08:00:00,-07:00,MST -2009-03-08T09:00:00,-06:00,MDT -2009-11-01T08:00:00,-07:00,MST -2010-03-14T09:00:00,-06:00,MDT -2010-11-07T08:00:00,-07:00,MST -2011-03-13T09:00:00,-06:00,MDT -2011-11-06T08:00:00,-07:00,MST -2012-03-11T09:00:00,-06:00,MDT -2012-11-04T08:00:00,-07:00,MST -2013-03-10T09:00:00,-06:00,MDT -2013-11-03T08:00:00,-07:00,MST -2014-03-09T09:00:00,-06:00,MDT -2014-11-02T08:00:00,-07:00,MST -2015-03-08T09:00:00,-06:00,MDT -2015-11-01T08:00:00,-07:00,MST -2016-03-13T09:00:00,-06:00,MDT -2016-11-06T08:00:00,-07:00,MST -2017-03-12T09:00:00,-06:00,MDT -2017-11-05T08:00:00,-07:00,MST -2018-03-11T09:00:00,-06:00,MDT -2018-11-04T08:00:00,-07:00,MST -2019-03-10T09:00:00,-06:00,MDT -2019-11-03T08:00:00,-07:00,MST -2020-03-08T09:00:00,-06:00,MDT -2020-11-01T08:00:00,-07:00,MST -2021-03-14T09:00:00,-06:00,MDT -2021-11-07T08:00:00,-07:00,MST -2022-03-13T09:00:00,-06:00,MDT -2022-11-06T08:00:00,-07:00,MST -2023-03-12T09:00:00,-06:00,MDT -2023-11-05T08:00:00,-07:00,MST -2024-03-10T09:00:00,-06:00,MDT -2024-11-03T08:00:00,-07:00,MST -2025-03-09T09:00:00,-06:00,MDT -2025-11-02T08:00:00,-07:00,MST -2026-03-08T09:00:00,-06:00,MDT -2026-11-01T08:00:00,-07:00,MST -2027-03-14T09:00:00,-06:00,MDT -2027-11-07T08:00:00,-07:00,MST -2028-03-12T09:00:00,-06:00,MDT -2028-11-05T08:00:00,-07:00,MST -2029-03-11T09:00:00,-06:00,MDT -2029-11-04T08:00:00,-07:00,MST -2030-03-10T09:00:00,-06:00,MDT -2030-11-03T08:00:00,-07:00,MST -2031-03-09T09:00:00,-06:00,MDT -2031-11-02T08:00:00,-07:00,MST -2032-03-14T09:00:00,-06:00,MDT -2032-11-07T08:00:00,-07:00,MST -2033-03-13T09:00:00,-06:00,MDT -2033-11-06T08:00:00,-07:00,MST -2034-03-12T09:00:00,-06:00,MDT -2034-11-05T08:00:00,-07:00,MST -2035-03-11T09:00:00,-06:00,MDT -2035-11-04T08:00:00,-07:00,MST -2036-03-09T09:00:00,-06:00,MDT -2036-11-02T08:00:00,-07:00,MST -2037-03-08T09:00:00,-06:00,MDT -2037-11-01T08:00:00,-07:00,MST -''' diff --git a/desk/lib/pytz/antarctica-casey.hoon b/desk/lib/pytz/antarctica-casey.hoon deleted file mode 100644 index 33e6b38..0000000 --- a/desk/lib/pytz/antarctica-casey.hoon +++ /dev/null @@ -1,22 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1969-01-01T00:00:00,+08:00,+08 -2009-10-17T18:00:00,+11:00,+11 -2010-03-04T15:00:00,+08:00,+08 -2011-10-27T18:00:00,+11:00,+11 -2012-02-21T17:00:00,+08:00,+08 -2016-10-21T16:00:00,+11:00,+11 -2018-03-10T17:00:00,+08:00,+08 -2018-10-06T20:00:00,+11:00,+11 -2019-03-16T16:00:00,+08:00,+08 -2019-10-03T19:00:00,+11:00,+11 -2020-03-07T16:00:00,+08:00,+08 -2020-10-03T16:01:00,+11:00,+11 -2021-03-13T13:00:00,+08:00,+08 -2021-10-02T16:01:00,+11:00,+11 -2022-03-12T13:00:00,+08:00,+08 -2022-10-01T16:01:00,+11:00,+11 -2023-03-08T16:00:00,+08:00,+08 -''' diff --git a/desk/lib/pytz/antarctica-davis.hoon b/desk/lib/pytz/antarctica-davis.hoon deleted file mode 100644 index b357e52..0000000 --- a/desk/lib/pytz/antarctica-davis.hoon +++ /dev/null @@ -1,12 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1957-01-13T00:00:00,+07:00,+07 -1964-10-31T17:00:00,+00:00,-00 -1969-02-01T00:00:00,+07:00,+07 -2009-10-17T19:00:00,+05:00,+05 -2010-03-10T20:00:00,+07:00,+07 -2011-10-27T19:00:00,+05:00,+05 -2012-02-21T20:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/antarctica-dumontdurville.hoon b/desk/lib/pytz/antarctica-dumontdurville.hoon deleted file mode 100644 index 318fdb5..0000000 --- a/desk/lib/pytz/antarctica-dumontdurville.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1947-01-01T00:00:00,+10:00,+10 -1952-01-13T14:00:00,+00:00,-00 -1956-11-01T00:00:00,+10:00,+10 -''' diff --git a/desk/lib/pytz/antarctica-macquarie.hoon b/desk/lib/pytz/antarctica-macquarie.hoon deleted file mode 100644 index cf909b0..0000000 --- a/desk/lib/pytz/antarctica-macquarie.hoon +++ /dev/null @@ -1,149 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1901-12-13T20:45:52,+10:00,AEST -1916-09-30T16:00:00,+11:00,AEDT -1917-03-24T16:00:00,+10:00,AEST -1919-03-31T14:00:00,+00:00,-00 -1948-03-25T00:00:00,+10:00,AEST -1967-09-30T16:00:00,+11:00,AEDT -1968-03-30T16:00:00,+10:00,AEST -1968-10-26T16:00:00,+11:00,AEDT -1969-03-08T16:00:00,+10:00,AEST -1969-10-25T16:00:00,+11:00,AEDT -1970-03-07T16:00:00,+10:00,AEST -1970-10-24T16:00:00,+11:00,AEDT -1971-03-13T16:00:00,+10:00,AEST -1971-10-30T16:00:00,+11:00,AEDT -1972-02-26T16:00:00,+10:00,AEST -1972-10-28T16:00:00,+11:00,AEDT -1973-03-03T16:00:00,+10:00,AEST -1973-10-27T16:00:00,+11:00,AEDT -1974-03-02T16:00:00,+10:00,AEST -1974-10-26T16:00:00,+11:00,AEDT -1975-03-01T16:00:00,+10:00,AEST -1975-10-25T16:00:00,+11:00,AEDT -1976-03-06T16:00:00,+10:00,AEST -1976-10-30T16:00:00,+11:00,AEDT -1977-03-05T16:00:00,+10:00,AEST -1977-10-29T16:00:00,+11:00,AEDT -1978-03-04T16:00:00,+10:00,AEST -1978-10-28T16:00:00,+11:00,AEDT -1979-03-03T16:00:00,+10:00,AEST -1979-10-27T16:00:00,+11:00,AEDT -1980-03-01T16:00:00,+10:00,AEST -1980-10-25T16:00:00,+11:00,AEDT -1981-02-28T16:00:00,+10:00,AEST -1981-10-24T16:00:00,+11:00,AEDT -1982-03-27T16:00:00,+10:00,AEST -1982-10-30T16:00:00,+11:00,AEDT -1983-03-26T16:00:00,+10:00,AEST -1983-10-29T16:00:00,+11:00,AEDT -1984-03-03T16:00:00,+10:00,AEST -1984-10-27T16:00:00,+11:00,AEDT -1985-03-02T16:00:00,+10:00,AEST -1985-10-26T16:00:00,+11:00,AEDT -1986-03-01T16:00:00,+10:00,AEST -1986-10-18T16:00:00,+11:00,AEDT -1987-03-14T16:00:00,+10:00,AEST -1987-10-24T16:00:00,+11:00,AEDT -1988-03-19T16:00:00,+10:00,AEST -1988-10-29T16:00:00,+11:00,AEDT -1989-03-18T16:00:00,+10:00,AEST -1989-10-28T16:00:00,+11:00,AEDT -1990-03-17T16:00:00,+10:00,AEST -1990-10-27T16:00:00,+11:00,AEDT -1991-03-30T16:00:00,+10:00,AEST -1991-10-05T16:00:00,+11:00,AEDT -1992-03-28T16:00:00,+10:00,AEST -1992-10-03T16:00:00,+11:00,AEDT -1993-03-27T16:00:00,+10:00,AEST -1993-10-02T16:00:00,+11:00,AEDT -1994-03-26T16:00:00,+10:00,AEST -1994-10-01T16:00:00,+11:00,AEDT -1995-03-25T16:00:00,+10:00,AEST -1995-09-30T16:00:00,+11:00,AEDT -1996-03-30T16:00:00,+10:00,AEST -1996-10-05T16:00:00,+11:00,AEDT -1997-03-29T16:00:00,+10:00,AEST -1997-10-04T16:00:00,+11:00,AEDT -1998-03-28T16:00:00,+10:00,AEST -1998-10-03T16:00:00,+11:00,AEDT -1999-03-27T16:00:00,+10:00,AEST -1999-10-02T16:00:00,+11:00,AEDT -2000-03-25T16:00:00,+10:00,AEST -2000-08-26T16:00:00,+11:00,AEDT -2001-03-24T16:00:00,+10:00,AEST -2001-10-06T16:00:00,+11:00,AEDT -2002-03-30T16:00:00,+10:00,AEST -2002-10-05T16:00:00,+11:00,AEDT -2003-03-29T16:00:00,+10:00,AEST -2003-10-04T16:00:00,+11:00,AEDT -2004-03-27T16:00:00,+10:00,AEST -2004-10-02T16:00:00,+11:00,AEDT -2005-03-26T16:00:00,+10:00,AEST -2005-10-01T16:00:00,+11:00,AEDT -2006-04-01T16:00:00,+10:00,AEST -2006-09-30T16:00:00,+11:00,AEDT -2007-03-24T16:00:00,+10:00,AEST -2007-10-06T16:00:00,+11:00,AEDT -2008-04-05T16:00:00,+10:00,AEST -2008-10-04T16:00:00,+11:00,AEDT -2009-04-04T16:00:00,+10:00,AEST -2009-10-03T16:00:00,+11:00,AEDT -2011-04-02T16:00:00,+10:00,AEST -2011-10-01T16:00:00,+11:00,AEDT -2012-03-31T16:00:00,+10:00,AEST -2012-10-06T16:00:00,+11:00,AEDT -2013-04-06T16:00:00,+10:00,AEST -2013-10-05T16:00:00,+11:00,AEDT -2014-04-05T16:00:00,+10:00,AEST -2014-10-04T16:00:00,+11:00,AEDT -2015-04-04T16:00:00,+10:00,AEST -2015-10-03T16:00:00,+11:00,AEDT -2016-04-02T16:00:00,+10:00,AEST -2016-10-01T16:00:00,+11:00,AEDT -2017-04-01T16:00:00,+10:00,AEST -2017-09-30T16:00:00,+11:00,AEDT -2018-03-31T16:00:00,+10:00,AEST -2018-10-06T16:00:00,+11:00,AEDT -2019-04-06T16:00:00,+10:00,AEST -2019-10-05T16:00:00,+11:00,AEDT -2020-04-04T16:00:00,+10:00,AEST -2020-10-03T16:00:00,+11:00,AEDT -2021-04-03T16:00:00,+10:00,AEST -2021-10-02T16:00:00,+11:00,AEDT -2022-04-02T16:00:00,+10:00,AEST -2022-10-01T16:00:00,+11:00,AEDT -2023-04-01T16:00:00,+10:00,AEST -2023-09-30T16:00:00,+11:00,AEDT -2024-04-06T16:00:00,+10:00,AEST -2024-10-05T16:00:00,+11:00,AEDT -2025-04-05T16:00:00,+10:00,AEST -2025-10-04T16:00:00,+11:00,AEDT -2026-04-04T16:00:00,+10:00,AEST -2026-10-03T16:00:00,+11:00,AEDT -2027-04-03T16:00:00,+10:00,AEST -2027-10-02T16:00:00,+11:00,AEDT -2028-04-01T16:00:00,+10:00,AEST -2028-09-30T16:00:00,+11:00,AEDT -2029-03-31T16:00:00,+10:00,AEST -2029-10-06T16:00:00,+11:00,AEDT -2030-04-06T16:00:00,+10:00,AEST -2030-10-05T16:00:00,+11:00,AEDT -2031-04-05T16:00:00,+10:00,AEST -2031-10-04T16:00:00,+11:00,AEDT -2032-04-03T16:00:00,+10:00,AEST -2032-10-02T16:00:00,+11:00,AEDT -2033-04-02T16:00:00,+10:00,AEST -2033-10-01T16:00:00,+11:00,AEDT -2034-04-01T16:00:00,+10:00,AEST -2034-09-30T16:00:00,+11:00,AEDT -2035-03-31T16:00:00,+10:00,AEST -2035-10-06T16:00:00,+11:00,AEDT -2036-04-05T16:00:00,+10:00,AEST -2036-10-04T16:00:00,+11:00,AEDT -2037-04-04T16:00:00,+10:00,AEST -2037-10-03T16:00:00,+11:00,AEDT -''' diff --git a/desk/lib/pytz/antarctica-mawson.hoon b/desk/lib/pytz/antarctica-mawson.hoon deleted file mode 100644 index b04b714..0000000 --- a/desk/lib/pytz/antarctica-mawson.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1954-02-13T00:00:00,+06:00,+06 -2009-10-17T20:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/antarctica-mcmurdo.hoon b/desk/lib/pytz/antarctica-mcmurdo.hoon deleted file mode 100644 index 5d496f3..0000000 --- a/desk/lib/pytz/antarctica-mcmurdo.hoon +++ /dev/null @@ -1,133 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1956-01-01T00:00:00,+12:00,NZST -1974-11-02T14:00:00,+13:00,NZDT -1975-02-22T14:00:00,+12:00,NZST -1975-10-25T14:00:00,+13:00,NZDT -1976-03-06T14:00:00,+12:00,NZST -1976-10-30T14:00:00,+13:00,NZDT -1977-03-05T14:00:00,+12:00,NZST -1977-10-29T14:00:00,+13:00,NZDT -1978-03-04T14:00:00,+12:00,NZST -1978-10-28T14:00:00,+13:00,NZDT -1979-03-03T14:00:00,+12:00,NZST -1979-10-27T14:00:00,+13:00,NZDT -1980-03-01T14:00:00,+12:00,NZST -1980-10-25T14:00:00,+13:00,NZDT -1981-02-28T14:00:00,+12:00,NZST -1981-10-24T14:00:00,+13:00,NZDT -1982-03-06T14:00:00,+12:00,NZST -1982-10-30T14:00:00,+13:00,NZDT -1983-03-05T14:00:00,+12:00,NZST -1983-10-29T14:00:00,+13:00,NZDT -1984-03-03T14:00:00,+12:00,NZST -1984-10-27T14:00:00,+13:00,NZDT -1985-03-02T14:00:00,+12:00,NZST -1985-10-26T14:00:00,+13:00,NZDT -1986-03-01T14:00:00,+12:00,NZST -1986-10-25T14:00:00,+13:00,NZDT -1987-02-28T14:00:00,+12:00,NZST -1987-10-24T14:00:00,+13:00,NZDT -1988-03-05T14:00:00,+12:00,NZST -1988-10-29T14:00:00,+13:00,NZDT -1989-03-04T14:00:00,+12:00,NZST -1989-10-07T14:00:00,+13:00,NZDT -1990-03-17T14:00:00,+12:00,NZST -1990-10-06T14:00:00,+13:00,NZDT -1991-03-16T14:00:00,+12:00,NZST -1991-10-05T14:00:00,+13:00,NZDT -1992-03-14T14:00:00,+12:00,NZST -1992-10-03T14:00:00,+13:00,NZDT -1993-03-20T14:00:00,+12:00,NZST -1993-10-02T14:00:00,+13:00,NZDT -1994-03-19T14:00:00,+12:00,NZST -1994-10-01T14:00:00,+13:00,NZDT -1995-03-18T14:00:00,+12:00,NZST -1995-09-30T14:00:00,+13:00,NZDT -1996-03-16T14:00:00,+12:00,NZST -1996-10-05T14:00:00,+13:00,NZDT -1997-03-15T14:00:00,+12:00,NZST -1997-10-04T14:00:00,+13:00,NZDT -1998-03-14T14:00:00,+12:00,NZST -1998-10-03T14:00:00,+13:00,NZDT -1999-03-20T14:00:00,+12:00,NZST -1999-10-02T14:00:00,+13:00,NZDT -2000-03-18T14:00:00,+12:00,NZST -2000-09-30T14:00:00,+13:00,NZDT -2001-03-17T14:00:00,+12:00,NZST -2001-10-06T14:00:00,+13:00,NZDT -2002-03-16T14:00:00,+12:00,NZST -2002-10-05T14:00:00,+13:00,NZDT -2003-03-15T14:00:00,+12:00,NZST -2003-10-04T14:00:00,+13:00,NZDT -2004-03-20T14:00:00,+12:00,NZST -2004-10-02T14:00:00,+13:00,NZDT -2005-03-19T14:00:00,+12:00,NZST -2005-10-01T14:00:00,+13:00,NZDT -2006-03-18T14:00:00,+12:00,NZST -2006-09-30T14:00:00,+13:00,NZDT -2007-03-17T14:00:00,+12:00,NZST -2007-09-29T14:00:00,+13:00,NZDT -2008-04-05T14:00:00,+12:00,NZST -2008-09-27T14:00:00,+13:00,NZDT -2009-04-04T14:00:00,+12:00,NZST -2009-09-26T14:00:00,+13:00,NZDT -2010-04-03T14:00:00,+12:00,NZST -2010-09-25T14:00:00,+13:00,NZDT -2011-04-02T14:00:00,+12:00,NZST -2011-09-24T14:00:00,+13:00,NZDT -2012-03-31T14:00:00,+12:00,NZST -2012-09-29T14:00:00,+13:00,NZDT -2013-04-06T14:00:00,+12:00,NZST -2013-09-28T14:00:00,+13:00,NZDT -2014-04-05T14:00:00,+12:00,NZST -2014-09-27T14:00:00,+13:00,NZDT -2015-04-04T14:00:00,+12:00,NZST -2015-09-26T14:00:00,+13:00,NZDT -2016-04-02T14:00:00,+12:00,NZST -2016-09-24T14:00:00,+13:00,NZDT -2017-04-01T14:00:00,+12:00,NZST -2017-09-23T14:00:00,+13:00,NZDT -2018-03-31T14:00:00,+12:00,NZST -2018-09-29T14:00:00,+13:00,NZDT -2019-04-06T14:00:00,+12:00,NZST -2019-09-28T14:00:00,+13:00,NZDT -2020-04-04T14:00:00,+12:00,NZST -2020-09-26T14:00:00,+13:00,NZDT -2021-04-03T14:00:00,+12:00,NZST -2021-09-25T14:00:00,+13:00,NZDT -2022-04-02T14:00:00,+12:00,NZST -2022-09-24T14:00:00,+13:00,NZDT -2023-04-01T14:00:00,+12:00,NZST -2023-09-23T14:00:00,+13:00,NZDT -2024-04-06T14:00:00,+12:00,NZST -2024-09-28T14:00:00,+13:00,NZDT -2025-04-05T14:00:00,+12:00,NZST -2025-09-27T14:00:00,+13:00,NZDT -2026-04-04T14:00:00,+12:00,NZST -2026-09-26T14:00:00,+13:00,NZDT -2027-04-03T14:00:00,+12:00,NZST -2027-09-25T14:00:00,+13:00,NZDT -2028-04-01T14:00:00,+12:00,NZST -2028-09-23T14:00:00,+13:00,NZDT -2029-03-31T14:00:00,+12:00,NZST -2029-09-29T14:00:00,+13:00,NZDT -2030-04-06T14:00:00,+12:00,NZST -2030-09-28T14:00:00,+13:00,NZDT -2031-04-05T14:00:00,+12:00,NZST -2031-09-27T14:00:00,+13:00,NZDT -2032-04-03T14:00:00,+12:00,NZST -2032-09-25T14:00:00,+13:00,NZDT -2033-04-02T14:00:00,+12:00,NZST -2033-09-24T14:00:00,+13:00,NZDT -2034-04-01T14:00:00,+12:00,NZST -2034-09-23T14:00:00,+13:00,NZDT -2035-03-31T14:00:00,+12:00,NZST -2035-09-29T14:00:00,+13:00,NZDT -2036-04-05T14:00:00,+12:00,NZST -2036-09-27T14:00:00,+13:00,NZDT -2037-04-04T14:00:00,+12:00,NZST -2037-09-26T14:00:00,+13:00,NZDT -''' diff --git a/desk/lib/pytz/antarctica-palmer.hoon b/desk/lib/pytz/antarctica-palmer.hoon deleted file mode 100644 index 5841245..0000000 --- a/desk/lib/pytz/antarctica-palmer.hoon +++ /dev/null @@ -1,87 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1965-01-01T00:00:00,-03:00,-03 -1965-03-01T03:00:00,-04:00,-04 -1965-10-15T04:00:00,-03:00,-03 -1966-03-01T03:00:00,-04:00,-04 -1966-10-15T04:00:00,-03:00,-03 -1967-04-02T03:00:00,-04:00,-04 -1967-10-01T04:00:00,-03:00,-03 -1968-04-07T03:00:00,-04:00,-04 -1968-10-06T04:00:00,-03:00,-03 -1969-04-06T03:00:00,-04:00,-04 -1969-10-05T04:00:00,-03:00,-03 -1974-01-23T03:00:00,-02:00,-02 -1974-05-01T02:00:00,-03:00,-03 -1982-05-01T03:00:00,-04:00,-04 -1982-10-10T04:00:00,-03:00,-03 -1983-03-13T03:00:00,-04:00,-04 -1983-10-09T04:00:00,-03:00,-03 -1984-03-11T03:00:00,-04:00,-04 -1984-10-14T04:00:00,-03:00,-03 -1985-03-10T03:00:00,-04:00,-04 -1985-10-13T04:00:00,-03:00,-03 -1986-03-09T03:00:00,-04:00,-04 -1986-10-12T04:00:00,-03:00,-03 -1987-04-12T03:00:00,-04:00,-04 -1987-10-11T04:00:00,-03:00,-03 -1988-03-13T03:00:00,-04:00,-04 -1988-10-09T04:00:00,-03:00,-03 -1989-03-12T03:00:00,-04:00,-04 -1989-10-15T04:00:00,-03:00,-03 -1990-03-11T03:00:00,-04:00,-04 -1990-09-16T04:00:00,-03:00,-03 -1991-03-10T03:00:00,-04:00,-04 -1991-10-13T04:00:00,-03:00,-03 -1992-03-15T03:00:00,-04:00,-04 -1992-10-11T04:00:00,-03:00,-03 -1993-03-14T03:00:00,-04:00,-04 -1993-10-10T04:00:00,-03:00,-03 -1994-03-13T03:00:00,-04:00,-04 -1994-10-09T04:00:00,-03:00,-03 -1995-03-12T03:00:00,-04:00,-04 -1995-10-15T04:00:00,-03:00,-03 -1996-03-10T03:00:00,-04:00,-04 -1996-10-13T04:00:00,-03:00,-03 -1997-03-30T03:00:00,-04:00,-04 -1997-10-12T04:00:00,-03:00,-03 -1998-03-15T03:00:00,-04:00,-04 -1998-09-27T04:00:00,-03:00,-03 -1999-04-04T03:00:00,-04:00,-04 -1999-10-10T04:00:00,-03:00,-03 -2000-03-12T03:00:00,-04:00,-04 -2000-10-15T04:00:00,-03:00,-03 -2001-03-11T03:00:00,-04:00,-04 -2001-10-14T04:00:00,-03:00,-03 -2002-03-10T03:00:00,-04:00,-04 -2002-10-13T04:00:00,-03:00,-03 -2003-03-09T03:00:00,-04:00,-04 -2003-10-12T04:00:00,-03:00,-03 -2004-03-14T03:00:00,-04:00,-04 -2004-10-10T04:00:00,-03:00,-03 -2005-03-13T03:00:00,-04:00,-04 -2005-10-09T04:00:00,-03:00,-03 -2006-03-12T03:00:00,-04:00,-04 -2006-10-15T04:00:00,-03:00,-03 -2007-03-11T03:00:00,-04:00,-04 -2007-10-14T04:00:00,-03:00,-03 -2008-03-30T03:00:00,-04:00,-04 -2008-10-12T04:00:00,-03:00,-03 -2009-03-15T03:00:00,-04:00,-04 -2009-10-11T04:00:00,-03:00,-03 -2010-04-04T03:00:00,-04:00,-04 -2010-10-10T04:00:00,-03:00,-03 -2011-05-08T03:00:00,-04:00,-04 -2011-08-21T04:00:00,-03:00,-03 -2012-04-29T03:00:00,-04:00,-04 -2012-09-02T04:00:00,-03:00,-03 -2013-04-28T03:00:00,-04:00,-04 -2013-09-08T04:00:00,-03:00,-03 -2014-04-27T03:00:00,-04:00,-04 -2014-09-07T04:00:00,-03:00,-03 -2016-05-15T03:00:00,-04:00,-04 -2016-08-14T04:00:00,-03:00,-03 -2016-12-04T03:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/antarctica-rothera.hoon b/desk/lib/pytz/antarctica-rothera.hoon deleted file mode 100644 index 9b55d92..0000000 --- a/desk/lib/pytz/antarctica-rothera.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1976-12-01T00:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/antarctica-syowa.hoon b/desk/lib/pytz/antarctica-syowa.hoon deleted file mode 100644 index e59d17a..0000000 --- a/desk/lib/pytz/antarctica-syowa.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1957-01-29T00:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/antarctica-troll.hoon b/desk/lib/pytz/antarctica-troll.hoon deleted file mode 100644 index 0c354eb..0000000 --- a/desk/lib/pytz/antarctica-troll.hoon +++ /dev/null @@ -1,72 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -2005-02-12T00:00:00,+00:00,+00 -2005-03-27T01:00:00,+02:00,+02 -2005-10-30T01:00:00,+00:00,+00 -2006-03-26T01:00:00,+02:00,+02 -2006-10-29T01:00:00,+00:00,+00 -2007-03-25T01:00:00,+02:00,+02 -2007-10-28T01:00:00,+00:00,+00 -2008-03-30T01:00:00,+02:00,+02 -2008-10-26T01:00:00,+00:00,+00 -2009-03-29T01:00:00,+02:00,+02 -2009-10-25T01:00:00,+00:00,+00 -2010-03-28T01:00:00,+02:00,+02 -2010-10-31T01:00:00,+00:00,+00 -2011-03-27T01:00:00,+02:00,+02 -2011-10-30T01:00:00,+00:00,+00 -2012-03-25T01:00:00,+02:00,+02 -2012-10-28T01:00:00,+00:00,+00 -2013-03-31T01:00:00,+02:00,+02 -2013-10-27T01:00:00,+00:00,+00 -2014-03-30T01:00:00,+02:00,+02 -2014-10-26T01:00:00,+00:00,+00 -2015-03-29T01:00:00,+02:00,+02 -2015-10-25T01:00:00,+00:00,+00 -2016-03-27T01:00:00,+02:00,+02 -2016-10-30T01:00:00,+00:00,+00 -2017-03-26T01:00:00,+02:00,+02 -2017-10-29T01:00:00,+00:00,+00 -2018-03-25T01:00:00,+02:00,+02 -2018-10-28T01:00:00,+00:00,+00 -2019-03-31T01:00:00,+02:00,+02 -2019-10-27T01:00:00,+00:00,+00 -2020-03-29T01:00:00,+02:00,+02 -2020-10-25T01:00:00,+00:00,+00 -2021-03-28T01:00:00,+02:00,+02 -2021-10-31T01:00:00,+00:00,+00 -2022-03-27T01:00:00,+02:00,+02 -2022-10-30T01:00:00,+00:00,+00 -2023-03-26T01:00:00,+02:00,+02 -2023-10-29T01:00:00,+00:00,+00 -2024-03-31T01:00:00,+02:00,+02 -2024-10-27T01:00:00,+00:00,+00 -2025-03-30T01:00:00,+02:00,+02 -2025-10-26T01:00:00,+00:00,+00 -2026-03-29T01:00:00,+02:00,+02 -2026-10-25T01:00:00,+00:00,+00 -2027-03-28T01:00:00,+02:00,+02 -2027-10-31T01:00:00,+00:00,+00 -2028-03-26T01:00:00,+02:00,+02 -2028-10-29T01:00:00,+00:00,+00 -2029-03-25T01:00:00,+02:00,+02 -2029-10-28T01:00:00,+00:00,+00 -2030-03-31T01:00:00,+02:00,+02 -2030-10-27T01:00:00,+00:00,+00 -2031-03-30T01:00:00,+02:00,+02 -2031-10-26T01:00:00,+00:00,+00 -2032-03-28T01:00:00,+02:00,+02 -2032-10-31T01:00:00,+00:00,+00 -2033-03-27T01:00:00,+02:00,+02 -2033-10-30T01:00:00,+00:00,+00 -2034-03-26T01:00:00,+02:00,+02 -2034-10-29T01:00:00,+00:00,+00 -2035-03-25T01:00:00,+02:00,+02 -2035-10-28T01:00:00,+00:00,+00 -2036-03-30T01:00:00,+02:00,+02 -2036-10-26T01:00:00,+00:00,+00 -2037-03-29T01:00:00,+02:00,+02 -2037-10-25T01:00:00,+00:00,+00 -''' diff --git a/desk/lib/pytz/antarctica-vostok.hoon b/desk/lib/pytz/antarctica-vostok.hoon deleted file mode 100644 index f37314a..0000000 --- a/desk/lib/pytz/antarctica-vostok.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1957-12-16T00:00:00,+07:00,+07 -1994-01-31T17:00:00,+00:00,-00 -1994-11-01T00:00:00,+07:00,+07 -2023-12-17T19:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/arctic-longyearbyen.hoon b/desk/lib/pytz/arctic-longyearbyen.hoon deleted file mode 100644 index 0c152b8..0000000 --- a/desk/lib/pytz/arctic-longyearbyen.hoon +++ /dev/null @@ -1,146 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:43,LMT -1901-12-13T20:45:52,+01:00,CET -1916-05-22T00:00:00,+02:00,CEST -1916-09-29T22:00:00,+01:00,CET -1940-08-10T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-10-01T01:00:00,+01:00,CET -1959-03-15T01:00:00,+02:00,CEST -1959-09-20T01:00:00,+01:00,CET -1960-03-20T01:00:00,+02:00,CEST -1960-09-18T01:00:00,+01:00,CET -1961-03-19T01:00:00,+02:00,CEST -1961-09-17T01:00:00,+01:00,CET -1962-03-18T01:00:00,+02:00,CEST -1962-09-16T01:00:00,+01:00,CET -1963-03-17T01:00:00,+02:00,CEST -1963-09-15T01:00:00,+01:00,CET -1964-03-15T01:00:00,+02:00,CEST -1964-09-20T01:00:00,+01:00,CET -1965-04-25T01:00:00,+02:00,CEST -1965-09-19T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/asia-aden.hoon b/desk/lib/pytz/asia-aden.hoon deleted file mode 100644 index 859fea4..0000000 --- a/desk/lib/pytz/asia-aden.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:00,LMT -1949-12-31T21:00:06,+03:00,+03 -''' diff --git a/desk/lib/pytz/asia-almaty.hoon b/desk/lib/pytz/asia-almaty.hoon deleted file mode 100644 index 2a7d1e6..0000000 --- a/desk/lib/pytz/asia-almaty.hoon +++ /dev/null @@ -1,57 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:08,LMT -1924-05-01T18:52:12,+05:00,+05 -1930-06-20T19:00:00,+06:00,+06 -1981-03-31T18:00:00,+07:00,+07 -1981-09-30T17:00:00,+06:00,+06 -1982-03-31T18:00:00,+07:00,+07 -1982-09-30T17:00:00,+06:00,+06 -1983-03-31T18:00:00,+07:00,+07 -1983-09-30T17:00:00,+06:00,+06 -1984-03-31T18:00:00,+07:00,+07 -1984-09-29T20:00:00,+06:00,+06 -1985-03-30T20:00:00,+07:00,+07 -1985-09-28T20:00:00,+06:00,+06 -1986-03-29T20:00:00,+07:00,+07 -1986-09-27T20:00:00,+06:00,+06 -1987-03-28T20:00:00,+07:00,+07 -1987-09-26T20:00:00,+06:00,+06 -1988-03-26T20:00:00,+07:00,+07 -1988-09-24T20:00:00,+06:00,+06 -1989-03-25T20:00:00,+07:00,+07 -1989-09-23T20:00:00,+06:00,+06 -1990-03-24T20:00:00,+07:00,+07 -1990-09-29T20:00:00,+06:00,+06 -1991-03-30T20:00:00,+06:00,+06 -1991-09-28T21:00:00,+05:00,+05 -1992-01-18T21:00:00,+06:00,+06 -1992-03-28T20:00:00,+07:00,+07 -1992-09-26T20:00:00,+06:00,+06 -1993-03-27T20:00:00,+07:00,+07 -1993-09-25T20:00:00,+06:00,+06 -1994-03-26T20:00:00,+07:00,+07 -1994-09-24T20:00:00,+06:00,+06 -1995-03-25T20:00:00,+07:00,+07 -1995-09-23T20:00:00,+06:00,+06 -1996-03-30T20:00:00,+07:00,+07 -1996-10-26T20:00:00,+06:00,+06 -1997-03-29T20:00:00,+07:00,+07 -1997-10-25T20:00:00,+06:00,+06 -1998-03-28T20:00:00,+07:00,+07 -1998-10-24T20:00:00,+06:00,+06 -1999-03-27T20:00:00,+07:00,+07 -1999-10-30T20:00:00,+06:00,+06 -2000-03-25T20:00:00,+07:00,+07 -2000-10-28T20:00:00,+06:00,+06 -2001-03-24T20:00:00,+07:00,+07 -2001-10-27T20:00:00,+06:00,+06 -2002-03-30T20:00:00,+07:00,+07 -2002-10-26T20:00:00,+06:00,+06 -2003-03-29T20:00:00,+07:00,+07 -2003-10-25T20:00:00,+06:00,+06 -2004-03-27T20:00:00,+07:00,+07 -2004-10-30T20:00:00,+06:00,+06 -2024-02-29T18:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-amman.hoon b/desk/lib/pytz/asia-amman.hoon deleted file mode 100644 index 34be6dd..0000000 --- a/desk/lib/pytz/asia-amman.hoon +++ /dev/null @@ -1,92 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:24,LMT -1930-12-31T21:36:16,+02:00,EET -1973-06-05T22:00:00,+03:00,EEST -1973-09-30T21:00:00,+02:00,EET -1974-04-30T22:00:00,+03:00,EEST -1974-09-30T21:00:00,+02:00,EET -1975-04-30T22:00:00,+03:00,EEST -1975-09-30T21:00:00,+02:00,EET -1976-04-30T22:00:00,+03:00,EEST -1976-10-31T21:00:00,+02:00,EET -1977-04-30T22:00:00,+03:00,EEST -1977-09-30T21:00:00,+02:00,EET -1978-04-29T22:00:00,+03:00,EEST -1978-09-29T21:00:00,+02:00,EET -1985-03-31T22:00:00,+03:00,EEST -1985-09-30T21:00:00,+02:00,EET -1986-04-03T22:00:00,+03:00,EEST -1986-10-02T21:00:00,+02:00,EET -1987-04-02T22:00:00,+03:00,EEST -1987-10-01T21:00:00,+02:00,EET -1988-03-31T22:00:00,+03:00,EEST -1988-10-06T21:00:00,+02:00,EET -1989-05-07T22:00:00,+03:00,EEST -1989-10-05T21:00:00,+02:00,EET -1990-04-26T22:00:00,+03:00,EEST -1990-10-04T21:00:00,+02:00,EET -1991-04-16T22:00:00,+03:00,EEST -1991-09-26T21:00:00,+02:00,EET -1992-04-09T22:00:00,+03:00,EEST -1992-10-01T21:00:00,+02:00,EET -1993-04-01T22:00:00,+03:00,EEST -1993-09-30T21:00:00,+02:00,EET -1994-03-31T22:00:00,+03:00,EEST -1994-09-15T21:00:00,+02:00,EET -1995-04-06T22:00:00,+03:00,EEST -1995-09-14T22:00:00,+02:00,EET -1996-04-04T22:00:00,+03:00,EEST -1996-09-19T22:00:00,+02:00,EET -1997-04-03T22:00:00,+03:00,EEST -1997-09-18T22:00:00,+02:00,EET -1998-04-02T22:00:00,+03:00,EEST -1998-09-17T22:00:00,+02:00,EET -1999-06-30T22:00:00,+03:00,EEST -1999-09-23T22:00:00,+02:00,EET -2000-03-29T22:00:00,+03:00,EEST -2000-09-28T22:00:00,+02:00,EET -2001-03-28T22:00:00,+03:00,EEST -2001-09-27T22:00:00,+02:00,EET -2002-03-28T22:00:00,+03:00,EEST -2002-09-26T22:00:00,+02:00,EET -2003-03-27T22:00:00,+03:00,EEST -2003-10-23T22:00:00,+02:00,EET -2004-03-25T22:00:00,+03:00,EEST -2004-10-14T22:00:00,+02:00,EET -2005-03-31T22:00:00,+03:00,EEST -2005-09-29T22:00:00,+02:00,EET -2006-03-30T22:00:00,+03:00,EEST -2006-10-26T22:00:00,+02:00,EET -2007-03-29T22:00:00,+03:00,EEST -2007-10-25T22:00:00,+02:00,EET -2008-03-27T22:00:00,+03:00,EEST -2008-10-30T22:00:00,+02:00,EET -2009-03-26T22:00:00,+03:00,EEST -2009-10-29T22:00:00,+02:00,EET -2010-03-25T22:00:00,+03:00,EEST -2010-10-28T22:00:00,+02:00,EET -2011-03-31T22:00:00,+03:00,EEST -2011-10-27T22:00:00,+02:00,EET -2012-03-29T22:00:00,+03:00,EEST -2013-12-19T21:00:00,+02:00,EET -2014-03-27T22:00:00,+03:00,EEST -2014-10-30T22:00:00,+02:00,EET -2015-03-26T22:00:00,+03:00,EEST -2015-10-29T22:00:00,+02:00,EET -2016-03-31T22:00:00,+03:00,EEST -2016-10-27T22:00:00,+02:00,EET -2017-03-30T22:00:00,+03:00,EEST -2017-10-26T22:00:00,+02:00,EET -2018-03-29T22:00:00,+03:00,EEST -2018-10-25T22:00:00,+02:00,EET -2019-03-28T22:00:00,+03:00,EEST -2019-10-24T22:00:00,+02:00,EET -2020-03-26T22:00:00,+03:00,EEST -2020-10-29T22:00:00,+02:00,EET -2021-03-25T22:00:00,+03:00,EEST -2021-10-28T22:00:00,+02:00,EET -2022-02-24T22:00:00,+03:00,EEST -2022-10-27T22:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/asia-anadyr.hoon b/desk/lib/pytz/asia-anadyr.hoon deleted file mode 100644 index c690a16..0000000 --- a/desk/lib/pytz/asia-anadyr.hoon +++ /dev/null @@ -1,69 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:50,LMT -1924-05-01T12:10:04,+12:00,+12 -1930-06-20T12:00:00,+13:00,+13 -1981-03-31T11:00:00,+14:00,+14 -1981-09-30T10:00:00,+13:00,+13 -1982-03-31T11:00:00,+13:00,+13 -1982-09-30T11:00:00,+12:00,+12 -1983-03-31T12:00:00,+13:00,+13 -1983-09-30T11:00:00,+12:00,+12 -1984-03-31T12:00:00,+13:00,+13 -1984-09-29T14:00:00,+12:00,+12 -1985-03-30T14:00:00,+13:00,+13 -1985-09-28T14:00:00,+12:00,+12 -1986-03-29T14:00:00,+13:00,+13 -1986-09-27T14:00:00,+12:00,+12 -1987-03-28T14:00:00,+13:00,+13 -1987-09-26T14:00:00,+12:00,+12 -1988-03-26T14:00:00,+13:00,+13 -1988-09-24T14:00:00,+12:00,+12 -1989-03-25T14:00:00,+13:00,+13 -1989-09-23T14:00:00,+12:00,+12 -1990-03-24T14:00:00,+13:00,+13 -1990-09-29T14:00:00,+12:00,+12 -1991-03-30T14:00:00,+12:00,+12 -1991-09-28T15:00:00,+11:00,+11 -1992-01-18T15:00:00,+12:00,+12 -1992-03-28T14:00:00,+13:00,+13 -1992-09-26T14:00:00,+12:00,+12 -1993-03-27T14:00:00,+13:00,+13 -1993-09-25T14:00:00,+12:00,+12 -1994-03-26T14:00:00,+13:00,+13 -1994-09-24T14:00:00,+12:00,+12 -1995-03-25T14:00:00,+13:00,+13 -1995-09-23T14:00:00,+12:00,+12 -1996-03-30T14:00:00,+13:00,+13 -1996-10-26T14:00:00,+12:00,+12 -1997-03-29T14:00:00,+13:00,+13 -1997-10-25T14:00:00,+12:00,+12 -1998-03-28T14:00:00,+13:00,+13 -1998-10-24T14:00:00,+12:00,+12 -1999-03-27T14:00:00,+13:00,+13 -1999-10-30T14:00:00,+12:00,+12 -2000-03-25T14:00:00,+13:00,+13 -2000-10-28T14:00:00,+12:00,+12 -2001-03-24T14:00:00,+13:00,+13 -2001-10-27T14:00:00,+12:00,+12 -2002-03-30T14:00:00,+13:00,+13 -2002-10-26T14:00:00,+12:00,+12 -2003-03-29T14:00:00,+13:00,+13 -2003-10-25T14:00:00,+12:00,+12 -2004-03-27T14:00:00,+13:00,+13 -2004-10-30T14:00:00,+12:00,+12 -2005-03-26T14:00:00,+13:00,+13 -2005-10-29T14:00:00,+12:00,+12 -2006-03-25T14:00:00,+13:00,+13 -2006-10-28T14:00:00,+12:00,+12 -2007-03-24T14:00:00,+13:00,+13 -2007-10-27T14:00:00,+12:00,+12 -2008-03-29T14:00:00,+13:00,+13 -2008-10-25T14:00:00,+12:00,+12 -2009-03-28T14:00:00,+13:00,+13 -2009-10-24T14:00:00,+12:00,+12 -2010-03-27T14:00:00,+12:00,+12 -2010-10-30T15:00:00,+11:00,+11 -2011-03-26T15:00:00,+12:00,+12 -''' diff --git a/desk/lib/pytz/asia-aqtau.hoon b/desk/lib/pytz/asia-aqtau.hoon deleted file mode 100644 index cd0b98e..0000000 --- a/desk/lib/pytz/asia-aqtau.hoon +++ /dev/null @@ -1,55 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:21,LMT -1924-05-01T20:38:56,+04:00,+04 -1930-06-20T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+06:00,+06 -1982-03-31T18:00:00,+06:00,+06 -1982-09-30T18:00:00,+05:00,+05 -1983-03-31T19:00:00,+06:00,+06 -1983-09-30T18:00:00,+05:00,+05 -1984-03-31T19:00:00,+06:00,+06 -1984-09-29T21:00:00,+05:00,+05 -1985-03-30T21:00:00,+06:00,+06 -1985-09-28T21:00:00,+05:00,+05 -1986-03-29T21:00:00,+06:00,+06 -1986-09-27T21:00:00,+05:00,+05 -1987-03-28T21:00:00,+06:00,+06 -1987-09-26T21:00:00,+05:00,+05 -1988-03-26T21:00:00,+06:00,+06 -1988-09-24T21:00:00,+05:00,+05 -1989-03-25T21:00:00,+06:00,+06 -1989-09-23T21:00:00,+05:00,+05 -1990-03-24T21:00:00,+06:00,+06 -1990-09-29T21:00:00,+05:00,+05 -1991-03-30T21:00:00,+05:00,+05 -1991-09-28T22:00:00,+04:00,+04 -1992-01-18T22:00:00,+05:00,+05 -1992-03-28T21:00:00,+06:00,+06 -1992-09-26T21:00:00,+05:00,+05 -1993-03-27T21:00:00,+06:00,+06 -1993-09-25T21:00:00,+05:00,+05 -1994-03-26T21:00:00,+06:00,+06 -1994-09-24T21:00:00,+04:00,+04 -1995-03-25T22:00:00,+05:00,+05 -1995-09-23T22:00:00,+04:00,+04 -1996-03-30T22:00:00,+05:00,+05 -1996-10-26T22:00:00,+04:00,+04 -1997-03-29T22:00:00,+05:00,+05 -1997-10-25T22:00:00,+04:00,+04 -1998-03-28T22:00:00,+05:00,+05 -1998-10-24T22:00:00,+04:00,+04 -1999-03-27T22:00:00,+05:00,+05 -1999-10-30T22:00:00,+04:00,+04 -2000-03-25T22:00:00,+05:00,+05 -2000-10-28T22:00:00,+04:00,+04 -2001-03-24T22:00:00,+05:00,+05 -2001-10-27T22:00:00,+04:00,+04 -2002-03-30T22:00:00,+05:00,+05 -2002-10-26T22:00:00,+04:00,+04 -2003-03-29T22:00:00,+05:00,+05 -2003-10-25T22:00:00,+04:00,+04 -2004-03-27T22:00:00,+05:00,+05 -2004-10-30T22:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-aqtobe.hoon b/desk/lib/pytz/asia-aqtobe.hoon deleted file mode 100644 index 9163606..0000000 --- a/desk/lib/pytz/asia-aqtobe.hoon +++ /dev/null @@ -1,56 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:49,LMT -1924-05-01T20:11:20,+04:00,+04 -1930-06-20T20:00:00,+05:00,+05 -1981-03-31T19:00:00,+06:00,+06 -1981-09-30T18:00:00,+06:00,+06 -1982-03-31T18:00:00,+06:00,+06 -1982-09-30T18:00:00,+05:00,+05 -1983-03-31T19:00:00,+06:00,+06 -1983-09-30T18:00:00,+05:00,+05 -1984-03-31T19:00:00,+06:00,+06 -1984-09-29T21:00:00,+05:00,+05 -1985-03-30T21:00:00,+06:00,+06 -1985-09-28T21:00:00,+05:00,+05 -1986-03-29T21:00:00,+06:00,+06 -1986-09-27T21:00:00,+05:00,+05 -1987-03-28T21:00:00,+06:00,+06 -1987-09-26T21:00:00,+05:00,+05 -1988-03-26T21:00:00,+06:00,+06 -1988-09-24T21:00:00,+05:00,+05 -1989-03-25T21:00:00,+06:00,+06 -1989-09-23T21:00:00,+05:00,+05 -1990-03-24T21:00:00,+06:00,+06 -1990-09-29T21:00:00,+05:00,+05 -1991-03-30T21:00:00,+05:00,+05 -1991-09-28T22:00:00,+04:00,+04 -1992-01-18T22:00:00,+05:00,+05 -1992-03-28T21:00:00,+06:00,+06 -1992-09-26T21:00:00,+05:00,+05 -1993-03-27T21:00:00,+06:00,+06 -1993-09-25T21:00:00,+05:00,+05 -1994-03-26T21:00:00,+06:00,+06 -1994-09-24T21:00:00,+05:00,+05 -1995-03-25T21:00:00,+06:00,+06 -1995-09-23T21:00:00,+05:00,+05 -1996-03-30T21:00:00,+06:00,+06 -1996-10-26T21:00:00,+05:00,+05 -1997-03-29T21:00:00,+06:00,+06 -1997-10-25T21:00:00,+05:00,+05 -1998-03-28T21:00:00,+06:00,+06 -1998-10-24T21:00:00,+05:00,+05 -1999-03-27T21:00:00,+06:00,+06 -1999-10-30T21:00:00,+05:00,+05 -2000-03-25T21:00:00,+06:00,+06 -2000-10-28T21:00:00,+05:00,+05 -2001-03-24T21:00:00,+06:00,+06 -2001-10-27T21:00:00,+05:00,+05 -2002-03-30T21:00:00,+06:00,+06 -2002-10-26T21:00:00,+05:00,+05 -2003-03-29T21:00:00,+06:00,+06 -2003-10-25T21:00:00,+05:00,+05 -2004-03-27T21:00:00,+06:00,+06 -2004-10-30T21:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-ashgabat.hoon b/desk/lib/pytz/asia-ashgabat.hoon deleted file mode 100644 index 15da9eb..0000000 --- a/desk/lib/pytz/asia-ashgabat.hoon +++ /dev/null @@ -1,30 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:54,LMT -1924-05-01T20:06:28,+04:00,+04 -1930-06-20T20:00:00,+05:00,+05 -1981-03-31T19:00:00,+06:00,+06 -1981-09-30T18:00:00,+05:00,+05 -1982-03-31T19:00:00,+06:00,+06 -1982-09-30T18:00:00,+05:00,+05 -1983-03-31T19:00:00,+06:00,+06 -1983-09-30T18:00:00,+05:00,+05 -1984-03-31T19:00:00,+06:00,+06 -1984-09-29T21:00:00,+05:00,+05 -1985-03-30T21:00:00,+06:00,+06 -1985-09-28T21:00:00,+05:00,+05 -1986-03-29T21:00:00,+06:00,+06 -1986-09-27T21:00:00,+05:00,+05 -1987-03-28T21:00:00,+06:00,+06 -1987-09-26T21:00:00,+05:00,+05 -1988-03-26T21:00:00,+06:00,+06 -1988-09-24T21:00:00,+05:00,+05 -1989-03-25T21:00:00,+06:00,+06 -1989-09-23T21:00:00,+05:00,+05 -1990-03-24T21:00:00,+06:00,+06 -1990-09-29T21:00:00,+05:00,+05 -1991-03-30T21:00:00,+05:00,+05 -1991-09-28T22:00:00,+04:00,+04 -1992-01-18T22:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-atyrau.hoon b/desk/lib/pytz/asia-atyrau.hoon deleted file mode 100644 index e747eb2..0000000 --- a/desk/lib/pytz/asia-atyrau.hoon +++ /dev/null @@ -1,55 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:28,LMT -1924-05-01T20:32:16,+03:00,+03 -1930-06-20T21:00:00,+05:00,+05 -1981-09-30T19:00:00,+06:00,+06 -1982-03-31T18:00:00,+06:00,+06 -1982-09-30T18:00:00,+05:00,+05 -1983-03-31T19:00:00,+06:00,+06 -1983-09-30T18:00:00,+05:00,+05 -1984-03-31T19:00:00,+06:00,+06 -1984-09-29T21:00:00,+05:00,+05 -1985-03-30T21:00:00,+06:00,+06 -1985-09-28T21:00:00,+05:00,+05 -1986-03-29T21:00:00,+06:00,+06 -1986-09-27T21:00:00,+05:00,+05 -1987-03-28T21:00:00,+06:00,+06 -1987-09-26T21:00:00,+05:00,+05 -1988-03-26T21:00:00,+06:00,+06 -1988-09-24T21:00:00,+05:00,+05 -1989-03-25T21:00:00,+06:00,+06 -1989-09-23T21:00:00,+05:00,+05 -1990-03-24T21:00:00,+06:00,+06 -1990-09-29T21:00:00,+05:00,+05 -1991-03-30T21:00:00,+05:00,+05 -1991-09-28T22:00:00,+04:00,+04 -1992-01-18T22:00:00,+05:00,+05 -1992-03-28T21:00:00,+06:00,+06 -1992-09-26T21:00:00,+05:00,+05 -1993-03-27T21:00:00,+06:00,+06 -1993-09-25T21:00:00,+05:00,+05 -1994-03-26T21:00:00,+06:00,+06 -1994-09-24T21:00:00,+05:00,+05 -1995-03-25T21:00:00,+06:00,+06 -1995-09-23T21:00:00,+05:00,+05 -1996-03-30T21:00:00,+06:00,+06 -1996-10-26T21:00:00,+05:00,+05 -1997-03-29T21:00:00,+06:00,+06 -1997-10-25T21:00:00,+05:00,+05 -1998-03-28T21:00:00,+06:00,+06 -1998-10-24T21:00:00,+05:00,+05 -1999-03-27T21:00:00,+05:00,+05 -1999-10-30T22:00:00,+04:00,+04 -2000-03-25T22:00:00,+05:00,+05 -2000-10-28T22:00:00,+04:00,+04 -2001-03-24T22:00:00,+05:00,+05 -2001-10-27T22:00:00,+04:00,+04 -2002-03-30T22:00:00,+05:00,+05 -2002-10-26T22:00:00,+04:00,+04 -2003-03-29T22:00:00,+05:00,+05 -2003-10-25T22:00:00,+04:00,+04 -2004-03-27T22:00:00,+05:00,+05 -2004-10-30T22:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-baghdad.hoon b/desk/lib/pytz/asia-baghdad.hoon deleted file mode 100644 index 512f2a8..0000000 --- a/desk/lib/pytz/asia-baghdad.hoon +++ /dev/null @@ -1,59 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:58,LMT -1901-12-13T20:45:52,+02:58,BMT -1917-12-31T21:02:24,+03:00,+03 -1982-04-30T21:00:00,+04:00,+04 -1982-09-30T20:00:00,+03:00,+03 -1983-03-30T21:00:00,+04:00,+04 -1983-09-30T20:00:00,+03:00,+03 -1984-03-31T21:00:00,+04:00,+04 -1984-09-30T20:00:00,+03:00,+03 -1985-03-31T21:00:00,+04:00,+04 -1985-09-28T22:00:00,+03:00,+03 -1986-03-29T22:00:00,+04:00,+04 -1986-09-27T22:00:00,+03:00,+03 -1987-03-28T22:00:00,+04:00,+04 -1987-09-26T22:00:00,+03:00,+03 -1988-03-26T22:00:00,+04:00,+04 -1988-09-24T22:00:00,+03:00,+03 -1989-03-25T22:00:00,+04:00,+04 -1989-09-23T22:00:00,+03:00,+03 -1990-03-24T22:00:00,+04:00,+04 -1990-09-29T22:00:00,+03:00,+03 -1991-04-01T00:00:00,+04:00,+04 -1991-10-01T00:00:00,+03:00,+03 -1992-04-01T00:00:00,+04:00,+04 -1992-10-01T00:00:00,+03:00,+03 -1993-04-01T00:00:00,+04:00,+04 -1993-10-01T00:00:00,+03:00,+03 -1994-04-01T00:00:00,+04:00,+04 -1994-10-01T00:00:00,+03:00,+03 -1995-04-01T00:00:00,+04:00,+04 -1995-10-01T00:00:00,+03:00,+03 -1996-04-01T00:00:00,+04:00,+04 -1996-10-01T00:00:00,+03:00,+03 -1997-04-01T00:00:00,+04:00,+04 -1997-10-01T00:00:00,+03:00,+03 -1998-04-01T00:00:00,+04:00,+04 -1998-10-01T00:00:00,+03:00,+03 -1999-04-01T00:00:00,+04:00,+04 -1999-10-01T00:00:00,+03:00,+03 -2000-04-01T00:00:00,+04:00,+04 -2000-10-01T00:00:00,+03:00,+03 -2001-04-01T00:00:00,+04:00,+04 -2001-10-01T00:00:00,+03:00,+03 -2002-04-01T00:00:00,+04:00,+04 -2002-10-01T00:00:00,+03:00,+03 -2003-04-01T00:00:00,+04:00,+04 -2003-10-01T00:00:00,+03:00,+03 -2004-04-01T00:00:00,+04:00,+04 -2004-10-01T00:00:00,+03:00,+03 -2005-04-01T00:00:00,+04:00,+04 -2005-10-01T00:00:00,+03:00,+03 -2006-04-01T00:00:00,+04:00,+04 -2006-10-01T00:00:00,+03:00,+03 -2007-04-01T00:00:00,+04:00,+04 -2007-10-01T00:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/asia-bahrain.hoon b/desk/lib/pytz/asia-bahrain.hoon deleted file mode 100644 index c428dca..0000000 --- a/desk/lib/pytz/asia-bahrain.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:22,LMT -1941-07-19T20:37:40,+03:30,+0330 -1943-12-31T20:30:00,+04:00,+04 -1972-05-31T20:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/asia-baku.hoon b/desk/lib/pytz/asia-baku.hoon deleted file mode 100644 index c0902ba..0000000 --- a/desk/lib/pytz/asia-baku.hoon +++ /dev/null @@ -1,71 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:19,LMT -1924-05-01T20:40:36,+03:00,+03 -1957-02-28T21:00:00,+04:00,+04 -1981-03-31T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+04:00,+04 -1982-03-31T20:00:00,+05:00,+05 -1982-09-30T19:00:00,+04:00,+04 -1983-03-31T20:00:00,+05:00,+05 -1983-09-30T19:00:00,+04:00,+04 -1984-03-31T20:00:00,+05:00,+05 -1984-09-29T22:00:00,+04:00,+04 -1985-03-30T22:00:00,+05:00,+05 -1985-09-28T22:00:00,+04:00,+04 -1986-03-29T22:00:00,+05:00,+05 -1986-09-27T22:00:00,+04:00,+04 -1987-03-28T22:00:00,+05:00,+05 -1987-09-26T22:00:00,+04:00,+04 -1988-03-26T22:00:00,+05:00,+05 -1988-09-24T22:00:00,+04:00,+04 -1989-03-25T22:00:00,+05:00,+05 -1989-09-23T22:00:00,+04:00,+04 -1990-03-24T22:00:00,+05:00,+05 -1990-09-29T22:00:00,+04:00,+04 -1991-03-30T22:00:00,+04:00,+04 -1991-09-28T23:00:00,+03:00,+03 -1992-03-28T23:00:00,+04:00,+04 -1992-09-26T23:00:00,+04:00,+04 -1996-03-31T01:00:00,+05:00,+05 -1996-10-27T01:00:00,+04:00,+04 -1997-03-30T00:00:00,+05:00,+05 -1997-10-26T00:00:00,+04:00,+04 -1998-03-29T00:00:00,+05:00,+05 -1998-10-25T00:00:00,+04:00,+04 -1999-03-28T00:00:00,+05:00,+05 -1999-10-31T00:00:00,+04:00,+04 -2000-03-26T00:00:00,+05:00,+05 -2000-10-29T00:00:00,+04:00,+04 -2001-03-25T00:00:00,+05:00,+05 -2001-10-28T00:00:00,+04:00,+04 -2002-03-31T00:00:00,+05:00,+05 -2002-10-27T00:00:00,+04:00,+04 -2003-03-30T00:00:00,+05:00,+05 -2003-10-26T00:00:00,+04:00,+04 -2004-03-28T00:00:00,+05:00,+05 -2004-10-31T00:00:00,+04:00,+04 -2005-03-27T00:00:00,+05:00,+05 -2005-10-30T00:00:00,+04:00,+04 -2006-03-26T00:00:00,+05:00,+05 -2006-10-29T00:00:00,+04:00,+04 -2007-03-25T00:00:00,+05:00,+05 -2007-10-28T00:00:00,+04:00,+04 -2008-03-30T00:00:00,+05:00,+05 -2008-10-26T00:00:00,+04:00,+04 -2009-03-29T00:00:00,+05:00,+05 -2009-10-25T00:00:00,+04:00,+04 -2010-03-28T00:00:00,+05:00,+05 -2010-10-31T00:00:00,+04:00,+04 -2011-03-27T00:00:00,+05:00,+05 -2011-10-30T00:00:00,+04:00,+04 -2012-03-25T00:00:00,+05:00,+05 -2012-10-28T00:00:00,+04:00,+04 -2013-03-31T00:00:00,+05:00,+05 -2013-10-27T00:00:00,+04:00,+04 -2014-03-30T00:00:00,+05:00,+05 -2014-10-26T00:00:00,+04:00,+04 -2015-03-29T00:00:00,+05:00,+05 -2015-10-25T00:00:00,+04:00,+04 -''' diff --git a/desk/lib/pytz/asia-bangkok.hoon b/desk/lib/pytz/asia-bangkok.hoon deleted file mode 100644 index 93cc4c2..0000000 --- a/desk/lib/pytz/asia-bangkok.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:42,LMT -1901-12-13T20:45:52,+06:42,BMT -1920-03-31T17:17:56,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-barnaul.hoon b/desk/lib/pytz/asia-barnaul.hoon deleted file mode 100644 index 1c05cd4..0000000 --- a/desk/lib/pytz/asia-barnaul.hoon +++ /dev/null @@ -1,72 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:35,LMT -1919-12-09T18:25:00,+06:00,+06 -1930-06-20T18:00:00,+07:00,+07 -1981-03-31T17:00:00,+08:00,+08 -1981-09-30T16:00:00,+07:00,+07 -1982-03-31T17:00:00,+08:00,+08 -1982-09-30T16:00:00,+07:00,+07 -1983-03-31T17:00:00,+08:00,+08 -1983-09-30T16:00:00,+07:00,+07 -1984-03-31T17:00:00,+08:00,+08 -1984-09-29T19:00:00,+07:00,+07 -1985-03-30T19:00:00,+08:00,+08 -1985-09-28T19:00:00,+07:00,+07 -1986-03-29T19:00:00,+08:00,+08 -1986-09-27T19:00:00,+07:00,+07 -1987-03-28T19:00:00,+08:00,+08 -1987-09-26T19:00:00,+07:00,+07 -1988-03-26T19:00:00,+08:00,+08 -1988-09-24T19:00:00,+07:00,+07 -1989-03-25T19:00:00,+08:00,+08 -1989-09-23T19:00:00,+07:00,+07 -1990-03-24T19:00:00,+08:00,+08 -1990-09-29T19:00:00,+07:00,+07 -1991-03-30T19:00:00,+07:00,+07 -1991-09-28T20:00:00,+06:00,+06 -1992-01-18T20:00:00,+07:00,+07 -1992-03-28T19:00:00,+08:00,+08 -1992-09-26T19:00:00,+07:00,+07 -1993-03-27T19:00:00,+08:00,+08 -1993-09-25T19:00:00,+07:00,+07 -1994-03-26T19:00:00,+08:00,+08 -1994-09-24T19:00:00,+07:00,+07 -1995-03-25T19:00:00,+08:00,+08 -1995-05-27T16:00:00,+07:00,+07 -1995-09-23T20:00:00,+06:00,+06 -1996-03-30T20:00:00,+07:00,+07 -1996-10-26T20:00:00,+06:00,+06 -1997-03-29T20:00:00,+07:00,+07 -1997-10-25T20:00:00,+06:00,+06 -1998-03-28T20:00:00,+07:00,+07 -1998-10-24T20:00:00,+06:00,+06 -1999-03-27T20:00:00,+07:00,+07 -1999-10-30T20:00:00,+06:00,+06 -2000-03-25T20:00:00,+07:00,+07 -2000-10-28T20:00:00,+06:00,+06 -2001-03-24T20:00:00,+07:00,+07 -2001-10-27T20:00:00,+06:00,+06 -2002-03-30T20:00:00,+07:00,+07 -2002-10-26T20:00:00,+06:00,+06 -2003-03-29T20:00:00,+07:00,+07 -2003-10-25T20:00:00,+06:00,+06 -2004-03-27T20:00:00,+07:00,+07 -2004-10-30T20:00:00,+06:00,+06 -2005-03-26T20:00:00,+07:00,+07 -2005-10-29T20:00:00,+06:00,+06 -2006-03-25T20:00:00,+07:00,+07 -2006-10-28T20:00:00,+06:00,+06 -2007-03-24T20:00:00,+07:00,+07 -2007-10-27T20:00:00,+06:00,+06 -2008-03-29T20:00:00,+07:00,+07 -2008-10-25T20:00:00,+06:00,+06 -2009-03-28T20:00:00,+07:00,+07 -2009-10-24T20:00:00,+06:00,+06 -2010-03-27T20:00:00,+07:00,+07 -2010-10-30T20:00:00,+06:00,+06 -2011-03-26T20:00:00,+07:00,+07 -2014-10-25T19:00:00,+06:00,+06 -2016-03-26T20:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-beirut.hoon b/desk/lib/pytz/asia-beirut.hoon deleted file mode 100644 index af0cfa5..0000000 --- a/desk/lib/pytz/asia-beirut.hoon +++ /dev/null @@ -1,146 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:22,LMT -1901-12-13T20:45:52,+02:00,EET -1920-03-27T22:00:00,+03:00,EEST -1920-10-24T21:00:00,+02:00,EET -1921-04-02T22:00:00,+03:00,EEST -1921-10-02T21:00:00,+02:00,EET -1922-03-25T22:00:00,+03:00,EEST -1922-10-07T21:00:00,+02:00,EET -1923-04-21T22:00:00,+03:00,EEST -1923-09-15T21:00:00,+02:00,EET -1957-04-30T22:00:00,+03:00,EEST -1957-09-30T21:00:00,+02:00,EET -1958-04-30T22:00:00,+03:00,EEST -1958-09-30T21:00:00,+02:00,EET -1959-04-30T22:00:00,+03:00,EEST -1959-09-30T21:00:00,+02:00,EET -1960-04-30T22:00:00,+03:00,EEST -1960-09-30T21:00:00,+02:00,EET -1961-04-30T22:00:00,+03:00,EEST -1961-09-30T21:00:00,+02:00,EET -1972-06-21T22:00:00,+03:00,EEST -1972-09-30T21:00:00,+02:00,EET -1973-04-30T22:00:00,+03:00,EEST -1973-09-30T21:00:00,+02:00,EET -1974-04-30T22:00:00,+03:00,EEST -1974-09-30T21:00:00,+02:00,EET -1975-04-30T22:00:00,+03:00,EEST -1975-09-30T21:00:00,+02:00,EET -1976-04-30T22:00:00,+03:00,EEST -1976-09-30T21:00:00,+02:00,EET -1977-04-30T22:00:00,+03:00,EEST -1977-09-30T21:00:00,+02:00,EET -1978-04-29T22:00:00,+03:00,EEST -1978-09-29T21:00:00,+02:00,EET -1984-04-30T22:00:00,+03:00,EEST -1984-10-15T21:00:00,+02:00,EET -1985-04-30T22:00:00,+03:00,EEST -1985-10-15T21:00:00,+02:00,EET -1986-04-30T22:00:00,+03:00,EEST -1986-10-15T21:00:00,+02:00,EET -1987-04-30T22:00:00,+03:00,EEST -1987-10-15T21:00:00,+02:00,EET -1988-05-31T22:00:00,+03:00,EEST -1988-10-15T21:00:00,+02:00,EET -1989-05-09T22:00:00,+03:00,EEST -1989-10-15T21:00:00,+02:00,EET -1990-04-30T22:00:00,+03:00,EEST -1990-10-15T21:00:00,+02:00,EET -1991-04-30T22:00:00,+03:00,EEST -1991-10-15T21:00:00,+02:00,EET -1992-04-30T22:00:00,+03:00,EEST -1992-10-03T21:00:00,+02:00,EET -1993-03-27T22:00:00,+03:00,EEST -1993-09-25T21:00:00,+02:00,EET -1994-03-26T22:00:00,+03:00,EEST -1994-09-24T21:00:00,+02:00,EET -1995-03-25T22:00:00,+03:00,EEST -1995-09-23T21:00:00,+02:00,EET -1996-03-30T22:00:00,+03:00,EEST -1996-09-28T21:00:00,+02:00,EET -1997-03-29T22:00:00,+03:00,EEST -1997-09-27T21:00:00,+02:00,EET -1998-03-28T22:00:00,+03:00,EEST -1998-09-26T21:00:00,+02:00,EET -1999-03-27T22:00:00,+03:00,EEST -1999-10-30T21:00:00,+02:00,EET -2000-03-25T22:00:00,+03:00,EEST -2000-10-28T21:00:00,+02:00,EET -2001-03-24T22:00:00,+03:00,EEST -2001-10-27T21:00:00,+02:00,EET -2002-03-30T22:00:00,+03:00,EEST -2002-10-26T21:00:00,+02:00,EET -2003-03-29T22:00:00,+03:00,EEST -2003-10-25T21:00:00,+02:00,EET -2004-03-27T22:00:00,+03:00,EEST -2004-10-30T21:00:00,+02:00,EET -2005-03-26T22:00:00,+03:00,EEST -2005-10-29T21:00:00,+02:00,EET -2006-03-25T22:00:00,+03:00,EEST -2006-10-28T21:00:00,+02:00,EET -2007-03-24T22:00:00,+03:00,EEST -2007-10-27T21:00:00,+02:00,EET -2008-03-29T22:00:00,+03:00,EEST -2008-10-25T21:00:00,+02:00,EET -2009-03-28T22:00:00,+03:00,EEST -2009-10-24T21:00:00,+02:00,EET -2010-03-27T22:00:00,+03:00,EEST -2010-10-30T21:00:00,+02:00,EET -2011-03-26T22:00:00,+03:00,EEST -2011-10-29T21:00:00,+02:00,EET -2012-03-24T22:00:00,+03:00,EEST -2012-10-27T21:00:00,+02:00,EET -2013-03-30T22:00:00,+03:00,EEST -2013-10-26T21:00:00,+02:00,EET -2014-03-29T22:00:00,+03:00,EEST -2014-10-25T21:00:00,+02:00,EET -2015-03-28T22:00:00,+03:00,EEST -2015-10-24T21:00:00,+02:00,EET -2016-03-26T22:00:00,+03:00,EEST -2016-10-29T21:00:00,+02:00,EET -2017-03-25T22:00:00,+03:00,EEST -2017-10-28T21:00:00,+02:00,EET -2018-03-24T22:00:00,+03:00,EEST -2018-10-27T21:00:00,+02:00,EET -2019-03-30T22:00:00,+03:00,EEST -2019-10-26T21:00:00,+02:00,EET -2020-03-28T22:00:00,+03:00,EEST -2020-10-24T21:00:00,+02:00,EET -2021-03-27T22:00:00,+03:00,EEST -2021-10-30T21:00:00,+02:00,EET -2022-03-26T22:00:00,+03:00,EEST -2022-10-29T21:00:00,+02:00,EET -2023-03-25T22:00:00,+03:00,EEST -2023-10-28T21:00:00,+02:00,EET -2024-03-30T22:00:00,+03:00,EEST -2024-10-26T21:00:00,+02:00,EET -2025-03-29T22:00:00,+03:00,EEST -2025-10-25T21:00:00,+02:00,EET -2026-03-28T22:00:00,+03:00,EEST -2026-10-24T21:00:00,+02:00,EET -2027-03-27T22:00:00,+03:00,EEST -2027-10-30T21:00:00,+02:00,EET -2028-03-25T22:00:00,+03:00,EEST -2028-10-28T21:00:00,+02:00,EET -2029-03-24T22:00:00,+03:00,EEST -2029-10-27T21:00:00,+02:00,EET -2030-03-30T22:00:00,+03:00,EEST -2030-10-26T21:00:00,+02:00,EET -2031-03-29T22:00:00,+03:00,EEST -2031-10-25T21:00:00,+02:00,EET -2032-03-27T22:00:00,+03:00,EEST -2032-10-30T21:00:00,+02:00,EET -2033-03-26T22:00:00,+03:00,EEST -2033-10-29T21:00:00,+02:00,EET -2034-03-25T22:00:00,+03:00,EEST -2034-10-28T21:00:00,+02:00,EET -2035-03-24T22:00:00,+03:00,EEST -2035-10-27T21:00:00,+02:00,EET -2036-03-29T22:00:00,+03:00,EEST -2036-10-25T21:00:00,+02:00,EET -2037-03-28T22:00:00,+03:00,EEST -2037-10-24T21:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/asia-bishkek.hoon b/desk/lib/pytz/asia-bishkek.hoon deleted file mode 100644 index 3d1a36d..0000000 --- a/desk/lib/pytz/asia-bishkek.hoon +++ /dev/null @@ -1,57 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:58,LMT -1924-05-01T19:01:36,+05:00,+05 -1930-06-20T19:00:00,+06:00,+06 -1981-03-31T18:00:00,+07:00,+07 -1981-09-30T17:00:00,+06:00,+06 -1982-03-31T18:00:00,+07:00,+07 -1982-09-30T17:00:00,+06:00,+06 -1983-03-31T18:00:00,+07:00,+07 -1983-09-30T17:00:00,+06:00,+06 -1984-03-31T18:00:00,+07:00,+07 -1984-09-29T20:00:00,+06:00,+06 -1985-03-30T20:00:00,+07:00,+07 -1985-09-28T20:00:00,+06:00,+06 -1986-03-29T20:00:00,+07:00,+07 -1986-09-27T20:00:00,+06:00,+06 -1987-03-28T20:00:00,+07:00,+07 -1987-09-26T20:00:00,+06:00,+06 -1988-03-26T20:00:00,+07:00,+07 -1988-09-24T20:00:00,+06:00,+06 -1989-03-25T20:00:00,+07:00,+07 -1989-09-23T20:00:00,+06:00,+06 -1990-03-24T20:00:00,+07:00,+07 -1990-09-29T20:00:00,+06:00,+06 -1991-03-30T20:00:00,+06:00,+06 -1991-08-30T20:00:00,+05:00,+05 -1992-04-11T19:00:00,+06:00,+06 -1992-09-26T18:00:00,+05:00,+05 -1993-04-10T19:00:00,+06:00,+06 -1993-09-25T18:00:00,+05:00,+05 -1994-04-09T19:00:00,+06:00,+06 -1994-09-24T18:00:00,+05:00,+05 -1995-04-08T19:00:00,+06:00,+06 -1995-09-23T18:00:00,+05:00,+05 -1996-04-06T19:00:00,+06:00,+06 -1996-09-28T18:00:00,+05:00,+05 -1997-03-29T21:30:00,+06:00,+06 -1997-10-25T20:30:00,+05:00,+05 -1998-03-28T21:30:00,+06:00,+06 -1998-10-24T20:30:00,+05:00,+05 -1999-03-27T21:30:00,+06:00,+06 -1999-10-30T20:30:00,+05:00,+05 -2000-03-25T21:30:00,+06:00,+06 -2000-10-28T20:30:00,+05:00,+05 -2001-03-24T21:30:00,+06:00,+06 -2001-10-27T20:30:00,+05:00,+05 -2002-03-30T21:30:00,+06:00,+06 -2002-10-26T20:30:00,+05:00,+05 -2003-03-29T21:30:00,+06:00,+06 -2003-10-25T20:30:00,+05:00,+05 -2004-03-27T21:30:00,+06:00,+06 -2004-10-30T20:30:00,+05:00,+05 -2005-03-26T21:30:00,+06:00,+06 -2005-08-11T18:00:00,+06:00,+06 -''' diff --git a/desk/lib/pytz/asia-brunei.hoon b/desk/lib/pytz/asia-brunei.hoon deleted file mode 100644 index 9fad48d..0000000 --- a/desk/lib/pytz/asia-brunei.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:40,LMT -1926-02-28T16:20:20,+07:30,+0730 -1932-12-31T16:30:00,+08:00,+08 -''' diff --git a/desk/lib/pytz/asia-chita.hoon b/desk/lib/pytz/asia-chita.hoon deleted file mode 100644 index b2cf0b8..0000000 --- a/desk/lib/pytz/asia-chita.hoon +++ /dev/null @@ -1,71 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:34,LMT -1919-12-14T16:26:08,+08:00,+08 -1930-06-20T16:00:00,+09:00,+09 -1981-03-31T15:00:00,+10:00,+10 -1981-09-30T14:00:00,+09:00,+09 -1982-03-31T15:00:00,+10:00,+10 -1982-09-30T14:00:00,+09:00,+09 -1983-03-31T15:00:00,+10:00,+10 -1983-09-30T14:00:00,+09:00,+09 -1984-03-31T15:00:00,+10:00,+10 -1984-09-29T17:00:00,+09:00,+09 -1985-03-30T17:00:00,+10:00,+10 -1985-09-28T17:00:00,+09:00,+09 -1986-03-29T17:00:00,+10:00,+10 -1986-09-27T17:00:00,+09:00,+09 -1987-03-28T17:00:00,+10:00,+10 -1987-09-26T17:00:00,+09:00,+09 -1988-03-26T17:00:00,+10:00,+10 -1988-09-24T17:00:00,+09:00,+09 -1989-03-25T17:00:00,+10:00,+10 -1989-09-23T17:00:00,+09:00,+09 -1990-03-24T17:00:00,+10:00,+10 -1990-09-29T17:00:00,+09:00,+09 -1991-03-30T17:00:00,+09:00,+09 -1991-09-28T18:00:00,+08:00,+08 -1992-01-18T18:00:00,+09:00,+09 -1992-03-28T17:00:00,+10:00,+10 -1992-09-26T17:00:00,+09:00,+09 -1993-03-27T17:00:00,+10:00,+10 -1993-09-25T17:00:00,+09:00,+09 -1994-03-26T17:00:00,+10:00,+10 -1994-09-24T17:00:00,+09:00,+09 -1995-03-25T17:00:00,+10:00,+10 -1995-09-23T17:00:00,+09:00,+09 -1996-03-30T17:00:00,+10:00,+10 -1996-10-26T17:00:00,+09:00,+09 -1997-03-29T17:00:00,+10:00,+10 -1997-10-25T17:00:00,+09:00,+09 -1998-03-28T17:00:00,+10:00,+10 -1998-10-24T17:00:00,+09:00,+09 -1999-03-27T17:00:00,+10:00,+10 -1999-10-30T17:00:00,+09:00,+09 -2000-03-25T17:00:00,+10:00,+10 -2000-10-28T17:00:00,+09:00,+09 -2001-03-24T17:00:00,+10:00,+10 -2001-10-27T17:00:00,+09:00,+09 -2002-03-30T17:00:00,+10:00,+10 -2002-10-26T17:00:00,+09:00,+09 -2003-03-29T17:00:00,+10:00,+10 -2003-10-25T17:00:00,+09:00,+09 -2004-03-27T17:00:00,+10:00,+10 -2004-10-30T17:00:00,+09:00,+09 -2005-03-26T17:00:00,+10:00,+10 -2005-10-29T17:00:00,+09:00,+09 -2006-03-25T17:00:00,+10:00,+10 -2006-10-28T17:00:00,+09:00,+09 -2007-03-24T17:00:00,+10:00,+10 -2007-10-27T17:00:00,+09:00,+09 -2008-03-29T17:00:00,+10:00,+10 -2008-10-25T17:00:00,+09:00,+09 -2009-03-28T17:00:00,+10:00,+10 -2009-10-24T17:00:00,+09:00,+09 -2010-03-27T17:00:00,+10:00,+10 -2010-10-30T17:00:00,+09:00,+09 -2011-03-26T17:00:00,+10:00,+10 -2014-10-25T16:00:00,+08:00,+08 -2016-03-26T18:00:00,+09:00,+09 -''' diff --git a/desk/lib/pytz/asia-chongqing.hoon b/desk/lib/pytz/asia-chongqing.hoon deleted file mode 100644 index 9b9e947..0000000 --- a/desk/lib/pytz/asia-chongqing.hoon +++ /dev/null @@ -1,34 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:06,LMT -1901-12-13T20:45:52,+08:00,CST -1919-04-12T16:00:00,+09:00,CDT -1919-09-30T15:00:00,+08:00,CST -1940-05-31T16:00:00,+09:00,CDT -1940-10-12T15:00:00,+08:00,CST -1941-03-14T16:00:00,+09:00,CDT -1941-11-01T15:00:00,+08:00,CST -1942-01-30T16:00:00,+09:00,CDT -1945-09-01T15:00:00,+08:00,CST -1946-05-14T16:00:00,+09:00,CDT -1946-09-30T15:00:00,+08:00,CST -1947-04-14T16:00:00,+09:00,CDT -1947-10-31T15:00:00,+08:00,CST -1948-04-30T16:00:00,+09:00,CDT -1948-09-30T15:00:00,+08:00,CST -1949-04-30T16:00:00,+09:00,CDT -1949-05-27T15:00:00,+08:00,CST -1986-05-03T18:00:00,+09:00,CDT -1986-09-13T17:00:00,+08:00,CST -1987-04-11T18:00:00,+09:00,CDT -1987-09-12T17:00:00,+08:00,CST -1988-04-16T18:00:00,+09:00,CDT -1988-09-10T17:00:00,+08:00,CST -1989-04-15T18:00:00,+09:00,CDT -1989-09-16T17:00:00,+08:00,CST -1990-04-14T18:00:00,+09:00,CDT -1990-09-15T17:00:00,+08:00,CST -1991-04-13T18:00:00,+09:00,CDT -1991-09-14T17:00:00,+08:00,CST -''' diff --git a/desk/lib/pytz/asia-colombo.hoon b/desk/lib/pytz/asia-colombo.hoon deleted file mode 100644 index 3ffa1c1..0000000 --- a/desk/lib/pytz/asia-colombo.hoon +++ /dev/null @@ -1,13 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:19,LMT -1901-12-13T20:45:52,+05:20,MMT -1905-12-31T18:40:28,+05:30,+0530 -1942-01-04T18:30:00,+06:00,+06 -1942-08-31T18:00:00,+06:30,+0630 -1945-10-15T19:30:00,+05:30,+0530 -1996-05-24T18:30:00,+06:30,+0630 -1996-10-25T18:00:00,+06:00,+06 -2006-04-14T18:30:00,+05:30,+0530 -''' diff --git a/desk/lib/pytz/asia-damascus.hoon b/desk/lib/pytz/asia-damascus.hoon deleted file mode 100644 index 8d9c9a5..0000000 --- a/desk/lib/pytz/asia-damascus.hoon +++ /dev/null @@ -1,126 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:25,LMT -1919-12-31T21:34:48,+02:00,EET -1920-04-18T00:00:00,+03:00,EEST -1920-10-02T23:00:00,+02:00,EET -1921-04-17T00:00:00,+03:00,EEST -1921-10-01T23:00:00,+02:00,EET -1922-04-16T00:00:00,+03:00,EEST -1922-09-30T23:00:00,+02:00,EET -1923-04-15T00:00:00,+03:00,EEST -1923-10-06T23:00:00,+02:00,EET -1962-04-29T00:00:00,+03:00,EEST -1962-09-30T23:00:00,+02:00,EET -1963-05-01T00:00:00,+03:00,EEST -1963-09-29T23:00:00,+02:00,EET -1964-05-01T00:00:00,+03:00,EEST -1964-09-30T23:00:00,+02:00,EET -1965-05-01T00:00:00,+03:00,EEST -1965-09-29T23:00:00,+02:00,EET -1966-04-24T00:00:00,+03:00,EEST -1966-09-30T23:00:00,+02:00,EET -1967-05-01T00:00:00,+03:00,EEST -1967-09-30T23:00:00,+02:00,EET -1968-05-01T00:00:00,+03:00,EEST -1968-09-30T23:00:00,+02:00,EET -1969-05-01T00:00:00,+03:00,EEST -1969-09-30T23:00:00,+02:00,EET -1970-05-01T00:00:00,+03:00,EEST -1970-09-30T23:00:00,+02:00,EET -1971-05-01T00:00:00,+03:00,EEST -1971-09-30T23:00:00,+02:00,EET -1972-05-01T00:00:00,+03:00,EEST -1972-09-30T23:00:00,+02:00,EET -1973-05-01T00:00:00,+03:00,EEST -1973-09-30T23:00:00,+02:00,EET -1974-05-01T00:00:00,+03:00,EEST -1974-09-30T23:00:00,+02:00,EET -1975-05-01T00:00:00,+03:00,EEST -1975-09-30T23:00:00,+02:00,EET -1976-05-01T00:00:00,+03:00,EEST -1976-09-30T23:00:00,+02:00,EET -1977-05-01T00:00:00,+03:00,EEST -1977-08-31T23:00:00,+02:00,EET -1978-05-01T00:00:00,+03:00,EEST -1978-08-31T23:00:00,+02:00,EET -1983-04-09T00:00:00,+03:00,EEST -1983-09-30T23:00:00,+02:00,EET -1984-04-09T00:00:00,+03:00,EEST -1984-09-30T23:00:00,+02:00,EET -1986-02-16T00:00:00,+03:00,EEST -1986-10-08T23:00:00,+02:00,EET -1987-03-01T00:00:00,+03:00,EEST -1987-10-30T23:00:00,+02:00,EET -1988-03-15T00:00:00,+03:00,EEST -1988-10-30T23:00:00,+02:00,EET -1989-03-31T00:00:00,+03:00,EEST -1989-09-30T23:00:00,+02:00,EET -1990-04-01T00:00:00,+03:00,EEST -1990-09-29T23:00:00,+02:00,EET -1991-03-31T22:00:00,+03:00,EEST -1991-09-30T21:00:00,+02:00,EET -1992-04-07T22:00:00,+03:00,EEST -1992-09-30T21:00:00,+02:00,EET -1993-03-25T22:00:00,+03:00,EEST -1993-09-24T21:00:00,+02:00,EET -1994-03-31T22:00:00,+03:00,EEST -1994-09-30T21:00:00,+02:00,EET -1995-03-31T22:00:00,+03:00,EEST -1995-09-30T21:00:00,+02:00,EET -1996-03-31T22:00:00,+03:00,EEST -1996-09-30T21:00:00,+02:00,EET -1997-03-30T22:00:00,+03:00,EEST -1997-09-30T21:00:00,+02:00,EET -1998-03-29T22:00:00,+03:00,EEST -1998-09-30T21:00:00,+02:00,EET -1999-03-31T22:00:00,+03:00,EEST -1999-09-30T21:00:00,+02:00,EET -2000-03-31T22:00:00,+03:00,EEST -2000-09-30T21:00:00,+02:00,EET -2001-03-31T22:00:00,+03:00,EEST -2001-09-30T21:00:00,+02:00,EET -2002-03-31T22:00:00,+03:00,EEST -2002-09-30T21:00:00,+02:00,EET -2003-03-31T22:00:00,+03:00,EEST -2003-09-30T21:00:00,+02:00,EET -2004-03-31T22:00:00,+03:00,EEST -2004-09-30T21:00:00,+02:00,EET -2005-03-31T22:00:00,+03:00,EEST -2005-09-30T21:00:00,+02:00,EET -2006-03-31T22:00:00,+03:00,EEST -2006-09-21T21:00:00,+02:00,EET -2007-03-29T22:00:00,+03:00,EEST -2007-11-01T21:00:00,+02:00,EET -2008-04-03T22:00:00,+03:00,EEST -2008-10-31T21:00:00,+02:00,EET -2009-03-26T22:00:00,+03:00,EEST -2009-10-29T21:00:00,+02:00,EET -2010-04-01T22:00:00,+03:00,EEST -2010-10-28T21:00:00,+02:00,EET -2011-03-31T22:00:00,+03:00,EEST -2011-10-27T21:00:00,+02:00,EET -2012-03-29T22:00:00,+03:00,EEST -2012-10-25T21:00:00,+02:00,EET -2013-03-28T22:00:00,+03:00,EEST -2013-10-24T21:00:00,+02:00,EET -2014-03-27T22:00:00,+03:00,EEST -2014-10-30T21:00:00,+02:00,EET -2015-03-26T22:00:00,+03:00,EEST -2015-10-29T21:00:00,+02:00,EET -2016-03-24T22:00:00,+03:00,EEST -2016-10-27T21:00:00,+02:00,EET -2017-03-30T22:00:00,+03:00,EEST -2017-10-26T21:00:00,+02:00,EET -2018-03-29T22:00:00,+03:00,EEST -2018-10-25T21:00:00,+02:00,EET -2019-03-28T22:00:00,+03:00,EEST -2019-10-24T21:00:00,+02:00,EET -2020-03-26T22:00:00,+03:00,EEST -2020-10-29T21:00:00,+02:00,EET -2021-03-25T22:00:00,+03:00,EEST -2021-10-28T21:00:00,+02:00,EET -2022-03-24T22:00:00,+03:00,EEST -2022-10-27T21:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/asia-dhaka.hoon b/desk/lib/pytz/asia-dhaka.hoon deleted file mode 100644 index b9b71df..0000000 --- a/desk/lib/pytz/asia-dhaka.hoon +++ /dev/null @@ -1,12 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:02,LMT -1901-12-13T20:45:52,+05:53,HMT -1941-09-30T18:06:40,+06:30,+0630 -1942-05-14T17:30:00,+05:30,+0530 -1942-08-31T18:30:00,+06:30,+0630 -1951-09-29T17:30:00,+06:00,+06 -2009-06-19T17:00:00,+07:00,+07 -2009-12-31T17:00:00,+06:00,+06 -''' diff --git a/desk/lib/pytz/asia-dili.hoon b/desk/lib/pytz/asia-dili.hoon deleted file mode 100644 index e8e288f..0000000 --- a/desk/lib/pytz/asia-dili.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:22,LMT -1911-12-31T16:00:00,+08:00,+08 -1942-02-21T15:00:00,+09:00,+09 -1976-05-02T15:00:00,+08:00,+08 -2000-09-16T16:00:00,+09:00,+09 -''' diff --git a/desk/lib/pytz/asia-dubai.hoon b/desk/lib/pytz/asia-dubai.hoon deleted file mode 100644 index 48a5606..0000000 --- a/desk/lib/pytz/asia-dubai.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:41,LMT -1919-12-31T20:18:48,+04:00,+04 -''' diff --git a/desk/lib/pytz/asia-dushanbe.hoon b/desk/lib/pytz/asia-dushanbe.hoon deleted file mode 100644 index 540aade..0000000 --- a/desk/lib/pytz/asia-dushanbe.hoon +++ /dev/null @@ -1,29 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:35,LMT -1924-05-01T19:24:48,+05:00,+05 -1930-06-20T19:00:00,+06:00,+06 -1981-03-31T18:00:00,+07:00,+07 -1981-09-30T17:00:00,+06:00,+06 -1982-03-31T18:00:00,+07:00,+07 -1982-09-30T17:00:00,+06:00,+06 -1983-03-31T18:00:00,+07:00,+07 -1983-09-30T17:00:00,+06:00,+06 -1984-03-31T18:00:00,+07:00,+07 -1984-09-29T20:00:00,+06:00,+06 -1985-03-30T20:00:00,+07:00,+07 -1985-09-28T20:00:00,+06:00,+06 -1986-03-29T20:00:00,+07:00,+07 -1986-09-27T20:00:00,+06:00,+06 -1987-03-28T20:00:00,+07:00,+07 -1987-09-26T20:00:00,+06:00,+06 -1988-03-26T20:00:00,+07:00,+07 -1988-09-24T20:00:00,+06:00,+06 -1989-03-25T20:00:00,+07:00,+07 -1989-09-23T20:00:00,+06:00,+06 -1990-03-24T20:00:00,+07:00,+07 -1990-09-29T20:00:00,+06:00,+06 -1991-03-30T20:00:00,+06:00,+06 -1991-09-08T21:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-famagusta.hoon b/desk/lib/pytz/asia-famagusta.hoon deleted file mode 100644 index 1ab0e76..0000000 --- a/desk/lib/pytz/asia-famagusta.hoon +++ /dev/null @@ -1,131 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:16,LMT -1921-11-13T21:44:12,+02:00,EET -1975-04-12T22:00:00,+03:00,EEST -1975-10-11T21:00:00,+02:00,EET -1976-05-14T22:00:00,+03:00,EEST -1976-10-10T21:00:00,+02:00,EET -1977-04-02T22:00:00,+03:00,EEST -1977-09-24T21:00:00,+02:00,EET -1978-04-01T22:00:00,+03:00,EEST -1978-10-01T21:00:00,+02:00,EET -1979-03-31T22:00:00,+03:00,EEST -1979-09-29T21:00:00,+02:00,EET -1980-04-05T22:00:00,+03:00,EEST -1980-09-27T21:00:00,+02:00,EET -1981-03-28T22:00:00,+03:00,EEST -1981-09-26T21:00:00,+02:00,EET -1982-03-27T22:00:00,+03:00,EEST -1982-09-25T21:00:00,+02:00,EET -1983-03-26T22:00:00,+03:00,EEST -1983-09-24T21:00:00,+02:00,EET -1984-03-24T22:00:00,+03:00,EEST -1984-09-29T21:00:00,+02:00,EET -1985-03-30T22:00:00,+03:00,EEST -1985-09-28T21:00:00,+02:00,EET -1986-03-29T22:00:00,+03:00,EEST -1986-09-27T21:00:00,+02:00,EET -1987-03-28T22:00:00,+03:00,EEST -1987-09-26T21:00:00,+02:00,EET -1988-03-26T22:00:00,+03:00,EEST -1988-09-24T21:00:00,+02:00,EET -1989-03-25T22:00:00,+03:00,EEST -1989-09-23T21:00:00,+02:00,EET -1990-03-24T22:00:00,+03:00,EEST -1990-09-29T21:00:00,+02:00,EET -1991-03-30T22:00:00,+03:00,EEST -1991-09-28T21:00:00,+02:00,EET -1992-03-28T22:00:00,+03:00,EEST -1992-09-26T21:00:00,+02:00,EET -1993-03-27T22:00:00,+03:00,EEST -1993-09-25T21:00:00,+02:00,EET -1994-03-26T22:00:00,+03:00,EEST -1994-09-24T21:00:00,+02:00,EET -1995-03-25T22:00:00,+03:00,EEST -1995-09-23T21:00:00,+02:00,EET -1996-03-30T22:00:00,+03:00,EEST -1996-09-28T21:00:00,+02:00,EET -1997-03-29T22:00:00,+03:00,EEST -1997-09-27T21:00:00,+02:00,EET -1998-03-28T22:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-09-07T21:00:00,+03:00,+03 -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/asia-gaza.hoon b/desk/lib/pytz/asia-gaza.hoon deleted file mode 100644 index 58566c1..0000000 --- a/desk/lib/pytz/asia-gaza.hoon +++ /dev/null @@ -1,155 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:18,LMT -1901-12-13T20:45:52,+02:00,EET -1940-06-01T00:00:00,+03:00,EEST -1940-10-01T00:00:00,+02:00,EET -1940-11-17T00:00:00,+03:00,EEST -1942-11-01T00:00:00,+02:00,EET -1943-04-01T00:00:00,+03:00,EEST -1943-11-01T00:00:00,+02:00,EET -1944-04-01T00:00:00,+03:00,EEST -1944-11-01T00:00:00,+02:00,EET -1945-04-16T00:00:00,+03:00,EEST -1945-11-01T00:00:00,+02:00,EET -1946-04-16T00:00:00,+03:00,EEST -1946-11-01T00:00:00,+02:00,EET -1957-05-09T22:00:00,+03:00,EEST -1957-09-30T21:00:00,+02:00,EET -1958-04-30T22:00:00,+03:00,EEST -1958-09-30T21:00:00,+02:00,EET -1959-04-30T23:00:00,+03:00,EEST -1959-09-30T00:00:00,+02:00,EET -1960-04-30T23:00:00,+03:00,EEST -1960-09-30T00:00:00,+02:00,EET -1961-04-30T23:00:00,+03:00,EEST -1961-09-30T00:00:00,+02:00,EET -1962-04-30T23:00:00,+03:00,EEST -1962-09-30T00:00:00,+02:00,EET -1963-04-30T23:00:00,+03:00,EEST -1963-09-30T00:00:00,+02:00,EET -1964-04-30T23:00:00,+03:00,EEST -1964-09-30T00:00:00,+02:00,EET -1965-04-30T23:00:00,+03:00,EEST -1965-09-30T00:00:00,+02:00,EET -1966-04-30T23:00:00,+03:00,EEST -1966-10-01T00:00:00,+02:00,EET -1967-04-30T23:00:00,+03:00,EEST -1967-06-04T21:00:00,+02:00,IST -1974-07-06T22:00:00,+03:00,IDT -1974-10-12T21:00:00,+02:00,IST -1975-04-19T22:00:00,+03:00,IDT -1975-08-30T21:00:00,+02:00,IST -1980-08-02T22:00:00,+03:00,IDT -1980-09-13T22:00:00,+02:00,IST -1984-05-05T22:00:00,+03:00,IDT -1984-08-25T22:00:00,+02:00,IST -1985-04-13T22:00:00,+03:00,IDT -1985-08-31T21:00:00,+02:00,IST -1986-05-17T22:00:00,+03:00,IDT -1986-09-06T21:00:00,+02:00,IST -1987-04-14T22:00:00,+03:00,IDT -1987-09-12T21:00:00,+02:00,IST -1988-04-09T22:00:00,+03:00,IDT -1988-09-03T21:00:00,+02:00,IST -1989-04-29T22:00:00,+03:00,IDT -1989-09-02T21:00:00,+02:00,IST -1990-03-24T22:00:00,+03:00,IDT -1990-08-25T21:00:00,+02:00,IST -1991-03-23T22:00:00,+03:00,IDT -1991-08-31T21:00:00,+02:00,IST -1992-03-28T22:00:00,+03:00,IDT -1992-09-05T21:00:00,+02:00,IST -1993-04-01T22:00:00,+03:00,IDT -1993-09-04T21:00:00,+02:00,IST -1994-03-31T22:00:00,+03:00,IDT -1994-08-27T21:00:00,+02:00,IST -1995-03-30T22:00:00,+03:00,IDT -1995-09-02T21:00:00,+02:00,IST -1995-12-31T22:00:00,+02:00,EET -1996-04-04T22:00:00,+03:00,EEST -1996-09-19T22:00:00,+02:00,EET -1997-04-03T22:00:00,+03:00,EEST -1997-09-18T22:00:00,+02:00,EET -1998-04-02T22:00:00,+03:00,EEST -1998-09-17T22:00:00,+02:00,EET -1999-04-15T22:00:00,+03:00,EEST -1999-10-14T21:00:00,+02:00,EET -2000-04-20T22:00:00,+03:00,EEST -2000-10-19T21:00:00,+02:00,EET -2001-04-19T22:00:00,+03:00,EEST -2001-10-18T21:00:00,+02:00,EET -2002-04-18T22:00:00,+03:00,EEST -2002-10-17T21:00:00,+02:00,EET -2003-04-17T22:00:00,+03:00,EEST -2003-10-16T21:00:00,+02:00,EET -2004-04-15T22:00:00,+03:00,EEST -2004-09-30T22:00:00,+02:00,EET -2005-04-14T22:00:00,+03:00,EEST -2005-10-03T23:00:00,+02:00,EET -2006-03-31T22:00:00,+03:00,EEST -2006-09-21T21:00:00,+02:00,EET -2007-03-31T22:00:00,+03:00,EEST -2007-09-12T23:00:00,+02:00,EET -2008-03-27T22:00:00,+03:00,EEST -2008-08-28T21:00:00,+02:00,EET -2009-03-26T22:00:00,+03:00,EEST -2009-09-03T22:00:00,+02:00,EET -2010-03-26T22:01:00,+03:00,EEST -2010-08-10T21:00:00,+02:00,EET -2011-03-31T22:01:00,+03:00,EEST -2011-07-31T21:00:00,+02:00,EET -2012-03-29T22:00:00,+03:00,EEST -2012-09-20T22:00:00,+02:00,EET -2013-03-28T22:00:00,+03:00,EEST -2013-09-26T21:00:00,+02:00,EET -2014-03-27T22:00:00,+03:00,EEST -2014-10-23T21:00:00,+02:00,EET -2015-03-27T22:00:00,+03:00,EEST -2015-10-22T22:00:00,+02:00,EET -2016-03-25T23:00:00,+03:00,EEST -2016-10-28T22:00:00,+02:00,EET -2017-03-24T23:00:00,+03:00,EEST -2017-10-27T22:00:00,+02:00,EET -2018-03-23T23:00:00,+03:00,EEST -2018-10-26T22:00:00,+02:00,EET -2019-03-28T22:00:00,+03:00,EEST -2019-10-25T21:00:00,+02:00,EET -2020-03-27T22:00:00,+03:00,EEST -2020-10-23T22:00:00,+02:00,EET -2021-03-26T22:00:00,+03:00,EEST -2021-10-28T22:00:00,+02:00,EET -2022-03-26T22:00:00,+03:00,EEST -2022-10-28T23:00:00,+02:00,EET -2023-04-29T00:00:00,+03:00,EEST -2023-10-27T23:00:00,+02:00,EET -2024-04-20T00:00:00,+03:00,EEST -2024-10-25T23:00:00,+02:00,EET -2025-04-12T00:00:00,+03:00,EEST -2025-10-24T23:00:00,+02:00,EET -2026-03-28T00:00:00,+03:00,EEST -2026-10-23T23:00:00,+02:00,EET -2027-03-27T00:00:00,+03:00,EEST -2027-10-29T23:00:00,+02:00,EET -2028-03-25T00:00:00,+03:00,EEST -2028-10-27T23:00:00,+02:00,EET -2029-03-24T00:00:00,+03:00,EEST -2029-10-26T23:00:00,+02:00,EET -2030-03-30T00:00:00,+03:00,EEST -2030-10-25T23:00:00,+02:00,EET -2031-03-29T00:00:00,+03:00,EEST -2031-10-24T23:00:00,+02:00,EET -2032-03-27T00:00:00,+03:00,EEST -2032-10-29T23:00:00,+02:00,EET -2033-03-26T00:00:00,+03:00,EEST -2033-10-28T23:00:00,+02:00,EET -2034-03-25T00:00:00,+03:00,EEST -2034-10-27T23:00:00,+02:00,EET -2035-03-24T00:00:00,+03:00,EEST -2035-10-26T23:00:00,+02:00,EET -2036-03-29T00:00:00,+03:00,EEST -2036-10-17T23:00:00,+02:00,EET -2037-03-28T00:00:00,+03:00,EEST -2037-10-09T23:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/asia-harbin.hoon b/desk/lib/pytz/asia-harbin.hoon deleted file mode 100644 index 9b9e947..0000000 --- a/desk/lib/pytz/asia-harbin.hoon +++ /dev/null @@ -1,34 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:06,LMT -1901-12-13T20:45:52,+08:00,CST -1919-04-12T16:00:00,+09:00,CDT -1919-09-30T15:00:00,+08:00,CST -1940-05-31T16:00:00,+09:00,CDT -1940-10-12T15:00:00,+08:00,CST -1941-03-14T16:00:00,+09:00,CDT -1941-11-01T15:00:00,+08:00,CST -1942-01-30T16:00:00,+09:00,CDT -1945-09-01T15:00:00,+08:00,CST -1946-05-14T16:00:00,+09:00,CDT -1946-09-30T15:00:00,+08:00,CST -1947-04-14T16:00:00,+09:00,CDT -1947-10-31T15:00:00,+08:00,CST -1948-04-30T16:00:00,+09:00,CDT -1948-09-30T15:00:00,+08:00,CST -1949-04-30T16:00:00,+09:00,CDT -1949-05-27T15:00:00,+08:00,CST -1986-05-03T18:00:00,+09:00,CDT -1986-09-13T17:00:00,+08:00,CST -1987-04-11T18:00:00,+09:00,CDT -1987-09-12T17:00:00,+08:00,CST -1988-04-16T18:00:00,+09:00,CDT -1988-09-10T17:00:00,+08:00,CST -1989-04-15T18:00:00,+09:00,CDT -1989-09-16T17:00:00,+08:00,CST -1990-04-14T18:00:00,+09:00,CDT -1990-09-15T17:00:00,+08:00,CST -1991-04-13T18:00:00,+09:00,CDT -1991-09-14T17:00:00,+08:00,CST -''' diff --git a/desk/lib/pytz/asia-hebron.hoon b/desk/lib/pytz/asia-hebron.hoon deleted file mode 100644 index a436d1e..0000000 --- a/desk/lib/pytz/asia-hebron.hoon +++ /dev/null @@ -1,157 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:20,LMT -1901-12-13T20:45:52,+02:00,EET -1940-06-01T00:00:00,+03:00,EEST -1940-10-01T00:00:00,+02:00,EET -1940-11-17T00:00:00,+03:00,EEST -1942-11-01T00:00:00,+02:00,EET -1943-04-01T00:00:00,+03:00,EEST -1943-11-01T00:00:00,+02:00,EET -1944-04-01T00:00:00,+03:00,EEST -1944-11-01T00:00:00,+02:00,EET -1945-04-16T00:00:00,+03:00,EEST -1945-11-01T00:00:00,+02:00,EET -1946-04-16T00:00:00,+03:00,EEST -1946-11-01T00:00:00,+02:00,EET -1957-05-09T22:00:00,+03:00,EEST -1957-09-30T21:00:00,+02:00,EET -1958-04-30T22:00:00,+03:00,EEST -1958-09-30T21:00:00,+02:00,EET -1959-04-30T23:00:00,+03:00,EEST -1959-09-30T00:00:00,+02:00,EET -1960-04-30T23:00:00,+03:00,EEST -1960-09-30T00:00:00,+02:00,EET -1961-04-30T23:00:00,+03:00,EEST -1961-09-30T00:00:00,+02:00,EET -1962-04-30T23:00:00,+03:00,EEST -1962-09-30T00:00:00,+02:00,EET -1963-04-30T23:00:00,+03:00,EEST -1963-09-30T00:00:00,+02:00,EET -1964-04-30T23:00:00,+03:00,EEST -1964-09-30T00:00:00,+02:00,EET -1965-04-30T23:00:00,+03:00,EEST -1965-09-30T00:00:00,+02:00,EET -1966-04-30T23:00:00,+03:00,EEST -1966-10-01T00:00:00,+02:00,EET -1967-04-30T23:00:00,+03:00,EEST -1967-06-04T21:00:00,+02:00,IST -1974-07-06T22:00:00,+03:00,IDT -1974-10-12T21:00:00,+02:00,IST -1975-04-19T22:00:00,+03:00,IDT -1975-08-30T21:00:00,+02:00,IST -1980-08-02T22:00:00,+03:00,IDT -1980-09-13T22:00:00,+02:00,IST -1984-05-05T22:00:00,+03:00,IDT -1984-08-25T22:00:00,+02:00,IST -1985-04-13T22:00:00,+03:00,IDT -1985-08-31T21:00:00,+02:00,IST -1986-05-17T22:00:00,+03:00,IDT -1986-09-06T21:00:00,+02:00,IST -1987-04-14T22:00:00,+03:00,IDT -1987-09-12T21:00:00,+02:00,IST -1988-04-09T22:00:00,+03:00,IDT -1988-09-03T21:00:00,+02:00,IST -1989-04-29T22:00:00,+03:00,IDT -1989-09-02T21:00:00,+02:00,IST -1990-03-24T22:00:00,+03:00,IDT -1990-08-25T21:00:00,+02:00,IST -1991-03-23T22:00:00,+03:00,IDT -1991-08-31T21:00:00,+02:00,IST -1992-03-28T22:00:00,+03:00,IDT -1992-09-05T21:00:00,+02:00,IST -1993-04-01T22:00:00,+03:00,IDT -1993-09-04T21:00:00,+02:00,IST -1994-03-31T22:00:00,+03:00,IDT -1994-08-27T21:00:00,+02:00,IST -1995-03-30T22:00:00,+03:00,IDT -1995-09-02T21:00:00,+02:00,IST -1995-12-31T22:00:00,+02:00,EET -1996-04-04T22:00:00,+03:00,EEST -1996-09-19T22:00:00,+02:00,EET -1997-04-03T22:00:00,+03:00,EEST -1997-09-18T22:00:00,+02:00,EET -1998-04-02T22:00:00,+03:00,EEST -1998-09-17T22:00:00,+02:00,EET -1999-04-15T22:00:00,+03:00,EEST -1999-10-14T21:00:00,+02:00,EET -2000-04-20T22:00:00,+03:00,EEST -2000-10-19T21:00:00,+02:00,EET -2001-04-19T22:00:00,+03:00,EEST -2001-10-18T21:00:00,+02:00,EET -2002-04-18T22:00:00,+03:00,EEST -2002-10-17T21:00:00,+02:00,EET -2003-04-17T22:00:00,+03:00,EEST -2003-10-16T21:00:00,+02:00,EET -2004-04-15T22:00:00,+03:00,EEST -2004-09-30T22:00:00,+02:00,EET -2005-04-14T22:00:00,+03:00,EEST -2005-10-03T23:00:00,+02:00,EET -2006-03-31T22:00:00,+03:00,EEST -2006-09-21T21:00:00,+02:00,EET -2007-03-31T22:00:00,+03:00,EEST -2007-09-12T23:00:00,+02:00,EET -2008-03-27T22:00:00,+03:00,EEST -2008-08-31T21:00:00,+02:00,EET -2009-03-26T22:00:00,+03:00,EEST -2009-09-03T22:00:00,+02:00,EET -2010-03-25T22:00:00,+03:00,EEST -2010-08-10T21:00:00,+02:00,EET -2011-03-31T22:01:00,+03:00,EEST -2011-07-31T21:00:00,+02:00,EET -2011-08-29T22:00:00,+03:00,EEST -2011-09-29T21:00:00,+02:00,EET -2012-03-29T22:00:00,+03:00,EEST -2012-09-20T22:00:00,+02:00,EET -2013-03-28T22:00:00,+03:00,EEST -2013-09-26T21:00:00,+02:00,EET -2014-03-27T22:00:00,+03:00,EEST -2014-10-23T21:00:00,+02:00,EET -2015-03-27T22:00:00,+03:00,EEST -2015-10-22T22:00:00,+02:00,EET -2016-03-25T23:00:00,+03:00,EEST -2016-10-28T22:00:00,+02:00,EET -2017-03-24T23:00:00,+03:00,EEST -2017-10-27T22:00:00,+02:00,EET -2018-03-23T23:00:00,+03:00,EEST -2018-10-26T22:00:00,+02:00,EET -2019-03-28T22:00:00,+03:00,EEST -2019-10-25T21:00:00,+02:00,EET -2020-03-27T22:00:00,+03:00,EEST -2020-10-23T22:00:00,+02:00,EET -2021-03-26T22:00:00,+03:00,EEST -2021-10-28T22:00:00,+02:00,EET -2022-03-26T22:00:00,+03:00,EEST -2022-10-28T23:00:00,+02:00,EET -2023-04-29T00:00:00,+03:00,EEST -2023-10-27T23:00:00,+02:00,EET -2024-04-20T00:00:00,+03:00,EEST -2024-10-25T23:00:00,+02:00,EET -2025-04-12T00:00:00,+03:00,EEST -2025-10-24T23:00:00,+02:00,EET -2026-03-28T00:00:00,+03:00,EEST -2026-10-23T23:00:00,+02:00,EET -2027-03-27T00:00:00,+03:00,EEST -2027-10-29T23:00:00,+02:00,EET -2028-03-25T00:00:00,+03:00,EEST -2028-10-27T23:00:00,+02:00,EET -2029-03-24T00:00:00,+03:00,EEST -2029-10-26T23:00:00,+02:00,EET -2030-03-30T00:00:00,+03:00,EEST -2030-10-25T23:00:00,+02:00,EET -2031-03-29T00:00:00,+03:00,EEST -2031-10-24T23:00:00,+02:00,EET -2032-03-27T00:00:00,+03:00,EEST -2032-10-29T23:00:00,+02:00,EET -2033-03-26T00:00:00,+03:00,EEST -2033-10-28T23:00:00,+02:00,EET -2034-03-25T00:00:00,+03:00,EEST -2034-10-27T23:00:00,+02:00,EET -2035-03-24T00:00:00,+03:00,EEST -2035-10-26T23:00:00,+02:00,EET -2036-03-29T00:00:00,+03:00,EEST -2036-10-17T23:00:00,+02:00,EET -2037-03-28T00:00:00,+03:00,EEST -2037-10-09T23:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/asia-ho-chi-minh.hoon b/desk/lib/pytz/asia-ho-chi-minh.hoon deleted file mode 100644 index 06f9e5d..0000000 --- a/desk/lib/pytz/asia-ho-chi-minh.hoon +++ /dev/null @@ -1,14 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:07,LMT -1906-06-30T16:53:30,+07:07,PLMT -1911-04-30T16:53:30,+07:00,+07 -1942-12-31T16:00:00,+08:00,+08 -1945-03-14T15:00:00,+09:00,+09 -1945-09-01T15:00:00,+07:00,+07 -1947-03-31T17:00:00,+08:00,+08 -1955-06-30T17:00:00,+07:00,+07 -1959-12-31T16:00:00,+08:00,+08 -1975-06-12T16:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-hong-kong.hoon b/desk/lib/pytz/asia-hong-kong.hoon deleted file mode 100644 index fd8cf98..0000000 --- a/desk/lib/pytz/asia-hong-kong.hoon +++ /dev/null @@ -1,74 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:37,LMT -1904-10-29T17:00:00,+08:00,HKT -1941-06-14T19:00:00,+09:00,HKST -1941-09-30T19:00:00,+08:30,HKWT -1941-12-24T15:30:00,+09:00,JST -1945-11-17T17:00:00,+08:00,HKT -1946-04-20T16:00:00,+09:00,HKST -1946-11-30T19:30:00,+08:00,HKT -1947-04-12T19:30:00,+09:00,HKST -1947-11-29T19:30:00,+08:00,HKT -1948-05-01T19:30:00,+09:00,HKST -1948-10-30T19:30:00,+08:00,HKT -1949-04-02T19:30:00,+09:00,HKST -1949-10-29T19:30:00,+08:00,HKT -1950-04-01T19:30:00,+09:00,HKST -1950-10-28T19:30:00,+08:00,HKT -1951-03-31T19:30:00,+09:00,HKST -1951-10-27T19:30:00,+08:00,HKT -1952-04-05T19:30:00,+09:00,HKST -1952-11-01T19:30:00,+08:00,HKT -1953-04-04T19:30:00,+09:00,HKST -1953-10-31T18:30:00,+08:00,HKT -1954-03-20T19:30:00,+09:00,HKST -1954-10-30T18:30:00,+08:00,HKT -1955-03-19T19:30:00,+09:00,HKST -1955-11-05T18:30:00,+08:00,HKT -1956-03-17T19:30:00,+09:00,HKST -1956-11-03T18:30:00,+08:00,HKT -1957-03-23T19:30:00,+09:00,HKST -1957-11-02T18:30:00,+08:00,HKT -1958-03-22T19:30:00,+09:00,HKST -1958-11-01T18:30:00,+08:00,HKT -1959-03-21T19:30:00,+09:00,HKST -1959-10-31T18:30:00,+08:00,HKT -1960-03-19T19:30:00,+09:00,HKST -1960-11-05T18:30:00,+08:00,HKT -1961-03-18T19:30:00,+09:00,HKST -1961-11-04T18:30:00,+08:00,HKT -1962-03-17T19:30:00,+09:00,HKST -1962-11-03T18:30:00,+08:00,HKT -1963-03-23T19:30:00,+09:00,HKST -1963-11-02T18:30:00,+08:00,HKT -1964-03-21T19:30:00,+09:00,HKST -1964-10-31T18:30:00,+08:00,HKT -1965-04-17T19:30:00,+09:00,HKST -1965-10-16T18:30:00,+08:00,HKT -1966-04-16T19:30:00,+09:00,HKST -1966-10-15T18:30:00,+08:00,HKT -1967-04-15T19:30:00,+09:00,HKST -1967-10-21T18:30:00,+08:00,HKT -1968-04-20T19:30:00,+09:00,HKST -1968-10-19T18:30:00,+08:00,HKT -1969-04-19T19:30:00,+09:00,HKST -1969-10-18T18:30:00,+08:00,HKT -1970-04-18T19:30:00,+09:00,HKST -1970-10-17T18:30:00,+08:00,HKT -1971-04-17T19:30:00,+09:00,HKST -1971-10-16T18:30:00,+08:00,HKT -1972-04-15T19:30:00,+09:00,HKST -1972-10-21T18:30:00,+08:00,HKT -1973-04-21T19:30:00,+09:00,HKST -1973-10-20T18:30:00,+08:00,HKT -1973-12-29T19:30:00,+09:00,HKST -1974-10-19T18:30:00,+08:00,HKT -1975-04-19T19:30:00,+09:00,HKST -1975-10-18T18:30:00,+08:00,HKT -1976-04-17T19:30:00,+09:00,HKST -1976-10-16T18:30:00,+08:00,HKT -1979-05-12T19:30:00,+09:00,HKST -1979-10-20T18:30:00,+08:00,HKT -''' diff --git a/desk/lib/pytz/asia-hovd.hoon b/desk/lib/pytz/asia-hovd.hoon deleted file mode 100644 index 69b1cf4..0000000 --- a/desk/lib/pytz/asia-hovd.hoon +++ /dev/null @@ -1,55 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:07,LMT -1905-07-31T17:53:24,+06:00,+06 -1977-12-31T18:00:00,+07:00,+07 -1983-03-31T17:00:00,+08:00,+08 -1983-09-30T16:00:00,+07:00,+07 -1984-03-31T17:00:00,+08:00,+08 -1984-09-29T16:00:00,+07:00,+07 -1985-03-30T17:00:00,+08:00,+08 -1985-09-28T16:00:00,+07:00,+07 -1986-03-29T17:00:00,+08:00,+08 -1986-09-27T16:00:00,+07:00,+07 -1987-03-28T17:00:00,+08:00,+08 -1987-09-26T16:00:00,+07:00,+07 -1988-03-26T17:00:00,+08:00,+08 -1988-09-24T16:00:00,+07:00,+07 -1989-03-25T17:00:00,+08:00,+08 -1989-09-23T16:00:00,+07:00,+07 -1990-03-24T17:00:00,+08:00,+08 -1990-09-29T16:00:00,+07:00,+07 -1991-03-30T17:00:00,+08:00,+08 -1991-09-28T16:00:00,+07:00,+07 -1992-03-28T17:00:00,+08:00,+08 -1992-09-26T16:00:00,+07:00,+07 -1993-03-27T17:00:00,+08:00,+08 -1993-09-25T16:00:00,+07:00,+07 -1994-03-26T17:00:00,+08:00,+08 -1994-09-24T16:00:00,+07:00,+07 -1995-03-25T17:00:00,+08:00,+08 -1995-09-23T16:00:00,+07:00,+07 -1996-03-30T17:00:00,+08:00,+08 -1996-09-28T16:00:00,+07:00,+07 -1997-03-29T17:00:00,+08:00,+08 -1997-09-27T16:00:00,+07:00,+07 -1998-03-28T17:00:00,+08:00,+08 -1998-09-26T16:00:00,+07:00,+07 -2001-04-27T19:00:00,+08:00,+08 -2001-09-28T18:00:00,+07:00,+07 -2002-03-29T19:00:00,+08:00,+08 -2002-09-27T18:00:00,+07:00,+07 -2003-03-28T19:00:00,+08:00,+08 -2003-09-26T18:00:00,+07:00,+07 -2004-03-26T19:00:00,+08:00,+08 -2004-09-24T18:00:00,+07:00,+07 -2005-03-25T19:00:00,+08:00,+08 -2005-09-23T18:00:00,+07:00,+07 -2006-03-24T19:00:00,+08:00,+08 -2006-09-29T18:00:00,+07:00,+07 -2015-03-27T19:00:00,+08:00,+08 -2015-09-25T16:00:00,+07:00,+07 -2016-03-25T19:00:00,+08:00,+08 -2016-09-23T16:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-irkutsk.hoon b/desk/lib/pytz/asia-irkutsk.hoon deleted file mode 100644 index 19e5b6e..0000000 --- a/desk/lib/pytz/asia-irkutsk.hoon +++ /dev/null @@ -1,71 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:57,LMT -1901-12-13T20:45:52,+06:57,IMT -1920-01-24T17:02:55,+07:00,+07 -1930-06-20T17:00:00,+08:00,+08 -1981-03-31T16:00:00,+09:00,+09 -1981-09-30T15:00:00,+08:00,+08 -1982-03-31T16:00:00,+09:00,+09 -1982-09-30T15:00:00,+08:00,+08 -1983-03-31T16:00:00,+09:00,+09 -1983-09-30T15:00:00,+08:00,+08 -1984-03-31T16:00:00,+09:00,+09 -1984-09-29T18:00:00,+08:00,+08 -1985-03-30T18:00:00,+09:00,+09 -1985-09-28T18:00:00,+08:00,+08 -1986-03-29T18:00:00,+09:00,+09 -1986-09-27T18:00:00,+08:00,+08 -1987-03-28T18:00:00,+09:00,+09 -1987-09-26T18:00:00,+08:00,+08 -1988-03-26T18:00:00,+09:00,+09 -1988-09-24T18:00:00,+08:00,+08 -1989-03-25T18:00:00,+09:00,+09 -1989-09-23T18:00:00,+08:00,+08 -1990-03-24T18:00:00,+09:00,+09 -1990-09-29T18:00:00,+08:00,+08 -1991-03-30T18:00:00,+08:00,+08 -1991-09-28T19:00:00,+07:00,+07 -1992-01-18T19:00:00,+08:00,+08 -1992-03-28T18:00:00,+09:00,+09 -1992-09-26T18:00:00,+08:00,+08 -1993-03-27T18:00:00,+09:00,+09 -1993-09-25T18:00:00,+08:00,+08 -1994-03-26T18:00:00,+09:00,+09 -1994-09-24T18:00:00,+08:00,+08 -1995-03-25T18:00:00,+09:00,+09 -1995-09-23T18:00:00,+08:00,+08 -1996-03-30T18:00:00,+09:00,+09 -1996-10-26T18:00:00,+08:00,+08 -1997-03-29T18:00:00,+09:00,+09 -1997-10-25T18:00:00,+08:00,+08 -1998-03-28T18:00:00,+09:00,+09 -1998-10-24T18:00:00,+08:00,+08 -1999-03-27T18:00:00,+09:00,+09 -1999-10-30T18:00:00,+08:00,+08 -2000-03-25T18:00:00,+09:00,+09 -2000-10-28T18:00:00,+08:00,+08 -2001-03-24T18:00:00,+09:00,+09 -2001-10-27T18:00:00,+08:00,+08 -2002-03-30T18:00:00,+09:00,+09 -2002-10-26T18:00:00,+08:00,+08 -2003-03-29T18:00:00,+09:00,+09 -2003-10-25T18:00:00,+08:00,+08 -2004-03-27T18:00:00,+09:00,+09 -2004-10-30T18:00:00,+08:00,+08 -2005-03-26T18:00:00,+09:00,+09 -2005-10-29T18:00:00,+08:00,+08 -2006-03-25T18:00:00,+09:00,+09 -2006-10-28T18:00:00,+08:00,+08 -2007-03-24T18:00:00,+09:00,+09 -2007-10-27T18:00:00,+08:00,+08 -2008-03-29T18:00:00,+09:00,+09 -2008-10-25T18:00:00,+08:00,+08 -2009-03-28T18:00:00,+09:00,+09 -2009-10-24T18:00:00,+08:00,+08 -2010-03-27T18:00:00,+09:00,+09 -2010-10-30T18:00:00,+08:00,+08 -2011-03-26T18:00:00,+09:00,+09 -2014-10-25T17:00:00,+08:00,+08 -''' diff --git a/desk/lib/pytz/asia-istanbul.hoon b/desk/lib/pytz/asia-istanbul.hoon deleted file mode 100644 index 74a1c70..0000000 --- a/desk/lib/pytz/asia-istanbul.hoon +++ /dev/null @@ -1,120 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:56,LMT -1901-12-13T20:45:52,+01:57,IMT -1910-09-30T22:03:04,+02:00,EET -1916-04-30T22:00:00,+03:00,EEST -1916-09-30T21:00:00,+02:00,EET -1920-03-27T22:00:00,+03:00,EEST -1920-10-24T21:00:00,+02:00,EET -1921-04-02T22:00:00,+03:00,EEST -1921-10-02T21:00:00,+02:00,EET -1922-03-25T22:00:00,+03:00,EEST -1922-10-07T21:00:00,+02:00,EET -1924-05-12T22:00:00,+03:00,EEST -1924-09-30T21:00:00,+02:00,EET -1925-04-30T22:00:00,+03:00,EEST -1925-09-30T21:00:00,+02:00,EET -1940-06-30T22:00:00,+03:00,EEST -1940-10-05T21:00:00,+02:00,EET -1940-11-30T22:00:00,+03:00,EEST -1941-09-20T21:00:00,+02:00,EET -1942-03-31T22:00:00,+03:00,EEST -1945-10-07T21:00:00,+02:00,EET -1946-05-31T22:00:00,+03:00,EEST -1946-09-30T21:00:00,+02:00,EET -1947-04-19T22:00:00,+03:00,EEST -1947-10-04T21:00:00,+02:00,EET -1948-04-17T22:00:00,+03:00,EEST -1948-10-02T21:00:00,+02:00,EET -1949-04-09T22:00:00,+03:00,EEST -1949-10-01T21:00:00,+02:00,EET -1950-04-15T22:00:00,+03:00,EEST -1950-10-07T21:00:00,+02:00,EET -1951-04-21T22:00:00,+03:00,EEST -1951-10-06T21:00:00,+02:00,EET -1962-07-14T22:00:00,+03:00,EEST -1963-10-29T21:00:00,+02:00,EET -1964-05-14T22:00:00,+03:00,EEST -1964-09-30T21:00:00,+02:00,EET -1973-06-02T23:00:00,+03:00,EEST -1973-11-03T23:00:00,+02:00,EET -1974-03-31T00:00:00,+03:00,EEST -1974-11-02T23:00:00,+02:00,EET -1975-03-22T00:00:00,+03:00,EEST -1975-11-01T23:00:00,+02:00,EET -1976-03-21T00:00:00,+03:00,EEST -1976-10-30T23:00:00,+02:00,EET -1977-04-03T00:00:00,+03:00,EEST -1977-10-15T23:00:00,+02:00,EET -1978-04-02T00:00:00,+03:00,EEST -1978-06-28T21:00:00,+03:00,+03 -1983-07-30T23:00:00,+04:00,+04 -1983-10-01T22:00:00,+03:00,+03 -1984-10-31T23:00:00,+02:00,EET -1985-04-19T23:00:00,+03:00,EEST -1985-09-27T23:00:00,+02:00,EET -1986-03-29T23:00:00,+03:00,EEST -1986-09-27T23:00:00,+02:00,EET -1987-03-28T23:00:00,+03:00,EEST -1987-09-26T23:00:00,+02:00,EET -1988-03-26T23:00:00,+03:00,EEST -1988-09-24T23:00:00,+02:00,EET -1989-03-25T23:00:00,+03:00,EEST -1989-09-23T23:00:00,+02:00,EET -1990-03-24T23:00:00,+03:00,EEST -1990-09-29T23:00:00,+02:00,EET -1991-03-30T23:00:00,+03:00,EEST -1991-09-28T23:00:00,+02:00,EET -1992-03-28T23:00:00,+03:00,EEST -1992-09-26T23:00:00,+02:00,EET -1993-03-27T23:00:00,+03:00,EEST -1993-09-25T23:00:00,+02:00,EET -1994-03-19T23:00:00,+03:00,EEST -1994-09-24T23:00:00,+02:00,EET -1995-03-25T23:00:00,+03:00,EEST -1995-09-23T23:00:00,+02:00,EET -1996-03-30T23:00:00,+03:00,EEST -1996-10-26T23:00:00,+02:00,EET -1997-03-29T23:00:00,+03:00,EEST -1997-10-25T23:00:00,+02:00,EET -1998-03-28T23:00:00,+03:00,EEST -1998-10-24T23:00:00,+02:00,EET -1999-03-27T23:00:00,+03:00,EEST -1999-10-30T23:00:00,+02:00,EET -2000-03-25T23:00:00,+03:00,EEST -2000-10-28T23:00:00,+02:00,EET -2001-03-24T23:00:00,+03:00,EEST -2001-10-27T23:00:00,+02:00,EET -2002-03-30T23:00:00,+03:00,EEST -2002-10-26T23:00:00,+02:00,EET -2003-03-29T23:00:00,+03:00,EEST -2003-10-25T23:00:00,+02:00,EET -2004-03-27T23:00:00,+03:00,EEST -2004-10-30T23:00:00,+02:00,EET -2005-03-26T23:00:00,+03:00,EEST -2005-10-29T23:00:00,+02:00,EET -2006-03-25T23:00:00,+03:00,EEST -2006-10-28T23:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-28T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-31T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-11-08T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-09-06T21:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/asia-jakarta.hoon b/desk/lib/pytz/asia-jakarta.hoon deleted file mode 100644 index 0d817c5..0000000 --- a/desk/lib/pytz/asia-jakarta.hoon +++ /dev/null @@ -1,13 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:07,LMT -1901-12-13T20:45:52,+07:07,BMT -1923-12-31T16:40:00,+07:20,+0720 -1932-10-31T16:40:00,+07:30,+0730 -1942-03-22T16:30:00,+09:00,+09 -1945-09-22T15:00:00,+07:30,+0730 -1948-04-30T16:30:00,+08:00,+08 -1950-04-30T16:00:00,+07:30,+0730 -1963-12-31T16:30:00,+07:00,WIB -''' diff --git a/desk/lib/pytz/asia-jayapura.hoon b/desk/lib/pytz/asia-jayapura.hoon deleted file mode 100644 index b9332e3..0000000 --- a/desk/lib/pytz/asia-jayapura.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:23,LMT -1932-10-31T14:37:12,+09:00,+09 -1944-08-31T15:00:00,+09:30,+0930 -1963-12-31T14:30:00,+09:00,WIT -''' diff --git a/desk/lib/pytz/asia-jerusalem.hoon b/desk/lib/pytz/asia-jerusalem.hoon deleted file mode 100644 index 197011f..0000000 --- a/desk/lib/pytz/asia-jerusalem.hoon +++ /dev/null @@ -1,154 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:21,LMT -1901-12-13T20:45:52,+02:21,JMT -1917-12-31T21:39:20,+02:00,IST -1940-06-01T00:00:00,+03:00,IDT -1940-10-01T00:00:00,+02:00,IST -1940-11-17T00:00:00,+03:00,IDT -1942-11-01T00:00:00,+02:00,IST -1943-04-01T00:00:00,+03:00,IDT -1943-11-01T00:00:00,+02:00,IST -1944-04-01T00:00:00,+03:00,IDT -1944-11-01T00:00:00,+02:00,IST -1945-04-16T00:00:00,+03:00,IDT -1945-11-01T00:00:00,+02:00,IST -1946-04-16T00:00:00,+03:00,IDT -1946-11-01T00:00:00,+02:00,IST -1948-05-23T00:00:00,+04:00,IDDT -1948-09-01T00:00:00,+03:00,IDT -1948-11-01T00:00:00,+02:00,IST -1949-05-01T00:00:00,+03:00,IDT -1949-11-01T00:00:00,+02:00,IST -1950-04-16T00:00:00,+03:00,IDT -1950-09-15T00:00:00,+02:00,IST -1951-04-01T00:00:00,+03:00,IDT -1951-11-11T00:00:00,+02:00,IST -1952-04-20T00:00:00,+03:00,IDT -1952-10-19T00:00:00,+02:00,IST -1953-04-12T00:00:00,+03:00,IDT -1953-09-13T00:00:00,+02:00,IST -1954-06-13T00:00:00,+03:00,IDT -1954-09-12T00:00:00,+02:00,IST -1955-06-12T00:00:00,+03:00,IDT -1955-09-11T00:00:00,+02:00,IST -1956-06-03T00:00:00,+03:00,IDT -1956-09-30T00:00:00,+02:00,IST -1957-04-28T00:00:00,+03:00,IDT -1957-09-22T00:00:00,+02:00,IST -1974-07-06T22:00:00,+03:00,IDT -1974-10-12T21:00:00,+02:00,IST -1975-04-19T22:00:00,+03:00,IDT -1975-08-30T21:00:00,+02:00,IST -1980-08-02T22:00:00,+03:00,IDT -1980-09-13T22:00:00,+02:00,IST -1984-05-05T22:00:00,+03:00,IDT -1984-08-25T22:00:00,+02:00,IST -1985-04-13T22:00:00,+03:00,IDT -1985-08-31T21:00:00,+02:00,IST -1986-05-17T22:00:00,+03:00,IDT -1986-09-06T21:00:00,+02:00,IST -1987-04-14T22:00:00,+03:00,IDT -1987-09-12T21:00:00,+02:00,IST -1988-04-09T22:00:00,+03:00,IDT -1988-09-03T21:00:00,+02:00,IST -1989-04-29T22:00:00,+03:00,IDT -1989-09-02T21:00:00,+02:00,IST -1990-03-24T22:00:00,+03:00,IDT -1990-08-25T21:00:00,+02:00,IST -1991-03-23T22:00:00,+03:00,IDT -1991-08-31T21:00:00,+02:00,IST -1992-03-28T22:00:00,+03:00,IDT -1992-09-05T21:00:00,+02:00,IST -1993-04-01T22:00:00,+03:00,IDT -1993-09-04T21:00:00,+02:00,IST -1994-03-31T22:00:00,+03:00,IDT -1994-08-27T21:00:00,+02:00,IST -1995-03-30T22:00:00,+03:00,IDT -1995-09-02T21:00:00,+02:00,IST -1996-03-14T22:00:00,+03:00,IDT -1996-09-15T21:00:00,+02:00,IST -1997-03-20T22:00:00,+03:00,IDT -1997-09-13T21:00:00,+02:00,IST -1998-03-19T22:00:00,+03:00,IDT -1998-09-05T21:00:00,+02:00,IST -1999-04-02T00:00:00,+03:00,IDT -1999-09-02T23:00:00,+02:00,IST -2000-04-14T00:00:00,+03:00,IDT -2000-10-05T22:00:00,+02:00,IST -2001-04-08T23:00:00,+03:00,IDT -2001-09-23T22:00:00,+02:00,IST -2002-03-28T23:00:00,+03:00,IDT -2002-10-06T22:00:00,+02:00,IST -2003-03-27T23:00:00,+03:00,IDT -2003-10-02T22:00:00,+02:00,IST -2004-04-06T23:00:00,+03:00,IDT -2004-09-21T22:00:00,+02:00,IST -2005-04-01T00:00:00,+03:00,IDT -2005-10-08T23:00:00,+02:00,IST -2006-03-31T00:00:00,+03:00,IDT -2006-09-30T23:00:00,+02:00,IST -2007-03-30T00:00:00,+03:00,IDT -2007-09-15T23:00:00,+02:00,IST -2008-03-28T00:00:00,+03:00,IDT -2008-10-04T23:00:00,+02:00,IST -2009-03-27T00:00:00,+03:00,IDT -2009-09-26T23:00:00,+02:00,IST -2010-03-26T00:00:00,+03:00,IDT -2010-09-11T23:00:00,+02:00,IST -2011-04-01T00:00:00,+03:00,IDT -2011-10-01T23:00:00,+02:00,IST -2012-03-30T00:00:00,+03:00,IDT -2012-09-22T23:00:00,+02:00,IST -2013-03-29T00:00:00,+03:00,IDT -2013-10-26T23:00:00,+02:00,IST -2014-03-28T00:00:00,+03:00,IDT -2014-10-25T23:00:00,+02:00,IST -2015-03-27T00:00:00,+03:00,IDT -2015-10-24T23:00:00,+02:00,IST -2016-03-25T00:00:00,+03:00,IDT -2016-10-29T23:00:00,+02:00,IST -2017-03-24T00:00:00,+03:00,IDT -2017-10-28T23:00:00,+02:00,IST -2018-03-23T00:00:00,+03:00,IDT -2018-10-27T23:00:00,+02:00,IST -2019-03-29T00:00:00,+03:00,IDT -2019-10-26T23:00:00,+02:00,IST -2020-03-27T00:00:00,+03:00,IDT -2020-10-24T23:00:00,+02:00,IST -2021-03-26T00:00:00,+03:00,IDT -2021-10-30T23:00:00,+02:00,IST -2022-03-25T00:00:00,+03:00,IDT -2022-10-29T23:00:00,+02:00,IST -2023-03-24T00:00:00,+03:00,IDT -2023-10-28T23:00:00,+02:00,IST -2024-03-29T00:00:00,+03:00,IDT -2024-10-26T23:00:00,+02:00,IST -2025-03-28T00:00:00,+03:00,IDT -2025-10-25T23:00:00,+02:00,IST -2026-03-27T00:00:00,+03:00,IDT -2026-10-24T23:00:00,+02:00,IST -2027-03-26T00:00:00,+03:00,IDT -2027-10-30T23:00:00,+02:00,IST -2028-03-24T00:00:00,+03:00,IDT -2028-10-28T23:00:00,+02:00,IST -2029-03-23T00:00:00,+03:00,IDT -2029-10-27T23:00:00,+02:00,IST -2030-03-29T00:00:00,+03:00,IDT -2030-10-26T23:00:00,+02:00,IST -2031-03-28T00:00:00,+03:00,IDT -2031-10-25T23:00:00,+02:00,IST -2032-03-26T00:00:00,+03:00,IDT -2032-10-30T23:00:00,+02:00,IST -2033-03-25T00:00:00,+03:00,IDT -2033-10-29T23:00:00,+02:00,IST -2034-03-24T00:00:00,+03:00,IDT -2034-10-28T23:00:00,+02:00,IST -2035-03-23T00:00:00,+03:00,IDT -2035-10-27T23:00:00,+02:00,IST -2036-03-28T00:00:00,+03:00,IDT -2036-10-25T23:00:00,+02:00,IST -2037-03-27T00:00:00,+03:00,IDT -2037-10-24T23:00:00,+02:00,IST -''' diff --git a/desk/lib/pytz/asia-kabul.hoon b/desk/lib/pytz/asia-kabul.hoon deleted file mode 100644 index 732d5dd..0000000 --- a/desk/lib/pytz/asia-kabul.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:37,LMT -1901-12-13T20:45:52,+04:00,+04 -1944-12-31T20:00:00,+04:30,+0430 -''' diff --git a/desk/lib/pytz/asia-kamchatka.hoon b/desk/lib/pytz/asia-kamchatka.hoon deleted file mode 100644 index 3f116f0..0000000 --- a/desk/lib/pytz/asia-kamchatka.hoon +++ /dev/null @@ -1,69 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:35,LMT -1922-11-09T13:25:24,+11:00,+11 -1930-06-20T13:00:00,+12:00,+12 -1981-03-31T12:00:00,+13:00,+13 -1981-09-30T11:00:00,+12:00,+12 -1982-03-31T12:00:00,+13:00,+13 -1982-09-30T11:00:00,+12:00,+12 -1983-03-31T12:00:00,+13:00,+13 -1983-09-30T11:00:00,+12:00,+12 -1984-03-31T12:00:00,+13:00,+13 -1984-09-29T14:00:00,+12:00,+12 -1985-03-30T14:00:00,+13:00,+13 -1985-09-28T14:00:00,+12:00,+12 -1986-03-29T14:00:00,+13:00,+13 -1986-09-27T14:00:00,+12:00,+12 -1987-03-28T14:00:00,+13:00,+13 -1987-09-26T14:00:00,+12:00,+12 -1988-03-26T14:00:00,+13:00,+13 -1988-09-24T14:00:00,+12:00,+12 -1989-03-25T14:00:00,+13:00,+13 -1989-09-23T14:00:00,+12:00,+12 -1990-03-24T14:00:00,+13:00,+13 -1990-09-29T14:00:00,+12:00,+12 -1991-03-30T14:00:00,+12:00,+12 -1991-09-28T15:00:00,+11:00,+11 -1992-01-18T15:00:00,+12:00,+12 -1992-03-28T14:00:00,+13:00,+13 -1992-09-26T14:00:00,+12:00,+12 -1993-03-27T14:00:00,+13:00,+13 -1993-09-25T14:00:00,+12:00,+12 -1994-03-26T14:00:00,+13:00,+13 -1994-09-24T14:00:00,+12:00,+12 -1995-03-25T14:00:00,+13:00,+13 -1995-09-23T14:00:00,+12:00,+12 -1996-03-30T14:00:00,+13:00,+13 -1996-10-26T14:00:00,+12:00,+12 -1997-03-29T14:00:00,+13:00,+13 -1997-10-25T14:00:00,+12:00,+12 -1998-03-28T14:00:00,+13:00,+13 -1998-10-24T14:00:00,+12:00,+12 -1999-03-27T14:00:00,+13:00,+13 -1999-10-30T14:00:00,+12:00,+12 -2000-03-25T14:00:00,+13:00,+13 -2000-10-28T14:00:00,+12:00,+12 -2001-03-24T14:00:00,+13:00,+13 -2001-10-27T14:00:00,+12:00,+12 -2002-03-30T14:00:00,+13:00,+13 -2002-10-26T14:00:00,+12:00,+12 -2003-03-29T14:00:00,+13:00,+13 -2003-10-25T14:00:00,+12:00,+12 -2004-03-27T14:00:00,+13:00,+13 -2004-10-30T14:00:00,+12:00,+12 -2005-03-26T14:00:00,+13:00,+13 -2005-10-29T14:00:00,+12:00,+12 -2006-03-25T14:00:00,+13:00,+13 -2006-10-28T14:00:00,+12:00,+12 -2007-03-24T14:00:00,+13:00,+13 -2007-10-27T14:00:00,+12:00,+12 -2008-03-29T14:00:00,+13:00,+13 -2008-10-25T14:00:00,+12:00,+12 -2009-03-28T14:00:00,+13:00,+13 -2009-10-24T14:00:00,+12:00,+12 -2010-03-27T14:00:00,+12:00,+12 -2010-10-30T15:00:00,+11:00,+11 -2011-03-26T15:00:00,+12:00,+12 -''' diff --git a/desk/lib/pytz/asia-karachi.hoon b/desk/lib/pytz/asia-karachi.hoon deleted file mode 100644 index 076f5ed..0000000 --- a/desk/lib/pytz/asia-karachi.hoon +++ /dev/null @@ -1,16 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:28,LMT -1906-12-31T19:31:48,+05:30,+0530 -1942-08-31T18:30:00,+06:30,+0630 -1945-10-14T17:30:00,+05:30,+0530 -1951-09-29T18:30:00,+05:00,+05 -1971-03-25T19:00:00,+05:00,PKT -2002-04-06T19:00:00,+06:00,PKST -2002-10-05T18:00:00,+05:00,PKT -2008-05-31T19:00:00,+06:00,PKST -2008-10-31T18:00:00,+05:00,PKT -2009-04-14T19:00:00,+06:00,PKST -2009-10-31T18:00:00,+05:00,PKT -''' diff --git a/desk/lib/pytz/asia-kashgar.hoon b/desk/lib/pytz/asia-kashgar.hoon deleted file mode 100644 index 0084eb4..0000000 --- a/desk/lib/pytz/asia-kashgar.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:50,LMT -1927-12-31T18:09:40,+06:00,+06 -''' diff --git a/desk/lib/pytz/asia-kathmandu.hoon b/desk/lib/pytz/asia-kathmandu.hoon deleted file mode 100644 index 7b51fb1..0000000 --- a/desk/lib/pytz/asia-kathmandu.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:41,LMT -1919-12-31T18:18:44,+05:30,+0530 -1985-12-31T18:30:00,+05:45,+0545 -''' diff --git a/desk/lib/pytz/asia-khandyga.hoon b/desk/lib/pytz/asia-khandyga.hoon deleted file mode 100644 index 6b19f67..0000000 --- a/desk/lib/pytz/asia-khandyga.hoon +++ /dev/null @@ -1,72 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:02,LMT -1919-12-14T14:57:47,+08:00,+08 -1930-06-20T16:00:00,+09:00,+09 -1981-03-31T15:00:00,+10:00,+10 -1981-09-30T14:00:00,+09:00,+09 -1982-03-31T15:00:00,+10:00,+10 -1982-09-30T14:00:00,+09:00,+09 -1983-03-31T15:00:00,+10:00,+10 -1983-09-30T14:00:00,+09:00,+09 -1984-03-31T15:00:00,+10:00,+10 -1984-09-29T17:00:00,+09:00,+09 -1985-03-30T17:00:00,+10:00,+10 -1985-09-28T17:00:00,+09:00,+09 -1986-03-29T17:00:00,+10:00,+10 -1986-09-27T17:00:00,+09:00,+09 -1987-03-28T17:00:00,+10:00,+10 -1987-09-26T17:00:00,+09:00,+09 -1988-03-26T17:00:00,+10:00,+10 -1988-09-24T17:00:00,+09:00,+09 -1989-03-25T17:00:00,+10:00,+10 -1989-09-23T17:00:00,+09:00,+09 -1990-03-24T17:00:00,+10:00,+10 -1990-09-29T17:00:00,+09:00,+09 -1991-03-30T17:00:00,+09:00,+09 -1991-09-28T18:00:00,+08:00,+08 -1992-01-18T18:00:00,+09:00,+09 -1992-03-28T17:00:00,+10:00,+10 -1992-09-26T17:00:00,+09:00,+09 -1993-03-27T17:00:00,+10:00,+10 -1993-09-25T17:00:00,+09:00,+09 -1994-03-26T17:00:00,+10:00,+10 -1994-09-24T17:00:00,+09:00,+09 -1995-03-25T17:00:00,+10:00,+10 -1995-09-23T17:00:00,+09:00,+09 -1996-03-30T17:00:00,+10:00,+10 -1996-10-26T17:00:00,+09:00,+09 -1997-03-29T17:00:00,+10:00,+10 -1997-10-25T17:00:00,+09:00,+09 -1998-03-28T17:00:00,+10:00,+10 -1998-10-24T17:00:00,+09:00,+09 -1999-03-27T17:00:00,+10:00,+10 -1999-10-30T17:00:00,+09:00,+09 -2000-03-25T17:00:00,+10:00,+10 -2000-10-28T17:00:00,+09:00,+09 -2001-03-24T17:00:00,+10:00,+10 -2001-10-27T17:00:00,+09:00,+09 -2002-03-30T17:00:00,+10:00,+10 -2002-10-26T17:00:00,+09:00,+09 -2003-03-29T17:00:00,+10:00,+10 -2003-10-25T17:00:00,+09:00,+09 -2003-12-31T15:00:00,+10:00,+10 -2004-03-27T16:00:00,+11:00,+11 -2004-10-30T16:00:00,+10:00,+10 -2005-03-26T16:00:00,+11:00,+11 -2005-10-29T16:00:00,+10:00,+10 -2006-03-25T16:00:00,+11:00,+11 -2006-10-28T16:00:00,+10:00,+10 -2007-03-24T16:00:00,+11:00,+11 -2007-10-27T16:00:00,+10:00,+10 -2008-03-29T16:00:00,+11:00,+11 -2008-10-25T16:00:00,+10:00,+10 -2009-03-28T16:00:00,+11:00,+11 -2009-10-24T16:00:00,+10:00,+10 -2010-03-27T16:00:00,+11:00,+11 -2010-10-30T16:00:00,+10:00,+10 -2011-03-26T16:00:00,+11:00,+11 -2011-09-12T13:00:00,+10:00,+10 -2014-10-25T16:00:00,+09:00,+09 -''' diff --git a/desk/lib/pytz/asia-kolkata.hoon b/desk/lib/pytz/asia-kolkata.hoon deleted file mode 100644 index 4fd5d32..0000000 --- a/desk/lib/pytz/asia-kolkata.hoon +++ /dev/null @@ -1,11 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:53,LMT -1901-12-13T20:45:52,+05:21,MMT -1905-12-31T18:38:50,+05:30,IST -1941-09-30T18:30:00,+06:30,+0630 -1942-05-14T17:30:00,+05:30,IST -1942-08-31T18:30:00,+06:30,+0630 -1945-10-14T17:30:00,+05:30,IST -''' diff --git a/desk/lib/pytz/asia-krasnoyarsk.hoon b/desk/lib/pytz/asia-krasnoyarsk.hoon deleted file mode 100644 index 8b77969..0000000 --- a/desk/lib/pytz/asia-krasnoyarsk.hoon +++ /dev/null @@ -1,70 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:11,LMT -1920-01-05T17:48:34,+06:00,+06 -1930-06-20T18:00:00,+07:00,+07 -1981-03-31T17:00:00,+08:00,+08 -1981-09-30T16:00:00,+07:00,+07 -1982-03-31T17:00:00,+08:00,+08 -1982-09-30T16:00:00,+07:00,+07 -1983-03-31T17:00:00,+08:00,+08 -1983-09-30T16:00:00,+07:00,+07 -1984-03-31T17:00:00,+08:00,+08 -1984-09-29T19:00:00,+07:00,+07 -1985-03-30T19:00:00,+08:00,+08 -1985-09-28T19:00:00,+07:00,+07 -1986-03-29T19:00:00,+08:00,+08 -1986-09-27T19:00:00,+07:00,+07 -1987-03-28T19:00:00,+08:00,+08 -1987-09-26T19:00:00,+07:00,+07 -1988-03-26T19:00:00,+08:00,+08 -1988-09-24T19:00:00,+07:00,+07 -1989-03-25T19:00:00,+08:00,+08 -1989-09-23T19:00:00,+07:00,+07 -1990-03-24T19:00:00,+08:00,+08 -1990-09-29T19:00:00,+07:00,+07 -1991-03-30T19:00:00,+07:00,+07 -1991-09-28T20:00:00,+06:00,+06 -1992-01-18T20:00:00,+07:00,+07 -1992-03-28T19:00:00,+08:00,+08 -1992-09-26T19:00:00,+07:00,+07 -1993-03-27T19:00:00,+08:00,+08 -1993-09-25T19:00:00,+07:00,+07 -1994-03-26T19:00:00,+08:00,+08 -1994-09-24T19:00:00,+07:00,+07 -1995-03-25T19:00:00,+08:00,+08 -1995-09-23T19:00:00,+07:00,+07 -1996-03-30T19:00:00,+08:00,+08 -1996-10-26T19:00:00,+07:00,+07 -1997-03-29T19:00:00,+08:00,+08 -1997-10-25T19:00:00,+07:00,+07 -1998-03-28T19:00:00,+08:00,+08 -1998-10-24T19:00:00,+07:00,+07 -1999-03-27T19:00:00,+08:00,+08 -1999-10-30T19:00:00,+07:00,+07 -2000-03-25T19:00:00,+08:00,+08 -2000-10-28T19:00:00,+07:00,+07 -2001-03-24T19:00:00,+08:00,+08 -2001-10-27T19:00:00,+07:00,+07 -2002-03-30T19:00:00,+08:00,+08 -2002-10-26T19:00:00,+07:00,+07 -2003-03-29T19:00:00,+08:00,+08 -2003-10-25T19:00:00,+07:00,+07 -2004-03-27T19:00:00,+08:00,+08 -2004-10-30T19:00:00,+07:00,+07 -2005-03-26T19:00:00,+08:00,+08 -2005-10-29T19:00:00,+07:00,+07 -2006-03-25T19:00:00,+08:00,+08 -2006-10-28T19:00:00,+07:00,+07 -2007-03-24T19:00:00,+08:00,+08 -2007-10-27T19:00:00,+07:00,+07 -2008-03-29T19:00:00,+08:00,+08 -2008-10-25T19:00:00,+07:00,+07 -2009-03-28T19:00:00,+08:00,+08 -2009-10-24T19:00:00,+07:00,+07 -2010-03-27T19:00:00,+08:00,+08 -2010-10-30T19:00:00,+07:00,+07 -2011-03-26T19:00:00,+08:00,+08 -2014-10-25T18:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-kuala-lumpur.hoon b/desk/lib/pytz/asia-kuala-lumpur.hoon deleted file mode 100644 index 5474ed1..0000000 --- a/desk/lib/pytz/asia-kuala-lumpur.hoon +++ /dev/null @@ -1,13 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:47,LMT -1901-12-13T20:45:52,+06:55,SMT -1905-05-31T17:04:35,+07:00,+07 -1932-12-31T17:00:00,+07:20,+0720 -1935-12-31T16:40:00,+07:20,+0720 -1941-08-31T16:40:00,+07:30,+0730 -1942-02-15T16:30:00,+09:00,+09 -1945-09-11T15:00:00,+07:30,+0730 -1981-12-31T16:00:00,+08:00,+08 -''' diff --git a/desk/lib/pytz/asia-kuching.hoon b/desk/lib/pytz/asia-kuching.hoon deleted file mode 100644 index 46a3f10..0000000 --- a/desk/lib/pytz/asia-kuching.hoon +++ /dev/null @@ -1,23 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:21,LMT -1926-02-28T16:38:40,+07:30,+0730 -1932-12-31T16:30:00,+08:00,+08 -1935-09-13T16:00:00,+08:20,+0820 -1935-12-13T15:40:00,+08:00,+08 -1936-09-13T16:00:00,+08:20,+0820 -1936-12-13T15:40:00,+08:00,+08 -1937-09-13T16:00:00,+08:20,+0820 -1937-12-13T15:40:00,+08:00,+08 -1938-09-13T16:00:00,+08:20,+0820 -1938-12-13T15:40:00,+08:00,+08 -1939-09-13T16:00:00,+08:20,+0820 -1939-12-13T15:40:00,+08:00,+08 -1940-09-13T16:00:00,+08:20,+0820 -1940-12-13T15:40:00,+08:00,+08 -1941-09-13T16:00:00,+08:20,+0820 -1941-12-13T15:40:00,+08:00,+08 -1942-02-15T16:00:00,+09:00,+09 -1945-09-11T15:00:00,+08:00,+08 -''' diff --git a/desk/lib/pytz/asia-kuwait.hoon b/desk/lib/pytz/asia-kuwait.hoon deleted file mode 100644 index ce2fac1..0000000 --- a/desk/lib/pytz/asia-kuwait.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:12,LMT -1949-12-31T20:48:04,+03:00,+03 -''' diff --git a/desk/lib/pytz/asia-macau.hoon b/desk/lib/pytz/asia-macau.hoon deleted file mode 100644 index d57e9db..0000000 --- a/desk/lib/pytz/asia-macau.hoon +++ /dev/null @@ -1,76 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:34,LMT -1904-10-29T16:25:50,+08:00,CST -1941-12-21T15:00:00,+09:00,+09 -1942-04-30T14:00:00,+10:00,+10 -1942-11-17T13:00:00,+09:00,+09 -1943-04-30T14:00:00,+10:00,+10 -1943-09-30T13:00:00,+09:00,+09 -1945-09-30T15:00:00,+08:00,CST -1946-04-30T15:00:00,+09:00,CDT -1946-09-30T15:00:00,+08:00,CST -1947-04-19T15:00:00,+09:00,CDT -1947-11-30T15:00:00,+08:00,CST -1948-05-02T15:00:00,+09:00,CDT -1948-10-31T15:00:00,+08:00,CST -1949-04-02T15:00:00,+09:00,CDT -1949-10-29T15:00:00,+08:00,CST -1950-04-01T15:00:00,+09:00,CDT -1950-10-28T15:00:00,+08:00,CST -1951-03-31T15:00:00,+09:00,CDT -1951-10-28T15:00:00,+08:00,CST -1952-04-05T15:00:00,+09:00,CDT -1952-11-01T15:00:00,+08:00,CST -1953-04-04T15:00:00,+09:00,CDT -1953-10-31T15:00:00,+08:00,CST -1954-03-20T15:00:00,+09:00,CDT -1954-10-30T15:00:00,+08:00,CST -1955-03-19T15:00:00,+09:00,CDT -1955-11-05T15:00:00,+08:00,CST -1956-03-17T15:00:00,+09:00,CDT -1956-11-03T18:30:00,+08:00,CST -1957-03-23T19:30:00,+09:00,CDT -1957-11-02T18:30:00,+08:00,CST -1958-03-22T19:30:00,+09:00,CDT -1958-11-01T18:30:00,+08:00,CST -1959-03-21T19:30:00,+09:00,CDT -1959-10-31T18:30:00,+08:00,CST -1960-03-19T19:30:00,+09:00,CDT -1960-11-05T18:30:00,+08:00,CST -1961-03-18T19:30:00,+09:00,CDT -1961-11-04T18:30:00,+08:00,CST -1962-03-17T19:30:00,+09:00,CDT -1962-11-03T18:30:00,+08:00,CST -1963-03-23T19:30:00,+09:00,CDT -1963-11-02T18:30:00,+08:00,CST -1964-03-21T19:30:00,+09:00,CDT -1964-10-31T18:30:00,+08:00,CST -1965-04-17T19:30:00,+09:00,CDT -1965-10-16T17:30:00,+08:00,CST -1966-04-16T19:30:00,+09:00,CDT -1966-10-15T17:30:00,+08:00,CST -1967-04-15T19:30:00,+09:00,CDT -1967-10-21T18:30:00,+08:00,CST -1968-04-20T19:30:00,+09:00,CDT -1968-10-19T18:30:00,+08:00,CST -1969-04-19T19:30:00,+09:00,CDT -1969-10-18T18:30:00,+08:00,CST -1970-04-18T19:30:00,+09:00,CDT -1970-10-17T18:30:00,+08:00,CST -1971-04-17T19:30:00,+09:00,CDT -1971-10-16T18:30:00,+08:00,CST -1972-04-15T19:30:00,+09:00,CDT -1972-10-21T18:30:00,+08:00,CST -1973-04-21T19:30:00,+09:00,CDT -1973-10-20T18:30:00,+08:00,CST -1973-12-29T19:30:00,+09:00,CDT -1974-10-19T18:30:00,+08:00,CST -1975-04-19T19:30:00,+09:00,CDT -1975-10-18T18:30:00,+08:00,CST -1976-04-17T19:30:00,+09:00,CDT -1976-10-16T18:30:00,+08:00,CST -1979-05-12T19:30:00,+09:00,CDT -1979-10-20T18:30:00,+08:00,CST -''' diff --git a/desk/lib/pytz/asia-magadan.hoon b/desk/lib/pytz/asia-magadan.hoon deleted file mode 100644 index 6d5be14..0000000 --- a/desk/lib/pytz/asia-magadan.hoon +++ /dev/null @@ -1,71 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:03,LMT -1924-05-01T13:56:48,+10:00,+10 -1930-06-20T14:00:00,+11:00,+11 -1981-03-31T13:00:00,+12:00,+12 -1981-09-30T12:00:00,+11:00,+11 -1982-03-31T13:00:00,+12:00,+12 -1982-09-30T12:00:00,+11:00,+11 -1983-03-31T13:00:00,+12:00,+12 -1983-09-30T12:00:00,+11:00,+11 -1984-03-31T13:00:00,+12:00,+12 -1984-09-29T15:00:00,+11:00,+11 -1985-03-30T15:00:00,+12:00,+12 -1985-09-28T15:00:00,+11:00,+11 -1986-03-29T15:00:00,+12:00,+12 -1986-09-27T15:00:00,+11:00,+11 -1987-03-28T15:00:00,+12:00,+12 -1987-09-26T15:00:00,+11:00,+11 -1988-03-26T15:00:00,+12:00,+12 -1988-09-24T15:00:00,+11:00,+11 -1989-03-25T15:00:00,+12:00,+12 -1989-09-23T15:00:00,+11:00,+11 -1990-03-24T15:00:00,+12:00,+12 -1990-09-29T15:00:00,+11:00,+11 -1991-03-30T15:00:00,+11:00,+11 -1991-09-28T16:00:00,+10:00,+10 -1992-01-18T16:00:00,+11:00,+11 -1992-03-28T15:00:00,+12:00,+12 -1992-09-26T15:00:00,+11:00,+11 -1993-03-27T15:00:00,+12:00,+12 -1993-09-25T15:00:00,+11:00,+11 -1994-03-26T15:00:00,+12:00,+12 -1994-09-24T15:00:00,+11:00,+11 -1995-03-25T15:00:00,+12:00,+12 -1995-09-23T15:00:00,+11:00,+11 -1996-03-30T15:00:00,+12:00,+12 -1996-10-26T15:00:00,+11:00,+11 -1997-03-29T15:00:00,+12:00,+12 -1997-10-25T15:00:00,+11:00,+11 -1998-03-28T15:00:00,+12:00,+12 -1998-10-24T15:00:00,+11:00,+11 -1999-03-27T15:00:00,+12:00,+12 -1999-10-30T15:00:00,+11:00,+11 -2000-03-25T15:00:00,+12:00,+12 -2000-10-28T15:00:00,+11:00,+11 -2001-03-24T15:00:00,+12:00,+12 -2001-10-27T15:00:00,+11:00,+11 -2002-03-30T15:00:00,+12:00,+12 -2002-10-26T15:00:00,+11:00,+11 -2003-03-29T15:00:00,+12:00,+12 -2003-10-25T15:00:00,+11:00,+11 -2004-03-27T15:00:00,+12:00,+12 -2004-10-30T15:00:00,+11:00,+11 -2005-03-26T15:00:00,+12:00,+12 -2005-10-29T15:00:00,+11:00,+11 -2006-03-25T15:00:00,+12:00,+12 -2006-10-28T15:00:00,+11:00,+11 -2007-03-24T15:00:00,+12:00,+12 -2007-10-27T15:00:00,+11:00,+11 -2008-03-29T15:00:00,+12:00,+12 -2008-10-25T15:00:00,+11:00,+11 -2009-03-28T15:00:00,+12:00,+12 -2009-10-24T15:00:00,+11:00,+11 -2010-03-27T15:00:00,+12:00,+12 -2010-10-30T15:00:00,+11:00,+11 -2011-03-26T15:00:00,+12:00,+12 -2014-10-25T14:00:00,+10:00,+10 -2016-04-23T16:00:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/asia-makassar.hoon b/desk/lib/pytz/asia-makassar.hoon deleted file mode 100644 index 035e2b3..0000000 --- a/desk/lib/pytz/asia-makassar.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:58,LMT -1919-12-31T16:02:24,+07:58,MMT -1932-10-31T16:02:24,+08:00,+08 -1942-02-08T16:00:00,+09:00,+09 -1945-09-22T15:00:00,+08:00,WITA -''' diff --git a/desk/lib/pytz/asia-manila.hoon b/desk/lib/pytz/asia-manila.hoon deleted file mode 100644 index e83eba8..0000000 --- a/desk/lib/pytz/asia-manila.hoon +++ /dev/null @@ -1,17 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+08:00,PST -1936-10-31T16:00:00,+09:00,PDT -1937-01-15T15:00:00,+08:00,PST -1941-12-15T16:00:00,+09:00,PDT -1942-02-11T15:00:00,+09:00,JST -1945-03-03T15:00:00,+09:00,PDT -1945-11-30T15:00:00,+08:00,PST -1954-04-11T16:00:00,+09:00,PDT -1954-06-04T15:00:00,+08:00,PST -1977-03-27T16:00:00,+09:00,PDT -1977-09-21T15:00:00,+08:00,PST -1990-05-20T16:00:00,+09:00,PDT -1990-07-28T15:00:00,+08:00,PST -''' diff --git a/desk/lib/pytz/asia-muscat.hoon b/desk/lib/pytz/asia-muscat.hoon deleted file mode 100644 index 519bdf9..0000000 --- a/desk/lib/pytz/asia-muscat.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:54,LMT -1919-12-31T20:05:36,+04:00,+04 -''' diff --git a/desk/lib/pytz/asia-nicosia.hoon b/desk/lib/pytz/asia-nicosia.hoon deleted file mode 100644 index 1e316ca..0000000 --- a/desk/lib/pytz/asia-nicosia.hoon +++ /dev/null @@ -1,132 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:13,LMT -1921-11-13T21:46:32,+02:00,EET -1975-04-12T22:00:00,+03:00,EEST -1975-10-11T21:00:00,+02:00,EET -1976-05-14T22:00:00,+03:00,EEST -1976-10-10T21:00:00,+02:00,EET -1977-04-02T22:00:00,+03:00,EEST -1977-09-24T21:00:00,+02:00,EET -1978-04-01T22:00:00,+03:00,EEST -1978-10-01T21:00:00,+02:00,EET -1979-03-31T22:00:00,+03:00,EEST -1979-09-29T21:00:00,+02:00,EET -1980-04-05T22:00:00,+03:00,EEST -1980-09-27T21:00:00,+02:00,EET -1981-03-28T22:00:00,+03:00,EEST -1981-09-26T21:00:00,+02:00,EET -1982-03-27T22:00:00,+03:00,EEST -1982-09-25T21:00:00,+02:00,EET -1983-03-26T22:00:00,+03:00,EEST -1983-09-24T21:00:00,+02:00,EET -1984-03-24T22:00:00,+03:00,EEST -1984-09-29T21:00:00,+02:00,EET -1985-03-30T22:00:00,+03:00,EEST -1985-09-28T21:00:00,+02:00,EET -1986-03-29T22:00:00,+03:00,EEST -1986-09-27T21:00:00,+02:00,EET -1987-03-28T22:00:00,+03:00,EEST -1987-09-26T21:00:00,+02:00,EET -1988-03-26T22:00:00,+03:00,EEST -1988-09-24T21:00:00,+02:00,EET -1989-03-25T22:00:00,+03:00,EEST -1989-09-23T21:00:00,+02:00,EET -1990-03-24T22:00:00,+03:00,EEST -1990-09-29T21:00:00,+02:00,EET -1991-03-30T22:00:00,+03:00,EEST -1991-09-28T21:00:00,+02:00,EET -1992-03-28T22:00:00,+03:00,EEST -1992-09-26T21:00:00,+02:00,EET -1993-03-27T22:00:00,+03:00,EEST -1993-09-25T21:00:00,+02:00,EET -1994-03-26T22:00:00,+03:00,EEST -1994-09-24T21:00:00,+02:00,EET -1995-03-25T22:00:00,+03:00,EEST -1995-09-23T21:00:00,+02:00,EET -1996-03-30T22:00:00,+03:00,EEST -1996-09-28T21:00:00,+02:00,EET -1997-03-29T22:00:00,+03:00,EEST -1997-09-27T21:00:00,+02:00,EET -1998-03-28T22:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/asia-novokuznetsk.hoon b/desk/lib/pytz/asia-novokuznetsk.hoon deleted file mode 100644 index 7f80b71..0000000 --- a/desk/lib/pytz/asia-novokuznetsk.hoon +++ /dev/null @@ -1,69 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:49,LMT -1924-04-30T18:11:12,+06:00,+06 -1930-06-20T18:00:00,+07:00,+07 -1981-03-31T17:00:00,+08:00,+08 -1981-09-30T16:00:00,+07:00,+07 -1982-03-31T17:00:00,+08:00,+08 -1982-09-30T16:00:00,+07:00,+07 -1983-03-31T17:00:00,+08:00,+08 -1983-09-30T16:00:00,+07:00,+07 -1984-03-31T17:00:00,+08:00,+08 -1984-09-29T19:00:00,+07:00,+07 -1985-03-30T19:00:00,+08:00,+08 -1985-09-28T19:00:00,+07:00,+07 -1986-03-29T19:00:00,+08:00,+08 -1986-09-27T19:00:00,+07:00,+07 -1987-03-28T19:00:00,+08:00,+08 -1987-09-26T19:00:00,+07:00,+07 -1988-03-26T19:00:00,+08:00,+08 -1988-09-24T19:00:00,+07:00,+07 -1989-03-25T19:00:00,+08:00,+08 -1989-09-23T19:00:00,+07:00,+07 -1990-03-24T19:00:00,+08:00,+08 -1990-09-29T19:00:00,+07:00,+07 -1991-03-30T19:00:00,+07:00,+07 -1991-09-28T20:00:00,+06:00,+06 -1992-01-18T20:00:00,+07:00,+07 -1992-03-28T19:00:00,+08:00,+08 -1992-09-26T19:00:00,+07:00,+07 -1993-03-27T19:00:00,+08:00,+08 -1993-09-25T19:00:00,+07:00,+07 -1994-03-26T19:00:00,+08:00,+08 -1994-09-24T19:00:00,+07:00,+07 -1995-03-25T19:00:00,+08:00,+08 -1995-09-23T19:00:00,+07:00,+07 -1996-03-30T19:00:00,+08:00,+08 -1996-10-26T19:00:00,+07:00,+07 -1997-03-29T19:00:00,+08:00,+08 -1997-10-25T19:00:00,+07:00,+07 -1998-03-28T19:00:00,+08:00,+08 -1998-10-24T19:00:00,+07:00,+07 -1999-03-27T19:00:00,+08:00,+08 -1999-10-30T19:00:00,+07:00,+07 -2000-03-25T19:00:00,+08:00,+08 -2000-10-28T19:00:00,+07:00,+07 -2001-03-24T19:00:00,+08:00,+08 -2001-10-27T19:00:00,+07:00,+07 -2002-03-30T19:00:00,+08:00,+08 -2002-10-26T19:00:00,+07:00,+07 -2003-03-29T19:00:00,+08:00,+08 -2003-10-25T19:00:00,+07:00,+07 -2004-03-27T19:00:00,+08:00,+08 -2004-10-30T19:00:00,+07:00,+07 -2005-03-26T19:00:00,+08:00,+08 -2005-10-29T19:00:00,+07:00,+07 -2006-03-25T19:00:00,+08:00,+08 -2006-10-28T19:00:00,+07:00,+07 -2007-03-24T19:00:00,+08:00,+08 -2007-10-27T19:00:00,+07:00,+07 -2008-03-29T19:00:00,+08:00,+08 -2008-10-25T19:00:00,+07:00,+07 -2009-03-28T19:00:00,+08:00,+08 -2009-10-24T19:00:00,+07:00,+07 -2010-03-27T19:00:00,+07:00,+07 -2010-10-30T20:00:00,+06:00,+06 -2011-03-26T20:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-novosibirsk.hoon b/desk/lib/pytz/asia-novosibirsk.hoon deleted file mode 100644 index e966553..0000000 --- a/desk/lib/pytz/asia-novosibirsk.hoon +++ /dev/null @@ -1,72 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:32,LMT -1919-12-14T00:28:20,+06:00,+06 -1930-06-20T18:00:00,+07:00,+07 -1981-03-31T17:00:00,+08:00,+08 -1981-09-30T16:00:00,+07:00,+07 -1982-03-31T17:00:00,+08:00,+08 -1982-09-30T16:00:00,+07:00,+07 -1983-03-31T17:00:00,+08:00,+08 -1983-09-30T16:00:00,+07:00,+07 -1984-03-31T17:00:00,+08:00,+08 -1984-09-29T19:00:00,+07:00,+07 -1985-03-30T19:00:00,+08:00,+08 -1985-09-28T19:00:00,+07:00,+07 -1986-03-29T19:00:00,+08:00,+08 -1986-09-27T19:00:00,+07:00,+07 -1987-03-28T19:00:00,+08:00,+08 -1987-09-26T19:00:00,+07:00,+07 -1988-03-26T19:00:00,+08:00,+08 -1988-09-24T19:00:00,+07:00,+07 -1989-03-25T19:00:00,+08:00,+08 -1989-09-23T19:00:00,+07:00,+07 -1990-03-24T19:00:00,+08:00,+08 -1990-09-29T19:00:00,+07:00,+07 -1991-03-30T19:00:00,+07:00,+07 -1991-09-28T20:00:00,+06:00,+06 -1992-01-18T20:00:00,+07:00,+07 -1992-03-28T19:00:00,+08:00,+08 -1992-09-26T19:00:00,+07:00,+07 -1993-03-27T19:00:00,+08:00,+08 -1993-05-22T16:00:00,+07:00,+07 -1993-09-25T20:00:00,+06:00,+06 -1994-03-26T20:00:00,+07:00,+07 -1994-09-24T20:00:00,+06:00,+06 -1995-03-25T20:00:00,+07:00,+07 -1995-09-23T20:00:00,+06:00,+06 -1996-03-30T20:00:00,+07:00,+07 -1996-10-26T20:00:00,+06:00,+06 -1997-03-29T20:00:00,+07:00,+07 -1997-10-25T20:00:00,+06:00,+06 -1998-03-28T20:00:00,+07:00,+07 -1998-10-24T20:00:00,+06:00,+06 -1999-03-27T20:00:00,+07:00,+07 -1999-10-30T20:00:00,+06:00,+06 -2000-03-25T20:00:00,+07:00,+07 -2000-10-28T20:00:00,+06:00,+06 -2001-03-24T20:00:00,+07:00,+07 -2001-10-27T20:00:00,+06:00,+06 -2002-03-30T20:00:00,+07:00,+07 -2002-10-26T20:00:00,+06:00,+06 -2003-03-29T20:00:00,+07:00,+07 -2003-10-25T20:00:00,+06:00,+06 -2004-03-27T20:00:00,+07:00,+07 -2004-10-30T20:00:00,+06:00,+06 -2005-03-26T20:00:00,+07:00,+07 -2005-10-29T20:00:00,+06:00,+06 -2006-03-25T20:00:00,+07:00,+07 -2006-10-28T20:00:00,+06:00,+06 -2007-03-24T20:00:00,+07:00,+07 -2007-10-27T20:00:00,+06:00,+06 -2008-03-29T20:00:00,+07:00,+07 -2008-10-25T20:00:00,+06:00,+06 -2009-03-28T20:00:00,+07:00,+07 -2009-10-24T20:00:00,+06:00,+06 -2010-03-27T20:00:00,+07:00,+07 -2010-10-30T20:00:00,+06:00,+06 -2011-03-26T20:00:00,+07:00,+07 -2014-10-25T19:00:00,+06:00,+06 -2016-07-23T20:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-omsk.hoon b/desk/lib/pytz/asia-omsk.hoon deleted file mode 100644 index 1c6cabd..0000000 --- a/desk/lib/pytz/asia-omsk.hoon +++ /dev/null @@ -1,70 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:54,LMT -1919-11-13T19:06:30,+05:00,+05 -1930-06-20T19:00:00,+06:00,+06 -1981-03-31T18:00:00,+07:00,+07 -1981-09-30T17:00:00,+06:00,+06 -1982-03-31T18:00:00,+07:00,+07 -1982-09-30T17:00:00,+06:00,+06 -1983-03-31T18:00:00,+07:00,+07 -1983-09-30T17:00:00,+06:00,+06 -1984-03-31T18:00:00,+07:00,+07 -1984-09-29T20:00:00,+06:00,+06 -1985-03-30T20:00:00,+07:00,+07 -1985-09-28T20:00:00,+06:00,+06 -1986-03-29T20:00:00,+07:00,+07 -1986-09-27T20:00:00,+06:00,+06 -1987-03-28T20:00:00,+07:00,+07 -1987-09-26T20:00:00,+06:00,+06 -1988-03-26T20:00:00,+07:00,+07 -1988-09-24T20:00:00,+06:00,+06 -1989-03-25T20:00:00,+07:00,+07 -1989-09-23T20:00:00,+06:00,+06 -1990-03-24T20:00:00,+07:00,+07 -1990-09-29T20:00:00,+06:00,+06 -1991-03-30T20:00:00,+06:00,+06 -1991-09-28T21:00:00,+05:00,+05 -1992-01-18T21:00:00,+06:00,+06 -1992-03-28T20:00:00,+07:00,+07 -1992-09-26T20:00:00,+06:00,+06 -1993-03-27T20:00:00,+07:00,+07 -1993-09-25T20:00:00,+06:00,+06 -1994-03-26T20:00:00,+07:00,+07 -1994-09-24T20:00:00,+06:00,+06 -1995-03-25T20:00:00,+07:00,+07 -1995-09-23T20:00:00,+06:00,+06 -1996-03-30T20:00:00,+07:00,+07 -1996-10-26T20:00:00,+06:00,+06 -1997-03-29T20:00:00,+07:00,+07 -1997-10-25T20:00:00,+06:00,+06 -1998-03-28T20:00:00,+07:00,+07 -1998-10-24T20:00:00,+06:00,+06 -1999-03-27T20:00:00,+07:00,+07 -1999-10-30T20:00:00,+06:00,+06 -2000-03-25T20:00:00,+07:00,+07 -2000-10-28T20:00:00,+06:00,+06 -2001-03-24T20:00:00,+07:00,+07 -2001-10-27T20:00:00,+06:00,+06 -2002-03-30T20:00:00,+07:00,+07 -2002-10-26T20:00:00,+06:00,+06 -2003-03-29T20:00:00,+07:00,+07 -2003-10-25T20:00:00,+06:00,+06 -2004-03-27T20:00:00,+07:00,+07 -2004-10-30T20:00:00,+06:00,+06 -2005-03-26T20:00:00,+07:00,+07 -2005-10-29T20:00:00,+06:00,+06 -2006-03-25T20:00:00,+07:00,+07 -2006-10-28T20:00:00,+06:00,+06 -2007-03-24T20:00:00,+07:00,+07 -2007-10-27T20:00:00,+06:00,+06 -2008-03-29T20:00:00,+07:00,+07 -2008-10-25T20:00:00,+06:00,+06 -2009-03-28T20:00:00,+07:00,+07 -2009-10-24T20:00:00,+06:00,+06 -2010-03-27T20:00:00,+07:00,+07 -2010-10-30T20:00:00,+06:00,+06 -2011-03-26T20:00:00,+07:00,+07 -2014-10-25T19:00:00,+06:00,+06 -''' diff --git a/desk/lib/pytz/asia-oral.hoon b/desk/lib/pytz/asia-oral.hoon deleted file mode 100644 index 44130eb..0000000 --- a/desk/lib/pytz/asia-oral.hoon +++ /dev/null @@ -1,56 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:25,LMT -1924-05-01T20:34:36,+03:00,+03 -1930-06-20T21:00:00,+05:00,+05 -1981-03-31T19:00:00,+06:00,+06 -1981-09-30T18:00:00,+06:00,+06 -1982-03-31T18:00:00,+06:00,+06 -1982-09-30T18:00:00,+05:00,+05 -1983-03-31T19:00:00,+06:00,+06 -1983-09-30T18:00:00,+05:00,+05 -1984-03-31T19:00:00,+06:00,+06 -1984-09-29T21:00:00,+05:00,+05 -1985-03-30T21:00:00,+06:00,+06 -1985-09-28T21:00:00,+05:00,+05 -1986-03-29T21:00:00,+06:00,+06 -1986-09-27T21:00:00,+05:00,+05 -1987-03-28T21:00:00,+06:00,+06 -1987-09-26T21:00:00,+05:00,+05 -1988-03-26T21:00:00,+06:00,+06 -1988-09-24T21:00:00,+05:00,+05 -1989-03-25T21:00:00,+05:00,+05 -1989-09-23T22:00:00,+04:00,+04 -1990-03-24T22:00:00,+05:00,+05 -1990-09-29T22:00:00,+04:00,+04 -1991-03-30T22:00:00,+05:00,+05 -1991-09-28T22:00:00,+04:00,+04 -1992-01-18T22:00:00,+05:00,+05 -1992-03-28T21:00:00,+05:00,+05 -1992-09-26T22:00:00,+04:00,+04 -1993-03-27T22:00:00,+05:00,+05 -1993-09-25T22:00:00,+04:00,+04 -1994-03-26T22:00:00,+05:00,+05 -1994-09-24T22:00:00,+04:00,+04 -1995-03-25T22:00:00,+05:00,+05 -1995-09-23T22:00:00,+04:00,+04 -1996-03-30T22:00:00,+05:00,+05 -1996-10-26T22:00:00,+04:00,+04 -1997-03-29T22:00:00,+05:00,+05 -1997-10-25T22:00:00,+04:00,+04 -1998-03-28T22:00:00,+05:00,+05 -1998-10-24T22:00:00,+04:00,+04 -1999-03-27T22:00:00,+05:00,+05 -1999-10-30T22:00:00,+04:00,+04 -2000-03-25T22:00:00,+05:00,+05 -2000-10-28T22:00:00,+04:00,+04 -2001-03-24T22:00:00,+05:00,+05 -2001-10-27T22:00:00,+04:00,+04 -2002-03-30T22:00:00,+05:00,+05 -2002-10-26T22:00:00,+04:00,+04 -2003-03-29T22:00:00,+05:00,+05 -2003-10-25T22:00:00,+04:00,+04 -2004-03-27T22:00:00,+05:00,+05 -2004-10-30T22:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-phnom-penh.hoon b/desk/lib/pytz/asia-phnom-penh.hoon deleted file mode 100644 index 19d0818..0000000 --- a/desk/lib/pytz/asia-phnom-penh.hoon +++ /dev/null @@ -1,10 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:00,LMT -1906-06-30T17:00:20,+07:07,PLMT -1911-04-30T16:53:30,+07:00,+07 -1942-12-31T16:00:00,+08:00,+08 -1945-03-14T15:00:00,+09:00,+09 -1945-09-01T15:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-pontianak.hoon b/desk/lib/pytz/asia-pontianak.hoon deleted file mode 100644 index 31d347f..0000000 --- a/desk/lib/pytz/asia-pontianak.hoon +++ /dev/null @@ -1,13 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:17,LMT -1908-04-30T16:42:40,+07:17,PMT -1932-10-31T16:42:40,+07:30,+0730 -1942-01-28T16:30:00,+09:00,+09 -1945-09-22T15:00:00,+07:30,+0730 -1948-04-30T16:30:00,+08:00,+08 -1950-04-30T16:00:00,+07:30,+0730 -1963-12-31T16:30:00,+08:00,WITA -1987-12-31T16:00:00,+07:00,WIB -''' diff --git a/desk/lib/pytz/asia-pyongyang.hoon b/desk/lib/pytz/asia-pyongyang.hoon deleted file mode 100644 index 91bd25f..0000000 --- a/desk/lib/pytz/asia-pyongyang.hoon +++ /dev/null @@ -1,10 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:23,LMT -1908-03-31T15:37:00,+08:30,KST -1911-12-31T15:30:00,+09:00,JST -1945-08-23T15:00:00,+09:00,KST -2015-08-14T15:00:00,+08:30,KST -2018-05-04T15:00:00,+09:00,KST -''' diff --git a/desk/lib/pytz/asia-qatar.hoon b/desk/lib/pytz/asia-qatar.hoon deleted file mode 100644 index 91f2a7d..0000000 --- a/desk/lib/pytz/asia-qatar.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:26,LMT -1919-12-31T20:33:52,+04:00,+04 -1972-05-31T20:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/asia-qostanay.hoon b/desk/lib/pytz/asia-qostanay.hoon deleted file mode 100644 index 8696270..0000000 --- a/desk/lib/pytz/asia-qostanay.hoon +++ /dev/null @@ -1,57 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:14,LMT -1924-05-01T19:45:32,+04:00,+04 -1930-06-20T20:00:00,+05:00,+05 -1981-03-31T19:00:00,+06:00,+06 -1981-09-30T18:00:00,+06:00,+06 -1982-03-31T18:00:00,+06:00,+06 -1982-09-30T18:00:00,+05:00,+05 -1983-03-31T19:00:00,+06:00,+06 -1983-09-30T18:00:00,+05:00,+05 -1984-03-31T19:00:00,+06:00,+06 -1984-09-29T21:00:00,+05:00,+05 -1985-03-30T21:00:00,+06:00,+06 -1985-09-28T21:00:00,+05:00,+05 -1986-03-29T21:00:00,+06:00,+06 -1986-09-27T21:00:00,+05:00,+05 -1987-03-28T21:00:00,+06:00,+06 -1987-09-26T21:00:00,+05:00,+05 -1988-03-26T21:00:00,+06:00,+06 -1988-09-24T21:00:00,+05:00,+05 -1989-03-25T21:00:00,+06:00,+06 -1989-09-23T21:00:00,+05:00,+05 -1990-03-24T21:00:00,+06:00,+06 -1990-09-29T21:00:00,+05:00,+05 -1991-03-30T21:00:00,+05:00,+05 -1991-09-28T22:00:00,+04:00,+04 -1992-01-18T22:00:00,+05:00,+05 -1992-03-28T21:00:00,+06:00,+06 -1992-09-26T21:00:00,+05:00,+05 -1993-03-27T21:00:00,+06:00,+06 -1993-09-25T21:00:00,+05:00,+05 -1994-03-26T21:00:00,+06:00,+06 -1994-09-24T21:00:00,+05:00,+05 -1995-03-25T21:00:00,+06:00,+06 -1995-09-23T21:00:00,+05:00,+05 -1996-03-30T21:00:00,+06:00,+06 -1996-10-26T21:00:00,+05:00,+05 -1997-03-29T21:00:00,+06:00,+06 -1997-10-25T21:00:00,+05:00,+05 -1998-03-28T21:00:00,+06:00,+06 -1998-10-24T21:00:00,+05:00,+05 -1999-03-27T21:00:00,+06:00,+06 -1999-10-30T21:00:00,+05:00,+05 -2000-03-25T21:00:00,+06:00,+06 -2000-10-28T21:00:00,+05:00,+05 -2001-03-24T21:00:00,+06:00,+06 -2001-10-27T21:00:00,+05:00,+05 -2002-03-30T21:00:00,+06:00,+06 -2002-10-26T21:00:00,+05:00,+05 -2003-03-29T21:00:00,+06:00,+06 -2003-10-25T21:00:00,+05:00,+05 -2004-03-27T21:00:00,+06:00,+06 -2004-10-30T21:00:00,+06:00,+06 -2024-02-29T18:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-qyzylorda.hoon b/desk/lib/pytz/asia-qyzylorda.hoon deleted file mode 100644 index 6b8e56e..0000000 --- a/desk/lib/pytz/asia-qyzylorda.hoon +++ /dev/null @@ -1,57 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:22,LMT -1924-05-01T19:38:08,+04:00,+04 -1930-06-20T20:00:00,+05:00,+05 -1981-03-31T19:00:00,+06:00,+06 -1981-09-30T18:00:00,+06:00,+06 -1982-03-31T18:00:00,+06:00,+06 -1982-09-30T18:00:00,+05:00,+05 -1983-03-31T19:00:00,+06:00,+06 -1983-09-30T18:00:00,+05:00,+05 -1984-03-31T19:00:00,+06:00,+06 -1984-09-29T21:00:00,+05:00,+05 -1985-03-30T21:00:00,+06:00,+06 -1985-09-28T21:00:00,+05:00,+05 -1986-03-29T21:00:00,+06:00,+06 -1986-09-27T21:00:00,+05:00,+05 -1987-03-28T21:00:00,+06:00,+06 -1987-09-26T21:00:00,+05:00,+05 -1988-03-26T21:00:00,+06:00,+06 -1988-09-24T21:00:00,+05:00,+05 -1989-03-25T21:00:00,+06:00,+06 -1989-09-23T21:00:00,+05:00,+05 -1990-03-24T21:00:00,+06:00,+06 -1990-09-29T21:00:00,+05:00,+05 -1991-03-30T21:00:00,+05:00,+05 -1991-09-28T22:00:00,+05:00,+05 -1992-01-18T21:00:00,+06:00,+06 -1992-03-28T20:00:00,+06:00,+06 -1992-09-26T21:00:00,+05:00,+05 -1993-03-27T21:00:00,+06:00,+06 -1993-09-25T21:00:00,+05:00,+05 -1994-03-26T21:00:00,+06:00,+06 -1994-09-24T21:00:00,+05:00,+05 -1995-03-25T21:00:00,+06:00,+06 -1995-09-23T21:00:00,+05:00,+05 -1996-03-30T21:00:00,+06:00,+06 -1996-10-26T21:00:00,+05:00,+05 -1997-03-29T21:00:00,+06:00,+06 -1997-10-25T21:00:00,+05:00,+05 -1998-03-28T21:00:00,+06:00,+06 -1998-10-24T21:00:00,+05:00,+05 -1999-03-27T21:00:00,+06:00,+06 -1999-10-30T21:00:00,+05:00,+05 -2000-03-25T21:00:00,+06:00,+06 -2000-10-28T21:00:00,+05:00,+05 -2001-03-24T21:00:00,+06:00,+06 -2001-10-27T21:00:00,+05:00,+05 -2002-03-30T21:00:00,+06:00,+06 -2002-10-26T21:00:00,+05:00,+05 -2003-03-29T21:00:00,+06:00,+06 -2003-10-25T21:00:00,+05:00,+05 -2004-03-27T21:00:00,+06:00,+06 -2004-10-30T21:00:00,+06:00,+06 -2018-12-20T18:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-riyadh.hoon b/desk/lib/pytz/asia-riyadh.hoon deleted file mode 100644 index 5025cb9..0000000 --- a/desk/lib/pytz/asia-riyadh.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:07,LMT -1947-03-13T20:53:08,+03:00,+03 -''' diff --git a/desk/lib/pytz/asia-sakhalin.hoon b/desk/lib/pytz/asia-sakhalin.hoon deleted file mode 100644 index ba2251e..0000000 --- a/desk/lib/pytz/asia-sakhalin.hoon +++ /dev/null @@ -1,71 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:31,LMT -1905-08-22T14:29:12,+09:00,+09 -1945-08-24T15:00:00,+11:00,+11 -1981-03-31T13:00:00,+12:00,+12 -1981-09-30T12:00:00,+11:00,+11 -1982-03-31T13:00:00,+12:00,+12 -1982-09-30T12:00:00,+11:00,+11 -1983-03-31T13:00:00,+12:00,+12 -1983-09-30T12:00:00,+11:00,+11 -1984-03-31T13:00:00,+12:00,+12 -1984-09-29T15:00:00,+11:00,+11 -1985-03-30T15:00:00,+12:00,+12 -1985-09-28T15:00:00,+11:00,+11 -1986-03-29T15:00:00,+12:00,+12 -1986-09-27T15:00:00,+11:00,+11 -1987-03-28T15:00:00,+12:00,+12 -1987-09-26T15:00:00,+11:00,+11 -1988-03-26T15:00:00,+12:00,+12 -1988-09-24T15:00:00,+11:00,+11 -1989-03-25T15:00:00,+12:00,+12 -1989-09-23T15:00:00,+11:00,+11 -1990-03-24T15:00:00,+12:00,+12 -1990-09-29T15:00:00,+11:00,+11 -1991-03-30T15:00:00,+11:00,+11 -1991-09-28T16:00:00,+10:00,+10 -1992-01-18T16:00:00,+11:00,+11 -1992-03-28T15:00:00,+12:00,+12 -1992-09-26T15:00:00,+11:00,+11 -1993-03-27T15:00:00,+12:00,+12 -1993-09-25T15:00:00,+11:00,+11 -1994-03-26T15:00:00,+12:00,+12 -1994-09-24T15:00:00,+11:00,+11 -1995-03-25T15:00:00,+12:00,+12 -1995-09-23T15:00:00,+11:00,+11 -1996-03-30T15:00:00,+12:00,+12 -1996-10-26T15:00:00,+11:00,+11 -1997-03-29T15:00:00,+11:00,+11 -1997-10-25T16:00:00,+10:00,+10 -1998-03-28T16:00:00,+11:00,+11 -1998-10-24T16:00:00,+10:00,+10 -1999-03-27T16:00:00,+11:00,+11 -1999-10-30T16:00:00,+10:00,+10 -2000-03-25T16:00:00,+11:00,+11 -2000-10-28T16:00:00,+10:00,+10 -2001-03-24T16:00:00,+11:00,+11 -2001-10-27T16:00:00,+10:00,+10 -2002-03-30T16:00:00,+11:00,+11 -2002-10-26T16:00:00,+10:00,+10 -2003-03-29T16:00:00,+11:00,+11 -2003-10-25T16:00:00,+10:00,+10 -2004-03-27T16:00:00,+11:00,+11 -2004-10-30T16:00:00,+10:00,+10 -2005-03-26T16:00:00,+11:00,+11 -2005-10-29T16:00:00,+10:00,+10 -2006-03-25T16:00:00,+11:00,+11 -2006-10-28T16:00:00,+10:00,+10 -2007-03-24T16:00:00,+11:00,+11 -2007-10-27T16:00:00,+10:00,+10 -2008-03-29T16:00:00,+11:00,+11 -2008-10-25T16:00:00,+10:00,+10 -2009-03-28T16:00:00,+11:00,+11 -2009-10-24T16:00:00,+10:00,+10 -2010-03-27T16:00:00,+11:00,+11 -2010-10-30T16:00:00,+10:00,+10 -2011-03-26T16:00:00,+11:00,+11 -2014-10-25T15:00:00,+10:00,+10 -2016-03-26T16:00:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/asia-samarkand.hoon b/desk/lib/pytz/asia-samarkand.hoon deleted file mode 100644 index 65133be..0000000 --- a/desk/lib/pytz/asia-samarkand.hoon +++ /dev/null @@ -1,29 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:28,LMT -1924-05-01T19:32:07,+04:00,+04 -1930-06-20T20:00:00,+05:00,+05 -1981-03-31T19:00:00,+06:00,+06 -1981-09-30T18:00:00,+06:00,+06 -1982-03-31T18:00:00,+06:00,+06 -1982-09-30T18:00:00,+05:00,+05 -1983-03-31T19:00:00,+06:00,+06 -1983-09-30T18:00:00,+05:00,+05 -1984-03-31T19:00:00,+06:00,+06 -1984-09-29T21:00:00,+05:00,+05 -1985-03-30T21:00:00,+06:00,+06 -1985-09-28T21:00:00,+05:00,+05 -1986-03-29T21:00:00,+06:00,+06 -1986-09-27T21:00:00,+05:00,+05 -1987-03-28T21:00:00,+06:00,+06 -1987-09-26T21:00:00,+05:00,+05 -1988-03-26T21:00:00,+06:00,+06 -1988-09-24T21:00:00,+05:00,+05 -1989-03-25T21:00:00,+06:00,+06 -1989-09-23T21:00:00,+05:00,+05 -1990-03-24T21:00:00,+06:00,+06 -1990-09-29T21:00:00,+05:00,+05 -1991-03-30T21:00:00,+06:00,+06 -1991-09-28T21:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-seoul.hoon b/desk/lib/pytz/asia-seoul.hoon deleted file mode 100644 index 9567a65..0000000 --- a/desk/lib/pytz/asia-seoul.hoon +++ /dev/null @@ -1,34 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:28,LMT -1908-03-31T15:32:08,+08:30,KST -1911-12-31T15:30:00,+09:00,JST -1945-09-07T15:00:00,+09:00,KST -1948-05-31T15:00:00,+10:00,KDT -1948-09-12T14:00:00,+09:00,KST -1949-04-02T15:00:00,+10:00,KDT -1949-09-10T14:00:00,+09:00,KST -1950-03-31T15:00:00,+10:00,KDT -1950-09-09T14:00:00,+09:00,KST -1951-05-05T15:00:00,+10:00,KDT -1951-09-08T14:00:00,+09:00,KST -1954-03-20T15:00:00,+08:30,KST -1955-05-04T15:30:00,+09:30,KDT -1955-09-08T14:30:00,+08:30,KST -1956-05-19T15:30:00,+09:30,KDT -1956-09-29T14:30:00,+08:30,KST -1957-05-04T15:30:00,+09:30,KDT -1957-09-21T14:30:00,+08:30,KST -1958-05-03T15:30:00,+09:30,KDT -1958-09-20T14:30:00,+08:30,KST -1959-05-02T15:30:00,+09:30,KDT -1959-09-19T14:30:00,+08:30,KST -1960-04-30T15:30:00,+09:30,KDT -1960-09-17T14:30:00,+08:30,KST -1961-08-09T15:30:00,+09:00,KST -1987-05-09T17:00:00,+10:00,KDT -1987-10-10T17:00:00,+09:00,KST -1988-05-07T17:00:00,+10:00,KDT -1988-10-08T17:00:00,+09:00,KST -''' diff --git a/desk/lib/pytz/asia-shanghai.hoon b/desk/lib/pytz/asia-shanghai.hoon deleted file mode 100644 index 9b9e947..0000000 --- a/desk/lib/pytz/asia-shanghai.hoon +++ /dev/null @@ -1,34 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:06,LMT -1901-12-13T20:45:52,+08:00,CST -1919-04-12T16:00:00,+09:00,CDT -1919-09-30T15:00:00,+08:00,CST -1940-05-31T16:00:00,+09:00,CDT -1940-10-12T15:00:00,+08:00,CST -1941-03-14T16:00:00,+09:00,CDT -1941-11-01T15:00:00,+08:00,CST -1942-01-30T16:00:00,+09:00,CDT -1945-09-01T15:00:00,+08:00,CST -1946-05-14T16:00:00,+09:00,CDT -1946-09-30T15:00:00,+08:00,CST -1947-04-14T16:00:00,+09:00,CDT -1947-10-31T15:00:00,+08:00,CST -1948-04-30T16:00:00,+09:00,CDT -1948-09-30T15:00:00,+08:00,CST -1949-04-30T16:00:00,+09:00,CDT -1949-05-27T15:00:00,+08:00,CST -1986-05-03T18:00:00,+09:00,CDT -1986-09-13T17:00:00,+08:00,CST -1987-04-11T18:00:00,+09:00,CDT -1987-09-12T17:00:00,+08:00,CST -1988-04-16T18:00:00,+09:00,CDT -1988-09-10T17:00:00,+08:00,CST -1989-04-15T18:00:00,+09:00,CDT -1989-09-16T17:00:00,+08:00,CST -1990-04-14T18:00:00,+09:00,CDT -1990-09-15T17:00:00,+08:00,CST -1991-04-13T18:00:00,+09:00,CDT -1991-09-14T17:00:00,+08:00,CST -''' diff --git a/desk/lib/pytz/asia-singapore.hoon b/desk/lib/pytz/asia-singapore.hoon deleted file mode 100644 index 499cd85..0000000 --- a/desk/lib/pytz/asia-singapore.hoon +++ /dev/null @@ -1,13 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:55,LMT -1901-12-13T20:45:52,+06:55,SMT -1905-05-31T17:04:35,+07:00,+07 -1932-12-31T17:00:00,+07:20,+0720 -1935-12-31T16:40:00,+07:20,+0720 -1941-08-31T16:40:00,+07:30,+0730 -1942-02-15T16:30:00,+09:00,+09 -1945-09-11T15:00:00,+07:30,+0730 -1981-12-31T16:00:00,+08:00,+08 -''' diff --git a/desk/lib/pytz/asia-srednekolymsk.hoon b/desk/lib/pytz/asia-srednekolymsk.hoon deleted file mode 100644 index 7814869..0000000 --- a/desk/lib/pytz/asia-srednekolymsk.hoon +++ /dev/null @@ -1,70 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:15,LMT -1924-05-01T13:45:08,+10:00,+10 -1930-06-20T14:00:00,+11:00,+11 -1981-03-31T13:00:00,+12:00,+12 -1981-09-30T12:00:00,+11:00,+11 -1982-03-31T13:00:00,+12:00,+12 -1982-09-30T12:00:00,+11:00,+11 -1983-03-31T13:00:00,+12:00,+12 -1983-09-30T12:00:00,+11:00,+11 -1984-03-31T13:00:00,+12:00,+12 -1984-09-29T15:00:00,+11:00,+11 -1985-03-30T15:00:00,+12:00,+12 -1985-09-28T15:00:00,+11:00,+11 -1986-03-29T15:00:00,+12:00,+12 -1986-09-27T15:00:00,+11:00,+11 -1987-03-28T15:00:00,+12:00,+12 -1987-09-26T15:00:00,+11:00,+11 -1988-03-26T15:00:00,+12:00,+12 -1988-09-24T15:00:00,+11:00,+11 -1989-03-25T15:00:00,+12:00,+12 -1989-09-23T15:00:00,+11:00,+11 -1990-03-24T15:00:00,+12:00,+12 -1990-09-29T15:00:00,+11:00,+11 -1991-03-30T15:00:00,+11:00,+11 -1991-09-28T16:00:00,+10:00,+10 -1992-01-18T16:00:00,+11:00,+11 -1992-03-28T15:00:00,+12:00,+12 -1992-09-26T15:00:00,+11:00,+11 -1993-03-27T15:00:00,+12:00,+12 -1993-09-25T15:00:00,+11:00,+11 -1994-03-26T15:00:00,+12:00,+12 -1994-09-24T15:00:00,+11:00,+11 -1995-03-25T15:00:00,+12:00,+12 -1995-09-23T15:00:00,+11:00,+11 -1996-03-30T15:00:00,+12:00,+12 -1996-10-26T15:00:00,+11:00,+11 -1997-03-29T15:00:00,+12:00,+12 -1997-10-25T15:00:00,+11:00,+11 -1998-03-28T15:00:00,+12:00,+12 -1998-10-24T15:00:00,+11:00,+11 -1999-03-27T15:00:00,+12:00,+12 -1999-10-30T15:00:00,+11:00,+11 -2000-03-25T15:00:00,+12:00,+12 -2000-10-28T15:00:00,+11:00,+11 -2001-03-24T15:00:00,+12:00,+12 -2001-10-27T15:00:00,+11:00,+11 -2002-03-30T15:00:00,+12:00,+12 -2002-10-26T15:00:00,+11:00,+11 -2003-03-29T15:00:00,+12:00,+12 -2003-10-25T15:00:00,+11:00,+11 -2004-03-27T15:00:00,+12:00,+12 -2004-10-30T15:00:00,+11:00,+11 -2005-03-26T15:00:00,+12:00,+12 -2005-10-29T15:00:00,+11:00,+11 -2006-03-25T15:00:00,+12:00,+12 -2006-10-28T15:00:00,+11:00,+11 -2007-03-24T15:00:00,+12:00,+12 -2007-10-27T15:00:00,+11:00,+11 -2008-03-29T15:00:00,+12:00,+12 -2008-10-25T15:00:00,+11:00,+11 -2009-03-28T15:00:00,+12:00,+12 -2009-10-24T15:00:00,+11:00,+11 -2010-03-27T15:00:00,+12:00,+12 -2010-10-30T15:00:00,+11:00,+11 -2011-03-26T15:00:00,+12:00,+12 -2014-10-25T14:00:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/asia-taipei.hoon b/desk/lib/pytz/asia-taipei.hoon deleted file mode 100644 index 61ce78e..0000000 --- a/desk/lib/pytz/asia-taipei.hoon +++ /dev/null @@ -1,46 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:06,LMT -1901-12-13T20:45:52,+08:00,CST -1937-09-30T16:00:00,+09:00,JST -1945-09-20T16:00:00,+08:00,CST -1946-05-14T16:00:00,+09:00,CDT -1946-09-30T15:00:00,+08:00,CST -1947-04-14T16:00:00,+09:00,CDT -1947-10-31T15:00:00,+08:00,CST -1948-04-30T16:00:00,+09:00,CDT -1948-09-30T15:00:00,+08:00,CST -1949-04-30T16:00:00,+09:00,CDT -1949-09-30T15:00:00,+08:00,CST -1950-04-30T16:00:00,+09:00,CDT -1950-09-30T15:00:00,+08:00,CST -1951-04-30T16:00:00,+09:00,CDT -1951-09-30T15:00:00,+08:00,CST -1952-02-29T16:00:00,+09:00,CDT -1952-10-31T15:00:00,+08:00,CST -1953-03-31T16:00:00,+09:00,CDT -1953-10-31T15:00:00,+08:00,CST -1954-03-31T16:00:00,+09:00,CDT -1954-10-31T15:00:00,+08:00,CST -1955-03-31T16:00:00,+09:00,CDT -1955-09-30T15:00:00,+08:00,CST -1956-03-31T16:00:00,+09:00,CDT -1956-09-30T15:00:00,+08:00,CST -1957-03-31T16:00:00,+09:00,CDT -1957-09-30T15:00:00,+08:00,CST -1958-03-31T16:00:00,+09:00,CDT -1958-09-30T15:00:00,+08:00,CST -1959-03-31T16:00:00,+09:00,CDT -1959-09-30T15:00:00,+08:00,CST -1960-05-31T16:00:00,+09:00,CDT -1960-09-30T15:00:00,+08:00,CST -1961-05-31T16:00:00,+09:00,CDT -1961-09-30T15:00:00,+08:00,CST -1974-03-31T16:00:00,+09:00,CDT -1974-09-30T15:00:00,+08:00,CST -1975-03-31T16:00:00,+09:00,CDT -1975-09-30T15:00:00,+08:00,CST -1979-06-30T16:00:00,+09:00,CDT -1979-09-30T15:00:00,+08:00,CST -''' diff --git a/desk/lib/pytz/asia-tashkent.hoon b/desk/lib/pytz/asia-tashkent.hoon deleted file mode 100644 index 2010227..0000000 --- a/desk/lib/pytz/asia-tashkent.hoon +++ /dev/null @@ -1,29 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:37,LMT -1924-05-01T19:22:49,+05:00,+05 -1930-06-20T19:00:00,+06:00,+06 -1981-03-31T18:00:00,+07:00,+07 -1981-09-30T17:00:00,+06:00,+06 -1982-03-31T18:00:00,+07:00,+07 -1982-09-30T17:00:00,+06:00,+06 -1983-03-31T18:00:00,+07:00,+07 -1983-09-30T17:00:00,+06:00,+06 -1984-03-31T18:00:00,+07:00,+07 -1984-09-29T20:00:00,+06:00,+06 -1985-03-30T20:00:00,+07:00,+07 -1985-09-28T20:00:00,+06:00,+06 -1986-03-29T20:00:00,+07:00,+07 -1986-09-27T20:00:00,+06:00,+06 -1987-03-28T20:00:00,+07:00,+07 -1987-09-26T20:00:00,+06:00,+06 -1988-03-26T20:00:00,+07:00,+07 -1988-09-24T20:00:00,+06:00,+06 -1989-03-25T20:00:00,+07:00,+07 -1989-09-23T20:00:00,+06:00,+06 -1990-03-24T20:00:00,+07:00,+07 -1990-09-29T20:00:00,+06:00,+06 -1991-03-30T20:00:00,+06:00,+06 -1991-09-28T21:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-tbilisi.hoon b/desk/lib/pytz/asia-tbilisi.hoon deleted file mode 100644 index c7f12b4..0000000 --- a/desk/lib/pytz/asia-tbilisi.hoon +++ /dev/null @@ -1,57 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:59,LMT -1901-12-13T20:45:52,+02:59,TBMT -1924-05-01T21:00:49,+03:00,+03 -1957-02-28T21:00:00,+04:00,+04 -1981-03-31T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+04:00,+04 -1982-03-31T20:00:00,+05:00,+05 -1982-09-30T19:00:00,+04:00,+04 -1983-03-31T20:00:00,+05:00,+05 -1983-09-30T19:00:00,+04:00,+04 -1984-03-31T20:00:00,+05:00,+05 -1984-09-29T22:00:00,+04:00,+04 -1985-03-30T22:00:00,+05:00,+05 -1985-09-28T22:00:00,+04:00,+04 -1986-03-29T22:00:00,+05:00,+05 -1986-09-27T22:00:00,+04:00,+04 -1987-03-28T22:00:00,+05:00,+05 -1987-09-26T22:00:00,+04:00,+04 -1988-03-26T22:00:00,+05:00,+05 -1988-09-24T22:00:00,+04:00,+04 -1989-03-25T22:00:00,+05:00,+05 -1989-09-23T22:00:00,+04:00,+04 -1990-03-24T22:00:00,+05:00,+05 -1990-09-29T22:00:00,+04:00,+04 -1991-03-30T22:00:00,+04:00,+04 -1991-09-28T23:00:00,+03:00,+03 -1992-03-28T21:00:00,+04:00,+04 -1992-09-26T20:00:00,+03:00,+03 -1993-03-27T21:00:00,+04:00,+04 -1993-09-25T20:00:00,+03:00,+03 -1994-03-26T21:00:00,+04:00,+04 -1994-09-24T20:00:00,+04:00,+04 -1995-03-25T20:00:00,+05:00,+05 -1995-09-23T19:00:00,+04:00,+04 -1996-03-30T20:00:00,+05:00,+05 -1997-03-29T19:00:00,+05:00,+05 -1997-10-25T19:00:00,+04:00,+04 -1998-03-28T20:00:00,+05:00,+05 -1998-10-24T19:00:00,+04:00,+04 -1999-03-27T20:00:00,+05:00,+05 -1999-10-30T19:00:00,+04:00,+04 -2000-03-25T20:00:00,+05:00,+05 -2000-10-28T19:00:00,+04:00,+04 -2001-03-24T20:00:00,+05:00,+05 -2001-10-27T19:00:00,+04:00,+04 -2002-03-30T20:00:00,+05:00,+05 -2002-10-26T19:00:00,+04:00,+04 -2003-03-29T20:00:00,+05:00,+05 -2003-10-25T19:00:00,+04:00,+04 -2004-03-27T20:00:00,+05:00,+05 -2004-06-26T19:00:00,+04:00,+04 -2004-10-30T23:00:00,+03:00,+03 -2005-03-26T23:00:00,+04:00,+04 -''' diff --git a/desk/lib/pytz/asia-tehran.hoon b/desk/lib/pytz/asia-tehran.hoon deleted file mode 100644 index 6eec213..0000000 --- a/desk/lib/pytz/asia-tehran.hoon +++ /dev/null @@ -1,76 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:26,LMT -1915-12-31T20:34:16,+03:26,TMT -1935-06-12T20:34:16,+03:30,+0330 -1977-03-21T19:30:00,+04:30,+0430 -1977-10-20T19:30:00,+04:00,+04 -1978-03-24T20:00:00,+05:00,+05 -1978-08-04T20:00:00,+04:00,+04 -1978-11-10T20:00:00,+03:30,+0330 -1979-05-26T20:30:00,+04:30,+0430 -1979-09-18T19:30:00,+03:30,+0330 -1980-03-20T20:30:00,+04:30,+0430 -1980-09-22T19:30:00,+03:30,+0330 -1991-05-02T20:30:00,+04:30,+0430 -1991-09-21T19:30:00,+03:30,+0330 -1992-03-21T20:30:00,+04:30,+0430 -1992-09-21T19:30:00,+03:30,+0330 -1993-03-21T20:30:00,+04:30,+0430 -1993-09-21T19:30:00,+03:30,+0330 -1994-03-21T20:30:00,+04:30,+0430 -1994-09-21T19:30:00,+03:30,+0330 -1995-03-21T20:30:00,+04:30,+0430 -1995-09-21T19:30:00,+03:30,+0330 -1996-03-20T20:30:00,+04:30,+0430 -1996-09-20T19:30:00,+03:30,+0330 -1997-03-21T20:30:00,+04:30,+0430 -1997-09-21T19:30:00,+03:30,+0330 -1998-03-21T20:30:00,+04:30,+0430 -1998-09-21T19:30:00,+03:30,+0330 -1999-03-21T20:30:00,+04:30,+0430 -1999-09-21T19:30:00,+03:30,+0330 -2000-03-20T20:30:00,+04:30,+0430 -2000-09-20T19:30:00,+03:30,+0330 -2001-03-21T20:30:00,+04:30,+0430 -2001-09-21T19:30:00,+03:30,+0330 -2002-03-21T20:30:00,+04:30,+0430 -2002-09-21T19:30:00,+03:30,+0330 -2003-03-21T20:30:00,+04:30,+0430 -2003-09-21T19:30:00,+03:30,+0330 -2004-03-20T20:30:00,+04:30,+0430 -2004-09-20T19:30:00,+03:30,+0330 -2005-03-21T20:30:00,+04:30,+0430 -2005-09-21T19:30:00,+03:30,+0330 -2008-03-20T20:30:00,+04:30,+0430 -2008-09-20T19:30:00,+03:30,+0330 -2009-03-21T20:30:00,+04:30,+0430 -2009-09-21T19:30:00,+03:30,+0330 -2010-03-21T20:30:00,+04:30,+0430 -2010-09-21T19:30:00,+03:30,+0330 -2011-03-21T20:30:00,+04:30,+0430 -2011-09-21T19:30:00,+03:30,+0330 -2012-03-20T20:30:00,+04:30,+0430 -2012-09-20T19:30:00,+03:30,+0330 -2013-03-21T20:30:00,+04:30,+0430 -2013-09-21T19:30:00,+03:30,+0330 -2014-03-21T20:30:00,+04:30,+0430 -2014-09-21T19:30:00,+03:30,+0330 -2015-03-21T20:30:00,+04:30,+0430 -2015-09-21T19:30:00,+03:30,+0330 -2016-03-20T20:30:00,+04:30,+0430 -2016-09-20T19:30:00,+03:30,+0330 -2017-03-21T20:30:00,+04:30,+0430 -2017-09-21T19:30:00,+03:30,+0330 -2018-03-21T20:30:00,+04:30,+0430 -2018-09-21T19:30:00,+03:30,+0330 -2019-03-21T20:30:00,+04:30,+0430 -2019-09-21T19:30:00,+03:30,+0330 -2020-03-20T20:30:00,+04:30,+0430 -2020-09-20T19:30:00,+03:30,+0330 -2021-03-21T20:30:00,+04:30,+0430 -2021-09-21T19:30:00,+03:30,+0330 -2022-03-21T20:30:00,+04:30,+0430 -2022-09-21T19:30:00,+03:30,+0330 -''' diff --git a/desk/lib/pytz/asia-tel-aviv.hoon b/desk/lib/pytz/asia-tel-aviv.hoon deleted file mode 100644 index 197011f..0000000 --- a/desk/lib/pytz/asia-tel-aviv.hoon +++ /dev/null @@ -1,154 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:21,LMT -1901-12-13T20:45:52,+02:21,JMT -1917-12-31T21:39:20,+02:00,IST -1940-06-01T00:00:00,+03:00,IDT -1940-10-01T00:00:00,+02:00,IST -1940-11-17T00:00:00,+03:00,IDT -1942-11-01T00:00:00,+02:00,IST -1943-04-01T00:00:00,+03:00,IDT -1943-11-01T00:00:00,+02:00,IST -1944-04-01T00:00:00,+03:00,IDT -1944-11-01T00:00:00,+02:00,IST -1945-04-16T00:00:00,+03:00,IDT -1945-11-01T00:00:00,+02:00,IST -1946-04-16T00:00:00,+03:00,IDT -1946-11-01T00:00:00,+02:00,IST -1948-05-23T00:00:00,+04:00,IDDT -1948-09-01T00:00:00,+03:00,IDT -1948-11-01T00:00:00,+02:00,IST -1949-05-01T00:00:00,+03:00,IDT -1949-11-01T00:00:00,+02:00,IST -1950-04-16T00:00:00,+03:00,IDT -1950-09-15T00:00:00,+02:00,IST -1951-04-01T00:00:00,+03:00,IDT -1951-11-11T00:00:00,+02:00,IST -1952-04-20T00:00:00,+03:00,IDT -1952-10-19T00:00:00,+02:00,IST -1953-04-12T00:00:00,+03:00,IDT -1953-09-13T00:00:00,+02:00,IST -1954-06-13T00:00:00,+03:00,IDT -1954-09-12T00:00:00,+02:00,IST -1955-06-12T00:00:00,+03:00,IDT -1955-09-11T00:00:00,+02:00,IST -1956-06-03T00:00:00,+03:00,IDT -1956-09-30T00:00:00,+02:00,IST -1957-04-28T00:00:00,+03:00,IDT -1957-09-22T00:00:00,+02:00,IST -1974-07-06T22:00:00,+03:00,IDT -1974-10-12T21:00:00,+02:00,IST -1975-04-19T22:00:00,+03:00,IDT -1975-08-30T21:00:00,+02:00,IST -1980-08-02T22:00:00,+03:00,IDT -1980-09-13T22:00:00,+02:00,IST -1984-05-05T22:00:00,+03:00,IDT -1984-08-25T22:00:00,+02:00,IST -1985-04-13T22:00:00,+03:00,IDT -1985-08-31T21:00:00,+02:00,IST -1986-05-17T22:00:00,+03:00,IDT -1986-09-06T21:00:00,+02:00,IST -1987-04-14T22:00:00,+03:00,IDT -1987-09-12T21:00:00,+02:00,IST -1988-04-09T22:00:00,+03:00,IDT -1988-09-03T21:00:00,+02:00,IST -1989-04-29T22:00:00,+03:00,IDT -1989-09-02T21:00:00,+02:00,IST -1990-03-24T22:00:00,+03:00,IDT -1990-08-25T21:00:00,+02:00,IST -1991-03-23T22:00:00,+03:00,IDT -1991-08-31T21:00:00,+02:00,IST -1992-03-28T22:00:00,+03:00,IDT -1992-09-05T21:00:00,+02:00,IST -1993-04-01T22:00:00,+03:00,IDT -1993-09-04T21:00:00,+02:00,IST -1994-03-31T22:00:00,+03:00,IDT -1994-08-27T21:00:00,+02:00,IST -1995-03-30T22:00:00,+03:00,IDT -1995-09-02T21:00:00,+02:00,IST -1996-03-14T22:00:00,+03:00,IDT -1996-09-15T21:00:00,+02:00,IST -1997-03-20T22:00:00,+03:00,IDT -1997-09-13T21:00:00,+02:00,IST -1998-03-19T22:00:00,+03:00,IDT -1998-09-05T21:00:00,+02:00,IST -1999-04-02T00:00:00,+03:00,IDT -1999-09-02T23:00:00,+02:00,IST -2000-04-14T00:00:00,+03:00,IDT -2000-10-05T22:00:00,+02:00,IST -2001-04-08T23:00:00,+03:00,IDT -2001-09-23T22:00:00,+02:00,IST -2002-03-28T23:00:00,+03:00,IDT -2002-10-06T22:00:00,+02:00,IST -2003-03-27T23:00:00,+03:00,IDT -2003-10-02T22:00:00,+02:00,IST -2004-04-06T23:00:00,+03:00,IDT -2004-09-21T22:00:00,+02:00,IST -2005-04-01T00:00:00,+03:00,IDT -2005-10-08T23:00:00,+02:00,IST -2006-03-31T00:00:00,+03:00,IDT -2006-09-30T23:00:00,+02:00,IST -2007-03-30T00:00:00,+03:00,IDT -2007-09-15T23:00:00,+02:00,IST -2008-03-28T00:00:00,+03:00,IDT -2008-10-04T23:00:00,+02:00,IST -2009-03-27T00:00:00,+03:00,IDT -2009-09-26T23:00:00,+02:00,IST -2010-03-26T00:00:00,+03:00,IDT -2010-09-11T23:00:00,+02:00,IST -2011-04-01T00:00:00,+03:00,IDT -2011-10-01T23:00:00,+02:00,IST -2012-03-30T00:00:00,+03:00,IDT -2012-09-22T23:00:00,+02:00,IST -2013-03-29T00:00:00,+03:00,IDT -2013-10-26T23:00:00,+02:00,IST -2014-03-28T00:00:00,+03:00,IDT -2014-10-25T23:00:00,+02:00,IST -2015-03-27T00:00:00,+03:00,IDT -2015-10-24T23:00:00,+02:00,IST -2016-03-25T00:00:00,+03:00,IDT -2016-10-29T23:00:00,+02:00,IST -2017-03-24T00:00:00,+03:00,IDT -2017-10-28T23:00:00,+02:00,IST -2018-03-23T00:00:00,+03:00,IDT -2018-10-27T23:00:00,+02:00,IST -2019-03-29T00:00:00,+03:00,IDT -2019-10-26T23:00:00,+02:00,IST -2020-03-27T00:00:00,+03:00,IDT -2020-10-24T23:00:00,+02:00,IST -2021-03-26T00:00:00,+03:00,IDT -2021-10-30T23:00:00,+02:00,IST -2022-03-25T00:00:00,+03:00,IDT -2022-10-29T23:00:00,+02:00,IST -2023-03-24T00:00:00,+03:00,IDT -2023-10-28T23:00:00,+02:00,IST -2024-03-29T00:00:00,+03:00,IDT -2024-10-26T23:00:00,+02:00,IST -2025-03-28T00:00:00,+03:00,IDT -2025-10-25T23:00:00,+02:00,IST -2026-03-27T00:00:00,+03:00,IDT -2026-10-24T23:00:00,+02:00,IST -2027-03-26T00:00:00,+03:00,IDT -2027-10-30T23:00:00,+02:00,IST -2028-03-24T00:00:00,+03:00,IDT -2028-10-28T23:00:00,+02:00,IST -2029-03-23T00:00:00,+03:00,IDT -2029-10-27T23:00:00,+02:00,IST -2030-03-29T00:00:00,+03:00,IDT -2030-10-26T23:00:00,+02:00,IST -2031-03-28T00:00:00,+03:00,IDT -2031-10-25T23:00:00,+02:00,IST -2032-03-26T00:00:00,+03:00,IDT -2032-10-30T23:00:00,+02:00,IST -2033-03-25T00:00:00,+03:00,IDT -2033-10-29T23:00:00,+02:00,IST -2034-03-24T00:00:00,+03:00,IDT -2034-10-28T23:00:00,+02:00,IST -2035-03-23T00:00:00,+03:00,IDT -2035-10-27T23:00:00,+02:00,IST -2036-03-28T00:00:00,+03:00,IDT -2036-10-25T23:00:00,+02:00,IST -2037-03-27T00:00:00,+03:00,IDT -2037-10-24T23:00:00,+02:00,IST -''' diff --git a/desk/lib/pytz/asia-thimphu.hoon b/desk/lib/pytz/asia-thimphu.hoon deleted file mode 100644 index ca622d1..0000000 --- a/desk/lib/pytz/asia-thimphu.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:59,LMT -1947-08-14T18:01:24,+05:30,+0530 -1987-09-30T18:30:00,+06:00,+06 -''' diff --git a/desk/lib/pytz/asia-tokyo.hoon b/desk/lib/pytz/asia-tokyo.hoon deleted file mode 100644 index b0442fa..0000000 --- a/desk/lib/pytz/asia-tokyo.hoon +++ /dev/null @@ -1,14 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:19,LMT -1901-12-13T20:45:52,+09:00,JST -1948-05-01T15:00:00,+10:00,JDT -1948-09-11T15:00:00,+09:00,JST -1949-04-02T15:00:00,+10:00,JDT -1949-09-10T15:00:00,+09:00,JST -1950-05-06T15:00:00,+10:00,JDT -1950-09-09T15:00:00,+09:00,JST -1951-05-05T15:00:00,+10:00,JDT -1951-09-08T15:00:00,+09:00,JST -''' diff --git a/desk/lib/pytz/asia-tomsk.hoon b/desk/lib/pytz/asia-tomsk.hoon deleted file mode 100644 index 91bb977..0000000 --- a/desk/lib/pytz/asia-tomsk.hoon +++ /dev/null @@ -1,72 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:40,LMT -1919-12-21T18:20:09,+06:00,+06 -1930-06-20T18:00:00,+07:00,+07 -1981-03-31T17:00:00,+08:00,+08 -1981-09-30T16:00:00,+07:00,+07 -1982-03-31T17:00:00,+08:00,+08 -1982-09-30T16:00:00,+07:00,+07 -1983-03-31T17:00:00,+08:00,+08 -1983-09-30T16:00:00,+07:00,+07 -1984-03-31T17:00:00,+08:00,+08 -1984-09-29T19:00:00,+07:00,+07 -1985-03-30T19:00:00,+08:00,+08 -1985-09-28T19:00:00,+07:00,+07 -1986-03-29T19:00:00,+08:00,+08 -1986-09-27T19:00:00,+07:00,+07 -1987-03-28T19:00:00,+08:00,+08 -1987-09-26T19:00:00,+07:00,+07 -1988-03-26T19:00:00,+08:00,+08 -1988-09-24T19:00:00,+07:00,+07 -1989-03-25T19:00:00,+08:00,+08 -1989-09-23T19:00:00,+07:00,+07 -1990-03-24T19:00:00,+08:00,+08 -1990-09-29T19:00:00,+07:00,+07 -1991-03-30T19:00:00,+07:00,+07 -1991-09-28T20:00:00,+06:00,+06 -1992-01-18T20:00:00,+07:00,+07 -1992-03-28T19:00:00,+08:00,+08 -1992-09-26T19:00:00,+07:00,+07 -1993-03-27T19:00:00,+08:00,+08 -1993-09-25T19:00:00,+07:00,+07 -1994-03-26T19:00:00,+08:00,+08 -1994-09-24T19:00:00,+07:00,+07 -1995-03-25T19:00:00,+08:00,+08 -1995-09-23T19:00:00,+07:00,+07 -1996-03-30T19:00:00,+08:00,+08 -1996-10-26T19:00:00,+07:00,+07 -1997-03-29T19:00:00,+08:00,+08 -1997-10-25T19:00:00,+07:00,+07 -1998-03-28T19:00:00,+08:00,+08 -1998-10-24T19:00:00,+07:00,+07 -1999-03-27T19:00:00,+08:00,+08 -1999-10-30T19:00:00,+07:00,+07 -2000-03-25T19:00:00,+08:00,+08 -2000-10-28T19:00:00,+07:00,+07 -2001-03-24T19:00:00,+08:00,+08 -2001-10-27T19:00:00,+07:00,+07 -2002-03-30T19:00:00,+08:00,+08 -2002-04-30T19:00:00,+07:00,+07 -2002-10-26T20:00:00,+06:00,+06 -2003-03-29T20:00:00,+07:00,+07 -2003-10-25T20:00:00,+06:00,+06 -2004-03-27T20:00:00,+07:00,+07 -2004-10-30T20:00:00,+06:00,+06 -2005-03-26T20:00:00,+07:00,+07 -2005-10-29T20:00:00,+06:00,+06 -2006-03-25T20:00:00,+07:00,+07 -2006-10-28T20:00:00,+06:00,+06 -2007-03-24T20:00:00,+07:00,+07 -2007-10-27T20:00:00,+06:00,+06 -2008-03-29T20:00:00,+07:00,+07 -2008-10-25T20:00:00,+06:00,+06 -2009-03-28T20:00:00,+07:00,+07 -2009-10-24T20:00:00,+06:00,+06 -2010-03-27T20:00:00,+07:00,+07 -2010-10-30T20:00:00,+06:00,+06 -2011-03-26T20:00:00,+07:00,+07 -2014-10-25T19:00:00,+06:00,+06 -2016-05-28T20:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-ulaanbaatar.hoon b/desk/lib/pytz/asia-ulaanbaatar.hoon deleted file mode 100644 index 84c895a..0000000 --- a/desk/lib/pytz/asia-ulaanbaatar.hoon +++ /dev/null @@ -1,55 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:08,LMT -1905-07-31T16:52:28,+07:00,+07 -1977-12-31T17:00:00,+08:00,+08 -1983-03-31T16:00:00,+09:00,+09 -1983-09-30T15:00:00,+08:00,+08 -1984-03-31T16:00:00,+09:00,+09 -1984-09-29T15:00:00,+08:00,+08 -1985-03-30T16:00:00,+09:00,+09 -1985-09-28T15:00:00,+08:00,+08 -1986-03-29T16:00:00,+09:00,+09 -1986-09-27T15:00:00,+08:00,+08 -1987-03-28T16:00:00,+09:00,+09 -1987-09-26T15:00:00,+08:00,+08 -1988-03-26T16:00:00,+09:00,+09 -1988-09-24T15:00:00,+08:00,+08 -1989-03-25T16:00:00,+09:00,+09 -1989-09-23T15:00:00,+08:00,+08 -1990-03-24T16:00:00,+09:00,+09 -1990-09-29T15:00:00,+08:00,+08 -1991-03-30T16:00:00,+09:00,+09 -1991-09-28T15:00:00,+08:00,+08 -1992-03-28T16:00:00,+09:00,+09 -1992-09-26T15:00:00,+08:00,+08 -1993-03-27T16:00:00,+09:00,+09 -1993-09-25T15:00:00,+08:00,+08 -1994-03-26T16:00:00,+09:00,+09 -1994-09-24T15:00:00,+08:00,+08 -1995-03-25T16:00:00,+09:00,+09 -1995-09-23T15:00:00,+08:00,+08 -1996-03-30T16:00:00,+09:00,+09 -1996-09-28T15:00:00,+08:00,+08 -1997-03-29T16:00:00,+09:00,+09 -1997-09-27T15:00:00,+08:00,+08 -1998-03-28T16:00:00,+09:00,+09 -1998-09-26T15:00:00,+08:00,+08 -2001-04-27T18:00:00,+09:00,+09 -2001-09-28T17:00:00,+08:00,+08 -2002-03-29T18:00:00,+09:00,+09 -2002-09-27T17:00:00,+08:00,+08 -2003-03-28T18:00:00,+09:00,+09 -2003-09-26T17:00:00,+08:00,+08 -2004-03-26T18:00:00,+09:00,+09 -2004-09-24T17:00:00,+08:00,+08 -2005-03-25T18:00:00,+09:00,+09 -2005-09-23T17:00:00,+08:00,+08 -2006-03-24T18:00:00,+09:00,+09 -2006-09-29T17:00:00,+08:00,+08 -2015-03-27T18:00:00,+09:00,+09 -2015-09-25T15:00:00,+08:00,+08 -2016-03-25T18:00:00,+09:00,+09 -2016-09-23T15:00:00,+08:00,+08 -''' diff --git a/desk/lib/pytz/asia-urumqi.hoon b/desk/lib/pytz/asia-urumqi.hoon deleted file mode 100644 index 0084eb4..0000000 --- a/desk/lib/pytz/asia-urumqi.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:50,LMT -1927-12-31T18:09:40,+06:00,+06 -''' diff --git a/desk/lib/pytz/asia-ust-nera.hoon b/desk/lib/pytz/asia-ust-nera.hoon deleted file mode 100644 index fc508d4..0000000 --- a/desk/lib/pytz/asia-ust-nera.hoon +++ /dev/null @@ -1,71 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:33,LMT -1919-12-14T14:27:06,+08:00,+08 -1930-06-20T16:00:00,+09:00,+09 -1981-03-31T15:00:00,+12:00,+12 -1981-09-30T12:00:00,+11:00,+11 -1982-03-31T13:00:00,+12:00,+12 -1982-09-30T12:00:00,+11:00,+11 -1983-03-31T13:00:00,+12:00,+12 -1983-09-30T12:00:00,+11:00,+11 -1984-03-31T13:00:00,+12:00,+12 -1984-09-29T15:00:00,+11:00,+11 -1985-03-30T15:00:00,+12:00,+12 -1985-09-28T15:00:00,+11:00,+11 -1986-03-29T15:00:00,+12:00,+12 -1986-09-27T15:00:00,+11:00,+11 -1987-03-28T15:00:00,+12:00,+12 -1987-09-26T15:00:00,+11:00,+11 -1988-03-26T15:00:00,+12:00,+12 -1988-09-24T15:00:00,+11:00,+11 -1989-03-25T15:00:00,+12:00,+12 -1989-09-23T15:00:00,+11:00,+11 -1990-03-24T15:00:00,+12:00,+12 -1990-09-29T15:00:00,+11:00,+11 -1991-03-30T15:00:00,+11:00,+11 -1991-09-28T16:00:00,+10:00,+10 -1992-01-18T16:00:00,+11:00,+11 -1992-03-28T15:00:00,+12:00,+12 -1992-09-26T15:00:00,+11:00,+11 -1993-03-27T15:00:00,+12:00,+12 -1993-09-25T15:00:00,+11:00,+11 -1994-03-26T15:00:00,+12:00,+12 -1994-09-24T15:00:00,+11:00,+11 -1995-03-25T15:00:00,+12:00,+12 -1995-09-23T15:00:00,+11:00,+11 -1996-03-30T15:00:00,+12:00,+12 -1996-10-26T15:00:00,+11:00,+11 -1997-03-29T15:00:00,+12:00,+12 -1997-10-25T15:00:00,+11:00,+11 -1998-03-28T15:00:00,+12:00,+12 -1998-10-24T15:00:00,+11:00,+11 -1999-03-27T15:00:00,+12:00,+12 -1999-10-30T15:00:00,+11:00,+11 -2000-03-25T15:00:00,+12:00,+12 -2000-10-28T15:00:00,+11:00,+11 -2001-03-24T15:00:00,+12:00,+12 -2001-10-27T15:00:00,+11:00,+11 -2002-03-30T15:00:00,+12:00,+12 -2002-10-26T15:00:00,+11:00,+11 -2003-03-29T15:00:00,+12:00,+12 -2003-10-25T15:00:00,+11:00,+11 -2004-03-27T15:00:00,+12:00,+12 -2004-10-30T15:00:00,+11:00,+11 -2005-03-26T15:00:00,+12:00,+12 -2005-10-29T15:00:00,+11:00,+11 -2006-03-25T15:00:00,+12:00,+12 -2006-10-28T15:00:00,+11:00,+11 -2007-03-24T15:00:00,+12:00,+12 -2007-10-27T15:00:00,+11:00,+11 -2008-03-29T15:00:00,+12:00,+12 -2008-10-25T15:00:00,+11:00,+11 -2009-03-28T15:00:00,+12:00,+12 -2009-10-24T15:00:00,+11:00,+11 -2010-03-27T15:00:00,+12:00,+12 -2010-10-30T15:00:00,+11:00,+11 -2011-03-26T15:00:00,+12:00,+12 -2011-09-12T12:00:00,+11:00,+11 -2014-10-25T15:00:00,+10:00,+10 -''' diff --git a/desk/lib/pytz/asia-vientiane.hoon b/desk/lib/pytz/asia-vientiane.hoon deleted file mode 100644 index 78cb0f5..0000000 --- a/desk/lib/pytz/asia-vientiane.hoon +++ /dev/null @@ -1,12 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:50,LMT -1906-06-30T17:09:36,+07:07,PLMT -1911-04-30T16:53:30,+07:00,+07 -1942-12-31T16:00:00,+08:00,+08 -1945-03-14T15:00:00,+09:00,+09 -1945-09-01T15:00:00,+07:00,+07 -1947-03-31T17:00:00,+08:00,+08 -1955-04-14T16:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/asia-vladivostok.hoon b/desk/lib/pytz/asia-vladivostok.hoon deleted file mode 100644 index 1323e25..0000000 --- a/desk/lib/pytz/asia-vladivostok.hoon +++ /dev/null @@ -1,70 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:48,LMT -1922-11-14T15:12:29,+09:00,+09 -1930-06-20T15:00:00,+10:00,+10 -1981-03-31T14:00:00,+11:00,+11 -1981-09-30T13:00:00,+10:00,+10 -1982-03-31T14:00:00,+11:00,+11 -1982-09-30T13:00:00,+10:00,+10 -1983-03-31T14:00:00,+11:00,+11 -1983-09-30T13:00:00,+10:00,+10 -1984-03-31T14:00:00,+11:00,+11 -1984-09-29T16:00:00,+10:00,+10 -1985-03-30T16:00:00,+11:00,+11 -1985-09-28T16:00:00,+10:00,+10 -1986-03-29T16:00:00,+11:00,+11 -1986-09-27T16:00:00,+10:00,+10 -1987-03-28T16:00:00,+11:00,+11 -1987-09-26T16:00:00,+10:00,+10 -1988-03-26T16:00:00,+11:00,+11 -1988-09-24T16:00:00,+10:00,+10 -1989-03-25T16:00:00,+11:00,+11 -1989-09-23T16:00:00,+10:00,+10 -1990-03-24T16:00:00,+11:00,+11 -1990-09-29T16:00:00,+10:00,+10 -1991-03-30T16:00:00,+10:00,+10 -1991-09-28T17:00:00,+09:00,+09 -1992-01-18T17:00:00,+10:00,+10 -1992-03-28T16:00:00,+11:00,+11 -1992-09-26T16:00:00,+10:00,+10 -1993-03-27T16:00:00,+11:00,+11 -1993-09-25T16:00:00,+10:00,+10 -1994-03-26T16:00:00,+11:00,+11 -1994-09-24T16:00:00,+10:00,+10 -1995-03-25T16:00:00,+11:00,+11 -1995-09-23T16:00:00,+10:00,+10 -1996-03-30T16:00:00,+11:00,+11 -1996-10-26T16:00:00,+10:00,+10 -1997-03-29T16:00:00,+11:00,+11 -1997-10-25T16:00:00,+10:00,+10 -1998-03-28T16:00:00,+11:00,+11 -1998-10-24T16:00:00,+10:00,+10 -1999-03-27T16:00:00,+11:00,+11 -1999-10-30T16:00:00,+10:00,+10 -2000-03-25T16:00:00,+11:00,+11 -2000-10-28T16:00:00,+10:00,+10 -2001-03-24T16:00:00,+11:00,+11 -2001-10-27T16:00:00,+10:00,+10 -2002-03-30T16:00:00,+11:00,+11 -2002-10-26T16:00:00,+10:00,+10 -2003-03-29T16:00:00,+11:00,+11 -2003-10-25T16:00:00,+10:00,+10 -2004-03-27T16:00:00,+11:00,+11 -2004-10-30T16:00:00,+10:00,+10 -2005-03-26T16:00:00,+11:00,+11 -2005-10-29T16:00:00,+10:00,+10 -2006-03-25T16:00:00,+11:00,+11 -2006-10-28T16:00:00,+10:00,+10 -2007-03-24T16:00:00,+11:00,+11 -2007-10-27T16:00:00,+10:00,+10 -2008-03-29T16:00:00,+11:00,+11 -2008-10-25T16:00:00,+10:00,+10 -2009-03-28T16:00:00,+11:00,+11 -2009-10-24T16:00:00,+10:00,+10 -2010-03-27T16:00:00,+11:00,+11 -2010-10-30T16:00:00,+10:00,+10 -2011-03-26T16:00:00,+11:00,+11 -2014-10-25T15:00:00,+10:00,+10 -''' diff --git a/desk/lib/pytz/asia-yakutsk.hoon b/desk/lib/pytz/asia-yakutsk.hoon deleted file mode 100644 index 2f68bb5..0000000 --- a/desk/lib/pytz/asia-yakutsk.hoon +++ /dev/null @@ -1,70 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:39,LMT -1919-12-14T15:21:02,+08:00,+08 -1930-06-20T16:00:00,+09:00,+09 -1981-03-31T15:00:00,+10:00,+10 -1981-09-30T14:00:00,+09:00,+09 -1982-03-31T15:00:00,+10:00,+10 -1982-09-30T14:00:00,+09:00,+09 -1983-03-31T15:00:00,+10:00,+10 -1983-09-30T14:00:00,+09:00,+09 -1984-03-31T15:00:00,+10:00,+10 -1984-09-29T17:00:00,+09:00,+09 -1985-03-30T17:00:00,+10:00,+10 -1985-09-28T17:00:00,+09:00,+09 -1986-03-29T17:00:00,+10:00,+10 -1986-09-27T17:00:00,+09:00,+09 -1987-03-28T17:00:00,+10:00,+10 -1987-09-26T17:00:00,+09:00,+09 -1988-03-26T17:00:00,+10:00,+10 -1988-09-24T17:00:00,+09:00,+09 -1989-03-25T17:00:00,+10:00,+10 -1989-09-23T17:00:00,+09:00,+09 -1990-03-24T17:00:00,+10:00,+10 -1990-09-29T17:00:00,+09:00,+09 -1991-03-30T17:00:00,+09:00,+09 -1991-09-28T18:00:00,+08:00,+08 -1992-01-18T18:00:00,+09:00,+09 -1992-03-28T17:00:00,+10:00,+10 -1992-09-26T17:00:00,+09:00,+09 -1993-03-27T17:00:00,+10:00,+10 -1993-09-25T17:00:00,+09:00,+09 -1994-03-26T17:00:00,+10:00,+10 -1994-09-24T17:00:00,+09:00,+09 -1995-03-25T17:00:00,+10:00,+10 -1995-09-23T17:00:00,+09:00,+09 -1996-03-30T17:00:00,+10:00,+10 -1996-10-26T17:00:00,+09:00,+09 -1997-03-29T17:00:00,+10:00,+10 -1997-10-25T17:00:00,+09:00,+09 -1998-03-28T17:00:00,+10:00,+10 -1998-10-24T17:00:00,+09:00,+09 -1999-03-27T17:00:00,+10:00,+10 -1999-10-30T17:00:00,+09:00,+09 -2000-03-25T17:00:00,+10:00,+10 -2000-10-28T17:00:00,+09:00,+09 -2001-03-24T17:00:00,+10:00,+10 -2001-10-27T17:00:00,+09:00,+09 -2002-03-30T17:00:00,+10:00,+10 -2002-10-26T17:00:00,+09:00,+09 -2003-03-29T17:00:00,+10:00,+10 -2003-10-25T17:00:00,+09:00,+09 -2004-03-27T17:00:00,+10:00,+10 -2004-10-30T17:00:00,+09:00,+09 -2005-03-26T17:00:00,+10:00,+10 -2005-10-29T17:00:00,+09:00,+09 -2006-03-25T17:00:00,+10:00,+10 -2006-10-28T17:00:00,+09:00,+09 -2007-03-24T17:00:00,+10:00,+10 -2007-10-27T17:00:00,+09:00,+09 -2008-03-29T17:00:00,+10:00,+10 -2008-10-25T17:00:00,+09:00,+09 -2009-03-28T17:00:00,+10:00,+10 -2009-10-24T17:00:00,+09:00,+09 -2010-03-27T17:00:00,+10:00,+10 -2010-10-30T17:00:00,+09:00,+09 -2011-03-26T17:00:00,+10:00,+10 -2014-10-25T16:00:00,+09:00,+09 -''' diff --git a/desk/lib/pytz/asia-yangon.hoon b/desk/lib/pytz/asia-yangon.hoon deleted file mode 100644 index 5533823..0000000 --- a/desk/lib/pytz/asia-yangon.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:25,LMT -1901-12-13T20:45:52,+06:25,RMT -1919-12-31T17:35:13,+06:30,+0630 -1942-04-30T17:30:00,+09:00,+09 -1945-05-02T15:00:00,+06:30,+0630 -''' diff --git a/desk/lib/pytz/asia-yekaterinburg.hoon b/desk/lib/pytz/asia-yekaterinburg.hoon deleted file mode 100644 index 574105e..0000000 --- a/desk/lib/pytz/asia-yekaterinburg.hoon +++ /dev/null @@ -1,71 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:03,LMT -1916-07-02T19:57:27,+03:45,PMT -1919-07-15T00:14:55,+04:00,+04 -1930-06-20T20:00:00,+05:00,+05 -1981-03-31T19:00:00,+06:00,+06 -1981-09-30T18:00:00,+05:00,+05 -1982-03-31T19:00:00,+06:00,+06 -1982-09-30T18:00:00,+05:00,+05 -1983-03-31T19:00:00,+06:00,+06 -1983-09-30T18:00:00,+05:00,+05 -1984-03-31T19:00:00,+06:00,+06 -1984-09-29T21:00:00,+05:00,+05 -1985-03-30T21:00:00,+06:00,+06 -1985-09-28T21:00:00,+05:00,+05 -1986-03-29T21:00:00,+06:00,+06 -1986-09-27T21:00:00,+05:00,+05 -1987-03-28T21:00:00,+06:00,+06 -1987-09-26T21:00:00,+05:00,+05 -1988-03-26T21:00:00,+06:00,+06 -1988-09-24T21:00:00,+05:00,+05 -1989-03-25T21:00:00,+06:00,+06 -1989-09-23T21:00:00,+05:00,+05 -1990-03-24T21:00:00,+06:00,+06 -1990-09-29T21:00:00,+05:00,+05 -1991-03-30T21:00:00,+05:00,+05 -1991-09-28T22:00:00,+04:00,+04 -1992-01-18T22:00:00,+05:00,+05 -1992-03-28T21:00:00,+06:00,+06 -1992-09-26T21:00:00,+05:00,+05 -1993-03-27T21:00:00,+06:00,+06 -1993-09-25T21:00:00,+05:00,+05 -1994-03-26T21:00:00,+06:00,+06 -1994-09-24T21:00:00,+05:00,+05 -1995-03-25T21:00:00,+06:00,+06 -1995-09-23T21:00:00,+05:00,+05 -1996-03-30T21:00:00,+06:00,+06 -1996-10-26T21:00:00,+05:00,+05 -1997-03-29T21:00:00,+06:00,+06 -1997-10-25T21:00:00,+05:00,+05 -1998-03-28T21:00:00,+06:00,+06 -1998-10-24T21:00:00,+05:00,+05 -1999-03-27T21:00:00,+06:00,+06 -1999-10-30T21:00:00,+05:00,+05 -2000-03-25T21:00:00,+06:00,+06 -2000-10-28T21:00:00,+05:00,+05 -2001-03-24T21:00:00,+06:00,+06 -2001-10-27T21:00:00,+05:00,+05 -2002-03-30T21:00:00,+06:00,+06 -2002-10-26T21:00:00,+05:00,+05 -2003-03-29T21:00:00,+06:00,+06 -2003-10-25T21:00:00,+05:00,+05 -2004-03-27T21:00:00,+06:00,+06 -2004-10-30T21:00:00,+05:00,+05 -2005-03-26T21:00:00,+06:00,+06 -2005-10-29T21:00:00,+05:00,+05 -2006-03-25T21:00:00,+06:00,+06 -2006-10-28T21:00:00,+05:00,+05 -2007-03-24T21:00:00,+06:00,+06 -2007-10-27T21:00:00,+05:00,+05 -2008-03-29T21:00:00,+06:00,+06 -2008-10-25T21:00:00,+05:00,+05 -2009-03-28T21:00:00,+06:00,+06 -2009-10-24T21:00:00,+05:00,+05 -2010-03-27T21:00:00,+06:00,+06 -2010-10-30T21:00:00,+05:00,+05 -2011-03-26T21:00:00,+06:00,+06 -2014-10-25T20:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/asia-yerevan.hoon b/desk/lib/pytz/asia-yerevan.hoon deleted file mode 100644 index 1d78fc4..0000000 --- a/desk/lib/pytz/asia-yerevan.hoon +++ /dev/null @@ -1,67 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:58,LMT -1924-05-01T21:02:00,+03:00,+03 -1957-02-28T21:00:00,+04:00,+04 -1981-03-31T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+04:00,+04 -1982-03-31T20:00:00,+05:00,+05 -1982-09-30T19:00:00,+04:00,+04 -1983-03-31T20:00:00,+05:00,+05 -1983-09-30T19:00:00,+04:00,+04 -1984-03-31T20:00:00,+05:00,+05 -1984-09-29T22:00:00,+04:00,+04 -1985-03-30T22:00:00,+05:00,+05 -1985-09-28T22:00:00,+04:00,+04 -1986-03-29T22:00:00,+05:00,+05 -1986-09-27T22:00:00,+04:00,+04 -1987-03-28T22:00:00,+05:00,+05 -1987-09-26T22:00:00,+04:00,+04 -1988-03-26T22:00:00,+05:00,+05 -1988-09-24T22:00:00,+04:00,+04 -1989-03-25T22:00:00,+05:00,+05 -1989-09-23T22:00:00,+04:00,+04 -1990-03-24T22:00:00,+05:00,+05 -1990-09-29T22:00:00,+04:00,+04 -1991-03-30T22:00:00,+04:00,+04 -1991-09-28T23:00:00,+03:00,+03 -1992-03-28T23:00:00,+04:00,+04 -1992-09-26T23:00:00,+03:00,+03 -1993-03-27T23:00:00,+04:00,+04 -1993-09-25T23:00:00,+03:00,+03 -1994-03-26T23:00:00,+04:00,+04 -1994-09-24T23:00:00,+03:00,+03 -1995-03-25T23:00:00,+04:00,+04 -1995-09-23T23:00:00,+04:00,+04 -1997-03-29T22:00:00,+05:00,+05 -1997-10-25T22:00:00,+04:00,+04 -1998-03-28T22:00:00,+05:00,+05 -1998-10-24T22:00:00,+04:00,+04 -1999-03-27T22:00:00,+05:00,+05 -1999-10-30T22:00:00,+04:00,+04 -2000-03-25T22:00:00,+05:00,+05 -2000-10-28T22:00:00,+04:00,+04 -2001-03-24T22:00:00,+05:00,+05 -2001-10-27T22:00:00,+04:00,+04 -2002-03-30T22:00:00,+05:00,+05 -2002-10-26T22:00:00,+04:00,+04 -2003-03-29T22:00:00,+05:00,+05 -2003-10-25T22:00:00,+04:00,+04 -2004-03-27T22:00:00,+05:00,+05 -2004-10-30T22:00:00,+04:00,+04 -2005-03-26T22:00:00,+05:00,+05 -2005-10-29T22:00:00,+04:00,+04 -2006-03-25T22:00:00,+05:00,+05 -2006-10-28T22:00:00,+04:00,+04 -2007-03-24T22:00:00,+05:00,+05 -2007-10-27T22:00:00,+04:00,+04 -2008-03-29T22:00:00,+05:00,+05 -2008-10-25T22:00:00,+04:00,+04 -2009-03-28T22:00:00,+05:00,+05 -2009-10-24T22:00:00,+04:00,+04 -2010-03-27T22:00:00,+05:00,+05 -2010-10-30T22:00:00,+04:00,+04 -2011-03-26T22:00:00,+05:00,+05 -2011-10-29T22:00:00,+04:00,+04 -''' diff --git a/desk/lib/pytz/atlantic-azores.hoon b/desk/lib/pytz/atlantic-azores.hoon deleted file mode 100644 index 68e4edd..0000000 --- a/desk/lib/pytz/atlantic-azores.hoon +++ /dev/null @@ -1,220 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-02:05,HMT -1912-01-01T02:00:00,-02:00,-02 -1916-06-18T01:00:00,-01:00,-01 -1916-11-01T02:00:00,-02:00,-02 -1917-03-01T02:00:00,-01:00,-01 -1917-10-15T01:00:00,-02:00,-02 -1918-03-01T02:00:00,-01:00,-01 -1918-10-15T01:00:00,-02:00,-02 -1919-03-01T02:00:00,-01:00,-01 -1919-10-15T01:00:00,-02:00,-02 -1920-03-01T02:00:00,-01:00,-01 -1920-10-15T01:00:00,-02:00,-02 -1921-03-01T02:00:00,-01:00,-01 -1921-10-15T01:00:00,-02:00,-02 -1924-04-17T01:00:00,-01:00,-01 -1924-10-05T01:00:00,-02:00,-02 -1926-04-18T01:00:00,-01:00,-01 -1926-10-03T01:00:00,-02:00,-02 -1927-04-10T01:00:00,-01:00,-01 -1927-10-02T01:00:00,-02:00,-02 -1928-04-15T01:00:00,-01:00,-01 -1928-10-07T01:00:00,-02:00,-02 -1929-04-21T01:00:00,-01:00,-01 -1929-10-06T01:00:00,-02:00,-02 -1931-04-19T01:00:00,-01:00,-01 -1931-10-04T01:00:00,-02:00,-02 -1932-04-03T01:00:00,-01:00,-01 -1932-10-02T01:00:00,-02:00,-02 -1934-04-08T01:00:00,-01:00,-01 -1934-10-07T01:00:00,-02:00,-02 -1935-03-31T01:00:00,-01:00,-01 -1935-10-06T01:00:00,-02:00,-02 -1936-04-19T01:00:00,-01:00,-01 -1936-10-04T01:00:00,-02:00,-02 -1937-04-04T01:00:00,-01:00,-01 -1937-10-03T01:00:00,-02:00,-02 -1938-03-27T01:00:00,-01:00,-01 -1938-10-02T01:00:00,-02:00,-02 -1939-04-16T01:00:00,-01:00,-01 -1939-11-19T01:00:00,-02:00,-02 -1940-02-25T01:00:00,-01:00,-01 -1940-10-08T01:00:00,-02:00,-02 -1941-04-06T01:00:00,-01:00,-01 -1941-10-06T01:00:00,-02:00,-02 -1942-03-15T01:00:00,-01:00,-01 -1942-04-26T00:00:00,+00:00,+00 -1942-08-16T00:00:00,-01:00,-01 -1942-10-25T01:00:00,-02:00,-02 -1943-03-14T01:00:00,-01:00,-01 -1943-04-18T00:00:00,+00:00,+00 -1943-08-29T00:00:00,-01:00,-01 -1943-10-31T01:00:00,-02:00,-02 -1944-03-12T01:00:00,-01:00,-01 -1944-04-23T00:00:00,+00:00,+00 -1944-08-27T00:00:00,-01:00,-01 -1944-10-29T01:00:00,-02:00,-02 -1945-03-11T01:00:00,-01:00,-01 -1945-04-22T00:00:00,+00:00,+00 -1945-08-26T00:00:00,-01:00,-01 -1945-10-28T01:00:00,-02:00,-02 -1946-04-07T01:00:00,-01:00,-01 -1946-10-06T01:00:00,-02:00,-02 -1947-04-06T04:00:00,-01:00,-01 -1947-10-05T04:00:00,-02:00,-02 -1948-04-04T04:00:00,-01:00,-01 -1948-10-03T04:00:00,-02:00,-02 -1949-04-03T04:00:00,-01:00,-01 -1949-10-02T04:00:00,-02:00,-02 -1950-04-02T04:00:00,-01:00,-01 -1950-10-01T04:00:00,-02:00,-02 -1951-04-01T04:00:00,-01:00,-01 -1951-10-07T04:00:00,-02:00,-02 -1952-04-06T04:00:00,-01:00,-01 -1952-10-05T04:00:00,-02:00,-02 -1953-04-05T04:00:00,-01:00,-01 -1953-10-04T04:00:00,-02:00,-02 -1954-04-04T04:00:00,-01:00,-01 -1954-10-03T04:00:00,-02:00,-02 -1955-04-03T04:00:00,-01:00,-01 -1955-10-02T04:00:00,-02:00,-02 -1956-04-01T04:00:00,-01:00,-01 -1956-10-07T04:00:00,-02:00,-02 -1957-04-07T04:00:00,-01:00,-01 -1957-10-06T04:00:00,-02:00,-02 -1958-04-06T04:00:00,-01:00,-01 -1958-10-05T04:00:00,-02:00,-02 -1959-04-05T04:00:00,-01:00,-01 -1959-10-04T04:00:00,-02:00,-02 -1960-04-03T04:00:00,-01:00,-01 -1960-10-02T04:00:00,-02:00,-02 -1961-04-02T04:00:00,-01:00,-01 -1961-10-01T04:00:00,-02:00,-02 -1962-04-01T04:00:00,-01:00,-01 -1962-10-07T04:00:00,-02:00,-02 -1963-04-07T04:00:00,-01:00,-01 -1963-10-06T04:00:00,-02:00,-02 -1964-04-05T04:00:00,-01:00,-01 -1964-10-04T04:00:00,-02:00,-02 -1965-04-04T04:00:00,-01:00,-01 -1965-10-03T04:00:00,-02:00,-02 -1966-04-03T04:00:00,-01:00,-01 -1966-10-02T04:00:00,-01:00,-01 -1982-03-28T01:00:00,+00:00,+00 -1982-09-26T01:00:00,-01:00,-01 -1983-03-27T01:00:00,+00:00,+00 -1983-09-25T01:00:00,-01:00,-01 -1984-03-25T01:00:00,+00:00,+00 -1984-09-30T01:00:00,-01:00,-01 -1985-03-31T01:00:00,+00:00,+00 -1985-09-29T01:00:00,-01:00,-01 -1986-03-30T01:00:00,+00:00,+00 -1986-09-28T01:00:00,-01:00,-01 -1987-03-29T01:00:00,+00:00,+00 -1987-09-27T01:00:00,-01:00,-01 -1988-03-27T01:00:00,+00:00,+00 -1988-09-25T01:00:00,-01:00,-01 -1989-03-26T01:00:00,+00:00,+00 -1989-09-24T01:00:00,-01:00,-01 -1990-03-25T01:00:00,+00:00,+00 -1990-09-30T01:00:00,-01:00,-01 -1991-03-31T01:00:00,+00:00,+00 -1991-09-29T01:00:00,-01:00,-01 -1992-03-29T01:00:00,+00:00,+00 -1992-09-27T01:00:00,-01:00,-01 -1992-12-27T02:00:00,+00:00,WET -1993-03-28T01:00:00,+01:00,WEST -1993-06-17T01:00:00,+00:00,+00 -1993-09-26T01:00:00,-01:00,-01 -1994-03-27T01:00:00,+00:00,+00 -1994-09-25T01:00:00,-01:00,-01 -1995-03-26T01:00:00,+00:00,+00 -1995-09-24T01:00:00,-01:00,-01 -1996-03-31T01:00:00,+00:00,+00 -1996-10-27T01:00:00,-01:00,-01 -1997-03-30T01:00:00,+00:00,+00 -1997-10-26T01:00:00,-01:00,-01 -1998-03-29T01:00:00,+00:00,+00 -1998-10-25T01:00:00,-01:00,-01 -1999-03-28T01:00:00,+00:00,+00 -1999-10-31T01:00:00,-01:00,-01 -2000-03-26T01:00:00,+00:00,+00 -2000-10-29T01:00:00,-01:00,-01 -2001-03-25T01:00:00,+00:00,+00 -2001-10-28T01:00:00,-01:00,-01 -2002-03-31T01:00:00,+00:00,+00 -2002-10-27T01:00:00,-01:00,-01 -2003-03-30T01:00:00,+00:00,+00 -2003-10-26T01:00:00,-01:00,-01 -2004-03-28T01:00:00,+00:00,+00 -2004-10-31T01:00:00,-01:00,-01 -2005-03-27T01:00:00,+00:00,+00 -2005-10-30T01:00:00,-01:00,-01 -2006-03-26T01:00:00,+00:00,+00 -2006-10-29T01:00:00,-01:00,-01 -2007-03-25T01:00:00,+00:00,+00 -2007-10-28T01:00:00,-01:00,-01 -2008-03-30T01:00:00,+00:00,+00 -2008-10-26T01:00:00,-01:00,-01 -2009-03-29T01:00:00,+00:00,+00 -2009-10-25T01:00:00,-01:00,-01 -2010-03-28T01:00:00,+00:00,+00 -2010-10-31T01:00:00,-01:00,-01 -2011-03-27T01:00:00,+00:00,+00 -2011-10-30T01:00:00,-01:00,-01 -2012-03-25T01:00:00,+00:00,+00 -2012-10-28T01:00:00,-01:00,-01 -2013-03-31T01:00:00,+00:00,+00 -2013-10-27T01:00:00,-01:00,-01 -2014-03-30T01:00:00,+00:00,+00 -2014-10-26T01:00:00,-01:00,-01 -2015-03-29T01:00:00,+00:00,+00 -2015-10-25T01:00:00,-01:00,-01 -2016-03-27T01:00:00,+00:00,+00 -2016-10-30T01:00:00,-01:00,-01 -2017-03-26T01:00:00,+00:00,+00 -2017-10-29T01:00:00,-01:00,-01 -2018-03-25T01:00:00,+00:00,+00 -2018-10-28T01:00:00,-01:00,-01 -2019-03-31T01:00:00,+00:00,+00 -2019-10-27T01:00:00,-01:00,-01 -2020-03-29T01:00:00,+00:00,+00 -2020-10-25T01:00:00,-01:00,-01 -2021-03-28T01:00:00,+00:00,+00 -2021-10-31T01:00:00,-01:00,-01 -2022-03-27T01:00:00,+00:00,+00 -2022-10-30T01:00:00,-01:00,-01 -2023-03-26T01:00:00,+00:00,+00 -2023-10-29T01:00:00,-01:00,-01 -2024-03-31T01:00:00,+00:00,+00 -2024-10-27T01:00:00,-01:00,-01 -2025-03-30T01:00:00,+00:00,+00 -2025-10-26T01:00:00,-01:00,-01 -2026-03-29T01:00:00,+00:00,+00 -2026-10-25T01:00:00,-01:00,-01 -2027-03-28T01:00:00,+00:00,+00 -2027-10-31T01:00:00,-01:00,-01 -2028-03-26T01:00:00,+00:00,+00 -2028-10-29T01:00:00,-01:00,-01 -2029-03-25T01:00:00,+00:00,+00 -2029-10-28T01:00:00,-01:00,-01 -2030-03-31T01:00:00,+00:00,+00 -2030-10-27T01:00:00,-01:00,-01 -2031-03-30T01:00:00,+00:00,+00 -2031-10-26T01:00:00,-01:00,-01 -2032-03-28T01:00:00,+00:00,+00 -2032-10-31T01:00:00,-01:00,-01 -2033-03-27T01:00:00,+00:00,+00 -2033-10-30T01:00:00,-01:00,-01 -2034-03-26T01:00:00,+00:00,+00 -2034-10-29T01:00:00,-01:00,-01 -2035-03-25T01:00:00,+00:00,+00 -2035-10-28T01:00:00,-01:00,-01 -2036-03-30T01:00:00,+00:00,+00 -2036-10-26T01:00:00,-01:00,-01 -2037-03-29T01:00:00,+00:00,+00 -2037-10-25T01:00:00,-01:00,-01 -''' diff --git a/desk/lib/pytz/atlantic-bermuda.hoon b/desk/lib/pytz/atlantic-bermuda.hoon deleted file mode 100644 index 5ff9bc1..0000000 --- a/desk/lib/pytz/atlantic-bermuda.hoon +++ /dev/null @@ -1,160 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-05:41,BMT -1917-04-06T04:19:18,-04:41,BST -1917-10-01T03:19:18,-05:41,BMT -1918-04-14T04:19:18,-04:41,BST -1918-09-16T03:19:18,-05:41,BMT -1930-01-01T06:19:18,-04:00,AST -1942-01-11T06:00:00,-03:00,ADT -1942-10-18T05:00:00,-04:00,AST -1943-03-21T06:00:00,-03:00,ADT -1943-10-31T05:00:00,-04:00,AST -1944-03-12T06:00:00,-03:00,ADT -1944-11-05T05:00:00,-04:00,AST -1945-03-11T06:00:00,-03:00,ADT -1945-11-04T05:00:00,-04:00,AST -1947-05-18T06:00:00,-03:00,ADT -1947-09-14T05:00:00,-04:00,AST -1948-05-23T06:00:00,-03:00,ADT -1948-09-05T05:00:00,-04:00,AST -1949-05-22T06:00:00,-03:00,ADT -1949-09-04T05:00:00,-04:00,AST -1950-05-28T06:00:00,-03:00,ADT -1950-09-03T05:00:00,-04:00,AST -1951-05-27T06:00:00,-03:00,ADT -1951-09-02T05:00:00,-04:00,AST -1952-05-25T06:00:00,-03:00,ADT -1952-09-07T05:00:00,-04:00,AST -1956-05-27T06:00:00,-03:00,ADT -1956-10-28T05:00:00,-04:00,AST -1974-04-28T06:00:00,-03:00,ADT -1974-10-27T05:00:00,-04:00,AST -1975-04-27T06:00:00,-03:00,ADT -1975-10-26T05:00:00,-04:00,AST -1976-04-25T06:00:00,-03:00,ADT -1976-10-31T05:00:00,-04:00,AST -1977-04-24T06:00:00,-03:00,ADT -1977-10-30T05:00:00,-04:00,AST -1978-04-30T06:00:00,-03:00,ADT -1978-10-29T05:00:00,-04:00,AST -1979-04-29T06:00:00,-03:00,ADT -1979-10-28T05:00:00,-04:00,AST -1980-04-27T06:00:00,-03:00,ADT -1980-10-26T05:00:00,-04:00,AST -1981-04-26T06:00:00,-03:00,ADT -1981-10-25T05:00:00,-04:00,AST -1982-04-25T06:00:00,-03:00,ADT -1982-10-31T05:00:00,-04:00,AST -1983-04-24T06:00:00,-03:00,ADT -1983-10-30T05:00:00,-04:00,AST -1984-04-29T06:00:00,-03:00,ADT -1984-10-28T05:00:00,-04:00,AST -1985-04-28T06:00:00,-03:00,ADT -1985-10-27T05:00:00,-04:00,AST -1986-04-27T06:00:00,-03:00,ADT -1986-10-26T05:00:00,-04:00,AST -1987-04-05T06:00:00,-03:00,ADT -1987-10-25T05:00:00,-04:00,AST -1988-04-03T06:00:00,-03:00,ADT -1988-10-30T05:00:00,-04:00,AST -1989-04-02T06:00:00,-03:00,ADT -1989-10-29T05:00:00,-04:00,AST -1990-04-01T06:00:00,-03:00,ADT -1990-10-28T05:00:00,-04:00,AST -1991-04-07T06:00:00,-03:00,ADT -1991-10-27T05:00:00,-04:00,AST -1992-04-05T06:00:00,-03:00,ADT -1992-10-25T05:00:00,-04:00,AST -1993-04-04T06:00:00,-03:00,ADT -1993-10-31T05:00:00,-04:00,AST -1994-04-03T06:00:00,-03:00,ADT -1994-10-30T05:00:00,-04:00,AST -1995-04-02T06:00:00,-03:00,ADT -1995-10-29T05:00:00,-04:00,AST -1996-04-07T06:00:00,-03:00,ADT -1996-10-27T05:00:00,-04:00,AST -1997-04-06T06:00:00,-03:00,ADT -1997-10-26T05:00:00,-04:00,AST -1998-04-05T06:00:00,-03:00,ADT -1998-10-25T05:00:00,-04:00,AST -1999-04-04T06:00:00,-03:00,ADT -1999-10-31T05:00:00,-04:00,AST -2000-04-02T06:00:00,-03:00,ADT -2000-10-29T05:00:00,-04:00,AST -2001-04-01T06:00:00,-03:00,ADT -2001-10-28T05:00:00,-04:00,AST -2002-04-07T06:00:00,-03:00,ADT -2002-10-27T05:00:00,-04:00,AST -2003-04-06T06:00:00,-03:00,ADT -2003-10-26T05:00:00,-04:00,AST -2004-04-04T06:00:00,-03:00,ADT -2004-10-31T05:00:00,-04:00,AST -2005-04-03T06:00:00,-03:00,ADT -2005-10-30T05:00:00,-04:00,AST -2006-04-02T06:00:00,-03:00,ADT -2006-10-29T05:00:00,-04:00,AST -2007-03-11T06:00:00,-03:00,ADT -2007-11-04T05:00:00,-04:00,AST -2008-03-09T06:00:00,-03:00,ADT -2008-11-02T05:00:00,-04:00,AST -2009-03-08T06:00:00,-03:00,ADT -2009-11-01T05:00:00,-04:00,AST -2010-03-14T06:00:00,-03:00,ADT -2010-11-07T05:00:00,-04:00,AST -2011-03-13T06:00:00,-03:00,ADT -2011-11-06T05:00:00,-04:00,AST -2012-03-11T06:00:00,-03:00,ADT -2012-11-04T05:00:00,-04:00,AST -2013-03-10T06:00:00,-03:00,ADT -2013-11-03T05:00:00,-04:00,AST -2014-03-09T06:00:00,-03:00,ADT -2014-11-02T05:00:00,-04:00,AST -2015-03-08T06:00:00,-03:00,ADT -2015-11-01T05:00:00,-04:00,AST -2016-03-13T06:00:00,-03:00,ADT -2016-11-06T05:00:00,-04:00,AST -2017-03-12T06:00:00,-03:00,ADT -2017-11-05T05:00:00,-04:00,AST -2018-03-11T06:00:00,-03:00,ADT -2018-11-04T05:00:00,-04:00,AST -2019-03-10T06:00:00,-03:00,ADT -2019-11-03T05:00:00,-04:00,AST -2020-03-08T06:00:00,-03:00,ADT -2020-11-01T05:00:00,-04:00,AST -2021-03-14T06:00:00,-03:00,ADT -2021-11-07T05:00:00,-04:00,AST -2022-03-13T06:00:00,-03:00,ADT -2022-11-06T05:00:00,-04:00,AST -2023-03-12T06:00:00,-03:00,ADT -2023-11-05T05:00:00,-04:00,AST -2024-03-10T06:00:00,-03:00,ADT -2024-11-03T05:00:00,-04:00,AST -2025-03-09T06:00:00,-03:00,ADT -2025-11-02T05:00:00,-04:00,AST -2026-03-08T06:00:00,-03:00,ADT -2026-11-01T05:00:00,-04:00,AST -2027-03-14T06:00:00,-03:00,ADT -2027-11-07T05:00:00,-04:00,AST -2028-03-12T06:00:00,-03:00,ADT -2028-11-05T05:00:00,-04:00,AST -2029-03-11T06:00:00,-03:00,ADT -2029-11-04T05:00:00,-04:00,AST -2030-03-10T06:00:00,-03:00,ADT -2030-11-03T05:00:00,-04:00,AST -2031-03-09T06:00:00,-03:00,ADT -2031-11-02T05:00:00,-04:00,AST -2032-03-14T06:00:00,-03:00,ADT -2032-11-07T05:00:00,-04:00,AST -2033-03-13T06:00:00,-03:00,ADT -2033-11-06T05:00:00,-04:00,AST -2034-03-12T06:00:00,-03:00,ADT -2034-11-05T05:00:00,-04:00,AST -2035-03-11T06:00:00,-03:00,ADT -2035-11-04T05:00:00,-04:00,AST -2036-03-09T06:00:00,-03:00,ADT -2036-11-02T05:00:00,-04:00,AST -2037-03-08T06:00:00,-03:00,ADT -2037-11-01T05:00:00,-04:00,AST -''' diff --git a/desk/lib/pytz/atlantic-canary.hoon b/desk/lib/pytz/atlantic-canary.hoon deleted file mode 100644 index 6a46709..0000000 --- a/desk/lib/pytz/atlantic-canary.hoon +++ /dev/null @@ -1,122 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1922-03-01T01:01:36,-01:00,-01 -1946-09-30T02:00:00,+00:00,WET -1980-04-06T00:00:00,+01:00,WEST -1980-09-28T01:00:00,+00:00,WET -1981-03-29T01:00:00,+01:00,WEST -1981-09-27T01:00:00,+00:00,WET -1982-03-28T01:00:00,+01:00,WEST -1982-09-26T01:00:00,+00:00,WET -1983-03-27T01:00:00,+01:00,WEST -1983-09-25T01:00:00,+00:00,WET -1984-03-25T01:00:00,+01:00,WEST -1984-09-30T01:00:00,+00:00,WET -1985-03-31T01:00:00,+01:00,WEST -1985-09-29T01:00:00,+00:00,WET -1986-03-30T01:00:00,+01:00,WEST -1986-09-28T01:00:00,+00:00,WET -1987-03-29T01:00:00,+01:00,WEST -1987-09-27T01:00:00,+00:00,WET -1988-03-27T01:00:00,+01:00,WEST -1988-09-25T01:00:00,+00:00,WET -1989-03-26T01:00:00,+01:00,WEST -1989-09-24T01:00:00,+00:00,WET -1990-03-25T01:00:00,+01:00,WEST -1990-09-30T01:00:00,+00:00,WET -1991-03-31T01:00:00,+01:00,WEST -1991-09-29T01:00:00,+00:00,WET -1992-03-29T01:00:00,+01:00,WEST -1992-09-27T01:00:00,+00:00,WET -1993-03-28T01:00:00,+01:00,WEST -1993-09-26T01:00:00,+00:00,WET -1994-03-27T01:00:00,+01:00,WEST -1994-09-25T01:00:00,+00:00,WET -1995-03-26T01:00:00,+01:00,WEST -1995-09-24T01:00:00,+00:00,WET -1996-03-31T01:00:00,+01:00,WEST -1996-10-27T01:00:00,+00:00,WET -1997-03-30T01:00:00,+01:00,WEST -1997-10-26T01:00:00,+00:00,WET -1998-03-29T01:00:00,+01:00,WEST -1998-10-25T01:00:00,+00:00,WET -1999-03-28T01:00:00,+01:00,WEST -1999-10-31T01:00:00,+00:00,WET -2000-03-26T01:00:00,+01:00,WEST -2000-10-29T01:00:00,+00:00,WET -2001-03-25T01:00:00,+01:00,WEST -2001-10-28T01:00:00,+00:00,WET -2002-03-31T01:00:00,+01:00,WEST -2002-10-27T01:00:00,+00:00,WET -2003-03-30T01:00:00,+01:00,WEST -2003-10-26T01:00:00,+00:00,WET -2004-03-28T01:00:00,+01:00,WEST -2004-10-31T01:00:00,+00:00,WET -2005-03-27T01:00:00,+01:00,WEST -2005-10-30T01:00:00,+00:00,WET -2006-03-26T01:00:00,+01:00,WEST -2006-10-29T01:00:00,+00:00,WET -2007-03-25T01:00:00,+01:00,WEST -2007-10-28T01:00:00,+00:00,WET -2008-03-30T01:00:00,+01:00,WEST -2008-10-26T01:00:00,+00:00,WET -2009-03-29T01:00:00,+01:00,WEST -2009-10-25T01:00:00,+00:00,WET -2010-03-28T01:00:00,+01:00,WEST -2010-10-31T01:00:00,+00:00,WET -2011-03-27T01:00:00,+01:00,WEST -2011-10-30T01:00:00,+00:00,WET -2012-03-25T01:00:00,+01:00,WEST -2012-10-28T01:00:00,+00:00,WET -2013-03-31T01:00:00,+01:00,WEST -2013-10-27T01:00:00,+00:00,WET -2014-03-30T01:00:00,+01:00,WEST -2014-10-26T01:00:00,+00:00,WET -2015-03-29T01:00:00,+01:00,WEST -2015-10-25T01:00:00,+00:00,WET -2016-03-27T01:00:00,+01:00,WEST -2016-10-30T01:00:00,+00:00,WET -2017-03-26T01:00:00,+01:00,WEST -2017-10-29T01:00:00,+00:00,WET -2018-03-25T01:00:00,+01:00,WEST -2018-10-28T01:00:00,+00:00,WET -2019-03-31T01:00:00,+01:00,WEST -2019-10-27T01:00:00,+00:00,WET -2020-03-29T01:00:00,+01:00,WEST -2020-10-25T01:00:00,+00:00,WET -2021-03-28T01:00:00,+01:00,WEST -2021-10-31T01:00:00,+00:00,WET -2022-03-27T01:00:00,+01:00,WEST -2022-10-30T01:00:00,+00:00,WET -2023-03-26T01:00:00,+01:00,WEST -2023-10-29T01:00:00,+00:00,WET -2024-03-31T01:00:00,+01:00,WEST -2024-10-27T01:00:00,+00:00,WET -2025-03-30T01:00:00,+01:00,WEST -2025-10-26T01:00:00,+00:00,WET -2026-03-29T01:00:00,+01:00,WEST -2026-10-25T01:00:00,+00:00,WET -2027-03-28T01:00:00,+01:00,WEST -2027-10-31T01:00:00,+00:00,WET -2028-03-26T01:00:00,+01:00,WEST -2028-10-29T01:00:00,+00:00,WET -2029-03-25T01:00:00,+01:00,WEST -2029-10-28T01:00:00,+00:00,WET -2030-03-31T01:00:00,+01:00,WEST -2030-10-27T01:00:00,+00:00,WET -2031-03-30T01:00:00,+01:00,WEST -2031-10-26T01:00:00,+00:00,WET -2032-03-28T01:00:00,+01:00,WEST -2032-10-31T01:00:00,+00:00,WET -2033-03-27T01:00:00,+01:00,WEST -2033-10-30T01:00:00,+00:00,WET -2034-03-26T01:00:00,+01:00,WEST -2034-10-29T01:00:00,+00:00,WET -2035-03-25T01:00:00,+01:00,WEST -2035-10-28T01:00:00,+00:00,WET -2036-03-30T01:00:00,+01:00,WEST -2036-10-26T01:00:00,+00:00,WET -2037-03-29T01:00:00,+01:00,WEST -2037-10-25T01:00:00,+00:00,WET -''' diff --git a/desk/lib/pytz/atlantic-cape-verde.hoon b/desk/lib/pytz/atlantic-cape-verde.hoon deleted file mode 100644 index bdc1d3e..0000000 --- a/desk/lib/pytz/atlantic-cape-verde.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T02:00:00,-02:00,-02 -1942-09-01T02:00:00,-01:00,-01 -1945-10-15T01:00:00,-02:00,-02 -1975-11-25T04:00:00,-01:00,-01 -''' diff --git a/desk/lib/pytz/atlantic-faroe.hoon b/desk/lib/pytz/atlantic-faroe.hoon deleted file mode 100644 index 24b7185..0000000 --- a/desk/lib/pytz/atlantic-faroe.hoon +++ /dev/null @@ -1,119 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1908-01-11T00:27:04,+00:00,WET -1981-03-29T01:00:00,+01:00,WEST -1981-09-27T01:00:00,+00:00,WET -1982-03-28T01:00:00,+01:00,WEST -1982-09-26T01:00:00,+00:00,WET -1983-03-27T01:00:00,+01:00,WEST -1983-09-25T01:00:00,+00:00,WET -1984-03-25T01:00:00,+01:00,WEST -1984-09-30T01:00:00,+00:00,WET -1985-03-31T01:00:00,+01:00,WEST -1985-09-29T01:00:00,+00:00,WET -1986-03-30T01:00:00,+01:00,WEST -1986-09-28T01:00:00,+00:00,WET -1987-03-29T01:00:00,+01:00,WEST -1987-09-27T01:00:00,+00:00,WET -1988-03-27T01:00:00,+01:00,WEST -1988-09-25T01:00:00,+00:00,WET -1989-03-26T01:00:00,+01:00,WEST -1989-09-24T01:00:00,+00:00,WET -1990-03-25T01:00:00,+01:00,WEST -1990-09-30T01:00:00,+00:00,WET -1991-03-31T01:00:00,+01:00,WEST -1991-09-29T01:00:00,+00:00,WET -1992-03-29T01:00:00,+01:00,WEST -1992-09-27T01:00:00,+00:00,WET -1993-03-28T01:00:00,+01:00,WEST -1993-09-26T01:00:00,+00:00,WET -1994-03-27T01:00:00,+01:00,WEST -1994-09-25T01:00:00,+00:00,WET -1995-03-26T01:00:00,+01:00,WEST -1995-09-24T01:00:00,+00:00,WET -1996-03-31T01:00:00,+01:00,WEST -1996-10-27T01:00:00,+00:00,WET -1997-03-30T01:00:00,+01:00,WEST -1997-10-26T01:00:00,+00:00,WET -1998-03-29T01:00:00,+01:00,WEST -1998-10-25T01:00:00,+00:00,WET -1999-03-28T01:00:00,+01:00,WEST -1999-10-31T01:00:00,+00:00,WET -2000-03-26T01:00:00,+01:00,WEST -2000-10-29T01:00:00,+00:00,WET -2001-03-25T01:00:00,+01:00,WEST -2001-10-28T01:00:00,+00:00,WET -2002-03-31T01:00:00,+01:00,WEST -2002-10-27T01:00:00,+00:00,WET -2003-03-30T01:00:00,+01:00,WEST -2003-10-26T01:00:00,+00:00,WET -2004-03-28T01:00:00,+01:00,WEST -2004-10-31T01:00:00,+00:00,WET -2005-03-27T01:00:00,+01:00,WEST -2005-10-30T01:00:00,+00:00,WET -2006-03-26T01:00:00,+01:00,WEST -2006-10-29T01:00:00,+00:00,WET -2007-03-25T01:00:00,+01:00,WEST -2007-10-28T01:00:00,+00:00,WET -2008-03-30T01:00:00,+01:00,WEST -2008-10-26T01:00:00,+00:00,WET -2009-03-29T01:00:00,+01:00,WEST -2009-10-25T01:00:00,+00:00,WET -2010-03-28T01:00:00,+01:00,WEST -2010-10-31T01:00:00,+00:00,WET -2011-03-27T01:00:00,+01:00,WEST -2011-10-30T01:00:00,+00:00,WET -2012-03-25T01:00:00,+01:00,WEST -2012-10-28T01:00:00,+00:00,WET -2013-03-31T01:00:00,+01:00,WEST -2013-10-27T01:00:00,+00:00,WET -2014-03-30T01:00:00,+01:00,WEST -2014-10-26T01:00:00,+00:00,WET -2015-03-29T01:00:00,+01:00,WEST -2015-10-25T01:00:00,+00:00,WET -2016-03-27T01:00:00,+01:00,WEST -2016-10-30T01:00:00,+00:00,WET -2017-03-26T01:00:00,+01:00,WEST -2017-10-29T01:00:00,+00:00,WET -2018-03-25T01:00:00,+01:00,WEST -2018-10-28T01:00:00,+00:00,WET -2019-03-31T01:00:00,+01:00,WEST -2019-10-27T01:00:00,+00:00,WET -2020-03-29T01:00:00,+01:00,WEST -2020-10-25T01:00:00,+00:00,WET -2021-03-28T01:00:00,+01:00,WEST -2021-10-31T01:00:00,+00:00,WET -2022-03-27T01:00:00,+01:00,WEST -2022-10-30T01:00:00,+00:00,WET -2023-03-26T01:00:00,+01:00,WEST -2023-10-29T01:00:00,+00:00,WET -2024-03-31T01:00:00,+01:00,WEST -2024-10-27T01:00:00,+00:00,WET -2025-03-30T01:00:00,+01:00,WEST -2025-10-26T01:00:00,+00:00,WET -2026-03-29T01:00:00,+01:00,WEST -2026-10-25T01:00:00,+00:00,WET -2027-03-28T01:00:00,+01:00,WEST -2027-10-31T01:00:00,+00:00,WET -2028-03-26T01:00:00,+01:00,WEST -2028-10-29T01:00:00,+00:00,WET -2029-03-25T01:00:00,+01:00,WEST -2029-10-28T01:00:00,+00:00,WET -2030-03-31T01:00:00,+01:00,WEST -2030-10-27T01:00:00,+00:00,WET -2031-03-30T01:00:00,+01:00,WEST -2031-10-26T01:00:00,+00:00,WET -2032-03-28T01:00:00,+01:00,WEST -2032-10-31T01:00:00,+00:00,WET -2033-03-27T01:00:00,+01:00,WEST -2033-10-30T01:00:00,+00:00,WET -2034-03-26T01:00:00,+01:00,WEST -2034-10-29T01:00:00,+00:00,WET -2035-03-25T01:00:00,+01:00,WEST -2035-10-28T01:00:00,+00:00,WET -2036-03-30T01:00:00,+01:00,WEST -2036-10-26T01:00:00,+00:00,WET -2037-03-29T01:00:00,+01:00,WEST -2037-10-25T01:00:00,+00:00,WET -''' diff --git a/desk/lib/pytz/atlantic-jan-mayen.hoon b/desk/lib/pytz/atlantic-jan-mayen.hoon deleted file mode 100644 index 0c152b8..0000000 --- a/desk/lib/pytz/atlantic-jan-mayen.hoon +++ /dev/null @@ -1,146 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:43,LMT -1901-12-13T20:45:52,+01:00,CET -1916-05-22T00:00:00,+02:00,CEST -1916-09-29T22:00:00,+01:00,CET -1940-08-10T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-10-01T01:00:00,+01:00,CET -1959-03-15T01:00:00,+02:00,CEST -1959-09-20T01:00:00,+01:00,CET -1960-03-20T01:00:00,+02:00,CEST -1960-09-18T01:00:00,+01:00,CET -1961-03-19T01:00:00,+02:00,CEST -1961-09-17T01:00:00,+01:00,CET -1962-03-18T01:00:00,+02:00,CEST -1962-09-16T01:00:00,+01:00,CET -1963-03-17T01:00:00,+02:00,CEST -1963-09-15T01:00:00,+01:00,CET -1964-03-15T01:00:00,+02:00,CEST -1964-09-20T01:00:00,+01:00,CET -1965-04-25T01:00:00,+02:00,CEST -1965-09-19T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/atlantic-madeira.hoon b/desk/lib/pytz/atlantic-madeira.hoon deleted file mode 100644 index a890015..0000000 --- a/desk/lib/pytz/atlantic-madeira.hoon +++ /dev/null @@ -1,218 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-02:52,FMT -1912-01-01T01:00:00,-01:00,-01 -1916-06-18T00:00:00,+00:00,+00 -1916-11-01T01:00:00,-01:00,-01 -1917-03-01T01:00:00,+00:00,+00 -1917-10-15T00:00:00,-01:00,-01 -1918-03-01T01:00:00,+00:00,+00 -1918-10-15T00:00:00,-01:00,-01 -1919-03-01T01:00:00,+00:00,+00 -1919-10-15T00:00:00,-01:00,-01 -1920-03-01T01:00:00,+00:00,+00 -1920-10-15T00:00:00,-01:00,-01 -1921-03-01T01:00:00,+00:00,+00 -1921-10-15T00:00:00,-01:00,-01 -1924-04-17T00:00:00,+00:00,+00 -1924-10-05T00:00:00,-01:00,-01 -1926-04-18T00:00:00,+00:00,+00 -1926-10-03T00:00:00,-01:00,-01 -1927-04-10T00:00:00,+00:00,+00 -1927-10-02T00:00:00,-01:00,-01 -1928-04-15T00:00:00,+00:00,+00 -1928-10-07T00:00:00,-01:00,-01 -1929-04-21T00:00:00,+00:00,+00 -1929-10-06T00:00:00,-01:00,-01 -1931-04-19T00:00:00,+00:00,+00 -1931-10-04T00:00:00,-01:00,-01 -1932-04-03T00:00:00,+00:00,+00 -1932-10-02T00:00:00,-01:00,-01 -1934-04-08T00:00:00,+00:00,+00 -1934-10-07T00:00:00,-01:00,-01 -1935-03-31T00:00:00,+00:00,+00 -1935-10-06T00:00:00,-01:00,-01 -1936-04-19T00:00:00,+00:00,+00 -1936-10-04T00:00:00,-01:00,-01 -1937-04-04T00:00:00,+00:00,+00 -1937-10-03T00:00:00,-01:00,-01 -1938-03-27T00:00:00,+00:00,+00 -1938-10-02T00:00:00,-01:00,-01 -1939-04-16T00:00:00,+00:00,+00 -1939-11-19T00:00:00,-01:00,-01 -1940-02-25T00:00:00,+00:00,+00 -1940-10-08T00:00:00,-01:00,-01 -1941-04-06T00:00:00,+00:00,+00 -1941-10-06T00:00:00,-01:00,-01 -1942-03-15T00:00:00,+00:00,+00 -1942-04-25T23:00:00,+01:00,+01 -1942-08-15T23:00:00,+00:00,+00 -1942-10-25T00:00:00,-01:00,-01 -1943-03-14T00:00:00,+00:00,+00 -1943-04-17T23:00:00,+01:00,+01 -1943-08-28T23:00:00,+00:00,+00 -1943-10-31T00:00:00,-01:00,-01 -1944-03-12T00:00:00,+00:00,+00 -1944-04-22T23:00:00,+01:00,+01 -1944-08-26T23:00:00,+00:00,+00 -1944-10-29T00:00:00,-01:00,-01 -1945-03-11T00:00:00,+00:00,+00 -1945-04-21T23:00:00,+01:00,+01 -1945-08-25T23:00:00,+00:00,+00 -1945-10-28T00:00:00,-01:00,-01 -1946-04-07T00:00:00,+00:00,+00 -1946-10-06T00:00:00,-01:00,-01 -1947-04-06T03:00:00,+00:00,+00 -1947-10-05T03:00:00,-01:00,-01 -1948-04-04T03:00:00,+00:00,+00 -1948-10-03T03:00:00,-01:00,-01 -1949-04-03T03:00:00,+00:00,+00 -1949-10-02T03:00:00,-01:00,-01 -1950-04-02T03:00:00,+00:00,+00 -1950-10-01T03:00:00,-01:00,-01 -1951-04-01T03:00:00,+00:00,+00 -1951-10-07T03:00:00,-01:00,-01 -1952-04-06T03:00:00,+00:00,+00 -1952-10-05T03:00:00,-01:00,-01 -1953-04-05T03:00:00,+00:00,+00 -1953-10-04T03:00:00,-01:00,-01 -1954-04-04T03:00:00,+00:00,+00 -1954-10-03T03:00:00,-01:00,-01 -1955-04-03T03:00:00,+00:00,+00 -1955-10-02T03:00:00,-01:00,-01 -1956-04-01T03:00:00,+00:00,+00 -1956-10-07T03:00:00,-01:00,-01 -1957-04-07T03:00:00,+00:00,+00 -1957-10-06T03:00:00,-01:00,-01 -1958-04-06T03:00:00,+00:00,+00 -1958-10-05T03:00:00,-01:00,-01 -1959-04-05T03:00:00,+00:00,+00 -1959-10-04T03:00:00,-01:00,-01 -1960-04-03T03:00:00,+00:00,+00 -1960-10-02T03:00:00,-01:00,-01 -1961-04-02T03:00:00,+00:00,+00 -1961-10-01T03:00:00,-01:00,-01 -1962-04-01T03:00:00,+00:00,+00 -1962-10-07T03:00:00,-01:00,-01 -1963-04-07T03:00:00,+00:00,+00 -1963-10-06T03:00:00,-01:00,-01 -1964-04-05T03:00:00,+00:00,+00 -1964-10-04T03:00:00,-01:00,-01 -1965-04-04T03:00:00,+00:00,+00 -1965-10-03T03:00:00,-01:00,-01 -1966-04-03T03:00:00,+00:00,+00 -1966-10-02T03:00:00,+00:00,WET -1982-04-04T00:00:00,+01:00,WEST -1982-09-26T00:00:00,+00:00,WET -1983-03-27T00:00:00,+01:00,WEST -1983-09-25T00:00:00,+00:00,WET -1984-03-25T00:00:00,+01:00,WEST -1984-09-30T00:00:00,+00:00,WET -1985-03-31T00:00:00,+01:00,WEST -1985-09-29T00:00:00,+00:00,WET -1986-03-30T00:00:00,+01:00,WEST -1986-09-28T01:00:00,+00:00,WET -1987-03-29T01:00:00,+01:00,WEST -1987-09-27T01:00:00,+00:00,WET -1988-03-27T01:00:00,+01:00,WEST -1988-09-25T01:00:00,+00:00,WET -1989-03-26T01:00:00,+01:00,WEST -1989-09-24T01:00:00,+00:00,WET -1990-03-25T01:00:00,+01:00,WEST -1990-09-30T01:00:00,+00:00,WET -1991-03-31T01:00:00,+01:00,WEST -1991-09-29T01:00:00,+00:00,WET -1992-03-29T01:00:00,+01:00,WEST -1992-09-27T01:00:00,+00:00,WET -1993-03-28T01:00:00,+01:00,WEST -1993-09-26T01:00:00,+00:00,WET -1994-03-27T01:00:00,+01:00,WEST -1994-09-25T01:00:00,+00:00,WET -1995-03-26T01:00:00,+01:00,WEST -1995-09-24T01:00:00,+00:00,WET -1996-03-31T01:00:00,+01:00,WEST -1996-10-27T01:00:00,+00:00,WET -1997-03-30T01:00:00,+01:00,WEST -1997-10-26T01:00:00,+00:00,WET -1998-03-29T01:00:00,+01:00,WEST -1998-10-25T01:00:00,+00:00,WET -1999-03-28T01:00:00,+01:00,WEST -1999-10-31T01:00:00,+00:00,WET -2000-03-26T01:00:00,+01:00,WEST -2000-10-29T01:00:00,+00:00,WET -2001-03-25T01:00:00,+01:00,WEST -2001-10-28T01:00:00,+00:00,WET -2002-03-31T01:00:00,+01:00,WEST -2002-10-27T01:00:00,+00:00,WET -2003-03-30T01:00:00,+01:00,WEST -2003-10-26T01:00:00,+00:00,WET -2004-03-28T01:00:00,+01:00,WEST -2004-10-31T01:00:00,+00:00,WET -2005-03-27T01:00:00,+01:00,WEST -2005-10-30T01:00:00,+00:00,WET -2006-03-26T01:00:00,+01:00,WEST -2006-10-29T01:00:00,+00:00,WET -2007-03-25T01:00:00,+01:00,WEST -2007-10-28T01:00:00,+00:00,WET -2008-03-30T01:00:00,+01:00,WEST -2008-10-26T01:00:00,+00:00,WET -2009-03-29T01:00:00,+01:00,WEST -2009-10-25T01:00:00,+00:00,WET -2010-03-28T01:00:00,+01:00,WEST -2010-10-31T01:00:00,+00:00,WET -2011-03-27T01:00:00,+01:00,WEST -2011-10-30T01:00:00,+00:00,WET -2012-03-25T01:00:00,+01:00,WEST -2012-10-28T01:00:00,+00:00,WET -2013-03-31T01:00:00,+01:00,WEST -2013-10-27T01:00:00,+00:00,WET -2014-03-30T01:00:00,+01:00,WEST -2014-10-26T01:00:00,+00:00,WET -2015-03-29T01:00:00,+01:00,WEST -2015-10-25T01:00:00,+00:00,WET -2016-03-27T01:00:00,+01:00,WEST -2016-10-30T01:00:00,+00:00,WET -2017-03-26T01:00:00,+01:00,WEST -2017-10-29T01:00:00,+00:00,WET -2018-03-25T01:00:00,+01:00,WEST -2018-10-28T01:00:00,+00:00,WET -2019-03-31T01:00:00,+01:00,WEST -2019-10-27T01:00:00,+00:00,WET -2020-03-29T01:00:00,+01:00,WEST -2020-10-25T01:00:00,+00:00,WET -2021-03-28T01:00:00,+01:00,WEST -2021-10-31T01:00:00,+00:00,WET -2022-03-27T01:00:00,+01:00,WEST -2022-10-30T01:00:00,+00:00,WET -2023-03-26T01:00:00,+01:00,WEST -2023-10-29T01:00:00,+00:00,WET -2024-03-31T01:00:00,+01:00,WEST -2024-10-27T01:00:00,+00:00,WET -2025-03-30T01:00:00,+01:00,WEST -2025-10-26T01:00:00,+00:00,WET -2026-03-29T01:00:00,+01:00,WEST -2026-10-25T01:00:00,+00:00,WET -2027-03-28T01:00:00,+01:00,WEST -2027-10-31T01:00:00,+00:00,WET -2028-03-26T01:00:00,+01:00,WEST -2028-10-29T01:00:00,+00:00,WET -2029-03-25T01:00:00,+01:00,WEST -2029-10-28T01:00:00,+00:00,WET -2030-03-31T01:00:00,+01:00,WEST -2030-10-27T01:00:00,+00:00,WET -2031-03-30T01:00:00,+01:00,WEST -2031-10-26T01:00:00,+00:00,WET -2032-03-28T01:00:00,+01:00,WEST -2032-10-31T01:00:00,+00:00,WET -2033-03-27T01:00:00,+01:00,WEST -2033-10-30T01:00:00,+00:00,WET -2034-03-26T01:00:00,+01:00,WEST -2034-10-29T01:00:00,+00:00,WET -2035-03-25T01:00:00,+01:00,WEST -2035-10-28T01:00:00,+00:00,WET -2036-03-30T01:00:00,+01:00,WEST -2036-10-26T01:00:00,+00:00,WET -2037-03-29T01:00:00,+01:00,WEST -2037-10-25T01:00:00,+00:00,WET -''' diff --git a/desk/lib/pytz/atlantic-reykjavik.hoon b/desk/lib/pytz/atlantic-reykjavik.hoon deleted file mode 100644 index 4c39e70..0000000 --- a/desk/lib/pytz/atlantic-reykjavik.hoon +++ /dev/null @@ -1,72 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1908-01-01T01:28:00,-01:00,-01 -1917-02-20T00:00:00,+00:00,+00 -1917-10-21T01:00:00,-01:00,-01 -1918-02-20T00:00:00,+00:00,+00 -1918-11-16T01:00:00,-01:00,-01 -1919-02-20T00:00:00,+00:00,+00 -1919-11-16T01:00:00,-01:00,-01 -1921-03-20T00:00:00,+00:00,+00 -1921-06-23T01:00:00,-01:00,-01 -1939-04-30T00:00:00,+00:00,+00 -1939-10-29T02:00:00,-01:00,-01 -1940-02-25T03:00:00,+00:00,+00 -1940-11-03T02:00:00,-01:00,-01 -1941-03-02T02:00:00,+00:00,+00 -1941-11-02T02:00:00,-01:00,-01 -1942-03-08T02:00:00,+00:00,+00 -1942-10-25T02:00:00,-01:00,-01 -1943-03-07T02:00:00,+00:00,+00 -1943-10-24T02:00:00,-01:00,-01 -1944-03-05T02:00:00,+00:00,+00 -1944-10-22T02:00:00,-01:00,-01 -1945-03-04T02:00:00,+00:00,+00 -1945-10-28T02:00:00,-01:00,-01 -1946-03-03T02:00:00,+00:00,+00 -1946-10-27T02:00:00,-01:00,-01 -1947-04-06T02:00:00,+00:00,+00 -1947-10-26T02:00:00,-01:00,-01 -1948-04-04T02:00:00,+00:00,+00 -1948-10-24T02:00:00,-01:00,-01 -1949-04-03T02:00:00,+00:00,+00 -1949-10-30T02:00:00,-01:00,-01 -1950-04-02T02:00:00,+00:00,+00 -1950-10-22T02:00:00,-01:00,-01 -1951-04-01T02:00:00,+00:00,+00 -1951-10-28T02:00:00,-01:00,-01 -1952-04-06T02:00:00,+00:00,+00 -1952-10-26T02:00:00,-01:00,-01 -1953-04-05T02:00:00,+00:00,+00 -1953-10-25T02:00:00,-01:00,-01 -1954-04-04T02:00:00,+00:00,+00 -1954-10-24T02:00:00,-01:00,-01 -1955-04-03T02:00:00,+00:00,+00 -1955-10-23T02:00:00,-01:00,-01 -1956-04-01T02:00:00,+00:00,+00 -1956-10-28T02:00:00,-01:00,-01 -1957-04-07T02:00:00,+00:00,+00 -1957-10-27T02:00:00,-01:00,-01 -1958-04-06T02:00:00,+00:00,+00 -1958-10-26T02:00:00,-01:00,-01 -1959-04-05T02:00:00,+00:00,+00 -1959-10-25T02:00:00,-01:00,-01 -1960-04-03T02:00:00,+00:00,+00 -1960-10-23T02:00:00,-01:00,-01 -1961-04-02T02:00:00,+00:00,+00 -1961-10-22T02:00:00,-01:00,-01 -1962-04-01T02:00:00,+00:00,+00 -1962-10-28T02:00:00,-01:00,-01 -1963-04-07T02:00:00,+00:00,+00 -1963-10-27T02:00:00,-01:00,-01 -1964-04-05T02:00:00,+00:00,+00 -1964-10-25T02:00:00,-01:00,-01 -1965-04-04T02:00:00,+00:00,+00 -1965-10-24T02:00:00,-01:00,-01 -1966-04-03T02:00:00,+00:00,+00 -1966-10-23T02:00:00,-01:00,-01 -1967-04-02T02:00:00,+00:00,+00 -1967-10-29T02:00:00,-01:00,-01 -1968-04-07T02:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/atlantic-south-georgia.hoon b/desk/lib/pytz/atlantic-south-georgia.hoon deleted file mode 100644 index a21faf8..0000000 --- a/desk/lib/pytz/atlantic-south-georgia.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-02:00,-02 -''' diff --git a/desk/lib/pytz/atlantic-st-helena.hoon b/desk/lib/pytz/atlantic-st-helena.hoon deleted file mode 100644 index df83f54..0000000 --- a/desk/lib/pytz/atlantic-st-helena.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-01:37,JMT -1951-01-01T00:22:48,+00:00,GMT -''' diff --git a/desk/lib/pytz/atlantic-stanley.hoon b/desk/lib/pytz/atlantic-stanley.hoon deleted file mode 100644 index d2d78ce..0000000 --- a/desk/lib/pytz/atlantic-stanley.hoon +++ /dev/null @@ -1,74 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-04:09,SMT -1912-03-12T03:51:24,-04:00,-04 -1937-09-26T04:00:00,-03:00,-03 -1938-03-20T03:00:00,-04:00,-04 -1938-09-25T04:00:00,-03:00,-03 -1939-03-19T03:00:00,-04:00,-04 -1939-10-01T04:00:00,-03:00,-03 -1940-03-24T03:00:00,-04:00,-04 -1940-09-29T04:00:00,-03:00,-03 -1941-03-23T03:00:00,-04:00,-04 -1941-09-28T04:00:00,-03:00,-03 -1942-03-22T03:00:00,-04:00,-04 -1942-09-27T04:00:00,-03:00,-03 -1943-01-01T03:00:00,-04:00,-04 -1983-05-01T04:00:00,-03:00,-03 -1983-09-25T03:00:00,-02:00,-02 -1984-04-29T02:00:00,-03:00,-03 -1984-09-16T03:00:00,-02:00,-02 -1985-04-28T02:00:00,-03:00,-03 -1985-09-15T03:00:00,-03:00,-03 -1986-04-20T03:00:00,-04:00,-04 -1986-09-14T04:00:00,-03:00,-03 -1987-04-19T03:00:00,-04:00,-04 -1987-09-13T04:00:00,-03:00,-03 -1988-04-17T03:00:00,-04:00,-04 -1988-09-11T04:00:00,-03:00,-03 -1989-04-16T03:00:00,-04:00,-04 -1989-09-10T04:00:00,-03:00,-03 -1990-04-22T03:00:00,-04:00,-04 -1990-09-09T04:00:00,-03:00,-03 -1991-04-21T03:00:00,-04:00,-04 -1991-09-15T04:00:00,-03:00,-03 -1992-04-19T03:00:00,-04:00,-04 -1992-09-13T04:00:00,-03:00,-03 -1993-04-18T03:00:00,-04:00,-04 -1993-09-12T04:00:00,-03:00,-03 -1994-04-17T03:00:00,-04:00,-04 -1994-09-11T04:00:00,-03:00,-03 -1995-04-16T03:00:00,-04:00,-04 -1995-09-10T04:00:00,-03:00,-03 -1996-04-21T03:00:00,-04:00,-04 -1996-09-15T04:00:00,-03:00,-03 -1997-04-20T03:00:00,-04:00,-04 -1997-09-14T04:00:00,-03:00,-03 -1998-04-19T03:00:00,-04:00,-04 -1998-09-13T04:00:00,-03:00,-03 -1999-04-18T03:00:00,-04:00,-04 -1999-09-12T04:00:00,-03:00,-03 -2000-04-16T03:00:00,-04:00,-04 -2000-09-10T04:00:00,-03:00,-03 -2001-04-15T05:00:00,-04:00,-04 -2001-09-02T06:00:00,-03:00,-03 -2002-04-21T05:00:00,-04:00,-04 -2002-09-01T06:00:00,-03:00,-03 -2003-04-20T05:00:00,-04:00,-04 -2003-09-07T06:00:00,-03:00,-03 -2004-04-18T05:00:00,-04:00,-04 -2004-09-05T06:00:00,-03:00,-03 -2005-04-17T05:00:00,-04:00,-04 -2005-09-04T06:00:00,-03:00,-03 -2006-04-16T05:00:00,-04:00,-04 -2006-09-03T06:00:00,-03:00,-03 -2007-04-15T05:00:00,-04:00,-04 -2007-09-02T06:00:00,-03:00,-03 -2008-04-20T05:00:00,-04:00,-04 -2008-09-07T06:00:00,-03:00,-03 -2009-04-19T05:00:00,-04:00,-04 -2009-09-06T06:00:00,-03:00,-03 -2010-04-18T05:00:00,-04:00,-04 -2010-09-05T06:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/australia-adelaide.hoon b/desk/lib/pytz/australia-adelaide.hoon deleted file mode 100644 index 01ff92d..0000000 --- a/desk/lib/pytz/australia-adelaide.hoon +++ /dev/null @@ -1,147 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:14,LMT -1901-12-13T20:45:52,+09:30,ACST -1916-12-31T16:30:00,+10:30,ACDT -1917-03-24T16:30:00,+09:30,ACST -1941-12-31T16:30:00,+10:30,ACDT -1942-03-28T16:30:00,+09:30,ACST -1942-09-26T16:30:00,+10:30,ACDT -1943-03-27T16:30:00,+09:30,ACST -1943-10-02T16:30:00,+10:30,ACDT -1944-03-25T16:30:00,+09:30,ACST -1971-10-30T16:30:00,+10:30,ACDT -1972-02-26T16:30:00,+09:30,ACST -1972-10-28T16:30:00,+10:30,ACDT -1973-03-03T16:30:00,+09:30,ACST -1973-10-27T16:30:00,+10:30,ACDT -1974-03-02T16:30:00,+09:30,ACST -1974-10-26T16:30:00,+10:30,ACDT -1975-03-01T16:30:00,+09:30,ACST -1975-10-25T16:30:00,+10:30,ACDT -1976-03-06T16:30:00,+09:30,ACST -1976-10-30T16:30:00,+10:30,ACDT -1977-03-05T16:30:00,+09:30,ACST -1977-10-29T16:30:00,+10:30,ACDT -1978-03-04T16:30:00,+09:30,ACST -1978-10-28T16:30:00,+10:30,ACDT -1979-03-03T16:30:00,+09:30,ACST -1979-10-27T16:30:00,+10:30,ACDT -1980-03-01T16:30:00,+09:30,ACST -1980-10-25T16:30:00,+10:30,ACDT -1981-02-28T16:30:00,+09:30,ACST -1981-10-24T16:30:00,+10:30,ACDT -1982-03-06T16:30:00,+09:30,ACST -1982-10-30T16:30:00,+10:30,ACDT -1983-03-05T16:30:00,+09:30,ACST -1983-10-29T16:30:00,+10:30,ACDT -1984-03-03T16:30:00,+09:30,ACST -1984-10-27T16:30:00,+10:30,ACDT -1985-03-02T16:30:00,+09:30,ACST -1985-10-26T16:30:00,+10:30,ACDT -1986-03-15T16:30:00,+09:30,ACST -1986-10-18T16:30:00,+10:30,ACDT -1987-03-14T16:30:00,+09:30,ACST -1987-10-24T16:30:00,+10:30,ACDT -1988-03-19T16:30:00,+09:30,ACST -1988-10-29T16:30:00,+10:30,ACDT -1989-03-18T16:30:00,+09:30,ACST -1989-10-28T16:30:00,+10:30,ACDT -1990-03-17T16:30:00,+09:30,ACST -1990-10-27T16:30:00,+10:30,ACDT -1991-03-02T16:30:00,+09:30,ACST -1991-10-26T16:30:00,+10:30,ACDT -1992-03-21T16:30:00,+09:30,ACST -1992-10-24T16:30:00,+10:30,ACDT -1993-03-06T16:30:00,+09:30,ACST -1993-10-30T16:30:00,+10:30,ACDT -1994-03-19T16:30:00,+09:30,ACST -1994-10-29T16:30:00,+10:30,ACDT -1995-03-25T16:30:00,+09:30,ACST -1995-10-28T16:30:00,+10:30,ACDT -1996-03-30T16:30:00,+09:30,ACST -1996-10-26T16:30:00,+10:30,ACDT -1997-03-29T16:30:00,+09:30,ACST -1997-10-25T16:30:00,+10:30,ACDT -1998-03-28T16:30:00,+09:30,ACST -1998-10-24T16:30:00,+10:30,ACDT -1999-03-27T16:30:00,+09:30,ACST -1999-10-30T16:30:00,+10:30,ACDT -2000-03-25T16:30:00,+09:30,ACST -2000-10-28T16:30:00,+10:30,ACDT -2001-03-24T16:30:00,+09:30,ACST -2001-10-27T16:30:00,+10:30,ACDT -2002-03-30T16:30:00,+09:30,ACST -2002-10-26T16:30:00,+10:30,ACDT -2003-03-29T16:30:00,+09:30,ACST -2003-10-25T16:30:00,+10:30,ACDT -2004-03-27T16:30:00,+09:30,ACST -2004-10-30T16:30:00,+10:30,ACDT -2005-03-26T16:30:00,+09:30,ACST -2005-10-29T16:30:00,+10:30,ACDT -2006-04-01T16:30:00,+09:30,ACST -2006-10-28T16:30:00,+10:30,ACDT -2007-03-24T16:30:00,+09:30,ACST -2007-10-27T16:30:00,+10:30,ACDT -2008-04-05T16:30:00,+09:30,ACST -2008-10-04T16:30:00,+10:30,ACDT -2009-04-04T16:30:00,+09:30,ACST -2009-10-03T16:30:00,+10:30,ACDT -2010-04-03T16:30:00,+09:30,ACST -2010-10-02T16:30:00,+10:30,ACDT -2011-04-02T16:30:00,+09:30,ACST -2011-10-01T16:30:00,+10:30,ACDT -2012-03-31T16:30:00,+09:30,ACST -2012-10-06T16:30:00,+10:30,ACDT -2013-04-06T16:30:00,+09:30,ACST -2013-10-05T16:30:00,+10:30,ACDT -2014-04-05T16:30:00,+09:30,ACST -2014-10-04T16:30:00,+10:30,ACDT -2015-04-04T16:30:00,+09:30,ACST -2015-10-03T16:30:00,+10:30,ACDT -2016-04-02T16:30:00,+09:30,ACST -2016-10-01T16:30:00,+10:30,ACDT -2017-04-01T16:30:00,+09:30,ACST -2017-09-30T16:30:00,+10:30,ACDT -2018-03-31T16:30:00,+09:30,ACST -2018-10-06T16:30:00,+10:30,ACDT -2019-04-06T16:30:00,+09:30,ACST -2019-10-05T16:30:00,+10:30,ACDT -2020-04-04T16:30:00,+09:30,ACST -2020-10-03T16:30:00,+10:30,ACDT -2021-04-03T16:30:00,+09:30,ACST -2021-10-02T16:30:00,+10:30,ACDT -2022-04-02T16:30:00,+09:30,ACST -2022-10-01T16:30:00,+10:30,ACDT -2023-04-01T16:30:00,+09:30,ACST -2023-09-30T16:30:00,+10:30,ACDT -2024-04-06T16:30:00,+09:30,ACST -2024-10-05T16:30:00,+10:30,ACDT -2025-04-05T16:30:00,+09:30,ACST -2025-10-04T16:30:00,+10:30,ACDT -2026-04-04T16:30:00,+09:30,ACST -2026-10-03T16:30:00,+10:30,ACDT -2027-04-03T16:30:00,+09:30,ACST -2027-10-02T16:30:00,+10:30,ACDT -2028-04-01T16:30:00,+09:30,ACST -2028-09-30T16:30:00,+10:30,ACDT -2029-03-31T16:30:00,+09:30,ACST -2029-10-06T16:30:00,+10:30,ACDT -2030-04-06T16:30:00,+09:30,ACST -2030-10-05T16:30:00,+10:30,ACDT -2031-04-05T16:30:00,+09:30,ACST -2031-10-04T16:30:00,+10:30,ACDT -2032-04-03T16:30:00,+09:30,ACST -2032-10-02T16:30:00,+10:30,ACDT -2033-04-02T16:30:00,+09:30,ACST -2033-10-01T16:30:00,+10:30,ACDT -2034-04-01T16:30:00,+09:30,ACST -2034-09-30T16:30:00,+10:30,ACDT -2035-03-31T16:30:00,+09:30,ACST -2035-10-06T16:30:00,+10:30,ACDT -2036-04-05T16:30:00,+09:30,ACST -2036-10-04T16:30:00,+10:30,ACDT -2037-04-04T16:30:00,+09:30,ACST -2037-10-03T16:30:00,+10:30,ACDT -''' diff --git a/desk/lib/pytz/australia-brisbane.hoon b/desk/lib/pytz/australia-brisbane.hoon deleted file mode 100644 index 36da9e4..0000000 --- a/desk/lib/pytz/australia-brisbane.hoon +++ /dev/null @@ -1,22 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:12,LMT -1901-12-13T20:45:52,+10:00,AEST -1916-12-31T16:00:00,+11:00,AEDT -1917-03-24T16:00:00,+10:00,AEST -1941-12-31T16:00:00,+11:00,AEDT -1942-03-28T16:00:00,+10:00,AEST -1942-09-26T16:00:00,+11:00,AEDT -1943-03-27T16:00:00,+10:00,AEST -1943-10-02T16:00:00,+11:00,AEDT -1944-03-25T16:00:00,+10:00,AEST -1971-10-30T16:00:00,+11:00,AEDT -1972-02-26T16:00:00,+10:00,AEST -1989-10-28T16:00:00,+11:00,AEDT -1990-03-03T16:00:00,+10:00,AEST -1990-10-27T16:00:00,+11:00,AEDT -1991-03-02T16:00:00,+10:00,AEST -1991-10-26T16:00:00,+11:00,AEDT -1992-02-29T16:00:00,+10:00,AEST -''' diff --git a/desk/lib/pytz/australia-broken-hill.hoon b/desk/lib/pytz/australia-broken-hill.hoon deleted file mode 100644 index a55e0a9..0000000 --- a/desk/lib/pytz/australia-broken-hill.hoon +++ /dev/null @@ -1,147 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:26,LMT -1901-12-13T20:45:52,+09:30,ACST -1916-12-31T16:30:00,+10:30,ACDT -1917-03-24T16:30:00,+09:30,ACST -1941-12-31T16:30:00,+10:30,ACDT -1942-03-28T16:30:00,+09:30,ACST -1942-09-26T16:30:00,+10:30,ACDT -1943-03-27T16:30:00,+09:30,ACST -1943-10-02T16:30:00,+10:30,ACDT -1944-03-25T16:30:00,+09:30,ACST -1971-10-30T16:30:00,+10:30,ACDT -1972-02-26T16:30:00,+09:30,ACST -1972-10-28T16:30:00,+10:30,ACDT -1973-03-03T16:30:00,+09:30,ACST -1973-10-27T16:30:00,+10:30,ACDT -1974-03-02T16:30:00,+09:30,ACST -1974-10-26T16:30:00,+10:30,ACDT -1975-03-01T16:30:00,+09:30,ACST -1975-10-25T16:30:00,+10:30,ACDT -1976-03-06T16:30:00,+09:30,ACST -1976-10-30T16:30:00,+10:30,ACDT -1977-03-05T16:30:00,+09:30,ACST -1977-10-29T16:30:00,+10:30,ACDT -1978-03-04T16:30:00,+09:30,ACST -1978-10-28T16:30:00,+10:30,ACDT -1979-03-03T16:30:00,+09:30,ACST -1979-10-27T16:30:00,+10:30,ACDT -1980-03-01T16:30:00,+09:30,ACST -1980-10-25T16:30:00,+10:30,ACDT -1981-02-28T16:30:00,+09:30,ACST -1981-10-24T16:30:00,+10:30,ACDT -1982-04-03T16:30:00,+09:30,ACST -1982-10-30T16:30:00,+10:30,ACDT -1983-03-05T16:30:00,+09:30,ACST -1983-10-29T16:30:00,+10:30,ACDT -1984-03-03T16:30:00,+09:30,ACST -1984-10-27T16:30:00,+10:30,ACDT -1985-03-02T16:30:00,+09:30,ACST -1985-10-26T16:30:00,+10:30,ACDT -1986-03-15T16:30:00,+09:30,ACST -1986-10-18T16:30:00,+10:30,ACDT -1987-03-14T16:30:00,+09:30,ACST -1987-10-24T16:30:00,+10:30,ACDT -1988-03-19T16:30:00,+09:30,ACST -1988-10-29T16:30:00,+10:30,ACDT -1989-03-18T16:30:00,+09:30,ACST -1989-10-28T16:30:00,+10:30,ACDT -1990-03-03T16:30:00,+09:30,ACST -1990-10-27T16:30:00,+10:30,ACDT -1991-03-02T16:30:00,+09:30,ACST -1991-10-26T16:30:00,+10:30,ACDT -1992-02-29T16:30:00,+09:30,ACST -1992-10-24T16:30:00,+10:30,ACDT -1993-03-06T16:30:00,+09:30,ACST -1993-10-30T16:30:00,+10:30,ACDT -1994-03-05T16:30:00,+09:30,ACST -1994-10-29T16:30:00,+10:30,ACDT -1995-03-04T16:30:00,+09:30,ACST -1995-10-28T16:30:00,+10:30,ACDT -1996-03-30T16:30:00,+09:30,ACST -1996-10-26T16:30:00,+10:30,ACDT -1997-03-29T16:30:00,+09:30,ACST -1997-10-25T16:30:00,+10:30,ACDT -1998-03-28T16:30:00,+09:30,ACST -1998-10-24T16:30:00,+10:30,ACDT -1999-03-27T16:30:00,+09:30,ACST -1999-10-30T16:30:00,+10:30,ACDT -2000-03-25T16:30:00,+09:30,ACST -2000-10-28T16:30:00,+10:30,ACDT -2001-03-24T16:30:00,+09:30,ACST -2001-10-27T16:30:00,+10:30,ACDT -2002-03-30T16:30:00,+09:30,ACST -2002-10-26T16:30:00,+10:30,ACDT -2003-03-29T16:30:00,+09:30,ACST -2003-10-25T16:30:00,+10:30,ACDT -2004-03-27T16:30:00,+09:30,ACST -2004-10-30T16:30:00,+10:30,ACDT -2005-03-26T16:30:00,+09:30,ACST -2005-10-29T16:30:00,+10:30,ACDT -2006-04-01T16:30:00,+09:30,ACST -2006-10-28T16:30:00,+10:30,ACDT -2007-03-24T16:30:00,+09:30,ACST -2007-10-27T16:30:00,+10:30,ACDT -2008-04-05T16:30:00,+09:30,ACST -2008-10-04T16:30:00,+10:30,ACDT -2009-04-04T16:30:00,+09:30,ACST -2009-10-03T16:30:00,+10:30,ACDT -2010-04-03T16:30:00,+09:30,ACST -2010-10-02T16:30:00,+10:30,ACDT -2011-04-02T16:30:00,+09:30,ACST -2011-10-01T16:30:00,+10:30,ACDT -2012-03-31T16:30:00,+09:30,ACST -2012-10-06T16:30:00,+10:30,ACDT -2013-04-06T16:30:00,+09:30,ACST -2013-10-05T16:30:00,+10:30,ACDT -2014-04-05T16:30:00,+09:30,ACST -2014-10-04T16:30:00,+10:30,ACDT -2015-04-04T16:30:00,+09:30,ACST -2015-10-03T16:30:00,+10:30,ACDT -2016-04-02T16:30:00,+09:30,ACST -2016-10-01T16:30:00,+10:30,ACDT -2017-04-01T16:30:00,+09:30,ACST -2017-09-30T16:30:00,+10:30,ACDT -2018-03-31T16:30:00,+09:30,ACST -2018-10-06T16:30:00,+10:30,ACDT -2019-04-06T16:30:00,+09:30,ACST -2019-10-05T16:30:00,+10:30,ACDT -2020-04-04T16:30:00,+09:30,ACST -2020-10-03T16:30:00,+10:30,ACDT -2021-04-03T16:30:00,+09:30,ACST -2021-10-02T16:30:00,+10:30,ACDT -2022-04-02T16:30:00,+09:30,ACST -2022-10-01T16:30:00,+10:30,ACDT -2023-04-01T16:30:00,+09:30,ACST -2023-09-30T16:30:00,+10:30,ACDT -2024-04-06T16:30:00,+09:30,ACST -2024-10-05T16:30:00,+10:30,ACDT -2025-04-05T16:30:00,+09:30,ACST -2025-10-04T16:30:00,+10:30,ACDT -2026-04-04T16:30:00,+09:30,ACST -2026-10-03T16:30:00,+10:30,ACDT -2027-04-03T16:30:00,+09:30,ACST -2027-10-02T16:30:00,+10:30,ACDT -2028-04-01T16:30:00,+09:30,ACST -2028-09-30T16:30:00,+10:30,ACDT -2029-03-31T16:30:00,+09:30,ACST -2029-10-06T16:30:00,+10:30,ACDT -2030-04-06T16:30:00,+09:30,ACST -2030-10-05T16:30:00,+10:30,ACDT -2031-04-05T16:30:00,+09:30,ACST -2031-10-04T16:30:00,+10:30,ACDT -2032-04-03T16:30:00,+09:30,ACST -2032-10-02T16:30:00,+10:30,ACDT -2033-04-02T16:30:00,+09:30,ACST -2033-10-01T16:30:00,+10:30,ACDT -2034-04-01T16:30:00,+09:30,ACST -2034-09-30T16:30:00,+10:30,ACDT -2035-03-31T16:30:00,+09:30,ACST -2035-10-06T16:30:00,+10:30,ACDT -2036-04-05T16:30:00,+09:30,ACST -2036-10-04T16:30:00,+10:30,ACDT -2037-04-04T16:30:00,+09:30,ACST -2037-10-03T16:30:00,+10:30,ACDT -''' diff --git a/desk/lib/pytz/australia-canberra.hoon b/desk/lib/pytz/australia-canberra.hoon deleted file mode 100644 index 4556aa2..0000000 --- a/desk/lib/pytz/australia-canberra.hoon +++ /dev/null @@ -1,147 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:05,LMT -1901-12-13T20:45:52,+10:00,AEST -1916-12-31T16:00:00,+11:00,AEDT -1917-03-24T16:00:00,+10:00,AEST -1941-12-31T16:00:00,+11:00,AEDT -1942-03-28T16:00:00,+10:00,AEST -1942-09-26T16:00:00,+11:00,AEDT -1943-03-27T16:00:00,+10:00,AEST -1943-10-02T16:00:00,+11:00,AEDT -1944-03-25T16:00:00,+10:00,AEST -1971-10-30T16:00:00,+11:00,AEDT -1972-02-26T16:00:00,+10:00,AEST -1972-10-28T16:00:00,+11:00,AEDT -1973-03-03T16:00:00,+10:00,AEST -1973-10-27T16:00:00,+11:00,AEDT -1974-03-02T16:00:00,+10:00,AEST -1974-10-26T16:00:00,+11:00,AEDT -1975-03-01T16:00:00,+10:00,AEST -1975-10-25T16:00:00,+11:00,AEDT -1976-03-06T16:00:00,+10:00,AEST -1976-10-30T16:00:00,+11:00,AEDT -1977-03-05T16:00:00,+10:00,AEST -1977-10-29T16:00:00,+11:00,AEDT -1978-03-04T16:00:00,+10:00,AEST -1978-10-28T16:00:00,+11:00,AEDT -1979-03-03T16:00:00,+10:00,AEST -1979-10-27T16:00:00,+11:00,AEDT -1980-03-01T16:00:00,+10:00,AEST -1980-10-25T16:00:00,+11:00,AEDT -1981-02-28T16:00:00,+10:00,AEST -1981-10-24T16:00:00,+11:00,AEDT -1982-04-03T16:00:00,+10:00,AEST -1982-10-30T16:00:00,+11:00,AEDT -1983-03-05T16:00:00,+10:00,AEST -1983-10-29T16:00:00,+11:00,AEDT -1984-03-03T16:00:00,+10:00,AEST -1984-10-27T16:00:00,+11:00,AEDT -1985-03-02T16:00:00,+10:00,AEST -1985-10-26T16:00:00,+11:00,AEDT -1986-03-15T16:00:00,+10:00,AEST -1986-10-18T16:00:00,+11:00,AEDT -1987-03-14T16:00:00,+10:00,AEST -1987-10-24T16:00:00,+11:00,AEDT -1988-03-19T16:00:00,+10:00,AEST -1988-10-29T16:00:00,+11:00,AEDT -1989-03-18T16:00:00,+10:00,AEST -1989-10-28T16:00:00,+11:00,AEDT -1990-03-03T16:00:00,+10:00,AEST -1990-10-27T16:00:00,+11:00,AEDT -1991-03-02T16:00:00,+10:00,AEST -1991-10-26T16:00:00,+11:00,AEDT -1992-02-29T16:00:00,+10:00,AEST -1992-10-24T16:00:00,+11:00,AEDT -1993-03-06T16:00:00,+10:00,AEST -1993-10-30T16:00:00,+11:00,AEDT -1994-03-05T16:00:00,+10:00,AEST -1994-10-29T16:00:00,+11:00,AEDT -1995-03-04T16:00:00,+10:00,AEST -1995-10-28T16:00:00,+11:00,AEDT -1996-03-30T16:00:00,+10:00,AEST -1996-10-26T16:00:00,+11:00,AEDT -1997-03-29T16:00:00,+10:00,AEST -1997-10-25T16:00:00,+11:00,AEDT -1998-03-28T16:00:00,+10:00,AEST -1998-10-24T16:00:00,+11:00,AEDT -1999-03-27T16:00:00,+10:00,AEST -1999-10-30T16:00:00,+11:00,AEDT -2000-03-25T16:00:00,+10:00,AEST -2000-08-26T16:00:00,+11:00,AEDT -2001-03-24T16:00:00,+10:00,AEST -2001-10-27T16:00:00,+11:00,AEDT -2002-03-30T16:00:00,+10:00,AEST -2002-10-26T16:00:00,+11:00,AEDT -2003-03-29T16:00:00,+10:00,AEST -2003-10-25T16:00:00,+11:00,AEDT -2004-03-27T16:00:00,+10:00,AEST -2004-10-30T16:00:00,+11:00,AEDT -2005-03-26T16:00:00,+10:00,AEST -2005-10-29T16:00:00,+11:00,AEDT -2006-04-01T16:00:00,+10:00,AEST -2006-10-28T16:00:00,+11:00,AEDT -2007-03-24T16:00:00,+10:00,AEST -2007-10-27T16:00:00,+11:00,AEDT -2008-04-05T16:00:00,+10:00,AEST -2008-10-04T16:00:00,+11:00,AEDT -2009-04-04T16:00:00,+10:00,AEST -2009-10-03T16:00:00,+11:00,AEDT -2010-04-03T16:00:00,+10:00,AEST -2010-10-02T16:00:00,+11:00,AEDT -2011-04-02T16:00:00,+10:00,AEST -2011-10-01T16:00:00,+11:00,AEDT -2012-03-31T16:00:00,+10:00,AEST -2012-10-06T16:00:00,+11:00,AEDT -2013-04-06T16:00:00,+10:00,AEST -2013-10-05T16:00:00,+11:00,AEDT -2014-04-05T16:00:00,+10:00,AEST -2014-10-04T16:00:00,+11:00,AEDT -2015-04-04T16:00:00,+10:00,AEST -2015-10-03T16:00:00,+11:00,AEDT -2016-04-02T16:00:00,+10:00,AEST -2016-10-01T16:00:00,+11:00,AEDT -2017-04-01T16:00:00,+10:00,AEST -2017-09-30T16:00:00,+11:00,AEDT -2018-03-31T16:00:00,+10:00,AEST -2018-10-06T16:00:00,+11:00,AEDT -2019-04-06T16:00:00,+10:00,AEST -2019-10-05T16:00:00,+11:00,AEDT -2020-04-04T16:00:00,+10:00,AEST -2020-10-03T16:00:00,+11:00,AEDT -2021-04-03T16:00:00,+10:00,AEST -2021-10-02T16:00:00,+11:00,AEDT -2022-04-02T16:00:00,+10:00,AEST -2022-10-01T16:00:00,+11:00,AEDT -2023-04-01T16:00:00,+10:00,AEST -2023-09-30T16:00:00,+11:00,AEDT -2024-04-06T16:00:00,+10:00,AEST -2024-10-05T16:00:00,+11:00,AEDT -2025-04-05T16:00:00,+10:00,AEST -2025-10-04T16:00:00,+11:00,AEDT -2026-04-04T16:00:00,+10:00,AEST -2026-10-03T16:00:00,+11:00,AEDT -2027-04-03T16:00:00,+10:00,AEST -2027-10-02T16:00:00,+11:00,AEDT -2028-04-01T16:00:00,+10:00,AEST -2028-09-30T16:00:00,+11:00,AEDT -2029-03-31T16:00:00,+10:00,AEST -2029-10-06T16:00:00,+11:00,AEDT -2030-04-06T16:00:00,+10:00,AEST -2030-10-05T16:00:00,+11:00,AEDT -2031-04-05T16:00:00,+10:00,AEST -2031-10-04T16:00:00,+11:00,AEDT -2032-04-03T16:00:00,+10:00,AEST -2032-10-02T16:00:00,+11:00,AEDT -2033-04-02T16:00:00,+10:00,AEST -2033-10-01T16:00:00,+11:00,AEDT -2034-04-01T16:00:00,+10:00,AEST -2034-09-30T16:00:00,+11:00,AEDT -2035-03-31T16:00:00,+10:00,AEST -2035-10-06T16:00:00,+11:00,AEDT -2036-04-05T16:00:00,+10:00,AEST -2036-10-04T16:00:00,+11:00,AEDT -2037-04-04T16:00:00,+10:00,AEST -2037-10-03T16:00:00,+11:00,AEDT -''' diff --git a/desk/lib/pytz/australia-currie.hoon b/desk/lib/pytz/australia-currie.hoon deleted file mode 100644 index 26ba819..0000000 --- a/desk/lib/pytz/australia-currie.hoon +++ /dev/null @@ -1,159 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:49,LMT -1901-12-13T20:45:52,+10:00,AEST -1916-09-30T16:00:00,+11:00,AEDT -1917-03-24T16:00:00,+10:00,AEST -1917-10-27T16:00:00,+11:00,AEDT -1918-03-02T16:00:00,+10:00,AEST -1918-10-26T16:00:00,+11:00,AEDT -1919-03-01T16:00:00,+10:00,AEST -1941-12-31T16:00:00,+11:00,AEDT -1942-03-28T16:00:00,+10:00,AEST -1942-09-26T16:00:00,+11:00,AEDT -1943-03-27T16:00:00,+10:00,AEST -1943-10-02T16:00:00,+11:00,AEDT -1944-03-25T16:00:00,+10:00,AEST -1967-09-30T16:00:00,+11:00,AEDT -1968-03-30T16:00:00,+10:00,AEST -1968-10-26T16:00:00,+11:00,AEDT -1969-03-08T16:00:00,+10:00,AEST -1969-10-25T16:00:00,+11:00,AEDT -1970-03-07T16:00:00,+10:00,AEST -1970-10-24T16:00:00,+11:00,AEDT -1971-03-13T16:00:00,+10:00,AEST -1971-10-30T16:00:00,+11:00,AEDT -1972-02-26T16:00:00,+10:00,AEST -1972-10-28T16:00:00,+11:00,AEDT -1973-03-03T16:00:00,+10:00,AEST -1973-10-27T16:00:00,+11:00,AEDT -1974-03-02T16:00:00,+10:00,AEST -1974-10-26T16:00:00,+11:00,AEDT -1975-03-01T16:00:00,+10:00,AEST -1975-10-25T16:00:00,+11:00,AEDT -1976-03-06T16:00:00,+10:00,AEST -1976-10-30T16:00:00,+11:00,AEDT -1977-03-05T16:00:00,+10:00,AEST -1977-10-29T16:00:00,+11:00,AEDT -1978-03-04T16:00:00,+10:00,AEST -1978-10-28T16:00:00,+11:00,AEDT -1979-03-03T16:00:00,+10:00,AEST -1979-10-27T16:00:00,+11:00,AEDT -1980-03-01T16:00:00,+10:00,AEST -1980-10-25T16:00:00,+11:00,AEDT -1981-02-28T16:00:00,+10:00,AEST -1981-10-24T16:00:00,+11:00,AEDT -1982-03-27T16:00:00,+10:00,AEST -1982-10-30T16:00:00,+11:00,AEDT -1983-03-26T16:00:00,+10:00,AEST -1983-10-29T16:00:00,+11:00,AEDT -1984-03-03T16:00:00,+10:00,AEST -1984-10-27T16:00:00,+11:00,AEDT -1985-03-02T16:00:00,+10:00,AEST -1985-10-26T16:00:00,+11:00,AEDT -1986-03-01T16:00:00,+10:00,AEST -1986-10-18T16:00:00,+11:00,AEDT -1987-03-14T16:00:00,+10:00,AEST -1987-10-24T16:00:00,+11:00,AEDT -1988-03-19T16:00:00,+10:00,AEST -1988-10-29T16:00:00,+11:00,AEDT -1989-03-18T16:00:00,+10:00,AEST -1989-10-28T16:00:00,+11:00,AEDT -1990-03-17T16:00:00,+10:00,AEST -1990-10-27T16:00:00,+11:00,AEDT -1991-03-30T16:00:00,+10:00,AEST -1991-10-05T16:00:00,+11:00,AEDT -1992-03-28T16:00:00,+10:00,AEST -1992-10-03T16:00:00,+11:00,AEDT -1993-03-27T16:00:00,+10:00,AEST -1993-10-02T16:00:00,+11:00,AEDT -1994-03-26T16:00:00,+10:00,AEST -1994-10-01T16:00:00,+11:00,AEDT -1995-03-25T16:00:00,+10:00,AEST -1995-09-30T16:00:00,+11:00,AEDT -1996-03-30T16:00:00,+10:00,AEST -1996-10-05T16:00:00,+11:00,AEDT -1997-03-29T16:00:00,+10:00,AEST -1997-10-04T16:00:00,+11:00,AEDT -1998-03-28T16:00:00,+10:00,AEST -1998-10-03T16:00:00,+11:00,AEDT -1999-03-27T16:00:00,+10:00,AEST -1999-10-02T16:00:00,+11:00,AEDT -2000-03-25T16:00:00,+10:00,AEST -2000-08-26T16:00:00,+11:00,AEDT -2001-03-24T16:00:00,+10:00,AEST -2001-10-06T16:00:00,+11:00,AEDT -2002-03-30T16:00:00,+10:00,AEST -2002-10-05T16:00:00,+11:00,AEDT -2003-03-29T16:00:00,+10:00,AEST -2003-10-04T16:00:00,+11:00,AEDT -2004-03-27T16:00:00,+10:00,AEST -2004-10-02T16:00:00,+11:00,AEDT -2005-03-26T16:00:00,+10:00,AEST -2005-10-01T16:00:00,+11:00,AEDT -2006-04-01T16:00:00,+10:00,AEST -2006-09-30T16:00:00,+11:00,AEDT -2007-03-24T16:00:00,+10:00,AEST -2007-10-06T16:00:00,+11:00,AEDT -2008-04-05T16:00:00,+10:00,AEST -2008-10-04T16:00:00,+11:00,AEDT -2009-04-04T16:00:00,+10:00,AEST -2009-10-03T16:00:00,+11:00,AEDT -2010-04-03T16:00:00,+10:00,AEST -2010-10-02T16:00:00,+11:00,AEDT -2011-04-02T16:00:00,+10:00,AEST -2011-10-01T16:00:00,+11:00,AEDT -2012-03-31T16:00:00,+10:00,AEST -2012-10-06T16:00:00,+11:00,AEDT -2013-04-06T16:00:00,+10:00,AEST -2013-10-05T16:00:00,+11:00,AEDT -2014-04-05T16:00:00,+10:00,AEST -2014-10-04T16:00:00,+11:00,AEDT -2015-04-04T16:00:00,+10:00,AEST -2015-10-03T16:00:00,+11:00,AEDT -2016-04-02T16:00:00,+10:00,AEST -2016-10-01T16:00:00,+11:00,AEDT -2017-04-01T16:00:00,+10:00,AEST -2017-09-30T16:00:00,+11:00,AEDT -2018-03-31T16:00:00,+10:00,AEST -2018-10-06T16:00:00,+11:00,AEDT -2019-04-06T16:00:00,+10:00,AEST -2019-10-05T16:00:00,+11:00,AEDT -2020-04-04T16:00:00,+10:00,AEST -2020-10-03T16:00:00,+11:00,AEDT -2021-04-03T16:00:00,+10:00,AEST -2021-10-02T16:00:00,+11:00,AEDT -2022-04-02T16:00:00,+10:00,AEST -2022-10-01T16:00:00,+11:00,AEDT -2023-04-01T16:00:00,+10:00,AEST -2023-09-30T16:00:00,+11:00,AEDT -2024-04-06T16:00:00,+10:00,AEST -2024-10-05T16:00:00,+11:00,AEDT -2025-04-05T16:00:00,+10:00,AEST -2025-10-04T16:00:00,+11:00,AEDT -2026-04-04T16:00:00,+10:00,AEST -2026-10-03T16:00:00,+11:00,AEDT -2027-04-03T16:00:00,+10:00,AEST -2027-10-02T16:00:00,+11:00,AEDT -2028-04-01T16:00:00,+10:00,AEST -2028-09-30T16:00:00,+11:00,AEDT -2029-03-31T16:00:00,+10:00,AEST -2029-10-06T16:00:00,+11:00,AEDT -2030-04-06T16:00:00,+10:00,AEST -2030-10-05T16:00:00,+11:00,AEDT -2031-04-05T16:00:00,+10:00,AEST -2031-10-04T16:00:00,+11:00,AEDT -2032-04-03T16:00:00,+10:00,AEST -2032-10-02T16:00:00,+11:00,AEDT -2033-04-02T16:00:00,+10:00,AEST -2033-10-01T16:00:00,+11:00,AEDT -2034-04-01T16:00:00,+10:00,AEST -2034-09-30T16:00:00,+11:00,AEDT -2035-03-31T16:00:00,+10:00,AEST -2035-10-06T16:00:00,+11:00,AEDT -2036-04-05T16:00:00,+10:00,AEST -2036-10-04T16:00:00,+11:00,AEDT -2037-04-04T16:00:00,+10:00,AEST -2037-10-03T16:00:00,+11:00,AEDT -''' diff --git a/desk/lib/pytz/australia-darwin.hoon b/desk/lib/pytz/australia-darwin.hoon deleted file mode 100644 index f8ef30a..0000000 --- a/desk/lib/pytz/australia-darwin.hoon +++ /dev/null @@ -1,14 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:43,LMT -1901-12-13T20:45:52,+09:30,ACST -1916-12-31T16:30:00,+10:30,ACDT -1917-03-24T16:30:00,+09:30,ACST -1941-12-31T16:30:00,+10:30,ACDT -1942-03-28T16:30:00,+09:30,ACST -1942-09-26T16:30:00,+10:30,ACDT -1943-03-27T16:30:00,+09:30,ACST -1943-10-02T16:30:00,+10:30,ACDT -1944-03-25T16:30:00,+09:30,ACST -''' diff --git a/desk/lib/pytz/australia-eucla.hoon b/desk/lib/pytz/australia-eucla.hoon deleted file mode 100644 index 5d14fef..0000000 --- a/desk/lib/pytz/australia-eucla.hoon +++ /dev/null @@ -1,24 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:35,LMT -1901-12-13T20:45:52,+08:45,+0845 -1916-12-31T17:15:00,+09:45,+0945 -1917-03-24T17:15:00,+08:45,+0845 -1941-12-31T17:15:00,+09:45,+0945 -1942-03-28T17:15:00,+08:45,+0845 -1942-09-26T17:15:00,+09:45,+0945 -1943-03-27T17:15:00,+08:45,+0845 -1974-10-26T17:15:00,+09:45,+0945 -1975-03-01T17:15:00,+08:45,+0845 -1983-10-29T17:15:00,+09:45,+0945 -1984-03-03T17:15:00,+08:45,+0845 -1991-11-16T17:15:00,+09:45,+0945 -1992-02-29T17:15:00,+08:45,+0845 -2006-12-02T17:15:00,+09:45,+0945 -2007-03-24T17:15:00,+08:45,+0845 -2007-10-27T17:15:00,+09:45,+0945 -2008-03-29T17:15:00,+08:45,+0845 -2008-10-25T17:15:00,+09:45,+0945 -2009-03-28T17:15:00,+08:45,+0845 -''' diff --git a/desk/lib/pytz/australia-hobart.hoon b/desk/lib/pytz/australia-hobart.hoon deleted file mode 100644 index 26ba819..0000000 --- a/desk/lib/pytz/australia-hobart.hoon +++ /dev/null @@ -1,159 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:49,LMT -1901-12-13T20:45:52,+10:00,AEST -1916-09-30T16:00:00,+11:00,AEDT -1917-03-24T16:00:00,+10:00,AEST -1917-10-27T16:00:00,+11:00,AEDT -1918-03-02T16:00:00,+10:00,AEST -1918-10-26T16:00:00,+11:00,AEDT -1919-03-01T16:00:00,+10:00,AEST -1941-12-31T16:00:00,+11:00,AEDT -1942-03-28T16:00:00,+10:00,AEST -1942-09-26T16:00:00,+11:00,AEDT -1943-03-27T16:00:00,+10:00,AEST -1943-10-02T16:00:00,+11:00,AEDT -1944-03-25T16:00:00,+10:00,AEST -1967-09-30T16:00:00,+11:00,AEDT -1968-03-30T16:00:00,+10:00,AEST -1968-10-26T16:00:00,+11:00,AEDT -1969-03-08T16:00:00,+10:00,AEST -1969-10-25T16:00:00,+11:00,AEDT -1970-03-07T16:00:00,+10:00,AEST -1970-10-24T16:00:00,+11:00,AEDT -1971-03-13T16:00:00,+10:00,AEST -1971-10-30T16:00:00,+11:00,AEDT -1972-02-26T16:00:00,+10:00,AEST -1972-10-28T16:00:00,+11:00,AEDT -1973-03-03T16:00:00,+10:00,AEST -1973-10-27T16:00:00,+11:00,AEDT -1974-03-02T16:00:00,+10:00,AEST -1974-10-26T16:00:00,+11:00,AEDT -1975-03-01T16:00:00,+10:00,AEST -1975-10-25T16:00:00,+11:00,AEDT -1976-03-06T16:00:00,+10:00,AEST -1976-10-30T16:00:00,+11:00,AEDT -1977-03-05T16:00:00,+10:00,AEST -1977-10-29T16:00:00,+11:00,AEDT -1978-03-04T16:00:00,+10:00,AEST -1978-10-28T16:00:00,+11:00,AEDT -1979-03-03T16:00:00,+10:00,AEST -1979-10-27T16:00:00,+11:00,AEDT -1980-03-01T16:00:00,+10:00,AEST -1980-10-25T16:00:00,+11:00,AEDT -1981-02-28T16:00:00,+10:00,AEST -1981-10-24T16:00:00,+11:00,AEDT -1982-03-27T16:00:00,+10:00,AEST -1982-10-30T16:00:00,+11:00,AEDT -1983-03-26T16:00:00,+10:00,AEST -1983-10-29T16:00:00,+11:00,AEDT -1984-03-03T16:00:00,+10:00,AEST -1984-10-27T16:00:00,+11:00,AEDT -1985-03-02T16:00:00,+10:00,AEST -1985-10-26T16:00:00,+11:00,AEDT -1986-03-01T16:00:00,+10:00,AEST -1986-10-18T16:00:00,+11:00,AEDT -1987-03-14T16:00:00,+10:00,AEST -1987-10-24T16:00:00,+11:00,AEDT -1988-03-19T16:00:00,+10:00,AEST -1988-10-29T16:00:00,+11:00,AEDT -1989-03-18T16:00:00,+10:00,AEST -1989-10-28T16:00:00,+11:00,AEDT -1990-03-17T16:00:00,+10:00,AEST -1990-10-27T16:00:00,+11:00,AEDT -1991-03-30T16:00:00,+10:00,AEST -1991-10-05T16:00:00,+11:00,AEDT -1992-03-28T16:00:00,+10:00,AEST -1992-10-03T16:00:00,+11:00,AEDT -1993-03-27T16:00:00,+10:00,AEST -1993-10-02T16:00:00,+11:00,AEDT -1994-03-26T16:00:00,+10:00,AEST -1994-10-01T16:00:00,+11:00,AEDT -1995-03-25T16:00:00,+10:00,AEST -1995-09-30T16:00:00,+11:00,AEDT -1996-03-30T16:00:00,+10:00,AEST -1996-10-05T16:00:00,+11:00,AEDT -1997-03-29T16:00:00,+10:00,AEST -1997-10-04T16:00:00,+11:00,AEDT -1998-03-28T16:00:00,+10:00,AEST -1998-10-03T16:00:00,+11:00,AEDT -1999-03-27T16:00:00,+10:00,AEST -1999-10-02T16:00:00,+11:00,AEDT -2000-03-25T16:00:00,+10:00,AEST -2000-08-26T16:00:00,+11:00,AEDT -2001-03-24T16:00:00,+10:00,AEST -2001-10-06T16:00:00,+11:00,AEDT -2002-03-30T16:00:00,+10:00,AEST -2002-10-05T16:00:00,+11:00,AEDT -2003-03-29T16:00:00,+10:00,AEST -2003-10-04T16:00:00,+11:00,AEDT -2004-03-27T16:00:00,+10:00,AEST -2004-10-02T16:00:00,+11:00,AEDT -2005-03-26T16:00:00,+10:00,AEST -2005-10-01T16:00:00,+11:00,AEDT -2006-04-01T16:00:00,+10:00,AEST -2006-09-30T16:00:00,+11:00,AEDT -2007-03-24T16:00:00,+10:00,AEST -2007-10-06T16:00:00,+11:00,AEDT -2008-04-05T16:00:00,+10:00,AEST -2008-10-04T16:00:00,+11:00,AEDT -2009-04-04T16:00:00,+10:00,AEST -2009-10-03T16:00:00,+11:00,AEDT -2010-04-03T16:00:00,+10:00,AEST -2010-10-02T16:00:00,+11:00,AEDT -2011-04-02T16:00:00,+10:00,AEST -2011-10-01T16:00:00,+11:00,AEDT -2012-03-31T16:00:00,+10:00,AEST -2012-10-06T16:00:00,+11:00,AEDT -2013-04-06T16:00:00,+10:00,AEST -2013-10-05T16:00:00,+11:00,AEDT -2014-04-05T16:00:00,+10:00,AEST -2014-10-04T16:00:00,+11:00,AEDT -2015-04-04T16:00:00,+10:00,AEST -2015-10-03T16:00:00,+11:00,AEDT -2016-04-02T16:00:00,+10:00,AEST -2016-10-01T16:00:00,+11:00,AEDT -2017-04-01T16:00:00,+10:00,AEST -2017-09-30T16:00:00,+11:00,AEDT -2018-03-31T16:00:00,+10:00,AEST -2018-10-06T16:00:00,+11:00,AEDT -2019-04-06T16:00:00,+10:00,AEST -2019-10-05T16:00:00,+11:00,AEDT -2020-04-04T16:00:00,+10:00,AEST -2020-10-03T16:00:00,+11:00,AEDT -2021-04-03T16:00:00,+10:00,AEST -2021-10-02T16:00:00,+11:00,AEDT -2022-04-02T16:00:00,+10:00,AEST -2022-10-01T16:00:00,+11:00,AEDT -2023-04-01T16:00:00,+10:00,AEST -2023-09-30T16:00:00,+11:00,AEDT -2024-04-06T16:00:00,+10:00,AEST -2024-10-05T16:00:00,+11:00,AEDT -2025-04-05T16:00:00,+10:00,AEST -2025-10-04T16:00:00,+11:00,AEDT -2026-04-04T16:00:00,+10:00,AEST -2026-10-03T16:00:00,+11:00,AEDT -2027-04-03T16:00:00,+10:00,AEST -2027-10-02T16:00:00,+11:00,AEDT -2028-04-01T16:00:00,+10:00,AEST -2028-09-30T16:00:00,+11:00,AEDT -2029-03-31T16:00:00,+10:00,AEST -2029-10-06T16:00:00,+11:00,AEDT -2030-04-06T16:00:00,+10:00,AEST -2030-10-05T16:00:00,+11:00,AEDT -2031-04-05T16:00:00,+10:00,AEST -2031-10-04T16:00:00,+11:00,AEDT -2032-04-03T16:00:00,+10:00,AEST -2032-10-02T16:00:00,+11:00,AEDT -2033-04-02T16:00:00,+10:00,AEST -2033-10-01T16:00:00,+11:00,AEDT -2034-04-01T16:00:00,+10:00,AEST -2034-09-30T16:00:00,+11:00,AEDT -2035-03-31T16:00:00,+10:00,AEST -2035-10-06T16:00:00,+11:00,AEDT -2036-04-05T16:00:00,+10:00,AEST -2036-10-04T16:00:00,+11:00,AEDT -2037-04-04T16:00:00,+10:00,AEST -2037-10-03T16:00:00,+11:00,AEDT -''' diff --git a/desk/lib/pytz/australia-lindeman.hoon b/desk/lib/pytz/australia-lindeman.hoon deleted file mode 100644 index 56960e8..0000000 --- a/desk/lib/pytz/australia-lindeman.hoon +++ /dev/null @@ -1,26 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:56,LMT -1901-12-13T20:45:52,+10:00,AEST -1916-12-31T16:00:00,+11:00,AEDT -1917-03-24T16:00:00,+10:00,AEST -1941-12-31T16:00:00,+11:00,AEDT -1942-03-28T16:00:00,+10:00,AEST -1942-09-26T16:00:00,+11:00,AEDT -1943-03-27T16:00:00,+10:00,AEST -1943-10-02T16:00:00,+11:00,AEDT -1944-03-25T16:00:00,+10:00,AEST -1971-10-30T16:00:00,+11:00,AEDT -1972-02-26T16:00:00,+10:00,AEST -1989-10-28T16:00:00,+11:00,AEDT -1990-03-03T16:00:00,+10:00,AEST -1990-10-27T16:00:00,+11:00,AEDT -1991-03-02T16:00:00,+10:00,AEST -1991-10-26T16:00:00,+11:00,AEDT -1992-02-29T16:00:00,+10:00,AEST -1992-10-24T16:00:00,+11:00,AEDT -1993-03-06T16:00:00,+10:00,AEST -1993-10-30T16:00:00,+11:00,AEDT -1994-03-05T16:00:00,+10:00,AEST -''' diff --git a/desk/lib/pytz/australia-lord-howe.hoon b/desk/lib/pytz/australia-lord-howe.hoon deleted file mode 100644 index d444caa..0000000 --- a/desk/lib/pytz/australia-lord-howe.hoon +++ /dev/null @@ -1,120 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:36,LMT -1901-12-13T20:45:52,+10:00,AEST -1981-02-28T14:00:00,+10:30,+1030 -1981-10-24T15:30:00,+11:30,+1130 -1982-03-06T14:30:00,+10:30,+1030 -1982-10-30T15:30:00,+11:30,+1130 -1983-03-05T14:30:00,+10:30,+1030 -1983-10-29T15:30:00,+11:30,+1130 -1984-03-03T14:30:00,+10:30,+1030 -1984-10-27T15:30:00,+11:30,+1130 -1985-03-02T14:30:00,+10:30,+1030 -1985-10-26T15:30:00,+11:00,+11 -1986-03-15T15:00:00,+10:30,+1030 -1986-10-18T15:30:00,+11:00,+11 -1987-03-14T15:00:00,+10:30,+1030 -1987-10-24T15:30:00,+11:00,+11 -1988-03-19T15:00:00,+10:30,+1030 -1988-10-29T15:30:00,+11:00,+11 -1989-03-18T15:00:00,+10:30,+1030 -1989-10-28T15:30:00,+11:00,+11 -1990-03-03T15:00:00,+10:30,+1030 -1990-10-27T15:30:00,+11:00,+11 -1991-03-02T15:00:00,+10:30,+1030 -1991-10-26T15:30:00,+11:00,+11 -1992-02-29T15:00:00,+10:30,+1030 -1992-10-24T15:30:00,+11:00,+11 -1993-03-06T15:00:00,+10:30,+1030 -1993-10-30T15:30:00,+11:00,+11 -1994-03-05T15:00:00,+10:30,+1030 -1994-10-29T15:30:00,+11:00,+11 -1995-03-04T15:00:00,+10:30,+1030 -1995-10-28T15:30:00,+11:00,+11 -1996-03-30T15:00:00,+10:30,+1030 -1996-10-26T15:30:00,+11:00,+11 -1997-03-29T15:00:00,+10:30,+1030 -1997-10-25T15:30:00,+11:00,+11 -1998-03-28T15:00:00,+10:30,+1030 -1998-10-24T15:30:00,+11:00,+11 -1999-03-27T15:00:00,+10:30,+1030 -1999-10-30T15:30:00,+11:00,+11 -2000-03-25T15:00:00,+10:30,+1030 -2000-08-26T15:30:00,+11:00,+11 -2001-03-24T15:00:00,+10:30,+1030 -2001-10-27T15:30:00,+11:00,+11 -2002-03-30T15:00:00,+10:30,+1030 -2002-10-26T15:30:00,+11:00,+11 -2003-03-29T15:00:00,+10:30,+1030 -2003-10-25T15:30:00,+11:00,+11 -2004-03-27T15:00:00,+10:30,+1030 -2004-10-30T15:30:00,+11:00,+11 -2005-03-26T15:00:00,+10:30,+1030 -2005-10-29T15:30:00,+11:00,+11 -2006-04-01T15:00:00,+10:30,+1030 -2006-10-28T15:30:00,+11:00,+11 -2007-03-24T15:00:00,+10:30,+1030 -2007-10-27T15:30:00,+11:00,+11 -2008-04-05T15:00:00,+10:30,+1030 -2008-10-04T15:30:00,+11:00,+11 -2009-04-04T15:00:00,+10:30,+1030 -2009-10-03T15:30:00,+11:00,+11 -2010-04-03T15:00:00,+10:30,+1030 -2010-10-02T15:30:00,+11:00,+11 -2011-04-02T15:00:00,+10:30,+1030 -2011-10-01T15:30:00,+11:00,+11 -2012-03-31T15:00:00,+10:30,+1030 -2012-10-06T15:30:00,+11:00,+11 -2013-04-06T15:00:00,+10:30,+1030 -2013-10-05T15:30:00,+11:00,+11 -2014-04-05T15:00:00,+10:30,+1030 -2014-10-04T15:30:00,+11:00,+11 -2015-04-04T15:00:00,+10:30,+1030 -2015-10-03T15:30:00,+11:00,+11 -2016-04-02T15:00:00,+10:30,+1030 -2016-10-01T15:30:00,+11:00,+11 -2017-04-01T15:00:00,+10:30,+1030 -2017-09-30T15:30:00,+11:00,+11 -2018-03-31T15:00:00,+10:30,+1030 -2018-10-06T15:30:00,+11:00,+11 -2019-04-06T15:00:00,+10:30,+1030 -2019-10-05T15:30:00,+11:00,+11 -2020-04-04T15:00:00,+10:30,+1030 -2020-10-03T15:30:00,+11:00,+11 -2021-04-03T15:00:00,+10:30,+1030 -2021-10-02T15:30:00,+11:00,+11 -2022-04-02T15:00:00,+10:30,+1030 -2022-10-01T15:30:00,+11:00,+11 -2023-04-01T15:00:00,+10:30,+1030 -2023-09-30T15:30:00,+11:00,+11 -2024-04-06T15:00:00,+10:30,+1030 -2024-10-05T15:30:00,+11:00,+11 -2025-04-05T15:00:00,+10:30,+1030 -2025-10-04T15:30:00,+11:00,+11 -2026-04-04T15:00:00,+10:30,+1030 -2026-10-03T15:30:00,+11:00,+11 -2027-04-03T15:00:00,+10:30,+1030 -2027-10-02T15:30:00,+11:00,+11 -2028-04-01T15:00:00,+10:30,+1030 -2028-09-30T15:30:00,+11:00,+11 -2029-03-31T15:00:00,+10:30,+1030 -2029-10-06T15:30:00,+11:00,+11 -2030-04-06T15:00:00,+10:30,+1030 -2030-10-05T15:30:00,+11:00,+11 -2031-04-05T15:00:00,+10:30,+1030 -2031-10-04T15:30:00,+11:00,+11 -2032-04-03T15:00:00,+10:30,+1030 -2032-10-02T15:30:00,+11:00,+11 -2033-04-02T15:00:00,+10:30,+1030 -2033-10-01T15:30:00,+11:00,+11 -2034-04-01T15:00:00,+10:30,+1030 -2034-09-30T15:30:00,+11:00,+11 -2035-03-31T15:00:00,+10:30,+1030 -2035-10-06T15:30:00,+11:00,+11 -2036-04-05T15:00:00,+10:30,+1030 -2036-10-04T15:30:00,+11:00,+11 -2037-04-04T15:00:00,+10:30,+1030 -2037-10-03T15:30:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/australia-melbourne.hoon b/desk/lib/pytz/australia-melbourne.hoon deleted file mode 100644 index cc24264..0000000 --- a/desk/lib/pytz/australia-melbourne.hoon +++ /dev/null @@ -1,147 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:40,LMT -1901-12-13T20:45:52,+10:00,AEST -1916-12-31T16:00:00,+11:00,AEDT -1917-03-24T16:00:00,+10:00,AEST -1941-12-31T16:00:00,+11:00,AEDT -1942-03-28T16:00:00,+10:00,AEST -1942-09-26T16:00:00,+11:00,AEDT -1943-03-27T16:00:00,+10:00,AEST -1943-10-02T16:00:00,+11:00,AEDT -1944-03-25T16:00:00,+10:00,AEST -1971-10-30T16:00:00,+11:00,AEDT -1972-02-26T16:00:00,+10:00,AEST -1972-10-28T16:00:00,+11:00,AEDT -1973-03-03T16:00:00,+10:00,AEST -1973-10-27T16:00:00,+11:00,AEDT -1974-03-02T16:00:00,+10:00,AEST -1974-10-26T16:00:00,+11:00,AEDT -1975-03-01T16:00:00,+10:00,AEST -1975-10-25T16:00:00,+11:00,AEDT -1976-03-06T16:00:00,+10:00,AEST -1976-10-30T16:00:00,+11:00,AEDT -1977-03-05T16:00:00,+10:00,AEST -1977-10-29T16:00:00,+11:00,AEDT -1978-03-04T16:00:00,+10:00,AEST -1978-10-28T16:00:00,+11:00,AEDT -1979-03-03T16:00:00,+10:00,AEST -1979-10-27T16:00:00,+11:00,AEDT -1980-03-01T16:00:00,+10:00,AEST -1980-10-25T16:00:00,+11:00,AEDT -1981-02-28T16:00:00,+10:00,AEST -1981-10-24T16:00:00,+11:00,AEDT -1982-03-06T16:00:00,+10:00,AEST -1982-10-30T16:00:00,+11:00,AEDT -1983-03-05T16:00:00,+10:00,AEST -1983-10-29T16:00:00,+11:00,AEDT -1984-03-03T16:00:00,+10:00,AEST -1984-10-27T16:00:00,+11:00,AEDT -1985-03-02T16:00:00,+10:00,AEST -1985-10-26T16:00:00,+11:00,AEDT -1986-03-15T16:00:00,+10:00,AEST -1986-10-18T16:00:00,+11:00,AEDT -1987-03-14T16:00:00,+10:00,AEST -1987-10-17T16:00:00,+11:00,AEDT -1988-03-19T16:00:00,+10:00,AEST -1988-10-29T16:00:00,+11:00,AEDT -1989-03-18T16:00:00,+10:00,AEST -1989-10-28T16:00:00,+11:00,AEDT -1990-03-17T16:00:00,+10:00,AEST -1990-10-27T16:00:00,+11:00,AEDT -1991-03-02T16:00:00,+10:00,AEST -1991-10-26T16:00:00,+11:00,AEDT -1992-02-29T16:00:00,+10:00,AEST -1992-10-24T16:00:00,+11:00,AEDT -1993-03-06T16:00:00,+10:00,AEST -1993-10-30T16:00:00,+11:00,AEDT -1994-03-05T16:00:00,+10:00,AEST -1994-10-29T16:00:00,+11:00,AEDT -1995-03-25T16:00:00,+10:00,AEST -1995-10-28T16:00:00,+11:00,AEDT -1996-03-30T16:00:00,+10:00,AEST -1996-10-26T16:00:00,+11:00,AEDT -1997-03-29T16:00:00,+10:00,AEST -1997-10-25T16:00:00,+11:00,AEDT -1998-03-28T16:00:00,+10:00,AEST -1998-10-24T16:00:00,+11:00,AEDT -1999-03-27T16:00:00,+10:00,AEST -1999-10-30T16:00:00,+11:00,AEDT -2000-03-25T16:00:00,+10:00,AEST -2000-08-26T16:00:00,+11:00,AEDT -2001-03-24T16:00:00,+10:00,AEST -2001-10-27T16:00:00,+11:00,AEDT -2002-03-30T16:00:00,+10:00,AEST -2002-10-26T16:00:00,+11:00,AEDT -2003-03-29T16:00:00,+10:00,AEST -2003-10-25T16:00:00,+11:00,AEDT -2004-03-27T16:00:00,+10:00,AEST -2004-10-30T16:00:00,+11:00,AEDT -2005-03-26T16:00:00,+10:00,AEST -2005-10-29T16:00:00,+11:00,AEDT -2006-04-01T16:00:00,+10:00,AEST -2006-10-28T16:00:00,+11:00,AEDT -2007-03-24T16:00:00,+10:00,AEST -2007-10-27T16:00:00,+11:00,AEDT -2008-04-05T16:00:00,+10:00,AEST -2008-10-04T16:00:00,+11:00,AEDT -2009-04-04T16:00:00,+10:00,AEST -2009-10-03T16:00:00,+11:00,AEDT -2010-04-03T16:00:00,+10:00,AEST -2010-10-02T16:00:00,+11:00,AEDT -2011-04-02T16:00:00,+10:00,AEST -2011-10-01T16:00:00,+11:00,AEDT -2012-03-31T16:00:00,+10:00,AEST -2012-10-06T16:00:00,+11:00,AEDT -2013-04-06T16:00:00,+10:00,AEST -2013-10-05T16:00:00,+11:00,AEDT -2014-04-05T16:00:00,+10:00,AEST -2014-10-04T16:00:00,+11:00,AEDT -2015-04-04T16:00:00,+10:00,AEST -2015-10-03T16:00:00,+11:00,AEDT -2016-04-02T16:00:00,+10:00,AEST -2016-10-01T16:00:00,+11:00,AEDT -2017-04-01T16:00:00,+10:00,AEST -2017-09-30T16:00:00,+11:00,AEDT -2018-03-31T16:00:00,+10:00,AEST -2018-10-06T16:00:00,+11:00,AEDT -2019-04-06T16:00:00,+10:00,AEST -2019-10-05T16:00:00,+11:00,AEDT -2020-04-04T16:00:00,+10:00,AEST -2020-10-03T16:00:00,+11:00,AEDT -2021-04-03T16:00:00,+10:00,AEST -2021-10-02T16:00:00,+11:00,AEDT -2022-04-02T16:00:00,+10:00,AEST -2022-10-01T16:00:00,+11:00,AEDT -2023-04-01T16:00:00,+10:00,AEST -2023-09-30T16:00:00,+11:00,AEDT -2024-04-06T16:00:00,+10:00,AEST -2024-10-05T16:00:00,+11:00,AEDT -2025-04-05T16:00:00,+10:00,AEST -2025-10-04T16:00:00,+11:00,AEDT -2026-04-04T16:00:00,+10:00,AEST -2026-10-03T16:00:00,+11:00,AEDT -2027-04-03T16:00:00,+10:00,AEST -2027-10-02T16:00:00,+11:00,AEDT -2028-04-01T16:00:00,+10:00,AEST -2028-09-30T16:00:00,+11:00,AEDT -2029-03-31T16:00:00,+10:00,AEST -2029-10-06T16:00:00,+11:00,AEDT -2030-04-06T16:00:00,+10:00,AEST -2030-10-05T16:00:00,+11:00,AEDT -2031-04-05T16:00:00,+10:00,AEST -2031-10-04T16:00:00,+11:00,AEDT -2032-04-03T16:00:00,+10:00,AEST -2032-10-02T16:00:00,+11:00,AEDT -2033-04-02T16:00:00,+10:00,AEST -2033-10-01T16:00:00,+11:00,AEDT -2034-04-01T16:00:00,+10:00,AEST -2034-09-30T16:00:00,+11:00,AEDT -2035-03-31T16:00:00,+10:00,AEST -2035-10-06T16:00:00,+11:00,AEDT -2036-04-05T16:00:00,+10:00,AEST -2036-10-04T16:00:00,+11:00,AEDT -2037-04-04T16:00:00,+10:00,AEST -2037-10-03T16:00:00,+11:00,AEDT -''' diff --git a/desk/lib/pytz/australia-perth.hoon b/desk/lib/pytz/australia-perth.hoon deleted file mode 100644 index 1aa946d..0000000 --- a/desk/lib/pytz/australia-perth.hoon +++ /dev/null @@ -1,24 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:43,LMT -1901-12-13T20:45:52,+08:00,AWST -1916-12-31T18:00:00,+09:00,AWDT -1917-03-24T18:00:00,+08:00,AWST -1941-12-31T18:00:00,+09:00,AWDT -1942-03-28T18:00:00,+08:00,AWST -1942-09-26T18:00:00,+09:00,AWDT -1943-03-27T18:00:00,+08:00,AWST -1974-10-26T18:00:00,+09:00,AWDT -1975-03-01T18:00:00,+08:00,AWST -1983-10-29T18:00:00,+09:00,AWDT -1984-03-03T18:00:00,+08:00,AWST -1991-11-16T18:00:00,+09:00,AWDT -1992-02-29T18:00:00,+08:00,AWST -2006-12-02T18:00:00,+09:00,AWDT -2007-03-24T18:00:00,+08:00,AWST -2007-10-27T18:00:00,+09:00,AWDT -2008-03-29T18:00:00,+08:00,AWST -2008-10-25T18:00:00,+09:00,AWDT -2009-03-28T18:00:00,+08:00,AWST -''' diff --git a/desk/lib/pytz/australia-sydney.hoon b/desk/lib/pytz/australia-sydney.hoon deleted file mode 100644 index 4556aa2..0000000 --- a/desk/lib/pytz/australia-sydney.hoon +++ /dev/null @@ -1,147 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:05,LMT -1901-12-13T20:45:52,+10:00,AEST -1916-12-31T16:00:00,+11:00,AEDT -1917-03-24T16:00:00,+10:00,AEST -1941-12-31T16:00:00,+11:00,AEDT -1942-03-28T16:00:00,+10:00,AEST -1942-09-26T16:00:00,+11:00,AEDT -1943-03-27T16:00:00,+10:00,AEST -1943-10-02T16:00:00,+11:00,AEDT -1944-03-25T16:00:00,+10:00,AEST -1971-10-30T16:00:00,+11:00,AEDT -1972-02-26T16:00:00,+10:00,AEST -1972-10-28T16:00:00,+11:00,AEDT -1973-03-03T16:00:00,+10:00,AEST -1973-10-27T16:00:00,+11:00,AEDT -1974-03-02T16:00:00,+10:00,AEST -1974-10-26T16:00:00,+11:00,AEDT -1975-03-01T16:00:00,+10:00,AEST -1975-10-25T16:00:00,+11:00,AEDT -1976-03-06T16:00:00,+10:00,AEST -1976-10-30T16:00:00,+11:00,AEDT -1977-03-05T16:00:00,+10:00,AEST -1977-10-29T16:00:00,+11:00,AEDT -1978-03-04T16:00:00,+10:00,AEST -1978-10-28T16:00:00,+11:00,AEDT -1979-03-03T16:00:00,+10:00,AEST -1979-10-27T16:00:00,+11:00,AEDT -1980-03-01T16:00:00,+10:00,AEST -1980-10-25T16:00:00,+11:00,AEDT -1981-02-28T16:00:00,+10:00,AEST -1981-10-24T16:00:00,+11:00,AEDT -1982-04-03T16:00:00,+10:00,AEST -1982-10-30T16:00:00,+11:00,AEDT -1983-03-05T16:00:00,+10:00,AEST -1983-10-29T16:00:00,+11:00,AEDT -1984-03-03T16:00:00,+10:00,AEST -1984-10-27T16:00:00,+11:00,AEDT -1985-03-02T16:00:00,+10:00,AEST -1985-10-26T16:00:00,+11:00,AEDT -1986-03-15T16:00:00,+10:00,AEST -1986-10-18T16:00:00,+11:00,AEDT -1987-03-14T16:00:00,+10:00,AEST -1987-10-24T16:00:00,+11:00,AEDT -1988-03-19T16:00:00,+10:00,AEST -1988-10-29T16:00:00,+11:00,AEDT -1989-03-18T16:00:00,+10:00,AEST -1989-10-28T16:00:00,+11:00,AEDT -1990-03-03T16:00:00,+10:00,AEST -1990-10-27T16:00:00,+11:00,AEDT -1991-03-02T16:00:00,+10:00,AEST -1991-10-26T16:00:00,+11:00,AEDT -1992-02-29T16:00:00,+10:00,AEST -1992-10-24T16:00:00,+11:00,AEDT -1993-03-06T16:00:00,+10:00,AEST -1993-10-30T16:00:00,+11:00,AEDT -1994-03-05T16:00:00,+10:00,AEST -1994-10-29T16:00:00,+11:00,AEDT -1995-03-04T16:00:00,+10:00,AEST -1995-10-28T16:00:00,+11:00,AEDT -1996-03-30T16:00:00,+10:00,AEST -1996-10-26T16:00:00,+11:00,AEDT -1997-03-29T16:00:00,+10:00,AEST -1997-10-25T16:00:00,+11:00,AEDT -1998-03-28T16:00:00,+10:00,AEST -1998-10-24T16:00:00,+11:00,AEDT -1999-03-27T16:00:00,+10:00,AEST -1999-10-30T16:00:00,+11:00,AEDT -2000-03-25T16:00:00,+10:00,AEST -2000-08-26T16:00:00,+11:00,AEDT -2001-03-24T16:00:00,+10:00,AEST -2001-10-27T16:00:00,+11:00,AEDT -2002-03-30T16:00:00,+10:00,AEST -2002-10-26T16:00:00,+11:00,AEDT -2003-03-29T16:00:00,+10:00,AEST -2003-10-25T16:00:00,+11:00,AEDT -2004-03-27T16:00:00,+10:00,AEST -2004-10-30T16:00:00,+11:00,AEDT -2005-03-26T16:00:00,+10:00,AEST -2005-10-29T16:00:00,+11:00,AEDT -2006-04-01T16:00:00,+10:00,AEST -2006-10-28T16:00:00,+11:00,AEDT -2007-03-24T16:00:00,+10:00,AEST -2007-10-27T16:00:00,+11:00,AEDT -2008-04-05T16:00:00,+10:00,AEST -2008-10-04T16:00:00,+11:00,AEDT -2009-04-04T16:00:00,+10:00,AEST -2009-10-03T16:00:00,+11:00,AEDT -2010-04-03T16:00:00,+10:00,AEST -2010-10-02T16:00:00,+11:00,AEDT -2011-04-02T16:00:00,+10:00,AEST -2011-10-01T16:00:00,+11:00,AEDT -2012-03-31T16:00:00,+10:00,AEST -2012-10-06T16:00:00,+11:00,AEDT -2013-04-06T16:00:00,+10:00,AEST -2013-10-05T16:00:00,+11:00,AEDT -2014-04-05T16:00:00,+10:00,AEST -2014-10-04T16:00:00,+11:00,AEDT -2015-04-04T16:00:00,+10:00,AEST -2015-10-03T16:00:00,+11:00,AEDT -2016-04-02T16:00:00,+10:00,AEST -2016-10-01T16:00:00,+11:00,AEDT -2017-04-01T16:00:00,+10:00,AEST -2017-09-30T16:00:00,+11:00,AEDT -2018-03-31T16:00:00,+10:00,AEST -2018-10-06T16:00:00,+11:00,AEDT -2019-04-06T16:00:00,+10:00,AEST -2019-10-05T16:00:00,+11:00,AEDT -2020-04-04T16:00:00,+10:00,AEST -2020-10-03T16:00:00,+11:00,AEDT -2021-04-03T16:00:00,+10:00,AEST -2021-10-02T16:00:00,+11:00,AEDT -2022-04-02T16:00:00,+10:00,AEST -2022-10-01T16:00:00,+11:00,AEDT -2023-04-01T16:00:00,+10:00,AEST -2023-09-30T16:00:00,+11:00,AEDT -2024-04-06T16:00:00,+10:00,AEST -2024-10-05T16:00:00,+11:00,AEDT -2025-04-05T16:00:00,+10:00,AEST -2025-10-04T16:00:00,+11:00,AEDT -2026-04-04T16:00:00,+10:00,AEST -2026-10-03T16:00:00,+11:00,AEDT -2027-04-03T16:00:00,+10:00,AEST -2027-10-02T16:00:00,+11:00,AEDT -2028-04-01T16:00:00,+10:00,AEST -2028-09-30T16:00:00,+11:00,AEDT -2029-03-31T16:00:00,+10:00,AEST -2029-10-06T16:00:00,+11:00,AEDT -2030-04-06T16:00:00,+10:00,AEST -2030-10-05T16:00:00,+11:00,AEDT -2031-04-05T16:00:00,+10:00,AEST -2031-10-04T16:00:00,+11:00,AEDT -2032-04-03T16:00:00,+10:00,AEST -2032-10-02T16:00:00,+11:00,AEDT -2033-04-02T16:00:00,+10:00,AEST -2033-10-01T16:00:00,+11:00,AEDT -2034-04-01T16:00:00,+10:00,AEST -2034-09-30T16:00:00,+11:00,AEDT -2035-03-31T16:00:00,+10:00,AEST -2035-10-06T16:00:00,+11:00,AEDT -2036-04-05T16:00:00,+10:00,AEST -2036-10-04T16:00:00,+11:00,AEDT -2037-04-04T16:00:00,+10:00,AEST -2037-10-03T16:00:00,+11:00,AEDT -''' diff --git a/desk/lib/pytz/australia-yancowinna.hoon b/desk/lib/pytz/australia-yancowinna.hoon deleted file mode 100644 index a55e0a9..0000000 --- a/desk/lib/pytz/australia-yancowinna.hoon +++ /dev/null @@ -1,147 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:26,LMT -1901-12-13T20:45:52,+09:30,ACST -1916-12-31T16:30:00,+10:30,ACDT -1917-03-24T16:30:00,+09:30,ACST -1941-12-31T16:30:00,+10:30,ACDT -1942-03-28T16:30:00,+09:30,ACST -1942-09-26T16:30:00,+10:30,ACDT -1943-03-27T16:30:00,+09:30,ACST -1943-10-02T16:30:00,+10:30,ACDT -1944-03-25T16:30:00,+09:30,ACST -1971-10-30T16:30:00,+10:30,ACDT -1972-02-26T16:30:00,+09:30,ACST -1972-10-28T16:30:00,+10:30,ACDT -1973-03-03T16:30:00,+09:30,ACST -1973-10-27T16:30:00,+10:30,ACDT -1974-03-02T16:30:00,+09:30,ACST -1974-10-26T16:30:00,+10:30,ACDT -1975-03-01T16:30:00,+09:30,ACST -1975-10-25T16:30:00,+10:30,ACDT -1976-03-06T16:30:00,+09:30,ACST -1976-10-30T16:30:00,+10:30,ACDT -1977-03-05T16:30:00,+09:30,ACST -1977-10-29T16:30:00,+10:30,ACDT -1978-03-04T16:30:00,+09:30,ACST -1978-10-28T16:30:00,+10:30,ACDT -1979-03-03T16:30:00,+09:30,ACST -1979-10-27T16:30:00,+10:30,ACDT -1980-03-01T16:30:00,+09:30,ACST -1980-10-25T16:30:00,+10:30,ACDT -1981-02-28T16:30:00,+09:30,ACST -1981-10-24T16:30:00,+10:30,ACDT -1982-04-03T16:30:00,+09:30,ACST -1982-10-30T16:30:00,+10:30,ACDT -1983-03-05T16:30:00,+09:30,ACST -1983-10-29T16:30:00,+10:30,ACDT -1984-03-03T16:30:00,+09:30,ACST -1984-10-27T16:30:00,+10:30,ACDT -1985-03-02T16:30:00,+09:30,ACST -1985-10-26T16:30:00,+10:30,ACDT -1986-03-15T16:30:00,+09:30,ACST -1986-10-18T16:30:00,+10:30,ACDT -1987-03-14T16:30:00,+09:30,ACST -1987-10-24T16:30:00,+10:30,ACDT -1988-03-19T16:30:00,+09:30,ACST -1988-10-29T16:30:00,+10:30,ACDT -1989-03-18T16:30:00,+09:30,ACST -1989-10-28T16:30:00,+10:30,ACDT -1990-03-03T16:30:00,+09:30,ACST -1990-10-27T16:30:00,+10:30,ACDT -1991-03-02T16:30:00,+09:30,ACST -1991-10-26T16:30:00,+10:30,ACDT -1992-02-29T16:30:00,+09:30,ACST -1992-10-24T16:30:00,+10:30,ACDT -1993-03-06T16:30:00,+09:30,ACST -1993-10-30T16:30:00,+10:30,ACDT -1994-03-05T16:30:00,+09:30,ACST -1994-10-29T16:30:00,+10:30,ACDT -1995-03-04T16:30:00,+09:30,ACST -1995-10-28T16:30:00,+10:30,ACDT -1996-03-30T16:30:00,+09:30,ACST -1996-10-26T16:30:00,+10:30,ACDT -1997-03-29T16:30:00,+09:30,ACST -1997-10-25T16:30:00,+10:30,ACDT -1998-03-28T16:30:00,+09:30,ACST -1998-10-24T16:30:00,+10:30,ACDT -1999-03-27T16:30:00,+09:30,ACST -1999-10-30T16:30:00,+10:30,ACDT -2000-03-25T16:30:00,+09:30,ACST -2000-10-28T16:30:00,+10:30,ACDT -2001-03-24T16:30:00,+09:30,ACST -2001-10-27T16:30:00,+10:30,ACDT -2002-03-30T16:30:00,+09:30,ACST -2002-10-26T16:30:00,+10:30,ACDT -2003-03-29T16:30:00,+09:30,ACST -2003-10-25T16:30:00,+10:30,ACDT -2004-03-27T16:30:00,+09:30,ACST -2004-10-30T16:30:00,+10:30,ACDT -2005-03-26T16:30:00,+09:30,ACST -2005-10-29T16:30:00,+10:30,ACDT -2006-04-01T16:30:00,+09:30,ACST -2006-10-28T16:30:00,+10:30,ACDT -2007-03-24T16:30:00,+09:30,ACST -2007-10-27T16:30:00,+10:30,ACDT -2008-04-05T16:30:00,+09:30,ACST -2008-10-04T16:30:00,+10:30,ACDT -2009-04-04T16:30:00,+09:30,ACST -2009-10-03T16:30:00,+10:30,ACDT -2010-04-03T16:30:00,+09:30,ACST -2010-10-02T16:30:00,+10:30,ACDT -2011-04-02T16:30:00,+09:30,ACST -2011-10-01T16:30:00,+10:30,ACDT -2012-03-31T16:30:00,+09:30,ACST -2012-10-06T16:30:00,+10:30,ACDT -2013-04-06T16:30:00,+09:30,ACST -2013-10-05T16:30:00,+10:30,ACDT -2014-04-05T16:30:00,+09:30,ACST -2014-10-04T16:30:00,+10:30,ACDT -2015-04-04T16:30:00,+09:30,ACST -2015-10-03T16:30:00,+10:30,ACDT -2016-04-02T16:30:00,+09:30,ACST -2016-10-01T16:30:00,+10:30,ACDT -2017-04-01T16:30:00,+09:30,ACST -2017-09-30T16:30:00,+10:30,ACDT -2018-03-31T16:30:00,+09:30,ACST -2018-10-06T16:30:00,+10:30,ACDT -2019-04-06T16:30:00,+09:30,ACST -2019-10-05T16:30:00,+10:30,ACDT -2020-04-04T16:30:00,+09:30,ACST -2020-10-03T16:30:00,+10:30,ACDT -2021-04-03T16:30:00,+09:30,ACST -2021-10-02T16:30:00,+10:30,ACDT -2022-04-02T16:30:00,+09:30,ACST -2022-10-01T16:30:00,+10:30,ACDT -2023-04-01T16:30:00,+09:30,ACST -2023-09-30T16:30:00,+10:30,ACDT -2024-04-06T16:30:00,+09:30,ACST -2024-10-05T16:30:00,+10:30,ACDT -2025-04-05T16:30:00,+09:30,ACST -2025-10-04T16:30:00,+10:30,ACDT -2026-04-04T16:30:00,+09:30,ACST -2026-10-03T16:30:00,+10:30,ACDT -2027-04-03T16:30:00,+09:30,ACST -2027-10-02T16:30:00,+10:30,ACDT -2028-04-01T16:30:00,+09:30,ACST -2028-09-30T16:30:00,+10:30,ACDT -2029-03-31T16:30:00,+09:30,ACST -2029-10-06T16:30:00,+10:30,ACDT -2030-04-06T16:30:00,+09:30,ACST -2030-10-05T16:30:00,+10:30,ACDT -2031-04-05T16:30:00,+09:30,ACST -2031-10-04T16:30:00,+10:30,ACDT -2032-04-03T16:30:00,+09:30,ACST -2032-10-02T16:30:00,+10:30,ACDT -2033-04-02T16:30:00,+09:30,ACST -2033-10-01T16:30:00,+10:30,ACDT -2034-04-01T16:30:00,+09:30,ACST -2034-09-30T16:30:00,+10:30,ACDT -2035-03-31T16:30:00,+09:30,ACST -2035-10-06T16:30:00,+10:30,ACDT -2036-04-05T16:30:00,+09:30,ACST -2036-10-04T16:30:00,+10:30,ACDT -2037-04-04T16:30:00,+09:30,ACST -2037-10-03T16:30:00,+10:30,ACDT -''' diff --git a/desk/lib/pytz/etc-gmt--0.hoon b/desk/lib/pytz/etc-gmt--0.hoon deleted file mode 100644 index c8938e6..0000000 --- a/desk/lib/pytz/etc-gmt--0.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/etc-gmt--1.hoon b/desk/lib/pytz/etc-gmt--1.hoon deleted file mode 100644 index d11c9aa..0000000 --- a/desk/lib/pytz/etc-gmt--1.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-01:00,-01 -''' diff --git a/desk/lib/pytz/etc-gmt--10.hoon b/desk/lib/pytz/etc-gmt--10.hoon deleted file mode 100644 index b2e143c..0000000 --- a/desk/lib/pytz/etc-gmt--10.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-10:00,-10 -''' diff --git a/desk/lib/pytz/etc-gmt--11.hoon b/desk/lib/pytz/etc-gmt--11.hoon deleted file mode 100644 index d3e038c..0000000 --- a/desk/lib/pytz/etc-gmt--11.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-11:00,-11 -''' diff --git a/desk/lib/pytz/etc-gmt--12.hoon b/desk/lib/pytz/etc-gmt--12.hoon deleted file mode 100644 index d14ee85..0000000 --- a/desk/lib/pytz/etc-gmt--12.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-12:00,-12 -''' diff --git a/desk/lib/pytz/etc-gmt--2.hoon b/desk/lib/pytz/etc-gmt--2.hoon deleted file mode 100644 index 28da8ae..0000000 --- a/desk/lib/pytz/etc-gmt--2.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-02:00,-02 -''' diff --git a/desk/lib/pytz/etc-gmt--3.hoon b/desk/lib/pytz/etc-gmt--3.hoon deleted file mode 100644 index 7d16a68..0000000 --- a/desk/lib/pytz/etc-gmt--3.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-03:00,-03 -''' diff --git a/desk/lib/pytz/etc-gmt--4.hoon b/desk/lib/pytz/etc-gmt--4.hoon deleted file mode 100644 index 3c96df9..0000000 --- a/desk/lib/pytz/etc-gmt--4.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-04:00,-04 -''' diff --git a/desk/lib/pytz/etc-gmt--5.hoon b/desk/lib/pytz/etc-gmt--5.hoon deleted file mode 100644 index bf95d73..0000000 --- a/desk/lib/pytz/etc-gmt--5.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-05:00,-05 -''' diff --git a/desk/lib/pytz/etc-gmt--6.hoon b/desk/lib/pytz/etc-gmt--6.hoon deleted file mode 100644 index 9172d9c..0000000 --- a/desk/lib/pytz/etc-gmt--6.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-06:00,-06 -''' diff --git a/desk/lib/pytz/etc-gmt--7.hoon b/desk/lib/pytz/etc-gmt--7.hoon deleted file mode 100644 index 6ee0463..0000000 --- a/desk/lib/pytz/etc-gmt--7.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-07:00,-07 -''' diff --git a/desk/lib/pytz/etc-gmt--8.hoon b/desk/lib/pytz/etc-gmt--8.hoon deleted file mode 100644 index d6ddf2e..0000000 --- a/desk/lib/pytz/etc-gmt--8.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-08:00,-08 -''' diff --git a/desk/lib/pytz/etc-gmt--9.hoon b/desk/lib/pytz/etc-gmt--9.hoon deleted file mode 100644 index 908b1d0..0000000 --- a/desk/lib/pytz/etc-gmt--9.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,-09:00,-09 -''' diff --git a/desk/lib/pytz/etc-gmt-0.hoon b/desk/lib/pytz/etc-gmt-0.hoon deleted file mode 100644 index c8938e6..0000000 --- a/desk/lib/pytz/etc-gmt-0.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/etc-gmt-1.hoon b/desk/lib/pytz/etc-gmt-1.hoon deleted file mode 100644 index 05e1b1a..0000000 --- a/desk/lib/pytz/etc-gmt-1.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:00,+01 -''' diff --git a/desk/lib/pytz/etc-gmt-10.hoon b/desk/lib/pytz/etc-gmt-10.hoon deleted file mode 100644 index 0b98b8f..0000000 --- a/desk/lib/pytz/etc-gmt-10.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:00,+10 -''' diff --git a/desk/lib/pytz/etc-gmt-11.hoon b/desk/lib/pytz/etc-gmt-11.hoon deleted file mode 100644 index 44077a7..0000000 --- a/desk/lib/pytz/etc-gmt-11.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/etc-gmt-12.hoon b/desk/lib/pytz/etc-gmt-12.hoon deleted file mode 100644 index 9493e5d..0000000 --- a/desk/lib/pytz/etc-gmt-12.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:00,+12 -''' diff --git a/desk/lib/pytz/etc-gmt-13.hoon b/desk/lib/pytz/etc-gmt-13.hoon deleted file mode 100644 index 059048f..0000000 --- a/desk/lib/pytz/etc-gmt-13.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+13:00,+13 -''' diff --git a/desk/lib/pytz/etc-gmt-14.hoon b/desk/lib/pytz/etc-gmt-14.hoon deleted file mode 100644 index 5d7818d..0000000 --- a/desk/lib/pytz/etc-gmt-14.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+14:00,+14 -''' diff --git a/desk/lib/pytz/etc-gmt-2.hoon b/desk/lib/pytz/etc-gmt-2.hoon deleted file mode 100644 index 7664476..0000000 --- a/desk/lib/pytz/etc-gmt-2.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:00,+02 -''' diff --git a/desk/lib/pytz/etc-gmt-3.hoon b/desk/lib/pytz/etc-gmt-3.hoon deleted file mode 100644 index 43a137b..0000000 --- a/desk/lib/pytz/etc-gmt-3.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/etc-gmt-4.hoon b/desk/lib/pytz/etc-gmt-4.hoon deleted file mode 100644 index 385782a..0000000 --- a/desk/lib/pytz/etc-gmt-4.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:00,+04 -''' diff --git a/desk/lib/pytz/etc-gmt-5.hoon b/desk/lib/pytz/etc-gmt-5.hoon deleted file mode 100644 index 6ac45c9..0000000 --- a/desk/lib/pytz/etc-gmt-5.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/etc-gmt-6.hoon b/desk/lib/pytz/etc-gmt-6.hoon deleted file mode 100644 index 4eaeca9..0000000 --- a/desk/lib/pytz/etc-gmt-6.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:00,+06 -''' diff --git a/desk/lib/pytz/etc-gmt-7.hoon b/desk/lib/pytz/etc-gmt-7.hoon deleted file mode 100644 index d7058b1..0000000 --- a/desk/lib/pytz/etc-gmt-7.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:00,+07 -''' diff --git a/desk/lib/pytz/etc-gmt-8.hoon b/desk/lib/pytz/etc-gmt-8.hoon deleted file mode 100644 index afda201..0000000 --- a/desk/lib/pytz/etc-gmt-8.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+08:00,+08 -''' diff --git a/desk/lib/pytz/etc-gmt-9.hoon b/desk/lib/pytz/etc-gmt-9.hoon deleted file mode 100644 index e3dd310..0000000 --- a/desk/lib/pytz/etc-gmt-9.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:00,+09 -''' diff --git a/desk/lib/pytz/etc-gmt.hoon b/desk/lib/pytz/etc-gmt.hoon deleted file mode 100644 index c8938e6..0000000 --- a/desk/lib/pytz/etc-gmt.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/etc-gmt0.hoon b/desk/lib/pytz/etc-gmt0.hoon deleted file mode 100644 index c8938e6..0000000 --- a/desk/lib/pytz/etc-gmt0.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/etc-greenwich.hoon b/desk/lib/pytz/etc-greenwich.hoon deleted file mode 100644 index c8938e6..0000000 --- a/desk/lib/pytz/etc-greenwich.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/etc-uct.hoon b/desk/lib/pytz/etc-uct.hoon deleted file mode 100644 index b16b6f1..0000000 --- a/desk/lib/pytz/etc-uct.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,UTC -''' diff --git a/desk/lib/pytz/etc-universal.hoon b/desk/lib/pytz/etc-universal.hoon deleted file mode 100644 index b16b6f1..0000000 --- a/desk/lib/pytz/etc-universal.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,UTC -''' diff --git a/desk/lib/pytz/etc-utc.hoon b/desk/lib/pytz/etc-utc.hoon deleted file mode 100644 index b16b6f1..0000000 --- a/desk/lib/pytz/etc-utc.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,UTC -''' diff --git a/desk/lib/pytz/etc-zulu.hoon b/desk/lib/pytz/etc-zulu.hoon deleted file mode 100644 index b16b6f1..0000000 --- a/desk/lib/pytz/etc-zulu.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,UTC -''' diff --git a/desk/lib/pytz/europe-amsterdam.hoon b/desk/lib/pytz/europe-amsterdam.hoon deleted file mode 100644 index fe93cfe..0000000 --- a/desk/lib/pytz/europe-amsterdam.hoon +++ /dev/null @@ -1,185 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:20,LMT -1901-12-13T20:45:52,+00:20,AMT -1916-04-30T23:40:28,+01:20,NST -1916-09-30T22:40:28,+00:20,AMT -1917-04-16T01:40:28,+01:20,NST -1917-09-17T01:40:28,+00:20,AMT -1918-04-01T01:40:28,+01:20,NST -1918-09-30T01:40:28,+00:20,AMT -1919-04-07T01:40:28,+01:20,NST -1919-09-29T01:40:28,+00:20,AMT -1920-04-05T01:40:28,+01:20,NST -1920-09-27T01:40:28,+00:20,AMT -1921-04-04T01:40:28,+01:20,NST -1921-09-26T01:40:28,+00:20,AMT -1922-03-26T01:40:28,+01:20,NST -1922-10-08T01:40:28,+00:20,AMT -1923-06-01T01:40:28,+01:20,NST -1923-10-07T01:40:28,+00:20,AMT -1924-03-30T01:40:28,+01:20,NST -1924-10-05T01:40:28,+00:20,AMT -1925-06-05T01:40:28,+01:20,NST -1925-10-04T01:40:28,+00:20,AMT -1926-05-15T01:40:28,+01:20,NST -1926-10-03T01:40:28,+00:20,AMT -1927-05-15T01:40:28,+01:20,NST -1927-10-02T01:40:28,+00:20,AMT -1928-05-15T01:40:28,+01:20,NST -1928-10-07T01:40:28,+00:20,AMT -1929-05-15T01:40:28,+01:20,NST -1929-10-06T01:40:28,+00:20,AMT -1930-05-15T01:40:28,+01:20,NST -1930-10-05T01:40:28,+00:20,AMT -1931-05-15T01:40:28,+01:20,NST -1931-10-04T01:40:28,+00:20,AMT -1932-05-22T01:40:28,+01:20,NST -1932-10-02T01:40:28,+00:20,AMT -1933-05-15T01:40:28,+01:20,NST -1933-10-08T01:40:28,+00:20,AMT -1934-05-15T01:40:28,+01:20,NST -1934-10-07T01:40:28,+00:20,AMT -1935-05-15T01:40:28,+01:20,NST -1935-10-06T01:40:28,+00:20,AMT -1936-05-15T01:40:28,+01:20,NST -1936-10-04T01:40:28,+00:20,AMT -1937-05-22T01:40:28,+01:20,NST -1937-06-30T22:40:28,+01:20,+0120 -1937-10-03T01:40:00,+00:20,+0020 -1938-05-15T01:40:00,+01:20,+0120 -1938-10-02T01:40:00,+00:20,+0020 -1939-05-15T01:40:00,+01:20,+0120 -1939-10-08T01:40:00,+00:20,+0020 -1940-05-15T23:40:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-16T01:00:00,+01:00,CET -1977-04-03T01:00:00,+02:00,CEST -1977-09-25T01:00:00,+01:00,CET -1978-04-02T01:00:00,+02:00,CEST -1978-10-01T01:00:00,+01:00,CET -1979-04-01T01:00:00,+02:00,CEST -1979-09-30T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-andorra.hoon b/desk/lib/pytz/europe-andorra.hoon deleted file mode 100644 index d8001ba..0000000 --- a/desk/lib/pytz/europe-andorra.hoon +++ /dev/null @@ -1,113 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:06,LMT -1901-12-13T20:45:52,+00:00,WET -1946-09-30T00:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-astrakhan.hoon b/desk/lib/pytz/europe-astrakhan.hoon deleted file mode 100644 index 2ae5cdb..0000000 --- a/desk/lib/pytz/europe-astrakhan.hoon +++ /dev/null @@ -1,69 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:12,LMT -1924-04-30T20:47:48,+03:00,+03 -1930-06-20T21:00:00,+04:00,+04 -1981-03-31T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+04:00,+04 -1982-03-31T20:00:00,+05:00,+05 -1982-09-30T19:00:00,+04:00,+04 -1983-03-31T20:00:00,+05:00,+05 -1983-09-30T19:00:00,+04:00,+04 -1984-03-31T20:00:00,+05:00,+05 -1984-09-29T22:00:00,+04:00,+04 -1985-03-30T22:00:00,+05:00,+05 -1985-09-28T22:00:00,+04:00,+04 -1986-03-29T22:00:00,+05:00,+05 -1986-09-27T22:00:00,+04:00,+04 -1987-03-28T22:00:00,+05:00,+05 -1987-09-26T22:00:00,+04:00,+04 -1988-03-26T22:00:00,+05:00,+05 -1988-09-24T22:00:00,+04:00,+04 -1989-03-25T22:00:00,+04:00,+04 -1989-09-23T23:00:00,+03:00,+03 -1990-03-24T23:00:00,+04:00,+04 -1990-09-29T23:00:00,+03:00,+03 -1991-03-30T23:00:00,+04:00,+04 -1992-03-28T22:00:00,+04:00,+04 -1992-09-26T23:00:00,+03:00,+03 -1993-03-27T23:00:00,+04:00,+04 -1993-09-25T23:00:00,+03:00,+03 -1994-03-26T23:00:00,+04:00,+04 -1994-09-24T23:00:00,+03:00,+03 -1995-03-25T23:00:00,+04:00,+04 -1995-09-23T23:00:00,+03:00,+03 -1996-03-30T23:00:00,+04:00,+04 -1996-10-26T23:00:00,+03:00,+03 -1997-03-29T23:00:00,+04:00,+04 -1997-10-25T23:00:00,+03:00,+03 -1998-03-28T23:00:00,+04:00,+04 -1998-10-24T23:00:00,+03:00,+03 -1999-03-27T23:00:00,+04:00,+04 -1999-10-30T23:00:00,+03:00,+03 -2000-03-25T23:00:00,+04:00,+04 -2000-10-28T23:00:00,+03:00,+03 -2001-03-24T23:00:00,+04:00,+04 -2001-10-27T23:00:00,+03:00,+03 -2002-03-30T23:00:00,+04:00,+04 -2002-10-26T23:00:00,+03:00,+03 -2003-03-29T23:00:00,+04:00,+04 -2003-10-25T23:00:00,+03:00,+03 -2004-03-27T23:00:00,+04:00,+04 -2004-10-30T23:00:00,+03:00,+03 -2005-03-26T23:00:00,+04:00,+04 -2005-10-29T23:00:00,+03:00,+03 -2006-03-25T23:00:00,+04:00,+04 -2006-10-28T23:00:00,+03:00,+03 -2007-03-24T23:00:00,+04:00,+04 -2007-10-27T23:00:00,+03:00,+03 -2008-03-29T23:00:00,+04:00,+04 -2008-10-25T23:00:00,+03:00,+03 -2009-03-28T23:00:00,+04:00,+04 -2009-10-24T23:00:00,+03:00,+03 -2010-03-27T23:00:00,+04:00,+04 -2010-10-30T23:00:00,+03:00,+03 -2011-03-26T23:00:00,+04:00,+04 -2014-10-25T22:00:00,+03:00,+03 -2016-03-26T23:00:00,+04:00,+04 -''' diff --git a/desk/lib/pytz/europe-athens.hoon b/desk/lib/pytz/europe-athens.hoon deleted file mode 100644 index 342d737..0000000 --- a/desk/lib/pytz/europe-athens.hoon +++ /dev/null @@ -1,143 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:35,LMT -1901-12-13T20:45:52,+01:35,AMT -1916-07-27T22:26:08,+02:00,EET -1932-07-06T22:00:00,+03:00,EEST -1932-08-31T21:00:00,+02:00,EET -1941-04-06T22:00:00,+03:00,EEST -1941-04-29T21:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T23:00:00,+02:00,CEST -1943-10-03T22:00:00,+01:00,CET -1944-04-03T23:00:00,+02:00,EET -1952-06-30T22:00:00,+03:00,EEST -1952-11-01T21:00:00,+02:00,EET -1975-04-11T22:00:00,+03:00,EEST -1975-11-25T22:00:00,+02:00,EET -1976-04-11T00:00:00,+03:00,EEST -1976-10-10T00:00:00,+02:00,EET -1977-04-03T00:00:00,+03:00,EEST -1977-09-26T00:00:00,+02:00,EET -1978-04-02T00:00:00,+03:00,EEST -1978-09-24T01:00:00,+02:00,EET -1979-04-01T07:00:00,+03:00,EEST -1979-09-28T23:00:00,+02:00,EET -1980-03-31T22:00:00,+03:00,EEST -1980-09-27T21:00:00,+02:00,EET -1981-03-29T01:00:00,+03:00,EEST -1981-09-27T01:00:00,+02:00,EET -1982-03-28T01:00:00,+03:00,EEST -1982-09-26T01:00:00,+02:00,EET -1983-03-27T01:00:00,+03:00,EEST -1983-09-25T01:00:00,+02:00,EET -1984-03-25T01:00:00,+03:00,EEST -1984-09-30T01:00:00,+02:00,EET -1985-03-31T01:00:00,+03:00,EEST -1985-09-29T01:00:00,+02:00,EET -1986-03-30T01:00:00,+03:00,EEST -1986-09-28T01:00:00,+02:00,EET -1987-03-29T01:00:00,+03:00,EEST -1987-09-27T01:00:00,+02:00,EET -1988-03-27T01:00:00,+03:00,EEST -1988-09-25T01:00:00,+02:00,EET -1989-03-26T01:00:00,+03:00,EEST -1989-09-24T01:00:00,+02:00,EET -1990-03-25T01:00:00,+03:00,EEST -1990-09-30T01:00:00,+02:00,EET -1991-03-31T01:00:00,+03:00,EEST -1991-09-29T01:00:00,+02:00,EET -1992-03-29T01:00:00,+03:00,EEST -1992-09-27T01:00:00,+02:00,EET -1993-03-28T01:00:00,+03:00,EEST -1993-09-26T01:00:00,+02:00,EET -1994-03-27T01:00:00,+03:00,EEST -1994-09-25T01:00:00,+02:00,EET -1995-03-26T01:00:00,+03:00,EEST -1995-09-24T01:00:00,+02:00,EET -1996-03-31T01:00:00,+03:00,EEST -1996-10-27T01:00:00,+02:00,EET -1997-03-30T01:00:00,+03:00,EEST -1997-10-26T01:00:00,+02:00,EET -1998-03-29T01:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-belfast.hoon b/desk/lib/pytz/europe-belfast.hoon deleted file mode 100644 index 226b16d..0000000 --- a/desk/lib/pytz/europe-belfast.hoon +++ /dev/null @@ -1,246 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+00:00,GMT -1916-05-21T02:00:00,+01:00,BST -1916-10-01T02:00:00,+00:00,GMT -1917-04-08T02:00:00,+01:00,BST -1917-09-17T02:00:00,+00:00,GMT -1918-03-24T02:00:00,+01:00,BST -1918-09-30T02:00:00,+00:00,GMT -1919-03-30T02:00:00,+01:00,BST -1919-09-29T02:00:00,+00:00,GMT -1920-03-28T02:00:00,+01:00,BST -1920-10-25T02:00:00,+00:00,GMT -1921-04-03T02:00:00,+01:00,BST -1921-10-03T02:00:00,+00:00,GMT -1922-03-26T02:00:00,+01:00,BST -1922-10-08T02:00:00,+00:00,GMT -1923-04-22T02:00:00,+01:00,BST -1923-09-16T02:00:00,+00:00,GMT -1924-04-13T02:00:00,+01:00,BST -1924-09-21T02:00:00,+00:00,GMT -1925-04-19T02:00:00,+01:00,BST -1925-10-04T02:00:00,+00:00,GMT -1926-04-18T02:00:00,+01:00,BST -1926-10-03T02:00:00,+00:00,GMT -1927-04-10T02:00:00,+01:00,BST -1927-10-02T02:00:00,+00:00,GMT -1928-04-22T02:00:00,+01:00,BST -1928-10-07T02:00:00,+00:00,GMT -1929-04-21T02:00:00,+01:00,BST -1929-10-06T02:00:00,+00:00,GMT -1930-04-13T02:00:00,+01:00,BST -1930-10-05T02:00:00,+00:00,GMT -1931-04-19T02:00:00,+01:00,BST -1931-10-04T02:00:00,+00:00,GMT -1932-04-17T02:00:00,+01:00,BST -1932-10-02T02:00:00,+00:00,GMT -1933-04-09T02:00:00,+01:00,BST -1933-10-08T02:00:00,+00:00,GMT -1934-04-22T02:00:00,+01:00,BST -1934-10-07T02:00:00,+00:00,GMT -1935-04-14T02:00:00,+01:00,BST -1935-10-06T02:00:00,+00:00,GMT -1936-04-19T02:00:00,+01:00,BST -1936-10-04T02:00:00,+00:00,GMT -1937-04-18T02:00:00,+01:00,BST -1937-10-03T02:00:00,+00:00,GMT -1938-04-10T02:00:00,+01:00,BST -1938-10-02T02:00:00,+00:00,GMT -1939-04-16T02:00:00,+01:00,BST -1939-11-19T02:00:00,+00:00,GMT -1940-02-25T02:00:00,+01:00,BST -1941-05-04T01:00:00,+02:00,BDST -1941-08-10T01:00:00,+01:00,BST -1942-04-05T01:00:00,+02:00,BDST -1942-08-09T01:00:00,+01:00,BST -1943-04-04T01:00:00,+02:00,BDST -1943-08-15T01:00:00,+01:00,BST -1944-04-02T01:00:00,+02:00,BDST -1944-09-17T01:00:00,+01:00,BST -1945-04-02T01:00:00,+02:00,BDST -1945-07-15T01:00:00,+01:00,BST -1945-10-07T02:00:00,+00:00,GMT -1946-04-14T02:00:00,+01:00,BST -1946-10-06T02:00:00,+00:00,GMT -1947-03-16T02:00:00,+01:00,BST -1947-04-13T01:00:00,+02:00,BDST -1947-08-10T01:00:00,+01:00,BST -1947-11-02T02:00:00,+00:00,GMT -1948-03-14T02:00:00,+01:00,BST -1948-10-31T02:00:00,+00:00,GMT -1949-04-03T02:00:00,+01:00,BST -1949-10-30T02:00:00,+00:00,GMT -1950-04-16T02:00:00,+01:00,BST -1950-10-22T02:00:00,+00:00,GMT -1951-04-15T02:00:00,+01:00,BST -1951-10-21T02:00:00,+00:00,GMT -1952-04-20T02:00:00,+01:00,BST -1952-10-26T02:00:00,+00:00,GMT -1953-04-19T02:00:00,+01:00,BST -1953-10-04T02:00:00,+00:00,GMT -1954-04-11T02:00:00,+01:00,BST -1954-10-03T02:00:00,+00:00,GMT -1955-04-17T02:00:00,+01:00,BST -1955-10-02T02:00:00,+00:00,GMT -1956-04-22T02:00:00,+01:00,BST -1956-10-07T02:00:00,+00:00,GMT -1957-04-14T02:00:00,+01:00,BST -1957-10-06T02:00:00,+00:00,GMT -1958-04-20T02:00:00,+01:00,BST -1958-10-05T02:00:00,+00:00,GMT -1959-04-19T02:00:00,+01:00,BST -1959-10-04T02:00:00,+00:00,GMT -1960-04-10T02:00:00,+01:00,BST -1960-10-02T02:00:00,+00:00,GMT -1961-03-26T02:00:00,+01:00,BST -1961-10-29T02:00:00,+00:00,GMT -1962-03-25T02:00:00,+01:00,BST -1962-10-28T02:00:00,+00:00,GMT -1963-03-31T02:00:00,+01:00,BST -1963-10-27T02:00:00,+00:00,GMT -1964-03-22T02:00:00,+01:00,BST -1964-10-25T02:00:00,+00:00,GMT -1965-03-21T02:00:00,+01:00,BST -1965-10-24T02:00:00,+00:00,GMT -1966-03-20T02:00:00,+01:00,BST -1966-10-23T02:00:00,+00:00,GMT -1967-03-19T02:00:00,+01:00,BST -1967-10-29T02:00:00,+00:00,GMT -1968-02-18T02:00:00,+01:00,BST -1968-10-26T23:00:00,+01:00,BST -1971-10-31T02:00:00,+00:00,GMT -1972-03-19T02:00:00,+01:00,BST -1972-10-29T02:00:00,+00:00,GMT -1973-03-18T02:00:00,+01:00,BST -1973-10-28T02:00:00,+00:00,GMT -1974-03-17T02:00:00,+01:00,BST -1974-10-27T02:00:00,+00:00,GMT -1975-03-16T02:00:00,+01:00,BST -1975-10-26T02:00:00,+00:00,GMT -1976-03-21T02:00:00,+01:00,BST -1976-10-24T02:00:00,+00:00,GMT -1977-03-20T02:00:00,+01:00,BST -1977-10-23T02:00:00,+00:00,GMT -1978-03-19T02:00:00,+01:00,BST -1978-10-29T02:00:00,+00:00,GMT -1979-03-18T02:00:00,+01:00,BST -1979-10-28T02:00:00,+00:00,GMT -1980-03-16T02:00:00,+01:00,BST -1980-10-26T02:00:00,+00:00,GMT -1981-03-29T01:00:00,+01:00,BST -1981-10-25T01:00:00,+00:00,GMT -1982-03-28T01:00:00,+01:00,BST -1982-10-24T01:00:00,+00:00,GMT -1983-03-27T01:00:00,+01:00,BST -1983-10-23T01:00:00,+00:00,GMT -1984-03-25T01:00:00,+01:00,BST -1984-10-28T01:00:00,+00:00,GMT -1985-03-31T01:00:00,+01:00,BST -1985-10-27T01:00:00,+00:00,GMT -1986-03-30T01:00:00,+01:00,BST -1986-10-26T01:00:00,+00:00,GMT -1987-03-29T01:00:00,+01:00,BST -1987-10-25T01:00:00,+00:00,GMT -1988-03-27T01:00:00,+01:00,BST -1988-10-23T01:00:00,+00:00,GMT -1989-03-26T01:00:00,+01:00,BST -1989-10-29T01:00:00,+00:00,GMT -1990-03-25T01:00:00,+01:00,BST -1990-10-28T01:00:00,+00:00,GMT -1991-03-31T01:00:00,+01:00,BST -1991-10-27T01:00:00,+00:00,GMT -1992-03-29T01:00:00,+01:00,BST -1992-10-25T01:00:00,+00:00,GMT -1993-03-28T01:00:00,+01:00,BST -1993-10-24T01:00:00,+00:00,GMT -1994-03-27T01:00:00,+01:00,BST -1994-10-23T01:00:00,+00:00,GMT -1995-03-26T01:00:00,+01:00,BST -1995-10-22T01:00:00,+00:00,GMT -1996-03-31T01:00:00,+01:00,BST -1996-10-27T01:00:00,+00:00,GMT -1997-03-30T01:00:00,+01:00,BST -1997-10-26T01:00:00,+00:00,GMT -1998-03-29T01:00:00,+01:00,BST -1998-10-25T01:00:00,+00:00,GMT -1999-03-28T01:00:00,+01:00,BST -1999-10-31T01:00:00,+00:00,GMT -2000-03-26T01:00:00,+01:00,BST -2000-10-29T01:00:00,+00:00,GMT -2001-03-25T01:00:00,+01:00,BST -2001-10-28T01:00:00,+00:00,GMT -2002-03-31T01:00:00,+01:00,BST -2002-10-27T01:00:00,+00:00,GMT -2003-03-30T01:00:00,+01:00,BST -2003-10-26T01:00:00,+00:00,GMT -2004-03-28T01:00:00,+01:00,BST -2004-10-31T01:00:00,+00:00,GMT -2005-03-27T01:00:00,+01:00,BST -2005-10-30T01:00:00,+00:00,GMT -2006-03-26T01:00:00,+01:00,BST -2006-10-29T01:00:00,+00:00,GMT -2007-03-25T01:00:00,+01:00,BST -2007-10-28T01:00:00,+00:00,GMT -2008-03-30T01:00:00,+01:00,BST -2008-10-26T01:00:00,+00:00,GMT -2009-03-29T01:00:00,+01:00,BST -2009-10-25T01:00:00,+00:00,GMT -2010-03-28T01:00:00,+01:00,BST -2010-10-31T01:00:00,+00:00,GMT -2011-03-27T01:00:00,+01:00,BST -2011-10-30T01:00:00,+00:00,GMT -2012-03-25T01:00:00,+01:00,BST -2012-10-28T01:00:00,+00:00,GMT -2013-03-31T01:00:00,+01:00,BST -2013-10-27T01:00:00,+00:00,GMT -2014-03-30T01:00:00,+01:00,BST -2014-10-26T01:00:00,+00:00,GMT -2015-03-29T01:00:00,+01:00,BST -2015-10-25T01:00:00,+00:00,GMT -2016-03-27T01:00:00,+01:00,BST -2016-10-30T01:00:00,+00:00,GMT -2017-03-26T01:00:00,+01:00,BST -2017-10-29T01:00:00,+00:00,GMT -2018-03-25T01:00:00,+01:00,BST -2018-10-28T01:00:00,+00:00,GMT -2019-03-31T01:00:00,+01:00,BST -2019-10-27T01:00:00,+00:00,GMT -2020-03-29T01:00:00,+01:00,BST -2020-10-25T01:00:00,+00:00,GMT -2021-03-28T01:00:00,+01:00,BST -2021-10-31T01:00:00,+00:00,GMT -2022-03-27T01:00:00,+01:00,BST -2022-10-30T01:00:00,+00:00,GMT -2023-03-26T01:00:00,+01:00,BST -2023-10-29T01:00:00,+00:00,GMT -2024-03-31T01:00:00,+01:00,BST -2024-10-27T01:00:00,+00:00,GMT -2025-03-30T01:00:00,+01:00,BST -2025-10-26T01:00:00,+00:00,GMT -2026-03-29T01:00:00,+01:00,BST -2026-10-25T01:00:00,+00:00,GMT -2027-03-28T01:00:00,+01:00,BST -2027-10-31T01:00:00,+00:00,GMT -2028-03-26T01:00:00,+01:00,BST -2028-10-29T01:00:00,+00:00,GMT -2029-03-25T01:00:00,+01:00,BST -2029-10-28T01:00:00,+00:00,GMT -2030-03-31T01:00:00,+01:00,BST -2030-10-27T01:00:00,+00:00,GMT -2031-03-30T01:00:00,+01:00,BST -2031-10-26T01:00:00,+00:00,GMT -2032-03-28T01:00:00,+01:00,BST -2032-10-31T01:00:00,+00:00,GMT -2033-03-27T01:00:00,+01:00,BST -2033-10-30T01:00:00,+00:00,GMT -2034-03-26T01:00:00,+01:00,BST -2034-10-29T01:00:00,+00:00,GMT -2035-03-25T01:00:00,+01:00,BST -2035-10-28T01:00:00,+00:00,GMT -2036-03-30T01:00:00,+01:00,BST -2036-10-26T01:00:00,+00:00,GMT -2037-03-29T01:00:00,+01:00,BST -2037-10-25T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/europe-belgrade.hoon b/desk/lib/pytz/europe-belgrade.hoon deleted file mode 100644 index 16dc500..0000000 --- a/desk/lib/pytz/europe-belgrade.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:22,LMT -1901-12-13T20:45:52,+01:00,CET -1941-04-18T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-05-08T01:00:00,+02:00,CEST -1945-09-16T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-berlin.hoon b/desk/lib/pytz/europe-berlin.hoon deleted file mode 100644 index b1238ce..0000000 --- a/desk/lib/pytz/europe-berlin.hoon +++ /dev/null @@ -1,148 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:53,LMT -1901-12-13T20:45:52,+01:00,CET -1916-04-30T22:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1917-04-16T01:00:00,+02:00,CEST -1917-09-17T01:00:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+01:00,CET -1940-04-01T01:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-05-24T00:00:00,+03:00,CEMT -1945-09-24T00:00:00,+02:00,CEST -1945-11-18T01:00:00,+01:00,CET -1946-04-14T01:00:00,+02:00,CEST -1946-10-07T01:00:00,+01:00,CET -1947-04-06T02:00:00,+02:00,CEST -1947-05-11T01:00:00,+03:00,CEMT -1947-06-29T00:00:00,+02:00,CEST -1947-10-05T01:00:00,+01:00,CET -1948-04-18T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1949-04-10T01:00:00,+02:00,CEST -1949-10-02T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-bratislava.hoon b/desk/lib/pytz/europe-bratislava.hoon deleted file mode 100644 index 5beed13..0000000 --- a/desk/lib/pytz/europe-bratislava.hoon +++ /dev/null @@ -1,148 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:58,LMT -1901-12-13T20:45:52,+01:00,CET -1916-04-30T22:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1917-04-16T01:00:00,+02:00,CEST -1917-09-17T01:00:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+01:00,CET -1940-04-01T01:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-10-01T01:00:00,+01:00,CET -1946-05-06T01:00:00,+02:00,CEST -1946-10-06T01:00:00,+01:00,CET -1946-12-01T02:00:00,+00:00,GMT -1947-02-23T02:00:00,+01:00,CET -1947-04-20T01:00:00,+02:00,CEST -1947-10-05T01:00:00,+01:00,CET -1948-04-18T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1949-04-09T01:00:00,+02:00,CEST -1949-10-02T01:00:00,+01:00,CET -1979-04-01T01:00:00,+02:00,CEST -1979-09-30T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-brussels.hoon b/desk/lib/pytz/europe-brussels.hoon deleted file mode 100644 index 6f23809..0000000 --- a/desk/lib/pytz/europe-brussels.hoon +++ /dev/null @@ -1,189 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:18,LMT -1901-12-13T20:45:52,+00:00,WET -1914-11-08T00:00:00,+01:00,CET -1916-04-30T23:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1917-04-16T01:00:00,+02:00,CEST -1917-09-17T01:00:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+01:00,CET -1918-11-11T11:00:00,+00:00,WET -1919-03-01T23:00:00,+01:00,WEST -1919-10-04T23:00:00,+00:00,WET -1920-02-14T23:00:00,+01:00,WEST -1920-10-23T23:00:00,+00:00,WET -1921-03-14T23:00:00,+01:00,WEST -1921-10-25T23:00:00,+00:00,WET -1922-03-25T23:00:00,+01:00,WEST -1922-10-07T23:00:00,+00:00,WET -1923-04-21T23:00:00,+01:00,WEST -1923-10-06T23:00:00,+00:00,WET -1924-03-29T23:00:00,+01:00,WEST -1924-10-04T23:00:00,+00:00,WET -1925-04-04T23:00:00,+01:00,WEST -1925-10-03T23:00:00,+00:00,WET -1926-04-17T23:00:00,+01:00,WEST -1926-10-02T23:00:00,+00:00,WET -1927-04-09T23:00:00,+01:00,WEST -1927-10-01T23:00:00,+00:00,WET -1928-04-14T23:00:00,+01:00,WEST -1928-10-07T02:00:00,+00:00,WET -1929-04-21T02:00:00,+01:00,WEST -1929-10-06T02:00:00,+00:00,WET -1930-04-13T02:00:00,+01:00,WEST -1930-10-05T02:00:00,+00:00,WET -1931-04-19T02:00:00,+01:00,WEST -1931-10-04T02:00:00,+00:00,WET -1932-04-03T02:00:00,+01:00,WEST -1932-10-02T02:00:00,+00:00,WET -1933-03-26T02:00:00,+01:00,WEST -1933-10-08T02:00:00,+00:00,WET -1934-04-08T02:00:00,+01:00,WEST -1934-10-07T02:00:00,+00:00,WET -1935-03-31T02:00:00,+01:00,WEST -1935-10-06T02:00:00,+00:00,WET -1936-04-19T02:00:00,+01:00,WEST -1936-10-04T02:00:00,+00:00,WET -1937-04-04T02:00:00,+01:00,WEST -1937-10-03T02:00:00,+00:00,WET -1938-03-27T02:00:00,+01:00,WEST -1938-10-02T02:00:00,+00:00,WET -1939-04-16T02:00:00,+01:00,WEST -1939-11-19T02:00:00,+00:00,WET -1940-02-25T02:00:00,+01:00,WEST -1940-05-20T02:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-09-17T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-16T01:00:00,+01:00,CET -1946-05-19T01:00:00,+02:00,CEST -1946-10-07T01:00:00,+01:00,CET -1977-04-03T01:00:00,+02:00,CEST -1977-09-25T01:00:00,+01:00,CET -1978-04-02T01:00:00,+02:00,CEST -1978-10-01T01:00:00,+01:00,CET -1979-04-01T01:00:00,+02:00,CEST -1979-09-30T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-bucharest.hoon b/desk/lib/pytz/europe-bucharest.hoon deleted file mode 100644 index d92b1cf..0000000 --- a/desk/lib/pytz/europe-bucharest.hoon +++ /dev/null @@ -1,141 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:44,LMT -1901-12-13T20:45:52,+01:44,BMT -1931-07-23T22:15:36,+02:00,EET -1932-05-20T22:00:00,+03:00,EEST -1932-10-01T22:00:00,+02:00,EET -1933-04-01T22:00:00,+03:00,EEST -1933-09-30T22:00:00,+02:00,EET -1934-04-07T22:00:00,+03:00,EEST -1934-10-06T22:00:00,+02:00,EET -1935-04-06T22:00:00,+03:00,EEST -1935-10-05T22:00:00,+02:00,EET -1936-04-04T22:00:00,+03:00,EEST -1936-10-03T22:00:00,+02:00,EET -1937-04-03T22:00:00,+03:00,EEST -1937-10-02T22:00:00,+02:00,EET -1938-04-02T22:00:00,+03:00,EEST -1938-10-01T22:00:00,+02:00,EET -1939-04-01T22:00:00,+03:00,EEST -1939-09-30T22:00:00,+02:00,EET -1979-05-26T22:00:00,+03:00,EEST -1979-09-29T21:00:00,+02:00,EET -1980-04-05T21:00:00,+03:00,EEST -1980-09-27T22:00:00,+02:00,EET -1981-03-29T00:00:00,+03:00,EEST -1981-09-27T00:00:00,+02:00,EET -1982-03-28T00:00:00,+03:00,EEST -1982-09-26T00:00:00,+02:00,EET -1983-03-27T00:00:00,+03:00,EEST -1983-09-25T00:00:00,+02:00,EET -1984-03-25T00:00:00,+03:00,EEST -1984-09-30T00:00:00,+02:00,EET -1985-03-31T00:00:00,+03:00,EEST -1985-09-29T00:00:00,+02:00,EET -1986-03-30T00:00:00,+03:00,EEST -1986-09-28T00:00:00,+02:00,EET -1987-03-29T00:00:00,+03:00,EEST -1987-09-27T00:00:00,+02:00,EET -1988-03-27T00:00:00,+03:00,EEST -1988-09-25T00:00:00,+02:00,EET -1989-03-26T00:00:00,+03:00,EEST -1989-09-24T00:00:00,+02:00,EET -1990-03-25T00:00:00,+03:00,EEST -1990-09-30T00:00:00,+02:00,EET -1991-03-30T22:00:00,+03:00,EEST -1991-09-28T22:00:00,+02:00,EET -1992-03-28T22:00:00,+03:00,EEST -1992-09-26T22:00:00,+02:00,EET -1993-03-27T22:00:00,+03:00,EEST -1993-09-25T22:00:00,+02:00,EET -1994-03-26T22:00:00,+03:00,EEST -1994-09-24T21:00:00,+02:00,EET -1995-03-25T22:00:00,+03:00,EEST -1995-09-23T21:00:00,+02:00,EET -1996-03-30T22:00:00,+03:00,EEST -1996-10-26T21:00:00,+02:00,EET -1997-03-30T01:00:00,+03:00,EEST -1997-10-26T01:00:00,+02:00,EET -1998-03-29T01:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-budapest.hoon b/desk/lib/pytz/europe-budapest.hoon deleted file mode 100644 index 28cdbc0..0000000 --- a/desk/lib/pytz/europe-budapest.hoon +++ /dev/null @@ -1,156 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:16,LMT -1901-12-13T20:45:52,+01:00,CET -1916-04-30T22:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1917-04-16T01:00:00,+02:00,CEST -1917-09-17T01:00:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+01:00,CET -1919-04-15T01:00:00,+02:00,CEST -1919-09-15T01:00:00,+01:00,CET -1920-04-05T01:00:00,+02:00,CEST -1920-09-20T01:00:00,+01:00,CET -1941-04-07T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-05-01T22:00:00,+02:00,CEST -1945-10-31T23:00:00,+01:00,CET -1946-03-31T01:00:00,+02:00,CEST -1946-10-07T00:00:00,+01:00,CET -1947-04-06T01:00:00,+02:00,CEST -1947-10-05T01:00:00,+01:00,CET -1948-04-04T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1949-04-10T01:00:00,+02:00,CEST -1949-10-02T01:00:00,+01:00,CET -1954-05-22T23:00:00,+02:00,CEST -1954-10-02T22:00:00,+01:00,CET -1955-05-22T01:00:00,+02:00,CEST -1955-10-02T01:00:00,+01:00,CET -1956-06-03T01:00:00,+02:00,CEST -1956-09-30T01:00:00,+01:00,CET -1957-06-02T01:00:00,+02:00,CEST -1957-09-29T01:00:00,+01:00,CET -1980-04-05T23:00:00,+02:00,CEST -1980-09-27T23:00:00,+01:00,CET -1981-03-28T23:00:00,+02:00,CEST -1981-09-26T23:00:00,+01:00,CET -1982-03-27T23:00:00,+02:00,CEST -1982-09-25T23:00:00,+01:00,CET -1983-03-26T23:00:00,+02:00,CEST -1983-09-24T23:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-busingen.hoon b/desk/lib/pytz/europe-busingen.hoon deleted file mode 100644 index d7a3985..0000000 --- a/desk/lib/pytz/europe-busingen.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:34,LMT -1901-12-13T20:45:52,+01:00,CET -1941-05-05T00:00:00,+02:00,CEST -1941-10-06T00:00:00,+01:00,CET -1942-05-04T00:00:00,+02:00,CEST -1942-10-05T00:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-chisinau.hoon b/desk/lib/pytz/europe-chisinau.hoon deleted file mode 100644 index 4e07a48..0000000 --- a/desk/lib/pytz/europe-chisinau.hoon +++ /dev/null @@ -1,146 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:55,LMT -1901-12-13T20:45:52,+01:55,CMT -1918-02-14T22:05:00,+01:44,BMT -1931-07-23T22:15:36,+02:00,EET -1932-05-20T22:00:00,+03:00,EEST -1932-10-01T22:00:00,+02:00,EET -1933-04-01T22:00:00,+03:00,EEST -1933-09-30T22:00:00,+02:00,EET -1934-04-07T22:00:00,+03:00,EEST -1934-10-06T22:00:00,+02:00,EET -1935-04-06T22:00:00,+03:00,EEST -1935-10-05T22:00:00,+02:00,EET -1936-04-04T22:00:00,+03:00,EEST -1936-10-03T22:00:00,+02:00,EET -1937-04-03T22:00:00,+03:00,EEST -1937-10-02T22:00:00,+02:00,EET -1938-04-02T22:00:00,+03:00,EEST -1938-10-01T22:00:00,+02:00,EET -1939-04-01T22:00:00,+03:00,EEST -1939-09-30T22:00:00,+02:00,EET -1940-08-14T22:00:00,+03:00,EEST -1941-07-16T21:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-08-23T22:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+04:00,MSD -1989-09-23T23:00:00,+03:00,MSK -1990-03-24T23:00:00,+04:00,MSD -1990-05-05T22:00:00,+03:00,EEST -1990-09-30T00:00:00,+02:00,EET -1991-03-31T00:00:00,+03:00,EEST -1991-09-29T00:00:00,+02:00,EET -1992-03-28T22:00:00,+03:00,EEST -1992-09-26T21:00:00,+02:00,EET -1993-03-27T22:00:00,+03:00,EEST -1993-09-25T21:00:00,+02:00,EET -1994-03-26T22:00:00,+03:00,EEST -1994-09-24T21:00:00,+02:00,EET -1995-03-25T22:00:00,+03:00,EEST -1995-09-23T21:00:00,+02:00,EET -1996-03-30T22:00:00,+03:00,EEST -1996-10-26T21:00:00,+02:00,EET -1997-03-30T00:00:00,+03:00,EEST -1997-10-26T00:00:00,+02:00,EET -1998-03-29T00:00:00,+03:00,EEST -1998-10-25T00:00:00,+02:00,EET -1999-03-28T00:00:00,+03:00,EEST -1999-10-31T00:00:00,+02:00,EET -2000-03-26T00:00:00,+03:00,EEST -2000-10-29T00:00:00,+02:00,EET -2001-03-25T00:00:00,+03:00,EEST -2001-10-28T00:00:00,+02:00,EET -2002-03-31T00:00:00,+03:00,EEST -2002-10-27T00:00:00,+02:00,EET -2003-03-30T00:00:00,+03:00,EEST -2003-10-26T00:00:00,+02:00,EET -2004-03-28T00:00:00,+03:00,EEST -2004-10-31T00:00:00,+02:00,EET -2005-03-27T00:00:00,+03:00,EEST -2005-10-30T00:00:00,+02:00,EET -2006-03-26T00:00:00,+03:00,EEST -2006-10-29T00:00:00,+02:00,EET -2007-03-25T00:00:00,+03:00,EEST -2007-10-28T00:00:00,+02:00,EET -2008-03-30T00:00:00,+03:00,EEST -2008-10-26T00:00:00,+02:00,EET -2009-03-29T00:00:00,+03:00,EEST -2009-10-25T00:00:00,+02:00,EET -2010-03-28T00:00:00,+03:00,EEST -2010-10-31T00:00:00,+02:00,EET -2011-03-27T00:00:00,+03:00,EEST -2011-10-30T00:00:00,+02:00,EET -2012-03-25T00:00:00,+03:00,EEST -2012-10-28T00:00:00,+02:00,EET -2013-03-31T00:00:00,+03:00,EEST -2013-10-27T00:00:00,+02:00,EET -2014-03-30T00:00:00,+03:00,EEST -2014-10-26T00:00:00,+02:00,EET -2015-03-29T00:00:00,+03:00,EEST -2015-10-25T00:00:00,+02:00,EET -2016-03-27T00:00:00,+03:00,EEST -2016-10-30T00:00:00,+02:00,EET -2017-03-26T00:00:00,+03:00,EEST -2017-10-29T00:00:00,+02:00,EET -2018-03-25T00:00:00,+03:00,EEST -2018-10-28T00:00:00,+02:00,EET -2019-03-31T00:00:00,+03:00,EEST -2019-10-27T00:00:00,+02:00,EET -2020-03-29T00:00:00,+03:00,EEST -2020-10-25T00:00:00,+02:00,EET -2021-03-28T00:00:00,+03:00,EEST -2021-10-31T00:00:00,+02:00,EET -2022-03-27T00:00:00,+03:00,EEST -2022-10-30T00:00:00,+02:00,EET -2023-03-26T00:00:00,+03:00,EEST -2023-10-29T00:00:00,+02:00,EET -2024-03-31T00:00:00,+03:00,EEST -2024-10-27T00:00:00,+02:00,EET -2025-03-30T00:00:00,+03:00,EEST -2025-10-26T00:00:00,+02:00,EET -2026-03-29T00:00:00,+03:00,EEST -2026-10-25T00:00:00,+02:00,EET -2027-03-28T00:00:00,+03:00,EEST -2027-10-31T00:00:00,+02:00,EET -2028-03-26T00:00:00,+03:00,EEST -2028-10-29T00:00:00,+02:00,EET -2029-03-25T00:00:00,+03:00,EEST -2029-10-28T00:00:00,+02:00,EET -2030-03-31T00:00:00,+03:00,EEST -2030-10-27T00:00:00,+02:00,EET -2031-03-30T00:00:00,+03:00,EEST -2031-10-26T00:00:00,+02:00,EET -2032-03-28T00:00:00,+03:00,EEST -2032-10-31T00:00:00,+02:00,EET -2033-03-27T00:00:00,+03:00,EEST -2033-10-30T00:00:00,+02:00,EET -2034-03-26T00:00:00,+03:00,EEST -2034-10-29T00:00:00,+02:00,EET -2035-03-25T00:00:00,+03:00,EEST -2035-10-28T00:00:00,+02:00,EET -2036-03-30T00:00:00,+03:00,EEST -2036-10-26T00:00:00,+02:00,EET -2037-03-29T00:00:00,+03:00,EEST -2037-10-25T00:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-copenhagen.hoon b/desk/lib/pytz/europe-copenhagen.hoon deleted file mode 100644 index 3320023..0000000 --- a/desk/lib/pytz/europe-copenhagen.hoon +++ /dev/null @@ -1,138 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:50,LMT -1901-12-13T20:45:52,+01:00,CET -1916-05-14T22:00:00,+02:00,CEST -1916-09-30T21:00:00,+01:00,CET -1940-05-14T23:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-08-15T01:00:00,+01:00,CET -1946-05-01T01:00:00,+02:00,CEST -1946-09-01T01:00:00,+01:00,CET -1947-05-04T01:00:00,+02:00,CEST -1947-08-10T01:00:00,+01:00,CET -1948-05-09T01:00:00,+02:00,CEST -1948-08-08T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-dublin.hoon b/desk/lib/pytz/europe-dublin.hoon deleted file mode 100644 index 5c262ab..0000000 --- a/desk/lib/pytz/europe-dublin.hoon +++ /dev/null @@ -1,232 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-01:35,DMT -1916-05-21T02:25:21,+00:35,IST -1916-10-01T02:25:21,+00:00,GMT -1917-04-08T02:00:00,+01:00,BST -1917-09-17T02:00:00,+00:00,GMT -1918-03-24T02:00:00,+01:00,BST -1918-09-30T02:00:00,+00:00,GMT -1919-03-30T02:00:00,+01:00,BST -1919-09-29T02:00:00,+00:00,GMT -1920-03-28T02:00:00,+01:00,BST -1920-10-25T02:00:00,+00:00,GMT -1921-04-03T02:00:00,+01:00,BST -1921-10-03T02:00:00,+00:00,GMT -1922-03-26T02:00:00,+01:00,IST -1922-10-08T02:00:00,+00:00,GMT -1923-04-22T02:00:00,+01:00,IST -1923-09-16T02:00:00,+00:00,GMT -1924-04-13T02:00:00,+01:00,IST -1924-09-21T02:00:00,+00:00,GMT -1925-04-19T02:00:00,+01:00,IST -1925-10-04T02:00:00,+00:00,GMT -1926-04-18T02:00:00,+01:00,IST -1926-10-03T02:00:00,+00:00,GMT -1927-04-10T02:00:00,+01:00,IST -1927-10-02T02:00:00,+00:00,GMT -1928-04-22T02:00:00,+01:00,IST -1928-10-07T02:00:00,+00:00,GMT -1929-04-21T02:00:00,+01:00,IST -1929-10-06T02:00:00,+00:00,GMT -1930-04-13T02:00:00,+01:00,IST -1930-10-05T02:00:00,+00:00,GMT -1931-04-19T02:00:00,+01:00,IST -1931-10-04T02:00:00,+00:00,GMT -1932-04-17T02:00:00,+01:00,IST -1932-10-02T02:00:00,+00:00,GMT -1933-04-09T02:00:00,+01:00,IST -1933-10-08T02:00:00,+00:00,GMT -1934-04-22T02:00:00,+01:00,IST -1934-10-07T02:00:00,+00:00,GMT -1935-04-14T02:00:00,+01:00,IST -1935-10-06T02:00:00,+00:00,GMT -1936-04-19T02:00:00,+01:00,IST -1936-10-04T02:00:00,+00:00,GMT -1937-04-18T02:00:00,+01:00,IST -1937-10-03T02:00:00,+00:00,GMT -1938-04-10T02:00:00,+01:00,IST -1938-10-02T02:00:00,+00:00,GMT -1939-04-16T02:00:00,+01:00,IST -1939-11-19T02:00:00,+00:00,GMT -1940-02-25T02:00:00,+01:00,IST -1946-10-06T02:00:00,+00:00,GMT -1947-03-16T02:00:00,+01:00,IST -1947-11-02T02:00:00,+00:00,GMT -1948-04-18T02:00:00,+01:00,IST -1948-10-31T02:00:00,+00:00,GMT -1949-04-03T02:00:00,+01:00,IST -1949-10-30T02:00:00,+00:00,GMT -1950-04-16T02:00:00,+01:00,IST -1950-10-22T02:00:00,+00:00,GMT -1951-04-15T02:00:00,+01:00,IST -1951-10-21T02:00:00,+00:00,GMT -1952-04-20T02:00:00,+01:00,IST -1952-10-26T02:00:00,+00:00,GMT -1953-04-19T02:00:00,+01:00,IST -1953-10-04T02:00:00,+00:00,GMT -1954-04-11T02:00:00,+01:00,IST -1954-10-03T02:00:00,+00:00,GMT -1955-04-17T02:00:00,+01:00,IST -1955-10-02T02:00:00,+00:00,GMT -1956-04-22T02:00:00,+01:00,IST -1956-10-07T02:00:00,+00:00,GMT -1957-04-14T02:00:00,+01:00,IST -1957-10-06T02:00:00,+00:00,GMT -1958-04-20T02:00:00,+01:00,IST -1958-10-05T02:00:00,+00:00,GMT -1959-04-19T02:00:00,+01:00,IST -1959-10-04T02:00:00,+00:00,GMT -1960-04-10T02:00:00,+01:00,IST -1960-10-02T02:00:00,+00:00,GMT -1961-03-26T02:00:00,+01:00,IST -1961-10-29T02:00:00,+00:00,GMT -1962-03-25T02:00:00,+01:00,IST -1962-10-28T02:00:00,+00:00,GMT -1963-03-31T02:00:00,+01:00,IST -1963-10-27T02:00:00,+00:00,GMT -1964-03-22T02:00:00,+01:00,IST -1964-10-25T02:00:00,+00:00,GMT -1965-03-21T02:00:00,+01:00,IST -1965-10-24T02:00:00,+00:00,GMT -1966-03-20T02:00:00,+01:00,IST -1966-10-23T02:00:00,+00:00,GMT -1967-03-19T02:00:00,+01:00,IST -1967-10-29T02:00:00,+00:00,GMT -1968-02-18T02:00:00,+01:00,IST -1968-10-26T23:00:00,+01:00,IST -1971-10-31T02:00:00,+00:00,GMT -1972-03-19T02:00:00,+01:00,IST -1972-10-29T02:00:00,+00:00,GMT -1973-03-18T02:00:00,+01:00,IST -1973-10-28T02:00:00,+00:00,GMT -1974-03-17T02:00:00,+01:00,IST -1974-10-27T02:00:00,+00:00,GMT -1975-03-16T02:00:00,+01:00,IST -1975-10-26T02:00:00,+00:00,GMT -1976-03-21T02:00:00,+01:00,IST -1976-10-24T02:00:00,+00:00,GMT -1977-03-20T02:00:00,+01:00,IST -1977-10-23T02:00:00,+00:00,GMT -1978-03-19T02:00:00,+01:00,IST -1978-10-29T02:00:00,+00:00,GMT -1979-03-18T02:00:00,+01:00,IST -1979-10-28T02:00:00,+00:00,GMT -1980-03-16T02:00:00,+01:00,IST -1980-10-26T02:00:00,+00:00,GMT -1981-03-29T01:00:00,+01:00,IST -1981-10-25T01:00:00,+00:00,GMT -1982-03-28T01:00:00,+01:00,IST -1982-10-24T01:00:00,+00:00,GMT -1983-03-27T01:00:00,+01:00,IST -1983-10-23T01:00:00,+00:00,GMT -1984-03-25T01:00:00,+01:00,IST -1984-10-28T01:00:00,+00:00,GMT -1985-03-31T01:00:00,+01:00,IST -1985-10-27T01:00:00,+00:00,GMT -1986-03-30T01:00:00,+01:00,IST -1986-10-26T01:00:00,+00:00,GMT -1987-03-29T01:00:00,+01:00,IST -1987-10-25T01:00:00,+00:00,GMT -1988-03-27T01:00:00,+01:00,IST -1988-10-23T01:00:00,+00:00,GMT -1989-03-26T01:00:00,+01:00,IST -1989-10-29T01:00:00,+00:00,GMT -1990-03-25T01:00:00,+01:00,IST -1990-10-28T01:00:00,+00:00,GMT -1991-03-31T01:00:00,+01:00,IST -1991-10-27T01:00:00,+00:00,GMT -1992-03-29T01:00:00,+01:00,IST -1992-10-25T01:00:00,+00:00,GMT -1993-03-28T01:00:00,+01:00,IST -1993-10-24T01:00:00,+00:00,GMT -1994-03-27T01:00:00,+01:00,IST -1994-10-23T01:00:00,+00:00,GMT -1995-03-26T01:00:00,+01:00,IST -1995-10-22T01:00:00,+00:00,GMT -1996-03-31T01:00:00,+01:00,IST -1996-10-27T01:00:00,+00:00,GMT -1997-03-30T01:00:00,+01:00,IST -1997-10-26T01:00:00,+00:00,GMT -1998-03-29T01:00:00,+01:00,IST -1998-10-25T01:00:00,+00:00,GMT -1999-03-28T01:00:00,+01:00,IST -1999-10-31T01:00:00,+00:00,GMT -2000-03-26T01:00:00,+01:00,IST -2000-10-29T01:00:00,+00:00,GMT -2001-03-25T01:00:00,+01:00,IST -2001-10-28T01:00:00,+00:00,GMT -2002-03-31T01:00:00,+01:00,IST -2002-10-27T01:00:00,+00:00,GMT -2003-03-30T01:00:00,+01:00,IST -2003-10-26T01:00:00,+00:00,GMT -2004-03-28T01:00:00,+01:00,IST -2004-10-31T01:00:00,+00:00,GMT -2005-03-27T01:00:00,+01:00,IST -2005-10-30T01:00:00,+00:00,GMT -2006-03-26T01:00:00,+01:00,IST -2006-10-29T01:00:00,+00:00,GMT -2007-03-25T01:00:00,+01:00,IST -2007-10-28T01:00:00,+00:00,GMT -2008-03-30T01:00:00,+01:00,IST -2008-10-26T01:00:00,+00:00,GMT -2009-03-29T01:00:00,+01:00,IST -2009-10-25T01:00:00,+00:00,GMT -2010-03-28T01:00:00,+01:00,IST -2010-10-31T01:00:00,+00:00,GMT -2011-03-27T01:00:00,+01:00,IST -2011-10-30T01:00:00,+00:00,GMT -2012-03-25T01:00:00,+01:00,IST -2012-10-28T01:00:00,+00:00,GMT -2013-03-31T01:00:00,+01:00,IST -2013-10-27T01:00:00,+00:00,GMT -2014-03-30T01:00:00,+01:00,IST -2014-10-26T01:00:00,+00:00,GMT -2015-03-29T01:00:00,+01:00,IST -2015-10-25T01:00:00,+00:00,GMT -2016-03-27T01:00:00,+01:00,IST -2016-10-30T01:00:00,+00:00,GMT -2017-03-26T01:00:00,+01:00,IST -2017-10-29T01:00:00,+00:00,GMT -2018-03-25T01:00:00,+01:00,IST -2018-10-28T01:00:00,+00:00,GMT -2019-03-31T01:00:00,+01:00,IST -2019-10-27T01:00:00,+00:00,GMT -2020-03-29T01:00:00,+01:00,IST -2020-10-25T01:00:00,+00:00,GMT -2021-03-28T01:00:00,+01:00,IST -2021-10-31T01:00:00,+00:00,GMT -2022-03-27T01:00:00,+01:00,IST -2022-10-30T01:00:00,+00:00,GMT -2023-03-26T01:00:00,+01:00,IST -2023-10-29T01:00:00,+00:00,GMT -2024-03-31T01:00:00,+01:00,IST -2024-10-27T01:00:00,+00:00,GMT -2025-03-30T01:00:00,+01:00,IST -2025-10-26T01:00:00,+00:00,GMT -2026-03-29T01:00:00,+01:00,IST -2026-10-25T01:00:00,+00:00,GMT -2027-03-28T01:00:00,+01:00,IST -2027-10-31T01:00:00,+00:00,GMT -2028-03-26T01:00:00,+01:00,IST -2028-10-29T01:00:00,+00:00,GMT -2029-03-25T01:00:00,+01:00,IST -2029-10-28T01:00:00,+00:00,GMT -2030-03-31T01:00:00,+01:00,IST -2030-10-27T01:00:00,+00:00,GMT -2031-03-30T01:00:00,+01:00,IST -2031-10-26T01:00:00,+00:00,GMT -2032-03-28T01:00:00,+01:00,IST -2032-10-31T01:00:00,+00:00,GMT -2033-03-27T01:00:00,+01:00,IST -2033-10-30T01:00:00,+00:00,GMT -2034-03-26T01:00:00,+01:00,IST -2034-10-29T01:00:00,+00:00,GMT -2035-03-25T01:00:00,+01:00,IST -2035-10-28T01:00:00,+00:00,GMT -2036-03-30T01:00:00,+01:00,IST -2036-10-26T01:00:00,+00:00,GMT -2037-03-29T01:00:00,+01:00,IST -2037-10-25T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/europe-gibraltar.hoon b/desk/lib/pytz/europe-gibraltar.hoon deleted file mode 100644 index b705088..0000000 --- a/desk/lib/pytz/europe-gibraltar.hoon +++ /dev/null @@ -1,202 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+00:00,GMT -1916-05-21T02:00:00,+01:00,BST -1916-10-01T02:00:00,+00:00,GMT -1917-04-08T02:00:00,+01:00,BST -1917-09-17T02:00:00,+00:00,GMT -1918-03-24T02:00:00,+01:00,BST -1918-09-30T02:00:00,+00:00,GMT -1919-03-30T02:00:00,+01:00,BST -1919-09-29T02:00:00,+00:00,GMT -1920-03-28T02:00:00,+01:00,BST -1920-10-25T02:00:00,+00:00,GMT -1921-04-03T02:00:00,+01:00,BST -1921-10-03T02:00:00,+00:00,GMT -1922-03-26T02:00:00,+01:00,BST -1922-10-08T02:00:00,+00:00,GMT -1923-04-22T02:00:00,+01:00,BST -1923-09-16T02:00:00,+00:00,GMT -1924-04-13T02:00:00,+01:00,BST -1924-09-21T02:00:00,+00:00,GMT -1925-04-19T02:00:00,+01:00,BST -1925-10-04T02:00:00,+00:00,GMT -1926-04-18T02:00:00,+01:00,BST -1926-10-03T02:00:00,+00:00,GMT -1927-04-10T02:00:00,+01:00,BST -1927-10-02T02:00:00,+00:00,GMT -1928-04-22T02:00:00,+01:00,BST -1928-10-07T02:00:00,+00:00,GMT -1929-04-21T02:00:00,+01:00,BST -1929-10-06T02:00:00,+00:00,GMT -1930-04-13T02:00:00,+01:00,BST -1930-10-05T02:00:00,+00:00,GMT -1931-04-19T02:00:00,+01:00,BST -1931-10-04T02:00:00,+00:00,GMT -1932-04-17T02:00:00,+01:00,BST -1932-10-02T02:00:00,+00:00,GMT -1933-04-09T02:00:00,+01:00,BST -1933-10-08T02:00:00,+00:00,GMT -1934-04-22T02:00:00,+01:00,BST -1934-10-07T02:00:00,+00:00,GMT -1935-04-14T02:00:00,+01:00,BST -1935-10-06T02:00:00,+00:00,GMT -1936-04-19T02:00:00,+01:00,BST -1936-10-04T02:00:00,+00:00,GMT -1937-04-18T02:00:00,+01:00,BST -1937-10-03T02:00:00,+00:00,GMT -1938-04-10T02:00:00,+01:00,BST -1938-10-02T02:00:00,+00:00,GMT -1939-04-16T02:00:00,+01:00,BST -1939-11-19T02:00:00,+00:00,GMT -1940-02-25T02:00:00,+01:00,BST -1941-05-04T01:00:00,+02:00,BDST -1941-08-10T01:00:00,+01:00,BST -1942-04-05T01:00:00,+02:00,BDST -1942-08-09T01:00:00,+01:00,BST -1943-04-04T01:00:00,+02:00,BDST -1943-08-15T01:00:00,+01:00,BST -1944-04-02T01:00:00,+02:00,BDST -1944-09-17T01:00:00,+01:00,BST -1945-04-02T01:00:00,+02:00,BDST -1945-07-15T01:00:00,+01:00,BST -1945-10-07T02:00:00,+00:00,GMT -1946-04-14T02:00:00,+01:00,BST -1946-10-06T02:00:00,+00:00,GMT -1947-03-16T02:00:00,+01:00,BST -1947-04-13T01:00:00,+02:00,BDST -1947-08-10T01:00:00,+01:00,BST -1947-11-02T02:00:00,+00:00,GMT -1948-03-14T02:00:00,+01:00,BST -1948-10-31T02:00:00,+00:00,GMT -1949-04-03T02:00:00,+01:00,BST -1949-10-30T02:00:00,+00:00,GMT -1950-04-16T02:00:00,+01:00,BST -1950-10-22T02:00:00,+00:00,GMT -1951-04-15T02:00:00,+01:00,BST -1951-10-21T02:00:00,+00:00,GMT -1952-04-20T02:00:00,+01:00,BST -1952-10-26T02:00:00,+00:00,GMT -1953-04-19T02:00:00,+01:00,BST -1953-10-04T02:00:00,+00:00,GMT -1954-04-11T02:00:00,+01:00,BST -1954-10-03T02:00:00,+00:00,GMT -1955-04-17T02:00:00,+01:00,BST -1955-10-02T02:00:00,+00:00,GMT -1956-04-22T02:00:00,+01:00,BST -1956-10-07T02:00:00,+00:00,GMT -1957-04-14T02:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-guernsey.hoon b/desk/lib/pytz/europe-guernsey.hoon deleted file mode 100644 index 23d02bb..0000000 --- a/desk/lib/pytz/europe-guernsey.hoon +++ /dev/null @@ -1,245 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1913-06-18T00:10:09,+00:00,GMT -1916-05-21T02:00:00,+01:00,BST -1916-10-01T02:00:00,+00:00,GMT -1917-04-08T02:00:00,+01:00,BST -1917-09-17T02:00:00,+00:00,GMT -1918-03-24T02:00:00,+01:00,BST -1918-09-30T02:00:00,+00:00,GMT -1919-03-30T02:00:00,+01:00,BST -1919-09-29T02:00:00,+00:00,GMT -1920-03-28T02:00:00,+01:00,BST -1920-10-25T02:00:00,+00:00,GMT -1921-04-03T02:00:00,+01:00,BST -1921-10-03T02:00:00,+00:00,GMT -1922-03-26T02:00:00,+01:00,BST -1922-10-08T02:00:00,+00:00,GMT -1923-04-22T02:00:00,+01:00,BST -1923-09-16T02:00:00,+00:00,GMT -1924-04-13T02:00:00,+01:00,BST -1924-09-21T02:00:00,+00:00,GMT -1925-04-19T02:00:00,+01:00,BST -1925-10-04T02:00:00,+00:00,GMT -1926-04-18T02:00:00,+01:00,BST -1926-10-03T02:00:00,+00:00,GMT -1927-04-10T02:00:00,+01:00,BST -1927-10-02T02:00:00,+00:00,GMT -1928-04-22T02:00:00,+01:00,BST -1928-10-07T02:00:00,+00:00,GMT -1929-04-21T02:00:00,+01:00,BST -1929-10-06T02:00:00,+00:00,GMT -1930-04-13T02:00:00,+01:00,BST -1930-10-05T02:00:00,+00:00,GMT -1931-04-19T02:00:00,+01:00,BST -1931-10-04T02:00:00,+00:00,GMT -1932-04-17T02:00:00,+01:00,BST -1932-10-02T02:00:00,+00:00,GMT -1933-04-09T02:00:00,+01:00,BST -1933-10-08T02:00:00,+00:00,GMT -1934-04-22T02:00:00,+01:00,BST -1934-10-07T02:00:00,+00:00,GMT -1935-04-14T02:00:00,+01:00,BST -1935-10-06T02:00:00,+00:00,GMT -1936-04-19T02:00:00,+01:00,BST -1936-10-04T02:00:00,+00:00,GMT -1937-04-18T02:00:00,+01:00,BST -1937-10-03T02:00:00,+00:00,GMT -1938-04-10T02:00:00,+01:00,BST -1938-10-02T02:00:00,+00:00,GMT -1939-04-16T02:00:00,+01:00,BST -1939-11-19T02:00:00,+00:00,GMT -1940-02-25T02:00:00,+01:00,BST -1940-07-01T23:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-05-07T22:00:00,+02:00,BDST -1945-07-15T01:00:00,+01:00,BST -1945-10-07T02:00:00,+00:00,GMT -1946-04-14T02:00:00,+01:00,BST -1946-10-06T02:00:00,+00:00,GMT -1947-03-16T02:00:00,+01:00,BST -1947-04-13T01:00:00,+02:00,BDST -1947-08-10T01:00:00,+01:00,BST -1947-11-02T02:00:00,+00:00,GMT -1948-03-14T02:00:00,+01:00,BST -1948-10-31T02:00:00,+00:00,GMT -1949-04-03T02:00:00,+01:00,BST -1949-10-30T02:00:00,+00:00,GMT -1950-04-16T02:00:00,+01:00,BST -1950-10-22T02:00:00,+00:00,GMT -1951-04-15T02:00:00,+01:00,BST -1951-10-21T02:00:00,+00:00,GMT -1952-04-20T02:00:00,+01:00,BST -1952-10-26T02:00:00,+00:00,GMT -1953-04-19T02:00:00,+01:00,BST -1953-10-04T02:00:00,+00:00,GMT -1954-04-11T02:00:00,+01:00,BST -1954-10-03T02:00:00,+00:00,GMT -1955-04-17T02:00:00,+01:00,BST -1955-10-02T02:00:00,+00:00,GMT -1956-04-22T02:00:00,+01:00,BST -1956-10-07T02:00:00,+00:00,GMT -1957-04-14T02:00:00,+01:00,BST -1957-10-06T02:00:00,+00:00,GMT -1958-04-20T02:00:00,+01:00,BST -1958-10-05T02:00:00,+00:00,GMT -1959-04-19T02:00:00,+01:00,BST -1959-10-04T02:00:00,+00:00,GMT -1960-04-10T02:00:00,+01:00,BST -1960-10-02T02:00:00,+00:00,GMT -1961-03-26T02:00:00,+01:00,BST -1961-10-29T02:00:00,+00:00,GMT -1962-03-25T02:00:00,+01:00,BST -1962-10-28T02:00:00,+00:00,GMT -1963-03-31T02:00:00,+01:00,BST -1963-10-27T02:00:00,+00:00,GMT -1964-03-22T02:00:00,+01:00,BST -1964-10-25T02:00:00,+00:00,GMT -1965-03-21T02:00:00,+01:00,BST -1965-10-24T02:00:00,+00:00,GMT -1966-03-20T02:00:00,+01:00,BST -1966-10-23T02:00:00,+00:00,GMT -1967-03-19T02:00:00,+01:00,BST -1967-10-29T02:00:00,+00:00,GMT -1968-02-18T02:00:00,+01:00,BST -1968-10-26T23:00:00,+01:00,BST -1971-10-31T02:00:00,+00:00,GMT -1972-03-19T02:00:00,+01:00,BST -1972-10-29T02:00:00,+00:00,GMT -1973-03-18T02:00:00,+01:00,BST -1973-10-28T02:00:00,+00:00,GMT -1974-03-17T02:00:00,+01:00,BST -1974-10-27T02:00:00,+00:00,GMT -1975-03-16T02:00:00,+01:00,BST -1975-10-26T02:00:00,+00:00,GMT -1976-03-21T02:00:00,+01:00,BST -1976-10-24T02:00:00,+00:00,GMT -1977-03-20T02:00:00,+01:00,BST -1977-10-23T02:00:00,+00:00,GMT -1978-03-19T02:00:00,+01:00,BST -1978-10-29T02:00:00,+00:00,GMT -1979-03-18T02:00:00,+01:00,BST -1979-10-28T02:00:00,+00:00,GMT -1980-03-16T02:00:00,+01:00,BST -1980-10-26T02:00:00,+00:00,GMT -1981-03-29T01:00:00,+01:00,BST -1981-10-25T01:00:00,+00:00,GMT -1982-03-28T01:00:00,+01:00,BST -1982-10-24T01:00:00,+00:00,GMT -1983-03-27T01:00:00,+01:00,BST -1983-10-23T01:00:00,+00:00,GMT -1984-03-25T01:00:00,+01:00,BST -1984-10-28T01:00:00,+00:00,GMT -1985-03-31T01:00:00,+01:00,BST -1985-10-27T01:00:00,+00:00,GMT -1986-03-30T01:00:00,+01:00,BST -1986-10-26T01:00:00,+00:00,GMT -1987-03-29T01:00:00,+01:00,BST -1987-10-25T01:00:00,+00:00,GMT -1988-03-27T01:00:00,+01:00,BST -1988-10-23T01:00:00,+00:00,GMT -1989-03-26T01:00:00,+01:00,BST -1989-10-29T01:00:00,+00:00,GMT -1990-03-25T01:00:00,+01:00,BST -1990-10-28T01:00:00,+00:00,GMT -1991-03-31T01:00:00,+01:00,BST -1991-10-27T01:00:00,+00:00,GMT -1992-03-29T01:00:00,+01:00,BST -1992-10-25T01:00:00,+00:00,GMT -1993-03-28T01:00:00,+01:00,BST -1993-10-24T01:00:00,+00:00,GMT -1994-03-27T01:00:00,+01:00,BST -1994-10-23T01:00:00,+00:00,GMT -1995-03-26T01:00:00,+01:00,BST -1995-10-22T01:00:00,+00:00,GMT -1996-03-31T01:00:00,+01:00,BST -1996-10-27T01:00:00,+00:00,GMT -1997-03-30T01:00:00,+01:00,BST -1997-10-26T01:00:00,+00:00,GMT -1998-03-29T01:00:00,+01:00,BST -1998-10-25T01:00:00,+00:00,GMT -1999-03-28T01:00:00,+01:00,BST -1999-10-31T01:00:00,+00:00,GMT -2000-03-26T01:00:00,+01:00,BST -2000-10-29T01:00:00,+00:00,GMT -2001-03-25T01:00:00,+01:00,BST -2001-10-28T01:00:00,+00:00,GMT -2002-03-31T01:00:00,+01:00,BST -2002-10-27T01:00:00,+00:00,GMT -2003-03-30T01:00:00,+01:00,BST -2003-10-26T01:00:00,+00:00,GMT -2004-03-28T01:00:00,+01:00,BST -2004-10-31T01:00:00,+00:00,GMT -2005-03-27T01:00:00,+01:00,BST -2005-10-30T01:00:00,+00:00,GMT -2006-03-26T01:00:00,+01:00,BST -2006-10-29T01:00:00,+00:00,GMT -2007-03-25T01:00:00,+01:00,BST -2007-10-28T01:00:00,+00:00,GMT -2008-03-30T01:00:00,+01:00,BST -2008-10-26T01:00:00,+00:00,GMT -2009-03-29T01:00:00,+01:00,BST -2009-10-25T01:00:00,+00:00,GMT -2010-03-28T01:00:00,+01:00,BST -2010-10-31T01:00:00,+00:00,GMT -2011-03-27T01:00:00,+01:00,BST -2011-10-30T01:00:00,+00:00,GMT -2012-03-25T01:00:00,+01:00,BST -2012-10-28T01:00:00,+00:00,GMT -2013-03-31T01:00:00,+01:00,BST -2013-10-27T01:00:00,+00:00,GMT -2014-03-30T01:00:00,+01:00,BST -2014-10-26T01:00:00,+00:00,GMT -2015-03-29T01:00:00,+01:00,BST -2015-10-25T01:00:00,+00:00,GMT -2016-03-27T01:00:00,+01:00,BST -2016-10-30T01:00:00,+00:00,GMT -2017-03-26T01:00:00,+01:00,BST -2017-10-29T01:00:00,+00:00,GMT -2018-03-25T01:00:00,+01:00,BST -2018-10-28T01:00:00,+00:00,GMT -2019-03-31T01:00:00,+01:00,BST -2019-10-27T01:00:00,+00:00,GMT -2020-03-29T01:00:00,+01:00,BST -2020-10-25T01:00:00,+00:00,GMT -2021-03-28T01:00:00,+01:00,BST -2021-10-31T01:00:00,+00:00,GMT -2022-03-27T01:00:00,+01:00,BST -2022-10-30T01:00:00,+00:00,GMT -2023-03-26T01:00:00,+01:00,BST -2023-10-29T01:00:00,+00:00,GMT -2024-03-31T01:00:00,+01:00,BST -2024-10-27T01:00:00,+00:00,GMT -2025-03-30T01:00:00,+01:00,BST -2025-10-26T01:00:00,+00:00,GMT -2026-03-29T01:00:00,+01:00,BST -2026-10-25T01:00:00,+00:00,GMT -2027-03-28T01:00:00,+01:00,BST -2027-10-31T01:00:00,+00:00,GMT -2028-03-26T01:00:00,+01:00,BST -2028-10-29T01:00:00,+00:00,GMT -2029-03-25T01:00:00,+01:00,BST -2029-10-28T01:00:00,+00:00,GMT -2030-03-31T01:00:00,+01:00,BST -2030-10-27T01:00:00,+00:00,GMT -2031-03-30T01:00:00,+01:00,BST -2031-10-26T01:00:00,+00:00,GMT -2032-03-28T01:00:00,+01:00,BST -2032-10-31T01:00:00,+00:00,GMT -2033-03-27T01:00:00,+01:00,BST -2033-10-30T01:00:00,+00:00,GMT -2034-03-26T01:00:00,+01:00,BST -2034-10-29T01:00:00,+00:00,GMT -2035-03-25T01:00:00,+01:00,BST -2035-10-28T01:00:00,+00:00,GMT -2036-03-30T01:00:00,+01:00,BST -2036-10-26T01:00:00,+00:00,GMT -2037-03-29T01:00:00,+01:00,BST -2037-10-25T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/europe-helsinki.hoon b/desk/lib/pytz/europe-helsinki.hoon deleted file mode 100644 index 96e7df5..0000000 --- a/desk/lib/pytz/europe-helsinki.hoon +++ /dev/null @@ -1,123 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:40,LMT -1901-12-13T20:45:52,+01:40,HMT -1921-04-30T22:20:11,+02:00,EET -1942-04-02T22:00:00,+03:00,EEST -1942-10-03T22:00:00,+02:00,EET -1981-03-29T00:00:00,+03:00,EEST -1981-09-27T00:00:00,+02:00,EET -1982-03-28T00:00:00,+03:00,EEST -1982-09-26T00:00:00,+02:00,EET -1983-03-27T01:00:00,+03:00,EEST -1983-09-25T01:00:00,+02:00,EET -1984-03-25T01:00:00,+03:00,EEST -1984-09-30T01:00:00,+02:00,EET -1985-03-31T01:00:00,+03:00,EEST -1985-09-29T01:00:00,+02:00,EET -1986-03-30T01:00:00,+03:00,EEST -1986-09-28T01:00:00,+02:00,EET -1987-03-29T01:00:00,+03:00,EEST -1987-09-27T01:00:00,+02:00,EET -1988-03-27T01:00:00,+03:00,EEST -1988-09-25T01:00:00,+02:00,EET -1989-03-26T01:00:00,+03:00,EEST -1989-09-24T01:00:00,+02:00,EET -1990-03-25T01:00:00,+03:00,EEST -1990-09-30T01:00:00,+02:00,EET -1991-03-31T01:00:00,+03:00,EEST -1991-09-29T01:00:00,+02:00,EET -1992-03-29T01:00:00,+03:00,EEST -1992-09-27T01:00:00,+02:00,EET -1993-03-28T01:00:00,+03:00,EEST -1993-09-26T01:00:00,+02:00,EET -1994-03-27T01:00:00,+03:00,EEST -1994-09-25T01:00:00,+02:00,EET -1995-03-26T01:00:00,+03:00,EEST -1995-09-24T01:00:00,+02:00,EET -1996-03-31T01:00:00,+03:00,EEST -1996-10-27T01:00:00,+02:00,EET -1997-03-30T01:00:00,+03:00,EEST -1997-10-26T01:00:00,+02:00,EET -1998-03-29T01:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-isle-of-man.hoon b/desk/lib/pytz/europe-isle-of-man.hoon deleted file mode 100644 index 226b16d..0000000 --- a/desk/lib/pytz/europe-isle-of-man.hoon +++ /dev/null @@ -1,246 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+00:00,GMT -1916-05-21T02:00:00,+01:00,BST -1916-10-01T02:00:00,+00:00,GMT -1917-04-08T02:00:00,+01:00,BST -1917-09-17T02:00:00,+00:00,GMT -1918-03-24T02:00:00,+01:00,BST -1918-09-30T02:00:00,+00:00,GMT -1919-03-30T02:00:00,+01:00,BST -1919-09-29T02:00:00,+00:00,GMT -1920-03-28T02:00:00,+01:00,BST -1920-10-25T02:00:00,+00:00,GMT -1921-04-03T02:00:00,+01:00,BST -1921-10-03T02:00:00,+00:00,GMT -1922-03-26T02:00:00,+01:00,BST -1922-10-08T02:00:00,+00:00,GMT -1923-04-22T02:00:00,+01:00,BST -1923-09-16T02:00:00,+00:00,GMT -1924-04-13T02:00:00,+01:00,BST -1924-09-21T02:00:00,+00:00,GMT -1925-04-19T02:00:00,+01:00,BST -1925-10-04T02:00:00,+00:00,GMT -1926-04-18T02:00:00,+01:00,BST -1926-10-03T02:00:00,+00:00,GMT -1927-04-10T02:00:00,+01:00,BST -1927-10-02T02:00:00,+00:00,GMT -1928-04-22T02:00:00,+01:00,BST -1928-10-07T02:00:00,+00:00,GMT -1929-04-21T02:00:00,+01:00,BST -1929-10-06T02:00:00,+00:00,GMT -1930-04-13T02:00:00,+01:00,BST -1930-10-05T02:00:00,+00:00,GMT -1931-04-19T02:00:00,+01:00,BST -1931-10-04T02:00:00,+00:00,GMT -1932-04-17T02:00:00,+01:00,BST -1932-10-02T02:00:00,+00:00,GMT -1933-04-09T02:00:00,+01:00,BST -1933-10-08T02:00:00,+00:00,GMT -1934-04-22T02:00:00,+01:00,BST -1934-10-07T02:00:00,+00:00,GMT -1935-04-14T02:00:00,+01:00,BST -1935-10-06T02:00:00,+00:00,GMT -1936-04-19T02:00:00,+01:00,BST -1936-10-04T02:00:00,+00:00,GMT -1937-04-18T02:00:00,+01:00,BST -1937-10-03T02:00:00,+00:00,GMT -1938-04-10T02:00:00,+01:00,BST -1938-10-02T02:00:00,+00:00,GMT -1939-04-16T02:00:00,+01:00,BST -1939-11-19T02:00:00,+00:00,GMT -1940-02-25T02:00:00,+01:00,BST -1941-05-04T01:00:00,+02:00,BDST -1941-08-10T01:00:00,+01:00,BST -1942-04-05T01:00:00,+02:00,BDST -1942-08-09T01:00:00,+01:00,BST -1943-04-04T01:00:00,+02:00,BDST -1943-08-15T01:00:00,+01:00,BST -1944-04-02T01:00:00,+02:00,BDST -1944-09-17T01:00:00,+01:00,BST -1945-04-02T01:00:00,+02:00,BDST -1945-07-15T01:00:00,+01:00,BST -1945-10-07T02:00:00,+00:00,GMT -1946-04-14T02:00:00,+01:00,BST -1946-10-06T02:00:00,+00:00,GMT -1947-03-16T02:00:00,+01:00,BST -1947-04-13T01:00:00,+02:00,BDST -1947-08-10T01:00:00,+01:00,BST -1947-11-02T02:00:00,+00:00,GMT -1948-03-14T02:00:00,+01:00,BST -1948-10-31T02:00:00,+00:00,GMT -1949-04-03T02:00:00,+01:00,BST -1949-10-30T02:00:00,+00:00,GMT -1950-04-16T02:00:00,+01:00,BST -1950-10-22T02:00:00,+00:00,GMT -1951-04-15T02:00:00,+01:00,BST -1951-10-21T02:00:00,+00:00,GMT -1952-04-20T02:00:00,+01:00,BST -1952-10-26T02:00:00,+00:00,GMT -1953-04-19T02:00:00,+01:00,BST -1953-10-04T02:00:00,+00:00,GMT -1954-04-11T02:00:00,+01:00,BST -1954-10-03T02:00:00,+00:00,GMT -1955-04-17T02:00:00,+01:00,BST -1955-10-02T02:00:00,+00:00,GMT -1956-04-22T02:00:00,+01:00,BST -1956-10-07T02:00:00,+00:00,GMT -1957-04-14T02:00:00,+01:00,BST -1957-10-06T02:00:00,+00:00,GMT -1958-04-20T02:00:00,+01:00,BST -1958-10-05T02:00:00,+00:00,GMT -1959-04-19T02:00:00,+01:00,BST -1959-10-04T02:00:00,+00:00,GMT -1960-04-10T02:00:00,+01:00,BST -1960-10-02T02:00:00,+00:00,GMT -1961-03-26T02:00:00,+01:00,BST -1961-10-29T02:00:00,+00:00,GMT -1962-03-25T02:00:00,+01:00,BST -1962-10-28T02:00:00,+00:00,GMT -1963-03-31T02:00:00,+01:00,BST -1963-10-27T02:00:00,+00:00,GMT -1964-03-22T02:00:00,+01:00,BST -1964-10-25T02:00:00,+00:00,GMT -1965-03-21T02:00:00,+01:00,BST -1965-10-24T02:00:00,+00:00,GMT -1966-03-20T02:00:00,+01:00,BST -1966-10-23T02:00:00,+00:00,GMT -1967-03-19T02:00:00,+01:00,BST -1967-10-29T02:00:00,+00:00,GMT -1968-02-18T02:00:00,+01:00,BST -1968-10-26T23:00:00,+01:00,BST -1971-10-31T02:00:00,+00:00,GMT -1972-03-19T02:00:00,+01:00,BST -1972-10-29T02:00:00,+00:00,GMT -1973-03-18T02:00:00,+01:00,BST -1973-10-28T02:00:00,+00:00,GMT -1974-03-17T02:00:00,+01:00,BST -1974-10-27T02:00:00,+00:00,GMT -1975-03-16T02:00:00,+01:00,BST -1975-10-26T02:00:00,+00:00,GMT -1976-03-21T02:00:00,+01:00,BST -1976-10-24T02:00:00,+00:00,GMT -1977-03-20T02:00:00,+01:00,BST -1977-10-23T02:00:00,+00:00,GMT -1978-03-19T02:00:00,+01:00,BST -1978-10-29T02:00:00,+00:00,GMT -1979-03-18T02:00:00,+01:00,BST -1979-10-28T02:00:00,+00:00,GMT -1980-03-16T02:00:00,+01:00,BST -1980-10-26T02:00:00,+00:00,GMT -1981-03-29T01:00:00,+01:00,BST -1981-10-25T01:00:00,+00:00,GMT -1982-03-28T01:00:00,+01:00,BST -1982-10-24T01:00:00,+00:00,GMT -1983-03-27T01:00:00,+01:00,BST -1983-10-23T01:00:00,+00:00,GMT -1984-03-25T01:00:00,+01:00,BST -1984-10-28T01:00:00,+00:00,GMT -1985-03-31T01:00:00,+01:00,BST -1985-10-27T01:00:00,+00:00,GMT -1986-03-30T01:00:00,+01:00,BST -1986-10-26T01:00:00,+00:00,GMT -1987-03-29T01:00:00,+01:00,BST -1987-10-25T01:00:00,+00:00,GMT -1988-03-27T01:00:00,+01:00,BST -1988-10-23T01:00:00,+00:00,GMT -1989-03-26T01:00:00,+01:00,BST -1989-10-29T01:00:00,+00:00,GMT -1990-03-25T01:00:00,+01:00,BST -1990-10-28T01:00:00,+00:00,GMT -1991-03-31T01:00:00,+01:00,BST -1991-10-27T01:00:00,+00:00,GMT -1992-03-29T01:00:00,+01:00,BST -1992-10-25T01:00:00,+00:00,GMT -1993-03-28T01:00:00,+01:00,BST -1993-10-24T01:00:00,+00:00,GMT -1994-03-27T01:00:00,+01:00,BST -1994-10-23T01:00:00,+00:00,GMT -1995-03-26T01:00:00,+01:00,BST -1995-10-22T01:00:00,+00:00,GMT -1996-03-31T01:00:00,+01:00,BST -1996-10-27T01:00:00,+00:00,GMT -1997-03-30T01:00:00,+01:00,BST -1997-10-26T01:00:00,+00:00,GMT -1998-03-29T01:00:00,+01:00,BST -1998-10-25T01:00:00,+00:00,GMT -1999-03-28T01:00:00,+01:00,BST -1999-10-31T01:00:00,+00:00,GMT -2000-03-26T01:00:00,+01:00,BST -2000-10-29T01:00:00,+00:00,GMT -2001-03-25T01:00:00,+01:00,BST -2001-10-28T01:00:00,+00:00,GMT -2002-03-31T01:00:00,+01:00,BST -2002-10-27T01:00:00,+00:00,GMT -2003-03-30T01:00:00,+01:00,BST -2003-10-26T01:00:00,+00:00,GMT -2004-03-28T01:00:00,+01:00,BST -2004-10-31T01:00:00,+00:00,GMT -2005-03-27T01:00:00,+01:00,BST -2005-10-30T01:00:00,+00:00,GMT -2006-03-26T01:00:00,+01:00,BST -2006-10-29T01:00:00,+00:00,GMT -2007-03-25T01:00:00,+01:00,BST -2007-10-28T01:00:00,+00:00,GMT -2008-03-30T01:00:00,+01:00,BST -2008-10-26T01:00:00,+00:00,GMT -2009-03-29T01:00:00,+01:00,BST -2009-10-25T01:00:00,+00:00,GMT -2010-03-28T01:00:00,+01:00,BST -2010-10-31T01:00:00,+00:00,GMT -2011-03-27T01:00:00,+01:00,BST -2011-10-30T01:00:00,+00:00,GMT -2012-03-25T01:00:00,+01:00,BST -2012-10-28T01:00:00,+00:00,GMT -2013-03-31T01:00:00,+01:00,BST -2013-10-27T01:00:00,+00:00,GMT -2014-03-30T01:00:00,+01:00,BST -2014-10-26T01:00:00,+00:00,GMT -2015-03-29T01:00:00,+01:00,BST -2015-10-25T01:00:00,+00:00,GMT -2016-03-27T01:00:00,+01:00,BST -2016-10-30T01:00:00,+00:00,GMT -2017-03-26T01:00:00,+01:00,BST -2017-10-29T01:00:00,+00:00,GMT -2018-03-25T01:00:00,+01:00,BST -2018-10-28T01:00:00,+00:00,GMT -2019-03-31T01:00:00,+01:00,BST -2019-10-27T01:00:00,+00:00,GMT -2020-03-29T01:00:00,+01:00,BST -2020-10-25T01:00:00,+00:00,GMT -2021-03-28T01:00:00,+01:00,BST -2021-10-31T01:00:00,+00:00,GMT -2022-03-27T01:00:00,+01:00,BST -2022-10-30T01:00:00,+00:00,GMT -2023-03-26T01:00:00,+01:00,BST -2023-10-29T01:00:00,+00:00,GMT -2024-03-31T01:00:00,+01:00,BST -2024-10-27T01:00:00,+00:00,GMT -2025-03-30T01:00:00,+01:00,BST -2025-10-26T01:00:00,+00:00,GMT -2026-03-29T01:00:00,+01:00,BST -2026-10-25T01:00:00,+00:00,GMT -2027-03-28T01:00:00,+01:00,BST -2027-10-31T01:00:00,+00:00,GMT -2028-03-26T01:00:00,+01:00,BST -2028-10-29T01:00:00,+00:00,GMT -2029-03-25T01:00:00,+01:00,BST -2029-10-28T01:00:00,+00:00,GMT -2030-03-31T01:00:00,+01:00,BST -2030-10-27T01:00:00,+00:00,GMT -2031-03-30T01:00:00,+01:00,BST -2031-10-26T01:00:00,+00:00,GMT -2032-03-28T01:00:00,+01:00,BST -2032-10-31T01:00:00,+00:00,GMT -2033-03-27T01:00:00,+01:00,BST -2033-10-30T01:00:00,+00:00,GMT -2034-03-26T01:00:00,+01:00,BST -2034-10-29T01:00:00,+00:00,GMT -2035-03-25T01:00:00,+01:00,BST -2035-10-28T01:00:00,+00:00,GMT -2036-03-30T01:00:00,+01:00,BST -2036-10-26T01:00:00,+00:00,GMT -2037-03-29T01:00:00,+01:00,BST -2037-10-25T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/europe-istanbul.hoon b/desk/lib/pytz/europe-istanbul.hoon deleted file mode 100644 index 74a1c70..0000000 --- a/desk/lib/pytz/europe-istanbul.hoon +++ /dev/null @@ -1,120 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:56,LMT -1901-12-13T20:45:52,+01:57,IMT -1910-09-30T22:03:04,+02:00,EET -1916-04-30T22:00:00,+03:00,EEST -1916-09-30T21:00:00,+02:00,EET -1920-03-27T22:00:00,+03:00,EEST -1920-10-24T21:00:00,+02:00,EET -1921-04-02T22:00:00,+03:00,EEST -1921-10-02T21:00:00,+02:00,EET -1922-03-25T22:00:00,+03:00,EEST -1922-10-07T21:00:00,+02:00,EET -1924-05-12T22:00:00,+03:00,EEST -1924-09-30T21:00:00,+02:00,EET -1925-04-30T22:00:00,+03:00,EEST -1925-09-30T21:00:00,+02:00,EET -1940-06-30T22:00:00,+03:00,EEST -1940-10-05T21:00:00,+02:00,EET -1940-11-30T22:00:00,+03:00,EEST -1941-09-20T21:00:00,+02:00,EET -1942-03-31T22:00:00,+03:00,EEST -1945-10-07T21:00:00,+02:00,EET -1946-05-31T22:00:00,+03:00,EEST -1946-09-30T21:00:00,+02:00,EET -1947-04-19T22:00:00,+03:00,EEST -1947-10-04T21:00:00,+02:00,EET -1948-04-17T22:00:00,+03:00,EEST -1948-10-02T21:00:00,+02:00,EET -1949-04-09T22:00:00,+03:00,EEST -1949-10-01T21:00:00,+02:00,EET -1950-04-15T22:00:00,+03:00,EEST -1950-10-07T21:00:00,+02:00,EET -1951-04-21T22:00:00,+03:00,EEST -1951-10-06T21:00:00,+02:00,EET -1962-07-14T22:00:00,+03:00,EEST -1963-10-29T21:00:00,+02:00,EET -1964-05-14T22:00:00,+03:00,EEST -1964-09-30T21:00:00,+02:00,EET -1973-06-02T23:00:00,+03:00,EEST -1973-11-03T23:00:00,+02:00,EET -1974-03-31T00:00:00,+03:00,EEST -1974-11-02T23:00:00,+02:00,EET -1975-03-22T00:00:00,+03:00,EEST -1975-11-01T23:00:00,+02:00,EET -1976-03-21T00:00:00,+03:00,EEST -1976-10-30T23:00:00,+02:00,EET -1977-04-03T00:00:00,+03:00,EEST -1977-10-15T23:00:00,+02:00,EET -1978-04-02T00:00:00,+03:00,EEST -1978-06-28T21:00:00,+03:00,+03 -1983-07-30T23:00:00,+04:00,+04 -1983-10-01T22:00:00,+03:00,+03 -1984-10-31T23:00:00,+02:00,EET -1985-04-19T23:00:00,+03:00,EEST -1985-09-27T23:00:00,+02:00,EET -1986-03-29T23:00:00,+03:00,EEST -1986-09-27T23:00:00,+02:00,EET -1987-03-28T23:00:00,+03:00,EEST -1987-09-26T23:00:00,+02:00,EET -1988-03-26T23:00:00,+03:00,EEST -1988-09-24T23:00:00,+02:00,EET -1989-03-25T23:00:00,+03:00,EEST -1989-09-23T23:00:00,+02:00,EET -1990-03-24T23:00:00,+03:00,EEST -1990-09-29T23:00:00,+02:00,EET -1991-03-30T23:00:00,+03:00,EEST -1991-09-28T23:00:00,+02:00,EET -1992-03-28T23:00:00,+03:00,EEST -1992-09-26T23:00:00,+02:00,EET -1993-03-27T23:00:00,+03:00,EEST -1993-09-25T23:00:00,+02:00,EET -1994-03-19T23:00:00,+03:00,EEST -1994-09-24T23:00:00,+02:00,EET -1995-03-25T23:00:00,+03:00,EEST -1995-09-23T23:00:00,+02:00,EET -1996-03-30T23:00:00,+03:00,EEST -1996-10-26T23:00:00,+02:00,EET -1997-03-29T23:00:00,+03:00,EEST -1997-10-25T23:00:00,+02:00,EET -1998-03-28T23:00:00,+03:00,EEST -1998-10-24T23:00:00,+02:00,EET -1999-03-27T23:00:00,+03:00,EEST -1999-10-30T23:00:00,+02:00,EET -2000-03-25T23:00:00,+03:00,EEST -2000-10-28T23:00:00,+02:00,EET -2001-03-24T23:00:00,+03:00,EEST -2001-10-27T23:00:00,+02:00,EET -2002-03-30T23:00:00,+03:00,EEST -2002-10-26T23:00:00,+02:00,EET -2003-03-29T23:00:00,+03:00,EEST -2003-10-25T23:00:00,+02:00,EET -2004-03-27T23:00:00,+03:00,EEST -2004-10-30T23:00:00,+02:00,EET -2005-03-26T23:00:00,+03:00,EEST -2005-10-29T23:00:00,+02:00,EET -2006-03-25T23:00:00,+03:00,EEST -2006-10-28T23:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-28T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-31T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-11-08T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-09-06T21:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/europe-jersey.hoon b/desk/lib/pytz/europe-jersey.hoon deleted file mode 100644 index f87c3ac..0000000 --- a/desk/lib/pytz/europe-jersey.hoon +++ /dev/null @@ -1,245 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+00:00,GMT -1916-05-21T02:00:00,+01:00,BST -1916-10-01T02:00:00,+00:00,GMT -1917-04-08T02:00:00,+01:00,BST -1917-09-17T02:00:00,+00:00,GMT -1918-03-24T02:00:00,+01:00,BST -1918-09-30T02:00:00,+00:00,GMT -1919-03-30T02:00:00,+01:00,BST -1919-09-29T02:00:00,+00:00,GMT -1920-03-28T02:00:00,+01:00,BST -1920-10-25T02:00:00,+00:00,GMT -1921-04-03T02:00:00,+01:00,BST -1921-10-03T02:00:00,+00:00,GMT -1922-03-26T02:00:00,+01:00,BST -1922-10-08T02:00:00,+00:00,GMT -1923-04-22T02:00:00,+01:00,BST -1923-09-16T02:00:00,+00:00,GMT -1924-04-13T02:00:00,+01:00,BST -1924-09-21T02:00:00,+00:00,GMT -1925-04-19T02:00:00,+01:00,BST -1925-10-04T02:00:00,+00:00,GMT -1926-04-18T02:00:00,+01:00,BST -1926-10-03T02:00:00,+00:00,GMT -1927-04-10T02:00:00,+01:00,BST -1927-10-02T02:00:00,+00:00,GMT -1928-04-22T02:00:00,+01:00,BST -1928-10-07T02:00:00,+00:00,GMT -1929-04-21T02:00:00,+01:00,BST -1929-10-06T02:00:00,+00:00,GMT -1930-04-13T02:00:00,+01:00,BST -1930-10-05T02:00:00,+00:00,GMT -1931-04-19T02:00:00,+01:00,BST -1931-10-04T02:00:00,+00:00,GMT -1932-04-17T02:00:00,+01:00,BST -1932-10-02T02:00:00,+00:00,GMT -1933-04-09T02:00:00,+01:00,BST -1933-10-08T02:00:00,+00:00,GMT -1934-04-22T02:00:00,+01:00,BST -1934-10-07T02:00:00,+00:00,GMT -1935-04-14T02:00:00,+01:00,BST -1935-10-06T02:00:00,+00:00,GMT -1936-04-19T02:00:00,+01:00,BST -1936-10-04T02:00:00,+00:00,GMT -1937-04-18T02:00:00,+01:00,BST -1937-10-03T02:00:00,+00:00,GMT -1938-04-10T02:00:00,+01:00,BST -1938-10-02T02:00:00,+00:00,GMT -1939-04-16T02:00:00,+01:00,BST -1939-11-19T02:00:00,+00:00,GMT -1940-02-25T02:00:00,+01:00,BST -1940-07-01T23:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-05-07T22:00:00,+02:00,BDST -1945-07-15T01:00:00,+01:00,BST -1945-10-07T02:00:00,+00:00,GMT -1946-04-14T02:00:00,+01:00,BST -1946-10-06T02:00:00,+00:00,GMT -1947-03-16T02:00:00,+01:00,BST -1947-04-13T01:00:00,+02:00,BDST -1947-08-10T01:00:00,+01:00,BST -1947-11-02T02:00:00,+00:00,GMT -1948-03-14T02:00:00,+01:00,BST -1948-10-31T02:00:00,+00:00,GMT -1949-04-03T02:00:00,+01:00,BST -1949-10-30T02:00:00,+00:00,GMT -1950-04-16T02:00:00,+01:00,BST -1950-10-22T02:00:00,+00:00,GMT -1951-04-15T02:00:00,+01:00,BST -1951-10-21T02:00:00,+00:00,GMT -1952-04-20T02:00:00,+01:00,BST -1952-10-26T02:00:00,+00:00,GMT -1953-04-19T02:00:00,+01:00,BST -1953-10-04T02:00:00,+00:00,GMT -1954-04-11T02:00:00,+01:00,BST -1954-10-03T02:00:00,+00:00,GMT -1955-04-17T02:00:00,+01:00,BST -1955-10-02T02:00:00,+00:00,GMT -1956-04-22T02:00:00,+01:00,BST -1956-10-07T02:00:00,+00:00,GMT -1957-04-14T02:00:00,+01:00,BST -1957-10-06T02:00:00,+00:00,GMT -1958-04-20T02:00:00,+01:00,BST -1958-10-05T02:00:00,+00:00,GMT -1959-04-19T02:00:00,+01:00,BST -1959-10-04T02:00:00,+00:00,GMT -1960-04-10T02:00:00,+01:00,BST -1960-10-02T02:00:00,+00:00,GMT -1961-03-26T02:00:00,+01:00,BST -1961-10-29T02:00:00,+00:00,GMT -1962-03-25T02:00:00,+01:00,BST -1962-10-28T02:00:00,+00:00,GMT -1963-03-31T02:00:00,+01:00,BST -1963-10-27T02:00:00,+00:00,GMT -1964-03-22T02:00:00,+01:00,BST -1964-10-25T02:00:00,+00:00,GMT -1965-03-21T02:00:00,+01:00,BST -1965-10-24T02:00:00,+00:00,GMT -1966-03-20T02:00:00,+01:00,BST -1966-10-23T02:00:00,+00:00,GMT -1967-03-19T02:00:00,+01:00,BST -1967-10-29T02:00:00,+00:00,GMT -1968-02-18T02:00:00,+01:00,BST -1968-10-26T23:00:00,+01:00,BST -1971-10-31T02:00:00,+00:00,GMT -1972-03-19T02:00:00,+01:00,BST -1972-10-29T02:00:00,+00:00,GMT -1973-03-18T02:00:00,+01:00,BST -1973-10-28T02:00:00,+00:00,GMT -1974-03-17T02:00:00,+01:00,BST -1974-10-27T02:00:00,+00:00,GMT -1975-03-16T02:00:00,+01:00,BST -1975-10-26T02:00:00,+00:00,GMT -1976-03-21T02:00:00,+01:00,BST -1976-10-24T02:00:00,+00:00,GMT -1977-03-20T02:00:00,+01:00,BST -1977-10-23T02:00:00,+00:00,GMT -1978-03-19T02:00:00,+01:00,BST -1978-10-29T02:00:00,+00:00,GMT -1979-03-18T02:00:00,+01:00,BST -1979-10-28T02:00:00,+00:00,GMT -1980-03-16T02:00:00,+01:00,BST -1980-10-26T02:00:00,+00:00,GMT -1981-03-29T01:00:00,+01:00,BST -1981-10-25T01:00:00,+00:00,GMT -1982-03-28T01:00:00,+01:00,BST -1982-10-24T01:00:00,+00:00,GMT -1983-03-27T01:00:00,+01:00,BST -1983-10-23T01:00:00,+00:00,GMT -1984-03-25T01:00:00,+01:00,BST -1984-10-28T01:00:00,+00:00,GMT -1985-03-31T01:00:00,+01:00,BST -1985-10-27T01:00:00,+00:00,GMT -1986-03-30T01:00:00,+01:00,BST -1986-10-26T01:00:00,+00:00,GMT -1987-03-29T01:00:00,+01:00,BST -1987-10-25T01:00:00,+00:00,GMT -1988-03-27T01:00:00,+01:00,BST -1988-10-23T01:00:00,+00:00,GMT -1989-03-26T01:00:00,+01:00,BST -1989-10-29T01:00:00,+00:00,GMT -1990-03-25T01:00:00,+01:00,BST -1990-10-28T01:00:00,+00:00,GMT -1991-03-31T01:00:00,+01:00,BST -1991-10-27T01:00:00,+00:00,GMT -1992-03-29T01:00:00,+01:00,BST -1992-10-25T01:00:00,+00:00,GMT -1993-03-28T01:00:00,+01:00,BST -1993-10-24T01:00:00,+00:00,GMT -1994-03-27T01:00:00,+01:00,BST -1994-10-23T01:00:00,+00:00,GMT -1995-03-26T01:00:00,+01:00,BST -1995-10-22T01:00:00,+00:00,GMT -1996-03-31T01:00:00,+01:00,BST -1996-10-27T01:00:00,+00:00,GMT -1997-03-30T01:00:00,+01:00,BST -1997-10-26T01:00:00,+00:00,GMT -1998-03-29T01:00:00,+01:00,BST -1998-10-25T01:00:00,+00:00,GMT -1999-03-28T01:00:00,+01:00,BST -1999-10-31T01:00:00,+00:00,GMT -2000-03-26T01:00:00,+01:00,BST -2000-10-29T01:00:00,+00:00,GMT -2001-03-25T01:00:00,+01:00,BST -2001-10-28T01:00:00,+00:00,GMT -2002-03-31T01:00:00,+01:00,BST -2002-10-27T01:00:00,+00:00,GMT -2003-03-30T01:00:00,+01:00,BST -2003-10-26T01:00:00,+00:00,GMT -2004-03-28T01:00:00,+01:00,BST -2004-10-31T01:00:00,+00:00,GMT -2005-03-27T01:00:00,+01:00,BST -2005-10-30T01:00:00,+00:00,GMT -2006-03-26T01:00:00,+01:00,BST -2006-10-29T01:00:00,+00:00,GMT -2007-03-25T01:00:00,+01:00,BST -2007-10-28T01:00:00,+00:00,GMT -2008-03-30T01:00:00,+01:00,BST -2008-10-26T01:00:00,+00:00,GMT -2009-03-29T01:00:00,+01:00,BST -2009-10-25T01:00:00,+00:00,GMT -2010-03-28T01:00:00,+01:00,BST -2010-10-31T01:00:00,+00:00,GMT -2011-03-27T01:00:00,+01:00,BST -2011-10-30T01:00:00,+00:00,GMT -2012-03-25T01:00:00,+01:00,BST -2012-10-28T01:00:00,+00:00,GMT -2013-03-31T01:00:00,+01:00,BST -2013-10-27T01:00:00,+00:00,GMT -2014-03-30T01:00:00,+01:00,BST -2014-10-26T01:00:00,+00:00,GMT -2015-03-29T01:00:00,+01:00,BST -2015-10-25T01:00:00,+00:00,GMT -2016-03-27T01:00:00,+01:00,BST -2016-10-30T01:00:00,+00:00,GMT -2017-03-26T01:00:00,+01:00,BST -2017-10-29T01:00:00,+00:00,GMT -2018-03-25T01:00:00,+01:00,BST -2018-10-28T01:00:00,+00:00,GMT -2019-03-31T01:00:00,+01:00,BST -2019-10-27T01:00:00,+00:00,GMT -2020-03-29T01:00:00,+01:00,BST -2020-10-25T01:00:00,+00:00,GMT -2021-03-28T01:00:00,+01:00,BST -2021-10-31T01:00:00,+00:00,GMT -2022-03-27T01:00:00,+01:00,BST -2022-10-30T01:00:00,+00:00,GMT -2023-03-26T01:00:00,+01:00,BST -2023-10-29T01:00:00,+00:00,GMT -2024-03-31T01:00:00,+01:00,BST -2024-10-27T01:00:00,+00:00,GMT -2025-03-30T01:00:00,+01:00,BST -2025-10-26T01:00:00,+00:00,GMT -2026-03-29T01:00:00,+01:00,BST -2026-10-25T01:00:00,+00:00,GMT -2027-03-28T01:00:00,+01:00,BST -2027-10-31T01:00:00,+00:00,GMT -2028-03-26T01:00:00,+01:00,BST -2028-10-29T01:00:00,+00:00,GMT -2029-03-25T01:00:00,+01:00,BST -2029-10-28T01:00:00,+00:00,GMT -2030-03-31T01:00:00,+01:00,BST -2030-10-27T01:00:00,+00:00,GMT -2031-03-30T01:00:00,+01:00,BST -2031-10-26T01:00:00,+00:00,GMT -2032-03-28T01:00:00,+01:00,BST -2032-10-31T01:00:00,+00:00,GMT -2033-03-27T01:00:00,+01:00,BST -2033-10-30T01:00:00,+00:00,GMT -2034-03-26T01:00:00,+01:00,BST -2034-10-29T01:00:00,+00:00,GMT -2035-03-25T01:00:00,+01:00,BST -2035-10-28T01:00:00,+00:00,GMT -2036-03-30T01:00:00,+01:00,BST -2036-10-26T01:00:00,+00:00,GMT -2037-03-29T01:00:00,+01:00,BST -2037-10-25T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/europe-kaliningrad.hoon b/desk/lib/pytz/europe-kaliningrad.hoon deleted file mode 100644 index 5dce7e7..0000000 --- a/desk/lib/pytz/europe-kaliningrad.hoon +++ /dev/null @@ -1,85 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:22,LMT -1901-12-13T20:45:52,+01:00,CET -1916-04-30T22:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1917-04-16T01:00:00,+02:00,CEST -1917-09-17T01:00:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+01:00,CET -1940-04-01T01:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-04-09T22:00:00,+02:00,EET -1945-04-28T22:00:00,+03:00,EEST -1945-10-31T21:00:00,+02:00,EET -1946-04-06T22:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+03:00,EEST -1989-09-24T00:00:00,+02:00,EET -1990-03-25T00:00:00,+03:00,EEST -1990-09-30T00:00:00,+02:00,EET -1991-03-31T00:00:00,+03:00,EEST -1991-09-29T00:00:00,+02:00,EET -1992-03-29T00:00:00,+03:00,EEST -1992-09-27T00:00:00,+02:00,EET -1993-03-28T00:00:00,+03:00,EEST -1993-09-26T00:00:00,+02:00,EET -1994-03-27T00:00:00,+03:00,EEST -1994-09-25T00:00:00,+02:00,EET -1995-03-26T00:00:00,+03:00,EEST -1995-09-24T00:00:00,+02:00,EET -1996-03-31T00:00:00,+03:00,EEST -1996-10-27T00:00:00,+02:00,EET -1997-03-30T00:00:00,+03:00,EEST -1997-10-26T00:00:00,+02:00,EET -1998-03-29T00:00:00,+03:00,EEST -1998-10-25T00:00:00,+02:00,EET -1999-03-28T00:00:00,+03:00,EEST -1999-10-31T00:00:00,+02:00,EET -2000-03-26T00:00:00,+03:00,EEST -2000-10-29T00:00:00,+02:00,EET -2001-03-25T00:00:00,+03:00,EEST -2001-10-28T00:00:00,+02:00,EET -2002-03-31T00:00:00,+03:00,EEST -2002-10-27T00:00:00,+02:00,EET -2003-03-30T00:00:00,+03:00,EEST -2003-10-26T00:00:00,+02:00,EET -2004-03-28T00:00:00,+03:00,EEST -2004-10-31T00:00:00,+02:00,EET -2005-03-27T00:00:00,+03:00,EEST -2005-10-30T00:00:00,+02:00,EET -2006-03-26T00:00:00,+03:00,EEST -2006-10-29T00:00:00,+02:00,EET -2007-03-25T00:00:00,+03:00,EEST -2007-10-28T00:00:00,+02:00,EET -2008-03-30T00:00:00,+03:00,EEST -2008-10-26T00:00:00,+02:00,EET -2009-03-29T00:00:00,+03:00,EEST -2009-10-25T00:00:00,+02:00,EET -2010-03-28T00:00:00,+03:00,EEST -2010-10-31T00:00:00,+02:00,EET -2011-03-27T00:00:00,+03:00,+03 -2014-10-25T23:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-kirov.hoon b/desk/lib/pytz/europe-kirov.hoon deleted file mode 100644 index d844560..0000000 --- a/desk/lib/pytz/europe-kirov.hoon +++ /dev/null @@ -1,68 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:19,LMT -1919-07-01T00:00:00,+03:00,+03 -1930-06-20T21:00:00,+04:00,+04 -1981-03-31T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+04:00,+04 -1982-03-31T20:00:00,+05:00,+05 -1982-09-30T19:00:00,+04:00,+04 -1983-03-31T20:00:00,+05:00,+05 -1983-09-30T19:00:00,+04:00,+04 -1984-03-31T20:00:00,+05:00,+05 -1984-09-29T22:00:00,+04:00,+04 -1985-03-30T22:00:00,+05:00,+05 -1985-09-28T22:00:00,+04:00,+04 -1986-03-29T22:00:00,+05:00,+05 -1986-09-27T22:00:00,+04:00,+04 -1987-03-28T22:00:00,+05:00,+05 -1987-09-26T22:00:00,+04:00,+04 -1988-03-26T22:00:00,+05:00,+05 -1988-09-24T22:00:00,+04:00,+04 -1989-03-25T22:00:00,+04:00,MSD -1989-09-23T23:00:00,+03:00,MSK -1990-03-24T23:00:00,+04:00,MSD -1990-09-29T23:00:00,+03:00,MSK -1991-03-30T23:00:00,+04:00,+04 -1992-03-28T22:00:00,+04:00,MSD -1992-09-26T23:00:00,+03:00,MSK -1993-03-27T23:00:00,+04:00,MSD -1993-09-25T23:00:00,+03:00,MSK -1994-03-26T23:00:00,+04:00,MSD -1994-09-24T23:00:00,+03:00,MSK -1995-03-25T23:00:00,+04:00,MSD -1995-09-23T23:00:00,+03:00,MSK -1996-03-30T23:00:00,+04:00,MSD -1996-10-26T23:00:00,+03:00,MSK -1997-03-29T23:00:00,+04:00,MSD -1997-10-25T23:00:00,+03:00,MSK -1998-03-28T23:00:00,+04:00,MSD -1998-10-24T23:00:00,+03:00,MSK -1999-03-27T23:00:00,+04:00,MSD -1999-10-30T23:00:00,+03:00,MSK -2000-03-25T23:00:00,+04:00,MSD -2000-10-28T23:00:00,+03:00,MSK -2001-03-24T23:00:00,+04:00,MSD -2001-10-27T23:00:00,+03:00,MSK -2002-03-30T23:00:00,+04:00,MSD -2002-10-26T23:00:00,+03:00,MSK -2003-03-29T23:00:00,+04:00,MSD -2003-10-25T23:00:00,+03:00,MSK -2004-03-27T23:00:00,+04:00,MSD -2004-10-30T23:00:00,+03:00,MSK -2005-03-26T23:00:00,+04:00,MSD -2005-10-29T23:00:00,+03:00,MSK -2006-03-25T23:00:00,+04:00,MSD -2006-10-28T23:00:00,+03:00,MSK -2007-03-24T23:00:00,+04:00,MSD -2007-10-27T23:00:00,+03:00,MSK -2008-03-29T23:00:00,+04:00,MSD -2008-10-25T23:00:00,+03:00,MSK -2009-03-28T23:00:00,+04:00,MSD -2009-10-24T23:00:00,+03:00,MSK -2010-03-27T23:00:00,+04:00,MSD -2010-10-30T23:00:00,+03:00,MSK -2011-03-26T23:00:00,+04:00,MSK -2014-10-25T22:00:00,+03:00,MSK -''' diff --git a/desk/lib/pytz/europe-kyiv.hoon b/desk/lib/pytz/europe-kyiv.hoon deleted file mode 100644 index f55bfb0..0000000 --- a/desk/lib/pytz/europe-kyiv.hoon +++ /dev/null @@ -1,126 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:02,LMT -1901-12-13T20:45:52,+02:02,KMT -1924-05-01T21:57:56,+02:00,EET -1930-06-20T22:00:00,+03:00,MSK -1941-09-19T21:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1943-11-05T23:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+04:00,MSD -1989-09-23T23:00:00,+03:00,MSK -1990-03-24T23:00:00,+04:00,MSD -1990-06-30T22:00:00,+03:00,EEST -1991-09-29T00:00:00,+02:00,EET -1992-03-29T00:00:00,+03:00,EEST -1992-09-27T00:00:00,+02:00,EET -1993-03-28T00:00:00,+03:00,EEST -1993-09-26T00:00:00,+02:00,EET -1994-03-27T00:00:00,+03:00,EEST -1994-09-25T00:00:00,+02:00,EET -1995-03-26T00:00:00,+03:00,EEST -1995-09-24T00:00:00,+02:00,EET -1996-03-31T00:00:00,+03:00,EEST -1996-10-27T01:00:00,+02:00,EET -1997-03-30T01:00:00,+03:00,EEST -1997-10-26T01:00:00,+02:00,EET -1998-03-29T01:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-lisbon.hoon b/desk/lib/pytz/europe-lisbon.hoon deleted file mode 100644 index 260291d..0000000 --- a/desk/lib/pytz/europe-lisbon.hoon +++ /dev/null @@ -1,228 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-01-01T00:00:00,+00:00,WET -1916-06-17T23:00:00,+01:00,WEST -1916-11-01T00:00:00,+00:00,WET -1917-03-01T00:00:00,+01:00,WEST -1917-10-14T23:00:00,+00:00,WET -1918-03-01T00:00:00,+01:00,WEST -1918-10-14T23:00:00,+00:00,WET -1919-03-01T00:00:00,+01:00,WEST -1919-10-14T23:00:00,+00:00,WET -1920-03-01T00:00:00,+01:00,WEST -1920-10-14T23:00:00,+00:00,WET -1921-03-01T00:00:00,+01:00,WEST -1921-10-14T23:00:00,+00:00,WET -1924-04-16T23:00:00,+01:00,WEST -1924-10-04T23:00:00,+00:00,WET -1926-04-17T23:00:00,+01:00,WEST -1926-10-02T23:00:00,+00:00,WET -1927-04-09T23:00:00,+01:00,WEST -1927-10-01T23:00:00,+00:00,WET -1928-04-14T23:00:00,+01:00,WEST -1928-10-06T23:00:00,+00:00,WET -1929-04-20T23:00:00,+01:00,WEST -1929-10-05T23:00:00,+00:00,WET -1931-04-18T23:00:00,+01:00,WEST -1931-10-03T23:00:00,+00:00,WET -1932-04-02T23:00:00,+01:00,WEST -1932-10-01T23:00:00,+00:00,WET -1934-04-07T23:00:00,+01:00,WEST -1934-10-06T23:00:00,+00:00,WET -1935-03-30T23:00:00,+01:00,WEST -1935-10-05T23:00:00,+00:00,WET -1936-04-18T23:00:00,+01:00,WEST -1936-10-03T23:00:00,+00:00,WET -1937-04-03T23:00:00,+01:00,WEST -1937-10-02T23:00:00,+00:00,WET -1938-03-26T23:00:00,+01:00,WEST -1938-10-01T23:00:00,+00:00,WET -1939-04-15T23:00:00,+01:00,WEST -1939-11-18T23:00:00,+00:00,WET -1940-02-24T23:00:00,+01:00,WEST -1940-10-07T23:00:00,+00:00,WET -1941-04-05T23:00:00,+01:00,WEST -1941-10-05T23:00:00,+00:00,WET -1942-03-14T23:00:00,+01:00,WEST -1942-04-25T22:00:00,+02:00,WEMT -1942-08-15T22:00:00,+01:00,WEST -1942-10-24T23:00:00,+00:00,WET -1943-03-13T23:00:00,+01:00,WEST -1943-04-17T22:00:00,+02:00,WEMT -1943-08-28T22:00:00,+01:00,WEST -1943-10-30T23:00:00,+00:00,WET -1944-03-11T23:00:00,+01:00,WEST -1944-04-22T22:00:00,+02:00,WEMT -1944-08-26T22:00:00,+01:00,WEST -1944-10-28T23:00:00,+00:00,WET -1945-03-10T23:00:00,+01:00,WEST -1945-04-21T22:00:00,+02:00,WEMT -1945-08-25T22:00:00,+01:00,WEST -1945-10-27T23:00:00,+00:00,WET -1946-04-06T23:00:00,+01:00,WEST -1946-10-05T23:00:00,+00:00,WET -1947-04-06T02:00:00,+01:00,WEST -1947-10-05T02:00:00,+00:00,WET -1948-04-04T02:00:00,+01:00,WEST -1948-10-03T02:00:00,+00:00,WET -1949-04-03T02:00:00,+01:00,WEST -1949-10-02T02:00:00,+00:00,WET -1950-04-02T02:00:00,+01:00,WEST -1950-10-01T02:00:00,+00:00,WET -1951-04-01T02:00:00,+01:00,WEST -1951-10-07T02:00:00,+00:00,WET -1952-04-06T02:00:00,+01:00,WEST -1952-10-05T02:00:00,+00:00,WET -1953-04-05T02:00:00,+01:00,WEST -1953-10-04T02:00:00,+00:00,WET -1954-04-04T02:00:00,+01:00,WEST -1954-10-03T02:00:00,+00:00,WET -1955-04-03T02:00:00,+01:00,WEST -1955-10-02T02:00:00,+00:00,WET -1956-04-01T02:00:00,+01:00,WEST -1956-10-07T02:00:00,+00:00,WET -1957-04-07T02:00:00,+01:00,WEST -1957-10-06T02:00:00,+00:00,WET -1958-04-06T02:00:00,+01:00,WEST -1958-10-05T02:00:00,+00:00,WET -1959-04-05T02:00:00,+01:00,WEST -1959-10-04T02:00:00,+00:00,WET -1960-04-03T02:00:00,+01:00,WEST -1960-10-02T02:00:00,+00:00,WET -1961-04-02T02:00:00,+01:00,WEST -1961-10-01T02:00:00,+00:00,WET -1962-04-01T02:00:00,+01:00,WEST -1962-10-07T02:00:00,+00:00,WET -1963-04-07T02:00:00,+01:00,WEST -1963-10-06T02:00:00,+00:00,WET -1964-04-05T02:00:00,+01:00,WEST -1964-10-04T02:00:00,+00:00,WET -1965-04-04T02:00:00,+01:00,WEST -1965-10-03T02:00:00,+00:00,WET -1966-04-03T02:00:00,+01:00,WEST -1966-10-02T02:00:00,+01:00,CET -1976-09-26T00:00:00,+00:00,WET -1977-03-27T00:00:00,+01:00,WEST -1977-09-25T00:00:00,+00:00,WET -1978-04-02T01:00:00,+01:00,WEST -1978-10-01T01:00:00,+00:00,WET -1979-04-01T01:00:00,+01:00,WEST -1979-09-30T01:00:00,+00:00,WET -1980-04-06T01:00:00,+01:00,WEST -1980-09-28T01:00:00,+00:00,WET -1981-03-29T00:00:00,+01:00,WEST -1981-09-27T00:00:00,+00:00,WET -1982-03-28T00:00:00,+01:00,WEST -1982-09-26T00:00:00,+00:00,WET -1983-03-27T00:00:00,+01:00,WEST -1983-09-25T00:00:00,+00:00,WET -1984-03-25T00:00:00,+01:00,WEST -1984-09-30T00:00:00,+00:00,WET -1985-03-31T00:00:00,+01:00,WEST -1985-09-29T00:00:00,+00:00,WET -1986-03-30T01:00:00,+01:00,WEST -1986-09-28T01:00:00,+00:00,WET -1987-03-29T01:00:00,+01:00,WEST -1987-09-27T01:00:00,+00:00,WET -1988-03-27T01:00:00,+01:00,WEST -1988-09-25T01:00:00,+00:00,WET -1989-03-26T01:00:00,+01:00,WEST -1989-09-24T01:00:00,+00:00,WET -1990-03-25T01:00:00,+01:00,WEST -1990-09-30T01:00:00,+00:00,WET -1991-03-31T01:00:00,+01:00,WEST -1991-09-29T01:00:00,+00:00,WET -1992-03-29T01:00:00,+01:00,WEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+01:00,WEST -1996-10-27T01:00:00,+00:00,WET -1997-03-30T01:00:00,+01:00,WEST -1997-10-26T01:00:00,+00:00,WET -1998-03-29T01:00:00,+01:00,WEST -1998-10-25T01:00:00,+00:00,WET -1999-03-28T01:00:00,+01:00,WEST -1999-10-31T01:00:00,+00:00,WET -2000-03-26T01:00:00,+01:00,WEST -2000-10-29T01:00:00,+00:00,WET -2001-03-25T01:00:00,+01:00,WEST -2001-10-28T01:00:00,+00:00,WET -2002-03-31T01:00:00,+01:00,WEST -2002-10-27T01:00:00,+00:00,WET -2003-03-30T01:00:00,+01:00,WEST -2003-10-26T01:00:00,+00:00,WET -2004-03-28T01:00:00,+01:00,WEST -2004-10-31T01:00:00,+00:00,WET -2005-03-27T01:00:00,+01:00,WEST -2005-10-30T01:00:00,+00:00,WET -2006-03-26T01:00:00,+01:00,WEST -2006-10-29T01:00:00,+00:00,WET -2007-03-25T01:00:00,+01:00,WEST -2007-10-28T01:00:00,+00:00,WET -2008-03-30T01:00:00,+01:00,WEST -2008-10-26T01:00:00,+00:00,WET -2009-03-29T01:00:00,+01:00,WEST -2009-10-25T01:00:00,+00:00,WET -2010-03-28T01:00:00,+01:00,WEST -2010-10-31T01:00:00,+00:00,WET -2011-03-27T01:00:00,+01:00,WEST -2011-10-30T01:00:00,+00:00,WET -2012-03-25T01:00:00,+01:00,WEST -2012-10-28T01:00:00,+00:00,WET -2013-03-31T01:00:00,+01:00,WEST -2013-10-27T01:00:00,+00:00,WET -2014-03-30T01:00:00,+01:00,WEST -2014-10-26T01:00:00,+00:00,WET -2015-03-29T01:00:00,+01:00,WEST -2015-10-25T01:00:00,+00:00,WET -2016-03-27T01:00:00,+01:00,WEST -2016-10-30T01:00:00,+00:00,WET -2017-03-26T01:00:00,+01:00,WEST -2017-10-29T01:00:00,+00:00,WET -2018-03-25T01:00:00,+01:00,WEST -2018-10-28T01:00:00,+00:00,WET -2019-03-31T01:00:00,+01:00,WEST -2019-10-27T01:00:00,+00:00,WET -2020-03-29T01:00:00,+01:00,WEST -2020-10-25T01:00:00,+00:00,WET -2021-03-28T01:00:00,+01:00,WEST -2021-10-31T01:00:00,+00:00,WET -2022-03-27T01:00:00,+01:00,WEST -2022-10-30T01:00:00,+00:00,WET -2023-03-26T01:00:00,+01:00,WEST -2023-10-29T01:00:00,+00:00,WET -2024-03-31T01:00:00,+01:00,WEST -2024-10-27T01:00:00,+00:00,WET -2025-03-30T01:00:00,+01:00,WEST -2025-10-26T01:00:00,+00:00,WET -2026-03-29T01:00:00,+01:00,WEST -2026-10-25T01:00:00,+00:00,WET -2027-03-28T01:00:00,+01:00,WEST -2027-10-31T01:00:00,+00:00,WET -2028-03-26T01:00:00,+01:00,WEST -2028-10-29T01:00:00,+00:00,WET -2029-03-25T01:00:00,+01:00,WEST -2029-10-28T01:00:00,+00:00,WET -2030-03-31T01:00:00,+01:00,WEST -2030-10-27T01:00:00,+00:00,WET -2031-03-30T01:00:00,+01:00,WEST -2031-10-26T01:00:00,+00:00,WET -2032-03-28T01:00:00,+01:00,WEST -2032-10-31T01:00:00,+00:00,WET -2033-03-27T01:00:00,+01:00,WEST -2033-10-30T01:00:00,+00:00,WET -2034-03-26T01:00:00,+01:00,WEST -2034-10-29T01:00:00,+00:00,WET -2035-03-25T01:00:00,+01:00,WEST -2035-10-28T01:00:00,+00:00,WET -2036-03-30T01:00:00,+01:00,WEST -2036-10-26T01:00:00,+00:00,WET -2037-03-29T01:00:00,+01:00,WEST -2037-10-25T01:00:00,+00:00,WET -''' diff --git a/desk/lib/pytz/europe-ljubljana.hoon b/desk/lib/pytz/europe-ljubljana.hoon deleted file mode 100644 index d21621e..0000000 --- a/desk/lib/pytz/europe-ljubljana.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:58,LMT -1901-12-13T20:45:52,+01:00,CET -1941-04-18T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-16T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-london.hoon b/desk/lib/pytz/europe-london.hoon deleted file mode 100644 index 226b16d..0000000 --- a/desk/lib/pytz/europe-london.hoon +++ /dev/null @@ -1,246 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+00:00,GMT -1916-05-21T02:00:00,+01:00,BST -1916-10-01T02:00:00,+00:00,GMT -1917-04-08T02:00:00,+01:00,BST -1917-09-17T02:00:00,+00:00,GMT -1918-03-24T02:00:00,+01:00,BST -1918-09-30T02:00:00,+00:00,GMT -1919-03-30T02:00:00,+01:00,BST -1919-09-29T02:00:00,+00:00,GMT -1920-03-28T02:00:00,+01:00,BST -1920-10-25T02:00:00,+00:00,GMT -1921-04-03T02:00:00,+01:00,BST -1921-10-03T02:00:00,+00:00,GMT -1922-03-26T02:00:00,+01:00,BST -1922-10-08T02:00:00,+00:00,GMT -1923-04-22T02:00:00,+01:00,BST -1923-09-16T02:00:00,+00:00,GMT -1924-04-13T02:00:00,+01:00,BST -1924-09-21T02:00:00,+00:00,GMT -1925-04-19T02:00:00,+01:00,BST -1925-10-04T02:00:00,+00:00,GMT -1926-04-18T02:00:00,+01:00,BST -1926-10-03T02:00:00,+00:00,GMT -1927-04-10T02:00:00,+01:00,BST -1927-10-02T02:00:00,+00:00,GMT -1928-04-22T02:00:00,+01:00,BST -1928-10-07T02:00:00,+00:00,GMT -1929-04-21T02:00:00,+01:00,BST -1929-10-06T02:00:00,+00:00,GMT -1930-04-13T02:00:00,+01:00,BST -1930-10-05T02:00:00,+00:00,GMT -1931-04-19T02:00:00,+01:00,BST -1931-10-04T02:00:00,+00:00,GMT -1932-04-17T02:00:00,+01:00,BST -1932-10-02T02:00:00,+00:00,GMT -1933-04-09T02:00:00,+01:00,BST -1933-10-08T02:00:00,+00:00,GMT -1934-04-22T02:00:00,+01:00,BST -1934-10-07T02:00:00,+00:00,GMT -1935-04-14T02:00:00,+01:00,BST -1935-10-06T02:00:00,+00:00,GMT -1936-04-19T02:00:00,+01:00,BST -1936-10-04T02:00:00,+00:00,GMT -1937-04-18T02:00:00,+01:00,BST -1937-10-03T02:00:00,+00:00,GMT -1938-04-10T02:00:00,+01:00,BST -1938-10-02T02:00:00,+00:00,GMT -1939-04-16T02:00:00,+01:00,BST -1939-11-19T02:00:00,+00:00,GMT -1940-02-25T02:00:00,+01:00,BST -1941-05-04T01:00:00,+02:00,BDST -1941-08-10T01:00:00,+01:00,BST -1942-04-05T01:00:00,+02:00,BDST -1942-08-09T01:00:00,+01:00,BST -1943-04-04T01:00:00,+02:00,BDST -1943-08-15T01:00:00,+01:00,BST -1944-04-02T01:00:00,+02:00,BDST -1944-09-17T01:00:00,+01:00,BST -1945-04-02T01:00:00,+02:00,BDST -1945-07-15T01:00:00,+01:00,BST -1945-10-07T02:00:00,+00:00,GMT -1946-04-14T02:00:00,+01:00,BST -1946-10-06T02:00:00,+00:00,GMT -1947-03-16T02:00:00,+01:00,BST -1947-04-13T01:00:00,+02:00,BDST -1947-08-10T01:00:00,+01:00,BST -1947-11-02T02:00:00,+00:00,GMT -1948-03-14T02:00:00,+01:00,BST -1948-10-31T02:00:00,+00:00,GMT -1949-04-03T02:00:00,+01:00,BST -1949-10-30T02:00:00,+00:00,GMT -1950-04-16T02:00:00,+01:00,BST -1950-10-22T02:00:00,+00:00,GMT -1951-04-15T02:00:00,+01:00,BST -1951-10-21T02:00:00,+00:00,GMT -1952-04-20T02:00:00,+01:00,BST -1952-10-26T02:00:00,+00:00,GMT -1953-04-19T02:00:00,+01:00,BST -1953-10-04T02:00:00,+00:00,GMT -1954-04-11T02:00:00,+01:00,BST -1954-10-03T02:00:00,+00:00,GMT -1955-04-17T02:00:00,+01:00,BST -1955-10-02T02:00:00,+00:00,GMT -1956-04-22T02:00:00,+01:00,BST -1956-10-07T02:00:00,+00:00,GMT -1957-04-14T02:00:00,+01:00,BST -1957-10-06T02:00:00,+00:00,GMT -1958-04-20T02:00:00,+01:00,BST -1958-10-05T02:00:00,+00:00,GMT -1959-04-19T02:00:00,+01:00,BST -1959-10-04T02:00:00,+00:00,GMT -1960-04-10T02:00:00,+01:00,BST -1960-10-02T02:00:00,+00:00,GMT -1961-03-26T02:00:00,+01:00,BST -1961-10-29T02:00:00,+00:00,GMT -1962-03-25T02:00:00,+01:00,BST -1962-10-28T02:00:00,+00:00,GMT -1963-03-31T02:00:00,+01:00,BST -1963-10-27T02:00:00,+00:00,GMT -1964-03-22T02:00:00,+01:00,BST -1964-10-25T02:00:00,+00:00,GMT -1965-03-21T02:00:00,+01:00,BST -1965-10-24T02:00:00,+00:00,GMT -1966-03-20T02:00:00,+01:00,BST -1966-10-23T02:00:00,+00:00,GMT -1967-03-19T02:00:00,+01:00,BST -1967-10-29T02:00:00,+00:00,GMT -1968-02-18T02:00:00,+01:00,BST -1968-10-26T23:00:00,+01:00,BST -1971-10-31T02:00:00,+00:00,GMT -1972-03-19T02:00:00,+01:00,BST -1972-10-29T02:00:00,+00:00,GMT -1973-03-18T02:00:00,+01:00,BST -1973-10-28T02:00:00,+00:00,GMT -1974-03-17T02:00:00,+01:00,BST -1974-10-27T02:00:00,+00:00,GMT -1975-03-16T02:00:00,+01:00,BST -1975-10-26T02:00:00,+00:00,GMT -1976-03-21T02:00:00,+01:00,BST -1976-10-24T02:00:00,+00:00,GMT -1977-03-20T02:00:00,+01:00,BST -1977-10-23T02:00:00,+00:00,GMT -1978-03-19T02:00:00,+01:00,BST -1978-10-29T02:00:00,+00:00,GMT -1979-03-18T02:00:00,+01:00,BST -1979-10-28T02:00:00,+00:00,GMT -1980-03-16T02:00:00,+01:00,BST -1980-10-26T02:00:00,+00:00,GMT -1981-03-29T01:00:00,+01:00,BST -1981-10-25T01:00:00,+00:00,GMT -1982-03-28T01:00:00,+01:00,BST -1982-10-24T01:00:00,+00:00,GMT -1983-03-27T01:00:00,+01:00,BST -1983-10-23T01:00:00,+00:00,GMT -1984-03-25T01:00:00,+01:00,BST -1984-10-28T01:00:00,+00:00,GMT -1985-03-31T01:00:00,+01:00,BST -1985-10-27T01:00:00,+00:00,GMT -1986-03-30T01:00:00,+01:00,BST -1986-10-26T01:00:00,+00:00,GMT -1987-03-29T01:00:00,+01:00,BST -1987-10-25T01:00:00,+00:00,GMT -1988-03-27T01:00:00,+01:00,BST -1988-10-23T01:00:00,+00:00,GMT -1989-03-26T01:00:00,+01:00,BST -1989-10-29T01:00:00,+00:00,GMT -1990-03-25T01:00:00,+01:00,BST -1990-10-28T01:00:00,+00:00,GMT -1991-03-31T01:00:00,+01:00,BST -1991-10-27T01:00:00,+00:00,GMT -1992-03-29T01:00:00,+01:00,BST -1992-10-25T01:00:00,+00:00,GMT -1993-03-28T01:00:00,+01:00,BST -1993-10-24T01:00:00,+00:00,GMT -1994-03-27T01:00:00,+01:00,BST -1994-10-23T01:00:00,+00:00,GMT -1995-03-26T01:00:00,+01:00,BST -1995-10-22T01:00:00,+00:00,GMT -1996-03-31T01:00:00,+01:00,BST -1996-10-27T01:00:00,+00:00,GMT -1997-03-30T01:00:00,+01:00,BST -1997-10-26T01:00:00,+00:00,GMT -1998-03-29T01:00:00,+01:00,BST -1998-10-25T01:00:00,+00:00,GMT -1999-03-28T01:00:00,+01:00,BST -1999-10-31T01:00:00,+00:00,GMT -2000-03-26T01:00:00,+01:00,BST -2000-10-29T01:00:00,+00:00,GMT -2001-03-25T01:00:00,+01:00,BST -2001-10-28T01:00:00,+00:00,GMT -2002-03-31T01:00:00,+01:00,BST -2002-10-27T01:00:00,+00:00,GMT -2003-03-30T01:00:00,+01:00,BST -2003-10-26T01:00:00,+00:00,GMT -2004-03-28T01:00:00,+01:00,BST -2004-10-31T01:00:00,+00:00,GMT -2005-03-27T01:00:00,+01:00,BST -2005-10-30T01:00:00,+00:00,GMT -2006-03-26T01:00:00,+01:00,BST -2006-10-29T01:00:00,+00:00,GMT -2007-03-25T01:00:00,+01:00,BST -2007-10-28T01:00:00,+00:00,GMT -2008-03-30T01:00:00,+01:00,BST -2008-10-26T01:00:00,+00:00,GMT -2009-03-29T01:00:00,+01:00,BST -2009-10-25T01:00:00,+00:00,GMT -2010-03-28T01:00:00,+01:00,BST -2010-10-31T01:00:00,+00:00,GMT -2011-03-27T01:00:00,+01:00,BST -2011-10-30T01:00:00,+00:00,GMT -2012-03-25T01:00:00,+01:00,BST -2012-10-28T01:00:00,+00:00,GMT -2013-03-31T01:00:00,+01:00,BST -2013-10-27T01:00:00,+00:00,GMT -2014-03-30T01:00:00,+01:00,BST -2014-10-26T01:00:00,+00:00,GMT -2015-03-29T01:00:00,+01:00,BST -2015-10-25T01:00:00,+00:00,GMT -2016-03-27T01:00:00,+01:00,BST -2016-10-30T01:00:00,+00:00,GMT -2017-03-26T01:00:00,+01:00,BST -2017-10-29T01:00:00,+00:00,GMT -2018-03-25T01:00:00,+01:00,BST -2018-10-28T01:00:00,+00:00,GMT -2019-03-31T01:00:00,+01:00,BST -2019-10-27T01:00:00,+00:00,GMT -2020-03-29T01:00:00,+01:00,BST -2020-10-25T01:00:00,+00:00,GMT -2021-03-28T01:00:00,+01:00,BST -2021-10-31T01:00:00,+00:00,GMT -2022-03-27T01:00:00,+01:00,BST -2022-10-30T01:00:00,+00:00,GMT -2023-03-26T01:00:00,+01:00,BST -2023-10-29T01:00:00,+00:00,GMT -2024-03-31T01:00:00,+01:00,BST -2024-10-27T01:00:00,+00:00,GMT -2025-03-30T01:00:00,+01:00,BST -2025-10-26T01:00:00,+00:00,GMT -2026-03-29T01:00:00,+01:00,BST -2026-10-25T01:00:00,+00:00,GMT -2027-03-28T01:00:00,+01:00,BST -2027-10-31T01:00:00,+00:00,GMT -2028-03-26T01:00:00,+01:00,BST -2028-10-29T01:00:00,+00:00,GMT -2029-03-25T01:00:00,+01:00,BST -2029-10-28T01:00:00,+00:00,GMT -2030-03-31T01:00:00,+01:00,BST -2030-10-27T01:00:00,+00:00,GMT -2031-03-30T01:00:00,+01:00,BST -2031-10-26T01:00:00,+00:00,GMT -2032-03-28T01:00:00,+01:00,BST -2032-10-31T01:00:00,+00:00,GMT -2033-03-27T01:00:00,+01:00,BST -2033-10-30T01:00:00,+00:00,GMT -2034-03-26T01:00:00,+01:00,BST -2034-10-29T01:00:00,+00:00,GMT -2035-03-25T01:00:00,+01:00,BST -2035-10-28T01:00:00,+00:00,GMT -2036-03-30T01:00:00,+01:00,BST -2036-10-26T01:00:00,+00:00,GMT -2037-03-29T01:00:00,+01:00,BST -2037-10-25T01:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/europe-luxembourg.hoon b/desk/lib/pytz/europe-luxembourg.hoon deleted file mode 100644 index d66688a..0000000 --- a/desk/lib/pytz/europe-luxembourg.hoon +++ /dev/null @@ -1,188 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:25,LMT -1904-05-31T23:35:24,+01:00,CET -1916-05-14T22:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1917-04-28T22:00:00,+02:00,CEST -1917-09-16T23:00:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+01:00,CET -1918-11-24T23:00:00,+00:00,WET -1919-03-01T23:00:00,+01:00,WEST -1919-10-05T02:00:00,+00:00,WET -1920-02-14T23:00:00,+01:00,WEST -1920-10-24T01:00:00,+00:00,WET -1921-03-14T23:00:00,+01:00,WEST -1921-10-26T01:00:00,+00:00,WET -1922-03-25T23:00:00,+01:00,WEST -1922-10-08T00:00:00,+00:00,WET -1923-04-21T23:00:00,+01:00,WEST -1923-10-07T01:00:00,+00:00,WET -1924-03-29T23:00:00,+01:00,WEST -1924-10-05T00:00:00,+00:00,WET -1925-04-05T23:00:00,+01:00,WEST -1925-10-04T00:00:00,+00:00,WET -1926-04-17T23:00:00,+01:00,WEST -1926-10-03T00:00:00,+00:00,WET -1927-04-09T23:00:00,+01:00,WEST -1927-10-02T00:00:00,+00:00,WET -1928-04-14T23:00:00,+01:00,WEST -1928-10-07T00:00:00,+00:00,WET -1929-04-20T23:00:00,+01:00,WEST -1929-10-06T02:00:00,+00:00,WET -1930-04-13T02:00:00,+01:00,WEST -1930-10-05T02:00:00,+00:00,WET -1931-04-19T02:00:00,+01:00,WEST -1931-10-04T02:00:00,+00:00,WET -1932-04-03T02:00:00,+01:00,WEST -1932-10-02T02:00:00,+00:00,WET -1933-03-26T02:00:00,+01:00,WEST -1933-10-08T02:00:00,+00:00,WET -1934-04-08T02:00:00,+01:00,WEST -1934-10-07T02:00:00,+00:00,WET -1935-03-31T02:00:00,+01:00,WEST -1935-10-06T02:00:00,+00:00,WET -1936-04-19T02:00:00,+01:00,WEST -1936-10-04T02:00:00,+00:00,WET -1937-04-04T02:00:00,+01:00,WEST -1937-10-03T02:00:00,+00:00,WET -1938-03-27T02:00:00,+01:00,WEST -1938-10-02T02:00:00,+00:00,WET -1939-04-16T02:00:00,+01:00,WEST -1939-11-19T02:00:00,+00:00,WET -1940-02-25T02:00:00,+01:00,WEST -1940-05-14T02:00:00,+02:00,WEST -1942-11-02T01:00:00,+01:00,WET -1943-03-29T01:00:00,+02:00,WEST -1943-10-04T01:00:00,+01:00,WET -1944-04-03T01:00:00,+02:00,WEST -1944-09-18T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-16T01:00:00,+01:00,CET -1946-05-19T01:00:00,+02:00,CEST -1946-10-07T01:00:00,+01:00,CET -1977-04-03T01:00:00,+02:00,CEST -1977-09-25T01:00:00,+01:00,CET -1978-04-02T01:00:00,+02:00,CEST -1978-10-01T01:00:00,+01:00,CET -1979-04-01T01:00:00,+02:00,CEST -1979-09-30T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-madrid.hoon b/desk/lib/pytz/europe-madrid.hoon deleted file mode 100644 index 2257f2b..0000000 --- a/desk/lib/pytz/europe-madrid.hoon +++ /dev/null @@ -1,166 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+00:00,WET -1918-04-15T23:00:00,+01:00,WEST -1918-10-07T00:00:00,+00:00,WET -1919-04-06T23:00:00,+01:00,WEST -1919-10-07T00:00:00,+00:00,WET -1924-04-16T23:00:00,+01:00,WEST -1924-10-05T00:00:00,+00:00,WET -1926-04-17T23:00:00,+01:00,WEST -1926-10-03T00:00:00,+00:00,WET -1927-04-09T23:00:00,+01:00,WEST -1927-10-02T00:00:00,+00:00,WET -1928-04-15T00:00:00,+01:00,WEST -1928-10-07T00:00:00,+00:00,WET -1929-04-20T23:00:00,+01:00,WEST -1929-10-06T00:00:00,+00:00,WET -1937-06-16T23:00:00,+01:00,WEST -1937-10-03T00:00:00,+00:00,WET -1938-04-02T23:00:00,+01:00,WEST -1938-04-30T22:00:00,+02:00,WEMT -1938-10-02T22:00:00,+01:00,WEST -1939-10-08T00:00:00,+00:00,WET -1940-03-16T23:00:00,+01:00,CET -1942-05-02T22:00:00,+02:00,CEST -1942-08-31T23:00:00,+01:00,CET -1943-04-17T22:00:00,+02:00,CEST -1943-10-02T23:00:00,+01:00,CET -1944-04-15T22:00:00,+02:00,CEST -1944-09-30T23:00:00,+01:00,CET -1945-04-14T22:00:00,+02:00,CEST -1945-09-29T23:00:00,+01:00,CET -1946-04-13T22:00:00,+02:00,CEST -1946-09-28T23:00:00,+01:00,CET -1949-04-30T22:00:00,+02:00,CEST -1949-10-01T23:00:00,+01:00,CET -1974-04-13T22:00:00,+02:00,CEST -1974-10-05T23:00:00,+01:00,CET -1975-04-12T22:00:00,+02:00,CEST -1975-10-04T23:00:00,+01:00,CET -1976-03-27T22:00:00,+02:00,CEST -1976-09-25T23:00:00,+01:00,CET -1977-04-02T22:00:00,+02:00,CEST -1977-09-24T23:00:00,+01:00,CET -1978-04-02T01:00:00,+02:00,CEST -1978-10-01T01:00:00,+01:00,CET -1979-04-01T01:00:00,+02:00,CEST -1979-09-30T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-malta.hoon b/desk/lib/pytz/europe-malta.hoon deleted file mode 100644 index 8c4aafd..0000000 --- a/desk/lib/pytz/europe-malta.hoon +++ /dev/null @@ -1,174 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:58,LMT -1901-12-13T20:45:52,+01:00,CET -1916-06-03T23:00:00,+02:00,CEST -1916-09-30T22:00:00,+01:00,CET -1917-03-31T23:00:00,+02:00,CEST -1917-09-30T22:00:00,+01:00,CET -1918-03-09T23:00:00,+02:00,CEST -1918-10-06T22:00:00,+01:00,CET -1919-03-01T23:00:00,+02:00,CEST -1919-10-04T22:00:00,+01:00,CET -1920-03-20T23:00:00,+02:00,CEST -1920-09-18T22:00:00,+01:00,CET -1940-06-14T23:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-02T01:00:00,+02:00,CEST -1944-09-17T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-14T23:00:00,+01:00,CET -1946-03-17T01:00:00,+02:00,CEST -1946-10-06T01:00:00,+01:00,CET -1947-03-15T23:00:00,+02:00,CEST -1947-10-04T23:00:00,+01:00,CET -1948-02-29T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1966-05-21T23:00:00,+02:00,CEST -1966-09-24T22:00:00,+01:00,CET -1967-05-27T23:00:00,+02:00,CEST -1967-09-23T23:00:00,+01:00,CET -1968-05-25T23:00:00,+02:00,CEST -1968-09-21T23:00:00,+01:00,CET -1969-05-31T23:00:00,+02:00,CEST -1969-09-27T23:00:00,+01:00,CET -1970-05-30T23:00:00,+02:00,CEST -1970-09-26T23:00:00,+01:00,CET -1971-05-22T23:00:00,+02:00,CEST -1971-09-25T23:00:00,+01:00,CET -1972-05-27T23:00:00,+02:00,CEST -1972-09-30T23:00:00,+01:00,CET -1973-03-30T23:00:00,+02:00,CEST -1973-09-28T23:00:00,+01:00,CET -1974-04-20T23:00:00,+02:00,CEST -1974-09-15T23:00:00,+01:00,CET -1975-04-20T01:00:00,+02:00,CEST -1975-09-21T00:00:00,+01:00,CET -1976-04-18T01:00:00,+02:00,CEST -1976-09-19T00:00:00,+01:00,CET -1977-04-17T01:00:00,+02:00,CEST -1977-09-18T00:00:00,+01:00,CET -1978-04-16T01:00:00,+02:00,CEST -1978-09-17T00:00:00,+01:00,CET -1979-04-15T01:00:00,+02:00,CEST -1979-09-16T00:00:00,+01:00,CET -1980-03-31T01:00:00,+02:00,CEST -1980-09-21T00:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-mariehamn.hoon b/desk/lib/pytz/europe-mariehamn.hoon deleted file mode 100644 index 96e7df5..0000000 --- a/desk/lib/pytz/europe-mariehamn.hoon +++ /dev/null @@ -1,123 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:40,LMT -1901-12-13T20:45:52,+01:40,HMT -1921-04-30T22:20:11,+02:00,EET -1942-04-02T22:00:00,+03:00,EEST -1942-10-03T22:00:00,+02:00,EET -1981-03-29T00:00:00,+03:00,EEST -1981-09-27T00:00:00,+02:00,EET -1982-03-28T00:00:00,+03:00,EEST -1982-09-26T00:00:00,+02:00,EET -1983-03-27T01:00:00,+03:00,EEST -1983-09-25T01:00:00,+02:00,EET -1984-03-25T01:00:00,+03:00,EEST -1984-09-30T01:00:00,+02:00,EET -1985-03-31T01:00:00,+03:00,EEST -1985-09-29T01:00:00,+02:00,EET -1986-03-30T01:00:00,+03:00,EEST -1986-09-28T01:00:00,+02:00,EET -1987-03-29T01:00:00,+03:00,EEST -1987-09-27T01:00:00,+02:00,EET -1988-03-27T01:00:00,+03:00,EEST -1988-09-25T01:00:00,+02:00,EET -1989-03-26T01:00:00,+03:00,EEST -1989-09-24T01:00:00,+02:00,EET -1990-03-25T01:00:00,+03:00,EEST -1990-09-30T01:00:00,+02:00,EET -1991-03-31T01:00:00,+03:00,EEST -1991-09-29T01:00:00,+02:00,EET -1992-03-29T01:00:00,+03:00,EEST -1992-09-27T01:00:00,+02:00,EET -1993-03-28T01:00:00,+03:00,EEST -1993-09-26T01:00:00,+02:00,EET -1994-03-27T01:00:00,+03:00,EEST -1994-09-25T01:00:00,+02:00,EET -1995-03-26T01:00:00,+03:00,EEST -1995-09-24T01:00:00,+02:00,EET -1996-03-31T01:00:00,+03:00,EEST -1996-10-27T01:00:00,+02:00,EET -1997-03-30T01:00:00,+03:00,EEST -1997-10-26T01:00:00,+02:00,EET -1998-03-29T01:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-minsk.hoon b/desk/lib/pytz/europe-minsk.hoon deleted file mode 100644 index 3e9aade..0000000 --- a/desk/lib/pytz/europe-minsk.hoon +++ /dev/null @@ -1,73 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:50,LMT -1901-12-13T20:45:52,+01:50,MMT -1924-05-01T22:10:00,+02:00,EET -1930-06-20T22:00:00,+03:00,MSK -1941-06-27T21:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-07-02T22:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+04:00,MSD -1989-09-23T23:00:00,+03:00,MSK -1991-03-30T23:00:00,+03:00,EEST -1991-09-29T00:00:00,+02:00,EET -1992-03-29T00:00:00,+03:00,EEST -1992-09-27T00:00:00,+02:00,EET -1993-03-28T00:00:00,+03:00,EEST -1993-09-26T00:00:00,+02:00,EET -1994-03-27T00:00:00,+03:00,EEST -1994-09-25T00:00:00,+02:00,EET -1995-03-26T00:00:00,+03:00,EEST -1995-09-24T00:00:00,+02:00,EET -1996-03-31T00:00:00,+03:00,EEST -1996-10-27T00:00:00,+02:00,EET -1997-03-30T00:00:00,+03:00,EEST -1997-10-26T00:00:00,+02:00,EET -1998-03-29T00:00:00,+03:00,EEST -1998-10-25T00:00:00,+02:00,EET -1999-03-28T00:00:00,+03:00,EEST -1999-10-31T00:00:00,+02:00,EET -2000-03-26T00:00:00,+03:00,EEST -2000-10-29T00:00:00,+02:00,EET -2001-03-25T00:00:00,+03:00,EEST -2001-10-28T00:00:00,+02:00,EET -2002-03-31T00:00:00,+03:00,EEST -2002-10-27T00:00:00,+02:00,EET -2003-03-30T00:00:00,+03:00,EEST -2003-10-26T00:00:00,+02:00,EET -2004-03-28T00:00:00,+03:00,EEST -2004-10-31T00:00:00,+02:00,EET -2005-03-27T00:00:00,+03:00,EEST -2005-10-30T00:00:00,+02:00,EET -2006-03-26T00:00:00,+03:00,EEST -2006-10-29T00:00:00,+02:00,EET -2007-03-25T00:00:00,+03:00,EEST -2007-10-28T00:00:00,+02:00,EET -2008-03-30T00:00:00,+03:00,EEST -2008-10-26T00:00:00,+02:00,EET -2009-03-29T00:00:00,+03:00,EEST -2009-10-25T00:00:00,+02:00,EET -2010-03-28T00:00:00,+03:00,EEST -2010-10-31T00:00:00,+02:00,EET -2011-03-27T00:00:00,+03:00,+03 -''' diff --git a/desk/lib/pytz/europe-monaco.hoon b/desk/lib/pytz/europe-monaco.hoon deleted file mode 100644 index e30e4af..0000000 --- a/desk/lib/pytz/europe-monaco.hoon +++ /dev/null @@ -1,190 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:30,LMT -1901-12-13T20:45:52,+00:09,PMT -1911-03-28T23:50:39,+00:00,WET -1916-06-14T23:00:00,+01:00,WEST -1916-10-01T23:00:00,+00:00,WET -1917-03-24T23:00:00,+01:00,WEST -1917-10-07T23:00:00,+00:00,WET -1918-03-09T23:00:00,+01:00,WEST -1918-10-06T23:00:00,+00:00,WET -1919-03-01T23:00:00,+01:00,WEST -1919-10-05T23:00:00,+00:00,WET -1920-02-14T23:00:00,+01:00,WEST -1920-10-23T23:00:00,+00:00,WET -1921-03-14T23:00:00,+01:00,WEST -1921-10-25T23:00:00,+00:00,WET -1922-03-25T23:00:00,+01:00,WEST -1922-10-07T23:00:00,+00:00,WET -1923-05-26T23:00:00,+01:00,WEST -1923-10-06T23:00:00,+00:00,WET -1924-03-29T23:00:00,+01:00,WEST -1924-10-04T23:00:00,+00:00,WET -1925-04-04T23:00:00,+01:00,WEST -1925-10-03T23:00:00,+00:00,WET -1926-04-17T23:00:00,+01:00,WEST -1926-10-02T23:00:00,+00:00,WET -1927-04-09T23:00:00,+01:00,WEST -1927-10-01T23:00:00,+00:00,WET -1928-04-14T23:00:00,+01:00,WEST -1928-10-06T23:00:00,+00:00,WET -1929-04-20T23:00:00,+01:00,WEST -1929-10-05T23:00:00,+00:00,WET -1930-04-12T23:00:00,+01:00,WEST -1930-10-04T23:00:00,+00:00,WET -1931-04-18T23:00:00,+01:00,WEST -1931-10-03T23:00:00,+00:00,WET -1932-04-02T23:00:00,+01:00,WEST -1932-10-01T23:00:00,+00:00,WET -1933-03-25T23:00:00,+01:00,WEST -1933-10-07T23:00:00,+00:00,WET -1934-04-07T23:00:00,+01:00,WEST -1934-10-06T23:00:00,+00:00,WET -1935-03-30T23:00:00,+01:00,WEST -1935-10-05T23:00:00,+00:00,WET -1936-04-18T23:00:00,+01:00,WEST -1936-10-03T23:00:00,+00:00,WET -1937-04-03T23:00:00,+01:00,WEST -1937-10-02T23:00:00,+00:00,WET -1938-03-26T23:00:00,+01:00,WEST -1938-10-01T23:00:00,+00:00,WET -1939-04-15T23:00:00,+01:00,WEST -1939-11-18T23:00:00,+00:00,WET -1940-02-25T02:00:00,+01:00,WEST -1941-05-04T23:00:00,+02:00,WEMT -1941-10-05T22:00:00,+01:00,WEST -1942-03-08T23:00:00,+02:00,WEMT -1942-11-02T01:00:00,+01:00,WEST -1943-03-29T01:00:00,+02:00,WEMT -1943-10-04T01:00:00,+01:00,WEST -1944-04-03T01:00:00,+02:00,WEMT -1944-10-07T23:00:00,+01:00,WEST -1945-04-02T01:00:00,+02:00,WEMT -1945-09-16T01:00:00,+01:00,CET -1976-03-28T00:00:00,+02:00,CEST -1976-09-25T23:00:00,+01:00,CET -1977-04-03T01:00:00,+02:00,CEST -1977-09-25T01:00:00,+01:00,CET -1978-04-02T01:00:00,+02:00,CEST -1978-10-01T01:00:00,+01:00,CET -1979-04-01T01:00:00,+02:00,CEST -1979-09-30T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-moscow.hoon b/desk/lib/pytz/europe-moscow.hoon deleted file mode 100644 index 7cdaec6..0000000 --- a/desk/lib/pytz/europe-moscow.hoon +++ /dev/null @@ -1,83 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:30,LMT -1901-12-13T20:45:52,+02:30,MMT -1916-07-02T21:29:43,+02:31,MMT -1917-07-01T20:28:41,+03:31,MST -1917-12-27T20:28:41,+02:31,MMT -1918-05-31T19:28:41,+04:31,MDST -1918-09-15T20:28:41,+03:31,MST -1919-05-31T19:28:41,+04:31,MDST -1919-07-01T00:00:00,+04:00,MSD -1919-08-15T20:00:00,+03:00,MSK -1921-02-14T20:00:00,+04:00,MSD -1921-03-20T19:00:00,+05:00,+05 -1921-08-31T19:00:00,+04:00,MSD -1921-09-30T20:00:00,+03:00,MSK -1922-09-30T21:00:00,+02:00,EET -1930-06-20T22:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+04:00,MSD -1989-09-23T23:00:00,+03:00,MSK -1990-03-24T23:00:00,+04:00,MSD -1990-09-29T23:00:00,+03:00,MSK -1991-03-30T23:00:00,+03:00,EEST -1991-09-29T00:00:00,+02:00,EET -1992-01-19T00:00:00,+03:00,MSK -1992-03-28T23:00:00,+04:00,MSD -1992-09-26T23:00:00,+03:00,MSK -1993-03-27T23:00:00,+04:00,MSD -1993-09-25T23:00:00,+03:00,MSK -1994-03-26T23:00:00,+04:00,MSD -1994-09-24T23:00:00,+03:00,MSK -1995-03-25T23:00:00,+04:00,MSD -1995-09-23T23:00:00,+03:00,MSK -1996-03-30T23:00:00,+04:00,MSD -1996-10-26T23:00:00,+03:00,MSK -1997-03-29T23:00:00,+04:00,MSD -1997-10-25T23:00:00,+03:00,MSK -1998-03-28T23:00:00,+04:00,MSD -1998-10-24T23:00:00,+03:00,MSK -1999-03-27T23:00:00,+04:00,MSD -1999-10-30T23:00:00,+03:00,MSK -2000-03-25T23:00:00,+04:00,MSD -2000-10-28T23:00:00,+03:00,MSK -2001-03-24T23:00:00,+04:00,MSD -2001-10-27T23:00:00,+03:00,MSK -2002-03-30T23:00:00,+04:00,MSD -2002-10-26T23:00:00,+03:00,MSK -2003-03-29T23:00:00,+04:00,MSD -2003-10-25T23:00:00,+03:00,MSK -2004-03-27T23:00:00,+04:00,MSD -2004-10-30T23:00:00,+03:00,MSK -2005-03-26T23:00:00,+04:00,MSD -2005-10-29T23:00:00,+03:00,MSK -2006-03-25T23:00:00,+04:00,MSD -2006-10-28T23:00:00,+03:00,MSK -2007-03-24T23:00:00,+04:00,MSD -2007-10-27T23:00:00,+03:00,MSK -2008-03-29T23:00:00,+04:00,MSD -2008-10-25T23:00:00,+03:00,MSK -2009-03-28T23:00:00,+04:00,MSD -2009-10-24T23:00:00,+03:00,MSK -2010-03-27T23:00:00,+04:00,MSD -2010-10-30T23:00:00,+03:00,MSK -2011-03-26T23:00:00,+04:00,MSK -2014-10-25T22:00:00,+03:00,MSK -''' diff --git a/desk/lib/pytz/europe-nicosia.hoon b/desk/lib/pytz/europe-nicosia.hoon deleted file mode 100644 index 1e316ca..0000000 --- a/desk/lib/pytz/europe-nicosia.hoon +++ /dev/null @@ -1,132 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:13,LMT -1921-11-13T21:46:32,+02:00,EET -1975-04-12T22:00:00,+03:00,EEST -1975-10-11T21:00:00,+02:00,EET -1976-05-14T22:00:00,+03:00,EEST -1976-10-10T21:00:00,+02:00,EET -1977-04-02T22:00:00,+03:00,EEST -1977-09-24T21:00:00,+02:00,EET -1978-04-01T22:00:00,+03:00,EEST -1978-10-01T21:00:00,+02:00,EET -1979-03-31T22:00:00,+03:00,EEST -1979-09-29T21:00:00,+02:00,EET -1980-04-05T22:00:00,+03:00,EEST -1980-09-27T21:00:00,+02:00,EET -1981-03-28T22:00:00,+03:00,EEST -1981-09-26T21:00:00,+02:00,EET -1982-03-27T22:00:00,+03:00,EEST -1982-09-25T21:00:00,+02:00,EET -1983-03-26T22:00:00,+03:00,EEST -1983-09-24T21:00:00,+02:00,EET -1984-03-24T22:00:00,+03:00,EEST -1984-09-29T21:00:00,+02:00,EET -1985-03-30T22:00:00,+03:00,EEST -1985-09-28T21:00:00,+02:00,EET -1986-03-29T22:00:00,+03:00,EEST -1986-09-27T21:00:00,+02:00,EET -1987-03-28T22:00:00,+03:00,EEST -1987-09-26T21:00:00,+02:00,EET -1988-03-26T22:00:00,+03:00,EEST -1988-09-24T21:00:00,+02:00,EET -1989-03-25T22:00:00,+03:00,EEST -1989-09-23T21:00:00,+02:00,EET -1990-03-24T22:00:00,+03:00,EEST -1990-09-29T21:00:00,+02:00,EET -1991-03-30T22:00:00,+03:00,EEST -1991-09-28T21:00:00,+02:00,EET -1992-03-28T22:00:00,+03:00,EEST -1992-09-26T21:00:00,+02:00,EET -1993-03-27T22:00:00,+03:00,EEST -1993-09-25T21:00:00,+02:00,EET -1994-03-26T22:00:00,+03:00,EEST -1994-09-24T21:00:00,+02:00,EET -1995-03-25T22:00:00,+03:00,EEST -1995-09-23T21:00:00,+02:00,EET -1996-03-30T22:00:00,+03:00,EEST -1996-09-28T21:00:00,+02:00,EET -1997-03-29T22:00:00,+03:00,EEST -1997-09-27T21:00:00,+02:00,EET -1998-03-28T22:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-oslo.hoon b/desk/lib/pytz/europe-oslo.hoon deleted file mode 100644 index 0c152b8..0000000 --- a/desk/lib/pytz/europe-oslo.hoon +++ /dev/null @@ -1,146 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:43,LMT -1901-12-13T20:45:52,+01:00,CET -1916-05-22T00:00:00,+02:00,CEST -1916-09-29T22:00:00,+01:00,CET -1940-08-10T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-10-01T01:00:00,+01:00,CET -1959-03-15T01:00:00,+02:00,CEST -1959-09-20T01:00:00,+01:00,CET -1960-03-20T01:00:00,+02:00,CEST -1960-09-18T01:00:00,+01:00,CET -1961-03-19T01:00:00,+02:00,CEST -1961-09-17T01:00:00,+01:00,CET -1962-03-18T01:00:00,+02:00,CEST -1962-09-16T01:00:00,+01:00,CET -1963-03-17T01:00:00,+02:00,CEST -1963-09-15T01:00:00,+01:00,CET -1964-03-15T01:00:00,+02:00,CEST -1964-09-20T01:00:00,+01:00,CET -1965-04-25T01:00:00,+02:00,CEST -1965-09-19T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-paris.hoon b/desk/lib/pytz/europe-paris.hoon deleted file mode 100644 index 6a5f292..0000000 --- a/desk/lib/pytz/europe-paris.hoon +++ /dev/null @@ -1,189 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:09,LMT -1901-12-13T20:45:52,+00:09,PMT -1911-03-10T23:50:39,+00:00,WET -1916-06-14T23:00:00,+01:00,WEST -1916-10-01T23:00:00,+00:00,WET -1917-03-24T23:00:00,+01:00,WEST -1917-10-07T23:00:00,+00:00,WET -1918-03-09T23:00:00,+01:00,WEST -1918-10-06T23:00:00,+00:00,WET -1919-03-01T23:00:00,+01:00,WEST -1919-10-05T23:00:00,+00:00,WET -1920-02-14T23:00:00,+01:00,WEST -1920-10-23T23:00:00,+00:00,WET -1921-03-14T23:00:00,+01:00,WEST -1921-10-25T23:00:00,+00:00,WET -1922-03-25T23:00:00,+01:00,WEST -1922-10-07T23:00:00,+00:00,WET -1923-05-26T23:00:00,+01:00,WEST -1923-10-06T23:00:00,+00:00,WET -1924-03-29T23:00:00,+01:00,WEST -1924-10-04T23:00:00,+00:00,WET -1925-04-04T23:00:00,+01:00,WEST -1925-10-03T23:00:00,+00:00,WET -1926-04-17T23:00:00,+01:00,WEST -1926-10-02T23:00:00,+00:00,WET -1927-04-09T23:00:00,+01:00,WEST -1927-10-01T23:00:00,+00:00,WET -1928-04-14T23:00:00,+01:00,WEST -1928-10-06T23:00:00,+00:00,WET -1929-04-20T23:00:00,+01:00,WEST -1929-10-05T23:00:00,+00:00,WET -1930-04-12T23:00:00,+01:00,WEST -1930-10-04T23:00:00,+00:00,WET -1931-04-18T23:00:00,+01:00,WEST -1931-10-03T23:00:00,+00:00,WET -1932-04-02T23:00:00,+01:00,WEST -1932-10-01T23:00:00,+00:00,WET -1933-03-25T23:00:00,+01:00,WEST -1933-10-07T23:00:00,+00:00,WET -1934-04-07T23:00:00,+01:00,WEST -1934-10-06T23:00:00,+00:00,WET -1935-03-30T23:00:00,+01:00,WEST -1935-10-05T23:00:00,+00:00,WET -1936-04-18T23:00:00,+01:00,WEST -1936-10-03T23:00:00,+00:00,WET -1937-04-03T23:00:00,+01:00,WEST -1937-10-02T23:00:00,+00:00,WET -1938-03-26T23:00:00,+01:00,WEST -1938-10-01T23:00:00,+00:00,WET -1939-04-15T23:00:00,+01:00,WEST -1939-11-18T23:00:00,+00:00,WET -1940-02-25T02:00:00,+01:00,WEST -1940-06-14T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-08-24T22:00:00,+02:00,WEMT -1944-10-07T23:00:00,+01:00,WEST -1945-04-02T01:00:00,+02:00,WEMT -1945-09-16T01:00:00,+01:00,CET -1976-03-28T00:00:00,+02:00,CEST -1976-09-25T23:00:00,+01:00,CET -1977-04-03T01:00:00,+02:00,CEST -1977-09-25T01:00:00,+01:00,CET -1978-04-02T01:00:00,+02:00,CEST -1978-10-01T01:00:00,+01:00,CET -1979-04-01T01:00:00,+02:00,CEST -1979-09-30T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-podgorica.hoon b/desk/lib/pytz/europe-podgorica.hoon deleted file mode 100644 index 16dc500..0000000 --- a/desk/lib/pytz/europe-podgorica.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:22,LMT -1901-12-13T20:45:52,+01:00,CET -1941-04-18T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-05-08T01:00:00,+02:00,CEST -1945-09-16T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-prague.hoon b/desk/lib/pytz/europe-prague.hoon deleted file mode 100644 index 5beed13..0000000 --- a/desk/lib/pytz/europe-prague.hoon +++ /dev/null @@ -1,148 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:58,LMT -1901-12-13T20:45:52,+01:00,CET -1916-04-30T22:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1917-04-16T01:00:00,+02:00,CEST -1917-09-17T01:00:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+01:00,CET -1940-04-01T01:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-10-01T01:00:00,+01:00,CET -1946-05-06T01:00:00,+02:00,CEST -1946-10-06T01:00:00,+01:00,CET -1946-12-01T02:00:00,+00:00,GMT -1947-02-23T02:00:00,+01:00,CET -1947-04-20T01:00:00,+02:00,CEST -1947-10-05T01:00:00,+01:00,CET -1948-04-18T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1949-04-09T01:00:00,+02:00,CEST -1949-10-02T01:00:00,+01:00,CET -1979-04-01T01:00:00,+02:00,CEST -1979-09-30T01:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-riga.hoon b/desk/lib/pytz/europe-riga.hoon deleted file mode 100644 index e546ba9..0000000 --- a/desk/lib/pytz/europe-riga.hoon +++ /dev/null @@ -1,131 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:37,LMT -1901-12-13T20:45:52,+01:37,RMT -1918-04-15T00:23:26,+02:37,LST -1918-09-16T00:23:26,+01:37,RMT -1919-04-01T00:23:26,+02:37,LST -1919-05-22T00:23:26,+01:37,RMT -1926-05-10T22:23:26,+02:00,EET -1940-08-04T22:00:00,+03:00,MSK -1941-06-30T21:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1944-10-12T23:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+03:00,EEST -1989-09-24T00:00:00,+02:00,EET -1990-03-25T00:00:00,+03:00,EEST -1990-09-30T00:00:00,+02:00,EET -1991-03-31T00:00:00,+03:00,EEST -1991-09-29T00:00:00,+02:00,EET -1992-03-29T00:00:00,+03:00,EEST -1992-09-27T00:00:00,+02:00,EET -1993-03-28T00:00:00,+03:00,EEST -1993-09-26T00:00:00,+02:00,EET -1994-03-27T00:00:00,+03:00,EEST -1994-09-25T00:00:00,+02:00,EET -1995-03-26T00:00:00,+03:00,EEST -1995-09-24T00:00:00,+02:00,EET -1996-03-31T00:00:00,+03:00,EEST -1996-09-29T00:00:00,+02:00,EET -1997-03-30T01:00:00,+03:00,EEST -1997-10-26T01:00:00,+02:00,EET -1998-03-29T01:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-rome.hoon b/desk/lib/pytz/europe-rome.hoon deleted file mode 100644 index 56590ac..0000000 --- a/desk/lib/pytz/europe-rome.hoon +++ /dev/null @@ -1,174 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:50,LMT -1901-12-13T20:45:52,+01:00,CET -1916-06-03T23:00:00,+02:00,CEST -1916-09-30T22:00:00,+01:00,CET -1917-03-31T23:00:00,+02:00,CEST -1917-09-30T22:00:00,+01:00,CET -1918-03-09T23:00:00,+02:00,CEST -1918-10-06T22:00:00,+01:00,CET -1919-03-01T23:00:00,+02:00,CEST -1919-10-04T22:00:00,+01:00,CET -1920-03-20T23:00:00,+02:00,CEST -1920-09-18T22:00:00,+01:00,CET -1940-06-14T23:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-09-17T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-14T23:00:00,+01:00,CET -1946-03-17T01:00:00,+02:00,CEST -1946-10-06T01:00:00,+01:00,CET -1947-03-15T23:00:00,+02:00,CEST -1947-10-04T23:00:00,+01:00,CET -1948-02-29T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1966-05-21T23:00:00,+02:00,CEST -1966-09-24T22:00:00,+01:00,CET -1967-05-27T23:00:00,+02:00,CEST -1967-09-23T23:00:00,+01:00,CET -1968-05-25T23:00:00,+02:00,CEST -1968-09-21T23:00:00,+01:00,CET -1969-05-31T23:00:00,+02:00,CEST -1969-09-27T23:00:00,+01:00,CET -1970-05-30T23:00:00,+02:00,CEST -1970-09-26T23:00:00,+01:00,CET -1971-05-22T23:00:00,+02:00,CEST -1971-09-25T23:00:00,+01:00,CET -1972-05-27T23:00:00,+02:00,CEST -1972-09-30T23:00:00,+01:00,CET -1973-06-02T23:00:00,+02:00,CEST -1973-09-29T23:00:00,+01:00,CET -1974-05-25T23:00:00,+02:00,CEST -1974-09-28T23:00:00,+01:00,CET -1975-05-31T23:00:00,+02:00,CEST -1975-09-27T23:00:00,+01:00,CET -1976-05-29T23:00:00,+02:00,CEST -1976-09-25T23:00:00,+01:00,CET -1977-05-21T23:00:00,+02:00,CEST -1977-09-24T23:00:00,+01:00,CET -1978-05-27T23:00:00,+02:00,CEST -1978-09-30T23:00:00,+01:00,CET -1979-05-26T23:00:00,+02:00,CEST -1979-09-29T23:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-samara.hoon b/desk/lib/pytz/europe-samara.hoon deleted file mode 100644 index 67e6221..0000000 --- a/desk/lib/pytz/europe-samara.hoon +++ /dev/null @@ -1,69 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:20,LMT -1919-07-01T00:00:00,+03:00,+03 -1930-06-20T21:00:00,+04:00,+04 -1981-03-31T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+04:00,+04 -1982-03-31T20:00:00,+05:00,+05 -1982-09-30T19:00:00,+04:00,+04 -1983-03-31T20:00:00,+05:00,+05 -1983-09-30T19:00:00,+04:00,+04 -1984-03-31T20:00:00,+05:00,+05 -1984-09-29T22:00:00,+04:00,+04 -1985-03-30T22:00:00,+05:00,+05 -1985-09-28T22:00:00,+04:00,+04 -1986-03-29T22:00:00,+05:00,+05 -1986-09-27T22:00:00,+04:00,+04 -1987-03-28T22:00:00,+05:00,+05 -1987-09-26T22:00:00,+04:00,+04 -1988-03-26T22:00:00,+05:00,+05 -1988-09-24T22:00:00,+04:00,+04 -1989-03-25T22:00:00,+04:00,+04 -1989-09-23T23:00:00,+03:00,+03 -1990-03-24T23:00:00,+04:00,+04 -1990-09-29T23:00:00,+03:00,+03 -1991-03-30T23:00:00,+03:00,+03 -1991-09-29T00:00:00,+03:00,+03 -1991-10-20T00:00:00,+04:00,+04 -1992-03-28T22:00:00,+05:00,+05 -1992-09-26T22:00:00,+04:00,+04 -1993-03-27T22:00:00,+05:00,+05 -1993-09-25T22:00:00,+04:00,+04 -1994-03-26T22:00:00,+05:00,+05 -1994-09-24T22:00:00,+04:00,+04 -1995-03-25T22:00:00,+05:00,+05 -1995-09-23T22:00:00,+04:00,+04 -1996-03-30T22:00:00,+05:00,+05 -1996-10-26T22:00:00,+04:00,+04 -1997-03-29T22:00:00,+05:00,+05 -1997-10-25T22:00:00,+04:00,+04 -1998-03-28T22:00:00,+05:00,+05 -1998-10-24T22:00:00,+04:00,+04 -1999-03-27T22:00:00,+05:00,+05 -1999-10-30T22:00:00,+04:00,+04 -2000-03-25T22:00:00,+05:00,+05 -2000-10-28T22:00:00,+04:00,+04 -2001-03-24T22:00:00,+05:00,+05 -2001-10-27T22:00:00,+04:00,+04 -2002-03-30T22:00:00,+05:00,+05 -2002-10-26T22:00:00,+04:00,+04 -2003-03-29T22:00:00,+05:00,+05 -2003-10-25T22:00:00,+04:00,+04 -2004-03-27T22:00:00,+05:00,+05 -2004-10-30T22:00:00,+04:00,+04 -2005-03-26T22:00:00,+05:00,+05 -2005-10-29T22:00:00,+04:00,+04 -2006-03-25T22:00:00,+05:00,+05 -2006-10-28T22:00:00,+04:00,+04 -2007-03-24T22:00:00,+05:00,+05 -2007-10-27T22:00:00,+04:00,+04 -2008-03-29T22:00:00,+05:00,+05 -2008-10-25T22:00:00,+04:00,+04 -2009-03-28T22:00:00,+05:00,+05 -2009-10-24T22:00:00,+04:00,+04 -2010-03-27T22:00:00,+04:00,+04 -2010-10-30T23:00:00,+03:00,+03 -2011-03-26T23:00:00,+04:00,+04 -''' diff --git a/desk/lib/pytz/europe-san-marino.hoon b/desk/lib/pytz/europe-san-marino.hoon deleted file mode 100644 index 56590ac..0000000 --- a/desk/lib/pytz/europe-san-marino.hoon +++ /dev/null @@ -1,174 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:50,LMT -1901-12-13T20:45:52,+01:00,CET -1916-06-03T23:00:00,+02:00,CEST -1916-09-30T22:00:00,+01:00,CET -1917-03-31T23:00:00,+02:00,CEST -1917-09-30T22:00:00,+01:00,CET -1918-03-09T23:00:00,+02:00,CEST -1918-10-06T22:00:00,+01:00,CET -1919-03-01T23:00:00,+02:00,CEST -1919-10-04T22:00:00,+01:00,CET -1920-03-20T23:00:00,+02:00,CEST -1920-09-18T22:00:00,+01:00,CET -1940-06-14T23:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-09-17T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-14T23:00:00,+01:00,CET -1946-03-17T01:00:00,+02:00,CEST -1946-10-06T01:00:00,+01:00,CET -1947-03-15T23:00:00,+02:00,CEST -1947-10-04T23:00:00,+01:00,CET -1948-02-29T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1966-05-21T23:00:00,+02:00,CEST -1966-09-24T22:00:00,+01:00,CET -1967-05-27T23:00:00,+02:00,CEST -1967-09-23T23:00:00,+01:00,CET -1968-05-25T23:00:00,+02:00,CEST -1968-09-21T23:00:00,+01:00,CET -1969-05-31T23:00:00,+02:00,CEST -1969-09-27T23:00:00,+01:00,CET -1970-05-30T23:00:00,+02:00,CEST -1970-09-26T23:00:00,+01:00,CET -1971-05-22T23:00:00,+02:00,CEST -1971-09-25T23:00:00,+01:00,CET -1972-05-27T23:00:00,+02:00,CEST -1972-09-30T23:00:00,+01:00,CET -1973-06-02T23:00:00,+02:00,CEST -1973-09-29T23:00:00,+01:00,CET -1974-05-25T23:00:00,+02:00,CEST -1974-09-28T23:00:00,+01:00,CET -1975-05-31T23:00:00,+02:00,CEST -1975-09-27T23:00:00,+01:00,CET -1976-05-29T23:00:00,+02:00,CEST -1976-09-25T23:00:00,+01:00,CET -1977-05-21T23:00:00,+02:00,CEST -1977-09-24T23:00:00,+01:00,CET -1978-05-27T23:00:00,+02:00,CEST -1978-09-30T23:00:00,+01:00,CET -1979-05-26T23:00:00,+02:00,CEST -1979-09-29T23:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-sarajevo.hoon b/desk/lib/pytz/europe-sarajevo.hoon deleted file mode 100644 index 9545bec..0000000 --- a/desk/lib/pytz/europe-sarajevo.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:14,LMT -1901-12-13T20:45:52,+01:00,CET -1941-04-18T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-16T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-saratov.hoon b/desk/lib/pytz/europe-saratov.hoon deleted file mode 100644 index 1bca209..0000000 --- a/desk/lib/pytz/europe-saratov.hoon +++ /dev/null @@ -1,69 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:04,LMT -1919-07-01T00:00:00,+03:00,+03 -1930-06-20T21:00:00,+04:00,+04 -1981-03-31T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+04:00,+04 -1982-03-31T20:00:00,+05:00,+05 -1982-09-30T19:00:00,+04:00,+04 -1983-03-31T20:00:00,+05:00,+05 -1983-09-30T19:00:00,+04:00,+04 -1984-03-31T20:00:00,+05:00,+05 -1984-09-29T22:00:00,+04:00,+04 -1985-03-30T22:00:00,+05:00,+05 -1985-09-28T22:00:00,+04:00,+04 -1986-03-29T22:00:00,+05:00,+05 -1986-09-27T22:00:00,+04:00,+04 -1987-03-28T22:00:00,+05:00,+05 -1987-09-26T22:00:00,+04:00,+04 -1988-03-26T22:00:00,+04:00,+04 -1988-09-24T23:00:00,+03:00,+03 -1989-03-25T23:00:00,+04:00,+04 -1989-09-23T23:00:00,+03:00,+03 -1990-03-24T23:00:00,+04:00,+04 -1990-09-29T23:00:00,+03:00,+03 -1991-03-30T23:00:00,+04:00,+04 -1992-03-28T22:00:00,+04:00,+04 -1992-09-26T23:00:00,+03:00,+03 -1993-03-27T23:00:00,+04:00,+04 -1993-09-25T23:00:00,+03:00,+03 -1994-03-26T23:00:00,+04:00,+04 -1994-09-24T23:00:00,+03:00,+03 -1995-03-25T23:00:00,+04:00,+04 -1995-09-23T23:00:00,+03:00,+03 -1996-03-30T23:00:00,+04:00,+04 -1996-10-26T23:00:00,+03:00,+03 -1997-03-29T23:00:00,+04:00,+04 -1997-10-25T23:00:00,+03:00,+03 -1998-03-28T23:00:00,+04:00,+04 -1998-10-24T23:00:00,+03:00,+03 -1999-03-27T23:00:00,+04:00,+04 -1999-10-30T23:00:00,+03:00,+03 -2000-03-25T23:00:00,+04:00,+04 -2000-10-28T23:00:00,+03:00,+03 -2001-03-24T23:00:00,+04:00,+04 -2001-10-27T23:00:00,+03:00,+03 -2002-03-30T23:00:00,+04:00,+04 -2002-10-26T23:00:00,+03:00,+03 -2003-03-29T23:00:00,+04:00,+04 -2003-10-25T23:00:00,+03:00,+03 -2004-03-27T23:00:00,+04:00,+04 -2004-10-30T23:00:00,+03:00,+03 -2005-03-26T23:00:00,+04:00,+04 -2005-10-29T23:00:00,+03:00,+03 -2006-03-25T23:00:00,+04:00,+04 -2006-10-28T23:00:00,+03:00,+03 -2007-03-24T23:00:00,+04:00,+04 -2007-10-27T23:00:00,+03:00,+03 -2008-03-29T23:00:00,+04:00,+04 -2008-10-25T23:00:00,+03:00,+03 -2009-03-28T23:00:00,+04:00,+04 -2009-10-24T23:00:00,+03:00,+03 -2010-03-27T23:00:00,+04:00,+04 -2010-10-30T23:00:00,+03:00,+03 -2011-03-26T23:00:00,+04:00,+04 -2014-10-25T22:00:00,+03:00,+03 -2016-12-03T23:00:00,+04:00,+04 -''' diff --git a/desk/lib/pytz/europe-simferopol.hoon b/desk/lib/pytz/europe-simferopol.hoon deleted file mode 100644 index 800e2ef..0000000 --- a/desk/lib/pytz/europe-simferopol.hoon +++ /dev/null @@ -1,80 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:16,LMT -1901-12-13T20:45:52,+02:16,SMT -1924-05-01T21:44:00,+02:00,EET -1930-06-20T22:00:00,+03:00,MSK -1941-10-31T21:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-04-12T22:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+04:00,MSD -1989-09-23T23:00:00,+03:00,MSK -1990-06-30T23:00:00,+02:00,EET -1992-03-29T00:00:00,+03:00,EEST -1992-09-27T00:00:00,+02:00,EET -1993-03-28T00:00:00,+03:00,EEST -1993-09-26T00:00:00,+02:00,EET -1994-03-27T00:00:00,+03:00,EEST -1994-04-30T21:00:00,+04:00,MSD -1994-09-24T23:00:00,+03:00,MSK -1995-03-25T23:00:00,+04:00,MSD -1995-09-23T23:00:00,+03:00,MSK -1996-03-30T21:00:00,+04:00,MSD -1996-10-27T00:00:00,+03:00,MSK -1997-03-30T01:00:00,+03:00,EEST -1997-10-26T01:00:00,+02:00,EET -1998-03-29T01:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T00:00:00,+04:00,MSK -2014-10-25T22:00:00,+03:00,MSK -''' diff --git a/desk/lib/pytz/europe-skopje.hoon b/desk/lib/pytz/europe-skopje.hoon deleted file mode 100644 index 6a33f9c..0000000 --- a/desk/lib/pytz/europe-skopje.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:26,LMT -1901-12-13T20:45:52,+01:00,CET -1941-04-18T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-16T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-sofia.hoon b/desk/lib/pytz/europe-sofia.hoon deleted file mode 100644 index 44b2985..0000000 --- a/desk/lib/pytz/europe-sofia.hoon +++ /dev/null @@ -1,130 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:33,LMT -1901-12-13T20:45:52,+02:00,EET -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T02:00:00,+02:00,EET -1979-03-31T21:00:00,+03:00,EEST -1979-09-30T22:00:00,+02:00,EET -1980-04-05T21:00:00,+03:00,EEST -1980-09-28T22:00:00,+02:00,EET -1981-04-04T21:00:00,+03:00,EEST -1981-09-26T23:00:00,+02:00,EET -1982-04-03T21:00:00,+03:00,EEST -1982-09-26T00:00:00,+02:00,EET -1983-03-27T00:00:00,+03:00,EEST -1983-09-25T00:00:00,+02:00,EET -1984-03-25T00:00:00,+03:00,EEST -1984-09-30T00:00:00,+02:00,EET -1985-03-31T00:00:00,+03:00,EEST -1985-09-29T00:00:00,+02:00,EET -1986-03-30T00:00:00,+03:00,EEST -1986-09-28T00:00:00,+02:00,EET -1987-03-29T00:00:00,+03:00,EEST -1987-09-27T00:00:00,+02:00,EET -1988-03-27T00:00:00,+03:00,EEST -1988-09-25T00:00:00,+02:00,EET -1989-03-26T00:00:00,+03:00,EEST -1989-09-24T00:00:00,+02:00,EET -1990-03-25T00:00:00,+03:00,EEST -1990-09-30T00:00:00,+02:00,EET -1991-03-30T22:00:00,+03:00,EEST -1991-09-28T21:00:00,+02:00,EET -1992-03-28T22:00:00,+03:00,EEST -1992-09-26T21:00:00,+02:00,EET -1993-03-27T22:00:00,+03:00,EEST -1993-09-25T21:00:00,+02:00,EET -1994-03-26T22:00:00,+03:00,EEST -1994-09-24T21:00:00,+02:00,EET -1995-03-25T22:00:00,+03:00,EEST -1995-09-23T21:00:00,+02:00,EET -1996-03-30T22:00:00,+03:00,EEST -1996-10-26T21:00:00,+02:00,EET -1997-03-30T01:00:00,+03:00,EEST -1997-10-26T01:00:00,+02:00,EET -1998-03-29T01:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2000-03-26T01:00:00,+03:00,EEST -2000-10-29T01:00:00,+02:00,EET -2001-03-25T01:00:00,+03:00,EEST -2001-10-28T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-stockholm.hoon b/desk/lib/pytz/europe-stockholm.hoon deleted file mode 100644 index 2b72773..0000000 --- a/desk/lib/pytz/europe-stockholm.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:12,LMT -1901-12-13T20:45:52,+01:00,CET -1916-05-14T22:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-tallinn.hoon b/desk/lib/pytz/europe-tallinn.hoon deleted file mode 100644 index b9dc2c8..0000000 --- a/desk/lib/pytz/europe-tallinn.hoon +++ /dev/null @@ -1,128 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:39,LMT -1901-12-13T20:45:52,+01:39,TMT -1918-01-31T22:21:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+01:00,CET -1919-06-30T23:00:00,+01:39,TMT -1921-04-30T22:21:00,+02:00,EET -1940-08-05T22:00:00,+03:00,MSK -1941-09-14T21:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-09-21T22:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+03:00,EEST -1989-09-24T00:00:00,+02:00,EET -1990-03-25T00:00:00,+03:00,EEST -1990-09-30T00:00:00,+02:00,EET -1991-03-31T00:00:00,+03:00,EEST -1991-09-29T00:00:00,+02:00,EET -1992-03-29T00:00:00,+03:00,EEST -1992-09-27T00:00:00,+02:00,EET -1993-03-28T00:00:00,+03:00,EEST -1993-09-26T00:00:00,+02:00,EET -1994-03-27T00:00:00,+03:00,EEST -1994-09-25T00:00:00,+02:00,EET -1995-03-26T00:00:00,+03:00,EEST -1995-09-24T00:00:00,+02:00,EET -1996-03-31T00:00:00,+03:00,EEST -1996-10-27T00:00:00,+02:00,EET -1997-03-30T00:00:00,+03:00,EEST -1997-10-26T00:00:00,+02:00,EET -1998-03-29T00:00:00,+03:00,EEST -1998-10-25T01:00:00,+02:00,EET -1999-03-28T01:00:00,+03:00,EEST -1999-10-31T01:00:00,+02:00,EET -2002-03-31T01:00:00,+03:00,EEST -2002-10-27T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-tirane.hoon b/desk/lib/pytz/europe-tirane.hoon deleted file mode 100644 index a6b469c..0000000 --- a/desk/lib/pytz/europe-tirane.hoon +++ /dev/null @@ -1,138 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:19,LMT -1913-12-31T22:40:40,+01:00,CET -1940-06-15T23:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-04-10T01:00:00,+01:00,CET -1974-05-03T23:00:00,+02:00,CEST -1974-10-01T22:00:00,+01:00,CET -1975-04-30T23:00:00,+02:00,CEST -1975-10-01T22:00:00,+01:00,CET -1976-05-01T23:00:00,+02:00,CEST -1976-10-02T22:00:00,+01:00,CET -1977-05-07T23:00:00,+02:00,CEST -1977-10-01T22:00:00,+01:00,CET -1978-05-05T23:00:00,+02:00,CEST -1978-09-30T22:00:00,+01:00,CET -1979-05-04T23:00:00,+02:00,CEST -1979-09-29T22:00:00,+01:00,CET -1980-05-02T23:00:00,+02:00,CEST -1980-10-03T22:00:00,+01:00,CET -1981-04-25T23:00:00,+02:00,CEST -1981-09-26T22:00:00,+01:00,CET -1982-05-01T23:00:00,+02:00,CEST -1982-10-02T22:00:00,+01:00,CET -1983-04-17T23:00:00,+02:00,CEST -1983-09-30T22:00:00,+01:00,CET -1984-03-31T23:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-tiraspol.hoon b/desk/lib/pytz/europe-tiraspol.hoon deleted file mode 100644 index 4e07a48..0000000 --- a/desk/lib/pytz/europe-tiraspol.hoon +++ /dev/null @@ -1,146 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:55,LMT -1901-12-13T20:45:52,+01:55,CMT -1918-02-14T22:05:00,+01:44,BMT -1931-07-23T22:15:36,+02:00,EET -1932-05-20T22:00:00,+03:00,EEST -1932-10-01T22:00:00,+02:00,EET -1933-04-01T22:00:00,+03:00,EEST -1933-09-30T22:00:00,+02:00,EET -1934-04-07T22:00:00,+03:00,EEST -1934-10-06T22:00:00,+02:00,EET -1935-04-06T22:00:00,+03:00,EEST -1935-10-05T22:00:00,+02:00,EET -1936-04-04T22:00:00,+03:00,EEST -1936-10-03T22:00:00,+02:00,EET -1937-04-03T22:00:00,+03:00,EEST -1937-10-02T22:00:00,+02:00,EET -1938-04-02T22:00:00,+03:00,EEST -1938-10-01T22:00:00,+02:00,EET -1939-04-01T22:00:00,+03:00,EEST -1939-09-30T22:00:00,+02:00,EET -1940-08-14T22:00:00,+03:00,EEST -1941-07-16T21:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-08-23T22:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+04:00,MSD -1989-09-23T23:00:00,+03:00,MSK -1990-03-24T23:00:00,+04:00,MSD -1990-05-05T22:00:00,+03:00,EEST -1990-09-30T00:00:00,+02:00,EET -1991-03-31T00:00:00,+03:00,EEST -1991-09-29T00:00:00,+02:00,EET -1992-03-28T22:00:00,+03:00,EEST -1992-09-26T21:00:00,+02:00,EET -1993-03-27T22:00:00,+03:00,EEST -1993-09-25T21:00:00,+02:00,EET -1994-03-26T22:00:00,+03:00,EEST -1994-09-24T21:00:00,+02:00,EET -1995-03-25T22:00:00,+03:00,EEST -1995-09-23T21:00:00,+02:00,EET -1996-03-30T22:00:00,+03:00,EEST -1996-10-26T21:00:00,+02:00,EET -1997-03-30T00:00:00,+03:00,EEST -1997-10-26T00:00:00,+02:00,EET -1998-03-29T00:00:00,+03:00,EEST -1998-10-25T00:00:00,+02:00,EET -1999-03-28T00:00:00,+03:00,EEST -1999-10-31T00:00:00,+02:00,EET -2000-03-26T00:00:00,+03:00,EEST -2000-10-29T00:00:00,+02:00,EET -2001-03-25T00:00:00,+03:00,EEST -2001-10-28T00:00:00,+02:00,EET -2002-03-31T00:00:00,+03:00,EEST -2002-10-27T00:00:00,+02:00,EET -2003-03-30T00:00:00,+03:00,EEST -2003-10-26T00:00:00,+02:00,EET -2004-03-28T00:00:00,+03:00,EEST -2004-10-31T00:00:00,+02:00,EET -2005-03-27T00:00:00,+03:00,EEST -2005-10-30T00:00:00,+02:00,EET -2006-03-26T00:00:00,+03:00,EEST -2006-10-29T00:00:00,+02:00,EET -2007-03-25T00:00:00,+03:00,EEST -2007-10-28T00:00:00,+02:00,EET -2008-03-30T00:00:00,+03:00,EEST -2008-10-26T00:00:00,+02:00,EET -2009-03-29T00:00:00,+03:00,EEST -2009-10-25T00:00:00,+02:00,EET -2010-03-28T00:00:00,+03:00,EEST -2010-10-31T00:00:00,+02:00,EET -2011-03-27T00:00:00,+03:00,EEST -2011-10-30T00:00:00,+02:00,EET -2012-03-25T00:00:00,+03:00,EEST -2012-10-28T00:00:00,+02:00,EET -2013-03-31T00:00:00,+03:00,EEST -2013-10-27T00:00:00,+02:00,EET -2014-03-30T00:00:00,+03:00,EEST -2014-10-26T00:00:00,+02:00,EET -2015-03-29T00:00:00,+03:00,EEST -2015-10-25T00:00:00,+02:00,EET -2016-03-27T00:00:00,+03:00,EEST -2016-10-30T00:00:00,+02:00,EET -2017-03-26T00:00:00,+03:00,EEST -2017-10-29T00:00:00,+02:00,EET -2018-03-25T00:00:00,+03:00,EEST -2018-10-28T00:00:00,+02:00,EET -2019-03-31T00:00:00,+03:00,EEST -2019-10-27T00:00:00,+02:00,EET -2020-03-29T00:00:00,+03:00,EEST -2020-10-25T00:00:00,+02:00,EET -2021-03-28T00:00:00,+03:00,EEST -2021-10-31T00:00:00,+02:00,EET -2022-03-27T00:00:00,+03:00,EEST -2022-10-30T00:00:00,+02:00,EET -2023-03-26T00:00:00,+03:00,EEST -2023-10-29T00:00:00,+02:00,EET -2024-03-31T00:00:00,+03:00,EEST -2024-10-27T00:00:00,+02:00,EET -2025-03-30T00:00:00,+03:00,EEST -2025-10-26T00:00:00,+02:00,EET -2026-03-29T00:00:00,+03:00,EEST -2026-10-25T00:00:00,+02:00,EET -2027-03-28T00:00:00,+03:00,EEST -2027-10-31T00:00:00,+02:00,EET -2028-03-26T00:00:00,+03:00,EEST -2028-10-29T00:00:00,+02:00,EET -2029-03-25T00:00:00,+03:00,EEST -2029-10-28T00:00:00,+02:00,EET -2030-03-31T00:00:00,+03:00,EEST -2030-10-27T00:00:00,+02:00,EET -2031-03-30T00:00:00,+03:00,EEST -2031-10-26T00:00:00,+02:00,EET -2032-03-28T00:00:00,+03:00,EEST -2032-10-31T00:00:00,+02:00,EET -2033-03-27T00:00:00,+03:00,EEST -2033-10-30T00:00:00,+02:00,EET -2034-03-26T00:00:00,+03:00,EEST -2034-10-29T00:00:00,+02:00,EET -2035-03-25T00:00:00,+03:00,EEST -2035-10-28T00:00:00,+02:00,EET -2036-03-30T00:00:00,+03:00,EEST -2036-10-26T00:00:00,+02:00,EET -2037-03-29T00:00:00,+03:00,EEST -2037-10-25T00:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-ulyanovsk.hoon b/desk/lib/pytz/europe-ulyanovsk.hoon deleted file mode 100644 index af319ba..0000000 --- a/desk/lib/pytz/europe-ulyanovsk.hoon +++ /dev/null @@ -1,71 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:14,LMT -1919-07-01T00:00:00,+03:00,+03 -1930-06-20T21:00:00,+04:00,+04 -1981-03-31T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+04:00,+04 -1982-03-31T20:00:00,+05:00,+05 -1982-09-30T19:00:00,+04:00,+04 -1983-03-31T20:00:00,+05:00,+05 -1983-09-30T19:00:00,+04:00,+04 -1984-03-31T20:00:00,+05:00,+05 -1984-09-29T22:00:00,+04:00,+04 -1985-03-30T22:00:00,+05:00,+05 -1985-09-28T22:00:00,+04:00,+04 -1986-03-29T22:00:00,+05:00,+05 -1986-09-27T22:00:00,+04:00,+04 -1987-03-28T22:00:00,+05:00,+05 -1987-09-26T22:00:00,+04:00,+04 -1988-03-26T22:00:00,+05:00,+05 -1988-09-24T22:00:00,+04:00,+04 -1989-03-25T22:00:00,+04:00,+04 -1989-09-23T23:00:00,+03:00,+03 -1990-03-24T23:00:00,+04:00,+04 -1990-09-29T23:00:00,+03:00,+03 -1991-03-30T23:00:00,+03:00,+03 -1991-09-29T00:00:00,+02:00,+02 -1992-01-19T00:00:00,+03:00,+03 -1992-03-28T23:00:00,+04:00,+04 -1992-09-26T23:00:00,+03:00,+03 -1993-03-27T23:00:00,+04:00,+04 -1993-09-25T23:00:00,+03:00,+03 -1994-03-26T23:00:00,+04:00,+04 -1994-09-24T23:00:00,+03:00,+03 -1995-03-25T23:00:00,+04:00,+04 -1995-09-23T23:00:00,+03:00,+03 -1996-03-30T23:00:00,+04:00,+04 -1996-10-26T23:00:00,+03:00,+03 -1997-03-29T23:00:00,+04:00,+04 -1997-10-25T23:00:00,+03:00,+03 -1998-03-28T23:00:00,+04:00,+04 -1998-10-24T23:00:00,+03:00,+03 -1999-03-27T23:00:00,+04:00,+04 -1999-10-30T23:00:00,+03:00,+03 -2000-03-25T23:00:00,+04:00,+04 -2000-10-28T23:00:00,+03:00,+03 -2001-03-24T23:00:00,+04:00,+04 -2001-10-27T23:00:00,+03:00,+03 -2002-03-30T23:00:00,+04:00,+04 -2002-10-26T23:00:00,+03:00,+03 -2003-03-29T23:00:00,+04:00,+04 -2003-10-25T23:00:00,+03:00,+03 -2004-03-27T23:00:00,+04:00,+04 -2004-10-30T23:00:00,+03:00,+03 -2005-03-26T23:00:00,+04:00,+04 -2005-10-29T23:00:00,+03:00,+03 -2006-03-25T23:00:00,+04:00,+04 -2006-10-28T23:00:00,+03:00,+03 -2007-03-24T23:00:00,+04:00,+04 -2007-10-27T23:00:00,+03:00,+03 -2008-03-29T23:00:00,+04:00,+04 -2008-10-25T23:00:00,+03:00,+03 -2009-03-28T23:00:00,+04:00,+04 -2009-10-24T23:00:00,+03:00,+03 -2010-03-27T23:00:00,+04:00,+04 -2010-10-30T23:00:00,+03:00,+03 -2011-03-26T23:00:00,+04:00,+04 -2014-10-25T22:00:00,+03:00,+03 -2016-03-26T23:00:00,+04:00,+04 -''' diff --git a/desk/lib/pytz/europe-vaduz.hoon b/desk/lib/pytz/europe-vaduz.hoon deleted file mode 100644 index 2efa0d7..0000000 --- a/desk/lib/pytz/europe-vaduz.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:38,LMT -1901-12-13T20:45:52,+01:00,CET -1941-05-05T00:00:00,+02:00,CEST -1941-10-06T00:00:00,+01:00,CET -1942-05-04T00:00:00,+02:00,CEST -1942-10-05T00:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-vatican.hoon b/desk/lib/pytz/europe-vatican.hoon deleted file mode 100644 index 56590ac..0000000 --- a/desk/lib/pytz/europe-vatican.hoon +++ /dev/null @@ -1,174 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:50,LMT -1901-12-13T20:45:52,+01:00,CET -1916-06-03T23:00:00,+02:00,CEST -1916-09-30T22:00:00,+01:00,CET -1917-03-31T23:00:00,+02:00,CEST -1917-09-30T22:00:00,+01:00,CET -1918-03-09T23:00:00,+02:00,CEST -1918-10-06T22:00:00,+01:00,CET -1919-03-01T23:00:00,+02:00,CEST -1919-10-04T22:00:00,+01:00,CET -1920-03-20T23:00:00,+02:00,CEST -1920-09-18T22:00:00,+01:00,CET -1940-06-14T23:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-09-17T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-14T23:00:00,+01:00,CET -1946-03-17T01:00:00,+02:00,CEST -1946-10-06T01:00:00,+01:00,CET -1947-03-15T23:00:00,+02:00,CEST -1947-10-04T23:00:00,+01:00,CET -1948-02-29T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1966-05-21T23:00:00,+02:00,CEST -1966-09-24T22:00:00,+01:00,CET -1967-05-27T23:00:00,+02:00,CEST -1967-09-23T23:00:00,+01:00,CET -1968-05-25T23:00:00,+02:00,CEST -1968-09-21T23:00:00,+01:00,CET -1969-05-31T23:00:00,+02:00,CEST -1969-09-27T23:00:00,+01:00,CET -1970-05-30T23:00:00,+02:00,CEST -1970-09-26T23:00:00,+01:00,CET -1971-05-22T23:00:00,+02:00,CEST -1971-09-25T23:00:00,+01:00,CET -1972-05-27T23:00:00,+02:00,CEST -1972-09-30T23:00:00,+01:00,CET -1973-06-02T23:00:00,+02:00,CEST -1973-09-29T23:00:00,+01:00,CET -1974-05-25T23:00:00,+02:00,CEST -1974-09-28T23:00:00,+01:00,CET -1975-05-31T23:00:00,+02:00,CEST -1975-09-27T23:00:00,+01:00,CET -1976-05-29T23:00:00,+02:00,CEST -1976-09-25T23:00:00,+01:00,CET -1977-05-21T23:00:00,+02:00,CEST -1977-09-24T23:00:00,+01:00,CET -1978-05-27T23:00:00,+02:00,CEST -1978-09-30T23:00:00,+01:00,CET -1979-05-26T23:00:00,+02:00,CEST -1979-09-29T23:00:00,+01:00,CET -1980-04-06T01:00:00,+02:00,CEST -1980-09-28T01:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-vienna.hoon b/desk/lib/pytz/europe-vienna.hoon deleted file mode 100644 index 42c5594..0000000 --- a/desk/lib/pytz/europe-vienna.hoon +++ /dev/null @@ -1,144 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:05,LMT -1901-12-13T20:45:52,+01:00,CET -1916-04-30T22:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1917-04-16T01:00:00,+02:00,CEST -1917-09-17T01:00:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+01:00,CET -1920-04-05T01:00:00,+02:00,CEST -1920-09-13T01:00:00,+01:00,CET -1940-04-01T01:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-04-12T01:00:00,+01:00,CET -1946-04-14T01:00:00,+02:00,CEST -1946-10-07T01:00:00,+01:00,CET -1947-04-06T01:00:00,+02:00,CEST -1947-10-05T01:00:00,+01:00,CET -1948-04-18T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1980-04-05T23:00:00,+02:00,CEST -1980-09-27T22:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-vilnius.hoon b/desk/lib/pytz/europe-vilnius.hoon deleted file mode 100644 index 0149fd6..0000000 --- a/desk/lib/pytz/europe-vilnius.hoon +++ /dev/null @@ -1,125 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:41,LMT -1901-12-13T20:45:52,+01:24,WMT -1916-12-31T22:36:00,+01:36,KMT -1919-10-09T22:24:24,+01:00,CET -1920-07-11T23:00:00,+02:00,EET -1920-10-08T22:00:00,+01:00,CET -1940-08-02T23:00:00,+03:00,MSK -1941-06-23T21:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-07-31T22:00:00,+03:00,MSK -1981-03-31T21:00:00,+04:00,MSD -1981-09-30T20:00:00,+03:00,MSK -1982-03-31T21:00:00,+04:00,MSD -1982-09-30T20:00:00,+03:00,MSK -1983-03-31T21:00:00,+04:00,MSD -1983-09-30T20:00:00,+03:00,MSK -1984-03-31T21:00:00,+04:00,MSD -1984-09-29T23:00:00,+03:00,MSK -1985-03-30T23:00:00,+04:00,MSD -1985-09-28T23:00:00,+03:00,MSK -1986-03-29T23:00:00,+04:00,MSD -1986-09-27T23:00:00,+03:00,MSK -1987-03-28T23:00:00,+04:00,MSD -1987-09-26T23:00:00,+03:00,MSK -1988-03-26T23:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+03:00,EEST -1989-09-24T00:00:00,+02:00,EET -1990-03-25T00:00:00,+03:00,EEST -1990-09-30T00:00:00,+02:00,EET -1991-03-31T00:00:00,+03:00,EEST -1991-09-29T00:00:00,+02:00,EET -1992-03-29T00:00:00,+03:00,EEST -1992-09-27T00:00:00,+02:00,EET -1993-03-28T00:00:00,+03:00,EEST -1993-09-26T00:00:00,+02:00,EET -1994-03-27T00:00:00,+03:00,EEST -1994-09-25T00:00:00,+02:00,EET -1995-03-26T00:00:00,+03:00,EEST -1995-09-24T00:00:00,+02:00,EET -1996-03-31T00:00:00,+03:00,EEST -1996-10-27T00:00:00,+02:00,EET -1997-03-30T00:00:00,+03:00,EEST -1997-10-26T00:00:00,+02:00,EET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+02:00,EET -2003-03-30T01:00:00,+03:00,EEST -2003-10-26T01:00:00,+02:00,EET -2004-03-28T01:00:00,+03:00,EEST -2004-10-31T01:00:00,+02:00,EET -2005-03-27T01:00:00,+03:00,EEST -2005-10-30T01:00:00,+02:00,EET -2006-03-26T01:00:00,+03:00,EEST -2006-10-29T01:00:00,+02:00,EET -2007-03-25T01:00:00,+03:00,EEST -2007-10-28T01:00:00,+02:00,EET -2008-03-30T01:00:00,+03:00,EEST -2008-10-26T01:00:00,+02:00,EET -2009-03-29T01:00:00,+03:00,EEST -2009-10-25T01:00:00,+02:00,EET -2010-03-28T01:00:00,+03:00,EEST -2010-10-31T01:00:00,+02:00,EET -2011-03-27T01:00:00,+03:00,EEST -2011-10-30T01:00:00,+02:00,EET -2012-03-25T01:00:00,+03:00,EEST -2012-10-28T01:00:00,+02:00,EET -2013-03-31T01:00:00,+03:00,EEST -2013-10-27T01:00:00,+02:00,EET -2014-03-30T01:00:00,+03:00,EEST -2014-10-26T01:00:00,+02:00,EET -2015-03-29T01:00:00,+03:00,EEST -2015-10-25T01:00:00,+02:00,EET -2016-03-27T01:00:00,+03:00,EEST -2016-10-30T01:00:00,+02:00,EET -2017-03-26T01:00:00,+03:00,EEST -2017-10-29T01:00:00,+02:00,EET -2018-03-25T01:00:00,+03:00,EEST -2018-10-28T01:00:00,+02:00,EET -2019-03-31T01:00:00,+03:00,EEST -2019-10-27T01:00:00,+02:00,EET -2020-03-29T01:00:00,+03:00,EEST -2020-10-25T01:00:00,+02:00,EET -2021-03-28T01:00:00,+03:00,EEST -2021-10-31T01:00:00,+02:00,EET -2022-03-27T01:00:00,+03:00,EEST -2022-10-30T01:00:00,+02:00,EET -2023-03-26T01:00:00,+03:00,EEST -2023-10-29T01:00:00,+02:00,EET -2024-03-31T01:00:00,+03:00,EEST -2024-10-27T01:00:00,+02:00,EET -2025-03-30T01:00:00,+03:00,EEST -2025-10-26T01:00:00,+02:00,EET -2026-03-29T01:00:00,+03:00,EEST -2026-10-25T01:00:00,+02:00,EET -2027-03-28T01:00:00,+03:00,EEST -2027-10-31T01:00:00,+02:00,EET -2028-03-26T01:00:00,+03:00,EEST -2028-10-29T01:00:00,+02:00,EET -2029-03-25T01:00:00,+03:00,EEST -2029-10-28T01:00:00,+02:00,EET -2030-03-31T01:00:00,+03:00,EEST -2030-10-27T01:00:00,+02:00,EET -2031-03-30T01:00:00,+03:00,EEST -2031-10-26T01:00:00,+02:00,EET -2032-03-28T01:00:00,+03:00,EEST -2032-10-31T01:00:00,+02:00,EET -2033-03-27T01:00:00,+03:00,EEST -2033-10-30T01:00:00,+02:00,EET -2034-03-26T01:00:00,+03:00,EEST -2034-10-29T01:00:00,+02:00,EET -2035-03-25T01:00:00,+03:00,EEST -2035-10-28T01:00:00,+02:00,EET -2036-03-30T01:00:00,+03:00,EEST -2036-10-26T01:00:00,+02:00,EET -2037-03-29T01:00:00,+03:00,EEST -2037-10-25T01:00:00,+02:00,EET -''' diff --git a/desk/lib/pytz/europe-volgograd.hoon b/desk/lib/pytz/europe-volgograd.hoon deleted file mode 100644 index 75e6999..0000000 --- a/desk/lib/pytz/europe-volgograd.hoon +++ /dev/null @@ -1,70 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:58,LMT -1920-01-02T21:02:20,+03:00,+03 -1930-06-20T21:00:00,+04:00,+04 -1981-03-31T20:00:00,+05:00,+05 -1981-09-30T19:00:00,+04:00,+04 -1982-03-31T20:00:00,+05:00,+05 -1982-09-30T19:00:00,+04:00,+04 -1983-03-31T20:00:00,+05:00,+05 -1983-09-30T19:00:00,+04:00,+04 -1984-03-31T20:00:00,+05:00,+05 -1984-09-29T22:00:00,+04:00,+04 -1985-03-30T22:00:00,+05:00,+05 -1985-09-28T22:00:00,+04:00,+04 -1986-03-29T22:00:00,+05:00,+05 -1986-09-27T22:00:00,+04:00,+04 -1987-03-28T22:00:00,+05:00,+05 -1987-09-26T22:00:00,+04:00,+04 -1988-03-26T22:00:00,+04:00,MSD -1988-09-24T23:00:00,+03:00,MSK -1989-03-25T23:00:00,+04:00,MSD -1989-09-23T23:00:00,+03:00,MSK -1990-03-24T23:00:00,+04:00,MSD -1990-09-29T23:00:00,+03:00,MSK -1991-03-30T23:00:00,+04:00,+04 -1992-03-28T22:00:00,+04:00,MSD -1992-09-26T23:00:00,+03:00,MSK -1993-03-27T23:00:00,+04:00,MSD -1993-09-25T23:00:00,+03:00,MSK -1994-03-26T23:00:00,+04:00,MSD -1994-09-24T23:00:00,+03:00,MSK -1995-03-25T23:00:00,+04:00,MSD -1995-09-23T23:00:00,+03:00,MSK -1996-03-30T23:00:00,+04:00,MSD -1996-10-26T23:00:00,+03:00,MSK -1997-03-29T23:00:00,+04:00,MSD -1997-10-25T23:00:00,+03:00,MSK -1998-03-28T23:00:00,+04:00,MSD -1998-10-24T23:00:00,+03:00,MSK -1999-03-27T23:00:00,+04:00,MSD -1999-10-30T23:00:00,+03:00,MSK -2000-03-25T23:00:00,+04:00,MSD -2000-10-28T23:00:00,+03:00,MSK -2001-03-24T23:00:00,+04:00,MSD -2001-10-27T23:00:00,+03:00,MSK -2002-03-30T23:00:00,+04:00,MSD -2002-10-26T23:00:00,+03:00,MSK -2003-03-29T23:00:00,+04:00,MSD -2003-10-25T23:00:00,+03:00,MSK -2004-03-27T23:00:00,+04:00,MSD -2004-10-30T23:00:00,+03:00,MSK -2005-03-26T23:00:00,+04:00,MSD -2005-10-29T23:00:00,+03:00,MSK -2006-03-25T23:00:00,+04:00,MSD -2006-10-28T23:00:00,+03:00,MSK -2007-03-24T23:00:00,+04:00,MSD -2007-10-27T23:00:00,+03:00,MSK -2008-03-29T23:00:00,+04:00,MSD -2008-10-25T23:00:00,+03:00,MSK -2009-03-28T23:00:00,+04:00,MSD -2009-10-24T23:00:00,+03:00,MSK -2010-03-27T23:00:00,+04:00,MSD -2010-10-30T23:00:00,+03:00,MSK -2011-03-26T23:00:00,+04:00,MSK -2014-10-25T22:00:00,+03:00,MSK -2018-10-27T23:00:00,+04:00,+04 -2020-12-26T22:00:00,+03:00,MSK -''' diff --git a/desk/lib/pytz/europe-warsaw.hoon b/desk/lib/pytz/europe-warsaw.hoon deleted file mode 100644 index 583fd1c..0000000 --- a/desk/lib/pytz/europe-warsaw.hoon +++ /dev/null @@ -1,170 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:24,LMT -1901-12-13T20:45:52,+01:24,WMT -1915-08-04T22:36:00,+01:00,CET -1916-04-30T22:00:00,+02:00,CEST -1916-09-30T23:00:00,+01:00,CET -1917-04-16T01:00:00,+02:00,CEST -1917-09-17T01:00:00,+01:00,CET -1918-04-15T01:00:00,+02:00,CEST -1918-09-16T01:00:00,+02:00,EET -1919-04-15T00:00:00,+03:00,EEST -1919-09-16T00:00:00,+02:00,EET -1922-05-31T22:00:00,+01:00,CET -1940-06-23T01:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-04T00:00:00,+01:00,CET -1945-04-28T23:00:00,+02:00,CEST -1945-10-31T22:00:00,+01:00,CET -1946-04-13T23:00:00,+02:00,CEST -1946-10-07T01:00:00,+01:00,CET -1947-05-04T01:00:00,+02:00,CEST -1947-10-05T01:00:00,+01:00,CET -1948-04-18T01:00:00,+02:00,CEST -1948-10-03T01:00:00,+01:00,CET -1949-04-10T01:00:00,+02:00,CEST -1949-10-02T01:00:00,+01:00,CET -1957-06-02T00:00:00,+02:00,CEST -1957-09-29T00:00:00,+01:00,CET -1958-03-30T00:00:00,+02:00,CEST -1958-09-28T00:00:00,+01:00,CET -1959-05-31T00:00:00,+02:00,CEST -1959-10-04T00:00:00,+01:00,CET -1960-04-03T00:00:00,+02:00,CEST -1960-10-02T00:00:00,+01:00,CET -1961-05-28T00:00:00,+02:00,CEST -1961-10-01T00:00:00,+01:00,CET -1962-05-27T00:00:00,+02:00,CEST -1962-09-30T00:00:00,+01:00,CET -1963-05-26T00:00:00,+02:00,CEST -1963-09-29T00:00:00,+01:00,CET -1964-05-31T00:00:00,+02:00,CEST -1964-09-27T00:00:00,+01:00,CET -1977-04-03T00:00:00,+02:00,CEST -1977-09-25T00:00:00,+01:00,CET -1978-04-02T00:00:00,+02:00,CEST -1978-10-01T00:00:00,+01:00,CET -1979-04-01T00:00:00,+02:00,CEST -1979-09-30T00:00:00,+01:00,CET -1980-04-06T00:00:00,+02:00,CEST -1980-09-28T00:00:00,+01:00,CET -1981-03-29T00:00:00,+02:00,CEST -1981-09-27T00:00:00,+01:00,CET -1982-03-28T00:00:00,+02:00,CEST -1982-09-26T00:00:00,+01:00,CET -1983-03-27T00:00:00,+02:00,CEST -1983-09-25T00:00:00,+01:00,CET -1984-03-25T00:00:00,+02:00,CEST -1984-09-30T00:00:00,+01:00,CET -1985-03-31T00:00:00,+02:00,CEST -1985-09-29T00:00:00,+01:00,CET -1986-03-30T00:00:00,+02:00,CEST -1986-09-28T00:00:00,+01:00,CET -1987-03-29T00:00:00,+02:00,CEST -1987-09-27T00:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-zagreb.hoon b/desk/lib/pytz/europe-zagreb.hoon deleted file mode 100644 index f7465bf..0000000 --- a/desk/lib/pytz/europe-zagreb.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+01:04,LMT -1901-12-13T20:45:52,+01:00,CET -1941-04-18T22:00:00,+02:00,CEST -1942-11-02T01:00:00,+01:00,CET -1943-03-29T01:00:00,+02:00,CEST -1943-10-04T01:00:00,+01:00,CET -1944-04-03T01:00:00,+02:00,CEST -1944-10-02T01:00:00,+01:00,CET -1945-04-02T01:00:00,+02:00,CEST -1945-09-16T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/europe-zurich.hoon b/desk/lib/pytz/europe-zurich.hoon deleted file mode 100644 index d7a3985..0000000 --- a/desk/lib/pytz/europe-zurich.hoon +++ /dev/null @@ -1,124 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:34,LMT -1901-12-13T20:45:52,+01:00,CET -1941-05-05T00:00:00,+02:00,CEST -1941-10-06T00:00:00,+01:00,CET -1942-05-04T00:00:00,+02:00,CEST -1942-10-05T00:00:00,+01:00,CET -1981-03-29T01:00:00,+02:00,CEST -1981-09-27T01:00:00,+01:00,CET -1982-03-28T01:00:00,+02:00,CEST -1982-09-26T01:00:00,+01:00,CET -1983-03-27T01:00:00,+02:00,CEST -1983-09-25T01:00:00,+01:00,CET -1984-03-25T01:00:00,+02:00,CEST -1984-09-30T01:00:00,+01:00,CET -1985-03-31T01:00:00,+02:00,CEST -1985-09-29T01:00:00,+01:00,CET -1986-03-30T01:00:00,+02:00,CEST -1986-09-28T01:00:00,+01:00,CET -1987-03-29T01:00:00,+02:00,CEST -1987-09-27T01:00:00,+01:00,CET -1988-03-27T01:00:00,+02:00,CEST -1988-09-25T01:00:00,+01:00,CET -1989-03-26T01:00:00,+02:00,CEST -1989-09-24T01:00:00,+01:00,CET -1990-03-25T01:00:00,+02:00,CEST -1990-09-30T01:00:00,+01:00,CET -1991-03-31T01:00:00,+02:00,CEST -1991-09-29T01:00:00,+01:00,CET -1992-03-29T01:00:00,+02:00,CEST -1992-09-27T01:00:00,+01:00,CET -1993-03-28T01:00:00,+02:00,CEST -1993-09-26T01:00:00,+01:00,CET -1994-03-27T01:00:00,+02:00,CEST -1994-09-25T01:00:00,+01:00,CET -1995-03-26T01:00:00,+02:00,CEST -1995-09-24T01:00:00,+01:00,CET -1996-03-31T01:00:00,+02:00,CEST -1996-10-27T01:00:00,+01:00,CET -1997-03-30T01:00:00,+02:00,CEST -1997-10-26T01:00:00,+01:00,CET -1998-03-29T01:00:00,+02:00,CEST -1998-10-25T01:00:00,+01:00,CET -1999-03-28T01:00:00,+02:00,CEST -1999-10-31T01:00:00,+01:00,CET -2000-03-26T01:00:00,+02:00,CEST -2000-10-29T01:00:00,+01:00,CET -2001-03-25T01:00:00,+02:00,CEST -2001-10-28T01:00:00,+01:00,CET -2002-03-31T01:00:00,+02:00,CEST -2002-10-27T01:00:00,+01:00,CET -2003-03-30T01:00:00,+02:00,CEST -2003-10-26T01:00:00,+01:00,CET -2004-03-28T01:00:00,+02:00,CEST -2004-10-31T01:00:00,+01:00,CET -2005-03-27T01:00:00,+02:00,CEST -2005-10-30T01:00:00,+01:00,CET -2006-03-26T01:00:00,+02:00,CEST -2006-10-29T01:00:00,+01:00,CET -2007-03-25T01:00:00,+02:00,CEST -2007-10-28T01:00:00,+01:00,CET -2008-03-30T01:00:00,+02:00,CEST -2008-10-26T01:00:00,+01:00,CET -2009-03-29T01:00:00,+02:00,CEST -2009-10-25T01:00:00,+01:00,CET -2010-03-28T01:00:00,+02:00,CEST -2010-10-31T01:00:00,+01:00,CET -2011-03-27T01:00:00,+02:00,CEST -2011-10-30T01:00:00,+01:00,CET -2012-03-25T01:00:00,+02:00,CEST -2012-10-28T01:00:00,+01:00,CET -2013-03-31T01:00:00,+02:00,CEST -2013-10-27T01:00:00,+01:00,CET -2014-03-30T01:00:00,+02:00,CEST -2014-10-26T01:00:00,+01:00,CET -2015-03-29T01:00:00,+02:00,CEST -2015-10-25T01:00:00,+01:00,CET -2016-03-27T01:00:00,+02:00,CEST -2016-10-30T01:00:00,+01:00,CET -2017-03-26T01:00:00,+02:00,CEST -2017-10-29T01:00:00,+01:00,CET -2018-03-25T01:00:00,+02:00,CEST -2018-10-28T01:00:00,+01:00,CET -2019-03-31T01:00:00,+02:00,CEST -2019-10-27T01:00:00,+01:00,CET -2020-03-29T01:00:00,+02:00,CEST -2020-10-25T01:00:00,+01:00,CET -2021-03-28T01:00:00,+02:00,CEST -2021-10-31T01:00:00,+01:00,CET -2022-03-27T01:00:00,+02:00,CEST -2022-10-30T01:00:00,+01:00,CET -2023-03-26T01:00:00,+02:00,CEST -2023-10-29T01:00:00,+01:00,CET -2024-03-31T01:00:00,+02:00,CEST -2024-10-27T01:00:00,+01:00,CET -2025-03-30T01:00:00,+02:00,CEST -2025-10-26T01:00:00,+01:00,CET -2026-03-29T01:00:00,+02:00,CEST -2026-10-25T01:00:00,+01:00,CET -2027-03-28T01:00:00,+02:00,CEST -2027-10-31T01:00:00,+01:00,CET -2028-03-26T01:00:00,+02:00,CEST -2028-10-29T01:00:00,+01:00,CET -2029-03-25T01:00:00,+02:00,CEST -2029-10-28T01:00:00,+01:00,CET -2030-03-31T01:00:00,+02:00,CEST -2030-10-27T01:00:00,+01:00,CET -2031-03-30T01:00:00,+02:00,CEST -2031-10-26T01:00:00,+01:00,CET -2032-03-28T01:00:00,+02:00,CEST -2032-10-31T01:00:00,+01:00,CET -2033-03-27T01:00:00,+02:00,CEST -2033-10-30T01:00:00,+01:00,CET -2034-03-26T01:00:00,+02:00,CEST -2034-10-29T01:00:00,+01:00,CET -2035-03-25T01:00:00,+02:00,CEST -2035-10-28T01:00:00,+01:00,CET -2036-03-30T01:00:00,+02:00,CEST -2036-10-26T01:00:00,+01:00,CET -2037-03-29T01:00:00,+02:00,CEST -2037-10-25T01:00:00,+01:00,CET -''' diff --git a/desk/lib/pytz/gmt.hoon b/desk/lib/pytz/gmt.hoon deleted file mode 100644 index c8938e6..0000000 --- a/desk/lib/pytz/gmt.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,GMT -''' diff --git a/desk/lib/pytz/indian-antananarivo.hoon b/desk/lib/pytz/indian-antananarivo.hoon deleted file mode 100644 index 0f99bc2..0000000 --- a/desk/lib/pytz/indian-antananarivo.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:10,LMT -1911-06-30T20:49:56,+03:00,EAT -1954-02-27T20:00:00,+04:00,EAST -1954-05-29T20:00:00,+03:00,EAT -''' diff --git a/desk/lib/pytz/indian-chagos.hoon b/desk/lib/pytz/indian-chagos.hoon deleted file mode 100644 index 486e765..0000000 --- a/desk/lib/pytz/indian-chagos.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:50,LMT -1906-12-31T19:10:20,+05:00,+05 -1995-12-31T19:00:00,+06:00,+06 -''' diff --git a/desk/lib/pytz/indian-christmas.hoon b/desk/lib/pytz/indian-christmas.hoon deleted file mode 100644 index 2cbac44..0000000 --- a/desk/lib/pytz/indian-christmas.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+07:03,LMT -1901-12-13T20:45:52,+07:00,+07 -''' diff --git a/desk/lib/pytz/indian-cocos.hoon b/desk/lib/pytz/indian-cocos.hoon deleted file mode 100644 index 8ce7099..0000000 --- a/desk/lib/pytz/indian-cocos.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+06:28,LMT -1901-12-13T20:45:52,+06:30,+0630 -''' diff --git a/desk/lib/pytz/indian-comoro.hoon b/desk/lib/pytz/indian-comoro.hoon deleted file mode 100644 index fafcb50..0000000 --- a/desk/lib/pytz/indian-comoro.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+02:53,LMT -1911-06-30T21:06:56,+03:00,EAT -''' diff --git a/desk/lib/pytz/indian-kerguelen.hoon b/desk/lib/pytz/indian-kerguelen.hoon deleted file mode 100644 index 75b83fa..0000000 --- a/desk/lib/pytz/indian-kerguelen.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1950-01-01T00:00:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/indian-mahe.hoon b/desk/lib/pytz/indian-mahe.hoon deleted file mode 100644 index 1d72a00..0000000 --- a/desk/lib/pytz/indian-mahe.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:42,LMT -1906-12-31T20:18:12,+04:00,+04 -''' diff --git a/desk/lib/pytz/indian-maldives.hoon b/desk/lib/pytz/indian-maldives.hoon deleted file mode 100644 index caf47b8..0000000 --- a/desk/lib/pytz/indian-maldives.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+04:54,LMT -1901-12-13T20:45:52,+04:54,MMT -1959-12-31T19:06:00,+05:00,+05 -''' diff --git a/desk/lib/pytz/indian-mauritius.hoon b/desk/lib/pytz/indian-mauritius.hoon deleted file mode 100644 index 1fabacd..0000000 --- a/desk/lib/pytz/indian-mauritius.hoon +++ /dev/null @@ -1,10 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:50,LMT -1906-12-31T20:10:00,+04:00,+04 -1982-10-09T20:00:00,+05:00,+05 -1983-03-20T19:00:00,+04:00,+04 -2008-10-25T22:00:00,+05:00,+05 -2009-03-28T21:00:00,+04:00,+04 -''' diff --git a/desk/lib/pytz/indian-mayotte.hoon b/desk/lib/pytz/indian-mayotte.hoon deleted file mode 100644 index a67e894..0000000 --- a/desk/lib/pytz/indian-mayotte.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:01,LMT -1911-06-30T20:59:04,+03:00,EAT -''' diff --git a/desk/lib/pytz/indian-reunion.hoon b/desk/lib/pytz/indian-reunion.hoon deleted file mode 100644 index 9f5f058..0000000 --- a/desk/lib/pytz/indian-reunion.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+03:42,LMT -1911-05-31T20:18:08,+04:00,+04 -''' diff --git a/desk/lib/pytz/names.hoon b/desk/lib/pytz/names.hoon deleted file mode 100644 index 672ed5d..0000000 --- a/desk/lib/pytz/names.hoon +++ /dev/null @@ -1,487 +0,0 @@ -%- to-wain:format -''' -Africa/Abidjan -Africa/Accra -Africa/Addis_Ababa -Africa/Algiers -Africa/Asmara -Africa/Bamako -Africa/Bangui -Africa/Banjul -Africa/Bissau -Africa/Blantyre -Africa/Brazzaville -Africa/Bujumbura -Africa/Cairo -Africa/Casablanca -Africa/Ceuta -Africa/Conakry -Africa/Dakar -Africa/Dar_es_Salaam -Africa/Djibouti -Africa/Douala -Africa/El_Aaiun -Africa/Freetown -Africa/Gaborone -Africa/Harare -Africa/Johannesburg -Africa/Juba -Africa/Kampala -Africa/Khartoum -Africa/Kigali -Africa/Kinshasa -Africa/Lagos -Africa/Libreville -Africa/Lome -Africa/Luanda -Africa/Lubumbashi -Africa/Lusaka -Africa/Malabo -Africa/Maputo -Africa/Maseru -Africa/Mbabane -Africa/Mogadishu -Africa/Monrovia -Africa/Nairobi -Africa/Ndjamena -Africa/Niamey -Africa/Nouakchott -Africa/Ouagadougou -Africa/Porto-Novo -Africa/Sao_Tome -Africa/Timbuktu -Africa/Tripoli -Africa/Tunis -Africa/Windhoek -America/Adak -America/Anchorage -America/Anguilla -America/Antigua -America/Araguaina -America/Argentina/Buenos_Aires -America/Argentina/Catamarca -America/Argentina/Cordoba -America/Argentina/Jujuy -America/Argentina/La_Rioja -America/Argentina/Mendoza -America/Argentina/Rio_Gallegos -America/Argentina/Salta -America/Argentina/San_Juan -America/Argentina/San_Luis -America/Argentina/Tucuman -America/Argentina/Ushuaia -America/Aruba -America/Asuncion -America/Atikokan -America/Atka -America/Bahia -America/Bahia_Banderas -America/Barbados -America/Belem -America/Belize -America/Blanc-Sablon -America/Boa_Vista -America/Bogota -America/Boise -America/Cambridge_Bay -America/Campo_Grande -America/Cancun -America/Caracas -America/Cayenne -America/Cayman -America/Chicago -America/Chihuahua -America/Ciudad_Juarez -America/Coral_Harbour -America/Costa_Rica -America/Coyhaique -America/Creston -America/Cuiaba -America/Curacao -America/Danmarkshavn -America/Dawson -America/Dawson_Creek -America/Denver -America/Detroit -America/Dominica -America/Edmonton -America/Eirunepe -America/El_Salvador -America/Ensenada -America/Fort_Nelson -America/Fortaleza -America/Glace_Bay -America/Goose_Bay -America/Grand_Turk -America/Grenada -America/Guadeloupe -America/Guatemala -America/Guayaquil -America/Guyana -America/Halifax -America/Havana -America/Hermosillo -America/Indiana/Indianapolis -America/Indiana/Knox -America/Indiana/Marengo -America/Indiana/Petersburg -America/Indiana/Tell_City -America/Indiana/Vevay -America/Indiana/Vincennes -America/Indiana/Winamac -America/Inuvik -America/Iqaluit -America/Jamaica -America/Juneau -America/Kentucky/Louisville -America/Kentucky/Monticello -America/Kralendijk -America/La_Paz -America/Lima -America/Los_Angeles -America/Lower_Princes -America/Maceio -America/Managua -America/Manaus -America/Marigot -America/Martinique -America/Matamoros -America/Mazatlan -America/Menominee -America/Merida -America/Metlakatla -America/Mexico_City -America/Miquelon -America/Moncton -America/Monterrey -America/Montevideo -America/Montreal -America/Montserrat -America/Nassau -America/New_York -America/Nipigon -America/Nome -America/Noronha -America/North_Dakota/Beulah -America/North_Dakota/Center -America/North_Dakota/New_Salem -America/Nuuk -America/Ojinaga -America/Panama -America/Pangnirtung -America/Paramaribo -America/Phoenix -America/Port-au-Prince -America/Port_of_Spain -America/Porto_Acre -America/Porto_Velho -America/Puerto_Rico -America/Punta_Arenas -America/Rainy_River -America/Rankin_Inlet -America/Recife -America/Regina -America/Resolute -America/Rio_Branco -America/Santa_Isabel -America/Santarem -America/Santiago -America/Santo_Domingo -America/Sao_Paulo -America/Scoresbysund -America/Shiprock -America/Sitka -America/St_Barthelemy -America/St_Johns -America/St_Kitts -America/St_Lucia -America/St_Thomas -America/St_Vincent -America/Swift_Current -America/Tegucigalpa -America/Thule -America/Thunder_Bay -America/Tijuana -America/Toronto -America/Tortola -America/Vancouver -America/Virgin -America/Whitehorse -America/Winnipeg -America/Yakutat -America/Yellowknife -Antarctica/Casey -Antarctica/Davis -Antarctica/DumontDUrville -Antarctica/Macquarie -Antarctica/Mawson -Antarctica/McMurdo -Antarctica/Palmer -Antarctica/Rothera -Antarctica/Syowa -Antarctica/Troll -Antarctica/Vostok -Arctic/Longyearbyen -Asia/Aden -Asia/Almaty -Asia/Amman -Asia/Anadyr -Asia/Aqtau -Asia/Aqtobe -Asia/Ashgabat -Asia/Atyrau -Asia/Baghdad -Asia/Bahrain -Asia/Baku -Asia/Bangkok -Asia/Barnaul -Asia/Beirut -Asia/Bishkek -Asia/Brunei -Asia/Chita -Asia/Chongqing -Asia/Colombo -Asia/Damascus -Asia/Dhaka -Asia/Dili -Asia/Dubai -Asia/Dushanbe -Asia/Famagusta -Asia/Gaza -Asia/Harbin -Asia/Hebron -Asia/Ho_Chi_Minh -Asia/Hong_Kong -Asia/Hovd -Asia/Irkutsk -Asia/Istanbul -Asia/Jakarta -Asia/Jayapura -Asia/Jerusalem -Asia/Kabul -Asia/Kamchatka -Asia/Karachi -Asia/Kashgar -Asia/Kathmandu -Asia/Khandyga -Asia/Kolkata -Asia/Krasnoyarsk -Asia/Kuala_Lumpur -Asia/Kuching -Asia/Kuwait -Asia/Macau -Asia/Magadan -Asia/Makassar -Asia/Manila -Asia/Muscat -Asia/Nicosia -Asia/Novokuznetsk -Asia/Novosibirsk -Asia/Omsk -Asia/Oral -Asia/Phnom_Penh -Asia/Pontianak -Asia/Pyongyang -Asia/Qatar -Asia/Qostanay -Asia/Qyzylorda -Asia/Riyadh -Asia/Sakhalin -Asia/Samarkand -Asia/Seoul -Asia/Shanghai -Asia/Singapore -Asia/Srednekolymsk -Asia/Taipei -Asia/Tashkent -Asia/Tbilisi -Asia/Tehran -Asia/Tel_Aviv -Asia/Thimphu -Asia/Tokyo -Asia/Tomsk -Asia/Ulaanbaatar -Asia/Urumqi -Asia/Ust-Nera -Asia/Vientiane -Asia/Vladivostok -Asia/Yakutsk -Asia/Yangon -Asia/Yekaterinburg -Asia/Yerevan -Atlantic/Azores -Atlantic/Bermuda -Atlantic/Canary -Atlantic/Cape_Verde -Atlantic/Faroe -Atlantic/Jan_Mayen -Atlantic/Madeira -Atlantic/Reykjavik -Atlantic/South_Georgia -Atlantic/St_Helena -Atlantic/Stanley -Australia/Adelaide -Australia/Brisbane -Australia/Broken_Hill -Australia/Canberra -Australia/Currie -Australia/Darwin -Australia/Eucla -Australia/Hobart -Australia/Lindeman -Australia/Lord_Howe -Australia/Melbourne -Australia/Perth -Australia/Sydney -Australia/Yancowinna -Etc/GMT -Etc/GMT+0 -Etc/GMT+1 -Etc/GMT+10 -Etc/GMT+11 -Etc/GMT+12 -Etc/GMT+2 -Etc/GMT+3 -Etc/GMT+4 -Etc/GMT+5 -Etc/GMT+6 -Etc/GMT+7 -Etc/GMT+8 -Etc/GMT+9 -Etc/GMT-0 -Etc/GMT-1 -Etc/GMT-10 -Etc/GMT-11 -Etc/GMT-12 -Etc/GMT-13 -Etc/GMT-14 -Etc/GMT-2 -Etc/GMT-3 -Etc/GMT-4 -Etc/GMT-5 -Etc/GMT-6 -Etc/GMT-7 -Etc/GMT-8 -Etc/GMT-9 -Etc/GMT0 -Etc/Greenwich -Etc/UCT -Etc/UTC -Etc/Universal -Etc/Zulu -Europe/Amsterdam -Europe/Andorra -Europe/Astrakhan -Europe/Athens -Europe/Belfast -Europe/Belgrade -Europe/Berlin -Europe/Bratislava -Europe/Brussels -Europe/Bucharest -Europe/Budapest -Europe/Busingen -Europe/Chisinau -Europe/Copenhagen -Europe/Dublin -Europe/Gibraltar -Europe/Guernsey -Europe/Helsinki -Europe/Isle_of_Man -Europe/Istanbul -Europe/Jersey -Europe/Kaliningrad -Europe/Kirov -Europe/Kyiv -Europe/Lisbon -Europe/Ljubljana -Europe/London -Europe/Luxembourg -Europe/Madrid -Europe/Malta -Europe/Mariehamn -Europe/Minsk -Europe/Monaco -Europe/Moscow -Europe/Nicosia -Europe/Oslo -Europe/Paris -Europe/Podgorica -Europe/Prague -Europe/Riga -Europe/Rome -Europe/Samara -Europe/San_Marino -Europe/Sarajevo -Europe/Saratov -Europe/Simferopol -Europe/Skopje -Europe/Sofia -Europe/Stockholm -Europe/Tallinn -Europe/Tirane -Europe/Tiraspol -Europe/Ulyanovsk -Europe/Vaduz -Europe/Vatican -Europe/Vienna -Europe/Vilnius -Europe/Volgograd -Europe/Warsaw -Europe/Zagreb -Europe/Zurich -GMT -Indian/Antananarivo -Indian/Chagos -Indian/Christmas -Indian/Cocos -Indian/Comoro -Indian/Kerguelen -Indian/Mahe -Indian/Maldives -Indian/Mauritius -Indian/Mayotte -Indian/Reunion -Pacific/Apia -Pacific/Auckland -Pacific/Bougainville -Pacific/Chatham -Pacific/Chuuk -Pacific/Easter -Pacific/Efate -Pacific/Fakaofo -Pacific/Fiji -Pacific/Funafuti -Pacific/Galapagos -Pacific/Gambier -Pacific/Guadalcanal -Pacific/Guam -Pacific/Honolulu -Pacific/Johnston -Pacific/Kanton -Pacific/Kiritimati -Pacific/Kosrae -Pacific/Kwajalein -Pacific/Majuro -Pacific/Marquesas -Pacific/Midway -Pacific/Nauru -Pacific/Niue -Pacific/Norfolk -Pacific/Noumea -Pacific/Pago_Pago -Pacific/Palau -Pacific/Pitcairn -Pacific/Pohnpei -Pacific/Port_Moresby -Pacific/Rarotonga -Pacific/Saipan -Pacific/Samoa -Pacific/Tahiti -Pacific/Tarawa -Pacific/Tongatapu -Pacific/Wake -Pacific/Wallis -Pacific/Yap -UTC -''' diff --git a/desk/lib/pytz/pacific-apia.hoon b/desk/lib/pytz/pacific-apia.hoon deleted file mode 100644 index fdcf100..0000000 --- a/desk/lib/pytz/pacific-apia.hoon +++ /dev/null @@ -1,31 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:33,LMT -1901-12-13T20:45:52,-12:33,LMT -1911-01-01T11:26:56,-12:30,-1130 -1950-01-01T11:30:00,-11:00,-11 -2010-09-26T11:00:00,-10:00,-10 -2011-04-02T14:00:00,-11:00,-11 -2011-09-24T14:00:00,-10:00,-10 -2011-12-30T10:00:00,+14:00,+14 -2012-03-31T14:00:00,+13:00,+13 -2012-09-29T14:00:00,+14:00,+14 -2013-04-06T14:00:00,+13:00,+13 -2013-09-28T14:00:00,+14:00,+14 -2014-04-05T14:00:00,+13:00,+13 -2014-09-27T14:00:00,+14:00,+14 -2015-04-04T14:00:00,+13:00,+13 -2015-09-26T14:00:00,+14:00,+14 -2016-04-02T14:00:00,+13:00,+13 -2016-09-24T14:00:00,+14:00,+14 -2017-04-01T14:00:00,+13:00,+13 -2017-09-23T14:00:00,+14:00,+14 -2018-03-31T14:00:00,+13:00,+13 -2018-09-29T14:00:00,+14:00,+14 -2019-04-06T14:00:00,+13:00,+13 -2019-09-28T14:00:00,+14:00,+14 -2020-04-04T14:00:00,+13:00,+13 -2020-09-26T14:00:00,+14:00,+14 -2021-04-03T14:00:00,+13:00,+13 -''' diff --git a/desk/lib/pytz/pacific-auckland.hoon b/desk/lib/pytz/pacific-auckland.hoon deleted file mode 100644 index 1f6f866..0000000 --- a/desk/lib/pytz/pacific-auckland.hoon +++ /dev/null @@ -1,161 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:39,LMT -1901-12-13T20:45:52,+11:30,NZMT -1927-11-05T14:30:00,+12:30,NZST -1928-03-03T13:30:00,+11:30,NZMT -1928-10-13T14:30:00,+12:00,NZST -1929-03-16T14:00:00,+11:30,NZMT -1929-10-12T14:30:00,+12:00,NZST -1930-03-15T14:00:00,+11:30,NZMT -1930-10-11T14:30:00,+12:00,NZST -1931-03-14T14:00:00,+11:30,NZMT -1931-10-10T14:30:00,+12:00,NZST -1932-03-19T14:00:00,+11:30,NZMT -1932-10-08T14:30:00,+12:00,NZST -1933-03-18T14:00:00,+11:30,NZMT -1933-10-07T14:30:00,+12:00,NZST -1934-04-28T14:00:00,+11:30,NZMT -1934-09-29T14:30:00,+12:00,NZST -1935-04-27T14:00:00,+11:30,NZMT -1935-09-28T14:30:00,+12:00,NZST -1936-04-25T14:00:00,+11:30,NZMT -1936-09-26T14:30:00,+12:00,NZST -1937-04-24T14:00:00,+11:30,NZMT -1937-09-25T14:30:00,+12:00,NZST -1938-04-23T14:00:00,+11:30,NZMT -1938-09-24T14:30:00,+12:00,NZST -1939-04-29T14:00:00,+11:30,NZMT -1939-09-23T14:30:00,+12:00,NZST -1940-04-27T14:00:00,+11:30,NZMT -1940-09-28T14:30:00,+12:00,NZST -1945-12-31T12:00:00,+12:00,NZST -1974-11-02T14:00:00,+13:00,NZDT -1975-02-22T14:00:00,+12:00,NZST -1975-10-25T14:00:00,+13:00,NZDT -1976-03-06T14:00:00,+12:00,NZST -1976-10-30T14:00:00,+13:00,NZDT -1977-03-05T14:00:00,+12:00,NZST -1977-10-29T14:00:00,+13:00,NZDT -1978-03-04T14:00:00,+12:00,NZST -1978-10-28T14:00:00,+13:00,NZDT -1979-03-03T14:00:00,+12:00,NZST -1979-10-27T14:00:00,+13:00,NZDT -1980-03-01T14:00:00,+12:00,NZST -1980-10-25T14:00:00,+13:00,NZDT -1981-02-28T14:00:00,+12:00,NZST -1981-10-24T14:00:00,+13:00,NZDT -1982-03-06T14:00:00,+12:00,NZST -1982-10-30T14:00:00,+13:00,NZDT -1983-03-05T14:00:00,+12:00,NZST -1983-10-29T14:00:00,+13:00,NZDT -1984-03-03T14:00:00,+12:00,NZST -1984-10-27T14:00:00,+13:00,NZDT -1985-03-02T14:00:00,+12:00,NZST -1985-10-26T14:00:00,+13:00,NZDT -1986-03-01T14:00:00,+12:00,NZST -1986-10-25T14:00:00,+13:00,NZDT -1987-02-28T14:00:00,+12:00,NZST -1987-10-24T14:00:00,+13:00,NZDT -1988-03-05T14:00:00,+12:00,NZST -1988-10-29T14:00:00,+13:00,NZDT -1989-03-04T14:00:00,+12:00,NZST -1989-10-07T14:00:00,+13:00,NZDT -1990-03-17T14:00:00,+12:00,NZST -1990-10-06T14:00:00,+13:00,NZDT -1991-03-16T14:00:00,+12:00,NZST -1991-10-05T14:00:00,+13:00,NZDT -1992-03-14T14:00:00,+12:00,NZST -1992-10-03T14:00:00,+13:00,NZDT -1993-03-20T14:00:00,+12:00,NZST -1993-10-02T14:00:00,+13:00,NZDT -1994-03-19T14:00:00,+12:00,NZST -1994-10-01T14:00:00,+13:00,NZDT -1995-03-18T14:00:00,+12:00,NZST -1995-09-30T14:00:00,+13:00,NZDT -1996-03-16T14:00:00,+12:00,NZST -1996-10-05T14:00:00,+13:00,NZDT -1997-03-15T14:00:00,+12:00,NZST -1997-10-04T14:00:00,+13:00,NZDT -1998-03-14T14:00:00,+12:00,NZST -1998-10-03T14:00:00,+13:00,NZDT -1999-03-20T14:00:00,+12:00,NZST -1999-10-02T14:00:00,+13:00,NZDT -2000-03-18T14:00:00,+12:00,NZST -2000-09-30T14:00:00,+13:00,NZDT -2001-03-17T14:00:00,+12:00,NZST -2001-10-06T14:00:00,+13:00,NZDT -2002-03-16T14:00:00,+12:00,NZST -2002-10-05T14:00:00,+13:00,NZDT -2003-03-15T14:00:00,+12:00,NZST -2003-10-04T14:00:00,+13:00,NZDT -2004-03-20T14:00:00,+12:00,NZST -2004-10-02T14:00:00,+13:00,NZDT -2005-03-19T14:00:00,+12:00,NZST -2005-10-01T14:00:00,+13:00,NZDT -2006-03-18T14:00:00,+12:00,NZST -2006-09-30T14:00:00,+13:00,NZDT -2007-03-17T14:00:00,+12:00,NZST -2007-09-29T14:00:00,+13:00,NZDT -2008-04-05T14:00:00,+12:00,NZST -2008-09-27T14:00:00,+13:00,NZDT -2009-04-04T14:00:00,+12:00,NZST -2009-09-26T14:00:00,+13:00,NZDT -2010-04-03T14:00:00,+12:00,NZST -2010-09-25T14:00:00,+13:00,NZDT -2011-04-02T14:00:00,+12:00,NZST -2011-09-24T14:00:00,+13:00,NZDT -2012-03-31T14:00:00,+12:00,NZST -2012-09-29T14:00:00,+13:00,NZDT -2013-04-06T14:00:00,+12:00,NZST -2013-09-28T14:00:00,+13:00,NZDT -2014-04-05T14:00:00,+12:00,NZST -2014-09-27T14:00:00,+13:00,NZDT -2015-04-04T14:00:00,+12:00,NZST -2015-09-26T14:00:00,+13:00,NZDT -2016-04-02T14:00:00,+12:00,NZST -2016-09-24T14:00:00,+13:00,NZDT -2017-04-01T14:00:00,+12:00,NZST -2017-09-23T14:00:00,+13:00,NZDT -2018-03-31T14:00:00,+12:00,NZST -2018-09-29T14:00:00,+13:00,NZDT -2019-04-06T14:00:00,+12:00,NZST -2019-09-28T14:00:00,+13:00,NZDT -2020-04-04T14:00:00,+12:00,NZST -2020-09-26T14:00:00,+13:00,NZDT -2021-04-03T14:00:00,+12:00,NZST -2021-09-25T14:00:00,+13:00,NZDT -2022-04-02T14:00:00,+12:00,NZST -2022-09-24T14:00:00,+13:00,NZDT -2023-04-01T14:00:00,+12:00,NZST -2023-09-23T14:00:00,+13:00,NZDT -2024-04-06T14:00:00,+12:00,NZST -2024-09-28T14:00:00,+13:00,NZDT -2025-04-05T14:00:00,+12:00,NZST -2025-09-27T14:00:00,+13:00,NZDT -2026-04-04T14:00:00,+12:00,NZST -2026-09-26T14:00:00,+13:00,NZDT -2027-04-03T14:00:00,+12:00,NZST -2027-09-25T14:00:00,+13:00,NZDT -2028-04-01T14:00:00,+12:00,NZST -2028-09-23T14:00:00,+13:00,NZDT -2029-03-31T14:00:00,+12:00,NZST -2029-09-29T14:00:00,+13:00,NZDT -2030-04-06T14:00:00,+12:00,NZST -2030-09-28T14:00:00,+13:00,NZDT -2031-04-05T14:00:00,+12:00,NZST -2031-09-27T14:00:00,+13:00,NZDT -2032-04-03T14:00:00,+12:00,NZST -2032-09-25T14:00:00,+13:00,NZDT -2033-04-02T14:00:00,+12:00,NZST -2033-09-24T14:00:00,+13:00,NZDT -2034-04-01T14:00:00,+12:00,NZST -2034-09-23T14:00:00,+13:00,NZDT -2035-03-31T14:00:00,+12:00,NZST -2035-09-29T14:00:00,+13:00,NZDT -2036-04-05T14:00:00,+12:00,NZST -2036-09-27T14:00:00,+13:00,NZDT -2037-04-04T14:00:00,+12:00,NZST -2037-09-26T14:00:00,+13:00,NZDT -''' diff --git a/desk/lib/pytz/pacific-bougainville.hoon b/desk/lib/pytz/pacific-bougainville.hoon deleted file mode 100644 index ea37191..0000000 --- a/desk/lib/pytz/pacific-bougainville.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:22,LMT -1901-12-13T20:45:52,+10:00,+10 -1942-06-30T14:00:00,+09:00,+09 -1945-08-20T15:00:00,+10:00,+10 -2014-12-27T16:00:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/pacific-chatham.hoon b/desk/lib/pytz/pacific-chatham.hoon deleted file mode 100644 index 985d07b..0000000 --- a/desk/lib/pytz/pacific-chatham.hoon +++ /dev/null @@ -1,134 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:14,LMT -1901-12-13T20:45:52,+12:15,+1215 -1945-12-31T11:45:00,+12:45,+1245 -1974-11-02T14:00:00,+13:45,+1345 -1975-02-22T14:00:00,+12:45,+1245 -1975-10-25T14:00:00,+13:45,+1345 -1976-03-06T14:00:00,+12:45,+1245 -1976-10-30T14:00:00,+13:45,+1345 -1977-03-05T14:00:00,+12:45,+1245 -1977-10-29T14:00:00,+13:45,+1345 -1978-03-04T14:00:00,+12:45,+1245 -1978-10-28T14:00:00,+13:45,+1345 -1979-03-03T14:00:00,+12:45,+1245 -1979-10-27T14:00:00,+13:45,+1345 -1980-03-01T14:00:00,+12:45,+1245 -1980-10-25T14:00:00,+13:45,+1345 -1981-02-28T14:00:00,+12:45,+1245 -1981-10-24T14:00:00,+13:45,+1345 -1982-03-06T14:00:00,+12:45,+1245 -1982-10-30T14:00:00,+13:45,+1345 -1983-03-05T14:00:00,+12:45,+1245 -1983-10-29T14:00:00,+13:45,+1345 -1984-03-03T14:00:00,+12:45,+1245 -1984-10-27T14:00:00,+13:45,+1345 -1985-03-02T14:00:00,+12:45,+1245 -1985-10-26T14:00:00,+13:45,+1345 -1986-03-01T14:00:00,+12:45,+1245 -1986-10-25T14:00:00,+13:45,+1345 -1987-02-28T14:00:00,+12:45,+1245 -1987-10-24T14:00:00,+13:45,+1345 -1988-03-05T14:00:00,+12:45,+1245 -1988-10-29T14:00:00,+13:45,+1345 -1989-03-04T14:00:00,+12:45,+1245 -1989-10-07T14:00:00,+13:45,+1345 -1990-03-17T14:00:00,+12:45,+1245 -1990-10-06T14:00:00,+13:45,+1345 -1991-03-16T14:00:00,+12:45,+1245 -1991-10-05T14:00:00,+13:45,+1345 -1992-03-14T14:00:00,+12:45,+1245 -1992-10-03T14:00:00,+13:45,+1345 -1993-03-20T14:00:00,+12:45,+1245 -1993-10-02T14:00:00,+13:45,+1345 -1994-03-19T14:00:00,+12:45,+1245 -1994-10-01T14:00:00,+13:45,+1345 -1995-03-18T14:00:00,+12:45,+1245 -1995-09-30T14:00:00,+13:45,+1345 -1996-03-16T14:00:00,+12:45,+1245 -1996-10-05T14:00:00,+13:45,+1345 -1997-03-15T14:00:00,+12:45,+1245 -1997-10-04T14:00:00,+13:45,+1345 -1998-03-14T14:00:00,+12:45,+1245 -1998-10-03T14:00:00,+13:45,+1345 -1999-03-20T14:00:00,+12:45,+1245 -1999-10-02T14:00:00,+13:45,+1345 -2000-03-18T14:00:00,+12:45,+1245 -2000-09-30T14:00:00,+13:45,+1345 -2001-03-17T14:00:00,+12:45,+1245 -2001-10-06T14:00:00,+13:45,+1345 -2002-03-16T14:00:00,+12:45,+1245 -2002-10-05T14:00:00,+13:45,+1345 -2003-03-15T14:00:00,+12:45,+1245 -2003-10-04T14:00:00,+13:45,+1345 -2004-03-20T14:00:00,+12:45,+1245 -2004-10-02T14:00:00,+13:45,+1345 -2005-03-19T14:00:00,+12:45,+1245 -2005-10-01T14:00:00,+13:45,+1345 -2006-03-18T14:00:00,+12:45,+1245 -2006-09-30T14:00:00,+13:45,+1345 -2007-03-17T14:00:00,+12:45,+1245 -2007-09-29T14:00:00,+13:45,+1345 -2008-04-05T14:00:00,+12:45,+1245 -2008-09-27T14:00:00,+13:45,+1345 -2009-04-04T14:00:00,+12:45,+1245 -2009-09-26T14:00:00,+13:45,+1345 -2010-04-03T14:00:00,+12:45,+1245 -2010-09-25T14:00:00,+13:45,+1345 -2011-04-02T14:00:00,+12:45,+1245 -2011-09-24T14:00:00,+13:45,+1345 -2012-03-31T14:00:00,+12:45,+1245 -2012-09-29T14:00:00,+13:45,+1345 -2013-04-06T14:00:00,+12:45,+1245 -2013-09-28T14:00:00,+13:45,+1345 -2014-04-05T14:00:00,+12:45,+1245 -2014-09-27T14:00:00,+13:45,+1345 -2015-04-04T14:00:00,+12:45,+1245 -2015-09-26T14:00:00,+13:45,+1345 -2016-04-02T14:00:00,+12:45,+1245 -2016-09-24T14:00:00,+13:45,+1345 -2017-04-01T14:00:00,+12:45,+1245 -2017-09-23T14:00:00,+13:45,+1345 -2018-03-31T14:00:00,+12:45,+1245 -2018-09-29T14:00:00,+13:45,+1345 -2019-04-06T14:00:00,+12:45,+1245 -2019-09-28T14:00:00,+13:45,+1345 -2020-04-04T14:00:00,+12:45,+1245 -2020-09-26T14:00:00,+13:45,+1345 -2021-04-03T14:00:00,+12:45,+1245 -2021-09-25T14:00:00,+13:45,+1345 -2022-04-02T14:00:00,+12:45,+1245 -2022-09-24T14:00:00,+13:45,+1345 -2023-04-01T14:00:00,+12:45,+1245 -2023-09-23T14:00:00,+13:45,+1345 -2024-04-06T14:00:00,+12:45,+1245 -2024-09-28T14:00:00,+13:45,+1345 -2025-04-05T14:00:00,+12:45,+1245 -2025-09-27T14:00:00,+13:45,+1345 -2026-04-04T14:00:00,+12:45,+1245 -2026-09-26T14:00:00,+13:45,+1345 -2027-04-03T14:00:00,+12:45,+1245 -2027-09-25T14:00:00,+13:45,+1345 -2028-04-01T14:00:00,+12:45,+1245 -2028-09-23T14:00:00,+13:45,+1345 -2029-03-31T14:00:00,+12:45,+1245 -2029-09-29T14:00:00,+13:45,+1345 -2030-04-06T14:00:00,+12:45,+1245 -2030-09-28T14:00:00,+13:45,+1345 -2031-04-05T14:00:00,+12:45,+1245 -2031-09-27T14:00:00,+13:45,+1345 -2032-04-03T14:00:00,+12:45,+1245 -2032-09-25T14:00:00,+13:45,+1345 -2033-04-02T14:00:00,+12:45,+1245 -2033-09-24T14:00:00,+13:45,+1345 -2034-04-01T14:00:00,+12:45,+1245 -2034-09-23T14:00:00,+13:45,+1345 -2035-03-31T14:00:00,+12:45,+1245 -2035-09-29T14:00:00,+13:45,+1345 -2036-04-05T14:00:00,+12:45,+1245 -2036-09-27T14:00:00,+13:45,+1345 -2037-04-04T14:00:00,+12:45,+1245 -2037-09-26T14:00:00,+13:45,+1345 -''' diff --git a/desk/lib/pytz/pacific-chuuk.hoon b/desk/lib/pytz/pacific-chuuk.hoon deleted file mode 100644 index 925c3c4..0000000 --- a/desk/lib/pytz/pacific-chuuk.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+10:00,+10 -1914-09-30T14:00:00,+09:00,+09 -1919-01-31T15:00:00,+10:00,+10 -1941-03-31T14:00:00,+09:00,+09 -1945-07-31T15:00:00,+10:00,+10 -''' diff --git a/desk/lib/pytz/pacific-easter.hoon b/desk/lib/pytz/pacific-easter.hoon deleted file mode 100644 index d52a6a9..0000000 --- a/desk/lib/pytz/pacific-easter.hoon +++ /dev/null @@ -1,143 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-08:43,EMT -1932-09-01T07:17:28,-07:00,-07 -1968-11-03T04:00:00,-06:00,-06 -1969-03-30T03:00:00,-07:00,-07 -1969-11-23T04:00:00,-06:00,-06 -1970-03-29T03:00:00,-07:00,-07 -1970-10-11T04:00:00,-06:00,-06 -1971-03-14T03:00:00,-07:00,-07 -1971-10-10T04:00:00,-06:00,-06 -1972-03-12T03:00:00,-07:00,-07 -1972-10-15T04:00:00,-06:00,-06 -1973-03-11T03:00:00,-07:00,-07 -1973-09-30T04:00:00,-06:00,-06 -1974-03-10T03:00:00,-07:00,-07 -1974-10-13T04:00:00,-06:00,-06 -1975-03-09T03:00:00,-07:00,-07 -1975-10-12T04:00:00,-06:00,-06 -1976-03-14T03:00:00,-07:00,-07 -1976-10-10T04:00:00,-06:00,-06 -1977-03-13T03:00:00,-07:00,-07 -1977-10-09T04:00:00,-06:00,-06 -1978-03-12T03:00:00,-07:00,-07 -1978-10-15T04:00:00,-06:00,-06 -1979-03-11T03:00:00,-07:00,-07 -1979-10-14T04:00:00,-06:00,-06 -1980-03-09T03:00:00,-07:00,-07 -1980-10-12T04:00:00,-06:00,-06 -1981-03-15T03:00:00,-07:00,-07 -1981-10-11T04:00:00,-06:00,-06 -1982-03-14T03:00:00,-06:00,-06 -1982-10-10T04:00:00,-05:00,-05 -1983-03-13T03:00:00,-06:00,-06 -1983-10-09T04:00:00,-05:00,-05 -1984-03-11T03:00:00,-06:00,-06 -1984-10-14T04:00:00,-05:00,-05 -1985-03-10T03:00:00,-06:00,-06 -1985-10-13T04:00:00,-05:00,-05 -1986-03-09T03:00:00,-06:00,-06 -1986-10-12T04:00:00,-05:00,-05 -1987-04-12T03:00:00,-06:00,-06 -1987-10-11T04:00:00,-05:00,-05 -1988-03-13T03:00:00,-06:00,-06 -1988-10-09T04:00:00,-05:00,-05 -1989-03-12T03:00:00,-06:00,-06 -1989-10-15T04:00:00,-05:00,-05 -1990-03-11T03:00:00,-06:00,-06 -1990-09-16T04:00:00,-05:00,-05 -1991-03-10T03:00:00,-06:00,-06 -1991-10-13T04:00:00,-05:00,-05 -1992-03-15T03:00:00,-06:00,-06 -1992-10-11T04:00:00,-05:00,-05 -1993-03-14T03:00:00,-06:00,-06 -1993-10-10T04:00:00,-05:00,-05 -1994-03-13T03:00:00,-06:00,-06 -1994-10-09T04:00:00,-05:00,-05 -1995-03-12T03:00:00,-06:00,-06 -1995-10-15T04:00:00,-05:00,-05 -1996-03-10T03:00:00,-06:00,-06 -1996-10-13T04:00:00,-05:00,-05 -1997-03-30T03:00:00,-06:00,-06 -1997-10-12T04:00:00,-05:00,-05 -1998-03-15T03:00:00,-06:00,-06 -1998-09-27T04:00:00,-05:00,-05 -1999-04-04T03:00:00,-06:00,-06 -1999-10-10T04:00:00,-05:00,-05 -2000-03-12T03:00:00,-06:00,-06 -2000-10-15T04:00:00,-05:00,-05 -2001-03-11T03:00:00,-06:00,-06 -2001-10-14T04:00:00,-05:00,-05 -2002-03-10T03:00:00,-06:00,-06 -2002-10-13T04:00:00,-05:00,-05 -2003-03-09T03:00:00,-06:00,-06 -2003-10-12T04:00:00,-05:00,-05 -2004-03-14T03:00:00,-06:00,-06 -2004-10-10T04:00:00,-05:00,-05 -2005-03-13T03:00:00,-06:00,-06 -2005-10-09T04:00:00,-05:00,-05 -2006-03-12T03:00:00,-06:00,-06 -2006-10-15T04:00:00,-05:00,-05 -2007-03-11T03:00:00,-06:00,-06 -2007-10-14T04:00:00,-05:00,-05 -2008-03-30T03:00:00,-06:00,-06 -2008-10-12T04:00:00,-05:00,-05 -2009-03-15T03:00:00,-06:00,-06 -2009-10-11T04:00:00,-05:00,-05 -2010-04-04T03:00:00,-06:00,-06 -2010-10-10T04:00:00,-05:00,-05 -2011-05-08T03:00:00,-06:00,-06 -2011-08-21T04:00:00,-05:00,-05 -2012-04-29T03:00:00,-06:00,-06 -2012-09-02T04:00:00,-05:00,-05 -2013-04-28T03:00:00,-06:00,-06 -2013-09-08T04:00:00,-05:00,-05 -2014-04-27T03:00:00,-06:00,-06 -2014-09-07T04:00:00,-05:00,-05 -2016-05-15T03:00:00,-06:00,-06 -2016-08-14T04:00:00,-05:00,-05 -2017-05-14T03:00:00,-06:00,-06 -2017-08-13T04:00:00,-05:00,-05 -2018-05-13T03:00:00,-06:00,-06 -2018-08-12T04:00:00,-05:00,-05 -2019-04-07T03:00:00,-06:00,-06 -2019-09-08T04:00:00,-05:00,-05 -2020-04-05T03:00:00,-06:00,-06 -2020-09-06T04:00:00,-05:00,-05 -2021-04-04T03:00:00,-06:00,-06 -2021-09-05T04:00:00,-05:00,-05 -2022-04-03T03:00:00,-06:00,-06 -2022-09-11T04:00:00,-05:00,-05 -2023-04-02T03:00:00,-06:00,-06 -2023-09-03T04:00:00,-05:00,-05 -2024-04-07T03:00:00,-06:00,-06 -2024-09-08T04:00:00,-05:00,-05 -2025-04-06T03:00:00,-06:00,-06 -2025-09-07T04:00:00,-05:00,-05 -2026-04-05T03:00:00,-06:00,-06 -2026-09-06T04:00:00,-05:00,-05 -2027-04-04T03:00:00,-06:00,-06 -2027-09-05T04:00:00,-05:00,-05 -2028-04-02T03:00:00,-06:00,-06 -2028-09-03T04:00:00,-05:00,-05 -2029-04-08T03:00:00,-06:00,-06 -2029-09-02T04:00:00,-05:00,-05 -2030-04-07T03:00:00,-06:00,-06 -2030-09-08T04:00:00,-05:00,-05 -2031-04-06T03:00:00,-06:00,-06 -2031-09-07T04:00:00,-05:00,-05 -2032-04-04T03:00:00,-06:00,-06 -2032-09-05T04:00:00,-05:00,-05 -2033-04-03T03:00:00,-06:00,-06 -2033-09-04T04:00:00,-05:00,-05 -2034-04-02T03:00:00,-06:00,-06 -2034-09-03T04:00:00,-05:00,-05 -2035-04-08T03:00:00,-06:00,-06 -2035-09-02T04:00:00,-05:00,-05 -2036-04-06T03:00:00,-06:00,-06 -2036-09-07T04:00:00,-05:00,-05 -2037-04-05T03:00:00,-06:00,-06 -2037-09-06T04:00:00,-05:00,-05 -''' diff --git a/desk/lib/pytz/pacific-efate.hoon b/desk/lib/pytz/pacific-efate.hoon deleted file mode 100644 index b289134..0000000 --- a/desk/lib/pytz/pacific-efate.hoon +++ /dev/null @@ -1,28 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:13,LMT -1912-01-12T12:46:44,+11:00,+11 -1973-12-22T12:00:00,+12:00,+12 -1974-03-30T12:00:00,+11:00,+11 -1983-09-24T13:00:00,+12:00,+12 -1984-03-24T12:00:00,+11:00,+11 -1984-09-22T13:00:00,+12:00,+12 -1985-03-23T12:00:00,+11:00,+11 -1985-09-28T13:00:00,+12:00,+12 -1986-03-22T12:00:00,+11:00,+11 -1986-09-27T13:00:00,+12:00,+12 -1987-03-28T12:00:00,+11:00,+11 -1987-09-26T13:00:00,+12:00,+12 -1988-03-26T12:00:00,+11:00,+11 -1988-09-24T13:00:00,+12:00,+12 -1989-03-25T12:00:00,+11:00,+11 -1989-09-23T13:00:00,+12:00,+12 -1990-03-24T12:00:00,+11:00,+11 -1990-09-22T13:00:00,+12:00,+12 -1991-03-23T12:00:00,+11:00,+11 -1991-09-28T13:00:00,+12:00,+12 -1992-01-25T12:00:00,+11:00,+11 -1992-10-24T13:00:00,+12:00,+12 -1993-01-23T12:00:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/pacific-fakaofo.hoon b/desk/lib/pytz/pacific-fakaofo.hoon deleted file mode 100644 index 7628b33..0000000 --- a/desk/lib/pytz/pacific-fakaofo.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-11:00,-11 -2011-12-30T11:00:00,+13:00,+13 -''' diff --git a/desk/lib/pytz/pacific-fiji.hoon b/desk/lib/pytz/pacific-fiji.hoon deleted file mode 100644 index 40a0489..0000000 --- a/desk/lib/pytz/pacific-fiji.hoon +++ /dev/null @@ -1,34 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:56,LMT -1915-10-25T12:04:16,+12:00,+12 -1998-10-31T14:00:00,+13:00,+13 -1999-02-27T14:00:00,+12:00,+12 -1999-11-06T14:00:00,+13:00,+13 -2000-02-26T14:00:00,+12:00,+12 -2009-11-28T14:00:00,+13:00,+13 -2010-03-27T14:00:00,+12:00,+12 -2010-10-23T14:00:00,+13:00,+13 -2011-03-05T14:00:00,+12:00,+12 -2011-10-22T14:00:00,+13:00,+13 -2012-01-21T14:00:00,+12:00,+12 -2012-10-20T14:00:00,+13:00,+13 -2013-01-19T14:00:00,+12:00,+12 -2013-10-26T14:00:00,+13:00,+13 -2014-01-18T13:00:00,+12:00,+12 -2014-11-01T14:00:00,+13:00,+13 -2015-01-17T14:00:00,+12:00,+12 -2015-10-31T14:00:00,+13:00,+13 -2016-01-16T14:00:00,+12:00,+12 -2016-11-05T14:00:00,+13:00,+13 -2017-01-14T14:00:00,+12:00,+12 -2017-11-04T14:00:00,+13:00,+13 -2018-01-13T14:00:00,+12:00,+12 -2018-11-03T14:00:00,+13:00,+13 -2019-01-12T14:00:00,+12:00,+12 -2019-11-09T14:00:00,+13:00,+13 -2020-01-11T14:00:00,+12:00,+12 -2020-12-19T14:00:00,+13:00,+13 -2021-01-16T14:00:00,+12:00,+12 -''' diff --git a/desk/lib/pytz/pacific-funafuti.hoon b/desk/lib/pytz/pacific-funafuti.hoon deleted file mode 100644 index 1f154c8..0000000 --- a/desk/lib/pytz/pacific-funafuti.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:57,LMT -1901-12-13T20:45:52,+12:00,+12 -''' diff --git a/desk/lib/pytz/pacific-galapagos.hoon b/desk/lib/pytz/pacific-galapagos.hoon deleted file mode 100644 index 09fed35..0000000 --- a/desk/lib/pytz/pacific-galapagos.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1931-01-01T05:58:24,-05:00,-05 -1986-01-01T05:00:00,-06:00,-06 -1992-11-28T06:00:00,-05:00,-05 -1993-02-05T05:00:00,-06:00,-06 -''' diff --git a/desk/lib/pytz/pacific-gambier.hoon b/desk/lib/pytz/pacific-gambier.hoon deleted file mode 100644 index 0a3dff9..0000000 --- a/desk/lib/pytz/pacific-gambier.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-10-01T08:59:48,-09:00,-09 -''' diff --git a/desk/lib/pytz/pacific-guadalcanal.hoon b/desk/lib/pytz/pacific-guadalcanal.hoon deleted file mode 100644 index 9f6c72d..0000000 --- a/desk/lib/pytz/pacific-guadalcanal.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+10:40,LMT -1912-09-30T13:20:12,+11:00,+11 -''' diff --git a/desk/lib/pytz/pacific-guam.hoon b/desk/lib/pytz/pacific-guam.hoon deleted file mode 100644 index 51d0ba9..0000000 --- a/desk/lib/pytz/pacific-guam.hoon +++ /dev/null @@ -1,24 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+10:00,GST -1941-12-09T14:00:00,+09:00,+09 -1944-07-30T15:00:00,+10:00,GST -1959-06-26T16:00:00,+11:00,GDT -1961-01-28T15:00:00,+10:00,GST -1967-08-31T16:00:00,+11:00,GDT -1969-01-25T13:01:00,+10:00,GST -1969-06-21T16:00:00,+11:00,GDT -1969-08-30T15:00:00,+10:00,GST -1970-04-25T16:00:00,+11:00,GDT -1970-09-05T15:00:00,+10:00,GST -1971-04-24T16:00:00,+11:00,GDT -1971-09-04T15:00:00,+10:00,GST -1973-12-15T16:00:00,+11:00,GDT -1974-02-23T15:00:00,+10:00,GST -1976-05-25T16:00:00,+11:00,GDT -1976-08-21T15:01:00,+10:00,GST -1977-04-23T16:00:00,+11:00,GDT -1977-08-27T15:00:00,+10:00,GST -2000-12-22T14:00:00,+10:00,ChST -''' diff --git a/desk/lib/pytz/pacific-honolulu.hoon b/desk/lib/pytz/pacific-honolulu.hoon deleted file mode 100644 index 9ae6c45..0000000 --- a/desk/lib/pytz/pacific-honolulu.hoon +++ /dev/null @@ -1,11 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-11:30,HST -1933-04-30T12:30:00,-10:30,HDT -1933-05-21T21:30:00,-11:30,HST -1942-02-09T12:30:00,-10:30,HWT -1945-08-14T23:00:00,-10:30,HPT -1945-09-30T11:30:00,-11:30,HST -1947-06-08T12:30:00,-10:00,HST -''' diff --git a/desk/lib/pytz/pacific-johnston.hoon b/desk/lib/pytz/pacific-johnston.hoon deleted file mode 100644 index 9ae6c45..0000000 --- a/desk/lib/pytz/pacific-johnston.hoon +++ /dev/null @@ -1,11 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-11:30,HST -1933-04-30T12:30:00,-10:30,HDT -1933-05-21T21:30:00,-11:30,HST -1942-02-09T12:30:00,-10:30,HWT -1945-08-14T23:00:00,-10:30,HPT -1945-09-30T11:30:00,-11:30,HST -1947-06-08T12:30:00,-10:00,HST -''' diff --git a/desk/lib/pytz/pacific-kanton.hoon b/desk/lib/pytz/pacific-kanton.hoon deleted file mode 100644 index 6b9eee7..0000000 --- a/desk/lib/pytz/pacific-kanton.hoon +++ /dev/null @@ -1,8 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,-00 -1937-08-31T00:00:00,-12:00,-12 -1979-10-01T12:00:00,-11:00,-11 -1994-12-31T11:00:00,+13:00,+13 -''' diff --git a/desk/lib/pytz/pacific-kiritimati.hoon b/desk/lib/pytz/pacific-kiritimati.hoon deleted file mode 100644 index 214c040..0000000 --- a/desk/lib/pytz/pacific-kiritimati.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-11:20,-1040 -1979-10-01T10:40:00,-10:00,-10 -1994-12-31T10:00:00,+14:00,+14 -''' diff --git a/desk/lib/pytz/pacific-kosrae.hoon b/desk/lib/pytz/pacific-kosrae.hoon deleted file mode 100644 index 59e270e..0000000 --- a/desk/lib/pytz/pacific-kosrae.hoon +++ /dev/null @@ -1,12 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+11:00,+11 -1914-09-30T13:00:00,+09:00,+09 -1919-01-31T15:00:00,+11:00,+11 -1936-12-31T13:00:00,+10:00,+10 -1941-03-31T14:00:00,+09:00,+09 -1945-07-31T15:00:00,+11:00,+11 -1969-09-30T13:00:00,+12:00,+12 -1998-12-31T12:00:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/pacific-kwajalein.hoon b/desk/lib/pytz/pacific-kwajalein.hoon deleted file mode 100644 index 25334e9..0000000 --- a/desk/lib/pytz/pacific-kwajalein.hoon +++ /dev/null @@ -1,11 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:09,LMT -1901-12-13T20:45:52,+11:00,+11 -1936-12-31T13:00:00,+10:00,+10 -1941-03-31T14:00:00,+09:00,+09 -1944-02-05T15:00:00,+11:00,+11 -1969-09-30T13:00:00,-12:00,-12 -1993-08-21T12:00:00,+12:00,+12 -''' diff --git a/desk/lib/pytz/pacific-majuro.hoon b/desk/lib/pytz/pacific-majuro.hoon deleted file mode 100644 index 1849322..0000000 --- a/desk/lib/pytz/pacific-majuro.hoon +++ /dev/null @@ -1,12 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:25,LMT -1901-12-13T20:45:52,+11:00,+11 -1914-09-30T13:00:00,+09:00,+09 -1919-01-31T15:00:00,+11:00,+11 -1936-12-31T13:00:00,+10:00,+10 -1941-03-31T14:00:00,+09:00,+09 -1944-01-29T15:00:00,+11:00,+11 -1969-09-30T13:00:00,+12:00,+12 -''' diff --git a/desk/lib/pytz/pacific-marquesas.hoon b/desk/lib/pytz/pacific-marquesas.hoon deleted file mode 100644 index c1462a3..0000000 --- a/desk/lib/pytz/pacific-marquesas.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-10-01T09:18:00,-10:30,-0930 -''' diff --git a/desk/lib/pytz/pacific-midway.hoon b/desk/lib/pytz/pacific-midway.hoon deleted file mode 100644 index ee38e2a..0000000 --- a/desk/lib/pytz/pacific-midway.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-11:00,-11 -1956-06-03T11:00:00,-10:00,-10 -1956-09-02T10:00:00,-11:00,SST -''' diff --git a/desk/lib/pytz/pacific-nauru.hoon b/desk/lib/pytz/pacific-nauru.hoon deleted file mode 100644 index cacccfe..0000000 --- a/desk/lib/pytz/pacific-nauru.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:08,LMT -1921-01-14T12:52:20,+11:30,+1130 -1942-08-28T12:30:00,+09:00,+09 -1945-09-07T15:00:00,+11:30,+1130 -1979-02-09T14:30:00,+12:00,+12 -''' diff --git a/desk/lib/pytz/pacific-niue.hoon b/desk/lib/pytz/pacific-niue.hoon deleted file mode 100644 index c26387b..0000000 --- a/desk/lib/pytz/pacific-niue.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1952-10-16T11:19:40,-12:40,-1120 -1964-07-01T11:20:00,-11:00,-11 -''' diff --git a/desk/lib/pytz/pacific-norfolk.hoon b/desk/lib/pytz/pacific-norfolk.hoon deleted file mode 100644 index bccb1f8..0000000 --- a/desk/lib/pytz/pacific-norfolk.hoon +++ /dev/null @@ -1,47 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:12,LMT -1901-12-13T20:45:52,+11:12,+1112 -1950-12-31T12:48:00,+11:30,+1130 -1974-10-26T14:30:00,+12:30,+1230 -1975-03-01T14:30:00,+11:30,+1130 -2015-10-03T14:30:00,+11:00,+11 -2019-10-05T15:00:00,+12:00,+12 -2020-04-04T15:00:00,+11:00,+11 -2020-10-03T15:00:00,+12:00,+12 -2021-04-03T15:00:00,+11:00,+11 -2021-10-02T15:00:00,+12:00,+12 -2022-04-02T15:00:00,+11:00,+11 -2022-10-01T15:00:00,+12:00,+12 -2023-04-01T15:00:00,+11:00,+11 -2023-09-30T15:00:00,+12:00,+12 -2024-04-06T15:00:00,+11:00,+11 -2024-10-05T15:00:00,+12:00,+12 -2025-04-05T15:00:00,+11:00,+11 -2025-10-04T15:00:00,+12:00,+12 -2026-04-04T15:00:00,+11:00,+11 -2026-10-03T15:00:00,+12:00,+12 -2027-04-03T15:00:00,+11:00,+11 -2027-10-02T15:00:00,+12:00,+12 -2028-04-01T15:00:00,+11:00,+11 -2028-09-30T15:00:00,+12:00,+12 -2029-03-31T15:00:00,+11:00,+11 -2029-10-06T15:00:00,+12:00,+12 -2030-04-06T15:00:00,+11:00,+11 -2030-10-05T15:00:00,+12:00,+12 -2031-04-05T15:00:00,+11:00,+11 -2031-10-04T15:00:00,+12:00,+12 -2032-04-03T15:00:00,+11:00,+11 -2032-10-02T15:00:00,+12:00,+12 -2033-04-02T15:00:00,+11:00,+11 -2033-10-01T15:00:00,+12:00,+12 -2034-04-01T15:00:00,+11:00,+11 -2034-09-30T15:00:00,+12:00,+12 -2035-03-31T15:00:00,+11:00,+11 -2035-10-06T15:00:00,+12:00,+12 -2036-04-05T15:00:00,+11:00,+11 -2036-10-04T15:00:00,+12:00,+12 -2037-04-04T15:00:00,+11:00,+11 -2037-10-03T15:00:00,+12:00,+12 -''' diff --git a/desk/lib/pytz/pacific-noumea.hoon b/desk/lib/pytz/pacific-noumea.hoon deleted file mode 100644 index 22cf01a..0000000 --- a/desk/lib/pytz/pacific-noumea.hoon +++ /dev/null @@ -1,12 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:06,LMT -1912-01-12T12:54:12,+11:00,+11 -1977-12-03T13:00:00,+12:00,+12 -1978-02-26T12:00:00,+11:00,+11 -1978-12-02T13:00:00,+12:00,+12 -1979-02-26T12:00:00,+11:00,+11 -1996-11-30T15:00:00,+12:00,+12 -1997-03-01T15:00:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/pacific-pago-pago.hoon b/desk/lib/pytz/pacific-pago-pago.hoon deleted file mode 100644 index 24dedf0..0000000 --- a/desk/lib/pytz/pacific-pago-pago.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:37,LMT -1901-12-13T20:45:52,-12:37,LMT -1911-01-01T11:22:48,-11:00,SST -''' diff --git a/desk/lib/pytz/pacific-palau.hoon b/desk/lib/pytz/pacific-palau.hoon deleted file mode 100644 index 55713e8..0000000 --- a/desk/lib/pytz/pacific-palau.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+09:00,+09 -''' diff --git a/desk/lib/pytz/pacific-pitcairn.hoon b/desk/lib/pytz/pacific-pitcairn.hoon deleted file mode 100644 index 9bfc4be..0000000 --- a/desk/lib/pytz/pacific-pitcairn.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,-09:30,-0830 -1998-04-27T08:30:00,-08:00,-08 -''' diff --git a/desk/lib/pytz/pacific-pohnpei.hoon b/desk/lib/pytz/pacific-pohnpei.hoon deleted file mode 100644 index 3c48468..0000000 --- a/desk/lib/pytz/pacific-pohnpei.hoon +++ /dev/null @@ -1,10 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+11:00,+11 -1914-09-30T13:00:00,+09:00,+09 -1919-01-31T15:00:00,+11:00,+11 -1936-12-31T13:00:00,+10:00,+10 -1941-03-31T14:00:00,+09:00,+09 -1945-07-31T15:00:00,+11:00,+11 -''' diff --git a/desk/lib/pytz/pacific-port-moresby.hoon b/desk/lib/pytz/pacific-port-moresby.hoon deleted file mode 100644 index 8b2cb29..0000000 --- a/desk/lib/pytz/pacific-port-moresby.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+09:49,LMT -1901-12-13T20:45:52,+10:00,+10 -''' diff --git a/desk/lib/pytz/pacific-rarotonga.hoon b/desk/lib/pytz/pacific-rarotonga.hoon deleted file mode 100644 index fe9db89..0000000 --- a/desk/lib/pytz/pacific-rarotonga.hoon +++ /dev/null @@ -1,33 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+13:21,LMT -1901-12-13T20:45:52,-11:21,LMT -1952-10-16T10:39:04,-11:30,-1030 -1978-11-12T10:30:00,-10:30,-0930 -1979-03-04T09:30:00,-10:00,-10 -1979-10-28T10:00:00,-10:30,-0930 -1980-03-02T09:30:00,-10:00,-10 -1980-10-26T10:00:00,-10:30,-0930 -1981-03-01T09:30:00,-10:00,-10 -1981-10-25T10:00:00,-10:30,-0930 -1982-03-07T09:30:00,-10:00,-10 -1982-10-31T10:00:00,-10:30,-0930 -1983-03-06T09:30:00,-10:00,-10 -1983-10-30T10:00:00,-10:30,-0930 -1984-03-04T09:30:00,-10:00,-10 -1984-10-28T10:00:00,-10:30,-0930 -1985-03-03T09:30:00,-10:00,-10 -1985-10-27T10:00:00,-10:30,-0930 -1986-03-02T09:30:00,-10:00,-10 -1986-10-26T10:00:00,-10:30,-0930 -1987-03-01T09:30:00,-10:00,-10 -1987-10-25T10:00:00,-10:30,-0930 -1988-03-06T09:30:00,-10:00,-10 -1988-10-30T10:00:00,-10:30,-0930 -1989-03-05T09:30:00,-10:00,-10 -1989-10-29T10:00:00,-10:30,-0930 -1990-03-04T09:30:00,-10:00,-10 -1990-10-28T10:00:00,-10:30,-0930 -1991-03-03T09:30:00,-10:00,-10 -''' diff --git a/desk/lib/pytz/pacific-saipan.hoon b/desk/lib/pytz/pacific-saipan.hoon deleted file mode 100644 index a6b7907..0000000 --- a/desk/lib/pytz/pacific-saipan.hoon +++ /dev/null @@ -1,23 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+09:00,+09 -1944-07-08T15:00:00,+10:00,GST -1959-06-26T16:00:00,+11:00,GDT -1961-01-28T15:00:00,+10:00,GST -1967-08-31T16:00:00,+11:00,GDT -1969-01-25T13:01:00,+10:00,GST -1969-06-21T16:00:00,+11:00,GDT -1969-08-30T15:00:00,+10:00,GST -1970-04-25T16:00:00,+11:00,GDT -1970-09-05T15:00:00,+10:00,GST -1971-04-24T16:00:00,+11:00,GDT -1971-09-04T15:00:00,+10:00,GST -1973-12-15T16:00:00,+11:00,GDT -1974-02-23T15:00:00,+10:00,GST -1976-05-25T16:00:00,+11:00,GDT -1976-08-21T15:01:00,+10:00,GST -1977-04-23T16:00:00,+11:00,GDT -1977-08-27T15:00:00,+10:00,GST -2000-12-22T14:00:00,+10:00,ChST -''' diff --git a/desk/lib/pytz/pacific-samoa.hoon b/desk/lib/pytz/pacific-samoa.hoon deleted file mode 100644 index 24dedf0..0000000 --- a/desk/lib/pytz/pacific-samoa.hoon +++ /dev/null @@ -1,7 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:37,LMT -1901-12-13T20:45:52,-12:37,LMT -1911-01-01T11:22:48,-11:00,SST -''' diff --git a/desk/lib/pytz/pacific-tahiti.hoon b/desk/lib/pytz/pacific-tahiti.hoon deleted file mode 100644 index 6c6f207..0000000 --- a/desk/lib/pytz/pacific-tahiti.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1912-10-01T09:58:16,-10:00,-10 -''' diff --git a/desk/lib/pytz/pacific-tarawa.hoon b/desk/lib/pytz/pacific-tarawa.hoon deleted file mode 100644 index e710c92..0000000 --- a/desk/lib/pytz/pacific-tarawa.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:32,LMT -1901-12-13T20:45:52,+12:00,+12 -''' diff --git a/desk/lib/pytz/pacific-tongatapu.hoon b/desk/lib/pytz/pacific-tongatapu.hoon deleted file mode 100644 index a92c82b..0000000 --- a/desk/lib/pytz/pacific-tongatapu.hoon +++ /dev/null @@ -1,15 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:19,LMT -1945-09-09T11:40:48,+12:20,+1220 -1960-12-31T11:40:00,+13:00,+13 -1999-10-06T13:00:00,+14:00,+14 -2000-03-18T13:00:00,+13:00,+13 -2000-11-04T13:00:00,+14:00,+14 -2001-01-27T12:00:00,+13:00,+13 -2001-11-03T13:00:00,+14:00,+14 -2002-01-26T12:00:00,+13:00,+13 -2016-11-05T13:00:00,+14:00,+14 -2017-01-14T13:00:00,+13:00,+13 -''' diff --git a/desk/lib/pytz/pacific-wake.hoon b/desk/lib/pytz/pacific-wake.hoon deleted file mode 100644 index 4d58f08..0000000 --- a/desk/lib/pytz/pacific-wake.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+11:06,LMT -1901-12-13T20:45:52,+12:00,+12 -''' diff --git a/desk/lib/pytz/pacific-wallis.hoon b/desk/lib/pytz/pacific-wallis.hoon deleted file mode 100644 index 780f14d..0000000 --- a/desk/lib/pytz/pacific-wallis.hoon +++ /dev/null @@ -1,6 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+12:15,LMT -1901-12-13T20:45:52,+12:00,+12 -''' diff --git a/desk/lib/pytz/pacific-yap.hoon b/desk/lib/pytz/pacific-yap.hoon deleted file mode 100644 index 925c3c4..0000000 --- a/desk/lib/pytz/pacific-yap.hoon +++ /dev/null @@ -1,9 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -1901-12-13T20:45:52,+10:00,+10 -1914-09-30T14:00:00,+09:00,+09 -1919-01-31T15:00:00,+10:00,+10 -1941-03-31T14:00:00,+09:00,+09 -1945-07-31T15:00:00,+10:00,+10 -''' diff --git a/desk/lib/pytz/utc.hoon b/desk/lib/pytz/utc.hoon deleted file mode 100644 index b16b6f1..0000000 --- a/desk/lib/pytz/utc.hoon +++ /dev/null @@ -1,5 +0,0 @@ -%- to-wain:format -''' -Time,Offset,Name -0001-01-01T00:00:00,+00:00,UTC -''' diff --git a/desk/lib/pytz/version.hoon b/desk/lib/pytz/version.hoon deleted file mode 100644 index d0da983..0000000 --- a/desk/lib/pytz/version.hoon +++ /dev/null @@ -1,4 +0,0 @@ -%- to-wain:format -''' -2025.1 -''' diff --git a/desk/lib/root.hoon b/desk/lib/root.hoon new file mode 100644 index 0000000..5034d62 --- /dev/null +++ b/desk/lib/root.hoon @@ -0,0 +1,161 @@ +:: Root nexus — hardcoded in app/grubbery.hoon, not loaded from code namespace. +:: +/+ nexus, tarball, loader, io=fiberio, ball-api, http-utils, server +^- nexus:nexus +|% +++ on-load + |= [=sand:nexus =gain:nexus =ball:tarball] + ^- [sand:nexus gain:nexus ball:tarball] + =/ =ver:loader ~ :: (get-ver:loader ball) + ?+ ver !! + ?(~ [~ %0]) + %+ spin:loader [sand gain ball] + :~ (ver-row:loader 0) + [%load %| / / same-fold:loader] + [%fall %| /apps [~ ~] [~ ~] [`[~ ~ ~] ~]] + [%fall %| /docs [~ ~] [~ ~] [`[~ ~ ~] ~]] + :: /sys/eyre: HTTP server state + request fibers + :: + [%fall %| /sys/eyre [~ ~] [~ ~] [`[~ ~ ~] ~]] + [%fall %& [/sys/eyre %'main.server-state'] %.n [~ [/ %server-state] !>(*server-state:nexus)]] + [%fall %| /sys/eyre/requests [~ ~] [~ ~] [`[~ ~ ~] ~]] + :: /sys/behn: timer service + :: + [%fall %| /sys/behn [~ ~] [~ ~] [`[~ ~ ~] ~]] + [%fall %& [/sys/behn %'main.timer-state'] %.n [~ [/ %timer-state] !>(*timer-state:nexus)]] + :: /sys/iris: HTTP client service + :: + [%fall %| /sys/iris [~ ~] [~ ~] [`[~ ~ ~] ~]] + [%fall %& [/sys/iris %'main.iris-state'] %.n [~ [/ %iris-state] !>(*iris-state:nexus)]] + :: /sys/clay: desk sync service (state + desks/ subdir) + :: + [%fall %& [/sys/clay %'main.clay-state'] %.n [~ [/ %clay-state] !>(*clay-state:nexus)]] + [%fall %| /sys/clay/desks [~ ~] [~ ~] [`[~ ~ ~] ~]] + :: /sys/scry: scry service + :: + [%fall %| /sys/scry [~ ~] [~ ~] [`[~ ~ ~] ~]] + [%fall %& [/sys/scry %'main.sig'] %.n [~ [/ %sig] !>(~)]] + :: child nexuses + :: + [%fall %| /apps/'counter.counter' [~ ~] [~ ~] [`[~ `[/ %counter] ~] ~]] + [%fall %| /apps/'explorer.explorer' [~ ~] [~ ~] [`[~ `[/ %explorer] ~] ~]] + [%fall %| /apps/'mcp.mcp' [~ ~] [~ ~] [`[~ `[/ %mcp] ~] ~]] + [%fall %| /apps/'peers.peers' [~ ~] [~ ~] [`[~ `[/ %peers] ~] ~]] + == + == +:: +++ on-file + |= [=rail:tarball =blot:tarball] + ^- spool:fiber:nexus + |= =prod:fiber:nexus + =/ m (fiber:fiber:nexus ,~) + ^- process:fiber:nexus + ?+ rail stay:m + :: /sys/eyre/requests/*: ball API request fibers + :: + [[%sys %eyre %requests ~] @] + ;< ~ bind:m (rise-wait:io prod "%eyre /requests: failed") + =/ eyre-id=@ta name.rail + ;< [src=@p req=inbound-request:eyre] bind:m (get-state-as:io ,[src=@p inbound-request:eyre]) + =/ [site=path args=quay:eyre] (parse-url:http-utils url.request.req) + (dispatch:ball-api eyre-id src req site args) + == +:: +++ on-manu + |= =mana:nexus + ^- @t + ?- -.mana + %& + ?+ p.mana 'Subdirectory under the root nexus.' + ~ + %- crip + """ + GRUBBERY ROOT — top-level tarball + + The root nexus bootstraps all system nexuses and user data. + Each subdirectory with a neck (e.g. counter.counter/) is a child + nexus managed by its own nex/ file. + + NEXUSES: + mcp.mcp/ MCP (Model Context Protocol) JSON-RPC tool server. + explorer.explorer/ Web-based tarball file browser. + counter.counter/ Auto-incrementing counters with live UI. + wallet.wallet_app/ Bitcoin wallet management with per-wallet nexuses. + indexer.indexer_app/ Bitcoind block cache. Polls RPC, caches blocks. + + SYSTEM: + sys/ System internals — build compiler, terminal logs, + cryptographic keys, virtual bowl files, eyre state. + """ + [%sys ~] + %- crip + """ + sys/ — System internals. + + SUBDIRECTORIES: + code/ Compiled marks, nexuses, daises, tubes, and libraries. + dill/ Terminal I/O logs. Mark: dill-told. History retained. + eyre/ HTTP binding state and request fibers. + jael/ Cryptographic key storage. History retained. + private-keys.jael-private-keys — ship private keys. + public-keys.jael-public-keys-result — PKI cache. + ames/ Foreign ship management. Runtime-owned. + Weirs recompute atomically on usergroup changes. + ships/~ship/ship.sig — virtual grub per foreign ship. + """ + [%sys %eyre ~] + %- crip + """ + sys/eyre/ — HTTP server state and request fibers. + + FILES: + main.server-state Active bindings and connection tracking. + Runtime-hooked, no fiber. + + DIRECTORIES: + requests/ Per-request fibers for /grubbery/api/ endpoints. + Each inbound API request spawns a short-lived + fiber here, cleaned up on response or disconnect. + """ + [%sys %eyre %requests ~] + 'Active HTTP request fibers. Each inbound API request spawns a fiber here; cleaned up on completion or client disconnect.' + [%sys %behn ~] + %- crip + """ + sys/behn/ — Timer service. + + FILES: + main.timer-state Timer proxy. Receives timer-set pokes from + sandboxed fibers, proxies to behn, pokes back + timer-wake when fired. + """ + [%sys %ames ~] + %- crip + """ + sys/ames/ — Foreign ship management (runtime-owned). + + Foreign pokes are emitted as darts from ship.sig, filtered by + the weir on the ship's directory. Weirs are computed from + usergroups and recompute atomically on any change. + + SUBDIRECTORIES: + usergroups/ Per-group directories. Each contains: + who.ships — group membership (set @p). + how.weir — weir template for the group. + The 'public' group applies to ALL foreign ships. + ships/ Per-ship directories, created lazily. + Each has a ship.sig grub and a computed weir. + """ + [%sys %ames %usergroups ~] + 'Per-group directories. Each group is a directory containing who.ships (members) and how.weir (permissions).' + [%sys %ames %ships ~] + 'Per-ship directories. Created lazily on first foreign poke. Each contains ship.sig with a weir computed from usergroups.' + == + %| + ?+ rail.p.mana 'File under the root nexus.' + [~ %'ver.ud'] 'Schema version counter. Mark: ud. Incremented on structural migrations in on-load.' + [[%sys %eyre ~] %'main.server-state'] 'HTTP server state. Stores bindings and active connections. Runtime-managed.' + [[%sys %behn ~] %'main.timer-state'] 'Timer proxy. Receives timer-set pokes, forwards to behn, pokes back timer-wake on fire.' + == + == +-- diff --git a/desk/lib/s3.hoon b/desk/lib/s3.hoon deleted file mode 100644 index 1ae4d19..0000000 --- a/desk/lib/s3.hoon +++ /dev/null @@ -1,294 +0,0 @@ -:: lib/s3: Pure S3 (AWS Signature Version 4) functions -:: -:: Cryptographic signing, request building, and response parsing -:: for AWS S3-compatible storage (DigitalOcean Spaces, etc.) -:: -:: Byte order note: Hoon cords are stored little-endian (LSB first), but -:: cryptographic functions expect big-endian (MSB first). Use (swp 3 ...) -:: to swap byte order before passing cords to HMAC/SHA functions. HMAC -:: output is already big-endian, so only swap it when using as message. -:: -/+ tarball -|% -:: HMAC-SHA256 with big-endian inputs -:: Expects key and message in big-endian format (use (swp 3 ...) on cords) -:: -++ hmac-sha256 - |= [key=@ msg=@] - ^- @ - %+ hmac-sha256l:hmac:crypto - [(met 3 key) key] - [(met 3 msg) msg] -:: Derive AWS signing key via nested HMAC operations -:: Implements AWS4-HMAC-SHA256 key derivation -:: -++ get-signature-key - |= [key=@t date-stamp=@t region=@t service=@t] - ^- @ - =/ aws4-key=@ (cat 3 'AWS4' key) - =/ k-date=@ (hmac-sha256 (swp 3 aws4-key) (swp 3 date-stamp)) - =/ k-region=@ (hmac-sha256 k-date (swp 3 region)) - =/ k-service=@ (hmac-sha256 k-region (swp 3 service)) - (hmac-sha256 k-service (swp 3 'aws4_request')) -:: Convert hash atom to lowercase hexadecimal string -:: Renders 32-byte hash in MSB-first order -:: -++ hash-to-hex - |= hash=@ - ^- @t - =/ hex-chars "0123456789abcdef" - =/ result=tape "" - =/ byte-count=@ud 32 :: SHA-256 is 32 bytes - =/ idx=@ud 0 - |- - ?: =(idx byte-count) - (crip result) - :: Extract from MSB (byte 31) down to LSB (byte 0) - =/ byte=@ (cut 3 [(sub (dec byte-count) idx) 1] hash) - =/ hi=@ud (div byte 16) - =/ lo=@ud (mod byte 16) - =/ hi-char=@tD (snag hi hex-chars) - =/ lo-char=@tD (snag lo hex-chars) - $(idx +(idx), result (weld result ~[hi-char lo-char])) -:: SHA256 hash returning lowercase hexadecimal string -:: Swaps cord bytes to big-endian before hashing -:: -++ sha256-hash - |= data=@ - ^- @t - %- hash-to-hex - %- sha-256:sha - (swp 3 data) -:: Format date as YYYYMMDD -:: -++ format-date-stamp - |= now=@da - ^- @t - =/ date (yore now) - =/ y=tape (a-co:co y.date) - =/ m=tape ?:((lth m.date 10) (weld "0" (a-co:co m.date)) (a-co:co m.date)) - =/ d=tape ?:((lth d.t.date 10) (weld "0" (a-co:co d.t.date)) (a-co:co d.t.date)) - (crip (weld y (weld m d))) -:: Format date as YYYYMMDDTHHMMSSZ -:: -++ format-amz-date - |= now=@da - ^- @t - =/ date (yore now) - =/ y=tape (a-co:co y.date) - =/ mon=tape ?:((lth m.date 10) (weld "0" (a-co:co m.date)) (a-co:co m.date)) - =/ d=tape ?:((lth d.t.date 10) (weld "0" (a-co:co d.t.date)) (a-co:co d.t.date)) - =/ h=tape ?:((lth h.t.date 10) (weld "0" (a-co:co h.t.date)) (a-co:co h.t.date)) - =/ min=tape ?:((lth m.t.date 10) (weld "0" (a-co:co m.t.date)) (a-co:co m.t.date)) - =/ s=tape ?:((lth s.t.date 10) (weld "0" (a-co:co s.t.date)) (a-co:co s.t.date)) - (crip (weld y (weld mon (weld d (weld "T" (weld h (weld min (weld s "Z")))))))) -:: Build S3 URL with optional query string -:: -++ build-url - |= [endpoint=@t bucket=@t object-key=@t query=(unit @t)] - ^- @t - =/ base=tape - %+ weld "https://" - %+ weld (trip endpoint) - %+ weld "/" - %+ weld (trip bucket) - "/" - =/ path=tape - ?: =(object-key '') - "" - (trip object-key) - =/ full-path=tape (weld base path) - ?~ query - (crip full-path) - (crip (weld full-path (weld "?" (trip u.query)))) -:: Build HTTP headers for S3 request -:: -++ build-headers - |= [method=@t payload-hash=@t amz-date=@t authorization=@t] - ^- (list [@t @t]) - =/ base-headers=(list [@t @t]) - :~ ['x-amz-content-sha256' payload-hash] - ['x-amz-date' amz-date] - ['authorization' authorization] - == - ?: =(method 'PUT') - [[%content-type 'text/plain'] base-headers] - base-headers -:: Build query string for LIST operation -:: -++ build-list-query - |= prefix=@t - ^- @t - ?: =(prefix '') - 'list-type=2' - =/ encoded-prefix=tape (en-urlt:html (trip prefix)) - (crip "list-type=2&prefix={encoded-prefix}") -:: Build AWS Signature V4 authorization -:: Supports GET, PUT, DELETE, and LIST operations -:: -++ build-signature - |= $: method=@t - access-key=@t - secret-key=@t - region=@t - endpoint=@t - bucket=@t - object-key=@t - query-string=@t - content=(unit @t) - now=@da - == - ^- [amz-date=@t payload-hash=@t authorization=@t] - :: Hash request payload (empty for GET/DELETE) - =/ payload-hash=@t (sha256-hash (fall content '')) - :: Format ISO8601 timestamp and date stamp - =/ amz-date=@t (format-amz-date now) - =/ date-stamp=@t (format-date-stamp now) - :: Build canonical request - =/ canonical-uri=@t - ?: =(object-key '') - (crip "/{(trip bucket)}/") - (crip "/{(trip bucket)}/{(trip object-key)}") - =/ canonical-querystring=@t query-string - :: Headers vary by method: PUT includes content-type - =/ [canonical-headers=@t signed-headers=@t] - ?: =(method 'PUT') - :- %+ rap 3 - :~ 'content-type:text/plain' - '\0a' - 'host:' - endpoint - '\0a' - 'x-amz-content-sha256:' - payload-hash - '\0a' - 'x-amz-date:' - amz-date - '\0a' - == - 'content-type;host;x-amz-content-sha256;x-amz-date' - :- %+ rap 3 - :~ 'host:' - endpoint - '\0a' - 'x-amz-content-sha256:' - payload-hash - '\0a' - 'x-amz-date:' - amz-date - '\0a' - == - 'host;x-amz-content-sha256;x-amz-date' - =/ canonical-request=@t - %+ rap 3 - :~ method '\0a' - canonical-uri '\0a' - canonical-querystring '\0a' - canonical-headers '\0a' - signed-headers '\0a' - payload-hash - == - :: Create string to sign - =/ algorithm=@t 'AWS4-HMAC-SHA256' - =/ credential-scope=@t - (crip "{(trip date-stamp)}/{(trip region)}/s3/aws4_request") - =/ canonical-request-hash=@t (sha256-hash canonical-request) - =/ string-to-sign=@t - %+ rap 3 - :~ algorithm '\0a' - amz-date '\0a' - credential-scope '\0a' - canonical-request-hash - == - :: Calculate signature - =/ signing-key=@ (get-signature-key secret-key date-stamp region 's3') - =/ signature-bytes=@ (hmac-sha256 signing-key (swp 3 string-to-sign)) - =/ signature=@t (hash-to-hex signature-bytes) - :: Build authorization header - =/ authorization=@t - %+ rap 3 - :~ algorithm - ' Credential=' - access-key - '/' - credential-scope - ', SignedHeaders=' - signed-headers - ', Signature=' - signature - == - [amz-date payload-hash authorization] -:: Parse S3 LIST XML response to extract object keys -:: Returns list of file keys from elements -:: -++ parse-list-response - |= xml=@t - ^- (list @t) - =/ xml-text=tape (trip xml) - =| keys=(list @t) - |- - ^- (list @t) - =/ key-start (find "" xml-text) - ?~ key-start (flop keys) - =/ rest=tape (slag (add u.key-start 5) xml-text) - =/ key-end (find "" rest) - ?~ key-end (flop keys) - =/ key=tape (scag u.key-end rest) - %= $ - xml-text (slag (add u.key-end 6) rest) - keys [(crip key) keys] - == -:: Extract Content-Type from HTTP response headers -:: -++ extract-content-type - |= response-headers=(list [key=@t value=@t]) - ^- (unit @t) - |- ^- (unit @t) - ?~ response-headers ~ - ?: =(key.i.response-headers 'content-type') - `value.i.response-headers - $(response-headers t.response-headers) -:: Extract filename from S3 key (everything after last /) -:: -++ extract-filename - |= s3-key=@t - ^- @ta - =/ key-text=tape (trip s3-key) - =/ last-slash=(unit @ud) (find "/" (flop key-text)) - ?~ last-slash - s3-key - (crip (slag (sub (lent key-text) u.last-slash) key-text)) -:: Convert path to S3 key (no leading slash) -:: -++ path-to-s3-key - |= pax=path - ^- @t - ?~ pax '' - =/ parts=(list tape) - %+ turn pax - |=(p=@ta (trip p)) - (crip (roll parts |=([a=tape b=tape] ?~(b a "{b}/{a}")))) -:: -:: Helper: collect all files from a ball directory recursively -:: -++ collect-files-recursive - |= [=ball:tarball current-path=path] - ^- (list [path @ta]) - :: Get files at current path - =/ files=(list @ta) (~(lis ba:tarball ball) current-path) - =/ files-with-path=(list [path @ta]) - %+ turn files - |=(f=@ta [current-path f]) - :: Get subdirectories - =/ current-ball=ball:tarball (~(dip ba:tarball ball) current-path) - =/ subdirs=(list @ta) ~(tap in ~(key by dir.current-ball)) - :: Recursively collect from subdirectories - =/ subdir-files=(list [path @ta]) - |- ^- (list [path @ta]) - ?~ subdirs ~ - =/ subdir-path=path (snoc current-path i.subdirs) - =/ subdir-results=(list [path @ta]) - (collect-files-recursive ball subdir-path) - (weld subdir-results $(subdirs t.subdirs)) - (weld files-with-path subdir-files) --- diff --git a/desk/lib/sigil/symbols.hoon b/desk/lib/sigil/symbols.hoon deleted file mode 100644 index 1131612..0000000 --- a/desk/lib/sigil/symbols.hoon +++ /dev/null @@ -1,14332 +0,0 @@ -:: sigil-symbols: svg symbols for phonemes, for use in /lib/sigil -:: -:: the map is keyed by phoneme cords and contains functions for -:: generating lists of manxes based on fore- and background colors, -:: intended to be wrapped up in an svg for further processing. -:: -:: shapes and default attributes sourced from: -:: https://github.com/urbit/sigil-js/blob/fdea06f/src/index.json -:: -::NOTE to reduce svg size, we exclude certain common/shared attributes. -:: we expect the /lib/sigil to wrap these elements in a which sets -:: those attributes, letting them be inherited. they are as follows: -:: =fill fg -:: =stroke bg -:: =stroke-linecap "square" -:: =stroke-width -:: we assume the defaults specified above, and only include those -:: attributes below if they deviate from those. (this includes adding -:: stroke="none" for elements whose original specification did not -:: include a stroke.) -:: unfortunately, the vector-effect attribute cannot be inherted by -:: children, so we have to inline it for every element here. -:: for ease of change, we leave excluded attributes as comments here. -:: -^~ -%- ~(gas by *(map cord $-([fg=tape bg=tape] (list manx)))) -:~ - :- 'bac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'bal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "128" - =y1 "32.0072" - =x2 "32.7071" - =y2 "127.3" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "128" - =y1 "64.0072" - =x2 "64.7071" - =y2 "127.3" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "128" - =y1 "96.0072" - =x2 "96.7071" - =y2 "127.3" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'ban' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0C128 70.6924 70.6924 128 -1.52588e-05 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bar' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'bat' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0C128 35.3462 99.3462 64 64 64C28.6538 64 0 35.3462 0 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'bel' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ben' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "8" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'bep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ber' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 0L96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bes' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 128C64 92.6538 35.3462 64 0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'bet' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "16.0036" - =y1 "15.9965" - =x2 "48.0036" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "16.0036" - =y1 "15.9965" - =x2 "48.0036" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'bic' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 96C74.9807 96 32 53.0193 32 -4.19629e-06" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0C32 70.6925 74.9807 128 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bil' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9965" - =x2 "112.004" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'bin' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - == -:: - :- 'bis' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-8.87604e-09" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "96" - =x2 "-8.87604e-09" - =y2 "96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "32" - =x2 "-8.87604e-09" - =y2 "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bit' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'bol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bon' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 128C92.6538 128 64 99.3462 64 64C64 28.6538 92.6538 4.215e-07 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bor' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M0 128C4.63574e-06 92.6489 14.3309 60.6449 37.5 37.4807" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1217" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'bos' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'bot' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "32" - =y1 "2.18557e-08" - =x2 "32" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'bud' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M16 64C16 90.5097 37.4903 112 64 112" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'bur' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M7.37542e-06 -3.56072e-06C1.19529e-06 70.6924 57.3075 128 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'bus' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 128C32 110.327 17.6731 96 0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'byl' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "16" - =cy "112" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "112" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M22.1288 22.6299C16.0075 28.7511 8.0234 31.874 0.00134547 31.9986M44.7562 45.2573C32.3866 57.6269 16.2133 63.8747 0.00134277 64.0005M67.3836 67.8847C48.7656 86.5027 24.403 95.8749 0.00134412 96.0012" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'byn' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'byr' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "48" - =cy "80" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "48" - =cy "80" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'byt' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dab' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'dac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L-5.96046e-08 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "63.29" - =y2 "63.2929" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "128" - =y1 "32.0072" - =x2 "32.7071" - =y2 "127.3" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "128" - =y1 "64.0072" - =x2 "64.7071" - =y2 "127.3" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "128" - =y1 "96.0072" - =x2 "96.7071" - =y2 "127.3" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'dan' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "96" - =y1 "2.18557e-08" - =x2 "96" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dap' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9964" - =x2 "112.004" - =y2 "111.996" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dar' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;path - =d "M86.6274 86.6274C99.1242 74.1307 99.1242 53.8694 86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M75.3137 75.3137C81.5621 69.0653 81.5621 58.9347 75.3137 52.6863C69.0653 46.4379 58.9347 46.4379 52.6863 52.6863" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M97.9411 97.9411C116.686 79.1959 116.686 48.804 97.9411 30.0589C79.196 11.3137 48.804 11.3137 30.0589 30.0589" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'das' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'dat' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 128C92.6538 128 64 99.3462 64 64C64 28.6538 92.6538 -1.54503e-06 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dav' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 64C96 46.3269 81.6731 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "96" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'deb' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 -6.35781e-07C64 35.3462 35.3462 64 0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "112" - =cy "16" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "112" - =cy "16" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'def' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 128L128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M0 94L94 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M0 64L64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M0 32L32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'deg' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 128C64 92.6538 35.3462 64 0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'del' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dem' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 -6.35781e-07C64 35.3462 35.3462 64 0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'den' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M1.52575e-06 96C53.0193 96 96 53.0193 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'dep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1216" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'der' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 128L96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'des' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 0L96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'det' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "15.9964" - =y1 "111.996" - =x2 "47.9964" - =y2 "79.9964" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dev' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "96.5" - =y1 "3.07317e-08" - =x2 "96.5" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "32.5" - =y1 "3.07317e-08" - =x2 "32.5" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'dib' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "8.74228e-08" - =y1 "64" - =x2 "128" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "5.25874e-08" - =y1 "32" - =x2 "128" - =y2 "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dif' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M60.1244 67.3837C41.5063 48.7657 32.1342 24.4031 32.0079 0.00145601M82.7518 44.7563C70.3822 32.3867 64.1344 16.2134 64.0086 0.00145196M105.379 22.1289C99.258 16.0077 96.1351 8.02351 96.0105 0.00145196" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "16" - =cy "16" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "16" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'dig' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64.5" - =y1 "-0.5" - =x2 "64.5" - =y2 "127.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "16.0035" - =y1 "15.9965" - =x2 "48.0035" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dil' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0036" - =y1 "79.9964" - =x2 "112.004" - =y2 "111.996" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'din' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "96" - =y1 "2.18557e-08" - =x2 "96" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dir' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 64C96 81.6731 81.6731 96 64 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "16.0035" - =y1 "15.9965" - =x2 "48.0035" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dis' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.0029152 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'div' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-4.19629e-06 96C70.6924 96 128 53.0193 128 5.59506e-06" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-2.79753e-06 64C70.6924 64 128 35.3462 128 5.59506e-06" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'doc' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M127.997 0L-0.00291443 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726C28.8758 53.8694 28.8758 74.1306 41.3726 86.6274" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-4.19629e-06 16C26.5097 16 48 37.4903 48 64C48 90.5097 26.5097 112 0 112" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'don' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-3.8147e-06 128C-7.24632e-07 92.6538 28.6538 64 64 64C99.3462 64 128 92.6538 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dop' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 112C90.5097 112 112 90.5097 112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dor' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =y1 "63.5" - =x2 "128" - =y2 "63.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dos' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M86.6274 86.6274C99.1242 74.1306 99.1242 53.8693 86.6274 41.3725C74.1306 28.8758 53.8694 28.8758 41.3726 41.3725" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dot' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dov' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M-0.701724 31.9914C25.6281 31.9914 49.4822 42.5913 66.8261 59.7565M-0.701723 63.9914C16.7916 63.9914 32.6456 71.0098 44.1982 82.3844M-0.701722 95.9914C7.955 95.9914 15.8089 99.4288 21.5694 105.013" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M0 0C35.3511 0 67.3551 14.3309 90.5193 37.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'doz' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 128L0 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M30.0589 30.0589C48.804 11.3137 79.196 11.3137 97.9411 30.0589C116.686 48.804 116.686 79.196 97.9411 97.9411" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M52.6863 52.6863C58.9347 46.4379 69.0653 46.4379 75.3137 52.6863C81.5621 58.9347 81.5621 69.0653 75.3137 75.3137" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M41.3726 41.3726C53.8694 28.8758 74.1306 28.8758 86.6274 41.3726C99.1242 53.8694 99.1242 74.1306 86.6274 86.6274" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'duc' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dul' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 16C90.5097 16 112 37.4903 112 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 64L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dun' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dur' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - == -:: - :- 'dus' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 -3.05151e-06C32 53.0193 74.9807 96 128 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'dut' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dux' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-2.79795e-06 -3.55988e-06C70.6924 -4.40288e-06 128 57.3075 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dyl' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M2.03434e-06 128C70.6924 128 128 70.6925 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dyn' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dyr' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'dys' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-3.8147e-06 1.11901e-05C-7.24633e-07 35.3462 28.6538 64 64 64C99.3462 64 128 35.3462 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'dyt' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'fab' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'fad' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'fal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 128L128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M0 0C35.3511 0 67.3551 14.3309 90.5193 37.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M0 32C26.5077 32 50.5061 42.7436 67.8783 60.1138" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M0 64C17.6721 64 33.6713 71.1626 45.2529 82.7432" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M0 95.6284C8.83603 95.6284 16.8356 99.2097 22.6264 105" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fam' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'fan' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'fas' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "96" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'feb' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M7.37542e-06 -3.56072e-06C1.19529e-06 70.6924 57.3075 128 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fed' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'fel' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fen' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M0 128C4.63574e-06 92.6489 14.3309 60.6449 37.5 37.4807" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1217" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'fer' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fes' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fet' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'fex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.6499 47.6499)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'fid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00291443 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'fig' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fil' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "32" - =y1 "2.18557e-08" - =x2 "32" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fin' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "98" - =y1 "2.18557e-08" - =x2 "98" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fip' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'fir' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "80.0036" - =y1 "79.9965" - =x2 "112.004" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "16.0035" - =y1 "15.9965" - =x2 "48.0035" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'fit' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'fod' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'fog' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M86.6274 86.6274C99.1242 74.1306 99.1242 53.8694 86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fon' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'fop' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M16 64C16 90.5097 37.4903 112 64 112" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'for' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "96" - =y1 "2.18557e-08" - =x2 "96" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'fos' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M96 0C96 53.0193 53.0193 96 0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0C64 35.3462 35.3462 64 0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 0C32 17.6731 17.6731 32 0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fot' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "15.9964" - =y1 "111.997" - =x2 "47.9964" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'ful' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fun' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "15.9964" - =y1 "111.997" - =x2 "47.9964" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "112" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'fur' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M86.8823 41.6275C74.3855 29.1307 54.1242 29.1307 41.6274 41.6275C29.1307 54.1243 29.1307 74.3855 41.6274 86.8823" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fus' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M32 128C32 110.327 17.6731 96 0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'fyl' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M22.1288 22.6299C16.0075 28.7511 8.0234 31.874 0.00134547 31.9986M44.7562 45.2573C32.3866 57.6269 16.2133 63.8747 0.00134277 64.0005M67.3836 67.8847C48.7656 86.5027 24.403 95.8749 0.00134412 96.0012" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'fyn' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'fyr' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00268555 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.6499 47.6499)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'hab' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M60.1244 67.3837C41.5063 48.7657 32.1342 24.4031 32.0079 0.00145601M82.7518 44.7563C70.3822 32.3867 64.1344 16.2134 64.0086 0.00145196M105.379 22.1289C99.258 16.0077 96.1351 8.02351 96.0105 0.00145196" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'hac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'had' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'hal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64.5" - =y1 "-0.5" - =x2 "64.5" - =y2 "127.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M16 64C16 90.5097 37.4903 112 64 112" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'han' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - == -:: - :- 'hap' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'har' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'has' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'hat' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "16" - =cy "16" - =r "8" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M48 32C48 40.8366 40.8366 48 32 48C23.1634 48 16 40.8366 16 32C16 23.1634 23.1634 16 32 16C40.8366 16 48 23.1634 48 32ZM32 40C36.4183 40 40 36.4183 40 32C40 27.5817 36.4183 24 32 24C27.5817 24 24 27.5817 24 32C24 36.4183 27.5817 40 32 40Z" - =fill bg; - == -:: - :- 'hav' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "96" - =y1 "2.18557e-08" - =x2 "96" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'heb' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M2.03434e-06 128C70.6924 128 128 70.6925 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'hec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'hep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.00285417" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'hes' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M48 96C48 104.837 40.8366 112 32 112C23.1634 112 16 104.837 16 96C16 87.1634 23.1634 80 32 80C40.8366 80 48 87.1634 48 96ZM32 104C36.4183 104 40 100.418 40 96C40 91.5817 36.4183 88 32 88C27.5817 88 24 91.5817 24 96C24 100.418 27.5817 104 32 104Z" - =fill bg; - == -:: - :- 'het' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 128L96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'hex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'hid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M2.03434e-06 128C70.6924 128 128 70.6925 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.52575e-06 96C53.0193 96 96 53.0193 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M5.08584e-07 32C17.6731 32 32 17.6731 32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'hil' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "8.74228e-08" - =y1 "64" - =x2 "128" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'hin' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "32" - =y1 "2.18557e-08" - =x2 "32" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M48 64C48 72.8366 40.8366 80 32 80C23.1634 80 16 72.8366 16 64C16 55.1634 23.1634 48 32 48C40.8366 48 48 55.1634 48 64ZM32 72C36.4183 72 40 68.4183 40 64C40 59.5817 36.4183 56 32 56C27.5817 56 24 59.5817 24 64C24 68.4183 27.5817 72 32 72Z" - =fill bg; - == -:: - :- 'hob' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'hoc' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'hod' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'hol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'hop' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'hos' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0036" - =y1 "79.9965" - =x2 "112.004" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "16.0036" - =y1 "15.9965" - =x2 "48.0036" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "48" - =cy "48" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "48" - =cy "48" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "80" - =cy "47" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "80" - =cy "47" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "80" - =cy "81" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "80" - =cy "81" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "48" - =cy "80" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "48" - =cy "80" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'hul' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "48" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "48" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'hus' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 96C46.3269 96 32 81.6731 32 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'hut' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lab' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "15.9964" - =y1 "111.997" - =x2 "47.9964" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 -9.40976e-06C64 70.6924 92.6538 128 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 -7.63193e-07C32 70.6924 74.9807 128 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lad' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "95.35" - =y1 "32.7071" - =x2 "32.0571" - =y2 "96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lag' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 112C90.5097 112 112 90.5097 112 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lan' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "32" - =y1 "2.18557e-08" - =x2 "32" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lap' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "112" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "112" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lar' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "2.78181e-08" - =y1 "64" - =x2 "128" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'las' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lat' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M2.03434e-06 128C70.6924 128 128 70.6925 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.52575e-06 96C53.0193 96 96 53.0193 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M5.08584e-07 32C17.6731 32 32 17.6731 32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lav' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 128C92.6489 128 60.6449 113.669 37.4807 90.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'leb' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-1.64036e-05 32C53.0193 32 96 74.9807 96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'led' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'leg' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M7.63192e-07 32C17.6731 32 32 46.3269 32 64C32 81.6731 17.6731 96 0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'len' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 96C110.327 96 96 110.327 96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ler' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'let' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lev' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "15.9965" - =y1 "111.997" - =x2 "47.9965" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'lib' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "16.0036" - =y1 "15.9965" - =x2 "48.0036" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'lig' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lin' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "128" - =x2 "64" - =y2 "-6.55671e-08" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "80" - =cy "64" - =r "8" - =fill bg - =stroke "none"; - == -:: - :- 'lis' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-4.70488e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lit' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00286865 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'liv' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-5.21346e-06 32C70.6924 32 128 17.6731 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M3.4331e-06 96C70.6924 96 128 53.0193 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'loc' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 96C74.9807 96 32 53.0193 32 -4.19629e-06" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lod' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M16 64C16 90.5097 37.4903 112 64 112" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lom' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lon' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M2.03434e-06 128C70.6924 128 128 70.6925 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.52575e-06 96C53.0193 96 96 53.0193 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M5.08584e-07 32C17.6731 32 32 17.6731 32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lop' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-8.87604e-09" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "32" - =x2 "-8.87604e-09" - =y2 "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lor' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'los' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'luc' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-8.87604e-09" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lud' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0L96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lug' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - == -:: - :- 'lun' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lup' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 16C90.5097 16 112 37.4903 112 64C112 90.5097 90.5097 112 64 112" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "64" - =x2 "-8.87604e-09" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lur' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0L96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lus' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lut' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lux' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'lyd' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lyn' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lyr' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00268555 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "80" - =cy "48" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "80" - =cy "48" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lys' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "16" - =cy "112" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "112" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'lyt' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "80.0035" - =y1 "79.9965" - =x2 "112.003" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'lyx' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'mag' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9964" - =x2 "112.004" - =y2 "111.996" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'map' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0036" - =y1 "79.9965" - =x2 "112.004" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mar' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.0029152 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 64L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M86.6274 86.6274C99.1242 74.1307 99.1242 53.8694 86.6274 41.3726C74.1306 28.8758 53.8694 28.8758 41.3726 41.3726" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M75.3137 75.3137C81.5621 69.0653 81.5621 58.9347 75.3137 52.6863C69.0653 46.4379 58.9347 46.4379 52.6863 52.6863" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M97.9411 97.9411C116.686 79.1959 116.686 48.804 97.9411 30.0589C79.196 11.3137 48.804 11.3137 30.0589 30.0589" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mas' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'mat' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 32C110.327 32 96 17.6731 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'meb' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 -3.05151e-06C32 53.0193 74.9807 96 128 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9965" - =x2 "112.003" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'med' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "96" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'meg' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mel' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "15.9964" - =y1 "111.997" - =x2 "47.9964" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mer' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mes' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "15.9964" - =y1 "111.996" - =x2 "47.9964" - =y2 "79.9964" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'met' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 128L32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mev' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'mic' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-2.09815e-06 80C26.5097 80 48 101.49 48 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mig' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "80.0036" - =y1 "79.9965" - =x2 "112.004" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mil' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "32" - =x2 "-4.37114e-08" - =y2 "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "96" - =x2 "-4.37114e-08" - =y2 "96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'min' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'mip' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 128C92.6538 128 64 99.3462 64 64C64 28.6538 92.6538 4.215e-07 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mir' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "16.0036" - =y1 "15.9964" - =x2 "48.0036" - =y2 "47.9964" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 64C96 46.3269 81.6731 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mis' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00286865 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'mit' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'moc' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mod' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 96L128 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "16.0035" - =y1 "15.9965" - =x2 "48.0035" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mog' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M112 64C112 90.5097 90.5097 112 64 112C37.4903 112 16 90.5097 16 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M112 0C112 26.5097 90.5097 48 64 48C37.4903 48 16 26.5097 16 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mon' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'mop' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mor' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "16.0035" - =y1 "15.9964" - =x2 "48.0035" - =y2 "47.9964" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "15.9964" - =y1 "111.996" - =x2 "47.9964" - =y2 "79.9964" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mos' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mot' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 96C110.327 96 96 81.6731 96 64C96 46.3269 110.327 32 128 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mud' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "80" - =cy "80" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "80" - =cy "80" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mug' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mul' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9964" - =x2 "112.003" - =y2 "111.996" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mun' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64C92.6538 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mur' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'mus' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M96 128C96 74.9807 53.0193 32 0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'mut' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'myl' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "16.0035" - =y1 "15.9965" - =x2 "48.0035" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "16" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "16" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'myn' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 1.52638e-06C57.3076 -7.74381e-06 9.2702e-06 57.3075 0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32C74.9807 32 32 74.9807 32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96C110.327 96 96 110.327 96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'myr' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'nal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M2.82114e-06 110C60.7513 110 110 60.7513 110 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-5.09828e-06 73C40.3168 73 73 40.3168 73 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-6.63647e-07 37C20.4345 37 37 20.4345 37 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nam' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "8.74228e-08" - =y1 "64" - =x2 "128" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "112" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "112" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nap' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nar' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "8" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nat' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-1.52588e-05 128C-9.07866e-06 57.3075 57.3076 1.44926e-06 128 7.62939e-06" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nav' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'neb' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 32C74.9807 32 32 74.9807 32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ned' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nel' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00268555 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M96 1.90735e-06C96 53.0193 53.0193 96 0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nem' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 128C57.3076 128 3.09007e-06 70.6925 0 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96C74.9807 96 32 53.0193 32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C92.6538 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32C110.327 32 96 17.6731 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ner' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "15.9965" - =y1 "111.997" - =x2 "47.9965" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nes' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'net' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 64L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nev' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9964" - =x2 "112.003" - =y2 "111.996" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'nib' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 128C92.6538 128 64 70.6925 64 7.63192e-07" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nil' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-8.87604e-09" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "32" - =x2 "-8.87604e-09" - =y2 "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nim' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nis' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 32C74.9807 32 32 74.9807 32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00285435 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'noc' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nod' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "1.51277e-05" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nom' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nop' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.65)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nor' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 96C46.3269 96 32 81.6731 32 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nos' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nov' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M2.03434e-06 128C70.6924 128 128 70.6925 128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.52575e-06 96C53.0193 96 96 53.0193 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M5.08584e-07 32C17.6731 32 32 17.6731 32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nub' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nul' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'num' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nup' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 16C90.5097 16 112 37.4903 112 64C112 90.5097 90.5097 112 64 112" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nus' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M0.000105172 128C35.3582 128 67.3679 113.664 90.5332 90.4863" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "31" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "31" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nut' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9964" - =x2 "112.003" - =y2 "111.996" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.6499 47.6499)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nux' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nyd' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nyl' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M0 128C4.63574e-06 92.6489 14.3309 60.6449 37.5 37.4807" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1217" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nym' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0L96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nyr' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00268555 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M95.9984 0C95.9984 26.3298 85.3985 50.1839 68.2332 67.5278M63.9983 0C63.9983 17.4933 56.9799 33.3473 45.6054 44.8999M31.9983 0C31.9983 8.65672 28.5609 16.5106 22.9766 22.2711" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nys' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "16" - =cy "112" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "112" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'nyt' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 32C81.6731 32 96 46.3269 96 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 16C90.5097 16 112 37.4903 112 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'nyx' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'pac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'pad' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'pag' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "15.9964" - =y1 "111.997" - =x2 "47.9964" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pan' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M41.3726 86.6274C28.8758 74.1306 28.8758 53.8693 41.3726 41.3725C53.8694 28.8758 74.1306 28.8758 86.6274 41.3725" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'par' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.693 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pas' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0L96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pat' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 -2.67054e-06C32 53.0193 74.9807 96 128 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 -1.78036e-06C64 35.3462 92.6538 64 128 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 -8.9018e-07C96 17.6731 110.327 32 128 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'ped' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'peg' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 0C96 17.6731 81.6731 32 64 32C46.3269 32 32 17.6731 32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pel' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pem' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 128C64 92.6538 35.3462 64 0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pen' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 0C96 17.6731 81.6731 32 64 32C46.3269 32 32 17.6731 32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'per' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pes' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 112C90.5097 112 112 90.5097 112 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "-0.00285417" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'pet' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9964" - =x2 "112.003" - =y2 "111.996" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'pic' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 128C96 74.9807 53.0193 32 0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 128C64 92.6538 35.3462 64 0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 128C32 110.327 17.6731 96 0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'pil' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'pin' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'pit' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'poc' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64.5" - =y1 "-0.5" - =x2 "64.5" - =y2 "127.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "96.5" - =y1 "-0.5" - =x2 "96.5" - =y2 "127.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "32.5" - =y1 "-0.5" - =x2 "32.5" - =y2 "127.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pod' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "96" - =x2 "-8.87604e-09" - =y2 "96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "32" - =x2 "-8.87604e-09" - =y2 "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pon' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - == -:: - :- 'pos' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'pub' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pun' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 64C96 46.3269 81.6731 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M80 64C80 55.1634 72.8366 48 64 48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pur' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M3.73284e-05 64C17.6633 64 33.6554 56.8445 45.2356 45.2741" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'put' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'pyl' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-5.59506e-06 128C35.3462 128 64 99.3462 64 64C64 28.6538 35.3462 1.54503e-06 0 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'pyx' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'rab' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =x1 "15.9965" - =y1 "111.997" - =x2 "47.9964" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'rad' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'rag' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "16.0036" - =y1 "15.9965" - =x2 "48.0036" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ral' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ram' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'ran' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00291443 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rap' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "-1.29797e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "96" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'rav' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'reb' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 -9.40976e-06C57.3075 -6.31969e-06 -3.09007e-06 57.3075 0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'red' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'ref' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'reg' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 96C110.327 96 96 81.6731 96 64C96 46.3269 110.327 32 128 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rel' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rem' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 64C92.6538 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ren' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9965" - =x2 "112.003" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 128C32 74.9807 74.9807 32 128 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'res' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9965" - =x2 "112.003" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ret' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rev' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "15.9965" - =y1 "111.997" - =x2 "53.9965" - =y2 "73.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "112" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'rex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'rib' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "8.74228e-08" - =y1 "64" - =x2 "128" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ric' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 128C96 74.9807 53.0193 32 0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0L96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rig' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'ril' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.693 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'rin' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "32" - =y1 "2.18557e-08" - =x2 "32" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rip' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M96 64C96 46.3269 81.6731 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "96" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'ris' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rit' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'riv' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'roc' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - ;circle - =cx "112" - =cy "16" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "112" - =cy "16" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'rol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 16C90.5097 16 112 37.4903 112 64C112 90.5097 90.5097 112 64 112" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ron' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0C128 70.6924 70.6925 128 0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rop' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ros' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'rov' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ruc' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rud' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rul' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9964" - =x2 "112.003" - =y2 "111.996" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'rum' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M5.08584e-07 32C17.6731 32 32 17.6731 32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'run' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0L96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rup' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 112C90.5097 112 112 90.5097 112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rus' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 128C64 92.6538 35.3462 64 0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rut' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'rux' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 64C32 81.6731 46.3269 96 64 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ryc' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ryd' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M96 64C96 81.6731 81.6731 96 64 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ryg' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-2.79795e-06 -3.55988e-06C70.6924 -4.40288e-06 128 57.3075 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "16.0035" - =y1 "15.9965" - =x2 "48.0035" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'ryl' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 128C92.6489 128 60.6449 113.669 37.4807 90.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'rym' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ryn' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 128C57.3075 128 -3.09007e-06 70.6925 0 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ryp' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'rys' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M1.52575e-06 96C53.0193 96 96 53.0193 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ryt' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 -7.62939e-06L64 -2.03434e-06C99.3462 1.05573e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'ryx' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sab' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.65)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'sal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 128L128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M-0.701724 31.9914C25.6281 31.9914 49.4822 42.5913 66.8261 59.7565M-0.701723 63.9914C16.7916 63.9914 32.6456 71.0098 44.1982 82.3844M-0.701722 95.9914C7.955 95.9914 15.8089 99.4288 21.5694 105.013" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sam' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'san' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'sap' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "96" - =cy "64" - =r "8" - =fill bg - =stroke "none"; - == -:: - :- 'sar' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sat' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 128C128 57.3076 70.6925 0 0 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sav' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M96 64C96 46.3269 81.6731 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'seb' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64C92.6538 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sed' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sef' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'seg' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 128C32 110.327 46.3269 96 64 96C81.6731 96 96 110.327 96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sel' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "8" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sem' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'sen' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 128C96 110.327 81.6731 96 64 96C46.3269 96 32 110.327 32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 128L64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 128L32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 128L96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ser' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'set' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 64L128 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sev' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sib' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 9.40976e-06C64 35.3462 92.6538 64 128 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sic' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'sid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 128C110.327 128 96 113.673 96 96C96 78.3269 110.327 64 128 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sig' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sil' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "16.0036" - =y1 "15.9965" - =x2 "48.0036" - =y2 "47.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'sim' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sip' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M16 64C16 37.4903 37.4903 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sit' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'siv' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'soc' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "16" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "16" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'sog' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 96C81.6731 96 96 81.6731 96 64C96 46.3269 81.6731 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L-5.96046e-08 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'som' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'son' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "127.553" - =y1 "128.224" - =x2 "63.5528" - =y2 "0.223598" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sop' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sor' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 0C128 35.3511 113.669 67.3551 90.5 90.5193" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M96 0C96 26.5077 85.2564 50.5061 67.8862 67.8783" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 0C64 17.6721 56.8374 33.6713 45.2568 45.2529" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32.3716 0C32.3716 8.83603 28.7903 16.8356 23 22.6264" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sov' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 128L128 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 128C92.6489 128 60.6449 113.669 37.4807 90.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96C101.492 96 77.4939 85.2564 60.1217 67.8862" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C110.328 64 94.3287 56.8374 82.7471 45.2568" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32.3716C119.164 32.3716 111.164 28.7903 105.374 23" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sub' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sud' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-8.87604e-09" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'sug' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "16" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "80" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "80" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sul' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 96C46.3269 96 32 81.6731 32 64C32 46.3269 46.3269 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sum' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sun' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =stroke "none"; - ;circle - =cx "80" - =cy "80" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "80" - =cy "80" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "80" - =cy "48" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "80" - =cy "48" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "48" - =cy "48" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "48" - =cy "48" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "48" - =cy "80" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "48" - =cy "80" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sup' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 112C90.5097 112 112 90.5097 112 64C112 37.4903 90.5097 16 64 16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sur' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M3.73284e-05 64.0001C17.6633 64.0001 33.6554 56.8446 45.2356 45.2742" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M0.000105172 128C35.3582 128 67.3679 113.664 90.5332 90.4863" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'sut' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'syd' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 16C37.4903 16 16 37.4903 16 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'syl' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'sym' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "96.5" - =y1 "3.07317e-08" - =x2 "96.5" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'syn' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 0C35.3511 0 67.3551 14.3309 90.5193 37.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M0 32C26.5077 32 50.5061 42.7436 67.8783 60.1138" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M0 64C17.6721 64 33.6713 71.1626 45.2529 82.7432" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M0 95.6284C8.83603 95.6284 16.8356 99.2097 22.6264 105" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'syp' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'syr' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'syt' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'syx' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 128C4.63574e-06 92.6488 14.3309 60.6449 37.5 37.4807" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 128C32 101.492 42.7436 77.4939 60.1138 60.1216" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 128C64 110.328 71.1626 94.3287 82.7432 82.7471" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M95.6284 128C95.6284 119.164 99.2097 111.164 105 105.374" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'tab' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "8" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'tac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tad' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tag' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0036" - =y1 "79.9964" - =x2 "112.004" - =y2 "111.996" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "0.5" - =y1 "-0.5" - =x2 "181.5" - =y2 "-0.5" - =transform "matrix(-0.707107 0.707107 0.707107 0.707107 128.71 0)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M96 128C96 74.9807 53.0193 32 0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tam' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "96" - =x2 "-8.87604e-09" - =y2 "96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "32" - =x2 "-8.87604e-09" - =y2 "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tan' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M96 128C96 74.9807 53.0193 32 0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 128C64 92.6538 35.3462 64 0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M48 128C48 101.49 26.5097 80 0 80" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M32 128C32 110.327 17.6731 96 0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M16 128C16 119.163 8.83656 112 0 112" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 128C128 57.3075 70.6925 0 0 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tap' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "128" - =y1 "64" - =x2 "-8.87604e-09" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 32C81.6731 32 96 46.3269 96 64C96 81.6731 81.6731 96 64 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tar' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tas' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M64 32C81.6731 32 96 46.3269 96 64C96 81.6731 81.6731 96 64 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'teb' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M1.52575e-06 96C53.0193 96 96 53.0193 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tec' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9965" - =x2 "112.003" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'ted' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'teg' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 80C119.163 80 112 72.8366 112 64C112 55.1634 119.163 48 128 48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tel' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "15" - =cy "112" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "15" - =cy "112" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;path - =d "M0 0L127.986 127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M32 0L128 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 0L128 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M96 0L128 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'tem' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "-0.00285417" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'ten' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "48" - =cy "48" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "48" - =cy "48" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "80" - =cy "48" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "80" - =cy "48" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "80" - =cy "80" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "80" - =cy "80" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "48" - =cy "80" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "48" - =cy "80" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M1.14479e-06 96C53.0193 96 96 53.0193 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'ter' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "96.5" - =y1 "3.07317e-08" - =x2 "96.5" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tes' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tev' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "15.9965" - =y1 "111.997" - =x2 "47.9965" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'tic' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 32C110.327 32 96 17.6731 96 -1.39876e-06" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "96" - =y1 "2.18557e-08" - =x2 "96" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M112 32C112 40.8366 104.837 48 96 48C87.1634 48 80 40.8366 80 32C80 23.1634 87.1634 16 96 16C104.837 16 112 23.1634 112 32ZM96 40C100.418 40 104 36.4183 104 32C104 27.5817 100.418 24 96 24C91.5817 24 88 27.5817 88 32C88 36.4183 91.5817 40 96 40Z" - =fill bg; - == -:: - :- 'til' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0036" - =y1 "79.9965" - =x2 "112.004" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tim' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00291443 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'tin' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "32" - =y1 "2.18557e-08" - =x2 "32" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tip' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 0L64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'tir' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tob' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'toc' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "96" - =x2 "-8.87604e-09" - =y2 "96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tod' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "64" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tog' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 96C46.3269 96 32 81.6731 32 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'tol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "128" - =y1 "64" - =x2 "-4.37114e-08" - =y2 "64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M16 128C16 101.49 37.4903 80 64 80C90.5097 80 112 101.49 112 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tom' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'ton' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 32C74.9807 32 32 74.9807 32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96C110.327 96 96 110.327 96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'top' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "16" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tor' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tuc' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96L0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tud' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tug' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tul' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'tun' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 64V128H0L2.79753e-06 64C4.34256e-06 28.6538 28.6538 -1.54503e-06 64 0C99.3462 1.54503e-06 128 28.6538 128 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tus' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tux' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tyc' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'tyd' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00280762 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.6499)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "15.9964" - =y1 "111.997" - =x2 "47.9964" - =y2 "79.9965" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'tyl' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M7.37542e-06 -3.56072e-06C1.19529e-06 70.6924 57.3075 128 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tyn' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 -2.28831e-06C57.3076 -3.13131e-06 8.42999e-07 57.3075 0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'typ' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M96 1.90735e-06C96 53.0193 53.0193 96 0 96" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tyr' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 0L128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M128 64C92.6538 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M0 64C35.3462 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'tyv' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M256 0L128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'wac' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "16" - =cy "112" - =r "11.5" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - ;circle - =cx "16" - =cy "112" - =r "9" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - :: =stroke-width "2" - == -:: - :- 'wal' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64.5" - =y1 "-0.5" - =x2 "64.5" - =y2 "127.5" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "32" - =y1 "2.18557e-08" - =x2 "32" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wan' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - == -:: - :- 'wat' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'web' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 128C128 57.3075 70.6925 0 0 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wed' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'weg' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M79.5254 0C79.5254 8.83656 72.3619 16 63.5254 16C54.6888 16 47.5254 8.83656 47.5254 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wel' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 32C74.9807 32 32 74.9807 32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 64C92.6538 64 64 92.6538 64 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96C110.327 96 96 110.327 96 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wen' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - == -:: - :- 'wep' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "96" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'wer' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 64L5.59506e-06 0L128 1.11901e-05V64C128 99.3462 99.3462 128 64 128C28.6538 128 -4.6351e-06 99.3462 0 64Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M32 0L32 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'wes' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "80.0035" - =y1 "79.9965" - =x2 "112.003" - =y2 "111.997" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "112" - =cy "112" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "112" - =cy "112" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'wet' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M64 64H0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wex' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'wic' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 0C57.3075 8.42999e-07 -8.42999e-07 57.3075 0 128H128V0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'wid' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "48.0035" - =y1 "80.0036" - =x2 "16.0035" - =y2 "112.004" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =fill-rule "evenodd" - =clip-rule "evenodd" - =stroke "none" - =d "M80 64C80 72.8366 72.8366 80 64 80C55.1634 80 48 72.8366 48 64C48 55.1634 55.1634 48 64 48C72.8366 48 80 55.1634 80 64ZM64 72C68.4183 72 72 68.4183 72 64C72 59.5817 68.4183 56 64 56C59.5817 56 56 59.5817 56 64C56 68.4183 59.5817 72 64 72Z" - =fill bg; - == -:: - :- 'win' - |= [fg=tape bg=tape] - :~ ;rect - =width "128" - =height "128" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wis' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 0C0 70.6925 57.3075 128 128 128V0H0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 64L0 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 32L0 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wit' - |= [fg=tape bg=tape] - :~ ;path - =d "M0 127.946C0.0292286 57.2783 57.3256 3.08928e-06 128 0C128 70.6823 70.7089 127.984 0.0305092 128C0.0203397 128 0.01017 128 2.36469e-09 128L0 127.946Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =x1 "64" - =y1 "2.18557e-08" - =x2 "64" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "32" - =y1 "2.18557e-08" - =x2 "32" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "96" - =y1 "2.18557e-08" - =x2 "96" - =y2 "128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wol' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M0 64L128 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M128 96C110.327 96 96 81.6731 96 64C96 46.3269 110.327 32 128 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wor' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 0H128V128H64C28.6538 128 0 99.3462 0 64C0 28.6538 28.6538 0 64 0Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;line - =y1 "-0.5" - =x2 "45.2548" - =y2 "-0.5" - =transform "matrix(0.707107 -0.707107 -0.707107 -0.707107 79.65 47.65)" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;line - =x1 "-0.0029152" - =x2 "127.983" - =y2 "127.986" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M64 96C46.3269 96 32 81.6731 32 64" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "64" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'wyc' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - == -:: - :- 'wyd' - |= [fg=tape bg=tape] - :~ ;path - =d "M0.0541 0C70.7217 0.0292317 128 57.3256 128 128C57.3177 128 0.0164917 70.7089 7.62806e-06 0.0305091C7.62851e-06 0.0203397 -4.44317e-10 0.01017 0 0H0.0541Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;path - =d "M32 64C32 46.3269 46.3269 32 64 32" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "32" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'wyl' - |= [fg=tape bg=tape] - :~ ;path - =d "M128 128C128 57.3076 70.6925 6.18013e-06 1.11901e-05 0L0 128L128 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-3.8147e-06 128C-7.24633e-07 92.6538 28.6538 64 64 64C99.3462 64 128 92.6538 128 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wyn' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M1.52575e-06 96C53.0193 96 96 53.0193 96 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M1.01717e-06 64C35.3462 64 64 35.3462 64 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;path - =d "M5.08584e-07 32C17.6731 32 32 17.6731 32 0" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - == -:: - :- 'wyt' - |= [fg=tape bg=tape] - :~ ;path - =d "M64 128H0L5.59506e-06 0L64 5.59506e-06C99.3462 8.68512e-06 128 28.6538 128 64C128 99.3462 99.3462 128 64 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M128 0L0 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "64" - =cy "64" - =r "48" - =vector-effect "non-scaling-stroke" - :: =stroke bg - =fill "none"; - ;circle - =cx "16" - =cy "64" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "16" - =cy "64" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'wyx' - |= [fg=tape bg=tape] - :~ ;path - =d "M5.59506e-06 128C70.6925 128 128 70.6925 128 0L0 5.59506e-06L5.59506e-06 128Z" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - ;path - =d "M-0.00292969 0L127.997 128" - =vector-effect "non-scaling-stroke" - :: =stroke bg - :: =stroke-linecap "square" - =fill "none"; - ;circle - =cx "32" - =cy "96" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "96" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "32" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "32" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - ;circle - =cx "96" - =cy "32" - =r "11.5" - :: =fill fg - =vector-effect "non-scaling-stroke" - =stroke fg; - ;circle - =cx "96" - =cy "32" - =r "9" - =fill bg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "2" - == -:: - :- 'zod' - |= [fg=tape bg=tape] - :~ ;circle - =cx "64" - =cy "64" - =r "64" - :: =fill fg - =vector-effect "non-scaling-stroke"; - :: =stroke bg - :: =stroke-width "0.5" - == -== \ No newline at end of file diff --git a/desk/lib/tarball.hoon b/desk/lib/tarball.hoon index 53489d4..27f0ac5 100644 --- a/desk/lib/tarball.hoon +++ b/desk/lib/tarball.hoon @@ -2,8 +2,21 @@ :: /+ multipart |% -+$ neck @tas :: a "mark" at the directory level ++$ neck rail :: a nexus identity (directory-level mark) ++$ blot rail :: a mark identity (hierarchical) ++$ bars [a=blot b=blot] :: blot pair for conversions ++$ sage (pair blot vase) :: grubbery cage: blot-typed content ++$ bask (pair blot noun) :: grubbery page: blot-typed noun +$ metadata (map @t @t) +:: Compiled mark core: built once from mark source, used for vale + tubes +:: ++$ marc + $_ ^? + |% + ++ vale |~(* *vase) + ++ grow |~(blot *tube:clay) + ++ grab |~(blot *tube:clay) + -- :: Path types with file/directory distinction :: +$ rail [=path name=@ta] :: path to file (dir + filename) @@ -11,15 +24,30 @@ +$ lane (each rail fold) :: [%& rail] file or [%| fold] directory +$ bend (pair @ud lane) :: relative: steps up + destination lane +$ road (each lane bend) :: [%& lane] absolute or [%| bend] relative +:: +:: TODO: consider nexus-relative roads +:: +:: A road variant that resolves relative to nexus boundaries (necks) +:: instead of directory depth. Would eliminate the %| N offset footgun. +:: +:: */path -- resolve from the nearest governing nexus (walk up to first neck) +:: **/path -- resolve from the nexus above that (walk up past first neck to second) +:: *[neck]/path -- resolve from the nearest governing nexus with this specific neck +:: e.g. *[/claw/app]/config.json finds the nearest /claw/app nexus above +:: +:: Resolution: walk up from fiber location, check each directory for a neck. +:: */ stops at the first neck found. *[neck] stops at the first neck matching the name. +:: ** variants skip the first match and find the next one up. +:: :: Symlink: untyped path reference (resolved at lookup time) :: +$ symlink (each path (pair @ud path)) -+$ content [=metadata =cage] ++$ content [=metadata =sage] +$ lump [=metadata neck=(unit neck) contents=(map @ta content)] +$ ball (axal lump) :: simple descriptive file tree :: -+$ node [neck=(unit neck) files=(map @ta @tas)] ++$ node [neck=(unit neck) files=(map @ta blot)] +$ tree (axal node) :: Tarball archive types :: @@ -120,6 +148,15 @@ |= [here=rail dest=rail] ^- bend (make-bend here [%& dest]) +:: Extend a directory road by appending inner path + filename +:: +++ extend-road + |= [=road inner=path name=@ta] + ^- ^road + ?- -.road + %& [%& %& (weld ?-(-.p.road %& (snoc path.p.p.road name.p.p.road), %| p.p.road) inner) name] + %| [%| p.p.road %& (weld ?-(-.q.p.road %& (snoc path.p.q.p.road name.p.q.p.road), %| p.q.p.road) inner) name] + == :: Compute common prefix of two paths :: ++ prefix @@ -138,19 +175,88 @@ ?~ pax ~ ?. =(i.pre i.pax) ~ $(pre t.pre, pax t.pax) -:: Helper: wrap symlink as cage for storage +:: +rail-to-arm: encode a rail as a flat @tas for display/arm names +:: +:: [/ %txt] → %txt +:: [/eyre %bindings] → %eyre--bindings +:: [/foo/bar %baz] → %foo--bar--baz +:: +++ rail-to-arm + |= =rail + ^- @tas + ?~ path.rail name.rail + %- crip + %- zing + %+ join "--" + (snoc (turn path.rail trip) (trip name.rail)) +:: +arm-to-rail: decode a flat @tas arm name back to a rail +:: +:: %txt → [/ %txt] +:: %eyre--bindings → [/eyre %bindings] +:: %foo--bar--baz → [/foo/bar %baz] +:: +++ arm-to-rail + |= arm=@tas + ^- rail + =/ t=tape (trip arm) + =/ segs=(list tape) (split-on-double-hyphen t) + ?~ segs [/ arm] + ?~ t.segs [/ arm] + :- (turn (snip `(list tape)`segs) crip) + (crip (rear segs)) +:: +++ split-on-double-hyphen + |= t=tape + ^- (list tape) + =| acc=tape + =| res=(list tape) + |- + ?~ t (snoc res acc) + ?: ?& =('-' i.t) + ?=(^ t.t) + =('-' i.t.t) + == + $(t t.t.t, acc ~, res (snoc res acc)) + $(t t.t, acc (snoc acc i.t)) +:: +ext-to-neck: parse underscore-separated extension into a neck rail +:: +:: %app → [/ %app] +:: %wallet_app → [/wallet %app] +:: %wallet_account → [/wallet %account] :: -++ symlink-to-cage +++ ext-to-neck + |= ext=@ta + ^- rail + =/ t=tape (trip ext) + =/ segs=(list tape) (split-on-underscore t) + ?~ segs [/ ext] + ?~ t.segs [/ ext] + :- (turn (snip `(list tape)`segs) crip) + (crip (rear segs)) +:: +++ split-on-underscore + |= t=tape + ^- (list tape) + =| acc=tape + =| res=(list tape) + |- + ?~ t (snoc res acc) + ?: =('_' i.t) + $(t t.t, acc ~, res (snoc res acc)) + $(t t.t, acc (snoc acc i.t)) +:: Helper: wrap symlink as sage for storage +:: +++ symlink-to-sage |= =symlink - ^- cage - [%symlink !>(symlink)] + ^- sage + [[/ %symlink] !>(symlink)] :: -++ cage-to-symlink - |= =cage +++ sage-to-symlink + |= =sage ^- (unit symlink) - ?. =(%symlink p.cage) + ?. =([/ %symlink] p.sage) ~ - `!<(symlink q.cage) + `!<(symlink q.sage) :: ++ ext-to-mime |= ext=@ta @@ -184,7 +290,7 @@ == ~ :: must start with letter ((sand %ta) (crip text)) - (cook |=(a=tape (rap 3 ^-((list @) a))) (star ;~(pose aln hep))) + (cook |=(a=tape (rap 3 ^-((list @) a))) (star ;~(pose aln hep cab))) :: Extract file extension from filename :: Examples: 'data.json' -> `%json, 'page.html-css' -> `%html-css, 'noext' -> ~ :: @@ -195,18 +301,19 @@ =/ result (;~(sfix pext dot) [1^1 reversed]) ?~ q.result ~ `p.u.q.result -:: Convert mime back to cage using mark system +:: Convert mime back to sage using mark system :: Returns ~ if no extension or no conversion available :: -++ mime-to-cage - |= [conversions=(map mars:clay tube:clay) filename=@ta =mime] - ^- (unit cage) +++ mime-to-sage + |= [conversions=(map bars tube:clay) filename=@ta =mime] + ^- (unit sage) =/ ext=(unit @ta) (parse-extension filename) ?~ ext ~ - ?~ tube=(~(get by conversions) %mime u.ext) + =/ =bars [[/ %mime] [/ u.ext]] + ?~ tube=(~(get by conversions) bars) ~ - `[u.ext (u.tube !>(mime))] + `[[/ u.ext] (u.tube !>(mime))] :: Determine MIME type from Content-Type header and/or file extension :: Prefers explicit Content-Type, falls back to extension inference :: Returns path-formatted mime type (e.g., /text/plain) @@ -321,6 +428,21 @@ :: Append remaining path (weld resolved-base pax) == +:: Split a tape on '/', filtering empty segments +:: +++ split-on-slash + |= t=tape + ^- (list tape) + =| acc=(list tape) + =| cur=tape + |- + ?~ t + ?~ cur (flop acc) + (flop [(flop cur) acc]) + ?: =(i.t '/') + ?~ cur $(t t.t) + $(t t.t, acc [(flop cur) acc], cur ~) + $(t t.t, cur [i.t cur]) :: Process multipart file uploads into ball :: ++ from-parts @@ -328,7 +450,7 @@ base-path=path parts=(list [@t part:multipart]) now=@da - conversions=(map mars:clay tube:clay) + conversions=(map bars tube:clay) == ^- ball ?~ parts base @@ -340,9 +462,11 @@ ?~ file.file-part %uploaded-file u.file.file-part - :: Parse filename as path (prepend '/' for stap) + :: Split filename on '/' to get path segments. + :: Can't use stap — it rejects valid filenames like .gitignore. =/ filename-path=path - (rash (crip (weld "/" (trip filename-raw))) stap) + =/ segs=(list tape) (split-on-slash (trip filename-raw)) + (turn segs |=(s=tape (crip s))) :: Split into parent directory and filename =/ [file-parent=path file-name=@ta] ?~ filename-path @@ -396,14 +520,14 @@ :~ ['mtime' (da-oct now)] ['size' (scot %ud file-size)] == - :: Try to convert to cage, otherwise store as %mime cage + :: Try to convert to sage, otherwise store as %mime sage =/ file-mime=mime [mime-type [file-size body.file-part]] - =/ maybe-cage=(unit cage) (mime-to-cage conversions file-name file-mime) + =/ maybe-sage=(unit sage) (mime-to-sage conversions file-name file-mime) :: Keep full filename as-is (no extension stripping) =/ [store-name=@ta file-content=content] - ?~ maybe-cage - [file-name [file-metadata [%mime !>(file-mime)]]] - [file-name [file-metadata u.maybe-cage]] + ?~ maybe-sage + [file-name [file-metadata [[/ %mime] !>(file-mime)]]] + [file-name [file-metadata u.maybe-sage]] :: Add file to base with explicit directories =/ new-base=ball (~(put ba base-with-dirs) [full-parent store-name] file-content) @@ -417,7 +541,7 @@ ?~ fil.b ~ :- ~ :- neck.u.fil.b - (~(run by contents.u.fil.b) |=(c=content p.cage.c)) + (~(run by contents.u.fil.b) |=(c=content p.sage.c)) :: Convert tree to json :: ++ tree-to-json @@ -428,9 +552,9 @@ ?~ fil.tre (pairs:enjs:format ~[['dirs' subdirs]]) =/ files=json - [%o (~(run by files.u.fil.tre) |=(m=@tas s+m))] + [%o (~(run by files.u.fil.tre) |=(m=blot s+(rail-to-arm m)))] =/ neck=json - ?~(neck.u.fil.tre ~ s+u.neck.u.fil.tre) + ?~(neck.u.fil.tre ~ s+(rail-to-arm u.neck.u.fil.tre)) %- pairs:enjs:format :~ ['neck' neck] ['files' files] @@ -509,46 +633,46 @@ ++ gut |= [=rail default=content] (fall (get rail) default) - :: Get a cage (crash if not found) + :: Get a sage (crash if not found) :: - ++ got-cage + ++ got-sage |= =rail - ^- cage + ^- sage =/ c=content (got rail) - cage.c - :: Get a file as mime (crash if not found or not a mime cage) + sage.c + :: Get a file as mime (crash if not found or not a mime sage) :: ++ got-file |= =rail ^- mime =/ c=content (got rail) - ?. =(%mime p.cage.c) + ?. =([/ %mime] p.sage.c) ~|("not a mime file: {(spud (snoc path.rail name.rail))}" !!) - !<(mime q.cage.c) + !<(mime q.sage.c) :: Get a symlink (crash if not found or not a symlink) :: ++ got-symlink |= =rail ^- symlink =/ c=content (got rail) - =/ maybe-sym=(unit symlink) (cage-to-symlink cage.c) + =/ maybe-sym=(unit symlink) (sage-to-symlink sage.c) ?~ maybe-sym ~|("not a symlink: {(spud (snoc path.rail name.rail))}" !!) u.maybe-sym - :: Get cage and extract as specific type (crash if wrong type) + :: Get sage and extract as specific type (crash if wrong type) :: - ++ got-cage-as + ++ got-sage-as |* [=rail a=mold] ^- a - !<(a q:(got-cage rail)) - :: Get cage as unit (returns ~ if not found) + !<(a q:(got-sage rail)) + :: Get sage as unit (returns ~ if not found) :: - ++ get-cage-as + ++ get-sage-as |* [=rail a=mold] ^- (unit a) ?~ may=(get rail) ~ - `!<(a q.cage.u.may) + `!<(a q.sage.u.may) :: Count total content items across all directories :: ++ wyt @@ -604,17 +728,6 @@ %+ lien tap |= [=rail c=content] (fn c) - :: Clear all %temp cages from ball - :: - ++ clear-temp - ^- ball - %+ roll ~(tap of b) - |= [[pax=path lmp=lump] acc=ball] - =/ cleaned-contents=(map @ta content) - %- ~(gas by *(map @ta content)) - %+ skip ~(tap by contents.lmp) - |=([name=@ta c=content] =(%temp p.cage.c)) - (~(put of acc) pax lmp(contents cleaned-contents)) :: Delete entire subtree at path :: ++ lop @@ -810,6 +923,67 @@ =/ data ?~(data.i.tar 0^0 u.data.i.tar) $(tar t.tar, octs (octs-rap octs head data ~)) :: +++ oct-to-ud + |= t=@t + ^- @ud + =/ =tape (trip t) + =/ clean=^tape (skim tape |=(c=@t &((gte c '0') (lte c '7')))) + =| acc=@ud + |- + ?~ clean acc + $(acc (add (sub i.clean '0') (mul 8 acc)), clean t.clean) +:: +++ decode-header + |= block=octs + ^- (unit tarball-header) + ?> =(512 p.block) + :: empty block (all zeros) signals end of archive + ?: =(0 q.block) ~ + =/ get |=([off=@ud len=@ud] `@t`(cut 3 [off len] q.block)) + :- ~ + :* (get 0 100) :: name + (get 100 8) :: mode + (get 108 8) :: uid + (get 116 8) :: gid + (get 124 12) :: size + (get 136 12) :: mtime + (get 156 1) :: typeflag + (get 157 100) :: linkname + (get 265 32) :: uname + (get 297 32) :: gname + (get 329 8) :: devmajor + (get 337 8) :: devminor + (get 345 155) :: prefix + == +:: +++ decode-tarball + |= data=octs + ^- tarball + =| entries=tarball + =/ pos=@ud 0 + |- + :: need at least 512 bytes for a header + ?: (lth (sub p.data pos) 512) + (flop entries) + =/ header-block=octs [512 (cut 3 [pos 512] q.data)] + =/ header=(unit tarball-header) (decode-header header-block) + ?~ header + :: empty header = end of archive + (flop entries) + =/ file-size=@ud (oct-to-ud size.u.header) + :: data follows header, padded to 512-byte boundary + =/ data-start=@ud (add pos 512) + =/ padded-size=@ud + ?: =(0 file-size) 0 + (mul 512 (div (add file-size 511) 512)) + =/ file-data=(unit octs) + ?: =(0 file-size) ~ + `[file-size (cut 3 [data-start file-size] q.data)] + %= $ + pos (add data-start padded-size) + entries [[u.header file-data] entries] + == +:: ++ split-path |= =path ^- [prefix=^path name=^path] @@ -824,33 +998,31 @@ $(p t.p, n [i.p n]) :: ++ gen - |_ [now=@da conversions=(map mars:clay tube:clay)] + |_ [now=@da conversions=(map bars tube:clay)] :: TODO: implement PAX extended headers (typeflag 'x' and 'g') :: to preserve arbitrary metadata fields like date-created :: Format: =\n :: - :: Convert cage to mime using mark conversions map + :: Convert sage to mime using blot conversions map :: Falls back to noun jamming if no conversion exists :: - ++ cage-to-mime - |= =cage + ++ sage-to-mime + |= =sage ^- mime - ?: =(%temp p.cage) - [/application/x-urb-jam (as-octs:mimes:html (jam q.cage))] - =/ key=mars:clay [a=p.cage b=%mime] + =/ key=bars [p.sage [/ %mime]] ?~ tube=(~(get by conversions) key) :: No conversion available, fall back to jamming like mar/noun.hoon - [/application/x-urb-jam (as-octs:mimes:html (jam q.cage))] + [/application/x-urb-jam (as-octs:mimes:html (jam q.sage))] :: Try the direct tube conversion - =/ result=(each vase tang) (mule |.((u.tube q.cage))) + =/ result=(each vase tang) (mule |.((u.tube q.sage))) ?: ?=([%| *] result) :: Tube conversion failed, fall back to jamming - [/application/x-urb-jam (as-octs:mimes:html (jam q.cage))] + [/application/x-urb-jam (as-octs:mimes:html (jam q.sage))] :: Successfully converted, check what we got :: The tube should produce a vase of a mime, extract it =/ extracted (mule |.(!<(mime p.result))) ?: ?=([%| *] extracted) - [/application/x-urb-jam (as-octs:mimes:html (jam q.cage))] + [/application/x-urb-jam (as-octs:mimes:html (jam q.sage))] p.extracted :: ++ generate-header @@ -905,8 +1077,8 @@ |= [=path =content] ^- tarball-entry =/ [prefix=^path name=^path] (split-path path) - :: Check if this is a symlink cage - =/ maybe-sym=(unit symlink) (cage-to-symlink cage.content) + :: Check if this is a symlink sage + =/ maybe-sym=(unit symlink) (sage-to-symlink sage.content) ?^ maybe-sym :: It's a symlink =/ sym-metadata=metadata @@ -918,14 +1090,14 @@ == (generate-entry sym-metadata ~) :: Regular file - =/ =mime (cage-to-mime cage.content) - =/ cage-metadata=metadata + =/ =mime (sage-to-mime sage.content) + =/ sage-metadata=metadata %- ~(gas by metadata.content) :~ ['typeflag' '0'] ['prefix' (rsh [3 1] (spat prefix))] ['name' (rsh [3 1] (spat name))] == - (generate-entry cage-metadata `q.mime) + (generate-entry sage-metadata `q.mime) :: ++ make-tarball |= [=path =ball] @@ -933,10 +1105,7 @@ =/ tar-entries=tarball ?~ fil.ball ~ - =/ contents-list=(list [@ta content]) ~(tap by contents.u.fil.ball) - =/ exportable=(list [@ta content]) - %+ skip contents-list - |=([name=@ta c=content] =(%temp p.cage.c)) + =/ exportable=(list [@ta content]) ~(tap by contents.u.fil.ball) %+ weld ?~ path ~ diff --git a/desk/lib/zlib.hoon b/desk/lib/zlib.hoon new file mode 100644 index 0000000..86d7358 --- /dev/null +++ b/desk/lib/zlib.hoon @@ -0,0 +1,633 @@ +:: +:::: zlib compression library + :: +/+ *bytestream +:: +|% ++$ input bits ++$ output octs ++$ blocks-output (list output) ++$ values (map @ud @ud) ++$ codes (map [size=@ud code=@ub] literal=@ud) +-- +:: +~% %zlib-v0 ..part ~ +|% ++| %utils +++ swp-bits + |= bits=[size=@ud data=@ub] + ^- [size=@ud data=@ub] + =/ original-data-length (met 0 data.bits) + =/ original-leading-zeros (sub size.bits original-data-length) + =/ data (swp 0 data.bits) + =/ new-data-length (met 0 data) + =. data (lsh [0 original-leading-zeros] data) + [size.bits data] +++ cut-bytes + |= [index=@ud length=@ud bytes=octs] + ^- octs + [length (cut 3 [index length] q.bytes)] +++ cat-bytes + |= [target=octs literals=octs] + ^- octs + ?: =(q.literals 0) + [(add p.target p.literals) q.target] + =/ target-lz (sub p.target (met 3 q.target)) + =? q.literals (gth target-lz 0) + (lsh [3 target-lz] q.literals) + [(add p.target p.literals) (cat 3 q.target q.literals)] ++| %huffman-encoding +++ get-fixed-table + |= $: litlen-codes=codes + literal-start=@ud + range-size=@ud + code-start=@ub + code-size=@ud + == + ^- codes + =/ i 0 + |- + ?: =(i range-size) + litlen-codes + =/ code (swp-bits [code-size `@ub`(add code-start i)]) + =/ literal (add literal-start i) + $(litlen-codes (~(put by litlen-codes) code literal), i +(i)) +++ get-code + |= [=input =codes] + ^- [code=@ud bits] + =/ code-size 1 + |- + ?: =(code-size 50) + ~| "too many length or distance symbols" !! + =. input (need-bits code-size input) + =/ bits (peek-bits code-size input) + =/ code (~(get by codes) [code-size bits]) + ?~ code + $(code-size +(code-size)) + :_ (skip-bits code-size input) + u.code +++ get-cl-table-components + |= [hclen=@ud input=bits] + ^- [[cl-lengths=values cl-lengths-count=values] input=bits] + =/ code-lengths `(list @ud)`[16 17 18 0 8 7 9 6 10 5 11 4 12 3 13 2 14 1 15 ~] + =/ cl-lengths `values`~ + =/ cl-lengths-count `values`~ + =/ j 0 + |- + ?: =(j hclen) + :_ input + [cl-lengths cl-lengths-count] + =^ bits input (read-need-bits 3 input) + ?: =(bits 0) + $(j +(j)) + =* length bits + =/ count (~(get by cl-lengths-count) length) + =. cl-lengths-count ?~ count + (~(put by cl-lengths-count) length 1) + (~(put by cl-lengths-count) length +(u.count)) + %= $ + cl-lengths (~(put by cl-lengths) (snag j code-lengths) length) + j +(j) + == +:: +++ get-table-components + |= $: =input + =codes + codes-amount=@ud + == + ^- [[code-lengths=values cl-count=values] bits] + =/ code-lengths `values`~ + =/ cl-count `values`~ + =/ j 0 + |- + ?: =(j codes-amount) + :_ input + [code-lengths cl-count] + ?< (gth j 285) + =^ code input (get-code input codes) + ?: =(code.code 0) + $(j +(j)) + ?: =(code.code 16) + :: + =^ bits input (read-need-bits 2 input) + =/ repeat (add bits 3) + =/ previous (~(got by code-lengths) (sub j 1)) + =/ count (~(got by cl-count) previous) + =/ l 0 + =. code-lengths + |- + ?: =(l repeat) + code-lengths + %= $ + code-lengths (~(put by code-lengths) j previous) + j +(j) + l +(l) + == + %= $ + cl-count (~(put by cl-count) previous (add count repeat)) + j (add j repeat) + == + ?: =(code.code 17) + =^ bits input (read-need-bits 3 input) + =/ repeat (add bits 3) + $(j (add j repeat)) + ?: =(code.code 18) + =^ bits input (read-need-bits 7 input) + =/ repeat (add bits 11) + $(j (add j repeat)) + =. cl-count + =/ count (~(get by cl-count) code.code) + ?~ count + (~(put by cl-count) code.code 1) + (~(put by cl-count) code.code +(u.count)) + %= $ + code-lengths (~(put by code-lengths) j code.code) + j +(j) + == +:: +++ get-longest-cl + |= cl-count=values + ^- @ud + =/ j 1 + =/ result 0 + |- + ?: =(j 16) + result + ?~ (~(get by cl-count) j) + $(j +(j)) + $(result j, j +(j)) +:: +++ get-smallest-codes + |= [cl-count=values longest-cl=@ud] + ^- values + =/ result `values`~ + =/ j 1 + |- + ?: (gth j longest-cl) + result + ?~ (~(get by cl-count) j) + $(j +(j)) + ?~ =(result ~) + $(result (~(put by result) j 0), j +(j)) + =/ k 1 + =/ previous |- + =/ temp (~(get by result) (sub j k)) + ?~ temp + $(k +(k)) + [u.temp k] + =. k +.previous + =/ previous-count (~(get by cl-count) (sub j k)) + ?~ previous-count + !! + =/ next (lsh [0 k] (add -.previous u.previous-count)) + %= $ + result (~(put by result) j next) + j +(j) + == +:: +++ make-code-table + |= $: code-lengths=values + max-cl=@ud + smallest-codes=values + codes-amount=@ud + == + ^- codes + =/ cl-count + ^- values + =/ result `values`~ + =/ j 1 + |- + ?: =(j max-cl) + result + $(result (~(put by result) j 1), j +(j)) + =/ result `codes`~ + =/ j 0 + |- + ?: =(j codes-amount) + result + =/ length (~(get by code-lengths) j) + ?~ length + $(j +(j)) + =/ length-count (~(got by cl-count) u.length) + =/ code `@ub`(~(got by smallest-codes) u.length) + =? code !=(length-count 1) + (sub (add code length-count) 1) + =/ code (swp-bits [u.length code]) + %= $ + result (~(put by result) code j) + cl-count (~(put by cl-count) u.length +(length-count)) + j +(j) + == +:: +++ get-length + |= [code=@ud input=bits] + ^- [code=@ud bits] + ?: (lth code 265) + :_ input + (sub code 254) + ?: (lth code 269) + =^ extra-bits input (read-need-bits 1 input) + =/ multiplier (sub code 265) + :_ input + (add (add 11 (mul multiplier 2)) extra-bits) + ?: (lth code 273) + =^ extra-bits input (read-need-bits 2 input) + =/ multiplier (sub code 269) + :_ input + (add (add 19 (mul multiplier 4)) extra-bits) + ?: (lth code 277) + =^ extra-bits input (read-need-bits 3 input) + =/ multiplier (sub code 273) + :_ input + (add (add 35 (mul multiplier 8)) extra-bits) + ?: (lth code 281) + =^ extra-bits input (read-need-bits 4 input) + =/ multiplier (sub code 277) + :_ input + (add (add 67 (mul multiplier 16)) extra-bits) + ?: (lth code 285) + =^ extra-bits input (read-need-bits 5 input) + =/ multiplier (sub code 281) + :_ input + (add (add 131 (mul multiplier 32)) extra-bits) + ?: =(code 285) + :_ input + 258 + !! +:: +++ get-distance + |= [code=@ud input=bits] + ^- [code=@ud bits] + ?: (lth code 4) + :_ input + +(code) + =/ divided (dvr code 2) + =/ extra-bits-amount (sub p.divided 1) + =/ j 1 + =/ distance ?: =(code 4) + 5 + =/ result 5 + |- + ^- @ud + ?: =(j extra-bits-amount) + result + %= $ + result (add result (mul (pow 2 j) 2)) + j +(j) + == + =^ extra-bits input + (read-need-bits extra-bits-amount input) + :_ input + ?: =(q.divided 0) + (add distance extra-bits) + (add (add distance (pow 2 extra-bits-amount)) extra-bits) +:: +++ cut-backreference + |= $: block-output=output + =blocks-output + length=@ud + distance=@ud + == + ^- octs + :: Check if distance reaches output from previous blocks + :: + =? block-output (gth distance p.block-output) + =. blocks-output [block-output blocks-output] + =/ canned-blocks (can-octs (flop blocks-output)) + canned-blocks + ?: (gth distance p.block-output) + ~| "invalid distance too far back: d = {}, p = {}" !! + =/ index (sub p.block-output distance) + :: Regular or self-referring backreference + :: + ?: (gth distance length) + (cut-bytes index length block-output) + =/ temp-length length + =/ temp-index index + |- + ?: (lte temp-length distance) + =/ backreference (cut-bytes temp-index temp-length block-output) + =. block-output (cat-bytes block-output backreference) + (cut-bytes index length block-output) + =/ backreference (cut-bytes temp-index distance block-output) + %= $ + block-output (cat-bytes block-output backreference) + temp-length (sub temp-length distance) + temp-index (add temp-index distance) + == +:: +++ parse-block + |= $: =input + =blocks-output + litlen-codes=codes + distance-codes=codes + == + ^- [=output bits] + =| block-output=output + |- + =^ litlen-code input (get-code input litlen-codes) + ?: (bits-is-empty input) + ~| "invalid code -- missing end-of-block" !! + :: End of block + :: + ?: =(code.litlen-code 256) + :_ input + block-output + :: Literal of backreference + :: + ?: (lth code.litlen-code 256) + $(block-output (cat-octs block-output [1 code.litlen-code])) + =^ length input (get-length code.litlen-code input) + :: Block type 1 or 2 distance code + :: + =^ distance-code=@ud input + ?^ distance-codes + (get-code input distance-codes) + =^ bits input (read-need-bits 5 input) + :_ input + =/ code (swp-bits [5 bits]) + ;;(@ud data.code) + =^ distance input + %+ get-distance + distance-code + input + =/ backreference + %- cut-backreference + :^ block-output + blocks-output + code.length + code.distance + $(block-output (cat-octs block-output backreference)) ++| %block-expansion +++ decompress-block-type-0 + |= input=bits + ^- [=output =bits] + :: =/ product (dvr i 8) + :: XX is this correct? + :: =/ bit-padding ?: =((sub 8 q.product) 8) + :: 0 + :: (sub 8 q.product) + =. input (byte-bits input) + =^ len=@ud input (read-need-bits 16 input) + =. input (skip-bits 16 input) + =^ data bays.input (read-octs len bays.input) + :_ input + data +++ decompress-block-type-1 + |= [=input =blocks-output] + ^- [=output bits] + =/ litlen-codes `codes`~ + =. litlen-codes (get-fixed-table litlen-codes 0 144 0b11.0000 8) + =. litlen-codes (get-fixed-table litlen-codes 144 112 0b1.1001.0000 9) + =. litlen-codes (get-fixed-table litlen-codes 256 24 0b0 7) + =. litlen-codes (get-fixed-table litlen-codes 280 8 0b1100.0000 8) + (parse-block input blocks-output litlen-codes ~) +:: +++ decompress-block-type-2 + |= [=input =blocks-output] + ^- [=output bits] + :: Header + :: + =^ hlit input (read-need-bits 5 input) + =^ bits input (read-need-bits 5 input) + =/ hdist (add 1 bits) + =^ bits input (read-need-bits 4 input) + =/ hclen (add 4 bits) + :: Get code length codes + :: + =^ cl-components input + %+ get-cl-table-components + hclen + input + =/ longest-cl-cl (get-longest-cl cl-lengths-count.cl-components) + =/ smallest-codes + %- get-smallest-codes + :- cl-lengths-count.cl-components + longest-cl-cl + =/ cl-codes + %- make-code-table + :^ cl-lengths.cl-components + 8 + smallest-codes + 19 + :: Get literal/length codes + :: + =^ litlen-components input + %^ get-table-components + input + cl-codes + (add 257 hlit) + =/ longest-litlen-cl (get-longest-cl cl-count.litlen-components) + =/ litlen-smallest-codes + %- get-smallest-codes + :- cl-count.litlen-components + longest-litlen-cl + =/ litlen-codes + %- make-code-table + :^ code-lengths.litlen-components + 16 + litlen-smallest-codes + (add 257 hlit) + :: Get distance codes + :: + =^ distance-components input + %^ get-table-components + input + cl-codes + hdist + =/ longest-distance-cl (get-longest-cl cl-count.distance-components) + =/ distance-smallest-codes + %- get-smallest-codes + :- cl-count.distance-components + longest-distance-cl + =/ distance-codes + %- make-code-table + :^ code-lengths.distance-components + 16 + distance-smallest-codes + hdist + :: Parse compressed data + :: + (parse-block input blocks-output litlen-codes distance-codes) +:: +++ decompress-blocks + |= sea=bays + ^- [output bays] + =/ input=bits (bits-from-bays sea) + =| =blocks-output + :: + |- + =. input (need-bits 3 input) + =^ last-block input (read-bits 1 input) + =/ is-last-block =(1 last-block) + =^ block-type input (read-bits 2 input) + :: + =^ decompressed-block=octs input + ?: =(block-type 0) + (decompress-block-type-0 input) + ?: =(block-type 1) + (decompress-block-type-1 input blocks-output) + ?: =(block-type 2) + (decompress-block-type-2 input blocks-output) + ~| "invalid block type {} at {}" !! + ?: is-last-block + =. blocks-output [decompressed-block blocks-output] + =/ result=octs (can-octs (flop blocks-output)) + :_ bays.input + ?: =(p.result 0) + decompressed-block + result + %= $ + blocks-output [decompressed-block blocks-output] + == ++| %decompression +++ decompress-gzip + ~/ %decompress-gzip + |= sea=bays + ^- [octs bays] + =+ start=pos.sea + :: Parse gzip header + :: + :: ID1 + =^ id1=@udD sea (read-byte sea) + ?> =(31 id1) + :: + :: ID2 + =^ id2=@udD sea (read-byte sea) + ?> =(139 id2) + :: + :: CM + =^ cm=@udD sea (read-byte sea) + ?> =(8 cm) + :: + :: FLG + =^ flg=@udD sea (read-byte sea) + :: + :: MTIME + =^ mtime=@udF sea (read-lsb 4 sea) + :: + :: XFL + =^ xfl=@udD sea (read-byte sea) + :: + :: OS + =^ os=@udD sea (read-byte sea) + :: FLG flags + :: + =/ fhcrc (cut 0 [1 1] flg) + =/ fextra (cut 0 [2 1] flg) + =/ fname (cut 0 [3 1] flg) + =/ fcomment (cut 0 [4 1] flg) + :: If .fextra set + :: + =^ xlen=(unit @udE) sea + ?: =(fextra 0) + :_(sea ~) + =^ num sea (read-lsb 2 sea) + :_ sea + (some num) + =? sea ?=(^ xlen) + (skip-by u.xlen sea) + :: If .fname set + :: + =^ file-name=(unit @t) sea + ?: =(fname 0) + :_(sea ~) + =+ pin=(find-byte 0x0 sea) + ?> ?=(^ pin) + =^ octs sea (read-octs-until u.pin sea) + :_ (skip-byte sea) + (some q.octs) + :: If .fcomment set + :: + =^ comment=(unit @t) sea + ?: =(fcomment 0) + :_(sea ~) + =+ pin=(find-byte 0x0 sea) + ?> ?=(^ pin) + =^ octs sea (read-octs-until u.pin sea) + :_ (skip-byte sea) + (some q.octs) + :: If .fhcrc set + :: + =^ crc16=(unit @ud) sea + ?: =(fhcrc 0) + :_(sea ~) + =^ num sea (read-lsb 2 sea) + :_ sea + (some num) + =/ mycrc16 + %^ cut 3 [0 2] + (crc32:crc:checksum (peek-octs-until (sub pos.sea 2) sea(pos start))) + ?: ?& ?=(^ crc16) + !=(u.crc16 mycrc16) + == + ~| "crc mismatch: wanted {}, computed {}" !! + :: + :: Decompress data + =^ data=octs sea (decompress-blocks sea) + :: Parse footer + :: + =/ footer-length (in-size sea) + ?: (lth footer-length 8) + ~| "incorrect data check" !! + :: + :: CRC32 + =^ crc32 sea (read-octs 4 sea) + :: + :: ISIZE + =^ isize sea (read-lsb 4 sea) + :: + ?: =(q.crc32 (crc32:crc:checksum data)) + :_ sea + data + ~| "incorrect crc32 data check" !! +++ decompress-octs-gzip + |= data=octs + ^- octs + -:(decompress-gzip (from-octs data)) +++ decompress-zlib + ~/ %decompress-zlib + |= sea=bays + ^- [octs bays] + =+ start=pos.sea + :: Parse zlib header + :: + :: CMF + =^ cmf=@ubD sea (read-byte sea) + =/ cm (cut 0 [0 4] cmf) + ?> =(cm 8) + =/ cinfo (cut 0 [4 4] cmf) + :: FLAGS + :: + =^ flg=@ubD sea (read-byte sea) + =/ fcheck (cut 0 [0 5] flg) + =/ fdict (cut 0 [5 1] flg) + =/ flevel (cut 0 [6 2] flg) + =^ dict=(unit @uxF) sea + ?: =(fdict 1) + =^ dict sea (read-lsb 4 sea) + :_ sea + (some dict) + :_(sea ~) + :: fcheck + :: + ?> =- =(0 (mod - 31)) + (add (lsh [3 1] cmf) flg) + :: + :: Decompress data + =^ data sea (decompress-blocks sea) + :: Parse footer + :: + =/ footer-length (in-size sea) + ?: (lth footer-length 4) + ~| "incorrect data check" !! + =^ adler32=@ux sea (read-msb 4 sea) + ?: =(adler32 (adler32:adler:checksum data)) + :_ sea + data + ~| "incorrect adler32 data check" !! +++ decompress-octs-zlib + |= data=octs + ^- octs + -:(decompress-zlib (from-octs data)) +-- diff --git a/desk/mar/fiber-ack.hoon b/desk/mar/fiber-ack.hoon deleted file mode 100644 index 4acb453..0000000 --- a/desk/mar/fiber-ack.hoon +++ /dev/null @@ -1,11 +0,0 @@ -|_ ack=(unit tang) -++ grab - |% - ++ noun ,(unit tang) - -- -++ grow - |% - ++ noun ack - -- -++ grad %noun --- diff --git a/desk/mar/grubbery-action.hoon b/desk/mar/grubbery-action.hoon index da1970f..89f50b0 100644 --- a/desk/mar/grubbery-action.hoon +++ b/desk/mar/grubbery-action.hoon @@ -1,7 +1,6 @@ :: grubbery-action: unified action mark for grubbery pokes :: /+ nexus -!: :: turn on stack trace |_ axn=action:nexus ++ grad %noun ++ grow diff --git a/desk/mar/grubbery-intake.hoon b/desk/mar/grubbery-intake.hoon new file mode 100644 index 0000000..0d710e1 --- /dev/null +++ b/desk/mar/grubbery-intake.hoon @@ -0,0 +1,14 @@ +:: grubbery-intake: cross-ship response mark +:: +/+ nexus +|_ tak=intake:remote:nexus +++ grad %noun +++ grow + |% + ++ noun tak + -- +++ grab + |% + ++ noun intake:remote:nexus + -- +-- diff --git a/desk/mar/grubbery-load.hoon b/desk/mar/grubbery-load.hoon new file mode 100644 index 0000000..8cf7c98 --- /dev/null +++ b/desk/mar/grubbery-load.hoon @@ -0,0 +1,14 @@ +:: grubbery-load: cross-ship request mark +:: +/+ nexus +|_ axn=load:remote:nexus +++ grad %noun +++ grow + |% + ++ noun axn + -- +++ grab + |% + ++ noun load:remote:nexus + -- +-- diff --git a/desk/mar/jam.hoon b/desk/mar/jam.hoon deleted file mode 100644 index cbbd524..0000000 --- a/desk/mar/jam.hoon +++ /dev/null @@ -1,17 +0,0 @@ -:: -:::: /hoon/jam/mar - :: -/? 310 -:: -=, mimes:html -|_ mud=@ -++ grow - |% - ++ mime [/application/x-urb-jam (as-octs mud)] - -- -++ grab - |% :: convert from - ++ noun @ :: clam from %noun - -- -++ grad %mime --- diff --git a/desk/mar/json.hoon b/desk/mar/json.hoon index 7d6fcbf..f759ab7 100644 --- a/desk/mar/json.hoon +++ b/desk/mar/json.hoon @@ -17,8 +17,8 @@ -- ++ grab |% :: convert from - ++ mime |=([p=mite q=octs] (fall (de:json (@t q.q)) *^json)) - ++ noun ^json :: clam from %noun + ++ mime |=([p=mite q=octs] (need (de:json (@t q.q)))) :: crash on bad json + ++ noun ^json :: clam from %noun ++ numb numb:enjs ++ time time:enjs -- diff --git a/desk/mar/keys.hoon b/desk/mar/keys.hoon deleted file mode 100644 index 379f48a..0000000 --- a/desk/mar/keys.hoon +++ /dev/null @@ -1,29 +0,0 @@ -:: keys: build cache key map -:: -:: (map rail:tarball @uv) -:: Maps each source file to its build cache key. -:: -/+ tarball -|_ keys=(map rail:tarball @uv) -++ grad %noun -++ grow - |% - ++ noun keys - ++ json - ^- ^json - :- %a - %+ turn ~(tap by keys) - |= [=rail:tarball key=@uv] - %- pairs:enjs:format - :~ ['file' s+(crip (spud (snoc path.rail name.rail)))] - ['key' s+(scot %uv key)] - == - ++ mime - ^- ^mime - [/application/json (as-octs:mimes:html (en:json:html json))] - -- -++ grab - |% - ++ noun (map rail:tarball @uv) - -- --- diff --git a/desk/mar/kiln/commit.hoon b/desk/mar/kiln/commit.hoon new file mode 100644 index 0000000..0c9632f --- /dev/null +++ b/desk/mar/kiln/commit.hoon @@ -0,0 +1,11 @@ +|_ val=[term ?] +++ grad %noun +++ grab + |% + ++ noun ,[term ?] + -- +++ grow + |% + ++ noun val + -- +-- diff --git a/desk/mar/kiln/install.hoon b/desk/mar/kiln/install.hoon new file mode 100644 index 0000000..3e0ab3b --- /dev/null +++ b/desk/mar/kiln/install.hoon @@ -0,0 +1,11 @@ +|_ val=[term ship desk] +++ grad %noun +++ grab + |% + ++ noun [term ship desk] + -- +++ grow + |% + ++ noun val + -- +-- diff --git a/desk/mar/kiln/mount.hoon b/desk/mar/kiln/mount.hoon new file mode 100644 index 0000000..f18d542 --- /dev/null +++ b/desk/mar/kiln/mount.hoon @@ -0,0 +1,11 @@ +|_ val=[path term] +++ grad %noun +++ grab + |% + ++ noun [path term] + -- +++ grow + |% + ++ noun val + -- +-- diff --git a/desk/mar/kiln/nuke.hoon b/desk/mar/kiln/nuke.hoon new file mode 100644 index 0000000..4e59d0c --- /dev/null +++ b/desk/mar/kiln/nuke.hoon @@ -0,0 +1,11 @@ +|_ val=[term ?] +++ grad %noun +++ grab + |% + ++ noun [term ?] + -- +++ grow + |% + ++ noun val + -- +-- diff --git a/desk/mar/kiln/permission.hoon b/desk/mar/kiln/permission.hoon new file mode 100644 index 0000000..1388818 --- /dev/null +++ b/desk/mar/kiln/permission.hoon @@ -0,0 +1,11 @@ +|_ val=[desk path ?] +++ grad %noun +++ grab + |% + ++ noun [desk path ?] + -- +++ grow + |% + ++ noun val + -- +-- diff --git a/desk/mar/kiln/revive.hoon b/desk/mar/kiln/revive.hoon new file mode 100644 index 0000000..244e3c9 --- /dev/null +++ b/desk/mar/kiln/revive.hoon @@ -0,0 +1,11 @@ +|_ =desk +++ grad %noun +++ grab + |% + ++ noun ^desk + -- +++ grow + |% + ++ noun desk + -- +-- diff --git a/desk/mar/peers-sync.hoon b/desk/mar/peers-sync.hoon deleted file mode 100644 index 6b46ba4..0000000 --- a/desk/mar/peers-sync.hoon +++ /dev/null @@ -1,13 +0,0 @@ -:: peers-sync: trigger weir recomputation from usergroups -:: -|_ ~ -++ grab - |% - ++ noun ,~ - -- -++ grow - |% - ++ noun ~ - -- -++ grad %noun --- diff --git a/desk/mar/poke-in.hoon b/desk/mar/poke-in.hoon deleted file mode 100644 index 6bd62e0..0000000 --- a/desk/mar/poke-in.hoon +++ /dev/null @@ -1,19 +0,0 @@ -:: poke-in: inbound poke from foreign ship, routed through /peers.peers/main.sig -:: -:: Destination rail + untyped payload (page = [mark noun]). -:: The gateway at /peers.peers/ships/~ship/main.sig converts the page -:: to a cage and forwards to the destination. -:: -/+ tarball -!: :: turn on stack trace -|_ [dest=rail:tarball =page] -++ grab - |% - ++ noun ,[rail:tarball ^page] - -- -++ grow - |% - ++ noun [dest page] - -- -++ grad %noun --- diff --git a/desk/mar/poke-out.hoon b/desk/mar/poke-out.hoon deleted file mode 100644 index 8fa64cc..0000000 --- a/desk/mar/poke-out.hoon +++ /dev/null @@ -1,17 +0,0 @@ -:: poke-out: outbound poke to agent on remote ship -:: -:: Target ship, agent, and untyped payload (page = [mark noun]). -:: Handled by /peers.peers/main.sig which has syscall access to send Gall pokes. -:: -!: :: turn on stack trace -|_ [=ship =dude:gall =page] -++ grab - |% - ++ noun ,[@p dude:gall ^page] - -- -++ grow - |% - ++ noun [ship dude page] - -- -++ grad %noun --- diff --git a/desk/mar/rails.hoon b/desk/mar/rails.hoon deleted file mode 100644 index 46a3093..0000000 --- a/desk/mar/rails.hoon +++ /dev/null @@ -1,14 +0,0 @@ -:: rails: a set of file references (path + name) -:: -/+ tarball -|_ rails=(set rail:tarball) -++ grab - |% - ++ noun (set rail:tarball) - -- -++ grow - |% - ++ noun rails - -- -++ grad %noun --- diff --git a/desk/mar/server-action.hoon b/desk/mar/server-action.hoon deleted file mode 100644 index e3729d3..0000000 --- a/desk/mar/server-action.hoon +++ /dev/null @@ -1,12 +0,0 @@ -/+ nex-server -|_ act=server-action:nex-server -++ grab - |% - ++ noun server-action:nex-server - -- -++ grow - |% - ++ noun act - -- -++ grad %noun --- diff --git a/desk/mar/server-state.hoon b/desk/mar/server-state.hoon deleted file mode 100644 index 2930718..0000000 --- a/desk/mar/server-state.hoon +++ /dev/null @@ -1,48 +0,0 @@ -:: server-state: mark for server nexus state -:: -/+ nexus, tarball, nex-server -!: :: turn on stack trace -|_ state=server-state:nex-server -++ grad %noun -++ grow - |% - ++ noun state - ++ json - ^- ^json - =/ bindings-list=(list [=binding:eyre handler=rail:tarball]) - ~(tap by bindings.state) - =/ connections-list=(list [@ta =binding:eyre]) - ~(tap by connections.state) - %- pairs:enjs:format - :~ :- 'bindings' - :- %a - %+ turn bindings-list - |= [=binding:eyre handler=rail:tarball] - %- pairs:enjs:format - :~ ['site' ?~(site.binding s+'~' s+u.site.binding)] - ['path' s+(spat path.binding)] - :- 'handler' - %- pairs:enjs:format - :~ ['path' s+(spat path.handler)] - ['name' s+name.handler] - == - == - :: - :- 'connections' - :- %a - %+ turn connections-list - |= [eyre-id=@ta =binding:eyre] - %- pairs:enjs:format - :~ ['eyre-id' s+eyre-id] - ['site' ?~(site.binding s+'~' s+u.site.binding)] - ['path' s+(spat path.binding)] - == - == - ++ mime [/application/json (as-octs:mimes:html -:txt)] - ++ txt [(en:json:html json)]~ - -- -++ grab - |% - ++ noun server-state:nex-server - -- --- diff --git a/desk/mar/tool-args.hoon b/desk/mar/tool-args.hoon deleted file mode 100644 index c5b679c..0000000 --- a/desk/mar/tool-args.hoon +++ /dev/null @@ -1,14 +0,0 @@ -:: tool-args: initial state for a tool request process -:: [tool-name args] — request process resolves + runs the tool -:: -|_ val=[@t (map @t json)] -++ grab - |% - ++ noun ,[@t (map @t json)] - -- -++ grow - |% - ++ noun val - -- -++ grad %noun --- diff --git a/desk/mar/tool-config.hoon b/desk/mar/tool-config.hoon deleted file mode 100644 index 9b9817b..0000000 --- a/desk/mar/tool-config.hoon +++ /dev/null @@ -1,13 +0,0 @@ -:: tool-config: legacy mark (kept for ball validation compatibility) -:: -|_ val=* -++ grab - |% - ++ noun * - -- -++ grow - |% - ++ noun val - -- -++ grad %noun --- diff --git a/desk/mar/tool-execute.hoon b/desk/mar/tool-execute.hoon deleted file mode 100644 index c568c10..0000000 --- a/desk/mar/tool-execute.hoon +++ /dev/null @@ -1,14 +0,0 @@ -:: tool-execute: poke tools/main.sig to start execution -:: [call-id tool-name args] — dispatcher creates /requests/{call-id} -:: -|_ val=[call-id=@ta tool-name=@t args=(map @t json)] -++ grab - |% - ++ noun ,[call-id=@ta tool-name=@t args=(map @t json)] - -- -++ grow - |% - ++ noun val - -- -++ grad %noun --- diff --git a/desk/mar/udon.hoon b/desk/mar/udon.hoon deleted file mode 100644 index ab1387b..0000000 --- a/desk/mar/udon.hoon +++ /dev/null @@ -1,27 +0,0 @@ -:: -:::: /hoon/udon/mar - :: -/+ cram -:: -|_ mud=@t -++ grow - |% - ++ mime [/text/x-unmark (as-octs:mimes:html mud)] - ++ txt - (to-wain:format mud) - ++ front :: XX performance, types - ^- (map term knot) - %- ~(run by inf:(static:cram (ream mud))) - |= a=dime ^- cord - ?+ (end 3 p.a) (scot a) - %t q.a - == - -- -++ grab - |% - ++ mime |=((pair mite octs) q.q) - ++ noun @t - ++ txt of-wain:format - -- -++ grad %txt --- diff --git a/desk/mar/weir.hoon b/desk/mar/weir.hoon deleted file mode 100644 index b4a91aa..0000000 --- a/desk/mar/weir.hoon +++ /dev/null @@ -1,14 +0,0 @@ -:: weir: access control template (make/poke/peek road sets) -:: -/+ nexus, tarball -|_ =weir:nexus -++ grab - |% - ++ noun weir:nexus - -- -++ grow - |% - ++ noun weir - -- -++ grad %noun --- diff --git a/desk/nex/build.hoon b/desk/nex/build.hoon deleted file mode 100644 index dfa0879..0000000 --- a/desk/nex/build.hoon +++ /dev/null @@ -1,278 +0,0 @@ -:: build nexus: compile hoon sources, cache by content hash -:: -:: Layout: -:: /bin/.temp success: compiled vase -:: /bin/.tang failure: compile errors -:: /keys.keys cache key map for reconstruction -:: /src/** hoon source files -:: /builder.sig live builder process -:: -:: On load: ensure structure, sync build, create builder process. -:: Builder watches /src/ and rebuilds on change. -:: %temp files vanish on kelvin change → full rebuild. -:: -/+ nexus, tarball, build, io=fiberio, loader -!: -=> |% - :: Reconstruct build-cache from /bin/ vases + keys - :: - ++ ball-to-cache - |= [bin=ball:tarball keys=(map rail:tarball @uv)] - ^- build-cache:build - %+ roll ~(tap by keys) - |= [[=rail:tarball ckey=@uv] acc=build-cache:build] - ?: (~(has by acc) ckey) acc - =/ stem=@ta (strip-hoon:build name.rail) - =/ bin-name=@ta (crip "{(trip stem)}.temp") - =/ entry=(unit content:tarball) - (~(get ba:tarball bin) [path.rail bin-name]) - ?~ entry acc - (~(put by acc) ckey q.cage.u.entry) - :: Ensure a directory exists, creating if needed - :: - ++ ensure-dir - |= dir=path - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< exists=? bind:m (peek-exists:io /chk [%| 0 %| dir]) - ?: exists (pure:m ~) - (make:io /mkd [%| 0 %| dir] &+[*sand:nexus *gain:nexus [`[~ ~ ~] ~]]) - :: Write a file, cull-and-recreate if it already exists - :: - ++ write-file - |= [dir=path =road:tarball =cage] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< exists=? bind:m (peek-exists:io /chk road) - ?: exists - ;< ~ bind:m (cull:io /build road) - (make:io /build road |+[%.n cage ~]) - ;< ~ bind:m (ensure-dir dir) - (make:io /build road |+[%.n cage ~]) - :: Write a single build result to /bin/ - :: Success: .temp (compiled vase) - :: Failure: .tang (error) - :: - ++ write-result - |= [=rail:tarball =build-result:build] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ stem=@ta (strip-hoon:build name.rail) - =/ bin-path=path (weld /bin path.rail) - ?: ?=(%& -.build-result) - =/ bin-name=@ta (crip "{(trip stem)}.temp") - (write-file bin-path [%| 0 %& bin-path bin-name] temp+p.build-result) - =/ bin-name=@ta (crip "{(trip stem)}.tang") - (write-file bin-path [%| 0 %& bin-path bin-name] tang+!>(p.build-result)) - :: Write all build results - :: - ++ write-results - |= results=(map rail:tarball build-result:build) - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ entries=(list [=rail:tarball =build-result:build]) - ~(tap by results) - |- - ?~ entries (pure:m ~) - ;< ~ bind:m (write-result i.entries) - $(entries t.entries) - :: Clean stale /bin/ entries not in current results - :: Also culls the opposite type when success/failure flips - :: - ++ clean-bin - |= [bin-ball=ball:tarball results=(map rail:tarball build-result:build)] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ expected=(set rail:tarball) - %- ~(gas in *(set rail:tarball)) - %+ turn ~(tap by results) - |= [=rail:tarball =build-result:build] - =/ stem=@ta (strip-hoon:build name.rail) - =/ ext=tape ?:(?=(%& -.build-result) ".temp" ".tang") - [path.rail (crip "{(trip stem)}{ext}")] - =/ files=(list [=rail:tarball =content:tarball]) - ~(tap ba:tarball bin-ball) - |- - ?~ files (pure:m ~) - ?: (~(has in expected) rail.i.files) - $(files t.files) - ;< ~ bind:m - (cull:io /cln [%| 0 %& (weld /bin path.rail.i.files) name.rail.i.files]) - $(files t.files) - :: Purge files in /src/ that aren't %hoon mark with .hoon extension - :: - ++ purge-src - |= =ball:tarball - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ files=(list [=rail:tarball =content:tarball]) - ~(tap ba:tarball ball) - |- - ?~ files (pure:m ~) - =/ bad=? - ?| !=(p.cage.content.i.files %hoon) - !(has-hoon-ext:build name.rail.i.files) - == - ?. bad $(files t.files) - ~& > [%purge-src rail.i.files] - ;< ~ bind:m - (cull:io /purge [%| 0 %& (weld /src path.rail.i.files) name.rail.i.files]) - $(files t.files) - :: Run a full build cycle: load cache, build, write results, clean stale - :: - ++ do-build - |= src-view=view:nexus - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?. ?=([%ball *] src-view) (pure:m ~) - =/ src-ball=ball:tarball ball.src-view - :: Purge non-hoon files from /src/ - ;< ~ bind:m (purge-src src-ball) - :: Load existing state from /bin/ and keys - ;< bin-seen=seen:nexus bind:m (peek:io /bin [%| 0 %| /bin] ~) - =/ bin-ball=ball:tarball - ?. ?=([%& %ball *] bin-seen) *ball:tarball - ball.p.bin-seen - ;< km-seen=seen:nexus bind:m - (peek:io /km [%| 0 %& / %'keys.keys'] ~) - =/ keys=(map rail:tarball @uv) - ?. ?=([%& %file *] km-seen) ~ - !<((map rail:tarball @uv) q.cage.p.km-seen) - =/ old-cache=build-cache:build (ball-to-cache bin-ball keys) - :: Build - =/ res=build-out:build - (build-all:build !>(..zuse) src-ball old-cache) - ~& > [%build-done results=~(wyt by results.res)] - :: Write all results to /bin/ (.temp or .tang) - ;< ~ bind:m (write-results results.res) - :: Write keys - ;< ~ bind:m - (write-file / [%| 0 %& / %'keys.keys'] keys+!>(keys.res)) - :: Clean stale /bin/ entries - (clean-bin [bin-ball results.res]) - :: +seed-src: default /src ball for fresh installs - :: - ++ seed-src - %+ spin:loader [[~ ~] [~ ~] [~ ~]] - :~ [%over %& [/lib %'add1.hoon'] %.n [~ %hoon !>('|=(a=@ +(a))')]] - [%over %& [/ %'main.hoon'] %.n [~ %hoon !>('/< add1 /lib/add1.hoon\0a(add1 41)')]] - == - :: +sync-build: fold-load that compiles /src, writes /bin + keys - :: - ++ sync-build - |= [=sand:nexus =gain:nexus =ball:tarball] - ^- [sand:nexus gain:nexus ball:tarball] - =/ keys=(map rail:tarball @uv) - =/ entry=(unit content:tarball) - (~(get ba:tarball ball) [/ %'keys.keys']) - ?~ entry ~ - !<((map rail:tarball @uv) q.cage.u.entry) - =/ old-cache=build-cache:build - %+ ball-to-cache - (fall (~(dap ba:tarball ball) /bin) *ball:tarball) - keys - =/ src-ball=ball:tarball - (fall (~(dap ba:tarball ball) /src) *ball:tarball) - =/ res=build-out:build - (build-all:build !>(..zuse) src-ball old-cache) - =. ball (~(put of ball) /bin [~ ~ ~]) - =. ball - %+ roll ~(tap by results.res) - |= [[=rail:tarball =build-result:build] acc=_ball] - =/ stem=@ta (strip-hoon:build name.rail) - =/ bin-path=path (weld /bin path.rail) - =? acc =(~ (~(get of acc) bin-path)) - (~(put of acc) bin-path [~ ~ ~]) - ?: ?=(%& -.build-result) - =/ bin-name=@ta (crip "{(trip stem)}.temp") - (~(put ba:tarball acc) [bin-path bin-name] [~ %temp p.build-result]) - =/ bin-name=@ta (crip "{(trip stem)}.tang") - (~(put ba:tarball acc) [bin-path bin-name] [~ %tang !>(p.build-result)]) - :+ sand gain - (~(put ba:tarball ball) [/ %'keys.keys'] [~ %keys !>(keys.res)]) - -- -^- nexus:nexus -|% -++ on-load - |= [=sand:nexus =gain:nexus =ball:tarball] - ^- [sand:nexus gain:nexus ball:tarball] - =/ =ver:loader (get-ver:loader ball) - ?+ ver !! - ?(~ [~ %0]) - %+ spin:loader [sand gain ball] - :~ [%load %| / / sync-build] - (ver-row:loader 0) - [%fall %& [/ %'builder.sig'] %.n [~ %sig !>(~)]] - [%fall %| /src seed-src] - == - == -:: -++ on-file - |= [=rail:tarball =mark] - ^- spool:fiber:nexus - |= =prod:fiber:nexus - =/ m (fiber:fiber:nexus ,~) - ^- process:fiber:nexus - ?+ rail stay:m - [~ %'builder.sig'] - ;< ~ bind:m (rise-wait:io prod "%build /builder: failed") - ~& > "%build /builder: starting" - :: Subscribe to /src/ for live changes - ;< src-view=view:nexus bind:m - (keep:io /src [%| 0 %| /src] ~) - :: Initial build (will be all cache hits if on-load already built) - ;< ~ bind:m (do-build src-view) - ~& > "%build /builder: watching for changes" - |- - ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /src) - ?: ?=(%wake -.nw) $ - ~& > "%build /builder: source changed, rebuilding" - ;< ~ bind:m (do-build view.nw) - $ - == -++ on-manu - |= =mana:nexus - ^- @t - ?- -.mana - %& - ?+ p.mana 'Subdirectory under the build nexus. May contain source files or compiled output.' - ~ - %- crip - """ - BUILD NEXUS — Hoon compiler with content-hash caching - - Compiles Hoon source files from /src/ into /bin/. Uses content - hashing to skip unchanged files. Supports /lib/ imports within - the source tree via the /< pattern. - - FILES: - keys.keys Build cache — content hashes for incremental rebuilds. - builder.sig Builder process — watches /src/, recompiles on change. - ver.ud Schema version. - - DIRECTORIES: - src/ Hoon source files. Subdirectories are preserved - in the output structure (e.g. src/lib/foo.hoon - compiles to bin/lib/foo.temp). - bin/ Compiled output. Auto-managed — do not edit directly. - .temp files are successful builds (vases). - .tang files are compile errors (stack traces). - - Seeds src/main.hoon and src/lib/add1.hoon as examples on first load. - """ - [%src ~] - 'Hoon source files. Drop .hoon files here; the builder auto-compiles them into /bin/. Subdirectories like /lib/ are supported for imports.' - [%bin ~] - 'Compiled output. .temp = successful build (vase), .tang = compile error (tang). Auto-managed by the builder — do not edit directly.' - == - %| - ?+ rail.p.mana 'File under the build nexus.' - [~ %'keys.keys'] - 'Build cache keys. Mark: keys. Maps (rail:tarball -> @uv) — source content hashes for incremental rebuilds. Stale entries are pruned on each build.' - [~ %'builder.sig'] - 'Builder process. Mark: sig. Watches /src/ via keep subscription. On any change, recompiles all sources and writes results to /bin/.' - [~ %'ver.ud'] - 'Schema version counter. Mark: ud.' - == - == --- diff --git a/desk/nex/explorer.hoon b/desk/nex/explorer.hoon deleted file mode 100644 index ad503b9..0000000 --- a/desk/nex/explorer.hoon +++ /dev/null @@ -1,1007 +0,0 @@ -:: explorer nexus: tarball tree browser -:: -/+ nexus, tarball, io=fiberio, server, http-utils, feather, nex-server, iso-8601, html-utils, multipart, loader -!: :: turn on stack trace -=< ^- nexus:nexus - |% - ++ on-load - |= [=sand:nexus =gain:nexus =ball:tarball] - ^- [sand:nexus gain:nexus ball:tarball] - =/ =ver:loader (get-ver:loader ball) - ?+ ver !! - ?(~ [~ %0]) - %+ spin:loader [sand gain ball] - :~ (ver-row:loader 0) - [%fall %& [/ %'main.sig'] %.n [~ %sig !>(~)]] - [%fall %| /requests [~ ~] [~ ~] empty-dir:loader] - == - == - :: - ++ on-file - |= [=rail:tarball =mark] - ^- spool:fiber:nexus - |= =prod:fiber:nexus - =/ m (fiber:fiber:nexus ,~) - ^- process:fiber:nexus - ?+ rail stay:m - [~ %'main.sig'] - ;< ~ bind:m (rise-wait:io prod "%explorer /main: failed, poke to restart") - ~& > "%explorer /main: binding /grubbery/ball" - ;< ~ bind:m (bind-http:nex-server [~ /grubbery/ball]) - ~& > "%explorer /main: ready" - (http-dispatch:nex-server %explorer) - [[%requests ~] @] - ;< ~ bind:m (rise-wait:io prod "%explorer /requests: failed, poke to restart") - =/ eyre-id=@ta name.rail - ;< [src=@p req=inbound-request:eyre] bind:m (get-state-as:io ,[src=@p inbound-request:eyre]) - ;< our=@p bind:m get-our:io - ?. =(src our) - ;< ~ bind:m (send-simple:srv eyre-id [[403 ~] `(as-octs:mimes:html 'Forbidden')]) - (pure:m ~) - ~& > [%explorer-request eyre-id url.request.req] - =/ [site=path args=quay:eyre] (parse-url:http-utils url.request.req) - =/ raw-path=path - ?. ?=([%grubbery %ball *] site) ~ - t.t.site - - ?: ?=([%stream ~] raw-path) - =/ watch-path=path - =/ p=(unit @t) (get-key:kv:html-utils 'path' args) - ?~ p ~ - (stab u.p) - (handle-stream eyre-id req watch-path) - ;< root-seen=seen:nexus bind:m (peek:io /peek [%& %| ~] ~) - ?. ?=([%& %ball *] root-seen) - ;< ~ bind:m (send-simple:srv eyre-id [[500 ~] `(as-octs:mimes:html 'Peek failed')]) - (pure:m ~) - =/ root=ball:tarball ball.p.root-seen - =/ root-born=born:nexus born.p.root-seen - =/ root-sand=sand:nexus sand.p.root-seen - =/ tree-path=path (resolve-url-path raw-path root) - ?: =('POST' method.request.req) - (handle-post eyre-id tree-path root-sand req) - (handle-get eyre-id tree-path root root-born root-sand args) - == - ++ on-manu - |= =mana:nexus - ^- @t - ?- -.mana - %& - ?+ p.mana 'Subdirectory under the explorer nexus.' - ~ - %- crip - """ - EXPLORER NEXUS — web-based tarball file browser - - Serves directory listings and file contents over HTTP with a - full CRUD interface: create, delete, upload, rename, and symlink. - Streams live directory changes via SSE so the browser updates - without polling. - - FILES: - main.sig HTTP binding process. Registers /grubbery/ - with the server nexus. - ver.ud Schema version. - - DIRECTORIES: - requests/ Per-request fibers for active HTTP connections. - """ - [%requests ~] - 'Active HTTP request fibers. Each inbound request spawns a fiber here; cleaned up on completion.' - == - %| - ?+ rail.p.mana 'File under the explorer nexus.' - [~ %'main.sig'] 'Explorer HTTP binding process. Mark: sig. Registers URL prefix with the server nexus and dispatches inbound requests to per-request fibers in /requests/.' - [~ %'ver.ud'] 'Schema version counter. Mark: ud.' - == - == - -- -:: -|% -:: HTTP response door (road from /explorer.explorer/requests/* to /explorer.explorer/main.sig) -:: -++ srv ~(. res:nex-server [%| 1 %& ~ %'main.sig']) -:: Handle GET requests -:: -++ handle-get - |= [eyre-id=@ta tree-path=path root=ball:tarball root-born=born:nexus root-sand=sand:nexus args=(list [key=@t value=@t])] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ~& > [%explorer-peek tree-path] - =/ download-param=(unit @t) (get-key:kv:html-utils 'download' args) - =/ sub=(unit ball:tarball) (~(dap ba:tarball root) tree-path) - ?: ?=(^ sub) - ?: ?&(?=(^ download-param) =(u.download-param 'tar')) - (serve-tarball eyre-id tree-path u.sub (~(dip of root-born) tree-path)) - ;< now=@da bind:m get-time:io - ;< conversions=(map mars:clay tube:clay) bind:m - (get-mark-conversions-shallow:io u.sub) - =/ bod=octs (manx-to-octs:server (render-dir tree-path root root-born root-sand now conversions)) - ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils [/text/html bod])) - (pure:m ~) - :: Not a directory — try as grub - ?~ tree-path - ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Not found')]) - (pure:m ~) - =/ parent=path (snip `path`tree-path) - =/ name=@ta (rear tree-path) - =/ parent-ball=ball:tarball (~(dip ba:tarball root) parent) - =/ content-data=(unit content:tarball) - ?~ fil.parent-ball ~ - (find-grub name u.fil.parent-ball) - ?~ content-data - ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Not found')]) - (pure:m ~) - =/ =cage cage.u.content-data - =/ pretty-param=(unit @t) (get-key:kv:html-utils 'pretty' args) - ?^ pretty-param - :: ?pretty: render noun as text instead of binary download - =/ bod=octs (as-octs:mimes:html (crip (noah q.cage))) - ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils [/text/plain bod])) - (pure:m ~) - ;< =mime bind:m (cage-to-mime:io cage) - ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils [p.mime q.mime])) - (pure:m ~) -:: Handle POST requests (delete actions) -:: -++ handle-post - |= [eyre-id=@ta tree-path=path root-sand=sand:nexus req=inbound-request:eyre] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - :: Check for multipart upload - =/ content-type=(unit @t) - (get-header:http 'content-type' header-list.request.req) - ?: ?& ?=(^ content-type) - =('multipart/form-data; boundary=' (end 3^30 u.content-type)) - == - (handle-upload eyre-id tree-path req) - :: Form-encoded POST - =/ args=key-value-list:kv:html-utils (parse-body:kv:html-utils body.request.req) - =/ action=(unit @t) (get-key:kv:html-utils 'action' args) - =/ redirect-url=tape - ?~(tree-path "/grubbery/ball" "/grubbery/ball{(trip (spat tree-path))}") - ?~ action - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing action')]) - (pure:m ~) - ?+ u.action - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Unknown action')]) - (pure:m ~) - :: - %'delete-grub' - =/ filename=@t (fall (get-key:kv:html-utils 'filename' args) '') - :: cull road: up 3 from /explorer.explorer/requests/[id] to root, then file - ;< ~ bind:m (cull:io /delete [%& %& tree-path filename]) - ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) - (pure:m ~) - :: - %'delete-folder' - =/ foldername=@t (fall (get-key:kv:html-utils 'foldername' args) '') - =/ folder-path=path (snoc tree-path foldername) - ;< ~ bind:m (cull:io /delete [%& %| folder-path]) - ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) - (pure:m ~) - :: - %'create-folder' - =/ foldername=@t (fall (get-key:kv:html-utils 'foldername' args) '') - =/ dir-name=@ta foldername - =/ dir-neck=(unit neck:tarball) (parse-extension:tarball dir-name) - =/ folder-path=path (snoc tree-path dir-name) - =/ new-ball=ball:tarball [`[~ dir-neck ~] ~] - ;< ~ bind:m (make:io /mkd [%& %| folder-path] &+[[~ ~] [~ ~] new-ball]) - ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) - (pure:m ~) - :: - %'create-symlink' - =/ linkname=@t (fall (get-key:kv:html-utils 'linkname' args) '') - ?: =('' linkname) - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing linkname')]) - (pure:m ~) - =/ target=@t (fall (get-key:kv:html-utils 'target' args) '') - ?: =('' target) - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing target')]) - (pure:m ~) - =/ sym=(unit symlink:tarball) (parse-symlink:tarball target) - ?~ sym - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid symlink target')]) - (pure:m ~) - ;< ~ bind:m (make:io /make [%& %& tree-path linkname] |+[%.n [%symlink !>(u.sym)] ~]) - ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) - (pure:m ~) - :: - %'add-weir-road' - =/ category=@t (fall (get-key:kv:html-utils 'category' args) '') - =/ road-path=@t (fall (get-key:kv:html-utils 'road-path' args) '') - =/ road-type=@t (fall (get-key:kv:html-utils 'road-type' args) '') - ?: |(=('' category) =('' road-path)) - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing fields')]) - (pure:m ~) - =/ pax=path (stab road-path) - =/ new-road=road:tarball - ?: =('file' road-type) - ?~ pax - [%& %| /] - [%& %& (snip `path`pax) (rear pax)] - [%& %| pax] - =/ dir-sand=sand:nexus (~(dip of root-sand) tree-path) - =/ cur=weir:nexus (fall fil.dir-sand [~ ~ ~]) - =/ new=weir:nexus - ?+ category cur - %'write' cur(make (~(put in make.cur) new-road)) - %'poke' cur(poke (~(put in poke.cur) new-road)) - %'read' cur(peek (~(put in peek.cur) new-road)) - == - ;< ~ bind:m (sand:io /sand [%& %| tree-path] `new) - ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) - (pure:m ~) - :: - %'del-weir-road' - =/ category=@t (fall (get-key:kv:html-utils 'category' args) '') - =/ road-path=@t (fall (get-key:kv:html-utils 'road-path' args) '') - =/ road-type=@t (fall (get-key:kv:html-utils 'road-type' args) '') - ?: =('' category) - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing category')]) - (pure:m ~) - =/ pax=path (stab road-path) - =/ del-road=road:tarball - ?: =('file' road-type) - ?~ pax - [%& %| /] - [%& %& (snip `path`pax) (rear pax)] - [%& %| pax] - =/ dir-sand=sand:nexus (~(dip of root-sand) tree-path) - =/ cur=weir:nexus (fall fil.dir-sand [~ ~ ~]) - =/ new=weir:nexus - ?+ category cur - %'write' cur(make (~(del in make.cur) del-road)) - %'poke' cur(poke (~(del in poke.cur) del-road)) - %'read' cur(peek (~(del in peek.cur) del-road)) - == - ;< ~ bind:m (sand:io /sand [%& %| tree-path] `new) - ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) - (pure:m ~) - :: - %'clear-weir' - ;< ~ bind:m (sand:io /sand [%& %| tree-path] ~) - ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) - (pure:m ~) - == -:: Handle multipart file upload -:: -++ handle-upload - |= [eyre-id=@ta tree-path=path req=inbound-request:eyre] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ parts=(unit (list [@t part:multipart])) - (de-request:multipart header-list.request.req body.request.req) - ?~ parts - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid multipart data')]) - (pure:m ~) - :: Build mime→mark tubes for uploaded file extensions - ;< now=@da bind:m get-time:io - =/ exts=(set @ta) - %- ~(gas in *(set @ta)) - %+ murn u.parts - |= [field-name=@t =part:multipart] - ?. =('file' field-name) ~ - ?~ file.part ~ - (parse-extension:tarball u.file.part) - ;< conversions=(map mars:clay tube:clay) bind:m - =/ m (fiber:fiber:nexus ,(map mars:clay tube:clay)) - =/ ext-list=(list @ta) ~(tap in exts) - =| convs=(map mars:clay tube:clay) - |- ^- form:m - ?~ ext-list (pure:m convs) - =/ =mars:clay [%mime i.ext-list] - ;< tube=(unit tube:clay) bind:m - (get-tube:io mars) - =? convs ?=(^ tube) - (~(put by convs) mars u.tube) - $(ext-list t.ext-list) - :: Build ball from multipart using from-parts - =/ new=ball:tarball - (from-parts:tarball *ball:tarball ~ u.parts now conversions) - ~& > [%upload-result (ball-to-tree:tarball new)] - :: Make each top-level entry: files then directories - =/ files=(list [@ta content:tarball]) - ?~ fil.new ~ - ~(tap by contents.u.fil.new) - |- - ?^ files - =/ [name=@ta =content:tarball] i.files - ;< ~ bind:m - (make:io /upload [%& %& tree-path name] |+[%.n cage.content ~]) - $(files t.files) - =/ dirs=(list [@ta ball:tarball]) ~(tap by dir.new) - |- - ?^ dirs - =/ [name=@ta sub=ball:tarball] i.dirs - ;< ~ bind:m - (make:io /upload [%& %| (snoc tree-path name)] &+[[~ ~] [~ ~] sub]) - $(dirs t.dirs) - =/ redirect-url=tape - ?~(tree-path "/grubbery/ball" "/grubbery/ball{(trip (spat tree-path))}") - ;< ~ bind:m (send-simple:srv eyre-id [[303 ~[['location' (crip redirect-url)]]] ~]) - (pure:m ~) -:: Serve a directory as a tarball download -:: -++ serve-tarball - |= [eyre-id=@ta tree-path=path b=ball:tarball sub-born=born:nexus] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ stamped=ball:tarball (stamp-mtimes:nexus sub-born b) - ;< now=@da bind:m get-time:io - ;< conversions=(map mars:clay tube:clay) bind:m - (get-mark-conversions:io stamped) - =/ tar=tarball:tarball - (~(make-tarball gen:tarball [now conversions]) tree-path stamped) - =/ tar-data=octs (encode-tarball:tarball tar) - =/ dir-name=tape - ?~(tree-path "root" (trip (rear tree-path))) - =/ headers=header-list:http - :~ ['content-type' 'application/x-tar'] - ['content-disposition' (crip "attachment; filename=\"{dir-name}.tar\"")] - == - ;< ~ bind:m (send-simple:srv eyre-id [[200 headers] `tar-data]) - (pure:m ~) -:: Find a grub by exact name in a lump -:: -++ find-grub - |= [seg=@ta =lump:tarball] - ^- (unit content:tarball) - (~(get by contents.lump) seg) -:: Handle SSE stream: subscribe to root, push change events -:: -++ handle-stream - |= [eyre-id=@ta req=inbound-request:eyre watch-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?. (is-sse-request:http-utils req) - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'SSE only')]) - (pure:m ~) - ;< ~ bind:m (send-header:srv eyre-id sse-header:http-utils) - ;< initial-seen=seen:nexus bind:m (peek:io /initial [%& %| ~] ~) - =/ prev-born=born:nexus - ?. ?&(?=(%& -.initial-seen) ?=(%ball -.p.initial-seen)) - *born:nexus - born.p.initial-seen - =/ prev-weir=(unit weir:nexus) - ?. ?&(?=(%& -.initial-seen) ?=(%ball -.p.initial-seen)) - ~ - =/ s (~(dip of sand.p.initial-seen) watch-path) - fil.s - ;< * bind:m (keep:io /ball [%& %| ~] ~) - ;< =bowl:nexus bind:m (get-bowl:io /sse) - ;< ~ bind:m (send-wait:io (add now.bowl ~s30)) - |- - ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /ball) - ?- -.nw - %wake - ;< ~ bind:m (send-data:srv eyre-id `sse-keep-alive:http-utils) - ;< =bowl:nexus bind:m (get-bowl:io /sse) - ;< ~ bind:m (send-wait:io (add now.bowl ~s30)) - $ - %news - ?. ?=([%ball *] view.nw) $ - =/ root=ball:tarball ball.view.nw - =/ root-born=born:nexus born.view.nw - =/ root-sand=sand:nexus sand.view.nw - =/ watch-sand=sand:nexus (~(dip of root-sand) watch-path) - =/ new-weir=(unit weir:nexus) fil.watch-sand - =/ what=(set lane:tarball) (diff-born-state:nexus prev-born root-born) - =. prev-born root-born - =/ par=ball:tarball (~(dip ba:tarball root) watch-path) - =/ par-born=born:nexus (~(dip of root-born) watch-path) - =/ url-prefix=tape (build-url watch-path) - ;< =bowl:nexus bind:m (get-bowl:io /sse) - :: Only build tubes for marks of files that changed in watched dir - =/ changed-marks=(set mark) - %- ~(gas in *(set mark)) - %+ murn ~(tap in what) - |= =lane:tarball - ^- (unit mark) - ?. ?=(%& -.lane) ~ - ?. =(path.p.lane watch-path) ~ - ?~ fil.par ~ - =/ ct=(unit content:tarball) (~(get by contents.u.fil.par) name.p.lane) - ?~ ct ~ - `p.cage.u.ct - ;< conversions=(map mars:clay tube:clay) bind:m - (build-mark-conversions:io changed-marks) - =/ lanes=(list lane:tarball) ~(tap in what) - |- - ?~ lanes - :: Check if watched directory was deleted - =/ still-exists=? - ?| =(~ watch-path) - ?=(^ (~(dap ba:tarball root) watch-path)) - == - ?. still-exists - =/ =json - (pairs:enjs:format ~[['action' s+'deleted']]) - =/ =sse-event:http-utils [~ `'ball-change' [(en:json:html json)]~] - =/ data=octs (sse-encode:http-utils ~[sse-event]) - ;< ~ bind:m (send-data:srv eyre-id `data) - (pure:m ~) - :: Check for weir change - ?. =(prev-weir new-weir) - =. prev-weir new-weir - =/ weir-html=tape - (zing (turn (render-weir new-weir url-prefix) en-xml:html)) - =/ =json - %- pairs:enjs:format - :~ ['action' s+'weir'] - ['html' s+(crip weir-html)] - == - =/ =sse-event:http-utils [~ `'ball-change' [(en:json:html json)]~] - =/ data=octs (sse-encode:http-utils ~[sse-event]) - ;< ~ bind:m (send-data:srv eyre-id `data) - ^$ - ^$ - =/ [parent=path item=@ta is-file=?] - ?- -.i.lanes - %& [path.p.i.lanes name.p.i.lanes %.y] - %| ?~ p.i.lanes [~ %$ %.n] - [(snip `path`p.i.lanes) (rear p.i.lanes) %.n] - == - :: Skip lanes not matching watched directory - ?. =(parent watch-path) - $(lanes t.lanes) - =/ exists=? - ?: is-file - ?~ fil.par %.n - (~(has by contents.u.fil.par) item) - (~(has by dir.par) item) - ?: exists - :: Add: render full row HTML - =/ row-html=tape - ?: is-file - ?~ fil.par "" - =/ ct=(unit content:tarball) (~(get by contents.u.fil.par) item) - ?~ ct "" - (en-xml:html (render-grub-row item u.ct url-prefix watch-path par-born now.bowl conversions)) - =/ sub=(unit ball:tarball) (~(get by dir.par) item) - ?~ sub "" - (en-xml:html (render-dir-row item u.sub url-prefix)) - =/ =json - %- pairs:enjs:format - :~ ['action' s+'add'] - ['name' s+item] - ['html' s+(crip row-html)] - == - =/ =sse-event:http-utils [~ `'ball-change' [(en:json:html json)]~] - =/ data=octs (sse-encode:http-utils ~[sse-event]) - ;< ~ bind:m (send-data:srv eyre-id `data) - $(lanes t.lanes) - :: Delete: send name - =/ =json - %- pairs:enjs:format - :~ ['action' s+'del'] - ['name' s+item] - == - =/ =sse-event:http-utils [~ `'ball-change' [(en:json:html json)]~] - =/ data=octs (sse-encode:http-utils ~[sse-event]) - ;< ~ bind:m (send-data:srv eyre-id `data) - $(lanes t.lanes) - == -:: Resolve URL path — direct match only -:: -++ resolve-url-path - |= [raw=path root=ball:tarball] - ^- path - =/ current=ball:tarball root - =/ result=path ~ - |- - ?~ raw result - =/ child=(unit ball:tarball) (~(get by dir.current) i.raw) - ?^ child - $(raw t.raw, result (snoc result i.raw), current u.child) - :: No match — keep segment as-is - $(raw t.raw, result (snoc result i.raw)) -:: Build URL path from segments -:: -++ build-url - |= pax=path - ^- tape - =/ acc=tape "/grubbery/ball" - |- - ?~ pax acc - $(pax t.pax, acc (weld acc "/{(trip i.pax)}")) -:: -++ page-head - |= title=tape - ^- manx - ;head - ;title: {title} - ;meta(charset "utf-8"); - ;meta(name "viewport", content "width=device-width, initial-scale=1"); - ;link(rel "icon", href "data:,"); - ;style - ; body { font-family: monospace; margin: 20px; } - ; h1 { font-size: 18px; } - ; table { border-collapse: collapse; width: 100%; } - ; th, td { text-align: left; padding: 8px; } - ; th { border-bottom: 1px solid #ccc; } - ; a { color: #0366d6; text-decoration: none; } - ; a:hover { text-decoration: underline; } - ; .breadcrumb { margin-bottom: 10px; } - ; .breadcrumb a { margin: 0 2px; } - ; .info { margin: 10px 0; padding: 10px; background: #f6f8fa; border-radius: 6px; } - ; .info dt { font-weight: bold; float: left; width: 100px; } - ; .info dd { margin-left: 110px; margin-bottom: 4px; } - ; button { padding: 2px 8px; cursor: pointer; font-family: monospace; font-size: 12px; } - ; .del-form { display: inline; } - ; .symlink-target { color: #6a737d; } - ; .mark-mismatch { color: #cb2431; font-weight: bold; } - ; .action-row { margin: 6px 0; display: flex; gap: 6px; align-items: center; } - ; .action-row label { font-weight: bold; min-width: 110px; } - ; .inline-form { display: flex; gap: 4px; align-items: center; } - ; .inline-form input[type="text"] { padding: 2px 4px; font-family: monospace; font-size: 12px; width: 120px; } - ; .weir-system { color: #e36209; font-weight: bold; } - ; .weir-label { color: #6a737d; margin-right: 4px; } - ; .weir-roads { color: #6f42c1; } - ; .weir-road-item { margin-right: 8px; } - ; .weir-del { font-size: 10px; padding: 0 4px; margin-left: 2px; color: #cb2431; cursor: pointer; } - ; select { padding: 2px 4px; font-family: monospace; font-size: 12px; } - ; .sortable { cursor: pointer; user-select: none; } - ; .sortable:hover { background: #f0f0f0; } - ; .sortable::after { content: ' \2195'; opacity: 0.3; } - ; .sortable.asc::after { content: ' \2191'; opacity: 1; } - ; .sortable.desc::after { content: ' \2193'; opacity: 1; } - == - == -:: -++ breadcrumb - |= pax=path - ^- manx - =/ seg-data=(list [seg=@ta url=tape]) - =/ built=path ~ - =/ acc=(list [seg=@ta url=tape]) ~ - =/ rem=path pax - |- - ?~ rem (flop acc) - =. built (snoc built i.rem) - =/ url=tape (build-url built) - $(rem t.rem, acc [[i.rem url] acc]) - =/ crumbs=(list manx) - :~ ;a/"/grubbery/ball": / - == - =. crumbs - %+ weld crumbs - %+ turn seg-data - |= [seg=@ta url=tape] - ^- manx - ;a/"{url}": {(trip seg)}/ - ;div.breadcrumb - ;* crumbs - == -:: -++ dir-info - |= [b=ball:tarball url-prefix=tape dir-weir=(unit weir:nexus) pax=path] - ^- manx - =/ neck-display=tape - ?~ fil.b "-" - ?~ neck.u.fil.b "-" - (trip u.neck.u.fil.b) - =/ nkids=@ud - %+ add - ~(wyt by dir.b) - ?~(fil.b 0 ~(wyt by contents.u.fil.b)) - =/ download-url=tape "{url-prefix}?download=tar" - ;div.info - ;dl - ;dt: nexus - ;dd: {neck-display} - ;dt: items - ;dd: {(scow %ud nkids)} - ;dt: sandbox - ;dd#sandbox-value - ;* (render-sandbox dir-weir url-prefix pax) - == - == - ;* ?. ?=(^ pax) ~ - :~ ;div.action-row - ;form.inline-form(method "POST", action url-prefix) - ;label: Add to Weir: - ;select(name "category") - ;option(value "write"): write - ;option(value "poke"): poke - ;option(value "read"): read - == - ;select(name "road-type") - ;option(value "dir"): dir - ;option(value "file"): file - == - ;input(type "text", name "road-path", placeholder "/path", required ""); - ;input(type "hidden", name "action", value "add-weir-road"); - ;button(type "submit"): Add - == - == - == - ;div.action-row - ;label: Download: - ;a/"{download-url}" - ;button(type "button"): Download as Tarball - == - == - ;div.action-row - ;form.inline-form(method "POST", action url-prefix) - ;label: Create Folder: - ;input(type "text", name "foldername", placeholder "folder-name", required ""); - ;input(type "hidden", name "action", value "create-folder"); - ;button(type "submit"): Create - == - == - ;div.action-row - ;form.inline-form(method "POST", action url-prefix) - ;label: Create Symlink: - ;input(type "text", name "linkname", placeholder "link-name", required ""); - ;input(type "text", name "target", placeholder "target-path", required ""); - ;input(type "hidden", name "action", value "create-symlink"); - ;button(type "submit"): Create - == - == - ;div.action-row - ;form.inline-form(method "POST", action url-prefix, enctype "multipart/form-data") - ;label: Upload Grub: - ;input(type "file", name "file"); - ;button(type "submit"): Upload - == - == - ;div.action-row - ;form.inline-form(method "POST", action url-prefix, enctype "multipart/form-data") - ;label: Upload Grubs: - ;input(type "file", name "file", multiple ""); - ;button(type "submit"): Upload All - == - == - ;div.action-row - ;form.inline-form(method "POST", action url-prefix, enctype "multipart/form-data") - ;label: Upload Directory: - ;input(type "file", name "file", webkitdirectory "", directory ""); - ;button(type "submit"): Upload Directory - == - == - == -:: -++ render-sandbox - |= [dir-weir=(unit weir:nexus) url-prefix=tape pax=path] - ^- (list manx) - ?. ?=(^ pax) - :~ ;span.weir-system: unrestricted - == - (render-weir dir-weir url-prefix) -:: -++ render-weir - |= [dir-weir=(unit weir:nexus) url-prefix=tape] - ^- (list manx) - ?~ dir-weir - :~ ;span.weir-system: unrestricted - == - =/ items=(list manx) - ;: weld - (render-weir-category "write" make.u.dir-weir url-prefix) - (render-weir-category "poke" poke.u.dir-weir url-prefix) - (render-weir-category "read" peek.u.dir-weir url-prefix) - == - %+ snoc items - ;form.del-form(method "POST", action url-prefix) - ;input(type "hidden", name "action", value "clear-weir"); - ;button.weir-del(type "submit", onclick "return confirm('Remove weir? This gives unrestricted access.')"): clear weir - == -:: -++ render-weir-category - |= [label=tape roads=(set road:tarball) url-prefix=tape] - ^- (list manx) - =/ road-items=(list manx) - %+ turn ~(tap in roads) - |= =road:tarball - ^- manx - =/ display=tape (render-road road) - =/ [road-path=tape road-type=tape] (road-to-form road) - ;span.weir-road-item - ;span.weir-roads: {display} - ;form.del-form(method "POST", action url-prefix) - ;input(type "hidden", name "action", value "del-weir-road"); - ;input(type "hidden", name "category", value label); - ;input(type "hidden", name "road-path", value road-path); - ;input(type "hidden", name "road-type", value road-type); - ;button.weir-del(type "submit"): x - == - == - %+ weld - :~ ;span.weir-label: {label}: - == - ?~ road-items - :~ ;span.weir-roads: - - ;br; - == - (snoc road-items ;br;) -:: -++ render-road - |= =road:tarball - ^- tape - ?- -.road - %& (render-lane p.road) - %| - =/ ups=tape (reap p.p.road '^') - "{ups}{(render-lane q.p.road)}" - == -:: -++ road-to-form - |= =road:tarball - ^- [path=tape type=tape] - ?- -.road - %& - ?- -.p.road - %& [(trip (spat (snoc path.p.p.road name.p.p.road))) "file"] - %| [(trip (spat p.p.road)) "dir"] - == - %| - ?- -.q.p.road - %& [(trip (spat (snoc path.p.q.p.road name.p.q.p.road))) "file"] - %| [(trip (spat p.q.p.road)) "dir"] - == - == -:: -++ render-lane - |= =lane:tarball - ^- tape - ?- -.lane - %& - =/ dir=tape (trip (spat path.p.lane)) - "{dir}/{(trip name.p.lane)}" - %| - ?~(p.lane "/" (trip (spat p.lane))) - == -:: -++ render-dir - |= $: pax=path - root=ball:tarball - root-born=born:nexus - root-sand=sand:nexus - now=@da - conversions=(map mars:clay tube:clay) - == - ^- manx - =/ b=ball:tarball (~(dip ba:tarball root) pax) - =/ b-born=born:nexus (~(dip of root-born) pax) - =/ dir-sand=sand:nexus (~(dip of root-sand) pax) - =/ dir-weir=(unit weir:nexus) fil.dir-sand - =/ path-display=tape - ?~ pax "/" - (trip (spat pax)) - =/ kids dir.b - =/ file-contents=(map @ta content:tarball) - ?~ fil.b ~ - contents.u.fil.b - =/ subdirs=(list @ta) ~(tap in ~(key by kids)) - =/ files=(list @ta) ~(tap in ~(key by file-contents)) - =/ url-prefix=tape (build-url pax) - ;html - ;+ (page-head "Index of {path-display}") - ;body - ;+ (breadcrumb pax) - ;h1: Index of {path-display} - ;+ (dir-info b url-prefix dir-weir pax) - ;table#listing(data-path (trip (spat pax))) - ;tr - ;th.sortable(data-col "0", onclick "sortTable(0)"): Name - ;th.sortable(data-col "1", onclick "sortTable(1)"): Mark - ;th.sortable(data-col "2", onclick "sortTable(2)"): Mime Type - ;th.sortable(data-col "3", onclick "sortTable(3)"): Size - ;th.sortable(data-col "4", onclick "sortTable(4)"): Modified - ;th: Actions - == - ;* - =/ rows=(list manx) ~ - :: Parent link - =? rows ?=(^ pax) - =/ parent=path (snip `path`pax) - =/ parent-url=tape (build-url parent) - %+ snoc rows - ;tr - ;td - ;a/"{parent-url}": ../ - == - ;td: - - ;td: - - ;td: - - ;td: - - ;td: - - == - :: Subdirectories - =. rows - %+ weld rows - %+ turn subdirs - |= name=@ta - ^- manx - =/ sub=ball:tarball (~(got by kids) name) - (render-dir-row name sub url-prefix) - :: Grubs - =. rows - %+ weld rows - %+ turn files - |= name=@ta - ^- manx - =/ =content:tarball (~(got by file-contents) name) - (render-grub-row name content url-prefix pax b-born now conversions) - rows - == - ;script: {(trip sse-script)} - == - == -:: -++ sse-script - ^- @t - ''' - var sortCol = 0, sortAsc = true; - function getRows() { - var tbl = document.getElementById('listing'); - return Array.from(tbl.querySelectorAll('tr[data-name]')); - } - function sortVal(row, col) { - if (col === 3) return parseInt(row.dataset.size || '0') || 0; - return (row.cells[col] && row.cells[col].textContent || '').toLowerCase(); - } - function doSort() { - var tbl = document.getElementById('listing'); - var tb = tbl.querySelector('tbody') || tbl; - var rows = getRows(); - rows.sort(function(a, b) { - var ta = a.dataset.type || '', tb2 = b.dataset.type || ''; - if (ta !== tb2) { var df = ta === 'dir' ? -1 : 1; return sortAsc ? df : -df; } - var va = sortVal(a, sortCol), vb = sortVal(b, sortCol); - var cmp = (typeof va === 'number') ? va - vb : (va < vb ? -1 : va > vb ? 1 : 0); - return sortAsc ? cmp : -cmp; - }); - rows.forEach(function(r) { tb.appendChild(r); }); - tbl.querySelectorAll('th.sortable').forEach(function(th) { - th.classList.remove('asc', 'desc'); - if (parseInt(th.dataset.col) === sortCol) th.classList.add(sortAsc ? 'asc' : 'desc'); - }); - } - function sortTable(col) { - if (sortCol === col) { sortAsc = !sortAsc; } - else { sortCol = col; sortAsc = true; } - doSort(); - } - (function() { - doSort(); - var tbl = document.getElementById('listing'); - if (!tbl) return; - var tb = tbl.querySelector('tbody') || tbl; - var es = new EventSource('/grubbery/ball/stream?path=' + tbl.dataset.path); - es.addEventListener('ball-change', function(e) { - var d = JSON.parse(e.data); - if (d.action === 'weir') { - var sb = document.getElementById('sandbox-value'); - if (sb) sb.innerHTML = d.html; - return; - } - if (d.action === 'deleted') { - document.body.innerHTML = '

Directory deleted

Back to root

'; - es.close(); - return; - } - var row = tb.querySelector('tr[data-name="' + d.name + '"]'); - if (row) row.remove(); - if (d.action === 'add' && d.html) { - tb.insertAdjacentHTML('beforeend', d.html); - doSort(); - } - }); - window.addEventListener('beforeunload', function() { es.close(); }); - })(); - ''' -:: -:: -:: -++ format-size - |= n=@ud - ^- tape - ?: (lth n 1.024) - "{(scow %ud n)} B" - ?: (lth n 1.048.576) - "{(scow %ud (div n 1.024))} KB" - "{(scow %ud (div n 1.048.576))} MB" -:: -++ render-dir-row - |= [name=@ta sub=ball:tarball url-prefix=tape] - ^- manx - =/ dir-url=tape "{url-prefix}/{(trip name)}" - ;tr(data-name (trip name), data-type "dir") - ;td - ;a/"{dir-url}": {(trip name)}/ - == - ;td: - - ;td: - - ;td: - - ;td: - - ;td - ;a/"{dir-url}?download=tar" - ;button(type "button"): Download - == - ;form.del-form(method "POST", action url-prefix) - ;input(type "hidden", name "action", value "delete-folder"); - ;input(type "hidden", name "foldername", value (trip name)); - ;button(type "submit", onclick "return confirm('Delete folder {(trip name)} and all its contents?')"): Delete - == - == - == -:: -++ render-grub-row - |= $: name=@ta - =content:tarball - url-prefix=tape - pax=path - dir-born=born:nexus - now=@da - conversions=(map mars:clay tube:clay) - == - ^- manx - =/ mtime-display=tape - =/ node=(unit [=tote:nexus bags=(map @ta sack:nexus)]) - (~(get of dir-born) ~) - ?~ node "-" - =/ sk=(unit sack:nexus) (~(get by bags.u.node) name) - ?~ sk "-" - (en:datetime-local:iso-8601 da.file.u.sk) - =/ cag=cage cage.content - ?: =(%symlink p.cag) - =/ sym !<(symlink:tarball q.cag) - =/ target-display=tape (trip (encode-symlink:tarball sym)) - =/ resolved-path=path (resolve-symlink:tarball sym pax) - =/ target-url=tape "/grubbery/ball{(trip (spat resolved-path))}" - ;tr(data-name (trip name), data-type "grub") - ;td - ;a/"{target-url}": {(trip name)} - ;span.symlink-target: -> {target-display} - == - ;td: symlink - ;td: - - ;td: - - ;td: {mtime-display} - ;td - ;form.del-form(method "POST", action url-prefix) - ;input(type "hidden", name "action", value "delete-grub"); - ;input(type "hidden", name "filename", value (trip name)); - ;button(type "submit", onclick "return confirm('Delete {(trip name)}?')"): Delete - == - == - == - =/ display-name=tape (trip name) - =/ file-url=tape "{url-prefix}/{display-name}" - =/ mark-name=tape (trip p.cag) - =/ ext=(unit @ta) (parse-extension:tarball name) - =/ mark-matches=? - ?~ ext %.n - =(u.ext p.cag) - =/ mark-class=tape ?:(mark-matches "" " mark-mismatch") - =/ =mime - ?: =(%mime p.cag) - !<(mime q.cag) - (~(cage-to-mime gen:tarball [now conversions]) cag) - =/ mime-raw=tape (trip (spat p.mime)) - =/ mime-display=tape ?~(mime-raw "" (tail mime-raw)) - =/ is-binary=? =(p.mime /application/x-urb-jam) - =/ view-url=tape ?:(is-binary "{file-url}?pretty" file-url) - ;tr(data-name (trip name), data-type "grub", data-size (scow %ud p.q.mime)) - ;td - ;a/"{view-url}": {display-name} - == - ;td(class mark-class): {mark-name} - ;td: {mime-display} - ;td: {(format-size p.q.mime)} - ;td: {mtime-display} - ;td - ;a/"{file-url}"(download display-name) - ;button(type "button"): Download - == - ;form.del-form(method "POST", action url-prefix) - ;input(type "hidden", name "action", value "delete-grub"); - ;input(type "hidden", name "filename", value (trip name)); - ;button(type "submit", onclick "return confirm('Delete {(trip name)}?')"): Delete - == - == - == --- diff --git a/desk/nex/mcp.hoon b/desk/nex/mcp.hoon deleted file mode 100644 index f66bc38..0000000 --- a/desk/nex/mcp.hoon +++ /dev/null @@ -1,539 +0,0 @@ -:: mcp nexus: MCP JSON-RPC endpoint for grubbery -:: -:: Tree layout: -:: /main.sig bind HTTP path, dispatch requests -:: /requests/{id} parse HTTP, route protocol vs tools/call -:: /tools/{id} tool execution grub (mark %tool-state) -:: /cus/** custom tool sources (user-managed, inert) -:: /bin/** compiled tools (mark %temp on success, %tang on failure) -:: /builder.sig watches ball mirror + /cus/, compiles to /bin/ -:: -/+ nexus, tarball, io=fiberio, server, nex-server, nex-mcp -/+ json-utils, nex-tools, nex-clurd, build, loader -!: :: turn on stack trace -=> |% - ++ srv ~(. res:nex-server [%| 1 %& ~ %'main.sig']) - :: Subject vase for compiling user tools. - :: Includes standard library + grubbery libs. - :: - ++ tool-subject - ^- vase - !> :* nexus=nexus - tarball=tarball - io=io - json-utils=json-utils - tools=nex-tools - clurd=nex-clurd - ..zuse - == - :: Ensure /bin/ subdirectory exists - :: - ++ ensure-bin-dir - |= bin-path=path - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< exists=? bind:m (peek-exists:io /chk [%| 0 %| bin-path]) - ?: exists (pure:m ~) - (make:io /mkd [%| 0 %| bin-path] &+[*sand:nexus *gain:nexus empty-dir:loader]) - :: Cull a grub if it exists - :: - ++ cull-if-exists - |= =road:tarball - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< exists=? bind:m (peek-exists:io /chk road) - ?: exists (cull:io /cull road) - (pure:m ~) - :: Compile a tool source file and write result to /bin/. - :: Success → mark %temp (compiled vase). - :: Failure → mark %tang (error trace). - :: - ++ compile-lib - |= [file-path=path file-name=@ta source=cage] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ bin-path=path (weld /bin file-path) - =/ bin-road=road:tarball [%| 0 %& bin-path file-name] - =/ bon=path (weld file-path /[file-name]/hoon) - =/ src=@t (extract-src:build source) - =/ res=(each vase tang) - (build-hoon:build tool-subject bon src) - ?: ?=(%| -.res) - ~& > [%mcp-builder-fail bon] - (write-bin bin-path bin-road tang+!>(p.res)) - :: Validate as $tool - =/ check=(each tool:nex-tools tang) - (mule |.(!<(tool:nex-tools p.res))) - ?: ?=(%| -.check) - =/ =tang [[%leaf "does not nest against $tool:nex-tools"] p.check] - ~& > [%mcp-builder-type-fail bon] - (write-bin bin-path bin-road tang+!>(tang)) - ~& > [%mcp-builder-ok bon] - (write-bin bin-path bin-road temp+p.res) - :: Write a cage to /bin/, creating dir if needed, overwriting if exists. - :: - ++ write-bin - |= [bin-path=path bin-road=road:tarball =cage] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< exists=? bind:m (peek-exists:io /chk bin-road) - ?: exists - :: Cull and recreate: mark may change (temp↔tang) - ;< ~ bind:m (cull:io /build bin-road) - (make:io /build bin-road |+[%.n cage ~]) - ;< ~ bind:m (ensure-bin-dir bin-path) - (make:io /build bin-road |+[%.n cage ~]) - :: Peek /bin/ and extract all successfully compiled tools. - :: Walks the ball tree recursively, collecting vase-marked grubs. - :: - ++ get-dynamic-tools - =/ m (fiber:fiber:nexus ,(map @t tool:nex-tools)) - ^- form:m - ;< bin-seen=seen:nexus bind:m (peek:io /bin [%| 1 %| /bin] ~) - ?. ?=([%& %ball *] bin-seen) - (pure:m ~) - :: Collect cus/ first, then std/ — std wins on name conflicts - =/ cus-ball=ball:tarball - (~(gut by dir.ball.p.bin-seen) %cus *ball:tarball) - =/ std-ball=ball:tarball - (~(gut by dir.ball.p.bin-seen) %std *ball:tarball) - =/ cus-tools=(map @t tool:nex-tools) (collect-tools cus-ball) - =/ std-tools=(map @t tool:nex-tools) (collect-tools std-ball) - (pure:m (~(uni by cus-tools) std-tools)) - :: - ++ collect-tools - |= b=ball:tarball - ^- (map @t tool:nex-tools) - =/ result=(map @t tool:nex-tools) ~ - :: Collect files in this directory - =? result ?=(^ fil.b) - =/ files=(list [@ta content:tarball]) - ~(tap by contents.u.fil.b) - |- - ?~ files result - =/ [name=@ta =content:tarball] i.files - ?: !=(p.cage.content %temp) - $(files t.files) - =/ got=(each tool:nex-tools tang) - (mule |.(!<(tool:nex-tools q.cage.content))) - ?. ?=(%& -.got) - $(files t.files) - $(files t.files, result (~(put by result) name:p.got p.got)) - :: Recurse into subdirectories - =/ dirs=(list [@ta ball:tarball]) ~(tap by dir.b) - |- - ?~ dirs result - =/ [* sub=ball:tarball] i.dirs - $(dirs t.dirs, result (~(uni by result) (collect-tools sub))) - :: +extract-tool: try to pull a tool from a compiled .temp cage - :: - ++ extract-tool - |= =cage - ^- (unit tool:nex-tools) - ?. =(%temp p.cage) ~ - =/ got=(each tool:nex-tools tang) - (mule |.(!<(tool:nex-tools q.cage))) - ?:(?=(%& -.got) `p.got ~) - :: +find-tool-in-ball: search std/ then cus/ in a /bin/ ball - :: - :: Iterates all compiled files and matches by the tool's name - :: field, since filenames (get-ship) differ from tool names (get_ship). - :: - ++ find-tool-in-ball - |= [tool-name=@t b=ball:tarball] - ^- (unit tool:nex-tools) - =/ dirs=(list @ta) ~[%std %cus] - |- - ?~ dirs ~ - =/ sub=ball:tarball (~(gut by dir.b) i.dirs *ball:tarball) - ?~ fil.sub $(dirs t.dirs) - =/ files=(list [@ta content:tarball]) - ~(tap by contents.u.fil.sub) - |- - ?~ files ^$(dirs t.dirs) - =/ tl=(unit tool:nex-tools) (extract-tool cage.i.files) - ?~ tl $(files t.files) - ?: =(tool-name name:u.tl) tl - $(files t.files) - :: +find-tang-in-ball: search for a compile error by filename - :: - :: Converts tool name underscores to hyphens to match filenames - :: (e.g. get_ship → get-ship). Returns tang if found. - :: - ++ find-tang-in-ball - |= [tool-name=@t b=ball:tarball] - ^- (unit tang) - =/ file-name=@ta - (crip (turn (trip tool-name) |=(c=@t ?:(=(c '_') '-' c)))) - =/ dirs=(list @ta) ~[%std %cus] - |- - ?~ dirs ~ - =/ sub=ball:tarball (~(gut by dir.b) i.dirs *ball:tarball) - ?~ fil.sub $(dirs t.dirs) - =/ ct=(unit content:tarball) - (~(get by contents.u.fil.sub) file-name) - ?~ ct $(dirs t.dirs) - ?. =(%tang p.cage.u.ct) $(dirs t.dirs) - =/ got=(each tang tang) - (mule |.(!<(tang q.cage.u.ct))) - ?:(?=(%& -.got) `p.got `~[leaf+"tool {(trip tool-name)} failed to compile"]) - :: +await-tool: load a compiled tool handler by name - :: - :: Subscribes to /bin/ — the bond returns the initial view, - :: so there's no race with the builder. If the tool is already - :: compiled, we get it immediately. If it failed to compile - :: (tang), we fail with the error. Otherwise we wait for updates. - :: - ++ await-tool - |= tool-name=@t - =/ m (fiber:fiber:nexus ,(each tool:nex-tools tang)) - ^- form:m - ;< init=view:nexus bind:m (keep:io /await-tool [%| 1 %| /bin] ~) - ?: ?=([%ball *] init) - =/ found=(unit tool:nex-tools) - (find-tool-in-ball tool-name ball.init) - ?^ found (pure:m [%& u.found]) - :: No temp — check for compile error - =/ err=(unit tang) (find-tang-in-ball tool-name ball.init) - ?^ err (pure:m [%| u.err]) - :: Neither — wait for builder - |- - ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /await-tool) - ?: ?=(%wake -.nw) $ - ?. ?=([%ball *] view.nw) $ - =/ found=(unit tool:nex-tools) - (find-tool-in-ball tool-name ball.view.nw) - ?^ found (pure:m [%& u.found]) - :: No temp — check for fresh compile error - =/ err=(unit tang) (find-tang-in-ball tool-name ball.view.nw) - ?^ err (pure:m [%| u.err]) - $ - |- - ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /await-tool) - ?: ?=(%wake -.nw) $ - ?. ?=([%ball *] view.nw) $ - =/ found=(unit tool:nex-tools) - (find-tool-in-ball tool-name ball.view.nw) - ?^ found (pure:m [%& u.found]) - =/ err=(unit tang) (find-tang-in-ball tool-name ball.view.nw) - ?^ err (pure:m [%| u.err]) - $ - :: Builder event: news from std or cus watch, or timer wake - :: - +$ builder-event - $% [%std =view:nexus] - [%cus =view:nexus] - [%wake ~] - == - :: Take news from either /std or /cus watch, or timer wake - :: - ++ take-builder-event - =/ m (fiber:fiber:nexus ,builder-event) - ^- form:m - |= input:fiber:nexus - :+ ~ state - ?+ in [%skip ~] - ~ [%wait ~] - [~ %news * *] - ?: =(/std wire.u.in) [%done %std view.u.in] - ?: =(/cus wire.u.in) [%done %cus view.u.in] - [%skip ~] - [~ %arvo [%wait @ ~] %behn %wake *] - ?~ error.sign.u.in [%done %wake ~] - [%fail %timer-error u.error.sign.u.in] - == - :: Strip .hoon suffix from grub name (ball mirror uses dotted names) - :: - ++ strip-hoon - |= name=@ta - ^- @ta - =/ t=tape (trip name) - =/ len=@ud (lent t) - ?. (gth len 5) name - ?. =(".hoon" (slag (sub len 5) t)) name - (crip (scag (sub len 5) t)) - :: Compile all tool files from a ball snapshot - :: - ++ compile-ball-tools - |= [bin-prefix=path b=ball:tarball] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?~ fil.b (pure:m ~) - =/ files=(list [@ta content:tarball]) - ~(tap by contents.u.fil.b) - |- - ?~ files (pure:m ~) - =/ [file-name=@ta =content:tarball] i.files - =/ stem=@ta (strip-hoon file-name) - ~& > [%mcp-builder-compile stem] - ;< ~ bind:m (compile-lib bin-prefix stem cage.content) - $(files t.files) - :: Process born-diff changes: compile changed, cull deleted - :: - ++ process-changes - |= [bin-prefix=path root=ball:tarball changed=(set lane:tarball)] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ lanes=(list lane:tarball) ~(tap in changed) - |- - ?~ lanes (pure:m ~) - ?: ?=(%| -.i.lanes) $(lanes t.lanes) - =/ file-path=path path.p.i.lanes - =/ file-name=@ta name.p.i.lanes - =/ stem=@ta (strip-hoon file-name) - :: Check if file still exists (not a delete) - =/ sub=ball:tarball (~(dip ba:tarball root) file-path) - =/ ct=(unit content:tarball) - ?~ fil.sub ~ - (~(get by contents.u.fil.sub) file-name) - ?~ ct - ~& > [%mcp-builder-delete bin-prefix stem] - =/ bin-road=road:tarball - [%| 0 %& (weld /bin (weld bin-prefix file-path)) stem] - ;< ~ bind:m (cull-if-exists bin-road) - $(lanes t.lanes) - ~& > [%mcp-builder-compile bin-prefix stem] - ;< ~ bind:m - (compile-lib (weld bin-prefix file-path) stem cage.u.ct) - $(lanes t.lanes) - -- -^- nexus:nexus -|% -++ on-load - |= [=sand:nexus =gain:nexus =ball:tarball] - ^- [sand:nexus gain:nexus ball:tarball] - =/ =ver:loader (get-ver:loader ball) - ?+ ver !! - ?(~ [~ %0]) - %+ spin:loader [sand gain ball] - :~ (ver-row:loader 0) - [%fall %& [/ %'main.sig'] %.n [~ %sig !>(~)]] - [%fall %& [/ %'builder.sig'] %.n [~ %sig !>(~)]] - [%fall %| /requests [~ ~] [~ ~] empty-dir:loader] - [%fall %| /tools [~ ~] [~ ~] empty-dir:loader] - [%fall %| /cus [~ ~] [~ ~] empty-dir:loader] - [%fall %| /bin [~ ~] [~ ~] empty-dir:loader] - == - == -:: -++ on-file - |= [=rail:tarball =mark] - ^- spool:fiber:nexus - |= =prod:fiber:nexus - =/ m (fiber:fiber:nexus ,~) - ^- process:fiber:nexus - ?+ rail stay:m - [~ %'main.sig'] - ;< ~ bind:m (rise-wait:io prod "%mcp /main: failed") - ;< ~ bind:m (bind-http:nex-server [~ /grubbery/mcp]) - ~& > "%mcp /main: ready, bound /grubbery/mcp" - (http-dispatch:nex-server %mcp) - :: /requests/{eyre-id}: parse HTTP, dispatch - :: - [[%requests ~] @] - ;< ~ bind:m (rise-wait:io prod "%mcp request failed") - =/ eyre-id=@ta name.rail - ;< [src=@p req=inbound-request:eyre] bind:m - (get-state-as:io ,[src=@p inbound-request:eyre]) - ;< our=@p bind:m get-our:io - ?. =(src our) - (send-simple:srv eyre-id [[403 ~] `(as-octs:mimes:html 'Forbidden')]) - :: Parse JSON body - =/ bod=(unit octs) body.request.req - ?~ bod - (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing body')]) - =/ parsed=(unit json) (de:json:html q.u.bod) - ?~ parsed - (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid JSON')]) - :: tools/call: create tool grub, watch for result, respond - =/ method=(unit json) (~(get jo:json-utils u.parsed) /method) - ?: ?=([~ %s %'tools/call'] method) - =/ id=(unit json) (~(get jo:json-utils u.parsed) /id) - =/ params=(unit json) (~(get jo:json-utils u.parsed) /params) - ?~ params - (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing params')]) - =/ tool-name=(unit json) (~(get jo:json-utils u.params) /name) - =/ arguments=(unit json) (~(get jo:json-utils u.params) /arguments) - ?~ tool-name - (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing tool name')]) - ?. ?=([%s *] u.tool-name) - (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Invalid tool name')]) - =/ tool-args=(map @t json) - ?~ arguments ~ - ?. ?=([%o *] u.arguments) ~ - p.u.arguments - =/ ts=tool-state:nex-tools - [p.u.tool-name tool-args %start ~ ~] - :: Create tool grub and subscribe - :: Use eyre-id as tool grub ID so it's stable across restarts - =/ tid=@ta eyre-id - =/ tool-road=road:tarball [%| 1 %& /tools tid] - ;< exists=? bind:m (peek-exists:io /chk tool-road) - ;< * bind:m - (keep:io /watch tool-road ~) - ;< ~ bind:m - ?. exists - (make:io /make tool-road |+[%.n tool-state+!>(ts) ~]) - (pure:m ~) - :: Wait for tool to finish - |- - ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /watch) - ?: ?=(%wake -.nw) $ :: timer, keep waiting - :: Got news — extract tool-state from view - ?. ?=(%file -.view.nw) $ :: not a file update, keep waiting - =/ st=tool-state:nex-tools - !<(tool-state:nex-tools q.cage.view.nw) - ?. =(%done step.st) $ :: not done yet - ?~ update.st $ :: done but no update — shouldn't happen, keep waiting - :: Done — build JSON-RPC response from update - =/ result-type=(unit json) - (~(get jo:json-utils u.update.st) /type) - =/ rpc-result=json - ?: ?=([~ %s %'error'] result-type) - =/ msg=@t - (~(dog jo:json-utils u.update.st) /message so:dejs:format) - (rpc-error:nex-mcp rpc-internal-error:nex-mcp msg id) - =/ txt=@t - (~(dog jo:json-utils u.update.st) /text so:dejs:format) - (mcp-text-result:nex-mcp txt id) - =/ json-bytes=octs - (as-octs:mimes:html (en:json:html rpc-result)) - %- send-simple:srv - [eyre-id [[200 ~[['content-type' 'application/json']]] `json-bytes]] - :: Protocol methods (initialize, tools/list, etc.): handle inline - ;< dynamic=(map @t tool:nex-tools) bind:m get-dynamic-tools - ;< response=(unit json) bind:m (handle-request:nex-mcp u.parsed dynamic) - ?~ response - (send-simple:srv eyre-id [[202 ~] ~]) - =/ json-bytes=octs (as-octs:mimes:html (en:json:html u.response)) - %- send-simple:srv - [eyre-id [[200 ~[['content-type' 'application/json']]] `json-bytes]] - :: /builder.sig: watch ball mirror + /cus/, compile to /bin/ - :: - [~ %'builder.sig'] - ;< ~ bind:m (rise-wait:io prod "%mcp /builder: failed") - ~& > "%mcp /builder: starting" - :: Peek ball mirror for initial compile (hoon files survive clear-temp) - ;< std-init=seen:nexus bind:m - (peek:io /std-init [%& %| /sys/clay/grubbery/lib/nex/mcp/tools] ~) - ;< cus-init=seen:nexus bind:m - (peek:io /cus-init [%| 0 %| /cus] ~) - :: Initial compile from peek - =/ std-born=born:nexus - ?. ?=([%& %ball *] std-init) *born:nexus - born.p.std-init - =/ cus-born=born:nexus - ?. ?=([%& %ball *] cus-init) *born:nexus - born.p.cus-init - ;< ~ bind:m - ?. ?=([%& %ball *] std-init) (pure:m ~) - (compile-ball-tools /std ball.p.std-init) - ;< ~ bind:m - ?. ?&(?=([%& %ball *] cus-init) ?=(^ fil.ball.p.cus-init)) - (pure:m ~) - (compile-ball-tools /cus ball.p.cus-init) - :: Subscribe for ongoing changes - ;< * bind:m (keep:io /std [%& %| /sys/clay/grubbery/lib/nex/mcp/tools] ~) - ;< * bind:m (keep:io /cus [%| 0 %| /cus] ~) - ~& > "%mcp /builder: watching for changes" - |- - ;< event=builder-event bind:m take-builder-event - ?- -.event - %wake $ - %std - ?. ?=([%ball *] view.event) $ - =/ root=ball:tarball ball.view.event - =/ root-born=born:nexus born.view.event - =/ what=(set lane:tarball) - (diff-born-state:nexus std-born root-born) - =. std-born root-born - ;< ~ bind:m (process-changes /std root what) - $ - %cus - ?. ?=([%ball *] view.event) $ - =/ root=ball:tarball ball.view.event - =/ root-born=born:nexus born.view.event - =/ what=(set lane:tarball) - (diff-born-state:nexus cus-born root-born) - =. cus-born root-born - ;< ~ bind:m (process-changes /cus root what) - $ - == - :: /tools/{id}: tool process (mark %tool-state) - :: Reads tool-state, runs handler step machine, writes %done. - :: Knows nothing about HTTP — the request watcher handles that. - :: - [[%tools ~] @] - ;< ~ bind:m (rise-wait:io prod "%mcp tool failed") - ;< st=tool-state:nex-tools bind:m - (get-state-as:io ,tool-state:nex-tools) - ?: =(%done step.st) (pure:m ~) - :: Look up tool handler — waits for builder if needed - ;< got=(each tool:nex-tools tang) bind:m (await-tool tool.st) - ?: ?=(%| -.got) - =/ err-msg=@t (render-tang:build p.got) - =/ result-data=json - (pairs:enjs:format ~[['type' s+'error'] ['message' s+err-msg]]) - (replace:io !>(`tool-state:nex-tools`[tool.st args.st %done data.st `result-data])) - =/ tl=tool:nex-tools p.got - ;< result=tool-result:nex-tools bind:m handler.tl - =/ result-json=json - ?- -.result - %text (pairs:enjs:format ~[['type' s+'text'] ['text' s+text.result]]) - %error (pairs:enjs:format ~[['type' s+'error'] ['message' s+message.result]]) - == - (replace:io !>(`tool-state:nex-tools`[tool.st args.st %done data.st `result-json])) - == -++ on-manu - |= =mana:nexus - ^- @t - ?- -.mana - %& - ?+ p.mana 'Subdirectory under the MCP nexus.' - ~ - %- crip - """ - MCP NEXUS — Model Context Protocol JSON-RPC tool server - - Exposes Hoon-defined tools to AI clients (Claude Code, etc.) via - the MCP JSON-RPC protocol. Tools are compiled from source in /cus/ - into /bin/, then registered for dispatch. - - Built-in tools are loaded from /lib/nex/mcp/tools/. Custom tools - in /cus/ extend the set. The builder watches /cus/ and recompiles - on change. - - FILES: - main.sig HTTP binding process. Registers /grubbery/mcp - with the server, handles JSON-RPC dispatch. - builder.sig Tool compiler. Watches /cus/, compiles to /bin/, - registers tools in the live tool registry. - ver.ud Schema version. - - DIRECTORIES: - cus/ Custom tool sources. Drop .hoon files here to - add tools. Must produce a valid tool:tools gate. - bin/ Compiled tools. .temp = success (vase), - .tang = error. Auto-managed by builder. - tools/ Running tool instances. Each active tool call - gets a fiber here (tool-state mark). Cleaned - up on completion. - requests/ Per-request fibers for active HTTP connections. - """ - [%cus ~] - 'Custom tool sources. Drop .hoon files here to add MCP tools. The builder auto-compiles them into /bin/. Source must produce a gate matching the tool:tools interface.' - [%bin ~] - 'Compiled tools. .temp = successful build (executable vase), .tang = compile error (stack trace). Auto-managed by the builder — do not edit directly.' - [%tools ~] - 'Running tool instances. Each active tool call gets a fiber here with its state (tool-state mark). Cleaned up on completion.' - [%requests ~] - 'Per-request fibers for active MCP HTTP connections.' - == - %| - ?+ rail.p.mana 'File under the MCP nexus.' - [~ %'main.sig'] 'MCP HTTP binding process. Mark: sig. Registers /grubbery/mcp with the server, parses JSON-RPC requests, dispatches to tool fibers in /tools/.' - [~ %'builder.sig'] 'MCP tool builder. Mark: sig. Watches /cus/ for source changes, compiles to /bin/, registers tools in the live registry.' - [~ %'ver.ud'] 'Schema version counter. Mark: ud.' - == - == --- diff --git a/desk/nex/peers.hoon b/desk/nex/peers.hoon deleted file mode 100644 index ef7ad3a..0000000 --- a/desk/nex/peers.hoon +++ /dev/null @@ -1,404 +0,0 @@ -:: peers nexus: external ship gateway + role-based access control -:: -:: All foreign ship interaction enters through /peers.peers. Each ship gets -:: a gateway process at /ships/~ship/main.sig that handles bidirectional -:: pokes. Usergroups provide role-based weir management: group -:: membership determines what each ship can reach. -:: -:: /peers.peers/ -:: /main.sig inbound poke router + weir manager -:: /usergroups/ role-based access data -:: /who/ group → members: /who/admins → (set @p) -:: hierarchical: /who/acme/eng/leads → (set @p) -:: /how/ group → weir template: /how/admins → weir -:: /how/public weir is applied to ALL ships -:: /ships/ per-ship directories, created lazily on first poke -:: our own ship lives here too, with full tree access -:: (skips usergroup lookup entirely) -:: /~zod/ weir derived from union of group weir templates -:: /main.sig inbound gateway: page → cage, forward to tree -:: -:: Inbound poke flow (%poke-in): -:: 1. Foreign ship pokes grubbery with [dest =page] -:: 2. Grubbery forwards %poke-in to /peers.peers/main.sig -:: 3. /peers.peers/main.sig creates /ships/~src/ dir+gateway if absent -:: 4. /peers.peers/main.sig forwards %poke-in to /ships/~src/main -:: 5. Gateway asserts from is /peers.peers/main.sig (trusted router) -:: 6. Converts page to cage, forwards to dest in tree -:: -:: Outbound poke flow (%poke-out): -:: 1. Tree process pokes /peers.peers/main.sig with %poke-out [ship dude page] -:: 2. /peers.peers/main.sig sends Gall poke to [ship dude] (has syscall access) -:: -:: Weir strategy: -:: /peers.peers/ has a permissive weir (full tree, no syscalls). Anything -:: leaving /peers.peers/ gets clammed. Ship dirs have tighter weirs derived -:: from usergroup membership. /peers.peers/main.sig watches /who, /how, and -:: /ships, recalculating and %sand'ing weirs reactively. -:: -:: Security: -:: The gateway enforces provenance on %poke-in: only accepted from -:: /peers.peers/main.sig (the trusted inbound router). Grubs cannot forge -:: inbound pokes. %poke-out goes through /peers.peers/main.sig which has -:: syscall access (ship gateways don't — weirs block syscalls). -:: -/+ nexus, tarball, io=fiberio, loader -!: :: turn on stack trace -=< ^- nexus:nexus - |% - ++ on-load - |= [=sand:nexus =gain:nexus =ball:tarball] - ^- [sand:nexus gain:nexus ball:tarball] - =/ =ver:loader (get-ver:loader ball) - ?+ ver !! - ?(~ [~ %0]) - :: Permissive weir for /ships: full tree access. - :: Per-ship weirs narrow access for each foreign ship. - =/ root-roads=(set road:tarball) (sy [%& %| /]~) - =/ ships-sand=sand:nexus [`[root-roads root-roads root-roads] ~] - %+ spin:loader [sand gain ball] - :~ (ver-row:loader 0) - [%fall %& [/ %'main.sig'] %.n [~ %sig !>(~)]] - [%fall %| /usergroups/who [~ ~] [~ ~] empty-dir:loader] - [%fall %| /usergroups/how [~ ~] [~ ~] empty-dir:loader] - [%fall %| /ships ships-sand [~ ~] empty-dir:loader] - == - == - :: - ++ on-file - |= [=rail:tarball =mark] - ^- spool:fiber:nexus - |= =prod:fiber:nexus - =/ m (fiber:fiber:nexus ,~) - ^- process:fiber:nexus - :: NOTE: we switch on rail alone because ?+ [rail mark] doesn't - :: narrow rail's subfaces (path.rail stays (list @ta), breaks - :: i.t.path.rail). Mark is asserted inside each case instead. - :: - ?+ rail stay:m - :: /main.sig: poke router + weir manager - :: Routes inbound %poke-in to per-ship gateways, - :: lazily creating ship directories on first contact. - :: Watches /who, /how, and /ships for changes, re-syncs all - :: ship weirs on any change. /ships is watched to prevent - :: rogue weir manipulation — any unauthorized weir change - :: gets immediately overwritten with the correct computed - :: weir. set-weir is idempotent (no-op if weir unchanged), - :: so our own sanding triggers a second no-op sync. - :: TODO: consider making this more granular (e.g. use - :: diff-born to scope work to changed ships only) to avoid - :: the redundant pass. - :: - [~ %'main.sig'] - ?> ?=(%sig mark) - ;< ~ bind:m (rise-wait:io prod "%peers /main: failed, poke to restart") - ~& > "%peers /main: starting" - ;< * bind:m (keep:io /watch-who [%| 0 %| /usergroups/who] ~) - ;< * bind:m (keep:io /watch-how [%| 0 %| /usergroups/how] ~) - ;< * bind:m (keep:io /watch-ships [%| 0 %| /ships] ~) - |- - ;< =main-event bind:m take-main-event - ?- -.main-event - %poke - =/ =from:fiber:nexus from.main-event - =/ =cage cage.main-event - ?+ p.cage $ - %peers-sync - ~& > [%peers-main %sync] - ;< ~ bind:m sync-all-weirs - $ - %poke-in - ?. ?=(%| -.from) - ~& > [%peers-main %internal-poke-rejected] - $ - =/ src=@p src.p.from - ~& > [%peers-main %routing (scot %p src)] - ;< ~ bind:m (ensure-ship-dir src) - ;< ~ bind:m - (poke:io /forward [%| 0 %& [/ships/(scot %p src) %'main.sig']] cage) - $ - %poke-out - =/ [=ship =dude:gall =page] - !<([@p dude:gall page] q.cage) - ~& > [%peers-main %outbound (scot %p ship) dude] - ;< ~ bind:m (gall-poke:io /outbound [ship dude] [p.page !>(q.page)]) - $ - == - :: - %news - ~& > [%peers-main %change-detected wire.main-event] - ;< ~ bind:m sync-all-weirs - $ - :: - %fell - ~& > [%peers-main %fell-resubscribe wire.main-event] - ;< * bind:m - %^ keep:io wire.main-event - ?: =(/watch-who wire.main-event) [%| 0 %| /usergroups/who] - ?: =(/watch-how wire.main-event) [%| 0 %| /usergroups/how] - [%| 0 %| /ships] - ~ - $ - == - :: /ships/*/main.sig: per-ship gateway - :: Per-ship gateway: receives %poke-in from /peers.peers/main.sig, - :: converts page to cage, forwards into the tree. - :: - [[%ships @ ~] %'main.sig'] - ?> ?=(%sig mark) - ;< ~ bind:m (rise-wait:io prod "%peers /ships/*/main: failed, poke to restart") - =/ ship-name=@ta i.t.path.rail - ~& > [%peers-gateway ship-name %ready] - |- - ;< [=from:fiber:nexus =cage] bind:m take-poke-from:io - ?. ?=(%poke-in p.cage) - ~& > [%peers-gateway ship-name %unknown-mark p.cage] - $ - ?> ?& ?=(%& -.from) - =(p.from [2 [/ %'main.sig']]) - == - =/ [dest=rail:tarball =page] - !<([rail:tarball page] q.cage) - ~& > [%peers-gateway ship-name %inbound dest p.page] - =/ payload=^cage [p.page !>(q.page)] - ;< ~ bind:m (poke:io /forward [%& %& dest] payload) - $ - [[%usergroups %who *] @] - ?> ?=(%ships mark) who-file - [[%usergroups %how *] @] - ?> ?=(%weir mark) how-file - == - ++ on-manu - |= =mana:nexus - ^- @t - ?- -.mana - %& - ?+ p.mana 'Subdirectory under the peers nexus.' - ~ - %- crip - """ - PEERS NEXUS — external ship gateway with role-based access control - - All interaction from foreign ships flows through here. Each remote - ship gets its own directory under /ships/ with a gateway process - that enforces access control via weir rules. - - Access is managed through usergroups: /usergroups/who/ defines - which ships belong to which groups, /usergroups/how/ defines - what weir (sandbox rules) each group gets. The main process - syncs group membership changes to per-ship weirs automatically. - - FILES: - main.sig Main process. Routes inbound foreign pokes, - manages usergroup-to-weir synchronization. - ver.ud Schema version. - - DIRECTORIES: - usergroups/ Role-based access definitions. - usergroups/who/ Group membership. Each file is a set of @p. - Mark: ships. - usergroups/how/ Weir templates per group. Each file defines - the sandbox rules for that group. Mark: weir. - ships/ Per-ship gateways. Created lazily on first - contact. Each ship gets its own directory - with a gateway process. - """ - [%usergroups ~] - 'Usergroup definitions. /who/ has membership sets (mark: ships), /how/ has weir templates (mark: weir). Groups control what remote ships can access.' - [%usergroups %who ~] - 'Group membership sets. Each file is named for a group and contains a set of @p. Mark: ships.' - [%usergroups %how ~] - 'Weir templates per group. Each file is named for a group and defines sandbox rules applied to member ships. Mark: weir.' - [%ships ~] - 'Per-ship gateways. Created lazily on first contact. Each remote ship gets a directory here with a gateway process that routes pokes through its weir.' - == - %| - ?+ rail.p.mana 'File under the peers nexus.' - [~ %'main.sig'] 'Peers main process. Mark: sig. Routes inbound pokes from external ships, creates per-ship gateways, syncs usergroup membership to per-ship weirs.' - [~ %'ver.ud'] 'Schema version counter. Mark: ud.' - == - == - -- -|% -+$ main-event - $% [%poke =from:fiber:nexus =cage] - [%news =wire =view:nexus] - [%fell =wire] - == -:: -++ take-main-event - =/ m (fiber:fiber:nexus ,main-event) - ^- form:m - |= =input:fiber:nexus - :+ ~ state.input - ?+ in.input [%skip ~] - ~ [%wait ~] - [~ %veto *] - [%fail (veto-error:io dart.u.in.input)] - [~ %poke * *] - [%done %poke [from cage]:u.in.input] - [~ %news * *] - [%done %news [wire view]:u.in.input] - [~ %fell *] - [%done %fell wire.u.in.input] - == -:: /usergroups/who/**: group membership (hierarchical paths supported) -:: State: (set @p). Pokes: %put-members, %add-member, %del-member -:: -++ who-file - |= =input:fiber:nexus - =/ m (fiber:fiber:nexus ,~) - ^- output:m - ?+ in.input [~ state.input %skip ~] - ~ [~ state.input %wait ~] - [~ %poke * *] - ?+ p.cage.u.in.input [~ state.input %skip ~] - %put-members [~ q.cage.u.in.input %wait ~] - %add-member - =/ members !<((set @p) state.input) - [~ !>((~(put in members) !<(@p q.cage.u.in.input))) %wait ~] - %del-member - =/ members !<((set @p) state.input) - [~ !>((~(del in members) !<(@p q.cage.u.in.input))) %wait ~] - == - == -:: /usergroups/how/**: weir templates (hierarchical paths supported) -:: State: weir:nexus. Pokes: %put-weir -:: -++ how-file - |= =input:fiber:nexus - =/ m (fiber:fiber:nexus ,~) - ^- output:m - ?+ in.input [~ state.input %skip ~] - ~ [~ state.input %wait ~] - [~ %poke * *] - ?. =(%put-weir p.cage.u.in.input) - [~ state.input %skip ~] - [~ q.cage.u.in.input %wait ~] - == -:: Ensure /ships/~ship/ directory exists with gateway process. -:: Our ship: no weir (full tree access). -:: Foreign ship: weir computed from current usergroups. -:: -++ ensure-ship-dir - |= src=@p - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< our=@p bind:m get-our:io - =/ ship-ta=@ta (scot %p src) - =/ ship-dir=path /ships/[ship-ta] - ;< exists=? bind:m (peek-exists:io /check-ship [%| 0 %| ship-dir]) - ?: exists (pure:m ~) - =/ ship-ball=ball:tarball - (~(put ba:tarball *ball:tarball) [/ %'main.sig'] [~ %sig !>(~)]) - ?: =(src our) - (make:io /create-ship [%| 0 %| ship-dir] &+[*sand:nexus *gain:nexus ship-ball]) - ;< [who=(map rail:tarball (set @p)) how=(map rail:tarball weir:nexus)] bind:m - read-usergroups - =/ =weir:nexus (compute-ship-weir src (build-src who) how) - =/ ship-sand=sand:nexus (~(put of *sand:nexus) / weir) - (make:io /create-ship [%| 0 %| ship-dir] &+[ship-sand *gain:nexus ship-ball]) -:: Sand weirs for all foreign ship directories from pre-built data. -:: -++ sand-all-ships - |= $: src=(map @p (set rail:tarball)) - how=(map rail:tarball weir:nexus) - ships-ball=ball:tarball - == - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< our=@p bind:m get-our:io - =/ ship-names=(list @ta) ~(tap in ~(key by dir.ships-ball)) - |- - ?~ ship-names (pure:m ~) - =/ ship-ta=@ta i.ship-names - =/ ship-p=(unit @p) (slaw %p ship-ta) - ?~ ship-p - $(ship-names t.ship-names) - ?: =(u.ship-p our) - ;< ~ bind:m (sand:io /sand-weir [%| 0 %| /ships/[ship-ta]] ~) - $(ship-names t.ship-names) - =/ =weir:nexus (compute-ship-weir u.ship-p src how) - ~& > [%peers-main %sand-weir ship-ta] - ;< ~ bind:m (sand:io /sand-weir [%| 0 %| /ships/[ship-ta]] `weir) - $(ship-names t.ship-names) -:: Full sync: read usergroups, sand all ship weirs. -:: -++ sync-all-weirs - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< [who=(map rail:tarball (set @p)) how=(map rail:tarball weir:nexus)] bind:m - read-usergroups - ;< ships-seen=seen:nexus bind:m - (peek:io /read-ships [%| 0 %| /ships] ~) - ?. ?&(?=(%& -.ships-seen) ?=(%ball -.p.ships-seen)) - ~& > [%peers-main %no-ships-data] - (pure:m ~) - =/ src=(map @p (set rail:tarball)) (build-src who) - (sand-all-ships src how ball.p.ships-seen) -:: Peek /usergroups and return parsed who + how data -:: -++ read-usergroups - =/ m (fiber:fiber:nexus ,[(map rail:tarball (set @p)) (map rail:tarball weir:nexus)]) - ^- form:m - ;< ug-seen=seen:nexus bind:m - (peek:io /read-usergroups [%| 0 %| /usergroups] ~) - ?. ?&(?=(%& -.ug-seen) ?=(%ball -.p.ug-seen)) - (pure:m [~ ~]) - =/ ug-ball=ball:tarball ball.p.ug-seen - (pure:m [(read-tree ug-ball %who (set @p)) (read-tree ug-ball %how weir:nexus)]) -:: Extract typed files from a sub-directory of a ball (recursive) -:: -++ read-tree - |* [=ball:tarball dir=@ta =mold] - ^- (map rail:tarball mold) - =/ sub=ball:tarball (~(gut by dir.ball) dir *ball:tarball) - %- ~(gas by *(map rail:tarball mold)) - %+ murn ~(tap ba:tarball sub) - |= [=rail:tarball =content:tarball] - ^- (unit [rail:tarball mold]) - =/ res (mule |.(!<(mold q.cage.content))) - ?:(?=(%| -.res) ~ `[rail p.res]) -:: Build reverse index: ship → group rails from who map -:: -++ build-src - |= who=(map rail:tarball (set @p)) - ^- (map @p (set rail:tarball)) - =/ groups=(list [rail:tarball (set @p)]) ~(tap by who) - =| acc=(map @p (set rail:tarball)) - |- - ?~ groups acc - =/ [=rail:tarball members=(set @p)] i.groups - =/ ships=(list @p) ~(tap in members) - =. acc - |- - ?~ ships acc - =/ existing=(set rail:tarball) (fall (~(get by acc) i.ships) ~) - $(ships t.ships, acc (~(put by acc) i.ships (~(put in existing) rail))) - $(groups t.groups) -:: Union two weirs (merge road sets) -:: -++ union-weirs - |= [a=weir:nexus b=weir:nexus] - ^- weir:nexus - :+ (~(uni in make.a) make.b) - (~(uni in poke.a) poke.b) - (~(uni in peek.a) peek.b) -:: Compute the weir for a single ship from pre-built data -:: -++ compute-ship-weir - |= $: =ship - src=(map @p (set rail:tarball)) - how=(map rail:tarball weir:nexus) - == - ^- weir:nexus - =/ public-weir=weir:nexus - (fall (~(get by how) [/ %public]) *weir:nexus) - =/ ship-rails=(set rail:tarball) - (fall (~(get by src) ship) ~) - =/ ship-weir=weir:nexus - %+ roll ~(tap in ship-rails) - |= [=rail:tarball acc=weir:nexus] - (union-weirs acc (fall (~(get by how) rail) *weir:nexus)) - (union-weirs ship-weir public-weir) --- diff --git a/desk/nex/root.hoon b/desk/nex/root.hoon deleted file mode 100644 index 05b3537..0000000 --- a/desk/nex/root.hoon +++ /dev/null @@ -1,110 +0,0 @@ -/+ nexus, tarball, io=fiberio, loader -^- nexus:nexus -!: :: turn on stack trace -|% -++ on-load - |= [=sand:nexus =gain:nexus =ball:tarball] - ^- [sand:nexus gain:nexus ball:tarball] - =/ =ver:loader (get-ver:loader ball) - ?+ ver !! - ?(~ [~ %0]) - %+ spin:loader [sand gain ball] - :~ (ver-row:loader 0) - [%fall %& [/sys %'main.sig'] %.n [~ %sig !>(~)]] - :: child nexuses - [%fall %| /'server.server' [~ ~] [~ ~] [`[~ `%server ~] ~]] - [%fall %| /'counter.counter' [~ ~] [~ ~] [`[~ `%counter ~] ~]] - [%fall %| /'explorer.explorer' [~ ~] [~ ~] [`[~ `%explorer ~] ~]] - [%fall %| /'peers.peers' [~ ~] [~ ~] [`[~ `%peers ~] ~]] - [%fall %| /'claude.claude' [~ ~] [~ ~] [`[~ `%claude ~] ~]] - [%fall %| /'mcp.mcp' [~ ~] [~ ~] [`[~ `%mcp ~] ~]] - [%fall %| /sys/'build.build' [~ ~] [~ ~] [`[~ `%build ~] ~]] - :: config - [%fall %| /config/creds [~ ~] [~ ~] empty-dir:loader] - :: system internals — populated by app/grubbery.hoon before - :: on-load runs. Must be preserved or the framework breaks. - [%fall %| /sys/daises [~ ~] [~ ~] empty-dir:loader] - [%fall %| /sys/nexuses [~ ~] [~ ~] empty-dir:loader] - [%fall %| /sys/tubes [~ ~] [~ ~] empty-dir:loader] - [%fall %| /sys/clay [~ ~] [~ ~] empty-dir:loader] - [%fall %| /sys/dill [~ ~] [~ ~] empty-dir:loader] - [%fall %| /sys/jael [~ ~] [~ ~] empty-dir:loader] - == - == -:: -++ on-file - |= [=rail:tarball mak=mark] - ^- spool:fiber:nexus - |= =prod:fiber:nexus - =/ m (fiber:fiber:nexus ,~) - ^- process:fiber:nexus - ?+ rail stay:m - [[%sys ~] %'main.sig'] - ;< ~ bind:m (rise-wait:io prod "%sys /main: failed, poke to restart") - stay:m - == -++ on-manu - |= =mana:nexus - ^- @t - ?- -.mana - %& - ?+ p.mana 'Subdirectory under the root nexus.' - ~ - %- crip - """ - GRUBBERY ROOT — top-level tarball - - The root nexus bootstraps all system nexuses and user data. - Each subdirectory with a neck (e.g. server.server/) is a child - nexus managed by its own nex/ file. - - NEXUSES: - server.server/ HTTP gateway. Routes requests to handler nexuses. - claude.claude/ AI chat via Anthropic API. - mcp.mcp/ MCP (Model Context Protocol) JSON-RPC tool server. - explorer.explorer/ Web-based tarball file browser. - counter.counter/ Auto-incrementing counters with live UI. - peers.peers/ External ship gateway with role-based access control. - wallet.wallet/ Bitcoin wallet management. - - SYSTEM: - sys/ System internals — build compiler, terminal logs, - cryptographic keys, root main process. - config/ User configuration and credentials. - """ - [%sys ~] - %- crip - """ - sys/ — System internals. - - SUBDIRECTORIES: - build.build/ Hoon compiler nexus. Compiles /src/ to /bin/. - dill/ Terminal I/O logs. Mark: dill-told. History retained. - jael/ Cryptographic key storage. History retained. - private-keys.jael-private-keys — ship private keys. - public-keys.jael-public-keys-result — PKI cache. - - FILES: - main.sig Root system process. Mark: sig. - """ - [%config ~] - %- crip - """ - config/ — User configuration. - - SUBDIRECTORIES: - creds/ API keys and service credentials. Files here are - read by nexuses that need them (e.g. claude reads - config.json for its API key, MCP tools read - telegram tokens, S3 keys, etc). - """ - [%config %creds ~] - 'Credentials store. Service API keys and tokens. Files are read by nexuses on demand.' - == - %| - ?+ rail.p.mana 'File under the root nexus.' - [~ %'ver.ud'] 'Schema version counter. Mark: ud. Incremented on structural migrations in on-load.' - [[%sys ~] %'main.sig'] 'Root system process. Mark: sig. Manages system-level coordination.' - == - == --- diff --git a/desk/nex/server.hoon b/desk/nex/server.hoon deleted file mode 100644 index d70ff6b..0000000 --- a/desk/nex/server.hoon +++ /dev/null @@ -1,998 +0,0 @@ -:: server nexus: HTTP bindings manager -:: -:: Central HTTP gateway between eyre and the rest of the tree. -:: Other nexuses poke to register/unregister URL path bindings, -:: receive forwarded requests, and poke back with responses. -:: Server authorizes every response to ensure it came from the -:: process that owns the binding. -:: -:: /server.server/ -:: /main.server-state binding registry + request router + response proxy -:: -:: State (server-state in nex-server): -:: bindings: (map binding:eyre rail) — URL prefix → handler location -:: connections: (map @ta binding:eyre) — eyre-id → owning binding -:: -:: Request flow: -:: 1. Eyre sends %handle-http-request to grubbery -:: 2. Grubbery forwards to /server.server/main.server-state -:: 3. Server finds longest-prefix binding match -:: 4. Records connection (eyre-id → binding), forwards to handler rail -:: 5. Handler pokes back %server-action [%send eyre-id update] -:: 6. Server verifies sender matches handler rail, sends to eyre -:: 7. On %kick or %simple, connection is cleaned up -:: -:: Cancel flow: -:: 1. Eyre on-leave sends %handle-http-cancel -:: 2. Server removes connection, forwards cancel to handler rail -:: -:: -/+ nexus, tarball, io=fiberio, server, http-utils, html-utils, nex-server, multipart, loader -!: :: turn on stack trace -=< ^- nexus:nexus - |% - ++ on-load - |= [=sand:nexus =gain:nexus =ball:tarball] - ^- [sand:nexus gain:nexus ball:tarball] - =/ =ver:loader (get-ver:loader ball) - ?+ ver !! - ?(~ [~ %0]) :: no version or version 0 - %+ spin:loader [sand gain ball] - :~ (ver-row:loader 0) - [%fall %& [/ %'main.server-state'] %.n [~ %server-state !>(`server-state:nex-server`[%0 ~ ~])]] - [%fall %| /requests [~ ~] [~ ~] empty-dir:loader] - == - == - :: - ++ on-file - |= [=rail:tarball =mark] - ^- spool:fiber:nexus - |= =prod:fiber:nexus - =/ m (fiber:fiber:nexus ,~) - ^- process:fiber:nexus - ?+ rail stay:m - [[%requests ~] @] - ;< ~ bind:m (rise-wait:io prod "%server /requests: failed") - =/ eyre-id=@ta name.rail - ;< [src=@p req=inbound-request:eyre] bind:m (get-state-as:io ,[src=@p inbound-request:eyre]) - =/ [site=path args=quay:eyre] (parse-url:http-utils url.request.req) - (handle-ball-api eyre-id src req site args) - :: - [~ %'main.server-state'] - ;< ~ bind:m (rise-wait:io prod "%server /main: failed, poke to restart") - ~& > "%server /main: binding /grubbery/api" - ;< =dude:gall bind:m get-agent:io - ;< ~ bind:m - %- send-cards:io - [%pass /eyre-api %arvo %e %connect [~ /grubbery/api] dude]~ - ~& > "%server /main: ready" - |- - ;< [=from:fiber:nexus =cage] bind:m take-poke-from:io - ;< st=server-state:nex-server bind:m (get-state-as:io server-state:nex-server) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - ?+ p.cage $ - :: Server action: bind, unbind, reset, send - :: - %server-action - =+ !<(act=server-action:nex-server q.cage) - ?- -.act - %bind - ?. ?=(%& -.from) $ - :: Resolve the target to an absolute rail. - :: If target is ~, the sender itself is the handler. - :: Otherwise, resolve the target bend relative to the sender. - :: - =/ sender-rail=rail:tarball - (resolve-rail:nex-server here.bowl p.from) - =/ handler-rail=rail:tarball - ?~ target.act sender-rail - (resolve-rail:nex-server sender-rail u.target.act) - ~& > [%server-bind binding.act handler-rail] - =. bindings.st (~(put by bindings.st) binding.act handler-rail) - ;< ~ bind:m (replace:io !>(st)) - :: Register with eyre - ;< =dude:gall bind:m get-agent:io - ;< ~ bind:m - %- send-cards:io - [%pass /eyre-bind %arvo %e %connect binding.act dude]~ - $ - :: - %unbind - ~& > [%server-unbind binding.act] - :: Kick orphaned connections for this binding - =/ orphans=(list @ta) - %+ murn ~(tap by connections.st) - |= [eid=@ta =binding:eyre] - ?. =(binding binding.act) ~ - `eid - ;< ~ bind:m - %- send-cards:io - %+ turn orphans - |= eid=@ta - [%give %kick ~[/http-response/[eid]] ~] - =. connections.st - %- ~(gas by *(map @ta binding:eyre)) - %+ skip ~(tap by connections.st) - |= [eid=@ta =binding:eyre] - =(binding binding.act) - =. bindings.st (~(del by bindings.st) binding.act) - ;< ~ bind:m (replace:io !>(st)) - $ - :: - %reset - ~& > "%server: resetting all connections" - =/ conns=(list [@ta binding:eyre]) ~(tap by connections.st) - ;< ~ bind:m - %- send-cards:io - %+ turn conns - |= [eid=@ta =binding:eyre] - [%give %kick ~[/http-response/[eid]] ~] - ;< ~ bind:m - |- - ?~ conns (pure:m ~) - =/ [eid=@ta =binding:eyre] i.conns - =/ handler=rail:tarball - (fall (~(get by bindings.st) binding) *rail:tarball) - =/ =road:tarball [%& %& handler] - ;< ~ bind:m (poke:io /cancel road handle-http-cancel+!>(eid)) - $(conns t.conns) - =. connections.st ~ - ;< ~ bind:m (replace:io !>(st)) - $ - :: - %send - :: Authorize: sender must be the handler that owns this binding. - :: Resolve sender's from to an absolute rail and compare to the - :: stored handler rail. - :: - =/ conn-binding=(unit binding:eyre) (~(get by connections.st) eyre-id.act) - ?~ conn-binding - ~& > [%server-unknown-connection eyre-id.act] - :: Forward cancel to sender so it can clean up - ?. ?=(%& -.from) $ - =/ sender-rail=rail:tarball - (resolve-rail:nex-server here.bowl p.from) - =/ =road:tarball [%& %& sender-rail] - ;< ~ bind:m (poke:io /cancel road handle-http-cancel+!>(eyre-id.act)) - $ - =/ expected-rail=(unit rail:tarball) (~(get by bindings.st) u.conn-binding) - ?~ expected-rail - ~& > [%server-binding-gone u.conn-binding] - $ - ?. ?=(%& -.from) - ~& > [%server-external-from eyre-id.act] - $ - =/ sender-rail=rail:tarball - (resolve-rail:nex-server here.bowl p.from) - ?. =(sender-rail u.expected-rail) - ~& > [%server-unauthorized eyre-id.act sender-rail u.expected-rail] - $ - =/ cards=(list card:agent:gall) (eyre-update-cards eyre-id.act eyre-update.act) - ?: ?=(?(%kick %simple) -.eyre-update.act) - =. connections.st (~(del by connections.st) eyre-id.act) - ;< ~ bind:m (replace:io !>(st)) - ;< ~ bind:m (send-cards:io cards) - $ - ;< ~ bind:m (send-cards:io cards) - $ - == - :: Incoming HTTP request from eyre - :: - %handle-http-request - =/ [eyre-id=@ta src=@p req=inbound-request:eyre] - !<([eyre-id=@ta @p inbound-request:eyre] q.cage) - ~& > [%server-request eyre-id url.request.req] - =/ site=path site:(parse-url:http-utils url.request.req) - :: Ball API: dispatch to /requests/{eyre-id} fiber - :: - ?: ?=([%grubbery %api *] site) - ;< ~ bind:m - (make:io /api [%| 0 %& /requests eyre-id] |+[%.n http-request+!>([src req]) ~]) - $ - =/ match=(unit [=binding:eyre handler=rail:tarball]) - (find-binding bindings.st site) - ?~ match - ~& > [%server-no-binding site] - ;< ~ bind:m - %- send-cards:io - (give-simple-payload:app:server eyre-id [[404 ~] `(as-octs:mimes:html 'Not Found')]) - $ - ~& > [%server-found-binding binding.u.match handler.u.match] - =. connections.st (~(put by connections.st) eyre-id binding.u.match) - ;< ~ bind:m (replace:io !>(st)) - :: Forward request to handler via absolute road - =/ =road:tarball [%& %& handler.u.match] - ;< ~ bind:m (poke:io /forward road handle-http-request+!>([eyre-id src req])) - $ - :: Client disconnected (eyre on-leave) - :: - %handle-http-cancel - =/ eyre-id=@ta !<(@ta q.cage) - ~& > [%server-cancel eyre-id] - =/ conn-binding=(unit binding:eyre) (~(get by connections.st) eyre-id) - =. connections.st (~(del by connections.st) eyre-id) - ;< ~ bind:m (replace:io !>(st)) - :: Forward cancel to handler - :: Ball API requests don't use the binding system — cull the - :: request fiber directly so SSE loops terminate on disconnect. - ?~ conn-binding - ;< ~ bind:m (cull:io /cancel [%| 0 %& /requests eyre-id]) - $ - =/ handler=rail:tarball - (fall (~(get by bindings.st) u.conn-binding) *rail:tarball) - =/ =road:tarball [%& %& handler] - ;< ~ bind:m (poke:io /cancel road handle-http-cancel+!>(eyre-id)) - $ - == - == - ++ on-manu - |= =mana:nexus - ^- @t - ?- -.mana - %& - ?+ p.mana 'Subdirectory under the server nexus.' - ~ - %- crip - """ - HTTP SERVER NEXUS — eyre request gateway - - Routes inbound HTTP requests to handler processes via URL prefix - bindings. Other nexuses register their URL prefixes here (e.g. - claude registers /grubbery/claude/, explorer registers /grubbery/). - - FILES: - main.server-state Active bindings and connection state. - ver.ud Schema version. - - DIRECTORIES: - requests/ Per-request fibers. Each inbound HTTP request - spawns a short-lived fiber here. Cleaned up - on response or client disconnect. - - PROCESS: - main.server-state listens for eyre %request events, matches the - URL against registered bindings, and forwards the request to - the bound handler nexus. It also manages eyre %connect/%disconnect - lifecycle and tracks open connections for cleanup. - """ - [%requests ~] - 'Active HTTP request fibers. Each inbound request spawns a fiber here; cleaned up on completion or client disconnect.' - == - %| - ?+ rail.p.mana 'File under the server nexus.' - [~ %'main.server-state'] - %- crip - """ - main.server-state — Server process + binding registry. Mark: server-state. - - TYPE: [%0 bindings=(map path rail:tarball) connections=(map @ud duct)] - bindings: URL prefix -> handler rail. Set by child nexuses on load. - connections: Open eyre connection IDs. Tracked for cleanup. - - This is the only process. It multiplexes all HTTP events: - inbound requests, response completions, and connection lifecycle. - """ - [~ %'ver.ud'] - 'Schema version counter. Mark: ud.' - == - == - -- -|% -:: +handle-ball-api: route /grubbery/api requests by HTTP method -:: -++ handle-ball-api - |= [eyre-id=@ta src=@p req=inbound-request:eyre site=path args=quay:eyre] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< our=@p bind:m get-our:io - ?. =(src our) - (send-error eyre-id 403 'Forbidden') - ?> ?=([%grubbery %api *] site) - =/ rest=path t.t.site - :: Route by first segment: file, kids, tree, tar, dir - ?~ rest - (send-error eyre-id 400 'Missing endpoint: file, kids, tree, tar, dir') - =/ endpoint=@tas i.rest - =/ api-path=path t.rest - ?+ [method.request.req endpoint] - (send-error eyre-id 405 'Method Not Allowed') - :: GET /file/... — peek file, convert to mime - [%'GET' %file] (serve-file-peek eyre-id api-path args) - :: GET /kids/... — immediate children (files + subdirs) - [%'GET' %kids] (serve-kids eyre-id api-path) - :: GET /tree/... — recursive tree with marks - [%'GET' %tree] (serve-tree eyre-id api-path) - :: GET /tar/... — tarball download - [%'GET' %tar] (serve-tar eyre-id api-path) - :: PUT /file/... — create file - [%'PUT' %file] (serve-file-make eyre-id api-path args body.request.req) - :: PUT /dir/... — create directory - [%'PUT' %dir] (serve-dir-make eyre-id api-path) - :: POST /poke/... — poke file process - [%'POST' %poke] (serve-post eyre-id api-path args body.request.req %poke) - :: POST /over/... — overwrite file content - [%'POST' %over] (serve-post eyre-id api-path args body.request.req %over) - :: POST /diff/... — same-mark diff, notify process - [%'POST' %diff] (serve-post eyre-id api-path args body.request.req %diff) - :: GET /keep/... — SSE stream of changes - [%'GET' %keep] (serve-keep eyre-id api-path args req) - :: DELETE /file/... — delete file - [%'DELETE' %file] (serve-file-cull eyre-id api-path) - :: DELETE /dir/... — delete directory - [%'DELETE' %dir] (serve-dir-cull eyre-id api-path) - :: GET /sand/... — get directory permissions as JSON - [%'GET' %sand] (serve-sand-peek eyre-id api-path) - :: GET /weir/... — get single directory weir as JSON - [%'GET' %weir] (serve-weir-peek eyre-id api-path) - :: PUT /weir/... — replace weir with JSON body - [%'PUT' %weir] (serve-weir-put eyre-id api-path body.request.req) - :: DELETE /weir/... — clear weir - [%'DELETE' %weir] (serve-weir-del eyre-id api-path) - :: POST /upload/... — multipart file/directory upload - [%'POST' %upload] (serve-upload eyre-id api-path req) - :: GET /manu/... — documentation for a path - [%'GET' %manu] (serve-manu eyre-id api-path) - == -:: +send-error: respond with HTTP error -:: -++ send-error - |= [eyre-id=@ta code=@ud msg=@t] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - %- send-cards:io - (give-simple-payload:app:server eyre-id [[code ~] `(as-octs:mimes:html msg)]) -:: +send-ok: respond with 200 and message -:: -++ send-ok - |= [eyre-id=@ta msg=@t] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - %- send-cards:io - (give-simple-payload:app:server eyre-id [[200 ~] `(as-octs:mimes:html msg)]) -:: +send-created: respond with 201 Created -:: -++ send-created - |= eyre-id=@ta - =/ m (fiber:fiber:nexus ,~) - ^- form:m - %- send-cards:io - (give-simple-payload:app:server eyre-id [[201 ~] `(as-octs:mimes:html 'Created')]) -:: +send-mime: respond with 200 and mime body -:: -++ send-mime - |= [eyre-id=@ta =mime] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - %- send-cards:io - (give-simple-payload:app:server eyre-id (mime-response:http-utils mime)) -:: +maybe-convert: optionally convert cage through ?mark= param -:: Returns ~ on error (error response already sent). -:: -++ maybe-convert - |= [eyre-id=@ta =cage mark-param=(unit @t)] - =/ m (fiber:fiber:nexus ,(unit ^cage)) - ^- form:m - ?~ mark-param (pure:m `cage) - =/ target-mark=@tas u.mark-param - ?: =(p.cage target-mark) (pure:m `cage) - ;< tube=(unit tube:clay) bind:m (get-tube:io [p.cage target-mark]) - ?~ tube - ;< ~ bind:m (send-error eyre-id 400 'No tube for mark conversion') - (pure:m ~) - =/ result=(each vase tang) (mule |.((u.tube q.cage))) - ?: ?=(%| -.result) - ;< ~ bind:m (send-error eyre-id 500 'Mark conversion failed') - (pure:m ~) - (pure:m `[target-mark p.result]) -:: +send-json: respond with JSON body -:: -++ send-json - |= [eyre-id=@ta =json] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ bod=octs (as-octs:mimes:html (en:json:html json)) - %- send-cards:io - (give-simple-payload:app:server eyre-id (mime-response:http-utils [/application/json bod])) -:: +peek-root: peek the root ball -:: -++ peek-root - =/ m (fiber:fiber:nexus ,(unit ball:tarball)) - ^- form:m - ;< root-seen=seen:nexus bind:m (peek:io /peek [%& %| ~] ~) - ?. ?=([%& %ball *] root-seen) - (pure:m ~) - (pure:m `ball.p.root-seen) -:: +serve-file-peek: GET /file — peek grub, convert to mime -:: -++ serve-file-peek - |= [eyre-id=@ta api-path=path args=(list [key=@t value=@t])] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?~ api-path - (send-error eyre-id 400 'File path required') - ;< root=(unit ball:tarball) bind:m peek-root - ?~ root - (send-error eyre-id 500 'Peek failed') - =/ parent=path (snip `path`api-path) - =/ name=@ta (rear api-path) - =/ parent-ball=ball:tarball (~(dip ba:tarball u.root) parent) - =/ content-data=(unit content:tarball) - ?~ fil.parent-ball ~ - (~(get by contents.u.fil.parent-ball) name) - ?~ content-data - (send-error eyre-id 404 'Not found') - =/ =cage cage.u.content-data - =/ mark-param=(unit @t) (get-key:kv:html-utils 'mark' args) - ;< converted=(unit ^cage) bind:m (maybe-convert eyre-id cage mark-param) - ?~ converted (pure:m ~) - ;< =mime bind:m (cage-to-mime:io u.converted) - (send-mime eyre-id mime) -:: +serve-kids: GET /kids — immediate children (files + subdirs) -:: -++ serve-kids - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< root=(unit ball:tarball) bind:m peek-root - ?~ root - (send-error eyre-id 500 'Peek failed') - =/ sub=(unit ball:tarball) (~(dap ba:tarball u.root) api-path) - ?~ sub - (send-error eyre-id 404 'Not found') - =/ files=(list @ta) (~(lis ba:tarball u.sub) /) - =/ subs=(list @ta) (~(lss ba:tarball u.sub) /) - %+ send-json eyre-id - %- pairs:enjs:format - :~ ['files' [%a (turn files |=(n=@ta s+n))]] - ['dirs' [%a (turn subs |=(n=@ta s+n))]] - == -:: +serve-tree: GET /tree — recursive tree with marks -:: -++ serve-tree - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< root=(unit ball:tarball) bind:m peek-root - ?~ root - (send-error eyre-id 500 'Peek failed') - =/ sub=(unit ball:tarball) (~(dap ba:tarball u.root) api-path) - ?~ sub - (send-error eyre-id 404 'Not found') - (send-json eyre-id (tree-to-json:tarball (ball-to-tree:tarball u.sub))) -:: +serve-tar: GET /tar — tarball download -:: -++ serve-tar - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< root-seen=seen:nexus bind:m (peek:io /peek [%& %| ~] ~) - ?. ?=([%& %ball *] root-seen) - (send-error eyre-id 500 'Peek failed') - =/ root=ball:tarball ball.p.root-seen - =/ sub=(unit ball:tarball) (~(dap ba:tarball root) api-path) - ?~ sub - (send-error eyre-id 404 'Not found') - =/ sub-born=born:nexus (~(dip of born.p.root-seen) api-path) - =/ stamped=ball:tarball (stamp-mtimes:nexus sub-born u.sub) - ;< now=@da bind:m get-time:io - ;< conversions=(map mars:clay tube:clay) bind:m - (get-mark-conversions:io stamped) - =/ tar=tarball:tarball - (~(make-tarball gen:tarball [now conversions]) api-path stamped) - =/ tar-data=octs (encode-tarball:tarball tar) - =/ dir-name=tape - ?~(api-path "root" (trip (rear api-path))) - =/ headers=header-list:http - :~ ['content-type' 'application/x-tar'] - ['content-disposition' (crip "attachment; filename=\"{dir-name}.tar\"")] - == - %- send-cards:io - (give-simple-payload:app:server eyre-id [[200 headers] `tar-data]) -:: +serve-file-make: PUT /file — create file -:: -++ serve-file-make - |= [eyre-id=@ta api-path=path args=(list [key=@t value=@t]) body=(unit octs)] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?~ api-path - (send-error eyre-id 400 'File path required') - ?~ body - (send-error eyre-id 400 'Missing body') - =/ =rail:tarball [(snip `path`api-path) (rear api-path)] - =/ =road:tarball [%& %& rail] - ;< exists=? bind:m (peek-exists:io /check road) - ?: exists - (send-error eyre-id 409 'Already exists') - =/ mark-param=(unit @t) (get-key:kv:html-utils 'mark' args) - =/ gain=? =('true' (fall (get-key:kv:html-utils 'gain' args) '')) - =/ mime-cage=cage [%mime !>(`mime`[/application/octet-stream u.body])] - ;< converted=(unit cage) bind:m (maybe-convert eyre-id mime-cage mark-param) - ?~ converted (pure:m ~) - ;< ~ bind:m (make:io /make road [%| gain u.converted ~]) - (send-created eyre-id) -:: +serve-dir-make: PUT /dir — create directory -:: -++ serve-dir-make - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?~ api-path - (send-error eyre-id 400 'Directory path required') - =/ dir-name=@ta (rear api-path) - =/ dir-path=path (snoc (snip `path`api-path) dir-name) - =/ =road:tarball [%& %| dir-path] - ;< exists=? bind:m (peek-exists:io /check road) - ?: exists - (send-error eyre-id 409 'Already exists') - =/ init-ball=ball:tarball [`[~ ~ ~] ~] - ;< ~ bind:m (make:io /make road &+[[~ ~] [~ ~] init-ball]) - (send-created eyre-id) -:: +serve-post: POST /poke, /over, /diff — send dart to file -:: -++ serve-post - |= [eyre-id=@ta api-path=path args=(list [key=@t value=@t]) body=(unit octs) op=?(%poke %over %diff)] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?~ api-path - (send-error eyre-id 400 'File path required') - ?~ body - (send-error eyre-id 400 'Missing body') - =/ =road:tarball [%& %& (snip `path`api-path) (rear api-path)] - ;< exists=? bind:m (peek-exists:io /check road) - ?. exists - (send-error eyre-id 404 'Not found') - =/ mark-param=(unit @t) (get-key:kv:html-utils 'mark' args) - =/ mime-cage=cage [%mime !>(`mime`[/application/octet-stream u.body])] - ;< converted=(unit cage) bind:m (maybe-convert eyre-id mime-cage mark-param) - ?~ converted (pure:m ~) - ;< ~ bind:m - ?- op - %poke (poke:io /post road u.converted) - %over (over:io /post road u.converted) - %diff (diff:io /post road u.converted) - == - (send-ok eyre-id 'OK') -:: +serve-file-cull: DELETE /file — delete file -:: -++ serve-file-cull - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?~ api-path - (send-error eyre-id 400 'File path required') - =/ =road:tarball [%& %& (snip `path`api-path) (rear api-path)] - ;< exists=? bind:m (peek-exists:io /check road) - ?. exists - (send-error eyre-id 404 'Not found') - ;< ~ bind:m (cull:io /cull road) - (send-ok eyre-id 'Deleted') -:: +serve-dir-cull: DELETE /dir — delete directory -:: -++ serve-dir-cull - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?~ api-path - (send-error eyre-id 400 'Directory path required') - =/ =road:tarball [%& %| api-path] - ;< exists=? bind:m (peek-exists:io /check road) - ?. exists - (send-error eyre-id 404 'Not found') - ;< ~ bind:m (cull:io /cull road) - (send-ok eyre-id 'Deleted') -:: +ensure-parents: create parent directories if they don't exist -:: -++ ensure-parents - |= [base=path segments=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?~ segments (pure:m ~) - =/ next=path (snoc base i.segments) - =/ dir-road=road:tarball [%& %| next] - ;< exists=? bind:m (peek-exists:io /chk dir-road) - ?. exists - ;< ~ bind:m - (make:io /upload dir-road &+[[~ ~] [~ ~] `[~ ~ ~] ~]) - (ensure-parents next t.segments) - (ensure-parents next t.segments) -:: +serve-upload: POST /upload — multipart file/directory upload -:: -++ serve-upload - |= [eyre-id=@ta tree-path=path req=inbound-request:eyre] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ parts=(unit (list [@t part:multipart])) - (de-request:multipart header-list.request.req body.request.req) - ?~ parts - (send-error eyre-id 400 'Invalid multipart data') - :: Build mime→mark tubes for uploaded file extensions - =/ exts=(set @ta) - %- ~(gas in *(set @ta)) - %+ murn u.parts - |= [field-name=@t =part:multipart] - ?. =('file' field-name) ~ - ?~ file.part ~ - (parse-extension:tarball u.file.part) - ;< conversions=(map mars:clay tube:clay) bind:m - =/ m (fiber:fiber:nexus ,(map mars:clay tube:clay)) - =/ ext-list=(list @ta) ~(tap in exts) - =| convs=(map mars:clay tube:clay) - |- ^- form:m - ?~ ext-list (pure:m convs) - =/ =mars:clay [%mime i.ext-list] - ;< tube=(unit tube:clay) bind:m - (get-tube:io mars) - =? convs ?=(^ tube) - (~(put by convs) mars u.tube) - $(ext-list t.ext-list) - :: Process each file part directly - =| created=(list @t) - =/ remaining u.parts - |- - ?~ remaining - =/ response=json - %- pairs:enjs:format - :~ ['path' s+?~(tree-path '/' (spat tree-path))] - ['created' [%a (turn (flop created) |=(n=@t s+n))]] - == - =/ bod=octs (as-octs:mimes:html (en:json:html response)) - %- send-cards:io - %+ give-simple-payload:app:server eyre-id - [[201 ~[['content-type' 'application/json']]] `bod] - =/ [field-name=@t file-part=part:multipart] i.remaining - ?. =('file' field-name) - $(remaining t.remaining) - =/ filename-raw=@t - (fall file.file-part 'uploaded-file') - :: Parse filename — may include path for directory uploads - =/ filename-path=path - (fall (rush (crip (weld "/" (trip filename-raw))) stap) ~) - ?~ filename-path - $(remaining t.remaining) - :: Split into parent dirs and leaf filename - =/ [file-parent=path file-name=@ta] - ?~ t.filename-path - [~ i.filename-path] - [(snip `(list @ta)`filename-path) (rear filename-path)] - =/ full-path=path (weld tree-path file-parent) - :: Build mime cage and try mark conversion - =/ file-mime=mime - :_ (as-octs:mimes:html body.file-part) - (fall type.file-part /application/octet-stream) - =/ mime-cage=cage [%mime !>(file-mime)] - =/ ext=(unit @ta) (parse-extension:tarball file-name) - =/ final-cage=cage - ?~ ext mime-cage - =/ =mars:clay [%mime u.ext] - =/ tube=(unit tube:clay) (~(get by conversions) mars) - ?~ tube mime-cage - =/ result=(each vase tang) (mule |.((u.tube q.mime-cage))) - ?: ?=(%| -.result) mime-cage - [u.ext p.result] - :: Ensure parent dirs exist - ;< ~ bind:m (ensure-parents tree-path file-parent) - :: Create or overwrite file — keep full filename - =/ =road:tarball [%& %& full-path file-name] - ;< exists=? bind:m (peek-exists:io /chk road) - ?: exists - ;< ~ bind:m (over:io /upload road final-cage) - $(remaining t.remaining, created [filename-raw created]) - ;< ~ bind:m (make:io /upload road |+[%.n final-cage ~]) - $(remaining t.remaining, created [filename-raw created]) -:: +serve-sand-peek: GET /sand — directory permissions as JSON -:: -++ serve-sand-peek - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< dir-seen=seen:nexus bind:m (peek:io /sand [%& %| api-path] ~) - ?. ?=([%& %ball *] dir-seen) - (send-error eyre-id 404 'Not found') - (send-json eyre-id (sand-to-json:nexus sand.p.dir-seen)) -:: +serve-weir-peek: GET /weir — single directory weir as JSON -:: -++ serve-weir-peek - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< dir-seen=seen:nexus bind:m (peek:io /weir [%& %| api-path] ~) - ?. ?=([%& %ball *] dir-seen) - (send-error eyre-id 404 'Not found') - =/ =weir:nexus (fall fil.sand.p.dir-seen *weir:nexus) - (send-json eyre-id (weir-to-json:nexus weir)) -:: +serve-weir-put: PUT /weir — replace weir from JSON body -:: -++ serve-weir-put - |= [eyre-id=@ta api-path=path body=(unit octs)] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?~ body - (send-error eyre-id 400 'Missing body') - =/ jon=(unit json) (de:json:html q.u.body) - ?~ jon - (send-error eyre-id 400 'Invalid JSON') - =/ parsed=(each weir:nexus tang) - (mule |.((weir-from-json:nexus u.jon))) - ?: ?=(%| -.parsed) - (send-error eyre-id 400 'Invalid weir JSON') - ;< ~ bind:m (sand:io /weir [%& %| api-path] `p.parsed) - (send-ok eyre-id 'OK') -:: +serve-weir-del: DELETE /weir — clear weir -:: -++ serve-weir-del - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ;< ~ bind:m (sand:io /weir [%& %| api-path] ~) - (send-ok eyre-id 'Deleted') -:: +serve-manu: GET /manu — documentation for a path -:: -++ serve-manu - |= [eyre-id=@ta api-path=path] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - =/ file-road=(unit road:tarball) - ?~ api-path ~ - `[%& %& (snip `path`api-path) (rear api-path)] - ;< is-file=? bind:m - ?~ file-road (pure:(fiber:fiber:nexus ,?) %.n) - (peek-exists:io /manu-chk u.file-road) - =/ =road:tarball - ?: is-file (need file-road) - [%& %| api-path] - ;< text=@t bind:m (manu:io /manu |+road) - ?: =('' text) - (send-ok eyre-id 'No documentation') - (send-ok eyre-id text) -:: +serve-keep: GET /keep — SSE stream of changes -:: -++ serve-keep - |= [eyre-id=@ta api-path=path args=(list [key=@t value=@t]) req=inbound-request:eyre] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - ?. (is-sse-request:http-utils req) - (send-error eyre-id 400 'Requires Accept: text/event-stream') - =/ mark-param=(unit @t) (get-key:kv:html-utils 'mark' args) - :: Send SSE response header - ;< ~ bind:m - (send-cards:io [(give-sse-header:http-utils eyre-id) ~]) - :: Determine road: check if api-path points to a file - =/ file-road=(unit road:tarball) - ?~ api-path ~ - `[%& %& (snip `path`api-path) (rear api-path)] - ;< is-file=? bind:m - ?~ file-road (pure:(fiber:fiber:nexus ,?) %.n) - (peek-exists:io /check u.file-road) - =/ =road:tarball - ?: is-file (need file-road) - [%& %| api-path] - :: Subscribe to changes — bond returns initial view - ;< init=view:nexus bind:m (keep:io /keep road ~) - =/ prev-born=born:nexus - ?. ?=([%ball *] init) *born:nexus - born.init - :: Send "old" events for initial state - ;< ~ bind:m - ?+ init (pure:m ~) - :: Single file — send one "old" event - [%file *] - =/ file-name=@t - ?~ api-path '/' - (rear api-path) - =/ id=@t (scot %ud ud.file.sack.init) - =/ event-name=@t (crip "old {(trip file-name)}") - ;< body=@t bind:m (cage-to-txt cage.init mark-param) - =/ data=wain (to-wain:format body) - =/ =sse-event:http-utils [`id `event-name data] - (send-cards:io [(give-sse-event:http-utils eyre-id sse-event) ~]) - :: Directory — send "old" for each file - [%ball *] - =/ root=ball:tarball ball.init - (send-old-dir eyre-id root born.init / mark-param) - == - :: Start keep-alive timer - ;< =bowl:nexus bind:m (get-bowl:io /sse) - ;< ~ bind:m (send-wait:io (add now.bowl ~s30)) - :: Event loop - |- - ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /keep) - ?- -.nw - %wake - ;< ~ bind:m - (send-cards:io [(give-sse-keep-alive:http-utils eyre-id) ~]) - ;< =bowl:nexus bind:m (get-bowl:io /sse) - ;< ~ bind:m (send-wait:io (add now.bowl ~s30)) - $ - :: - %news - ?+ view.nw $ - :: Single file changed - [%file *] - =/ =cage cage.view.nw - =/ id=@t (scot %ud ud.file.sack.view.nw) - =/ file-name=@t - ?~ api-path '/' - (rear api-path) - =/ event-name=@t (crip "upd {(trip file-name)}") - ;< body=@t bind:m (cage-to-txt cage mark-param) - =/ data=wain (to-wain:format body) - =/ =sse-event:http-utils [`id `event-name data] - ;< ~ bind:m - (send-cards:io [(give-sse-event:http-utils eyre-id sse-event) ~]) - $ - :: Directory changed — diff born to find changed lanes - [%ball *] - =/ root=ball:tarball ball.view.nw - =/ root-born=born:nexus born.view.nw - =/ what=(set lane:tarball) (diff-born-state:nexus prev-born root-born) - =/ old-born=born:nexus prev-born - =. prev-born root-born - =/ lanes=(list lane:tarball) ~(tap in what) - |- - ?~ lanes ^$ - :: Skip directory lanes (TBD) - ?: ?=(%| -.i.lanes) - $(lanes t.lanes) - :: Lanes are relative to the subscribed subtree - =/ file-path=path path.p.i.lanes - =/ file-name=@ta name.p.i.lanes - =/ lane-path=@t (spat (snoc file-path file-name)) - :: Get file cass from new born for event ID - =/ sub-born=born:nexus (~(dip of root-born) file-path) - =/ file-sack=(unit sack:nexus) - ?~ fil.sub-born ~ - (~(get by bags.u.fil.sub-born) file-name) - =/ id=@t - ?~ file-sack '0' - (scot %ud ud.file.u.file-sack) - :: Check if lane existed in old born - =/ old-sub=born:nexus (~(dip of old-born) file-path) - =/ old-sack=(unit sack:nexus) - ?~ fil.old-sub ~ - (~(get by bags.u.fil.old-sub) file-name) - :: Get file content from the ball - =/ sub=ball:tarball (~(dip ba:tarball root) file-path) - =/ ct=(unit content:tarball) - ?~ fil.sub ~ - (~(get by contents.u.fil.sub) file-name) - ?~ ct - :: File gone — send delete event - =/ event-name=@t (crip "del {(trip lane-path)}") - =/ =sse-event:http-utils [`id `event-name ~['']] - ;< ~ bind:m - (send-cards:io [(give-sse-event:http-utils eyre-id sse-event) ~]) - $(lanes t.lanes) - :: File exists — new or upd - =/ action=@t ?~(old-sack 'new' 'upd') - =/ event-name=@t (crip "{(trip action)} {(trip lane-path)}") - =/ =cage cage.u.ct - ;< body=@t bind:m (cage-to-txt cage mark-param) - =/ data=wain (to-wain:format body) - =/ =sse-event:http-utils [`id `event-name data] - ;< ~ bind:m - (send-cards:io [(give-sse-event:http-utils eyre-id sse-event) ~]) - $(lanes t.lanes) - == - == -:: +send-old-dir: send "old" SSE events for all files in a ball -:: -++ send-old-dir - |= [eyre-id=@ta b=ball:tarball =born:nexus here=path mark-param=(unit @t)] - =/ m (fiber:fiber:nexus ,~) - ^- form:m - :: Send "old" for files in this directory - ;< ~ bind:m - ?~ fil.b (pure:m ~) - =/ files=(list [@ta content:tarball]) ~(tap by contents.u.fil.b) - |- - ?~ files (pure:m ~) - =/ [file-name=@ta =content:tarball] i.files - =/ lane-path=@t (spat (snoc here file-name)) - =/ sub-born=born:nexus (~(dip of born) here) - =/ file-sack=(unit sack:nexus) - ?~ fil.sub-born ~ - (~(get by bags.u.fil.sub-born) file-name) - =/ id=@t - ?~ file-sack '0' - (scot %ud ud.file.u.file-sack) - =/ event-name=@t (crip "old {(trip lane-path)}") - ;< body=@t bind:m (cage-to-txt cage.content mark-param) - =/ data=wain (to-wain:format body) - =/ =sse-event:http-utils [`id `event-name data] - ;< ~ bind:m - (send-cards:io [(give-sse-event:http-utils eyre-id sse-event) ~]) - $(files t.files) - :: Recurse into subdirectories - =/ dirs=(list [@ta ball:tarball]) ~(tap by dir.b) - |- - ?~ dirs (pure:m ~) - =/ [dir-name=@ta sub=ball:tarball] i.dirs - ;< ~ bind:m (send-old-dir eyre-id sub born (snoc here dir-name) mark-param) - $(dirs t.dirs) -:: -:: +cage-to-txt: convert cage to text for SSE data -:: -:: With mark param: cage → target mark → txt -:: Without: cage → txt directly -:: Falls back to mime body extraction if no txt tube exists. -:: -++ cage-to-txt - |= [=cage mark-param=(unit @t)] - =/ m (fiber:fiber:nexus ,@t) - ^- form:m - :: Step 1: optionally convert to intermediate mark - ?~ mark-param - (cage-to-txt-raw cage) - =/ target-mark=@tas u.mark-param - ?: =(p.cage target-mark) - (cage-to-txt-raw cage) - ;< tube=(unit tube:clay) bind:m (get-tube:io [p.cage target-mark]) - ?~ tube - (cage-to-txt-raw cage) - =/ result=(each vase tang) (mule |.((u.tube q.cage))) - ?: ?=(%| -.result) - (cage-to-txt-raw cage) - (cage-to-txt-raw [target-mark p.result]) -:: +cage-to-txt-raw: convert a single cage to @t -:: -++ cage-to-txt-raw - |= =cage - =/ m (fiber:fiber:nexus ,@t) - ^- form:m - ?: =(%txt p.cage) - (pure:m (of-wain:format !<(wain q.cage))) - ;< tube=(unit tube:clay) bind:m (get-tube:io [p.cage %txt]) - ?~ tube - :: Fallback: convert to mime and extract body as text - ;< =mime bind:m (cage-to-mime:io cage) - (pure:m `@t`(end [3 p.q.mime] q.q.mime)) - =/ result=(each vase tang) (mule |.((u.tube q.cage))) - ?: ?=(%| -.result) - ;< =mime bind:m (cage-to-mime:io cage) - (pure:m `@t`(end [3 p.q.mime] q.q.mime)) - (pure:m (of-wain:format !<(wain p.result))) -:: +find-suffix: returns [~ /tail] if :full is (weld :prefix /tail) -:: -++ find-suffix - |= [prefix=path full=path] - ^- (unit path) - ?~ prefix `full - ?~ full ~ - ?. =(i.prefix i.full) ~ - $(prefix t.prefix, full t.full) -:: +eyre-update-cards: build eyre response cards for an update -:: -++ eyre-update-cards - |= [eyre-id=@ta upd=eyre-update:nex-server] - ^- (list card:agent:gall) - ?- -.upd - %header - :~ :^ %give %fact ~[/http-response/[eyre-id]] - http-response-header+!>(response-header.upd) - == - %data - :~ [%give %fact ~[/http-response/[eyre-id]] http-response-data+!>(data.upd)] - == - %kick - :~ [%give %kick ~[/http-response/[eyre-id]] ~] - == - %simple - (give-simple-payload:app:server eyre-id simple-payload.upd) - == -:: +find-binding: longest-prefix match against registered bindings -:: -++ find-binding - |= [bindings=(map binding:eyre rail:tarball) site=path] - ^- (unit [=binding:eyre handler=rail:tarball]) - =| best=(unit [=binding:eyre handler=rail:tarball]) - =/ entries=(list [=binding:eyre handler=rail:tarball]) - ~(tap by bindings) - |- - ?~ entries best - ?~ (find-suffix path.binding.i.entries site) - $(entries t.entries) - ?~ best $(best `i.entries, entries t.entries) - ?: (gth (lent path.binding.i.entries) (lent path.binding.u.best)) - $(best `i.entries, entries t.entries) - $(entries t.entries) --- diff --git a/desk/nex/wallet.hoon b/desk/nex/wallet.hoon deleted file mode 100644 index 363ccee..0000000 --- a/desk/nex/wallet.hoon +++ /dev/null @@ -1,255 +0,0 @@ -:: wallet nexus: bitcoin wallet management UI (stub) -:: -/+ nexus, tarball, io=fiberio, server, http-utils, feather, nex-server, loader -!: :: turn on stack trace -=< ^- nexus:nexus - |% - ++ on-load - |= [=sand:nexus =gain:nexus =ball:tarball] - ^- [sand:nexus gain:nexus ball:tarball] - =/ =ver:loader (get-ver:loader ball) - ?+ ver !! - ?(~ [~ %0]) - %+ spin:loader [sand gain ball] - :~ (ver-row:loader 0) - [%fall %| /wallets [~ ~] [~ ~] empty-dir:loader] - [%fall %& [/ %'main.sig'] %.n [~ %sig !>(~)]] - [%fall %| /requests [~ ~] [~ ~] empty-dir:loader] - == - == - :: - ++ on-file - |= [=rail:tarball =mark] - ^- spool:fiber:nexus - |= =prod:fiber:nexus - =/ m (fiber:fiber:nexus ,~) - ^- process:fiber:nexus - ?+ rail stay:m - :: /main.sig: bind paths and dispatch requests - :: - [~ %'main.sig'] - ;< ~ bind:m (rise-wait:io prod "%wallet /main: failed") - ~& > "%wallet /main: binding /grubbery/wallet" - ;< ~ bind:m (bind-http:nex-server [~ /grubbery/wallet]) - ;< ~ bind:m (bind-http:nex-server [~ /grubbery/wallet/delete]) - ;< ~ bind:m (bind-http:nex-server [~ /grubbery/wallet/stream]) - ~& > "%wallet /main: ready" - (http-dispatch:nex-server %wallet) - :: /requests/*: individual request handlers - :: - [[%requests ~] @] - ;< ~ bind:m (rise-wait:io prod "%wallet /requests: failed") - =/ eyre-id=@ta name.rail - ;< [src=@p req=inbound-request:eyre] bind:m (get-state-as:io ,[src=@p inbound-request:eyre]) - ;< our=@p bind:m get-our:io - ?. =(src our) - ;< ~ bind:m (send-simple:srv eyre-id [[403 ~] `(as-octs:mimes:html 'Forbidden')]) - (pure:m ~) - ;< =bowl:nexus bind:m (get-bowl:io /bowl) - =/ site=path site:(parse-url:http-utils url.request.req) - =/ suffix=path - ?. ?=([%grubbery %wallet *] site) ~ - t.t.site - ?+ suffix - ;< ~ bind:m (send-simple:srv eyre-id [[404 ~] `(as-octs:mimes:html 'Not Found')]) - (pure:m ~) - :: - ~ - ?: ?=(%'POST' method.request.req) - :: Create a new wallet grub - =/ bod=(unit octs) body.request.req - ?~ bod - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing body')]) - (pure:m ~) - =/ params=(list [@t @t]) (fall (rush q.u.bod yquy:de-purl:html) ~) - =/ wallet-name=@t - |- - ?~ params 'Unnamed' - =/ [key=@t val=@t] i.params - ?: =('wallet-name' key) val - $(params t.params) - =/ wallet-key=@ta (scot %da now.bowl) - ;< ~ bind:m (make:io /make [%| 1 %& /wallets wallet-key] |+[%.n sig+!>(wallet-name) ~]) - ;< ~ bind:m (send-simple:srv eyre-id two-oh-four:http-utils) - (pure:m ~) - :: GET /: serve wallet page - =/ bod=octs (manx-to-octs:server (wallet-page)) - ;< ~ bind:m (send-simple:srv eyre-id (mime-response:http-utils [/text/html bod])) - (pure:m ~) - :: - [%delete ~] - ?. ?=(%'POST' method.request.req) - ;< ~ bind:m (send-simple:srv eyre-id [[405 ~] ~]) - (pure:m ~) - =/ bod=(unit octs) body.request.req - ?~ bod - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing body')]) - (pure:m ~) - =/ params=(list [@t @t]) (fall (rush q.u.bod yquy:de-purl:html) ~) - =/ id=(unit @t) - |- - ?~ params ~ - =/ [key=@t val=@t] i.params - ?: =('id' key) `val - $(params t.params) - ?~ id - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'Missing id')]) - (pure:m ~) - =/ wallet-key=@ta u.id - ;< ~ bind:m (cull:io /cull [%| 1 %& /wallets wallet-key]) - ;< ~ bind:m (send-simple:srv eyre-id two-oh-four:http-utils) - (pure:m ~) - :: - [%stream ~] - ?. (is-sse-request:http-utils req) - ;< ~ bind:m (send-simple:srv eyre-id [[400 ~] `(as-octs:mimes:html 'SSE only')]) - (pure:m ~) - ;< ~ bind:m (send-header:srv eyre-id sse-header:http-utils) - :: Subscribe to /wallets directory - ;< * bind:m (keep:io /wallets [%| 1 %| /wallets] ~) - ;< ~ bind:m (send-wait:io (add now.bowl ~s30)) - |- - ;< nw=news-or-wake:io bind:m (take-news-or-wake:io /wallets) - ?- -.nw - %wake - ;< ~ bind:m (send-data:srv eyre-id `sse-keep-alive:http-utils) - ;< =bowl:nexus bind:m (get-bowl:io /sse) - ;< ~ bind:m (send-wait:io (add now.bowl ~s30)) - $ - %news - =/ =sse-event:http-utils - [~ `'wallet-list-update' (manx-to-wain:http-utils (render-wallets view.nw))] - =/ data=octs (sse-encode:http-utils ~[sse-event]) - ;< ~ bind:m (send-data:srv eyre-id `data) - $ - == - == - == - ++ on-manu - |= =mana:nexus - ^- @t - ?- -.mana - %& - ?+ p.mana 'Subdirectory under the wallet nexus.' - ~ - %- crip - """ - WALLET NEXUS — Bitcoin wallet management with web UI - - Manages Bitcoin wallets with a browser-based interface. Each wallet - is stored as a grub file in /wallets/. The web UI serves at - the registered HTTP prefix with live SSE updates. - - FILES: - main.sig HTTP binding process. Serves wallet UI and - handles wallet operations. - ver.ud Schema version. - - DIRECTORIES: - wallets/ Wallet storage. Each file is a wallet grub - containing keys, addresses, and transaction - history. - requests/ Per-request fibers for active HTTP connections. - """ - [%wallets ~] - 'Wallet storage. Each file is a wallet grub containing keys, addresses, and transaction history.' - [%requests ~] - 'Per-request fibers for active HTTP connections to the wallet UI.' - == - %| - ?+ rail.p.mana 'File under the wallet nexus.' - [~ %'main.sig'] 'Wallet HTTP binding process. Mark: sig. Serves wallet UI, handles wallet operations, streams live updates via SSE.' - [~ %'ver.ud'] 'Schema version counter. Mark: ud.' - == - == - -- -|% -++ srv ~(. res:nex-server [%| 1 %& ~ %'main.sig']) -:: -++ render-wallets - |= =view:nexus - ^- manx - ?. ?=(%ball -.view) - ;div#wallet-list: No wallets - =/ files=(list [key=@ta =content:tarball]) - ?~ fil.ball.view ~ - %+ sort ~(tap by contents.u.fil.ball.view) - |= [[a=@ta *] [b=@ta *]] - (aor a b) - ?~ files - ;div#wallet-list(style "padding: 16px; text-align: center; color: var(--f3);") - ;p: No wallets yet. Add one below. - == - ;div#wallet-list - ;* %+ turn files - |= [key=@ta =content:tarball] - ^- manx - =/ name=@t !<(@t q.cage.content) - ;div(style "display: flex; justify-content: space-between; align-items: center; gap: 12px; padding: 12px; background: var(--b1); border-radius: 8px; margin-bottom: 8px;") - ;div(style "flex: 1; min-width: 0;") - ;div(style "font-weight: bold; font-size: 16px;"): {(trip name)} - ;div(style "font-size: 12px; color: var(--f3); font-family: monospace;"): {(scow %da (slav %da key))} - == - ;form(hx-post "/grubbery/wallet/delete", hx-swap "none") - ;input(type "hidden", name "id", value (trip key)); - ;button(type "submit", style "padding: 6px 12px; background: var(--b2); border: 1px solid var(--b3); color: var(--f3); border-radius: 4px; cursor: pointer; font-size: 12px;"): Delete - == - == - == -:: -++ wallet-page - |. - ^- manx - ;html - ;head - ;title: Bitcoin Wallet - ;meta(charset "utf-8"); - ;meta(name "viewport", content "width=device-width, initial-scale=1"); - ;script(src "https://unpkg.com/htmx.org@2.0.3"); - ;script(src "https://unpkg.com/htmx-ext-sse@2.2.2/sse.js"); - ;+ feather:feather - ;style - ;+ ;/ style-text - == - == - ;body - ;div(style "max-width: 700px; margin: 0 auto; padding: 32px 16px;") - ;div(style "text-align: center; margin-bottom: 24px;") - ;h1(style "font-size: 28px; font-weight: bold; margin: 0 0 4px 0;"): Bitcoin Wallet - ;p(style "font-size: 14px; color: var(--f2); margin: 0;"): Manage your Bitcoin wallets - == - :: SSE connection for live updates - ;div(hx-ext "sse", sse-connect "/grubbery/wallet/stream", sse-swap "wallet-list-update") - ;div#wallet-list: Connecting... - == - :: Add wallet form - ;div(style "background: var(--b0); border: 1px solid var(--b2); border-radius: 8px; padding: 16px; margin-top: 24px;") - ;h2(style "font-size: 18px; font-weight: bold; margin: 0 0 16px 0; text-align: center;"): Add Wallet - ;form(hx-post "/grubbery/wallet", hx-swap "none", style "display: flex; flex-direction: column; gap: 12px;") - ;div - ;label(style "display: block; font-size: 13px; font-weight: bold; margin-bottom: 4px;"): Wallet Name - ;input(type "text", name "wallet-name", placeholder "My Bitcoin Wallet", required "true", style "width: 100%; padding: 8px; border: 1px solid var(--b3); border-radius: 4px; background: var(--b1); color: var(--f0); font-family: inherit; box-sizing: border-box;"); - == - ;button(type "submit", style "padding: 12px; background: var(--f-3); color: white; border: none; border-radius: 6px; cursor: pointer; font-weight: bold; font-size: 14px;"): Add Wallet - == - == - == - == - == -:: -++ style-text - ^- tape - """ - :root \{ - --b0: #1a1a2e; --b1: #16213e; --b2: #0f3460; --b3: #533483; - --f0: #e4e4e4; --f1: #c4c4c4; --f2: #a4a4a4; --f3: #747474; - --f-1: #ff4444; --f-3: #e94560; - } - body \{ - font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; - background: var(--b0); color: var(--f0); margin: 0; - } - a \{ color: var(--f-3); } - button:hover \{ opacity: 0.85; } - """ --- diff --git a/desk/sys.kelvin b/desk/sys.kelvin index 12e745d..30d23d4 100644 --- a/desk/sys.kelvin +++ b/desk/sys.kelvin @@ -1,2 +1,3 @@ [%zuse 410] [%zuse 409] +[%zuse 408] diff --git a/desk/ted/poke.hoon b/desk/ted/poke.hoon index 3ae6f9d..967acbb 100644 --- a/desk/ted/poke.hoon +++ b/desk/ted/poke.hoon @@ -7,8 +7,8 @@ =/ m (strand ,vase) ^- form:m =+ !<([~ dest-path=path dest-name=@tas =mark =noun] arg) -=/ =action:nexus - [[/thread-poke %& dest-path dest-name] %poke [mark noun]] -;< ~ bind:m (poke-our %grubbery grubbery-action+!>(action)) +=/ req=load:remote:nexus + [[/thread-poke %& dest-path dest-name] %poke [[/ mark] noun]] +;< ~ bind:m (poke-our %grubbery grubbery-load+!>(req)) ~& > "poked {}/{(trip dest-name)} with %{(trip mark)}" (pure:m !>(~)) diff --git a/desk/tests/build.hoon b/desk/tests/build.hoon index 9fefacb..b243d15 100644 --- a/desk/tests/build.hoon +++ b/desk/tests/build.hoon @@ -28,7 +28,7 @@ ?> ?=(%& -.res) %+ expect-eq !> ^- (list import:build) - :~ [%foo [%& %& /lib %'foo.hoon']] + :~ [%file %foo [%& %& /lib %'foo.hoon']] == !> imports.p.res :: @@ -39,7 +39,7 @@ ?> ?=(%& -.res) %+ expect-eq !> ^- (list import:build) - :~ [%bar [%| 0 %& /local %'bar.hoon']] + :~ [%file %bar [%| 0 %& /local %'bar.hoon']] == !> imports.p.res :: @@ -50,7 +50,7 @@ ?> ?=(%& -.res) %+ expect-eq !> ^- (list import:build) - :~ [%bar [%| 0 %& /local %'bar.hoon']] + :~ [%file %bar [%| 0 %& /local %'bar.hoon']] == !> imports.p.res :: @@ -61,7 +61,7 @@ ?> ?=(%& -.res) %+ expect-eq !> ^- (list import:build) - :~ [%baz [%| 2 %& /lib %'baz.hoon']] + :~ [%file %baz [%| 2 %& /lib %'baz.hoon']] == !> imports.p.res :: @@ -129,7 +129,7 @@ ?> ?=(%& -.res) %+ expect-eq !> ^- (list import:build) - :~ [%x [%| 1 %& / %'foo.hoon']] + :~ [%file %x [%| 1 %& / %'foo.hoon']] == !> imports.p.res :: @@ -140,7 +140,7 @@ ?> ?=(%& -.res) %+ expect-eq !> ^- (list import:build) - :~ [%deep [%& %& /a/b/c/d %'file.hoon']] + :~ [%file %deep [%& %& /a/b/c/d %'file.hoon']] == !> imports.p.res :: @@ -151,25 +151,25 @@ ++ test-import-rule-absolute =/ res (rust "/< foo /lib/foo.hoon" import-rule:build) %+ expect-eq - !> `[%foo [%& %& /lib %'foo.hoon']] + !> `[%file %foo [%& %& /lib %'foo.hoon']] !> res :: ++ test-import-rule-relative =/ res (rust "/< bar ./bar.hoon" import-rule:build) %+ expect-eq - !> `[%bar [%| 0 %& / %'bar.hoon']] + !> `[%file %bar [%| 0 %& / %'bar.hoon']] !> res :: ++ test-import-rule-bare-relative =/ res (rust "/< bar bar.hoon" import-rule:build) %+ expect-eq - !> `[%bar [%| 0 %& / %'bar.hoon']] + !> `[%file %bar [%| 0 %& / %'bar.hoon']] !> res :: ++ test-import-rule-updirs =/ res (rust "/< baz ../../lib/baz.hoon" import-rule:build) %+ expect-eq - !> `[%baz [%| 2 %& /lib %'baz.hoon']] + !> `[%file %baz [%| 2 %& /lib %'baz.hoon']] !> res :: ++ test-import-rule-not-import @@ -187,42 +187,42 @@ :: Hyphens in path segments =/ res (rust "/< foo /lib/my-lib.hoon" import-rule:build) %+ expect-eq - !> `[%foo [%& %& /lib %'my-lib.hoon']] + !> `[%file %foo [%& %& /lib %'my-lib.hoon']] !> res :: ++ test-import-rule-dotted-path :: Dots in path segments (besides the extension) =/ res (rust "/< foo /lib/foo.bar.hoon" import-rule:build) %+ expect-eq - !> `[%foo [%& %& /lib %'foo.bar.hoon']] + !> `[%file %foo [%& %& /lib %'foo.bar.hoon']] !> res :: ++ test-import-rule-hyphenated-name :: Hyphenated import name =/ res (rust "/< my-lib /lib/foo.hoon" import-rule:build) %+ expect-eq - !> `[%my-lib [%& %& /lib %'foo.hoon']] + !> `[%file %my-lib [%& %& /lib %'foo.hoon']] !> res :: ++ test-import-rule-deep-relative :: Deep relative path ./a/b/c/file.hoon =/ res (rust "/< foo ./a/b/c/file.hoon" import-rule:build) %+ expect-eq - !> `[%foo [%| 0 %& /a/b/c %'file.hoon']] + !> `[%file %foo [%| 0 %& /a/b/c %'file.hoon']] !> res :: ++ test-import-rule-single-segment-absolute :: Single segment absolute /foo.hoon =/ res (rust "/< foo /foo.hoon" import-rule:build) %+ expect-eq - !> `[%foo [%& %& / %'foo.hoon']] + !> `[%file %foo [%& %& / %'foo.hoon']] !> res :: ++ test-import-rule-extra-whitespace :: Extra whitespace between tokens =/ res (rust "/< foo /lib/foo.hoon" import-rule:build) %+ expect-eq - !> `[%foo [%& %& /lib %'foo.hoon']] + !> `[%file %foo [%& %& /lib %'foo.hoon']] !> res :: :: ========================================== @@ -268,7 +268,8 @@ %+ expect-eq !> ^- (list @tas) ~[%alpha %beta %gamma] - !> (turn imports.p.res |=(i=import:build name.i)) + !> %+ turn imports.p.res + |=(i=import:build ?>(?=(%file -.i) name.i)) :: ++ test-parse-imports-multiline-body :: Body with multiple lines preserved @@ -341,11 +342,11 @@ ?> ?=(%& -.res) %+ expect-eq !> ^- (list import:build) - :~ [%abs [%& %& /lib %'abs.hoon']] - [%rel [%| 0 %& / %'rel.hoon']] - [%bare [%| 0 %& / %'bare.hoon']] - [%up [%| 1 %& / %'up.hoon']] - [%up2 [%| 2 %& /dir %'up2.hoon']] + :~ [%file %abs [%& %& /lib %'abs.hoon']] + [%file %rel [%| 0 %& / %'rel.hoon']] + [%file %bare [%| 0 %& / %'bare.hoon']] + [%file %up [%| 1 %& / %'up.hoon']] + [%file %up2 [%| 2 %& /dir %'up2.hoon']] == !> imports.p.res :: @@ -395,31 +396,31 @@ ++ test-resolve-import-absolute :: Absolute import resolves regardless of source location =/ here=rail:tarball [/app %'my.hoon'] - =/ imp=import:build [%foo [%& %& /lib %'foo.hoon']] + =/ imp=import:build [%file %foo [%& %& /lib %'foo.hoon']] %+ expect-eq - !> `[%foo [/lib %'foo.hoon']] + !> `[%file %foo [/lib %'foo.hoon']] !> (resolve-import:build here imp) :: ++ test-resolve-import-relative :: ./bar.hoon from /app/my.hoon → /app/bar.hoon =/ here=rail:tarball [/app %'my.hoon'] - =/ imp=import:build [%bar [%| 0 %& / %'bar.hoon']] + =/ imp=import:build [%file %bar [%| 0 %& / %'bar.hoon']] %+ expect-eq - !> `[%bar [/app %'bar.hoon']] + !> `[%file %bar [/app %'bar.hoon']] !> (resolve-import:build here imp) :: ++ test-resolve-import-updir :: ../lib/util.hoon from /app/my.hoon → /lib/util.hoon =/ here=rail:tarball [/app %'my.hoon'] - =/ imp=import:build [%util [%| 1 %& /lib %'util.hoon']] + =/ imp=import:build [%file %util [%| 1 %& /lib %'util.hoon']] %+ expect-eq - !> `[%util [/lib %'util.hoon']] + !> `[%file %util [/lib %'util.hoon']] !> (resolve-import:build here imp) :: ++ test-resolve-import-updir-too-far :: Walking up past root returns ~ =/ here=rail:tarball [/ %'my.hoon'] - =/ imp=import:build [%x [%| 2 %& / %'x.hoon']] + =/ imp=import:build [%file %x [%| 2 %& / %'x.hoon']] %+ expect-eq !> ~ !> (resolve-import:build here imp) @@ -530,8 +531,8 @@ :: Finds %hoon files, ignores others =/ =ball:tarball =/ b=ball:tarball *ball:tarball - =. b (~(put ba:tarball b) [/ %'foo.hoon'] [~ [%hoon !>('|=(a=@ a)')]]) - =. b (~(put ba:tarball b) [/ %'data.json'] [~ [%json !>(*json)]]) + =. b (~(put ba:tarball b) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ a)')]]) + =. b (~(put ba:tarball b) [/ %'data.json'] [~ [[/ %json] !>(*json)]]) b =/ sources (find-hoon-sources:build ball) ;: weld @@ -554,9 +555,9 @@ ++ test-find-hoon-sources-nested :: Finds hoon files in subdirectories =/ =ball:tarball *ball:tarball - =. ball (~(put ba:tarball ball) [/lib %'foo.hoon'] [~ [%hoon !>('1')]]) - =. ball (~(put ba:tarball ball) [/lib/deep %'bar.hoon'] [~ [%hoon !>('2')]]) - =. ball (~(put ba:tarball ball) [/ %'top.hoon'] [~ [%hoon !>('3')]]) + =. ball (~(put ba:tarball ball) [/lib %'foo.hoon'] [~ [[/ %hoon] !>('1')]]) + =. ball (~(put ba:tarball ball) [/lib/deep %'bar.hoon'] [~ [[/ %hoon] !>('2')]]) + =. ball (~(put ba:tarball ball) [/ %'top.hoon'] [~ [[/ %hoon] !>('3')]]) =/ sources (find-hoon-sources:build ball) %+ expect-eq !> 3 @@ -569,7 +570,7 @@ ++ test-build-all-single-file :: Single hoon file with no imports compiles =/ =ball:tarball - (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [%hoon !>('|=(a=@ +(a))')]]) + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) =/ res (build-all:build !>(~) ball *build-cache:build) =/ foo-res (~(get by results.res) [/ %'foo.hoon']) (expect !>(=(%.y ?=([~ %& *] foo-res)))) @@ -577,7 +578,7 @@ ++ test-build-all-syntax-error :: Bad syntax produces a tang error =/ =ball:tarball - (~(put ba:tarball *ball:tarball) [/ %'bad.hoon'] [~ [%hoon !>('|=(')]]) + (~(put ba:tarball *ball:tarball) [/ %'bad.hoon'] [~ [[/ %hoon] !>('|=(')]]) =/ res (build-all:build !>(~) ball *build-cache:build) =/ bad-res (~(get by results.res) [/ %'bad.hoon']) (expect !>(=(%.y ?=([~ %| *] bad-res)))) @@ -586,9 +587,9 @@ :: File B imports file A; B can use A's gate =/ =ball:tarball *ball:tarball =. ball - (~(put ba:tarball ball) [/lib %'add1.hoon'] [~ [%hoon !>('|=(a=@ +(a))')]]) + (~(put ba:tarball ball) [/lib %'add1.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) =. ball - (~(put ba:tarball ball) [/ %'main.hoon'] [~ [%hoon !>('/< add1 /lib/add1.hoon\0a(add1 5)')]]) + (~(put ba:tarball ball) [/ %'main.hoon'] [~ [[/ %hoon] !>('/< add1 /lib/add1.hoon\0a(add1 5)')]]) =/ res (build-all:build !>(~) ball *build-cache:build) =/ main-res (~(get by results.res) [/ %'main.hoon']) (expect !>(=(%.y ?=([~ %& *] main-res)))) @@ -596,7 +597,7 @@ ++ test-build-all-missing-dep :: Import pointing to nonexistent file → error =/ =ball:tarball - (~(put ba:tarball *ball:tarball) [/ %'main.hoon'] [~ [%hoon !>('/< missing /lib/nope.hoon\0a~')]]) + (~(put ba:tarball *ball:tarball) [/ %'main.hoon'] [~ [[/ %hoon] !>('/< missing /lib/nope.hoon\0a~')]]) =/ res (build-all:build !>(~) ball *build-cache:build) =/ main-res (~(get by results.res) [/ %'main.hoon']) (expect !>(=(%.y ?=([~ %| *] main-res)))) @@ -604,7 +605,7 @@ ++ test-build-all-cache-hit :: Second build with same content uses cache =/ =ball:tarball - (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [%hoon !>('|=(a=@ +(a))')]]) + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) =/ res1 (build-all:build !>(~) ball *build-cache:build) =/ res2 (build-all:build !>(~) ball cache.res1) =/ foo1 (~(got by results.res1) [/ %'foo.hoon']) @@ -621,10 +622,10 @@ ++ test-build-all-cache-miss :: Changing source content causes cache miss (different result) =/ ball1=ball:tarball - (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [%hoon !>('|=(a=@ +(a))')]]) + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) =/ res1 (build-all:build !>(~) ball1 *build-cache:build) =/ ball2=ball:tarball - (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [%hoon !>('|=(a=@ +(+(a)))')]]) + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(+(a)))')]]) =/ res2 (build-all:build !>(~) ball2 cache.res1) =/ foo1 (~(got by results.res1) [/ %'foo.hoon']) =/ foo2 (~(got by results.res2) [/ %'foo.hoon']) @@ -637,9 +638,9 @@ :: Two files importing each other → circular dependency errors =/ =ball:tarball *ball:tarball =. ball - (~(put ba:tarball ball) [/ %'a.hoon'] [~ [%hoon !>('/< b ./b.hoon\0a~')]]) + (~(put ba:tarball ball) [/ %'a.hoon'] [~ [[/ %hoon] !>('/< b ./b.hoon\0a~')]]) =. ball - (~(put ba:tarball ball) [/ %'b.hoon'] [~ [%hoon !>('/< a ./a.hoon\0a~')]]) + (~(put ba:tarball ball) [/ %'b.hoon'] [~ [[/ %hoon] !>('/< a ./a.hoon\0a~')]]) =/ res (build-all:build !>(~) ball *build-cache:build) =/ a-res (~(get by results.res) [/ %'a.hoon']) =/ b-res (~(get by results.res) [/ %'b.hoon']) @@ -652,9 +653,9 @@ :: If a dep fails, dependents get dep-failed error =/ =ball:tarball *ball:tarball =. ball - (~(put ba:tarball ball) [/lib %'bad.hoon'] [~ [%hoon !>('|=(')]]) + (~(put ba:tarball ball) [/lib %'bad.hoon'] [~ [[/ %hoon] !>('|=(')]]) =. ball - (~(put ba:tarball ball) [/ %'main.hoon'] [~ [%hoon !>('/< bad /lib/bad.hoon\0a(bad 1)')]]) + (~(put ba:tarball ball) [/ %'main.hoon'] [~ [[/ %hoon] !>('/< bad /lib/bad.hoon\0a(bad 1)')]]) =/ res (build-all:build !>(~) ball *build-cache:build) =/ bad-res (~(get by results.res) [/lib %'bad.hoon']) =/ main-res (~(get by results.res) [/ %'main.hoon']) @@ -667,11 +668,11 @@ :: a→b→c: three-level chain compiles correctly =/ =ball:tarball *ball:tarball =. ball - (~(put ba:tarball ball) [/lib %'c.hoon'] [~ [%hoon !>('|=(a=@ +(a))')]]) + (~(put ba:tarball ball) [/lib %'c.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) =. ball - (~(put ba:tarball ball) [/lib %'b.hoon'] [~ [%hoon !>('/< c /lib/c.hoon\0a|=(a=@ (c a))')]]) + (~(put ba:tarball ball) [/lib %'b.hoon'] [~ [[/ %hoon] !>('/< c /lib/c.hoon\0a|=(a=@ (c a))')]]) =. ball - (~(put ba:tarball ball) [/ %'a.hoon'] [~ [%hoon !>('/< b /lib/b.hoon\0a(b 5)')]]) + (~(put ba:tarball ball) [/ %'a.hoon'] [~ [[/ %hoon] !>('/< b /lib/b.hoon\0a(b 5)')]]) =/ res (build-all:build !>(~) ball *build-cache:build) =/ a-res (~(get by results.res) [/ %'a.hoon']) =/ b-res (~(get by results.res) [/lib %'b.hoon']) @@ -686,13 +687,13 @@ :: a→b, a→c, b→d, c→d: diamond compiles, d built once =/ =ball:tarball *ball:tarball =. ball - (~(put ba:tarball ball) [/lib %'d.hoon'] [~ [%hoon !>('|=(a=@ +(a))')]]) + (~(put ba:tarball ball) [/lib %'d.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) =. ball - (~(put ba:tarball ball) [/lib %'b.hoon'] [~ [%hoon !>('/< d /lib/d.hoon\0a|=(a=@ (d a))')]]) + (~(put ba:tarball ball) [/lib %'b.hoon'] [~ [[/ %hoon] !>('/< d /lib/d.hoon\0a|=(a=@ (d a))')]]) =. ball - (~(put ba:tarball ball) [/lib %'c.hoon'] [~ [%hoon !>('/< d /lib/d.hoon\0a|=(a=@ (d (d a)))')]]) + (~(put ba:tarball ball) [/lib %'c.hoon'] [~ [[/ %hoon] !>('/< d /lib/d.hoon\0a|=(a=@ (d (d a)))')]]) =. ball - (~(put ba:tarball ball) [/ %'a.hoon'] [~ [%hoon !>('/< b /lib/b.hoon\0a/< c /lib/c.hoon\0a[(b 1) (c 1)]')]]) + (~(put ba:tarball ball) [/ %'a.hoon'] [~ [[/ %hoon] !>('/< b /lib/b.hoon\0a/< c /lib/c.hoon\0a[(b 1) (c 1)]')]]) =/ res (build-all:build !>(~) ball *build-cache:build) =/ a-res (~(get by results.res) [/ %'a.hoon']) ;: weld @@ -701,4 +702,128 @@ (expect !>(=(%.y ?=([~ %& *] (~(get by results.res) [/lib %'b.hoon']))))) (expect !>(=(%.y ?=([~ %& *] (~(get by results.res) [/lib %'c.hoon']))))) == +:: +:: ========================================== +:: +build-all key change detection tests +:: ========================================== +:: +++ test-build-all-keys-change-on-source-change + :: When source changes, the key for that file must change + =/ ball1=ball:tarball + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) + =/ res1 (build-all:build !>(~) ball1 *build-cache:build) + =/ ball2=ball:tarball + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(+(a)))')]]) + =/ res2 (build-all:build !>(~) ball2 cache.res1) + =/ key1 (~(get by keys.res1) [/ %'foo.hoon']) + =/ key2 (~(get by keys.res2) [/ %'foo.hoon']) + ;: weld + :: both keys exist + (expect !>(=(%.y ?=(^ key1)))) + (expect !>(=(%.y ?=(^ key2)))) + :: keys differ + (expect !>(=(%.y !=(key1 key2)))) + == +:: +++ test-build-all-keys-stable-on-same-source + :: When source is identical, the key must be the same + =/ =ball:tarball + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) + =/ res1 (build-all:build !>(~) ball *build-cache:build) + =/ res2 (build-all:build !>(~) ball cache.res1) + %+ expect-eq + !> (~(get by keys.res1) [/ %'foo.hoon']) + !> (~(get by keys.res2) [/ %'foo.hoon']) +:: +++ test-build-all-keys-change-on-dep-change + :: When a dependency's source changes, the dependent's key must change + =/ ball1=ball:tarball *ball:tarball + =. ball1 (~(put ba:tarball ball1) [/lib %'dep.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) + =. ball1 (~(put ba:tarball ball1) [/ %'main.hoon'] [~ [[/ %hoon] !>('/< dep /lib/dep.hoon\0a(dep 5)')]]) + =/ res1 (build-all:build !>(~) ball1 *build-cache:build) + :: change dep source + =/ ball2=ball:tarball *ball:tarball + =. ball2 (~(put ba:tarball ball2) [/lib %'dep.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(+(a)))')]]) + =. ball2 (~(put ba:tarball ball2) [/ %'main.hoon'] [~ [[/ %hoon] !>('/< dep /lib/dep.hoon\0a(dep 5)')]]) + =/ res2 (build-all:build !>(~) ball2 cache.res1) + =/ main-key1 (~(get by keys.res1) [/ %'main.hoon']) + =/ main-key2 (~(get by keys.res2) [/ %'main.hoon']) + =/ dep-key1 (~(get by keys.res1) [/lib %'dep.hoon']) + =/ dep-key2 (~(get by keys.res2) [/lib %'dep.hoon']) + ;: weld + :: dep key changed + (expect !>(=(%.y !=(dep-key1 dep-key2)))) + :: main key also changed (dep changed) + (expect !>(=(%.y !=(main-key1 main-key2)))) + == +:: +++ test-build-all-no-key-for-failed-build + :: When compilation fails, no key should be in the key map + =/ =ball:tarball + (~(put ba:tarball *ball:tarball) [/ %'bad.hoon'] [~ [[/ %hoon] !>('|=(')]]) + =/ res (build-all:build !>(~) ball *build-cache:build) + %+ expect-eq + !> ~ + !> (~(get by keys.res) [/ %'bad.hoon']) +:: +++ test-build-all-key-appears-after-fix + :: File fails, then source is fixed — key should appear + =/ ball1=ball:tarball + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(')]]) + =/ res1 (build-all:build !>(~) ball1 *build-cache:build) + =/ key1 (~(get by keys.res1) [/ %'foo.hoon']) + :: fix the source + =/ ball2=ball:tarball + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ a)')]]) + =/ res2 (build-all:build !>(~) ball2 cache.res1) + =/ key2 (~(get by keys.res2) [/ %'foo.hoon']) + ;: weld + :: no key when broken + (expect !>(=(%.y ?=(~ key1)))) + :: key exists after fix + (expect !>(=(%.y ?=(^ key2)))) + == +:: +++ test-build-all-keys-change-fail-fix-change + :: Simulates the exact bug: file changes, fails, then fixed version + :: should have different key from original + =/ ball-v1=ball:tarball + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) + =/ res-v1 (build-all:build !>(~) ball-v1 *build-cache:build) + =/ key-v1 (~(got by keys.res-v1) [/ %'foo.hoon']) + :: v2: source changes but has syntax error + =/ ball-v2=ball:tarball + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(+(')]]) + =/ res-v2 (build-all:build !>(~) ball-v2 cache.res-v1) + :: v3: fixed version with different logic + =/ ball-v3=ball:tarball + (~(put ba:tarball *ball:tarball) [/ %'foo.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(+(a)))')]]) + =/ res-v3 (build-all:build !>(~) ball-v3 cache.res-v2) + =/ key-v3 (~(got by keys.res-v3) [/ %'foo.hoon']) + :: v1 and v3 keys must differ (source is different) + (expect !>(=(%.y !=(key-v1 key-v3)))) +:: +++ test-build-all-keys-use-hoon-suffix + :: key-map must use original rails (with .hoon suffix). + :: reload-changed-nexuses constructs rails from bins (stripped stems) + :: and must append .hoon to look up keys. This test documents that + :: keys.res uses .hoon names, NOT stripped stems. + =/ =ball:tarball *ball:tarball + =. ball (~(put ba:tarball ball) [/lib %'dep.hoon'] [~ [[/ %hoon] !>('|=(a=@ +(a))')]]) + =. ball (~(put ba:tarball ball) [/nex %'app.hoon'] [~ [[/ %hoon] !>('/< dep /lib/dep.hoon\0a|=(a=@ (dep a))')]]) + =/ res (build-all:build !>(~) ball *build-cache:build) + :: key-map has entry via .hoon name + =/ key-via-hoon (~(get by keys.res) [/nex %'app.hoon']) + :: key-map does NOT have entry via stripped name + =/ key-via-stem (~(get by keys.res) [/nex %app]) + :: results also uses .hoon name + =/ result-exists (~(has by results.res) [/nex %'app.hoon']) + ;: weld + :: key exists via .hoon name + (expect !>(=(%.y ?=(^ key-via-hoon)))) + :: key does NOT exist via stripped name + (expect !>(=(%.y =(~ key-via-stem)))) + :: result also uses .hoon name + (expect !>(=(%.y result-exists))) + == -- diff --git a/desk/tests/loader.hoon b/desk/tests/loader.hoon index dc60048..ccd574b 100644 --- a/desk/tests/loader.hoon +++ b/desk/tests/loader.hoon @@ -9,7 +9,7 @@ ++ mk-content |= txt=@t ^- content:tarball - [~ [%txt !>(txt)]] + [~ [/ %txt] !>(txt)] :: ++ mk-ball-1 :: ball with one file at root @@ -424,18 +424,18 @@ :: ++ test-server-scenario-imperative :: simulate server on-load imperative style on existing ball - =/ server-ct=content:tarball [~ %server-state !>('state-data')] + =/ server-ct=content:tarball [~ [/ %server-state] !>('state-data')] =/ old-ball=ball:tarball - =/ b (~(put ba:tarball *ball:tarball) [/ %'ver.ud'] [~ %ud !>(0)]) + =/ b (~(put ba:tarball *ball:tarball) [/ %'ver.ud'] [~ [/ %ud] !>(0)]) (~(put ba:tarball b) [/ %'main.server-state'] server-ct) =/ old-sand=sand:nexus [`[make=~ poke=(sy ~[[%& [%| /]]]) peek=~] ~] =/ old-gain=gain:nexus (set-file-gain:loader *gain:nexus [/ %'ver.ud'] %.n) :: imperative: modify ball in place, preserve sand/gain =/ ball=ball:tarball old-ball - =. ball (~(put ba:tarball ball) [/ %'ver.ud'] [~ %ud !>(0)]) + =. ball (~(put ba:tarball ball) [/ %'ver.ud'] [~ [/ %ud] !>(0)]) =/ existing (~(get ba:tarball ball) [/ %'main.server-state']) =? ball =(~ existing) - (~(put ba:tarball ball) [/ %'main.server-state'] [~ %server-state !>('fresh')]) + (~(put ba:tarball ball) [/ %'main.server-state'] [~ [/ %server-state] !>('fresh')]) :: imperative preserves sand and gain ;: weld %+ expect-eq @@ -451,17 +451,17 @@ :: ++ test-server-scenario-spin :: simulate server on-load with spin on existing ball - =/ server-ct=content:tarball [~ %server-state !>('state-data')] + =/ server-ct=content:tarball [~ [/ %server-state] !>('state-data')] =/ old-ball=ball:tarball - =/ b (~(put ba:tarball *ball:tarball) [/ %'ver.ud'] [~ %ud !>(0)]) + =/ b (~(put ba:tarball *ball:tarball) [/ %'ver.ud'] [~ [/ %ud] !>(0)]) (~(put ba:tarball b) [/ %'main.server-state'] server-ct) =/ old-sand=sand:nexus [`[make=~ poke=(sy ~[[%& [%| /]]]) peek=~] ~] =/ old-gain=gain:nexus (set-file-gain:loader *gain:nexus [/ %'ver.ud'] %.n) :: spin: build new from old =/ [=sand:nexus =gain:nexus =ball:tarball] %+ spin:loader [old-sand old-gain old-ball] - :~ [%over %& [/ %'ver.ud'] %.n [~ %ud !>(0)]] - [%fall %& [/ %'main.server-state'] %.n [~ %server-state !>('fresh')]] + :~ [%over %& [/ %'ver.ud'] %.n [~ [/ %ud] !>(0)]] + [%fall %& [/ %'main.server-state'] %.n [~ [/ %server-state] !>('fresh')]] == ;: weld :: ball content is correct @@ -506,7 +506,7 @@ ++ test-get-ver-has-version :: ball with ver.ud returns [~ n] =/ =ball:tarball - (~(put ba:tarball *ball:tarball) [/ %'ver.ud'] [~ %ud !>(5)]) + (~(put ba:tarball *ball:tarball) [/ %'ver.ud'] [~ [/ %ud] !>(5)]) %+ expect-eq !> `ver:loader``5 !> (get-ver:loader ball) diff --git a/desk/tests/nexus.hoon b/desk/tests/nexus.hoon index 399531a..cab7548 100644 --- a/desk/tests/nexus.hoon +++ b/desk/tests/nexus.hoon @@ -170,12 +170,6 @@ !> `filt:nexus`~ !> (filter:nexus %poke /here |+/a/b/c ~) :: -++ test-filter-syscall-blocked - :: Syscalls are always blocked by any weir - =/ =weir:nexus [make=~ poke=~ peek=~] - %+ expect-eq - !> `filt:nexus`[~ |] - !> (filter:nexus %sysc /here |+/a/b/c `weir) :: ++ test-filter-poke-allowed :: Poke to allowed destination @@ -385,7 +379,7 @@ ++ test-bo-is-empty-dir-false-has-files :: is-empty-dir returns false if has files =/ b (make-bo ~2024.1.1) - =/ has-file=ball:tarball [`[~ ~ (~(put by *(map @ta content:tarball)) %foo [~ [%txt !>('hi')]])] ~] + =/ has-file=ball:tarball [`[~ ~ (~(put by *(map @ta content:tarball)) %foo [~ [[/ %txt] !>('hi')]])] ~] %+ expect-eq !> %.n !> (is-empty-dir:b has-file) @@ -515,7 +509,7 @@ =/ contents=(map @ta content:tarball) %- ~(gas by *(map @ta content:tarball)) %+ turn files - |=(f=@ta [f [~ [%txt !>('test')]]]) + |=(f=@ta [f [~ [/ %txt] !>('test')]]) [`[~ ~ contents] ~] :: :: Helper to make a ball with a file with specific content @@ -524,7 +518,7 @@ |= [name=@ta content=@t] ^- ball:tarball =/ contents=(map @ta content:tarball) - (~(put by *(map @ta content:tarball)) name [~ [%txt !>(content)]]) + (~(put by *(map @ta content:tarball)) name [~ [[/ %txt] !>(content)]]) [`[~ ~ contents] ~] :: ++ test-bo-diff-balls-new-file @@ -615,17 +609,17 @@ :: Old: deleted, changed, unchanged =/ old-contents=(map @ta content:tarball) %- ~(gas by *(map @ta content:tarball)) - :~ [%deleted [~ [%txt !>('del')]]] - [%changed [~ [%txt !>('old')]]] - [%unchanged [~ [%txt !>('same')]]] + :~ [%deleted [~ [[/ %txt] !>('del')]]] + [%changed [~ [[/ %txt] !>('old')]]] + [%unchanged [~ [[/ %txt] !>('same')]]] == =/ old-ball=ball:tarball [`[~ ~ old-contents] ~] :: New: new, changed, unchanged =/ new-contents=(map @ta content:tarball) %- ~(gas by *(map @ta content:tarball)) - :~ [%new [~ [%txt !>('new')]]] - [%changed [~ [%txt !>('different')]]] - [%unchanged [~ [%txt !>('same')]]] + :~ [%new [~ [[/ %txt] !>('new')]]] + [%changed [~ [[/ %txt] !>('different')]]] + [%unchanged [~ [[/ %txt] !>('same')]]] == =/ new-ball=ball:tarball [`[~ ~ new-contents] ~] =/ born4=born:nexus (diff-balls:b4 / old-ball new-ball) @@ -727,11 +721,12 @@ ^- cage [mark !>(data)] :: +:: ++ test-si-put-new - :: Inserting a new cage returns lobe and silo with refs=1 + :: Inserting a new page returns lobe and silo with refs=1 =/ s ~(. si:nexus *silo:nexus) - =/ =cage (make-cage %txt 'hello') - =/ [=lobe:clay new-silo=silo:nexus] (put:s cage) + =/ =bask:tarball [[/ %txt] 'hello'] + =/ [=lobe:clay new-silo=silo:nexus] (put:s bask) =/ s2 ~(. si:nexus new-silo) =/ got (need (get:s2 lobe)) ;: weld @@ -745,12 +740,12 @@ == :: ++ test-si-put-duplicate-increments-refs - :: Inserting the same cage twice increments refcount + :: Inserting the same page twice increments refcount =/ s ~(. si:nexus *silo:nexus) - =/ =cage (make-cage %txt 'hello') - =/ [lobe1=lobe:clay silo1=silo:nexus] (put:s cage) + =/ =bask:tarball [[/ %txt] 'hello'] + =/ [lobe1=lobe:clay silo1=silo:nexus] (put:s bask) =/ s2 ~(. si:nexus silo1) - =/ [lobe2=lobe:clay silo2=silo:nexus] (put:s2 cage) + =/ [lobe2=lobe:clay silo2=silo:nexus] (put:s2 bask) ;: weld %+ expect-eq !> lobe1 @@ -764,10 +759,10 @@ ++ test-si-drop-decrements-refs :: Dropping with refs>1 decrements =/ s ~(. si:nexus *silo:nexus) - =/ =cage (make-cage %txt 'hello') - =/ [=lobe:clay silo1=silo:nexus] (put:s cage) + =/ =bask:tarball [[/ %txt] 'hello'] + =/ [=lobe:clay silo1=silo:nexus] (put:s bask) =/ s2 ~(. si:nexus silo1) - =/ [* silo2=silo:nexus] (put:s2 cage) + =/ [* silo2=silo:nexus] (put:s2 bask) :: refs=2, drop once -> refs=1 =/ s3 ~(. si:nexus silo2) =/ silo3=silo:nexus (drop:s3 lobe) @@ -778,8 +773,8 @@ ++ test-si-drop-deletes-at-zero :: Dropping with refs=1 removes from silo =/ s ~(. si:nexus *silo:nexus) - =/ =cage (make-cage %txt 'hello') - =/ [=lobe:clay silo1=silo:nexus] (put:s cage) + =/ =bask:tarball [[/ %txt] 'hello'] + =/ [=lobe:clay silo1=silo:nexus] (put:s bask) =/ s2 ~(. si:nexus silo1) =/ silo2=silo:nexus (drop:s2 lobe) %+ expect-eq @@ -799,17 +794,17 @@ =/ s ~(. si:nexus *silo:nexus) =/ fake-lobe=lobe:clay `@uvI`(sham 'fake') %+ expect-eq - !> `(unit cage)`~ + !> `(unit bask:tarball)`~ !> (get:s fake-lobe) :: ++ test-si-different-content-different-lobe :: Different content produces different lobes =/ s ~(. si:nexus *silo:nexus) - =/ cage1=cage (make-cage %txt 'hello') - =/ cage2=cage (make-cage %txt 'world') - =/ [lobe1=lobe:clay silo1=silo:nexus] (put:s cage1) + =/ page1=bask:tarball [[/ %txt] 'hello'] + =/ page2=bask:tarball [[/ %txt] 'world'] + =/ [lobe1=lobe:clay silo1=silo:nexus] (put:s page1) =/ s2 ~(. si:nexus silo1) - =/ [lobe2=lobe:clay silo2=silo:nexus] (put:s2 cage2) + =/ [lobe2=lobe:clay silo2=silo:nexus] (put:s2 page2) ;: weld %+ expect-eq !> %.n @@ -823,38 +818,38 @@ ++ test-si-different-mark-different-lobe :: Same noun but different mark produces different lobe =/ s ~(. si:nexus *silo:nexus) - =/ cage1=cage (make-cage %txt 'hello') - =/ cage2=cage (make-cage %json 'hello') - =/ [lobe1=lobe:clay *] (put:s cage1) - =/ [lobe2=lobe:clay *] (put:s cage2) + =/ page1=bask:tarball [[/ %txt] 'hello'] + =/ page2=bask:tarball [[/ %json] 'hello'] + =/ [lobe1=lobe:clay *] (put:s page1) + =/ [lobe2=lobe:clay *] (put:s page2) %+ expect-eq !> %.n !> =(lobe1 lobe2) :: ++ test-si-hash-deterministic - :: Same cage always produces the same hash + :: Same page always produces the same hash =/ s ~(. si:nexus *silo:nexus) - =/ =cage (make-cage %txt 'hello') + =/ =bask:tarball [[/ %txt] 'hello'] %+ expect-eq - !> (hash:s cage) - !> (hash:s cage) + !> (hash:s bask) + !> (hash:s bask) :: ++ test-si-record-keep-accumulates :: record with keep=%.y accumulates history entries =/ s ~(. si:nexus *silo:nexus) - =/ cage1=cage (make-cage %txt 'first') - =/ cage2=cage (make-cage %txt 'second') - =/ cage3=cage (make-cage %txt 'third') + =/ page1=bask:tarball [[/ %txt] 'first'] + =/ page2=bask:tarball [[/ %txt] 'second'] + =/ page3=bask:tarball [[/ %txt] 'third'] =/ cass1=cass:clay [1 ~2024.1.1] =/ cass2=cass:clay [2 ~2024.1.2] =/ cass3=cass:clay [3 ~2024.1.3] =/ hist=_hist:*sack:nexus ~ =/ [lobe1=lobe:clay silo1=silo:nexus hist1=_hist] - (~(record si:nexus *silo:nexus) cage1 cass1 %.y *cass:clay hist) + (~(record si:nexus *silo:nexus) page1 cass1 %.y *cass:clay hist) =/ [lobe2=lobe:clay silo2=silo:nexus hist2=_hist] - (~(record si:nexus silo1) cage2 cass2 %.y *cass:clay hist1) + (~(record si:nexus silo1) page2 cass2 %.y *cass:clay hist1) =/ [lobe3=lobe:clay silo3=silo:nexus hist3=_hist] - (~(record si:nexus silo2) cage3 cass3 %.y *cass:clay hist2) + (~(record si:nexus silo2) page3 cass3 %.y *cass:clay hist2) ;: weld :: All 3 entries in hist %+ expect-eq @@ -873,25 +868,25 @@ ++ test-si-record-no-keep-replaces :: record with gain=%.n replaces current live version, drops old ref =/ s ~(. si:nexus *silo:nexus) - =/ cage1=cage (make-cage %txt 'first') - =/ cage2=cage (make-cage %txt 'second') + =/ page1=bask:tarball [[/ %txt] 'first'] + =/ page2=bask:tarball [[/ %txt] 'second'] =/ cass1=cass:clay [1 ~2024.1.1] =/ cass2=cass:clay [2 ~2024.1.2] =/ hist=_hist:*sack:nexus ~ =/ [lobe1=lobe:clay silo1=silo:nexus hist1=_hist] - (~(record si:nexus *silo:nexus) cage1 cass1 %.n *cass:clay hist) + (~(record si:nexus *silo:nexus) page1 cass1 %.n *cass:clay hist) =/ [lobe2=lobe:clay silo2=silo:nexus hist2=_hist] - (~(record si:nexus silo1) cage2 cass2 %.n cass1 hist1) + (~(record si:nexus silo1) page2 cass2 %.n cass1 hist1) ;: weld :: Only 1 entry in hist (latest) %+ expect-eq !> `@ud`1 !> (lent (tap:on-hist:nexus hist2)) - :: Old cage dropped from silo + :: Old page dropped from silo %+ expect-eq !> ~ !> (~(get by silo2) lobe1) - :: New cage in silo + :: New page in silo %+ expect-eq !> %.y !> ?=(^ (~(get by silo2) lobe2)) @@ -899,14 +894,14 @@ :: ++ test-si-record-no-keep-same-content :: record with gain=%.n and same content: refcount stays at 1 - =/ =cage (make-cage %txt 'same') + =/ =bask:tarball [[/ %txt] 'same'] =/ cass1=cass:clay [1 ~2024.1.1] =/ cass2=cass:clay [2 ~2024.1.2] =/ hist=_hist:*sack:nexus ~ =/ [lobe1=lobe:clay silo1=silo:nexus hist1=_hist] - (~(record si:nexus *silo:nexus) cage cass1 %.n *cass:clay hist) + (~(record si:nexus *silo:nexus) bask cass1 %.n *cass:clay hist) =/ [lobe2=lobe:clay silo2=silo:nexus hist2=_hist] - (~(record si:nexus silo1) cage cass2 %.n cass1 hist1) + (~(record si:nexus silo1) bask cass2 %.n cass1 hist1) ;: weld :: Same lobe (content-addressed) %+ expect-eq @@ -920,16 +915,16 @@ :: ++ test-si-drop-hist-all-refs :: drop-hist removes all refs from silo - =/ cage1=cage (make-cage %txt 'aaa') - =/ cage2=cage (make-cage %txt 'bbb') - =/ cage3=cage (make-cage %txt 'ccc') + =/ page1=bask:tarball [[/ %txt] 'aaa'] + =/ page2=bask:tarball [[/ %txt] 'bbb'] + =/ page3=bask:tarball [[/ %txt] 'ccc'] =/ hist=_hist:*sack:nexus ~ =/ [* silo1=silo:nexus hist1=_hist] - (~(record si:nexus *silo:nexus) cage1 [1 ~2024.1.1] %.y *cass:clay hist) + (~(record si:nexus *silo:nexus) page1 [1 ~2024.1.1] %.y *cass:clay hist) =/ [* silo2=silo:nexus hist2=_hist] - (~(record si:nexus silo1) cage2 [2 ~2024.1.2] %.y *cass:clay hist1) + (~(record si:nexus silo1) page2 [2 ~2024.1.2] %.y *cass:clay hist1) =/ [* silo3=silo:nexus hist3=_hist] - (~(record si:nexus silo2) cage3 [3 ~2024.1.3] %.y *cass:clay hist2) + (~(record si:nexus silo2) page3 [3 ~2024.1.3] %.y *cass:clay hist2) :: 3 entries in silo ?> =(3 ~(wyt by silo3)) :: Drop all @@ -940,13 +935,13 @@ :: ++ test-si-drop-hist-shared-refs :: drop-hist with shared content only decrements, doesn't delete - =/ =cage (make-cage %txt 'shared') + =/ =bask:tarball [[/ %txt] 'shared'] =/ hist=_hist:*sack:nexus ~ - :: Record same cage twice with keep (2 hist entries, same lobe, refs=2) + :: Record same page twice with keep (2 hist entries, same lobe, refs=2) =/ [=lobe:clay silo1=silo:nexus hist1=_hist] - (~(record si:nexus *silo:nexus) cage [1 ~2024.1.1] %.y *cass:clay hist) + (~(record si:nexus *silo:nexus) bask [1 ~2024.1.1] %.y *cass:clay hist) =/ [* silo2=silo:nexus hist2=_hist] - (~(record si:nexus silo1) cage [2 ~2024.1.2] %.y *cass:clay hist1) + (~(record si:nexus silo1) bask [2 ~2024.1.2] %.y *cass:clay hist1) ?> =(2 refs:(~(got by silo2) lobe)) :: Drop all hist refs =/ silo3=silo:nexus (~(drop-hist si:nexus silo2) hist2) diff --git a/desk/tests/tarball.hoon b/desk/tests/tarball.hoon index bf7dff1..ae16aab 100644 --- a/desk/tests/tarball.hoon +++ b/desk/tests/tarball.hoon @@ -7,7 +7,7 @@ :: ++ test-put-and-get =/ my-ball *ball:tarball - =/ test-content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ test-content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ updated (~(put ba:tarball my-ball) [/foo %test] test-content) =/ result (~(get ba:tarball updated) /foo %test) %+ expect-eq @@ -23,7 +23,7 @@ :: ++ test-has-exists =/ my-ball *ball:tarball - =/ test-content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ test-content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ updated (~(put ba:tarball my-ball) [/foo %test] test-content) %- expect !> (~(has ba:tarball updated) /foo %test) @@ -37,7 +37,7 @@ :: ++ test-del =/ my-ball *ball:tarball - =/ test-content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ test-content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] test-content) =/ g2 (~(del ba:tarball g1) /foo %test) =/ result (~(get ba:tarball g2) /foo %test) @@ -47,8 +47,8 @@ :: ++ test-lis =/ my-ball *ball:tarball - =/ test1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ test2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ test1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ test2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] test1) =/ g2 (~(put ba:tarball g1) [/foo %other] test2) =/ files (~(lis ba:tarball g2) /foo) @@ -62,8 +62,8 @@ :: ++ test-multiple-paths =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) =/ g2 (~(put ba:tarball g1) [/bar %other] content2) ;: weld @@ -77,7 +77,7 @@ :: ++ test-got =/ my-ball *ball:tarball - =/ test-content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ test-content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ updated (~(put ba:tarball my-ball) [/foo %test] test-content) %+ expect-eq !> test-content @@ -90,7 +90,7 @@ :: ++ test-gut =/ my-ball *ball:tarball - =/ default=content:tarball [~ [%mime !>([/text/plain [7 'default']])]] + =/ default=content:tarball [~ [/ %mime] !>([/text/plain [7 'default']])] =/ result (~(gut ba:tarball my-ball) [/foo %test] default) %+ expect-eq !> default @@ -98,8 +98,8 @@ :: ++ test-wyt =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) =/ g2 (~(put ba:tarball g1) [/bar %other] content2) %+ expect-eq @@ -109,24 +109,24 @@ ++ test-gas =/ my-ball *ball:tarball =/ files=(list [rail:tarball content:tarball]) - :~ [[/foo %test] [~ [%mime !>([/text/plain [5 'hello']])]]] - [[/foo %other] [~ [%mime !>([/text/html [3 'bye']])]]] - [[/bar %thing] [~ [%mime !>([/text/css [4 'hmm']])]]] + :~ [[/foo %test] [~ [/ %mime] !>([/text/plain [5 'hello']])]] + [[/foo %other] [~ [/ %mime] !>([/text/html [3 'bye']])]] + [[/bar %thing] [~ [/ %mime] !>([/text/css [4 'hmm']])]] == =/ updated (~(gas ba:tarball my-ball) files) ;: weld %+ expect-eq - !> `[~ [%mime !>([/text/plain [5 'hello']])]] + !> `[~ [/ %mime] !>([/text/plain [5 'hello']])] !> (~(get ba:tarball updated) /foo %test) %+ expect-eq - !> `[~ [%mime !>([/text/css [4 'hmm']])]] + !> `[~ [/ %mime] !>([/text/css [4 'hmm']])] !> (~(get ba:tarball updated) /bar %thing) == :: ++ test-tap =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) =/ g2 (~(put ba:tarball g1) [/foo %other] content2) =/ result ~(tap ba:tarball g2) @@ -135,7 +135,7 @@ :: ++ test-run =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) :: Identity transform - run should preserve content =/ updated (~(run ba:tarball g1) |=(c=content:tarball c)) @@ -146,8 +146,8 @@ :: ++ test-rep =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) =/ g2 (~(put ba:tarball g1) [/bar %other] content2) :: Count all entries @@ -158,18 +158,18 @@ :: ++ test-all =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/plain [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/plain [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) =/ g2 (~(put ba:tarball g1) [/bar %other] content2) :: Check all are mime cages (all content is now just cage) %- expect - !> (~(all ba:tarball g2) |=(c=content:tarball =(%mime p.cage.c))) + !> (~(all ba:tarball g2) |=(c=content:tarball =([/ %mime] p.sage.c))) :: ++ test-all-false =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) =/ g2 (~(put ba:tarball g1) [/bar %other] content2) :: Check if all match false predicate (should be false) @@ -179,8 +179,8 @@ :: ++ test-put-overwrite =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) =/ g2 (~(put ba:tarball g1) [/foo %test] content2) =/ result (~(get ba:tarball g2) /foo %test) @@ -204,8 +204,8 @@ :: ++ test-gut-exists =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ default=content:tarball [~ [%mime !>([/text/html [7 'default']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ default=content:tarball [~ [/ %mime] !>([/text/html [7 'default']])] =/ updated (~(put ba:tarball my-ball) [/foo %test] content) =/ result (~(gut ba:tarball updated) [/foo %test] default) %+ expect-eq @@ -260,8 +260,8 @@ :: ++ test-any-none-match =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/plain [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/plain [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) =/ g2 (~(put ba:tarball g1) [/bar %other] content2) :: Check if any match false predicate (should be false) @@ -271,7 +271,7 @@ :: ++ test-lop-nonexistent =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo/bar %test] content) =/ result (~(lop ba:tarball g1) /baz) :: Should be no-op, ball unchanged @@ -288,18 +288,18 @@ :: ++ test-any =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content1) =/ g2 (~(put ba:tarball g1) [/bar %other] content2) :: Check if any are mime cages (all content is now just cage) %- expect - !> (~(any ba:tarball g2) |=(c=content:tarball =(%mime p.cage.c))) + !> (~(any ba:tarball g2) |=(c=content:tarball =([/ %mime] p.sage.c))) :: ++ test-lop =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo/bar %test] content1) =/ g2 (~(put ba:tarball g1) [/foo/bar %other] content2) :: Delete entire /foo subtree @@ -310,8 +310,8 @@ :: ++ test-dip =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ content2=content:tarball [~ [%mime !>([/text/html [3 'bye']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/html [3 'bye']])] =/ g1 (~(put ba:tarball my-ball) [/foo/bar %test] content1) =/ g2 (~(put ba:tarball g1) [/foo/bar %other] content2) :: Get directory at /foo/bar as a ball @@ -354,7 +354,7 @@ ++ test-dap-exists-with-files :: Path exists when files are present =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo/bar %test] content) =/ dap-result (~(dap ba:tarball g1) /foo/bar) =/ dip-result (~(dip ba:tarball g1) /foo/bar) @@ -370,7 +370,7 @@ ++ test-dap-exists-after-delete :: Path still exists after deleting files (structure remains) =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo/bar %test] content) =/ g2 (~(del ba:tarball g1) /foo/bar %test) =/ dap-result (~(dap ba:tarball g2) /foo/bar) @@ -388,7 +388,7 @@ ++ test-dap-nonexistent-sibling :: Path doesn't exist if we never created it =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content) =/ dap-result (~(dap ba:tarball g1) /bar) =/ dip-result (~(dip ba:tarball g1) /bar) @@ -406,7 +406,7 @@ ++ test-dap-nonexistent-child :: Path doesn't exist if we go deeper than structure =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content) =/ dap-result (~(dap ba:tarball g1) /foo/bar) =/ dip-result (~(dip ba:tarball g1) /foo/bar) @@ -424,7 +424,7 @@ ++ test-dap-parent-exists :: Parent path exists when child has files =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo/bar/baz %test] content) =/ dap-result (~(dap ba:tarball g1) /foo) =/ dip-result (~(dip ba:tarball g1) /foo) @@ -1046,225 +1046,150 @@ !> `%mp4 !> result :: -:: mime-to-cage tests +:: mime-to-sage tests :: -++ test-mime-to-cage-no-extension - =/ conversions *(map mars:clay tube:clay) +++ test-mime-to-sage-no-extension + =/ conversions *(map bars:tarball tube:clay) =/ test-mime [/text/plain [5 'hello']] - =/ result (mime-to-cage:tarball conversions 'readme' test-mime) + =/ result (mime-to-sage:tarball conversions 'readme' test-mime) %+ expect-eq !> ~ !> result :: -++ test-mime-to-cage-jammed-no-ext - =/ conversions *(map mars:clay tube:clay) +++ test-mime-to-sage-jammed-no-ext + =/ conversions *(map bars:tarball tube:clay) =/ test-data 42 =/ jammed (jam test-data) =/ test-mime [/application/x-urb-jam (as-octs:mimes:html jammed)] - =/ result (mime-to-cage:tarball conversions 'data' test-mime) + =/ result (mime-to-sage:tarball conversions 'data' test-mime) :: No extension - should return ~ %+ expect-eq !> ~ !> result :: -++ test-mime-to-cage-jammed-with-ext - =/ conversions *(map mars:clay tube:clay) +++ test-mime-to-sage-jammed-with-ext + =/ conversions *(map bars:tarball tube:clay) =/ test-data [%hello %world] =/ jammed (jam test-data) =/ test-mime [/application/x-urb-jam (as-octs:mimes:html jammed)] - =/ result (mime-to-cage:tarball conversions 'data.jam' test-mime) + =/ result (mime-to-sage:tarball conversions 'data.jam' test-mime) :: No conversion for .jam - should return ~ %+ expect-eq !> ~ !> result :: -++ test-mime-to-cage-no-conversion - =/ conversions *(map mars:clay tube:clay) +++ test-mime-to-sage-no-conversion + =/ conversions *(map bars:tarball tube:clay) =/ test-mime [/text/plain [5 'hello']] - =/ result (mime-to-cage:tarball conversions 'data.txt' test-mime) + =/ result (mime-to-sage:tarball conversions 'data.txt' test-mime) %+ expect-eq !> ~ !> result :: -++ test-mime-to-cage-with-conversion +++ test-mime-to-sage-with-conversion :: Mock a conversion from mime to json mark =/ mock-tube=$-(vase vase) |= v=vase !>([%array ~[[%string 'test']]]) - =/ conversions=(map mars:clay tube:clay) - (~(put by *(map mars:clay tube:clay)) [%mime %json] mock-tube) + =/ conversions=(map bars:tarball tube:clay) + (~(put by *(map bars:tarball tube:clay)) [[/ %mime] [/ %json]] mock-tube) =/ test-mime [/application/json [2 '{}']] - =/ result (mime-to-cage:tarball conversions 'data.json' test-mime) + =/ result (mime-to-sage:tarball conversions 'data.json' test-mime) ?~ result !! ;: weld %+ expect-eq - !> %json + !> [/ %json] !> p.u.result %+ expect-eq !> !>([%array ~[[%string 'test']]]) !> q.u.result == :: -++ test-mime-to-cage-uppercase-ext - =/ conversions *(map mars:clay tube:clay) +++ test-mime-to-sage-uppercase-ext + =/ conversions *(map bars:tarball tube:clay) =/ test-mime [/text/plain [5 'HELLO']] - =/ result (mime-to-cage:tarball conversions 'FILE.TXT' test-mime) + =/ result (mime-to-sage:tarball conversions 'FILE.TXT' test-mime) :: Extension should be normalized to lowercase, but no conversion so returns ~ %+ expect-eq !> ~ !> result :: -++ test-mime-to-cage-hyphenated-ext - =/ conversions *(map mars:clay tube:clay) +++ test-mime-to-sage-hyphenated-ext + =/ conversions *(map bars:tarball tube:clay) =/ test-mime [/text/html [10 '

test

']] - =/ result (mime-to-cage:tarball conversions 'page.html-min' test-mime) + =/ result (mime-to-sage:tarball conversions 'page.html-min' test-mime) %+ expect-eq !> ~ !> result :: -++ test-mime-to-cage-jammed-complex - =/ conversions *(map mars:clay tube:clay) +++ test-mime-to-sage-jammed-complex + =/ conversions *(map bars:tarball tube:clay) =/ test-data=(list @ud) ~[1 2 3 4 5] =/ jammed (jam test-data) =/ test-mime [/application/x-urb-jam (as-octs:mimes:html jammed)] - =/ result (mime-to-cage:tarball conversions 'list.dat' test-mime) + =/ result (mime-to-sage:tarball conversions 'list.dat' test-mime) :: No conversion for .dat - should return ~ %+ expect-eq !> ~ !> result :: -++ test-mime-to-cage-empty-conversions - =/ conversions *(map mars:clay tube:clay) +++ test-mime-to-sage-empty-conversions + =/ conversions *(map bars:tarball tube:clay) =/ test-mime [/text/css [4 'body']] - =/ result (mime-to-cage:tarball conversions 'style.css' test-mime) + =/ result (mime-to-sage:tarball conversions 'style.css' test-mime) %+ expect-eq !> ~ !> result :: -++ test-mime-to-cage-multiple-dots - =/ conversions *(map mars:clay tube:clay) +++ test-mime-to-sage-multiple-dots + =/ conversions *(map bars:tarball tube:clay) =/ test-mime [/text/plain [3 'hi']] - =/ result (mime-to-cage:tarball conversions 'my.backup.txt' test-mime) + =/ result (mime-to-sage:tarball conversions 'my.backup.txt' test-mime) %+ expect-eq !> ~ !> result :: -++ test-mime-to-cage-conversion-priority +++ test-mime-to-sage-conversion-priority :: With conversion available, should use it =/ mock-tube=$-(vase vase) |= v=vase !>('converted') - =/ conversions=(map mars:clay tube:clay) - (~(put by *(map mars:clay tube:clay)) [%mime %md] mock-tube) + =/ conversions=(map bars:tarball tube:clay) + (~(put by *(map bars:tarball tube:clay)) [[/ %mime] [/ %md]] mock-tube) =/ test-mime [/text/markdown [6 '# Test']] - =/ result (mime-to-cage:tarball conversions 'readme.md' test-mime) + =/ result (mime-to-sage:tarball conversions 'readme.md' test-mime) ?~ result !! ;: weld %+ expect-eq - !> %md + !> [/ %md] !> p.u.result %+ expect-eq !> !>('converted') !> q.u.result == :: -++ test-mime-to-cage-conversion-ignores-mime-type +++ test-mime-to-sage-conversion-ignores-mime-type :: Extension determines conversion, not mime type =/ mock-tube=$-(vase vase) |= v=vase !>('converted-json') - =/ conversions=(map mars:clay tube:clay) - (~(put by *(map mars:clay tube:clay)) [%mime %json] mock-tube) + =/ conversions=(map bars:tarball tube:clay) + (~(put by *(map bars:tarball tube:clay)) [[/ %mime] [/ %json]] mock-tube) =/ test-data %test-atom =/ jammed (jam test-data) =/ test-mime [/application/x-urb-jam (as-octs:mimes:html jammed)] - =/ result (mime-to-cage:tarball conversions 'data.json' test-mime) + =/ result (mime-to-sage:tarball conversions 'data.json' test-mime) :: Should use .json conversion even though mime type is x-urb-jam ?~ result !! ;: weld %+ expect-eq - !> %json + !> [/ %json] !> p.u.result %+ expect-eq !> !>('converted-json') !> q.u.result == :: -:: clear-temp tests -:: -++ test-clear-temp-empty-ball - :: Empty ball should stay empty - =/ my-ball *ball:tarball - =/ result ~(clear-temp ba:tarball my-ball) - %+ expect-eq - !> my-ball - !> result -:: -++ test-clear-temp-removes-temp-cages - :: %temp cages should be removed - =/ my-ball *ball:tarball - =/ temp-content=content:tarball [~ [%temp !>('ephemeral')]] - =/ g1 (~(put ba:tarball my-ball) [/foo %temp-file] temp-content) - =/ result ~(clear-temp ba:tarball g1) - ;: weld - :: temp file should be gone - %+ expect-eq - !> ~ - !> (~(get ba:tarball result) /foo %temp-file) - :: count should be 0 - %+ expect-eq - !> 0 - !> ~(wyt ba:tarball result) - == -:: -++ test-clear-temp-keeps-non-temp - :: Non-%temp cages should be preserved - =/ my-ball *ball:tarball - =/ mime-content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] - =/ temp-content=content:tarball [~ [%temp !>('ephemeral')]] - =/ g1 (~(put ba:tarball my-ball) [/foo %keep-file] mime-content) - =/ g2 (~(put ba:tarball g1) [/foo %temp-file] temp-content) - =/ result ~(clear-temp ba:tarball g2) - ;: weld - :: mime file should remain - %+ expect-eq - !> `mime-content - !> (~(get ba:tarball result) /foo %keep-file) - :: temp file should be gone - %+ expect-eq - !> ~ - !> (~(get ba:tarball result) /foo %temp-file) - :: count should be 1 - %+ expect-eq - !> 1 - !> ~(wyt ba:tarball result) - == -:: -++ test-clear-temp-multiple-dirs - :: Should clear %temp from all directories - =/ my-ball *ball:tarball - =/ temp1=content:tarball [~ [%temp !>('t1')]] - =/ temp2=content:tarball [~ [%temp !>('t2')]] - =/ keep=content:tarball [~ [%mime !>([/text/plain [4 'keep']])]] - =/ g1 (~(put ba:tarball my-ball) [/foo %temp1] temp1) - =/ g2 (~(put ba:tarball g1) [/bar %temp2] temp2) - =/ g3 (~(put ba:tarball g2) [/baz %keep] keep) - =/ result ~(clear-temp ba:tarball g3) - ;: weld - %+ expect-eq - !> ~ - !> (~(get ba:tarball result) /foo %temp1) - %+ expect-eq - !> ~ - !> (~(get ba:tarball result) /bar %temp2) - %+ expect-eq - !> `keep - !> (~(get ba:tarball result) /baz %keep) - %+ expect-eq - !> 1 - !> ~(wyt ba:tarball result) - == -:: :: lss tests (list subdirectories) :: ++ test-lss-empty @@ -1277,7 +1202,7 @@ ++ test-lss-with-subdirs :: Should list subdirectories =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo/bar %test] content) =/ g2 (~(put ba:tarball g1) [/baz %test] content) =/ dirs (~(lss ba:tarball g2) /) @@ -1295,7 +1220,7 @@ ++ test-lss-nested :: Should list only immediate children =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo/bar/baz %test] content) =/ dirs-at-root (~(lss ba:tarball g1) /) =/ dirs-at-foo (~(lss ba:tarball g1) /foo) @@ -1313,7 +1238,7 @@ ++ test-lss-nonexistent-path :: Non-existent path returns empty =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g1 (~(put ba:tarball my-ball) [/foo %test] content) %+ expect-eq !> ~ @@ -1343,23 +1268,23 @@ ++ test-mkd-with-neck :: Create directory with neck (mark) =/ my-ball *ball:tarball - =/ result (~(mkd ba:tarball my-ball) /tasks ~ `%worker) + =/ result (~(mkd ba:tarball my-ball) /tasks ~ `[/ %worker]) =/ sub (~(dip ba:tarball result) /tasks) ?~ fil.sub !! %+ expect-eq - !> `%worker + !> `[/ %worker] !> neck.u.fil.sub :: ++ test-mkd-with-metadata-and-neck :: Create directory with both metadata and neck =/ my-ball *ball:tarball =/ meta=(map @t @t) (~(gas by *(map @t @t)) ~[['mtime' '12345'] ['owner' 'zod']]) - =/ result (~(mkd ba:tarball my-ball) /tasks meta `%executor) + =/ result (~(mkd ba:tarball my-ball) /tasks meta `[/ %executor]) =/ sub (~(dip ba:tarball result) /tasks) ?~ fil.sub !! ;: weld %+ expect-eq - !> `%executor + !> `[/ %executor] !> neck.u.fil.sub %+ expect-eq !> `'12345' @@ -1373,11 +1298,11 @@ :: Create nested directories =/ my-ball *ball:tarball =/ g1 (~(mkd ba:tarball my-ball) /foo ~ ~) - =/ g2 (~(mkd ba:tarball g1) /foo/bar ~ `%special) + =/ g2 (~(mkd ba:tarball g1) /foo/bar ~ `[/ %special]) =/ sub (~(dip ba:tarball g2) /foo/bar) ?~ fil.sub !! %+ expect-eq - !> `%special + !> `[/ %special] !> neck.u.fil.sub :: :: pub tests (put subtree at path) @@ -1385,7 +1310,7 @@ ++ test-pub-at-root :: Pub at root replaces entire ball =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ sub-ball (~(put ba:tarball *ball:tarball) [/ %test] content) =/ result (~(pub ba:tarball my-ball) / sub-ball) %+ expect-eq @@ -1395,7 +1320,7 @@ ++ test-pub-at-path :: Pub at path inserts subtree =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ sub-ball (~(put ba:tarball *ball:tarball) [/ %test] content) =/ result (~(pub ba:tarball my-ball) /foo/bar sub-ball) %+ expect-eq @@ -1405,8 +1330,8 @@ ++ test-pub-replaces-existing :: Pub replaces existing subtree =/ my-ball *ball:tarball - =/ old=content:tarball [~ [%mime !>([/text/plain [3 'old']])]] - =/ new=content:tarball [~ [%mime !>([/text/plain [3 'new']])]] + =/ old=content:tarball [~ [/ %mime] !>([/text/plain [3 'old']])] + =/ new=content:tarball [~ [/ %mime] !>([/text/plain [3 'new']])] =/ g1 (~(put ba:tarball my-ball) [/foo/bar %file] old) =/ sub-ball (~(put ba:tarball *ball:tarball) [/ %file] new) =/ result (~(pub ba:tarball g1) /foo/bar sub-ball) @@ -1417,8 +1342,8 @@ ++ test-pub-preserves-siblings :: Pub at path should preserve sibling directories =/ my-ball *ball:tarball - =/ sibling=content:tarball [~ [%mime !>([/text/plain [7 'sibling']])]] - =/ new=content:tarball [~ [%mime !>([/text/plain [3 'new']])]] + =/ sibling=content:tarball [~ [/ %mime] !>([/text/plain [7 'sibling']])] + =/ new=content:tarball [~ [/ %mime] !>([/text/plain [3 'new']])] =/ g1 (~(put ba:tarball my-ball) [/foo/sibling %file] sibling) =/ sub-ball (~(put ba:tarball *ball:tarball) [/ %file] new) =/ result (~(pub ba:tarball g1) /foo/target sub-ball) @@ -1436,8 +1361,8 @@ ++ test-pub-deep-subtree :: Pub a multi-level subtree =/ my-ball *ball:tarball - =/ content1=content:tarball [~ [%mime !>([/text/plain [2 'c1']])]] - =/ content2=content:tarball [~ [%mime !>([/text/plain [2 'c2']])]] + =/ content1=content:tarball [~ [/ %mime] !>([/text/plain [2 'c1']])] + =/ content2=content:tarball [~ [/ %mime] !>([/text/plain [2 'c2']])] =/ sub-ball *ball:tarball =. sub-ball (~(put ba:tarball sub-ball) [/deep/nested %file1] content1) =. sub-ball (~(put ba:tarball sub-ball) [/other %file2] content2) @@ -1456,7 +1381,7 @@ ++ test-put-creates-intermediate-lumps :: Put at deep path should create lumps for intermediate directories =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ result (~(put ba:tarball my-ball) [/a/b/c %file] content) :: Check intermediate directories have lumps =/ at-a (~(dip ba:tarball result) /a) @@ -1472,15 +1397,15 @@ :: Put should not overwrite existing lumps on intermediate directories =/ my-ball *ball:tarball =/ meta=(map @t @t) (~(gas by *(map @t @t)) ~[['key' 'value']]) - =/ g1 (~(mkd ba:tarball my-ball) /a meta `%special) - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ g1 (~(mkd ba:tarball my-ball) /a meta `[/ %special]) + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ result (~(put ba:tarball g1) [/a/b/c %file] content) =/ at-a (~(dip ba:tarball result) /a) ?~ fil.at-a !! ;: weld :: Neck should be preserved %+ expect-eq - !> `%special + !> `[/ %special] !> neck.u.fil.at-a :: Metadata should be preserved %+ expect-eq @@ -1491,7 +1416,7 @@ ++ test-put-at-root :: Put at root (empty path) should work correctly =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ result (~(put ba:tarball my-ball) [/ %file] content) ;: weld :: File should exist @@ -1507,8 +1432,8 @@ :: Multiple puts to different paths should not interfere =/ my-ball *ball:tarball =/ meta=(map @t @t) (~(gas by *(map @t @t)) ~[['key' 'value']]) - =/ g1 (~(mkd ba:tarball my-ball) /x meta `%first) - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ g1 (~(mkd ba:tarball my-ball) /x meta `[/ %first]) + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ g2 (~(put ba:tarball g1) [/y/z %file] content) :: /x should still have its original lump =/ at-x (~(dip ba:tarball g2) /x) @@ -1516,7 +1441,7 @@ ?~ fil.at-x !! ;: weld %+ expect-eq - !> `%first + !> `[/ %first] !> neck.u.fil.at-x :: /y should have a lump too %- expect @@ -1526,7 +1451,7 @@ ++ test-put-deep-nesting :: Put at very deep path should create lumps at all levels =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ result (~(put ba:tarball my-ball) [/a/b/c/d/e %file] content) =/ at-a (~(dip ba:tarball result) /a) =/ at-ab (~(dip ba:tarball result) /a/b) @@ -1546,7 +1471,7 @@ ++ test-mkd-creates-intermediate-lumps :: mkd at deep path should create lumps for intermediate directories =/ my-ball *ball:tarball - =/ result (~(mkd ba:tarball my-ball) /a/b/c ~ `%target) + =/ result (~(mkd ba:tarball my-ball) /a/b/c ~ `[/ %target]) :: Check intermediate directories have lumps =/ at-a (~(dip ba:tarball result) /a) =/ at-ab (~(dip ba:tarball result) /a/b) @@ -1561,8 +1486,8 @@ :: mkd should not overwrite existing lumps on intermediate directories =/ my-ball *ball:tarball =/ meta=(map @t @t) (~(gas by *(map @t @t)) ~[['key' 'value']]) - =/ g1 (~(mkd ba:tarball my-ball) /a meta `%special) - =/ result (~(mkd ba:tarball g1) /a/b/c ~ `%target) + =/ g1 (~(mkd ba:tarball my-ball) /a meta `[/ %special]) + =/ result (~(mkd ba:tarball g1) /a/b/c ~ `[/ %target]) =/ at-a (~(dip ba:tarball result) /a) =/ at-abc (~(dip ba:tarball result) /a/b/c) ?~ fil.at-a !! @@ -1570,7 +1495,7 @@ ;: weld :: /a neck should be preserved %+ expect-eq - !> `%special + !> `[/ %special] !> neck.u.fil.at-a :: /a metadata should be preserved %+ expect-eq @@ -1578,14 +1503,14 @@ !> (~(get by metadata.u.fil.at-a) 'key') :: /a/b/c should have the target neck %+ expect-eq - !> `%target + !> `[/ %target] !> neck.u.fil.at-abc == :: ++ test-pub-creates-intermediate-lumps :: pub at deep path should create lumps for intermediate directories =/ my-ball *ball:tarball - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ sub-ball (~(put ba:tarball *ball:tarball) [/ %file] content) =/ result (~(pub ba:tarball my-ball) /a/b/c sub-ball) :: Check intermediate directories have lumps @@ -1602,8 +1527,8 @@ :: pub should not overwrite existing lumps on intermediate directories =/ my-ball *ball:tarball =/ meta=(map @t @t) (~(gas by *(map @t @t)) ~[['key' 'value']]) - =/ g1 (~(mkd ba:tarball my-ball) /a meta `%special) - =/ content=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ g1 (~(mkd ba:tarball my-ball) /a meta `[/ %special]) + =/ content=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =/ sub-ball (~(put ba:tarball *ball:tarball) [/ %file] content) =/ result (~(pub ba:tarball g1) /a/b/c sub-ball) =/ at-a (~(dip ba:tarball result) /a) @@ -1611,7 +1536,7 @@ ;: weld :: Neck should be preserved %+ expect-eq - !> `%special + !> `[/ %special] !> neck.u.fil.at-a :: Metadata should be preserved %+ expect-eq @@ -1623,14 +1548,14 @@ :: pub should preserve the subtree's own lump structure =/ my-ball *ball:tarball =/ sub-meta=(map @t @t) (~(gas by *(map @t @t)) ~[['sub-key' 'sub-value']]) - =/ sub-ball (~(mkd ba:tarball *ball:tarball) / sub-meta `%sub-neck) + =/ sub-ball (~(mkd ba:tarball *ball:tarball) / sub-meta `[/ %sub-neck]) =/ result (~(pub ba:tarball my-ball) /target sub-ball) =/ at-target (~(dip ba:tarball result) /target) ?~ fil.at-target !! ;: weld :: Subtree's neck should be preserved %+ expect-eq - !> `%sub-neck + !> `[/ %sub-neck] !> neck.u.fil.at-target :: Subtree's metadata should be preserved %+ expect-eq @@ -1905,7 +1830,7 @@ ++ test-validate-names-files-only :: Ball with only files is valid =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =. b (~(put ba:tarball b) [/ %foo] c) =. b (~(put ba:tarball b) [/ %bar] c) %- expect @@ -1914,7 +1839,7 @@ ++ test-validate-names-dirs-only :: Ball with only directories is valid =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =. b (~(put ba:tarball b) [/foo %test] c) =. b (~(put ba:tarball b) [/bar %test] c) %- expect @@ -1923,7 +1848,7 @@ ++ test-validate-names-no-collision :: Ball with files and dirs, no name collision =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =. b (~(put ba:tarball b) [/ %file1] c) =. b (~(put ba:tarball b) [/dir1 %nested] c) %- expect @@ -1932,7 +1857,7 @@ ++ test-validate-names-nested-no-collision :: Deeply nested structure with no collisions =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] =. b (~(put ba:tarball b) [/a/b/c %file] c) =. b (~(put ba:tarball b) [/a/b %other] c) =. b (~(put ba:tarball b) [/a %root] c) @@ -1942,7 +1867,7 @@ ++ test-put-file-collides-with-dir :: Putting a file with same name as existing dir should crash =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] :: First create a directory named 'foo' by putting a file inside it =. b (~(put ba:tarball b) [/foo %nested] c) :: Now try to put a file named 'foo' at root - should crash @@ -1952,7 +1877,7 @@ ++ test-put-creates-dir-collides-with-file :: Creating dir path that collides with existing file should crash =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] :: First create a file named 'foo' at root =. b (~(put ba:tarball b) [/ %foo] c) :: Now try to create /foo/bar - 'foo' would need to be a dir, should crash @@ -1962,7 +1887,7 @@ ++ test-mkd-collides-with-file :: Creating directory with same name as existing file should crash =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] :: First create a file named 'foo' at root =. b (~(put ba:tarball b) [/ %foo] c) :: Now try to mkdir /foo - should crash @@ -1972,7 +1897,7 @@ ++ test-nested-put-collision :: Collision deeper in the tree =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] :: Create /a/b/foo as a directory =. b (~(put ba:tarball b) [/a/b/foo %nested] c) :: Try to create /a/b/foo as a file - should crash @@ -1982,7 +1907,7 @@ ++ test-valid-sibling-names :: File and dir can have same name at different levels =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] :: 'foo' as file at root =. b (~(put ba:tarball b) [/ %foo] c) :: 'foo' as directory under /bar (different parent) @@ -1993,7 +1918,7 @@ ++ test-pub-rejects-invalid-subtree :: pub should reject a subtree with internal name collisions =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] :: Manually construct a bad ball with 'foo' as both file and dir :: (bypassing put which would crash) =/ bad-ball=ball:tarball @@ -2006,7 +1931,7 @@ ++ test-pub-rejects-nested-invalid-subtree :: pub should reject subtree with collision deep in tree =/ b=ball:tarball *ball:tarball - =/ c=content:tarball [~ [%mime !>([/text/plain [5 'hello']])]] + =/ c=content:tarball [~ [/ %mime] !>([/text/plain [5 'hello']])] :: Create a valid outer ball with an invalid nested ball =/ bad-nested=ball:tarball :_ (my [%bar *ball:tarball] ~) :: dir has 'bar' diff --git a/docs/understanding.md b/docs/understanding.md new file mode 100644 index 0000000..b4195a0 --- /dev/null +++ b/docs/understanding.md @@ -0,0 +1,215 @@ +# Understanding Grubbery + +## What I think I know + +- Grubbery is a Gall agent that provides a runtime for nested programs +- The ball is the filesystem: `(axal lump)`, a tree of directories containing files +- Files hold typed content (sage = blot + vase) +- Directories can have a neck that identifies which nexus code governs them +- A nexus is code with three arms: on-load (init), on-file (spawn processes), on-manu (docs) +- Files can have fiber processes attached — monadic event loops using `;<` bind +- Fibers communicate by emitting darts (effects) that route through the tree +- The loader declaratively sets up directory structure in on-load +- Weirs are sandbox rules on directories that can block darts +- Code namespaces (neck `[/ %code]`) get compiled by the build system + +## Open questions + +1. When a nexus "governs" a directory, does it intercept all operations on that subtree, or just initialize structure and spawn processes? + +## Answers + +1. A nexus governs a directory in three ways: + - **on-file (primary):** Determines which fiber process runs at each grub (file) in the subtree. Every grub has exactly one sequential monadic process. The fiber takes input, returns effects (darts), a new state, and a continuation function. The nearest parent nexus decides which fiber runs at each file — this is the most fundamental meaning of "governs." + - **on-load:** Can reload everything beneath it. Typically triggered when its code changes or an ancestor's code changes. Can also be manually triggered. + - **on-manu:** Defines per-file and per-directory documentation explaining what each part of the namespace does. + + Key clarification: a nexus does NOT intercept operations. It determines what code runs at each file, can reload, and provides docs. + +## Revised understanding + +- A grub is a file in the namespace — it is both a typed piece of data (a vase: type+noun pair, with a mark name) AND a running fiber process. These are two aspects of one thing, not separate. +- The nexus's primary role is deciding which fiber runs at each grub. It's a dispatch table, not a mediator. +- Reload cascades: when code changes, nexuses reload, which can cascade downward. + +## Open questions + +2. **The file IS the fiber's state.** The sage (typed content) at a grub is the state that the fiber manipulates. The continuation (the function waiting for next input) is stored separately by the runtime. But the persistent, visible data in the namespace is the fiber's state — they are the same thing. + +3. **Dart routing walks the tree literally.** `process-dart` in grubbery.hoon: + - Resolves the dart's destination to an absolute lane + - Finds the "governor" — the nearest directory strictly ABOVE both source and destination (the neutral authority over both) + - Walks UP from the source to the governor, checking the weir at each directory along the way. Any weir that blocks the dart's destination → veto (sent back to source as `%veto` intake) + - The governor's own weir is NOT checked (you reach it, not pass through) + - Downward movement from governor to destination is always free + - For syscalls (dest=~), there is no governor — walk all the way to root, and any weir blocks it + - If a weir allows but the dart crosses a sandbox boundary, vases get clammed (type-checked) + + Code: `++nearest-governor` (lines 2234-2251), `++allowed` (lines 2253-2273), `++process-dart` (lines 1475-1494) + +4. **Code lookup walks up to find the nearest `/code` sibling.** + - When a grub needs its process, `build-spool` calls `find-nearest-nexus` which walks UP the ball to find the nearest directory with a neck — that's the governing nexus. + - To compile/find that nexus's code, `build-nexus` uses `find-code-ns` which walks UP from the grub's location, checking at each ancestor whether there's an immediate child directory called `code` in the compiled code map. + - The first `/code` found is the governing code namespace. It's hermetic: if it doesn't have the artifact, grubbery returns `~` rather than falling back to a parent namespace. + - So: neck `[/claw %agent]` → find nearest `/code` → look for compiled `/nex/claw/agent.hoon` in that namespace. + + Code: `++find-nearest-nexus` (1445), `++build-spool` (1458), `++find-code-ns` (608), `++seek-built` (620) + +5. **The pool mirrors the ball — it holds process state.** + - `pool = (axal pipe)` — same tree shape as the ball + - `pipe = [bang=(unit tang) proc=(map @ta proc:fiber)]` — per-directory process info + - `proc` maps filename → fiber process state (continuation + input queues), mirroring how `lump.contents` maps filename → content + - `bang` is an optional crash trace for the directory node itself + - So ball holds data, pool holds processes. One-to-one: every grub in the ball has a corresponding process entry in the pool. + + The fiber continuation (the function waiting for next input) lives in the pool, while the fiber's state (the vase it manipulates) lives in the ball as the file's sage. Two halves of the same grub. + +6. **Bang exists at two levels:** + - **Process-level:** Each fiber's `process` field is `(each process tang)`. When a fiber crashes, the continuation is replaced with `|+tang` (the crash trace). The process is dead, queued inputs sit idle. Healing is implicit — a successful respawn overwrites `|+tang` with `&+process`. + - **Nexus-level (directory):** `pipe.bang = (unit tang)`. Set by `++bang-nexus` when nexus code itself fails (e.g. on-load crashes during reload). This cascades: every file underneath gets banged, all processes replaced with `+stay` (frozen). The whole subtree is down. + - **Querying:** `%bang` dart on a directory returns `[directory-bang (map filename (unit tang))]`. On a file, returns just that file's crash trace. + - **Healing:** Nexus-level is explicit — `clear-bangs-under` wipes all bangs before reload attempt, then anything that still fails gets re-banged. + +7. **Born = version counters. Silo = content-addressed history store.** + + **Born** `(axal [tote bags])` mirrors the ball structure with monotonic counters. Never deleted, even when grubs are deleted. + - Per-directory (tote): `[weir=cass fold=cass]` + - `weir` bumps on weir change + - `fold` bumps when ANY descendant changes (propagates up to root) + - Per-file (sack in bags): `[proc=cass life=cass file=cass hist=mop]` + - `proc` bumps on process spawn/restart + - `life` bumps on grub creation (survives deletion — tracks reincarnation) + - `file` bumps on content change + - `hist` is ordered map: cass → lobe (hash into silo) + - These counters are the basis for the subscription system. The runtime snapshots born before mutations, diffs old vs new after, and sends `%news` intakes to subscribers watching changed lanes. Fibers never touch born directly — they `%keep` (subscribe) and receive `%news` (updates). + + **Silo** `(map lobe [refs=@ud bask])` — content-addressed object store. + - `lobe = @uvI` from `+sham` (hash of content) + - `bask = [blot noun]` — typed content without vase overhead + - Refcounted: `refs` tracks how many hist entries point here; drops to 0 → deleted + - Connection: file changes with gain enabled → content hashed into silo → hist in born gets `cass → lobe` entry → look up any version by cass → lobe → bask + +8. **Grubbery relates to Clay the same way any Gall agent relates to its desk.** + - Grubbery's own source code lives in Clay on the grubbery desk (at `gub/`) + - It listens to `gub/` and populates its root `/code` nexus with those files — that's how nexus source, libraries, marks etc. get compiled + - Beyond that, the grubbery namespace is entirely separate from Clay. Different filesystem, different application model. Clay stores grubbery's code; grubbery runs its own world. + +9. **Subscriptions from the fiber's perspective:** + - `keep:io wire road mark` → sends `%keep` dart, receives `%bond` intake (ack + initial view of the target) + - `take-news:io wire` → waits for `%news` intake (updated view when target changes) + - `drop:io wire road` → sends `%drop` dart, receives `%fell` intake (unsubscribe confirmed) + - `%fell` can also arrive unsolicited if the watched target is deleted or a weir change breaks the subscription + - Under the hood: the runtime diffs born before/after mutations, finds changed lanes, matches against subscriber registrations in `subs`, and delivers `%news` intakes + +10. **What grubbery is for:** + + The core idea: take the benefits of asynchronous monadic processes (composable, sequential, effect-driven) and give them state that lives in a hierarchical namespace. + + A Gall agent is one flat process managing one blob of state. If you want many concurrent concerns, you have to multiplex them yourself — dispatch on wires, manage substates, handle interleaving. It gets complex fast. + + Grubbery solves this by putting processes in a tree. Each file is a process with its own state. The tree structure lets you: + - **Decompose granularly:** break a complex system into many small processes, each managing one file + - **Group by concern:** directories organize related processes together + - **Govern by code:** nexuses let different code control different subtrees — the counter nexus doesn't know or care about the wallet nexus + - **Sandbox naturally:** weirs restrict what parts of the tree a process can reach, and the restriction follows the tree structure itself + - **Subscribe structurally:** watch any file or directory for changes, because everything has a path + + The namespace IS the architecture. Instead of designing internal data structures to organize your application, you organize it as a filesystem where every node is live. + +11. **Sand and gain are separate because they're policy, not data.** + - Ball = pure data (files, content, directory structure) + - Sand = sandbox policy (weirs at each directory) + - Gain = history policy (which files track versions) + - Separating them keeps the ball clean — it's just content. Policy is orthogonal. + - All three are passed through on-load together: `|= [=sand =gain =ball]` + +12. **`seen = (each view tang)` — view or error. That's it.** + - `%peek` can fail, so it returns `seen` + - Subscriptions deliver `view` directly (already successfully subscribed) + - `view` itself is a complete snapshot of a node: + - `%ball` (directory): includes sand, gain, born, and the full subtree ball + - `%file`: includes sack (version info), gain flag, and sage (content) + - `%none`: nothing at that path + - So views carry policy and version info alongside content, not just raw data + +13. **Reload cascade: top-down restructure, then respawn everything.** + 1. `reload-nexus-at`: clear all bangs under this nexus, run on-load (may restructure the entire subtree), validate marks, write back ball/sand/gain + 2. `reload-child-nexuses`: walk children, find directories with necks (skip `/code`), build their nexus code, `reload-nexus-at` each one — top-down recursion + 3. After the full tree restructures, `spawn-all-files` walks every file and spawns its fiber with `[%load ~]` prod + - During reload, everything is just state. All processes are dead. The tree is purely data being restructured by on-loads. Once the dust settles, every grub gets a fresh process. + - If on-load crashes → bang the nexus, stay all processes underneath (they're frozen with the crash trace) + - Fibers receive `%load` prod on spawn so they know they're resuming from a reload (vs `%make` for new creation) + +14. **Marks/blots are simple.** + - Blot = a rail used as a type identity: `[/ %json]`, `[/wallet %account]` + - Marc = compiled mark core with three arms: `vale` (validate noun → vase), `grow` (outbound conversion to another blot), `grab` (inbound conversion from another blot) + - Source lives in `/mar/` in code namespaces. Blot `[/wallet %account]` → `/mar/wallet/account.hoon` + - Conversion: try `grow` on source marc first, fall back to `grab` on target marc + - Runtime validates content through marc `vale` on write. Some marks hardcoded for bootstrap (hoon, mime, tang, boom, kelvin) + +15. **`make` = create a thing.** + - `(each [sand gain ball] [gain=? sage mark=(unit mark)])` + - Left: create a directory (with policy + data subtree) + - Right: create a file (with gain flag, typed content, optional mark conversion on write) + +16. **The seven parallel structures, all keyed by the namespace:** + - Ball = data tree + - Pool = process tree + - Born = version counter tree (never deleted) + - Sand = weir policy tree + - Gain = history policy tree + - Silo = content-addressed store for historical versions + - Code = compiled artifacts per code namespace + +17. **Claw architecture in grubbery terms:** + + **claw/app** (`app.hoon`) — the container nexus at `/claw.claw_app/`: + - Creates agent instances in `/agents/` and channel instances in `/channels/` + - Runs the Anthropic API proxy at `/apis/anthropic.sig` (adds API key, forwards HTTP) + - Sets a **weir** on each agent instance: + - `make = ~` → cannot create/delete OUTSIDE its own subtree + - `poke = [/sys/bowl, ../../apis]` → can only poke system bowl and the API proxy + - `peek = [/]` → can READ the entire tree (full read access) + - This means agents are sandboxed: full read, write only within self, poke only the API proxy + + **claw/agent** (`agent.hoon`) — the AI agent nexus: + - Manages conversations, tools, LLM interaction + - Tools run as sub-fibers at `/tools/{tid}/` — one level below agent root + - `agent-road` helper adjusts relative paths so tools resolve from agent root, not tool dir + - The main loop: assemble conversation (prompts + history), send to API via proxy, dispatch tool calls to tool fibers, append results, loop + - Agent can spawn children in `./children/` (within its subtree, so weir allows it) + - Agent can build code in `./content/code/` (its own code namespace) + + **What the AI CAN do:** + - Read/write files in its own subtree + - Read files anywhere in the ball (full peek access) + - Build and compile code in its code namespace + - Create child nexuses within `./children/` + - Call the Anthropic API via the proxy + - Write dynamic tools + + **What the AI CANNOT do:** + - Write/create files outside its subtree + - Poke processes outside its subtree (except the API proxy) + - Modify other agents or system nexuses + - Access the API key directly (the proxy holds it) + +18. **How the AI is intended to use grubbery:** + + Two separate directories, two separate concerns: + + **`./apps/`** — the AI's application space. + - `./apps/code/` — source code: nexus definitions, libraries, marks, tools + - `./apps/my-thing/` — running nexus instances (created via create_nexus) + - This is where the AI builds programs. Write code, compile, instantiate, build tool interfaces. + + **`./children/`** — sub-agents for task delegation. + - spawn_task creates temporary claw agent instances here + - These are other AIs handling subtasks, NOT custom applications + + Key constraints: + - The AI NEVER modifies its own nexus code — that's authored by the developer, compiled in the parent code namespace, and governs from above + - Channels (`/channels/`) are a claw app concern (external chat interfaces), not the AI's + - Nothing outlives the agent instance — everything is scoped to its subtree + +## Remaining gaps diff --git a/sync.sh b/sync.sh index 093284d..dd5143f 100755 --- a/sync.sh +++ b/sync.sh @@ -1,16 +1,29 @@ #!/bin/bash -# Load config -DEST=$(python3 -c "import json, os; print(os.path.expanduser(json.load(open('config.json'))['dest']))") +# Load config — supports either a single "dest" string or a "dests" list +DESTS=$(python3 -c " +import json, os +cfg = json.load(open('config.json')) +dests = cfg.get('dests') or [cfg['dest']] +for d in dests: + print(os.path.expanduser(d)) +") SOURCE="desk/" +sync_all() { + while IFS= read -r dest; do + rsync -av --delete "$SOURCE" "$dest" + done <<< "$DESTS" +} + # Initial sync -echo "Starting sync: $SOURCE -> $DEST" -rsync -av --delete "$SOURCE" "$DEST" +echo "Starting sync: $SOURCE -> " +echo "$DESTS" | sed 's/^/ /' +sync_all # Watch for changes and sync fswatch -o "$SOURCE" | while read f; do echo "Change detected, syncing..." - rsync -av --delete "$SOURCE" "$DEST" + sync_all echo "Sync complete at $(date +%H:%M:%S)" -done \ No newline at end of file +done