Commit graph

16838 commits

Author SHA1 Message Date
Vincent Ambo
31443d21ee chore(tvix): move nix-store CLI scaffolding to subfolder
For some reason a top-level Rust project ended up in this location,
which is incompatible with the actual project structure that's being
prepared for merge right now.

Change-Id: I9d919ad72fc7e4e4d8cbb9899e7f8d90fa7ca87a
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6060
Tested-by: BuildkiteCI
Reviewed-by: flokli <flokli@flokli.de>
Autosubmit: tazjin <tazjin@tvl.su>
2022-08-12 15:58:59 +00:00
Vincent Ambo
3ed45caad1 feat(tvix/eval): implement Display trait for Value enum
This representation should match what the Nix REPL shows for result
values.

Change-Id: If3143d969fcdc123a6029e2aeb7bbd6ae51aeb71
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6082
Tested-by: BuildkiteCI
Autosubmit: tazjin <tazjin@tvl.su>
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 14:12:07 +00:00
Vincent Ambo
0d2896519c refactor(tvix/eval): move NumberPair struct definition to vm module
This isn't relevant to the value type itself.

Change-Id: I678bc92a8a530b1081ed498bf3ff7925217bcc01
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6081
Tested-by: BuildkiteCI
Autosubmit: tazjin <tazjin@tvl.su>
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 14:09:27 +00:00
Vincent Ambo
9c5a249b30 feat(tvix/compiler): incompletely handle true/false/null literals
These are a bit tricky to implement because Nix technically treats
them as identifiers, and only if the identifier is not explicitly
overridden within the scope does it yield the expected literal values.

Note that weirdness even occurs with scopedImport.

Change-Id: Ie55723405ccfcc25da37c5a08fa3332f37cf9ae5
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6080
Tested-by: BuildkiteCI
Autosubmit: tazjin <tazjin@tvl.su>
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 14:09:27 +00:00
Vincent Ambo
d431f43f5f feat(tvix/eval): implement boolean inversion operator
Change-Id: Icb1d449fdee4d67b5f1eefdbc01baa1584ea0a67
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6079
Tested-by: BuildkiteCI
Autosubmit: tazjin <tazjin@tvl.su>
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 14:09:27 +00:00
Vincent Ambo
ded0fb9e21 feat(tvix/eval): implement equality operator
Change-Id: I9dd54aed72cd7e67593dc76f5a046ebbda40c26f
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6078
Tested-by: BuildkiteCI
Autosubmit: tazjin <tazjin@tvl.su>
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 14:09:27 +00:00
Vincent Ambo
28f57abac1 refactor(tvix/compiler): use rnix's typed AST for literal values
Change-Id: Ic56ab64ad82343c7cdf8168ef41ee0a97f7e1dd9
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6077
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 13:24:10 +00:00
Vincent Ambo
18fe188c3e feat(tvix/compiler): implement parens precedence
Change-Id: I8944354b3690d7504e4fe4254f14be5b849b9bcf
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6076
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 13:24:10 +00:00
Vincent Ambo
72be759e1e feat(tvix/eval): implement unary negation operator
Change-Id: I5d012cc073e55d79d7b34b88283aab3164864293
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6075
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 13:24:10 +00:00
Vincent Ambo
d35ecc0caf feat(tvix/eval): implement simple arithmetic binary operations
Implements simple arithmetic operations (+, -, *, /).

There is some scaffolding included to pop and coerce pairs of numbers,
as the Nix language will let arithmetic operators apply to arbitrary
pairs of number types (always resulting in floats if the types are
mixed).

Change-Id: I5f62c363bdea8baa6ef812cc64c5406759d257cf
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6074
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 13:24:10 +00:00
Vincent Ambo
e96a2934ad feat(tvix/eval): add error variant for runtime type errors
Change-Id: I74155cf01766b7a991a69522945bff67fbca5a16
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6073
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 13:24:10 +00:00
Vincent Ambo
e8253c7044 chore(tvix/eval): wire things up for development flow
This creates a REPL which outputs compiled bytecode, constants, and VM
results for code snippets.

