couchdb-hyper.git
4 months agoMerge pull request #4 from apache/fix-windows-build master CouchDB-2.2.0-4
Joan Touzet [Wed, 18 Jul 2018 16:13:30 +0000 (12:13 -0400)] 
Merge pull request #4 from apache/fix-windows-build

Fix hyper build for Windows

4 months agoFix hyper build for win32 4/head
Joan Touzet [Wed, 18 Jul 2018 15:19:11 +0000 (11:19 -0400)] 
Fix hyper build for win32

6 months agoMerge pull request #3 from apache/use-matching-tags-for-triq-deps CouchDB-2.2.0-3
Nick Vatamaniuc [Thu, 31 May 2018 04:13:09 +0000 (00:13 -0400)] 
Merge pull request #3 from apache/use-matching-tags-for-triq-deps

Use exactly matching tags for triq dependencies

6 months agoUse exactly matching tags for triq dependencies 3/head
Nick Vatamaniuc [Thu, 31 May 2018 04:05:23 +0000 (00:05 -0400)] 
Use exactly matching tags for triq dependencies

Otherwise rebar thinks there is a conflict:

```
ERROR: Conflicting dependencies for triq: [{"From: hyper",
                                            {[],
                                             {git,
                                              "https://github.com/apache/couchdb-triq",
                                              {tag,"v1.2.0"}}}},
                                           {"From: asf2",
                                            {".*",
                                             {git,
                                              "https://github.com/apache/couchdb-triq.git",
                                              {tag,"v1.2.0"}}}}]
```

6 months agoMerge pull request #2 from apache/fix-tests-to-run-with-triq CouchDB-2.2.0-2
Nick Vatamaniuc [Thu, 31 May 2018 03:18:20 +0000 (23:18 -0400)] 
Merge pull request #2 from apache/fix-tests-to-run-with-triq

Fix tests to run with Triq

6 months agoComment out broken Makefile target 2/head
Adam Kocoloski [Thu, 31 May 2018 00:32:21 +0000 (20:32 -0400)] 
Comment out broken Makefile target

6 months agoDisable failing test on R20
Adam Kocoloski [Thu, 31 May 2018 00:31:29 +0000 (20:31 -0400)] 
Disable failing test on R20

6 months agoFix tests to run with Triq
Nick Vatamaniuc [Wed, 30 May 2018 23:15:40 +0000 (19:15 -0400)] 
Fix tests to run with Triq

Used CouchDB's Triq port

Had to uncomment a bunch of bisect module checks. That made the diff kind of
ugly.

6 months agoMerge pull request #1 from apache/remove-bisect CouchDB-2.2.0-1
Adam Kocoloski [Wed, 30 May 2018 21:52:04 +0000 (17:52 -0400)] 
Merge pull request #1 from apache/remove-bisect

Remove bisect implementation

6 months agoRemove bisect implementation remove-bisect 1/head
Adam Kocoloski [Wed, 30 May 2018 21:42:38 +0000 (17:42 -0400)] 
Remove bisect implementation

We're not using this backend, and it requires R17 (we are still
supporting R16 as of this writing).

2 years agoMerge pull request #16 from elverkilde/fix/carray upstream CouchDB-2.2.0
renjith-ga [Tue, 11 Oct 2016 09:39:13 +0000 (10:39 +0100)] 
Merge pull request #16 from elverkilde/fix/carray

Fix/carray - Merging the pull request from @elverkilde  as the permission has been given by all three contributors @elverkilde @chrisavl and @johannesh to change license to MIT

2 years agoSwitch to MIT license for carray
Jon Elverkilde [Tue, 11 Oct 2016 09:09:23 +0000 (11:09 +0200)] 
Switch to MIT license for carray

2 years agoRemoved use of tgmath.h for pow function (assuming C99 compiler)
Fred Dushin [Tue, 27 Sep 2016 18:03:53 +0000 (14:03 -0400)] 
Removed use of tgmath.h for pow function (assuming C99 compiler)

2 years agoMerge pull request #14 from savonarola/fix-deprecated-time-functions
Jon Elverkilde [Wed, 27 Jul 2016 14:38:41 +0000 (16:38 +0200)] 
Merge pull request #14 from savonarola/fix-deprecated-time-functions

Updated usage of time functions

