flamenco-manager.git
3 weeks agoMarked version 2.5 as released today master v2.5
Sybren A. Stüvel [Tue, 28 May 2019 14:00:09 +0000 (16:00 +0200)]
Marked version 2.5 as released today

3 weeks agoWeb setup: prevent removal of variables
Sybren A. Stüvel [Tue, 28 May 2019 13:52:53 +0000 (15:52 +0200)]
Web setup: prevent removal of variables

There is no UI for adding variables (yet), so removing them shouldn't be
allowed. Removing and adding is still possible using the 'Advanced' view
by editing the YAML directly.

3 weeks agoWeb setup: Prevent JavaScript error when variable has unknown audience
Sybren A. Stüvel [Tue, 28 May 2019 13:32:23 +0000 (15:32 +0200)]
Web setup: Prevent JavaScript error when variable has unknown audience

3 weeks agoVariables: empty audience no longer allowed; replacing it with "all"
Sybren A. Stüvel [Tue, 28 May 2019 13:32:10 +0000 (15:32 +0200)]
Variables: empty audience no longer allowed; replacing it with "all"

5 weeks agoRemoved unused comment
Sybren A. Stüvel [Fri, 10 May 2019 10:50:08 +0000 (12:50 +0200)]
Removed unused comment

5 weeks agoWeb setup: added the Shaman variable to the predefined variables
Sybren A. Stüvel [Fri, 10 May 2019 10:49:31 +0000 (12:49 +0200)]
Web setup: added the Shaman variable to the predefined variables

5 weeks agoWeb setup: predefined variable description is now interpreted as HTML
Sybren A. Stüvel [Fri, 10 May 2019 10:48:51 +0000 (12:48 +0200)]
Web setup: predefined variable description is now interpreted as HTML

This allows things like `<br>` in the description.

5 weeks agoWeb setup: Start of work on predefined variables
Sybren A. Stüvel [Fri, 10 May 2019 10:24:05 +0000 (12:24 +0200)]
Web setup: Start of work on predefined variables

To make it simpler for people to work with variables, I think it's a
good idea to create some predefined ones (and not them be deleted). This
also allows us to include some indication as to the semantics of each
variable in the web setup, making it easier to work with.

5 weeks agoWeb Setup: added new interface for editing variables
Sybren A. Stüvel [Thu, 9 May 2019 09:11:36 +0000 (11:11 +0200)]
Web Setup: added new interface for editing variables

This interface works with version 2 of the variables, and is smarter &
more intuitive than the old one.

5 weeks agoDashboard & Web setup: Make links visible by default
Sybren A. Stüvel [Fri, 10 May 2019 10:23:11 +0000 (12:23 +0200)]
Dashboard & Web setup: Make links visible by default

5 weeks agoWeb Setup: get rid of Vue.js specifics when saving config
Sybren A. Stüvel [Fri, 10 May 2019 08:32:55 +0000 (10:32 +0200)]
Web Setup: get rid of Vue.js specifics when saving config