Change-Id: If63f79a961456afd6a4cdf59b994107ff7ab8b47
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6072
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
Autosubmit: tazjin <tazjin@tvl.su>
2022-08-12 13:05:28 +00:00
Vincent Ambo
d59968649e feat(tvix/eval): add initial stack-based VM
This can't do anything other than compute a single literal, for now

Change-Id: Ia28f9da51c906b590a198e77a4ca5d45a871106b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6071
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 13:05:16 +00:00
Vincent Ambo
34df2c8473 feat(tvix/eval): add initial barebones compiler
This compiler can only take care of very trivial literals so far.

Change-Id: I9dfac75a801b7235f868061a979ae24159fe1425
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6070
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 13:05:16 +00:00
Vincent Ambo
3aaefc3000 feat(tvix/eval): add initial chunk representation
Change-Id: I53202e93938bede421c8f1c98901e4c67544e257
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6069
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 13:05:16 +00:00
Vincent Ambo
48a7449834 feat(tvix/eval): add initial opcode representation
Change-Id: Ibc7685a6b0b92e08f0b6c82cf7d9b04fbb593a4e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6068
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 13:05:16 +00:00
Vincent Ambo
8b7d2fd59e feat(tvix/eval): add initial value representation
Change-Id: I427a04e89994662df2750dffe21991bad48aab15
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6066
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 12:39:19 +00:00
Vincent Ambo
bef8d67b6c chore(tvix/eval): add rnix-parser dependency
Change-Id: I81bd8416b3837a728ecd7911fe1ca06e89b9e90e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6065
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 12:39:19 +00:00
Vincent Ambo
8921688334 chore(tvix/eval): bootstrap some evaluator boilerplate
Change-Id: I7770a20948d18a8506c2418dea21202aa21a6ddc
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6064
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 12:39:19 +00:00
Vincent Ambo
a9b2157fba chore(tvix/eval): check in naersk-based default.nix
Change-Id: I9ff0c4a196747361a3e421863beaff07a4972b0f
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6067
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 12:39:19 +00:00
Vincent Ambo
7be4581876 docs(tvix/eval): Add initial evaluator README
Change-Id: I85df002dc13c91a184d064586244f6a7440320fb
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6063
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 12:34:29 +00:00
Vincent Ambo
d1bf3d3577 feat(tvix/eval): check in generated project skeleton
Change-Id: Iecc8283abb289de71f22076fd88892f6ded99cb3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6062
Tested-by: BuildkiteCI
Reviewed-by: grfn <grfn@gws.fyi>
2022-08-12 12:34:29 +00:00
Vincent Ambo
8f4beaaba2 feat(tazjin/emacs): add helper function for navigating tvix tests
the upstream Nix test suite uses the pattern of having `.nix` and
`.exp` files for input/expected output, and with this shitty function
navigating between them is a lot simpler

Change-Id: I9d91290057521fe1e1599f69fd6b0f35e1b59960
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6058
Reviewed-by: tazjin <tazjin@tvl.su>
Autosubmit: tazjin <tazjin@tvl.su>
Tested-by: BuildkiteCI
2022-08-10 16:48:30 +00:00
William Carroll
4732603a42 feat(wpcarro/rust): Include std::fmt::Display example
Gotta know how to `to_string` things

Change-Id: I259ef61ecaf6ae7fabe0b3d211706ba5f429b3a7
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6057
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-09 17:22:37 +00:00
William Carroll
783e1190cd feat(wpcarro/fish): Drop support for rebuild-system alias
v0v

Change-Id: Icef033d3e400694b0c2246654fd88cda9e298320
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6056
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-08 18:47:52 +00:00
William Carroll
d26318a508 fix(wpcarro/emacs): Set lsp-rust-server
Whoops

Change-Id: I24657c5ca852fd9e22e113ebec999fc873dc883e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6055
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-08 18:47:51 +00:00
William Carroll
b92ceccfdb fix(wpcarro/emacs): Update rust configuration
- Prefer LSP to racer
- Move KBDs to central location

