|
|
1 | <?xml version='1.0' encoding='UTF-8'?> |
|
|
2 | <!DOCTYPE sections SYSTEM "/dtd/book.dtd"> |
|
|
3 | |
1 | <!-- The content of this document is licensed under the CC-BY-SA license --> |
4 | <!-- The content of this document is licensed under the CC-BY-SA license --> |
2 | <!-- See http://creativecommons.org/licenses/by-sa/1.0 --> |
5 | <!-- See http://creativecommons.org/licenses/by-sa/2.5 --> |
3 | |
6 | |
4 | <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/handbook/hb-working-use.xml,v 1.5 2003/12/16 18:08:56 swift Exp $ --> |
7 | <!-- $Header: /var/cvsroot/gentoo/xml/htdocs/doc/en/handbook/hb-working-use.xml,v 1.44 2006/10/28 09:17:55 neysx Exp $ --> |
5 | |
8 | |
6 | <sections> |
9 | <sections> |
|
|
10 | |
|
|
11 | <abstract> |
|
|
12 | USE-flags are a very important aspect of Gentoo. In this chapter, you learn to |
|
|
13 | work with USE-flags and understand how USE-flags interact with your system. |
|
|
14 | </abstract> |
|
|
15 | |
|
|
16 | <version>1.35</version> |
|
|
17 | <date>2006-10-08</date> |
|
|
18 | |
7 | <section> |
19 | <section> |
8 | <title>What are USE-flags?</title> |
20 | <title>What are USE-flags?</title> |
9 | <subsection> |
21 | <subsection> |
10 | <title>The ideas behind USE-flags</title> |
22 | <title>The ideas behind USE-flags</title> |
11 | <body> |
23 | <body> |
… | |
… | |
25 | with KDE-support if those packages work flawlessly without? |
37 | with KDE-support if those packages work flawlessly without? |
26 | </p> |
38 | </p> |
27 | |
39 | |
28 | <p> |
40 | <p> |
29 | To help users in deciding what to install/activate and what not, we wanted the |
41 | To help users in deciding what to install/activate and what not, we wanted the |
30 | user to specify his environment in an easy way. This forces the user into |
42 | user to specify his/her environment in an easy way. This forces the user into |
31 | deciding what he really wants and eases the process for Portage, our package |
43 | deciding what they really want and eases the process for Portage, our package |
32 | managment system, to make useful decisions. |
44 | management system, to make useful decisions. |
33 | </p> |
45 | </p> |
34 | |
46 | |
35 | </body> |
47 | </body> |
36 | </subsection> |
48 | </subsection> |
37 | <subsection> |
49 | <subsection> |
… | |
… | |
44 | Portage will know that you want support for the chosen keyword. Of course |
56 | Portage will know that you want support for the chosen keyword. Of course |
45 | this also alters the dependency information for a package. |
57 | this also alters the dependency information for a package. |
46 | </p> |
58 | </p> |
47 | |
59 | |
48 | <p> |
60 | <p> |
49 | Lets take a look at a specific example: the <c>kde</c> keyword. If you do not |
61 | Let us take a look at a specific example: the <c>kde</c> keyword. If you do not |
50 | have this keyword in your <c>USE</c> variable, all packages that have |
62 | have this keyword in your <c>USE</c> variable, all packages that have |
51 | <e>optional</e> KDE support will be compiled <e>without</e> KDE support. All |
63 | <e>optional</e> KDE support will be compiled <e>without</e> KDE support. All |
52 | packages that have an <e>optional</e> KDE dependency will be installed |
64 | packages that have an <e>optional</e> KDE dependency will be installed |
53 | <e>without</e> installing the KDE libraries (as dependency). If you have defined |
65 | <e>without</e> installing the KDE libraries (as dependency). If you have defined |
54 | the <c>kde</c> keyword, then those packages <e>will</e> be compiled with KDE |
66 | the <c>kde</c> keyword, then those packages <e>will</e> be compiled with KDE |
… | |
… | |
74 | <li> |
86 | <li> |
75 | A <e>global</e> USE-flag is used by several packages, system-wide. This is |
87 | A <e>global</e> USE-flag is used by several packages, system-wide. This is |
76 | what most people see as USE-flags. |
88 | what most people see as USE-flags. |
77 | </li> |
89 | </li> |
78 | <li> |
90 | <li> |
79 | A <e>local</e> USE-fag is used by a single package to make package-specific |
91 | A <e>local</e> USE-flag is used by a single package to make package-specific |
80 | decisions. |
92 | decisions. |
81 | </li> |
93 | </li> |
82 | </ul> |
94 | </ul> |
83 | |
95 | |
84 | <p> |
96 | <p> |
85 | A list of available global USE-flags can be found <uri |
97 | A list of available global USE-flags can be found <uri |
86 | link="/dyn/use-index.xml">online</uri> or locally in |
98 | link="/dyn/use-index.xml">online</uri> or locally in |
87 | <path>/usr/portage/profiles/use.desc</path>. A short (<e>very</e> incomplete) |
99 | <path>/usr/portage/profiles/use.desc</path>. |
88 | snippet: |
100 | </p> |
|
|
101 | |
89 | </p> |
102 | <p> |
90 | |
103 | A list of available local USE-flags can be found locally in |
91 | <pre caption="A short snippet of available USE-flags"> |
104 | <path>/usr/portage/profiles/use.local.desc</path>. |
92 | gtk - Adds support for x11-libs/gtk+ (The GIMP Toolkit) |
|
|
93 | gtk2 - Use gtk+-2.0.0 over gtk+-1.2 in cases where a program supports both. |
|
|
94 | gtkhtml - Adds support for gnome-extra/gtkhtml |
|
|
95 | guile - Adds support for dev-util/guile (interpreter for Scheme) |
|
|
96 | icc - Use the Intel C++ Compiler if the package supports it |
|
|
97 | icc-pgo - Enable PGO data generation or use when use icc. |
|
|
98 | imap - Adds support for IMAP |
|
|
99 | </pre> |
105 | </p> |
100 | |
106 | |
101 | </body> |
107 | </body> |
102 | </subsection> |
108 | </subsection> |
103 | </section> |
109 | </section> |
104 | <section> |
110 | <section> |
… | |
… | |
115 | <p> |
121 | <p> |
116 | As previously mentioned, all USE-flags are declared inside the <c>USE</c> |
122 | As previously mentioned, all USE-flags are declared inside the <c>USE</c> |
117 | variable. To make it easy for users to search and pick USE-flags, we already |
123 | variable. To make it easy for users to search and pick USE-flags, we already |
118 | provide a <e>default</e> USE setting. This setting is a collection of USE-flags |
124 | provide a <e>default</e> USE setting. This setting is a collection of USE-flags |
119 | we think are commonly used by the Gentoo users. This default setting is declared |
125 | we think are commonly used by the Gentoo users. This default setting is declared |
120 | in the <path>/etc/make.profile/make.defaults</path> file. Let us take a look at |
126 | in the <path>make.defaults</path> files part of your profile. |
121 | this default setting: |
127 | </p> |
|
|
128 | |
122 | </p> |
129 | <p> |
|
|
130 | The profile your system listens to is pointed to by the |
|
|
131 | <path>/etc/make.profile</path> symlink. Each profile works on top of another, |
|
|
132 | larger profile, the end result is therefore the sum of all profiles. The top |
|
|
133 | profile is the <path>base</path> profile |
|
|
134 | (<path>/usr/portage/profiles/base</path>). |
|
|
135 | </p> |
123 | |
136 | |
124 | <pre caption="/etc/make.profile/make.defaults USE variable"> |
137 | <p> |
125 | USE="x86 oss apm arts avi berkdb crypt cups encode foomaticdb gdbm gif gpm gtk |
138 | Let us take a look at this default setting for the 2004.3 profile: |
126 | imlib jpeg kde gnome libg++ libwww mad mikmod motif mpeg ncurses nls |
139 | </p> |
127 | oggvorbis opengl pam pdflib png python qt quicktime readline sdl slang |
140 | |
|
|
141 | <pre caption="Cumulative make.defaults USE variable for the 2004.3 profile"> |
|
|
142 | <comment>(This example is the sum of the settings in base, default-linux, |
|
|
143 | default-linux/x86 and default-linux/x86/2004.3)</comment> |
|
|
144 | USE="x86 oss apm arts avi berkdb bitmap-fonts crypt cups encode fortran f77 |
|
|
145 | foomaticdb gdbm gif gpm gtk imlib jpeg kde gnome libg++ libwww mad |
|
|
146 | mikmod motif mpeg ncurses nls oggvorbis opengl pam pdflib png python qt |
128 | spell ssl svga tcpd truetype X xml2 xmms xv zlib" |
147 | quicktime readline sdl spell ssl svga tcpd truetype X xml2 xmms xv zlib" |
129 | </pre> |
148 | </pre> |
130 | |
149 | |
131 | <p> |
150 | <p> |
132 | As you can see, this variable already contains quite a lot of keywords. Do |
151 | As you can see, this variable already contains quite a lot of keywords. Do |
133 | <b>not</b> alter the <path>/etc/make.profile/make.defaults</path> file to tailor |
152 | <b>not</b> alter any <path>make.defaults</path> file to tailor |
134 | the <c>USE</c> variable to your needs: changes in this file will be undone when |
153 | the <c>USE</c> variable to your needs: changes in this file will be undone when |
135 | you update Portage! |
154 | you update Portage! |
136 | </p> |
155 | </p> |
137 | |
156 | |
138 | <p> |
157 | <p> |
… | |
… | |
147 | For instance, to remove support for KDE and QT but add support for ldap, the |
166 | For instance, to remove support for KDE and QT but add support for ldap, the |
148 | following <c>USE</c> can be defined in <path>/etc/make.conf</path>: |
167 | following <c>USE</c> can be defined in <path>/etc/make.conf</path>: |
149 | </p> |
168 | </p> |
150 | |
169 | |
151 | <pre caption="An example USE setting in /etc/make.conf"> |
170 | <pre caption="An example USE setting in /etc/make.conf"> |
152 | USE="-kde -qt ldap" |
171 | USE="-kde -qt3 -qt4 ldap" |
|
|
172 | </pre> |
|
|
173 | |
|
|
174 | </body> |
|
|
175 | </subsection> |
|
|
176 | <subsection> |
|
|
177 | <title>Declaring USE flags for individual packages</title> |
|
|
178 | <body> |
|
|
179 | |
|
|
180 | <p> |
|
|
181 | Sometimes you want to declare a certain USE flag for one (or a couple) of |
|
|
182 | applications but not system-wide. To accomplish this, you will need to create |
|
|
183 | the <path>/etc/portage</path> directory (if it doesn't exist yet) and edit |
|
|
184 | <path>/etc/portage/package.use</path>. |
|
|
185 | </p> |
|
|
186 | |
|
|
187 | <p> |
|
|
188 | For instance, if you don't want <c>berkdb</c> support globally but you do want |
|
|
189 | it for <c>mysql</c>, you would add: |
|
|
190 | </p> |
|
|
191 | |
|
|
192 | <pre caption="/etc/portage/package.use example"> |
|
|
193 | dev-db/mysql berkdb |
|
|
194 | </pre> |
|
|
195 | |
|
|
196 | <p> |
|
|
197 | You can of course also explicitly <e>disable</e> USE flags for a certain |
|
|
198 | application. For instance, if you don't want <c>java</c> support in PHP: |
|
|
199 | </p> |
|
|
200 | |
|
|
201 | <pre caption="/etc/portage/package.use 2nd example"> |
|
|
202 | dev-php/php -java |
153 | </pre> |
203 | </pre> |
154 | |
204 | |
155 | </body> |
205 | </body> |
156 | </subsection> |
206 | </subsection> |
157 | <subsection> |
207 | <subsection> |
… | |
… | |
159 | <body> |
209 | <body> |
160 | |
210 | |
161 | <p> |
211 | <p> |
162 | Sometimes you want to set a certain USE-setting only once. Instead of editing |
212 | Sometimes you want to set a certain USE-setting only once. Instead of editing |
163 | <path>/etc/make.conf</path> twice (to do and undo the USE-changes) you can just |
213 | <path>/etc/make.conf</path> twice (to do and undo the USE-changes) you can just |
164 | declare the USE-variable as environment variable. |
214 | declare the USE-variable as environment variable. Remember that, when you |
|
|
215 | re-emerge or update this application (either explicitly or as part of a system |
|
|
216 | update) your changes will be lost! |
165 | </p> |
217 | </p> |
166 | |
218 | |
167 | <p> |
219 | <p> |
168 | As an example we will temporarily remove java from the USE-setting |
220 | As an example we will temporarily remove java from the USE-setting |
169 | during the installation of mozilla. |
221 | during the installation of mozilla. |
170 | </p> |
222 | </p> |
171 | |
223 | |
172 | <note> |
|
|
173 | The <c>emerge</c> command will be discussed more thoroughly in <uri |
|
|
174 | link="?part=2&chap=2">Portage and Software</uri>. |
|
|
175 | </note> |
|
|
176 | |
|
|
177 | <pre caption="Using USE as evironment variable"> |
224 | <pre caption="Using USE as environment variable"> |
178 | # <i>USE="-java" emerge mozilla</i> |
225 | # <i>USE="-java" emerge mozilla</i> |
179 | </pre> |
226 | </pre> |
180 | |
227 | |
181 | </body> |
228 | </body> |
182 | </subsection> |
229 | </subsection> |
183 | <subsection> |
230 | <subsection> |
184 | <title>Inheriting USE-flags</title> |
|
|
185 | <body> |
|
|
186 | |
|
|
187 | <p> |
|
|
188 | Some packages don't only listen to USE-flags, but also provide USE-flags. When |
|
|
189 | you install such a package, the USE-flag they provide is added to your USE |
|
|
190 | setting. To view the list of packages that provide a USE-flag, check |
|
|
191 | <path>/etc/make.profile/use.defaults</path>: |
|
|
192 | </p> |
|
|
193 | |
|
|
194 | <pre caption="A snippet from /etc/make.profile/use.defaults"> |
|
|
195 | gnome gnome-base/gnome |
|
|
196 | gtk x11-libs/gtk+ |
|
|
197 | qt x11-libs/qt |
|
|
198 | kde kde-base/kdebase |
|
|
199 | motif x11-libs/openmotif |
|
|
200 | </pre> |
|
|
201 | |
|
|
202 | </body> |
|
|
203 | </subsection> |
|
|
204 | <subsection> |
|
|
205 | <title>Precendence</title> |
231 | <title>Precedence</title> |
206 | <body> |
232 | <body> |
207 | |
233 | |
208 | <p> |
234 | <p> |
209 | Of course there is a certain precendence on what setting has priority over the |
235 | Of course there is a certain precedence on what setting has priority over the |
210 | USE setting. You don't want to declare <c>USE="-java"</c> only to see that |
236 | USE setting. You don't want to declare <c>USE="-java"</c> only to see that |
211 | <c>java</c> is declared anyway. The precedence for the USE setting is, ordered |
237 | <c>java</c> is still used due to a setting that has a higher priority. |
|
|
238 | The precedence for the USE setting is, ordered |
212 | by priority (first has lowest priority): |
239 | by priority (first has lowest priority): |
213 | </p> |
240 | </p> |
214 | |
241 | |
215 | <ol> |
242 | <ol> |
216 | <li> |
243 | <li> |
217 | Default USE setting declared in <path>/etc/make.profile/make.defaults</path> |
244 | Default USE setting declared in the <path>make.defaults</path> files part of |
218 | </li> |
245 | your profile |
219 | <li> |
|
|
220 | Inherited USE setting if a package from |
|
|
221 | <path>/etc/make.profile/use.defaults</path> is installed |
|
|
222 | </li> |
246 | </li> |
223 | <li> |
247 | <li> |
224 | User-defined USE setting in <path>/etc/make.conf</path> |
248 | User-defined USE setting in <path>/etc/make.conf</path> |
225 | </li> |
249 | </li> |
226 | <li> |
250 | <li> |
|
|
251 | User-defined USE setting in <path>/etc/portage/package.use</path> |
|
|
252 | </li> |
|
|
253 | <li> |
227 | User-defined USE setting as environment variable |
254 | User-defined USE setting as environment variable |
228 | </li> |
255 | </li> |
229 | </ol> |
256 | </ol> |
230 | |
257 | |
231 | <p> |
258 | <p> |
232 | To view the final <c>USE</c> setting as seen by Portage, run <c>emerge info</c>. |
259 | To view the final <c>USE</c> setting as seen by Portage, run <c>emerge |
233 | This will list all relevant variables (including the <c>USE</c> variable) with |
260 | --info</c>. This will list all relevant variables (including the <c>USE</c> |
234 | the content used by Portage. |
261 | variable) with the content used by Portage. |
235 | </p> |
262 | </p> |
236 | |
263 | |
237 | <pre caption="Running emerge info"> |
264 | <pre caption="Running emerge --info"> |
238 | # <i>emerge info</i> |
265 | # <i>emerge --info</i> |
|
|
266 | </pre> |
|
|
267 | |
|
|
268 | </body> |
|
|
269 | </subsection> |
|
|
270 | <subsection> |
|
|
271 | <title>Adapting your Entire System to New USE Flags</title> |
|
|
272 | <body> |
|
|
273 | |
|
|
274 | <p> |
|
|
275 | If you have altered your USE flags and you wish to update your entire system to |
|
|
276 | use the new USE flags, use <c>emerge</c>'s <c>--newuse</c> option: |
239 | </pre> |
277 | </p> |
|
|
278 | |
|
|
279 | <pre caption="Rebuilding your entire system"> |
|
|
280 | # <i>emerge --update --deep --newuse world</i> |
|
|
281 | </pre> |
|
|
282 | |
|
|
283 | <p> |
|
|
284 | Next, run Portage's depclean to remove the conditional dependencies that |
|
|
285 | were emerged on your "old" system but that have been obsoleted by the new USE |
|
|
286 | flags. |
|
|
287 | </p> |
|
|
288 | |
|
|
289 | <warn> |
|
|
290 | Running <c>emerge --depclean</c> is a dangerous operation and should be handled |
|
|
291 | with care. Double-check the provided list of "obsoleted" packages to make sure |
|
|
292 | it doesn't remove packages you need. In the following example we add the |
|
|
293 | <c>-p</c> switch to have depclean only list the packages without removing them. |
|
|
294 | </warn> |
|
|
295 | |
|
|
296 | <pre caption="Removing obsoleted packages"> |
|
|
297 | # <i>emerge -p --depclean</i> |
|
|
298 | </pre> |
|
|
299 | |
|
|
300 | <p> |
|
|
301 | When depclean has finished, run <c>revdep-rebuild</c> to rebuild the |
|
|
302 | applications that are dynamically linked against shared objects provided by |
|
|
303 | possibly removed packages. <c>revdep-rebuild</c> is part of the |
|
|
304 | <c>gentoolkit</c> package; don't forget to emerge it first. |
|
|
305 | </p> |
|
|
306 | |
|
|
307 | <pre caption="Running revdep-rebuild"> |
|
|
308 | # <i>revdep-rebuild</i> |
|
|
309 | </pre> |
|
|
310 | |
|
|
311 | <p> |
|
|
312 | When all this is accomplished, your system is using the new USE flag settings. |
|
|
313 | </p> |
240 | |
314 | |
241 | </body> |
315 | </body> |
242 | </subsection> |
316 | </subsection> |
243 | </section> |
317 | </section> |
244 | <section> |
318 | <section> |
… | |
… | |
246 | <subsection> |
320 | <subsection> |
247 | <title>Viewing available USE-flags</title> |
321 | <title>Viewing available USE-flags</title> |
248 | <body> |
322 | <body> |
249 | |
323 | |
250 | <p> |
324 | <p> |
251 | In the next chapter on <uri link="?part=2&chap=2">Portage and Software</uri> |
|
|
252 | we will explain how to manage your installed software and how to work with |
|
|
253 | <c>emerge</c>. However, we will give you a primer on <c>emerge</c> by showing |
|
|
254 | you how to view what USE-flags a package uses. |
|
|
255 | </p> |
|
|
256 | |
|
|
257 | <p> |
|
|
258 | Let us take the example of <c>mozilla</c>: what USE-flags does it listen to? To |
325 | Let us take the example of <c>mozilla</c>: what USE-flags does it listen to? To |
259 | find out, we use <c>emerge</c> with the <c>--pretend</c> (don't really do |
326 | find out, we use <c>emerge</c> with the <c>--pretend</c> and <c>--verbose</c> |
260 | anything) and <c>--verbose</c> (give more output) options: |
327 | options: |
261 | </p> |
328 | </p> |
262 | |
329 | |
263 | <pre caption="Viewing the used USE-flags"> |
330 | <pre caption="Viewing the used USE-flags"> |
264 | # <i>emerge --pretend --verbose mozilla</i> |
331 | # <i>emerge --pretend --verbose mozilla</i> |
265 | These are the packages that I would merge, in order: |
332 | These are the packages that I would merge, in order: |
266 | |
333 | |
267 | Calculating dependencies ...done! |
334 | Calculating dependencies ...done! |
268 | [ebuild N ] net-www/mozilla-1.5-r1 +java +crypt -ipv6 -gtk2 +ssl +ldap |
335 | [ebuild R ] www-client/mozilla-1.7.12-r2 USE="crypt gnome java mozsvg ssl |
269 | +gnome -debug +mozcalendar -mozaccess -mozxmlterm -moznoirc -moznomail |
336 | truetype xprint -debug -ipv6 -ldap -mozcalendar -mozdevelop -moznocompose |
270 | -moznocompose -moznoxft |
337 | -moznoirc -moznomail -moznoxft -postgres -xinerama" 0 kB |
271 | </pre> |
338 | </pre> |
272 | |
339 | |
273 | <p> |
340 | <p> |
274 | <c>emerge</c> isn't the only tool for this job. In fact, we have a tool |
341 | <c>emerge</c> isn't the only tool for this job. In fact, we have a tool |
275 | dedicated to package information called <c>etcat</c> which resides in the |
342 | dedicated to package information called <c>equery</c> which resides in the |
276 | <c>gentoolkit</c> package. First, install <c>gentoolkit</c>: |
343 | <c>gentoolkit</c> package. First, install <c>gentoolkit</c>: |
277 | </p> |
344 | </p> |
278 | |
345 | |
279 | <pre caption="Installing gentoolkit"> |
346 | <pre caption="Installing gentoolkit"> |
280 | # <i>emerge --usepkg gentoolkit</i> |
347 | # <i>emerge gentoolkit</i> |
281 | </pre> |
348 | </pre> |
282 | |
349 | |
283 | <p> |
350 | <p> |
284 | Now run <c>etcat</c> with the <c>uses</c> argument to view the USE-flags of a |
351 | Now run <c>equery</c> with the <c>uses</c> argument to view the USE-flags of a |
285 | certain package. For instance, for the <c>gnumeric</c> package: |
352 | certain package. For instance, for the <c>gnumeric</c> package: |
286 | </p> |
353 | </p> |
287 | |
354 | |
288 | <pre caption="Using etcat to view used USE-flags"> |
355 | <pre caption="Using equery to view used USE-flags"> |
289 | # <i>etcat uses gnumeric</i> |
356 | # <i>equery uses =gnumeric-1.6.3 -a</i> |
|
|
357 | [ Searching for packages matching =gnumeric-1.6.3... ] |
290 | [ Colour Code : <i>set</i> <comment>unset</comment> ] |
358 | [ Colour Code : <comment>set</comment> <i>unset</i> ] |
291 | [ Legend : (U) Col 1 - Current USE flags ] |
359 | [ Legend : Left column (U) - USE flags from make.conf ] |
292 | [ : (I) Col 2 - Installed With USE flags ] |
360 | [ : Right column (I) - USE flags packages was installed with ] |
293 | |
|
|
294 | U I [ Found these USE variables in : app-office/gnumeric-1.2.0 ] |
361 | [ Found these USE variables for app-office/gnumeric-1.6.3 ] |
295 | - - <comment>libgda</comment> : Adds GNU Data Access (CORBA wrapper) support for gnumeric |
362 | U I |
296 | - - <comment>gnomedb</comment> : unknown |
363 | - - <i>debug</i> : Tells configure and the makefiles to build for debugging. |
|
|
364 | Effects vary across packages, but generally it will at |
|
|
365 | least add -g to CFLAGS. Remember to set FEATURES=nostrip too |
|
|
366 | - - <i>gnome</i> : Adds GNOME support |
297 | + + <i>python</i> : Adds support/bindings for the Python language |
367 | + + <comment>python</comment> : Adds support/bindings for the Python language |
298 | + + <i>bonobo</i> : Adds support for gnome-base/bonobo (Gnome CORBA interfaces) |
368 | - - <i>static</i> : !!do not set this during bootstrap!! Causes binaries to be |
|
|
369 | statically linked instead of dynamically |
299 | </pre> |
370 | </pre> |
300 | |
371 | |
301 | </body> |
372 | </body> |
302 | </subsection> |
373 | </subsection> |
303 | </section> |
374 | </section> |