2 years agoUpdated usage of time functions (removed usage of deprecated erlang:now())
av [Wed, 27 Jul 2016 13:45:12 +0000 (16:45 +0300)] 
Updated usage of time functions (removed usage of deprecated erlang:now())

3 years agoMerge pull request #11 from knutin/master
Johannes Huning [Mon, 29 Jun 2015 10:41:23 +0000 (12:41 +0200)] 
Merge pull request #11 from knutin/master

Pull in hyper:is_hyper/1 from Knut

3 years agoadd note about `indent` to C source file
Johannes Huning [Mon, 29 Jun 2015 10:38:39 +0000 (12:38 +0200)] 
add note about `indent` to C source file

3 years agoadd contributors to C source file
Johannes Huning [Mon, 29 Jun 2015 10:37:25 +0000 (12:37 +0200)] 
add contributors to C source file

3 years agoMerge pull request #10 from GameAnalytics/fix_merge_leak
Chris de Vries [Mon, 29 Jun 2015 10:02:28 +0000 (12:02 +0200)] 
Merge pull request #10 from GameAnalytics/fix_merge_leak

Release resource created for merge result

3 years agoRemove unnecessary enif_make_resource.
cmdevries [Mon, 29 Jun 2015 08:55:14 +0000 (10:55 +0200)] 
Remove unnecessary enif_make_resource.

3 years agoRelease resource created for merge result
Jon Elverkilde [Sat, 27 Jun 2015 21:52:19 +0000 (23:52 +0200)] 
Release resource created for merge result

3 years agoAdded hyper:is_hyper/1.
Knut Nesheim [Thu, 28 May 2015 10:04:51 +0000 (12:04 +0200)] 
Added hyper:is_hyper/1.

3 years agoMerge pull request #9 from GameAnalytics/remove_alloc
Johannes Huning [Tue, 28 Apr 2015 07:56:41 +0000 (09:56 +0200)] 
Merge pull request #9 from GameAnalytics/remove_alloc

Remove unecessary alloc from hyper c array.

3 years agorun indent
Johannes Huning [Tue, 28 Apr 2015 07:55:03 +0000 (09:55 +0200)] 
run indent

3 years agoRemove unecessary alloc from hyper c array.
cmdevries [Tue, 28 Apr 2015 07:46:04 +0000 (09:46 +0200)] 
Remove unecessary alloc from hyper c array.

The last commit allocated an array for pointers to the hyper c array
structure. This is not necessary for improved performance. This change
still leaves the union time at 0.01 to 0.02 ms.

3 years agoMerge pull request #8 from GameAnalytics/faster_merge
Johannes Huning [Mon, 27 Apr 2015 12:33:22 +0000 (14:33 +0200)] 
Merge pull request #8 from GameAnalytics/faster_merge

Faster merging of hyper c arrays.

3 years agoFaster merging of hyper c arrays.
Chris de Vries [Mon, 27 Apr 2015 10:36:25 +0000 (12:36 +0200)] 
Faster merging of hyper c arrays.

I tried implementing 3 different approaches to merging the arrays. This was by
far the fastest at (0.01ms to 0.02ms for the union benchmark). It seems
when the ternary operator is inside the inner loop compiler does something that
is fast such as an operation with no branching.

The other approaches were,

* processing a 64-bit integer at a time and unpacking the bytes (0.16ms)
* branching rather than a ternary operator for the max value which is
  similar to the original code (0.10ms to 0.40ms)

Benchmark before,

module       P        card   fill      bytes  insert us   union ms    card ms    json ms
hyper_carray 15          1   0.00      32784       1.80       0.10       0.33       0.21
hyper_carray 15        100   0.00      32784       0.54       0.11       0.34       0.28
hyper_carray 15        500   0.02      32784       0.50       0.10       0.38       0.47
hyper_carray 15       1000   0.03      32784       0.51       0.11       0.38       0.74
hyper_carray 15       2500   0.07      32784       0.50       0.11       0.43       1.41
hyper_carray 15       5000   0.14      32784       0.51       0.12       0.51       2.38
hyper_carray 15      10000   0.26      32784       0.51       0.14       0.65       4.17
hyper_carray 15      15000   0.37      32784       0.51       0.16       0.82       5.32
hyper_carray 15      25000   0.53      32784       0.51       0.20       1.05       6.10
hyper_carray 15      50000   0.78      32784       0.51       0.26       1.31       5.77
hyper_carray 15     100000   0.95      32784       0.51       0.33       1.65       5.18
hyper_carray 15    1000000   1.00      32784       0.53       0.43       1.83       5.23