Change-Id: Ib3fbf1b383d711f3ac6dd6d7791374b014b9df90
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6054
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-08 17:56:45 +00:00
William Carroll
60f6f5f10e fix(wpcarro/emacs): Remove vterm-mgt.el's dep on prelude.el
I wonder if there's an Elisp linter that can catch these errors at nix-build
time.

Change-Id: Ib54e1e57e46ef81021fc373ceecab5a729646472
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6048
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-06 22:21:26 +00:00
William Carroll
42ff8ccf5f feat(wpcarro/marcus): Disable auto-reboot
This only somewhat works, and I don't really need it.

Change-Id: I4e78e5fd49ec07e6cb90a3feef8a4c87cb7b7707
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6047
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-06 22:21:25 +00:00
William Carroll
1cd505e834 feat(wpcarro/marcus): Enable Tailscale daemon
:)

Change-Id: I5b2cd7a25c074a7e76bf97ffadd76c98577527bc
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6046
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-06 20:50:13 +00:00
William Carroll
cdb4ecf5c0 fix(wpcarro/marcus): Fix fstab
Labels `NIXROOT` and `NIXBOOT` don't exist, but `nixos` and `boot` do...

Change-Id: I14296f1e03ed4b8953b360977921c3930c8907a6
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6045
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-06 20:50:13 +00:00
William Carroll
9203531abe chore(wpcarro/emacs): Move list-wrap out of predicates section
Formatting issue.

Change-Id: Ia5fe86572600a388beaf5e96b6dafd52ff223efb
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6044
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-05 20:37:16 +00:00
William Carroll
cc802eb44b fix(wpcarro/emacs): Remove lingering dash.el dep
CI couldn't catch this because the dependency is discovered at runtime, and
there were no tests consuming `list-concat`. Added the tests and removed the
usage of `-concat`.

Change-Id: I5bcce9aa8170001a9d35c104da09374ab30ffbc5
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6043
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-05 20:37:15 +00:00
William Carroll
8670746109 docs(wpcarro/emacs): Document list.el
- Add README.md
- Remove stale TODOs
- Rephrase some of the module docs

Change-Id: I14002836feeca4dd702350151b64600ea2a9125d
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6042
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-05 19:38:07 +00:00
William Carroll
e5503751c4 feat(wpcarro/emacs): Add fns to list.el
new functions:
- duplicate
- last
- delete
- wrap

also:
- drop support for `list-head` (in favor of `list-first`)
- add optional arg to first

Change-Id: If3c48d4749a3bc5a853995996fa02a65a4076a10
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6041
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-05 19:38:07 +00:00
William Carroll
b880fc4a14 refactor(wpcarro/emacs): Remove list.el's dep on dash.el 🎉
Still pruning the dependency tree. Thank you, seq.el, from DWIMing.

Change-Id: I797f08abe44853b9d297a99d5ba9e9bde3dcfeec
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6040
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-05 18:44:00 +00:00
William Carroll
42e7254ad0 docs(wpcarro/emacs): Add README to vterm-mgt.el
:)

Change-Id: I65a9a4617b23ddc74207f2e45c380bf5988372e3
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6039
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-04 21:55:29 +00:00
William Carroll
405efbc6c0 fix(wpcarro/emacs): Properly wrap vterm buffers in earmuffs
Conventions are conventions...

Change-Id: I1c9a0203e70cb9c762537353e8b640973dd93b26
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6038
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-04 21:55:29 +00:00
William Carroll
3ebd71dfa2 refactor(wpcarro/emacs): Remove vterm-mgt.el's dep on dash.el
TIL (or remembered rather) `seq.el` exists

Change-Id: Iec5c21aff7a76906cb24d03bf39bf03f94b67760
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6037
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-04 21:34:26 +00:00
William Carroll
70a13db93b fix(wpcarro/emacs): Fix load order for ava, tarasco
Looks like the everything after the `window-manager-init` call doesn't run.