Get rid of Vue.js specific getters/setters and __ob__ properties via the
JSON dumper. It is less sensitive to this than the YAML dumper (the latter
complains about some thing being `undefined` without saying what, and I
can't find it either).

6 weeks agoWeb setup: Moved some styling to CSS
Sybren A. Stüvel [Wed, 8 May 2019 14:43:01 +0000 (16:43 +0200)]
Web setup: Moved some styling to CSS

6 weeks agoDashboard: alignment tweak for worker details
Sybren A. Stüvel [Wed, 8 May 2019 14:18:46 +0000 (16:18 +0200)]
Dashboard: alignment tweak for worker details

This way the space is more efficiently used when the dashboard isn't
displayed full screen.

6 weeks agoDashboard: fixed mismatched HTML close tag
Sybren A. Stüvel [Wed, 8 May 2019 14:16:22 +0000 (16:16 +0200)]
Dashboard: fixed mismatched HTML close tag

6 weeks agoDashboard: Don't use `<u>` to underline, just use CSS
Sybren A. Stüvel [Wed, 8 May 2019 14:16:11 +0000 (16:16 +0200)]
Dashboard: Don't use `<u>` to underline, just use CSS

6 weeks agoPrevent losing Flamenco Server URL when saving YAML
Sybren A. Stüvel [Wed, 8 May 2019 14:07:20 +0000 (16:07 +0200)]
Prevent losing Flamenco Server URL when saving YAML

6 weeks agoWeb setup: Save YAML and Apply → … and Restart to Normal Mode
Sybren A. Stüvel [Wed, 8 May 2019 13:48:30 +0000 (15:48 +0200)]
Web setup: Save YAML and Apply → … and Restart to Normal Mode

The button previously saved the YAML and restarted to setup mode, which is
rather clumsy in actual use. Restarting to normal mode makes more sense.

6 weeks agoAllow hiding infrastructure-dependent settings in web setup
Sybren A. Stüvel [Wed, 8 May 2019 12:08:45 +0000 (14:08 +0200)]
Allow hiding infrastructure-dependent settings in web setup

When `websetup.hide_infra_settings` is true, the websetup will hide
certain settings that are infrastructure-specific. For example, it hides
MongoDB choice, port numbers, task log directory, all kind of
infra/hosting-specific things. This is used, for example, by the
automated Azure deployment to avoid messing up settings that are
specific to that particular installation.

6 weeks agoAdded missing comments in websetup vue components
Sybren A. Stüvel [Wed, 8 May 2019 12:01:29 +0000 (14:01 +0200)]
Added missing comments in websetup vue components

6 weeks agoWorkaround for Golang issue #31880: os.Chtimes does not work on SMB shares
Sybren A. Stüvel [Tue, 7 May 2019 10:44:52 +0000 (12:44 +0200)]
Workaround for Golang issue #31880: os.Chtimes does not work on SMB shares

Shaman touches files in the file store whenever they are referenced in a
checkout. This makes garbage collection slightly more efficient, as
recently-referenced files do not have to be checked. However, `os.Chtimes`
only allows us to use an explicit timestamp, which is not allowed on
certain SMB shares. Passing `NULL` as timestamp to the underlying system
call works fine, so that's what has been implemented now.

This workaround is only available on Linux, as I haven't been able to test
with other platforms. The other platforms just fall back to calling
`os.Chtimes(path, now, now)`.

6 weeks agoDashboard: no border-radius on stop worker-action button. wip-redesign
Pablo Vazquez [Fri, 3 May 2019 16:54:54 +0000 (18:54 +0200)]
Dashboard: no border-radius on stop worker-action button.

It's too similar to the generic checkboxes.

6 weeks agoDashboard: add 'Nodes' to Dedicated and Low-priority labels.
Pablo Vazquez [Fri, 3 May 2019 16:45:02 +0000 (18:45 +0200)]
Dashboard: add 'Nodes' to Dedicated and Low-priority labels.

6 weeks agoChangelog: Fix entry in wrong line.
Pablo Vazquez [Fri, 3 May 2019 16:34:59 +0000 (18:34 +0200)]
Changelog: Fix entry in wrong line.

6 weeks agoMerge remote-tracking branch 'origin/master' into wip-redesign
Pablo Vazquez [Fri, 3 May 2019 16:33:42 +0000 (18:33 +0200)]
Merge remote-tracking branch 'origin/master' into wip-redesign

6 weeks agoAdd user interface update to the changelog (for 2.5).
Pablo Vazquez [Fri, 3 May 2019 16:31:09 +0000 (18:31 +0200)]
Add user interface update to the changelog (for 2.5).

6 weeks agoCSS: Slightly darker gray-darker color variable.
Pablo Vazquez [Fri, 3 May 2019 16:22:21 +0000 (18:22 +0200)]
CSS: Slightly darker gray-darker color variable.

6 weeks agoLatest Image system no longer writes to the `static` directory
Sybren A. Stüvel [Fri, 3 May 2019 16:21:09 +0000 (18:21 +0200)]
Latest Image system no longer writes to the `static` directory

This is necessary to run Flamenco Manager from a different directory than
the extracted tarball. Also an error opening the file is now shown in the
image, and some logging was improved.

6 weeks agoDashboard: Layout and styling for Dynamic Pools resize modal.
Pablo Vazquez [Fri, 3 May 2019 16:20:52 +0000 (18:20 +0200)]
Dashboard: Layout and styling for Dynamic Pools resize modal.

6 weeks agoDashboard: Layout and styling for Dynamic Pools.
Pablo Vazquez [Fri, 3 May 2019 16:20:24 +0000 (18:20 +0200)]
Dashboard: Layout and styling for Dynamic Pools.

6 weeks agoDashboard Modal: Move Cancel button to the left.
Pablo Vazquez [Fri, 3 May 2019 16:19:24 +0000 (18:19 +0200)]
Dashboard Modal: Move Cancel button to the left.

6 weeks agoDashboard: Border on the right of checkboxes.
Pablo Vazquez [Fri, 3 May 2019 16:18:38 +0000 (18:18 +0200)]
Dashboard: Border on the right of checkboxes.

Better splits them from the worker action icons.

6 weeks agoDashboard: Old Workers layout adjustments.
Pablo Vazquez [Fri, 3 May 2019 16:17:52 +0000 (18:17 +0200)]
Dashboard: Old Workers layout adjustments.

* Move under Dynamic Pools.
* Use section instead of div, just semantics.
* Don't use description lists, just simple unordered lists.

6 weeks agoCSS: Override bootstrap modal header/footer border color with our own.
Pablo Vazquez [Fri, 3 May 2019 16:07:45 +0000 (18:07 +0200)]
CSS: Override bootstrap modal header/footer border color with our own.

6 weeks agoDashboard: Make right-side column dark.
Pablo Vazquez [Fri, 3 May 2019 16:06:48 +0000 (18:06 +0200)]
Dashboard: Make right-side column dark.

Or we can call it, a sidebar!

6 weeks agoDashboard: Full-height with fixed-topheader.
Pablo Vazquez [Fri, 3 May 2019 16:06:03 +0000 (18:06 +0200)]
Dashboard: Full-height with fixed-topheader.

6 weeks agoMerge remote-tracking branch 'origin/master' into wip-redesign
Pablo Vazquez [Fri, 3 May 2019 13:42:09 +0000 (15:42 +0200)]
Merge remote-tracking branch 'origin/master' into wip-redesign

6 weeks agoAdded 'make vendor' target to put dependencies into the `vendor` dir
Sybren A. Stüvel [Fri, 3 May 2019 13:10:16 +0000 (15:10 +0200)]
Added 'make vendor' target to put dependencies into the `vendor` dir

This is necessary when developing inside the `$GOPATH` directory (e.g. the
"old style" of working), which is still supported better by Golang tooling
and IDEs than the Go Modules approach.

6 weeks agoDynamic pools: added ability to fake pools, for testing & UI design
Sybren A. Stüvel [Thu, 2 May 2019 14:52:00 +0000 (16:52 +0200)]
Dynamic pools: added ability to fake pools, for testing & UI design

6 weeks agoDynamic worker pools
Sybren A. Stüvel [Wed, 1 May 2019 15:11:52 +0000 (17:11 +0200)]
Dynamic worker pools

Dynamic Pools allow you to spin up or remove virtual machines running
Flamenco Worker. Pools can be resized from the Flamenco Manager
dashboard.

The code architecture is mostly set up to support multiple platforms
(like Google Compute, Amazon Web Services, Azure Batch, etc.). Currently
only support for Microsoft Azure Batch has been implemented. To really
properly support multiple platforms some changes will have to be made,
but those are better made when there are actually multiple platforms to
support.

The pool status is polled periodically using the platform's API. The
polling period is dynamic, and depends on whether the Manager dashboard
is actually open in a browser window.

6 weeks agoWorker table: add 'is-selected' CSS class to row when it's selected
Sybren A. Stüvel [Thu, 2 May 2019 14:27:27 +0000 (16:27 +0200)]
Worker table: add 'is-selected' CSS class to row when it's selected

6 weeks agoOnly show 'Old Workers' if there actually are old workers.
Sybren A. Stüvel [Thu, 2 May 2019 11:53:51 +0000 (13:53 +0200)]
Only show 'Old Workers' if there actually are old workers.

7 weeks agoDashboard: style tweaks for blacklist.
Pablo Vazquez [Thu, 2 May 2019 18:57:55 +0000 (20:57 +0200)]
Dashboard: style tweaks for blacklist.

7 weeks agoDashboard: layout tweaks for blacklist.
Pablo Vazquez [Thu, 2 May 2019 18:57:44 +0000 (20:57 +0200)]
Dashboard: layout tweaks for blacklist.

7 weeks agoDashboard: Logic tweaks to show/hide worker-action buttons.
Pablo Vazquez [Thu, 2 May 2019 18:38:29 +0000 (20:38 +0200)]
Dashboard: Logic tweaks to show/hide worker-action buttons.

The goal is to only have one button at a time:
* Hide shutdown.
* asleep_immediate shows once asleep is requested.

7 weeks agoDashboard: less padding on task log call to action buttons.
Pablo Vazquez [Thu, 2 May 2019 18:35:13 +0000 (20:35 +0200)]
Dashboard: less padding on task log call to action buttons.

7 weeks agoDashboard: use different arrows.
Pablo Vazquez [Thu, 2 May 2019 18:33:57 +0000 (20:33 +0200)]
Dashboard: use different arrows.

And use [none] instead of -none-.

7 weeks agoDashboard: Add class to row if it's requesting a status.
Pablo Vazquez [Thu, 2 May 2019 18:32:47 +0000 (20:32 +0200)]
Dashboard: Add class to row if it's requesting a status.

Primarily used to style worker icons inside.

7 weeks agoDashboard: Remove empty space after task update text.
Pablo Vazquez [Thu, 2 May 2019 18:31:58 +0000 (20:31 +0200)]
Dashboard: Remove empty space after task update text.

7 weeks agoDashboard: underline link to task.
Pablo Vazquez [Thu, 2 May 2019 18:31:27 +0000 (20:31 +0200)]
Dashboard: underline link to task.

7 weeks agoDashboard: wider column for for old workers list.
Pablo Vazquez [Thu, 2 May 2019 18:31:07 +0000 (20:31 +0200)]
Dashboard: wider column for for old workers list.

7 weeks agoDashboard: Don't wrap text on certain fields.
Pablo Vazquez [Thu, 2 May 2019 18:30:35 +0000 (20:30 +0200)]
Dashboard: Don't wrap text on certain fields.

7 weeks agoDashboard: Icons for quick worker-action.
Pablo Vazquez [Thu, 2 May 2019 18:26:58 +0000 (20:26 +0200)]
Dashboard: Icons for quick worker-action.

7 weeks agoDashboard: Extra cell on table for details.
Pablo Vazquez [Thu, 2 May 2019 18:24:47 +0000 (20:24 +0200)]
Dashboard: Extra cell on table for details.

7 weeks agoDashboard: Display old workers in a list.
Pablo Vazquez [Thu, 2 May 2019 18:24:00 +0000 (20:24 +0200)]
Dashboard: Display old workers in a list.

7 weeks agoDashboard: Show Schedule and Software columns only on large screens.
Pablo Vazquez [Thu, 2 May 2019 18:23:05 +0000 (20:23 +0200)]
Dashboard: Show Schedule and Software columns only on large screens.

7 weeks agoDashboard: notify on copied to clipboard for worker ID and address.
Pablo Vazquez [Thu, 2 May 2019 18:21:33 +0000 (20:21 +0200)]
Dashboard: notify on copied to clipboard for worker ID and address.

7 weeks agoDashboard: Use chevron instead of text to expand details.
Pablo Vazquez [Thu, 2 May 2019 18:19:44 +0000 (20:19 +0200)]
Dashboard: Use chevron instead of text to expand details.

7 weeks agoCSS: Minor styling tweaks and utility CSS classes.
Pablo Vazquez [Thu, 2 May 2019 18:16:56 +0000 (20:16 +0200)]
CSS: Minor styling tweaks and utility CSS classes.

7 weeks agoDashboard: Move stats to the header.
Pablo Vazquez [Thu, 2 May 2019 16:54:41 +0000 (18:54 +0200)]
Dashboard: Move stats to the header.

7 weeks agoWorker table: add 'is-selected' CSS class to row when it's selected
Sybren A. Stüvel [Thu, 2 May 2019 14:27:27 +0000 (16:27 +0200)]
Worker table: add 'is-selected' CSS class to row when it's selected

7 weeks agoCSS: Tweak to utility classes.
Pablo Vazquez [Thu, 2 May 2019 14:35:37 +0000 (16:35 +0200)]
CSS: Tweak to utility classes.

And new cursor-pointer utility class.

7 weeks agoWording: Reset to Default Value -> Reset to Active Value
Pablo Vazquez [Thu, 2 May 2019 10:48:31 +0000 (12:48 +0200)]
Wording: Reset to Default Value -> Reset to Active Value

7 weeks agoUpdated comment on StatusReport document
Sybren A. Stüvel [Thu, 2 May 2019 09:10:17 +0000 (11:10 +0200)]
Updated comment on StatusReport document

7 weeks agoUpdated README.md to describe the new go.mod workflow
Sybren A. Stüvel [Fri, 26 Apr 2019 15:31:25 +0000 (17:31 +0200)]
Updated README.md to describe the new go.mod workflow

This doesn't depend on $GOPATH any more. See
https://github.com/golang/go/wiki/Modules for more info.

7 weeks agoRan 'go mod tidy' to tidy up the modules
Sybren A. Stüvel [Fri, 26 Apr 2019 15:29:34 +0000 (17:29 +0200)]
Ran 'go mod tidy' to tidy up the modules

7 weeks agogo.sum updated when running make on macOS
Francesco Siddi [Fri, 26 Apr 2019 14:48:22 +0000 (16:48 +0200)]
go.sum updated when running make on macOS

7 weeks agoMoved from dep to go.mod
Sybren A. Stüvel [Fri, 26 Apr 2019 14:28:45 +0000 (16:28 +0200)]
Moved from dep to go.mod

7 weeks agoAdded test keys
Sybren A. Stüvel [Wed, 1 May 2019 10:45:37 +0000 (12:45 +0200)]
Added test keys

The .gitignore file was a little too broad in ignoring *.pem files.

7 weeks agoDashboard: Style arrows differently for immediate or queued change.
Pablo Vazquez [Tue, 30 Apr 2019 17:02:47 +0000 (19:02 +0200)]
Dashboard: Style arrows differently for immediate or queued change.

7 weeks agoDashboard: Style the requested status.
Pablo Vazquez [Tue, 30 Apr 2019 16:58:25 +0000 (18:58 +0200)]
Dashboard: Style the requested status.

7 weeks agoCSS: Cleanup.
Pablo Vazquez [Tue, 30 Apr 2019 16:45:43 +0000 (18:45 +0200)]
CSS: Cleanup.

7 weeks agoDashboard: dark header for table.
Pablo Vazquez [Tue, 30 Apr 2019 16:45:36 +0000 (18:45 +0200)]
Dashboard: dark header for table.

7 weeks agoDashboard: tweak to arrow between changing states.
Pablo Vazquez [Tue, 30 Apr 2019 16:45:14 +0000 (18:45 +0200)]
Dashboard: tweak to arrow between changing states.

7 weeks agoDashboard: Contrast adjustment on table rows.
Pablo Vazquez [Tue, 30 Apr 2019 16:44:34 +0000 (18:44 +0200)]
Dashboard: Contrast adjustment on table rows.

7 weeks agoDashboard: Remove border from action bar.
Pablo Vazquez [Tue, 30 Apr 2019 16:44:20 +0000 (18:44 +0200)]
Dashboard: Remove border from action bar.

7 weeks agoMinor layout and style tweaks to template_action_bar.
Pablo Vazquez [Tue, 30 Apr 2019 16:33:25 +0000 (18:33 +0200)]
Minor layout and style tweaks to template_action_bar.

Use smaller buttons and bolder text.

7 weeks agoDashboard: Scheduled text and layout tweaks.
Pablo Vazquez [Tue, 30 Apr 2019 16:05:18 +0000 (18:05 +0200)]
Dashboard: Scheduled text and layout tweaks.

7 weeks agoCSS: general tweaks to variables.
Pablo Vazquez [Tue, 30 Apr 2019 16:04:52 +0000 (18:04 +0200)]
CSS: general tweaks to variables.

And utility for white-space-nowrap.

7 weeks agoDashboard: tweaks to worker details.
Pablo Vazquez [Tue, 30 Apr 2019 16:04:22 +0000 (18:04 +0200)]
Dashboard: tweaks to worker details.

7 weeks agoSetup template: Wording.
Pablo Vazquez [Tue, 30 Apr 2019 16:02:04 +0000 (18:02 +0200)]
Setup template: Wording.

7 weeks agoDashboard: Layout tweak to status component.
Pablo Vazquez [Tue, 30 Apr 2019 16:01:56 +0000 (18:01 +0200)]
Dashboard: Layout tweak to status component.

7 weeks agoDashboard: Style tweaks
Pablo Vazquez [Tue, 30 Apr 2019 16:00:50 +0000 (18:00 +0200)]
Dashboard: Style tweaks

7 weeks agoLayout tweaks to reset to default value.
Pablo Vazquez [Tue, 30 Apr 2019 16:00:40 +0000 (18:00 +0200)]
Layout tweaks to reset to default value.

Thanks @fsiddi for the suggestion.

7 weeks agoMinor tweaks to Setup Mode Enabled template.
Pablo Vazquez [Tue, 30 Apr 2019 15:59:22 +0000 (17:59 +0200)]
Minor tweaks to Setup Mode Enabled template.

7 weeks agoTweak to logo and font.
Pablo Vazquez [Tue, 30 Apr 2019 15:46:12 +0000 (17:46 +0200)]
Tweak to logo and font.

7 weeks agoCSS: minor tweaks.
Pablo Vazquez [Tue, 30 Apr 2019 13:40:41 +0000 (15:40 +0200)]
CSS: minor tweaks.

Bootstrap overrides and use system font.

7 weeks agoCSS: cleanup unused styling
Pablo Vazquez [Tue, 30 Apr 2019 13:40:13 +0000 (15:40 +0200)]
CSS: cleanup unused styling

7 weeks agoSetup Components: Layout adjustments
Pablo Vazquez [Tue, 30 Apr 2019 13:39:54 +0000 (15:39 +0200)]
Setup Components: Layout adjustments

7 weeks agoSetup Components: more spacing and color change for urlInfo buttons
Pablo Vazquez [Tue, 30 Apr 2019 13:37:59 +0000 (15:37 +0200)]
Setup Components: more spacing and color change for urlInfo buttons

7 weeks agoSetup Components: Layout and section title tweaks.
Pablo Vazquez [Tue, 30 Apr 2019 13:36:45 +0000 (15:36 +0200)]
Setup Components: Layout and section title tweaks.

Just styling, no functional changes.

7 weeks agoSetup Components: Layout tweaks for Database Choice
Pablo Vazquez [Tue, 30 Apr 2019 13:33:50 +0000 (15:33 +0200)]
Setup Components: Layout tweaks for Database Choice

7 weeks agoSetup Index: button to hide 'link to server' button.
Pablo Vazquez [Tue, 30 Apr 2019 13:32:28 +0000 (15:32 +0200)]
Setup Index: button to hide 'link to server' button.

7 weeks agoSetup Index: layout adjustments.
Pablo Vazquez [Tue, 30 Apr 2019 13:31:20 +0000 (15:31 +0200)]
Setup Index: layout adjustments.

No functional changes.

7 weeks agoDashboard: minor styling adjustments on font size and family.
Pablo Vazquez [Tue, 30 Apr 2019 13:30:04 +0000 (15:30 +0200)]
Dashboard: minor styling adjustments on font size and family.

7 weeks agoDashboard: wider table, narrower thumbnail.
Pablo Vazquez [Tue, 30 Apr 2019 13:29:39 +0000 (15:29 +0200)]
Dashboard: wider table, narrower thumbnail.

7 weeks agoLayout: 'Restart to Setup' template
Pablo Vazquez [Tue, 30 Apr 2019 13:28:26 +0000 (15:28 +0200)]
Layout: 'Restart to Setup' template

Just cosmetic, no functional changes.

7 weeks agoLayout: Restart template
Pablo Vazquez [Tue, 30 Apr 2019 13:25:41 +0000 (15:25 +0200)]
Layout: Restart template

Just cosmetic, no functional changes.

7 weeks agoLayout: 'Restarting' template
Pablo Vazquez [Tue, 30 Apr 2019 13:24:58 +0000 (15:24 +0200)]
Layout: 'Restarting' template

Just cosmetic, no functional changes.

7 weeks agoLayout: thin header, matches dashboard
Pablo Vazquez [Tue, 30 Apr 2019 13:24:17 +0000 (15:24 +0200)]
Layout: thin header, matches dashboard

7 weeks agoCleanup: Remove redundant btn-default class in button.
Pablo Vazquez [Fri, 26 Apr 2019 17:12:47 +0000 (19:12 +0200)]
Cleanup: Remove redundant btn-default class in button.