Benchmark after,

module       P        card   fill      bytes  insert us   union ms    card ms    json ms
hyper_carray 15          1   0.00      32784       2.30       0.02       0.32       0.22
hyper_carray 15        100   0.00      32784       0.53       0.02       0.33       0.22
hyper_carray 15        500   0.02      32784       0.51       0.02       0.35       0.43
hyper_carray 15       1000   0.03      32784       0.50       0.02       0.37       0.68
hyper_carray 15       2500   0.07      32784       0.51       0.02       0.42       1.34
hyper_carray 15       5000   0.14      32784       0.50       0.01       0.50       2.33
hyper_carray 15      10000   0.26      32784       0.52       0.01       0.65       4.10
hyper_carray 15      15000   0.37      32784       0.51       0.02       0.79       5.33
hyper_carray 15      25000   0.53      32784       0.51       0.02       1.01       6.11
hyper_carray 15      50000   0.78      32784       0.51       0.02       1.30       5.77
hyper_carray 15     100000   0.95      32784       0.51       0.02       1.63       5.23
hyper_carray 15    1000000   1.00      32784       0.53       0.02       1.82       5.32

3 years agoMerge pull request #7 from GameAnalytics/carray_tests
Johannes Huning [Wed, 22 Apr 2015 08:28:33 +0000 (10:28 +0200)] 
Merge pull request #7 from GameAnalytics/carray_tests

Test hyper_carray backend

3 years agoFix hyper_carray register encoding
Christian Lundgren [Mon, 20 Apr 2015 08:03:26 +0000 (10:03 +0200)] 
Fix hyper_carray register encoding

Don't include anything else than the registers in the returned binary

3 years agoSupport single hll input for hyper_carray:union/1
Christian Lundgren [Mon, 20 Apr 2015 08:01:11 +0000 (10:01 +0200)] 
Support single hll input for hyper_carray:union/1

This function still creates a new hll, could be optimized to simply return
it's input.

3 years agoInclude hyper_carray in performance report
Christian Lundgren [Mon, 20 Apr 2015 08:00:28 +0000 (10:00 +0200)] 
Include hyper_carray in performance report

3 years agoAdd hyper_carray to test suite
Christian Lundgren [Mon, 20 Apr 2015 07:52:35 +0000 (09:52 +0200)] 
Add hyper_carray to test suite

4 years agoFixed bug in merging of filters with the hyper_bisect backend.
Knut Nesheim [Thu, 20 Nov 2014 10:17:47 +0000 (11:17 +0100)] 
Fixed bug in merging of filters with the hyper_bisect backend.

4 years agoOptimization to hyper_binary backend for sequential changes to the same index.
Knut Nesheim [Thu, 20 Nov 2014 10:17:32 +0000 (11:17 +0100)] 
Optimization to hyper_binary backend for sequential changes to the same index.

4 years agoMerge pull request #6 from martinrehfeld/folding
Knut Nesheim [Thu, 16 Oct 2014 14:35:50 +0000 (16:35 +0200)] 
Merge pull request #6 from martinrehfeld/folding

Support mixed-precision union

4 years agoDemonstrate error rate of reduced-precision HLLs
Martin Rehfeld [Thu, 16 Oct 2014 14:28:59 +0000 (14:28 +0000)] 
Demonstrate error rate of reduced-precision HLLs

4 years agoSupport mixed-precision union
Martin Rehfeld [Thu, 16 Oct 2014 11:38:54 +0000 (11:38 +0000)] 
Support mixed-precision union

... for the hyper_binary default backend only, sorry ;-)

4 years agoMerge pull request #5 from martinrehfeld/master
Christian Lundgren [Wed, 15 Oct 2014 07:58:09 +0000 (09:58 +0200)] 
Merge pull request #5 from martinrehfeld/master

Add hyper:precision/1

4 years agoAdd hyper:precision/1
Martin Rehfeld [Tue, 14 Oct 2014 14:26:07 +0000 (16:26 +0200)] 
Add hyper:precision/1

Provide a getter for the precision of a HyperLogLog filter.