Change-Id: Ib5d81c5f079152bda658d213a39c07276b4ef6e6
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6036
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-03 20:23:25 +00:00
William Carroll
db0cfd0616 refactor(wpcarro/emacs): Remove cycle.el's dep on maybe.el
More pruning on inter-library dependencies.

Change-Id: I711ab92f2985b543ee2684752f9cdbf5559f2eaf
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6035
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-03 20:23:24 +00:00
William Carroll
3461753478 refactor(wpcarro/emacs): Prefer (null foo) to (eq nil foo)
TIL `null` exists

Change-Id: I48ef783cf5762e8770fbc6abf0d79c051e34090e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6034
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-03 20:23:24 +00:00
William Carroll
7e7ed4649b docs(wpcarro/emacs): Provide README for struct.el
:)

Change-Id: Ibf8b051f4ca5a3cded20d5256227ec9accfbb787
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6030
Tested-by: BuildkiteCI
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
2022-08-03 17:11:01 +00:00
William Carroll
31bd89c777 feat(wpcarro/emacs): filteredGitPush struct.el
Expose struct.el on Github (precursor to a potential MELPA publish).

Change-Id: Ic03af87d77b4bcfd660db8dba35ed3e6695ddc1e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6031
Tested-by: BuildkiteCI
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
2022-08-03 17:08:00 +00:00
sterni
83d3042209 chore(3p/sources): Bump channels & overlays
* //users/grfn/system/home: build rain with Go 1.17, as it fails to
  build with Go 1.18 which introduces new compile-time errors

* //3p/nixpkgs: pick ntfy from stable channel as it does not build on
  unstable

* //users/sterni/emacs: make sure use-package is available before
  org-tracker can be loaded dynamically from $HOME/src. Interestingly
  this only became a problem with this channel bump.

Change-Id: Id7d23b66bc3ba0202a01b4f8d670854e1f31175e
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5988
Tested-by: BuildkiteCI
Reviewed-by: sterni <sternenseemann@systemli.org>
Reviewed-by: grfn <grfn@gws.fyi>
Reviewed-by: tazjin <tazjin@tvl.su>
Autosubmit: sterni <sternenseemann@systemli.org>
2022-08-02 22:39:44 +00:00
William Carroll
6f71482534 fix(wpcarro/emacs): refs/heads/main -> refs/heads/canon
Let's just roll with the TVL conventions

Change-Id: I1b90421ca7d9ad0d1ebbe922afdc62f80f0d5e97
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6033
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-02 20:52:31 +00:00
William Carroll
844cf6a794 refactor(wpcarro/emacs): Remove struct.el dep on s.el
This removes *all* of `struct.el`'s dependencies, which is liberating.

Change-Id: Ic4a2438714ecf547ba5e07a1f0e77d743941073c
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6029
Tested-by: BuildkiteCI
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
2022-08-02 20:47:30 +00:00
William Carroll
8e16730505 docs(wpcarro/emacs): Add README to cycle.el
Include asciinema, which is only valid for 7d because their email authentication
appears broken at the moment:

https: //github.com/asciinema/asciinema-server/issues/347#issuecomment-1203063694
Change-Id: I33a38586a6660cd8c89bd9aff2d2a452e3c61a0b
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6032
Tested-by: BuildkiteCI
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
2022-08-02 20:42:28 +00:00
William Carroll
63683b0803 refactor(wpcarro/emacs): Remove struct.el dep on dash.el
Simplifying the dependency graph of struct.el :)

Change-Id: I23f990d9f02f76d7f8b69c65f5d5090b1c572eed
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6028
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-02 20:31:26 +00:00
William Carroll
44f520ccd1 feat(wpcarro/emacs): Support struct-update!
Support mutable variant of `struct-update`. Also remove the `dash` dependency in
`tests.el`.

Change-Id: I76fc809e96b7cbbd3b39fd16db339cb62eab002c
Reviewed-on: https://cl.tvl.fyi/c/depot/+/6027
Reviewed-by: wpcarro <wpcarro@gmail.com>
Autosubmit: wpcarro <wpcarro@gmail.com>
Tested-by: BuildkiteCI
2022-08-02 20:31:24 +00:00