Abstract
The accurate prediction of RNA secondary structure from primary sequence has had enormous impact on research from the past forty years. While many algorithms are available to make these predictions, the inclusion of non-nested loops, termed pseudoknots, still poses challenges. Here, we describe a new method to compute the entire free energy landscape of secondary structures of RNA resulting from a primary RNA sequence, by combining a polymer physics model for the entropy of pseudoknots with exhaustive enumeration of the set of possible structures. Our polymer physics model can address arbitrarily complex pseudoknots and has only two free loop entropy parameters that correspond to concrete physical quantities, over an order of magnitude fewer than even the sparsest state-of-the-art algorithms. Our model outperforms previously published methods in predicting pseudoknots, while performing on par with current methods in the prediction of non-pseudoknotted structures. For RNA sequences of ~ 45 nucleotides, or ~ 90 with minimal heuristics, the complet–e enumeration of possible secondary structures can be accomplished quickly despite the NP-complete nature of the problem.
RNA molecules play physiological roles that extend far beyond translation. In human cells, most RNA molecules are not translated [1]. Non-coding RNAs interact functionally with mRNA [2], DNA [3], and proteins [4], and can be as large as > 200 nucleotides (ntds) [5, 6]. However, a substantial fraction are < 40 ntds in length, including miRNAs and siRNAs, which serve as regulators for the translation of mRNA [2, 7], and piRNAs which form RNA-protein complexes to regulate the germlines of mammals [8]. The in vitro evolution of RNA, especially through SELEX [9–11], has led to an explosion of applications for short RNA molecules, due their ability to tightly and specifically bind to a remarkable range of target ligands [12].
Overwhelmingly, the properties of short non-coding RNA molecules are tied to their three-dimensional, or tertiary, structures [5, 13–16]. Such structures are formed because of the energetic favorability of bonds between complementary nucleotides (primarily A to U, C to G, and G to U). However, these bonds impose an entropic cost; therefore, the conformations most frequently adopted balance the energetic gain of maximal base-pairing with the entropic cost of structural constraints. In equilibrium, the RNA adopts each possible structure with Boltzmann weighted probabilities.
Because of the relevance of RNA structure to function [17, 18], current research aims to predict the minimum free energy structures given the sequence. Algorithms typically predict “secondary structure”, a list of the base pairings [19]. The early Pipas-McMahon RNA structure prediction algorithm sought to completely enumerate and evaluate the free energy of all possible secondary structures, thereby constructing the entire energy landscape [20]. This NP-complete approach was quickly supplanted by dynamic programming, which has since dominated RNA structure prediction [21–25]. These algorithms efficiently consider an enormous number of structures without explicitly generating them, by iteratively finding the optimal structure for subsequences [26].
However, such algorithms have difficulty predicting RNA secondary structures that include pseudoknots, i.e. structural elements with at least two non-nested base pairs (see Fig. S1A for an example) that make up roughly 1.4% of base pairs [26] and are overrepresented in functionally important regions [27] of RNA. Pseudoknots are disallowed from the most popular RNA structure prediction algorithms (e.g. Refs. [28–30]) due to computational cost; indeed, structural prediction including all pseudoknots has been shown to be NP-complete [31–33]. Significant advances have been made with heuristics, which do not guarantee finding the minimum free energy structure [34–38], and by disallowing all but a narrow class of pseudoknots [39–46].
A major challenge for predicting pseudoknotted structures is the relative lack of experimental data [47]. Thus, up until recently, theoretical approaches have largely been limited to simple H-type pseudoknots [39, 45, 48, 49]. A recent strategy uses machine-learning of large experimental datasets [45, 50, 51]. Although these approaches can be useful, they come with the disadvantages of compounding possible experimental errors, and often using an enormous number of parameters which can hamper generalizability. A sketch of a theoretical description of pseudoknot entropies based on polymer physics was developed by Isambert and Siggia [34, 52]; however, their derivations have not been published.
In this study, we demonstrate that for short RNA sequences, it is possible to exactly solve for the probability that the RNA will fold into any given structure, in eluding those with pseudoknots. Complete enumeration of the RNA structure landscape is feasible even for biologically relevant RNA sequences (Section I). Our approach combines a method based on the work of Isambert and Siggia (Section II) with a novel graph-theoretical depiction of the RNA (Section III) to exactly calculate the entropy of each structure, treating both pseudoknotted and non-pseudoknotted RNA structures equivalently. The entropies of structures of arbitrary complexity can be analytically computed with just two experimentally derived physical parameters: the persistence length of single-stranded RNA, and the volume within which two RNA nucelotides are considered bound. This represents an enormous parameter reduction compared to state-of-the-art algorithms like the Cao-Chen or Dirks-Pierce models, which have 258 and 11 parameters, respectively, for H-type pseudoknots alone, and ~ 18 parameters for non-pseudoknotted loops [51]. We test our model predictions on molecules from the RNAStrand [53], PseudoBase++ [54], and CompraRNA [55] databases and find good agreement with experimental results (Section IV). Although we fit our entropy model to data from non-pseudoknotted structures, we find that our model outper-forms previously published methods in predicting pseudoknots, while performing on par with current methods in the prediction of non-pseudoknotted structures.
I. ENUMERATING RNA STRUCTURES
The Pipas-McMahon algorithm [20] first enumerates all possible secondary structures for a given sequence (sans pseudoknots), and then evaluates the free energy for each, to construct the entire free energy landscape for non-pseudoknotted structures. A major shortcoming is the significant computer time required for long sequences. However, the exponential increase in computer power over the past forty years, coupled with increased appreciation for the physiological and engineering relevance of short RNA strands suggest revisiting this approach. In this section, we describe the process by which we exhaustively enumerate the secondary structures into which an arbitrary given sequence can fold. We first number the nucleotide sequence from 1 to N from the 5’ end. We define an N × N symmetric matrix B which describes which nucleotides can bind to each other: Bi,j = 1 if nucleotides i and j can bind to make base pair i · j (i.e. they belong to the set {(A,U), (C,G), (G,U)}), and 0 otherwise.
Next, we search for all possible stems (strings of consecutive base pairs) that could form. We define a parameter m to be the minimum allowed stem length (m ≥ 1; m = 1 throughout unless otherwise specified). We also impose the physical constraint that hairpins (single-stranded region connecting one end of a stem) have a minimum length of 3 nucleotides. We include not only the longest possible stems that can form, but all contiguous subsets of those stems [56, 57]. We denote the number of stems found by Nstems.
We next define the Nstems × Nstems symmetric compatibility matrix C, where Cp,q = 1 if a structure could be made with both stems p and q (Cq,q = 1 ∀ q). We impose the constraint that each nucleotide may be paired with, at most, one other nucleotide by setting Cp,q = 0 if stems p and q share at least one nucleotide.
Finally, we explicitly enumerate the remaining possible secondary structures by identifying all compatible combinations of stems. Starting from a single stem s1, we consider stems s2 where 1 ≤ s1 < s2 ≤ Nstems and add the first stem for which Cs1,s2 = 1. Then, we repeat the process, adding the first stem s3 > s2 compatible with both s1 and s2, and so forth, continuing until we can add no more stems. We add the resulting structure, composed of say M stems, to the list of possible structures, then remove the last stem added (to obtain the structure composed of stems s1, s2, …, sM−1) and continue the process. This algorithm returns all possible secondary structures resulting from the primary sequence.
The algorithm described here was implemented in MatLab and all code is available on the GitHub repository https://github.com/ofer-kimchi/RNA-FE-Landscape.
Having completely enumerated the possible secondary structures, we calculate the probabilities that the RNA will fold into each of them by calculating their free energies.
II. CALCULATING FREE ENERGIES
The probability of the RNA sequence folding into a given equilibrium structure σ is given by the Boltzmann factor where β = 1/kBT (T is the temperature and kB is Boltzmann’s constant), and the partition function, Z, is defined such that the probability distribution is normalized: Σσ p(σ) = 1. Here Fσ, the free energy of structure σ, is a function of the energy Eσ and entropy Sσ of the structure: where we drop the subscripts for notational convenience and introduce Δs to signify that free energies are measured with respect to the free chain. We separate the free energy calculation into the free energy of stems and the free energy of loops.
A. Calculating bond energies
We make the simplifying assumption that the energy ΔE in Eq. (2) is determined solely by the base pairs in the structure, ignoring higher order corrections to the energy. Thus, each stem, s, contributes an energy ΔES such that ΔE = Σs ΔES. To calculate the terms ΔES, we consider nearest-neighbor interactions among base pairs [58]. Previous work has shown it reasonable to include (whenever appropriate) the contribution of unpaired nucleotides on both sides of each stem in the nearest-neighbor terms for the first and last base pairs of the stem [25]. Specifically, we used tabulated parameters for ΔH from Refs. [50, 59, 60], well documented by Turner and Mathews in the Nearest Neighbor Database [61]. Our entropy model (described below) was used in place of the entropies of hairpin, bulge, internal, and multibranch loops and we set the enthalpy terms of these loops (aside from nearest-neighbor interactions) to zero; we did not consider mismatch-mediated coaxial stacking, symmetry penalties or penalties for specific closures of stems; and we implemented coaxial stacking terms in place of terminal mismatches or dangling ends whenever possible in multibranch loops.
B. Calculating entropies
Entropies are calculated as being comprised of two independent parts: the entropic cost of forming stems and the entropic cost of forming loops, such that ΔS = ΔSloops + Σstems ΔSstem.
The entropies of stems represent the entropy lost when an RNA forms base pairs. This entropy is considered in the same fashion as the energetic parameters (each energetic parameter has an accompanying entropic parameter). Therefore, as for the energies, the entropic parameters consider pairwise RNA base pair interactions, and ΔSstem thus depends on the specific nucleotides comprising the stem. In contrast, we make the approximation that ΔSloops is independent of the identities of the nucleotides comprising the single-stranded regions.
III. CALCULATING LOOP ENTROPIES: RNA FEYNMAN DIAGRAMS
We model single-stranded regions comprised of x unpaired nucleotides (ntds) as a random walk of (x + 1)/b steps, where b ≈ 2.4 ntds is the Kuhn length of single stranded RNA [34, 62]. Since the entropic cost of forming base pairs has already been considered in ΔSstem, for the purposes of calculating ΔSloops we consider stems as rigid rods. This approximation is justified because of the extremely long persistence length of double-stranded RNA (~ 200 ntds [63]) compared to both single-stranded RNA and the length of any stem we consider.
The entropy of a single-stranded region of length si is given by kB log ωi(si), where ωi(si) is the number of ways of arranging the region consistent with the topology of the overall structure. Defining Ω(s) as the total number of conformations a random walk of length s can take, for a free chain, ω = Ω. For structures which include constraints, ω(si) = Ω(si) × p(si), where p(si) is the probability that the random walk of length si will yield a conformation consistent with the topology of the overall structure being considered. Since free energies are measured relative to the free chain, factors of Ω cancel out in equations for ΔSloops (see further discussion in Section S3). The entropy of the single-stranded regions in a given structure is thus given by where si is the number of nucleotides in the ith singlestranded region. The sum is generally over non-independent terms; we will describe how to address these sums via a Feynman diagram-like approach in this section.
As demonstrated in Eq. (3), the physics of the situation are held in p(s), which is best calculated by considering the end-to-end vector of the random walk undergone by the single-stranded RNA, as where we define as the probability of a random walk of length s to have end-to-end vector :
We have assumed s ≫ b in order to arrive at the Gaussian formula above through the central limit theorem. The mean of the Gaussian is zero by symmetry. In order to find the variance we first consider a single step of length b in three dimensions which has variance in the x, y, and z coordinates of b2/3 by symmetry. For a random walk of N = s/b steps, by independence of subsequent steps, the total variance is equal to Nb2/3 = sb/3, leading to Eq. (5).
As described in Section S5 of the supplement, we can systematically consider higher order corrections to Eq. (5) while maintaining its Gaussian nature. Eq. (5) is accurate for non-self-avoiding random walks; self-avoiding random walks cannot be treated analytically in this way. However, for sufficiently short walks, the probability of self-interaction is low. While the accuracy of the assumption s ≫ b does not always hold in the problems considered, we ultimately find very good agreement between results using Eq. (5) and experiment, and that corrections to Eq. (5) as described in Section S5 are negligible.
In order to demonstrate how Eqs. 3–5 are applied, we first consider the simple hairpin loop. Following Jacobson and Stockmayer [65], we allow that base pairing can occur as long as the two nucleotides are within a small volume of one another, where rs roughly corresponds to the bond length.1 We assume that rs is small enough that for all . Therefore, Eqs. 3–5 yield
We have called the LHS of the equation Sclosed-net-0 (the zero references the lack of stems enclosed by the loop) following [34, 52] (rather than, say, Shairpin) to emphasize that this formula is applicable to hairpin loops, bulge loops, internal loops, and multiloops – all of which can be thought of as closed loops of RNA. Aside from the appropriate inclusion of vs terms to account for the finite and variable width of RNA stems, RNA stems are treated as having negligible width by performing the approximation .
We estimate vs by fitting experimental measurements of the entropy of hairpin loops of variable lengths to Eq. (6). Although Eq. (6) implies that the entropy of a hairpin should increase monotonically as a function of its length, the experimental measurements are nonmonotonic, and their nonmonotonicity exceeds the error bars [64]. This non-monotonicity may be due to enthalpic effects [66] which were neglected in our analysis following Ref. [25]. Nevertheless, Fig. 2 shows that Eq. (6) gives a reasonable fit to the experimental data with vs = 0.0201 ± 0.0036 ntds3.2 If one ignores all angular dependences of bond formation, this leads to a naive underestimate of the length of a hydrogen bond of 0.56 Å, which nonetheless is well within an order of magnitude of the true length of hydrogen bonds.
Finally, we consider pseudoknots. To calculate the entropy of a pseudoknot of arbitrary complexity we invent a novel graph formulation inspired by Feynman diagrams from quantum field theory. First, the RNA structure being considered is translated into a graph. Nodes are used to represent the two end points of a stem, and two types of edges represent single- and double-stranded RNA.
Defined in this way, the graph of the RNA structure directly represents the integrals necessary to compute its entropy. The positions of the nodes are integrated over all of space, while the constraints of the structure are included in the integrand: a double-stranded edge of length l between nodes i and j leads to a term , and a single-stranded edge of length s between these nodes leads to a term in the integrand. Note that two bonded nucleotides in isolation are considered a stem of length l → 0.
As a concrete example, we consider the canonical H-type pseudoknot, an instance of which is shown in Fig. 3A (LHS). As we described, its conformational entropy can be calculated by translating the structure into a graph (Fig. 3A RHS), where each node represents the edge of a stem; blue edges represent regions of doublestranded RNA of length li; red edges represent regions of single-stranded RNA of length si. For example, here, s3 = 5 ntds, and l1 =3 ntds. We set the origin of our coordinate system to node 0 and call the distance between node i and the origin ri. Integrating over the possible placements of nodes 1-3 (while including the constraints of the structure in the integrand as described previously) we obtain the following Gaussian integral formulation of the entropy: where using the assumption s ≫ b, we allow the integrals to extend over all of space. A more comprehensive derivation of this formula, including the origin of the vs terms, can be found in Section S4. This integral can be calculated analytically (Sec. S5) [34].
Graphs that can be disconnected by the removal of any one edge correspond to separable integrals, and thus to distinct motifs in the RNA structure. The decomposition of a structure into its component graphs is depicted in Fig. 3B for a classical cloverleaf RNA. The RNA in question decomposes into four instances of closed-net-0 (originating from the three hairpins and multiloop) and one instance of an open-net-0, or free chain (which by definition does not affect the entropy). As shown in the figure, once appropriate factors of vs are included in the integrals (one for each stem) the stems can be treated as having negligible width; thus, nodes which can be removed without changing the topology can be removed in the graph decomposition process. See Section S4 for further discussion.
In Fig. S2 we display all possible graphs of up to two stems and their respective RNA structures. As in Fig. 3, single-stranded edges are displayed with red; doublestranded with blue. For each graph, the integral formulation of its entropy is displayed in the figure alongside what it evaluates to.
IV. COMPARISON WITH PUBLISHED TOOLS
We use experimentally determined structures to compare the predictions of our model with other current methods; results are shown in Fig. 4. For sequences of length ≤ 80 ntds from the RNAStrand [53], PseudoBase++ [54], and CompraRNA [55] databases (186 non-pseudoknotted structures with 58 different topologies; 235 pseudoknotted structures with 52 different topologies) which had a sequence dissimilarity ≥ 0.2 (using Jukes-Cantor) we measured the number of base pairs correctly predicted by our algorithm’s MFE structure compared to fourteen other current algorithms. Seven of these cannot predict pseudoknots and serve as useful benchmarks for the non-pseudoknotted results, (detailed methods in Section S1).
While the entropy model presented here can give an integral expression for arbitrarily complex pseudoknots, the integral may need to be solved numerically for sufficiently complex structures. For this large-scale comparison we disallowed pseudoknots more complex than those displayed in Fig. S2, and our algorithm therefore did not require any numerical integration. We similarly disallowed parallel stems which can be stable in neutral and acidic pH conditions [73]. We also set the minimum stem length for each sequence (m) to the minimum value it could take such that the total number of possible stems is less than . These choices were all made to speed up computation time; each sequence took between several seconds and ~ an hour to run on a MacBook Pro 2012 laptop. Details of the computation time of our algorithm can be found in Fig. S4.
While these practical constraints were chosen to speed up the computation time, they also led to errors in the algorithm’s predictions. 64 of the tested pseudoknots were topologically more complex than any of those presented in Fig. S2. Furthermore, 33 of the non-pseudoknotted sequences tested (and 8 of the pseudoknotted) include base pairs outside of those allowed by the algorithm (A·U, G·C, and G·U). Removing such structures from our comparison analysis leads to our algorithm performing even better compared to current tools (see Fig. S3).
Further errors were due to our choice of m, which was not optimized and was too high compared to the length of the shortest stem in the experimental structure for 58 non-pseudoknotted cases and 54 pseudoknotted. By changing from 150 to 200, these numbers decreased to 46 for both pseudoknotted and non-pseudoknotted sequences, but the results for were practically identical to the results of Fig. 4 (see full results in Supplementary Table 1). For , the computation time was increased significantly (to ~ 17 hours for one sequence).
The sensitivity (TP/TP + FN) and PPV (TP/TP + FP) of our algorithm were measured to be 0.80 and 0.75 for the non-pseudoknotted cases, and 0.75 and 0.76 for the pseudoknotted cases, respectively. Our algorithm outperformed all other prediction tools tested for the prediction of pseudoknots, and on par with other tools in the prediction of non-pseudoknotted sequences. The full results can be found in Supplementary Table S1.
While sensitivity and PPV are the most common metrics used to establish the success of an RNA prediction algorithm [74], we sought to develop a test that measures success on the scale of the full RNA, rather than on the scale of individual base pairs. To this end, we measured how frequently each algorithm was able to correctly predict the topology of the experimentally measured structure, where the topology of a structure is defined by its graph (Section III). We found for our algorithm that the experimental topology is within the top 1, 5, and 10 topologies at frequencies of (49%, 65%, and 70%) for nonpseudoknotted structures, and (34%, 59%, and 62%) for pseudoknotted, demonstrating a sharp increase between top 1 and top 5, and a plateau between top 5 and top 10.
Considering whether an algorithm correctly predicts the full topology can lead to errors arising from small variations in structure. For example, the opening of a single bond on the edge of a stem can lead to a different topology as we’ve defined it, if that stem includes one of the ends of the molecule. In order to arrive at a per-base measure of topology, we consider for each bond along the RNA backbone to which of the minimal graphs of Fig. S2 it belongs. For example, the bond between the second and third nucleotides of Fig. 3A belong to a stem of an open-net-2a graph. We then measure for each sequence the fraction of correct per-base topology predictions made by each algorithm’s predicted MFE structure. We find that our algorithm averages an 76% per-base topology prediction accuracy for non-pseudoknotted sequences, and a 49% accuracy for pseudoknotted.
Finally, we compare how frequently each algorithm predicts an MFE structure containing a pseudoknot. Our algorithm correctly predicted 174/235 pseudoknots among the pseudoknotted cases, far more than any other algorithm tested. However, it also erroneously predicted 35/186 incorrect pseudoknots among the nonpseudoknotted cases. We have found that the probability of predicting pseudoknots can be significantly decreased with minor changes in the Turner parameters energy function, and these parameters may need to be re-examined in order to be used most effectively with the entropy model presented here.
Our algorithm also provides the probability of folding into a pseudoknotted structure for each sequence. These data for the 421 sequences tested are presented in Fig. 5. Each datapoint represents a different sequence and the total probability calculated of that sequence folding into a pseudoknotted structure. For figure clarity, a lower bound of pseudoknot probability was set at 2 × 10−10.
The algorithm’s predictions for the six longest RNA molecules less than 89 ntds in length from the Pseudobase++ database are presented in Fig. 6. We considered only those sequences whose structure was directly supported by experiments and which could be decomposed into the minimal topologies shown in Fig. S2. We display the experimental structure (green background) alongside the MFE predicted structure (light blue background) and the top six predicted topologies (out of several hundred, depending on the sequence; dark blue) where the experimental topology is highlighted (purple). RNA secondary structure was plotted using the PseudoViewer package [83]. Our results demonstrate successful predictions even for long pseudoknotted sequences, especially in terms of the predicted topology. Detailed methods are provided in Section S1.
V. DISCUSSION AND CONCLUSIONS
The accurate prediction of the ensemble of secondary structures explored by an RNA or DNA molecule has played a major role in shaping modern molecular biology and DNA nanotechnology over the past several decades. In this work, we showed that the modern ubiquity of extremely powerful computers can be used alongside novel polymer physics techniques to completely enumerate the free energy landscape of an RNA molecule including complex pseudoknots. This NP-complete algorithm can be used to tackle even relatively long (~ 90 ntds) RNA sequences, and aside from the enumeration procedure (which is relatively fast for long sequences; see Fig. S4) is easily parallelizable.
Remarkably, the entropy model discussed in this work requires only two parameters – orders of magnitude fewer than other current algorithms – corresponding to clearly measurable physical quantities. Despite this, and despite the fact that all parameters used in our model were derived using experiments on non-pseudoknotted RNA, our algorithm is more successful in predicting pseudoknotted structures than any of the other algorithms tested, and on par with all predictors tested in predicting non-pseudoknotted structures. Although we have not done so in this work, we expect that our results can be even further improved by optimizing the energy function given the entropy model presented here. The success of our algorithm is particularly notable given that the entropy model developed in this work can be used to address any RNA secondary structure regardless of complexity.
The algorithm presented here can also be easily generalized to probe multiple interacting strands (see discussion in supplement). The sequences considered can be any combination of DNA and RNA; their identities affects the energy parameters of the model which have been previously tabulated, and to a lesser extent the two entropy parameters (b and vs).
Our finding that the integral formulation of the entropy of arbitrary complex RNA secondary structures can be represented graphically is reminiscent of Feynman diagrams in quantum field theory. The topologies defined by these graphs can also serve as useful biological constructs to group similar RNA structures together. The depiction of RNA structure as a graph has played an important role in the prediction of RNA secondary structure [84–87], as well as in the search for novel RNAs [88, 89], and the description of similarity between RNA structures [90–93] which is especially useful in the study of the effects of mutations [94, 95]. A common approach among these graphical depictions of RNA has been to represent loops (e.g. hairpins, internal loops, etc.) as verticies and stems as edges [88, 92, 93]. However, this depiction of RNA does not always distinguish between pseudoknotted and non-pseudoknotted structures [88]. Other approaches have represented each nucleotide as a separate node and bonds (either hydrogen or covalent) as edges [89, 91]; while useful in many contexts (for example, secondary structure visualization), this approach does not have the benefit of coarse-graining to group similar structures as the same graph [90]. Our approach, described in Section III, can be viewed as a middle ground and may be useful in the contexts described previously.
VI. ACKNOWLEDGEMENTS
We thank Elena Rivas and Yohai Bar Sinai for fruitful discussions. This research was funded by the National Science Foundation through the Harvard Materials Research Science and Engineering Center Grant DMR-1420570, DMREF Grant DMR-123869 and ONR Grant N00014-17-1-3029. OK acknowledges support from an NDSEG fellowship and Molecular Biophysics Training Grant NIH/NIGMS T32 GM008313 (PI: James M. Hogle). M.P.B. is an investigator of the Simons Foundation.
Footnotes
↵* Electronic address: okimchi{at}g.harvard.edu
↵† Electronic address: ljc37{at}cam.ac.uk
↵1 More generally, we can define a probability of a nucleotide at the origin being base paired with a nucleotide a vector away. Then, vs is defined as and rs is the value of for which is non-negligible.
2 A more precise definition of vs might include a dependence on the closing base pairs of the hairpin loop; we expect that the penalties placed on specific closing base pairs and first mismatches in e.g. Refs. [64] and [25] play a similar role, though such penalties were not included here.
References
- [1].↵
- [2].↵
- [3].↵
- [4].↵
- [5].↵
- [6].↵
- [7].↵
- [8].↵
- [9].↵
- [10].
- [11].↵
- [12].↵
- [13].↵
- [14].
- [15].
- [16].↵
- [17].↵
- [18].↵
- [19].↵
- [20].↵
- [21].↵
- [22].
- [23].
- [24].
- [25].↵
- [26].↵
- [27].↵
- [28].↵
- [29].↵
- [30].↵
- [31].↵
- [32].
- [33].↵
- [34].↵
- [35].↵
- [36].
- [37].↵
- [38].↵
- [39].↵
- [40].
- [41].
- [42].
- [43].
- [44].
- [45].↵
- [46].↵
- [47].↵
- [48].↵
- [49].↵
- [50].↵
- [51].↵
- [52].↵
- [53].↵
- [54].↵
- [55].↵
- [56].↵
- [57].↵
- [58].↵
- [59].↵
- [60].↵
- [61].↵
- [62].↵
- [63].↵
- [64].↵
- [65].↵
- [66].↵
- [67].↵
- [68].↵
- [69].↵
- [70].↵
- [71].↵
- [72].↵
- [73].↵
- [74].↵
- [75].↵
- [76].↵
- [77].↵
- [78].↵
- [79].↵
- [80].↵
- [81].↵
- [82].↵
- [83].↵
- [84].↵
- [85].
- [86].
- [87].↵
- [88].↵
- [89].↵
- [90].↵
- [91].↵
- [92].↵
- [93].↵
- [94].↵
- [95].↵
- [96].↵
- [97].↵
- [98].↵
- [99].
- [100].
- [101].
- [102].↵
- [103].↵
- [104].↵