Controlling Initial and Final Radii to Achieve a Low-Complexity Sphere Decoding Technique in MIMO Channels

. In order to apply sphere decoding algorithm in multiple-input multiple-output communication systems and to make it feasible for real-time applications, its computational complexity should be decreased. To achieve this goal, this paper provides some useful insights into the e ﬀ ect of initial and the ﬁnal sphere radii and estimating them e ﬀ ortlessly. It also discusses practical ways of initiating the algorithm properly and terminating it before the normal end of the process as well as the cost of these methods. Besides, a novel algorithm is introduced which utilizes the presented techniques according to a threshold factor which is deﬁned in terms of the number of transmit antennas and the noise variance. Simulation results show that the proposed algorithm o ﬀ ers a desirable performance and reasonable complexity satisfying practical constraints.


Introduction
The Nondeterministic Polynomial-time hard (NP-hard) complexity of Maximum Likelihood (ML) decoding, the optimal decoder, generally prohibits its use in practical Multiple-Input Multiple-Output (MIMO) systems [1], especially when a large signal constellation and/or many transmit antennas are involved.Some suboptimum detection algorithms, such as Kannan's algorithm which searches only over restricted parallelograms [2], the KZ algorithm [3] based on the Korkin-Zolotarev-reduced basis, and the Sphere Decoding (SD) algorithm of Fincke and Pohst [4,5], can perform detection with much lower complexity, but at a performance degradation.
SD was first introduced in [6] to perform ML detection, and it achieves reduced complexity by searching for the closest lattice point over the points that lie in a certain sphere around a given vector.Although it significantly reduces the computational complexity of ML, it requires huge amount of computations in MIMO systems.There are several approaches to reduce the complexity of SD algorithm such as the Schnorr-Euchner (SE) enumeration [7], descending probabilistic ordering [8], increasing radius sphere decoder [9], parallel competing branch algorithm [10], and reduced dimension maximum likelihood search [11].Other approaches trading performance for complexity include the radius scheduling method [12], probabilistic tree pruning algorithm [13], sequential Fano decoders [14], and semidefinite relaxation [15].The work of [16] proposes the utilization of the SE refinement of the Pohst enumeration in the closest lattice point search.Based on the numerical results, [16] concludes that the SE enumeration is more efficient than the Viterbo-Boutros implementation in [6].According to the proposed method in [16], an algorithm is presented in [17] and it has been shown that it is robust to the initial choice of the sphere radius.This concept has been further discussed in different pieces of research that try to improve its performance and computational complexity which make it possible for practical real time systems.
Various papers have analyzed the complexity of SD such as [18] which shows that the expected complexity of SD the expected number of operations required by the algorithm, International Journal of Antennas and Propagation C(P, ρ), depends on the both number of transmit antennas, P, and the Signal-to-Noise Ratio (SNR), ρ.It is also shown in [18] that when the SNR is high, the expected number of operations required by the SD, can be approximated by a polynomial function for small P.An exact but complicated expression for the expected number of operations required by the sphere decoder has been obtained in [18].In [19] by obtaining a lower bound, it is shown that the expected complexity of SD applied to a large class of problems is exponential in P. In this work the complexity of SE-SD algorithm is discussed from a new point of view.
Stopping criteria can be used to reduce the complexity of SD, since it results in terminating the decoding process earlier and thus prevents a huge amount of extra calculations.Some researchers have worked on these criteria for some special scenarios.This paper also discusses the convergence radius and proposes a new stopping criterion.
SD searches a lattice through a given set of points that is bounded by the search sphere with the received point as center.Therefore, the method requires determining an initial search radius, C 0 .The concept of choosing a suitable C 0 plays a crucial role in finding the nearest lattice point in a sphere.The initial radius should not only be small enough to contain at least one lattice point but also big enough to have a practical enumeration complexity of finding closest point among containing lattice points.Even though it is claimed that SE-SD is less sensitive to initial radius than the original SD, [17] shows that the complexity of SE-SD is still controlled by C 0 .To the best of our knowledge, there are no general guidelines for choosing appropriate C 0 .This paper focuses on the suitable C 0 and discusses the way of finding it easily, which is applicable to the complexity-limited wireless communication systems.This paper also demonstrates that the initial radius can affect not only the computational complexity but also BER of SE-SD algorithm significantly.
In this paper, Z, R, and C are the sets of integer, real, and complex numbers, respectively.CN (•) denotes circularly symmetric complex Normal distribution.
In the assumed MIMO system, X( x 1 , x 2 , . . ., x P ) ∈ C P is the complex transmitted vector of dimension P, whose elements are members of a squared M-dimension Quadrature Amplitude Modulation (M-QAM) constellation.It is assumed that the channel coefficients matrix, H ∈ C P×Q , which is comprised of i.i.d CN (0, 1) entries, can be estimated accurately at the receiver.The noise vector comprised of i.i.d CN (0, 2σ 2 ) entries is presented by , and E S is the average signal energy of the constellation.A symbol, defined as S : x 1 . . .x P , is transmitted over P antennas, and Y ∈ C Q , which is given by Y = H X + N, is received.
To obtain a lattice representation of this multiple antenna system, the complex matrix equation is transformed into the real matrix equation as where Y and N, similar to X are obtained through T and H is transformed to where for easier notation, p = 2P and q = 2Q.The reminder of this paper is organized as follows.Section 2 describes sphere decoding and SE-SD algorithm, briefly.The initial radius and complexity of the algorithm is discussed through simulation results over a wide range of SNRs and channel sizes in Section 3. Section 4 goes into the ideas of stopping criteria for the algorithm.In Section 5 a new low-complexity algorithm is introduced.Finally, Section 6 draws the conclusion.