4 years agoMerge pull request #4 from GameAnalytics/clang_compile
Knut Nesheim [Tue, 12 Aug 2014 09:25:08 +0000 (11:25 +0200)] 
Merge pull request #4 from GameAnalytics/clang_compile

Make compile work with clang

4 years agoMake compile work with clang
Christian Lundgren [Mon, 11 Aug 2014 15:42:11 +0000 (17:42 +0200)] 
Make compile work with clang

4 years agoMerge pull request #3 from johannesh/hyper_carray
Knut Nesheim [Fri, 11 Jul 2014 15:25:24 +0000 (17:25 +0200)] 
Merge pull request #3 from johannesh/hyper_carray

hyper_carray, a hyper_register implemented by a C-array

4 years ago[hyper_carray] K&R and kernel style, added docs
Johannes Huning [Tue, 11 Mar 2014 22:19:46 +0000 (23:19 +0100)] 
[hyper_carray] K&R and kernel style, added docs

4 years agohyper_carray, a hyper_register implemented by a C-array
Johannes Huning [Mon, 10 Mar 2014 19:49:22 +0000 (20:49 +0100)] 
hyper_carray, a hyper_register implemented by a C-array

4 years agoMerge pull request #2 from johannesh/master
Knut Nesheim [Fri, 7 Mar 2014 08:58:35 +0000 (09:58 +0100)] 
Merge pull request #2 from johannesh/master

Typo in documentation of register_sum callback

4 years agoTypo for @doc of register_sum callback
Johannes [Thu, 6 Mar 2014 21:30:38 +0000 (22:30 +0100)] 
Typo for @doc of register_sum callback

4 years agoAdded output from make perf_report.
Knut Nesheim [Wed, 26 Feb 2014 16:54:13 +0000 (17:54 +0100)] 
Added output from make perf_report.

4 years agoAdded the MIT license.
Knut Nesheim [Fri, 24 Jan 2014 16:22:49 +0000 (17:22 +0100)] 
Added the MIT license.

4 years agoCleanup of README.
Knut Nesheim [Mon, 20 Jan 2014 15:01:46 +0000 (16:01 +0100)] 
Cleanup of README.

4 years agoCleanup of estimate graphs.
Knut Nesheim [Mon, 20 Jan 2014 14:50:36 +0000 (15:50 +0100)] 
Cleanup of estimate graphs.

4 years agoMeasure time of 5 unions.
Knut Nesheim [Mon, 20 Jan 2014 14:50:22 +0000 (15:50 +0100)] 
Measure time of 5 unions.

4 years agoRun parts of estimate report in parallel.
Knut Nesheim [Mon, 20 Jan 2014 14:49:48 +0000 (15:49 +0100)] 
Run parts of estimate report in parallel.

4 years agoDon't force compaction before union to allow for more optimizations. Property of...
Knut Nesheim [Mon, 20 Jan 2014 14:49:18 +0000 (15:49 +0100)] 
Don't force compaction before union to allow for more optimizations. Property of unions.

4 years agoClean up of README.
Knut Nesheim [Mon, 20 Jan 2014 08:46:22 +0000 (09:46 +0100)] 
Clean up of README.

4 years agoRoll v1.0
Knut Nesheim [Fri, 17 Jan 2014 17:02:47 +0000 (18:02 +0100)] 
Roll v1.0

4 years agoCleaned up the estimate report.
Knut Nesheim [Fri, 17 Jan 2014 16:59:01 +0000 (17:59 +0100)] 
Cleaned up the estimate report.

4 years agoApply the same optimization to other merges.
Knut Nesheim [Fri, 17 Jan 2014 11:37:08 +0000 (12:37 +0100)] 
Apply the same optimization to other merges.

4 years agoPostpone actual merge if merging two buffers results in a small enough new buffer.
Knut Nesheim [Fri, 17 Jan 2014 11:13:49 +0000 (12:13 +0100)] 
Postpone actual merge if merging two buffers results in a small enough new buffer.

4 years agoDisable native compilation of hyper_binary as it crashes when reloading.
Knut Nesheim [Fri, 17 Jan 2014 11:13:16 +0000 (12:13 +0100)] 
Disable native compilation of hyper_binary as it crashes when reloading.