Sphere Decoding
A finite lattice can be defined as Λ = {HX : X ∈ Z p } where H is the generator matrix of the lattice and X contains the coordinates of lattice points.The ML estimates X ML that minimizes the Euclidean distance between Y and X ML , as follows: where • 2 represents the vector norm and As mentioned earlier, SD searches the lattice through a given set of points bounded by a sphere with the received point as center and a specific initial radius.Whenever a point is found inside the sphere, the radius is reduced to the value of the distance between the new and the received point.Under assumption of p = q, the channel matrix can be transformed into H = QR by performing QR-decomposition.R is an upper triangular matrix, and Q is an orthogonal matrix.Therefore, the ML problem will be simplified to find the lattice point that satisfies the following condition: where Ý = Q * Y and (•) * represents Hermitian matrix transposition.The inequality can be rewritten and then expanded as where r i, j denotes the (i, j) entry of R. The previous inequality results in p different inequalities.By taking advantage of the upper triangular property of R the first term of right-hand side of (5) depends only on x p and thus it belongs to the following interval: International Journal of Antennas and Propagation 3 where • and • denote rounding to the nearest larger and smaller element in the set of numbers that spans the lattice, respectively.The intervals for x p−1 , x p−2 , . . ., x 1 are found in a similar fashion, in which x i is a function of only j, j = i, . . ., p. Generally speaking, all possible candidates for x i should be searched within a sphere with radius C 0 and dimension p − i + 1.The first candidate for x i , namely, x i , is: By SE enumeration, the candidates are spanned in a zigzag order, starting from the midpoint.Hence, at each level i, the SE enumeration will produce this sequence of candidates for A full search can be depicted as a search tree, like Figure 1, which its root is the Pth entries of the possible symbol and each node in the ith level shows one of the possible values for the ith entry of the symbol.The search starts from the root down to the 1st level (leaf node), where at the ith level, all possible (i−1) entries are found so that the symbol lies in the sphere.When the search reaches the leaf node, all the entries of the symbol are discovered.Therefore, each path through the tree corresponds to a possible symbol.As a result, SD can be viewed as a pruning algorithm on this tree from which, based on violation of the constraint given by (4), a branch can be removed at any level.
The work of [17] proposed an algorithm with 6 recursive steps to implement SE-SD algorithm.After initialization, leading to start from the highest level of the tree and set C 0 , the algorithm begins with step 2, by offering the first candidate for the root of the tree.The testing node at each level is offered by steps 2 and 6 through SE enumeration.By using the lattice boundary (maximum and minimum of Z p Ω ) in steps 2 and 6, the algorithm works with only the finite square M-QAM constellation.Step 3 examines the constraint given by ( 5) which may lead to two cases.
(1) If the candidate is valid and a leaf node is reached (i = 1), the symbol is recorded as the ML solution, the radius is updated in step 5, and the algorithm restarts from (i = 2).But if the valid candidate is found in other levels, the search proceeds in a lower level.
(2) If the candidate is not valid, the algorithm will go to step 4. If the algorithm is in the top level, it means that there is no valid symbol in the sphere.Thus, the algorithm terminates.Otherwise, the algorithm will go up to i + 1 and the next candidate of that level will be tested.
This paper uses the SE-SD algorithm introduced in [20] which is the modified version of the proposed algorithm in [17] which does not consider any point outside the finite lattice through lattice boundary awareness.This algorithm is preferred because of the lower complexity without any performance degradation.

Initial Radius of SE-SD Algorithm
Several approaches have been proposed to find an appropriate initial radius.Because of the advantages of the Schnorr-Euchner enumeration, the conventional methods choose the positive infinity as the initial radius.Obviously, this approach avoids declaring an empty sphere.It is also clear that the first point found with C 0 = ∞ corresponds to the Babai point [16].Thus, a more suitable choice for C 0 is to use the distance between the Babai point and Y, since this radius guarantees the existence of at least one lattice point inside the sphere.Generally, it is not clear whether this choice of initial radius leads to too many lattice points lying inside the sphere [18].In [21] through some examples it is shown that this sphere contains at least one point, if the radius is computed exactly.However, in practice, due to rounding errors introduced by floating-point computation, this radius cannot be calculated exactly.It offers an upper bound for the computational error of C 0 and defines C 0 + 2qμ( √ q H 2 X 2 ) as the initial radius, where μ is the unit of round-off.The work of [22] mentions that this method is useful when the noise variance is relatively small.The work of [23] proposes a method that utilizes the result of QR decomposition and reordering of H to obtain Babai point and defines the initial radius as the distance between the received signal and the lattice point mapped by the suboptimal solution.
Another case for C 0 is the covering radius of the lattice, defined to be the smallest radius of spheres centered at the lattice points that covers the entire space [24].This is clearly the smallest radius that guarantees the existence of a point inside the sphere for any Y.The problem with this choice of C 0 is that determining the covering radius for a given lattice is itself NP-hard [25].
Some works consider a small fixed number as C 0 for all cases, which is increased if no lattice point is found in the sphere.The work of [26] sets the initial radius to the distance between the lattice point mapped by Minimum Mean Square Error (MMSE) solution and the received signal.In general, International Journal of Antennas and Propagation the approaches that use the suboptimal solutions to find C 0 contribute to higher complexity.
A useful approach is to choose C 0 according to the noise distribution, so (3) can be helpful to determine the desired C 0 .Y − HX 2 = N 2 is a Chi-square random variable with q degrees of freedom.Therefore, a radius may be chosen to be a scaled variance of the noise [18]: In such a way, a lattice point can be found inside the sphere with a high probability: where the integrand is the probability density function of the Chi-square random variable with q degrees of freedom, and is set to a value close to 1.If the point is not found, the probability will be increased and a new C 0 is calculated; consequently, the searching will be restarted considering the new radius.
It is important to note that the radius is chosen based on the statistics of the noise and not H.Making the choice based on H quickly leads us to NP hard problems (such as determining the covering radius).Moreover, as noted in [1], selection of the radius based on the noise has a beneficial effect on the computational complexity.The work of [27] proposes an empirical definition for K in special situations (64 and 16-QAM) in a small SNR range.
To investigate the behavior of the algorithm, we find the average number of flops, a measure for the complexity, and Bit Error Rate (BER) of the SE-SD algorithm for various ρ, M and p through computer simulations.Our experimental setup corresponds to the transmission of M-QAM constellations over a multiple antenna flat Rayleigh fading channel, which is reasonable for many communication problems.The channel matrix H, changes randomly after transmitting 100 symbols.In order to plot BER or complexity versus initial radius for certain ρ, M, and p, a set of 100 initial radii are examined, and 10 8 random symbols per any particular C 0 , are tested.Note that only the flops of the search process are counted without considering the cost of QR decomposition.In practice, at least one lattice point should be found by the algorithm, and if C 0 does not contain any point the initial radius is multiplied by 1.5 and the algorithm is restarted.
The work of [17] investigates the effect of C 0 on the average complexity of SE-SD algorithm for a 16-QAM constellation at a range of ρ = 15 to 25 dB and it is shown that for ρ > 20 dB, the complexity is less insensitive to the initial radius than the original SD.However, the relationship between the computational complexity and the initial radius does not discussed in [17].
Although (9) implies that the probability of finding lattice point inside the sphere changes as initial radius changes, there are no known paper on the effect of C 0 on the performance of SE-SD for finite lattices.Figure 2 illustrates the significant effect of initial radius on the performance of the algorithm.It shows BER as a function of initial radius for P = 4 and M = 64 when ρ = 18.4,21.46, and 24 dB (σ2 = 0.203, 0.1, and 0.056).A particular C 0 that leads to the lowest BER calling "the best performance initial radius", C 0BP , can be seen in each subfigure of Figure 2.For instance, when ρ = 18.4 dB, BER of C 0 = C 0BP is 21% less than that of C 0 = 70.The average Babai Radius is depicted by a line in Figure 2, and this figure shows that C 0BP is close to C ba but not exactly equal to it.
A huge number of figures that show the complexity versus C 0 have been obtained from simulations when P = 4, M = 64 and ρ is choosing from 7.5 dB to 30 dB with the step of 0.5 dB, which is the typical SNR range for wireless communication applications.In this paper only 6 examples of these simulation results are depicted in Figures 3 and 4 due to the limited space.These figures depict the complexity of SE-SD algorithm as a function of initial radius for ρ = 7.5, 11.4, 13.3, 18.4, 24, and 30 dB.All of the simulated curves follow a similar pattern and can be fitted to a rational function of two fourth-order polynomials [28].
For any C 0 less than C 0LC , as the initial radius decreases, the complexity soars.Because the smaller spheres force the algorithm to restart several times, this contributes to huge computational complexity.The curves show that the complexity gets its lowest value when C 0 is near C ba .This C 0 can be defined as the "lowest complexity initial radius", C 0LC .There is three cases related to ρ and C 0 .
(1) The curves related to low ρ (Figures 3(a) and 3(b)) are smoother, and for any C 0 bigger than C ba the complexity seems almost constant, so, in this case a big initial radius should be chosen to have low complexity however, it should be small enough (second-order value) not to degrade the performance noticeably (noting Figure 2).For example C 0 = 60 is suitable for the case of P = 4, M = 64, and ρ = 10 to 5 dB.(2) Moderate ρ results can be seen in Figures 4(a) and 3(c).In this curve the lowest complexity is obtained when C 0 is around C ba and it grows considerably when C 0 increases.For instance, the complexity grows about 40% as C 0 = 70 is chosen for ρ = 11.4 dB.Therefore, in this case the most suitable C 0 should be chosen slightly less than C ba .(3) High ρ makes the complexity of the algorithm less sensitive to any C 0 (greater than C ba ), as Figures 4(b) and 4(c) illustrate.Although the raise in the complexity can be neglected for high C 0 , the performance degradation is significant.It comes to the conclusion that an initial radius greater than C ba and less than 1 can be acceptable in this situation to comprise between the performance and the complexity.
From Figures 3 and 4 it is obvious that decreasing of ρ leads to decline in C 0LC and also smoothing the curves which supports the theory in [18] that recommends choosing C 0 according to the noise variance.
Simulation results that depict the average complexity and BER of SE-SD algorithm as a function of C 0 when P = 4, σ 2 = 0.203, and M = 4, 16, 64, and 128 show that not only C 0LC but also C 0BP does not change as the constellation's size grows.It comes to the conclusion that the size of constellation does not affect the performance and the complexity of SE-SD.While an approach is to choose C ba as the initial radius [16,17], Figures 2, 3, and 4 show that neither C 0LC nor C 0BP is exactly equal to C ba .Using C ba as the initial radius in some practical scenarios causes a noticeable increase in BER and the complexity due to the rounding problem.In addition, calculating C ba costs extra complexity which cannot be negligible in some scenarios.
Figure 5 shows C ba and the proper C 0 (which is obtained from a comprise between performance and complexity) of SE-SD algorithm as a function of number of transmit antennas when M = 64 and σ 2 = 0.65, 0.203, and 0.05.As it can be seen from Figures 5(b) and 5(c), for a low σ 2 scenario in spite of C ba , the number of transmit antennas does not affect the suitable C 0 and it remains almost constant for any number of antennas.Thus, in this case, finding suitable C 0 for small problem size (low P) concludes to solving the initial radius problem for the big one (high P).Since the complexity of calculating C ba for scenarios with small number of antennas is considerably less than the big one, the cost of finding suitable initial radius reduces significantly.However, as it can be seen from Figure 5(a), high σ 2 scenario needs calculating of Babai radius to use as initial radius.Because of the rounding problem for any scenarios with σ 2 > 0.5, the suitable C 0 is approximately 8% smaller than C ba .