4 years agoAlso merge buffers when merging dense binaries.
Knut Nesheim [Fri, 17 Jan 2014 08:44:51 +0000 (09:44 +0100)] 
Also merge buffers when merging dense binaries.

4 years agoIn hyper_binary, merge the buffers to allow for more efficient merges of small into...
Knut Nesheim [Thu, 16 Jan 2014 19:46:59 +0000 (20:46 +0100)] 
In hyper_binary, merge the buffers to allow for more efficient merges of small into big filters.

4 years agoRun estimate report from Makefile.
Knut Nesheim [Thu, 16 Jan 2014 17:44:01 +0000 (18:44 +0100)] 
Run estimate report from Makefile.

4 years agoAdded more documentation to README.
Knut Nesheim [Thu, 16 Jan 2014 17:38:57 +0000 (18:38 +0100)] 
Added more documentation to README.

4 years agoBetter tests.
Knut Nesheim [Thu, 16 Jan 2014 17:38:41 +0000 (18:38 +0100)] 
Better tests.

4 years agoAvoid useless conversion from list to tuple.
Knut Nesheim [Thu, 16 Jan 2014 17:38:19 +0000 (18:38 +0100)] 
Avoid useless conversion from list to tuple.

4 years agoUpdated behaviour and cleaned up backends.
Knut Nesheim [Thu, 16 Jan 2014 17:37:17 +0000 (18:37 +0100)] 
Updated behaviour and cleaned up backends.

4 years agoMore optimizations to hyper_binary. Use an explicit buffer to allow for fast inserts...
Knut Nesheim [Thu, 16 Jan 2014 17:36:33 +0000 (18:36 +0100)] 
More optimizations to hyper_binary. Use an explicit buffer to allow for fast inserts and fast unions for low fill rates.

4 years agoBetter quickcheck properties. Added first version of hyper_binary_rle backend.
Knut Nesheim [Tue, 14 Jan 2014 17:59:48 +0000 (18:59 +0100)] 
Better quickcheck properties. Added first version of hyper_binary_rle backend.

4 years agoOptimizations for buffering writes in hyper_binary.
Knut Nesheim [Mon, 13 Jan 2014 14:53:20 +0000 (15:53 +0100)] 
Optimizations for buffering writes in hyper_binary.

4 years agoUse (now bug-free) bisect:bulk_insert/2 for merging two bisects.
Knut Nesheim [Mon, 13 Jan 2014 11:06:49 +0000 (12:06 +0100)] 
Use (now bug-free) bisect:bulk_insert/2 for merging two bisects.

4 years agoIn case on extra 0 byte in old serialized filters, ignore it in hyper_bisect and...
Knut Nesheim [Sat, 11 Jan 2014 04:28:57 +0000 (05:28 +0100)] 
In case on extra 0 byte in old serialized filters, ignore it in hyper_bisect and hyper_binary.

4 years agoCompact the binary structure when it makes sense.
Knut Nesheim [Fri, 10 Jan 2014 17:51:26 +0000 (18:51 +0100)] 
Compact the binary structure when it makes sense.

4 years agoSerialization tests.
Knut Nesheim [Fri, 10 Jan 2014 16:41:26 +0000 (17:41 +0100)] 
Serialization tests.

4 years agoMoved tests into separate folder. Added PropEr test of encoding. Moved more logic...
Knut Nesheim [Fri, 10 Jan 2014 14:53:25 +0000 (15:53 +0100)] 
Moved tests into separate folder. Added PropEr test of encoding. Moved more logic into backends to allow for more optimizations.

4 years agoMoved more heavy lifting into the backend module to allow for more optimizations...
Knut Nesheim [Fri, 10 Jan 2014 10:38:35 +0000 (11:38 +0100)] 
Moved more heavy lifting into the backend module to allow for more optimizations. Introduced hyper_binary, using a fixed size binary as an array.

4 years agoFixed incorrect merge.
Knut Nesheim [Thu, 9 Jan 2014 08:48:13 +0000 (09:48 +0100)] 
Fixed incorrect merge.

4 years agoFaster unions for bisect, repeated runs of timed tests.
Knut Nesheim [Thu, 9 Jan 2014 08:36:26 +0000 (09:36 +0100)] 
Faster unions for bisect, repeated runs of timed tests.