Stopping Criteria for SE-SD Algorithm
Stopping criterion is a potential mean for saving computational complexity in iterative algorithms like SE-SD.The work of [29] suggests that if an enumerated lattice point is found to be at a distance less than half the length of shortest lattice vector (packing radius) from Y, it is clearly a nearest lattice point and thus the enumeration process can be terminated right away.The work of [29] utilizes a lower bound on the packing radius as a stopping test.The work of [30] introduces a parameter, V th , based on the target symbol error rate and σ 2 , and the proposed probabilistic search stops when x is within it.
The idea of [31] is to first run a lattice reduction-aided SIC detector.If this results in a valid vector, with all elements within the symbol alphabet, the algorithm stops.Otherwise, it proceeds by running the sphere decoder.
It was mentioned that when the algorithm finds a symbol in the sphere, calculates a new radius for the sphere and when the algorithm reaches its convergence radius, it still tries to find a symbol inside the new sphere, but it does not succeed, because there is no one.Of course, the attempts to find a new symbol after reaching the convergence radius cause significant extra calculations.Thus, if SE-SD algorithm terminates as soon as it reaches the convergence radius, the huge amount of unnecessary computations can be prevented.Consequently, the complexity of the algorithm will be reduced considerably.
Finding the convergence radius is itself really complicated.Through the computer simulations of SE-SD for each scenario we recorded the average Final Radius, C f , the radius of the last sphere in which the algorithm cannot find any lattice point after a huge amount of calculations.Figure 5 shows C f , C ba , and the proper C 0 of SE-SD algorithm as a function of the number of transmit antennas when M = 64 and σ 2 = 0.65, 0.203, and 0.05.It seems that the final radius, similar to Babai radius, increases as the number of antennas grows.This growth in low σ 2 scenarios is negligible (Figures 5(b) and 5(c)) but for high σ 2 it cannot be ignored (Figure 5(a)).The distance between the final radius and Babai radius for high σ 2 seems to be a function of the number of antennas and the noise variance.When suitable C 0 is chosen 8% less than C ba for high σ 2 is the final radius empirically found to be approximately equal to So, in this case calculating C ba results in not only a proper initial radius but also the final one.
When a new sphere radius is calculated in step 5 of the algorithm, it should be compared to the estimated C f , and when it is found to be less than C f , the SE-SD algorithm terminates to avoid extra useless calculations after reaching the convergence radius.This technique can be defined as Early terminated SE-SD.
Although the problem of finding suitable C f can be solved easily using C ba and ( 10), yet there is a question about the cost of calculating C ba .To find out the complexity growth, we take into account the complexity of three types of performing SE-SD: SE-SD with C 0 = C ba , SE-SD which C 0 is chosen through previous section's recommendation, namely, proposed initiated SE-SD (PSE-SD), early terminated PSE-SD (EPSE-SD).
Table 1 indicates the percentage reduction in the complexity of these three types of SE-SD in comparison with the case of C 0 equal to a certain rough value like 20, when M = 64, P = 20, 12, 10, 6, 4, and σ 2 = 0.203.The negative number in the table means the increasing in the complexity.
According to Table 1 if P is greater than 10, the complexity declines by at least 9% via C 0 = C ba compared to the case that C 0 = 20.The reduction soars to at least 16% using PSE-SD.In addition, utilization of EPSE-SD results in a substantial decrease (more than 27%) in the complexity.Therefore, the slight additional complexity entailed by calculating C ba leads to significant reduction in the total complexity of SE-SD.
However, if P < 10, the number of flops of calculating C ba is comparable to the overall SE-SD complexity and the complexity reduction of EPSE-SD seems to be negligible.For example, Figure 4(a) indicates that for the case of σ 2 = 0.203 and P = 4 < 10 the average number of flops for decoding a burst of 100 symbols is around 48000, and so, 14600 flops of calculating C ba is comparable to the SE-SD complexity.
Table 2 demonstrates a comparison between the three techniques, SE-SD with C 0 = C ba , PSE-SD and EPSE-SD, when M = 64, P = 4, and σ 2 = 2.49, 1.14, 1.02, 0.203, and 0.056.In this table the percentage reduction of the complexity of the three types of SE-SD reflects the apparent discrepancy between σ 2 ≤ 1.02, and σ 2 > 1.02.On one hand, EPSE-SD causes a significant fall in complexity when σ 2 ≤ 1.02; on the other hand, calculating C ba increases the number of flops of PSE-SD dramatically when σ 2 > 1.02.
In fact the noticeable beneficial effect of allocating C f as a criterion for early termination of SE-SD is evident in the case of high noise variance or big problem size.For instance the complexity declines by 52% in the case of M = 64, P = 4, and σ 2 = 2.49.

Proposed TF-Based Algorithm
As a result of the presented discussion, EPSE-SD seems not to be the efficient decoding algorithm for some cases; a criterion should be introduced to help us to choose one of the initiation and termination techniques of SE-SD.We propose the TF-based algorithm performing different decoding techniques via a Threshold Factor (TF).TF of this algorithm is defined as a function of P and σ 2 : There are four major cases according to the value of TF.First, when TF is greater than 300, the TF-based algorithm only performs SIC decoding.For instance, if P = 4 and σ 2 is greater than 2.74, TF > 300, SE-SD leads to a huge amount of computational complexity, and its performance is more or less identical to SIC decoding.
In the second case when TF is between 3.2 and 300, the algorithm initially performs SIC decoding to find C ba and consequently calculates suitable C 0 and C f using C ba and then performs SE-SD algorithm.According to Tables 1 and 2, if P ≥ 10 and σ 2 = 0.204, or in a case of P = 4 and 0.283 ≤ σ 2 < 2.74, so 3.2 ≤ TF < 300, the PESE-SD can make an acceptable performance with a reasonable complexity.
In the third case, when TF is between 0.4 and 3.2, the algorithm only performs SE-SD with C 0 = 1.Because the complexity of finding C ba is comparable to SE-SD, it is not logical to use either PSE-SD or EPSE-SD.Based on Figures 2  and 4, when P = 4 and 0.1 ≤ σ 2 < 0.283, 0.4 < TF < 3.2, a certain C 0 equal to 1 can make a sensible complexity without any performance degradation.
Finally, the fourth case is when TF is less than 0.4 and the algorithm performs SE-SD with C 0 = 0.5.In this case SE-SD can find the closest lattice point quickly which costs a quiet small number of flops.The proposed algorithm can be summarized as Algorithm 1.