4 years agoMore tests of backends.
Knut Nesheim [Wed, 8 Jan 2014 12:42:00 +0000 (13:42 +0100)] 
More tests of backends.

4 years agoExport from_json/2
Knut Nesheim [Wed, 8 Jan 2014 11:26:37 +0000 (12:26 +0100)] 
Export from_json/2

4 years agoSize in bytes.
Knut Nesheim [Wed, 8 Jan 2014 11:11:49 +0000 (12:11 +0100)] 
Size in bytes.

4 years agoSmarter union for dense and sparse bisect.
Knut Nesheim [Wed, 8 Jan 2014 10:23:44 +0000 (11:23 +0100)] 
Smarter union for dense and sparse bisect.

4 years agoMeasure card/1
Knut Nesheim [Tue, 7 Jan 2014 18:33:35 +0000 (19:33 +0100)] 
Measure card/1

4 years agoStart of README.
Knut Nesheim [Tue, 7 Jan 2014 18:14:46 +0000 (19:14 +0100)] 
Start of README.

4 years agoUnion test with bigger cardinality.
Knut Nesheim [Tue, 7 Jan 2014 18:14:41 +0000 (19:14 +0100)] 
Union test with bigger cardinality.

4 years agoMore cardinalities, use the same seed.
Knut Nesheim [Tue, 7 Jan 2014 17:59:36 +0000 (18:59 +0100)] 
More cardinalities, use the same seed.

4 years agoSwitch to plain dense representation when it would use less memory.
Knut Nesheim [Tue, 7 Jan 2014 17:45:22 +0000 (18:45 +0100)] 
Switch to plain dense representation when it would use less memory.

4 years agoLet backend decide on merge strategy.
Knut Nesheim [Tue, 7 Jan 2014 16:10:59 +0000 (17:10 +0100)] 
Let backend decide on merge strategy.

4 years agoperf report.
Knut Nesheim [Tue, 7 Jan 2014 14:25:27 +0000 (15:25 +0100)] 
perf report.

4 years agobisect backend.
Knut Nesheim [Tue, 7 Jan 2014 14:25:12 +0000 (15:25 +0100)] 
bisect backend.

4 years agomake size_report
Knut Nesheim [Tue, 7 Jan 2014 13:42:06 +0000 (14:42 +0100)] 
make size_report

4 years agoArray backend.
Knut Nesheim [Tue, 7 Jan 2014 13:41:52 +0000 (14:41 +0100)] 
Array backend.

4 years agoPluggable register data structure.
Knut Nesheim [Tue, 7 Jan 2014 13:03:32 +0000 (14:03 +0100)] 
Pluggable register data structure.

4 years agoMinor cleanup of tests.
Knut Nesheim [Tue, 7 Jan 2014 12:31:20 +0000 (13:31 +0100)] 
Minor cleanup of tests.

5 years agoUse tail recursive helper functions instead of lists:map + lists:seq
Christian Lundgren [Mon, 9 Dec 2013 22:14:39 +0000 (23:14 +0100)] 
Use tail recursive helper functions instead of lists:map + lists:seq

5 years agoRegisters using gb_trees.
Knut Nesheim [Mon, 18 Nov 2013 10:53:22 +0000 (11:53 +0100)] 
Registers using gb_trees.

5 years agoPerformance improvement to union: don't write back the same value.
Knut Nesheim [Fri, 15 Nov 2013 16:37:16 +0000 (17:37 +0100)] 
Performance improvement to union: don't write back the same value.

5 years agoWhen deserializing, zeroes should become the default value in the array to make sure...
Knut Nesheim [Wed, 2 Oct 2013 09:33:40 +0000 (11:33 +0200)] 
When deserializing, zeroes should become the default value in the array to make sure it's sparse.

5 years agoUse sparse folding for unions of two filters
Christian Lundgren [Wed, 25 Sep 2013 10:09:35 +0000 (12:09 +0200)] 
Use sparse folding for unions of two filters

5 years agoAdd function for the cardinality of the intersection of two filters
Christian Lundgren [Wed, 21 Aug 2013 16:45:42 +0000 (18:45 +0200)] 
Add function for the cardinality of the intersection of two filters

5 years agoImplemented the bias correction from the google paper.
Knut Nesheim [Mon, 8 Jul 2013 08:34:42 +0000 (10:34 +0200)] 
Implemented the bias correction from the google paper.