Conclusion
In order to make SE-SD feasible for real applications, some techniques should be utilized to decrease the complexity of this algorithm.We presented new methods of initiation and termination of the SE-SD algorithm that can contribute to achieve the goal of having a reasonable complexity.
We showed that for a high number of transmit antennas, using Babai distance as initial radius leads to considerable performance degradation due to the big problem size.The suitable initial sphere radius which results in low complexity and desirable performance in the range of ρ which covers wireless communication applications can be found by the our proposed method.Moreover, this paper offers a technique to estimate the final radius to which SE-SD converges.Utilizing the estimated final radius as a criterion for early terminating of SE-SD is a way of controlling the complexity of the algorithm because it avoids considerable amount of unnecessary calculations.Simulation results show that employing proposed initiation and early termination of SE-SD causes a significant reduction in the complexity.For example, when M = 64, P = 4, and ρ = 7.5 dB, the technique leads to reduction in the complexity by 52%.
To estimate the initial radius and the final one, Babai distance should be found through SIC decoding.Therefore, the presented technique sounds not to be useful for some cases in which the extra complexity of SIC decoding is comparable to that of SE-SD process.This investigation proposed an algorithm that utilizes different techniques according to a threshold factor defined in terms of the number of transmit antennas and noise variance.Using threshold factor, the novel algorithm offers a reasonable complexity without any performance degradation.

Figure 1 :
Figure 1: The possible searching paths in a tree for P = 3 and 4-QAM.

Table 1 :
Reduction in complexity corresponding the number of transmit antennas.

Table 2 :
Reduction in complexity corresponding noise variance.